diff --git a/CMakeLists.txt b/CMakeLists.txt index 414fe586e8..4b1988b1cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,13 +5,14 @@ parseversion("src/rdkafka.h") project(RdKafka VERSION ${RDKAFKA_VERSION}) -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/packaging/cmake/Modules/") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_SOURCE_DIR}/packaging/cmake/Modules/") # Options. No 'RDKAFKA_' prefix to match old C++ code. { -# This option doesn't affect build in fact, only C code -# (see 'rd_kafka_version_str'). In CMake the build type feature usually used -# (like Debug, Release, etc.). +# This option doesn't affect build in fact, only C code (see +# 'rd_kafka_version_str'). +# In CMake the build type feature usually used (like Debug, Release, etc.). option(WITHOUT_OPTIMIZATION "Disable optimization" OFF) option(ENABLE_DEVEL "Enable development asserts, checks, etc" OFF) @@ -36,7 +37,7 @@ endif() include(CheckLibraryExists) check_library_exists(m pow "" WITH_HDRHISTOGRAM) if(WITH_HDRHISTOGRAM) - list(APPEND BUILT_WITH "HDRHISTOGRAM") + list(APPEND BUILT_WITH "HDRHISTOGRAM") endif() # } @@ -68,11 +69,10 @@ endif() # LibDL { try_compile( - WITH_LIBDL - "${CMAKE_CURRENT_BINARY_DIR}/try_compile" - "${TRYCOMPILE_SRC_DIR}/dlopen_test.c" - LINK_LIBRARIES "${CMAKE_DL_LIBS}" -) + WITH_LIBDL + "${CMAKE_CURRENT_BINARY_DIR}/try_compile" + "${TRYCOMPILE_SRC_DIR}/dlopen_test.c" + LINK_LIBRARIES "${CMAKE_DL_LIBS}") if(WITH_LIBDL) list(APPEND BUILT_WITH "LIBDL") endif() @@ -117,11 +117,10 @@ else() set(with_sasl_default ON) else() try_compile( - WITH_SASL_CYRUS_BOOL - "${CMAKE_CURRENT_BINARY_DIR}/try_compile" - "${TRYCOMPILE_SRC_DIR}/libsasl2_test.c" - LINK_LIBRARIES "-lsasl2" - ) + WITH_SASL_CYRUS_BOOL + "${CMAKE_CURRENT_BINARY_DIR}/try_compile" + "${TRYCOMPILE_SRC_DIR}/libsasl2_test.c" + LINK_LIBRARIES "-lsasl2") if(WITH_SASL_CYRUS_BOOL) set(with_sasl_default ON) set(SASL_LIBRARIES "-lsasl2") @@ -163,7 +162,8 @@ option(RDKAFKA_BUILD_STATIC "Build static rdkafka library" OFF) option(RDKAFKA_BUILD_EXAMPLES "Build examples" ON) option(RDKAFKA_BUILD_TESTS "Build tests" ON) if(WIN32) - option(WITHOUT_WIN32_CONFIG "Avoid including win32_config.h on cmake builds" ON) + option(WITHOUT_WIN32_CONFIG "Avoid including win32_config.h on cmake builds" + ON) endif(WIN32) # In: @@ -226,35 +226,27 @@ set(namespace "${PROJECT_NAME}::") include(CMakePackageConfigHelpers) # In: -# * targets_export_name -# * PROJECT_NAME +# * targets_export_name +# * PROJECT_NAME configure_package_config_file( - "packaging/cmake/Config.cmake.in" - "${project_config}" - INSTALL_DESTINATION "${config_install_dir}" -) + "packaging/cmake/Config.cmake.in" "${project_config}" + INSTALL_DESTINATION "${config_install_dir}") write_basic_package_version_file( - "${project_version}" - VERSION ${PROJECT_VERSION} - COMPATIBILITY AnyNewerVersion -) + "${project_version}" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion) -install( - FILES "${project_config}" "${project_version}" "packaging/cmake/Modules/FindLZ4.cmake" - DESTINATION "${config_install_dir}" -) +install(FILES "${project_config}" "${project_version}" + "packaging/cmake/Modules/FindLZ4.cmake" + DESTINATION "${config_install_dir}") install( - EXPORT "${targets_export_name}" - NAMESPACE "${namespace}" - DESTINATION "${config_install_dir}" -) + EXPORT "${targets_export_name}" + NAMESPACE "${namespace}" + DESTINATION "${config_install_dir}") -install( - FILES LICENSES.txt - DESTINATION "share/licenses/librdkafka" -) +install(FILES LICENSES.txt DESTINATION "share/licenses/librdkafka") # } diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 9c3178184c..d9e328ec15 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,5 +1,5 @@ if(WIN32) - set(win32_sources ../win32/wingetopt.c ../win32/wingetopt.h) + set(win32_sources ../win32/wingetopt.c ../win32/wingetopt.h) endif(WIN32) add_executable(producer producer.c ${win32_sources}) @@ -17,17 +17,19 @@ target_link_libraries(rdkafka_performance PUBLIC rdkafka) add_executable(rdkafka_example_cpp rdkafka_example.cpp ${win32_sources}) target_link_libraries(rdkafka_example_cpp PUBLIC rdkafka++) -add_executable(rdkafka_complex_consumer_example_cpp rdkafka_complex_consumer_example.cpp ${win32_sources}) +add_executable(rdkafka_complex_consumer_example_cpp + rdkafka_complex_consumer_example.cpp ${win32_sources}) target_link_libraries(rdkafka_complex_consumer_example_cpp PUBLIC rdkafka++) # The targets below has Unix include dirs and do not compile on Windows. if(NOT WIN32) - add_executable(rdkafka_example rdkafka_example.c) - target_link_libraries(rdkafka_example PUBLIC rdkafka) + add_executable(rdkafka_example rdkafka_example.c) + target_link_libraries(rdkafka_example PUBLIC rdkafka) - add_executable(rdkafka_complex_consumer_example rdkafka_complex_consumer_example.c) - target_link_libraries(rdkafka_complex_consumer_example PUBLIC rdkafka) + add_executable(rdkafka_complex_consumer_example + rdkafka_complex_consumer_example.c) + target_link_libraries(rdkafka_complex_consumer_example PUBLIC rdkafka) - add_executable(kafkatest_verifiable_client kafkatest_verifiable_client.cpp) - target_link_libraries(kafkatest_verifiable_client PUBLIC rdkafka++) + add_executable(kafkatest_verifiable_client kafkatest_verifiable_client.cpp) + target_link_libraries(kafkatest_verifiable_client PUBLIC rdkafka++) endif(NOT WIN32) diff --git a/packaging/mingw-w64/configure-build-msys2-mingw.sh b/packaging/mingw-w64/configure-build-msys2-mingw.sh index c5a0a099e5..d3ebac4ce2 100644 --- a/packaging/mingw-w64/configure-build-msys2-mingw.sh +++ b/packaging/mingw-w64/configure-build-msys2-mingw.sh @@ -27,8 +27,9 @@ cp /C/tools/msys64/mingw64/lib/libcrypto.a ./ cp /C/tools/msys64/mingw64/lib/liblz4.a ./ cp /C/tools/msys64/mingw64/lib/libssl.a ./ cp ../src/librdkafka.a ./ +cp ../src-cpp/librdkafka++.a ./librdkafkapp.a ar -M << EOF -create librdkafka_windows.a +create librdkafka_merge.a addlib librdkafka.a addlib libzstd.a addlib libcrypto.a @@ -38,7 +39,16 @@ save end EOF -cp ./librdkafka_windows.a ../dest/ +ar -M << EOF +create librdkafkapp_merge.a +addlib librdkafka_merge.a +addlib librdkafkapp.a +save +end +EOF + +cp ./librdkafka_merge.a ../dest/lib/librdkafka.a +cp ./librdkafkapp_merge.a ../dest/lib/librdkafka++.a popd rm -rf ./mergescratch diff --git a/src-cpp/CMakeLists.txt b/src-cpp/CMakeLists.txt index a7b3e83e41..ebf2828b8e 100644 --- a/src-cpp/CMakeLists.txt +++ b/src-cpp/CMakeLists.txt @@ -1,7 +1,6 @@ set(LIBVER 1) -set( - sources +set(sources ConfImpl.cpp ConsumerImpl.cpp HandleImpl.cpp @@ -13,8 +12,7 @@ set( QueueImpl.cpp RdKafka.cpp TopicImpl.cpp - TopicPartitionImpl.cpp -) + TopicPartitionImpl.cpp) if(RDKAFKA_BUILD_STATIC) set(CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -31,69 +29,50 @@ endif() target_link_libraries(rdkafka++ PUBLIC rdkafka) # Support '#include ' -target_include_directories(rdkafka++ PUBLIC "$") +target_include_directories( + rdkafka++ PUBLIC "$") if(NOT RDKAFKA_BUILD_STATIC) - target_compile_definitions(rdkafka++ PRIVATE LIBRDKAFKACPP_EXPORTS) + target_compile_definitions(rdkafka++ PRIVATE LIBRDKAFKACPP_EXPORTS) endif() # Generate pkg-config file -set(PKG_CONFIG_NAME - "librdkafka++" -) -set(PKG_CONFIG_DESCRIPTION - "The Apache Kafka C/C++ library" -) -set(PKG_CONFIG_VERSION - "${PROJECT_VERSION}" -) -set(PKG_CONFIG_REQUIRES "rdkafka") -set(PKG_CONFIG_CFLAGS - "-I\${includedir}" -) -set(PKG_CONFIG_LIBS - "-L\${libdir} -lrdkafka++" -) -set(PKG_CONFIG_LIBS_PRIVATE - "-lrdkafka" -) -configure_file( - "../packaging/cmake/rdkafka.pc.in" - "${GENERATED_DIR}/rdkafka++.pc" - @ONLY -) -install(FILES ${GENERATED_DIR}/rdkafka++.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" -) -if(RDKAFKA_BUILD_STATIC) - set(PKG_CONFIG_NAME - "librdkafka++-static" - ) - set(PKG_CONFIG_DESCRIPTION - "The Apache Kafka C/C++ library (static)" - ) - set(PKG_CONFIG_LIBS - "-L\${libdir} \${libdir}/librdkafka++.a" - ) - configure_file( - "../packaging/cmake/rdkafka.pc.in" - "${GENERATED_DIR}/rdkafka++-static.pc" - @ONLY - ) - install(FILES ${GENERATED_DIR}/rdkafka.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" - ) +set(PKG_CONFIG_VERSION "${PROJECT_VERSION}") +if(NOT RDKAFKA_BUILD_STATIC) + set(PKG_CONFIG_NAME "librdkafka++") + set(PKG_CONFIG_DESCRIPTION "The Apache Kafka C/C++ library") + set(PKG_CONFIG_REQUIRES "rdkafka") + set(PKG_CONFIG_CFLAGS "-I\${includedir}") + set(PKG_CONFIG_LIBS "-L\${libdir} -lrdkafka++") + set(PKG_CONFIG_LIBS_PRIVATE "-lrdkafka") + configure_file("../packaging/cmake/rdkafka.pc.in" + "${GENERATED_DIR}/rdkafka++.pc" @ONLY) + install(FILES ${GENERATED_DIR}/rdkafka++.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +else() + set(PKG_CONFIG_NAME "librdkafka++-static") + set(PKG_CONFIG_DESCRIPTION "The Apache Kafka C/C++ library (static)") + set(PKG_CONFIG_REQUIRES "") + set(PKG_CONFIG_CFLAGS "-I\${includedir} -DLIBRDKAFKA_STATICLIB") + if(WIN32) + set(PKG_CONFIG_LIBS + "-L\${libdir} \${libdir}/librdkafka++.a -lws2_32 -lsecur32 -lcrypt32") + else() + set(PKG_CONFIG_LIBS "-L\${libdir} \${libdir}/librdkafka++.a") + endif() + configure_file("../packaging/cmake/rdkafka.pc.in" + "${GENERATED_DIR}/rdkafka++-static.pc" @ONLY) + install(FILES ${GENERATED_DIR}/rdkafka++-static.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") endif() install( - TARGETS rdkafka++ - EXPORT "${targets_export_name}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" -) + TARGETS rdkafka++ + EXPORT "${targets_export_name}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + INCLUDES + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") -install( - FILES "rdkafkacpp.h" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/librdkafka" -) +install(FILES "rdkafkacpp.h" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/librdkafka") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 104f7dc762..c302ca59ac 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,6 @@ set(LIBVER 1) -set( - sources +set(sources crc32c.c rdaddr.c rdavl.c @@ -64,8 +63,7 @@ set( snappy.c tinycthread.c tinycthread_extra.c - rdxxhash.c -) + rdxxhash.c) if(WITH_SSL) list(APPEND sources rdkafka_ssl.c) @@ -176,13 +174,14 @@ if(MINGW) endif(MINGW) # Support '#include ' -target_include_directories(rdkafka PUBLIC "$") +target_include_directories( + rdkafka PUBLIC "$") target_compile_definitions(rdkafka PUBLIC ${rdkafka_compile_definitions}) if(RDKAFKA_BUILD_STATIC) target_compile_definitions(rdkafka PUBLIC LIBRDKAFKA_STATICLIB) endif() -if(WIN32) +if(WIN32) if(RDKAFKA_BUILD_STATIC) target_link_libraries(rdkafka PUBLIC crypt32) else() @@ -253,100 +252,69 @@ if(MINGW) target_link_libraries(rdkafka PUBLIC crypt32 ws2_32 secur32) endif(MINGW) -# Set up path to these sources for other sub-projects (tests, examples) -# to be able to reach them. -#set(rdkafka_SRC_DIR ${PROJECT_SOURCE_DIR} -# CACHE INTERNAL "${PROJECT_NAME} source dir" FORCE) - # Generate pkg-config file -set(PKG_CONFIG_NAME - "librdkafka" -) -set(PKG_CONFIG_DESCRIPTION - "The Apache Kafka C/C++ library" -) -set(PKG_CONFIG_VERSION - "${PROJECT_VERSION}" -) -set(PKG_CONFIG_REQUIRES "") -if(WITH_ZLIB) - string(APPEND PKG_CONFIG_REQUIRES "zlib ") -endif() -if(WITH_SSL) +set(PKG_CONFIG_VERSION "${PROJECT_VERSION}") +if(NOT RDKAFKA_BUILD_STATIC) + set(PKG_CONFIG_NAME "librdkafka") + set(PKG_CONFIG_DESCRIPTION "The Apache Kafka C/C++ library") + set(PKG_CONFIG_REQUIRES "") + if(WITH_ZLIB) + string(APPEND PKG_CONFIG_REQUIRES "zlib ") + endif() + if(WITH_SSL) string(APPEND PKG_CONFIG_REQUIRES "libssl ") -endif() -if(WITH_SASL_CYRUS) - string(APPEND PKG_CONFIG_REQUIRES "libsasl2 ") -endif() -if(WITH_ZSTD) + endif() + if(WITH_SASL_CYRUS) + string(APPEND PKG_CONFIG_REQUIRES "libsasl2 ") + endif() + if(WITH_ZSTD) string(APPEND PKG_CONFIG_REQUIRES "libzstd ") -endif() -if(WITH_LZ4_EXT) + endif() + if(WITH_LZ4_EXT) string(APPEND PKG_CONFIG_REQUIRES "liblz4 ") -endif() -set(PKG_CONFIG_CFLAGS - "-I\${includedir}" -) -set(PKG_CONFIG_LIBS - "-L\${libdir} -lrdkafka" -) -set(PKG_CONFIG_LIBS_PRIVATE - "-lpthread" -) -find_library(RT_LIBRARY rt) -if(RT_LIBRARY) - string(APPEND PKG_CONFIG_LIBS_PRIVATE " -lrt") -endif() -if(WITH_PLUGINS) - string(APPEND PKG_CONFIG_LIBS_PRIVATE " -ldl") -endif() -if(WITH_HDRHISTOGRAM) - string(APPEND PKG_CONFIG_LIBS_PRIVATE " -lm") -endif() -configure_file( - "../packaging/cmake/rdkafka.pc.in" - "${GENERATED_DIR}/rdkafka.pc" - @ONLY -) -install(FILES ${GENERATED_DIR}/rdkafka.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" -) -if(RDKAFKA_BUILD_STATIC) - set(PKG_CONFIG_NAME - "librdkafka-static" - ) - set(PKG_CONFIG_DESCRIPTION - "The Apache Kafka C/C++ library (static)" - ) + endif() + set(PKG_CONFIG_CFLAGS "-I\${includedir}") + set(PKG_CONFIG_LIBS "-L\${libdir} -lrdkafka") + set(PKG_CONFIG_LIBS_PRIVATE "-lpthread") + find_library(RT_LIBRARY rt) + if(RT_LIBRARY) + string(APPEND PKG_CONFIG_LIBS_PRIVATE " -lrt") + endif() + if(WITH_PLUGINS) + string(APPEND PKG_CONFIG_LIBS_PRIVATE " -ldl") + endif() + if(WITH_HDRHISTOGRAM) + string(APPEND PKG_CONFIG_LIBS_PRIVATE " -lm") + endif() + configure_file("../packaging/cmake/rdkafka.pc.in" + "${GENERATED_DIR}/rdkafka.pc" @ONLY) + install(FILES ${GENERATED_DIR}/rdkafka.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") +else() + set(PKG_CONFIG_REQUIRES "") + set(PKG_CONFIG_NAME "librdkafka-static") + set(PKG_CONFIG_DESCRIPTION "The Apache Kafka C/C++ library (static)") + set(PKG_CONFIG_CFLAGS "-I\${includedir} -DLIBRDKAFKA_STATICLIB") if(WIN32) set(PKG_CONFIG_LIBS - "-L\${libdir} \${libdir}/librdkafka.a -lws2_32 -lsecur32 -lcrypt32" - ) + "-L\${libdir} \${libdir}/librdkafka.a -lws2_32 -lsecur32 -lcrypt32") else() - set(PKG_CONFIG_LIBS - "-L\${libdir} \${libdir}/librdkafka.a" - ) + set(PKG_CONFIG_LIBS "-L\${libdir} \${libdir}/librdkafka.a") endif() - configure_file( - "../packaging/cmake/rdkafka.pc.in" - "${GENERATED_DIR}/rdkafka-static.pc" - @ONLY - ) - install(FILES ${GENERATED_DIR}/rdkafka.pc - DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" - ) + configure_file("../packaging/cmake/rdkafka.pc.in" + "${GENERATED_DIR}/rdkafka-static.pc" @ONLY) + install(FILES ${GENERATED_DIR}/rdkafka-static.pc + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") endif() install( - TARGETS rdkafka - EXPORT "${targets_export_name}" - LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" - ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" - RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" - INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" -) - -install( - FILES "rdkafka.h" "rdkafka_mock.h" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/librdkafka" -) + TARGETS rdkafka + EXPORT "${targets_export_name}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + INCLUDES + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + +install(FILES "rdkafka.h" "rdkafka_mock.h" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/librdkafka") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9d3569a98e..b03924edc0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,4 @@ -set( - sources +set(sources 0000-unittests.c 0001-multiobj.c 0002-unkpart.c @@ -114,13 +113,12 @@ set( 8000-idle.cpp test.c testcpp.cpp - rusage.c -) + rusage.c) if(NOT WIN32) - list(APPEND sources sockem.c sockem_ctrl.c) + list(APPEND sources sockem.c sockem_ctrl.c) else() - list(APPEND sources ../src/tinycthread.c ../src/tinycthread_extra.c) + list(APPEND sources ../src/tinycthread.c ../src/tinycthread_extra.c) endif() add_executable(test-runner ${sources}) diff --git a/tests/interceptor_test/CMakeLists.txt b/tests/interceptor_test/CMakeLists.txt index c606bc4266..ddf8bd039f 100644 --- a/tests/interceptor_test/CMakeLists.txt +++ b/tests/interceptor_test/CMakeLists.txt @@ -1,8 +1,4 @@ -set( - sources - interceptor_test.c -) - +set(sources interceptor_test.c) add_library(interceptor_test SHARED ${sources}) @@ -12,5 +8,6 @@ target_link_libraries(interceptor_test PUBLIC rdkafka) # Remove "lib" prefix set_target_properties(interceptor_test PROPERTIES PREFIX "") -set_target_properties(interceptor_test PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${tests_OUTPUT_DIRECTORY}/interceptor_test/) +set_target_properties( + interceptor_test PROPERTIES LIBRARY_OUTPUT_DIRECTORY + ${tests_OUTPUT_DIRECTORY}/interceptor_test/)