win: print right slashes in 'unknown target' message
authorNico Weber <thakis@chromium.org>
Fri, 10 Jul 2015 19:15:00 +0000 (12:15 -0700)
committerNico Weber <thakis@chromium.org>
Fri, 10 Jul 2015 19:15:00 +0000 (12:15 -0700)
src/graph.cc
src/graph.h
src/ninja.cc

index 355285c..9e65675 100644 (file)
@@ -347,12 +347,13 @@ bool Edge::use_console() const {
   return pool() == &State::kConsolePool;
 }
 
-string Node::PathDecanonicalized() const {
-  string result = path_;
+// static
+string Node::PathDecanonicalized(const string& path, unsigned int slash_bits) {
+  string result = path;
 #ifdef _WIN32
   unsigned int mask = 1;
   for (char* c = &result[0]; (c = strchr(c, '/')) != NULL;) {
-    if (slash_bits_ & mask)
+    if (slash_bits & mask)
       *c = '\\';
     c++;
     mask <<= 1;
index 5f8d41a..cf15123 100644 (file)
@@ -72,8 +72,13 @@ struct Node {
 
   const string& path() const { return path_; }
   /// Get |path()| but use slash_bits to convert back to original slash styles.
-  string PathDecanonicalized() const;
+  string PathDecanonicalized() const {
+    return PathDecanonicalized(path_, slash_bits_);
+  }
+  static string PathDecanonicalized(const string& path,
+                                    unsigned int slash_bits);
   unsigned int slash_bits() const { return slash_bits_; }
+
   TimeStamp mtime() const { return mtime_; }
 
   bool dirty() const { return dirty_; }
index e5bf98d..3756123 100644 (file)
@@ -260,7 +260,7 @@ bool NinjaMain::RebuildManifest(const char* input_file, string* err) {
 
 Node* NinjaMain::CollectTarget(const char* cpath, string* err) {
   string path = cpath;
-  unsigned int slash_bits;  // Unused because this path is only used for lookup.
+  unsigned int slash_bits;
   if (!CanonicalizePath(&path, &slash_bits, err))
     return NULL;
 
@@ -287,8 +287,8 @@ Node* NinjaMain::CollectTarget(const char* cpath, string* err) {
     }
     return node;
   } else {
-    *err = "unknown target '" + path + "'";
-
+    *err =
+        "unknown target '" + Node::PathDecanonicalized(path, slash_bits) + "'";
     if (path == "clean") {
       *err += ", did you mean 'ninja -t clean'?";
     } else if (path == "help") {