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));
|
||||
if (std::find_if(transBegin, transEnd,
|
||||
TransitiveWhitelistCompare(interfacePropertyName)) != transEnd)
|
||||
TransitiveWhitelistCompare(propertyName)) != transEnd)
|
||||
{
|
||||
const cmTarget::LinkInterface *iface = target->GetLinkInterface(
|
||||
context->Config,
|
||||
|
@ -556,6 +556,20 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|||
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 =
|
||||
cmGeneratorExpression::StripEmptyListElements(linkedTargetsContent);
|
||||
|
|
Loading…
Reference in New Issue