diff options
author | Tarek Ziadé <ziade.tarek@gmail.com> | 2010-01-11 22:54:57 +0000 |
---|---|---|
committer | Tarek Ziadé <ziade.tarek@gmail.com> | 2010-01-11 22:54:57 +0000 |
commit | 06426fcb7088aed289792aa88c5beb686e613124 (patch) | |
tree | e75dc216449848230b67b32ec577dab5084db14d | |
parent | ea7e6bc0f2fc12cdab1626ffaa0b12d1244c9a78 (diff) | |
download | cpython-git-06426fcb7088aed289792aa88c5beb686e613124.tar.gz |
Merged revisions 77424 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r77424 | tarek.ziade | 2010-01-11 23:50:29 +0100 (Mon, 11 Jan 2010) | 1 line
Fixed #5372: .o files are now always rebuilt because file age test don't work in some case
........
-rw-r--r-- | Lib/distutils/ccompiler.py | 86 | ||||
-rw-r--r-- | Misc/NEWS | 4 |
2 files changed, 9 insertions, 81 deletions
diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py index 87d6e27396..bf92d78026 100644 --- a/Lib/distutils/ccompiler.py +++ b/Lib/distutils/ccompiler.py @@ -338,10 +338,7 @@ class CCompiler: def _setup_compile(self, outdir, macros, incdirs, sources, depends, extra): - """Process arguments and decide which source files to compile. - - Merges _fix_compile_args() and _prep_compile(). - """ + """Process arguments and decide which source files to compile.""" if outdir is None: outdir = self.output_dir elif type(outdir) is not StringType: @@ -371,41 +368,6 @@ class CCompiler: output_dir=outdir) assert len(objects) == len(sources) - # XXX should redo this code to eliminate skip_source entirely. - # XXX instead create build and issue skip messages inline - - if self.force: - skip_source = {} # rebuild everything - for source in sources: - skip_source[source] = 0 - elif depends is None: - # If depends is None, figure out which source files we - # have to recompile according to a simplistic check. We - # just compare the source and object file, no deep - # dependency checking involving header files. - skip_source = {} # rebuild everything - for source in sources: # no wait, rebuild nothing - skip_source[source] = 1 - - n_sources, n_objects = newer_pairwise(sources, objects) - for source in n_sources: # no really, only rebuild what's - skip_source[source] = 0 # out-of-date - else: - # If depends is a list of files, then do a different - # simplistic check. Assume that each object depends on - # its source and all files in the depends list. - skip_source = {} - # L contains all the depends plus a spot at the end for a - # particular source file - L = depends[:] + [None] - for i in range(len(objects)): - source = sources[i] - L[-1] = source - if newer_group(L, objects[i]): - skip_source[source] = 0 - else: - skip_source[source] = 1 - pp_opts = gen_preprocess_options(macros, incdirs) build = {} @@ -414,10 +376,7 @@ class CCompiler: obj = objects[i] ext = os.path.splitext(src)[1] self.mkpath(os.path.dirname(obj)) - if skip_source[src]: - log.debug("skipping %s (%s up-to-date)", src, obj) - else: - build[obj] = src, ext + build[obj] = (src, ext) return macros, objects, extra, pp_opts, build @@ -464,7 +423,6 @@ class CCompiler: # _fix_compile_args () - def _prep_compile(self, sources, output_dir, depends=None): """Decide which souce files must be recompiled. @@ -477,42 +435,9 @@ class CCompiler: objects = self.object_filenames(sources, output_dir=output_dir) assert len(objects) == len(sources) - if self.force: - skip_source = {} # rebuild everything - for source in sources: - skip_source[source] = 0 - elif depends is None: - # If depends is None, figure out which source files we - # have to recompile according to a simplistic check. We - # just compare the source and object file, no deep - # dependency checking involving header files. - skip_source = {} # rebuild everything - for source in sources: # no wait, rebuild nothing - skip_source[source] = 1 - - n_sources, n_objects = newer_pairwise(sources, objects) - for source in n_sources: # no really, only rebuild what's - skip_source[source] = 0 # out-of-date - else: - # If depends is a list of files, then do a different - # simplistic check. Assume that each object depends on - # its source and all files in the depends list. - skip_source = {} - # L contains all the depends plus a spot at the end for a - # particular source file - L = depends[:] + [None] - for i in range(len(objects)): - source = sources[i] - L[-1] = source - if newer_group(L, objects[i]): - skip_source[source] = 0 - else: - skip_source[source] = 1 - - return objects, skip_source - - # _prep_compile () - + # Return an empty dict for the "which source files can be skipped" + # return value to preserve API compatibility. + return objects, {} def _fix_object_args (self, objects, output_dir): """Typecheck and fix up some arguments supplied to various methods. @@ -680,7 +605,6 @@ class CCompiler: Raises CompileError on failure. """ - # A concrete compiler class can either override this method # entirely or implement _compile(). @@ -48,6 +48,10 @@ Core and Builtins Library ------- +- Issue #5372: Drop the reuse of .o files in Distutils' ccompiler (since + Extension extra options may change the output without changing the .c + file). Initial patch by Collin Winter. + - Issue #7617: Make sure distutils.unixccompiler.UnixCCompiler recognizes gcc when it has a fully qualified configuration prefix. Initial patch by Arfrever. |