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)
|
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();
|
for(std::vector<std::string>::const_iterator si = this->Suffixes.begin();
|
||||||
si != this->Suffixes.end(); ++si)
|
si != this->Suffixes.end(); ++si)
|
||||||
{
|
{
|
||||||
std::string const& suffix = *si;
|
std::string suffix = *si;
|
||||||
if(name.length() > suffix.length() &&
|
if(name.length() <= suffix.length())
|
||||||
name.substr(name.size()-suffix.length()) == suffix)
|
{
|
||||||
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,7 +199,9 @@ CONFIGURE_FILE(
|
||||||
${Complex_SOURCE_DIR}/Library/dummy
|
${Complex_SOURCE_DIR}/Library/dummy
|
||||||
${Complex_BINARY_DIR}/Library/dummylib.lib
|
${Complex_BINARY_DIR}/Library/dummylib.lib
|
||||||
COPYONLY IMMEDIATE)
|
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(
|
CONFIGURE_FILE(
|
||||||
${Complex_SOURCE_DIR}/Library/dummy
|
${Complex_SOURCE_DIR}/Library/dummy
|
||||||
${Complex_BINARY_DIR}/Library/libdummylib${ext}
|
${Complex_BINARY_DIR}/Library/libdummylib${ext}
|
||||||
|
@ -216,6 +218,34 @@ FIND_LIBRARY(FIND_DUMMY_LIB
|
||||||
PATHS
|
PATHS
|
||||||
${Complex_BINARY_DIR}/Library DOC "find dummy lib")
|
${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
|
# Test SET_SOURCE_FILES_PROPERTIES
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue