1. Added EXCLUDE option to LOAD_CACHE.

2. Entries brought in from another cache are now marked as internal.
This commit is contained in:
Berk Geveci 2001-08-15 13:40:56 -04:00
parent 1cf9a35680
commit 06a0f67f93
3 changed files with 72 additions and 13 deletions

View File

@ -106,8 +106,17 @@ bool cmCacheManager::LoadCache(const char* path)
{ {
return this->LoadCache(path,true); return this->LoadCache(path,true);
} }
bool cmCacheManager::LoadCache(const char* path, bool cmCacheManager::LoadCache(const char* path,
bool internal) bool internal)
{
std::set<std::string> emptySet;
return this->LoadCache(path, internal, emptySet);
}
bool cmCacheManager::LoadCache(const char* path,
bool internal,
std::set<std::string>& excludes)
{ {
std::string cacheFile = path; std::string cacheFile = path;
cacheFile += "/CMakeCache.txt"; cacheFile += "/CMakeCache.txt";
@ -127,6 +136,9 @@ bool cmCacheManager::LoadCache(const char* path,
cmRegularExpression reg("^([^:]*):([^=]*)=(.*[^\t ]|[\t ]*)[\t ]*$"); cmRegularExpression reg("^([^:]*):([^=]*)=(.*[^\t ]|[\t ]*)[\t ]*$");
// input line is: "key":type=value // input line is: "key":type=value
cmRegularExpression regQuoted("^\"([^\"]*)\":([^=]*)=(.*[^\t ]|[\t ]*)[\t ]*$"); cmRegularExpression regQuoted("^\"([^\"]*)\":([^=]*)=(.*[^\t ]|[\t ]*)[\t ]*$");
std::set<std::string>::const_iterator iter;
std::string entryKey;
while(fin) while(fin)
{ {
// Format is key:type=value // Format is key:type=value
@ -148,22 +160,44 @@ bool cmCacheManager::LoadCache(const char* path,
} }
if(regQuoted.find(buffer)) if(regQuoted.find(buffer))
{ {
e.m_Type = cmCacheManager::StringToType(regQuoted.match(2).c_str()); entryKey = regQuoted.match(1);
// only load internal values if internal is set if ( excludes.find(entryKey) == excludes.end() )
if (internal || e.m_Type != INTERNAL)
{ {
e.m_Type = cmCacheManager::StringToType(regQuoted.match(2).c_str());
// only load internal values if internal is set
if (internal || e.m_Type != INTERNAL)
{
// If we are loading the cache from another project,
// make all loaded entries internal so that it is
// not visible in the gui
if (!internal)
{
e.m_Type = INTERNAL;
}
e.m_Value = regQuoted.match(3); e.m_Value = regQuoted.match(3);
m_Cache[regQuoted.match(1)] = e; m_Cache[entryKey] = e;
}
} }
} }
else if (reg.find(buffer)) else if (reg.find(buffer))
{ {
e.m_Type = cmCacheManager::StringToType(reg.match(2).c_str()); entryKey = reg.match(1);
// only load internal values if internal is set if ( excludes.find(entryKey) == excludes.end() )
if (internal || e.m_Type != INTERNAL)
{ {
e.m_Type = cmCacheManager::StringToType(reg.match(2).c_str());
// only load internal values if internal is set
if (internal || e.m_Type != INTERNAL)
{
// If we are loading the cache from another project,
// make all loaded entries internal so that it is
// not visible in the gui
if (!internal)
{
e.m_Type = INTERNAL;
}
e.m_Value = reg.match(3); e.m_Value = reg.match(3);
m_Cache[reg.match(1)] = e; m_Cache[entryKey] = e;
}
} }
} }
else else

View File

@ -78,6 +78,8 @@ public:
///! Load a cache for given makefile. Loads from path/CMakeCache.txt. ///! Load a cache for given makefile. Loads from path/CMakeCache.txt.
bool LoadCache(const char* path); bool LoadCache(const char* path);
bool LoadCache(const char* path, bool internal); bool LoadCache(const char* path, bool internal);
bool LoadCache(const char* path, bool internal,
std::set<std::string>& excludes);
///! Put cache definitions into makefile ///! Put cache definitions into makefile
void DefineCache(cmMakefile*); void DefineCache(cmMakefile*);

View File

@ -21,16 +21,39 @@ bool cmLoadCacheCommand::InitialPass(std::vector<std::string>& args)
{ {
if (args.size()< 1) if (args.size()< 1)
{ {
this->SetError("called with wrong number of arguments."); this->SetError("called with wrong number of arguments.");
} }
for( unsigned int i=0; i< args.size(); i++) bool excludeFiles=false;
unsigned int excludeIndex=0;
unsigned int i;
std::set<std::string> excludes;
for(i=0; i<args.size(); i++)
{ {
m_Makefile->ExpandVariablesInString( args[i]); if (excludeFiles)
cmCacheManager::GetInstance()->LoadCache(args[i].c_str(),false); {
cmCacheManager::GetInstance()->DefineCache(m_Makefile); m_Makefile->ExpandVariablesInString(args[i]);
excludes.insert(args[i]);
}
if (args[i] == "EXCLUDE")
{
excludeFiles=true;
}
} }
for(i=0; i<args.size(); i++)
{
if (args[i] == "EXCLUDE")
{
break;
}
m_Makefile->ExpandVariablesInString(args[i]);
cmCacheManager::GetInstance()->LoadCache(args[i].c_str(),false,excludes);
cmCacheManager::GetInstance()->DefineCache(m_Makefile);
}
return true; return true;
} }