ENH: Add per-language clean rule generation to cmake_clean.cmake files to include cmake_clean_<lang>.cmake files generated by dependency scanning. Add Fortran module file and timestamp cleaning rules.

This commit is contained in:
Brad King 2007-12-28 11:50:14 -05:00
parent 68dad94b00
commit 81f6e86f12
2 changed files with 41 additions and 0 deletions

View File

@ -219,6 +219,27 @@ bool cmDependsFortran::Finalize(std::ostream& makeDepends,
{
fiStream << " " << *i << "\n";
}
// Create a script to clean the modules.
if(!provides.empty())
{
std::string fcName = this->TargetDirectory;
fcName += "/cmake_clean_Fortran.cmake";
cmGeneratedFileStream fcStream(fcName.c_str());
fcStream << "# Remove fortran modules provided by this target.\n";
fcStream << "FILE(REMOVE\n";
for(std::set<cmStdString>::const_iterator i = provides.begin();
i != provides.end(); ++i)
{
std::string mod_upper = cmSystemTools::UpperCase(*i);
std::string mod_lower = *i;
fcStream << " \"" << mod_lower << ".mod\""
<< " \"" << mod_lower << ".mod.stamp\""
<< " \"" << mod_upper << ".mod\""
<< " \"" << mod_upper << ".mod.stamp\"\n";
}
fcStream << " )\n";
}
return true;
}

View File

@ -1048,6 +1048,26 @@ cmLocalUnixMakefileGenerator3
}
fout << ")\n";
commands.push_back(remove);
// For the main clean rule add per-language cleaning.
if(!filename)
{
// Get the set of source languages in the target.
std::set<cmStdString> languages;
target.GetLanguages(languages);
fout << "\n"
<< "# Per-language clean rules from dependency scanning.\n"
<< "FOREACH(lang";
for(std::set<cmStdString>::const_iterator l = languages.begin();
l != languages.end(); ++l)
{
fout << " " << *l;
}
fout << ")\n"
<< " INCLUDE(" << this->GetTargetDirectory(target)
<< "/cmake_clean_${lang}.cmake OPTIONAL)\n"
<< "ENDFOREACH(lang)\n";
}
}
}