summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2013-06-06 16:50:20 (GMT)
committerBrad King <brad.king@kitware.com>2013-06-14 12:46:14 (GMT)
commitdc03499595086ec190d55c59c8589c112362dbb6 (patch)
tree89769d1af0db54f489a7ca903e684435f49de7cd
parent6927b25affcb9e2e01fb226970fd91db143b5101 (diff)
downloadCMake-dc03499595086ec190d55c59c8589c112362dbb6.zip
CMake-dc03499595086ec190d55c59c8589c112362dbb6.tar.gz
CMake-dc03499595086ec190d55c59c8589c112362dbb6.tar.bz2
Do not set CMAKE_MATCH_ variables when not neeeded
Each call to AddDefinition has overhead for variable watches and such. Avoid extra calls when not needed. This decreases the configure time for ParaView by 10 seconds on my machine. Without the change about 1,000,000 set-to-empty calls were being made. After the change it drops to about 100,000.
-rw-r--r--Source/cmStringCommand.cxx20
1 files changed, 14 insertions, 6 deletions
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx
index 1fbde01..68ba13f 100644
--- a/Source/cmStringCommand.cxx
+++ b/Source/cmStringCommand.cxx
@@ -534,8 +534,12 @@ void cmStringCommand::ClearMatches(cmMakefile* mf)
{
char name[128];
sprintf(name, "CMAKE_MATCH_%d", i);
- mf->AddDefinition(name, "");
- mf->MarkVariableAsUsed(name);
+ const char* s = mf->GetDefinition(name);
+ if(s && *s != 0)
+ {
+ mf->AddDefinition(name, "");
+ mf->MarkVariableAsUsed(name);
+ }
}
}
@@ -544,10 +548,14 @@ void cmStringCommand::StoreMatches(cmMakefile* mf,cmsys::RegularExpression& re)
{
for (unsigned int i=0; i<10; i++)
{
- char name[128];
- sprintf(name, "CMAKE_MATCH_%d", i);
- mf->AddDefinition(name, re.match(i).c_str());
- mf->MarkVariableAsUsed(name);
+ 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);
+ }
}
}