浏览代码

hiredis: fix cmake. (#1052)

Chen Yufei 3 年之前
父节点
当前提交
f4ecc3c387
共有 2 个文件被更改,包括 13 次插入205 次删除
  1. 0 201
      packages/h/hiredis/patches/v1.0.2/cmake.patch
  2. 13 4
      packages/h/hiredis/xmake.lua

+ 0 - 201
packages/h/hiredis/patches/v1.0.2/cmake.patch

@@ -1,201 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index f86c9b7..55ae30b 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)
- 
-@@ -72,7 +127,7 @@ export(EXPORT hiredis-targets
-     FILE "${CMAKE_CURRENT_BINARY_DIR}/hiredis-targets.cmake"
-     NAMESPACE hiredis::)
- 
--SET(CMAKE_CONF_INSTALL_DIR share/hiredis)
-+SET(CMAKE_CONF_INSTALL_DIR lib/cmake/hiredis)
- SET(INCLUDE_INSTALL_DIR include)
- include(CMakePackageConfigHelpers)
- configure_package_config_file(hiredis-config.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/hiredis-config.cmake
-@@ -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)

+ 13 - 4
packages/h/hiredis/xmake.lua

@@ -7,9 +7,11 @@ package("hiredis")
     add_urls("https://github.com/redis/hiredis/archive/refs/tags/$(version).tar.gz",
              "https://github.com/redis/hiredis.git")
     add_versions('v1.0.2', 'e0ab696e2f07deb4252dda45b703d09854e53b9703c7d52182ce5a22616c3819')
-    -- This patch is created with hiredis commit f8de9a4. Removed NuGet related install code.
-    -- We need latest CMakeLists.txt to get static library support. It also contains other fixes.
-    add_patches("v1.0.2", path.join(os.scriptdir(), "patches", "v1.0.2", "cmake.patch"), "a2115f727821e4a121e4e2145ef3e5caa0669559f24f2213125119520ee4d881")
+
+    if is_plat("windows", "mingw") then
+        add_configs("shared", {description = "Build shared library.", default = true, type = "boolean", readonly = true})
+        add_configs("vs_runtime", {description = "Set vs compiler runtime.", default = "MD", readonly = true})
+    end
 
     add_configs("openssl", {description = "with openssl library", default = false, type = "boolean"})
 
@@ -22,10 +24,17 @@ package("hiredis")
     end)
 
     on_install(function (package)
+        if not package:config("shared") then
+            if package:version():eq("v1.0.2") then
+                -- Following change is required for package user to call `find_package(hiredis)` to work.
+                io.replace("CMakeLists.txt", "ADD_LIBRARY(hiredis SHARED", "ADD_LIBRARY(hiredis", {plain = true})
+                io.replace("CMakeLists.txt", "ADD_LIBRARY(hiredis_ssl SHARED", "ADD_LIBRARY(hiredis_ssl", {plain = true})
+            end
+        end
+
         local configs = {
             "-DDISABLE_TESTS=ON",
             "-DENABLE_SSL_TESTS=OFF",
-            "-DENABLE_ASYNC_TESTS=OFF",
         }
 
         table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))