Added CMake package config and fixed hiredis_ssl on Windows (#783)
* Add CMake package configuration so hiredis can be more easily included in other projects. * Fixes hiredis_ssl such that it compiles and works in windows Co-authored-by: nrivera <nrivera@blizzard.com> Co-authored-by: Nick <heronr1@gmail.com>
This commit is contained in:
parent
b314c0df3d
commit
ec08c2b94a
@ -33,6 +33,12 @@ SET(hiredis_sources
|
|||||||
sockcompat.c
|
sockcompat.c
|
||||||
alloc.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})
|
ADD_LIBRARY(hiredis SHARED ${hiredis_sources})
|
||||||
|
|
||||||
SET_TARGET_PROPERTIES(hiredis
|
SET_TARGET_PROPERTIES(hiredis
|
||||||
@ -41,12 +47,16 @@ SET_TARGET_PROPERTIES(hiredis
|
|||||||
IF(WIN32 OR MINGW)
|
IF(WIN32 OR MINGW)
|
||||||
TARGET_LINK_LIBRARIES(hiredis PRIVATE ws2_32)
|
TARGET_LINK_LIBRARIES(hiredis PRIVATE ws2_32)
|
||||||
ENDIF()
|
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)
|
CONFIGURE_FILE(hiredis.pc.in hiredis.pc @ONLY)
|
||||||
|
|
||||||
INSTALL(TARGETS hiredis
|
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
|
INSTALL(FILES hiredis.h read.h sds.h async.h alloc.h
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)
|
||||||
@ -57,6 +67,26 @@ INSTALL(DIRECTORY adapters
|
|||||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis.pc
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis.pc
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
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(ENABLE_SSL)
|
||||||
IF (NOT OPENSSL_ROOT_DIR)
|
IF (NOT OPENSSL_ROOT_DIR)
|
||||||
IF (APPLE)
|
IF (APPLE)
|
||||||
@ -64,23 +94,50 @@ IF(ENABLE_SSL)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
FIND_PACKAGE(OpenSSL REQUIRED)
|
FIND_PACKAGE(OpenSSL REQUIRED)
|
||||||
ADD_LIBRARY(hiredis_ssl SHARED
|
SET(hiredis_ssl_sources
|
||||||
ssl.c)
|
ssl.c)
|
||||||
|
ADD_LIBRARY(hiredis_ssl SHARED
|
||||||
|
${hiredis_ssl_sources})
|
||||||
SET_TARGET_PROPERTIES(hiredis_ssl
|
SET_TARGET_PROPERTIES(hiredis_ssl
|
||||||
PROPERTIES
|
PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE
|
||||||
VERSION "${HIREDIS_SONAME}")
|
VERSION "${HIREDIS_SONAME}")
|
||||||
|
|
||||||
|
|
||||||
TARGET_INCLUDE_DIRECTORIES(hiredis_ssl PRIVATE "${OPENSSL_INCLUDE_DIR}")
|
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})
|
||||||
|
IF (WIN32 OR MINGW)
|
||||||
|
TARGET_LINK_LIBRARIES(hiredis_ssl PRIVATE hiredis)
|
||||||
|
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
|
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
|
INSTALL(FILES hiredis_ssl.h
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/hiredis)
|
||||||
|
|
||||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis_ssl.pc
|
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/hiredis_ssl.pc
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
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()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT DISABLE_TESTS)
|
IF(NOT DISABLE_TESTS)
|
||||||
|
13
hiredis-config.cmake.in
Normal file
13
hiredis-config.cmake.in
Normal file
@ -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)
|
||||||
|
|
13
hiredis_ssl-config.cmake.in
Normal file
13
hiredis_ssl-config.cmake.in
Normal file
@ -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)
|
||||||
|
|
23
ssl.c
23
ssl.c
@ -34,13 +34,18 @@
|
|||||||
#include "async.h"
|
#include "async.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <pthread.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include <pthread.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
|
||||||
|
#include "win32.h"
|
||||||
#include "async_private.h"
|
#include "async_private.h"
|
||||||
|
|
||||||
void __redisSetError(redisContext *c, int type, const char *str);
|
void __redisSetError(redisContext *c, int type, const char *str);
|
||||||
@ -119,6 +124,18 @@ static void sslLogCallback(const SSL *ssl, int where, int ret) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HIREDIS_USE_CRYPTO_LOCKS
|
#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;
|
typedef pthread_mutex_t sslLockType;
|
||||||
static void sslLockInit(sslLockType *l) {
|
static void sslLockInit(sslLockType *l) {
|
||||||
pthread_mutex_init(l, NULL);
|
pthread_mutex_init(l, NULL);
|
||||||
@ -129,7 +146,9 @@ static void sslLockAcquire(sslLockType *l) {
|
|||||||
static void sslLockRelease(sslLockType *l) {
|
static void sslLockRelease(sslLockType *l) {
|
||||||
pthread_mutex_unlock(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) {
|
static void opensslDoLock(int mode, int lkid, const char *f, int line) {
|
||||||
sslLockType *l = ossl_locks + lkid;
|
sslLockType *l = ossl_locks + lkid;
|
||||||
|
Loading…
Reference in New Issue
Block a user