From 07ec25e383920899c6c506be8f706da2d6db26eb Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Sep 2006 14:31:24 -0400 Subject: ENH: Added test for linking to a static library that is next to a shared library. See bug#1644 for related changes. --- Tests/Complex/Executable/CMakeLists.txt | 6 ++++++ Tests/Complex/Executable/complex.cxx | 19 ++++++++++++++++++- Tests/Complex/Library/CMakeLists.txt | 7 +++++++ Tests/Complex/Library/TestLink.c | 8 ++++++++ Tests/ComplexOneConfig/Executable/CMakeLists.txt | 6 ++++++ Tests/ComplexOneConfig/Executable/complex.cxx | 19 ++++++++++++++++++- Tests/ComplexOneConfig/Library/CMakeLists.txt | 7 +++++++ Tests/ComplexOneConfig/Library/TestLink.c | 8 ++++++++ Tests/ComplexRelativePaths/Executable/CMakeLists.txt | 6 ++++++ Tests/ComplexRelativePaths/Executable/complex.cxx | 19 ++++++++++++++++++- Tests/ComplexRelativePaths/Library/CMakeLists.txt | 7 +++++++ Tests/ComplexRelativePaths/Library/TestLink.c | 8 ++++++++ 12 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 Tests/Complex/Library/TestLink.c create mode 100644 Tests/ComplexOneConfig/Library/TestLink.c create mode 100644 Tests/ComplexRelativePaths/Library/TestLink.c diff --git a/Tests/Complex/Executable/CMakeLists.txt b/Tests/Complex/Executable/CMakeLists.txt index 12b1436..61624c9 100644 --- a/Tests/Complex/Executable/CMakeLists.txt +++ b/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") diff --git a/Tests/Complex/Executable/complex.cxx b/Tests/Complex/Executable/complex.cxx index 816414c..c4fc73b 100644 --- a/Tests/Complex/Executable/complex.cxx +++ b/Tests/Complex/Executable/complex.cxx @@ -23,6 +23,12 @@ extern "C" { #include #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 diff --git a/Tests/Complex/Library/CMakeLists.txt b/Tests/Complex/Library/CMakeLists.txt index 3eeb1ea..9d37900 100644 --- a/Tests/Complex/Library/CMakeLists.txt +++ b/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. diff --git a/Tests/Complex/Library/TestLink.c b/Tests/Complex/Library/TestLink.c new file mode 100644 index 0000000..25dee08 --- /dev/null +++ b/Tests/Complex/Library/TestLink.c @@ -0,0 +1,8 @@ +int TestLinkGetType() +{ +#ifdef CMakeTestLinkShared_EXPORTS + return 0; +#else + return 1; +#endif +} diff --git a/Tests/ComplexOneConfig/Executable/CMakeLists.txt b/Tests/ComplexOneConfig/Executable/CMakeLists.txt index 12b1436..61624c9 100644 --- a/Tests/ComplexOneConfig/Executable/CMakeLists.txt +++ b/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") diff --git a/Tests/ComplexOneConfig/Executable/complex.cxx b/Tests/ComplexOneConfig/Executable/complex.cxx index 816414c..c4fc73b 100644 --- a/Tests/ComplexOneConfig/Executable/complex.cxx +++ b/Tests/ComplexOneConfig/Executable/complex.cxx @@ -23,6 +23,12 @@ extern "C" { #include #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 diff --git a/Tests/ComplexOneConfig/Library/CMakeLists.txt b/Tests/ComplexOneConfig/Library/CMakeLists.txt index 3eeb1ea..9d37900 100644 --- a/Tests/ComplexOneConfig/Library/CMakeLists.txt +++ b/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. diff --git a/Tests/ComplexOneConfig/Library/TestLink.c b/Tests/ComplexOneConfig/Library/TestLink.c new file mode 100644 index 0000000..25dee08 --- /dev/null +++ b/Tests/ComplexOneConfig/Library/TestLink.c @@ -0,0 +1,8 @@ +int TestLinkGetType() +{ +#ifdef CMakeTestLinkShared_EXPORTS + return 0; +#else + return 1; +#endif +} diff --git a/Tests/ComplexRelativePaths/Executable/CMakeLists.txt b/Tests/ComplexRelativePaths/Executable/CMakeLists.txt index 12b1436..61624c9 100644 --- a/Tests/ComplexRelativePaths/Executable/CMakeLists.txt +++ b/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") diff --git a/Tests/ComplexRelativePaths/Executable/complex.cxx b/Tests/ComplexRelativePaths/Executable/complex.cxx index 816414c..c4fc73b 100644 --- a/Tests/ComplexRelativePaths/Executable/complex.cxx +++ b/Tests/ComplexRelativePaths/Executable/complex.cxx @@ -23,6 +23,12 @@ extern "C" { #include #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 diff --git a/Tests/ComplexRelativePaths/Library/CMakeLists.txt b/Tests/ComplexRelativePaths/Library/CMakeLists.txt index 3eeb1ea..9d37900 100644 --- a/Tests/ComplexRelativePaths/Library/CMakeLists.txt +++ b/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. diff --git a/Tests/ComplexRelativePaths/Library/TestLink.c b/Tests/ComplexRelativePaths/Library/TestLink.c new file mode 100644 index 0000000..25dee08 --- /dev/null +++ b/Tests/ComplexRelativePaths/Library/TestLink.c @@ -0,0 +1,8 @@ +int TestLinkGetType() +{ +#ifdef CMakeTestLinkShared_EXPORTS + return 0; +#else + return 1; +#endif +} -- cgit v0.12