From 5ebcf961702e723b69e777f4286bca357d2b5fad Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 11 Apr 2024 10:04:24 -0400 Subject: 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. --- Tests/CompatibleInterface/CMakeLists.txt | 75 +++++++++++++++++++++++-- Tests/CompatibleInterface/main.cpp | 96 ++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+), 4 deletions(-) diff --git a/Tests/CompatibleInterface/CMakeLists.txt b/Tests/CompatibleInterface/CMakeLists.txt index 0d5423a..da15ae9 100644 --- a/Tests/CompatibleInterface/CMakeLists.txt +++ b/Tests/CompatibleInterface/CMakeLists.txt @@ -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 $<$,100>:NUMBER_MAX_PROP1=100> $<$,250>:NUMBER_MAX_PROP2=250> $<$,3>:NUMBER_MAX_PROP3=3> + + # Static libraries compute COMPATIBLE_INTERFACE_ properties transitively. + $<$>:STATIC1_BOOL_PROP1> + $<$,prop1>:STATIC1_STRING_PROP1> + $<$,3>:STATIC1_NUMBER_MAX_PROP3> + $<$,5>:STATIC1_NUMBER_MIN_PROP5> + + # Object libraries do not compute COMPATIBLE_INTERFACE_ properties transitively. + $<$,>>:OBJECT1_BOOL_PROP1> + $<$,>>:OBJECT1_STRING_PROP1> + $<$,>>:OBJECT1_NUMBER_MAX_PROP3> + $<$,>>:OBJECT1_NUMBER_MIN_PROP5> + + # Interface libraries do not compute COMPATIBLE_INTERFACE_ properties transitively. + $<$,>>:IFACE3_BOOL_PROP1> + $<$,>>:IFACE3_STRING_PROP1> + $<$,>>:IFACE3_NUMBER_MAX_PROP3> + $<$,>>:IFACE3_NUMBER_MIN_PROP5> + + # Static libraries compute COMPATIBLE_INTERFACE_ properties transitively. + $<$>:STATIC1_BOOL_PROP5> + $<$,prop4>:STATIC1_STRING_PROP4> + $<$,6>:STATIC1_NUMBER_MIN_PROP6> + $<$,4>:STATIC1_NUMBER_MAX_PROP4> + + # Object libraries do not compute COMPATIBLE_INTERFACE_ properties transitively, + # but can have properties set on them. + $<$>:OBJECT1_BOOL_PROP5> + $<$,prop4>:OBJECT1_STRING_PROP4> + $<$,7>:OBJECT1_NUMBER_MIN_PROP6> + $<$,1>:OBJECT1_NUMBER_MAX_PROP4> + + # Interface libraries do not compute COMPATIBLE_INTERFACE_ properties transitively, + # but can have properties set on them. + $<$>:IFACE3_BOOL_PROP5> + $<$,prop4>:IFACE3_STRING_PROP4> + $<$,7>:IFACE3_NUMBER_MIN_PROP6> + $<$,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) diff --git a/Tests/CompatibleInterface/main.cpp b/Tests/CompatibleInterface/main.cpp index b540888..2cd3c3f 100644 --- a/Tests/CompatibleInterface/main.cpp +++ b/Tests/CompatibleInterface/main.cpp @@ -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 struct CMakeStaticAssert; -- cgit v0.12