From: Evan Martin Date: Sat, 4 Dec 2010 23:15:39 +0000 (-0800) Subject: don't fail on missing implicit deps X-Git-Tag: release-120715~586 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d0025e234cf3fc0a13f45d179880578285609b59;p=platform%2Fupstream%2Fninja.git don't fail on missing implicit deps --- diff --git a/build.cc b/build.cc index 6282b5f..c8e9f27 100644 --- a/build.cc +++ b/build.cc @@ -37,10 +37,12 @@ bool Plan::AddSubTarget(Node* node, vector* stack, string* err) { bool awaiting_inputs = false; for (vector::iterator i = edge->inputs_.begin(); i != edge->inputs_.end(); ++i) { - if (AddSubTarget(*i, stack, err)) + if (!edge->is_implicit(i - edge->inputs_.begin()) && + AddSubTarget(*i, stack, err)) { awaiting_inputs = true; - else if (!err->empty()) + } else if (!err->empty()) { return false; + } } assert(stack->back() == node); stack->pop_back(); diff --git a/build_test.cc b/build_test.cc index 81f2fbe..2ded588 100644 --- a/build_test.cc +++ b/build_test.cc @@ -396,6 +396,7 @@ TEST_F(BuildTest, DepFileOK) { "rule cc\n command = cc $in\n depfile = $out.d\n" "build foo.o: cc foo.c\n")); Touch("foo.c"); + Dirty("bar.h"); // Mark bar.h as missing. file_contents_["foo.o.d"] = "foo.o: blah.h bar.h\n"; EXPECT_TRUE(builder_.AddTarget("foo.o", &err)); ASSERT_EQ("", err); diff --git a/ninja.h b/ninja.h index 8eabc3c..ecfb2d0 100644 --- a/ninja.h +++ b/ninja.h @@ -125,6 +125,10 @@ struct Edge { // pointer...) int implicit_deps_; int order_only_deps_; + bool is_implicit(int index) { + return index >= ((int)inputs_.size()) - order_only_deps_ - implicit_deps_ && + !is_order_only(index); + } bool is_order_only(int index) { return index >= ((int)inputs_.size()) - order_only_deps_; } diff --git a/ninja_test.cc b/ninja_test.cc index b018ff4..12ba93c 100644 --- a/ninja_test.cc +++ b/ninja_test.cc @@ -20,7 +20,7 @@ StateTestWithBuiltinRules::StateTestWithBuiltinRules() { } Node* StateTestWithBuiltinRules::GetNode(const string& path) { - return state_.stat_cache()->GetFile(path)->node_; + return state_.GetNode(path); } TEST(State, Basic) {