if type(t) is type(""):
t = [t]
dict['TARGETS'] = PathList(map(os.path.normpath, t))
- dict['TARGET'] = dict['TARGETS'][0]
+ if dict['TARGETS']:
+ dict['TARGET'] = dict['TARGETS'][0]
if kw.has_key('source'):
s = kw['source']
del kw['source']
# if print_actions:
# XXX: WHAT SHOULD WE PRINT HERE?
if execute_actions:
- dict = apply(self.subst_dict, (), kw)
- return apply(self.function, (), dict)
+ return apply(self.function, (), kw)
def get_contents(self, **kw):
"""Return the signature contents of this callable action.
assert show_string == expect7, show_string
def function1(**kw):
- open(kw['out'], 'w').write("function1\n")
+ open(kw['target'], 'w').write("function1\n")
return 1
builder = SCons.Builder.Builder(action = function1)
- r = builder.execute(out = outfile)
+ r = builder.execute(target = outfile)
assert r == 1
c = test.read(outfile, 'r')
assert c == "function1\n", c
assert 'foo1.in' in map(lambda x: x.path, t.sources)
assert 'foo2.in' in map(lambda x: x.path, t.sources)
- def testFunc(ENV, target, source):
+ def testFunc(env, target, source):
assert target == 'foo.out'
- assert source == 'foo1.in foo2.in' or source == 'foo2.in foo1.in'
- env.Command(target='foo.out', source=['foo1.in','foo2.in'],
- action=testFunc)
+ assert 'foo1.in' in source and 'foo2.in' in source, source
+ return 0
+ t = env.Command(target='foo.out', source=['foo1.in','foo2.in'],
+ action=testFunc)
+ assert t.builder
+ assert t.builder.action.__class__.__name__ == 'FunctionAction'
+ t.build()
+ assert 'foo1.in' in map(lambda x: x.path, t.sources)
+ assert 'foo2.in' in map(lambda x: x.path, t.sources)
def test_subst(self):
"""Test substituting construction variables within strings
try:
self.target.build()
except BuildError, e:
- sys.stderr.write("scons: *** [%s] Error %d\n" % (e.node, e.stat))
+ sys.stderr.write("scons: *** [%s] Error %s\n" % (e.node, str(e.stat)))
raise
def failed(self):
""")
test.write('SConstruct', """
+def buildIt(env, target, source):
+ contents = open(source[0], 'rb').read()
+ file = open(target, 'wb')
+ file.write(contents)
+ file.close()
+ return 0
+
env = Environment()
env.Command(target = 'f1.out', source = 'f1.in',
- action = r'%s build.py $TARGET $SOURCES')
+ action = buildIt)
env.Command(target = 'f2.out', source = 'f2.in',
action = r'%s' + " build.py temp2 $SOURCES\\n" + r'%s' + " build.py $TARGET temp2")
env.Command(target = 'f3.out', source = 'f3.in',
action = [r'%s build.py temp3 $SOURCES',
r'%s build.py $TARGET temp3'])
-# Eventually, add ability to do execute Python code.
-""" % (python, python, python, python, python))
+""" % (python, python, python, python))
test.write('f1.in', "f1.in\n")
test.write('SConstruct', """
import os
-import SCons.Util
-def func(**kw):
- cmd = SCons.Util.scons_subst(r'%s build.py $TARGET 3 $SOURCES', kw, {})
+import string
+def func(env, target, source):
+ cmd = r'%s build.py %%s 3 %%s' %% (target, string.join(source, ' '))
+ print cmd
return os.system(cmd)
B = Builder(name = 'B', action = func)
env = Environment(BUILDERS = [B])
env.B(target = 'foo.out', source = 'foo.in')
""" % python)
-test.run(arguments = '.')
+test.run(arguments = '.', stderr = None)
test.fail_test(test.read('foo.out') != "3\nfoo.in\n")
test.write('SConstruct', """
import os
-import SCons.Util
class bld:
def __init__(self):
- self.cmd = r'%s build.py $TARGET 4 $SOURCES'
- def __call__(self, **kw):
- cmd = SCons.Util.scons_subst(self.cmd, kw, {})
+ self.cmd = r'%s build.py %%s 4 %%s'
+ def __call__(self, env, target, source):
+ cmd = self.get_contents(env, target, source)
+ print cmd
return os.system(cmd)
- def get_contents(self, **kw):
- cmd = SCons.Util.scons_subst(self.cmd, kw, {})
- return cmd
+ def get_contents(self, env, target, source):
+ return self.cmd %% (target, string.join(source, ' '))
B = Builder(name = 'B', action = bld())
env = Environment(BUILDERS = [B])
env.B(target = 'foo.out', source = 'foo.in')