GenexEval: Fix evaluation of INCLUDE_DIRECTORIES target property.
This property should come from the content of the property itself, plus the INTERFACE_INCLUDE_DIRECTORIES of the link *implementation*. In contrast, when the INTERFACE_INCLUDE_DIRECTORIES is evaluated for a target, the INTERFACE_INCLUDE_DIRECTORIES of the link *interface* is used. Similar logic applies for the COMPILE_DEFINITIONS target properties. If the propertyName is already an INTERFACE_ variant of the property, ie, the expression is similar to $<TARGET_PROPERTY:foo,INTERFACE_INCLUDE_DIRECTORIES> then the INTERFACE_INCLUDE_DIRECTORIES of the link *interface* of foo is used. However, if the propertyName is not an INTERFACE_ variant, and the interfacePropertyName is, ie, the expression is similar to: $<TARGET_PROPERTY:foo,INCLUDE_DIRECTORIES> then the INTERFACE_INCLUDE_DIRECTORIES of the link *implementation* of foo is used.
This commit is contained in:
parent
0b39fefeac
commit
3aa9ce441f
|
@ -543,7 +543,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||||
+ (sizeof(targetPropertyTransitiveWhitelist) /
|
+ (sizeof(targetPropertyTransitiveWhitelist) /
|
||||||
sizeof(*targetPropertyTransitiveWhitelist));
|
sizeof(*targetPropertyTransitiveWhitelist));
|
||||||
if (std::find_if(transBegin, transEnd,
|
if (std::find_if(transBegin, transEnd,
|
||||||
TransitiveWhitelistCompare(interfacePropertyName)) != transEnd)
|
TransitiveWhitelistCompare(propertyName)) != transEnd)
|
||||||
{
|
{
|
||||||
const cmTarget::LinkInterface *iface = target->GetLinkInterface(
|
const cmTarget::LinkInterface *iface = target->GetLinkInterface(
|
||||||
context->Config,
|
context->Config,
|
||||||
|
@ -556,6 +556,20 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||||
interfacePropertyName);
|
interfacePropertyName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (std::find_if(transBegin, transEnd,
|
||||||
|
TransitiveWhitelistCompare(interfacePropertyName)) != transEnd)
|
||||||
|
{
|
||||||
|
const cmTarget::LinkImplementation *impl = target->GetLinkImplementation(
|
||||||
|
context->Config,
|
||||||
|
context->HeadTarget);
|
||||||
|
if(impl)
|
||||||
|
{
|
||||||
|
linkedTargetsContent =
|
||||||
|
getLinkedTargetsContent(impl->Libraries, target,
|
||||||
|
context, &dagChecker,
|
||||||
|
interfacePropertyName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
linkedTargetsContent =
|
linkedTargetsContent =
|
||||||
cmGeneratorExpression::StripEmptyListElements(linkedTargetsContent);
|
cmGeneratorExpression::StripEmptyListElements(linkedTargetsContent);
|
||||||
|
|
Loading…
Reference in New Issue