From cd54f1dbeb5c71b400ccb0db81a0fcea45df46b8 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Mon, 10 Feb 2014 01:24:42 -0500 Subject: cmTarget: Only copy GenEx expansions when necessary --- Source/cmTarget.cxx | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 41d370c0c5..5836d7b452 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -2266,25 +2266,32 @@ static void processCompileOptionsInternal(cmTarget const* tgt, for (std::vector::const_iterator it = entries.begin(), end = entries.end(); it != end; ++it) { - bool cacheOptions = false; - std::vector entryOptions = (*it)->CachedEntries; - if(entryOptions.empty()) + std::vector& entriesRef = (*it)->CachedEntries; + std::vector localEntries; + std::vector* entryOptions = &entriesRef; + if(entryOptions->empty()) { cmSystemTools::ExpandListArgument((*it)->ge->Evaluate(mf, config, false, tgt, dagChecker), - entryOptions); + localEntries); if (mf->IsGeneratingBuildSystem() && !(*it)->ge->GetHadContextSensitiveCondition()) { - cacheOptions = true; + // Cache the result. + *entryOptions = localEntries; + } + else + { + // Use the context-sensitive results here. + entryOptions = &localEntries; } } std::string usedOptions; for(std::vector::iterator - li = entryOptions.begin(); li != entryOptions.end(); ++li) + li = entryOptions->begin(); li != entryOptions->end(); ++li) { std::string opt = *li; @@ -2297,10 +2304,6 @@ static void processCompileOptionsInternal(cmTarget const* tgt, } } } - if (cacheOptions) - { - (*it)->CachedEntries = entryOptions; - } if (!usedOptions.empty()) { mf->GetCMakeInstance()->IssueMessage(cmake::LOG, -- cgit v1.2.1