/[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 19 by bh, Tue Sep 4 15:11:27 2001 UTC revision 203 by bh, Mon Jul 8 15:04:57 2002 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001 by Intevation GmbH  # Copyright (c) 2001, 2002 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  #  #
# Line 22  from distutils.command.install import in Line 22  from distutils.command.install import in
22  from distutils.command.build_py import build_py  from distutils.command.build_py import build_py
23  from distutils.command.bdist_rpm import bdist_rpm  from distutils.command.bdist_rpm import bdist_rpm
24  from distutils.file_util import write_file  from distutils.file_util import write_file
25    from distutils.filelist import FileList
26  from distutils.util import convert_path, change_root  from distutils.util import convert_path, change_root
27    
28    from distutils import archive_util, dir_util
29  import distutils  import distutils
30    
31  from string import split  from string import split
# Line 46  if os.name == "posix": Line 48  if os.name == "posix":
48            
49      # The installation prefix (similar to autoconf's --prefix). This is      # The installation prefix (similar to autoconf's --prefix). This is
50      # only the default value, you can override it on the command line      # only the default value, you can override it on the command line
51      # with the install command's --prefix option      # with the install command's --prefix option.
52        #
53        # Note that there's a separate prefix option for the bdist_rpm
54        # command completely independend of this one.
55      prefix = "/usr/local/"      prefix = "/usr/local/"
56    
57      # On POSIX-systems we run wxgtk-config to determine the C++-compiler      # On POSIX-systems we run wxgtk-config to determine the C++-compiler
# Line 198  py_modules = [] Line 203  py_modules = []
203  #  #
204    
205  extensions.append(Extension("Lib.wxproj",  extensions.append(Extension("Lib.wxproj",
206                              [ext_dir + "/thuban/wxproj.cpp",                              [ext_dir + "/thuban/wxproj.cpp"],
207                               shp_dir + "/shpopen.c"],                              include_dirs = ([shp_dir, proj4_incdir,
208                              include_dirs = [shp_dir, proj4_incdir] +wx_incdirs,                                               ext_dir + "/pyshapelib/"]
209                                                + wx_incdirs),
210                              define_macros = wx_defs,                              define_macros = wx_defs,
211                              library_dirs = [proj4_libdir] + wx_libdirs,                              library_dirs = [proj4_libdir] + wx_libdirs,
212                              libraries = [proj4_lib] + wx_libs))                              libraries = [proj4_lib] + wx_libs))
# Line 211  extensions.append(Extension("Lib.wxproj" Line 217  extensions.append(Extension("Lib.wxproj"
217    
218  extensions.append(Extension("Lib.shapelibc",  extensions.append(Extension("Lib.shapelibc",
219                              [ext_dir + "/pyshapelib/shapelib_wrap.c",                              [ext_dir + "/pyshapelib/shapelib_wrap.c",
220                               shp_dir + "/shpopen.c"],                               shp_dir + "/shpopen.c",
221                                 shp_dir + "/shptree.c"],
222                                include_dirs = [shp_dir]))
223    extensions.append(Extension("Lib.shptree",
224                                [ext_dir + "/pyshapelib/shptreemodule.c"],
225                              include_dirs = [shp_dir]))                              include_dirs = [shp_dir]))
226  extensions.append(Extension("Lib.dbflibc",  extensions.append(Extension("Lib.dbflibc",
227                              [ext_dir + "/pyshapelib/dbflib_wrap.c",                              [ext_dir + "/pyshapelib/dbflib_wrap.c",
# Line 250  data_files.append((dir, bitmaps)) Line 260  data_files.append((dir, bitmaps))
260  #  #
261  # So far distutils are only meant to distribute python extensions, not  # So far distutils are only meant to distribute python extensions, not
262  # complete applications, so we have to redefine a few commands  # complete applications, so we have to redefine a few commands
263    #
264    
265    
266    # Much of the data_dist command is directly copied from the distutils'
267    # sdist command
268    class data_dist(Command):
269    
270        description = "create a data distribution (tarball, zip file, etc.)"
271    
272        user_options = [
273            ('formats=', None,
274             "formats for source distribution (comma-separated list)"),
275            ('keep-temp', 'k',
276             "keep the distribution tree around after creating " +
277             "archive file(s)"),
278            ('dist-dir=', 'd',
279             "directory to put the source distribution archive(s) in "
280             "[default: dist]"),
281            ]
282    
283        boolean_options = ['keep-temp']
284    
285        def initialize_options (self):
286            self.formats = None
287            self.keep_temp = 0
288            self.dist_dir = None
289    
290        def finalize_options (self):
291            self.ensure_string_list('formats')
292            if self.formats is None:
293                self.formats = ["zip"]
294            bad_format = archive_util.check_archive_formats(self.formats)
295            if bad_format:
296                raise DistutilsOptionError, \
297                      "unknown archive format '%s'" % bad_format
298    
299            if self.dist_dir is None:
300                self.dist_dir = "dist"
301    
302    
303        def run(self):
304            # 'filelist' contains the list of files that will make up the
305            # manifest
306            self.filelist = FileList()
307            
308            # Do whatever it takes to get the list of files to process.
309            # File list is accumulated in 'self.filelist'.
310            self.get_file_list()
311    
312            # Otherwise, go ahead and create the source distribution tarball,
313            # or zipfile, or whatever.
314            self.make_distribution()
315    
316        def get_file_list(self):
317            """Figure out the list of files to include in the data
318            distribution, and put it in 'self.filelist'.
319            """
320            self.filelist.findall("Data")
321            self.filelist.include_pattern("*", anchor = 0)
322            self.filelist.exclude_pattern(r'/(RCS|CVS)/.*', is_regex=1)
323            self.filelist.sort()
324            self.filelist.remove_duplicates()
325    
326        def make_release_tree(self, base_dir, files):
327            """Create the directory tree that will become the source
328            distribution archive.  All directories implied by the filenames in
329            'files' are created under 'base_dir', and then we hard link or copy
330            (if hard linking is unavailable) those files into place.
331            Essentially, this duplicates the developer's source tree, but in a
332            directory named after the distribution, containing only the files
333            to be distributed.
334            """
335            # Create all the directories under 'base_dir' necessary to
336            # put 'files' there; the 'mkpath()' is just so we don't die
337            # if the manifest happens to be empty.
338            self.mkpath(base_dir)
339            dir_util.create_tree(base_dir, files,
340                                 verbose=self.verbose, dry_run=self.dry_run)
341    
342            # And walk over the list of files, either making a hard link (if
343            # os.link exists) to each one that doesn't already exist in its
344            # corresponding location under 'base_dir', or copying each file
345            # that's out-of-date in 'base_dir'.  (Usually, all files will be
346            # out-of-date, because by default we blow away 'base_dir' when
347            # we're done making the distribution archives.)
348        
349            if hasattr(os, 'link'):        # can make hard links on this system
350                link = 'hard'
351                msg = "making hard links in %s..." % base_dir
352            else:                           # nope, have to copy
353                link = None
354                msg = "copying files to %s..." % base_dir
355    
356            if not files:
357                self.warn("no files to distribute -- empty manifest?")
358            else:
359                self.announce(msg)
360            for file in files:
361                if not os.path.isfile(file):
362                    self.warn("'%s' not a regular file -- skipping" % file)
363                else:
364                    dest = os.path.join(base_dir, file)
365                    self.copy_file(file, dest, link=link)
366    
367    
368        def make_distribution (self):
369            """Create the source distribution(s).  First, we create the release
370            tree with 'make_release_tree()'; then, we create all required
371            archive files (according to 'self.formats') from the release tree.
372            Finally, we clean up by blowing away the release tree (unless
373            'self.keep_temp' is true).  The list of archive files created is
374            stored so it can be retrieved later by 'get_archive_files()'.
375            """
376            # Don't warn about missing meta-data here -- should be (and is!)
377            # done elsewhere.
378            base_dir = "Thuban-data-" + self.distribution.get_version()
379            base_name = os.path.join(self.dist_dir, base_dir)
380    
381            self.make_release_tree(base_dir, self.filelist.files)
382            archive_files = []              # remember names of files we create
383            for fmt in self.formats:
384                file = self.make_archive(base_name, fmt, base_dir=base_dir)
385                archive_files.append(file)
386    
387            self.archive_files = archive_files
388    
389            if not self.keep_temp:
390                dir_util.remove_tree(base_dir, self.verbose, self.dry_run)
391    
392    
393    
# Line 262  class InstallLocal(Command): Line 400  class InstallLocal(Command):
400      """      """
401    
402      description =\      description =\
403          "Create some symlink so you can run thubanfrom the source directory"          "Create some symlinks so you can run thuban from the source directory"
404    
405      user_options = [      user_options = [
406          ('skip-build', None, "skip the build steps"),          ('skip-build', None, "skip the build steps"),
# Line 286  class InstallLocal(Command): Line 424  class InstallLocal(Command):
424          # now do the work. Simply link or copy the Lib dir          # now do the work. Simply link or copy the Lib dir
425          libdir = os.path.join(self.build_dir, "Lib")          libdir = os.path.join(self.build_dir, "Lib")
426          if os.name == "posix":          if os.name == "posix":
427              # on posix, just lilnk the Lib dir              # on posix, just link the Lib dir
428              self.link_dir(libdir, "Lib")              self.link_dir(libdir, "Lib")
429          else:          else:
430              self.copy_tree(libdir, "Lib")              self.copy_tree(libdir, "Lib")
# Line 459  class ThubanInstall(install): Line 597  class ThubanInstall(install):
597          return outputs          return outputs
598    
599    
600    # scripts to override some of the commands put into the spec-file by the
601    # bdist_rpm command.
602    
603  bdist_rpm_prep_script = '''  bdist_rpm_prep_script = '''
604  %setup  %setup
605  cp extensions/pyshapelib/{README,README.pyshapelib}  cp extensions/pyshapelib/{README,README.pyshapelib}
# Line 466  cp extensions/pyshapelib/{COPYING,COPYIN Line 607  cp extensions/pyshapelib/{COPYING,COPYIN
607  cp extensions/pyprojection/{LICENSE,LICENSE.pyprojection}  cp extensions/pyprojection/{LICENSE,LICENSE.pyprojection}
608  '''  '''
609    
610    bdist_rpm_install_script = '''
611    %(python)s setup.py install --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES \
612       --prefix=%(prefix)s
613    '''
614    
615            
616  class thuban_bdist_rpm(bdist_rpm):  class thuban_bdist_rpm(bdist_rpm):
617    
618      """Thuban specific RPM distribution command"""      """Thuban specific RPM distribution command"""
619    
620      def run(self):      user_options = bdist_rpm.user_options[:]
621          # create the prep script for the spec-file      user_options.extend([("prefix=", None, "Install prefix for the RPM"),
622                             ])
623    
624        def initialize_options(self):
625            # per default, RPMs are installed in /usr
626            self.prefix = "/usr/"
627    
628            # create the scripts we want to override. We actually fill them
629            # with contents later because some values we put into those
630            # scripts such as the python interpreter to use are only known
631            # then.
632            open("bdist_rpm_prep", "w").close()
633            open("bdist_rpm_install", "w").close()
634            bdist_rpm.initialize_options(self)
635    
636        def _make_spec_file(self):
637            # create the scripts for the spec-file. Now we know the python
638            # interpreter to use.
639          open("bdist_rpm_prep", "w").write(bdist_rpm_prep_script)          open("bdist_rpm_prep", "w").write(bdist_rpm_prep_script)
640            install = bdist_rpm_install_script % {"python": self.python,
641                                                  "prefix": self.prefix}
642            open("bdist_rpm_install", "w").write(install)
643    
644          bdist_rpm.run(self)          #
645            return bdist_rpm._make_spec_file(self)
646    
647    
648  class bdist_inno(Command):  class bdist_inno(Command):
# Line 570  class bdist_inno(Command): Line 736  class bdist_inno(Command):
736          if os.name != 'nt':          if os.name != 'nt':
737              # Must force install to use the 'nt' scheme;              # Must force install to use the 'nt' scheme;
738              install.select_scheme('nt')              install.select_scheme('nt')
             # don't make a symlink because we're simulating windows, so  
             # that we can generate the iss-file even on Linux  
             install.do_symlink = 0  
739    
740          self.announce("installing to %s" % self.bdist_dir)          self.announce("installing to %s" % self.bdist_dir)
741          install.ensure_finalized()          install.ensure_finalized()
# Line 655  class bdist_inno(Command): Line 818  class bdist_inno(Command):
818    
819  class InnoIconItem:  class InnoIconItem:
820    
821      """Describe one item for he start menu for the Inno Setup installer"""      """Describe one item for the start menu for the Inno Setup installer"""
822    
823      def __init__(self, filename, title, install_name = None):      def __init__(self, filename, title, install_name = None):
824          self.filename = filename          self.filename = filename
# Line 665  class InnoIconItem: Line 828  class InnoIconItem:
828          else:          else:
829              self.install_name = filename              self.install_name = filename
830    
831                
832  class thuban_bdist_inno(bdist_inno):  class thuban_bdist_inno(bdist_inno):
833    
834      """Thuban specific Inno Setup stuff"""      """Thuban specific Inno Setup stuff"""
# Line 677  class thuban_bdist_inno(bdist_inno): Line 840  class thuban_bdist_inno(bdist_inno):
840              "warn_dir": 0,              "warn_dir": 0,
841              "extra_files": ["COPYING", "Lib/proj.dll"],              "extra_files": ["COPYING", "Lib/proj.dll"],
842              }              }
843            # don't make a symlink because we're simulating windows, so
844            # that we can generate the iss-file even on Linux
845            install_options["do_symlink"] = 0
846          bdist_inno.run(self, install_options)          bdist_inno.run(self, install_options)
847            
848                            
# Line 690  Thuban is a viewer for geographic data w Line 856  Thuban is a viewer for geographic data w
856  """  """
857    
858  setup(name = "Thuban",  setup(name = "Thuban",
859        version = "0.0.3",        version = "0.1.2",
860        description = "Geographic data viewer",        description = "Geographic data viewer",
861        long_description = long_description,        long_description = long_description,
862        licence = "GPL",        licence = "GPL",
# Line 710  setup(name = "Thuban", Line 876  setup(name = "Thuban",
876                   {"prefix": prefix,                   {"prefix": prefix,
877                    # make sure both libs and scripts are installed in the                    # make sure both libs and scripts are installed in the
878                    # same directory.                    # same directory.
879                    "install_lib": "$base/thuban",                    "install_lib": "$base/lib/thuban",
880                    "install_scripts": "$base/thuban",                    "install_scripts": "$base/lib/thuban",
881                    "install_data": "$base/thuban",                    "install_data": "$base/lib/thuban",
882    
883                    # Don't print warning messages about the lib dir not                    # Don't print warning messages about the lib dir not
884                    # being on Python's path. The libraries are Thuban                    # being on Python's path. The libraries are Thuban
# Line 731  setup(name = "Thuban", Line 897  setup(name = "Thuban",
897                    "install_local": InstallLocal,                    "install_local": InstallLocal,
898                    "install": ThubanInstall,                    "install": ThubanInstall,
899                    "bdist_rpm": thuban_bdist_rpm,                    "bdist_rpm": thuban_bdist_rpm,
900                    "bdist_inno": thuban_bdist_inno                    "bdist_inno": thuban_bdist_inno,
901                      "data_dist": data_dist
902                    })                    })
903    
904    

Legend:
Removed from v.19  
changed lines
  Added in v.203

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26