mirror of https://github.com/python/cpython.git
Rene Liebscher: check if the extension file (.so or .pyd) is
up-to-date with respect to the source files; that way, we don't needlessly rebuild just because object files go away.
This commit is contained in:
parent
59d382e482
commit
521340034e
|
@ -12,7 +12,7 @@
|
||||||
from types import *
|
from types import *
|
||||||
from distutils.core import Command
|
from distutils.core import Command
|
||||||
from distutils.errors import *
|
from distutils.errors import *
|
||||||
|
from distutils.dep_util import newer_group
|
||||||
|
|
||||||
# An extension name is just a dot-separated list of Python NAMEs (ie.
|
# An extension name is just a dot-separated list of Python NAMEs (ie.
|
||||||
# the same as a fully-qualified module name).
|
# the same as a fully-qualified module name).
|
||||||
|
@ -285,6 +285,28 @@ def build_extensions (self):
|
||||||
"a list of source filenames") % extension_name
|
"a list of source filenames") % extension_name
|
||||||
sources = list (sources)
|
sources = list (sources)
|
||||||
|
|
||||||
|
fullname = self.get_ext_fullname (extension_name)
|
||||||
|
if self.inplace:
|
||||||
|
# ignore build-lib -- put the compiled extension into
|
||||||
|
# the source tree along with pure Python modules
|
||||||
|
|
||||||
|
modpath = string.split (fullname, '.')
|
||||||
|
package = string.join (modpath[0:-1], '.')
|
||||||
|
base = modpath[-1]
|
||||||
|
|
||||||
|
build_py = self.find_peer ('build_py')
|
||||||
|
package_dir = build_py.get_package_dir (package)
|
||||||
|
ext_filename = os.path.join (package_dir,
|
||||||
|
self.get_ext_filename(base))
|
||||||
|
else:
|
||||||
|
ext_filename = os.path.join (self.build_lib,
|
||||||
|
self.get_ext_filename(fullname))
|
||||||
|
|
||||||
|
if not newer_group(sources, ext_filename, 'newer'):
|
||||||
|
self.announce ("skipping '%s' extension (up-to-date)" %
|
||||||
|
extension_name)
|
||||||
|
continue # 'for' loop over all extensions
|
||||||
|
else:
|
||||||
self.announce ("building '%s' extension" % extension_name)
|
self.announce ("building '%s' extension" % extension_name)
|
||||||
|
|
||||||
# First step: compile the source code to object files. This
|
# First step: compile the source code to object files. This
|
||||||
|
@ -357,23 +379,6 @@ def build_extensions (self):
|
||||||
self.mkpath (os.path.dirname (implib_file))
|
self.mkpath (os.path.dirname (implib_file))
|
||||||
# if MSVC
|
# if MSVC
|
||||||
|
|
||||||
fullname = self.get_ext_fullname (extension_name)
|
|
||||||
if self.inplace:
|
|
||||||
# ignore build-lib -- put the compiled extension into
|
|
||||||
# the source tree along with pure Python modules
|
|
||||||
|
|
||||||
modpath = string.split (fullname, '.')
|
|
||||||
package = string.join (modpath[0:-1], '.')
|
|
||||||
base = modpath[-1]
|
|
||||||
|
|
||||||
build_py = self.find_peer ('build_py')
|
|
||||||
package_dir = build_py.get_package_dir (package)
|
|
||||||
ext_filename = os.path.join (package_dir,
|
|
||||||
self.get_ext_filename(base))
|
|
||||||
else:
|
|
||||||
ext_filename = os.path.join (self.build_lib,
|
|
||||||
self.get_ext_filename(fullname))
|
|
||||||
|
|
||||||
self.compiler.link_shared_object (objects, ext_filename,
|
self.compiler.link_shared_object (objects, ext_filename,
|
||||||
libraries=libraries,
|
libraries=libraries,
|
||||||
library_dirs=library_dirs,
|
library_dirs=library_dirs,
|
||||||
|
|
Loading…
Reference in New Issue