diff options
-rw-r--r-- | Source/cmCacheManager.cxx | 21 | ||||
-rw-r--r-- | Source/cmCacheManager.h | 4 |
2 files changed, 24 insertions, 1 deletions
diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx index 055e9f1..6be0c35 100644 --- a/Source/cmCacheManager.cxx +++ b/Source/cmCacheManager.cxx @@ -19,6 +19,7 @@ #include "cmSystemTools.h" #include "cmCacheManager.h" #include "cmMakefile.h" +#include "cmGlob.h" #include <cmsys/Directory.hxx> #include <cmsys/RegularExpression.hxx> @@ -154,6 +155,20 @@ bool cmCacheManager::ParseEntry(const char* entry, return flag; } +void cmCacheManager::CleanCMakeFiles(const char* path) +{ + std::string glob = path; + glob += "/CMakeFiles/*.cmake"; + cmGlob globIt; + globIt.FindFiles(glob); + std::vector<std::string> files = globIt.GetFiles(); + for(std::vector<std::string>::iterator i = files.begin(); + i != files.end(); ++i) + { + cmSystemTools::RemoveFile(i->c_str()); + } +} + bool cmCacheManager::LoadCache(const char* path, bool internal, std::set<cmStdString>& excludes, @@ -166,6 +181,12 @@ bool cmCacheManager::LoadCache(const char* path, { m_Cache.clear(); } + if(!cmSystemTools::FileExists(cacheFile.c_str())) + { + this->CleanCMakeFiles(path); + return false; + } + std::ifstream fin(cacheFile.c_str()); if(!fin) { diff --git a/Source/cmCacheManager.h b/Source/cmCacheManager.h index 451dcea..a6773b5 100644 --- a/Source/cmCacheManager.h +++ b/Source/cmCacheManager.h @@ -150,7 +150,9 @@ protected: ///! Get a cache entry object for a key CacheEntry *GetCacheEntry(const char *key); - + ///! Clean out the CMakeFiles directory if no CMakeCache.txt + void CleanCMakeFiles(const char* path); + private: typedef std::map<cmStdString, CacheEntry> CacheEntryMap; static void OutputHelpString(std::ofstream& fout, |