Tests: Add COMPATIBLE_INTERFACE_ cases for library targets

The transitive (or not) behavior of these properties depends on the
target type.  Add cases for STATIC, OBJECT, and INTERFACE libraries.
This commit is contained in:
Brad King
2024-04-11 10:04:24 -04:00
parent f4249cf86f
commit 5ebcf96170
2 changed files with 167 additions and 4 deletions

View File

@@ -13,12 +13,14 @@ set_property(TARGET iface1 APPEND PROPERTY
BOOL_PROP2
BOOL_PROP3
BOOL_PROP4
BOOL_PROP5
)
set_property(TARGET iface1 APPEND PROPERTY
COMPATIBLE_INTERFACE_STRING
STRING_PROP1
STRING_PROP2
STRING_PROP3
STRING_PROP4
)
set_property(TARGET iface1 APPEND PROPERTY
COMPATIBLE_INTERFACE_NUMBER_MIN
@@ -27,33 +29,39 @@ set_property(TARGET iface1 APPEND PROPERTY
NUMBER_MIN_PROP3
NUMBER_MIN_PROP4
NUMBER_MIN_PROP5
NUMBER_MIN_PROP6
)
set_property(TARGET iface1 APPEND PROPERTY
COMPATIBLE_INTERFACE_NUMBER_MAX
NUMBER_MAX_PROP1
NUMBER_MAX_PROP2
NUMBER_MAX_PROP3
NUMBER_MAX_PROP4
)
set(CMAKE_DEBUG_TARGET_PROPERTIES
BOOL_PROP1 BOOL_PROP2 BOOL_PROP3 BOOL_PROP4
STRING_PROP1 STRING_PROP2 STRING_PROP3
NUMBER_MIN_PROP1 NUMBER_MIN_PROP2 NUMBER_MIN_PROP3 NUMBER_MIN_PROP4 NUMBER_MIN_PROP5
NUMBER_MAX_PROP1 NUMBER_MAX_PROP2 NUMBER_MAX_PROP3
BOOL_PROP1 BOOL_PROP2 BOOL_PROP3 BOOL_PROP4 BOOL_PROP5
STRING_PROP1 STRING_PROP2 STRING_PROP3 STRING_PROP4
NUMBER_MIN_PROP1 NUMBER_MIN_PROP2 NUMBER_MIN_PROP3 NUMBER_MIN_PROP4 NUMBER_MIN_PROP5 NUMBER_MIN_PROP6
NUMBER_MAX_PROP1 NUMBER_MAX_PROP2 NUMBER_MAX_PROP3 NUMBER_MAX_PROP4
)
set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP1 ON)
set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP2 ON)
set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP5 ON)
set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP1 prop1)
set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP2 prop2)
set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP4 prop4)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP1 100)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP2 200)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP3 0x10)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP4 0x10)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP5 5)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MIN_PROP6 6)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MAX_PROP1 100)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MAX_PROP2 200)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MAX_PROP3 3)
set_property(TARGET iface1 PROPERTY INTERFACE_NUMBER_MAX_PROP4 4)
add_executable(CompatibleInterface main.cpp)
target_link_libraries(CompatibleInterface iface1)
@@ -94,6 +102,44 @@ target_compile_definitions(CompatibleInterface
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MAX_PROP1>,100>:NUMBER_MAX_PROP1=100>
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MAX_PROP2>,250>:NUMBER_MAX_PROP2=250>
$<$<STREQUAL:$<TARGET_PROPERTY:NUMBER_MAX_PROP3>,3>:NUMBER_MAX_PROP3=3>
# Static libraries compute COMPATIBLE_INTERFACE_ properties transitively.
$<$<BOOL:$<TARGET_PROPERTY:static1,BOOL_PROP1>>:STATIC1_BOOL_PROP1>
$<$<STREQUAL:$<TARGET_PROPERTY:static1,STRING_PROP1>,prop1>:STATIC1_STRING_PROP1>
$<$<EQUAL:$<TARGET_PROPERTY:static1,NUMBER_MAX_PROP3>,3>:STATIC1_NUMBER_MAX_PROP3>
$<$<EQUAL:$<TARGET_PROPERTY:static1,NUMBER_MIN_PROP5>,5>:STATIC1_NUMBER_MIN_PROP5>
# Object libraries do not compute COMPATIBLE_INTERFACE_ properties transitively.
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:object1,BOOL_PROP1>,>>:OBJECT1_BOOL_PROP1>
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:object1,STRING_PROP1>,>>:OBJECT1_STRING_PROP1>
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:object1,NUMBER_MAX_PROP3>,>>:OBJECT1_NUMBER_MAX_PROP3>
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:object1,NUMBER_MIN_PROP5>,>>:OBJECT1_NUMBER_MIN_PROP5>
# Interface libraries do not compute COMPATIBLE_INTERFACE_ properties transitively.
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:iface3,BOOL_PROP1>,>>:IFACE3_BOOL_PROP1>
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:iface3,STRING_PROP1>,>>:IFACE3_STRING_PROP1>
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:iface3,NUMBER_MAX_PROP3>,>>:IFACE3_NUMBER_MAX_PROP3>
$<$<NOT:$<STREQUAL:$<TARGET_PROPERTY:iface3,NUMBER_MIN_PROP5>,>>:IFACE3_NUMBER_MIN_PROP5>
# Static libraries compute COMPATIBLE_INTERFACE_ properties transitively.
$<$<BOOL:$<TARGET_PROPERTY:static1,BOOL_PROP5>>:STATIC1_BOOL_PROP5>
$<$<STREQUAL:$<TARGET_PROPERTY:static1,STRING_PROP4>,prop4>:STATIC1_STRING_PROP4>
$<$<EQUAL:$<TARGET_PROPERTY:static1,NUMBER_MIN_PROP6>,6>:STATIC1_NUMBER_MIN_PROP6>
$<$<EQUAL:$<TARGET_PROPERTY:static1,NUMBER_MAX_PROP4>,4>:STATIC1_NUMBER_MAX_PROP4>
# Object libraries do not compute COMPATIBLE_INTERFACE_ properties transitively,
# but can have properties set on them.
$<$<BOOL:$<TARGET_PROPERTY:object1,BOOL_PROP5>>:OBJECT1_BOOL_PROP5>
$<$<STREQUAL:$<TARGET_PROPERTY:object1,STRING_PROP4>,prop4>:OBJECT1_STRING_PROP4>
$<$<EQUAL:$<TARGET_PROPERTY:object1,NUMBER_MIN_PROP6>,7>:OBJECT1_NUMBER_MIN_PROP6>
$<$<EQUAL:$<TARGET_PROPERTY:object1,NUMBER_MAX_PROP4>,1>:OBJECT1_NUMBER_MAX_PROP4>
# Interface libraries do not compute COMPATIBLE_INTERFACE_ properties transitively,
# but can have properties set on them.
$<$<BOOL:$<TARGET_PROPERTY:iface3,BOOL_PROP5>>:IFACE3_BOOL_PROP5>
$<$<STREQUAL:$<TARGET_PROPERTY:iface3,STRING_PROP4>,prop4>:IFACE3_STRING_PROP4>
$<$<EQUAL:$<TARGET_PROPERTY:iface3,NUMBER_MIN_PROP6>,7>:IFACE3_NUMBER_MIN_PROP6>
$<$<EQUAL:$<TARGET_PROPERTY:iface3,NUMBER_MAX_PROP4>,1>:IFACE3_NUMBER_MAX_PROP4>
)
@@ -134,3 +180,24 @@ set_property(TARGET CompatibleInterface APPEND PROPERTY
COMPATIBLE_INTERFACE_BOOL
NON_RELEVANT_PROP
)
add_library(static1 STATIC foo.cpp)
set_property(TARGET static1 PROPERTY BOOL_PROP5 ON)
set_property(TARGET static1 PROPERTY STRING_PROP4 prop4)
set_property(TARGET static1 PROPERTY NUMBER_MIN_PROP6 7)
set_property(TARGET static1 PROPERTY NUMBER_MAX_PROP4 1)
target_link_libraries(static1 PUBLIC iface1)
add_library(object1 OBJECT foo.cpp)
set_property(TARGET object1 PROPERTY BOOL_PROP5 ON)
set_property(TARGET object1 PROPERTY STRING_PROP4 prop4)
set_property(TARGET object1 PROPERTY NUMBER_MIN_PROP6 7)
set_property(TARGET object1 PROPERTY NUMBER_MAX_PROP4 1)
target_link_libraries(object1 PUBLIC iface1)
add_library(iface3 INTERFACE)
set_property(TARGET iface3 PROPERTY BOOL_PROP5 ON)
set_property(TARGET iface3 PROPERTY STRING_PROP4 prop4)
set_property(TARGET iface3 PROPERTY NUMBER_MIN_PROP6 7)
set_property(TARGET iface3 PROPERTY NUMBER_MAX_PROP4 1)
target_link_libraries(iface3 INTERFACE iface1)

