1. Added EXCLUDE option to LOAD_CACHE.
2. Entries brought in from another cache are now marked as internal.
This commit is contained in:
parent
1cf9a35680
commit
06a0f67f93
|
@ -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
|
||||||
|
|
|
@ -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*);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue