Merge topic 'dev/regex-variables'
3f517522 StoreMatches: Minor cleanups ef62fbad ClearMatches: Store match variable names statically f718b30a ClearMatches: Only clear matches which were actually set
This commit is contained in:
commit
1cc1efc063
@ -595,7 +595,7 @@ namespace
|
||||
{
|
||||
def = cmIfCommand::GetVariableOrString(*arg, makefile);
|
||||
const char* rex = (argP2)->c_str();
|
||||
cmStringCommand::ClearMatches(makefile);
|
||||
makefile->ClearMatches();
|
||||
cmsys::RegularExpression regEntry;
|
||||
if ( !regEntry.compile(rex) )
|
||||
{
|
||||
@ -607,7 +607,7 @@ namespace
|
||||
}
|
||||
if (regEntry.find(def))
|
||||
{
|
||||
cmStringCommand::StoreMatches(makefile, regEntry);
|
||||
makefile->StoreMatches(regEntry);
|
||||
*arg = "1";
|
||||
}
|
||||
else
|
||||
|
@ -101,6 +101,8 @@ cmMakefile::cmMakefile(): Internal(new Internals)
|
||||
this->Initialize();
|
||||
this->PreOrder = false;
|
||||
this->GeneratingBuildSystem = false;
|
||||
|
||||
this->NumLastMatches = 0;
|
||||
}
|
||||
|
||||
cmMakefile::cmMakefile(const cmMakefile& mf): Internal(new Internals)
|
||||
@ -149,6 +151,8 @@ cmMakefile::cmMakefile(const cmMakefile& mf): Internal(new Internals)
|
||||
this->CheckSystemVars = mf.CheckSystemVars;
|
||||
this->ListFileStack = mf.ListFileStack;
|
||||
this->OutputToSource = mf.OutputToSource;
|
||||
|
||||
this->NumLastMatches = mf.NumLastMatches;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@ -4274,6 +4278,51 @@ std::vector<cmSourceFile*> cmMakefile::GetQtUiFilesWithOptions() const
|
||||
return this->QtUiFilesWithOptions;
|
||||
}
|
||||
|
||||
static std::string matchVariables[] = {
|
||||
"CMAKE_MATCH_0",
|
||||
"CMAKE_MATCH_1",
|
||||
"CMAKE_MATCH_2",
|
||||
"CMAKE_MATCH_3",
|
||||
"CMAKE_MATCH_4",
|
||||
"CMAKE_MATCH_5",
|
||||
"CMAKE_MATCH_6",
|
||||
"CMAKE_MATCH_7",
|
||||
"CMAKE_MATCH_8",
|
||||
"CMAKE_MATCH_9"
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmMakefile::ClearMatches()
|
||||
{
|
||||
for (unsigned int i=0; i<this->NumLastMatches; i++)
|
||||
{
|
||||
std::string const& var = matchVariables[i];
|
||||
std::string const& s = this->GetSafeDefinition(var);
|
||||
if(!s.empty())
|
||||
{
|
||||
this->AddDefinition(var, "");
|
||||
this->MarkVariableAsUsed(var);
|
||||
}
|
||||
}
|
||||
this->NumLastMatches = 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmMakefile::StoreMatches(cmsys::RegularExpression& re)
|
||||
{
|
||||
for (unsigned int i=0; i<10; i++)
|
||||
{
|
||||
std::string const& m = re.match(i);
|
||||
if(!m.empty())
|
||||
{
|
||||
std::string const& var = matchVariables[i];
|
||||
this->AddDefinition(var, m.c_str());
|
||||
this->MarkVariableAsUsed(var);
|
||||
this->NumLastMatches = i + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmPolicies::PolicyStatus
|
||||
cmMakefile::GetPolicyStatus(cmPolicies::PolicyID id) const
|
||||
|
@ -889,6 +889,9 @@ public:
|
||||
const std::string& feature,
|
||||
std::string *error = 0) const;
|
||||
|
||||
void ClearMatches();
|
||||
void StoreMatches(cmsys::RegularExpression& re);
|
||||
|
||||
protected:
|
||||
// add link libraries and directories to the target
|
||||
void AddGlobalLinkInformation(const std::string& name, cmTarget& target);
|
||||
@ -1070,6 +1073,8 @@ private:
|
||||
cmSourceFile* source);
|
||||
|
||||
std::vector<cmSourceFile*> QtUiFilesWithOptions;
|
||||
|
||||
unsigned int NumLastMatches;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -305,7 +305,7 @@ bool cmStringCommand::RegexMatch(std::vector<std::string> const& args)
|
||||
input += args[i];
|
||||
}
|
||||
|
||||
this->ClearMatches(this->Makefile);
|
||||
this->Makefile->ClearMatches();
|
||||
// Compile the regular expression.
|
||||
cmsys::RegularExpression re;
|
||||
if(!re.compile(regex.c_str()))
|
||||
@ -320,7 +320,7 @@ bool cmStringCommand::RegexMatch(std::vector<std::string> const& args)
|
||||
std::string output;
|
||||
if(re.find(input.c_str()))
|
||||
{
|
||||
this->StoreMatches(this->Makefile, re);
|
||||
this->Makefile->StoreMatches(re);
|
||||
std::string::size_type l = re.start();
|
||||
std::string::size_type r = re.end();
|
||||
if(r-l == 0)
|
||||
@ -354,7 +354,7 @@ bool cmStringCommand::RegexMatchAll(std::vector<std::string> const& args)
|
||||
input += args[i];
|
||||
}
|
||||
|
||||
this->ClearMatches(this->Makefile);
|
||||
this->Makefile->ClearMatches();
|
||||
// Compile the regular expression.
|
||||
cmsys::RegularExpression re;
|
||||
if(!re.compile(regex.c_str()))
|
||||
@ -371,7 +371,7 @@ bool cmStringCommand::RegexMatchAll(std::vector<std::string> const& args)
|
||||
const char* p = input.c_str();
|
||||
while(re.find(p))
|
||||
{
|
||||
this->StoreMatches(this->Makefile, re);
|
||||
this->Makefile->StoreMatches(re);
|
||||
std::string::size_type l = re.start();
|
||||
std::string::size_type r = re.end();
|
||||
if(r-l == 0)
|
||||
@ -458,7 +458,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
|
||||
input += args[i];
|
||||
}
|
||||
|
||||
this->ClearMatches(this->Makefile);
|
||||
this->Makefile->ClearMatches();
|
||||
// Compile the regular expression.
|
||||
cmsys::RegularExpression re;
|
||||
if(!re.compile(regex.c_str()))
|
||||
@ -475,7 +475,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
|
||||
std::string::size_type base = 0;
|
||||
while(re.find(input.c_str()+base))
|
||||
{
|
||||
this->StoreMatches(this->Makefile, re);
|
||||
this->Makefile->StoreMatches(re);
|
||||
std::string::size_type l2 = re.start();
|
||||
std::string::size_type r = re.end();
|
||||
|
||||
@ -535,38 +535,6 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
|
||||
return true;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmStringCommand::ClearMatches(cmMakefile* mf)
|
||||
{
|
||||
for (unsigned int i=0; i<10; i++)
|
||||
{
|
||||
char name[128];
|
||||
sprintf(name, "CMAKE_MATCH_%d", i);
|
||||
const char* s = mf->GetDefinition(name);
|
||||
if(s && *s != 0)
|
||||
{
|
||||
mf->AddDefinition(name, "");
|
||||
mf->MarkVariableAsUsed(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmStringCommand::StoreMatches(cmMakefile* mf,cmsys::RegularExpression& re)
|
||||
{
|
||||
for (unsigned int i=0; i<10; i++)
|
||||
{
|
||||
std::string m = re.match(i);
|
||||
if(m.size() > 0)
|
||||
{
|
||||
char name[128];
|
||||
sprintf(name, "CMAKE_MATCH_%d", i);
|
||||
mf->AddDefinition(name, re.match(i).c_str());
|
||||
mf->MarkVariableAsUsed(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool cmStringCommand::HandleFindCommand(std::vector<std::string> const&
|
||||
args)
|
||||
|
@ -53,8 +53,6 @@ public:
|
||||
virtual std::string GetName() const { return "string";}
|
||||
|
||||
cmTypeMacro(cmStringCommand, cmCommand);
|
||||
static void ClearMatches(cmMakefile* mf);
|
||||
static void StoreMatches(cmMakefile* mf, cmsys::RegularExpression& re);
|
||||
protected:
|
||||
bool HandleConfigureCommand(std::vector<std::string> const& args);
|
||||
bool HandleAsciiCommand(std::vector<std::string> const& args);
|
||||
|
Loading…
x
Reference in New Issue
Block a user