ENH: if CMakeCache.txt has been removed, then automatically remove CMakefiles/*.cmake

This commit is contained in:
Bill Hoffman 2006-03-09 15:47:18 -05:00
parent 15b5869b46
commit 8cdb87eaa7
2 changed files with 24 additions and 1 deletions

View File

@ -19,6 +19,7 @@
#include "cmSystemTools.h" #include "cmSystemTools.h"
#include "cmCacheManager.h" #include "cmCacheManager.h"
#include "cmMakefile.h" #include "cmMakefile.h"
#include "cmGlob.h"
#include <cmsys/Directory.hxx> #include <cmsys/Directory.hxx>
#include <cmsys/RegularExpression.hxx> #include <cmsys/RegularExpression.hxx>
@ -154,6 +155,20 @@ bool cmCacheManager::ParseEntry(const char* entry,
return flag; 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 cmCacheManager::LoadCache(const char* path,
bool internal, bool internal,
std::set<cmStdString>& excludes, std::set<cmStdString>& excludes,
@ -166,6 +181,12 @@ bool cmCacheManager::LoadCache(const char* path,
{ {
m_Cache.clear(); m_Cache.clear();
} }
if(!cmSystemTools::FileExists(cacheFile.c_str()))
{
this->CleanCMakeFiles(path);
return false;
}
std::ifstream fin(cacheFile.c_str()); std::ifstream fin(cacheFile.c_str());
if(!fin) if(!fin)
{ {

View File

@ -150,6 +150,8 @@ protected:
///! Get a cache entry object for a key ///! Get a cache entry object for a key
CacheEntry *GetCacheEntry(const char *key); CacheEntry *GetCacheEntry(const char *key);
///! Clean out the CMakeFiles directory if no CMakeCache.txt
void CleanCMakeFiles(const char* path);
private: private:
typedef std::map<cmStdString, CacheEntry> CacheEntryMap; typedef std::map<cmStdString, CacheEntry> CacheEntryMap;