summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalNinjaGenerator.cxx
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2019-05-13 14:52:05 (GMT)
committerBen Boeckel <ben.boeckel@kitware.com>2020-01-06 16:57:08 (GMT)
commitfb18215904e8297a7a7cb449fc60bacf72cb89d0 (patch)
tree0e76c8c750887b5fdb1b21299dc5b27db3bc4c86 /Source/cmGlobalNinjaGenerator.cxx
parentb67c53dddfcf956f4d55cbdc0f4e7705f62e805b (diff)
downloadCMake-fb18215904e8297a7a7cb449fc60bacf72cb89d0.zip
CMake-fb18215904e8297a7a7cb449fc60bacf72cb89d0.tar.gz
CMake-fb18215904e8297a7a7cb449fc60bacf72cb89d0.tar.bz2
Ninja: clean ninja metadata once generated
Fixes: #15830
Diffstat (limited to 'Source/cmGlobalNinjaGenerator.cxx')
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx39
1 files changed, 39 insertions, 0 deletions
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index f5f5af8..c9d7659 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -530,6 +530,35 @@ void cmGlobalNinjaGenerator::Generate()
if (!this->WriteDefaultBuildFile()) {
return;
}
+
+ auto run_ninja_tool = [this](char const* tool) {
+ std::vector<std::string> command;
+ command.push_back(this->NinjaCommand);
+ command.emplace_back("-t");
+ command.emplace_back(tool);
+ std::string error;
+ if (!cmSystemTools::RunSingleCommand(command, nullptr, &error, nullptr,
+ nullptr,
+ cmSystemTools::OUTPUT_NONE)) {
+ this->GetCMakeInstance()->IssueMessage(MessageType::FATAL_ERROR,
+ "Running\n '" +
+ cmJoin(command, "' '") +
+ "'\n"
+ "failed with:\n " +
+ error);
+ cmSystemTools::SetFatalErrorOccured();
+ }
+ };
+
+ if (this->NinjaSupportsCleanDeadTool) {
+ run_ninja_tool("cleandead");
+ }
+ if (this->NinjaSupportsUnconditionalRecompactTool) {
+ run_ninja_tool("recompact");
+ }
+ if (this->NinjaSupportsRestatTool) {
+ run_ninja_tool("restat");
+ }
}
bool cmGlobalNinjaGenerator::FindMakeProgram(cmMakefile* mf)
@@ -593,6 +622,16 @@ void cmGlobalNinjaGenerator::CheckNinjaFeatures()
}
}
}
+ this->NinjaSupportsCleanDeadTool = !cmSystemTools::VersionCompare(
+ cmSystemTools::OP_LESS, this->NinjaVersion.c_str(),
+ RequiredNinjaVersionForCleanDeadTool().c_str());
+ this->NinjaSupportsUnconditionalRecompactTool =
+ !cmSystemTools::VersionCompare(
+ cmSystemTools::OP_LESS, this->NinjaVersion.c_str(),
+ RequiredNinjaVersionForUnconditionalRecompactTool().c_str());
+ this->NinjaSupportsRestatTool = !cmSystemTools::VersionCompare(
+ cmSystemTools::OP_LESS, this->NinjaVersion.c_str(),
+ RequiredNinjaVersionForRestatTool().c_str());
}
bool cmGlobalNinjaGenerator::CheckLanguages(