summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorExpressionNode.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmGeneratorExpressionNode.cxx')
-rw-r--r--Source/cmGeneratorExpressionNode.cxx20
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(