summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons
diff options
context:
space:
mode:
authorSteven Knight <knight@baldmt.com>2004-11-21 16:18:50 (GMT)
committerSteven Knight <knight@baldmt.com>2004-11-21 16:18:50 (GMT)
commit8781e4655cea19b34cd062768d9f09b359fe9a09 (patch)
tree3b66939e6dc14061317ca19f3371b60c2272c215 /src/engine/SCons
parentffc625f8cf332399ba754bf2ebe9e700e5122eac (diff)
downloadSCons-8781e4655cea19b34cd062768d9f09b359fe9a09.zip
SCons-8781e4655cea19b34cd062768d9f09b359fe9a09.tar.gz
SCons-8781e4655cea19b34cd062768d9f09b359fe9a09.tar.bz2
Fix Value node expansion in command-line strings. (Kevin Quick)
Diffstat (limited to 'src/engine/SCons')
-rw-r--r--src/engine/SCons/Util.py10
-rw-r--r--src/engine/SCons/UtilTests.py19
2 files changed, 21 insertions, 8 deletions
diff --git a/src/engine/SCons/Util.py b/src/engine/SCons/Util.py
index ec809b9..896abaf 100644
--- a/src/engine/SCons/Util.py
+++ b/src/engine/SCons/Util.py
@@ -493,7 +493,15 @@ def subst_dict(target, source):
dict['TARGET'] = Target_or_Source(tnl)
if source:
- snl = NLWrapper(source, lambda x: x.rfile().get_subst_proxy())
+ def get_src_subst_proxy(node):
+ try:
+ rfile = node.rfile
+ except AttributeError:
+ pass
+ else:
+ node = rfile()
+ return node.get_subst_proxy()
+ snl = NLWrapper(source, get_src_subst_proxy)
dict['SOURCES'] = Targets_or_Sources(snl)
dict['SOURCE'] = Target_or_Source(snl)
diff --git a/src/engine/SCons/UtilTests.py b/src/engine/SCons/UtilTests.py
index 18fd3c2..c5c5297 100644
--- a/src/engine/SCons/UtilTests.py
+++ b/src/engine/SCons/UtilTests.py
@@ -1364,27 +1364,32 @@ class UtilTestCase(unittest.TestCase):
assert SOURCES == ['s1', 's2'], d['SOURCES']
assert str(d['SOURCE']) == 's1', d['SOURCE']
- class N:
+ class V:
+ # Fake Value node with no rfile() method.
def __init__(self, name):
self.name = name
def __str__(self):
- return self.name
- def rfile(self):
- return self.__class__('rstr-' + self.name)
+ return 'v-'+self.name
def get_subst_proxy(self):
return self
+ class N(V):
+ def rfile(self):
+ return self.__class__('rstr-' + self.name)
+
t3 = N('t3')
t4 = DummyNode('t4')
+ t5 = V('t5')
s3 = DummyNode('s3')
s4 = N('s4')
- d = subst_dict(target=[t3, t4], source=[s3, s4])
+ s5 = V('s5')
+ d = subst_dict(target=[t3, t4, t5], source=[s3, s4, s5])
TARGETS = map(lambda x: str(x), d['TARGETS'])
TARGETS.sort()
- assert TARGETS == ['t3', 't4'], d['TARGETS']
+ assert TARGETS == ['t4', 'v-t3', 'v-t5'], TARGETS
SOURCES = map(lambda x: str(x), d['SOURCES'])
SOURCES.sort()
- assert SOURCES == ['rstr-s4', 's3'], d['SOURCES']
+ assert SOURCES == ['s3', 'v-rstr-s4', 'v-s5'], SOURCES
def test_PrependPath(self):
"""Test prepending to a path"""