aboutsummaryrefslogtreecommitdiff
path: root/build2/context
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-02-10 08:15:48 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-02-13 12:42:42 +0200
commitabccaf9596461215fce0e32322133fb6c39be44f (patch)
tree3fc16a6e6142d65e6b47ae686ab845cc164478cc /build2/context
parentbcb2a89e111a918a48a132a2a29e0c26d724591d (diff)
Implement parallel error propagation, keep_going mode
Keep going is the default but there is now the -s|--serial-stop that makes the driver run serially and stop at first error. Also fix some lockups, other minor improvements/features.
Diffstat (limited to 'build2/context')
-rw-r--r--build2/context19
1 files changed, 18 insertions, 1 deletions
diff --git a/build2/context b/build2/context
index da2ced5..3c731a5 100644
--- a/build2/context
+++ b/build2/context
@@ -111,7 +111,7 @@ namespace build2
// }
// }
//
- // sched.wait (); // (3)
+ // sched.wait (task_count); // (3)
//
// Here is what's going on here:
//
@@ -237,6 +237,14 @@ namespace build2
current_mode = inner_oif.mode;
}
+ // Keep going flag.
+ //
+ // Note that setting it to false is not of much help unless we are running
+ // serially. In parallel we queue most of the things up before we see any
+ // failures.
+ //
+ extern bool keep_going;
+
// Total number of dependency relationships in the current action.
// Together with the target::dependents count it is incremented
// during the rule search & match phase and is decremented during
@@ -321,6 +329,15 @@ namespace build2
}
void
+ diag_did (ostream&, const action&, const target&);
+
+ inline diag_phrase
+ diag_did (const action& a, const target& t)
+ {
+ return diag_phrase {a, t, &diag_did};
+ }
+
+ void
diag_done (ostream&, const action&, const target&);
inline diag_phrase