| # Import targets from the exported build tree. |
| include(${Import_BINARY_DIR}/../Export/ExportBuildTree.cmake) |
| |
| # Import targets from the exported install tree. |
| include(${CMAKE_INSTALL_PREFIX}/lib/exp/exp.cmake) |
| |
| # Import two exports, where the Depends one depends on an exported target from the Required one: |
| include(${CMAKE_INSTALL_PREFIX}/lib/cmake/testLibRequired/testLibRequiredTargets.cmake) |
| include(${CMAKE_INSTALL_PREFIX}/lib/cmake/testLibDepends/testLibDependsTargets.cmake) |
| |
| # Try referencing an executable imported from the install tree. |
| add_custom_command( |
| OUTPUT ${Import_BINARY_DIR}/exp_generated.c |
| COMMAND exp_testExe1 ${Import_BINARY_DIR}/exp_generated.c |
| DEPENDS exp_testExe1 |
| ) |
| add_custom_command( |
| OUTPUT ${Import_BINARY_DIR}/exp_generated3.c |
| COMMAND exp_testExe3 ${Import_BINARY_DIR}/exp_generated3.c |
| DEPENDS exp_testExe3 |
| ) |
| |
| add_executable(imp_testExe1 |
| imp_testExe1.c |
| ${Import_BINARY_DIR}/exp_generated.c |
| ${Import_BINARY_DIR}/exp_generated3.c |
| ) |
| |
| # Try linking to a library imported from the install tree. |
| target_link_libraries(imp_testExe1 |
| exp_testLib2 |
| exp_testLib3 |
| exp_testLib4 |
| exp_testLib5 |
| exp_testLib6 |
| exp_testLibCycleA |
| ) |
| |
| # Try building a plugin to an executable imported from the install tree. |
| add_library(imp_mod1 MODULE imp_mod1.c) |
| target_link_libraries(imp_mod1 exp_testExe2) |
| |
| # Try referencing an executable imported from the build tree. |
| add_custom_command( |
| OUTPUT ${Import_BINARY_DIR}/bld_generated.c |
| COMMAND bld_testExe1 ${Import_BINARY_DIR}/bld_generated.c |
| DEPENDS bld_testExe1 |
| ) |
| add_custom_command( |
| OUTPUT ${Import_BINARY_DIR}/bld_generated3.c |
| COMMAND bld_testExe3 ${Import_BINARY_DIR}/bld_generated3.c |
| DEPENDS bld_testExe3 |
| ) |
| |
| add_executable(imp_testExe1b |
| imp_testExe1.c |
| ${Import_BINARY_DIR}/bld_generated.c |
| ${Import_BINARY_DIR}/bld_generated3.c |
| ) |
| |
| # Try linking to a library imported from the build tree. |
| target_link_libraries(imp_testExe1b |
| bld_testLib2 |
| bld_testLib3 |
| bld_testLib4 |
| bld_testLib5 |
| bld_testLib6 |
| bld_testLibCycleA |
| ) |
| |
| add_custom_target(check_testLib1_genex ALL |
| COMMAND ${CMAKE_COMMAND} -DtestLib1=$<TARGET_FILE:exp_testLib1> |
| -Dprefix=${CMAKE_INSTALL_PREFIX} |
| -P ${CMAKE_CURRENT_SOURCE_DIR}/check_testLib1_genex.cmake |
| ) |
| |
| add_executable(cmp0022OLD_test cmp0022OLD_test_vs6_1.cpp) |
| target_link_libraries(cmp0022OLD_test bld_cmp0022OLD) |
| add_executable(cmp0022NEW_test cmp0022NEW_test_vs6_1.cpp) |
| target_link_libraries(cmp0022NEW_test bld_cmp0022NEW) |
| |
| add_executable(cmp0022OLD_exp_test cmp0022OLD_test_vs6_2.cpp) |
| target_link_libraries(cmp0022OLD_exp_test exp_cmp0022OLD) |
| add_executable(cmp0022NEW_exp_test cmp0022NEW_test_vs6_2.cpp) |
| target_link_libraries(cmp0022NEW_exp_test exp_cmp0022NEW) |
| |
| # Try building a plugin to an executable imported from the build tree. |
| add_library(imp_mod1b MODULE imp_mod1.c) |
| target_link_libraries(imp_mod1b bld_testExe2) |
| |
| # Export/CMakeLists.txt pretends the RelWithDebInfo (as well as Debug) |
| # configuration should link to debug libs. |
| foreach(c DEBUG RELWITHDEBINFO) |
| set_property(TARGET imp_testExe1 PROPERTY COMPILE_DEFINITIONS_${c} EXE_DBG) |
| set_property(TARGET imp_testExe1b PROPERTY COMPILE_DEFINITIONS_${c} EXE_DBG) |
| endforeach() |
| |
| #----------------------------------------------------------------------------- |
| # Create a custom target to generate a header for the libraries below. |
| # Drive the header generation through an indirect chain of imported |
| # target dependencies. |
| |
| # testLib2tmp1.h |
| add_custom_command( |
| OUTPUT testLib2tmp1.h |
| VERBATIM COMMAND |
| ${CMAKE_COMMAND} -E echo "extern int testLib2(void);" > testLib2tmp1.h |
| ) |
| |
| # hdr_testLib2tmp1 needs testLib2tmp1.h |
| add_custom_target(hdr_testLib2tmp1 DEPENDS testLib2tmp1.h) |
| |
| # exp_testExe2 needs hdr_testLib2tmp1 |
| add_dependencies(exp_testExe2 hdr_testLib2tmp1) |
| |
| # testLib2tmp.h needs exp_testExe2 |
| add_custom_command( |
| OUTPUT testLib2tmp.h |
| VERBATIM COMMAND exp_testExe2 |
| COMMAND ${CMAKE_COMMAND} -E copy testLib2tmp1.h testLib2tmp.h |
| ) |
| |
| # hdr_testLib2tmp needs testLib2tmp.h |
| add_custom_target(hdr_testLib2tmp DEPENDS testLib2tmp.h) |
| |
| add_library(dep_testLib2tmp UNKNOWN IMPORTED) |
| set_property(TARGET dep_testLib2tmp PROPERTY |
| IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/testLib2tmp.h) |
| |
| # dep_testLib2tmp needs hdr_testLib2tmp |
| add_dependencies(dep_testLib2tmp hdr_testLib2tmp) |
| |
| # testLib2.h needs dep_testLib2tmp |
| add_custom_command( |
| OUTPUT testLib2.h |
| VERBATIM COMMAND ${CMAKE_COMMAND} -E copy testLib2tmp.h testLib2.h |
| DEPENDS dep_testLib2tmp |
| ) |
| |
| # hdr_testLib2 needs testLib2.h |
| add_custom_target(hdr_testLib2 DEPENDS testLib2.h) |
| |
| add_library(dep_testLib2 UNKNOWN IMPORTED) |
| |
| # dep_testLib2 needs hdr_testLib2 |
| add_dependencies(dep_testLib2 hdr_testLib2) |
| |
| # exp_testLib2 and bld_testLib2 both need dep_testLib2 |
| add_dependencies(bld_testLib2 dep_testLib2) |
| add_dependencies(exp_testLib2 dep_testLib2) |
| |
| #----------------------------------------------------------------------------- |
| # Create a library to be linked by another directory in this project |
| # to test transitive linking to otherwise invisible imported targets. |
| include_directories(${CMAKE_CURRENT_BINARY_DIR}) |
| add_library(imp_lib1 STATIC imp_lib1.c) |
| target_link_libraries(imp_lib1 exp_testLib2) |
| add_library(imp_lib1b STATIC imp_lib1.c) |
| target_link_libraries(imp_lib1b bld_testLib2) |
| |
| #----------------------------------------------------------------------------- |
| # Test that handling imported targets, including transitive dependencies, |
| # works in CheckFunctionExists (...and hopefully all other try_compile() checks |
| include(CheckFunctionExists) |
| unset(HAVE_TESTLIB1_FUNCTION CACHE) |
| set(CMAKE_REQUIRED_LIBRARIES exp_testLib2) |
| check_function_exists(testLib1 HAVE_TESTLIB1_FUNCTION) |
| if (NOT HAVE_TESTLIB1_FUNCTION) |
| message(SEND_ERROR "Using imported target testLib2 in check_function_exists() failed !") |
| endif() |
| |
| #----------------------------------------------------------------------------- |
| # Test that dependent imported targets have usable |
| # INTERFACE_COMPILE_DEFINITIONS and INTERFACE_INCLUDE_DIRECTORIES |
| |
| add_executable(deps_iface deps_iface.c) |
| target_link_libraries(deps_iface testLibDepends) |
| |
| add_executable(deps_shared_iface deps_shared_iface.cpp) |
| target_link_libraries(deps_shared_iface testSharedLibDepends) |
| target_compile_definitions(deps_shared_iface |
| PRIVATE |
| $<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC_PROPERTY_IS_ON> |
| $<$<BOOL:$<TARGET_PROPERTY:CUSTOM_PROP>>:CUSTOM_PROPERTY_IS_ON> |
| $<$<STREQUAL:$<TARGET_PROPERTY:CUSTOM_STRING>,testcontent>:CUSTOM_STRING_IS_MATCH> |
| ) |
| |
| if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") |
| target_compile_definitions(deps_shared_iface |
| PRIVATE |
| "DO_GNU_TESTS" |
| ) |
| endif() |
| |
| if (APPLE OR CMAKE_CXX_COMPILER_ID MATCHES "GNU") |
| include(CheckCXXCompilerFlag) |
| check_cxx_compiler_flag(-fPIE run_pic_test) |
| else() |
| if (CMAKE_CXX_COMPILER_ID MATCHES "PGI" |
| OR CMAKE_CXX_COMPILER_ID MATCHES "PathScale" |
| OR CMAKE_SYSTEM_NAME MATCHES "IRIX64" |
| OR CMAKE_CXX_COMPILER_ID MATCHES "Intel") |
| set(run_pic_test 0) |
| else() |
| set(run_pic_test 1) |
| endif() |
| endif() |
| |
| add_executable(exp_renamed_test renamed_test.cpp) |
| target_link_libraries(exp_renamed_test exp_renamed) |
| |
| add_executable(bld_renamed_test renamed_test.cpp) |
| target_link_libraries(bld_renamed_test bld_renamed) |
| |
| if (run_pic_test) |
| target_compile_definitions(deps_shared_iface PRIVATE CHECK_PIC_WORKS) |
| endif() |
| |
| if(APPLE) |
| add_subdirectory(framework_interface) |
| endif() |
| |
| #----------------------------------------------------------------------------- |
| # Test that targets imported from the build tree have their dependencies |
| # evaluated correctly. The above already tests the same for the install tree. |
| |
| add_executable(deps_shared_iface2 deps_shared_iface.cpp) |
| target_link_libraries(deps_shared_iface2 bld_testSharedLibDepends bld_subdirlib) |
| if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") |
| target_compile_definitions(deps_shared_iface2 |
| PRIVATE |
| "DO_GNU_TESTS" |
| ) |
| endif() |
| target_compile_definitions(deps_shared_iface2 |
| PRIVATE TEST_SUBDIR_LIB |
| $<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC_PROPERTY_IS_ON> |
| $<$<BOOL:$<TARGET_PROPERTY:CUSTOM_PROP>>:CUSTOM_PROPERTY_IS_ON> |
| $<$<STREQUAL:$<TARGET_PROPERTY:CUSTOM_STRING>,testcontent>:CUSTOM_STRING_IS_MATCH> |
| ) |
| |
| add_subdirectory(excludedFromAll) |
| |
| add_executable(iface_test_bld iface_test.cpp) |
| target_link_libraries(iface_test_bld bld_testSharedLibDepends) |
| |
| set_property(TARGET bld_testSharedLibRequired APPEND PROPERTY |
| LINK_INTERFACE_LIBRARIES |
| excludedFromAll |
| ) |
| get_target_property(_configs bld_testSharedLibRequired IMPORTED_CONFIGURATIONS) |
| foreach(_config ${_configs}) |
| set_property(TARGET bld_testSharedLibRequired APPEND PROPERTY |
| IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} |
| excludedFromAll |
| ) |
| endforeach() |
| unset(_configs) |
| add_executable(iface_test_exp iface_test.cpp) |
| target_link_libraries(iface_test_exp testSharedLibDepends) |
| |
| set_property(TARGET testSharedLibDepends APPEND PROPERTY |
| LINK_INTERFACE_LIBRARIES |
| excludedFromAll |
| ) |
| get_target_property(_configs testSharedLibDepends IMPORTED_CONFIGURATIONS) |
| foreach(_config ${_configs}) |
| set_property(TARGET testSharedLibDepends APPEND PROPERTY |
| IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} |
| excludedFromAll |
| ) |
| endforeach() |
| unset(_configs) |
| |
| if (((CMAKE_C_COMPILER_ID STREQUAL GNU AND CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.4) |
| OR CMAKE_C_COMPILER_ID STREQUAL Clang) |
| AND (CMAKE_GENERATOR STREQUAL "Unix Makefiles" OR CMAKE_GENERATOR STREQUAL "Ninja")) |
| include(CheckCXXCompilerFlag) |
| check_cxx_compiler_flag(-Wunused-variable run_sys_includes_test) |
| if(run_sys_includes_test) |
| # The Bullseye wrapper appears to break the -isystem effect. |
| execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version OUTPUT_VARIABLE out ERROR_VARIABLE out) |
| if("x${out}" MATCHES "Bullseye") |
| set(run_sys_includes_test 0) |
| endif() |
| endif() |
| if (run_sys_includes_test) |
| add_executable(test_system_exp test_system.cpp) |
| target_link_libraries(test_system_exp exp_systemlib) |
| target_compile_options(test_system_exp PRIVATE -Wunused-variable -Werror=unused-variable) |
| |
| unset(EXP_ERROR_VARIABLE CACHE) |
| try_compile(EXP_ERROR_VARIABLE |
| "${CMAKE_CURRENT_SOURCE_DIR}/test_system" |
| "${CMAKE_CURRENT_SOURCE_DIR}/test_system.cpp" |
| COMPILE_DEFINITIONS "-Wunused-variable -Werror=unused-variable" |
| LINK_LIBRARIES exp_systemlib |
| OUTPUT_VARIABLE OUTPUT |
| ) |
| if(NOT EXP_ERROR_VARIABLE) |
| message(SEND_ERROR "EXP_ERROR_VARIABLE try_compile failed, but it was expected to succeed ${OUTPUT}.") |
| endif() |
| |
| add_executable(test_system_bld test_system.cpp) |
| target_link_libraries(test_system_bld bld_systemlib) |
| target_compile_options(test_system_bld PRIVATE -Wunused-variable -Werror=unused-variable) |
| |
| unset(BLD_ERROR_VARIABLE CACHE) |
| try_compile(BLD_ERROR_VARIABLE |
| "${CMAKE_CURRENT_SOURCE_DIR}/test_system" |
| "${CMAKE_CURRENT_SOURCE_DIR}/test_system.cpp" |
| COMPILE_DEFINITIONS "-Wunused-variable -Werror=unused-variable" |
| LINK_LIBRARIES bld_systemlib |
| OUTPUT_VARIABLE OUTPUT |
| ) |
| if(NOT BLD_ERROR_VARIABLE) |
| message(SEND_ERROR "BLD_ERROR_VARIABLE try_compile failed, but it was expected to succeed.") |
| endif() |
| endif() |
| endif() |