| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- # Import targets from the exported build tree.
- include(${Import_BINARY_DIR}/../Export/ExportInterfaceBuildTree.cmake)
- # Import targets from the exported install tree.
- include(${CMAKE_INSTALL_PREFIX}/lib/exp/expInterface.cmake)
- add_library(define_iface INTERFACE)
- set_property(TARGET define_iface PROPERTY
- INTERFACE_COMPILE_DEFINITIONS DEFINE_IFACE_DEFINE)
- add_executable(headeronlytest_bld headeronlytest.cpp)
- target_link_libraries(headeronlytest_bld bld::headeronly)
- set_property(TARGET bld::sharediface APPEND PROPERTY INTERFACE_LINK_LIBRARIES define_iface)
- add_executable(interfacetest_bld interfacetest.cpp)
- target_link_libraries(interfacetest_bld bld::sharediface)
- include(CheckCSourceCompiles)
- include(CheckCXXSourceCompiles)
- macro(do_try_compile prefix)
- set(CMAKE_REQUIRED_LIBRARIES ${prefix}::headeronly)
- check_cxx_source_compiles(
- "
- #include \"headeronly.h\"
- #ifndef HEADERONLY_DEFINE
- #error Expected HEADERONLY_DEFINE
- #endif
- int main(int,char**)
- {
- HeaderOnly ho;
- return ho.foo();
- }
- " ${prefix}IFACE_TRY_COMPILE)
- if(NOT ${prefix}IFACE_TRY_COMPILE)
- message(SEND_ERROR "${prefix} try_compile with IMPORTED INTERFACE target failed!\n\n${OUTPUT}")
- endif()
- if (";${CMAKE_C_COMPILE_FEATURES};" MATCHES ";c_restrict;")
- set(CMAKE_REQUIRED_LIBRARIES ${prefix}::use_c_restrict)
- check_c_source_compiles(
- "
- int foo(int * restrict a, int * restrict b)
- {
- (void)a;
- (void)b;
- return 0;
- }
- int main()
- {
- return 0;
- }
- " ${prefix}IMPORTED_IFACE_C_RESTRICT)
- if(NOT ${prefix}IMPORTED_IFACE_C_RESTRICT)
- message(SEND_ERROR "${prefix} try_compile with IMPORTED INTERFACE target failed!\n\n${OUTPUT}")
- endif()
- endif()
- if (";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ";cxx_auto_type;")
- set(CMAKE_REQUIRED_LIBRARIES ${prefix}::use_auto_type)
- check_cxx_source_compiles(
- "
- int main(int,char**)
- {
- auto value = 0;
- return value;
- }
- " ${prefix}IMPORTED_IFACE_AUTO_TYPE)
- if(NOT ${prefix}IMPORTED_IFACE_AUTO_TYPE)
- message(SEND_ERROR "${prefix} try_compile with IMPORTED INTERFACE target failed!\n\n${OUTPUT}")
- endif()
- endif()
- endmacro()
- do_try_compile(bld)
- add_executable(source_target_test_bld source_target_test.cpp)
- target_link_libraries(source_target_test_bld bld::source_target)
- target_compile_definitions(source_target_test_bld PRIVATE USE_FROM_BUILD_DIR)
- add_executable(source_target_test_exp source_target_test.cpp)
- target_link_libraries(source_target_test_exp exp::source_target)
- target_compile_definitions(source_target_test_exp PRIVATE USE_FROM_INSTALL_DIR)
- add_executable(headeronlytest_exp headeronlytest.cpp)
- target_link_libraries(headeronlytest_exp exp::headeronly)
- set_property(TARGET exp::sharediface APPEND PROPERTY INTERFACE_LINK_LIBRARIES define_iface)
- add_executable(interfacetest_exp interfacetest.cpp)
- target_link_libraries(interfacetest_exp exp::sharediface)
- if(NOT CMAKE_OSX_ARCHITECTURES MATCHES "[;$]" OR CMAKE_GENERATOR STREQUAL "Xcode")
- add_executable(pch_iface_test_bld pch_iface_test.cpp)
- target_link_libraries(pch_iface_test_bld bld::pch_iface)
- add_executable(pch_iface_test_exp pch_iface_test.cpp)
- target_link_libraries(pch_iface_test_exp exp::pch_iface)
- if(CMAKE_CXX_COMPILE_OPTIONS_USE_PCH)
- target_compile_definitions(pch_iface_test_bld PRIVATE EXPECT_PCH)
- target_compile_definitions(pch_iface_test_exp PRIVATE EXPECT_PCH)
- endif()
- endif()
- do_try_compile(exp)
- foreach(ns exp bld)
- get_property(defs TARGET ${ns}::cmakeonly PROPERTY INTERFACE_COMPILE_DEFINITIONS)
- if(NOT defs STREQUAL [[DEF="\"\$\B"]])
- message(SEND_ERROR
- "${ns}::cmakeonly property INTERFACE_COMPILE_DEFINITIONS is:\n"
- " ${defs}\n"
- "not\n"
- " " [[DEF="\"\$\B"]] "\n")
- endif()
- get_property(custom TARGET ${ns}::cmakeonly PROPERTY custom_property)
- if(NOT custom STREQUAL "CustomPropertyValue")
- message(SEND_ERROR
- "${ns}::cmakeonly property custom_property is:\n"
- " ${custom}\n"
- "not\n"
- " CustomPropertyValue\n")
- endif()
- endforeach()
|