diff options
| author | Steven Knight <knight@baldmt.com> | 2001-12-13 04:42:05 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2001-12-13 04:42:05 (GMT) |
| commit | c81b4be9b7a06dc41cc1f425887d4600fa47f0bc (patch) | |
| tree | a800b193675c98825b6af007b88b1fb51c41c3e4 /src/engine/SCons/Node | |
| parent | b9f370f232001d693f10279a3bcff8a0e66eb303 (diff) | |
| download | SCons-c81b4be9b7a06dc41cc1f425887d4600fa47f0bc.zip SCons-c81b4be9b7a06dc41cc1f425887d4600fa47f0bc.tar.gz SCons-c81b4be9b7a06dc41cc1f425887d4600fa47f0bc.tar.bz2 | |
Bug fixes for Scanner handling of subdirectories and Environment copying, courtesy Charles Crain.
Diffstat (limited to 'src/engine/SCons/Node')
| -rw-r--r-- | src/engine/SCons/Node/FS.py | 11 | ||||
| -rw-r--r-- | src/engine/SCons/Node/FSTests.py | 11 | ||||
| -rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 12 | ||||
| -rw-r--r-- | src/engine/SCons/Node/__init__.py | 8 |
4 files changed, 29 insertions, 13 deletions
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index cd12f6d..648e1f9 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -466,11 +466,12 @@ class File(Entry): return self.dir.sconsign().get(self.name) def scan(self): - if not self.scanned.has_key(self.scanner) and self.env: - if self.scanner: - self.add_implicit(self.scanner.scan(self.path, self.env), - self.scanner) - self.scanned[self.scanner] = 1 + if self.env: + for scn in self.scanners: + if not self.scanned.has_key(scn): + self.add_implicit(scn.scan(self.path, self.env), + scn) + self.scanned[scn] = 1 def __createDir(self): # ensure that the directories for this node are diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py index aecbfb4..523f96b 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -301,15 +301,16 @@ class FSTestCase(unittest.TestCase): match(e13.path, "subdir/subdir/e13") # Test scanning - f1.scanner = Scanner() + scn = Scanner() + f1.scanners = [ scn ] f1.scan() - assert f1.implicit[f1.scanner][0].path_ == os.path.join("d1", "f1") - del f1.implicit[f1.scanner] + assert f1.implicit[scn][0].path_ == os.path.join("d1", "f1") + del f1.implicit[scn] f1.scan() assert len(f1.implicit) == 0, f1.implicit - del f1.scanned[f1.scanner] + del f1.scanned[scn] f1.scan() - assert f1.implicit[f1.scanner][0].path_ == os.path.join("d1", "f1") + assert f1.implicit[scn][0].path_ == os.path.join("d1", "f1") # Test building a file whose directory is not there yet... f1 = fs.File(test.workpath("foo/bar/baz/ack")) diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py index 9dec623..673ab25 100644 --- a/src/engine/SCons/Node/NodeTests.py +++ b/src/engine/SCons/Node/NodeTests.py @@ -259,6 +259,18 @@ class NodeTestCase(unittest.TestCase): assert node.implicit[3] == [two, three] assert node.implicit[4] == [three, four, one] + def test_scan(self): + """Test Scanner functionality""" + class DummyScanner: + pass + ds=DummyScanner() + node = SCons.Node.Node() + assert node.scanners == [], node.scanners + node.scanner_set(ds) + assert node.scanners == [ ds ], node.scanners + node.scan() + assert node.scanned[ds] == 1, node.scanned + def test_children(self): """Test fetching the "children" of a Node. """ diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index 17bf539..ddcddfb 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -60,7 +60,7 @@ class Node: self.implicit = {} # implicit (scanned) dependencies self.parents = [] self.builder = None - self.scanner = None + self.scanners = [] self.scanned = {} self.env = None self.state = None @@ -103,10 +103,12 @@ class Node: return Adapter(self) def scanner_set(self, scanner): - self.scanner = scanner + if not scanner in self.scanners: + self.scanners.append(scanner) def scan(self): - self.scanned[self.scanner] = 1 + for scn in self.scanners: + self.scanned[scn] = 1 def env_set(self, env, safe=0): if safe and self.env: |
