summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarek Ziadé <ziade.tarek@gmail.com>2010-01-11 22:50:29 (GMT)
committerTarek Ziadé <ziade.tarek@gmail.com>2010-01-11 22:50:29 (GMT)
commitdc0f487c3b811fb41b629046c3fdd7c9f3aa73a2 (patch)
treeb43349a2cbd519453fcd52a0b8914fef415ed7dc
parent102d70e06c2e39114ee3fc0ab54384a0f6a971af (diff)
downloadcpython-dc0f487c3b811fb41b629046c3fdd7c9f3aa73a2.zip
cpython-dc0f487c3b811fb41b629046c3fdd7c9f3aa73a2.tar.gz
cpython-dc0f487c3b811fb41b629046c3fdd7c9f3aa73a2.tar.bz2
Fixed #5372: .o files are now always rebuilt because file age test don't work in some case
-rw-r--r--Lib/distutils/ccompiler.py96
-rw-r--r--Misc/NEWS4
2 files changed, 6 insertions, 94 deletions
diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py
index c046915..83ba83a 100644
--- a/Lib/distutils/ccompiler.py
+++ b/Lib/distutils/ccompiler.py
@@ -337,10 +337,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 not isinstance(outdir, str):
@@ -370,41 +367,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 = {}
@@ -413,10 +375,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
@@ -463,56 +422,6 @@ class CCompiler:
# _fix_compile_args ()
-
- def _prep_compile(self, sources, output_dir, depends=None):
- """Decide which souce files must be recompiled.
-
- Determine the list of object files corresponding to 'sources',
- and figure out which ones really need to be recompiled.
- Return a list of all object files and a dictionary telling
- which source files can be skipped.
- """
- # Get the list of expected output (object) files
- 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 ()
-
-
def _fix_object_args (self, objects, output_dir):
"""Typecheck and fix up some arguments supplied to various methods.
Specifically: ensure that 'objects' is a list; if output_dir is
@@ -679,7 +588,6 @@ class CCompiler:
Raises CompileError on failure.
"""
-
# A concrete compiler class can either override this method
# entirely or implement _compile().
diff --git a/Misc/NEWS b/Misc/NEWS
index 979ac8b..1595214 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -19,6 +19,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.
+
What's New in Python 2.7 alpha 2?
=================================