[Scons-users] Mixing VariantDirs with "in-tree" build

Bill Deegan bill at baddogconsulting.com
Tue Jan 29 12:17:04 EST 2019


Your issue has nothing to do with whether the file foo is generated or just
a regular file.
You've created via your variantdir usage (as far as scons is concerned) a
tree which looks like this:

+-SConstruct
+-A
  +-SConscript
  +-B
    +-SConscript
    +-foo.src
    +-foo <- to be built
+-build  <-- this is the directory scons "works in" when evaluating the
SConscript below
   +- SConscript
   +- B <-- you're looking for this which doesn't and won't exist
      +- foo <-- and this which doesn't and won't exist.

Does that help?




On Mon, Jan 28, 2019 at 11:30 PM pasdVn <pasdVn3 at gmx.de> wrote:

> Thanks for your quick reply!
>
> I thought that SCons is looking up a node via srcnode() and thus in the
> original location, if it is not found in the current variant dir, but
> obviously this is not the case here, because A/B/foo is a generate file
> (i.e. a target), right?
>
>
> Am 29. Januar 2019 00:51:33 MEZ schrieb Bill Deegan <
> bill at baddogconsulting.com>:
>>
>> See below
>>
>> On Mon, Jan 28, 2019 at 12:33 PM Tobias Herzog <pasdVn3 at gmx.de> wrote:
>>
>>> Hi scons users,
>>>
>>> consider the following demo project:
>>>
>>> +-SConsctuct
>>> +-A
>>>   +-SConscript
>>>   +-B
>>>     +-SConscript
>>>     +-foo.src
>>>
>>>
>>> With SConstruct:
>>>         SConscript('A/B/SConscript')
>>>         SConscript('A/SConscript', variant_dir='build', duplicate=0)
>>>
>>> A/SConscript:
>>>         Command(source='B/foo',
>>>                 target='bar',
>>>                 action='cat $SOURCE > $TARGET')
>>> A/B/SConscript:
>>>         Command(target='foo',
>>>                 source='foo.src',
>>>                 action='cat $SOURCE > $TARGET')
>>>
>>>
>>> No I do:
>>> > scons -Q --tree=all build/bar
>>> scons: *** [build/bar] Source `A/B/foo' not found, needed by target
>>> `build/bar'.
>>> +-build/bar
>>>   +-A/B/foo
>>>   +-/bin/cat
>>>
>>> and
>>> >scons -Q --tree=all A/B/foo
>>> cat A/B/foo.src > A/B/foo
>>> +-A/B/foo
>>>   +-A/B/foo.src
>>>   +-/bin/cat
>>>
>>>
>>> I know that this is a quite strage project setup, but nevertheless I
>>> would expect scons to detect the depencies correct. Is this a bug, or
>>> am I missing something?
>>>
>>
>> You're missing something.
>> By saying:
>>
>> SConscript('A/SConscript', variant_dir='build', duplicate=0)
>>
>> This is the same as:
>> VariantDir('build','A', duplicate=0)
>> SConscript('build/SConscript')
>>
>> So when you're asking for B/foo from that SConscript, you're actually
>> asking for build/B/foo.
>> If you changed it to "#/A/B/foo" it would work, or "../A/B/foo"
>>
>>
>>
>>> If I Return/Export the foo-node and use it in the Command in
>>> A/SConscript it works as intended.
>>>
>>>
>>> Thanks,
>>> Tobias
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20190129/8bd27ddb/attachment-0001.html>


More information about the Scons-users mailing list