setup.py
branchstable
changeset 5425 7c84e3f370de
parent 5423 e15abfdcce38
child 5426 0d4853a6e5ee
equal deleted inserted replaced
5421:8167de96c523 5425:7c84e3f370de
    22 """
    22 """
    23 
    23 
    24 import os
    24 import os
    25 import sys
    25 import sys
    26 import shutil
    26 import shutil
    27 from distutils.core import setup
       
    28 from distutils.command import install_lib
       
    29 from os.path import isdir, exists, join, walk
    27 from os.path import isdir, exists, join, walk
    30 
    28 
       
    29 try:
       
    30    if os.environ.get('NO_SETUPTOOLS'):
       
    31       raise ImportError() # do as there is no setuptools
       
    32    from setuptools import setup
       
    33    from setuptools.command import install_lib
       
    34    USE_SETUPTOOLS = True
       
    35 except ImportError:
       
    36    from distutils.core import setup
       
    37    from distutils.command import install_lib
       
    38    USE_SETUPTOOLS = False
       
    39 
    31 # import required features
    40 # import required features
    32 from __pkginfo__ import modname, version, license, short_desc, long_desc, \
    41 from __pkginfo__ import modname, version, license, description, web, \
    33      web, author, author_email
    42      author, author_email
       
    43 
       
    44 long_description = file('README').read()
       
    45 
    34 # import optional features
    46 # import optional features
    35 try:
    47 import __pkginfo__
    36     from __pkginfo__ import distname
    48 if USE_SETUPTOOLS:
    37 except ImportError:
    49    requires = {}
    38     distname = modname
    50    for entry in ("__depends__", "__recommends__"):
    39 try:
    51       requires.update(getattr(__pkginfo__, entry, {}))
    40     from __pkginfo__ import scripts
    52    install_requires = [("%s %s" % (d, v and v or "")).strip()
    41 except ImportError:
    53                        for d, v in requires.iteritems()]
    42     scripts = []
    54 else:
    43 try:
    55    install_requires = []
    44     from __pkginfo__ import data_files
    56 
    45 except ImportError:
    57 distname = getattr(__pkginfo__, 'distname', modname)
    46     data_files = None
    58 scripts = getattr(__pkginfo__, 'scripts', ())
    47 try:
    59 include_dirs = getattr(__pkginfo__, 'include_dirs', ())
    48     from __pkginfo__ import subpackage_of
    60 data_files = getattr(__pkginfo__, 'data_files', None)
    49 except ImportError:
    61 subpackage_of = getattr(__pkginfo__, 'subpackage_of', None)
    50     subpackage_of = None
    62 ext_modules = getattr(__pkginfo__, 'ext_modules', None)
    51 try:
    63 
    52     from __pkginfo__ import include_dirs
       
    53 except ImportError:
       
    54     include_dirs = []
       
    55 try:
       
    56     from __pkginfo__ import ext_modules
       
    57 except ImportError:
       
    58     ext_modules = None
       
    59 
    64 
    60 BASE_BLACKLIST = ('CVS', 'debian', 'dist', 'build', '__buildlog')
    65 BASE_BLACKLIST = ('CVS', 'debian', 'dist', 'build', '__buildlog')
    61 IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc')
    66 IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc')
    62 
    67 
    63 
    68 
    90                 result += get_packages(absfile, result[-1])
    95                 result += get_packages(absfile, result[-1])
    91     return result
    96     return result
    92 
    97 
    93 def export(from_dir, to_dir,
    98 def export(from_dir, to_dir,
    94            blacklist=BASE_BLACKLIST,
    99            blacklist=BASE_BLACKLIST,
    95            ignore_ext=IGNORED_EXTENSIONS):
   100            ignore_ext=IGNORED_EXTENSIONS,
       
   101            verbose=True):
    96     """make a mirror of from_dir in to_dir, omitting directories and files
   102     """make a mirror of from_dir in to_dir, omitting directories and files
    97     listed in the black list
   103     listed in the black list
    98     """
   104     """
    99     def make_mirror(arg, directory, fnames):
   105     def make_mirror(arg, directory, fnames):
   100         """walk handler"""
   106         """walk handler"""
   109                 continue
   115                 continue
   110             if filename[-1] == '~':
   116             if filename[-1] == '~':
   111                 continue
   117                 continue
   112             src = '%s/%s' % (directory, filename)
   118             src = '%s/%s' % (directory, filename)
   113             dest = to_dir + src[len(from_dir):]
   119             dest = to_dir + src[len(from_dir):]
   114             print >> sys.stderr, src, '->', dest
   120             if verbose:
       
   121                print >> sys.stderr, src, '->', dest
   115             if os.path.isdir(src):
   122             if os.path.isdir(src):
   116                 if not exists(dest):
   123                 if not exists(dest):
   117                     os.mkdir(dest)
   124                     os.mkdir(dest)
   118             else:
   125             else:
   119                 if exists(dest):
   126                 if exists(dest):
   152                 base = join(subpackage_of, modname)
   159                 base = join(subpackage_of, modname)
   153             else:
   160             else:
   154                 base = modname
   161                 base = modname
   155             for directory in include_dirs:
   162             for directory in include_dirs:
   156                 dest = join(self.install_dir, base, directory)
   163                 dest = join(self.install_dir, base, directory)
   157                 export(directory, dest)
   164                 export(directory, dest, verbose=False)
   158 
   165 
   159 def install(**kwargs):
   166 def install(**kwargs):
   160     """setup entry point"""
   167     """setup entry point"""
       
   168     if USE_SETUPTOOLS:
       
   169         if '--force-manifest' in sys.argv:
       
   170             sys.argv.remove('--force-manifest')
       
   171     # install-layout option was introduced in 2.5.3-1~exp1
       
   172     elif sys.version_info < (2, 5, 4) and '--install-layout=deb' in sys.argv:
       
   173         sys.argv.remove('--install-layout=deb')
   161     if subpackage_of:
   174     if subpackage_of:
   162         package = subpackage_of + '.' + modname
   175         package = subpackage_of + '.' + modname
   163         kwargs['package_dir'] = {package : '.'}
   176         kwargs['package_dir'] = {package : '.'}
   164         packages = [package] + get_packages(os.getcwd(), package)
   177         packages = [package] + get_packages(os.getcwd(), package)
       
   178         if USE_SETUPTOOLS:
       
   179             kwargs['namespace_packages'] = [subpackage_of]
   165     else:
   180     else:
   166         kwargs['package_dir'] = {modname : '.'}
   181         kwargs['package_dir'] = {modname : '.'}
   167         packages = [modname] + get_packages(os.getcwd(), modname)
   182         packages = [modname] + get_packages(os.getcwd(), modname)
       
   183     if USE_SETUPTOOLS:
       
   184        kwargs['install_requires'] = install_requires
   168     kwargs['packages'] = packages
   185     kwargs['packages'] = packages
   169     return setup(name = distname,
   186     return setup(name=distname, version=version, license=license, url=web,
   170                  version = version,
   187                  description=description, long_description=long_description,
   171                  license =license,
   188                  author=author, author_email=author_email,
   172                  description = short_desc,
   189                  scripts=ensure_scripts(scripts), data_files=data_files,
   173                  long_description = long_desc,
       
   174                  author = author,
       
   175                  author_email = author_email,
       
   176                  url = web,
       
   177                  scripts = ensure_scripts(scripts),
       
   178                  data_files=data_files,
       
   179                  ext_modules=ext_modules,
   190                  ext_modules=ext_modules,
   180                  cmdclass={'install_lib': MyInstallLib},
   191                  cmdclass={'install_lib': MyInstallLib},
   181                  **kwargs
   192                  **kwargs
   182                  )
   193                  )
   183 
   194