From 286ba29771611abfaf126527141cac1d406c7eaf Mon Sep 17 00:00:00 2001 From: Fabrice Fontaine Date: Thu, 22 Dec 2022 23:00:56 +0100 Subject: [PATCH] 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: Fabrice Fontaine [Upstream status: https://github.com/redis/hiredis/pull/1147] --- CMakeLists.txt | 70 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d52d0c..66a1383 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ 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(DISABLE_TESTS "If tests should be compiled or not" OFF) OPTION(ENABLE_SSL_TESTS "Should we test SSL connections" OFF) @@ -44,35 +45,49 @@ IF(WIN32) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -DWIN32_LEAN_AND_MEAN) ENDIF() -ADD_LIBRARY(hiredis SHARED ${hiredis_sources}) ADD_LIBRARY(hiredis_static STATIC ${hiredis_sources}) -ADD_LIBRARY(hiredis::hiredis ALIAS hiredis) ADD_LIBRARY(hiredis::hiredis_static ALIAS hiredis_static) +SET(HIREDIS_DEFAULT_LIBRARY hiredis_static) +SET(HIREDIS_TARGETS hiredis_static) IF(NOT MSVC) SET_TARGET_PROPERTIES(hiredis_static PROPERTIES OUTPUT_NAME hiredis) ENDIF() -SET_TARGET_PROPERTIES(hiredis - PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE - VERSION "${HIREDIS_SONAME}") +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 + VERSION "${HIREDIS_SONAME}") +ENDIF() IF(MSVC) SET_TARGET_PROPERTIES(hiredis_static PROPERTIES COMPILE_FLAGS /Z7) ENDIF() IF(WIN32 OR MINGW) - TARGET_LINK_LIBRARIES(hiredis PUBLIC ws2_32 crypt32) + IF(BUILD_SHARED_LIBS) + TARGET_LINK_LIBRARIES(hiredis PUBLIC ws2_32 crypt32) + ENDIF() TARGET_LINK_LIBRARIES(hiredis_static PUBLIC ws2_32 crypt32) ELSEIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - TARGET_LINK_LIBRARIES(hiredis PUBLIC m) + IF(BUILD_SHARED_LIBS) + TARGET_LINK_LIBRARIES(hiredis PUBLIC m) + ENDIF() TARGET_LINK_LIBRARIES(hiredis_static PUBLIC m) ELSEIF(CMAKE_SYSTEM_NAME MATCHES "SunOS") - TARGET_LINK_LIBRARIES(hiredis PUBLIC socket) + IF(BUILD_SHARED_LIBS) + TARGET_LINK_LIBRARIES(hiredis PUBLIC socket) + ENDIF() TARGET_LINK_LIBRARIES(hiredis_static PUBLIC socket) ENDIF() -TARGET_INCLUDE_DIRECTORIES(hiredis PUBLIC $ $) +IF(BUILD_SHARED_LIBS) + TARGET_INCLUDE_DIRECTORIES(hiredis PUBLIC $ $) +ENDIF() TARGET_INCLUDE_DIRECTORIES(hiredis_static PUBLIC $ $) CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY) @@ -103,7 +118,7 @@ set(CPACK_RPM_PACKAGE_AUTOREQPROV ON) include(CPack) -INSTALL(TARGETS hiredis hiredis_static +INSTALL(TARGETS ${HIREDIS_TARGETS} EXPORT hiredis-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -161,39 +176,50 @@ IF(ENABLE_SSL) FIND_PACKAGE(OpenSSL REQUIRED) SET(hiredis_ssl_sources ssl.c) - ADD_LIBRARY(hiredis_ssl SHARED - ${hiredis_ssl_sources}) + ADD_LIBRARY(hiredis_ssl_static STATIC ${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) SET_TARGET_PROPERTIES(hiredis_ssl_static PROPERTIES OUTPUT_NAME hiredis_ssl) ENDIF() - IF (APPLE) + IF (APPLE AND BUILD_SHARED_LIBS) SET_PROPERTY(TARGET hiredis_ssl PROPERTY LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup") ENDIF() - SET_TARGET_PROPERTIES(hiredis_ssl - PROPERTIES - WINDOWS_EXPORT_ALL_SYMBOLS TRUE - VERSION "${HIREDIS_SONAME}") + IF(BUILD_SHARED_LIBS) + SET_TARGET_PROPERTIES(hiredis_ssl + PROPERTIES + WINDOWS_EXPORT_ALL_SYMBOLS TRUE + VERSION "${HIREDIS_SONAME}") + ENDIF() IF(MSVC) SET_TARGET_PROPERTIES(hiredis_ssl_static PROPERTIES COMPILE_FLAGS /Z7) ENDIF() - TARGET_INCLUDE_DIRECTORIES(hiredis_ssl 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}) + ENDIF() - TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE ${OPENSSL_LIBRARIES}) IF (WIN32 OR MINGW) TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE hiredis) TARGET_LINK_LIBRARIES(hiredis_ssl_static PUBLIC hiredis_static) ENDIF() 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 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -236,10 +262,10 @@ ENDIF() IF(NOT DISABLE_TESTS) ENABLE_TESTING() ADD_EXECUTABLE(hiredis-test test.c) - TARGET_LINK_LIBRARIES(hiredis-test hiredis) + TARGET_LINK_LIBRARIES(hiredis-test ${HIREDIS_DEFAULT_LIBRARY}) IF(ENABLE_SSL_TESTS) ADD_DEFINITIONS(-DHIREDIS_TEST_SSL=1) - TARGET_LINK_LIBRARIES(hiredis-test hiredis_ssl) + TARGET_LINK_LIBRARIES(hiredis-test ${HIREDIS_SSL_DEFAULT_LIBRARY}) ENDIF() IF(ENABLE_ASYNC_TESTS) ADD_DEFINITIONS(-DHIREDIS_TEST_ASYNC=1) -- 2.35.1