|
@@ -0,0 +1,192 @@
|
|
|
+diff --git a/CMakeLists.txt b/CMakeLists.txt
|
|
|
+index f86c9b7..b545e21 100644
|
|
|
+--- a/CMakeLists.txt
|
|
|
++++ b/CMakeLists.txt
|
|
|
+@@ -1,10 +1,9 @@
|
|
|
+ CMAKE_MINIMUM_REQUIRED(VERSION 3.4.0)
|
|
|
+-INCLUDE(GNUInstallDirs)
|
|
|
+-PROJECT(hiredis)
|
|
|
+
|
|
|
+ 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)
|
|
|
++OPTION(ENABLE_SSL_TESTS "Should we test SSL connections" OFF)
|
|
|
++OPTION(ENABLE_ASYNC_TESTS "Should we run all asynchronous API tests" OFF)
|
|
|
+
|
|
|
+ MACRO(getVersionBit name)
|
|
|
+ SET(VERSION_REGEX "^#define ${name} (.+)$")
|
|
|
+@@ -20,7 +19,13 @@ getVersionBit(HIREDIS_SONAME)
|
|
|
+ SET(VERSION "${HIREDIS_MAJOR}.${HIREDIS_MINOR}.${HIREDIS_PATCH}")
|
|
|
+ MESSAGE("Detected version: ${VERSION}")
|
|
|
+
|
|
|
+-PROJECT(hiredis VERSION "${VERSION}")
|
|
|
++PROJECT(hiredis LANGUAGES "C" VERSION "${VERSION}")
|
|
|
++INCLUDE(GNUInstallDirs)
|
|
|
++
|
|
|
++# Hiredis requires C99
|
|
|
++SET(CMAKE_C_STANDARD 99)
|
|
|
++SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
++SET(CMAKE_DEBUG_POSTFIX d)
|
|
|
+
|
|
|
+ SET(ENABLE_EXAMPLES OFF CACHE BOOL "Enable building hiredis examples")
|
|
|
+
|
|
|
+@@ -41,30 +46,80 @@ IF(WIN32)
|
|
|
+ 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_TARGET_PROPERTIES(hiredis
|
|
|
+ PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE
|
|
|
+ VERSION "${HIREDIS_SONAME}")
|
|
|
++SET_TARGET_PROPERTIES(hiredis_static
|
|
|
++ PROPERTIES COMPILE_PDB_NAME hiredis_static)
|
|
|
++SET_TARGET_PROPERTIES(hiredis_static
|
|
|
++ PROPERTIES COMPILE_PDB_NAME_DEBUG hiredis_static${CMAKE_DEBUG_POSTFIX})
|
|
|
+ IF(WIN32 OR MINGW)
|
|
|
+- TARGET_LINK_LIBRARIES(hiredis PRIVATE ws2_32)
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis PUBLIC ws2_32 crypt32)
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis_static PUBLIC ws2_32 crypt32)
|
|
|
++ELSEIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis PUBLIC m)
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis_static PUBLIC m)
|
|
|
++ELSEIF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis PUBLIC socket)
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis_static PUBLIC socket)
|
|
|
+ ENDIF()
|
|
|
+
|
|
|
+-TARGET_INCLUDE_DIRECTORIES(hiredis PUBLIC $<INSTALL_INTERFACE:.> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
|
|
|
++TARGET_INCLUDE_DIRECTORIES(hiredis 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)
|
|
|
+
|
|
|
+-INSTALL(TARGETS hiredis
|
|
|
++set(CPACK_PACKAGE_VENDOR "Redis")
|
|
|
++set(CPACK_PACKAGE_DESCRIPTION "\
|
|
|
++Hiredis is a minimalistic C client library for the Redis database.
|
|
|
++
|
|
|
++It is minimalistic because it just adds minimal support for the protocol, \
|
|
|
++but at the same time it uses a high level printf-alike API in order to make \
|
|
|
++it much higher level than otherwise suggested by its minimal code base and the \
|
|
|
++lack of explicit bindings for every Redis command.
|
|
|
++
|
|
|
++Apart from supporting sending commands and receiving replies, it comes with a \
|
|
|
++reply parser that is decoupled from the I/O layer. It is a stream parser designed \
|
|
|
++for easy reusability, which can for instance be used in higher level language bindings \
|
|
|
++for efficient reply parsing.
|
|
|
++
|
|
|
++Hiredis only supports the binary-safe Redis protocol, so you can use it with any Redis \
|
|
|
++version >= 1.2.0.
|
|
|
++
|
|
|
++The library comes with multiple APIs. There is the synchronous API, the asynchronous API \
|
|
|
++and the reply parsing API.")
|
|
|
++set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/redis/hiredis")
|
|
|
++set(CPACK_PACKAGE_CONTACT "michael dot grunder at gmail dot com")
|
|
|
++set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
|
|
++set(CPACK_RPM_PACKAGE_AUTOREQPROV ON)
|
|
|
++
|
|
|
++include(CPack)
|
|
|
++
|
|
|
++INSTALL(TARGETS hiredis hiredis_static
|
|
|
+ EXPORT hiredis-targets
|
|
|
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
|
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
|
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
|
+
|
|
|
++if (MSVC)
|
|
|
++ INSTALL(FILES $<TARGET_PDB_FILE:hiredis>
|
|
|
++ DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
|
++ CONFIGURATIONS Debug RelWithDebInfo)
|
|
|
++ INSTALL(FILES $<TARGET_FILE_DIR:hiredis_static>/$<TARGET_FILE_BASE_NAME:hiredis_static>.pdb
|
|
|
++ DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
|
++ CONFIGURATIONS Debug RelWithDebInfo)
|
|
|
++endif()
|
|
|
++
|
|
|
+ INSTALL(FILES hiredis.h read.h sds.h async.h alloc.h
|
|
|
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)
|
|
|
+-
|
|
|
++
|
|
|
+ INSTALL(DIRECTORY adapters
|
|
|
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)
|
|
|
+-
|
|
|
++
|
|
|
+ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis.pc
|
|
|
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
+
|
|
|
+@@ -95,10 +150,12 @@ IF(ENABLE_SSL)
|
|
|
+ ENDIF()
|
|
|
+ ENDIF()
|
|
|
+ FIND_PACKAGE(OpenSSL REQUIRED)
|
|
|
+- SET(hiredis_ssl_sources
|
|
|
++ SET(hiredis_ssl_sources
|
|
|
+ ssl.c)
|
|
|
+ ADD_LIBRARY(hiredis_ssl SHARED
|
|
|
+ ${hiredis_ssl_sources})
|
|
|
++ ADD_LIBRARY(hiredis_ssl_static STATIC
|
|
|
++ ${hiredis_ssl_sources})
|
|
|
+
|
|
|
+ IF (APPLE)
|
|
|
+ SET_PROPERTY(TARGET hiredis_ssl PROPERTY LINK_FLAGS "-Wl,-undefined -Wl,dynamic_lookup")
|
|
|
+@@ -108,23 +165,39 @@ IF(ENABLE_SSL)
|
|
|
+ PROPERTIES
|
|
|
+ WINDOWS_EXPORT_ALL_SYMBOLS TRUE
|
|
|
+ VERSION "${HIREDIS_SONAME}")
|
|
|
++ SET_TARGET_PROPERTIES(hiredis_ssl_static
|
|
|
++ PROPERTIES COMPILE_PDB_NAME hiredis_ssl_static)
|
|
|
++ SET_TARGET_PROPERTIES(hiredis_ssl_static
|
|
|
++ PROPERTIES COMPILE_PDB_NAME_DEBUG hiredis_ssl_static${CMAKE_DEBUG_POSTFIX})
|
|
|
+
|
|
|
+ TARGET_INCLUDE_DIRECTORIES(hiredis_ssl PRIVATE "${OPENSSL_INCLUDE_DIR}")
|
|
|
++ TARGET_INCLUDE_DIRECTORIES(hiredis_ssl_static PRIVATE "${OPENSSL_INCLUDE_DIR}")
|
|
|
++
|
|
|
+ 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
|
|
|
++ INSTALL(TARGETS hiredis_ssl hiredis_ssl_static
|
|
|
+ EXPORT hiredis_ssl-targets
|
|
|
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
|
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
|
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
|
+
|
|
|
++ if (MSVC)
|
|
|
++ INSTALL(FILES $<TARGET_PDB_FILE:hiredis_ssl>
|
|
|
++ DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
|
++ CONFIGURATIONS Debug RelWithDebInfo)
|
|
|
++ INSTALL(FILES $<TARGET_FILE_DIR:hiredis_ssl_static>/$<TARGET_FILE_BASE_NAME:hiredis_ssl_static>.pdb
|
|
|
++ DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
|
++ CONFIGURATIONS Debug RelWithDebInfo)
|
|
|
++ endif()
|
|
|
++
|
|
|
+ INSTALL(FILES hiredis_ssl.h
|
|
|
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)
|
|
|
+-
|
|
|
++
|
|
|
+ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis_ssl.pc
|
|
|
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
+
|
|
|
+@@ -149,11 +222,14 @@ ENDIF()
|
|
|
+ IF(NOT DISABLE_TESTS)
|
|
|
+ ENABLE_TESTING()
|
|
|
+ ADD_EXECUTABLE(hiredis-test test.c)
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis-test hiredis)
|
|
|
+ IF(ENABLE_SSL_TESTS)
|
|
|
+ ADD_DEFINITIONS(-DHIREDIS_TEST_SSL=1)
|
|
|
+- TARGET_LINK_LIBRARIES(hiredis-test hiredis hiredis_ssl)
|
|
|
+- ELSE()
|
|
|
+- TARGET_LINK_LIBRARIES(hiredis-test hiredis)
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis-test hiredis_ssl)
|
|
|
++ ENDIF()
|
|
|
++ IF(ENABLE_ASYNC_TESTS)
|
|
|
++ ADD_DEFINITIONS(-DHIREDIS_TEST_ASYNC=1)
|
|
|
++ TARGET_LINK_LIBRARIES(hiredis-test event)
|
|
|
+ ENDIF()
|
|
|
+ ADD_TEST(NAME hiredis-test
|
|
|
+ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/test.sh)
|