setup.py
changeset 12252 64c4edac1706
parent 12193 e4ee04d442be
child 12254 2060ee44ea9a
equal deleted inserted replaced
12251:fd7086b701de 12252:64c4edac1706
    22 """
    22 """
    23 
    23 
    24 import io
    24 import io
    25 import os
    25 import os
    26 import sys
    26 import sys
    27 import shutil
       
    28 from os.path import dirname, exists, isdir, join
    27 from os.path import dirname, exists, isdir, join
    29 
    28 
    30 from setuptools import setup
    29 from setuptools import setup
    31 from setuptools.command import develop, install_lib
       
    32 from distutils.command import install_data
    30 from distutils.command import install_data
    33 
    31 
    34 here = dirname(__file__)
    32 here = dirname(__file__)
    35 
    33 
    36 # import required features
    34 # import required features
    50     long_description = f.read()
    48     long_description = f.read()
    51 
    49 
    52 # import optional features
    50 # import optional features
    53 distname = __pkginfo__['distname']
    51 distname = __pkginfo__['distname']
    54 scripts = __pkginfo__['scripts']
    52 scripts = __pkginfo__['scripts']
    55 include_dirs = __pkginfo__['include_dirs']
       
    56 data_files = __pkginfo__['data_files']
    53 data_files = __pkginfo__['data_files']
    57 package_data = __pkginfo__['package_data']
    54 package_data = __pkginfo__['package_data']
    58 
       
    59 BASE_BLACKLIST = ('CVS', 'dist', 'build', '__buildlog')
       
    60 IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc')
       
    61 
    55 
    62 
    56 
    63 def ensure_scripts(linux_scripts):
    57 def ensure_scripts(linux_scripts):
    64     """
    58     """
    65     Creates the proper script names required for each platform
    59     Creates the proper script names required for each platform
    86                     result.append('%s.%s' % (prefix, package))
    80                     result.append('%s.%s' % (prefix, package))
    87                 else:
    81                 else:
    88                     result.append(package)
    82                     result.append(package)
    89                 result += get_packages(absfile, result[-1])
    83                 result += get_packages(absfile, result[-1])
    90     return result
    84     return result
    91 
       
    92 def export(from_dir, to_dir,
       
    93            blacklist=BASE_BLACKLIST,
       
    94            ignore_ext=IGNORED_EXTENSIONS,
       
    95            verbose=True):
       
    96     try:
       
    97         os.mkdir(to_dir)
       
    98     except OSError as ex:
       
    99         # file exists ?
       
   100         import errno
       
   101         if ex.errno != errno.EEXIST:
       
   102             raise
       
   103     else:
       
   104         if verbose:
       
   105             print('created %s directory' % to_dir)
       
   106     for dirpath, dirnames, filenames in os.walk(from_dir):
       
   107         for norecurs in blacklist:
       
   108             try:
       
   109                 dirnames.remove(norecurs)
       
   110             except ValueError:
       
   111                 pass
       
   112             else:
       
   113                 if verbose:
       
   114                     print('not recursing in %s' % join(dirpath, norecurs))
       
   115         for dirname in dirnames:
       
   116             src = join(dirpath, dirname)
       
   117             dest = to_dir + src[len(from_dir):]
       
   118             if not exists(dest):
       
   119                 if verbose:
       
   120                     print('creating %s directory' % dest)
       
   121                 os.mkdir(dest)
       
   122         for filename in filenames:
       
   123             # don't include binary files
       
   124             src = join(dirpath, filename)
       
   125             dest = to_dir + src[len(from_dir):]
       
   126             if filename[-4:] in ignore_ext:
       
   127                 continue
       
   128             if filename[-1] == '~':
       
   129                 continue
       
   130             if exists(dest):
       
   131                 os.remove(dest)
       
   132             if verbose:
       
   133                 print('copying %s to %s' % (src, dest))
       
   134             shutil.copy2(src, dest)
       
   135 
       
   136 
       
   137 class MyInstallLib(install_lib.install_lib):
       
   138     """extend install_lib command to handle  package __init__.py and
       
   139     include_dirs variable if necessary
       
   140     """
       
   141     def run(self):
       
   142         """overridden from install_lib class"""
       
   143         install_lib.install_lib.run(self)
       
   144         # create Products.__init__.py if needed
       
   145         # manually install included directories if any
       
   146         if include_dirs:
       
   147             for directory in include_dirs:
       
   148                 src = join(modname, directory)
       
   149                 dest = join(self.install_dir, src)
       
   150                 export(src, dest, verbose=self.verbose)
       
   151 
    85 
   152 
    86 
   153 # re-enable copying data files in sys.prefix
    87 # re-enable copying data files in sys.prefix
   154 # overwrite install_data to use sys.prefix instead of the egg directory
    88 # overwrite install_data to use sys.prefix instead of the egg directory
   155 class MyInstallData(install_data.install_data):
    89 class MyInstallData(install_data.install_data):
   189     author_email=author_email,
   123     author_email=author_email,
   190     packages=[modname] + get_packages(join(here, modname), modname),
   124     packages=[modname] + get_packages(join(here, modname), modname),
   191     package_data=package_data,
   125     package_data=package_data,
   192     scripts=ensure_scripts(scripts),
   126     scripts=ensure_scripts(scripts),
   193     data_files=data_files,
   127     data_files=data_files,
       
   128     include_package_data=True,
   194     install_requires=[
   129     install_requires=[
   195         'six >= 1.4.0',
   130         'six >= 1.4.0',
   196         'logilab-common >= 1.4.0',
   131         'logilab-common >= 1.4.0',
   197         'logilab-mtconverter >= 0.8.0',
   132         'logilab-mtconverter >= 0.8.0',
   198         'rql >= 0.34.0',
   133         'rql >= 0.34.0',
   241         'zmq': [
   176         'zmq': [
   242             'pyzmq',
   177             'pyzmq',
   243         ],
   178         ],
   244     },
   179     },
   245     cmdclass={
   180     cmdclass={
   246         'install_lib': MyInstallLib,
       
   247         'install_data': MyInstallData,
   181         'install_data': MyInstallData,
   248     },
   182     },
   249     zip_safe=False,
   183     zip_safe=False,
   250 )
   184 )