Ninja: Use cmNinjaBuild class for WriteBuild

This commit is contained in:
Sebastian Holtermann 2019-05-30 17:29:06 +02:00
parent df06c8d792
commit ccf9507956

View File

@ -1940,32 +1940,29 @@ bool cmGlobalNinjaGenerator::WriteDyndepFile(
cmGeneratedFileStream ddf(arg_dd);
ddf << "ninja_dyndep_version = 1.0\n";
for (cmDyndepObjectInfo const& object : objects) {
std::string const ddComment;
std::string const ddRule = "dyndep";
cmNinjaDeps ddOutputs;
cmNinjaDeps ddImplicitOuts;
cmNinjaDeps ddExplicitDeps;
cmNinjaDeps ddImplicitDeps;
cmNinjaDeps ddOrderOnlyDeps;
cmNinjaVars ddVars;
ddOutputs.push_back(object.Object);
for (std::string const& p : object.Provides) {
ddImplicitOuts.push_back(this->ConvertToNinjaPath(mod_files[p]));
}
for (std::string const& r : object.Requires) {
std::map<std::string, std::string>::iterator m = mod_files.find(r);
if (m != mod_files.end()) {
ddImplicitDeps.push_back(this->ConvertToNinjaPath(m->second));
{
cmNinjaBuild build("dyndep");
build.Outputs.emplace_back("");
for (cmDyndepObjectInfo const& object : objects) {
build.Outputs[0] = object.Object;
build.ImplicitOuts.clear();
for (std::string const& p : object.Provides) {
build.ImplicitOuts.push_back(this->ConvertToNinjaPath(mod_files[p]));
}
build.ImplicitDeps.clear();
for (std::string const& r : object.Requires) {
auto mit = mod_files.find(r);
if (mit != mod_files.end()) {
build.ImplicitDeps.push_back(this->ConvertToNinjaPath(mit->second));
}
}
build.Variables.clear();
if (!object.Provides.empty()) {
build.Variables.emplace("restat", "1");
}
}
if (!object.Provides.empty()) {
ddVars["restat"] = "1";
}
this->WriteBuild(ddf, ddComment, ddRule, ddOutputs, ddImplicitOuts,
ddExplicitDeps, ddImplicitDeps, ddOrderOnlyDeps, ddVars);
this->WriteBuild(ddf, build);
}
}
// Store the map of modules provided by this target in a file for