bool awaiting_inputs = false;
for (vector<Node*>::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();
"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);
// 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_;
}
}
Node* StateTestWithBuiltinRules::GetNode(const string& path) {
- return state_.stat_cache()->GetFile(path)->node_;
+ return state_.GetNode(path);
}
TEST(State, Basic) {