summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorExpression.cxx
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2013-02-03 06:33:15 (GMT)
committerStephen Kelly <steveire@gmail.com>2013-02-03 22:04:03 (GMT)
commite48d84209cde93b43fcfb305897b4f52cd18a55f (patch)
tree54d2722367a8d32055e20ebc23d8a8f3f5451ef2 /Source/cmGeneratorExpression.cxx
parent089fe1c13d8fa73be5182162a855c17351d1f918 (diff)
downloadCMake-e48d84209cde93b43fcfb305897b4f52cd18a55f.zip
CMake-e48d84209cde93b43fcfb305897b4f52cd18a55f.tar.gz
CMake-e48d84209cde93b43fcfb305897b4f52cd18a55f.tar.bz2
Cache context-independent includes on evaluation.
Generator expressions whose output depends on the configuration now record that fact. The GetIncludeDirectories method can use that result to cache the include directories for later calls. GetIncludeDirectories is called multiple times for a target for each configuration, so this should restore performance for multi-config generators.
Diffstat (limited to 'Source/cmGeneratorExpression.cxx')
-rw-r--r--Source/cmGeneratorExpression.cxx8
1 files changed, 7 insertions, 1 deletions
diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx
index 78ae8f2..7add1bf 100644
--- a/Source/cmGeneratorExpression.cxx
+++ b/Source/cmGeneratorExpression.cxx
@@ -88,6 +88,7 @@ const char *cmCompiledGeneratorExpression::Evaluate(
context.Config = config;
context.Quiet = quiet;
context.HadError = false;
+ context.HadContextSensitiveCondition = false;
context.HeadTarget = headTarget;
context.CurrentTarget = currentTarget ? currentTarget : headTarget;
context.Backtrace = this->Backtrace;
@@ -109,6 +110,10 @@ const char *cmCompiledGeneratorExpression::Evaluate(
break;
}
}
+ if (!context.HadError)
+ {
+ this->HadContextSensitiveCondition = context.HadContextSensitiveCondition;
+ }
this->Targets = context.Targets;
// TODO: Return a std::string from here instead?
@@ -118,7 +123,8 @@ const char *cmCompiledGeneratorExpression::Evaluate(
cmCompiledGeneratorExpression::cmCompiledGeneratorExpression(
cmListFileBacktrace const& backtrace,
const char *input)
- : Backtrace(backtrace), Input(input ? input : "")
+ : Backtrace(backtrace), Input(input ? input : ""),
+ HadContextSensitiveCondition(false)
{
cmGeneratorExpressionLexer l;
std::vector<cmGeneratorExpressionToken> tokens =