czmq: add cmake 4.x compatibility
authorTianling Shen <[email protected]>
Sat, 15 Nov 2025 09:38:29 +0000 (17:38 +0800)
committerTianling Shen <[email protected]>
Sat, 15 Nov 2025 14:38:09 +0000 (22:38 +0800)
Upstream backport.

Signed-off-by: Tianling Shen <[email protected]>
libs/czmq/patches/010-regen-from-zproject-to-update-cmakelists-txt.patch [new file with mode: 0644]
libs/czmq/patches/011-Problem-CMakeLists-txt-broken-since-CMake-4-support.patch [new file with mode: 0644]

diff --git a/libs/czmq/patches/010-regen-from-zproject-to-update-cmakelists-txt.patch b/libs/czmq/patches/010-regen-from-zproject-to-update-cmakelists-txt.patch
new file mode 100644 (file)
index 0000000..3724cce
--- /dev/null
@@ -0,0 +1,363 @@
+From 00d7750304f1c144f47225274b22ea8d638641ed Mon Sep 17 00:00:00 2001
+From: Arnaud Loonstra <[email protected]>
+Date: Fri, 6 Jun 2025 09:27:05 +0200
+Subject: [PATCH] regen from zproject to update cmakelists.txt
+
+---
+ CMakeLists.txt                               | 152 +++++--------------
+ bindings/jni/czmq-jni/CMakeLists.txt         |   2 +-
+ bindings/jni/czmq-jni/android/CMakeLists.txt |   2 +-
+ configure.ac                                 |  12 ++
+ 4 files changed, 55 insertions(+), 113 deletions(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -6,12 +6,13 @@
+ ########################################################################
+ # Project setup
+ ########################################################################
+-cmake_minimum_required(VERSION 2.8.12)
++cmake_minimum_required(VERSION 2.8...4.0)
+ project(czmq)
+ enable_language(C)
+ enable_testing()
+-set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
++include(GNUInstallDirs)
++
+ set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
+ # Select flags
+ if(MSVC)
+@@ -30,7 +31,7 @@ set(pkg_config_names_private "")
+ # options
+ ########################################################################
+ if (NOT CMAKE_BUILD_TYPE)
+-    if (EXISTS "${SOURCE_DIR}/.git")
++    if (EXISTS "${PROJECT_SOURCE_DIR}/.git")
+         set (CMAKE_BUILD_TYPE Debug)
+     else ()
+ # http://xit0.org/2013/04/cmake-use-git-branch-and-commit-details-in-project/
+@@ -79,7 +80,7 @@ endif()
+ include(CheckSymbolExists)
+ check_symbol_exists(AI_V4MAPPED "czmq.h" HAVE_DECL_AI_V4MAPPED)
+-file(REMOVE "${SOURCE_DIR}/src/platform.h")
++file(REMOVE "${PROJECT_SOURCE_DIR}/src/platform.h")
+ file(WRITE "${PROJECT_BINARY_DIR}/platform.h.in" "
+ #cmakedefine HAVE_LINUX_WIRELESS_H
+@@ -97,7 +98,7 @@ if (WIN32)
+     #so the sources have to be compiled as c++
+     if (MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
+         enable_language(CXX)
+-        file(GLOB sources "${SOURCE_DIR}/src/*.c")
++        file(GLOB sources "${PROJECT_SOURCE_DIR}/src/*.c")
+         set_source_files_properties(
+             ${sources}
+             PROPERTIES LANGUAGE CXX
+@@ -123,7 +124,7 @@ if (CYGWIN)
+     set(MORE_LIBRARIES)
+ endif()
+-list(APPEND CMAKE_MODULE_PATH "${SOURCE_DIR}")
++list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}")
+ set(OPTIONAL_LIBRARIES)
+ set(OPTIONAL_LIBRARIES_STATIC)
+@@ -326,14 +327,14 @@ IF (ENABLE_DRAFTS)
+ ENDIF (ENABLE_DRAFTS)
+ source_group ("Header Files" FILES ${czmq_headers})
+-install(FILES ${czmq_headers} DESTINATION include)
++install(FILES ${czmq_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+ ########################################################################
+ # library
+ ########################################################################
+-include_directories("${SOURCE_DIR}/src" "${SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}")
++include_directories("${PROJECT_SOURCE_DIR}/src" "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}")
+ set (czmq_sources
+     src/zactor.c
+     src/zarmour.c
+@@ -434,15 +435,12 @@ if (CZMQ_BUILD_SHARED)
+   install(TARGETS czmq
+     EXPORT czmq-targets
+-    LIBRARY DESTINATION "lib${LIB_SUFFIX}" # .so file
+-    ARCHIVE DESTINATION "lib${LIB_SUFFIX}" # .lib file
+-    RUNTIME DESTINATION bin                # .dll file
+   )
+   target_include_directories(czmq
+     PUBLIC
+       $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+-      $<INSTALL_INTERFACE:include>
++      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+   )
+ endif()
+@@ -471,15 +469,12 @@ if (CZMQ_BUILD_STATIC)
+   install(TARGETS czmq-static
+     EXPORT czmq-targets
+-    LIBRARY DESTINATION "lib${LIB_SUFFIX}" # .so file
+-    ARCHIVE DESTINATION "lib${LIB_SUFFIX}" # .lib file
+-    RUNTIME DESTINATION bin                # .dll file
+   )
+   target_include_directories(czmq-static
+     PUBLIC
+       $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+-      $<INSTALL_INTERFACE:include>
++      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+   )
+   target_compile_definitions(czmq-static
+     PUBLIC CZMQ_STATIC
+@@ -496,21 +491,21 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/src/
+ set (VERSION "4.2.1")
+ set (prefix "${CMAKE_INSTALL_PREFIX}")
+ set (exec_prefix "\${prefix}")
+-set (libdir "\${prefix}/lib${LIB_SUFFIX}")
+-set (includedir "\${prefix}/include")
++set (libdir "\${prefix}/${CMAKE_INSTALL_LIBDIR}")
++set (includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}")
+ IF (ENABLE_DRAFTS)
+     set (pkg_config_defines "-DCZMQ_BUILD_DRAFT_API=1")
+ ELSE (ENABLE_DRAFTS)
+     set (pkg_config_defines "")
+ ENDIF (ENABLE_DRAFTS)
+ configure_file(
+-    "${SOURCE_DIR}/src/libczmq.pc.in"
+-    "${SOURCE_DIR}/src/libczmq.pc"
++    "${PROJECT_SOURCE_DIR}/src/libczmq.pc.in"
++    "${PROJECT_SOURCE_DIR}/src/libczmq.pc"
+ @ONLY)
+ install(
+-    FILES "${SOURCE_DIR}/src/libczmq.pc"
+-    DESTINATION "lib${LIB_SUFFIX}/pkgconfig"
++    FILES "${PROJECT_SOURCE_DIR}/src/libczmq.pc"
++    DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
+ )
+ ########################################################################
+@@ -520,8 +515,7 @@ include(CMakePackageConfigHelpers)
+ if (WIN32)
+   set(CMAKECONFIG_INSTALL_DIR "CMake" CACHE STRING "install path for czmqConfig.cmake")
+ else()
+-  # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share".
+-  set(CMAKECONFIG_INSTALL_DIR "share/cmake/czmq" CACHE STRING "install path for czmqConfig.cmake")
++  set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/czmq" CACHE STRING "install path for czmqConfig.cmake")
+ endif()
+ if (NOT CMAKE_VERSION VERSION_LESS 3.0)
+@@ -546,7 +540,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR
+ ########################################################################
+ add_executable(
+     zmakecert
+-    "${SOURCE_DIR}/src/zmakecert.c"
++    "${PROJECT_SOURCE_DIR}/src/zmakecert.c"
+ )
+ if (TARGET czmq)
+ target_link_libraries(
+@@ -565,12 +559,10 @@ target_link_libraries(
+     ${OPTIONAL_LIBRARIES_STATIC}
+ )
+ endif()
+-install(TARGETS zmakecert
+-    RUNTIME DESTINATION bin
+-)
++install(TARGETS zmakecert)
+ add_executable(
+     zsp
+-    "${SOURCE_DIR}/src/zsp.c"
++    "${PROJECT_SOURCE_DIR}/src/zsp.c"
+ )
+ if (TARGET czmq)
+ target_link_libraries(
+@@ -591,7 +583,7 @@ target_link_libraries(
+ endif()
+ add_executable(
+     test_randof
+-    "${SOURCE_DIR}/src/test_randof.c"
++    "${PROJECT_SOURCE_DIR}/src/test_randof.c"
+ )
+ if (TARGET czmq)
+ target_link_libraries(
+@@ -612,7 +604,7 @@ target_link_libraries(
+ endif()
+ add_executable(
+     czmq_selftest
+-    "${SOURCE_DIR}/src/czmq_selftest.c"
++    "${PROJECT_SOURCE_DIR}/src/czmq_selftest.c"
+ )
+ if (TARGET czmq)
+ target_link_libraries(
+@@ -748,83 +740,21 @@ include(CTest)
+ # cleanup
+ ########################################################################
+ if (NOT TARGET distclean)
+-    add_custom_target (distclean @echo Cleaning for source distribution)
+-endif()
+-
+-set(cmake_generated ${PROJECT_BINARY_DIR}/CMakeCache.txt
+-                    ${PROJECT_BINARY_DIR}/cmake_install.cmake
+-                    ${PROJECT_BINARY_DIR}/Makefile
+-                    ${PROJECT_BINARY_DIR}/CMakeFiles
+-                    ${PROJECT_BINARY_DIR}/CTestTestfile.cmake
+-                    ${PROJECT_BINARY_DIR}/DartConfiguration.tcl
+-                    ${PROJECT_BINARY_DIR}/Testing
+-                    ${PROJECT_BINARY_DIR}/compile_commands.json
+-                    ${PROJECT_BINARY_DIR}/platform.h
+-                    ${PROJECT_BINARY_DIR}/src/libczmq.pc
+-                    ${PROJECT_BINARY_DIR}/src/libczmq.so
+-                    ${PROJECT_BINARY_DIR}/src/czmq_selftest
+-                    ${PROJECT_BINARY_DIR}/src/zmakecert
+-                    ${PROJECT_BINARY_DIR}/src/zsp
+-                    ${PROJECT_BINARY_DIR}/src/test_randof
+-                    ${PROJECT_BINARY_DIR}/src/czmq_selftest
+-)
+-
+-add_custom_command(
+-    DEPENDS clean
+-    COMMENT "distribution clean"
+-    COMMAND rm
+-    ARGS    -rf CMakeTmp ${cmake_generated}
+-    TARGET  distclean
+-)
+-
+-include(ClangFormat OPTIONAL)
+-
+-########################################################################
+-# summary
+-########################################################################
+-message ("")
+-message (STATUS "******************* Configuration Summary *******************")
+-message (STATUS "General:")
+-message (STATUS "  Version           :   ${VERSION}")
+-message (STATUS "  System            :   ${CMAKE_SYSTEM_NAME}")
+-message (STATUS "  C compiler        :   ${CMAKE_C_COMPILER}")
+-message (STATUS "  Debug C flags     :   ${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_FLAGS}")
+-message (STATUS "  Release C flags   :   ${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_FLAGS}")
+-message (STATUS "  Build type        :   ${CMAKE_BUILD_TYPE}")
+-message (STATUS "  Static build      :   ${CZMQ_BUILD_STATIC}")
+-message (STATUS "  Shared build      :   ${CZMQ_BUILD_SHARED}")
+-IF (ENABLE_DRAFTS)
+-message (STATUS "  Draft API         :   Yes")
+-ELSE (ENABLE_DRAFTS)
+-message (STATUS "  Draft API         :   No")
+-ENDIF (ENABLE_DRAFTS)
+-message (STATUS "")
+-message (STATUS "Dependencies:")
+-include(FeatureSummary)
+-feature_summary (WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
+-message (STATUS "")
+-message (STATUS "Install:")
+-message (STATUS "  Install prefix    :" "${CMAKE_INSTALL_PREFIX}")
+-message (STATUS "")
+-message (STATUS "************************* Options ***************************")
+-message (STATUS "Options:")
+-message (STATUS "  Use the Draft API (default = yes):")
+-message (STATUS "  -DENABLE-DRAFTS=[yes|no]")
+-message (STATUS "")
+-message (STATUS "*************************************************************")
+-message (STATUS "Configuration complete! Now procced with:")
+-message (STATUS "  'make'                 compile the project")
+-message (STATUS "  'make test'            run the project's selftest")
+-message (STATUS "  'make install'         install the project to ${CMAKE_INSTALL_PREFIX}")
+-message (STATUS "")
+-message (STATUS "Further options are:")
+-message (STATUS "  'ctest -V              run test with verbose logging")
+-message (STATUS "  'ctest -R <test_name>' run a specific test")
+-message (STATUS "  'ctest -T memcheck'    run the project's selftest with")
+-message (STATUS "                         valgrind to check for memory leaks")
+-message (STATUS "")
+-
+-################################################################################
+-#  THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY  #
+-#  Read the zproject/README.md for information about making permanent changes. #
+-################################################################################
++    if (CMAKE_VERSION VERSION_LESS 3.17)
++        set(rm_command rm -rf)
++    else()
++        set(rm_command ${CMAKE_COMMAND} -E rm -rf --)
++    endif()
++    set(cmake_generated ${PROJECT_BINARY_DIR}/CMakeCache.txt
++                        ${PROJECT_BINARY_DIR}/cmake_install.cmake
++                        ${PROJECT_BINARY_DIR}/Makefile
++                        ${PROJECT_BINARY_DIR}/CMakeFiles
++                        ${PROJECT_BINARY_DIR}/CTestTestfile.cmake
++                        ${PROJECT_BINARY_DIR}/DartConfiguration.tcl
++                        ${PROJECT_BINARY_DIR}/Testing
++                        ${PROJECT_BINARY_DIR}/compile_commands.json
++                        ${PROJECT_BINARY_DIR}/platform.h
++                        ${PROJECT_BINARY_DIR}/src/libczmq.pc
++                        ${PROJECT_BINARY_DIR}/src/libczmq.so
++                        ${PROJECT_BINARY_DIR}/src/czmq_selftest
++    .for project.main
+--- a/bindings/jni/czmq-jni/CMakeLists.txt
++++ b/bindings/jni/czmq-jni/CMakeLists.txt
+@@ -2,7 +2,7 @@
+ #  THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY  #
+ #  Read the zproject/README.md for information about making permanent changes. #
+ ################################################################################
+-cmake_minimum_required (VERSION 2.8)
++cmake_minimum_required (VERSION 2.8...4.0)
+ project (czmqjni CXX)
+ enable_language (C)
+--- a/bindings/jni/czmq-jni/android/CMakeLists.txt
++++ b/bindings/jni/czmq-jni/android/CMakeLists.txt
+@@ -2,7 +2,7 @@
+ #  THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY  #
+ #  Read the zproject/README.md for information about making permanent changes. #
+ ################################################################################
+-cmake_minimum_required (VERSION 3.6)
++cmake_minimum_required (VERSION 3.6...4.0)
+ project (czmqjni CXX)
+ enable_language (C)
+--- a/configure.ac
++++ b/configure.ac
+@@ -947,6 +947,9 @@ AC_ARG_ENABLE([zmakecert],
+ AM_CONDITIONAL([ENABLE_ZMAKECERT], [test x$enable_zmakecert != xno])
+ AM_COND_IF([ENABLE_ZMAKECERT], [AC_MSG_NOTICE([ENABLE_ZMAKECERT defined])])
++AM_CONDITIONAL([ENABLE_CZMQ_SELFTEST], [test x$enable_czmq_selftest != xno])
++AM_COND_IF([ENABLE_CZMQ_SELFTEST], [AC_MSG_NOTICE([ENABLE_CZMQ_SELFTEST defined])])
++
+ # Check for zsp intent
+ AC_ARG_ENABLE([zsp],
+     AS_HELP_STRING([--enable-zsp],
+@@ -957,6 +960,9 @@ AC_ARG_ENABLE([zsp],
+ AM_CONDITIONAL([ENABLE_ZSP], [test x$enable_zsp != xno])
+ AM_COND_IF([ENABLE_ZSP], [AC_MSG_NOTICE([ENABLE_ZSP defined])])
++AM_CONDITIONAL([ENABLE_CZMQ_SELFTEST], [test x$enable_czmq_selftest != xno])
++AM_COND_IF([ENABLE_CZMQ_SELFTEST], [AC_MSG_NOTICE([ENABLE_CZMQ_SELFTEST defined])])
++
+ # Check for test_randof intent
+ AC_ARG_ENABLE([test_randof],
+     AS_HELP_STRING([--enable-test_randof],
+@@ -967,6 +973,9 @@ AC_ARG_ENABLE([test_randof],
+ AM_CONDITIONAL([ENABLE_TEST_RANDOF], [test x$enable_test_randof != xno])
+ AM_COND_IF([ENABLE_TEST_RANDOF], [AC_MSG_NOTICE([ENABLE_TEST_RANDOF defined])])
++AM_CONDITIONAL([ENABLE_CZMQ_SELFTEST], [test x$enable_czmq_selftest != xno])
++AM_COND_IF([ENABLE_CZMQ_SELFTEST], [AC_MSG_NOTICE([ENABLE_CZMQ_SELFTEST defined])])
++
+ # Check for czmq_selftest intent
+ AC_ARG_ENABLE([czmq_selftest],
+     AS_HELP_STRING([--enable-czmq_selftest],
+@@ -976,6 +985,9 @@ AC_ARG_ENABLE([czmq_selftest],
+ AM_CONDITIONAL([ENABLE_CZMQ_SELFTEST], [test x$enable_czmq_selftest != xno])
+ AM_COND_IF([ENABLE_CZMQ_SELFTEST], [AC_MSG_NOTICE([ENABLE_CZMQ_SELFTEST defined])])
++
++AM_CONDITIONAL([ENABLE_CZMQ_SELFTEST], [test x$enable_czmq_selftest != xno])
++AM_COND_IF([ENABLE_CZMQ_SELFTEST], [AC_MSG_NOTICE([ENABLE_CZMQ_SELFTEST defined])])
+ # Checks for library functions.
+ AC_TYPE_SIGNAL
diff --git a/libs/czmq/patches/011-Problem-CMakeLists-txt-broken-since-CMake-4-support.patch b/libs/czmq/patches/011-Problem-CMakeLists-txt-broken-since-CMake-4-support.patch
new file mode 100644 (file)
index 0000000..1362361
--- /dev/null
@@ -0,0 +1,79 @@
+From 53b46d63b41c51e32b5d539aa78ca91846f6a2a1 Mon Sep 17 00:00:00 2001
+From: Stephan Guilloux <[email protected]>
+Date: Fri, 6 Jun 2025 16:55:13 +0200
+Subject: [PATCH] Problem: CMakeLists.txt broken since CMake 4 support.
+
+Solution: Regenerate from ZProject.
+---
+ CMakeLists.txt | 63 +++++++++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 62 insertions(+), 1 deletion(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -757,4 +757,65 @@ if (NOT TARGET distclean)
+                         ${PROJECT_BINARY_DIR}/src/libczmq.pc
+                         ${PROJECT_BINARY_DIR}/src/libczmq.so
+                         ${PROJECT_BINARY_DIR}/src/czmq_selftest
+-    .for project.main
++                        ${PROJECT_BINARY_DIR}/src/zmakecert
++                        ${PROJECT_BINARY_DIR}/src/zsp
++                        ${PROJECT_BINARY_DIR}/src/test_randof
++                        ${PROJECT_BINARY_DIR}/src/czmq_selftest
++    )
++    add_custom_target(distclean
++        COMMAND ${rm_command} CMakeTmp ${cmake_generated}
++        COMMENT Cleaning for source distribution
++    )
++endif()
++
++include(ClangFormat OPTIONAL)
++
++########################################################################
++# summary
++########################################################################
++message ("")
++message (STATUS "******************* Configuration Summary *******************")
++message (STATUS "General:")
++message (STATUS "  Version           :   ${VERSION}")
++message (STATUS "  System            :   ${CMAKE_SYSTEM_NAME}")
++message (STATUS "  C compiler        :   ${CMAKE_C_COMPILER}")
++message (STATUS "  Debug C flags     :   ${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_FLAGS}")
++message (STATUS "  Release C flags   :   ${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_FLAGS}")
++message (STATUS "  Build type        :   ${CMAKE_BUILD_TYPE}")
++message (STATUS "  Static build      :   ${CZMQ_BUILD_STATIC}")
++message (STATUS "  Shared build      :   ${CZMQ_BUILD_SHARED}")
++IF (ENABLE_DRAFTS)
++message (STATUS "  Draft API         :   Yes")
++ELSE (ENABLE_DRAFTS)
++message (STATUS "  Draft API         :   No")
++ENDIF (ENABLE_DRAFTS)
++message (STATUS "")
++message (STATUS "Dependencies:")
++include(FeatureSummary)
++feature_summary (WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
++message (STATUS "")
++message (STATUS "Install:")
++message (STATUS "  Install prefix    :" "${CMAKE_INSTALL_PREFIX}")
++message (STATUS "")
++message (STATUS "************************* Options ***************************")
++message (STATUS "Options:")
++message (STATUS "  Use the Draft API (default = yes):")
++message (STATUS "  -DENABLE-DRAFTS=[yes|no]")
++message (STATUS "")
++message (STATUS "*************************************************************")
++message (STATUS "Configuration complete! Now procced with:")
++message (STATUS "  'make'                 compile the project")
++message (STATUS "  'make test'            run the project's selftest")
++message (STATUS "  'make install'         install the project to ${CMAKE_INSTALL_PREFIX}")
++message (STATUS "")
++message (STATUS "Further options are:")
++message (STATUS "  'ctest -V              run test with verbose logging")
++message (STATUS "  'ctest -R <test_name>' run a specific test")
++message (STATUS "  'ctest -T memcheck'    run the project's selftest with")
++message (STATUS "                         valgrind to check for memory leaks")
++message (STATUS "")
++
++################################################################################
++#  THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY  #
++#  Read the zproject/README.md for information about making permanent changes. #
++################################################################################