cmMakefile: Do not track CMake temporary files.
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.
We have to also track input files to the configure command. In theory
the input to a configure command could it self be a file that is going
to be deleted later (output from a custom command or configure_file).
This commit is contained in:
parent
0264eec9d3
commit
38571f2c94
|
@ -817,12 +817,13 @@ bool cmMakefile::NeedBackwardsCompatibility(unsigned int major,
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
struct file_exists
|
struct file_not_persistent
|
||||||
{
|
{
|
||||||
bool operator()(const std::string& path) const
|
bool operator()(const std::string& path) const
|
||||||
{
|
{
|
||||||
return cmSystemTools::FileExists(path.c_str());
|
return !(path.find("CMakeTmp") == path.npos &&
|
||||||
}
|
cmSystemTools::FileExists(path.c_str()));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -846,13 +847,22 @@ void cmMakefile::FinalPass()
|
||||||
|
|
||||||
//remove_if will move all items that don't have a valid file name to the
|
//remove_if will move all items that don't have a valid file name to the
|
||||||
//back of the vector
|
//back of the vector
|
||||||
std::vector<std::string>::iterator new_end = std::remove_if(
|
std::vector<std::string>::iterator new_output_files_end = std::remove_if(
|
||||||
this->OutputFiles.begin(),
|
this->OutputFiles.begin(),
|
||||||
this->OutputFiles.end(),
|
this->OutputFiles.end(),
|
||||||
file_exists() );
|
file_not_persistent() );
|
||||||
//we just have to erase all items at the back
|
//we just have to erase all items at the back
|
||||||
this->OutputFiles.erase(new_end, this->OutputFiles.end() );
|
this->OutputFiles.erase(new_output_files_end, this->OutputFiles.end() );
|
||||||
|
|
||||||
|
//if a configured file is used as input for another configured file,
|
||||||
|
//and then deleted it will show up in the input list files so we
|
||||||
|
//need to scan those too
|
||||||
|
std::vector<std::string>::iterator new_list_files_end = std::remove_if(
|
||||||
|
this->ListFiles.begin(),
|
||||||
|
this->ListFiles.end(),
|
||||||
|
file_not_persistent() );
|
||||||
|
|
||||||
|
this->ListFiles.erase(new_list_files_end, this->ListFiles.end() );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate the output file
|
// Generate the output file
|
||||||
|
|
Loading…
Reference in New Issue