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

This commit is contained in:
Brad King 2006-09-15 14:31:24 -04:00
parent 1d0502927c
commit 07ec25e383
12 changed files with 117 additions and 3 deletions

View File

@ -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")

View File

@ -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

View File

@ -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.

View File

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

View File

@ -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")

View File

@ -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

View File

@ -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.

View File

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

View File

@ -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")

View File

@ -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

View File

@ -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.

View File

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