mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 16:32:14 -06:00
Genex: $<TARGET_PROPERTY> strip emtpy list elements for predefined properties
Fixes: #20951
This commit is contained in:
@@ -1476,8 +1476,9 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
}
|
||||
|
||||
if (isInterfaceProperty) {
|
||||
return target->EvaluateInterfaceProperty(propertyName, context,
|
||||
dagCheckerParent);
|
||||
return cmGeneratorExpression::StripEmptyListElements(
|
||||
target->EvaluateInterfaceProperty(propertyName, context,
|
||||
dagCheckerParent));
|
||||
}
|
||||
|
||||
cmGeneratorExpressionDAGChecker dagChecker(
|
||||
@@ -1563,8 +1564,9 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
}
|
||||
|
||||
if (!interfacePropertyName.empty()) {
|
||||
result = this->EvaluateDependentExpression(result, context->LG, context,
|
||||
target, &dagChecker, target);
|
||||
result = cmGeneratorExpression::StripEmptyListElements(
|
||||
this->EvaluateDependentExpression(result, context->LG, context, target,
|
||||
&dagChecker, target));
|
||||
std::string linkedTargetsContent = getLinkedTargetsContent(
|
||||
target, interfacePropertyName, context, &dagChecker);
|
||||
if (!linkedTargetsContent.empty()) {
|
||||
|
||||
@@ -9,11 +9,11 @@ check(test_version_equal_1 "0")
|
||||
check(test_version_equal_2 "1")
|
||||
|
||||
if(config AND NOT config STREQUAL NoConfig)
|
||||
if(NOT "${test_imported_includes}" MATCHES "^;*/imported[12]/include/with space;*$")
|
||||
if(NOT "${test_imported_includes}" MATCHES "^[^;]*/imported[12]/include/with space$")
|
||||
message(SEND_ERROR "test_imported_includes is not correct: ${test_imported_includes}")
|
||||
endif()
|
||||
else()
|
||||
if(NOT "${test_imported_includes}" MATCHES "^;;$")
|
||||
if(NOT "${test_imported_includes}" MATCHES "^$")
|
||||
message(SEND_ERROR "test_imported_includes is not an empty list: ${test_imported_includes}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
file(READ "${RunCMake_TEST_BINARY_DIR}/out.txt" content)
|
||||
|
||||
unset(RunCMake_TEST_FAILED)
|
||||
|
||||
if (NOT content MATCHES "(INCLUDES1:${RunCMake_TEST_SOURCE_DIR}/include)")
|
||||
string(APPEND RunCMake_TEST_FAILED "wrong content for INCLUDES1: \"${CMAKE_MATCH_1}\"\n")
|
||||
endif()
|
||||
|
||||
if (NOT content MATCHES "(INCLUDES2:><)")
|
||||
string(APPEND RunCMake_TEST_FAILED "wrong content for INCLUDES2: \"${CMAKE_MATCH_1}\"\n")
|
||||
endif()
|
||||
if (NOT content MATCHES "(INCLUDES3:><)")
|
||||
string(APPEND RunCMake_TEST_FAILED "wrong content for INCLUDES3: \"${CMAKE_MATCH_1}\"\n")
|
||||
endif()
|
||||
if (NOT content MATCHES "(CUSTOM:>;;<)")
|
||||
string(APPEND RunCMake_TEST_FAILED "wrong content for CUSTOM: \"${CMAKE_MATCH_1}\"\n")
|
||||
endif()
|
||||
@@ -14,5 +14,10 @@ target_include_directories(foo3 PUBLIC $<TARGET_PROPERTY:foo2,INCLUDE_DIRECTORIE
|
||||
add_library(foo4 STATIC empty.c)
|
||||
target_include_directories(foo4 PUBLIC $<TARGET_PROPERTY:foo3,INCLUDE_DIRECTORIES>)
|
||||
|
||||
add_library (foo5 SHARED empty.c)
|
||||
set_property(TARGET foo5 PROPERTY INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:CUDA>:/include/CUDA>" "$<$<COMPILE_LANGUAGE:Fortran>:/include/Fortran>")
|
||||
set_property(TARGET foo5 PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<$<COMPILE_LANGUAGE:CUDA>:/include/CUDA>" "$<$<COMPILE_LANGUAGE:Fortran>:/include/Fortran>")
|
||||
set_property(TARGET foo5 PROPERTY CUSTOM ";;")
|
||||
|
||||
# Evaluate a genex that looks up INCLUDE_DIRECTORIES on multiple targets.
|
||||
file(GENERATE OUTPUT out.txt CONTENT "$<TARGET_PROPERTY:foo4,INCLUDE_DIRECTORIES>")
|
||||
file(GENERATE OUTPUT out.txt CONTENT "INCLUDES1:$<TARGET_PROPERTY:foo4,INCLUDE_DIRECTORIES>\nINCLUDES2:>$<TARGET_PROPERTY:foo5,INTERFACE_INCLUDE_DIRECTORIES><\nINCLUDES3:>$<TARGET_PROPERTY:foo5,INCLUDE_DIRECTORIES><\nCUSTOM:>$<TARGET_PROPERTY:foo5,CUSTOM><\n")
|
||||
|
||||
Reference in New Issue
Block a user