/[thuban]/branches/WIP-pyshapelib-bramz/setup.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/setup.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 253 by bh, Wed Aug 14 13:38:45 2002 UTC revision 2002 by bh, Mon Dec 1 19:45:10 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 17  __version__ = "$Revision$" Line 17  __version__ = "$Revision$"
17    
18  import os  import os
19  from types import TupleType  from types import TupleType
20    import glob
21  from distutils.core import setup, Extension, Command  from distutils.core import setup, Extension, Command
22  from distutils.command.install import install, INSTALL_SCHEMES, subst_vars  from distutils.command.install import install, INSTALL_SCHEMES, subst_vars
23  from distutils.command.build_py import build_py  from distutils.command.build_py import build_py
24  from distutils.command.bdist_rpm import bdist_rpm  from distutils.command.bdist_rpm import bdist_rpm
25    from distutils.command.build_ext import build_ext
26  from distutils.file_util import write_file  from distutils.file_util import write_file
27  from distutils.filelist import FileList  from distutils.filelist import FileList
28  from distutils.util import convert_path, change_root  from distutils.util import convert_path, change_root
# Line 31  import distutils Line 33  import distutils
33  from string import split  from string import split
34  import string  import string
35    
36    # config script parameter list indices
37    CS_DEFS, CS_INCDIRS, CS_LIBDIRS, CS_LIBS, CS_NUM_PARAMS = range(5)
38    
39    # support for gdal is on by default, but under posix we try to
40    # detect it anyway. Set this to False to disable GDAL.
41    include_gdal = True
42    
43  if os.name == "posix":  if os.name == "posix":
44      ###################################################################      ###################################################################
45      # Posix configuration. Adapt this if you're running some kind of      # Posix configuration. Adapt this if you're running some kind of
# Line 51  if os.name == "posix": Line 60  if os.name == "posix":
60      # with the install command's --prefix option.      # with the install command's --prefix option.
61      #      #
62      # Note that there's a separate prefix option for the bdist_rpm      # Note that there's a separate prefix option for the bdist_rpm
63      # command completely independend of this one.      # command completely independent of this one.
64      prefix = "/usr/local/"      prefix = "/usr/local/"
65    
66      # Whether to create the thubaninit module. You can override this      # Whether to create the thubaninit module. You can override this
# Line 63  if os.name == "posix": Line 72  if os.name == "posix":
72      # flags      # flags
73      wx_config_script = "wx-config"      wx_config_script = "wx-config"
74      # These lists will be filled automatically below      # These lists will be filled automatically below
75      wx_defs = []      wx_cs_params = [[] for i in range(CS_NUM_PARAMS)]
76      wx_incdirs = []  
77      wx_libdirs = []      gdal_config_script = "gdal-config"
78      wx_libs = []      gdal_cs_params = [[] for i in range(CS_NUM_PARAMS)]
79    
80  elif os.name == "nt":  elif os.name == "nt":
81      #################################################################      #################################################################
# Line 74  elif os.name == "nt": Line 83  elif os.name == "nt":
83      #      #
84            
85      # Directories where Proj4 is installed      # Directories where Proj4 is installed
86      proj4_prefix = r"D:\cygwin\home\user\proj-4.4.3\src"      proj4_prefix = r"D:\cygwin\home\user\projects\thuban\proj-4.4.7\src"
87      proj4_incdir =  proj4_prefix      proj4_incdir =  proj4_prefix
88      proj4_libdir =  proj4_prefix      proj4_libdir =  proj4_prefix
89      proj4_lib = "proj_i"      proj4_lib = "proj_i"
90    
91      # Define include and lib directories for wxWindows and      # Define include and lib directories for wxWindows and
92      wx_prefix = r"D:\wx230"      wx_prefix = r"d:\cygwin\home\user\projects\thuban\wxPython-2.4.0.7"
93      wx_inc =  os.path.join(wx_prefix, "include")      wx_inc = [os.path.join(wx_prefix, 'lib', 'mswdllh'),
94      wx_lib =  os.path.join(wx_prefix, "lib")                os.path.join(wx_prefix, "include")]
95        wx_lib = [os.path.join(wx_prefix, "lib")]
96    
97        # Define include and lib directories for GDAL
98        gdal_prefix = r"D:\cygwin\home\user\projects\thuban\gdal-1.1.8"
99        gdal_inc = [os.path.join(gdal_prefix, 'alg'),
100                    os.path.join(gdal_prefix, 'ogr'),
101                    os.path.join(gdal_prefix, 'port'),
102                    os.path.join(gdal_prefix, 'core')]
103        gdal_lib = [gdal_prefix]
104    
105      #      #
106      # Unless you use a wxPython version other than 2.3.1, you probably      # Unless you use a wxPython version other than 2.4.0, you probably
107      # shouldn't have to modify anything below here      # shouldn't have to modify anything below here
108      ##################################################################      ##################################################################
109            
# Line 109  elif os.name == "nt": Line 127  elif os.name == "nt":
127      # there's no config script.      # there's no config script.
128      wx_config_script = ""      wx_config_script = ""
129            
130        wx_cs_params = [[] for i in range(CS_NUM_PARAMS)]
131    
132      # the values of wx_defs and wx_libs. copied from the wxPython      # the values of wx_defs and wx_libs. copied from the wxPython
133      # setup.py      # setup.py
134      wx_defs = [ ('WIN32', None),        # Some of these are no longer      wx_cs_params[CS_DEFS] = \
135                  [ ('WIN32', None),        # Some of these are no longer
136                  ('__WIN32__', None),    # necessary.  Anybody know which?                  ('__WIN32__', None),    # necessary.  Anybody know which?
137                  ('_WINDOWS', None),                  ('_WINDOWS', None),
138                  ('__WINDOWS__', None),                  ('__WINDOWS__', None),
# Line 127  elif os.name == "nt": Line 148  elif os.name == "nt":
148                  ('WXP_USE_THREAD', '1'),                  ('WXP_USE_THREAD', '1'),
149                  ]                  ]
150            
151      wx_incdirs = [wx_inc]      wx_cs_params[CS_INCDIRS] = wx_inc
152      wx_libdirs = [wx_lib]      wx_cs_params[CS_LIBDIRS] = wx_lib
153      wx_libs = ["wx23_1h"]      wx_cs_params[CS_LIBS] = ["wxmsw24h"] \
154      wx_libs = wx_libs + ['kernel32', 'user32', 'gdi32', 'comdlg32',                        + ['kernel32', 'user32', 'gdi32', 'comdlg32',
155                           'winspool', 'winmm', 'shell32', 'oldnames',                           'winspool', 'winmm', 'shell32', 'oldnames',
156                           'comctl32', 'ctl3d32', 'odbc32', 'ole32', 'oleaut32',                           'comctl32', 'ctl3d32', 'odbc32', 'ole32', 'oleaut32',
157                           'uuid', 'rpcrt4', 'advapi32', 'wsock32']                           'uuid', 'rpcrt4', 'advapi32', 'wsock32']
158    
159        gdal_config_script = ""
160        gdal_cs_params = [[] for i in range(CS_NUM_PARAMS)]
161    
162        gdal_cs_params[CS_INCDIRS] = gdal_inc
163        gdal_cs_params[CS_LIBDIRS] = gdal_lib
164        gdal_cs_params[CS_LIBS] = ["gdal_i"]
165    
166  else:  else:
167      raise RuntimeError("Unsupported platform " + os.name)      raise RuntimeError("Unsupported platform " + os.name)
168    
# Line 160  def run_script(cmdline): Line 189  def run_script(cmdline):
189      return result      return result
190    
191    
192  def run_wx_script(command):  def run_cs_script(command, store):
193      # first, determine the C++ preprocessor flags Use --cflags here      # first, determine the C++ preprocessor flags Use --cflags here
194      # because it seems that older version don't have --cxxflags and      # because it seems that older version don't have --cxxflags and
195      # newer ones return the same result for both      # newer ones return the same result for both
196      flags = run_script(command + ' --cflags ')      flags = run_script(command + ' --cflags ')
197      if flags is None:      if flags is None:
198          return 0          return False
199      for flag in split(flags):      for flag in split(flags):
200          start = flag[:2]          start = flag[:2]
201          value = flag[2:]          value = flag[2:]
202          if start == "-I":          if start == "-I":
203              wx_incdirs.append(value)              store[CS_INCDIRS].append(value)
204          elif start == "-D":          elif start == "-D":
205              wx_defs.append((value, None))              store[CS_DEFS].append((value, None))
206    
207      # determine the library flags      # determine the library flags
208      flags = run_script(command + ' --libs')      flags = run_script(command + ' --libs')
209      if flags is None:      if flags is None:
210          return 0          return False
211      for flag in split(flags):      for flag in split(flags):
212          start = flag[:2]          start = flag[:2]
213          value = flag[2:]          value = flag[2:]
214          if start == "-L":          if start == "-L":
215              wx_libdirs.append(value)              store[CS_LIBDIRS].append(value)
216          elif start == "-l":          elif start == "-l":
217              wx_libs.append(value)              store[CS_LIBS].append(value)
218    
219        return True
220    
221  if wx_config_script:  if wx_config_script:
222      # if there's a wx config script, run it to determine the configuration      # if there's a wx config script, run it to determine the configuration
223      run_wx_script(wx_config_script)      run_cs_script(wx_config_script, wx_cs_params)
       
