summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-11-14 21:30:31 (GMT)
committerSteven Knight <knight@baldmt.com>2004-11-14 21:30:31 (GMT)
commitf654911b566927cea1761e92e93c93f2943cdd8a (patch)
tree4a78aa2a0fba4dee83bc1b5f653e25f17714db3e
parent09cad6ed1ffb436742adbbf6608bb094b4a236e2 (diff)
downloadSCons-f654911b566927cea1761e92e93c93f2943cdd8a.zip
SCons-f654911b566927cea1761e92e93c93f2943cdd8a.tar.gz
SCons-f654911b566927cea1761e92e93c93f2943cdd8a.tar.bz2
Support override expansions within target and source files names.
-rw-r--r--src/CHANGES.txt3
-rw-r--r--src/engine/SCons/Environment.py8
-rw-r--r--src/engine/SCons/EnvironmentTests.py6
-rw-r--r--test/Command.py5
4 files changed, 17 insertions, 5 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index 003163b..4755f18 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -127,6 +127,9 @@ RELEASE 0.97 - XXX
- Allow Aliases to have actions that will be executed whenever
any of the expanded Alias targets are out of date.
+ - Fix expansion of env.Command() overrides within target and
+ source file names.
+
From Wayne Lee:
- Avoid "maximum recursion limit" errors when removing $(-$) pairs
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index ef3b2d0..740297b 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -1135,11 +1135,9 @@ class Base:
source files using the supplied action. Action may
be any type that the Builder constructor will accept
for an action."""
- nkw = self.subst_kw(kw)
- nkw['action'] = action
- nkw['source_factory'] = self.fs.Entry
- bld = apply(SCons.Builder.Builder, (), nkw)
- return bld(self, target, source)
+ bld = SCons.Builder.Builder(action = action,
+ source_factory = self.fs.Entry)
+ return apply(bld, (self, target, source), kw)
def Depends(self, target, dependency):
"""Explicity specify that 'target's depend on 'dependency'."""
diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py
index 9b84f3c..4c9a0be 100644
--- a/src/engine/SCons/EnvironmentTests.py
+++ b/src/engine/SCons/EnvironmentTests.py
@@ -1995,6 +1995,12 @@ f5: \
t.build()
assert x[0] == 'magic word', x
+ t = env.Command(target='${X}.out', source='${X}.in',
+ action = 'foo',
+ X = 'xxx')[0]
+ assert str(t) == 'xxx.out', str(t)
+ assert 'xxx.in' in map(lambda x: x.path, t.sources)
+
def test_Configure(self):
"""Test the Configure() method"""
# Configure() will write to a local temporary file.
diff --git a/test/Command.py b/test/Command.py
index eddc1f5..6563bd9 100644
--- a/test/Command.py
+++ b/test/Command.py
@@ -85,6 +85,9 @@ Command(target = 'f8.out', source = 'f8.in',
action = r"%(python)s build.py $TARGET $SOURCE")
env.Command(target = 'f9.out', source = 'f9.in',
action = r"$EXPAND")
+env.Command(target = '${F10}.out', source = '${F10}.in',
+ action = r"%(python)s build.py $TARGET $SOURCE",
+ F10 = 'f10')
""" % {'python': python})
test.write('f1.in', "f1.in\n")
@@ -98,6 +101,7 @@ test.write('f6.in', "f6.in\n")
test.write('f7.in', "f7.in\n")
test.write('f8.in', "f8.in\n")
test.write('f9.in', "f9.in\n")
+test.write('f10.in', "f10.in\n")
test.run(arguments = '.')
@@ -110,5 +114,6 @@ test.must_match('f6.out', "f6.in\n")
test.must_match('f7.out', "f7.in\n")
test.must_match('f8.out', "f8.in\n")
test.must_match('f9.out', "f9.in\n")
+test.must_match('f10.out', "f10.in\n")
test.pass_test()