mirror of
https://github.com/Kitware/CMake.git
synced 2026-03-15 05:51:07 -05:00
Ninja: Use cmNinjaBuild class for WriteBuild
This commit is contained in:
@@ -1342,20 +1342,21 @@ void cmGlobalNinjaGenerator::WriteTargetRebuildManifest(std::ostream& os)
|
|||||||
WriteRule(*this->RulesFileStream, rule);
|
WriteRule(*this->RulesFileStream, rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmNinjaDeps implicitDeps;
|
cmNinjaBuild reBuild("RERUN_CMAKE");
|
||||||
cmNinjaDeps explicitDeps;
|
reBuild.Comment = "Re-run CMake if any of its inputs changed.";
|
||||||
|
reBuild.Outputs.push_back(this->NinjaOutputPath(NINJA_BUILD_FILE));
|
||||||
|
|
||||||
for (cmLocalGenerator* localGen : this->LocalGenerators) {
|
for (cmLocalGenerator* localGen : this->LocalGenerators) {
|
||||||
for (std::string const& fi : localGen->GetMakefile()->GetListFiles()) {
|
for (std::string const& fi : localGen->GetMakefile()->GetListFiles()) {
|
||||||
implicitDeps.push_back(this->ConvertToNinjaPath(fi));
|
reBuild.ImplicitDeps.push_back(this->ConvertToNinjaPath(fi));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
implicitDeps.push_back(this->CMakeCacheFile);
|
reBuild.ImplicitDeps.push_back(this->CMakeCacheFile);
|
||||||
|
|
||||||
cmNinjaVars variables;
|
|
||||||
// Use 'console' pool to get non buffered output of the CMake re-run call
|
// Use 'console' pool to get non buffered output of the CMake re-run call
|
||||||
// Available since Ninja 1.5
|
// Available since Ninja 1.5
|
||||||
if (SupportsConsolePool()) {
|
if (SupportsConsolePool()) {
|
||||||
variables["pool"] = "console";
|
reBuild.Variables["pool"] = "console";
|
||||||
}
|
}
|
||||||
|
|
||||||
cmake* cm = this->GetCMakeInstance();
|
cmake* cm = this->GetCMakeInstance();
|
||||||
@@ -1377,23 +1378,23 @@ void cmGlobalNinjaGenerator::WriteTargetRebuildManifest(std::ostream& os)
|
|||||||
phonyBuild.Outputs.push_back(cm->GetGlobVerifyScript() + "_force");
|
phonyBuild.Outputs.push_back(cm->GetGlobVerifyScript() + "_force");
|
||||||
this->WriteBuild(os, phonyBuild);
|
this->WriteBuild(os, phonyBuild);
|
||||||
|
|
||||||
variables["restat"] = "1";
|
reBuild.Variables["restat"] = "1";
|
||||||
std::string const verifyScriptFile =
|
std::string const verifyScriptFile =
|
||||||
this->NinjaOutputPath(cm->GetGlobVerifyScript());
|
this->NinjaOutputPath(cm->GetGlobVerifyScript());
|
||||||
std::string const verifyStampFile =
|
std::string const verifyStampFile =
|
||||||
this->NinjaOutputPath(cm->GetGlobVerifyStamp());
|
this->NinjaOutputPath(cm->GetGlobVerifyStamp());
|
||||||
this->WriteBuild(os,
|
{
|
||||||
"Re-run CMake to check if globbed directories changed.",
|
cmNinjaBuild vgBuild("VERIFY_GLOBS");
|
||||||
"VERIFY_GLOBS",
|
vgBuild.Comment =
|
||||||
/*outputs=*/cmNinjaDeps(1, verifyStampFile),
|
"Re-run CMake to check if globbed directories changed.";
|
||||||
/*implicitOuts=*/cmNinjaDeps(),
|
vgBuild.Outputs.push_back(verifyStampFile);
|
||||||
/*explicitDeps=*/cmNinjaDeps(),
|
vgBuild.ImplicitDeps = phonyBuild.Outputs;
|
||||||
/*implicitDeps=*/phonyBuild.Outputs,
|
vgBuild.Variables = reBuild.Variables;
|
||||||
/*orderOnlyDeps=*/cmNinjaDeps(), variables);
|
this->WriteBuild(os, vgBuild);
|
||||||
|
}
|
||||||
variables.erase("restat");
|
reBuild.Variables.erase("restat");
|
||||||
implicitDeps.push_back(verifyScriptFile);
|
reBuild.ImplicitDeps.push_back(verifyScriptFile);
|
||||||
explicitDeps.push_back(verifyStampFile);
|
reBuild.ExplicitDeps.push_back(verifyStampFile);
|
||||||
} else if (!this->SupportsManifestRestat() &&
|
} else if (!this->SupportsManifestRestat() &&
|
||||||
cm->DoWriteGlobVerifyTarget()) {
|
cm->DoWriteGlobVerifyTarget()) {
|
||||||
std::ostringstream msg;
|
std::ostringstream msg;
|
||||||
@@ -1411,22 +1412,18 @@ void cmGlobalNinjaGenerator::WriteTargetRebuildManifest(std::ostream& os)
|
|||||||
msg.str());
|
msg.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(implicitDeps.begin(), implicitDeps.end());
|
std::sort(reBuild.ImplicitDeps.begin(), reBuild.ImplicitDeps.end());
|
||||||
implicitDeps.erase(std::unique(implicitDeps.begin(), implicitDeps.end()),
|
reBuild.ImplicitDeps.erase(
|
||||||
implicitDeps.end());
|
std::unique(reBuild.ImplicitDeps.begin(), reBuild.ImplicitDeps.end()),
|
||||||
|
reBuild.ImplicitDeps.end());
|
||||||
|
|
||||||
std::string const ninjaBuildFile = this->NinjaOutputPath(NINJA_BUILD_FILE);
|
this->WriteBuild(os, reBuild);
|
||||||
this->WriteBuild(os, "Re-run CMake if any of its inputs changed.",
|
|
||||||
"RERUN_CMAKE",
|
|
||||||
/*outputs=*/cmNinjaDeps(1, ninjaBuildFile),
|
|
||||||
/*implicitOuts=*/cmNinjaDeps(), explicitDeps, implicitDeps,
|
|
||||||
/*orderOnlyDeps=*/cmNinjaDeps(), variables);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
cmNinjaBuild build("phony");
|
cmNinjaBuild build("phony");
|
||||||
build.Comment = "A missing CMake input file is not an error.";
|
build.Comment = "A missing CMake input file is not an error.";
|
||||||
std::set_difference(std::make_move_iterator(implicitDeps.begin()),
|
std::set_difference(std::make_move_iterator(reBuild.ImplicitDeps.begin()),
|
||||||
std::make_move_iterator(implicitDeps.end()),
|
std::make_move_iterator(reBuild.ImplicitDeps.end()),
|
||||||
CustomCommandOutputs.begin(),
|
CustomCommandOutputs.begin(),
|
||||||
CustomCommandOutputs.end(),
|
CustomCommandOutputs.end(),
|
||||||
std::back_inserter(build.Outputs));
|
std::back_inserter(build.Outputs));
|
||||||
|
|||||||
Reference in New Issue
Block a user