diff options
| author | Steven Knight <knight@baldmt.com> | 2003-02-21 14:55:50 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2003-02-21 14:55:50 (GMT) |
| commit | dbe12389b6253c305749d8e2d4e1558477a15787 (patch) | |
| tree | 01b3f95492320b80b57f4c86d23ffe629d290a58 /src/engine | |
| parent | 6496b8580990a6efadaeeaf65c25ee7d5964c7a1 (diff) | |
| download | SCons-dbe12389b6253c305749d8e2d4e1558477a15787.zip SCons-dbe12389b6253c305749d8e2d4e1558477a15787.tar.gz SCons-dbe12389b6253c305749d8e2d4e1558477a15787.tar.bz2 | |
Support fetching SConscript files from source code management systems.
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/SCons/Builder.py | 2 | ||||
| -rw-r--r-- | src/engine/SCons/BuilderTests.py | 2 | ||||
| -rw-r--r-- | src/engine/SCons/Node/FS.py | 4 | ||||
| -rw-r--r-- | src/engine/SCons/Node/FSTests.py | 15 | ||||
| -rw-r--r-- | src/engine/SCons/Node/NodeTests.py | 19 | ||||
| -rw-r--r-- | src/engine/SCons/Node/__init__.py | 2 | ||||
| -rw-r--r-- | src/engine/SCons/Script/SConscript.py | 13 | ||||
| -rw-r--r-- | src/engine/SCons/Tool/RCS.py | 2 |
8 files changed, 53 insertions, 6 deletions
diff --git a/src/engine/SCons/Builder.py b/src/engine/SCons/Builder.py index aceadbc..5047a44 100644 --- a/src/engine/SCons/Builder.py +++ b/src/engine/SCons/Builder.py @@ -144,7 +144,7 @@ def _init_nodes(builder, env, overrides, tlist, slist): for t in tlist: if t.side_effect: raise UserError, "Multiple ways to build the same target were specified for: %s" % str(t) - if t.has_builder(): + if t.has_builder(fetch = 0): if t.env != env: raise UserError, "Two different environments were specified for the same target: %s"%str(t) elif t.overrides != overrides: diff --git a/src/engine/SCons/BuilderTests.py b/src/engine/SCons/BuilderTests.py index 1c574d3..3ad6b23 100644 --- a/src/engine/SCons/BuilderTests.py +++ b/src/engine/SCons/BuilderTests.py @@ -140,7 +140,7 @@ class BuilderTestCase(unittest.TestCase): return self.name def builder_set(self, builder): self.builder = builder - def has_builder(self): + def has_builder(self, fetch=1): return not self.builder is None def env_set(self, env, safe=0): self.env = env diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py index 5a8687e..e2378b1 100644 --- a/src/engine/SCons/Node/FS.py +++ b/src/engine/SCons/Node/FS.py @@ -1016,7 +1016,7 @@ class File(Entry): if self.fs.CachePath and self.fs.cache_force and os.path.exists(self.path): CachePush(self, None, None) - def has_builder(self): + def has_builder(self, fetch = 1): """Return whether this Node has a builder or not. If this Node doesn't have an explicit builder, this is where we @@ -1025,7 +1025,7 @@ class File(Entry): try: b = self.builder except AttributeError: - if not os.path.exists(self.path): + if fetch and not os.path.exists(self.path): b = self.src_builder() else: b = None diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py index f1160c1..1e8bc92 100644 --- a/src/engine/SCons/Node/FSTests.py +++ b/src/engine/SCons/Node/FSTests.py @@ -1180,6 +1180,10 @@ class has_builderTestCase(unittest.TestCase): f1 = fs.File('f1', d) f2 = fs.File('f2', d) f3 = fs.File('f3', d) + f4 = fs.File('f4', d) + f5 = fs.File('f5', d) + f6 = fs.File('f6', d) + f7 = fs.File('f7', d) h = f1.has_builder() assert not h, h @@ -1196,6 +1200,17 @@ class has_builderTestCase(unittest.TestCase): assert h, h assert f3.builder is b1, f3.builder + test.write(['sub', 'f4'], "sub/f4\n") + test.write(['sub', 'f6'], "sub/f6\n") + h = f4.has_builder(fetch = 0) + assert not h, h + h = f5.has_builder(fetch = 0) + assert not h, h + h = f6.has_builder(fetch = 1) + assert not h, h + h = f7.has_builder(fetch = 1) + assert h, h + class prepareTestCase(unittest.TestCase): def runTest(self): """Test the prepare() method""" diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py index b47106d..a9fa361 100644 --- a/src/engine/SCons/Node/NodeTests.py +++ b/src/engine/SCons/Node/NodeTests.py @@ -255,6 +255,25 @@ class NodeTestCase(unittest.TestCase): node.builder_set(b) assert node.builder == b + def test_has_builder(self): + """Test the has_builder() method + """ + n1 = SCons.Node.Node() + n2 = SCons.Node.Node() + n3 = SCons.Node.Node() + + assert n1.has_builder() == 0 + assert n2.has_builder(fetch = 0) == 0 + assert n3.has_builder(fetch = 1) == 0 + + n1.builder_set(Builder()) + n2.builder_set(Builder()) + n3.builder_set(Builder()) + + assert n1.has_builder() == 1 + assert n2.has_builder(fetch = 0) == 1 + assert n3.has_builder(fetch = 1) == 1 + def test_builder_sig_adapter(self): """Test the node's adapter for builder signatures """ diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py index 27ff4db..0a64586 100644 --- a/src/engine/SCons/Node/__init__.py +++ b/src/engine/SCons/Node/__init__.py @@ -208,7 +208,7 @@ class Node: def builder_set(self, builder): self.builder = builder - def has_builder(self): + def has_builder(self, fetch = 1): """Return whether this Node has a builder or not. In Boolean tests, this turns out to be a *lot* more efficient diff --git a/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py index f2d07fd..4c54879 100644 --- a/src/engine/SCons/Script/SConscript.py +++ b/src/engine/SCons/Script/SConscript.py @@ -186,8 +186,21 @@ def SConscript(*ls, **kw): f = fn else: f = SCons.Node.FS.default_fs.File(str(fn)) + _file_ = None if f.rexists(): _file_ = open(f.rstr(), "r") + elif f.has_builder(): + # The SConscript file apparently exists in a source + # code management system. Build it, but then remove + # the builder so that it doesn't get built *again* + # during the actual build phase. + f.build() + f.builder_set(None) + s = str(f) + if os.path.exists(s): + _file_ = open(s, "r") + + if _file_: SCons.Node.FS.default_fs.chdir(f.dir) if sconscript_chdir: old_dir = os.getcwd() diff --git a/src/engine/SCons/Tool/RCS.py b/src/engine/SCons/Tool/RCS.py index 1f5489b..f6276c5 100644 --- a/src/engine/SCons/Tool/RCS.py +++ b/src/engine/SCons/Tool/RCS.py @@ -48,7 +48,7 @@ def generate(env, platform): env['CO'] = 'co' env['RCS'] = 'rcs' env['RCSFLAGS'] = '' - env['RCSCOM'] = '$CO $RCSFLAGS -p $TARGET,v > $TARGET' + env['RCSCOM'] = '$CO $RCSFLAGS $TARGET' def exists(env): return env.Detect('rcs') |
