Genex: Fix $<CONFIG> with IMPORTED targets and multiple locations.
The old code checked only that there was a LOCATION for the specified config, but did not check whether the config actually mapped. Task-number: 14292
This commit is contained in:
parent
b94e726a83
commit
10a069b504
|
@ -564,10 +564,26 @@ static const struct ConfigurationTestNode : public cmGeneratorExpressionNode
|
||||||
const char* loc = 0;
|
const char* loc = 0;
|
||||||
const char* imp = 0;
|
const char* imp = 0;
|
||||||
std::string suffix;
|
std::string suffix;
|
||||||
return context->CurrentTarget->GetMappedConfig(context->Config,
|
if (context->CurrentTarget->GetMappedConfig(context->Config,
|
||||||
&loc,
|
&loc,
|
||||||
&imp,
|
&imp,
|
||||||
suffix) ? "1" : "0";
|
suffix))
|
||||||
|
{
|
||||||
|
// This imported target has an appropriate location
|
||||||
|
// for this (possibly mapped) config.
|
||||||
|
// Check if there is a proper config mapping for the tested config.
|
||||||
|
std::vector<std::string> mappedConfigs;
|
||||||
|
std::string mapProp = "MAP_IMPORTED_CONFIG_";
|
||||||
|
mapProp += context->Config;
|
||||||
|
if(const char* mapValue =
|
||||||
|
context->CurrentTarget->GetProperty(mapProp.c_str()))
|
||||||
|
{
|
||||||
|
cmSystemTools::ExpandListArgument(cmSystemTools::UpperCase(mapValue),
|
||||||
|
mappedConfigs);
|
||||||
|
return std::find(mappedConfigs.begin(), mappedConfigs.end(),
|
||||||
|
context->Config) != mappedConfigs.end() ? "1" : "0";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return "0";
|
return "0";
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,6 +138,31 @@ add_custom_target(check-part2 ALL
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_library(imported1 SHARED IMPORTED)
|
||||||
|
set_property(TARGET imported1 PROPERTY IMPORTED_LOCATION_RELEASE release_loc)
|
||||||
|
set_property(TARGET imported1 PROPERTY IMPORTED_LOCATION_DEBUG debug_loc)
|
||||||
|
set_property(TARGET imported1 PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
|
||||||
|
set_property(TARGET imported1 PROPERTY INTERFACE_INCLUDE_DIRECTORIES /imported1/include)
|
||||||
|
|
||||||
|
add_library(imported2 SHARED IMPORTED)
|
||||||
|
set_property(TARGET imported2 PROPERTY IMPORTED_LOCATION_RELEASE release_loc)
|
||||||
|
set_property(TARGET imported2 PROPERTY IMPORTED_LOCATION_DEBUG debug_loc)
|
||||||
|
set_property(TARGET imported2 PROPERTY IMPORTED_CONFIGURATIONS RELEASE DEBUG)
|
||||||
|
set_property(TARGET imported2 PROPERTY INTERFACE_INCLUDE_DIRECTORIES /imported2/include)
|
||||||
|
|
||||||
|
add_library(imported3 SHARED IMPORTED)
|
||||||
|
set_property(TARGET imported3 PROPERTY IMPORTED_LOCATION_RELEASE release_loc)
|
||||||
|
set_property(TARGET imported3 PROPERTY IMPORTED_LOCATION_DEBUG debug_loc)
|
||||||
|
# Both Debug and Release should not be true when this is evaluated.
|
||||||
|
set_property(TARGET imported3 APPEND PROPERTY
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES $<$<CONFIG:DEBUG>:$<TARGET_PROPERTY:imported1,INTERFACE_INCLUDE_DIRECTORIES>>)
|
||||||
|
set_property(TARGET imported3 APPEND PROPERTY
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES $<$<CONFIG:RELEASE>:$<TARGET_PROPERTY:imported2,INTERFACE_INCLUDE_DIRECTORIES>>)
|
||||||
|
|
||||||
|
add_library(imported4 SHARED IMPORTED)
|
||||||
|
set_property(TARGET imported4 APPEND PROPERTY
|
||||||
|
INCLUDE_DIRECTORIES $<TARGET_PROPERTY:imported3,INTERFACE_INCLUDE_DIRECTORIES>)
|
||||||
|
|
||||||
add_custom_target(check-part3 ALL
|
add_custom_target(check-part3 ALL
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-Dtest_version_greater_1=$<VERSION_GREATER:1.0,1.1.1>
|
-Dtest_version_greater_1=$<VERSION_GREATER:1.0,1.1.1>
|
||||||
|
@ -146,6 +171,11 @@ add_custom_target(check-part3 ALL
|
||||||
-Dtest_version_less_2=$<VERSION_LESS:1.0,1.1.1>
|
-Dtest_version_less_2=$<VERSION_LESS:1.0,1.1.1>
|
||||||
-Dtest_version_equal_1=$<VERSION_EQUAL:1.0.1,1.1>
|
-Dtest_version_equal_1=$<VERSION_EQUAL:1.0.1,1.1>
|
||||||
-Dtest_version_equal_2=$<VERSION_EQUAL:1.1,1.1>
|
-Dtest_version_equal_2=$<VERSION_EQUAL:1.1,1.1>
|
||||||
|
-Dconfig=$<CONFIGURATION>
|
||||||
|
-Dtest_imported_debug=$<TARGET_PROPERTY:imported4,INCLUDE_DIRECTORIES>
|
||||||
|
-Dtest_imported_release=$<TARGET_PROPERTY:imported4,INCLUDE_DIRECTORIES>
|
||||||
|
-Dtest_imported_relwithdebinfo=$<TARGET_PROPERTY:imported4,INCLUDE_DIRECTORIES>
|
||||||
|
-Dtest_imported_minsizerel=$<TARGET_PROPERTY:imported4,INCLUDE_DIRECTORIES>
|
||||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/check-part3.cmake
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/check-part3.cmake
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 3)"
|
COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 3)"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
|
|
|
@ -7,3 +7,16 @@ check(test_version_less_1 "0")
|
||||||
check(test_version_less_2 "1")
|
check(test_version_less_2 "1")
|
||||||
check(test_version_equal_1 "0")
|
check(test_version_equal_1 "0")
|
||||||
check(test_version_equal_2 "1")
|
check(test_version_equal_2 "1")
|
||||||
|
|
||||||
|
foreach(c debug release relwithdebinfo minsizerel)
|
||||||
|
if(config AND NOT config STREQUAL NoConfig)
|
||||||
|
if(NOT "${test_imported_${c}}" MATCHES "^;/imported2/include$"
|
||||||
|
AND NOT "${test_imported_${c}}" MATCHES "^/imported1/include;$")
|
||||||
|
message(SEND_ERROR "test_imported_${c} is not correct: ${test_imported_${c}}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(NOT "${test_imported_${c}}" MATCHES "^;$")
|
||||||
|
message(SEND_ERROR "test_imported_${c} is not an empty list: ${test_imported_${c}}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
|
Loading…
Reference in New Issue