aboutsummaryrefslogtreecommitdiffstats
path: root/ninja.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-07-11 05:53:30 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-07-11 05:53:30 +0900
commitdeb7656b06f7440fa53b3c59d745ea795e768ae1 (patch)
tree11f29be867293079771eed74863acb5093f90d5b /ninja.cc
parent0ce1b79561804d98d9ce52dd55064367e85193a0 (diff)
downloadplatform_build_kati-deb7656b06f7440fa53b3c59d745ea795e768ae1.tar.gz
platform_build_kati-deb7656b06f7440fa53b3c59d745ea795e768ae1.tar.bz2
platform_build_kati-deb7656b06f7440fa53b3c59d745ea795e768ae1.zip
[C++] Automatically generate shortcuts
Diffstat (limited to 'ninja.cc')
-rw-r--r--ninja.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/ninja.cc b/ninja.cc
index 9c40082..3b96174 100644
--- a/ninja.cc
+++ b/ninja.cc
@@ -302,6 +302,15 @@ class NinjaGenerator {
return;
}
+ StringPiece base = Basename(node->output.str());
+ if (base != node->output.str()) {
+ auto p = short_names_.emplace(base, StringPiece(node->output.str()));
+ if (!p.second) {
+ // We generate shortcuts only for targets whose basename are unique.
+ p.first->second.clear();
+ }
+ }
+
vector<Command*> commands;
ce_.Eval(node, &commands);
@@ -378,6 +387,12 @@ class NinjaGenerator {
EmitNode(node);
}
+ fprintf(fp_, "\n# shortcuts:\n", short_names_.size());
+ for (auto p : short_names_) {
+ if (!p.second.empty())
+ fprintf(fp_, "build %.*s: phony %.*s\n", SPF(p.first), SPF(p.second));
+ }
+
fclose(fp_);
}
@@ -418,6 +433,7 @@ class NinjaGenerator {
string cmd_buf_;
string gomacc_;
string ninja_suffix_;
+ unordered_map<StringPiece, StringPiece> short_names_;
};
void GenerateNinja(const char* ninja_suffix,