diff --git a/.devcontainer b/.devcontainer index a2e89c8..eee022b 160000 --- a/.devcontainer +++ b/.devcontainer @@ -1 +1 @@ -Subproject commit a2e89c849bc0cee02e7a5813c98f2c147509f7cc +Subproject commit eee022bebadedd8cb2c8b843d4476bbfdea24482 diff --git a/.github/release-tag.json b/.github/release-tag.json index 3261bb2..9c24810 100644 --- a/.github/release-tag.json +++ b/.github/release-tag.json @@ -1,4 +1,4 @@ { - "message": "xpro version 4.7.1.4 tag", - "tag": "xpv4.7.1.4" + "message": "xpro version 4.11.0.1 tag", + "tag": "xpv4.11.0.1" } diff --git a/.github/workflows/xpbuild.yml b/.github/workflows/xpbuild.yml index 732fc68..846ffc1 100644 --- a/.github/workflows/xpbuild.yml +++ b/.github/workflows/xpbuild.yml @@ -17,15 +17,12 @@ jobs: uses: externpro/externpro/.github/workflows/build-linux.yml@26.01.1 secrets: automation_token: ${{ secrets.GHCR_TOKEN }} - with: - cmake_workflow_preset_suffix: Release + with: {} macos: uses: externpro/externpro/.github/workflows/build-macos.yml@26.01.1 secrets: inherit - with: - cmake_workflow_preset_suffix: Release + with: {} windows: uses: externpro/externpro/.github/workflows/build-windows.yml@26.01.1 secrets: inherit - with: - cmake_workflow_preset_suffix: Release + with: {} diff --git a/.gitignore b/.gitignore index cb4c751..5d995c9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,8 @@ # Build directory *build/ + +# externpro +.env +_bld*/ +docker-compose.override.yml diff --git a/CMakeLists.txt b/CMakeLists.txt index 3035755..fbe59fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.11) +cmake_minimum_required(VERSION 3.11...4.3) list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -8,7 +8,18 @@ include (DetectCPPZMQVersion) project(cppzmq VERSION ${DETECTED_CPPZMQ_VERSION}) if (NOT TARGET libzmq AND NOT TARGET libzmq-static) - find_package(ZeroMQ QUIET) + if(COMMAND xpFindPkg) + find_package(libzmq) + set(ZeroMQ_FOUND TRUE) + set(_libzmq libzmq::libzmq) + set(_libzmqStatic libzmq::libzmq-static) + set(installTargets cppzmq-static) + else() + find_package(ZeroMQ QUIET) + set(_libzmq libzmq) + set(_libzmqStatic libzmq-static) + set(installTargets cppzmq cppzmq-static) + endif() # libzmq autotools install: fallback to pkg-config if(NOT ZeroMQ_FOUND) @@ -22,7 +33,7 @@ if (NOT TARGET libzmq AND NOT TARGET libzmq-static) message(FATAL_ERROR "ZeroMQ was not found, neither as a CMake package nor via pkg-config") endif() - if (ZeroMQ_FOUND AND NOT (TARGET libzmq OR TARGET libzmq-static)) + if (ZeroMQ_FOUND AND NOT (TARGET ${_libzmq} OR TARGET ${_libzmqStatic})) message(FATAL_ERROR "ZeroMQ version not supported!") endif() endif() @@ -37,30 +48,49 @@ set(CPPZMQ_HEADERS foreach (target cppzmq cppzmq-static) add_library(${target} INTERFACE) target_include_directories(${target} INTERFACE $ - $) + $) endforeach() -target_link_libraries(cppzmq INTERFACE libzmq) -target_link_libraries(cppzmq-static INTERFACE libzmq-static) +if(TARGET ${_libzmq}) +target_link_libraries(cppzmq INTERFACE ${_libzmq}) +endif() +if(TARGET ${_libzmqStatic}) +target_link_libraries(cppzmq-static INTERFACE ${_libzmqStatic}) +endif() include(GNUInstallDirs) include(CMakePackageConfigHelpers) -install(TARGETS cppzmq cppzmq-static +set(targetsFile ${PROJECT_NAME}Targets) +if(COMMAND xpExternPackage) + xpExternPackage(TARGETS_FILE ${targetsFile} EXPORT ${PROJECT_NAME}-targets + LIBRARIES ${installTargets} DEFAULT_TARGETS cppzmq-static + BASE v${cppzmq_VERSION} XPDIFF "patch" + WEB "https://zeromq.org/" UPSTREAM "github.com/zeromq/cppzmq" + DESC "header-only C++ binding for libzmq" + LICENSE "[MPL-2.0](http://wiki.zeromq.org/area:licensing 'Mozilla Public License 2.0')" + ) + set(nSpace ${PROJECT_NAME}::) + set(nameSpace NAMESPACE ${nSpace}) +elseif(NOT DEFINED CMAKE_INSTALL_CMAKEDIR) + set(CMAKE_INSTALL_CMAKEDIR share/cmake/${PROJECT_NAME}) +endif() + +install(TARGETS ${installTargets} EXPORT ${PROJECT_NAME}-targets) install(FILES ${CPPZMQ_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) # GNUInstallDirs "DATADIR" wrong here; CMake search path wants "share". -set(CPPZMQ_CMAKECONFIG_INSTALL_DIR "share/cmake/${PROJECT_NAME}" CACHE STRING "install path for cppzmqConfig.cmake") +set(CPPZMQ_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_CMAKEDIR}" CACHE STRING "install path for cppzmqConfig.cmake") configure_file(libzmq-pkg-config/FindZeroMQ.cmake libzmq-pkg-config/FindZeroMQ.cmake COPYONLY) export(EXPORT ${PROJECT_NAME}-targets - FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake") + FILE "${CMAKE_CURRENT_BINARY_DIR}/${targetsFile}.cmake") configure_package_config_file(${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}) @@ -78,17 +108,21 @@ set(CMAKE_SIZEOF_VOID_P ${CPPZMQ_SIZEOF_VOID_P}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cppzmq.pc.in ${CMAKE_CURRENT_BINARY_DIR}/cppzmq.pc @ONLY) +if(NOT COMMAND xpExternPackage) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cppzmq.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +endif() install(EXPORT ${PROJECT_NAME}-targets - FILE ${PROJECT_NAME}Targets.cmake + FILE ${targetsFile}.cmake ${nameSpace} DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}) +if(NOT COMMAND xpExternPackage) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/libzmq-pkg-config/FindZeroMQ.cmake DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}/libzmq-pkg-config) +endif() option(CPPZMQ_BUILD_TESTS "Whether or not to build the tests" ON) diff --git a/CMakePresetsBase.json b/CMakePresetsBase.json index 8224f19..c54ade9 100644 --- a/CMakePresetsBase.json +++ b/CMakePresetsBase.json @@ -6,7 +6,6 @@ "hidden": true, "binaryDir": "${sourceDir}/_bld-${presetName}", "cacheVariables": { - "CPPZMQ_BUILD_TESTS": "OFF", "CMAKE_EXPERIMENTAL_GENERATE_SBOM": "ca494ed3-b261-4205-a01f-603c95e4cae0" } } diff --git a/cppzmqConfig.cmake.in b/cppzmqConfig.cmake.in index f596517..a24c2d1 100644 --- a/cppzmqConfig.cmake.in +++ b/cppzmqConfig.cmake.in @@ -4,8 +4,8 @@ # # :: # -# cppzmq-static -# cppzmq +# @nSpace@cppzmq-static +# @nSpace@cppzmq # # This module sets the following variables in your project:: # @@ -31,6 +31,6 @@ endif() if(NOT TARGET @PROJECT_NAME@) include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") - get_target_property(@PROJECT_NAME@_INCLUDE_DIR cppzmq INTERFACE_INCLUDE_DIRECTORIES) + get_target_property(@PROJECT_NAME@_INCLUDE_DIR @nSpace@cppzmq INTERFACE_INCLUDE_DIRECTORIES) endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3821c5c..e49eb21 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -33,11 +33,17 @@ add_executable( timers.cpp ) +if(COMMAND xpExternPackage) + set(cppzmq_tgt cppzmq-static) +else() + set(cppzmq_tgt cppzmq) +endif() + target_include_directories(unit_tests PUBLIC ${CATCH_MODULE_PATH}) target_link_libraries( unit_tests PRIVATE Catch2::Catch2WithMain - PRIVATE cppzmq + PRIVATE ${cppzmq_tgt} PRIVATE ${CMAKE_THREAD_LIBS_INIT} )