Skip to content

Commit

Permalink
Merge #278: cmake: Port PR29723 from the master branch
Browse files Browse the repository at this point in the history
00355fd depends: switch zmq to CMake (Cory Fields)
5989754 depends: add zeromq no librt patch (fanquake)
b4c5f72 depends: add zeromq cmake minimum patch (fanquake)
caae50a depends: add zeromq windows usage patch (fanquake)
1b55c75 depends: add zeromq builtin sha1 patch (fanquake)
73eda12 depends: add zeromq mktemp macos patch (fanquake)
30e258d fixup! cmake: Add `libzmq` optional package support (Hennadii Stepanov)
fcc075d Revert "depends: Fix Autotools-generated `libzmq.pc` file" (Hennadii Stepanov)

Pull request description:

  This PR ports bitcoin#29723.

  It aims to avoid conflicts when pushing the `cmake-staging` branch as an update of bitcoin#30454.

  Also a documenting comment added in regard to bitcoin#30508.

Top commit has no ACKs.

Tree-SHA512: 7976db24bd347d7ce7d63cbe7a6c6544009a93fdfb1ffc7709f2711a47c5a6c7d0bec3c03fb236a4c52ced01bfd69a778a7373484152157b359ae643a474dc00
  • Loading branch information
hebasto committed Jul 24, 2024
2 parents ead20f0 + 00355fd commit 7a59ed6
Show file tree
Hide file tree
Showing 8 changed files with 183 additions and 38 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,8 @@ if(WITH_ZMQ)
# TODO: Switch to find_package(ZeroMQ) at some point in the future.
find_package(PkgConfig REQUIRED)
pkg_check_modules(libzmq REQUIRED IMPORTED_TARGET libzmq>=4)
# TODO: This command will be redundant once
# https://github.com/bitcoin/bitcoin/pull/30508 is merged.
target_link_libraries(PkgConfig::libzmq INTERFACE
$<$<PLATFORM_ID:Windows>:iphlpapi;ws2_32>
)
Expand Down
36 changes: 22 additions & 14 deletions depends/packages/zeromq.mk
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,42 @@ $(package)_version=4.3.5
$(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($(package)_version)/
$(package)_file_name=$(package)-$($(package)_version).tar.gz
$(package)_sha256_hash=6653ef5910f17954861fe72332e68b03ca6e4d9c7160eb3a8de5a5a913bfab43
$(package)_patches=remove_libstd_link.patch
$(package)_patches+=fix_mingw_link.patch
$(package)_build_subdir=build
$(package)_patches = remove_libstd_link.patch
$(package)_patches += macos_mktemp_check.patch
$(package)_patches += builtin_sha1.patch
$(package)_patches += fix_have_windows.patch
$(package)_patches += cmake_minimum.patch
$(package)_patches += no_librt.patch

define $(package)_set_vars
$(package)_config_opts = --without-docs --disable-shared --disable-valgrind
$(package)_config_opts += --disable-perf --disable-curve-keygen --disable-curve --disable-libbsd
$(package)_config_opts += --without-libsodium --without-libgssapi_krb5 --without-pgm --without-norm --without-vmci
$(package)_config_opts += --disable-libunwind --disable-radix-tree --without-gcov --disable-dependency-tracking
$(package)_config_opts += --disable-Werror --disable-drafts --enable-option-checking
$(package)_config_opts := -DCMAKE_BUILD_TYPE=None -DWITH_DOCS=OFF -DWITH_LIBSODIUM=OFF
$(package)_config_opts += -DWITH_LIBBSD=OFF -DENABLE_CURVE=OFF -DENABLE_CPACK=OFF
$(package)_config_opts += -DBUILD_SHARED=OFF -DBUILD_TESTS=OFF -DZMQ_BUILD_TESTS=OFF
$(package)_config_opts += -DENABLE_DRAFTS=OFF -DZMQ_BUILD_TESTS=OFF
$(package)_cxxflags += -ffile-prefix-map=$($(package)_extract_dir)=/usr
$(package)_config_opts_mingw32 += -DZMQ_WIN32_WINNT=0x0601 -DZMQ_HAVE_IPC=OFF
endef

define $(package)_preprocess_cmds
patch -p1 < $($(package)_patch_dir)/fix_mingw_link.patch && \
patch -p1 < $($(package)_patch_dir)/remove_libstd_link.patch
patch -p1 < $($(package)_patch_dir)/remove_libstd_link.patch && \
patch -p1 < $($(package)_patch_dir)/macos_mktemp_check.patch && \
patch -p1 < $($(package)_patch_dir)/builtin_sha1.patch && \
patch -p1 < $($(package)_patch_dir)/fix_have_windows.patch && \
patch -p1 < $($(package)_patch_dir)/cmake_minimum.patch && \
patch -p1 < $($(package)_patch_dir)/no_librt.patch
endef

define $(package)_config_cmds
./autogen.sh && \
cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub config && \
$($(package)_autoconf)
$($(package)_cmake) -S .. -B .
endef

define $(package)_build_cmds
$(MAKE) src/libzmq.la
$(MAKE)
endef

define $(package)_stage_cmds
$(MAKE) DESTDIR=$($(package)_staging_dir) install-libLTLIBRARIES install-includeHEADERS install-pkgconfigDATA
$(MAKE) DESTDIR=$($(package)_staging_dir) install
endef

define $(package)_postprocess_cmds
Expand Down
17 changes: 17 additions & 0 deletions depends/patches/zeromq/builtin_sha1.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
Don't use builtin sha1 if not using ws

The builtin SHA1 (ZMQ_USE_BUILTIN_SHA1) is only used in the websocket
engine (ws_engine.cpp).
Upstreamed in https://github.com/zeromq/libzmq/pull/4670.

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -234,7 +234,7 @@ if(NOT ZMQ_USE_GNUTLS)
endif()
endif()
endif()
- if(NOT ZMQ_USE_NSS)
+ if(ENABLE_WS AND NOT ZMQ_USE_NSS)
list(APPEND sources ${CMAKE_CURRENT_SOURCE_DIR}/external/sha1/sha1.c
${CMAKE_CURRENT_SOURCE_DIR}/external/sha1/sha1.h)
message(STATUS "Using builtin sha1")
18 changes: 18 additions & 0 deletions depends/patches/zeromq/cmake_minimum.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Set a more sane cmake_minimum_required.

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,12 +1,7 @@
# CMake build script for ZeroMQ
+cmake_minimum_required(VERSION 3.16)
project(ZeroMQ)

-if(${CMAKE_SYSTEM_NAME} STREQUAL Darwin)
- cmake_minimum_required(VERSION 3.0.2)
-else()
- cmake_minimum_required(VERSION 2.8.12)
-endif()
-
include(CheckIncludeFiles)
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
54 changes: 54 additions & 0 deletions depends/patches/zeromq/fix_have_windows.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
This fixes several instances where _MSC_VER was
used to determine whether to use afunix.h or not.

See https://github.com/zeromq/libzmq/pull/4678.
--- a/src/ipc_address.hpp
+++ b/src/ipc_address.hpp
@@ -7,7 +7,7 @@

#include <string>

-#if defined _MSC_VER
+#if defined ZMQ_HAVE_WINDOWS
#include <afunix.h>
#else
#include <sys/socket.h>
diff --git a/src/ipc_connecter.cpp b/src/ipc_connecter.cpp
index 3f988745..ed2a0645 100644
--- a/src/ipc_connecter.cpp
+++ b/src/ipc_connecter.cpp
@@ -16,7 +16,7 @@
#include "ipc_address.hpp"
#include "session_base.hpp"

-#ifdef _MSC_VER
+#if defined ZMQ_HAVE_WINDOWS
#include <afunix.h>
#else
#include <unistd.h>
diff --git a/src/ipc_listener.cpp b/src/ipc_listener.cpp
index 50126040..5428579b 100644
--- a/src/ipc_listener.cpp
+++ b/src/ipc_listener.cpp
@@ -17,7 +17,7 @@
#include "socket_base.hpp"
#include "address.hpp"

-#ifdef _MSC_VER
+#ifdef ZMQ_HAVE_WINDOWS
#ifdef ZMQ_IOTHREAD_POLLER_USE_SELECT
#error On Windows, IPC does not work with POLLER=select, use POLLER=epoll instead, or disable IPC transport
#endif
diff --git a/tests/testutil.cpp b/tests/testutil.cpp
index bdc80283..6f21e8f6 100644
--- a/tests/testutil.cpp
+++ b/tests/testutil.cpp
@@ -7,7 +7,7 @@

#if defined _WIN32
#include "../src/windows.hpp"
-#if defined _MSC_VER
+#if defined ZMQ_HAVE_WINDOWS
#if defined ZMQ_HAVE_IPC
#include <direct.h>
#include <afunix.h>
24 changes: 0 additions & 24 deletions depends/patches/zeromq/fix_mingw_link.patch

This file was deleted.

16 changes: 16 additions & 0 deletions depends/patches/zeromq/macos_mktemp_check.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
build: fix mkdtemp check on macOS

On macOS, mkdtemp is in unistd.h. Fix the CMake check so that is works.
Upstreamed in https://github.com/zeromq/libzmq/pull/4668.

--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -599,7 +599,7 @@ if(NOT MSVC)

check_cxx_symbol_exists(fork unistd.h HAVE_FORK)
check_cxx_symbol_exists(gethrtime sys/time.h HAVE_GETHRTIME)
- check_cxx_symbol_exists(mkdtemp stdlib.h HAVE_MKDTEMP)
+ check_cxx_symbol_exists(mkdtemp "stdlib.h;unistd.h" HAVE_MKDTEMP)
check_cxx_symbol_exists(accept4 sys/socket.h HAVE_ACCEPT4)
check_cxx_symbol_exists(strnlen string.h HAVE_STRNLEN)
else()
54 changes: 54 additions & 0 deletions depends/patches/zeromq/no_librt.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
We don't use librt, so don't try and link against it.

Related to: https://github.com/zeromq/libzmq/pull/4702.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 03462271..87ceab3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -564,13 +564,6 @@ else()
check_cxx_symbol_exists(SO_BUSY_POLL sys/socket.h ZMQ_HAVE_BUSY_POLL)
endif()

-if(NOT MINGW)
- find_library(RT_LIBRARY rt)
- if(RT_LIBRARY)
- set(pkg_config_libs_private "${pkg_config_libs_private} -lrt")
- endif()
-endif()
-
find_package(Threads)

if(WIN32 AND NOT CYGWIN)
@@ -588,9 +581,7 @@ if(WIN32 AND NOT CYGWIN)
endif()

if(NOT MSVC)
- set(CMAKE_REQUIRED_LIBRARIES rt)
check_cxx_symbol_exists(clock_gettime time.h HAVE_CLOCK_GETTIME)
- set(CMAKE_REQUIRED_LIBRARIES)

check_cxx_symbol_exists(fork unistd.h HAVE_FORK)
check_cxx_symbol_exists(gethrtime sys/time.h HAVE_GETHRTIME)
@@ -1503,10 +1494,6 @@ if(BUILD_SHARED)
target_link_libraries(libzmq iphlpapi)
endif()

- if(RT_LIBRARY)
- target_link_libraries(libzmq -lrt)
- endif()
-
if(norm_FOUND)
target_link_libraries(libzmq norm::norm)
endif()
@@ -1553,10 +1540,6 @@ if(BUILD_STATIC)
target_link_libraries(libzmq-static iphlpapi)
endif()

- if(RT_LIBRARY)
- target_link_libraries(libzmq-static -lrt)
- endif()
-
if(CMAKE_SYSTEM_NAME MATCHES "QNX")
add_definitions(-DUNITY_EXCLUDE_MATH_H)
endif()

0 comments on commit 7a59ed6

Please sign in to comment.