GenEx: Test early determination of AND and OR

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.
This commit is contained in:
Stephen Kelly 2012-10-20 14:14:20 +02:00
parent 982905c0d2
commit 4bacff7a4c
6 changed files with 26 additions and 0 deletions

View File

@ -14,6 +14,9 @@ add_custom_target(check ALL
-Dtest_and_1=$<AND:1> -Dtest_and_1=$<AND:1>
-Dtest_and_1_0=$<AND:1,0> -Dtest_and_1_0=$<AND:1,0>
-Dtest_and_1_1=$<AND:1,1> -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_0=$<CONFIG:$<CONFIGURATION>x>
-Dtest_config_1=$<CONFIG:$<CONFIGURATION>> -Dtest_config_1=$<CONFIG:$<CONFIGURATION>>
-Dtest_not_0=$<NOT:0> -Dtest_not_0=$<NOT:0>
@ -24,6 +27,7 @@ add_custom_target(check ALL
-Dtest_or_1=$<OR:1> -Dtest_or_1=$<OR:1>
-Dtest_or_1_0=$<OR:1,0> -Dtest_or_1_0=$<OR:1,0>
-Dtest_or_1_1=$<OR:1,1> -Dtest_or_1_1=$<OR:1,1>
-Dtest_or_1_invalidcontent=$<OR:1,invalidcontent>
-Dtest_bool_notfound=$<BOOL:NOTFOUND> -Dtest_bool_notfound=$<BOOL:NOTFOUND>
-Dtest_bool_foo_notfound=$<BOOL:Foo-NOTFOUND> -Dtest_bool_foo_notfound=$<BOOL:Foo-NOTFOUND>
-Dtest_bool_true=$<BOOL:True> -Dtest_bool_true=$<BOOL:True>

View File

@ -15,6 +15,7 @@ check(test_and_0_1 "0")
check(test_and_1 "1") check(test_and_1 "1")
check(test_and_1_0 "0") check(test_and_1_0 "0")
check(test_and_1_1 "1") check(test_and_1_1 "1")
check(test_and_0_invalidcontent "0")
check(test_config_0 "0") check(test_config_0 "0")
check(test_config_1 "1") check(test_config_1 "1")
check(test_not_0 "1") check(test_not_0 "1")
@ -25,6 +26,7 @@ check(test_or_0_1 "1")
check(test_or_1 "1") check(test_or_1 "1")
check(test_or_1_0 "1") check(test_or_1_0 "1")
check(test_or_1_1 "1") check(test_or_1_1 "1")
check(test_or_1_invalidcontent "1")
check(test_bool_notfound "0") check(test_bool_notfound "0")
check(test_bool_foo_notfound "0") check(test_bool_foo_notfound "0")
check(test_bool_true "1") check(test_bool_true "1")

View File

@ -39,6 +39,15 @@ CMake Error at BadAND.cmake:1 \(add_custom_target\):
\$<AND:nothing> \$<AND:nothing>
Parameters to \$<AND> must resolve to either '0' or '1'.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
CMake Error at BadAND.cmake:1 \(add_custom_target\):
Error evaluating generator expression:
\$<AND:1,nothing>
Parameters to \$<AND> must resolve to either '0' or '1'. Parameters to \$<AND> must resolve to either '0' or '1'.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$ CMakeLists.txt:3 \(include\)$

View File

@ -4,4 +4,5 @@ add_custom_target(check ALL COMMAND check
$<AND:,> $<AND:,>
$<AND:01> $<AND:01>
$<AND:nothing> $<AND:nothing>
$<AND:1,nothing>
VERBATIM) VERBATIM)

View File

@ -39,6 +39,15 @@ CMake Error at BadOR.cmake:1 \(add_custom_target\):
\$<OR:nothing> \$<OR:nothing>
Parameters to \$<OR> must resolve to either '0' or '1'.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
CMake Error at BadOR.cmake:1 \(add_custom_target\):
Error evaluating generator expression:
\$<OR:0,nothing>
Parameters to \$<OR> must resolve to either '0' or '1'. Parameters to \$<OR> must resolve to either '0' or '1'.
Call Stack \(most recent call first\): Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$ CMakeLists.txt:3 \(include\)$

View File

@ -4,4 +4,5 @@ add_custom_target(check ALL COMMAND check
$<OR:,> $<OR:,>
$<OR:01> $<OR:01>
$<OR:nothing> $<OR:nothing>
$<OR:0,nothing>
VERBATIM) VERBATIM)