[Scons-dev] SCons missing dependencies (not rebuilding files when they need to be)

Bill Deegan bill at baddogconsulting.com
Fri May 6 14:37:00 EDT 2016


On Fri, May 6, 2016 at 1:09 PM, Krzysztof Trzciński <
christopher.trzcinski at gmail.com> wrote:

> New SConstruct:
>
>     env = Environment(tools=['default', 'textfile'])
>
>     prints = []
>     for num in (1,2):
>         printcc = env.Textfile(
>             '{0}/print.cc'.format(num),
>             [(
>                 '#include <iostream>\n'
>                 '#include <fstream>\n'
>                 'int main(int argc, char **argv)\n'
>                 '{{\n'
>                 '    std::cout << "Printing " << {0} << std::endl;\n'
>                 '    std::ofstream f(argv[2]);\n'
>                 '    f << {0} << "\\n";\n'
>                 '    return 0;\n'
>                 '}}\n'
>             ).format(num),],
>         )
>
>
>         prints.extend(env.Program(
>             '{0}/print'.format(num),
>             printcc
>         ))
>
>     env['SHCXX'] = prints[int(ARGUMENTS['use_task'])]
>
>     result = env.SharedObject(printcc)
>
>     Default(prints+result)
>
> Results:
>
>     $ scons use_task=0
>     scons: Reading SConscript files ...
>     scons: done reading SConscript files.
>     scons: Building targets ...
>     Creating '1/print.cc'
>     g++ -o 1/print.o -c 1/print.cc
>     g++ -o 1/print 1/print.o
>     Creating '2/print.cc'
>     g++ -o 2/print.o -c 2/print.cc
>     g++ -o 2/print 2/print.o
>     1/print -o 2/print.os -c -fPIC 2/print.cc
>     Printing 1
>     scons: done building targets.
>
>     $ cat 2/print.os
>     1
>
> # Build with different compiler
>
>     $ scons use_task=1
>     scons: Reading SConscript files ...
>     scons: done reading SConscript files.
>     scons: Building targets ...
>     scons: `1/print' is up to date.
>     scons: `2/print' is up to date.
>     scons: `2/print.os' is up to date.
>     scons: done building targets.
>
>     $ cat 2/print.os
>     1
>
> # Did not refresh!
>
> # Just to double check from clean:
>
>     $ rm 2/print.os
>
>     $ scons use_task=1
>     scons: Reading SConscript files ...
>     scons: done reading SConscript files.
>     scons: Building targets ...
>     scons: `1/print' is up to date.
>     scons: `2/print' is up to date.
>     2/print -o 2/print.os -c -fPIC 2/print.cc
>     Printing 2
>     scons: done building targets.
>
>     $ cat 2/print.os
>     2
>
>
> I don't think I should be putting compiler as "source" in `SharedObject`.
>

You don't have to, it's automatically added.
Try running --tree=prune.


>
> Note that all Textfile/Program builders do here is make this self
> contained.
> The actual issues is with last three lines.
>
> In my case it was just that "prints" was populated using operating system
> provided paths/binaries to compilers.
>
> So I take this is a bug and it needs fixing? (if someone could point me in
> right direction I could try that, but I am not quite sure where substitions
> take place and why $SHXCC would behave differently to $SHCXX.path in a
> command).
>

Don't file a bug yet. Let me dig into this a little bit and get back to you.
May take a couple days.

-Bill
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist2.pair.net/pipermail/scons-dev/attachments/20160506/e7f68967/attachment.html>


More information about the Scons-dev mailing list