From 35b927eaa50876dd83166090c9964db8868f4498 Mon Sep 17 00:00:00 2001 From: stephb9959 Date: Mon, 19 Apr 2021 21:39:53 -0700 Subject: [PATCH] Adding missing cmake files for kafka --- CMakeLists.txt | 2 +- cmake/CppKafkaConfig.cmake | 57 +++++++++++++++++++++++++++++ cmake/FindRdKafka.cmake | 73 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 cmake/CppKafkaConfig.cmake create mode 100644 cmake/FindRdKafka.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 7324fb01..fa9f62ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,7 +30,7 @@ find_package(Lua REQUIRED) if(SMALL_BUILD) find_package(Poco REQUIRED COMPONENTS Crypto Net Util NetSSL Data DataSQLite) else() - find_package(cppkafka REQUIRED) + find_package(CppKafka REQUIRED) find_package(PostgreSQL REQUIRED) find_package(MySQL REQUIRED) find_package(ODBC REQUIRED) diff --git a/cmake/CppKafkaConfig.cmake b/cmake/CppKafkaConfig.cmake new file mode 100644 index 00000000..656d2d60 --- /dev/null +++ b/cmake/CppKafkaConfig.cmake @@ -0,0 +1,57 @@ + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +include(CMakeFindDependencyMacro) + +# Add FindRdKafka.cmake +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}") + +set(RDKAFKA_MIN_VERSION_HEX "0x00090400") + +# Find boost optional +find_dependency(Boost REQUIRED) + +# Try to find the RdKafka configuration file if present. +# This will search default system locations as well as RdKafka_ROOT and RdKafka_DIR paths if specified. +find_package(RdKafka QUIET CONFIG) +set(RDKAFKA_TARGET_IMPORTS ${RdKafka_FOUND}) +if (NOT RdKafka_FOUND) + find_dependency(RdKafka REQUIRED MODULE) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/CppKafkaTargets.cmake") + +# Export 'CppKafka_ROOT' +set_and_check(CppKafka_ROOT "${PACKAGE_PREFIX_DIR}") + +# Export 'CppKafka_INSTALL_INCLUDE_DIR' +set_and_check(CppKafka_INSTALL_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include") + +# Export 'CppKafka_INSTALL_LIB_DIR' +set_and_check(CppKafka_INSTALL_LIB_DIR "${PACKAGE_PREFIX_DIR}/lib") + +# Validate installed components +check_required_components("CppKafka") diff --git a/cmake/FindRdKafka.cmake b/cmake/FindRdKafka.cmake new file mode 100644 index 00000000..d402fe11 --- /dev/null +++ b/cmake/FindRdKafka.cmake @@ -0,0 +1,73 @@ +# This find module helps find the RdKafka module. It exports the following variables: +# - RdKafka_INCLUDE_DIR : The directory where rdkafka.h is located. +# - RdKafka_LIBNAME : The name of the library, i.e. librdkafka.a, librdkafka.so, etc. +# - RdKafka_LIBRARY_PATH : The full library path i.e. /${RdKafka_LIBNAME} +# - RdKafka::rdkafka : Imported library containing all above properties set. + +if (CPPKAFKA_RDKAFKA_STATIC_LIB) + set(RDKAFKA_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX}) + set(RDKAFKA_SUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX}) + set(RDKAFKA_LIBRARY_TYPE STATIC) +else() + set(RDKAFKA_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX}) + set(RDKAFKA_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(RDKAFKA_LIBRARY_TYPE SHARED) +endif() + +set(RdKafka_LIBNAME ${RDKAFKA_PREFIX}rdkafka${RDKAFKA_SUFFIX}) + +find_path(RdKafka_INCLUDE_DIR + NAMES librdkafka/rdkafka.h + HINTS ${RdKafka_ROOT}/include +) + +find_library(RdKafka_LIBRARY_PATH + NAMES ${RdKafka_LIBNAME} rdkafka + HINTS ${RdKafka_ROOT}/lib ${RdKafka_ROOT}/lib64 +) + +# Check lib paths +if (CPPKAFKA_CMAKE_VERBOSE) + get_property(FIND_LIBRARY_32 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS) + get_property(FIND_LIBRARY_64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS) + message(STATUS "RDKAFKA search 32-bit library paths: ${FIND_LIBRARY_32}") + message(STATUS "RDKAFKA search 64-bit library paths: ${FIND_LIBRARY_64}") + message(STATUS "RdKafka_ROOT = ${RdKafka_ROOT}") + message(STATUS "RdKafka_INCLUDE_DIR = ${RdKafka_INCLUDE_DIR}") + message(STATUS "RdKafka_LIBNAME = ${RdKafka_LIBNAME}") + message(STATUS "RdKafka_LIBRARY_PATH = ${RdKafka_LIBRARY_PATH}") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(RdKafka DEFAULT_MSG + RdKafka_LIBNAME + RdKafka_LIBRARY_PATH + RdKafka_INCLUDE_DIR +) + +set(CONTENTS "#include \n #if RD_KAFKA_VERSION >= ${RDKAFKA_MIN_VERSION_HEX}\n int main() { }\n #endif") +set(FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/rdkafka_version_test.cpp) +file(WRITE ${FILE_NAME} ${CONTENTS}) + +try_compile(RdKafka_FOUND ${CMAKE_CURRENT_BINARY_DIR} + SOURCES ${FILE_NAME} + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${RdKafka_INCLUDE_DIR}") + +if (RdKafka_FOUND) + add_library(RdKafka::rdkafka ${RDKAFKA_LIBRARY_TYPE} IMPORTED GLOBAL) + set(RDKAFKA_DEPENDENCIES pthread) +# set(RDKAFKA_DEPENDENCIES pthread rt crypto dl z) + set_target_properties(RdKafka::rdkafka PROPERTIES + IMPORTED_NAME RdKafka + IMPORTED_LOCATION "${RdKafka_LIBRARY_PATH}" + INTERFACE_INCLUDE_DIRECTORIES "${RdKafka_INCLUDE_DIR}" + INTERFACE_LINK_LIBRARIES "${RDKAFKA_DEPENDENCIES}") + message(STATUS "Found valid rdkafka version") + mark_as_advanced( + RDKAFKA_LIBRARY + RdKafka_INCLUDE_DIR + RdKafka_LIBRARY_PATH + ) +else() + message(FATAL_ERROR "Failed to find valid rdkafka version") +endif()