[Scons-users] Double backslashes in $SOURCE while using a TempFileMunge

Dirk Bächle tshortik at gmx.de
Mon Aug 26 18:06:54 EDT 2013


Hi Andreas,

I pondered a bit over this problem...please find my approach below.

On 23.08.2013 17:15, Andreas Schmidl wrote:

> Hello!

>

> Currently I'm integrating a crossplatform toolchain into scons. I

> would like to use it for building libraries and elf files for an

> embedded system. Because I have to many objects which should be packed

> in one library with the helb of ar, I would like to use the

> TempFileMunge method of scons. The temp file, which is generated by

> the TempFileMunge class of scons uses in the pathes to the objects

> only one \ (backslash). But ar expects that backslashes are escaped

> with two backslashes.

>

> [...]

> I tried to move the replace operation which is currently located in

> the TempFileMunge class to the env['ARCOM'] variable. It looks like this:

> "${TEMPFILE('$AR $ARFLAGS $TARGET [a.replace('\\', '\\\\') for a in

> $SOURCES]')}"

>

> But this is an invalid expression. (Reported by python). Is it

> possible to write such a replace statement into an scons environment

> variable?

>


Instead of doing everything at once, I'd try to split things up a
little. First, prepare the expanded list of sources:

def expand_sources(target, source, env, for_signature):
slist = [str(a).replace('\\','\\\\') for a in source]
return ' '.join(*slist)

env['EXPANDED_SOURCES'] = expand_sources

and then redefine the ARCOM variable to:

env['ARCOM'] = "${TEMPFILE('$AR $ARFLAGS $TARGET $EXPANDED_SOURCES')}"

Note: The code above is completely untested, but I hope you get the idea
behind it.

Best regards,

Dirk



More information about the Scons-users mailing list