Commit acd09461 authored by Fabrice Fontaine's avatar Fabrice Fontaine Committed by Michael Grunder
Browse files

CMakeLists.txt: respect BUILD_SHARED_LIBS

To allow building hiredis on toolchain without dynamic library support,
respect standard cmake BUILD_SHARED_LIBS:
https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html

Signed-off-by: default avatarFabrice Fontaine <fontaine.fabrice@gmail.com>
parent 97fcf0fd
CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0) CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0)
OPTION(BUILD_SHARED_LIBS "Build shared libraries" ON)
OPTION(ENABLE_SSL "Build hiredis_ssl for SSL support" OFF) OPTION(ENABLE_SSL "Build hiredis_ssl for SSL support" OFF)
OPTION(DISABLE_TESTS "If tests should be compiled or not" OFF) OPTION(DISABLE_TESTS "If tests should be compiled or not" OFF)
OPTION(ENABLE_SSL_TESTS "Should we test SSL connections" OFF) OPTION(ENABLE_SSL_TESTS "Should we test SSL connections" OFF)
...@@ -44,35 +45,49 @@ IF(WIN32) ...@@ -44,35 +45,49 @@ IF(WIN32)
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -DWIN32_LEAN_AND_MEAN) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -DWIN32_LEAN_AND_MEAN)
ENDIF() ENDIF()
ADD_LIBRARY(hiredis SHARED ${hiredis_sources})
ADD_LIBRARY(hiredis_static STATIC ${hiredis_sources}) ADD_LIBRARY(hiredis_static STATIC ${hiredis_sources})
ADD_LIBRARY(hiredis::hiredis ALIAS hiredis)
ADD_LIBRARY(hiredis::hiredis_static ALIAS hiredis_static) ADD_LIBRARY(hiredis::hiredis_static ALIAS hiredis_static)
SET(HIREDIS_DEFAULT_LIBRARY hiredis_static)
SET(HIREDIS_TARGETS hiredis_static)
IF(NOT MSVC) IF(NOT MSVC)
SET_TARGET_PROPERTIES(hiredis_static SET_TARGET_PROPERTIES(hiredis_static
PROPERTIES OUTPUT_NAME hiredis) PROPERTIES OUTPUT_NAME hiredis)
ENDIF() ENDIF()
SET_TARGET_PROPERTIES(hiredis IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(hiredis SHARED ${hiredis_sources})
ADD_LIBRARY(hiredis::hiredis ALIAS hiredis)
SET(HIREDIS_DEFAULT_LIBRARY hiredis)
SET(HIREDIS_TARGETS ${HIREDIS_TARGETS} hiredis)
SET_TARGET_PROPERTIES(hiredis
PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE
VERSION "${HIREDIS_SONAME}") VERSION "${HIREDIS_SONAME}")
ENDIF()
IF(MSVC) IF(MSVC)
SET_TARGET_PROPERTIES(hiredis_static SET_TARGET_PROPERTIES(hiredis_static
PROPERTIES COMPILE_FLAGS /Z7) PROPERTIES COMPILE_FLAGS /Z7)
ENDIF() ENDIF()
IF(WIN32 OR MINGW) IF(WIN32 OR MINGW)
IF(BUILD_SHARED_LIBS)
TARGET_LINK_LIBRARIES(hiredis PUBLIC ws2_32 crypt32) TARGET_LINK_LIBRARIES(hiredis PUBLIC ws2_32 crypt32)
ENDIF()
TARGET_LINK_LIBRARIES(hiredis_static PUBLIC ws2_32 crypt32) TARGET_LINK_LIBRARIES(hiredis_static PUBLIC ws2_32 crypt32)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") ELSEIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
IF(BUILD_SHARED_LIBS)
TARGET_LINK_LIBRARIES(hiredis PUBLIC m) TARGET_LINK_LIBRARIES(hiredis PUBLIC m)
ENDIF()
TARGET_LINK_LIBRARIES(hiredis_static PUBLIC m) TARGET_LINK_LIBRARIES(hiredis_static PUBLIC m)
ELSEIF(CMAKE_SYSTEM_NAME MATCHES "SunOS") ELSEIF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
IF(BUILD_SHARED_LIBS)
TARGET_LINK_LIBRARIES(hiredis PUBLIC socket) TARGET_LINK_LIBRARIES(hiredis PUBLIC socket)
ENDIF()
TARGET_LINK_LIBRARIES(hiredis_static PUBLIC socket) TARGET_LINK_LIBRARIES(hiredis_static PUBLIC socket)
ENDIF() ENDIF()
TARGET_INCLUDE_DIRECTORIES(hiredis PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) IF(BUILD_SHARED_LIBS)
TARGET_INCLUDE_DIRECTORIES(hiredis PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
ENDIF()
TARGET_INCLUDE_DIRECTORIES(hiredis_static PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>) TARGET_INCLUDE_DIRECTORIES(hiredis_static PUBLIC $<INSTALL_INTERFACE:include> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY) CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY)
...@@ -103,13 +118,13 @@ set(CPACK_RPM_PACKAGE_AUTOREQPROV ON) ...@@ -103,13 +118,13 @@ set(CPACK_RPM_PACKAGE_AUTOREQPROV ON)
include(CPack) include(CPack)
INSTALL(TARGETS hiredis hiredis_static INSTALL(TARGETS ${HIREDIS_TARGETS}
EXPORT hiredis-targets EXPORT hiredis-targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
if (MSVC) if (MSVC AND BUILD_SHARED_LIBS)
INSTALL(FILES $<TARGET_PDB_FILE:hiredis> INSTALL(FILES $<TARGET_PDB_FILE:hiredis>
DESTINATION ${CMAKE_INSTALL_BINDIR} DESTINATION ${CMAKE_INSTALL_BINDIR}
CONFIGURATIONS Debug RelWithDebInfo) CONFIGURATIONS Debug RelWithDebInfo)
...@@ -161,45 +176,58 @@ IF(ENABLE_SSL) ...@@ -161,45 +176,58 @@ IF(ENABLE_SSL)
FIND_PACKAGE(OpenSSL REQUIRED) FIND_PACKAGE(OpenSSL REQUIRED)
SET(hiredis_ssl_sources SET(hiredis_ssl_sources
ssl.c) ssl.c)
ADD_LIBRARY(hiredis_ssl SHARED
${hiredis_ssl_sources})
ADD_LIBRARY(hiredis_ssl_static STATIC ADD_LIBRARY(hiredis_ssl_static STATIC
${hiredis_ssl_sources}) ${hiredis_ssl_sources})
SET(HIREDIS_SSL_DEFAULT_LIBRARY hiredis_ssl_static)
SET(HIREDIS_SSL_TARGETS hiredis_ssl_static)
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(hiredis_ssl SHARED
${hiredis_ssl_sources})
SET(HIREDIS_SSL_DEFAULT_LIBRARY hiredis_ssl)
SET(HIREDIS_SSL_TARGETS ${HIREDIS_SSL_TARGETS} hiredis_ssl)
ENDIF()
IF(NOT MSVC) IF(NOT MSVC)
SET_TARGET_PROPERTIES(hiredis_ssl_static SET_TARGET_PROPERTIES(hiredis_ssl_static
PROPERTIES OUTPUT_NAME hiredis_ssl) PROPERTIES OUTPUT_NAME hiredis_ssl)
ENDIF() ENDIF()
IF (APPLE) IF (APPLE AND BUILD_SHARED_LIBS)
SET_PROPERTY(TARGET hiredis_ssl PROPERTY LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup") SET_PROPERTY(TARGET hiredis_ssl PROPERTY LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup")
ENDIF() ENDIF()
IF(BUILD_SHARED_LIBS)
SET_TARGET_PROPERTIES(hiredis_ssl SET_TARGET_PROPERTIES(hiredis_ssl
PROPERTIES PROPERTIES
WINDOWS_EXPORT_ALL_SYMBOLS TRUE WINDOWS_EXPORT_ALL_SYMBOLS TRUE
VERSION "${HIREDIS_SONAME}") VERSION "${HIREDIS_SONAME}")
ENDIF()
IF(MSVC) IF(MSVC)
SET_TARGET_PROPERTIES(hiredis_ssl_static SET_TARGET_PROPERTIES(hiredis_ssl_static
PROPERTIES COMPILE_FLAGS /Z7) PROPERTIES COMPILE_FLAGS /Z7)
ENDIF() ENDIF()
TARGET_INCLUDE_DIRECTORIES(hiredis_ssl PRIVATE "${OPENSSL_INCLUDE_DIR}")
TARGET_INCLUDE_DIRECTORIES(hiredis_ssl_static PRIVATE "${OPENSSL_INCLUDE_DIR}") TARGET_INCLUDE_DIRECTORIES(hiredis_ssl_static PRIVATE "${OPENSSL_INCLUDE_DIR}")
IF(BUILD_SHARED_LIBS)
TARGET_INCLUDE_DIRECTORIES(hiredis_ssl PRIVATE "${OPENSSL_INCLUDE_DIR}")
TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE ${OPENSSL_LIBRARIES}) TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE ${OPENSSL_LIBRARIES})
ENDIF()
IF (WIN32 OR MINGW) IF (WIN32 OR MINGW)
IF (BUILD_SHARED_LIBS)
TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE hiredis) TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE hiredis)
ENDIF()
TARGET_LINK_LIBRARIES(hiredis_ssl_static PUBLIC hiredis_static) TARGET_LINK_LIBRARIES(hiredis_ssl_static PUBLIC hiredis_static)
ENDIF() ENDIF()
CONFIGURE_FILE(hiredis_ssl.pc.in hiredis_ssl.pc @ONLY) CONFIGURE_FILE(hiredis_ssl.pc.in hiredis_ssl.pc @ONLY)
INSTALL(TARGETS hiredis_ssl hiredis_ssl_static INSTALL(TARGETS ${HIREDIS_SSL_TARGETS}
EXPORT hiredis_ssl-targets EXPORT hiredis_ssl-targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
if (MSVC) if (MSVC AND BUILD_SHARED_LIBS)
INSTALL(FILES $<TARGET_PDB_FILE:hiredis_ssl> INSTALL(FILES $<TARGET_PDB_FILE:hiredis_ssl>
DESTINATION ${CMAKE_INSTALL_BINDIR} DESTINATION ${CMAKE_INSTALL_BINDIR}
CONFIGURATIONS Debug RelWithDebInfo) CONFIGURATIONS Debug RelWithDebInfo)
...@@ -236,10 +264,10 @@ ENDIF() ...@@ -236,10 +264,10 @@ ENDIF()
IF(NOT DISABLE_TESTS) IF(NOT DISABLE_TESTS)
ENABLE_TESTING() ENABLE_TESTING()
ADD_EXECUTABLE(hiredis-test test.c) ADD_EXECUTABLE(hiredis-test test.c)
TARGET_LINK_LIBRARIES(hiredis-test hiredis) TARGET_LINK_LIBRARIES(hiredis-test ${HIREDIS_DEFAULT_LIBRARY})
IF(ENABLE_SSL_TESTS) IF(ENABLE_SSL_TESTS)
ADD_DEFINITIONS(-DHIREDIS_TEST_SSL=1) ADD_DEFINITIONS(-DHIREDIS_TEST_SSL=1)
TARGET_LINK_LIBRARIES(hiredis-test hiredis_ssl) TARGET_LINK_LIBRARIES(hiredis-test ${HIREDIS_SSL_DEFAULT_LIBRARY})
ENDIF() ENDIF()
IF(ENABLE_ASYNC_TESTS) IF(ENABLE_ASYNC_TESTS)
ADD_DEFINITIONS(-DHIREDIS_TEST_ASYNC=1) ADD_DEFINITIONS(-DHIREDIS_TEST_ASYNC=1)
......
...@@ -6,7 +6,7 @@ if (GLIB2_FOUND) ...@@ -6,7 +6,7 @@ if (GLIB2_FOUND)
INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS}) LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS})
ADD_EXECUTABLE(example-glib example-glib.c) ADD_EXECUTABLE(example-glib example-glib.c)
TARGET_LINK_LIBRARIES(example-glib hiredis ${GLIB2_LIBRARIES}) TARGET_LINK_LIBRARIES(example-glib ${HIREDIS_DEFAULT_LIBRARY} ${GLIB2_LIBRARIES})
ENDIF(GLIB2_FOUND) ENDIF(GLIB2_FOUND)
FIND_PATH(LIBEV ev.h FIND_PATH(LIBEV ev.h
...@@ -16,46 +16,46 @@ FIND_PATH(LIBEV ev.h ...@@ -16,46 +16,46 @@ FIND_PATH(LIBEV ev.h
if (LIBEV) if (LIBEV)
# Just compile and link with libev # Just compile and link with libev
ADD_EXECUTABLE(example-libev example-libev.c) ADD_EXECUTABLE(example-libev example-libev.c)
TARGET_LINK_LIBRARIES(example-libev hiredis ev) TARGET_LINK_LIBRARIES(example-libev ${HIREDIS_DEFAULT_LIBRARY} ev)
ENDIF() ENDIF()
FIND_PATH(LIBEVENT event.h) FIND_PATH(LIBEVENT event.h)
if (LIBEVENT) if (LIBEVENT)
ADD_EXECUTABLE(example-libevent example-libevent.c) ADD_EXECUTABLE(example-libevent example-libevent.c)
TARGET_LINK_LIBRARIES(example-libevent hiredis event) TARGET_LINK_LIBRARIES(example-libevent ${HIREDIS_DEFAULT_LIBRARY} event)
ENDIF() ENDIF()
FIND_PATH(LIBHV hv/hv.h) FIND_PATH(LIBHV hv/hv.h)
IF (LIBHV) IF (LIBHV)
ADD_EXECUTABLE(example-libhv example-libhv.c) ADD_EXECUTABLE(example-libhv example-libhv.c)
TARGET_LINK_LIBRARIES(example-libhv hiredis hv) TARGET_LINK_LIBRARIES(example-libhv ${HIREDIS_DEFAULT_LIBRARY} hv)
ENDIF() ENDIF()
FIND_PATH(LIBUV uv.h) FIND_PATH(LIBUV uv.h)
IF (LIBUV) IF (LIBUV)
ADD_EXECUTABLE(example-libuv example-libuv.c) ADD_EXECUTABLE(example-libuv example-libuv.c)
TARGET_LINK_LIBRARIES(example-libuv hiredis uv) TARGET_LINK_LIBRARIES(example-libuv ${HIREDIS_DEFAULT_LIBRARY} uv)
ENDIF() ENDIF()
FIND_PATH(LIBSDEVENT systemd/sd-event.h) FIND_PATH(LIBSDEVENT systemd/sd-event.h)
IF (LIBSDEVENT) IF (LIBSDEVENT)
ADD_EXECUTABLE(example-libsdevent example-libsdevent.c) ADD_EXECUTABLE(example-libsdevent example-libsdevent.c)
TARGET_LINK_LIBRARIES(example-libsdevent hiredis systemd) TARGET_LINK_LIBRARIES(example-libsdevent ${HIREDIS_DEFAULT_LIBRARY} systemd)
ENDIF() ENDIF()
IF (APPLE) IF (APPLE)
FIND_LIBRARY(CF CoreFoundation) FIND_LIBRARY(CF CoreFoundation)
ADD_EXECUTABLE(example-macosx example-macosx.c) ADD_EXECUTABLE(example-macosx example-macosx.c)
TARGET_LINK_LIBRARIES(example-macosx hiredis ${CF}) TARGET_LINK_LIBRARIES(example-macosx ${HIREDIS_DEFAULT_LIBRARY} ${CF})
ENDIF() ENDIF()
IF (ENABLE_SSL) IF (ENABLE_SSL)
ADD_EXECUTABLE(example-ssl example-ssl.c) ADD_EXECUTABLE(example-ssl example-ssl.c)
TARGET_LINK_LIBRARIES(example-ssl hiredis hiredis_ssl) TARGET_LINK_LIBRARIES(example-ssl ${HIREDIS_DEFAULT_LIBRARY} ${HIREDIS_SSL_DEFAULT_LIBRARY})
ENDIF() ENDIF()
ADD_EXECUTABLE(example example.c) ADD_EXECUTABLE(example example.c)
TARGET_LINK_LIBRARIES(example hiredis) TARGET_LINK_LIBRARIES(example ${HIREDIS_DEFAULT_LIBRARY})
ADD_EXECUTABLE(example-push example-push.c) ADD_EXECUTABLE(example-push example-push.c)
TARGET_LINK_LIBRARIES(example-push hiredis) TARGET_LINK_LIBRARIES(example-push ${HIREDIS_DEFAULT_LIBRARY})
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment