diff options
author | Steven Knight <knight@baldmt.com> | 2004-05-01 19:21:11 (GMT) |
---|---|---|
committer | Steven Knight <knight@baldmt.com> | 2004-05-01 19:21:11 (GMT) |
commit | 813976940844198600a08144299f85a792480211 (patch) | |
tree | e8eb13d3c86c19da758a1384c01d198d45a2488b /src/engine | |
parent | 0f502e03db08b7c2920c8affb7d6b1f9dcf492ef (diff) | |
download | SCons-813976940844198600a08144299f85a792480211.zip SCons-813976940844198600a08144299f85a792480211.tar.gz SCons-813976940844198600a08144299f85a792480211.tar.bz2 |
Fix use of timestamps with --implicit-cache. (Anthony Roach)
Diffstat (limited to 'src/engine')
-rw-r--r-- | src/engine/SCons/Node/__init__.py | 6 | ||||
-rw-r--r-- | src/engine/SCons/Scanner/ScannerTests.py | 9 | ||||
-rw-r--r-- | src/engine/SCons/Scanner/__init__.py | 6 | ||||
-rw-r--r-- | src/engine/SCons/Sig/__init__.py | 3 |
4 files changed, 15 insertions, 9 deletions
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index ceac5ca..9897d1a 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -390,12 +390,14 @@ class Node: if not self.has_builder(): return + build_env = self.get_build_env() + if implicit_cache and not implicit_deps_changed: implicit = self.get_stored_implicit() if implicit is not None: implicit = map(self.implicit_factory, implicit) self._add_child(self.implicit, self.implicit_dict, implicit) - calc = SCons.Sig.default_calc + calc = build_env.get_calculator() if implicit_deps_unchanged or calc.current(self, calc.bsig(self)): return else: @@ -407,8 +409,6 @@ class Node: self._children_reset() self.del_binfo() - build_env = self.get_build_env() - for child in self.children(scan=0): scanner = child.source_scanner if scanner: diff --git a/src/engine/SCons/Scanner/ScannerTests.py b/src/engine/SCons/Scanner/ScannerTests.py index 91a0f8c..4e662a2 100644 --- a/src/engine/SCons/Scanner/ScannerTests.py +++ b/src/engine/SCons/Scanner/ScannerTests.py @@ -26,6 +26,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import sys import unittest import UserDict +import SCons.Sig import SCons.Scanner @@ -45,6 +46,8 @@ class DummyEnvironment(UserDict.UserDict): if type(path) != type([]): path = [path] return map(self.subst, path) + def get_calculator(self): + return SCons.Sig.default_calc class FindPathDirsTestCase(unittest.TestCase): def test_FindPathDirs(self): @@ -61,7 +64,7 @@ class FindPathDirsTestCase(unittest.TestCase): assert result == ('xxx', 'foo'), result class ScannerTestCase(unittest.TestCase): - + def func(self, filename, env, target, *args): self.filename = filename self.env = env @@ -69,7 +72,7 @@ class ScannerTestCase(unittest.TestCase): if len(args) > 0: self.arg = args[0] - + return self.deps def test(self, scanner, env, filename, deps, *args): @@ -148,7 +151,7 @@ class ScannerTestCase(unittest.TestCase): """Test the Scanner.Base class scan_check() method""" def my_scan(filename, env, target, *args): return [] - def check(node, s=self): + def check(node, env, s=self): s.checked[node] = 1 return 1 env = DummyEnvironment() diff --git a/src/engine/SCons/Scanner/__init__.py b/src/engine/SCons/Scanner/__init__.py index 102849d..8f6c9e6 100644 --- a/src/engine/SCons/Scanner/__init__.py +++ b/src/engine/SCons/Scanner/__init__.py @@ -158,7 +158,7 @@ class Base: environment that will be passed to the scanner function. A list of direct dependency nodes for the specified node will be returned. """ - if self.scan_check and not self.scan_check(node): + if self.scan_check and not self.scan_check(node, env): return [] if not self.argument is _null: @@ -199,8 +199,8 @@ class Current(Base): """ def __init__(self, *args, **kw): - def current_check(node): - c = not node.has_builder() or node.current(SCons.Sig.default_calc) + def current_check(node, env): + c = not node.has_builder() or node.current(env.get_calculator()) return c kw['scan_check'] = current_check apply(Base.__init__, (self,) + args, kw) diff --git a/src/engine/SCons/Sig/__init__.py b/src/engine/SCons/Sig/__init__.py index 6bdfe09..dac3f6c 100644 --- a/src/engine/SCons/Sig/__init__.py +++ b/src/engine/SCons/Sig/__init__.py @@ -458,6 +458,9 @@ class Calculator: oldtime, oldbsig, oldcsig = node.get_prevsiginfo() + if type(newsig) != type(oldbsig): + return 0 + if not node.has_builder() and node.get_timestamp() == oldtime: return 1 |