summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Taskmaster.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/SCons/Taskmaster.py')
-rw-r--r--src/engine/SCons/Taskmaster.py10
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)