summaryrefslogtreecommitdiffstats
path: root/Tests/ExportImport
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2009-04-06 15:11:33 (GMT)
committerBrad King <brad.king@kitware.com>2009-04-06 15:11:33 (GMT)
commitd6bdaf9f1371a4c5a4e88dff89855aee47e49096 (patch)
tree5bbdbb76661fad78af4f5d1aa5f7280b1dc2cb49 /Tests/ExportImport
parent85bffd3eeb7ae6b3ae35a5da381aa55edff0b4be (diff)
downloadCMake-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.txt69
-rw-r--r--Tests/ExportImport/Import/A/imp_lib1.c6
-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.txt78
-rw-r--r--Tests/ExportImport/Import/imp_testTransExe1.c6
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();
+}