Imported Upstream version 2.8.11.2
[platform/upstream/cmake.git] / Tests / CompatibleInterface / CMakeLists.txt
1
2 cmake_minimum_required(VERSION 2.8)
3
4 project(CompatibleInterface)
5
6 include(GenerateExportHeader)
7 set(CMAKE_INCLUDE_CURRENT_DIR ON)
8
9 add_library(iface1 empty.cpp)
10 set_property(TARGET iface1 APPEND PROPERTY
11   COMPATIBLE_INTERFACE_BOOL
12     BOOL_PROP1
13     BOOL_PROP2
14     BOOL_PROP3
15     BOOL_PROP4
16 )
17 set_property(TARGET iface1 APPEND PROPERTY
18   COMPATIBLE_INTERFACE_STRING
19     STRING_PROP1
20     STRING_PROP2
21     STRING_PROP3
22 )
23
24 set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP1 ON)
25 set_property(TARGET iface1 PROPERTY INTERFACE_BOOL_PROP2 ON)
26 set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP1 prop1)
27 set_property(TARGET iface1 PROPERTY INTERFACE_STRING_PROP2 prop2)
28
29 add_executable(CompatibleInterface main.cpp)
30 target_link_libraries(CompatibleInterface iface1)
31
32 set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP2 ON)
33 set_property(TARGET CompatibleInterface PROPERTY BOOL_PROP3 ON)
34 set_property(TARGET CompatibleInterface PROPERTY STRING_PROP2 prop2)
35 set_property(TARGET CompatibleInterface PROPERTY STRING_PROP3 prop3)
36
37 target_compile_definitions(CompatibleInterface
38   PRIVATE
39     $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP1>>:BOOL_PROP1>
40     $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP2>>:BOOL_PROP2>
41     $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP3>>:BOOL_PROP3>
42     $<$<STREQUAL:$<TARGET_PROPERTY:STRING_PROP1>,prop1>:STRING_PROP1>
43     $<$<STREQUAL:$<TARGET_PROPERTY:STRING_PROP2>,prop2>:STRING_PROP2>
44     $<$<STREQUAL:$<TARGET_PROPERTY:STRING_PROP3>,prop3>:STRING_PROP3>
45 )
46
47
48 add_library(iface2 SHARED iface2.cpp)
49 generate_export_header(iface2)
50
51 set_property(TARGET iface2 APPEND PROPERTY
52   COMPATIBLE_INTERFACE_STRING
53     Iface2_PROP
54 )
55
56 # For the LINK_LIBRARIES and related properties, we should not evaluate
57 # properties defined only in the interface - they should be implicitly zero
58 set_property(TARGET iface2
59   APPEND PROPERTY
60     LINK_INTERFACE_LIBRARIES $<$<BOOL:$<TARGET_PROPERTY:BOOL_PROP4>>:nonexistant>
61 )
62 target_link_libraries(CompatibleInterface iface2
63       $<$<BOOL:$<TARGET_PROPERTY:Iface2_PROP>>:nonexistant>
64 )
65 # Test that this does not segfault:
66 target_compile_definitions(CompatibleInterface
67   PRIVATE
68     $<$<BOOL:$<TARGET_PROPERTY:Iface2_PROP>>:SOME_DEFINE>
69 )
70
71 # The COMPATIBLE_INTERFACE_* properties are only read from dependencies
72 # in the interface. Populating it on the CompatibleInterface target does
73 # not have any affect on the interpretation of the INTERFACE variants
74 # in dependencies.
75 set_property(TARGET iface1 PROPERTY
76   INTERFACE_NON_RELEVANT_PROP ON
77 )
78 set_property(TARGET iface2 PROPERTY
79   INTERFACE_NON_RELEVANT_PROP ON
80 )
81 set_property(TARGET CompatibleInterface APPEND PROPERTY
82   COMPATIBLE_INTERFACE_BOOL
83     NON_RELEVANT_PROP
84 )