mirror of
https://github.com/microsoft/vcpkg.git
synced 2024-11-24 03:39:05 +08:00
[pulsar-client-cpp] New port (#35579)
* [pulsar-client-cpp] New port * Remove unnecessary link options * Address review comments - Use find_dependency instead of find_package - Specify BUILD_DYNAMIC_LIB explicitly * Fix the Windows build and linkage * Fix dynamic library not built when VCPKG_LIBRARY_LINKAGE is dynamic on Windows * Fix Linux and OSX failures * Remove PULSAR_FORCE_DYNAMIC_LIBRARY and upgrade version to 3.4.2 * Reduce the changes to the upstream CMakeLists.txt * Remove unused version * Optimize finding and linking dependency and patch the header for static library * Support multi-config generators * Fix path for release libraries
This commit is contained in:
parent
695a696619
commit
dc19823670
82
ports/pulsar-client-cpp/0001-use-find-package.patch
Normal file
82
ports/pulsar-client-cpp/0001-use-find-package.patch
Normal file
@ -0,0 +1,82 @@
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index fb4f1b1..1bcfd47 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -96,6 +96,7 @@ if (APPLE AND NOT LINK_STATIC)
|
||||
else ()
|
||||
set(LATEST_PROTOBUF FALSE)
|
||||
endif ()
|
||||
+set(LATEST_PROTOBUF FALSE)
|
||||
|
||||
if (NOT CMAKE_CXX_STANDARD)
|
||||
if (LATEST_PROTOBUF)
|
||||
@@ -157,14 +158,15 @@ if (LATEST_PROTOBUF)
|
||||
# Use Config mode to avoid FindProtobuf.cmake does not find the Abseil library
|
||||
find_package(Protobuf REQUIRED CONFIG)
|
||||
else ()
|
||||
- find_package(Protobuf REQUIRED)
|
||||
+ find_package(protobuf CONFIG REQUIRED)
|
||||
+ set(Protobuf_LIBRARIES protobuf::libprotobuf)
|
||||
endif ()
|
||||
message("Protobuf_INCLUDE_DIRS: " ${Protobuf_INCLUDE_DIRS})
|
||||
message("Protobuf_LIBRARIES: " ${Protobuf_LIBRARIES})
|
||||
|
||||
# NOTE: CMake might not find curl and zlib on some platforms like Ubuntu, in this case, find them manually
|
||||
set(CURL_NO_CURL_CMAKE ON)
|
||||
-find_package(curl QUIET)
|
||||
+find_package(CURL REQUIRED)
|
||||
if (NOT CURL_FOUND)
|
||||
find_path(CURL_INCLUDE_DIRS NAMES curl/curl.h)
|
||||
find_library(CURL_LIBRARIES NAMES curl curllib libcurl_imp curllib_static libcurl)
|
||||
@@ -175,7 +177,7 @@ if (NOT CURL_INCLUDE_DIRS OR NOT CURL_LIBRARIES)
|
||||
message(FATAL_ERROR "Could not find libcurl")
|
||||
endif ()
|
||||
|
||||
-find_package(zlib QUIET)
|
||||
+find_package(ZLIB REQUIRED)
|
||||
if (NOT ZLIB_FOUND)
|
||||
find_path(ZLIB_INCLUDE_DIRS NAMES zlib.h)
|
||||
find_library(ZLIB_LIBRARIES NAMES z zlib zdll zlib1 zlibstatic)
|
||||
@@ -226,6 +228,17 @@ elseif (LINK_STATIC AND VCPKG_TRIPLET)
|
||||
if (LIB_SNAPPY)
|
||||
message(STATUS "Found Snappy library: ${LIB_SNAPPY}")
|
||||
endif ()
|
||||
+elseif (1)
|
||||
+ find_package(zstd CONFIG REQUIRED)
|
||||
+ set(HAS_ZSTD 1)
|
||||
+ set(LIB_ZSTD
|
||||
+ $<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>)
|
||||
+ find_package(Snappy CONFIG REQUIRED)
|
||||
+ set(HAS_SNAPPY 1)
|
||||
+ set(LIB_SNAPPY Snappy::snappy)
|
||||
+ if (MSVC)
|
||||
+ find_package(dlfcn-win32 CONFIG REQUIRED)
|
||||
+ endif ()
|
||||
else()
|
||||
if (MSVC AND (${CMAKE_BUILD_TYPE} STREQUAL Debug))
|
||||
find_library(LIB_ZSTD zstdd HINTS "${VCPKG_DEBUG_ROOT}/lib")
|
||||
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
|
||||
index 8bd9749..551ac0c 100644
|
||||
--- a/lib/CMakeLists.txt
|
||||
+++ b/lib/CMakeLists.txt
|
||||
@@ -31,12 +31,14 @@ include_directories(${LIB_AUTOGEN_DIR})
|
||||
# Using custom command for now
|
||||
set(PROTO_SOURCES ${LIB_AUTOGEN_DIR}/PulsarApi.pb.cc ${LIB_AUTOGEN_DIR}/PulsarApi.pb.h)
|
||||
set(PULSAR_SOURCES ${PULSAR_SOURCES} ${PROTO_SOURCES})
|
||||
-ADD_CUSTOM_COMMAND(
|
||||
- OUTPUT ${PROTO_SOURCES}
|
||||
- COMMAND ${PROTOC_PATH} -I ../proto ../proto/PulsarApi.proto --cpp_out=${LIB_AUTOGEN_DIR}
|
||||
- DEPENDS
|
||||
- ../proto/PulsarApi.proto
|
||||
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
+
|
||||
+add_library(proto-objects OBJECT "${CMAKE_SOURCE_DIR}/proto/PulsarApi.proto")
|
||||
+target_link_libraries(proto-objects PUBLIC protobuf::libprotobuf)
|
||||
+target_include_directories(proto-objects PUBLIC "${LIB_AUTOGEN_DIR}")
|
||||
+protobuf_generate(
|
||||
+ TARGET proto-objects
|
||||
+ IMPORT_DIRS "${CMAKE_SOURCE_DIR}/proto"
|
||||
+ PROTOC_OUT_DIR "${LIB_AUTOGEN_DIR}")
|
||||
|
||||
set(LIBRARY_VERSION $ENV{PULSAR_LIBRARY_VERSION})
|
||||
if (NOT LIBRARY_VERSION)
|
41
ports/pulsar-client-cpp/portfile.cmake
Normal file
41
ports/pulsar-client-cpp/portfile.cmake
Normal file
@ -0,0 +1,41 @@
|
||||
vcpkg_from_github(
|
||||
OUT_SOURCE_PATH SOURCE_PATH
|
||||
REPO apache/pulsar-client-cpp
|
||||
REF "v${VERSION}"
|
||||
SHA512 b1f56ca8d5edb7faaba68eb4e04fcb4e458ccf2c7a5b0fb6d66868c6507081344fb3f0ebb29afe9aef567295a249b09cdeb3fb00285746767bbccef65a0f6e70
|
||||
HEAD_REF main
|
||||
PATCHES
|
||||
0001-use-find-package.patch
|
||||
)
|
||||
|
||||
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" BUILD_STATIC_LIB)
|
||||
string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" BUILD_DYNAMIC_LIB)
|
||||
|
||||
vcpkg_cmake_configure(
|
||||
SOURCE_PATH "${SOURCE_PATH}"
|
||||
OPTIONS
|
||||
-DBUILD_TESTS=OFF
|
||||
-DBUILD_PERF_TOOLS=OFF
|
||||
-DBUILD_DYNAMIC_LIB=${BUILD_DYNAMIC_LIB}
|
||||
-DBUILD_STATIC_LIB=${BUILD_STATIC_LIB}
|
||||
)
|
||||
|
||||
vcpkg_cmake_install()
|
||||
|
||||
if (BUILD_STATIC_LIB)
|
||||
vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/pulsar/defines.h"
|
||||
"#ifdef PULSAR_STATIC"
|
||||
"#if 1")
|
||||
endif ()
|
||||
|
||||
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
|
||||
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
|
||||
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin")
|
||||
endif()
|
||||
|
||||
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
|
||||
configure_file("${CMAKE_CURRENT_LIST_DIR}/usage" "${CURRENT_PACKAGES_DIR}/share/${PORT}/usage" COPYONLY)
|
||||
|
||||
configure_file("${CMAKE_CURRENT_LIST_DIR}/unofficial-pulsar-config.cmake" "${CURRENT_PACKAGES_DIR}/share/unofficial-pulsar/unofficial-pulsar-config.cmake" @ONLY)
|
||||
|
||||
vcpkg_copy_pdbs()
|
81
ports/pulsar-client-cpp/unofficial-pulsar-config.cmake
Normal file
81
ports/pulsar-client-cpp/unofficial-pulsar-config.cmake
Normal file
@ -0,0 +1,81 @@
|
||||
if (NOT TARGET unofficial::pulsar::pulsar)
|
||||
get_filename_component(VCPKG_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
|
||||
get_filename_component(VCPKG_IMPORT_PREFIX "${VCPKG_IMPORT_PREFIX}" PATH)
|
||||
get_filename_component(VCPKG_IMPORT_PREFIX "${VCPKG_IMPORT_PREFIX}" PATH)
|
||||
|
||||
find_path(_pulsar_include_dir NAMES "pulsar/Client.h" PATH "${VCPKG_IMPORT_PREFIX}/include")
|
||||
set(_temp_cmake_ignore_path ${CMAKE_IGNORE_PATH})
|
||||
# Without setting CMAKE_IGNORE_PATH, the library under debug/lib/ directory could be found
|
||||
set(CMAKE_IGNORE_PATH "${VCPKG_IMPORT_PREFIX}/debug/lib")
|
||||
find_library(_pulsar_library_release NAMES pulsar pulsar-static PATH "${VCPKG_IMPORT_PREFIX}/lib")
|
||||
set(CMAKE_IGNORE_PATH ${_temp_cmake_ignore_path})
|
||||
unset(_temp_cmake_ignore_path)
|
||||
find_library(_pulsar_library_debug NAMES pulsar pulsar-static PATH "${VCPKG_IMPORT_PREFIX}/debug/lib")
|
||||
message(STATUS "Found _pulsar_library_release: ${_pulsar_library_release}")
|
||||
message(STATUS "Found _pulsar_library_debug: ${_pulsar_library_debug}")
|
||||
if (NOT _pulsar_include_dir OR NOT _pulsar_library_release)
|
||||
message(FATAL_ERROR "Broken installation of vcpkg port pulsar-client-cpp")
|
||||
endif ()
|
||||
|
||||
if (MSVC AND "@VCPKG_LIBRARY_LINKAGE@" STREQUAL "dynamic")
|
||||
find_file(_pulsar_release_dll NAMES "pulsar.dll" PATHS "${VCPKG_IMPORT_PREFIX}/bin" NO_DEFAULT_PATH)
|
||||
find_file(_pulsar_debug_dll NAMES "pulsar.dll" PATHS "${VCPKG_IMPORT_PREFIX}/debug/bin" NO_DEFAULT_PATH)
|
||||
if (NOT _pulsar_release_dll)
|
||||
message(FATAL_ERROR "No pulsar.dll found")
|
||||
endif ()
|
||||
message(STATUS "Found _pulsar_release_dll: ${_pulsar_release_dll}")
|
||||
message(STATUS "Found _pulsar_debug_dll: ${_pulsar_debug_dll}")
|
||||
endif ()
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(OpenSSL)
|
||||
find_dependency(ZLIB)
|
||||
find_dependency(protobuf CONFIG)
|
||||
find_dependency(CURL CONFIG)
|
||||
find_dependency(zstd CONFIG)
|
||||
find_dependency(snappy CONFIG)
|
||||
if (MSVC)
|
||||
find_dependency(dlfcn-win32 CONFIG)
|
||||
endif ()
|
||||
|
||||
if (_pulsar_release_dll)
|
||||
add_library(unofficial::pulsar::pulsar SHARED IMPORTED)
|
||||
set_target_properties(unofficial::pulsar::pulsar PROPERTIES
|
||||
IMPORTED_CONFIGURATIONS "Release"
|
||||
IMPORTED_IMPLIB_RELEASE "${_pulsar_library_release}"
|
||||
IMPORTED_LOCATION_RELEASE "${_pulsar_release_dll}")
|
||||
if (_pulsar_debug_dll)
|
||||
set_target_properties(unofficial::pulsar::pulsar PROPERTIES
|
||||
IMPORTED_CONFIGURATIONS "Release;DEBUG"
|
||||
IMPORTED_IMPLIB_DEBUG "${_pulsar_library_debug}"
|
||||
IMPORTED_LOCATION_DEBUG "${_pulsar_debug_dll}")
|
||||
unset(_pulsar_debug_dll CACHE)
|
||||
endif ()
|
||||
unset(_pulsar_release_dll CACHE)
|
||||
else ()
|
||||
add_library(unofficial::pulsar::pulsar UNKNOWN IMPORTED)
|
||||
set_target_properties(unofficial::pulsar::pulsar PROPERTIES
|
||||
IMPORTED_LOCATION_RELEASE "${_pulsar_library_release}")
|
||||
if (_pulsar_library_debug)
|
||||
set_target_properties(unofficial::pulsar::pulsar PROPERTIES
|
||||
IMPORTED_LOCATION_DEBUG "${_pulsar_library_debug}")
|
||||
unset(_pulsar_library_debug CACHE)
|
||||
endif ()
|
||||
endif ()
|
||||
set_target_properties(unofficial::pulsar::pulsar PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_pulsar_include_dir}")
|
||||
target_link_libraries(unofficial::pulsar::pulsar INTERFACE
|
||||
OpenSSL::SSL
|
||||
OpenSSL::Crypto
|
||||
ZLIB::ZLIB
|
||||
protobuf::libprotobuf
|
||||
CURL::libcurl
|
||||
$<IF:$<TARGET_EXISTS:zstd::libzstd_shared>,zstd::libzstd_shared,zstd::libzstd_static>
|
||||
Snappy::snappy
|
||||
)
|
||||
if (MSVC)
|
||||
target_link_libraries(unofficial::pulsar::pulsar INTERFACE dlfcn-win32::dl)
|
||||
endif ()
|
||||
unset(_pulsar_library_release CACHE)
|
||||
unset(_pulsar_include_dir CACHE)
|
||||
endif ()
|
4
ports/pulsar-client-cpp/usage
Normal file
4
ports/pulsar-client-cpp/usage
Normal file
@ -0,0 +1,4 @@
|
||||
pulsar-client-cpp provides CMake targets:
|
||||
|
||||
find_package(unofficial-pulsar CONFIG REQUIRED)
|
||||
target_link_libraries(main PRIVATE unofficial::pulsar::pulsar)
|
48
ports/pulsar-client-cpp/vcpkg.json
Normal file
48
ports/pulsar-client-cpp/vcpkg.json
Normal file
@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "pulsar-client-cpp",
|
||||
"version": "3.4.2",
|
||||
"description": "The Apache Pulsar C++ library",
|
||||
"homepage": "https://github.com/apache/pulsar-client-cpp",
|
||||
"license": "Apache-2.0",
|
||||
"supports": "!(arm & windows) & !android",
|
||||
"dependencies": [
|
||||
"boost-accumulators",
|
||||
"boost-algorithm",
|
||||
"boost-any",
|
||||
"boost-asio",
|
||||
"boost-circular-buffer",
|
||||
"boost-date-time",
|
||||
"boost-predef",
|
||||
"boost-property-tree",
|
||||
"boost-random",
|
||||
"boost-serialization",
|
||||
"boost-xpressive",
|
||||
{
|
||||
"name": "curl",
|
||||
"default-features": false,
|
||||
"features": [
|
||||
"openssl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "dlfcn-win32",
|
||||
"platform": "windows"
|
||||
},
|
||||
"openssl",
|
||||
{
|
||||
"name": "protobuf",
|
||||
"version>=": "3.21.12"
|
||||
},
|
||||
"snappy",
|
||||
{
|
||||
"name": "vcpkg-cmake",
|
||||
"host": true
|
||||
},
|
||||
{
|
||||
"name": "vcpkg-cmake-config",
|
||||
"host": true
|
||||
},
|
||||
"zlib",
|
||||
"zstd"
|
||||
]
|
||||
}
|
@ -6856,6 +6856,10 @@
|
||||
"baseline": "1.14",
|
||||
"port-version": 0
|
||||
},
|
||||
"pulsar-client-cpp": {
|
||||
"baseline": "3.4.2",
|
||||
"port-version": 0
|
||||
},
|
||||
"pulzed-mini": {
|
||||
"baseline": "0.9.14",
|
||||
"port-version": 0
|
||||
|
9
versions/p-/pulsar-client-cpp.json
Normal file
9
versions/p-/pulsar-client-cpp.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"git-tree": "f022e5dacbf10b0a6cead0f065ce6ab885b4c9af",
|
||||
"version": "3.4.2",
|
||||
"port-version": 0
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user