diff options
| author | Steven Knight <knight@baldmt.com> | 2004-09-17 00:48:57 (GMT) |
|---|---|---|
| committer | Steven Knight <knight@baldmt.com> | 2004-09-17 00:48:57 (GMT) |
| commit | 8f74c71eb3b45e68bc9d90e5049353c73c0d228a (patch) | |
| tree | 306c4ddad8653168dd858a7f5cfe551f3b2bd47a /src/engine | |
| parent | 205bce15b461669f84830ec57ca19c7377f2a528 (diff) | |
| download | SCons-8f74c71eb3b45e68bc9d90e5049353c73c0d228a.zip SCons-8f74c71eb3b45e68bc9d90e5049353c73c0d228a.tar.gz SCons-8f74c71eb3b45e68bc9d90e5049353c73c0d228a.tar.bz2 | |
Fix -k sometimes trying to link executables even when library builds fail.
Diffstat (limited to 'src/engine')
| -rw-r--r-- | src/engine/SCons/Script/__init__.py | 10 | ||||
| -rw-r--r-- | src/engine/SCons/Taskmaster.py | 10 | ||||
| -rw-r--r-- | src/engine/SCons/TaskmasterTests.py | 6 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py index 5dd907c..dfee767 100644 --- a/src/engine/SCons/Script/__init__.py +++ b/src/engine/SCons/Script/__init__.py @@ -1008,7 +1008,10 @@ def _main(args, parser): task_class = BuildTask # default action is to build targets opening_message = "Building targets ..." closing_message = "done building targets." - failure_message = "building terminated because of errors." + if keep_going_on_error: + failure_message = "done building targets (errors occurred during build)." + else: + failure_message = "building terminated because of errors." if options.question: task_class = QuestionTask try: @@ -1016,7 +1019,10 @@ def _main(args, parser): task_class = CleanTask opening_message = "Cleaning targets ..." closing_message = "done cleaning targets." - failure_message = "cleaning terminated because of errors." + if keep_going_on_error: + closing_message = "done cleaning targets (errors occurred during clean)." + else: + failure_message = "cleaning terminated because of errors." except AttributeError: pass 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) diff --git a/src/engine/SCons/TaskmasterTests.py b/src/engine/SCons/TaskmasterTests.py index 040d52a..ef7f51a 100644 --- a/src/engine/SCons/TaskmasterTests.py +++ b/src/engine/SCons/TaskmasterTests.py @@ -422,6 +422,12 @@ class TaskmasterTestCase(unittest.TestCase): assert t.get_target() == n7 t.executed() + n1 = Node("n1") + n2 = Node("n2", [n1]) + n1.set_state(SCons.Node.failed) + tm = SCons.Taskmaster.Taskmaster([n2]) + assert tm.next_task() is None + def test_make_ready_out_of_date(self): """Test the Task.make_ready() method's list of out-of-date Nodes |
