|
|
@@ -1044,12 +1044,18 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|
|
std::string linkedTargetsContent;
|
|
|
|
|
|
std::string interfacePropertyName;
|
|
|
+ bool isInterfaceProperty = false;
|
|
|
|
|
|
#define POPULATE_INTERFACE_PROPERTY_NAME(prop) \
|
|
|
- if (propertyName == #prop || propertyName == "INTERFACE_" #prop) \
|
|
|
+ if (propertyName == #prop) \
|
|
|
{ \
|
|
|
interfacePropertyName = "INTERFACE_" #prop; \
|
|
|
} \
|
|
|
+ else if (propertyName == "INTERFACE_" #prop) \
|
|
|
+ { \
|
|
|
+ interfacePropertyName = "INTERFACE_" #prop; \
|
|
|
+ isInterfaceProperty = true; \
|
|
|
+ } \
|
|
|
else
|
|
|
|
|
|
CM_FOR_EACH_TRANSITIVE_PROPERTY_NAME(POPULATE_INTERFACE_PROPERTY_NAME)
|
|
|
@@ -1065,17 +1071,10 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|
|
}
|
|
|
}
|
|
|
#undef POPULATE_INTERFACE_PROPERTY_NAME
|
|
|
-
|
|
|
cmTarget const* headTarget = context->HeadTarget
|
|
|
? context->HeadTarget : target;
|
|
|
|
|
|
- const char * const *transBegin =
|
|
|
- cmArrayBegin(targetPropertyTransitiveWhitelist) + 1;
|
|
|
- const char * const *transEnd =
|
|
|
- cmArrayEnd(targetPropertyTransitiveWhitelist);
|
|
|
-
|
|
|
- if (std::find_if(transBegin, transEnd,
|
|
|
- cmStrCmp(propertyName)) != transEnd)
|
|
|
+ if(isInterfaceProperty)
|
|
|
{
|
|
|
if(cmTarget::LinkInterfaceLibraries const* iface =
|
|
|
target->GetLinkInterfaceLibraries(context->Config, headTarget, true))
|
|
|
@@ -1087,18 +1086,17 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|
|
interfacePropertyName);
|
|
|
}
|
|
|
}
|
|
|
- else if (std::find_if(transBegin, transEnd,
|
|
|
- cmStrCmp(interfacePropertyName)) != transEnd)
|
|
|
+ else if(!interfacePropertyName.empty())
|
|
|
{
|
|
|
const cmTarget::LinkImplementationLibraries *impl
|
|
|
= target->GetLinkImplementationLibraries(context->Config);
|
|
|
if(impl)
|
|
|
{
|
|
|
linkedTargetsContent =
|
|
|
- getLinkedTargetsContent(impl->Libraries, target,
|
|
|
- headTarget,
|
|
|
- context, &dagChecker,
|
|
|
- interfacePropertyName);
|
|
|
+ getLinkedTargetsContent(impl->Libraries, target,
|
|
|
+ headTarget,
|
|
|
+ context, &dagChecker,
|
|
|
+ interfacePropertyName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1178,32 +1176,27 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|
|
return propContent ? propContent : "";
|
|
|
}
|
|
|
}
|
|
|
- for (size_t i = 1;
|
|
|
- i < cmArraySize(targetPropertyTransitiveWhitelist);
|
|
|
- ++i)
|
|
|
+ if(!interfacePropertyName.empty())
|
|
|
{
|
|
|
- if (targetPropertyTransitiveWhitelist[i] == interfacePropertyName)
|
|
|
- {
|
|
|
- cmGeneratorExpression ge(&context->Backtrace);
|
|
|
- cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(prop);
|
|
|
- cge->SetEvaluateForBuildsystem(context->EvaluateForBuildsystem);
|
|
|
- std::string result = cge->Evaluate(context->Makefile,
|
|
|
+ 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 (!linkedTargetsContent.empty())
|
|
|
- {
|
|
|
- result += (result.empty() ? "" : ";") + linkedTargetsContent;
|
|
|
- }
|
|
|
- return result;
|
|
|
+ if (cge->GetHadContextSensitiveCondition())
|
|
|
+ {
|
|
|
+ context->HadContextSensitiveCondition = true;
|
|
|
+ }
|
|
|
+ if (!linkedTargetsContent.empty())
|
|
|
+ {
|
|
|
+ result += (result.empty() ? "" : ";") + linkedTargetsContent;
|
|
|
}
|
|
|
+ return result;
|
|
|
}
|
|
|
return prop;
|
|
|
}
|