Merge topic 'findlibrary-versioned-libraries'

70f3623 Find_library(): allow searching for versioned shared objects
This commit is contained in:
David Cole 2012-02-21 15:56:26 -05:00 committed by CMake Topic Stage
commit 8a665fa363
2 changed files with 45 additions and 5 deletions

View File

@ -354,13 +354,23 @@ void cmFindLibraryHelper::RegexFromList(std::string& out,
//----------------------------------------------------------------------------
bool cmFindLibraryHelper::HasValidSuffix(std::string const& name)
{
// Check if the given name ends in a valid library suffix.
for(std::vector<std::string>::const_iterator si = this->Suffixes.begin();
si != this->Suffixes.end(); ++si)
{
std::string const& suffix = *si;
if(name.length() > suffix.length() &&
name.substr(name.size()-suffix.length()) == suffix)
std::string suffix = *si;
if(name.length() <= suffix.length())
{
continue;
}
// Check if the given name ends in a valid library suffix.
if(name.substr(name.size()-suffix.length()) == suffix)
{
return true;
}
// Check if a valid library suffix is somewhere in the name,
// this may happen e.g. for versioned shared libraries: libfoo.so.2
suffix += ".";
if(name.find(suffix) != name.npos)
{
return true;
}

View File

@ -199,7 +199,9 @@ CONFIGURE_FILE(
${Complex_SOURCE_DIR}/Library/dummy
${Complex_BINARY_DIR}/Library/dummylib.lib
COPYONLY IMMEDIATE)
FOREACH (ext ${CMAKE_SHLIB_SUFFIX};.so;.a;.sl)
FOREACH (ext ${CMAKE_SHLIB_SUFFIX};.so;.a;.sl
${CMAKE_SHARED_LIBRARY_SUFFIX}.2
${CMAKE_STATIC_LIBRARY_SUFFIX}.2)
CONFIGURE_FILE(
${Complex_SOURCE_DIR}/Library/dummy
${Complex_BINARY_DIR}/Library/libdummylib${ext}
@ -216,6 +218,34 @@ FIND_LIBRARY(FIND_DUMMY_LIB
PATHS
${Complex_BINARY_DIR}/Library DOC "find dummy lib")
# This doesn't work for platforms that have a shared library and an import
# library, like Windows with .dll and .lib. Limit is to ".so" now because it's
# known to work there.
IF(CMAKE_SHARED_LIBRARY_SUFFIX STREQUAL ".so")
FIND_LIBRARY(FIND_DUMMY_SHLIB_VERSIONED
NAMES libdummylib${CMAKE_SHARED_LIBRARY_SUFFIX}.2
PATHS ${Complex_BINARY_DIR}/Library
DOC "find versioned dummy shared lib"
NO_DEFAULT_PATH)
IF(NOT FIND_DUMMY_SHLIB_VERSIONED MATCHES "/libdummylib${CMAKE_SHARED_LIBRARY_SUFFIX}.2")
MESSAGE(SEND_ERROR "FIND_DUMMY_SHLIB_VERSIONED is not set correctly: "
"${FIND_DUMMY_SHLIB_VERSIONED}")
ENDIF()
ENDIF()
# Static library, should work everywhere
FIND_LIBRARY(FIND_DUMMY_STLIB_VERSIONED
NAMES libdummylib${CMAKE_STATIC_LIBRARY_SUFFIX}.2
PATHS ${Complex_BINARY_DIR}/Library
DOC "find versioned dummy static lib"
NO_DEFAULT_PATH)
IF(NOT FIND_DUMMY_STLIB_VERSIONED MATCHES "/libdummylib${CMAKE_STATIC_LIBRARY_SUFFIX}.2")
MESSAGE(SEND_ERROR "FIND_DUMMY_STLIB_VERSIONED is not set correctly: "
"${FIND_DUMMY_STLIB_VERSIONED}")
ENDIF()
#
# Test SET_SOURCE_FILES_PROPERTIES
#