From f654911b566927cea1761e92e93c93f2943cdd8a Mon Sep 17 00:00:00 2001 From: Steven Knight Date: Sun, 14 Nov 2004 21:30:31 +0000 Subject: Support override expansions within target and source files names. --- src/CHANGES.txt | 3 +++ src/engine/SCons/Environment.py | 8 +++----- src/engine/SCons/EnvironmentTests.py | 6 ++++++ test/Command.py | 5 +++++ 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() -- cgit v0.12