mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-15 20:46:37 +08:00
5
Help/release/dev/ninja-postgen-commands.rst
Normal file
5
Help/release/dev/ninja-postgen-commands.rst
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
ninja-postgen-commands
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
* The :generator:`Ninja` generator learned to perform some post-processing on
|
||||||
|
the generated files for more consistent builds.
|
@@ -530,6 +530,35 @@ void cmGlobalNinjaGenerator::Generate()
|
|||||||
if (!this->WriteDefaultBuildFile()) {
|
if (!this->WriteDefaultBuildFile()) {
|
||||||
return;
|
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)
|
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(
|
bool cmGlobalNinjaGenerator::CheckLanguages(
|
||||||
|
@@ -348,6 +348,12 @@ public:
|
|||||||
return "1.9";
|
return "1.9";
|
||||||
}
|
}
|
||||||
static std::string RequiredNinjaVersionForDyndeps() { return "1.10"; }
|
static std::string RequiredNinjaVersionForDyndeps() { return "1.10"; }
|
||||||
|
static std::string RequiredNinjaVersionForRestatTool() { return "1.10"; }
|
||||||
|
static std::string RequiredNinjaVersionForUnconditionalRecompactTool()
|
||||||
|
{
|
||||||
|
return "1.10";
|
||||||
|
}
|
||||||
|
static std::string RequiredNinjaVersionForCleanDeadTool() { return "1.10"; }
|
||||||
bool SupportsConsolePool() const;
|
bool SupportsConsolePool() const;
|
||||||
bool SupportsImplicitOuts() const;
|
bool SupportsImplicitOuts() const;
|
||||||
bool SupportsManifestRestat() const;
|
bool SupportsManifestRestat() const;
|
||||||
@@ -488,6 +494,9 @@ private:
|
|||||||
bool NinjaSupportsManifestRestat = false;
|
bool NinjaSupportsManifestRestat = false;
|
||||||
bool NinjaSupportsMultilineDepfile = false;
|
bool NinjaSupportsMultilineDepfile = false;
|
||||||
bool NinjaSupportsDyndeps = false;
|
bool NinjaSupportsDyndeps = false;
|
||||||
|
bool NinjaSupportsRestatTool = false;
|
||||||
|
bool NinjaSupportsUnconditionalRecompactTool = false;
|
||||||
|
bool NinjaSupportsCleanDeadTool = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitOutputPathPrefix();
|
void InitOutputPathPrefix();
|
||||||
|
Reference in New Issue
Block a user