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', |