mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-04 13:19:51 -05:00
Genex: In TARGET_PROPERTY check for usage reqs in link libs earlier
This commit is contained in:
@@ -1219,6 +1219,30 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
}
|
||||
#undef POPULATE_INTERFACE_PROPERTY_NAME
|
||||
|
||||
bool evaluatingLinkLibraries = false;
|
||||
|
||||
if (dagCheckerParent) {
|
||||
if (dagCheckerParent->EvaluatingGenexExpression() ||
|
||||
dagCheckerParent->EvaluatingPICExpression()) {
|
||||
// No check required.
|
||||
} else if (dagCheckerParent->EvaluatingLinkLibraries()) {
|
||||
evaluatingLinkLibraries = true;
|
||||
if (!interfacePropertyName.empty()) {
|
||||
reportError(
|
||||
context, content->GetOriginalExpression(),
|
||||
"$<TARGET_PROPERTY:...> expression in link libraries "
|
||||
"evaluation depends on target property which is transitive "
|
||||
"over the link libraries, creating a recursion.");
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
cmGeneratorExpressionDAGChecker dagChecker(
|
||||
context->Backtrace, target, propertyName, content, dagCheckerParent);
|
||||
|
||||
@@ -1243,31 +1267,8 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
if (const char* p = target->GetProperty(propertyName)) {
|
||||
result = p;
|
||||
haveProp = true;
|
||||
}
|
||||
|
||||
if (dagCheckerParent) {
|
||||
if (dagCheckerParent->EvaluatingGenexExpression() ||
|
||||
dagCheckerParent->EvaluatingPICExpression()) {
|
||||
// No check required.
|
||||
} else if (dagCheckerParent->EvaluatingLinkLibraries()) {
|
||||
if (!interfacePropertyName.empty()) {
|
||||
reportError(
|
||||
context, content->GetOriginalExpression(),
|
||||
"$<TARGET_PROPERTY:...> expression in link libraries "
|
||||
"evaluation depends on target property which is transitive "
|
||||
"over the link libraries, creating a recursion.");
|
||||
return std::string();
|
||||
}
|
||||
|
||||
if (!haveProp) {
|
||||
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
|
||||
}
|
||||
} else if (evaluatingLinkLibraries) {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
if (!haveProp && !target->IsImported() &&
|
||||
|
||||
Reference in New Issue
Block a user