Nested SCons Builder

I would like to do some post-processing of SCons Builder output:

env = Environment()
bld = Builder(action = 'postproc $SOURCE $TARGET')
env.Append(BUILDERS = {'PostProc': bld})
prog = env.Program('foo.c')
env.PostProc('foo.pp',prog)

This works as expected. However, I would prefer to use one call to Builder, so I thought I could nest it like this:

env = Environment()
bld = Builder(action = 'postproc $SOURCE $TARGET')
env.Append(BUILDERS = {'PostProc': bld})

def build_pp(env, target, source):
    prog = env.Program(source)
    return env.PostProc(target,prog)

bld2 = Builder(action = build_pp)
env.Append(BUILDERS = {'BuildPP': bld2})

env.BuildPP('foo.pp','foo.c')

But an acceptable result:

scons: *** [foo.pp] Multiple ways to build the same target were specified for: foo.pp (from ['foo.c'] and from ['foo'])

Any idea how this can be implemented?

+1
source share
1 answer

Combining several collectors into one (possibly in combination with advanced argument analysis, etc.) is usually done with the pseudo-Builder. Check out Chapter 20, Pseudo-Constructors: AddMethod Function, User Guide , and a guide to writing tools at http://www.scons.org/wiki/ToolsForFools .

+4

All Articles