Переглянути джерело

ENH: Added test for linking to a static library that is next to a shared library. See bug#1644 for related changes.

Brad King 19 роки тому
батько
коміт
07ec25e383

+ 6 - 0
Tests/Complex/Executable/CMakeLists.txt

@@ -37,6 +37,12 @@ ELSE(UNIX)
   ENDIF(NOT BORLAND)
 ENDIF (UNIX)
 
+# Test linking to static lib when a shared lib has the same name.
+IF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+  ADD_DEFINITIONS(-DCOMPLEX_TEST_LINK_STATIC)
+  TARGET_LINK_LIBRARIES(complex CMakeTestLinkStatic)
+ENDIF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+
 # can we get the path to a source file
 GET_SOURCE_FILE_PROPERTY(A_LOCATION A.cxx LOCATION)
 IF ("${A_LOCATION}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/A.cxx")

+ 18 - 1
Tests/Complex/Executable/complex.cxx

@@ -23,6 +23,12 @@ extern "C" {
 #include <string.h>
 #endif
 
+#ifdef COMPLEX_TEST_LINK_STATIC
+extern "C"
+{
+  int TestLinkGetType();
+}
+#endif
 
 int cm_passed = 0;
 int cm_failed = 0;
@@ -1270,7 +1276,18 @@ int main()
   // Test the generated file stream.
   TestCMGeneratedFileSTream();
 #endif
-  
+
+#ifdef COMPLEX_TEST_LINK_STATIC
+  if(TestLinkGetType())
+    {
+    cmPassed("Link to static over shared worked.");
+    }
+  else
+    {
+    cmFailed("Link to static over shared failed.");
+    }
+#endif
+
   // ----------------------------------------------------------------------
   // Summary
 

+ 7 - 0
Tests/Complex/Library/CMakeLists.txt

@@ -53,6 +53,13 @@ ELSE(${FOO_BAR_VAR} MATCHES "BAR")
   MESSAGE(SEND_ERROR "SET_TARGET_PROPERTIES or GET_TARGET_PROPERTY failed, FOO_BAR_VAR should be BAR, but is ${FOO_BAR_VAR}")
 ENDIF(${FOO_BAR_VAR} MATCHES "BAR")
 
+# Create static and shared lib of same name.
+IF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+  ADD_LIBRARY(CMakeTestLinkStatic STATIC TestLink.c)
+  ADD_LIBRARY(CMakeTestLinkShared SHARED TestLink.c)
+  SET_TARGET_PROPERTIES(CMakeTestLinkStatic CMakeTestLinkShared
+    PROPERTIES OUTPUT_NAME CMakeTestLink CLEAN_DIRECT_OUTPUT 1)
+ENDIF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
 
 #
 # Attach pre-build/pre-link/post-build custom-commands to the lib.

+ 8 - 0
Tests/Complex/Library/TestLink.c

@@ -0,0 +1,8 @@
+int TestLinkGetType()
+{
+#ifdef CMakeTestLinkShared_EXPORTS
+  return 0;
+#else
+  return 1;
+#endif
+}

+ 6 - 0
Tests/ComplexOneConfig/Executable/CMakeLists.txt

@@ -37,6 +37,12 @@ ELSE(UNIX)
   ENDIF(NOT BORLAND)
 ENDIF (UNIX)
 
+# Test linking to static lib when a shared lib has the same name.
+IF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+  ADD_DEFINITIONS(-DCOMPLEX_TEST_LINK_STATIC)
+  TARGET_LINK_LIBRARIES(complex CMakeTestLinkStatic)
+ENDIF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+
 # can we get the path to a source file
 GET_SOURCE_FILE_PROPERTY(A_LOCATION A.cxx LOCATION)
 IF ("${A_LOCATION}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/A.cxx")

+ 18 - 1
Tests/ComplexOneConfig/Executable/complex.cxx

@@ -23,6 +23,12 @@ extern "C" {
 #include <string.h>
 #endif
 
+#ifdef COMPLEX_TEST_LINK_STATIC
+extern "C"
+{
+  int TestLinkGetType();
+}
+#endif
 
 int cm_passed = 0;
 int cm_failed = 0;
@@ -1270,7 +1276,18 @@ int main()
   // Test the generated file stream.
   TestCMGeneratedFileSTream();
 #endif
-  
+
+#ifdef COMPLEX_TEST_LINK_STATIC
+  if(TestLinkGetType())
+    {
+    cmPassed("Link to static over shared worked.");
+    }
+  else
+    {
+    cmFailed("Link to static over shared failed.");
+    }
+#endif
+
   // ----------------------------------------------------------------------
   // Summary
 

+ 7 - 0
Tests/ComplexOneConfig/Library/CMakeLists.txt

@@ -53,6 +53,13 @@ ELSE(${FOO_BAR_VAR} MATCHES "BAR")
   MESSAGE(SEND_ERROR "SET_TARGET_PROPERTIES or GET_TARGET_PROPERTY failed, FOO_BAR_VAR should be BAR, but is ${FOO_BAR_VAR}")
 ENDIF(${FOO_BAR_VAR} MATCHES "BAR")
 
+# Create static and shared lib of same name.
+IF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+  ADD_LIBRARY(CMakeTestLinkStatic STATIC TestLink.c)
+  ADD_LIBRARY(CMakeTestLinkShared SHARED TestLink.c)
+  SET_TARGET_PROPERTIES(CMakeTestLinkStatic CMakeTestLinkShared
+    PROPERTIES OUTPUT_NAME CMakeTestLink CLEAN_DIRECT_OUTPUT 1)
+ENDIF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
 
 #
 # Attach pre-build/pre-link/post-build custom-commands to the lib.

+ 8 - 0
Tests/ComplexOneConfig/Library/TestLink.c

@@ -0,0 +1,8 @@
+int TestLinkGetType()
+{
+#ifdef CMakeTestLinkShared_EXPORTS
+  return 0;
+#else
+  return 1;
+#endif
+}

+ 6 - 0
Tests/ComplexRelativePaths/Executable/CMakeLists.txt

@@ -37,6 +37,12 @@ ELSE(UNIX)
   ENDIF(NOT BORLAND)
 ENDIF (UNIX)
 
+# Test linking to static lib when a shared lib has the same name.
+IF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+  ADD_DEFINITIONS(-DCOMPLEX_TEST_LINK_STATIC)
+  TARGET_LINK_LIBRARIES(complex CMakeTestLinkStatic)
+ENDIF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+
 # can we get the path to a source file
 GET_SOURCE_FILE_PROPERTY(A_LOCATION A.cxx LOCATION)
 IF ("${A_LOCATION}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/A.cxx")

+ 18 - 1
Tests/ComplexRelativePaths/Executable/complex.cxx

@@ -23,6 +23,12 @@ extern "C" {
 #include <string.h>
 #endif
 
+#ifdef COMPLEX_TEST_LINK_STATIC
+extern "C"
+{
+  int TestLinkGetType();
+}
+#endif
 
 int cm_passed = 0;
 int cm_failed = 0;
@@ -1270,7 +1276,18 @@ int main()
   // Test the generated file stream.
   TestCMGeneratedFileSTream();
 #endif
-  
+
+#ifdef COMPLEX_TEST_LINK_STATIC
+  if(TestLinkGetType())
+    {
+    cmPassed("Link to static over shared worked.");
+    }
+  else
+    {
+    cmFailed("Link to static over shared failed.");
+    }
+#endif
+
   // ----------------------------------------------------------------------
   // Summary
 

+ 7 - 0
Tests/ComplexRelativePaths/Library/CMakeLists.txt

@@ -53,6 +53,13 @@ ELSE(${FOO_BAR_VAR} MATCHES "BAR")
   MESSAGE(SEND_ERROR "SET_TARGET_PROPERTIES or GET_TARGET_PROPERTY failed, FOO_BAR_VAR should be BAR, but is ${FOO_BAR_VAR}")
 ENDIF(${FOO_BAR_VAR} MATCHES "BAR")
 
+# Create static and shared lib of same name.
+IF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
+  ADD_LIBRARY(CMakeTestLinkStatic STATIC TestLink.c)
+  ADD_LIBRARY(CMakeTestLinkShared SHARED TestLink.c)
+  SET_TARGET_PROPERTIES(CMakeTestLinkStatic CMakeTestLinkShared
+    PROPERTIES OUTPUT_NAME CMakeTestLink CLEAN_DIRECT_OUTPUT 1)
+ENDIF(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
 
 #
 # Attach pre-build/pre-link/post-build custom-commands to the lib.

+ 8 - 0
Tests/ComplexRelativePaths/Library/TestLink.c

@@ -0,0 +1,8 @@
+int TestLinkGetType()
+{
+#ifdef CMakeTestLinkShared_EXPORTS
+  return 0;
+#else
+  return 1;
+#endif
+}