From d90f039a87e16675a4ff0843faff3c36d68eec9e Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Tue, 14 Jun 2016 19:03:20 -0700 Subject: [PATCH] Find rdkafka via cmake --- CMakeLists.txt | 2 ++ cmake/FindRdKafka.cmake | 43 +++++++++++++++++++++++++ cmake/FindZookeeper.cmake | 8 +---- cmake/sources/check_rdkafka_version.cpp | 9 ++++++ tests/CMakeLists.txt | 2 +- 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 cmake/FindRdKafka.cmake create mode 100644 cmake/sources/check_rdkafka_version.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c044c5..84f4507 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,8 @@ ExternalProject_Add( find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) +find_package(RdKafka REQUIRED) + option(ENABLE_ZOOKEEPER "Whether to enable zookeeper support" ON) if (ENABLE_ZOOKEEPER) find_package(Zookeeper REQUIRED) diff --git a/cmake/FindRdKafka.cmake b/cmake/FindRdKafka.cmake new file mode 100644 index 0000000..563bd44 --- /dev/null +++ b/cmake/FindRdKafka.cmake @@ -0,0 +1,43 @@ +find_path(RDKAFKA_ROOT_DIR + NAMES include/librdkafka/rdkafka.h +) + +find_path(RDKAFKA_INCLUDE_DIR + NAMES librdkafka/rdkafka.h + HINTS ${RDKAFKA_ROOT_DIR}/include +) + +set (HINT_DIR ${RDKAFKA_ROOT_DIR}/lib) + +find_library(RDKAFKA_LIBRARY + NAMES rdkafka + HINTS ${HINT_DIR} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(RDKAFKA DEFAULT_MSG + RDKAFKA_LIBRARY + RDKAFKA_INCLUDE_DIR +) + +try_run(_rdkafka_version_check_run_result _rdkafka_version_check_compile_result + ${CMAKE_CURRENT_BINARY_DIR}/cmake + ${CMAKE_MODULE_PATH}/sources/check_rdkafka_version.cpp + CMAKE_FLAGS -DINCLUDE_DIRECTORIES:STRING=${RDKAFKA_INCLUDE_DIR} + -DLINK_LIBRARIES:STRING=${RDKAFKA_LIBRARY}) + +if (${_rdkafka_version_check_compile_result} STREQUAL "TRUE") + if (${_rdkafka_version_check_run_result} EQUAL 1) + message(STATUS "Found valid rdkafka version") + mark_as_advanced( + RDKAFKA_ROOT_DIR + RDKAFKA_INCLUDE_DIR + RDKAFKA_LIBRARY + ) + else() + message(FATAL_ERROR "Invalid rdkafka version found (< 0.9)") + endif() +else() + message(FATAL_ERROR "Failed to find rdkafka") +endif() + diff --git a/cmake/FindZookeeper.cmake b/cmake/FindZookeeper.cmake index c9c1981..cb0cb9b 100644 --- a/cmake/FindZookeeper.cmake +++ b/cmake/FindZookeeper.cmake @@ -4,7 +4,7 @@ find_path(ZOOKEEPER_ROOT_DIR find_path(ZOOKEEPER_INCLUDE_DIR NAMES zookeeper/zookeeper.h - HINTS ${ZOOOKEEPER_ROOT_DIR}/include + HINTS ${ZOOKEEPER_ROOT_DIR}/include ) set (HINT_DIR ${ZOOKEEPER_ROOT_DIR}/lib) @@ -20,12 +20,6 @@ find_package_handle_standard_args(ZOOKEEPER DEFAULT_MSG ZOOKEEPER_INCLUDE_DIR ) -include(CheckCXXSourceCompiles) - -set(CMAKE_REQUIRED_LIBRARIES ${ZOOKEEPER_LIBRARY}) -check_cxx_source_compiles("int main() { return 0; }" ZOOKEEPER_LINKS) -set(CMAKE_REQUIRED_LIBRARIES) - mark_as_advanced( ZOOKEEPER_ROOT_DIR ZOOKEEPER_INCLUDE_DIR diff --git a/cmake/sources/check_rdkafka_version.cpp b/cmake/sources/check_rdkafka_version.cpp new file mode 100644 index 0000000..9d35faa --- /dev/null +++ b/cmake/sources/check_rdkafka_version.cpp @@ -0,0 +1,9 @@ +#include + +int main() { + int version = rd_kafka_version(); + int major = (version >> 32) & 0xff; + int minor = (version >> 24) & 0xff; + // We need version >= 0.9 + return (major > 0 || minor >= 9) ? 0 : 1; +} \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5bbde04..f3c3b76 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,7 +2,7 @@ include_directories(${GOOGLETEST_INCLUDE}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include/) link_directories(${GOOGLETEST_LIBRARY}) -link_libraries(cppkafka rdkafka gtest gtest_main pthread) +link_libraries(cppkafka ${RDKAFKA_LIBRARY} gtest gtest_main pthread) set(KAFKA_TEST_INSTANCE "kafka-vm:9092" CACHE STRING "The kafka instance to which to connect to run tests")