mirror of
https://github.com/python/cpython.git
synced 2024-11-25 10:54:51 +08:00
Fixed a bunch of screwed-up logic and inconsistent terminology.
Fixed 'build_extensions()' to pay attention to the 'rpath' element of the 'build_info' dictionary.
This commit is contained in:
parent
2f557a2ec4
commit
cdb20ba56d
@ -56,7 +56,7 @@ class build_ext (Command):
|
||||
"C preprocessor macros to define"),
|
||||
('undef=', 'U',
|
||||
"C preprocessor macros to undefine"),
|
||||
('libs=', 'l',
|
||||
('libraries=', 'l',
|
||||
"external C libraries to link with"),
|
||||
('library-dirs=', 'L',
|
||||
"directories to search for external C libraries"),
|
||||
@ -79,7 +79,7 @@ class build_ext (Command):
|
||||
self.include_dirs = None
|
||||
self.define = None
|
||||
self.undef = None
|
||||
self.libs = None
|
||||
self.libraries = None
|
||||
self.library_dirs = None
|
||||
self.rpath = None
|
||||
self.link_objects = None
|
||||
@ -117,8 +117,8 @@ class build_ext (Command):
|
||||
if exec_py_include != py_include:
|
||||
self.include_dirs.insert (0, exec_py_include)
|
||||
|
||||
if type (self.libs) is StringType:
|
||||
self.libs = [self.libs]
|
||||
if type (self.libraries) is StringType:
|
||||
self.libraries = [self.libraries]
|
||||
|
||||
# XXX how the heck are 'self.define' and 'self.undef' supposed to
|
||||
# be set?
|
||||
@ -144,11 +144,33 @@ class build_ext (Command):
|
||||
# First, sanity-check the 'self.extensions' list
|
||||
self.check_extensions_list (self.extensions)
|
||||
|
||||
# Simplify the following logic (eg. don't have to worry about
|
||||
# appending to None)
|
||||
if self.libraries is None:
|
||||
self.libraries = []
|
||||
if self.library_dirs is None:
|
||||
self.library_dirs = []
|
||||
if self.rpath is None:
|
||||
self.rpath = []
|
||||
|
||||
# If we were asked to build any C/C++ libraries, make sure that the
|
||||
# directory where we put them is in the library search path for
|
||||
# linking extensions.
|
||||
if self.distribution.libraries:
|
||||
build_clib = self.find_peer ('build_clib')
|
||||
self.libraries.extend (build_clib.get_library_names() or [])
|
||||
self.library_dirs.append (build_clib.build_clib)
|
||||
|
||||
# Setup the CCompiler object that we'll use to do all the
|
||||
# compiling and linking
|
||||
self.compiler = new_compiler (verbose=self.verbose,
|
||||
dry_run=self.dry_run,
|
||||
force=self.force)
|
||||
|
||||
# And make sure that any compile/link-related options (which might
|
||||
# come from the command-line or from the setup script) are set in
|
||||
# that CCompiler object -- that way, they automatically apply to
|
||||
# all compiling and linking done here.
|
||||
if self.include_dirs is not None:
|
||||
self.compiler.set_include_dirs (self.include_dirs)
|
||||
if self.define is not None:
|
||||
@ -158,8 +180,8 @@ class build_ext (Command):
|
||||
if self.undef is not None:
|
||||
for macro in self.undef:
|
||||
self.compiler.undefine_macro (macro)
|
||||
if self.libs is not None:
|
||||
self.compiler.set_libraries (self.libs)
|
||||
if self.libraries is not None:
|
||||
self.compiler.set_libraries (self.libraries)
|
||||
if self.library_dirs is not None:
|
||||
self.compiler.set_library_dirs (self.library_dirs)
|
||||
if self.rpath is not None:
|
||||
@ -167,15 +189,7 @@ class build_ext (Command):
|
||||
if self.link_objects is not None:
|
||||
self.compiler.set_link_objects (self.link_objects)
|
||||
|
||||
if self.distribution.libraries:
|
||||
build_clib = self.find_peer ('build_clib')
|
||||
self.libraries = build_clib.get_library_names () or []
|
||||
self.library_dirs = [build_clib.build_clib]
|
||||
else:
|
||||
self.libraries = []
|
||||
self.library_dirs = []
|
||||
|
||||
# Now the real loop over extensions
|
||||
# Now actually compile and link everything.
|
||||
self.build_extensions (self.extensions)
|
||||
|
||||
|
||||
@ -257,10 +271,9 @@ class build_ext (Command):
|
||||
extra_objects = build_info.get ('extra_objects')
|
||||
if extra_objects:
|
||||
objects.extend (extra_objects)
|
||||
libraries = (self.libraries +
|
||||
(build_info.get ('libraries') or []))
|
||||
library_dirs = (self.library_dirs +
|
||||
(build_info.get ('library_dirs') or []))
|
||||
libraries = build_info.get ('libraries')
|
||||
library_dirs = build_info.get ('library_dirs')
|
||||
rpath = build_info.get ('rpath')
|
||||
extra_args = build_info.get ('extra_link_args') or []
|
||||
|
||||
if self.compiler.compiler_type == 'msvc':
|
||||
@ -299,6 +312,7 @@ class build_ext (Command):
|
||||
self.compiler.link_shared_object (objects, ext_filename,
|
||||
libraries=libraries,
|
||||
library_dirs=library_dirs,
|
||||
runtime_library_dirs=rpath,
|
||||
extra_postargs=extra_args,
|
||||
debug=self.debug)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user