|
|
@@ -69,8 +69,41 @@ struct cmGeneratorExpressionNode
|
|
|
const GeneratorExpressionContent *content,
|
|
|
cmGeneratorExpressionDAGChecker *dagChecker
|
|
|
) const = 0;
|
|
|
+
|
|
|
+ static std::string EvaluateDependentExpression(
|
|
|
+ std::string const& prop, cmMakefile *makefile,
|
|
|
+ cmGeneratorExpressionContext *context,
|
|
|
+ cmTarget const* headTarget, cmTarget const* currentTarget,
|
|
|
+ cmGeneratorExpressionDAGChecker *dagChecker);
|
|
|
};
|
|
|
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+std::string cmGeneratorExpressionNode::EvaluateDependentExpression(
|
|
|
+ std::string const& prop, cmMakefile *makefile,
|
|
|
+ cmGeneratorExpressionContext *context,
|
|
|
+ cmTarget const* headTarget, cmTarget const* currentTarget,
|
|
|
+ cmGeneratorExpressionDAGChecker *dagChecker)
|
|
|
+{
|
|
|
+ cmGeneratorExpression ge(&context->Backtrace);
|
|
|
+ cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(prop);
|
|
|
+ cge->SetEvaluateForBuildsystem(context->EvaluateForBuildsystem);
|
|
|
+ std::string result = cge->Evaluate(makefile,
|
|
|
+ context->Config,
|
|
|
+ context->Quiet,
|
|
|
+ headTarget,
|
|
|
+ currentTarget,
|
|
|
+ dagChecker);
|
|
|
+ if (cge->GetHadContextSensitiveCondition())
|
|
|
+ {
|
|
|
+ context->HadContextSensitiveCondition = true;
|
|
|
+ }
|
|
|
+ if (cge->GetHadHeadSensitiveCondition())
|
|
|
+ {
|
|
|
+ context->HadHeadSensitiveCondition = true;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
//----------------------------------------------------------------------------
|
|
|
static const struct ZeroNode : public cmGeneratorExpressionNode
|
|
|
{
|
|
|
@@ -825,22 +858,10 @@ getLinkedTargetsContent(
|
|
|
}
|
|
|
if(!depString.empty())
|
|
|
{
|
|
|
- cmGeneratorExpression ge(&context->Backtrace);
|
|
|
- cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(depString);
|
|
|
- linkedTargetsContent = cge->Evaluate(target->GetMakefile(),
|
|
|
- context->Config,
|
|
|
- context->Quiet,
|
|
|
- headTarget,
|
|
|
- target,
|
|
|
- dagChecker);
|
|
|
- if (cge->GetHadContextSensitiveCondition())
|
|
|
- {
|
|
|
- context->HadContextSensitiveCondition = true;
|
|
|
- }
|
|
|
- if (cge->GetHadHeadSensitiveCondition())
|
|
|
- {
|
|
|
- context->HadHeadSensitiveCondition = true;
|
|
|
- }
|
|
|
+ linkedTargetsContent =
|
|
|
+ cmGeneratorExpressionNode::EvaluateDependentExpression(depString,
|
|
|
+ target->GetMakefile(), context,
|
|
|
+ headTarget, target, dagChecker);
|
|
|
}
|
|
|
linkedTargetsContent =
|
|
|
cmGeneratorExpression::StripEmptyListElements(linkedTargetsContent);
|
|
|
@@ -1181,24 +1202,9 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|
|
}
|
|
|
if(!interfacePropertyName.empty())
|
|
|
{
|
|
|
- cmGeneratorExpression ge(&context->Backtrace);
|
|
|
- cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(prop);
|
|
|
- cge->SetEvaluateForBuildsystem(context->EvaluateForBuildsystem);
|
|
|
- std::string result = cge->Evaluate(context->Makefile,
|
|
|
- context->Config,
|
|
|
- context->Quiet,
|
|
|
- headTarget,
|
|
|
- target,
|
|
|
- &dagChecker);
|
|
|
-
|
|
|
- if (cge->GetHadContextSensitiveCondition())
|
|
|
- {
|
|
|
- context->HadContextSensitiveCondition = true;
|
|
|
- }
|
|
|
- if (cge->GetHadHeadSensitiveCondition())
|
|
|
- {
|
|
|
- context->HadHeadSensitiveCondition = true;
|
|
|
- }
|
|
|
+ std::string result = this->EvaluateDependentExpression(prop,
|
|
|
+ context->Makefile, context,
|
|
|
+ headTarget, target, &dagChecker);
|
|
|
if (!linkedTargetsContent.empty())
|
|
|
{
|
|
|
result += (result.empty() ? "" : ";") + linkedTargetsContent;
|