summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2014-11-26 17:55:44 (GMT)
committerBrad King <brad.king@kitware.com>2014-11-26 18:45:06 (GMT)
commit7d674b5f0b28a610333644d417c2e8cb796cc9e4 (patch)
tree362847564a783ffb8fe9580fa98df3627a12372c /Source
parentd2f2a2e226a8717d6fdb6df0ed4858d1629f557c (diff)
downloadCMake-7d674b5f0b28a610333644d417c2e8cb796cc9e4.zip
CMake-7d674b5f0b28a610333644d417c2e8cb796cc9e4.tar.gz
CMake-7d674b5f0b28a610333644d417c2e8cb796cc9e4.tar.bz2
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.
Diffstat (limited to 'Source')
-rw-r--r--Source/cmConditionEvaluator.cxx5
-rw-r--r--Source/cmMakefile.cxx47
-rw-r--r--Source/cmMakefile.h5
-rw-r--r--Source/cmStringCommand.cxx44
-rw-r--r--Source/cmStringCommand.h2
5 files changed, 43 insertions, 60 deletions
diff --git a/Source/cmConditionEvaluator.cxx b/Source/cmConditionEvaluator.cxx
index aba26de..6065b8a 100644
--- a/Source/cmConditionEvaluator.cxx
+++ b/Source/cmConditionEvaluator.cxx
@@ -11,6 +11,7 @@
============================================================================*/
#include "cmConditionEvaluator.h"
+#include "cmStringCommand.h"
cmConditionEvaluator::cmConditionEvaluator(cmMakefile& makefile):
Makefile(makefile),
@@ -555,7 +556,7 @@ bool cmConditionEvaluator::HandleLevel2(cmArgumentList &newArgs,
{
def = this->GetVariableOrString(*arg);
const char* rex = argP2->c_str();
- this->Makefile.ClearMatches();
+ cmStringCommand::ClearMatches(&this->Makefile);
cmsys::RegularExpression regEntry;
if ( !regEntry.compile(rex) )
{
@@ -567,7 +568,7 @@ bool cmConditionEvaluator::HandleLevel2(cmArgumentList &newArgs,
}
if (regEntry.find(def))
{
- this->Makefile.StoreMatches(regEntry);
+ cmStringCommand::StoreMatches(&this->Makefile, regEntry);
*arg = cmExpandedCommandArgument("1", true);
}
else
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 0bd1624..b7e89b8 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -102,7 +102,6 @@ cmMakefile::cmMakefile(): Internal(new Internals)
this->PreOrder = false;
this->GeneratingBuildSystem = false;
- this->NumLastMatches = 0;
this->SuppressWatches = false;
}
@@ -153,7 +152,6 @@ cmMakefile::cmMakefile(const cmMakefile& mf): Internal(new Internals)
this->ListFileStack = mf.ListFileStack;
this->OutputToSource = mf.OutputToSource;
- this->NumLastMatches = mf.NumLastMatches;
this->SuppressWatches = mf.SuppressWatches;
}
@@ -4743,51 +4741,6 @@ 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
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 164290a..28f8686 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -942,9 +942,6 @@ public:
std::string const& lhs,
std::string const& rhs);
- void ClearMatches();
- void StoreMatches(cmsys::RegularExpression& re);
-
protected:
// add link libraries and directories to the target
void AddGlobalLinkInformation(const std::string& name, cmTarget& target);
@@ -1150,8 +1147,6 @@ private:
std::vector<cmSourceFile*> QtUiFilesWithOptions;
- unsigned int NumLastMatches;
-
bool AddRequiredTargetCFeature(cmTarget *target,
const std::string& feature) const;
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx
index 90a8f85..93aa083 100644
--- a/Source/cmStringCommand.cxx
+++ b/Source/cmStringCommand.cxx
@@ -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();
@@ -541,6 +541,38 @@ bool cmStringCommand::RegexReplace(std::vector<std::string> const& args)
}
//----------------------------------------------------------------------------
+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)
{
diff --git a/Source/cmStringCommand.h b/Source/cmStringCommand.h
index 9c75095..a5fe893 100644
--- a/Source/cmStringCommand.h
+++ b/Source/cmStringCommand.h
@@ -53,6 +53,8 @@ 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);