aboutsummaryrefslogtreecommitdiffstats
path: root/ninja.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-07-18 17:16:24 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-07-18 17:16:35 +0900
commit753c812cb01fbfdda88949997083bfc34185933b (patch)
tree60ccdf2293b8c4b392fc804f9d0e085647025fa8 /ninja.cc
parent6d7c7b73d4ffdc57e90a2e5d197ecbf08dc1d566 (diff)
downloadandroid_build_kati-753c812cb01fbfdda88949997083bfc34185933b.tar.gz
android_build_kati-753c812cb01fbfdda88949997083bfc34185933b.tar.bz2
android_build_kati-753c812cb01fbfdda88949997083bfc34185933b.zip
[C++] Add and fix dollar_in_file.mk for --ninja
Also add a testcase for $(wildcard) which is not passing yet.
Diffstat (limited to 'ninja.cc')
-rw-r--r--ninja.cc26
1 files changed, 23 insertions, 3 deletions
diff --git a/ninja.cc b/ninja.cc
index 52f7b48..47aad7e 100644
--- a/ninja.cc
+++ b/ninja.cc
@@ -424,16 +424,36 @@ class NinjaGenerator {
}
}
+ string EscapeBuildTarget(Symbol s) {
+ if (s.str().find_first_of("$: ") == string::npos)
+ return s.str();
+ string r;
+ for (char c : s.str()) {
+ switch (c) {
+ case '$':
+ case ':':
+ case ' ':
+ r += '$';
+ // fall through.
+ default:
+ r += c;
+ }
+ }
+ return r;
+ }
+
void EmitBuild(DepNode* node, const string& rule_name) {
- fprintf(fp_, "build %s: %s", node->output.c_str(), rule_name.c_str());
+ fprintf(fp_, "build %s: %s",
+ EscapeBuildTarget(node->output).c_str(),
+ rule_name.c_str());
vector<Symbol> order_onlys;
for (DepNode* d : node->deps) {
- fprintf(fp_, " %s", d->output.c_str());
+ fprintf(fp_, " %s", EscapeBuildTarget(d->output).c_str());
}
if (!node->order_onlys.empty()) {
fprintf(fp_, " ||");
for (DepNode* d : node->order_onlys) {
- fprintf(fp_, " %s", d->output.c_str());
+ fprintf(fp_, " %s", EscapeBuildTarget(d->output).c_str());
}
}
fprintf(fp_, "\n");