From 4ce045cdc24d31a38d2a9b02b5e16b30d4d9947b Mon Sep 17 00:00:00 2001 From: Michael Heyman Date: Mon, 11 Oct 2021 13:19:49 -0400 Subject: [activemq-cpp] support linux (#19789) @PhoebeHui > * I think we need a discussion about unofficial being in the namespace I still want to discuss this --- ports/activemq-cpp/activemq-cppConfig.cmake | 319 +++++++++++++++++++++++++++ ports/activemq-cpp/fix-crt-linkage-dyn.patch | 36 +++ ports/activemq-cpp/portfile.cmake | 177 +++++++++------ ports/activemq-cpp/vcpkg.json | 6 +- scripts/ci.baseline.txt | 1 - versions/a-/activemq-cpp.json | 5 + versions/baseline.json | 2 +- 7 files changed, 470 insertions(+), 76 deletions(-) create mode 100644 ports/activemq-cpp/activemq-cppConfig.cmake create mode 100644 ports/activemq-cpp/fix-crt-linkage-dyn.patch diff --git a/ports/activemq-cpp/activemq-cppConfig.cmake b/ports/activemq-cpp/activemq-cppConfig.cmake new file mode 100644 index 000000000..5719f9b6b --- /dev/null +++ b/ports/activemq-cpp/activemq-cppConfig.cmake @@ -0,0 +1,319 @@ +set(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_DIR}") +foreach(i RANGE 1 2) + get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) + if (_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") + break() + endif() +endforeach() + +# Macro to find OS dependencies for windows builds. +# Sets up for failure find_package() failure if dependencies not found. +# On success, creates targets unofficial::activemq-cpp::ws2, unofficial::activemq-cpp::rpcrt4, and unofficial::activemq-cpp::mswsock. +# Sets boolean ${CMAKE_FIND_PACKAGE_NAME}_WINDOWS_DEPENDENCIES_FOUND to TRUE or FALSE to indicate success or failure. +macro(_activemq_cpp_windows_dependencies) + find_library(ACTIVEMQ_CPP_LIBWS2 WS2_32) + find_file(ACTIVEMQ_CPP_DLLWS2 WS2_32.dll) + find_library(ACTIVEMQ_CPP_LIBRPCRT4 RpcRT4) + find_file(ACTIVEMQ_CPP_DLLRPCRT4 RpcRT4.dll) + find_library(ACTIVEMQ_CPP_LIBMSWSOCK MsWsock) + find_file(ACTIVEMQ_CPP_DLLMSWSOCK MsWsock.dll) + if(ACTIVEMQ_CPP_LIBWS2 AND ACTIVEMQ_CPP_DLLWS2 AND ACTIVEMQ_CPP_LIBRPCRT4 AND ACTIVEMQ_CPP_DLLRPCRT4 AND ACTIVEMQ_CPP_LIBMSWSOCK AND ACTIVEMQ_CPP_DLLMSWSOCK) + add_library(unofficial::activemq-cpp::ws2 SHARED IMPORTED) + set_target_properties(unofficial::activemq-cpp::ws2 + PROPERTIES + IMPORTED_LOCATION "${ACTIVEMQ_CPP_DLLWS2}" + IMPORTED_IMPLIB "${ACTIVEMQ_CPP_LIBWS2}" + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + ) + add_library(unofficial::activemq-cpp::rpcrt4 SHARED IMPORTED) + set_target_properties(unofficial::activemq-cpp::rpcrt4 + PROPERTIES + IMPORTED_LOCATION "${ACTIVEMQ_CPP_DLLRPCRT4}" + IMPORTED_IMPLIB "${ACTIVEMQ_CPP_LIBRPCRT4}" + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + ) + add_library(unofficial::activemq-cpp::mswsock SHARED IMPORTED) + set_target_properties(unofficial::activemq-cpp::mswsock + PROPERTIES + IMPORTED_LOCATION "${ACTIVEMQ_CPP_DLLMSWSOCK}" + IMPORTED_IMPLIB "${ACTIVEMQ_CPP_LIBMSWSOCK}" + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + ) + set(${CMAKE_FIND_PACKAGE_NAME}_WINDOWS_DEPENDENCIES_FOUND TRUE) + else() + if (NOT ACTIVEMQ_CPP_LIBWS2) + list(APPEND _ACTIVEMQ_CPP_MISSINGS "WS2_32.lib") + endif() + if (NOT ACTIVEMQ_CPP_DLLWS2) + list(APPEND _ACTIVEMQ_CPP_MISSINGS "WS2_32.dll") + endif() + if (NOT ACTIVEMQ_CPP_LIBRPCRT4) + list(APPEND _ACTIVEMQ_CPP_MISSINGS "RpcRT4.lib") + endif() + if (NOT ACTIVEMQ_CPP_DLLRPCRT4) + list(APPEND _ACTIVEMQ_CPP_MISSINGS "RpcRT4.dll") + endif() + if (NOT ACTIVEMQ_CPP_LIBMSWSOCK) + list(APPEND _ACTIVEMQ_CPP_MISSINGS "MsWsock.lib") + endif() + if (NOT ACTIVEMQ_CPP_DLLMSWSOCK) + list(APPEND _ACTIVEMQ_CPP_MISSINGS "MsWsock.dll") + endif() + list(JOIN _ACTIVEMQ_CPP_MISSINGS ", " _ACTIVEMQ_CPP_MISSINGS_STR) + list(LENGTH _ACTIVEMQ_CPP_MISSINGS _ACTIVEMQ_CPP_MISSINGS_COUNT) + if(_ACTIVEMQ_CPP_MISSINGS_COUNT EQUALS 1) + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: Did not find windows dependency: ${_ACTIVEMQ_CPP_MISSINGS_STR}") + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: Did not find windows dependencies: ${_ACTIVEMQ_CPP_MISSINGS_STR}") + endif() + set(_ACTIVEMQ_CPP_MISSINGS_COUNT) + set(_ACTIVEMQ_CPP_MISSINGS_STR) + set(_ACTIVEMQ_CPP_MISSINGS) + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + set(${CMAKE_FIND_PACKAGE_NAME}_WINDOWS_DEPENDENCIES_FOUND FALSE) + endif() +endmacro() + +# Set the variable named VARNAME to "${FILE}" if the file FILE exists; clears it +# otherwise. Opposite for VARNAME_MISSING. +function(_set_exists VARNAME VARNAME_MISSING FILE) + if (EXISTS "${FILE}") + set(${VARNAME} "${FILE}" PARENT_SCOPE) + unset(${VARNAME_MISSING} PARENT_SCOPE) + else() + set(${VARNAME_MISSING} "${FILE}" PARENT_SCOPE) + unset(${VARNAME} PARENT_SCOPE) + endif() +endfunction() + +# Add the unofficial::activemq-cpp::apr and unofficial::activemq-cpp::activemq-cpp targets +# Doesn't work for Windows DLL installs because that takes more args... +function(_add_apr_and_amq_targets INC_PARENT LIB_TYPE APR_REL APR_DEB AMQ_REL AMQ_DEB DEPS) + # the APR port doesn't have a CMake config target so create one + add_library(unofficial::activemq-cpp::apr ${LIB_TYPE} IMPORTED) + set_target_properties(unofficial::activemq-cpp::apr + PROPERTIES + MAP_IMPORTED_CONFIG_MINSIZEREL Release + MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release + IMPORTED_LOCATION_RELEASE "${APR_REL}" + IMPORTED_LOCATION_DEBUG "${APR_DEB}" + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + INTERFACE_INCLUDE_DIRECTORIES "${INC_PARENT}/include" + ) + + # the create the activemq-cpp CMake config target with a dependency on apr + add_library(unofficial::activemq-cpp::activemq-cpp ${LIB_TYPE} IMPORTED) + set_target_properties(unofficial::activemq-cpp::activemq-cpp + PROPERTIES + MAP_IMPORTED_CONFIG_MINSIZEREL Release + MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release + IMPORTED_LOCATION_DEBUG "${AMQ_DEB}" + IMPORTED_LOCATION_RELEASE "${AMQ_REL}" + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + INTERFACE_INCLUDE_DIRECTORIES "${INC_PARENT}/include" + INTERFACE_LINK_LIBRARIES "${DEPS}" + ) +endfunction() + +# +# Since this is a CMake config file for a non-CMake project, and one that is +# for vcpkg to as well, the config file has to cover the various products of +# the builds on the various platforms. +# +# Below, Windows and Linux are covered for static and shared libraries. +# +_set_exists(ACTIVEMQ_CPP_DLL_RELEASE _ACTIVEMQ_CPP_DLL_RELEASE_MISSING "${_IMPORT_PREFIX}/bin/activemq-cpp.dll") +_set_exists(ACTIVEMQ_CPP_LIB_RELEASE _ACTIVEMQ_CPP_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/activemq-cpp.lib") +_set_exists(ACTIVEMQ_CPP_DLL_DEBUG _ACTIVEMQ_CPP_DLL_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/bin/activemq-cppd.dll") +_set_exists(ACTIVEMQ_CPP_LIB_DEBUG _ACTIVEMQ_CPP_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/activemq-cppd.lib") +if (ACTIVEMQ_CPP_DLL_RELEASE) + # + # Windows shared install + # + if (ACTIVEMQ_CPP_LIB_RELEASE AND ACTIVEMQ_CPP_DLL_DEBUG AND ACTIVEMQ_CPP_LIB_DEBUG) + _set_exists(ACTIVEMQ_CPP_APR_LIB_RELEASE _ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/libapr-1.lib") + _set_exists(ACTIVEMQ_CPP_APR_DLL_RELEASE _ACTIVEMQ_CPP_APR_DLL_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/libapr-1.dll") + _set_exists(ACTIVEMQ_CPP_APR_LIB_DEBUG _ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/libapr-1.lib") + _set_exists(ACTIVEMQ_CPP_APR_DLL_DEBUG _ACTIVEMQ_CPP_APR_DLL_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/libapr-1.dll") + if (ACTIVEMQ_CPP_APR_LIB_RELEASE AND ACTIVEMQ_CPP_APR_DLL_RELEASE AND ACTIVEMQ_CPP_APR_LIB_DEBUG AND ACTIVEMQ_CPP_APR_DLL_DEBUG) + _activemq_cpp_windows_dependencies() + if (${CMAKE_FIND_PACKAGE_NAME}_WINDOWS_DEPENDENCIES_FOUND) + # the APR port doesn't have a CMake config target so create one + add_library(unofficial::activemq-cpp::apr SHARED IMPORTED) + set_target_properties(unofficial::activemq-cpp::apr + PROPERTIES + MAP_IMPORTED_CONFIG_MINSIZEREL Release + MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release + IMPORTED_LOCATION_RELEASE "${ACTIVEMQ_CPP_APR_DLL_RELEASE}" + IMPORTED_IMPLIB_RELEASE "${ACTIVEMQ_CPP_APR_LIB_RELEASE}" + IMPORTED_LOCATION_DEBUG "${ACTIVEMQ_CPP_APR_DLL_DEBUG}" + IMPORTED_IMPLIB_DEBUG "${ACTIVEMQ_CPP_APR_LIB_DEBUG}" + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + ) + + # the create the activemq-cpp CMake config target with a dependency on apr + add_library(unofficial::activemq-cpp::activemq-cpp SHARED IMPORTED) + set_target_properties(unofficial::activemq-cpp::activemq-cpp + PROPERTIES + MAP_IMPORTED_CONFIG_MINSIZEREL Release + MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release + IMPORTED_LOCATION_RELEASE "${ACTIVEMQ_CPP_DLL_RELEASE}" + IMPORTED_IMPLIB_RELEASE "${ACTIVEMQ_CPP_LIB_RELEASE}" + IMPORTED_LOCATION_DEBUG "${ACTIVEMQ_CPP_DLL_DEBUG}" + IMPORTED_IMPLIB_DEBUG "${ACTIVEMQ_CPP_LIB_DEBUG}" + IMPORTED_CONFIGURATIONS "RELEASE;DEBUG" + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "unofficial::activemq-cpp::apr;unofficial::activemq-cpp::ws2;unofficial::activemq-cpp::rpcrt4;unofficial::activemq-cpp::mswsock" + ) + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND TRUE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: apr vcpkg port not found in ${_IMPORT_PREFIX}.") + foreach(_MISSING + ${_ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING} + ${_ACTIVEMQ_CPP_APR_DLL_RELEASE_MISSING} + ${_ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING} + ${_ACTIVEMQ_CPP_APR_DLL_DEBUG_MISSING} + ) + string(APPEND ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE " \"${_MISSING}\" not found.") + endforeach() + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + set(activemq-cppConfig_FOUND TRUE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install error: Found ${_IMPORT_PREFIX}debug/bin/activemq-cppd.dll.") + foreach(_MISSING + ${_ACTIVEMQ_CPP_LIB_RELEASE_MISSING} + ${_ACTIVEMQ_CPP_DLL_DEBUG_MISSING} + ${_ACTIVEMQ_CPP_LIB_DEBUG_MISSING}) + string(APPEND ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE " \"${_MISSING}\" not found.") + endforeach() + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() +else() + # + # not Windows shared install + # + _set_exists(ACTIVEMQ_CPP_LIB_RELEASE _ACTIVEMQ_CPP_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/libactivemq-cpp.lib") + _set_exists(ACTIVEMQ_CPP_LIB_DEBUG _ACTIVEMQ_CPP_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/libactivemq-cpp.lib") + if (ACTIVEMQ_CPP_LIB_RELEASE) + # + # Windows static install + # + if (ACTIVEMQ_CPP_LIB_DEBUG) + _set_exists(ACTIVEMQ_CPP_APR_LIB_RELEASE _ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/apr-1.lib") + _set_exists(ACTIVEMQ_CPP_APR_LIB_DEBUG _ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/apr-1.lib") + if (ACTIVEMQ_CPP_APR_LIB_RELEASE AND ACTIVEMQ_CPP_APR_LIB_DEBUG) + _activemq_cpp_windows_dependencies() + if (${CMAKE_FIND_PACKAGE_NAME}_WINDOWS_DEPENDENCIES_FOUND) + _add_apr_and_amq_targets("${_IMPORT_PREFIX}" + STATIC + "${ACTIVEMQ_CPP_APR_LIB_RELEASE}" + "${ACTIVEMQ_CPP_APR_LIB_DEBUG}" + "${ACTIVEMQ_CPP_LIB_RELEASE}" + "${ACTIVEMQ_CPP_LIB_DEBUG}" + "unofficial::activemq-cpp::apr;unofficial::activemq-cpp::ws2;unofficial::activemq-cpp::rpcrt4;unofficial::activemq-cpp::mswsock") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND TRUE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: apr vcpkg port not found in ${_IMPORT_PREFIX}.") + foreach(_MISSING ${_ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING} ${_ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING}) + string(APPEND ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE " \"${_MISSING}\" not found.") + endforeach() + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install error: Found ${ACTIVEMQ_CPP_LIB_RELEASE} but not ${_ACTIVEMQ_CPP_LIB_DEBUG_MISSING}.") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + # + # not Windows shared or static install + # + _set_exists(ACTIVEMQ_CPP_LIB_RELEASE _ACTIVEMQ_CPP_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/libactivemq-cpp.so.19.0.5") + _set_exists(ACTIVEMQ_CPP_LIB_DEBUG _ACTIVEMQ_CPP_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/libactivemq-cpp.so.19.0.5") + if(ACTIVEMQ_CPP_LIB_RELEASE) + # + # Linux shared install (this may pick up some other Unix-like installs) + # + if (ACTIVEMQ_CPP_LIB_DEBUG) + _set_exists(ACTIVEMQ_CPP_APR_LIB_RELEASE _ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/libapr-1.so") + _set_exists(ACTIVEMQ_CPP_APR_LIB_DEBUG _ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/libapr-1.so") + if (ACTIVEMQ_CPP_APR_LIB_RELEASE AND ACTIVEMQ_CPP_APR_LIB_DEBUG) + find_package(Threads) + if (Threads_FOUND) + _add_apr_and_amq_targets("${_IMPORT_PREFIX}" + SHARED + "${ACTIVEMQ_CPP_APR_LIB_RELEASE}" + "${ACTIVEMQ_CPP_APR_LIB_DEBUG}" + "${ACTIVEMQ_CPP_LIB_RELEASE}" + "${ACTIVEMQ_CPP_LIB_DEBUG}" + "unofficial::activemq-cpp::apr;Threads::Threads") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND TRUE) + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: threads library not found.") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: apr vcpkg port not found in ${_IMPORT_PREFIX}.") + foreach(_MISSING ${_ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING} ${_ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING}) + string(APPEND ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE " \"${_MISSING}\" not found.") + endforeach() + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install error: Found ${ACTIVEMQ_CPP_LIB_RELEASE} but not ${_ACTIVEMQ_CPP_LIB_DEBUG_MISSING}") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + # + # not Windows shared or static or Linux shared install + # + _set_exists(ACTIVEMQ_CPP_LIB_RELEASE _ACTIVEMQ_CPP_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/libactivemq-cpp.a") + _set_exists(ACTIVEMQ_CPP_LIB_DEBUG _ACTIVEMQ_CPP_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/libactivemq-cpp.a") + if (ACTIVEMQ_CPP_LIB_RELEASE) + # + # Linux static install (this may pick up some other Unix-like installs) + # + if (ACTIVEMQ_CPP_LIB_DEBUG) + _set_exists(ACTIVEMQ_CPP_APR_LIB_RELEASE _ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING "${_IMPORT_PREFIX}/lib/libapr-1.a") + _set_exists(ACTIVEMQ_CPP_APR_LIB_DEBUG _ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING "${_IMPORT_PREFIX}/debug/lib/libapr-1.a") + if (ACTIVEMQ_CPP_APR_LIB_RELEASE AND ACTIVEMQ_CPP_APR_LIB_DEBUG) + find_package(Threads) + if (Threads_FOUND) + _add_apr_and_amq_targets("${_IMPORT_PREFIX}" + STATIC + "${ACTIVEMQ_CPP_APR_LIB_RELEASE}" + "${ACTIVEMQ_CPP_APR_LIB_DEBUG}" + "${ACTIVEMQ_CPP_LIB_RELEASE}" + "${ACTIVEMQ_CPP_LIB_DEBUG}" + "unofficial::activemq-cpp::apr;Threads::Threads") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND TRUE) + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: threads library not found.") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install dependency failure: apr vcpkg port not found in ${_IMPORT_PREFIX}.") + foreach(_MISSING ${_ACTIVEMQ_CPP_APR_LIB_RELEASE_MISSING} ${_ACTIVEMQ_CPP_APR_LIB_DEBUG_MISSING}) + string(APPEND ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE " \"${_MISSING}\" not found.") + endforeach() + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg install error: Found ${ACTIVEMQ_CPP_LIB_RELEASE} but not ${_ACTIVEMQ_CPP_LIB_DEBUG_MISSING}") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + else() + # + # Some other configuration... + # (not Windows shared or static or Linux shared or static install) + # + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "Activemq-cpp vcpkg unexpected install: could not find any expected activemq-cpp libraries under ${_IMPORT_PREFIX}. The CMake configuration file only understands Windows and Linux static and shared installs from vcpkg.") + set(${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + endif() + endif() + endif() +endif() diff --git a/ports/activemq-cpp/fix-crt-linkage-dyn.patch b/ports/activemq-cpp/fix-crt-linkage-dyn.patch new file mode 100644 index 000000000..c2a3a399e --- /dev/null +++ b/ports/activemq-cpp/fix-crt-linkage-dyn.patch @@ -0,0 +1,36 @@ +diff --git a/vs2010-build/activemq-cpp.vcxproj b/vs2010-build/activemq-cpp.vcxproj +index 54b4822..6b35511 100644 +--- a/vs2010-build/activemq-cpp.vcxproj ++++ b/vs2010-build/activemq-cpp.vcxproj +@@ -2578,6 +2578,7 @@ + Default + true + false ++ MultiThreadedDebugDLL + true + + +@@ -2687,6 +2688,7 @@ + true + false + true ++ MultiThreadedDebugDLL + + + +@@ -2794,6 +2796,7 @@ + ../src/main;$(APR_DIST)\$(PlatformName)\include;$(OPENSSL_DIST)\$(PlatformName)\include;$(PLATFORM_SDK)\include;%(AdditionalIncludeDirectories) + false + true ++ MultiThreadedDLL + + + +@@ -2906,6 +2909,7 @@ + ../src/main;$(APR_DIST)\$(PlatformName)\include;$(OPENSSL_DIST)\$(PlatformName)\include;$(PLATFORM_SDK)\include;%(AdditionalIncludeDirectories) + false + true ++ MultiThreadedDLL + + + diff --git a/ports/activemq-cpp/portfile.cmake b/ports/activemq-cpp/portfile.cmake index 6afa95b79..4700c5c3d 100644 --- a/ports/activemq-cpp/portfile.cmake +++ b/ports/activemq-cpp/portfile.cmake @@ -1,4 +1,4 @@ -vcpkg_fail_port_install( ON_TARGET "uwp" "linux" "osx") +vcpkg_fail_port_install( ON_TARGET "uwp" "osx") set(VERSION 3.9.5) @@ -8,92 +8,127 @@ vcpkg_download_distfile(ARCHIVE SHA512 83692d3dfd5ecf557fc88d204a03bf169ce6180bcff27be41b09409b8f7793368ffbeed42d98ef6374c6b6b477d9beb8a4a9ac584df9e56725ec59ceceaa6ae2 ) -vcpkg_extract_source_archive_ex( - OUT_SOURCE_PATH SOURCE_PATH - ARCHIVE ${ARCHIVE} - PATCHES - FunctionLevelLinkingOn.diff - fix-crt-linkage.patch -) +if (VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux") + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE ${ARCHIVE} + ) -set(ACTIVEMQCPP_MSVC_PROJ ${SOURCE_PATH}/vs2010-build/activemq-cpp.vcxproj) + vcpkg_configure_make( + SOURCE_PATH "${SOURCE_PATH}" + AUTOCONFIG + OPTIONS + "--with-openssl=${CURRENT_INSTALLED_DIR}" + "--with-apr=${CURRENT_INSTALLED_DIR}/tools/apr" + ) -string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" ACTIVEMQCPP_SHARED_LIB) + vcpkg_install_make() + file(RENAME "${CURRENT_PACKAGES_DIR}/include/activemq-cpp-${VERSION}/activemq" "${CURRENT_PACKAGES_DIR}/include/activemq") + file(RENAME "${CURRENT_PACKAGES_DIR}/include/activemq-cpp-${VERSION}/cms" "${CURRENT_PACKAGES_DIR}/include/cms") + file(RENAME "${CURRENT_PACKAGES_DIR}/include/activemq-cpp-${VERSION}/decaf" "${CURRENT_PACKAGES_DIR}/include/decaf") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/activemq-cpp-${VERSION}") -if (ACTIVEMQCPP_SHARED_LIB) - set(RELEASE_CONF "ReleaseDLL") - set(DEBUG_CONF "DebugDLL") - - set(ACTIVEMQCPP_LIB_PREFFIX ) - set(ACTIVEMQCPP_LIB_SUFFIX d) - vcpkg_replace_string(${ACTIVEMQCPP_MSVC_PROJ} ";apr-1.lib" ";libapr-1.lib") + vcpkg_copy_pdbs() else() - set(RELEASE_CONF "Release") - set(DEBUG_CONF "Debug") - - set(ACTIVEMQCPP_LIB_PREFFIX lib) - set(ACTIVEMQCPP_LIB_SUFFIX ) - vcpkg_replace_string(${ACTIVEMQCPP_MSVC_PROJ} ";libapr-1.lib" ";apr-1.lib") -endif() + set(PATCHES FunctionLevelLinkingOn.diff) + if(VCPKG_CRT_LINKAGE STREQUAL "static") + list(APPEND PATCHES fix-crt-linkage.patch) + else() + list(APPEND PATCHES fix-crt-linkage-dyn.patch) + endif() -if (VCPKG_TARGET_ARCHITECTURE MATCHES "x86") - set(BUILD_ARCH "Win32") - set(OUTPUT_DIR "Win32") -elseif (VCPKG_TARGET_ARCHITECTURE MATCHES "x64") - set(BUILD_ARCH "x64") - set(OUTPUT_DIR "Win64") -else() - message(FATAL_ERROR "Unsupported architecture: ${VCPKG_TARGET_ARCHITECTURE}") -endif() + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE ${ARCHIVE} + PATCHES ${PATCHES} + ) -vcpkg_build_msbuild( - PROJECT_PATH ${ACTIVEMQCPP_MSVC_PROJ} - RELEASE_CONFIGURATION ${RELEASE_CONF} - DEBUG_CONFIGURATION ${DEBUG_CONF} - PLATFORM ${BUILD_ARCH} - USE_VCPKG_INTEGRATION -) + set(ACTIVEMQCPP_MSVC_PROJ "${SOURCE_PATH}/vs2010-build/activemq-cpp.vcxproj") -vcpkg_copy_pdbs() + string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" ACTIVEMQCPP_SHARED_LIB) -if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") - file(COPY - ${SOURCE_PATH}/vs2010-build/${BUILD_ARCH}/${RELEASE_CONF}/${ACTIVEMQCPP_LIB_PREFFIX}activemq-cpp.lib - DESTINATION ${CURRENT_PACKAGES_DIR}/lib - ) - if (ACTIVEMQCPP_SHARED_LIB) - file(COPY - ${SOURCE_PATH}/vs2010-build/${BUILD_ARCH}/${RELEASE_CONF}/activemq-cpp.dll - DESTINATION ${CURRENT_PACKAGES_DIR}/bin - ) - file(COPY - ${SOURCE_PATH}/vs2010-build/${BUILD_ARCH}/${RELEASE_CONF}/activemq-cpp.pdb - DESTINATION ${CURRENT_PACKAGES_DIR}/bin - ) + set(RELEASE_CONF "ReleaseDLL") + set(DEBUG_CONF "DebugDLL") + + set(ACTIVEMQCPP_LIB_PREFFIX ) + set(ACTIVEMQCPP_LIB_SUFFIX d) + vcpkg_replace_string("${ACTIVEMQCPP_MSVC_PROJ}" ";apr-1.lib" ";libapr-1.lib") + else() + set(RELEASE_CONF "Release") + set(DEBUG_CONF "Debug") + + set(ACTIVEMQCPP_LIB_PREFFIX lib) + set(ACTIVEMQCPP_LIB_SUFFIX ) + vcpkg_replace_string("${ACTIVEMQCPP_MSVC_PROJ}" ";libapr-1.lib" ";apr-1.lib") endif() -endif() -if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") - file(COPY - ${SOURCE_PATH}/vs2010-build/${BUILD_ARCH}/${DEBUG_CONF}/${ACTIVEMQCPP_LIB_PREFFIX}activemq-cpp${ACTIVEMQCPP_LIB_SUFFIX}.lib - DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib + if (VCPKG_TARGET_ARCHITECTURE MATCHES "x86") + set(BUILD_ARCH "Win32") + elseif (VCPKG_TARGET_ARCHITECTURE MATCHES "x64") + set(BUILD_ARCH "x64") + else() + message(FATAL_ERROR "Unsupported architecture: ${VCPKG_TARGET_ARCHITECTURE}") + endif() + + string(REPLACE "/" "\\" WIN_SOURCE_PATH "${SOURCE_PATH}") + vcpkg_replace_string("${ACTIVEMQCPP_MSVC_PROJ}" "ClCompile Include=\"..\\src" "ClCompile Include=\"${WIN_SOURCE_PATH}\\src") + vcpkg_replace_string("${ACTIVEMQCPP_MSVC_PROJ}" "ClInclude Include=\"..\\src" "ClInclude Include=\"${WIN_SOURCE_PATH}\\src") + vcpkg_replace_string("${ACTIVEMQCPP_MSVC_PROJ}" "../src/main" "${WIN_SOURCE_PATH}\\src\\main") + vcpkg_install_msbuild( + SOURCE_PATH "${SOURCE_PATH}/vs2010-build" + PROJECT_SUBPATH "activemq-cpp.vcxproj" + RELEASE_CONFIGURATION ${RELEASE_CONF} + DEBUG_CONFIGURATION ${DEBUG_CONF} + PLATFORM ${BUILD_ARCH} + USE_VCPKG_INTEGRATION + ALLOW_ROOT_INCLUDES + SKIP_CLEAN ) - - if (ACTIVEMQCPP_SHARED_LIB) + + vcpkg_copy_pdbs() + + if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") file(COPY - ${SOURCE_PATH}/vs2010-build/${BUILD_ARCH}/${DEBUG_CONF}/activemq-cpp${ACTIVEMQCPP_LIB_SUFFIX}.dll - DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vs2010-build/${BUILD_ARCH}/${RELEASE_CONF}/${ACTIVEMQCPP_LIB_PREFFIX}activemq-cpp.lib" + DESTINATION "${CURRENT_PACKAGES_DIR}/lib" ) + + if (ACTIVEMQCPP_SHARED_LIB) + file(COPY + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vs2010-build/${BUILD_ARCH}/${RELEASE_CONF}/activemq-cpp.dll" + DESTINATION "${CURRENT_PACKAGES_DIR}/bin" + ) + file(COPY + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vs2010-build/${BUILD_ARCH}/${RELEASE_CONF}/activemq-cpp.pdb" + DESTINATION "${CURRENT_PACKAGES_DIR}/bin" + ) + endif() + endif() + + if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") file(COPY - ${SOURCE_PATH}/vs2010-build/${BUILD_ARCH}/${DEBUG_CONF}/activemq-cpp${ACTIVEMQCPP_LIB_SUFFIX}.pdb - DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/vs2010-build/${BUILD_ARCH}/${DEBUG_CONF}/${ACTIVEMQCPP_LIB_PREFFIX}activemq-cpp${ACTIVEMQCPP_LIB_SUFFIX}.lib" + DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib" ) + + if (ACTIVEMQCPP_SHARED_LIB) + file(COPY + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/vs2010-build/${BUILD_ARCH}/${DEBUG_CONF}/activemq-cpp${ACTIVEMQCPP_LIB_SUFFIX}.dll" + DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin" + ) + file(COPY + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/vs2010-build/${BUILD_ARCH}/${DEBUG_CONF}/activemq-cpp${ACTIVEMQCPP_LIB_SUFFIX}.pdb" + DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin" + ) + endif() endif() -endif() -file(COPY ${SOURCE_PATH}/src/main/activemq DESTINATION ${CURRENT_PACKAGES_DIR}/include FILES_MATCHING PATTERN *.h) -file(COPY ${SOURCE_PATH}/src/main/cms DESTINATION ${CURRENT_PACKAGES_DIR}/include FILES_MATCHING PATTERN *.h) -file(COPY ${SOURCE_PATH}/src/main/decaf DESTINATION ${CURRENT_PACKAGES_DIR}/include FILES_MATCHING PATTERN *.h) + file(COPY "${SOURCE_PATH}/src/main/activemq" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN *.h) + file(COPY "${SOURCE_PATH}/src/main/cms" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN *.h) + file(COPY "${SOURCE_PATH}/src/main/decaf" DESTINATION "${CURRENT_PACKAGES_DIR}/include" FILES_MATCHING PATTERN *.h) + vcpkg_clean_msbuild() +endif() -file(INSTALL ${SOURCE_PATH}/LICENSE.txt DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) +file(INSTALL "${CURRENT_PORT_DIR}/activemq-cppConfig.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/activemq-cpp") +file(INSTALL "${SOURCE_PATH}/LICENSE.txt" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright) diff --git a/ports/activemq-cpp/vcpkg.json b/ports/activemq-cpp/vcpkg.json index f950dba67..9a804bf4b 100644 --- a/ports/activemq-cpp/vcpkg.json +++ b/ports/activemq-cpp/vcpkg.json @@ -1,9 +1,9 @@ { "name": "activemq-cpp", - "version-string": "3.9.5", - "port-version": 4, + "version-semver": "3.9.5", + "port-version": 5, "description": "Apache ActiveMQ is the most popular and powerful open source messaging and Integration Patterns server.", - "supports": "!(uwp | linux | osx)", + "supports": "!(uwp | osx)", "dependencies": [ "apr" ] diff --git a/scripts/ci.baseline.txt b/scripts/ci.baseline.txt index bc5452390..25c6ef1fe 100644 --- a/scripts/ci.baseline.txt +++ b/scripts/ci.baseline.txt @@ -1697,7 +1697,6 @@ lapack-reference:arm-uwp=skip # failures for x64-windows-static-md ace:x64-windows-static-md=fail -activemq-cpp:x64-windows-static-md=fail akali:x64-windows-static-md=fail chromium-base:x64-windows-static-md=fail clockutils:x64-windows-static-md=fail diff --git a/versions/a-/activemq-cpp.json b/versions/a-/activemq-cpp.json index 2507ec7aa..e08320929 100644 --- a/versions/a-/activemq-cpp.json +++ b/versions/a-/activemq-cpp.json @@ -1,5 +1,10 @@ { "versions": [ + { + "git-tree": "bce9f87e7df6f4e8a9c3121018ffc032e3d2603e", + "version-semver": "3.9.5", + "port-version": 5 + }, { "git-tree": "13f5f938c4d12bf4a62061f9891f77e7fc03fc23", "version-string": "3.9.5", diff --git a/versions/baseline.json b/versions/baseline.json index 80b99c5fa..eda7ee253 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -22,7 +22,7 @@ }, "activemq-cpp": { "baseline": "3.9.5", - "port-version": 4 + "port-version": 5 }, "ade": { "baseline": "0.1.1f", -- cgit v1.2.3