diff options
author | Brad King <brad.king@kitware.com> | 2009-04-06 15:11:33 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2009-04-06 15:11:33 (GMT) |
commit | d6bdaf9f1371a4c5a4e88dff89855aee47e49096 (patch) | |
tree | 5bbdbb76661fad78af4f5d1aa5f7280b1dc2cb49 /Tests/ExportImport | |
parent | 85bffd3eeb7ae6b3ae35a5da381aa55edff0b4be (diff) | |
download | CMake-d6bdaf9f1371a4c5a4e88dff89855aee47e49096.zip CMake-d6bdaf9f1371a4c5a4e88dff89855aee47e49096.tar.gz CMake-d6bdaf9f1371a4c5a4e88dff89855aee47e49096.tar.bz2 |
ENH: Test transitive link to subdir-imported lib
This tests linking to an imported target that is not visible but is a
transitive dependency of a target that is visible. See issue #8843.
Diffstat (limited to 'Tests/ExportImport')
-rw-r--r-- | Tests/ExportImport/Import/A/CMakeLists.txt | 69 | ||||
-rw-r--r-- | Tests/ExportImport/Import/A/imp_lib1.c | 6 | ||||
-rw-r--r-- | Tests/ExportImport/Import/A/imp_mod1.c (renamed from Tests/ExportImport/Import/imp_mod1.c) | 0 | ||||
-rw-r--r-- | Tests/ExportImport/Import/A/imp_testExe1.c (renamed from Tests/ExportImport/Import/imp_testExe1.c) | 0 | ||||
-rw-r--r-- | Tests/ExportImport/Import/CMakeLists.txt | 78 | ||||
-rw-r--r-- | Tests/ExportImport/Import/imp_testTransExe1.c | 6 |
6 files changed, 97 insertions, 62 deletions
diff --git a/Tests/ExportImport/Import/A/CMakeLists.txt b/Tests/ExportImport/Import/A/CMakeLists.txt new file mode 100644 index 0000000..16cff2d --- /dev/null +++ b/Tests/ExportImport/Import/A/CMakeLists.txt @@ -0,0 +1,69 @@ +# 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) + +# 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) + +# 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) + +# 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(c) + +# Create a library to be linked by another directory in this project +# to test transitive linking to otherwise invisible imported targets. +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) diff --git a/Tests/ExportImport/Import/A/imp_lib1.c b/Tests/ExportImport/Import/A/imp_lib1.c new file mode 100644 index 0000000..d8c66e6 --- /dev/null +++ b/Tests/ExportImport/Import/A/imp_lib1.c @@ -0,0 +1,6 @@ +extern int testLib2(void); + +int imp_lib1(void) +{ + return testLib2(); +} diff --git a/Tests/ExportImport/Import/imp_mod1.c b/Tests/ExportImport/Import/A/imp_mod1.c index 579d949..579d949 100644 --- a/Tests/ExportImport/Import/imp_mod1.c +++ b/Tests/ExportImport/Import/A/imp_mod1.c diff --git a/Tests/ExportImport/Import/imp_testExe1.c b/Tests/ExportImport/Import/A/imp_testExe1.c index 6424d33..6424d33 100644 --- a/Tests/ExportImport/Import/imp_testExe1.c +++ b/Tests/ExportImport/Import/A/imp_testExe1.c diff --git a/Tests/ExportImport/Import/CMakeLists.txt b/Tests/ExportImport/Import/CMakeLists.txt index 27f2910..00bf306 100644 --- a/Tests/ExportImport/Import/CMakeLists.txt +++ b/Tests/ExportImport/Import/CMakeLists.txt @@ -6,65 +6,19 @@ if(CMAKE_ANSI_CFLAGS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}") endif(CMAKE_ANSI_CFLAGS) -# 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) - -# 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) - -# 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) - -# 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(c) +# Import everything in a subdirectory. +add_subdirectory(A) + +# Make sure the imported targets are scoped inside the subdirectory. +if(TARGET exp_testLib2) + message(FATAL_ERROR "Imported target exp_testLib2 is not scoped in subdir!") +endif() +if(TARGET bld_testLib2) + message(FATAL_ERROR "Imported target bld_testLib2 is not scoped in subdir!") +endif() + +# Test transitive linking to a target imported in the subdirectory. +add_executable(imp_testTransExe1 imp_testTransExe1.c) +target_link_libraries(imp_testTransExe1 imp_lib1) +add_executable(imp_testTransExe1b imp_testTransExe1.c) +target_link_libraries(imp_testTransExe1b imp_lib1b) diff --git a/Tests/ExportImport/Import/imp_testTransExe1.c b/Tests/ExportImport/Import/imp_testTransExe1.c new file mode 100644 index 0000000..360a112 --- /dev/null +++ b/Tests/ExportImport/Import/imp_testTransExe1.c @@ -0,0 +1,6 @@ +extern int imp_lib1(void); + +int main() +{ + return imp_lib1(); +} |