It should be possible for example to do this: "$<AND:${FOO},$<BOOL:${TGT}>,$<BOOL:$<TARGET_PROPERTY:${TGT},PROP>" such that it works simliarly to the C code: if (foo && tgt && tgt->prop()) { } The example of generator expression code is a little bit contrived as it could be written other ways with the same functionality. Nevertheless, as these cases already work and are intentional, test for them.
81 lines
2.9 KiB
CMake
81 lines
2.9 KiB
CMake
cmake_minimum_required (VERSION 2.8.8)
|
|
project(GeneratorExpression NONE)
|
|
|
|
add_custom_target(check ALL
|
|
COMMAND ${CMAKE_COMMAND}
|
|
-Dtest_0=$<0:nothing>
|
|
-Dtest_0_with_comma=$<0:-Wl,--no-undefined>
|
|
-Dtest_1=$<1:content>
|
|
-Dtest_1_with_comma=$<1:-Wl,--no-undefined>
|
|
-Dconfig=$<CONFIGURATION>
|
|
-Dtest_and_0=$<AND:0>
|
|
-Dtest_and_0_0=$<AND:0,0>
|
|
-Dtest_and_0_1=$<AND:0,1>
|
|
-Dtest_and_1=$<AND:1>
|
|
-Dtest_and_1_0=$<AND:1,0>
|
|
-Dtest_and_1_1=$<AND:1,1>
|
|
# Ordinarily, the 'invalidcontent' would cause an error, but
|
|
# the '0' makes the AND abort early.
|
|
-Dtest_and_0_invalidcontent=$<AND:0,invalidcontent>
|
|
-Dtest_config_0=$<CONFIG:$<CONFIGURATION>x>
|
|
-Dtest_config_1=$<CONFIG:$<CONFIGURATION>>
|
|
-Dtest_not_0=$<NOT:0>
|
|
-Dtest_not_1=$<NOT:1>
|
|
-Dtest_or_0=$<OR:0>
|
|
-Dtest_or_0_0=$<OR:0,0>
|
|
-Dtest_or_0_1=$<OR:0,1>
|
|
-Dtest_or_1=$<OR:1>
|
|
-Dtest_or_1_0=$<OR:1,0>
|
|
-Dtest_or_1_1=$<OR:1,1>
|
|
-Dtest_or_1_invalidcontent=$<OR:1,invalidcontent>
|
|
-Dtest_bool_notfound=$<BOOL:NOTFOUND>
|
|
-Dtest_bool_foo_notfound=$<BOOL:Foo-NOTFOUND>
|
|
-Dtest_bool_true=$<BOOL:True>
|
|
-Dtest_bool_false=$<BOOL:False>
|
|
-Dtest_bool_on=$<BOOL:On>
|
|
-Dtest_bool_off=$<BOOL:Off>
|
|
-Dtest_bool_no=$<BOOL:No>
|
|
-Dtest_bool_n=$<BOOL:N>
|
|
-Dtest_bool_empty=$<BOOL:>
|
|
-Dtest_strequal_yes_yes=$<STREQUAL:Yes,Yes>
|
|
-Dtest_strequal_yes_yes_cs=$<STREQUAL:Yes,yes>
|
|
-Dtest_strequal_yes_no=$<STREQUAL:Yes,No>
|
|
-Dtest_strequal_no_yes=$<STREQUAL:No,Yes>
|
|
-Dtest_strequal_angle_r=$<STREQUAL:$<ANGLE-R>,$<ANGLE-R>>
|
|
-Dtest_strequal_comma=$<STREQUAL:$<COMMA>,$<COMMA>>
|
|
-Dtest_strequal_angle_r_comma=$<STREQUAL:$<ANGLE-R>,$<COMMA>>
|
|
-Dtest_strequal_both_empty=$<STREQUAL:,>
|
|
-Dtest_strequal_one_empty=$<STREQUAL:something,>
|
|
-Dtest_angle_r=$<ANGLE-R>
|
|
-Dtest_comma=$<COMMA>
|
|
-Dtest_colons_1=$<1::>
|
|
-Dtest_colons_2=$<1:::>
|
|
-Dtest_colons_3=$<1:Qt5::Core>
|
|
-Dtest_colons_4=$<1:C:\\CMake>
|
|
-Dtest_colons_5=$<1:C:/CMake>
|
|
-Dtest_incomplete_1=$<
|
|
-Dtest_incomplete_2=$<something
|
|
-Dtest_incomplete_3=$<something:
|
|
-Dtest_incomplete_4=$<something:,
|
|
-Dtest_incomplete_5=$something:,>
|
|
-Dtest_incomplete_6=<something:,>
|
|
-Dtest_incomplete_7=$<something::
|
|
-Dtest_incomplete_8=$<something:,
|
|
-Dtest_incomplete_9=$<something:,,
|
|
-Dtest_incomplete_10=$<something:,:
|
|
-Dtest_incomplete_11=$<something,,
|
|
-Dtest_incomplete_12=$<,,
|
|
-Dtest_incomplete_13=$<some$<1:special>thing
|
|
-Dtest_incomplete_14=$<$<ANGLE-R>
|
|
-Dtest_incomplete_15=$<some$<thing
|
|
-Dtest_incomplete_16=$<BOOL:something
|
|
-Dtest_incomplete_17=$<1:some$thing>
|
|
-Dtest_incomplete_18=$<1:some,thing
|
|
-Dtest_incomplete_19=$<1:some,thing$<ANGLE-R>
|
|
-Dtest_incomplete_20=$<CONFIGURATION$<ANGLE-R>
|
|
-Dtest_incomplete_21=$<BOOL:something$<ANGLE-R>
|
|
-P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake
|
|
COMMAND ${CMAKE_COMMAND} -E echo "check done"
|
|
VERBATIM
|
|
)
|