[CMAKE] Fix static library detection on unix (#642)

Manually prepend `lib` and append `.a` to the static library names
provided by the cmake pkg-config cmake module. This is necessary because
the `find_library()` function always prefers the shared object file if
the library name is "unqualified" and unfortunately the cmake pkg-config
module seems to provide only "unqualified" library names through
`*_PKG_STATIC_LIBIRARIES`.
This commit is contained in:
Henrik Gaßmann 2017-12-05 17:42:34 +01:00 committed by Frank Denis
parent 01072a2f6a
commit 06739323d5

View File

@ -55,23 +55,35 @@ if (UNIX)
endif() endif()
if(sodium_USE_STATIC_LIBS) if(sodium_USE_STATIC_LIBS)
foreach(_libname ${sodium_PKG_STATIC_LIBRARIES})
if (NOT _libname MATCHES "^lib.*\\.a$") # ignore strings already ending with .a
list(INSERT sodium_PKG_STATIC_LIBRARIES 0 "lib${_libname}.a")
endif()
endforeach()
list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES)
# if pkgconfig for libsodium doesn't provide # if pkgconfig for libsodium doesn't provide
# static lib info, then override PKG_STATIC here.. # static lib info, then override PKG_STATIC here..
if (NOT DEFINED sodium_PKG_STATIC_LIBRARIES) if (sodium_PKG_STATIC_LIBRARIES STREQUAL "")
set(sodium_PKG_STATIC_LIBRARIES libsodium.a) set(sodium_PKG_STATIC_LIBRARIES libsodium.a)
endif() endif()
set(XPREFIX sodium_PKG_STATIC) set(XPREFIX sodium_PKG_STATIC)
else() else()
if (sodium_PKG_LIBRARIES STREQUAL "")
set(sodium_PKG_LIBRARIES sodium)
endif()
set(XPREFIX sodium_PKG) set(XPREFIX sodium_PKG)
endif() endif()
find_path(sodium_INCLUDE_DIR sodium.h find_path(sodium_INCLUDE_DIR sodium.h
HINTS ${${XPREFIX}_INCLUDE_DIRS} HINTS ${${XPREFIX}_INCLUDE_DIRS}
) )
find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES} sodium find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES}
HINTS ${${XPREFIX}_LIBRARY_DIRS} HINTS ${${XPREFIX}_LIBRARY_DIRS}
) )
find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES} sodium find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES}
HINTS ${${XPREFIX}_LIBRARY_DIRS} HINTS ${${XPREFIX}_LIBRARY_DIRS}
) )