[Scons-dev] please try latest default branch

Gary Oberbrunner garyo at oberbrunner.com
Sun Feb 2 15:49:05 EST 2014


Well, my smaller test case with just the "important" files works fine so
far. It's probably just _too_ small. But in the meantime I have a more
complete understanding of what's happening.

I traced through the taskmaster as all this is happening.

Note that in Taskmaster-speak, "considering" is prior to "evaluating".

1. Taskmaster considers all-defuns.obj (This is in find_next_ready_node)
- That checks node status of all children (via target.children()
because Node.children() defaults its scan arg to 1),
including all-defuns.c and recursively the dir mkl
- mkl is in state no_state (never examined), so
it returns changed=True which means all-defuns.c "has changed" --
and that gets cached as the node status for all-defuns.c (incorrectly).
This happens during the get_all_children() call for all-defuns.obj.
2. Taskmaster evaluates mkl; it's actually fine and taskmaster marks
it up-to-date (in taskmaster).
3. Taskmaster evaluates all-defuns.c;
It checks node up-to-date states for children and itself
and it itself is cached as out of date (see #1 above), so it
decides to rebuild it.

Some possibilities for fixing or workarounds:

-> Maybe a node changed state that relies on a no_state child should
not get cached? (This could be a little complicated to implement)
-> maybe no_state shouldn't mean "changed"? But it probably can't
mean "not changed" either... would have to add a third "don't know"
state.
-> maybe if we encounter a no_state object while checking parents it
should try to set its state? (but that would require evaluating it, and
it's too early for that)

--
Gary
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://two.pairlist.net/pipermail/scons-dev/attachments/20140202/50d796d2/attachment.html>


More information about the Scons-dev mailing list