mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-02 12:19:54 -05:00
Revert "ClearMatches: Only clear matches which were actually set" (#15261)
This reverts commit v3.1.0-rc1~557^2~2 (ClearMatches: Only clear matches which were actually set, 2014-03-12). The optimization did not track the match count in the same scope as the variables, allowing possible inconsistency. Resolve conflicts in Source/cmIfCommand.cxx, Source/cmMakefile.cxx, and Source/cmMakefile.h by moving the changes to the new location of the code involved.
This commit is contained in:
@@ -310,7 +310,7 @@ bool cmStringCommand::RegexMatch(std::vector<std::string> const& args)
|
||||
input += args[i];
|
||||
}
|
||||
|
||||
this->Makefile->ClearMatches();
|
||||
this->ClearMatches(this->Makefile);
|
||||
// Compile the regular expression.
|
||||
cmsys::RegularExpression re;
|
||||
if(!re.compile(regex.c_str()))
|
||||
@@ -325,7 +325,7 @@ bool cmStringCommand::RegexMatch(std::vector<std::string> const& args)
|
||||
std::string output;
|
||||
if(re.find(input.c_str()))
|
||||
{
|
||||
this->Makefile->StoreMatches(re);
|
||||
this->StoreMatches(this->Makefile, re);
|
||||
std::string::size_type l = re.start();
|
||||
std::string::size_type r = re.end();
|
||||
if(r-l == 0)
|
||||
@@ -359,7 +359,7 @@ bool cmStringCommand::RegexMatchAll(std::vector<std::string> const& args)
|
||||
input += args[i];
|
||||
}
|
||||
|
||||
this->Makefile->ClearMatches();
|
||||
this->ClearMatches(this->Makefile);
|
||||
// Compile the regular expression.
|
||||
cmsys::RegularExpression re;
|
||||
if(!re.compile(regex.c_str()))
|
||||
@@ -376,7 +376,7 @@ bool cmStringCommand::RegexMatchAll(std::vector<std::string> const& args)
|
||||
const char* p = input.c_str();
|
||||
while(re.find(p))
|
||||
{
|
||||
this->Makefile->StoreMatches(re);
|
||||
this->StoreMatches(this->Makefile, re);
|
||||
std::string::size_type l = re.start();
|
||||
std::string::size_type r = re.end();
|
||||
if(r-l == 0)
|
||||
@@ -463,7 +463,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
|
||||
input += args[i];
|
||||
}
|
||||
|
||||
this->Makefile->ClearMatches();
|
||||
this->ClearMatches(this->Makefile);
|
||||
// Compile the regular expression.
|
||||
cmsys::RegularExpression re;
|
||||
if(!re.compile(regex.c_str()))
|
||||
@@ -480,7 +480,7 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
|
||||
std::string::size_type base = 0;
|
||||
while(re.find(input.c_str()+base))
|
||||
{
|
||||
this->Makefile->StoreMatches(re);
|
||||
this->StoreMatches(this->Makefile, re);
|
||||
std::string::size_type l2 = re.start();
|
||||
std::string::size_type r = re.end();
|
||||
|
||||
@@ -540,6 +540,38 @@ 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)
|
||||
|
||||
Reference in New Issue
Block a user