OSDN Git Service

Fix incremental builds for SDK. [DO NOT MERGE]
authorDeepanshu Gupta <deepanshu@google.com>
Wed, 16 Jul 2014 00:22:00 +0000 (17:22 -0700)
committerDeepanshu Gupta <deepanshu@google.com>
Wed, 16 Jul 2014 01:06:12 +0000 (01:06 +0000)
Atree used to output files without escaping the filenames. This resulted
in breaks for incremental builds when filenames contained '$' symbol.
The change fixes this by escaping the filename properly.

Change-Id: I957787b1b3536c64ba6fcb5b4bb5fc60e8b04452
(cherry picked from commit 9c5564e060b019d154b07fca3513443039266145)

tools/atree/atree.cpp

index 2ba284f..b134e01 100644 (file)
@@ -90,6 +90,26 @@ debug_printf(const char* format, ...)
     }
 }
 
+// Escape the filename so that it can be added to the makefile properly.
+static string
+escape_filename(const string name)
+{
+    ostringstream new_name;
+    for (string::const_iterator iter = name.begin(); iter != name.end(); ++iter)
+    {
+        switch (*iter)
+        {
+            case '$':
+                new_name << "$$";
+                break;
+            default:
+                new_name << *iter;
+                break;
+        }
+    }
+    return new_name.str();
+}
+
 int
 main(int argc, char* const* argv)
 {
@@ -324,7 +344,8 @@ main(int argc, char* const* argv)
             for (vector<FileRecord>::iterator it=files.begin();
                                 it!=files.end(); it++) {
                 if (!it->sourceIsDir) {
-                    fprintf(f, "%s \\\n", it->sourcePath.c_str());
+                    fprintf(f, "%s \\\n",
+                            escape_filename(it->sourcePath).c_str());
                 }
             }
             fprintf(f, "\n");