diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 2506209c0..cada13ab8 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::iterator new_end = std::remove_if( - this->OutputFiles.begin(), - this->OutputFiles.end(), - file_exists() ); + std::vector::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::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