diff options
Diffstat (limited to 'src/engine/SCons/Taskmaster.py')
| -rw-r--r-- | src/engine/SCons/Taskmaster.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py index 5bfa3d6..8f9839e 100644 --- a/src/engine/SCons/Taskmaster.py +++ b/src/engine/SCons/Taskmaster.py @@ -282,6 +282,16 @@ class Taskmaster: self.ready = node break + # Skip this node if any of its children have failed. This + # catches the case where we're descending a top-level target + # and one of our children failed while trying to be built + # by a *previous* descent of an earlier top-level target. + def failed(node): return node.get_state() == SCons.Node.failed + if filter(failed, children): + node.set_state(SCons.Node.failed) + self.candidates.pop() + continue + # Detect dependency cycles: def in_stack(node): return node.get_state() == SCons.Node.stack cycle = filter(in_stack, children) |
