[Scons-users] Follow-up: Success depends on target name!

Johan Holmberg johan556 at gmail.com
Sat Oct 20 20:18:47 EDT 2012


On Thu, Oct 4, 2012 at 11:19 PM, Marc Branchaud <mbranchaud at xiplink.com> wrote:

> On 12-10-04 04:57 PM, Marc Branchaud wrote:

>> Hi all,

>>

>> I think I've found a bug, but I might be missing something. I'm trying to

>> use a custom toolchain for my builds. The following SConstruct doesn't work

>> in SCons 2.2.0 (nor even in SCons 1.2.0):

>>

>> -- 8< --

>> e = DefaultEnvironment()

>>

>> mycc = e.Command(target="tools/mycc",

>> source="/usr/bin/gcc",

>> action="cp $SOURCE $TARGET")

>>

>> e.Replace(CC = mycc[0].abspath)

>>

>> e.Program(target='testapp', source='test.c')

>> -- >8 --

>

> While crafting the example for this problem, I ran into some really confusing

> behaviour. The build works after I change the above SConstruct so that mycc

> is no longer in the tools/ subdirectory:

>

> e = DefaultEnvironment()

> mycc = e.Command(target="mycc",

> source="/usr/bin/gcc",

> action="cp $SOURCE $TARGET")

> e.Replace(CC = mycc[0].abspath)

> e.Program(target='testapp', source='test.c')

>

> But it fails if I give the Program a different target name! The following

> names all cause SCons to miss the dependency on mycc:

> app

> app2

> 2app

> glop

> gloptest (but testglop works)

> abcdefg

> aragon (but waragon works)

> frodo (but phrodo works)

> gimli (but qgimli works)

> legolas (but plegolas works)

> boromir (but sauron works)

>

> I can't imagine what SCons has against the Fellowship of the Ring... :)

>

> All these failing target names work if I don't replace CC in the environment.

> Also, I see the same behaviour in both 1.2.0 and 2.2.0.

>

> Can anyone else confirm this weirdness?

>


I guess you ran SCons by issuing the command without any arguments:

$ scons

Then the order SCons tries to build the targets "mycc" and "testapp"
(or various Tolkien names), may depend on the names of the targets.
And "mycc" happens to be built before some of the names and after some
of the others. I believe Scons *never* understands that "mycc" is
needed to compile "test.c". If you try running SCons with the
application name as argument, I think you will find that your build
file always fails, eg:

$ scons testapp


( You might also notice that all working names are lexicographically >
"mycc" :). I don't know if this is an accident, but perhaps the SCons
code tries to build targets in that order if it can't find any
dependencies that say otherwise. )

/Johan Holmberg


More information about the Scons-users mailing list