[Cmake-commits] CMake branch, next, updated. v3.0.0-rc4-2689-g95137ad

Ben Boeckel ben.boeckel at kitware.com
Thu May 1 17:11:56 EDT 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  95137add8e3ff19a4e69bfb077f937796a4466e2 (commit)
       via  3f51752264bc1243fa2e56da41131ac363d3bd85 (commit)
       via  ef62fbad55deedd4b985f0900f1ee983eaa0072d (commit)
       via  f718b30a95e07d72a361d55b7ba495eda5d79680 (commit)
      from  2afb232456586a2803034dea8c77226fa2a4eeaf (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=95137add8e3ff19a4e69bfb077f937796a4466e2
commit 95137add8e3ff19a4e69bfb077f937796a4466e2
Merge: 2afb232 3f51752
Author:     Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Thu May 1 17:11:55 2014 -0400
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Thu May 1 17:11:55 2014 -0400

    Merge topic 'dev/regex-variables' into next
    
    3f517522 StoreMatches: Minor cleanups
    ef62fbad ClearMatches: Store match variable names statically
    f718b30a ClearMatches: Only clear matches which were actually set


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3f51752264bc1243fa2e56da41131ac363d3bd85
commit 3f51752264bc1243fa2e56da41131ac363d3bd85
Author:     Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Mar 12 14:26:45 2014 -0400
Commit:     Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Tue Apr 29 16:00:06 2014 -0400

    StoreMatches: Minor cleanups

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index b71e113..de329f0 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -4366,11 +4366,11 @@ void cmMakefile::StoreMatches(cmsys::RegularExpression& re)
 {
   for (unsigned int i=0; i<10; i++)
     {
-    std::string m = re.match(i);
-    if(m.size() > 0)
+    std::string const& m = re.match(i);
+    if(!m.empty())
       {
       std::string const& var = matchVariables[i];
-      this->AddDefinition(var, re.match(i).c_str());
+      this->AddDefinition(var, m.c_str());
       this->MarkVariableAsUsed(var);
       this->NumLastMatches = i + 1;
       }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ef62fbad55deedd4b985f0900f1ee983eaa0072d
commit ef62fbad55deedd4b985f0900f1ee983eaa0072d
Author:     Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Mar 12 14:25:59 2014 -0400
Commit:     Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Tue Apr 29 16:00:05 2014 -0400

    ClearMatches: Store match variable names statically
    
    Constructing the names and then turning them into a std::string is
    non-negligible in performance testing.

diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 262f29d..b71e113 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -4332,20 +4332,30 @@ 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()
 {
-  std::stringstream sstr;
   for (unsigned int i=0; i<this->NumLastMatches; i++)
     {
-    sstr.str("");
-    sstr << "CMAKE_MATCH_" << i;
-    std::string const& name = sstr.str();
-    std::string const& s = this->GetSafeDefinition(name);
+    std::string const& var = matchVariables[i];
+    std::string const& s = this->GetSafeDefinition(var);
     if(!s.empty())
       {
-      this->AddDefinition(name, "");
-      this->MarkVariableAsUsed(name);
+      this->AddDefinition(var, "");
+      this->MarkVariableAsUsed(var);
       }
     }
   this->NumLastMatches = 0;
@@ -4359,10 +4369,9 @@ void cmMakefile::StoreMatches(cmsys::RegularExpression& re)
     std::string m = re.match(i);
     if(m.size() > 0)
       {
-      char name[128];
-      sprintf(name, "CMAKE_MATCH_%d", i);
-      this->AddDefinition(name, re.match(i).c_str());
-      this->MarkVariableAsUsed(name);
+      std::string const& var = matchVariables[i];
+      this->AddDefinition(var, re.match(i).c_str());
+      this->MarkVariableAsUsed(var);
       this->NumLastMatches = i + 1;
       }
     }

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f718b30a95e07d72a361d55b7ba495eda5d79680
commit f718b30a95e07d72a361d55b7ba495eda5d79680
Author:     Ben Boeckel <ben.boeckel at kitware.com>
AuthorDate: Wed Mar 12 14:23:12 2014 -0400
Commit:     Ben Boeckel <ben.boeckel at kitware.com>
CommitDate: Tue Apr 29 16:00:05 2014 -0400

    ClearMatches: Only clear matches which were actually set
    
    ClearMatches was clearing many variables which were never set in the
    first place. Instead, store how many matches were made last time and
    only clear those. It is moved to the cmMakefile class since it is a
    common utility used by multiple commands.

diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx
index 06c4b89..1141b01 100644
--- a/Source/cmIfCommand.cxx
+++ b/Source/cmIfCommand.cxx
@@ -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
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 07cfe12..262f29d 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -148,6 +148,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)
@@ -196,6 +198,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;
 }
 
 //----------------------------------------------------------------------------
@@ -4329,6 +4333,42 @@ std::vector<cmSourceFile*> cmMakefile::GetQtUiFilesWithOptions() const
 }
 
 //----------------------------------------------------------------------------
+void cmMakefile::ClearMatches()
+{
+  std::stringstream sstr;
+  for (unsigned int i=0; i<this->NumLastMatches; i++)
+    {
+    sstr.str("");
+    sstr << "CMAKE_MATCH_" << i;
+    std::string const& name = sstr.str();
+    std::string const& s = this->GetSafeDefinition(name);
+    if(!s.empty())
+      {
+      this->AddDefinition(name, "");
+      this->MarkVariableAsUsed(name);
+      }
+    }
+  this->NumLastMatches = 0;
+}
+
+//----------------------------------------------------------------------------
+void cmMakefile::StoreMatches(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);
+      this->AddDefinition(name, re.match(i).c_str());
+      this->MarkVariableAsUsed(name);
+      this->NumLastMatches = i + 1;
+      }
+    }
+}
+
+//----------------------------------------------------------------------------
 cmPolicies::PolicyStatus
 cmMakefile::GetPolicyStatus(cmPolicies::PolicyID id) const
 {
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 3bccb63..7d1759e 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -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);
@@ -1065,6 +1068,8 @@ private:
                                cmSourceFile* source);
 
   std::vector<cmSourceFile*> QtUiFilesWithOptions;
+
+  unsigned int NumLastMatches;
 };
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx
index ea762eb..65912da 100644
--- a/Source/cmStringCommand.cxx
+++ b/Source/cmStringCommand.cxx
@@ -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();
 
@@ -536,38 +536,6 @@ 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 51069e7..8292e64 100644
--- a/Source/cmStringCommand.h
+++ b/Source/cmStringCommand.h
@@ -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);

-----------------------------------------------------------------------

Summary of changes:
 Source/cmIfCommand.cxx     |    4 ++--
 Source/cmMakefile.cxx      |   49 ++++++++++++++++++++++++++++++++++++++++++++
 Source/cmMakefile.h        |    5 +++++
 Source/cmStringCommand.cxx |   44 ++++++---------------------------------
 Source/cmStringCommand.h   |    2 --
 5 files changed, 62 insertions(+), 42 deletions(-)


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list