From dc03499595086ec190d55c59c8589c112362dbb6 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Thu, 6 Jun 2013 12:50:20 -0400 Subject: [PATCH] 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. --- Source/cmStringCommand.cxx | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx index 1fbde01e6..68ba13f62 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); + } } }