diff options
-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 4baf345..fd06a33 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -819,12 +819,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())); + } }; } @@ -848,13 +849,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 |