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

Tobias Herzog pasdVn3 at gmx.de
Mon Feb 4 15:16:37 EST 2019


I am using a custom code generator, which sources and targets are
defined in a configuration file (pathes are relative to current working
directory of the code generator). If I run this code generator  from a
variant dir ("cd" before executing it...), it will not find the source
files (duplicate=0). Furthemore the source files should anyway be in-
tree because they should be checked in (ok - I could copy them of
course).Additionally I don't use the nodes directly, that are returned
by the builder/command of the code generator (what would work, as
descibed below), as I need some of the targets for one build step, and
some of the targets for another. That is why I "hard coded" the pathes
to those target files at some other point within this VariantDir
SConscript.
This is indeed a strange design, and probably the best would be to
adjust the code generator to fit my needs better. But currently I
can't/don't want to change too much with our build system to increase
the acceptance for SCons within our developement team :).For now I can
live with the solution to reference those files from the SCons root
(#/...).
Thanks for your support,Tobias
Am Mittwoch, den 30.01.2019, 13:59 -0800 schrieb Bill Deegan:
> Sure that make sense.
> Once again foo is not a file which is yet to be built, so scons can
> find it through the variantdir magic.
> 
> Any reason not to move all your build under a variantdir ?
> 
> 
> On Wed, Jan 30, 2019 at 11:44 AM Tobias Herzog <pasdVn3 at gmx.de>
> wrote:
> > No, I meant the order of invoking scons:
> > > scons -Q --tree=all A/B/foocat A/B/foo.src > A/B/foo+-A/B/foo  +-
> > A/B/foo.src  +-/bin/cat> scons -Q --tree=all build/barcat A/B/foo >
> > build/bar+-build/bar  +-A/B/foo  +-/bin/cat
> > 
> > Am Dienstag, den 29.01.2019, 15:12 -0800 schrieb Bill Deegan:
> > > so if you swap the order it works?
> > > 
> > > 
> > > 
> > >         SConscript('A/SConscript', variant_dir='build',
> > > duplicate=0)
> > > 
> > >         SConscript('A/B/SConscript')
> > > 
> > > 
> > > 
> > > On Tue, Jan 29, 2019 at 1:13 PM Tobias Herzog <pasdVn3 at gmx.de>
> > > wrote:
> > > > Hmm, don't know if I understand you correctly, but if A/B/foo
> > > > is a regular file (i.e. not a generated file, a build target)
> > > > everything works as expected, because scons looks up
> > > > build/B/foo (which is in fact not there, because i Use
> > > > duplicate=0 with the VariantDir) in the original directory
> > > > A/B/foo.That is also why the build succeeds, when I execute the
> > > > two commands below in reverse order (because I "manually" build
> > > > A/B/foo before).
> > > > Anyway, I accept the answer that this is intended behavior :)
> > > > 
> > > > 
> > > > Am Dienstag, den 29.01.2019, 09:17 -0800 schrieb Bill Deegan:
> > > > > 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
> > > > > > 
> > > > > 
> > > > > _______________________________________________Scons-users
> > > > > mailing listScons-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
> > > > 
> > > 
> > > _______________________________________________Scons-users
> > > mailing listScons-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
> > 
> 
> _______________________________________________Scons-users mailing
> listScons-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/20190204/518c08df/attachment.html>


More information about the Scons-users mailing list