aboutsummaryrefslogtreecommitdiff
path: root/build/b.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'build/b.cxx')
-rw-r--r--build/b.cxx34
1 files changed, 33 insertions, 1 deletions
diff --git a/build/b.cxx b/build/b.cxx
index 0764622..5096bc2 100644
--- a/build/b.cxx
+++ b/build/b.cxx
@@ -480,7 +480,7 @@ main (int argc, char* argv[])
// Multiple targets in the same operation can be done in parallel.
//
- vector<reference_wrapper<target>> tgs;
+ vector<reference_wrapper<target>> tgs, psp;
tgs.reserve (os.size ());
// First resolve and match all the targets. We don't want to
@@ -531,11 +531,43 @@ main (int argc, char* argv[])
switch (execute (act, t))
{
+ case target_state::postponed:
+ {
+ info << "target " << t << " is postponed";
+ psp.push_back (t);
+ break;
+ }
+ case target_state::unchanged:
+ {
+ info << "target " << t << " is up to date";
+ break;
+ }
+ case target_state::changed:
+ break;
+ case target_state::failed:
+ //@@ This could probably happen in a parallel build.
+ default:
+ assert (false);
+ }
+ }
+
+ // Re-examine postponed targets.
+ //
+ for (target& t: psp)
+ {
+ switch (t.state)
+ {
+ case target_state::postponed:
+ {
+ info << "target " << t << " unable to do at this time";
+ break;
+ }
case target_state::unchanged:
{
info << "target " << t << " is up to date";
break;
}
+ case target_state::unknown: // Assume something was done to it.
case target_state::changed:
break;
case target_state::failed: