diff options
author | Evan Martin <martine@danga.com> | 2010-10-31 01:29:54 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2010-10-31 01:29:54 (GMT) |
commit | 0a4010790b10dcb3ed3c7af0c0a5ba06155c996d (patch) | |
tree | 1571e6f9c1e644feef7045ee3bd39a6ade2be691 | |
parent | 0e56cfbde90fd2471f70d826f3d5c70930730119 (diff) | |
download | Ninja-0a4010790b10dcb3ed3c7af0c0a5ba06155c996d.zip Ninja-0a4010790b10dcb3ed3c7af0c0a5ba06155c996d.tar.gz Ninja-0a4010790b10dcb3ed3c7af0c0a5ba06155c996d.tar.bz2 |
use success exit code when nothing to build
-rw-r--r-- | ninja.cc | 9 | ||||
-rw-r--r-- | ninja.h | 20 | ||||
-rw-r--r-- | ninja_jumble.cc | 20 | ||||
-rw-r--r-- | ninja_test.cc | 2 |
4 files changed, 28 insertions, 23 deletions
@@ -58,8 +58,13 @@ int main(int argc, char** argv) { Builder builder(&state); for (int i = optind; i < argc; ++i) { if (!builder.AddTarget(argv[i], &err)) { - fprintf(stderr, "%s\n", err.c_str()); - return 1; + if (!err.empty()) { + fprintf(stderr, "%s\n", err.c_str()); + return 1; + } else { + // Added a target that is already up-to-date; not really + // an error. + } } } @@ -164,25 +164,7 @@ struct Builder { : state_(state), plan_(state), disk_interface_(&default_disk_interface_) {} virtual ~Builder() {} - Node* AddTarget(const string& name, string* err) { - Node* node = plan_.state_->LookupNode(name); - if (!node) { - *err = "unknown target: '" + name + "'"; - return NULL; - } - node->file_->StatIfNecessary(disk_interface_); - if (node->in_edge_) { - if (!node->in_edge_->RecomputeDirty(state_, disk_interface_, err)) - return false; - } - if (!node->dirty_) { - *err = "target is clean; nothing to do"; - return NULL; - } - if (!plan_.AddTarget(node, err)) - return NULL; - return node; - } + Node* AddTarget(const string& name, string* err); bool Build(Shell* shell, string* err); State* state_; diff --git a/ninja_jumble.cc b/ninja_jumble.cc index fa0023f..cbba387 100644 --- a/ninja_jumble.cc +++ b/ninja_jumble.cc @@ -409,6 +409,25 @@ bool Shell::RunCommand(Edge* edge) { } +Node* Builder::AddTarget(const string& name, string* err) { + Node* node = plan_.state_->LookupNode(name); + if (!node) { + *err = "unknown target: '" + name + "'"; + return NULL; + } + node->file_->StatIfNecessary(disk_interface_); + if (node->in_edge_) { + if (!node->in_edge_->RecomputeDirty(state_, disk_interface_, err)) + return false; + } + if (!node->dirty_) + return NULL; // Intentionally no error. + + if (!plan_.AddTarget(node, err)) + return NULL; + return node; +} + bool Builder::Build(Shell* shell, string* err) { if (plan_.want_.empty()) { *err = "no work to do"; @@ -493,4 +512,3 @@ string EvalString::Evaluate(Env* env) { } return result; } - diff --git a/ninja_test.cc b/ninja_test.cc index 1e31e77..e376935 100644 --- a/ninja_test.cc +++ b/ninja_test.cc @@ -219,7 +219,7 @@ TEST_F(BuildTest, Chain) { err.clear(); commands_ran_.clear(); EXPECT_FALSE(builder_.AddTarget("c5", &err)); - ASSERT_EQ("target is clean; nothing to do", err); + ASSERT_EQ("", err); EXPECT_TRUE(builder_.Build(this, &err)); ASSERT_EQ(0, commands_ran_.size()); |