224    
225    if gdal_config_script:
226        # if there's a gdal config script, run it to determine the configuration
227        include_gdal = include_gdal \
228                       and run_cs_script(gdal_config_script, gdal_cs_params)
229    
230  #  #
231  # Define some extension and python modules  # Define some extension and python modules
232  #  #
233  # The C-extension names are prefixed woth "Lib." so they get put into  # The C-extension names are prefixed with "Lib." so they get put into
234  # the Lib/ subdirectory. Lib/ is not really a package but distutils  # the Lib/ subdirectory. Lib/ is not really a package but distutils
235  # doesn't care  # doesn't care
236    
237  # subdirectory containing the extensions  # subdirectory containing the distutil extensions
238  ext_dir = "extensions"  ext_dir = "libraries"
239    
240  # subdirectory with some shapelib files  # subdirectory with some shapelib files
241  shp_dir = ext_dir + "/shapelib"  shp_dir = ext_dir + "/shapelib"
# Line 219  extensions.append(Extension("Lib.wxproj" Line 253  extensions.append(Extension("Lib.wxproj"
253                              [ext_dir + "/thuban/wxproj.cpp"],                              [ext_dir + "/thuban/wxproj.cpp"],
254                              include_dirs = ([shp_dir, proj4_incdir,                              include_dirs = ([shp_dir, proj4_incdir,
255                                               ext_dir + "/pyshapelib/"]                                               ext_dir + "/pyshapelib/"]
256                                              + wx_incdirs),                                              + wx_cs_params[CS_INCDIRS]),
257                              define_macros = wx_defs,                              define_macros = wx_cs_params[CS_DEFS],
258                              library_dirs = [proj4_libdir] + wx_libdirs,                              library_dirs = [proj4_libdir] +
259                              libraries = [proj4_lib] + wx_libs))                                             wx_cs_params[CS_LIBDIRS],
260                                libraries = [proj4_lib] + wx_cs_params[CS_LIBS]))
261    
262    
263  #  #
264  # shapelib wrappers are also distributed with thuban  # shapelib wrappers are also distributed with thuban
# Line 260  py_modules.append(ext_dir + "/pyprojecti Line 296  py_modules.append(ext_dir + "/pyprojecti
296    
297  data_files = []  data_files = []
298    
299  # bitmaps  # Resources
300  dir = "Resources/Bitmaps"  for d, pattern in [("Resources/Bitmaps", "Resources/Bitmaps/*.xpm"),
301  bitmaps = []                     ("Resources/Projections", "Resources/Projections/*.proj"),
302  for file in os.listdir(os.path.join("Resources", "Bitmaps")):                     ("Resources/XML", "Resources/XML/*.dtd")]:
303      if string.lower(file[-4:]) == ".xpm":      data_files.append((d, glob.glob(pattern)))
304          bitmaps.append(dir + '/' +  file)  if os.path.isdir("Resources/Locale"):
305  data_files.append((dir, bitmaps))      for d in os.listdir("Resources/Locale"):
306            data_files.append(("Resources/Locale/" + d +"/LC_MESSAGES",
307                               ["Resources/Locale/"+ d +"/LC_MESSAGES/thuban.mo"]))
308    
309  #  #
310  #       Command definitions  #       Command definitions
# Line 488  class thuban_build_py(build_py): Line 526  class thuban_build_py(build_py):
526      distribution.      distribution.
527      """      """
528    
529        # FIXME: When Thuban can rely on Python 2.3 as the oldest supported
530        # Python release we don't need to override the run and
531        # find_all_modules methods anymore. distutils will allow both python
532        # modules and packages starting with 2.3.
533    
534      def run(self):      def run(self):
535          """The same the as the original in build_py revision 1.33 except          """The same the as the original in build_py revision 1.33 except
536          that this allows both packages and modules to be in one          that this allows both packages and modules to be in one
# Line 598  class ThubanInstall(install): Line 641  class ThubanInstall(install):
641                           ("extra-files", None,                           ("extra-files", None,
642                            "List of filenames or (src, dest) pairs describing"                            "List of filenames or (src, dest) pairs describing"
643                            " extra files to install "                            " extra files to install "
644                            "(can only be set from witin setup.py"),                            "(can only be set from within setup.py"),
645    
646                           ("create-init-module=", None,                           ("create-init-module=", None,
647                            "If true, create a module in the site-packages"                            "If true, create a module in the site-packages"
# Line 671  class ThubanInstall(install): Line 714  class ThubanInstall(install):
714                  src, dest = item                  src, dest = item
715              else:              else:
716                  src = dest = item                  src = dest = item
717              self.copy_file(convert_path(src),              self.copy_file(convert_path(src),
718                             os.path.join(self.root, convert_path(dest)))                             os.path.join(self.root, convert_path(dest)))
719    
720          if os.name == "posix" and self.do_symlink:          if os.name == "posix" and self.do_symlink:
# Line 691  class ThubanInstall(install): Line 734  class ThubanInstall(install):
734              initfilename = self.thuban_init_filename()              initfilename = self.thuban_init_filename()
735              if self.root:              if self.root:
736                  initfilename = change_root(self.root, initfilename)                  initfilename = change_root(self.root, initfilename)
737              contents = thubaninit_contents(repr(self.install_lib_orig))              contents = thubaninit_contents(self.install_lib_orig)
738              self.mkpath(os.path.dirname(initfilename))              self.mkpath(os.path.dirname(initfilename))
739              self.execute(write_file, (initfilename, contents),              self.execute(write_file, (initfilename, contents),
740                           "Create %s" % initfilename)                           "Create %s" % initfilename)
# Line 743  class ThubanInstall(install): Line 786  class ThubanInstall(install):
786    
787  bdist_rpm_prep_script = '''  bdist_rpm_prep_script = '''
788  %setup  %setup
789  cp extensions/pyshapelib/{README,README.pyshapelib}  cp libraries/pyshapelib/{README,README.pyshapelib}
790  cp extensions/pyshapelib/{COPYING,COPYING.pyshapelib}  cp libraries/pyshapelib/{COPYING,COPYING.pyshapelib}
791  cp extensions/pyprojection/{LICENSE,LICENSE.pyprojection}  cp libraries/pyprojection/{LICENSE,LICENSE.pyprojection}
792    '''
793    
794    bdist_rpm_build_script = '''
795    env PATH="$PATH:%(prefix)s/lib/wxPython/bin:/usr/lib/wxPython/bin" CFLAGS="$RPM_OPT_FLAGS" %(python)s setup.py build
796  '''  '''
797    
798  bdist_rpm_install_script = '''  bdist_rpm_install_script = '''
# Line 753  bdist_rpm_install_script = ''' Line 800  bdist_rpm_install_script = '''
800     --prefix=%(prefix)s     --prefix=%(prefix)s
801  '''  '''
802    
803        
804  class thuban_bdist_rpm(bdist_rpm):  class thuban_bdist_rpm(bdist_rpm):
805    
806      """Thuban specific RPM distribution command"""      """Thuban specific RPM distribution command"""
# Line 771  class thuban_bdist_rpm(bdist_rpm): Line 818  class thuban_bdist_rpm(bdist_rpm):
818          # scripts such as the python interpreter to use are only known          # scripts such as the python interpreter to use are only known
819          # then.          # then.
820          open("bdist_rpm_prep", "w").close()          open("bdist_rpm_prep", "w").close()
821            open("bdist_rpm_build", "w").close()
822          open("bdist_rpm_install", "w").close()          open("bdist_rpm_install", "w").close()
823          bdist_rpm.initialize_options(self)          bdist_rpm.initialize_options(self)
824    
# Line 778  class thuban_bdist_rpm(bdist_rpm): Line 826  class thuban_bdist_rpm(bdist_rpm):
826          # create the scripts for the spec-file. Now we know the python          # create the scripts for the spec-file. Now we know the python
827          # interpreter to use.          # interpreter to use.
828          open("bdist_rpm_prep", "w").write(bdist_rpm_prep_script)          open("bdist_rpm_prep", "w").write(bdist_rpm_prep_script)
829    
830            build = bdist_rpm_build_script % {"python": self.python,
831                                              "prefix": self.prefix}
832            open("bdist_rpm_build", "w").write(build)
833    
834          install = bdist_rpm_install_script % {"python": self.python,          install = bdist_rpm_install_script % {"python": self.python,
835                                                "prefix": self.prefix}                                                "prefix": self.prefix}
836          open("bdist_rpm_install", "w").write(install)          open("bdist_rpm_install", "w").write(install)
# Line 865  class bdist_inno(Command): Line 918  class bdist_inno(Command):
918          """Execute the command. install_options if given, should be a          """Execute the command. install_options if given, should be a
919          directory of additional options to set in the install step"""          directory of additional options to set in the install step"""
920          # Obviously have to build before we can install          # Obviously have to build before we can install
921    
922          if not self.skip_build:          if not self.skip_build:
923              self.run_command('build')              self.run_command('build')
924    
# Line 887  class bdist_inno(Command): Line 941  class bdist_inno(Command):
941          self.execute(write_file, (iss_file, self.generate_iss()),          self.execute(write_file, (iss_file, self.generate_iss()),
942                       "Create Inno Setup script file %s" % iss_file)                       "Create Inno Setup script file %s" % iss_file)
943    
944          # and invoke          # and invoke
945          if self.run_inno:          if self.run_inno:
946              self.spawn(["iscc", iss_file])              self.spawn(["iscc", iss_file])
947    
# Line 953  class bdist_inno(Command): Line 1007  class bdist_inno(Command):
1007              line = 'Name: "{group}\\%s"; Filename: "%s";' \              line = 'Name: "{group}\\%s"; Filename: "%s";' \
1008                     % (icon.title, icon.install_name)                     % (icon.title, icon.install_name)
1009              iss.append(line)              iss.append(line)
1010                
1011          return iss          return iss
1012    
1013    
# Line 969  class InnoIconItem: Line 1023  class InnoIconItem:
1023          else:          else:
1024              self.install_name = filename              self.install_name = filename
1025    
1026                
1027  class thuban_bdist_inno(bdist_inno):  class thuban_bdist_inno(bdist_inno):
1028    
1029      """Thuban specific Inno Setup stuff"""      """Thuban specific Inno Setup stuff"""
# Line 977  class thuban_bdist_inno(bdist_inno): Line 1031  class thuban_bdist_inno(bdist_inno):
1031      def run(self):      def run(self):
1032          install_options = {          install_options = {
1033              "prefix": ".",              "prefix": ".",
1034                "install_lib": "$base",
1035                "install_data": "$base",
1036              "install_scripts": "$base",              "install_scripts": "$base",
1037              "warn_dir": 0,              "warn_dir": 0,
1038              "extra_files": ["COPYING", "Lib/proj.dll"],              "extra_files": ["COPYING", "Lib/proj.dll"],
# Line 984  class thuban_bdist_inno(bdist_inno): Line 1040  class thuban_bdist_inno(bdist_inno):
1040          # don't make a symlink because we're simulating windows, so          # don't make a symlink because we're simulating windows, so
1041          # that we can generate the iss-file even on Linux          # that we can generate the iss-file even on Linux
1042          install_options["do_symlink"] = 0          install_options["do_symlink"] = 0
1043    
1044          bdist_inno.run(self, install_options)          bdist_inno.run(self, install_options)
1045        
1046                class thuban_build_docs(Command):
1047    
1048        """Command to generate documentation from source code."""
1049    
1050        description = "Generate documentation."
1051    
1052        user_options = []
1053    
1054        def initialize_options(self): pass
1055    
1056        def finalize_options(self): pass
1057    
1058        def run(self, install_options = None):
1059            self.spawn(["happydoc", "-d./Doc", "./Thuban"])
1060    
1061    class thuban_build_ext(build_ext):
1062    
1063        """Extend the build_ext command to optionally include the
1064        GDAL extension.
1065        """
1066    
1067        user_options = build_ext.user_options[:]
1068        user_options.extend([("with-gdal", None, "Include GDAL support."),
1069                             ("without-gdal", None, "Don't include GDAL support.")])
1070    
1071        boolean_options = ["with-gdal"]
1072        negative_opt = {'without-gdal' : 'with-gdal'}
1073    
1074        def initialize_options(self):
1075            self.with_gdal = True
1076            build_ext.initialize_options(self)
1077    
1078        def finalize_options(self):
1079            build_ext.finalize_options(self)
1080            if self.with_gdal and include_gdal:
1081                self.extensions.append(Extension("Lib.gdalwarp",
1082                                    [ext_dir + "/thuban/gdalwarp.cpp",
1083                                    ext_dir + "/thuban/cpl_mfile.cpp",
1084                                    ext_dir + "/thuban/bmpdataset.cpp"],
1085                                    include_dirs = gdal_cs_params[CS_INCDIRS] +
1086                                                   [ext_dir + "/thuban/"],
1087                                    define_macros = gdal_cs_params[CS_DEFS],
1088                                    library_dirs = gdal_cs_params[CS_LIBDIRS],
1089                                    libraries = gdal_cs_params[CS_LIBS]))
1090    
1091        def run(self, install_options = None):
1092            build_ext.run(self)
1093    
1094  #  #
1095  #   Run the script  #   Run the script
1096  #  #
1097    
   
1098  long_description = """\  long_description = """\
1099  Thuban is a viewer for geographic data written in Python  Thuban is a viewer for geographic data written in Python
1100  """  """
1101    
1102  setup(name = "Thuban",  setup(name = "Thuban",
1103        version = "0.1.3cvs",        version = "1.0rc1",
1104        description = "Geographic data viewer",        description = "Geographic data viewer",
1105        long_description = long_description,        long_description = long_description,
1106        licence = "GPL",        licence = "GPL",
1107        author = "Intevation GmbH",        author = "Intevation GmbH",
1108        author_email = "[email protected]",        author_email = "[email protected]",
1109        url = "http://thuban.intevation.de/",        url = "http://thuban.intevation.de/",
1110    
1111        scripts = ["thuban.py"],        scripts = ["thuban.py"],
# Line 1039  setup(name = "Thuban", Line 1142  setup(name = "Thuban",
1142                    "install": ThubanInstall,                    "install": ThubanInstall,
1143                    "bdist_rpm": thuban_bdist_rpm,                    "bdist_rpm": thuban_bdist_rpm,
1144                    "bdist_inno": thuban_bdist_inno,                    "bdist_inno": thuban_bdist_inno,
1145                    "data_dist": data_dist                    "data_dist": data_dist,
1146                      "build_docs": thuban_build_docs,
1147                      "build_ext": thuban_build_ext
1148                    })                    })
1149    
1150    

Legend:
Removed from v.253  
changed lines
  Added in v.2002

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26