diff options
| -rw-r--r-- | CMakeLists.txt | 67 | ||||
| -rw-r--r-- | hiredis-config.cmake.in | 13 | ||||
| -rw-r--r-- | hiredis_ssl-config.cmake.in | 13 | ||||
| -rw-r--r-- | ssl.c | 23 | 
4 files changed, 109 insertions, 7 deletions
| diff --git a/CMakeLists.txt b/CMakeLists.txt index 04a03ee..b402b3d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,12 @@ SET(hiredis_sources      sockcompat.c      alloc.c) +SET(hiredis_sources ${hiredis_sources}) + +IF(WIN32) +    ADD_COMPILE_DEFINITIONS(_CRT_SECURE_NO_WARNINGS WIN32_LEAN_AND_MEAN) +ENDIF() +  ADD_LIBRARY(hiredis SHARED ${hiredis_sources})  SET_TARGET_PROPERTIES(hiredis @@ -41,12 +47,16 @@ SET_TARGET_PROPERTIES(hiredis  IF(WIN32 OR MINGW)      TARGET_LINK_LIBRARIES(hiredis PRIVATE ws2_32)  ENDIF() -TARGET_INCLUDE_DIRECTORIES(hiredis PUBLIC .) + +TARGET_INCLUDE_DIRECTORIES(hiredis PUBLIC $<INSTALL_INTERFACE:.> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)  CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY)  INSTALL(TARGETS hiredis -    DESTINATION "${CMAKE_INSTALL_LIBDIR}") +    EXPORT hiredis-targets +    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})  INSTALL(FILES hiredis.h read.h sds.h async.h alloc.h      DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis) @@ -57,6 +67,26 @@ INSTALL(DIRECTORY adapters  INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis.pc      DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +export(EXPORT hiredis-targets +    FILE "${CMAKE_CURRENT_BINARY_DIR}/hiredis-targets.cmake" +    NAMESPACE hiredis::) + +SET(CMAKE_CONF_INSTALL_DIR share/hiredis) +SET(INCLUDE_INSTALL_DIR include) +include(CMakePackageConfigHelpers) +configure_package_config_file(hiredis-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/hiredis-config.cmake +                              INSTALL_DESTINATION ${CMAKE_CONF_INSTALL_DIR} +                              PATH_VARS INCLUDE_INSTALL_DIR) + +INSTALL(EXPORT hiredis-targets +        FILE hiredis-targets.cmake +        NAMESPACE hiredis:: +        DESTINATION ${CMAKE_CONF_INSTALL_DIR}) + +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis-config.cmake +        DESTINATION ${CMAKE_CONF_INSTALL_DIR}) + +  IF(ENABLE_SSL)      IF (NOT OPENSSL_ROOT_DIR)          IF (APPLE) @@ -64,23 +94,50 @@ IF(ENABLE_SSL)          ENDIF()      ENDIF()      FIND_PACKAGE(OpenSSL REQUIRED) -    ADD_LIBRARY(hiredis_ssl SHARED +    SET(hiredis_ssl_sources           ssl.c) +    ADD_LIBRARY(hiredis_ssl SHARED +            ${hiredis_ssl_sources})      SET_TARGET_PROPERTIES(hiredis_ssl -        PROPERTIES +        PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE          VERSION "${HIREDIS_SONAME}") + +      TARGET_INCLUDE_DIRECTORIES(hiredis_ssl PRIVATE "${OPENSSL_INCLUDE_DIR}")      TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE ${OPENSSL_LIBRARIES}) +    IF (WIN32 OR MINGW) +        TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE hiredis) +    ENDIF()      CONFIGURE_FILE(hiredis_ssl.pc.in hiredis_ssl.pc @ONLY)      INSTALL(TARGETS hiredis_ssl -        DESTINATION "${CMAKE_INSTALL_LIBDIR}") +        EXPORT hiredis_ssl-targets +        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})      INSTALL(FILES hiredis_ssl.h          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)      INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis_ssl.pc          DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + +    export(EXPORT hiredis_ssl-targets +           FILE "${CMAKE_CURRENT_BINARY_DIR}/hiredis_ssl-targets.cmake" +           NAMESPACE hiredis::) + +    SET(CMAKE_CONF_INSTALL_DIR share/hiredis_ssl) +    configure_package_config_file(hiredis_ssl-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/hiredis_ssl-config.cmake +                                  INSTALL_DESTINATION ${CMAKE_CONF_INSTALL_DIR} +                                  PATH_VARS INCLUDE_INSTALL_DIR) + +    INSTALL(EXPORT hiredis_ssl-targets +        FILE hiredis_ssl-targets.cmake +        NAMESPACE hiredis:: +        DESTINATION ${CMAKE_CONF_INSTALL_DIR}) + +    INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis_ssl-config.cmake +        DESTINATION ${CMAKE_CONF_INSTALL_DIR})  ENDIF()  IF(NOT DISABLE_TESTS) diff --git a/hiredis-config.cmake.in b/hiredis-config.cmake.in new file mode 100644 index 0000000..98851dc --- /dev/null +++ b/hiredis-config.cmake.in @@ -0,0 +1,13 @@ +@PACKAGE_INIT@ + +set_and_check(hiredis_INCLUDEDIR "@PACKAGE_INCLUDE_INSTALL_DIR@") + +IF (NOT TARGET hiredis::hiredis) +	INCLUDE(${CMAKE_CURRENT_LIST_DIR}/hiredis-targets.cmake) +ENDIF() + +SET(hiredis_LIBRARIES hiredis::hiredis) +SET(hiredis_INCLUDE_DIRS ${hiredis_INCLUDEDIR}) + +check_required_components(hiredis) + diff --git a/hiredis_ssl-config.cmake.in b/hiredis_ssl-config.cmake.in new file mode 100644 index 0000000..9a283df --- /dev/null +++ b/hiredis_ssl-config.cmake.in @@ -0,0 +1,13 @@ +@PACKAGE_INIT@ + +set_and_check(hiredis_ssl_INCLUDEDIR "@PACKAGE_INCLUDE_INSTALL_DIR@") + +IF (NOT TARGET hiredis::hiredis_ssl) +	INCLUDE(${CMAKE_CURRENT_LIST_DIR}/hiredis_ssl-targets.cmake) +ENDIF() + +SET(hiredis_ssl_LIBRARIES hiredis::hiredis_ssl) +SET(hiredis_ssl_INCLUDE_DIRS ${hiredis_ssl_INCLUDEDIR}) + +check_required_components(hiredis_ssl) + @@ -34,13 +34,18 @@  #include "async.h"  #include <assert.h> -#include <pthread.h>  #include <errno.h>  #include <string.h> +#ifdef WIN32 +#include <windows.h> +#else +#include <pthread.h> +#endif  #include <openssl/ssl.h>  #include <openssl/err.h> +#include "win32.h"  #include "async_private.h"  void __redisSetError(redisContext *c, int type, const char *str); @@ -119,6 +124,18 @@ static void sslLogCallback(const SSL *ssl, int where, int ret) {  #endif  #ifdef HIREDIS_USE_CRYPTO_LOCKS +#ifdef WIN32 +typedef CRITICAL_SECTION sslLockType; +static void sslLockInit(sslLockType* l) { +    InitializeCriticalSection(l); +} +static void sslLockAcquire(sslLockType* l) { +    EnterCriticalSection(l); +} +static void sslLockRelease(sslLockType* l) { +    LeaveCriticalSection(l); +} +#else  typedef pthread_mutex_t sslLockType;  static void sslLockInit(sslLockType *l) {      pthread_mutex_init(l, NULL); @@ -129,7 +146,9 @@ static void sslLockAcquire(sslLockType *l) {  static void sslLockRelease(sslLockType *l) {      pthread_mutex_unlock(l);  } -static pthread_mutex_t *ossl_locks; +#endif + +static sslLockType* ossl_locks;  static void opensslDoLock(int mode, int lkid, const char *f, int line) {      sslLockType *l = ossl_locks + lkid; | 
