diff options
Diffstat (limited to 'Source/cmGeneratorExpressionNode.cxx')
-rw-r--r-- | Source/cmGeneratorExpressionNode.cxx | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/Source/cmGeneratorExpressionNode.cxx b/Source/cmGeneratorExpressionNode.cxx index 5c97e22..0df086b 100644 --- a/Source/cmGeneratorExpressionNode.cxx +++ b/Source/cmGeneratorExpressionNode.cxx @@ -547,6 +547,7 @@ static const struct TargetGenexEvalNode : public GenexEvaluator return expression; } + // Replace the surrounding context with the named target. cmGeneratorExpressionContext targetContext( context->LG, context->Config, context->Quiet, target, target, context->EvaluateForBuildsystem, context->Backtrace, context->Language); @@ -2714,8 +2715,9 @@ static std::string getLinkedTargetsContent( target->GetLocalGenerator(), context->Config, context->Quiet, target, target, context->EvaluateForBuildsystem, lib.Backtrace, context->Language); - std::string libResult = - lib.Target->EvaluateInterfaceProperty(prop, &libContext, dagChecker); + std::string libResult = lib.Target->EvaluateInterfaceProperty( + prop, &libContext, dagChecker, + cmGeneratorTarget::LinkInterfaceFor::Usage); if (!libResult.empty()) { if (result.empty()) { result = std::move(libResult); @@ -2896,6 +2898,9 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode bool evaluatingLinkLibraries = false; if (dagCheckerParent) { + // This $<TARGET_PROPERTY:...> node has been reached while evaluating + // another target property value. Check that the outermost evaluation + // expects such nested evaluations. if (dagCheckerParent->EvaluatingGenexExpression() || dagCheckerParent->EvaluatingPICExpression() || dagCheckerParent->EvaluatingLinkerLauncher()) { @@ -2911,17 +2916,16 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode return std::string(); } } else { -#define ASSERT_TRANSITIVE_PROPERTY_METHOD(METHOD) dagCheckerParent->METHOD() || - assert(CM_FOR_EACH_TRANSITIVE_PROPERTY_METHOD( - ASSERT_TRANSITIVE_PROPERTY_METHOD) false); // NOLINT(clang-tidy) -#undef ASSERT_TRANSITIVE_PROPERTY_METHOD + assert(dagCheckerParent + ->EvaluatingTransitiveProperty()); // NOLINT(clang-tidy) } } if (isInterfaceProperty) { return cmGeneratorExpression::StripEmptyListElements( - target->EvaluateInterfaceProperty(propertyName, context, - dagCheckerParent)); + target->EvaluateInterfaceProperty( + propertyName, context, dagCheckerParent, + cmGeneratorTarget::LinkInterfaceFor::Usage)); } cmGeneratorExpressionDAGChecker dagChecker( |