Find_library(): allow searching for versioned shared objects
This did not work because find_library() did only treat the given name as complete filename if is matched "PREFIX.*SUFFIX": find_library(MYLIB libfoo.so.2) Now it is also taken as a whole if the name matches "PREFIX.*SUFFIX\..*".
This commit is contained in:
parent
a8b5714935
commit
70f362305f
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
#
|
||||
|
|
Loading…
Reference in New Issue