diff options
author | Robert Maynard <robert.maynard@kitware.com> | 2013-09-03 19:31:12 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2013-09-09 14:58:21 (GMT) |
commit | 38571f2c9446343a652cfdccea636028abd9f7aa (patch) | |
tree | 4424f3f80f76e37e56a39e59242387e402aaf724 /Source | |
parent | 0264eec9d32200c692ddfb756871ac4a4465863c (diff) | |
download | CMake-38571f2c9446343a652cfdccea636028abd9f7aa.zip CMake-38571f2c9446343a652cfdccea636028abd9f7aa.tar.gz CMake-38571f2c9446343a652cfdccea636028abd9f7aa.tar.bz2 |
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).
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmMakefile.cxx | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 2506209..cada13a 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -817,12 +817,13 @@ bool cmMakefile::NeedBackwardsCompatibility(unsigned int major, namespace { - struct file_exists + struct file_not_persistent { 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 //back of the vector - std::vector<std::string>::iterator new_end = std::remove_if( - this->OutputFiles.begin(), - this->OutputFiles.end(), - file_exists() ); + std::vector<std::string>::iterator new_output_files_end = std::remove_if( + this->OutputFiles.begin(), + this->OutputFiles.end(), + file_not_persistent() ); //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 |