From fc761ebb72a40574200b6b99e81458ead68da12a Mon Sep 17 00:00:00 2001 From: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com> Date: Thu, 16 Jul 2020 06:55:31 +0800 Subject: [PATCH] [hiredis] Fix feature ssl build error on windows (#12354) * [hiredis] Fix feature ssl build error on windows * Fix feature example build error on windows --- ports/hiredis/CONTROL | 5 +- ports/hiredis/fix-feature-example.patch | 183 ++++++++++-------- .../fix-pthread.h-not-found-on-windows.patch | 16 ++ ports/hiredis/portfile.cmake | 3 +- 4 files changed, 128 insertions(+), 79 deletions(-) create mode 100644 ports/hiredis/fix-pthread.h-not-found-on-windows.patch diff --git a/ports/hiredis/CONTROL b/ports/hiredis/CONTROL index 0bb9cb9d9..b16d54e57 100644 --- a/ports/hiredis/CONTROL +++ b/ports/hiredis/CONTROL @@ -1,5 +1,6 @@ Source: hiredis -Version: 2019-11-2-1 +Version: 2019-11-2 +Port-Version: 2 Homepage: https://github.com/redis/hiredis Description: Hiredis is a minimalistic C client library for the Redis database. @@ -9,4 +10,4 @@ Build-Depends: openssl Feature: example Description: Build example -Build-Depends: libevent, pthread \ No newline at end of file +Build-Depends: libevent, pthread, libuv \ No newline at end of file diff --git a/ports/hiredis/fix-feature-example.patch b/ports/hiredis/fix-feature-example.patch index a61900185..4f36087c6 100644 --- a/ports/hiredis/fix-feature-example.patch +++ b/ports/hiredis/fix-feature-example.patch @@ -1,76 +1,107 @@ -diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt -index dd3a313..0df75d5 100644 ---- a/examples/CMakeLists.txt -+++ b/examples/CMakeLists.txt -@@ -19,10 +19,17 @@ if (LIBEV) - TARGET_LINK_LIBRARIES(example-libev hiredis ev) - ENDIF() - --FIND_PATH(LIBEVENT event.h) --if (LIBEVENT) -+FIND_PACKAGE(Libevent CONFIG REQUIRED) -+FIND_PATH(LIBEVENT_INCLUDES evutil.h) -+if (BUILD_SHARED_LIBS) -+ set(LIBEVENT_LIBS ${LIBEVENT_SHARED_LIBRARIES}) -+else() -+ set(LIBEVENT_LIBS ${LIBEVENT_STATIC_LIBRARIES}) -+endif() -+if (UNIX) - ADD_EXECUTABLE(example-libevent example-libevent) -- TARGET_LINK_LIBRARIES(example-libevent hiredis event) -+ TARGET_LINK_LIBRARIES(example-libevent hiredis ${LIBEVENT_LIBS}) -+ TARGET_INCLUDE_DIRECTORIES(example-libevent PRIVATE ${LIBEVENT_INCLUDES}) - ENDIF() - - FIND_PATH(LIBUV uv.h) -@@ -38,9 +45,17 @@ IF (APPLE) - ENDIF() - - IF (ENABLE_SSL) -+ FIND_PACKAGE(OpenSSL REQUIRED) -+ IF (WIN32) -+ FIND_PACKAGE(pthreads REQUIRED) -+ SET(THREADS_LIBS PThreads4W::PThreads4W) -+ ELSE() -+ FIND_PACKAGE(Threads) -+ SET(THREADS_LIBS ${CMAKE_THREAD_LIBS_INIT}) -+ ENDIF() - ADD_EXECUTABLE(example-ssl example-ssl.c) -- TARGET_LINK_LIBRARIES(example-ssl hiredis hiredis_ssl) -+ TARGET_LINK_LIBRARIES(example-ssl hiredis hiredis_ssl OpenSSL::SSL OpenSSL::Crypto ${THREADS_LIBS}) - ENDIF() - - ADD_EXECUTABLE(example example.c) --TARGET_LINK_LIBRARIES(example hiredis) -+TARGET_LINK_LIBRARIES(example hiredis ${LIBEVENT_LIBS}) -\ No newline at end of file -diff --git a/examples/example-ssl.c b/examples/example-ssl.c -index 81f4648..9f42923 100644 ---- a/examples/example-ssl.c -+++ b/examples/example-ssl.c -@@ -1,6 +1,10 @@ - #include - #include - #include -+#ifdef _WIN32 -+#include -+#include -+#endif - - #include - #include -diff --git a/examples/example.c b/examples/example.c -index 0e93fc8..339e322 100644 ---- a/examples/example.c -+++ b/examples/example.c -@@ -1,6 +1,10 @@ - #include - #include - #include -+#ifdef _WIN32 -+#include -+#include -+#endif - - #include - +diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt +index dd3a313..8c69d3a 100644 +--- a/examples/CMakeLists.txt ++++ b/examples/CMakeLists.txt +@@ -19,16 +19,30 @@ if (LIBEV) + TARGET_LINK_LIBRARIES(example-libev hiredis ev) + ENDIF() + +-FIND_PATH(LIBEVENT event.h) +-if (LIBEVENT) ++FIND_PACKAGE(Libevent CONFIG REQUIRED) ++FIND_PATH(LIBEVENT_INCLUDES evutil.h) ++if (BUILD_SHARED_LIBS) ++ set(LIBEVENT_LIBS ${LIBEVENT_SHARED_LIBRARIES}) ++else() ++ set(LIBEVENT_LIBS ${LIBEVENT_STATIC_LIBRARIES}) ++endif() ++if (UNIX) + ADD_EXECUTABLE(example-libevent example-libevent) +- TARGET_LINK_LIBRARIES(example-libevent hiredis event) ++ TARGET_LINK_LIBRARIES(example-libevent hiredis ${LIBEVENT_LIBS}) ++ TARGET_INCLUDE_DIRECTORIES(example-libevent PRIVATE ${LIBEVENT_INCLUDES}) + ENDIF() + ++FIND_LIBRARY(UV_LIBRARY libuv) + FIND_PATH(LIBUV uv.h) + IF (LIBUV) + ADD_EXECUTABLE(example-libuv example-libuv.c) +- TARGET_LINK_LIBRARIES(example-libuv hiredis uv) ++ if(WIN32) ++ set(LIB_LISTS Iphlpapi.lib Psapi.lib Userenv.lib) ++ else() ++ set(LIB_LISTS) ++ endif() ++ TARGET_LINK_LIBRARIES(example-libuv hiredis ${UV_LIBRARY} ${LIB_LISTS}) ++ TARGET_INCLUDE_DIRECTORIES(example-libuv PRIVATE ${LIBUV}) + ENDIF() + + IF (APPLE) +@@ -38,9 +52,21 @@ IF (APPLE) + ENDIF() + + IF (ENABLE_SSL) ++ FIND_PACKAGE(OpenSSL REQUIRED) ++ IF (WIN32) ++ FIND_PACKAGE(pthreads REQUIRED) ++ SET(THREADS_LIBS PThreads4W::PThreads4W) ++ ELSE() ++ FIND_PACKAGE(Threads) ++ SET(THREADS_LIBS ${CMAKE_THREAD_LIBS_INIT}) ++ ENDIF() + ADD_EXECUTABLE(example-ssl example-ssl.c) +- TARGET_LINK_LIBRARIES(example-ssl hiredis hiredis_ssl) ++ if(WIN32) ++ TARGET_LINK_LIBRARIES(example-ssl hiredis hiredis_ssl OpenSSL::SSL OpenSSL::Crypto ${THREADS_LIBS} crypt32.lib) ++ else() ++ TARGET_LINK_LIBRARIES(example-ssl hiredis hiredis_ssl OpenSSL::SSL OpenSSL::Crypto ${THREADS_LIBS}) ++ endif() + ENDIF() + + ADD_EXECUTABLE(example example.c) +-TARGET_LINK_LIBRARIES(example hiredis) ++TARGET_LINK_LIBRARIES(example hiredis ${LIBEVENT_LIBS}) +diff --git a/examples/example-libuv.c b/examples/example-libuv.c +index a5462d4..9b7ca3e 100644 +--- a/examples/example-libuv.c ++++ b/examples/example-libuv.c +@@ -33,7 +33,9 @@ void disconnectCallback(const redisAsyncContext *c, int status) { + } + + int main (int argc, char **argv) { ++#ifndef _WIN32 + signal(SIGPIPE, SIG_IGN); ++#endif + uv_loop_t* loop = uv_default_loop(); + + redisAsyncContext *c = redisAsyncConnect("127.0.0.1", 6379); +diff --git a/examples/example-ssl.c b/examples/example-ssl.c +index 81f4648..9f42923 100644 +--- a/examples/example-ssl.c ++++ b/examples/example-ssl.c +@@ -1,6 +1,10 @@ + #include + #include + #include ++#ifdef _WIN32 ++#include ++#include ++#endif + + #include + #include +diff --git a/examples/example.c b/examples/example.c +index 0e93fc8..339e322 100644 +--- a/examples/example.c ++++ b/examples/example.c +@@ -1,6 +1,10 @@ + #include + #include + #include ++#ifdef _WIN32 ++#include ++#include ++#endif + + #include + diff --git a/ports/hiredis/fix-pthread.h-not-found-on-windows.patch b/ports/hiredis/fix-pthread.h-not-found-on-windows.patch new file mode 100644 index 000000000..e927bc431 --- /dev/null +++ b/ports/hiredis/fix-pthread.h-not-found-on-windows.patch @@ -0,0 +1,16 @@ +diff --git a/ssl.c b/ssl.c +index 78ab9e4..768f304 100644 +--- a/ssl.c ++++ b/ssl.c +@@ -34,7 +34,11 @@ + #include "async.h" + + #include ++#ifdef _WIN32 ++#include ++#else + #include ++#endif + #include + #include + diff --git a/ports/hiredis/portfile.cmake b/ports/hiredis/portfile.cmake index 833d428ee..4d3a97c7e 100644 --- a/ports/hiredis/portfile.cmake +++ b/ports/hiredis/portfile.cmake @@ -12,6 +12,7 @@ vcpkg_from_github( fix-feature-example.patch support-static-in-win.patch fix-timeval.patch + fix-pthread.h-not-found-on-windows.patch ) vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS @@ -32,4 +33,4 @@ vcpkg_copy_pdbs() file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) # Handle copyright -file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) +file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) \ No newline at end of file