cmState: Move ParseCacheEntry from cmCacheManager.

This commit is contained in:
Stephen Kelly 2015-10-10 15:08:15 +02:00
parent b5212c68de
commit e2eecae205
5 changed files with 93 additions and 93 deletions

View File

@ -27,90 +27,6 @@ cmCacheManager::cmCacheManager()
this->CacheMinorVersion = 0; this->CacheMinorVersion = 0;
} }
static bool ParseEntryWithoutType(const std::string& entry,
std::string& var,
std::string& value)
{
// input line is: key=value
static cmsys::RegularExpression reg(
"^([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
// input line is: "key"=value
static cmsys::RegularExpression regQuoted(
"^\"([^\"]*)\"=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
bool flag = false;
if(regQuoted.find(entry))
{
var = regQuoted.match(1);
value = regQuoted.match(2);
flag = true;
}
else if (reg.find(entry))
{
var = reg.match(1);
value = reg.match(2);
flag = true;
}
// if value is enclosed in single quotes ('foo') then remove them
// it is used to enclose trailing space or tab
if (flag &&
value.size() >= 2 &&
value[0] == '\'' &&
value[value.size() - 1] == '\'')
{
value = value.substr(1,
value.size() - 2);
}
return flag;
}
bool cmCacheManager::ParseEntry(const std::string& entry,
std::string& var,
std::string& value,
cmState::CacheEntryType& type)
{
// input line is: key:type=value
static cmsys::RegularExpression reg(
"^([^=:]*):([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
// input line is: "key":type=value
static cmsys::RegularExpression regQuoted(
"^\"([^\"]*)\":([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
bool flag = false;
if(regQuoted.find(entry))
{
var = regQuoted.match(1);
type = cmState::StringToCacheEntryType(regQuoted.match(2).c_str());
value = regQuoted.match(3);
flag = true;
}
else if (reg.find(entry))
{
var = reg.match(1);
type = cmState::StringToCacheEntryType(reg.match(2).c_str());
value = reg.match(3);
flag = true;
}
// if value is enclosed in single quotes ('foo') then remove them
// it is used to enclose trailing space or tab
if (flag &&
value.size() >= 2 &&
value[0] == '\'' &&
value[value.size() - 1] == '\'')
{
value = value.substr(1,
value.size() - 2);
}
if (!flag)
{
return ParseEntryWithoutType(entry, var, value);
}
return flag;
}
void cmCacheManager::CleanCMakeFiles(const std::string& path) void cmCacheManager::CleanCMakeFiles(const std::string& path)
{ {
std::string glob = path; std::string glob = path;
@ -187,7 +103,7 @@ bool cmCacheManager::LoadCache(const std::string& path,
} }
} }
e.SetProperty("HELPSTRING", helpString.c_str()); e.SetProperty("HELPSTRING", helpString.c_str());
if(cmCacheManager::ParseEntry(realbuffer, entryKey, e.Value, e.Type)) if(cmState::ParseCacheEntry(realbuffer, entryKey, e.Value, e.Type))
{ {
if ( excludes.find(entryKey) == excludes.end() ) if ( excludes.find(entryKey) == excludes.end() )
{ {

View File

@ -121,12 +121,6 @@ public:
int GetSize() { int GetSize() {
return static_cast<int>(this->Cache.size()); } return static_cast<int>(this->Cache.size()); }
///! Break up a line like VAR:type="value" into var, type and value
static bool ParseEntry(const std::string& entry,
std::string& var,
std::string& value,
cmState::CacheEntryType& type);
///! Get a value from the cache given a key ///! Get a value from the cache given a key
const char* GetInitializedCacheValue(const std::string& key) const; const char* GetInitializedCacheValue(const std::string& key) const;

View File

@ -1769,3 +1769,87 @@ bool operator!=(const cmState::Snapshot& lhs, const cmState::Snapshot& rhs)
{ {
return lhs.Position != rhs.Position; return lhs.Position != rhs.Position;
} }
static bool ParseEntryWithoutType(const std::string& entry,
std::string& var,
std::string& value)
{
// input line is: key=value
static cmsys::RegularExpression reg(
"^([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
// input line is: "key"=value
static cmsys::RegularExpression regQuoted(
"^\"([^\"]*)\"=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
bool flag = false;
if(regQuoted.find(entry))
{
var = regQuoted.match(1);
value = regQuoted.match(2);
flag = true;
}
else if (reg.find(entry))
{
var = reg.match(1);
value = reg.match(2);
flag = true;
}
// if value is enclosed in single quotes ('foo') then remove them
// it is used to enclose trailing space or tab
if (flag &&
value.size() >= 2 &&
value[0] == '\'' &&
value[value.size() - 1] == '\'')
{
value = value.substr(1,
value.size() - 2);
}
return flag;
}
bool cmState::ParseCacheEntry(const std::string& entry,
std::string& var,
std::string& value,
CacheEntryType& type)
{
// input line is: key:type=value
static cmsys::RegularExpression reg(
"^([^=:]*):([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
// input line is: "key":type=value
static cmsys::RegularExpression regQuoted(
"^\"([^\"]*)\":([^=]*)=(.*[^\r\t ]|[\r\t ]*)[\r\t ]*$");
bool flag = false;
if(regQuoted.find(entry))
{
var = regQuoted.match(1);
type = cmState::StringToCacheEntryType(regQuoted.match(2).c_str());
value = regQuoted.match(3);
flag = true;
}
else if (reg.find(entry))
{
var = reg.match(1);
type = cmState::StringToCacheEntryType(reg.match(2).c_str());
value = reg.match(3);
flag = true;
}
// if value is enclosed in single quotes ('foo') then remove them
// it is used to enclose trailing space or tab
if (flag &&
value.size() >= 2 &&
value[0] == '\'' &&
value[value.size() - 1] == '\'')
{
value = value.substr(1,
value.size() - 2);
}
if (!flag)
{
return ParseEntryWithoutType(entry, var, value);
}
return flag;
}

View File

@ -242,6 +242,12 @@ public:
void RemoveCacheEntryProperty(std::string const& key, void RemoveCacheEntryProperty(std::string const& key,
std::string const& propertyName); std::string const& propertyName);
///! Break up a line like VAR:type="value" into var, type and value
static bool ParseCacheEntry(const std::string& entry,
std::string& var,
std::string& value,
CacheEntryType& type);
Snapshot Reset(); Snapshot Reset();
// Define a property // Define a property
void DefineProperty(const std::string& name, cmProperty::ScopeType scope, void DefineProperty(const std::string& name, cmProperty::ScopeType scope,

View File

@ -216,7 +216,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
} }
std::string var, value; std::string var, value;
cmState::CacheEntryType type = cmState::UNINITIALIZED; cmState::CacheEntryType type = cmState::UNINITIALIZED;
if(cmCacheManager::ParseEntry(entry, var, value, type)) if(cmState::ParseCacheEntry(entry, var, value, type))
{ {
// The value is transformed if it is a filepath for example, so // The value is transformed if it is a filepath for example, so
// we can't compare whether the value is already in the cache until // we can't compare whether the value is already in the cache until
@ -1722,7 +1722,7 @@ bool cmake::ParseCacheEntry(const std::string& entry,
std::string& value, std::string& value,
cmState::CacheEntryType& type) cmState::CacheEntryType& type)
{ {
return cmCacheManager::ParseEntry(entry, var, value, type); return cmState::ParseCacheEntry(entry, var, value, type);
} }
int cmake::LoadCache() int cmake::LoadCache()