/[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 671 by bh, Tue Apr 15 18:09:47 2003 UTC revision 2212 by bh, Mon May 17 15:47:57 2004 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003, 2004 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 22  from distutils.core import setup, Extens Line 22  from distutils.core import setup, Extens
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 32  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 52  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 64  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 75  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:\wx240"      wx_prefix = r"d:\cygwin\home\user\projects\thuban\wxPython-2.4.0.7"
93      wx_inc = [os.path.join(wx_prefix, 'lib', 'mswdllh'),      wx_inc = [os.path.join(wx_prefix, 'lib', 'mswdllh'),
94                os.path.join(wx_prefix, "include")]                os.path.join(wx_prefix, "include")]
95      wx_lib = [os.path.join(wx_prefix, "lib")]      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.4.0, you probably      # Unless you use a wxPython version other than 2.4.0, you probably
# Line 112  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 130  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 = ["wxmsw24h"]      wx_cs_params[CS_LIBS] = ["wxmsw24h"] \
154                          + ['kernel32', 'user32', 'gdi32', 'comdlg32',
     wx_libs = wx_libs + ['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 164  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 223  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 243  extensions.append(Extension("Lib.shptree Line 275  extensions.append(Extension("Lib.shptree
275  extensions.append(Extension("Lib.dbflibc",  extensions.append(Extension("Lib.dbflibc",
276                              [ext_dir + "/pyshapelib/dbflib_wrap.c",                              [ext_dir + "/pyshapelib/dbflib_wrap.c",
277                               shp_dir + "/dbfopen.c"],                               shp_dir + "/dbfopen.c"],
278                              include_dirs = [shp_dir]))                              include_dirs = [shp_dir],
279                                define_macros = [("HAVE_UPDATE_HEADER", "1")]))
280  for name in ("shapelib", "dbflib"):  for name in ("shapelib", "dbflib"):
281      py_modules.append(ext_dir + "/pyshapelib/" + name)      py_modules.append(ext_dir + "/pyshapelib/" + name)
282    
# Line 264  py_modules.append(ext_dir + "/pyprojecti Line 297  py_modules.append(ext_dir + "/pyprojecti
297    
298  data_files = []  data_files = []
299    
300  # bitmaps  # Resources
301  for d, pattern in [("Resources/Bitmaps", "Resources/Bitmaps/*.xpm"),  for d, patterns in [("Resources/Bitmaps",
302                     ("Resources/Locale", "Resources/Locale/*/LC_MESSAGES/*.mo")                      ("Resources/Bitmaps/*.xpm",)),
303                       ("Resources/Projections",
304                        ("Resources/Projections/*.proj",)),
305                       ("Resources/XML",
306                        ("Resources/XML/*.dtd",)),
307                       ("Extensions/importAPR/samples",
308                        ("Extensions/importAPR/samples/README",
309                         "Extensions/importAPR/samples/*.apr")),
310                     ]:                     ]:
311      data_files.append((d, glob.glob(pattern)))      for pattern in patterns:
312            data_files.append((d, glob.glob(pattern)))
313    if os.path.isdir("Resources/Locale"):
314        for d in os.listdir("Resources/Locale"):
315            data_files.append(("Resources/Locale/" + d +"/LC_MESSAGES",
316                               ["Resources/Locale/"+ d +"/LC_MESSAGES/thuban.mo"]))
317    
318  #  #
319  #       Command definitions  #       Command definitions
# Line 605  class ThubanInstall(install): Line 650  class ThubanInstall(install):
650                           ("extra-files", None,                           ("extra-files", None,
651                            "List of filenames or (src, dest) pairs describing"                            "List of filenames or (src, dest) pairs describing"
652                            " extra files to install "                            " extra files to install "
653                            "(can only be set from witin setup.py"),                            "(can only be set from within setup.py"),
654    
655                           ("create-init-module=", None,                           ("create-init-module=", None,
656                            "If true, create a module in the site-packages"                            "If true, create a module in the site-packages"
# Line 750  class ThubanInstall(install): Line 795  class ThubanInstall(install):
795    
796  bdist_rpm_prep_script = '''  bdist_rpm_prep_script = '''
797  %setup  %setup
798  cp extensions/pyshapelib/{README,README.pyshapelib}  cp libraries/pyshapelib/{README,README.pyshapelib}
799  cp extensions/pyshapelib/{COPYING,COPYING.pyshapelib}  cp libraries/pyshapelib/{COPYING,COPYING.pyshapelib}
800  cp extensions/pyprojection/{LICENSE,LICENSE.pyprojection}  cp libraries/pyprojection/{LICENSE,LICENSE.pyprojection}
801  '''  '''
802    
803  bdist_rpm_build_script = '''  bdist_rpm_build_script = '''
# Line 1022  class thuban_build_docs(Command): Line 1067  class thuban_build_docs(Command):
1067      def run(self, install_options = None):      def run(self, install_options = None):
1068          self.spawn(["happydoc", "-d./Doc", "./Thuban"])          self.spawn(["happydoc", "-d./Doc", "./Thuban"])
1069    
1070    class thuban_build_ext(build_ext):
1071    
1072        """Extend the build_ext command to optionally include the
1073        GDAL extension.
1074        """
1075    
1076        user_options = build_ext.user_options[:]
1077        user_options.extend([("with-gdal", None, "Include GDAL support."),
1078                             ("without-gdal", None, "Don't include GDAL support.")])
1079    
1080        boolean_options = ["with-gdal"]
1081        negative_opt = {'without-gdal' : 'with-gdal'}
1082    
1083        def initialize_options(self):
1084            self.with_gdal = True
1085            build_ext.initialize_options(self)
1086    
1087        def finalize_options(self):
1088            build_ext.finalize_options(self)
1089            if self.with_gdal and include_gdal:
1090                self.extensions.append(Extension("Lib.gdalwarp",
1091                                    [ext_dir + "/thuban/gdalwarp.cpp",
1092                                    ext_dir + "/thuban/cpl_mfile.cpp",
1093                                    ext_dir + "/thuban/bmpdataset.cpp"],
1094                                    include_dirs = gdal_cs_params[CS_INCDIRS] +
1095                                                   [ext_dir + "/thuban/"],
1096                                    define_macros = gdal_cs_params[CS_DEFS],
1097                                    library_dirs = gdal_cs_params[CS_LIBDIRS],
1098                                    libraries = gdal_cs_params[CS_LIBS]))
1099    
1100        def run(self, install_options = None):
1101            build_ext.run(self)
1102    
1103  #  #
1104  #   Run the script  #   Run the script
1105  #  #
1106    
   
1107  long_description = """\  long_description = """\
1108  Thuban is a viewer for geographic data written in Python  Thuban is a viewer for geographic data written in Python
1109  """  """
1110    
1111  setup(name = "Thuban",  setup(name = "Thuban",
1112        version = "0.2.0",        version = "1.0.0",
1113        description = "Geographic data viewer",        description = "Geographic data viewer",
1114        long_description = long_description,        long_description = long_description,
1115        licence = "GPL",        license = "GPL",
1116        author = "Intevation GmbH",        author = "Intevation GmbH",
1117        author_email = "[email protected]",        author_email = "[email protected]",
1118        url = "http://thuban.intevation.de/",        url = "http://thuban.intevation.de/",
1119    
1120        scripts = ["thuban.py"],        scripts = ["thuban.py"],
1121        packages = ["Thuban", "Thuban.Lib", "Thuban.Model", "Thuban.UI"],        packages = ["Thuban", "Thuban.Lib", "Thuban.Model", "Thuban.UI",
1122                      "Extensions", "Extensions.gns2shp", "Extensions.wms",
1123                      "Extensions.importAPR", "Extensions.profiling"],
1124        ext_modules = extensions,        ext_modules = extensions,
1125        py_modules = py_modules,        py_modules = py_modules,
1126        data_files = data_files,        data_files = data_files,
# Line 1075  setup(name = "Thuban", Line 1154  setup(name = "Thuban",
1154                    "bdist_rpm": thuban_bdist_rpm,                    "bdist_rpm": thuban_bdist_rpm,
1155                    "bdist_inno": thuban_bdist_inno,                    "bdist_inno": thuban_bdist_inno,
1156                    "data_dist": data_dist,                    "data_dist": data_dist,
1157                    "build_docs": thuban_build_docs                    "build_docs": thuban_build_docs,
1158                      "build_ext": thuban_build_ext
1159                    })                    })
1160    
1161    

Legend:
Removed from v.671  
changed lines
  Added in v.2212

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26