From: Nico Weber Date: Thu, 12 Mar 2015 16:06:50 +0000 (-0400) Subject: On unexpected output in a .d file, rebuild instead erroring. X-Git-Tag: v1.6.0^2~23^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=157a71f39b19d4fac43c814211c2093de205adab;p=platform%2Fupstream%2Fninja.git On unexpected output in a .d file, rebuild instead erroring. Fixes #417. --- diff --git a/src/build_test.cc b/src/build_test.cc index 82da57b..65d189d 100644 --- a/src/build_test.cc +++ b/src/build_test.cc @@ -2042,6 +2042,23 @@ TEST_F(BuildWithDepsLogTest, RestatMissingDepfileDepslog) { ASSERT_EQ(0u, command_runner_.commands_ran_.size()); } +TEST_F(BuildTest, WrongOutputInDepfileCausesRebuild) { + string err; + const char* manifest = +"rule cc\n" +" command = cc $in\n" +" depfile = $out.d\n" +"build foo.o: cc foo.c\n"; + + fs_.Create("foo.c", ""); + fs_.Create("foo.o", ""); + fs_.Create("header.h", ""); + fs_.Create("foo.o.d", "bar.o.d: header.h\n"); + + RebuildTarget("foo.o", manifest, "build_log", "ninja_deps"); + ASSERT_EQ(1u, command_runner_.commands_ran_.size()); +} + TEST_F(BuildTest, Console) { ASSERT_NO_FATAL_FAILURE(AssertParse(&state_, "rule console\n" diff --git a/src/graph.cc b/src/graph.cc index cbf7921..76c4e9a 100644 --- a/src/graph.cc +++ b/src/graph.cc @@ -390,12 +390,13 @@ bool ImplicitDepLoader::LoadDepFile(Edge* edge, const string& path, &depfile.out_.len_, &unused, err)) return false; - // Check that this depfile matches the edge's output. + // Check that this depfile matches the edge's output, if not return false to + // mark the edge as dirty. Node* first_output = edge->outputs_[0]; StringPiece opath = StringPiece(first_output->path()); if (opath != depfile.out_) { - *err = "expected depfile '" + path + "' to mention '" + - first_output->path() + "', got '" + depfile.out_.AsString() + "'"; + EXPLAIN("expected depfile '%s' to mention '%s', got '%s'", path.c_str(), + first_output->path().c_str(), depfile.out_.AsString().c_str()); return false; }