[Scons-users] Follow-up: Success depends on target name!
Marc Branchaud
mbranchaud at xiplink.com
Mon Oct 22 10:28:48 EDT 2012
On 12-10-20 08:18 PM, Johan Holmberg wrote:
> 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" :).
Good catch!
Yes, specifying "testapp" on the command line makes the build fail.
Also, renaming "mycc" to "Amycc" fixes the broken program names, but *not* if
they're specified on the command line.
> 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. )
Sure seems like it.
I've updated bug 2877 with this info.
Thanks!
M.
More information about the Scons-users
mailing list