/[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 67 by bh, Thu Oct 18 14:50:21 2001 UTC revision 1238 by jonathan, Wed Jun 18 15:37:14 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001 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  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 43  if os.name == "posix": Line 52  if os.name == "posix":
52      proj4_lib = "proj"      proj4_lib = "proj"
53    
54    
55      # You shpuldn't have to modify anything below here      # You shouldn't have to modify anything below here
56      ###################################################################      ###################################################################
57            
58      # The installation prefix (similar to autoconf's --prefix). This is      # The installation prefix (similar to autoconf's --prefix). This is
59      # only the default value, you can override it on the command line      # only the default value, you can override it on the command line
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
63        # 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
67        # value on the commandline with the --create-init-module to the
68        # install command.
69        create_init_module = 1
70    
71      # On POSIX-systems we run wxgtk-config to determine the C++-compiler      # On POSIX-systems we run wxgtk-config to determine the C++-compiler
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 66  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\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\project\greater\wxPython-2.4.0.4"
93      wx_inc =  os.path.join(wx_prefix, "include")      wx_prefix = r"D:\wx-sources\wxPythonSrc-2.4.0.7"
94      wx_lib =  os.path.join(wx_prefix, "lib")      wx_inc = [os.path.join(wx_prefix, 'lib', 'mswdll'),
95                  os.path.join(wx_prefix, "include")]
96        wx_lib = [os.path.join(wx_prefix, "lib")]
97    
98        # Define include and lib directories for GDAL
99        gdal_prefix = r"D:\cygwin\home\user\build\gdal-1.1.8"
100        gdal_inc = [os.path.join(gdal_prefix, 'alg'),
101                    os.path.join(gdal_prefix, 'ogr'),
102                    os.path.join(gdal_prefix, 'port'),
103                    os.path.join(gdal_prefix, 'core')]
104        gdal_lib = [gdal_prefix]
105    
106      #      #
107      # 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
108      # shouldn't have to modify anything below here      # shouldn't have to modify anything below here
109      ##################################################################      ##################################################################
110            
# Line 86  elif os.name == "nt": Line 113  elif os.name == "nt":
113      # the command line with the install command's --prefix option      # the command line with the install command's --prefix option
114      prefix = r"install"      prefix = r"install"
115    
116        # Whether to create the thubaninit module. You can override this
117        # value on the commandline with the --create-init-module to the
118        # install command. By default we don't create it under NT because we
119        # most often run install only as part of bdist_inno where we can't
120        # really create because it needs information only known at install
121        # time.
122        create_init_module = 0
123    
124      # There doesn't seem to be an easy way to get at the wx compiler      # There doesn't seem to be an easy way to get at the wx compiler
125      # flags, so we define them here. These flags work for us with      # flags, so we define them here. These flags work for us with
126      # wxPython 2.3.1. They may have to be modified for other versions.      # wxPython 2.3.1. They may have to be modified for other versions.
# Line 93  elif os.name == "nt": Line 128  elif os.name == "nt":
128      # there's no config script.      # there's no config script.
129      wx_config_script = ""      wx_config_script = ""
130            
131        wx_cs_params = [[] for i in range(CS_NUM_PARAMS)]
132    
133      # the values of wx_defs and wx_libs. copied from the wxPython      # the values of wx_defs and wx_libs. copied from the wxPython
134      # setup.py      # setup.py
135      wx_defs = [ ('WIN32', None),        # Some of these are no longer      wx_cs_params[CS_DEFS] = \
136                  [ ('WIN32', None),        # Some of these are no longer
137                  ('__WIN32__', None),    # necessary.  Anybody know which?                  ('__WIN32__', None),    # necessary.  Anybody know which?
138                  ('_WINDOWS', None),                  ('_WINDOWS', None),
139                  ('__WINDOWS__', None),                  ('__WINDOWS__', None),
# Line 111  elif os.name == "nt": Line 149  elif os.name == "nt":
149                  ('WXP_USE_THREAD', '1'),                  ('WXP_USE_THREAD', '1'),
150                  ]                  ]
151            
152      wx_incdirs = [wx_inc]      wx_cs_params[CS_INCDIRS] = wx_inc
153      wx_libdirs = [wx_lib]      wx_cs_params[CS_LIBDIRS] = wx_lib
154      wx_libs = ["wx23_1h"]      wx_cs_params[CS_LIBS] = ["wxmsw24"] \
155      wx_libs = wx_libs + ['kernel32', 'user32', 'gdi32', 'comdlg32',                        + ['kernel32', 'user32', 'gdi32', 'comdlg32',
156                           'winspool', 'winmm', 'shell32', 'oldnames',                           'winspool', 'winmm', 'shell32', 'oldnames',
157                           'comctl32', 'ctl3d32', 'odbc32', 'ole32', 'oleaut32',                           'comctl32', 'ctl3d32', 'odbc32', 'ole32', 'oleaut32',
158                           'uuid', 'rpcrt4', 'advapi32', 'wsock32']                           'uuid', 'rpcrt4', 'advapi32', 'wsock32']
159    
160        gdal_config_script = ""
161        gdal_cs_params = [[] for i in range(CS_NUM_PARAMS)]
162    
163        gdal_cs_params[CS_INCDIRS] = gdal_inc
164        gdal_cs_params[CS_LIBDIRS] = gdal_lib
165        gdal_cs_params[CS_LIBS] = ["gdal_i"]
166    
167  else:  else:
168      raise RuntimeError("Unsupported platform " + os.name)      raise RuntimeError("Unsupported platform " + os.name)
169    
# Line 144  def run_script(cmdline): Line 190  def run_script(cmdline):
190      return result      return result
191    
192    
193  def run_wx_script(command):  def run_cs_script(command, store):
194      # first, determine the C++ preprocessor flags Use --cflags here      # first, determine the C++ preprocessor flags Use --cflags here
195      # because it seems that older version don't have --cxxflags and      # because it seems that older version don't have --cxxflags and
196      # newer ones return the same result for both      # newer ones return the same result for both
197      flags = run_script(command + ' --cflags ')      flags = run_script(command + ' --cflags ')
198      if flags is None:      if flags is None:
199          return 0          return False
200      for flag in split(flags):      for flag in split(flags):
201          start = flag[:2]          start = flag[:2]
202          value = flag[2:]          value = flag[2:]
203          if start == "-I":          if start == "-I":
204              wx_incdirs.append(value)              store[CS_INCDIRS].append(value)
205          elif start == "-D":          elif start == "-D":
206              wx_defs.append((value, None))              store[CS_DEFS].append((value, None))
207    
208      # determine the library flags      # determine the library flags
209      flags = run_script(command + ' --libs')      flags = run_script(command + ' --libs')
210      if flags is None:      if flags is None:
211          return 0          return False
212      for flag in split(flags):      for flag in split(flags):
213          start = flag[:2]          start = flag[:2]
214          value = flag[2:]          value = flag[2:]
215          if start == "-L":          if start == "-L":
216              wx_libdirs.append(value)              store[CS_LIBDIRS].append(value)
217          elif start == "-l":          elif start == "-l":
218              wx_libs.append(value)              store[CS_LIBS].append(value)
219    
220        return True
221    
222  if wx_config_script:  if wx_config_script:
223      # 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
224      run_wx_script(wx_config_script)      run_cs_script(wx_config_script, wx_cs_params)
       
225    
226    if gdal_config_script:
227        # if there's a gdal config script, run it to determine the configuration
228        include_gdal = include_gdal \
229                       and run_cs_script(gdal_config_script, gdal_cs_params)
230    
231  #  #
232  # Define some extension and python modules  # Define some extension and python modules
# Line 200  py_modules = [] Line 251  py_modules = []
251  #  #
252    
253  extensions.append(Extension("Lib.wxproj",  extensions.append(Extension("Lib.wxproj",
254                              [ext_dir + "/thuban/wxproj.cpp",                              [ext_dir + "/thuban/wxproj.cpp"],
255                               shp_dir + "/shpopen.c"],                              include_dirs = ([shp_dir, proj4_incdir,
256                              include_dirs = [shp_dir, proj4_incdir] +wx_incdirs,                                               ext_dir + "/pyshapelib/"]
257                              define_macros = wx_defs,                                              + wx_cs_params[CS_INCDIRS]),
258                              library_dirs = [proj4_libdir] + wx_libdirs,                              define_macros = wx_cs_params[CS_DEFS],
259                              libraries = [proj4_lib] + wx_libs))                              library_dirs = [proj4_libdir] +
260                                               wx_cs_params[CS_LIBDIRS],
261                                libraries = [proj4_lib] + wx_cs_params[CS_LIBS]))
262    
263    
264  #  #
265  # shapelib wrappers are also distributed with thuban  # shapelib wrappers are also distributed with thuban
# Line 213  extensions.append(Extension("Lib.wxproj" Line 267  extensions.append(Extension("Lib.wxproj"
267    
268  extensions.append(Extension("Lib.shapelibc",  extensions.append(Extension("Lib.shapelibc",
269                              [ext_dir + "/pyshapelib/shapelib_wrap.c",                              [ext_dir + "/pyshapelib/shapelib_wrap.c",
270                               shp_dir + "/shpopen.c"],                               shp_dir + "/shpopen.c",
271                                 shp_dir + "/shptree.c"],
272                                include_dirs = [shp_dir]))
273    extensions.append(Extension("Lib.shptree",
274                                [ext_dir + "/pyshapelib/shptreemodule.c"],
275                              include_dirs = [shp_dir]))                              include_dirs = [shp_dir]))
276  extensions.append(Extension("Lib.dbflibc",  extensions.append(Extension("Lib.dbflibc",
277                              [ext_dir + "/pyshapelib/dbflib_wrap.c",                              [ext_dir + "/pyshapelib/dbflib_wrap.c",
# Line 240  py_modules.append(ext_dir + "/pyprojecti Line 298  py_modules.append(ext_dir + "/pyprojecti
298  data_files = []  data_files = []
299    
300  # bitmaps  # bitmaps
301  dir = "Resources/Bitmaps"  for d, pattern in [("Resources/Bitmaps", "Resources/Bitmaps/*.xpm"),
302  bitmaps = []                     ("Resources/Locale", "Resources/Locale/*/LC_MESSAGES/*.mo")
303  for file in os.listdir(os.path.join("Resources", "Bitmaps")):                     ]:
304      if string.lower(file[-4:]) == ".xpm":      data_files.append((d, glob.glob(pattern)))
         bitmaps.append(dir + '/' +  file)  
 data_files.append((dir, bitmaps))  
305    
306  #  #
307  #       Command definitions  #       Command definitions
# Line 392  class InstallLocal(Command): Line 448  class InstallLocal(Command):
448      """      """
449    
450      description =\      description =\
451          "Create some symlink so you can run thubanfrom the source directory"          "Create some symlinks so you can run thuban from the source directory"
452    
453      user_options = [      user_options = [
454          ('skip-build', None, "skip the build steps"),          ('skip-build', None, "skip the build steps"),
455            ('create-init-module', None,
456             "Create the thubaninit.py module to ease use of Thuban as a library"),
457            ('dont-create-init-module', None,
458             "Do not create the thubaninit.py module"),
459          ]          ]
460    
461        boolean_options = ["create-init-module"]
462        negative_opt = {'dont-create-init-module' : 'create-init-module'}
463    
464    
465      def initialize_options (self):      def initialize_options (self):
466          self.extensions = None          self.extensions = None
467          self.build_dir = None          self.build_dir = None
468          self.skip_build = None          self.skip_build = None
469            self.create_init_module = None
470    
471      def finalize_options (self):      def finalize_options (self):
472          self.set_undefined_options("install",          self.set_undefined_options("install",
473                                     ("build_lib", "build_dir"),                                     ("build_lib", "build_dir"),
474                                     ('skip_build', 'skip_build'))                                     ('skip_build', 'skip_build'))
475          self.extensions = self.distribution.ext_modules          self.extensions = self.distribution.ext_modules
476            if self.create_init_module is None:
477                # by default we create the init module
478                self.create_init_module = 1
479    
480      def run(self):      def run(self):
481          # Make sure we have built everything we need first          # Make sure we have built everything we need first
# Line 416  class InstallLocal(Command): Line 484  class InstallLocal(Command):
484          # now do the work. Simply link or copy the Lib dir          # now do the work. Simply link or copy the Lib dir
485          libdir = os.path.join(self.build_dir, "Lib")          libdir = os.path.join(self.build_dir, "Lib")
486          if os.name == "posix":          if os.name == "posix":
487              # on posix, just lilnk the Lib dir              # on posix, just link the Lib dir
488              self.link_dir(libdir, "Lib")              self.link_dir(libdir, "Lib")
489          else:          else:
490              self.copy_tree(libdir, "Lib")              self.copy_tree(libdir, "Lib")
491    
492            # create the init module if desired
493            if self.create_init_module:
494                # create the init module
495                initfilename = "thubaninit.py"
496                contents = thubaninit_contents("")
497                self.execute(write_file, (initfilename, contents),
498                             "Create %s" % initfilename)
499    
500      def link_dir(self, src, dest):      def link_dir(self, src, dest):
501          """Create a symbolic link dest pointing to src"""          """Create a symbolic link dest pointing to src"""
502          if self.verbose:          if self.verbose:
# Line 447  class thuban_build_py(build_py): Line 523  class thuban_build_py(build_py):
523      distribution.      distribution.
524      """      """
525    
526        # FIXME: When Thuban can rely on Python 2.3 as the oldest supported
527        # Python release we don't need to override the run and
528        # find_all_modules methods anymore. distutils will allow both python
529        # modules and packages starting with 2.3.
530    
531      def run(self):      def run(self):
532          """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
533          that this allows both packages and modules to be in one          that this allows both packages and modules to be in one
# Line 498  class thuban_build_py(build_py): Line 579  class thuban_build_py(build_py):
579          return modules          return modules
580    
581    
582    thubaninit_contents_start = """
583    # This module was automatically generated by Thuban's install script
584    '''Import this module once per program (best place is probably the file
585    that ends up as your __main__ module) to be able to import Thuban
586    afterwards.
587    
588    Usage:
589    
590    import thubaninit
591    import Thuban
592    '''
593    import sys, os
594    """
595    
596    thubaninit_contents_thubaninitdir = """
597    sys.path.insert(0, %(thubandir)s)
598    """
599    thubaninit_contents_otherdirs = """
600    # Put the Lib dir into the path. The Lib dir contains some extra Python
601    # modules
602    import Thuban
603    thubandir = os.path.join(Thuban.__path__[0], '..')
604    dir = os.path.join(thubandir, "Lib")
605    if os.path.isdir(dir):
606        sys.path.insert(0, dir)
607    """
608    
609    def thubaninit_contents(thubandir):
610        """Return the contents of the the thubaninit file as a list of lines.
611    
612        The parameter thubandir is the parent directory where the Thuban/
613        package or the empty string if the thubaninit file itself will be
614        located in that direcory as well.
615        """
616        contents = thubaninit_contents_start
617        if thubandir:
618            thubandir = repr(thubandir)
619            contents += thubaninit_contents_thubaninitdir % locals()
620        contents += thubaninit_contents_otherdirs
621        return contents.split("\n")
622    
623    
624  class ThubanInstall(install):  class ThubanInstall(install):
625    
# Line 514  class ThubanInstall(install): Line 636  class ThubanInstall(install):
636                          "(default on posix systems and only relevant there)"),                          "(default on posix systems and only relevant there)"),
637    
638                           ("extra-files", None,                           ("extra-files", None,
639                            "List of filenames or (src, dest) pairs describing "                            "List of filenames or (src, dest) pairs describing"
640                            " extra files to install "                            " extra files to install "
641                            "(can only be set from witin setup.py"),                            "(can only be set from within setup.py"),
642    
643                             ("create-init-module=", None,
644                              "If true, create a module in the site-packages"
645                              " directory that tweaks sys.path to let you easily"
646                              " import thuban modules from outside of thuban."),
647                             ("init-module-dir=", None,
648                              "Directory in which to create the init module."
649                              " Defaults to Python's site-packages directory."),
650                           ])                           ])
651    
652      boolean_options = install.boolean_options[:]      boolean_options = install.boolean_options[:]
653      boolean_options.append("do-symlink")      boolean_options.append("do-symlink")
654        boolean_options.append("create-init-module")
655    
656      def initialize_options(self):      def initialize_options(self):
657          self.do_symlink = None          self.do_symlink = None
658          self.extra_files = []          self.extra_files = []
659    
660            # initialize the create_init_module flag from the global
661            # determined at runtime
662            self.create_init_module = create_init_module
663            self.init_module_dir = None
664          install.initialize_options(self)          install.initialize_options(self)
665    
666      def finalize_options(self):      def finalize_options(self):
# Line 534  class ThubanInstall(install): Line 670  class ThubanInstall(install):
670              else:              else:
671                  self.do_symlink = 0                  self.do_symlink = 0
672          install.finalize_options(self)          install.finalize_options(self)
673            self.expand_with_pure_python_dirs(["init_module_dir"])
674    
675        def expand_with_pure_python_dirs(self, attrs):
676            """Expand the attributes with default values of base and platbase"""
677            # it seems that the values for "prefix" and "exec_prefix" in
678            # self.config_vars are the corresponding values used by the
679            # python interpreter, so we just assign these to "base" and
680            # "platbase".
681            config_vars = self.config_vars.copy()
682            config_vars["base"] = self.config_vars["prefix"]
683            config_vars["platbase"] = self.config_vars["exec_prefix"]
684            for attr in attrs:
685                val = getattr(self, attr)
686                if val is not None:
687                    if os.name == 'posix':
688                        val = os.path.expanduser(val)
689                    val = subst_vars(val, config_vars)
690                    setattr(self, attr, val)
691    
692        def select_scheme(self, scheme):
693            """Extend the inherited method to set init_module_dir"""
694            install.select_scheme(self, scheme)
695            # only set init_module_dir if it wasn't set by the user
696            if self.init_module_dir is None:
697                self.init_module_dir = INSTALL_SCHEMES[scheme]['purelib']
698    
699        def convert_paths(self, *args):
700            """Extend the inherited method so that we can remember some filename
701            """
702            # remember the installation directory before its root gets
703            # changed
704            self.install_lib_orig = self.install_lib
705            apply(install.convert_paths, (self,) + args)
706    
707      def run(self):      def run(self):
708          install.run(self)          install.run(self)
# Line 542  class ThubanInstall(install): Line 711  class ThubanInstall(install):
711                  src, dest = item                  src, dest = item
712              else:              else:
713                  src = dest = item                  src = dest = item
714              self.copy_file(convert_path(src),              self.copy_file(convert_path(src),
715                             os.path.join(self.root, convert_path(dest)))                             os.path.join(self.root, convert_path(dest)))
716    
717          if os.name == "posix" and self.do_symlink:          if os.name == "posix" and self.do_symlink:
# Line 557  class ThubanInstall(install): Line 726  class ThubanInstall(install):
726              self.mkpath(bindir)              self.mkpath(bindir)
727              self.link_file(scriptfile, binfile)              self.link_file(scriptfile, binfile)
728    
729            if self.create_init_module:
730                # create the init module
731                initfilename = self.thuban_init_filename()
732                if self.root:
733                    initfilename = change_root(self.root, initfilename)
734                contents = thubaninit_contents(self.install_lib_orig)
735                self.mkpath(os.path.dirname(initfilename))
736                self.execute(write_file, (initfilename, contents),
737                             "Create %s" % initfilename)
738    
739      def link_file(self, src, dest):      def link_file(self, src, dest):
740          """Create a symbolic link dest pointing to src.          """Create a symbolic link dest pointing to src.
741    
# Line 571  class ThubanInstall(install): Line 750  class ThubanInstall(install):
750          if not os.path.exists(dest):          if not os.path.exists(dest):
751              os.symlink(src, dest)              os.symlink(src, dest)
752    
753        def thuban_init_filename(self):
754            """Return the filename for the init-module"""
755            # Since we override the normal install dirs to point to our own
756            # prefix we have to reach into installed
757            return self.init_module_dir + "/thubaninit.py"
758    
759      def get_outputs (self):      def get_outputs (self):
760          outputs = install.get_outputs(self)          outputs = install.get_outputs(self)
# Line 586  class ThubanInstall(install): Line 770  class ThubanInstall(install):
770                  bindir = change_root(self.root, bindir)                  bindir = change_root(self.root, bindir)
771              binfile = os.path.join(bindir, "thuban")              binfile = os.path.join(bindir, "thuban")
772              outputs.append(binfile)              outputs.append(binfile)
773            if self.create_init_module:
774                initfilename = self.thuban_init_filename()
775                if self.root:
776                    initfilename = change_root(self.root, initfilename)
777                outputs.append(initfilename)
778          return outputs          return outputs
779    
780    
781    # scripts to override some of the commands put into the spec-file by the
782    # bdist_rpm command.
783    
784  bdist_rpm_prep_script = '''  bdist_rpm_prep_script = '''
785  %setup  %setup
786  cp extensions/pyshapelib/{README,README.pyshapelib}  cp extensions/pyshapelib/{README,README.pyshapelib}
# Line 596  cp extensions/pyshapelib/{COPYING,COPYIN Line 788  cp extensions/pyshapelib/{COPYING,COPYIN
788  cp extensions/pyprojection/{LICENSE,LICENSE.pyprojection}  cp extensions/pyprojection/{LICENSE,LICENSE.pyprojection}
789  '''  '''
790    
791    bdist_rpm_build_script = '''
792    env PATH="$PATH:%(prefix)s/lib/wxPython/bin:/usr/lib/wxPython/bin" CFLAGS="$RPM_OPT_FLAGS" %(python)s setup.py build
793    '''
794    
795    bdist_rpm_install_script = '''
796    %(python)s setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES \
797       --prefix=%(prefix)s
798    '''
799    
800    
       
801  class thuban_bdist_rpm(bdist_rpm):  class thuban_bdist_rpm(bdist_rpm):
802    
803      """Thuban specific RPM distribution command"""      """Thuban specific RPM distribution command"""
804    
805      def run(self):      user_options = bdist_rpm.user_options[:]
806          # create the prep script for the spec-file      user_options.extend([("prefix=", None, "Install prefix for the RPM"),
807                             ])
808    
809        def initialize_options(self):
810            # per default, RPMs are installed in /usr
811            self.prefix = "/usr/"
812    
813            # create the scripts we want to override. We actually fill them
814            # with contents later because some values we put into those
815            # scripts such as the python interpreter to use are only known
816            # then.
817            open("bdist_rpm_prep", "w").close()
818            open("bdist_rpm_build", "w").close()
819            open("bdist_rpm_install", "w").close()
820            bdist_rpm.initialize_options(self)
821    
822        def _make_spec_file(self):
823            # create the scripts for the spec-file. Now we know the python
824            # interpreter to use.
825          open("bdist_rpm_prep", "w").write(bdist_rpm_prep_script)          open("bdist_rpm_prep", "w").write(bdist_rpm_prep_script)
826    
827          bdist_rpm.run(self)          build = bdist_rpm_build_script % {"python": self.python,
828                                              "prefix": self.prefix}
829            open("bdist_rpm_build", "w").write(build)
830    
831            install = bdist_rpm_install_script % {"python": self.python,
832                                                  "prefix": self.prefix}
833            open("bdist_rpm_install", "w").write(install)
834    
835            #
836            return bdist_rpm._make_spec_file(self)
837    
838    
839  class bdist_inno(Command):  class bdist_inno(Command):
# Line 688  class bdist_inno(Command): Line 915  class bdist_inno(Command):
915          """Execute the command. install_options if given, should be a          """Execute the command. install_options if given, should be a
916          directory of additional options to set in the install step"""          directory of additional options to set in the install step"""
917          # Obviously have to build before we can install          # Obviously have to build before we can install
918    
919          if not self.skip_build:          if not self.skip_build:
920              self.run_command('build')              self.run_command('build')
921    
# Line 710  class bdist_inno(Command): Line 938  class bdist_inno(Command):
938          self.execute(write_file, (iss_file, self.generate_iss()),          self.execute(write_file, (iss_file, self.generate_iss()),
939                       "Create Inno Setup script file %s" % iss_file)                       "Create Inno Setup script file %s" % iss_file)
940    
941          # and invoke          # and invoke
942          if self.run_inno:          if self.run_inno:
943              self.spawn(["iscc", iss_file])              self.spawn(["iscc", iss_file])
944    
# Line 776  class bdist_inno(Command): Line 1004  class bdist_inno(Command):
1004              line = 'Name: "{group}\\%s"; Filename: "%s";' \              line = 'Name: "{group}\\%s"; Filename: "%s";' \
1005                     % (icon.title, icon.install_name)                     % (icon.title, icon.install_name)
1006              iss.append(line)              iss.append(line)
1007                
1008          return iss          return iss
1009    
1010    
# Line 792  class InnoIconItem: Line 1020  class InnoIconItem:
1020          else:          else:
1021              self.install_name = filename              self.install_name = filename
1022    
1023                
1024  class thuban_bdist_inno(bdist_inno):  class thuban_bdist_inno(bdist_inno):
1025    
1026      """Thuban specific Inno Setup stuff"""      """Thuban specific Inno Setup stuff"""
# Line 800  class thuban_bdist_inno(bdist_inno): Line 1028  class thuban_bdist_inno(bdist_inno):
1028      def run(self):      def run(self):
1029          install_options = {          install_options = {
1030              "prefix": ".",              "prefix": ".",
1031                "install_lib": "$base",
1032                "install_data": "$base",
1033              "install_scripts": "$base",              "install_scripts": "$base",
1034              "warn_dir": 0,              "warn_dir": 0,
1035              "extra_files": ["COPYING", "Lib/proj.dll"],              "extra_files": ["COPYING", "Lib/proj.dll"],
# Line 807  class thuban_bdist_inno(bdist_inno): Line 1037  class thuban_bdist_inno(bdist_inno):
1037          # don't make a symlink because we're simulating windows, so          # don't make a symlink because we're simulating windows, so
1038          # that we can generate the iss-file even on Linux          # that we can generate the iss-file even on Linux
1039          install_options["do_symlink"] = 0          install_options["do_symlink"] = 0
1040    
1041          bdist_inno.run(self, install_options)          bdist_inno.run(self, install_options)
1042        
1043                class thuban_build_docs(Command):
1044    
1045        """Command to generate documentation from source code."""
1046    
1047        description = "Generate documentation."
1048    
1049        user_options = []
1050    
1051        def initialize_options(self): pass
1052    
1053        def finalize_options(self): pass
1054    
1055        def run(self, install_options = None):
1056            self.spawn(["happydoc", "-d./Doc", "./Thuban"])
1057    
1058    class thuban_build_ext(build_ext):
1059    
1060        """Extend the build_ext command to optionally include the
1061        GDAL extension.
1062        """
1063    
1064        user_options = build_ext.user_options[:]
1065        user_options.extend([("with-gdal", None, "Include GDAL support."),
1066                             ("without-gdal", None, "Don't include GDAL support.")])
1067    
1068        boolean_options = ["with-gdal"]
1069        negative_opt = {'without-gdal' : 'with-gdal'}
1070    
1071        def initialize_options(self):
1072            self.with_gdal = True
1073            build_ext.initialize_options(self)
1074    
1075        def finalize_options(self):
1076            build_ext.finalize_options(self)
1077            if self.with_gdal and include_gdal:
1078                self.extensions.append(Extension("Lib.gdalwarp",
1079                                    [ext_dir + "/thuban/gdalwarp.cpp",
1080                                    ext_dir + "/thuban/cpl_mfile.cpp",
1081                                    ext_dir + "/thuban/bmpdataset.cpp"],
1082                                    include_dirs = gdal_cs_params[CS_INCDIRS] +
1083                                                   [ext_dir + "/thuban/"],
1084                                    define_macros = gdal_cs_params[CS_DEFS],
1085                                    library_dirs = gdal_cs_params[CS_LIBDIRS],
1086                                    libraries = gdal_cs_params[CS_LIBS]))
1087    
1088        def run(self, install_options = None):
1089            build_ext.run(self)
1090    
1091  #  #
1092  #   Run the script  #   Run the script
1093  #  #
1094    
   
1095  long_description = """\  long_description = """\
1096  Thuban is a viewer for geographic data written in Python  Thuban is a viewer for geographic data written in Python
1097  """  """
1098    
1099  setup(name = "Thuban",  setup(name = "Thuban",
1100        version = "0.1",        version = "0.2.0",
1101        description = "Geographic data viewer",        description = "Geographic data viewer",
1102        long_description = long_description,        long_description = long_description,
1103        licence = "GPL",        licence = "GPL",
1104        author = "Intevation GmbH",        author = "Intevation GmbH",
1105        author_email = "[email protected]",        author_email = "[email protected]",
1106        url = "ftp:intevation.de/",        url = "http://thuban.intevation.de/",
1107    
1108        scripts = ["thuban.py"],        scripts = ["thuban.py"],
1109        packages = ["Thuban", "Thuban.Lib", "Thuban.Model", "Thuban.UI"],        packages = ["Thuban", "Thuban.Lib", "Thuban.Model", "Thuban.UI"],
# Line 840  setup(name = "Thuban", Line 1117  setup(name = "Thuban",
1117                   {"prefix": prefix,                   {"prefix": prefix,
1118                    # make sure both libs and scripts are installed in the                    # make sure both libs and scripts are installed in the
1119                    # same directory.                    # same directory.
1120                    "install_lib": "$base/thuban",                    "install_lib": "$base/lib/thuban",
1121                    "install_scripts": "$base/thuban",                    "install_scripts": "$base/lib/thuban",
1122                    "install_data": "$base/thuban",                    "install_data": "$base/lib/thuban",
1123    
1124                    # Don't print warning messages about the lib dir not                    # Don't print warning messages about the lib dir not
1125                    # being on Python's path. The libraries are Thuban                    # being on Python's path. The libraries are Thuban
# Line 862  setup(name = "Thuban", Line 1139  setup(name = "Thuban",
1139                    "install": ThubanInstall,                    "install": ThubanInstall,
1140                    "bdist_rpm": thuban_bdist_rpm,                    "bdist_rpm": thuban_bdist_rpm,
1141                    "bdist_inno": thuban_bdist_inno,                    "bdist_inno": thuban_bdist_inno,
1142                    "data_dist": data_dist                    "data_dist": data_dist,
1143                      "build_docs": thuban_build_docs,
1144                      "build_ext": thuban_build_ext
1145                    })                    })
1146    
1147    

Legend:
Removed from v.67  
changed lines
  Added in v.1238

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26