diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-07-18 17:16:24 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-07-18 17:16:35 +0900 |
commit | 753c812cb01fbfdda88949997083bfc34185933b (patch) | |
tree | 60ccdf2293b8c4b392fc804f9d0e085647025fa8 /ninja.cc | |
parent | 6d7c7b73d4ffdc57e90a2e5d197ecbf08dc1d566 (diff) | |
download | android_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.cc | 26 |
1 files changed, 23 insertions, 3 deletions
@@ -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"); |