Browse Source

Merge branch 'revert-cached-regex-clear' into revert-cached-regex-clear-for-master

Resolve conflict in Source/cmMakefile.h by integrating both changes.
Brad King 11 năm trước cách đây
mục cha
commit
808c77e231

+ 3 - 2
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

+ 0 - 47
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;
 }
 
@@ -4843,51 +4841,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

+ 0 - 5
Source/cmMakefile.h

@@ -972,9 +972,6 @@ public:
                        std::string const& lhs,
                        std::string const& rhs);
 
-  void ClearMatches();
-  void StoreMatches(cmsys::RegularExpression& re);
-
   void PushLoopBlock();
   void PopLoopBlock();
   bool IsLoopBlock() const;
@@ -1186,8 +1183,6 @@ private:
 
   std::vector<cmSourceFile*> QtUiFilesWithOptions;
 
-  unsigned int NumLastMatches;
-
   bool AddRequiredTargetCFeature(cmTarget *target,
                                  const std::string& feature) const;
 

+ 38 - 6
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();
 
@@ -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)

+ 2 - 0
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);