summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2010-10-31 01:29:54 (GMT)
committerEvan Martin <martine@danga.com>2010-10-31 01:29:54 (GMT)
commit0a4010790b10dcb3ed3c7af0c0a5ba06155c996d (patch)
tree1571e6f9c1e644feef7045ee3bd39a6ade2be691
parent0e56cfbde90fd2471f70d826f3d5c70930730119 (diff)
downloadNinja-0a4010790b10dcb3ed3c7af0c0a5ba06155c996d.zip
Ninja-0a4010790b10dcb3ed3c7af0c0a5ba06155c996d.tar.gz
Ninja-0a4010790b10dcb3ed3c7af0c0a5ba06155c996d.tar.bz2
use success exit code when nothing to build
-rw-r--r--ninja.cc9
-rw-r--r--ninja.h20
-rw-r--r--ninja_jumble.cc20
-rw-r--r--ninja_test.cc2
4 files changed, 28 insertions, 23 deletions
diff --git a/ninja.cc b/ninja.cc
index 7d9e25b..0bcfb95 100644
--- a/ninja.cc
+++ b/ninja.cc
@@ -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.
+ }
}
}
diff --git a/ninja.h b/ninja.h
index 4fd790f..94e9d19 100644
--- a/ninja.h
+++ b/ninja.h
@@ -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());