Makefiles: ensure transparent switch between dependencies strategies

This commit is contained in:
Marc Chevrier
2020-12-28 12:00:05 +01:00
parent 8ec7408d74
commit bb64ea5741

View File

@@ -345,27 +345,51 @@ void cmMakefileTargetGenerator::WriteCommonCodeRules()
this->LocalGenerator->GetBinaryDirectory(), compilerDependFile))
<< "\n\n";
if (!cmSystemTools::FileExists(compilerDependFile)) {
// Write an empty dependency file.
cmGeneratedFileStream depFileStream(
compilerDependFile, false,
this->GlobalGenerator->GetMakefileEncoding());
depFileStream << "# Empty compiler generated dependencies file for "
<< this->GeneratorTarget->GetName() << ".\n"
<< "# This may be replaced when dependencies are built.\n";
}
// Write an empty dependency file.
cmGeneratedFileStream depFileStream(
compilerDependFile, false, this->GlobalGenerator->GetMakefileEncoding());
depFileStream << "# Empty compiler generated dependencies file for "
<< this->GeneratorTarget->GetName() << ".\n"
<< "# This may be replaced when dependencies are built.\n";
// remove internal dependency file
cmSystemTools::RemoveFile(
cmStrCat(this->TargetBuildDirectoryFull, "/compiler_depend.internal"));
std::string compilerDependTimestamp =
cmStrCat(this->TargetBuildDirectoryFull, "/compiler_depend.ts");
if (!cmSystemTools::FileExists(compilerDependTimestamp)) {
// Write a dependency timestamp file.
cmGeneratedFileStream depFileStream(
cmGeneratedFileStream timestampFileStream(
compilerDependTimestamp, false,
this->GlobalGenerator->GetMakefileEncoding());
depFileStream << "# CMAKE generated file: DO NOT EDIT!\n"
<< "# Timestamp file for compiler generated dependencies "
"management for "
<< this->GeneratorTarget->GetName() << ".\n";
timestampFileStream
<< "# CMAKE generated file: DO NOT EDIT!\n"
<< "# Timestamp file for compiler generated dependencies "
"management for "
<< this->GeneratorTarget->GetName() << ".\n";
}
// deactivate no longer needed legacy dependency files
// Write an empty dependency file.
cmGeneratedFileStream legacyDepFileStream(
dependFileNameFull, false, this->GlobalGenerator->GetMakefileEncoding());
legacyDepFileStream
<< "# Empty dependencies file for " << this->GeneratorTarget->GetName()
<< ".\n"
<< "# This may be replaced when dependencies are built.\n";
// remove internal dependency file
cmSystemTools::RemoveFile(
cmStrCat(this->TargetBuildDirectoryFull, "/depend.internal"));
} else {
// make sure the depend file exists
if (!cmSystemTools::FileExists(dependFileNameFull)) {
// Write an empty dependency file.
cmGeneratedFileStream depFileStream(
dependFileNameFull, false,
this->GlobalGenerator->GetMakefileEncoding());
depFileStream << "# Empty dependencies file for "
<< this->GeneratorTarget->GetName() << ".\n"
<< "# This may be replaced when dependencies are built.\n";
}
}
@@ -381,16 +405,6 @@ void cmMakefileTargetGenerator::WriteCommonCodeRules()
<< "\n\n";
}
// make sure the depend file exists
if (!cmSystemTools::FileExists(dependFileNameFull)) {
// Write an empty dependency file.
cmGeneratedFileStream depFileStream(
dependFileNameFull, false, this->GlobalGenerator->GetMakefileEncoding());
depFileStream << "# Empty dependencies file for "
<< this->GeneratorTarget->GetName() << ".\n"
<< "# This may be replaced when dependencies are built.\n";
}
// Open the flags file. This should be copy-if-different because the
// rules may depend on this file itself.
this->FlagFileNameFull =
@@ -855,6 +869,7 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(
shellDependencyFile = this->LocalGenerator->ConvertToOutputFormat(
depFile, cmOutputConverter::SHELL);
vars.DependencyFile = shellDependencyFile.c_str();
this->CleanFiles.insert(depFile);
dependencyTimestamp = this->LocalGenerator->MaybeConvertToRelativePath(
this->LocalGenerator->GetBinaryDirectory(),