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 |