summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmCacheManager.cxx21
-rw-r--r--Source/cmCacheManager.h4
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,