View File

@@ -23,6 +23,102 @@
# error Expected STRING_PROP3
#endif
#ifndef STATIC1_BOOL_PROP1
# error Expected STATIC1_BOOL_PROP1
#endif
#ifndef STATIC1_STRING_PROP1
# error Expected STATIC1_STRING_PROP1
#endif
#ifndef STATIC1_NUMBER_MAX_PROP3
# error Expected STATIC1_NUMBER_MAX_PROP3
#endif
#ifndef STATIC1_NUMBER_MIN_PROP5
# error Expected STATIC1_NUMBER_MIN_PROP5
#endif
#ifdef OBJECT1_BOOL_PROP1
# error Unexpected OBJECT1_BOOL_PROP1
#endif
#ifdef OBJECT1_STRING_PROP1
# error Unexpected OBJECT1_STRING_PROP1
#endif
#ifdef OBJECT1_NUMBER_MAX_PROP3
# error Unexpected OBJECT1_NUMBER_MAX_PROP3
#endif
#ifdef OBJECT1_NUMBER_MIN_PROP5
# error Unexpected OBJECT1_NUMBER_MIN_PROP5
#endif
#ifdef IFACE3_BOOL_PROP1
# error Unexpected IFACE3_BOOL_PROP1
#endif
#ifdef IFACE3_STRING_PROP1
# error Unexpected IFACE3_STRING_PROP1
#endif
#ifdef IFACE3_NUMBER_MAX_PROP3
# error Unexpected IFACE3_NUMBER_MAX_PROP3
#endif
#ifdef IFACE3_NUMBER_MIN_PROP5
# error Unexpected IFACE3_NUMBER_MIN_PROP5
#endif
#ifndef STATIC1_BOOL_PROP5
# error Expected STATIC1_BOOL_PROP5
#endif
#ifndef STATIC1_STRING_PROP4
# error Expected STATIC1_STRING_PROP4
#endif
#ifndef STATIC1_NUMBER_MIN_PROP6
# error Expected STATIC1_NUMBER_MIN_PROP6
#endif
#ifndef STATIC1_NUMBER_MAX_PROP4
# error Expected STATIC1_NUMBER_MAX_PROP4
#endif
#ifndef OBJECT1_BOOL_PROP5
# error Expected OBJECT1_BOOL_PROP5
#endif
#ifndef OBJECT1_STRING_PROP4
# error Expected OBJECT1_STRING_PROP4
#endif
#ifndef OBJECT1_NUMBER_MIN_PROP6
# error Expected OBJECT1_NUMBER_MIN_PROP6
#endif
#ifndef OBJECT1_NUMBER_MAX_PROP4
# error Expected OBJECT1_NUMBER_MAX_PROP4
#endif
#ifndef IFACE3_BOOL_PROP5
# error Expected IFACE3_BOOL_PROP5
#endif
#ifndef IFACE3_STRING_PROP4
# error Expected IFACE3_STRING_PROP4
#endif
#ifndef IFACE3_NUMBER_MIN_PROP6
# error Expected IFACE3_NUMBER_MIN_PROP6
#endif
#ifndef IFACE3_NUMBER_MAX_PROP4
# error Expected IFACE3_NUMBER_MAX_PROP4
#endif
template <bool test>
struct CMakeStaticAssert;