]> granicus.if.org Git - python/commitdiff
Rene Liebscher: check if the extension file (.so or .pyd) is
authorGreg Ward <gward@python.net>
Fri, 26 May 2000 01:31:53 +0000 (01:31 +0000)
committerGreg Ward <gward@python.net>
Fri, 26 May 2000 01:31:53 +0000 (01:31 +0000)
up-to-date with respect to the source files; that way, we
don't needlessly rebuild just because object files go away.

Lib/distutils/command/build_ext.py

index 4fb51ac7132b050d3fca3722d253d4ecc04f9ae9..acf1d7b7d55f088fb465de60e954e9df9bcfe313 100644 (file)
@@ -12,7 +12,7 @@ import sys, os, string, re
 from types import *
 from distutils.core import Command
 from distutils.errors import *
-
+from distutils.dep_util import newer_group
 
 # An extension name is just a dot-separated list of Python NAMEs (ie.
 # the same as a fully-qualified module name).
@@ -285,7 +285,29 @@ class build_ext (Command):
                        "a list of source filenames") % extension_name
             sources = list (sources)
 
-            self.announce ("building '%s' extension" % extension_name)
+            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)
 
             # First step: compile the source code to object files.  This
             # drops the object files in the current directory, regardless
@@ -357,23 +379,6 @@ class build_ext (Command):
                 self.mkpath (os.path.dirname (implib_file))
             # 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, 
                                               libraries=libraries,
                                               library_dirs=library_dirs,