summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalNinjaGenerator.cxx
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2020-01-20 15:42:23 (GMT)
committerBen Boeckel <ben.boeckel@kitware.com>2020-01-21 13:57:51 (GMT)
commiteb2da206d94dcfcb579036969145a8bdb52e7e72 (patch)
tree83f242122ca9c5ade218d14071b904ab55b3eb0a /Source/cmGlobalNinjaGenerator.cxx
parent5e38b8f608fee599494aadd0d4b5ed9366843bda (diff)
downloadCMake-eb2da206d94dcfcb579036969145a8bdb52e7e72.zip
CMake-eb2da206d94dcfcb579036969145a8bdb52e7e72.tar.gz
CMake-eb2da206d94dcfcb579036969145a8bdb52e7e72.tar.bz2
cmGlobalNinjaGenerator: only restat build.ninja
This reduces the work that ninja needs to do on a CMake reconfigure.
Diffstat (limited to 'Source/cmGlobalNinjaGenerator.cxx')
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx24
1 files changed, 19 insertions, 5 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 0487ad1..1f83ec5 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -531,11 +531,13 @@ void cmGlobalNinjaGenerator::Generate()
return;
}
- auto run_ninja_tool = [this](char const* tool) {
+ auto run_ninja_tool = [this](std::vector<char const*> const& args) {
std::vector<std::string> command;
command.push_back(this->NinjaCommand);
command.emplace_back("-t");
- command.emplace_back(tool);
+ for (auto const& arg : args) {
+ command.emplace_back(arg);
+ }
std::string error;
if (!cmSystemTools::RunSingleCommand(command, nullptr, &error, nullptr,
nullptr,
@@ -551,13 +553,25 @@ void cmGlobalNinjaGenerator::Generate()
};
if (this->NinjaSupportsCleanDeadTool) {
- run_ninja_tool("cleandead");
+ run_ninja_tool({ "cleandead" });
}
if (this->NinjaSupportsUnconditionalRecompactTool) {
- run_ninja_tool("recompact");
+ run_ninja_tool({ "recompact" });
}
if (this->NinjaSupportsRestatTool) {
- run_ninja_tool("restat");
+ // XXX(ninja): We only list `build.ninja` entry files here because CMake
+ // *always* rewrites these files on a reconfigure. If CMake ever gets
+ // smarter about this, all CMake-time created/edited files listed as
+ // outputs for the reconfigure build statement will need to be listed here.
+ cmNinjaDeps outputs;
+ this->AddRebuildManifestOutputs(outputs);
+ std::vector<const char*> args;
+ args.reserve(outputs.size() + 1);
+ args.push_back("restat");
+ for (auto const& output : outputs) {
+ args.push_back(output.c_str());
+ }
+ run_ninja_tool(args);
}
}