show referencing node in 'file missing' message
authorEvan Martin <martine@danga.com>
Sat, 4 Dec 2010 23:06:27 +0000 (15:06 -0800)
committerEvan Martin <martine@danga.com>
Sat, 4 Dec 2010 23:06:48 +0000 (15:06 -0800)
build.cc
build_test.cc

index 919e4ac..6282b5f 100644 (file)
--- a/build.cc
+++ b/build.cc
@@ -14,7 +14,10 @@ bool Plan::AddSubTarget(Node* node, vector<Node*>* stack, string* err) {
   Edge* edge = node->in_edge_;
   if (!edge) {  // Leaf node.
     if (node->dirty_) {
-      *err = "'" + node->file_->path_ + "' missing "
+      string referenced;
+      if (!stack->empty())
+        referenced = ", needed by '" + stack->back()->file_->path_ + "',";
+      *err = "'" + node->file_->path_ + "'" + referenced + " missing "
              "and no known rule to make it";
     }
     return false;
index 26d1080..81f2fbe 100644 (file)
@@ -350,7 +350,8 @@ TEST_F(BuildTest, MissingInput) {
   string err;
   Dirty("in1");
   EXPECT_FALSE(builder_.AddTarget("cat1", &err));
-  EXPECT_EQ("'in1' missing and no known rule to make it", err);
+  EXPECT_EQ("'in1', needed by 'cat1', missing and no known rule to make it",
+            err);
 }
 
 TEST_F(BuildTest, MissingTarget) {