cmMakefile: Do not track configured files known to be temporary
Since commit ad502502
(cmMakefile: Track configured files so we can
regenerate them, 2013-06-18) cmMakefile::ConfigureFile records the
configured file as an output file generated by CMake. The intention is
that for make and ninja we can re-run CMake when one of the files it
generates goes missing. However, files configured temporarily in
CMakeTmp directories by Check* modules do not live past the CMake
invocation.
Teach cmMakefile::FinalPass to stop tracking files that don't
exist after we are finished generation.
This commit is contained in:
parent
8fbf39a471
commit
0264eec9d3
|
@ -814,6 +814,18 @@ bool cmMakefile::NeedBackwardsCompatibility(unsigned int major,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
struct file_exists
|
||||||
|
{
|
||||||
|
bool operator()(const std::string& path) const
|
||||||
|
{
|
||||||
|
return cmSystemTools::FileExists(path.c_str());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
void cmMakefile::FinalPass()
|
void cmMakefile::FinalPass()
|
||||||
{
|
{
|
||||||
// do all the variable expansions here
|
// do all the variable expansions here
|
||||||
|
@ -827,6 +839,20 @@ void cmMakefile::FinalPass()
|
||||||
(*i)->FinalPass();
|
(*i)->FinalPass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//go through all configured files and see which ones still exist.
|
||||||
|
//we don't want cmake to re-run if a configured file is created and deleted
|
||||||
|
//during processing as that would make it a transient file that can't
|
||||||
|
//influence the build process
|
||||||
|
|
||||||
|
//remove_if will move all items that don't have a valid file name to the
|
||||||
|
//back of the vector
|
||||||
|
std::vector<std::string>::iterator new_end = std::remove_if(
|
||||||
|
this->OutputFiles.begin(),
|
||||||
|
this->OutputFiles.end(),
|
||||||
|
file_exists() );
|
||||||
|
//we just have to erase all items at the back
|
||||||
|
this->OutputFiles.erase(new_end, this->OutputFiles.end() );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate the output file
|
// Generate the output file
|
||||||
|
@ -3371,11 +3397,12 @@ int cmMakefile::ConfigureFile(const char* infile, const char* outfile,
|
||||||
std::string sinfile = infile;
|
std::string sinfile = infile;
|
||||||
this->AddCMakeDependFile(sinfile);
|
this->AddCMakeDependFile(sinfile);
|
||||||
cmSystemTools::ConvertToUnixSlashes(soutfile);
|
cmSystemTools::ConvertToUnixSlashes(soutfile);
|
||||||
|
|
||||||
// Re-generate if non-temporary outputs are missing.
|
// Re-generate if non-temporary outputs are missing.
|
||||||
if(soutfile.find("CMakeTmp") == soutfile.npos)
|
//when we finalize the configuration we will remove all
|
||||||
{
|
//output files that now don't exist.
|
||||||
this->AddCMakeOutputFile(soutfile);
|
this->AddCMakeOutputFile(soutfile);
|
||||||
}
|
|
||||||
mode_t perm = 0;
|
mode_t perm = 0;
|
||||||
cmSystemTools::GetPermissions(sinfile.c_str(), perm);
|
cmSystemTools::GetPermissions(sinfile.c_str(), perm);
|
||||||
std::string::size_type pos = soutfile.rfind('/');
|
std::string::size_type pos = soutfile.rfind('/');
|
||||||
|
|
Loading…
Reference in New Issue