3
from distutils.core import *
5
from setuptools import setup as old_setup
6
# very old setuptools don't have this
7
from setuptools.command import bdist_egg
8
# easy_install imports math, it may be picked up from cwd
9
from setuptools.command import develop, easy_install
12
from distutils.core import setup as old_setup
15
from numpy.distutils.extension import Extension
16
from numpy.distutils.command import config
17
from numpy.distutils.command import build
18
from numpy.distutils.command import build_py
19
from numpy.distutils.command import config_compiler
20
from numpy.distutils.command import build_ext
21
from numpy.distutils.command import build_clib
22
from numpy.distutils.command import build_src
23
from numpy.distutils.command import build_scripts
24
from numpy.distutils.command import sdist
25
from numpy.distutils.command import install_data
26
from numpy.distutils.command import install_headers
27
from numpy.distutils.command import install
28
from numpy.distutils.command import bdist_rpm
29
from numpy.distutils.misc_util import get_data_files, is_sequence, is_string
31
numpy_cmdclass = {'build': build.build,
32
'build_src': build_src.build_src,
33
'build_scripts': build_scripts.build_scripts,
34
'config_fc': config_compiler.config_fc,
35
'config': config.config,
36
'build_ext': build_ext.build_ext,
37
'build_py': build_py.build_py,
38
'build_clib': build_clib.build_clib,
40
'install_data': install_data.install_data,
41
'install_headers': install_headers.install_headers,
42
'install': install.install,
43
'bdist_rpm': bdist_rpm.bdist_rpm,
46
from numpy.distutils.command import egg_info
47
numpy_cmdclass['bdist_egg'] = bdist_egg.bdist_egg
48
numpy_cmdclass['develop'] = develop.develop
49
numpy_cmdclass['easy_install'] = easy_install.easy_install
50
numpy_cmdclass['egg_info'] = egg_info.egg_info
52
def _dict_append(d, **kws):
53
for k,v in kws.items():
58
if isinstance(dv, tuple):
61
if isinstance(dv, list):
64
if isinstance(dv, dict):
67
if isinstance(dv, str):
68
assert isinstance(v,str),`type(v)`
71
raise TypeError,`type(dv)`
74
def _command_line_ok(_cache=[]):
75
""" Return True if command line does not contain any
76
help or display requests.
81
display_opts = ['--'+n for n in Distribution.display_option_names]
82
for o in Distribution.display_options:
84
display_opts.append('-'+o[1])
86
if arg.startswith('--help') or arg=='-h' or arg in display_opts:
92
def _exit_interactive_session(_cache=[]):
97
raw_input('Press ENTER to close the interactive session..')
103
from interactive import interactive_sys_argv
105
atexit.register(_exit_interactive_session)
106
sys.argv[:] = interactive_sys_argv(sys.argv)
110
cmdclass = numpy_cmdclass.copy()
112
new_attr = attr.copy()
113
if new_attr.has_key('cmdclass'):
114
cmdclass.update(new_attr['cmdclass'])
115
new_attr['cmdclass'] = cmdclass
117
if new_attr.has_key('configuration'):
118
# To avoid calling configuration if there are any errors
119
# or help request in command in the line.
120
configuration = new_attr.pop('configuration')
122
import distutils.core
123
old_dist = distutils.core._setup_distribution
124
old_stop = distutils.core._setup_stop_after
125
distutils.core._setup_distribution = None
126
distutils.core._setup_stop_after = "commandline"
128
dist = setup(**new_attr)
129
distutils.core._setup_distribution = old_dist
130
distutils.core._setup_stop_after = old_stop
131
except Exception,msg:
132
distutils.core._setup_distribution = old_dist
133
distutils.core._setup_stop_after = old_stop
135
if dist.help or not _command_line_ok():
136
# probably displayed help, skip running any commands
139
# create setup dictionary and append to new_attr
140
config = configuration()
141
if hasattr(config,'todict'): config = config.todict()
142
_dict_append(new_attr, **config)
144
# Move extension source libraries to libraries
146
for ext in new_attr.get('ext_modules',[]):
148
for item in ext.libraries:
149
if is_sequence(item):
150
lib_name, build_info = item
151
_check_append_ext_library(libraries, item)
152
new_libraries.append(lib_name)
153
elif is_string(item):
154
new_libraries.append(item)
156
raise TypeError("invalid description of extension module "
157
"library %r" % (item,))
158
ext.libraries = new_libraries
160
if not new_attr.has_key('libraries'):
161
new_attr['libraries'] = []
162
for item in libraries:
163
_check_append_library(new_attr['libraries'], item)
165
# sources in ext_modules or libraries may contain header files
166
if (new_attr.has_key('ext_modules') or new_attr.has_key('libraries')) \
167
and not new_attr.has_key('headers'):
168
new_attr['headers'] = []
170
return old_setup(**new_attr)
172
def _check_append_library(libraries, item):
174
for libitem in libraries:
175
if is_sequence(libitem):
176
if is_sequence(item):
177
if item[0]==libitem[0]:
178
if item[1] is libitem[1]:
180
warnings.warn("[0] libraries list contains %r with"
181
" different build_info" % (item[0],))
185
warnings.warn("[1] libraries list contains %r with"
186
" no build_info" % (item[0],))
189
if is_sequence(item):
191
warnings.warn("[2] libraries list contains %r with"
192
" no build_info" % (item[0],))
197
libraries.append(item)
200
def _check_append_ext_library(libraries, (lib_name,build_info)):
202
for item in libraries:
203
if is_sequence(item):
204
if item[0]==lib_name:
205
if item[1] is build_info:
207
warnings.warn("[3] libraries list contains %r with"
208
" different build_info" % (lib_name,))
211
warnings.warn("[4] libraries list contains %r with"
212
" no build_info" % (lib_name,))
214
libraries.append((lib_name,build_info))