[Scons-users] Handling implicit dependencies for generated source files in variant dirs (with Jinja templates)
Henry Gomersall
heng at cantab.net
Fri Oct 11 09:51:14 EDT 2013
On 11/10/13 10:37, Dirk Bächle wrote:
> On 10.10.2013 15:39, Henry Gomersall wrote:
>> On 10/10/13 13:08, Dirk Bächle wrote:
>>> [...]
>>>
>>> Can you try to do the env.Jinja() calls within the "src/SConscript"
>>> too? You probably have to Export() your list of template files for
>>> this...
>> Ok, I've tried this.
>>
>> Two things become apparent:
>> 1) the templates themselves are not copied - this leads to a problem
>> in the way the tool handles the rendering. Essentially, there are a
>> couple of dicts in the environment that contains the rendering
>> specific variables (the "context"). One of these dicts itself
>> contains a series of contexts that are specific to each template that
>> is rendered. I currently look up this template specific context with
>> a key which is the filename of the template. When it is called, the
>> node thinks the path is the variant_dir, not the original source, so
>> the lookup fails (it actually just renders nonsense as a consequence).
>> 2) There are some static files in the src directory that are ignored
>> (i.e. not copied) when building the variant dirs, but the compilation
>> fails because it requires them.
>>
>> Are the two problems above the same problem? Why are the files not
>> copied?
>>
>
> When the files are not copied it means that SCons doesn't see that
> they are really needed. You can check the dependencies that SCons
> detected with the command
>
> scons --tree=derived target_name
>
> where "target_name" can be any intermediate file that gets built
> (check the MAN page for more --tree/--debug options). Please, poke
> around and try to isolate the problem. Which files exactly aren't
> copied? In which way do you try to add them to the dependency graph?
I've now fixed this. Many thanks Dirk for your patient and very helpful
responses.
I think I fixed the problem by having the scanner return the full
dependencies for a template in a recursive manner (as per my other
question). This means the dependency tree is now complete and so moving
the logic into a child SConscript works just fine.
It was all made possible through inspection of the tree using the --tree
tool.
If anyone is interested, the updated tool for rendering Jinja templates
is here:
https://gist.github.com/hgomersall/6915968
It's currently limited in how the scanner inspects the files, but it
should be easy to add additional regex searches. I guess ideally it
would inspect the internals of Jinja directly to find this, but that's a
whole other rabbit hole!
Cheers,
Henry
More information about the Scons-users
mailing list