summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Node
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2001-12-13 04:42:05 (GMT)
committerSteven Knight <knight@baldmt.com>2001-12-13 04:42:05 (GMT)
commitc81b4be9b7a06dc41cc1f425887d4600fa47f0bc (patch)
treea800b193675c98825b6af007b88b1fb51c41c3e4 /src/engine/SCons/Node
parentb9f370f232001d693f10279a3bcff8a0e66eb303 (diff)
downloadSCons-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.py11
-rw-r--r--src/engine/SCons/Node/FSTests.py11
-rw-r--r--src/engine/SCons/Node/NodeTests.py12
-rw-r--r--src/engine/SCons/Node/__init__.py8
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: