From b58cd841bcb753b32397103809ea498a234cfbfd Mon Sep 17 00:00:00 2001 From: Grzegorz Kowalski Date: Sun, 13 Apr 2025 11:20:36 +0200 Subject: [PATCH 1/5] cmake: add project version and SONAME versioning (cherry picked from commit 608413d3bd9fd4ecd3a5c6d91d24e642039c5298) --- clickhouse/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/clickhouse/CMakeLists.txt b/clickhouse/CMakeLists.txt index a98a8282..061730dc 100644 --- a/clickhouse/CMakeLists.txt +++ b/clickhouse/CMakeLists.txt @@ -119,6 +119,13 @@ TARGET_INCLUDE_DIRECTORIES (clickhouse-cpp-lib PUBLIC ${PROJECT_SOURCE_DIR} ) +IF (BUILD_SHARED_LIBS) + SET_TARGET_PROPERTIES (clickhouse-cpp-lib PROPERTIES + VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} + ) +ENDIF() + IF (NOT BUILD_SHARED_LIBS) ADD_LIBRARY (clickhouse-cpp-lib-static ALIAS clickhouse-cpp-lib) ELSE () From 807b40a9c8393b47a26f04f996f37701ddad91f5 Mon Sep 17 00:00:00 2001 From: Grzegorz Kowalski Date: Sun, 13 Apr 2025 11:21:43 +0200 Subject: [PATCH 2/5] cmake: link static deps in PRIVATE mode (cherry picked from commit ac4a46b98d68660d001feb6aa5f0e3ecc9ff2316) --- clickhouse/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clickhouse/CMakeLists.txt b/clickhouse/CMakeLists.txt index 061730dc..d8fafc32 100644 --- a/clickhouse/CMakeLists.txt +++ b/clickhouse/CMakeLists.txt @@ -110,10 +110,10 @@ SET_TARGET_PROPERTIES (clickhouse-cpp-lib VERSION ${CLICKHOUSE_CPP_VERSION} ) TARGET_LINK_LIBRARIES (clickhouse-cpp-lib - absl::int128 - cityhash::cityhash - lz4::lz4 - zstd::zstd + PRIVATE absl::int128 + PRIVATE cityhash::cityhash + PRIVATE lz4::lz4 + PRIVATE zstd::zstd ) TARGET_INCLUDE_DIRECTORIES (clickhouse-cpp-lib PUBLIC ${PROJECT_SOURCE_DIR} From 2dc5c908f49e8eab2b3a4748334eecff32b57d4b Mon Sep 17 00:00:00 2001 From: Grzegorz Kowalski Date: Sun, 13 Apr 2025 11:42:18 +0200 Subject: [PATCH 3/5] cmake: fix installation dirs (cherry picked from commit f41794d7e9ba0a646e0f1b487062a1709f6165ac) --- CMakeLists.txt | 1 + clickhouse/CMakeLists.txt | 112 ++++++++++++++++++++------------------ 2 files changed, 61 insertions(+), 52 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 24b71bab..cf46453c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,7 @@ ENDIF () IF (UNIX) IF (NOT APPLE) + include(GNUInstallDirs) SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") ENDIF () SET (CMAKE_EXE_LINKER_FLAGS, "${CMAKE_EXE_LINKER_FLAGS} -lpthread") diff --git a/clickhouse/CMakeLists.txt b/clickhouse/CMakeLists.txt index d8fafc32..c6012aa8 100644 --- a/clickhouse/CMakeLists.txt +++ b/clickhouse/CMakeLists.txt @@ -102,6 +102,14 @@ IF (WITH_OPENSSL) LIST(APPEND clickhouse-cpp-lib-src base/sslsocket.cpp) ENDIF () +IF (NOT CMAKE_INSTALL_LIBDIR) + SET (CMAKE_INSTALL_LIBDIR lib) +ENDIF () + +IF (NOT CMAKE_INSTALL_INCLUDEDIR) + SET (CMAKE_INSTALL_INCLUDEDIR include) +ENDIF () + ADD_LIBRARY (clickhouse-cpp-lib ${clickhouse-cpp-lib-src} version.h) SET_TARGET_PROPERTIES (clickhouse-cpp-lib @@ -160,85 +168,85 @@ ENDIF () INSTALL (TARGETS clickhouse-cpp-lib - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) IF (NOT BUILD_SHARED_LIBS) IF (NOT WITH_SYSTEM_CITYHASH) INSTALL (TARGETS cityhash - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) ENDIF() IF (NOT WITH_SYSTEM_LZ4) INSTALL (TARGETS lz4 - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) ENDIF() IF (NOT WITH_SYSTEM_ZSTD) INSTALL (TARGETS zstdstatic - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) ENDIF() IF (NOT WITH_SYSTEM_ABSEIL) INSTALL (TARGETS absl_int128 - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) ENDIF() ENDIF() # general -INSTALL(FILES block.h DESTINATION include/clickhouse/) -INSTALL(FILES client.h DESTINATION include/clickhouse/) -INSTALL(FILES error_codes.h DESTINATION include/clickhouse/) -INSTALL(FILES exceptions.h DESTINATION include/clickhouse/) -INSTALL(FILES server_exception.h DESTINATION include/clickhouse/) -INSTALL(FILES protocol.h DESTINATION include/clickhouse/) -INSTALL(FILES query.h DESTINATION include/clickhouse/) -INSTALL(FILES version.h DESTINATION include/clickhouse/) +INSTALL(FILES block.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) +INSTALL(FILES client.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) +INSTALL(FILES error_codes.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) +INSTALL(FILES exceptions.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) +INSTALL(FILES server_exception.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) +INSTALL(FILES protocol.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) +INSTALL(FILES query.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) +INSTALL(FILES version.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/) # base -INSTALL(FILES base/buffer.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/compressed.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/input.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/open_telemetry.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/output.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/platform.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/projected_iterator.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/singleton.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/socket.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/string_utils.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/string_view.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/uuid.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/wire_format.h DESTINATION include/clickhouse/base/) -INSTALL(FILES base/endpoints_iterator.h DESTINATION include/clickhouse/base/) +INSTALL(FILES base/buffer.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/compressed.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/input.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/open_telemetry.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/output.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/platform.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/projected_iterator.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/singleton.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/socket.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/string_utils.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/string_view.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/uuid.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/wire_format.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) +INSTALL(FILES base/endpoints_iterator.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/base/) # columns -INSTALL(FILES columns/array.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/column.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/date.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/decimal.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/enum.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/factory.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/geo.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/ip4.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/ip6.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/itemview.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/lowcardinality.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/nullable.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/numeric.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/map.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/string.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/tuple.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/utils.h DESTINATION include/clickhouse/columns/) -INSTALL(FILES columns/uuid.h DESTINATION include/clickhouse/columns/) +INSTALL(FILES columns/array.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/column.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/date.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/decimal.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/enum.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/factory.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/geo.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/ip4.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/ip6.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/itemview.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/lowcardinality.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/nullable.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/numeric.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/map.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/string.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/tuple.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/utils.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) +INSTALL(FILES columns/uuid.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/columns/) # types -INSTALL(FILES types/type_parser.h DESTINATION include/clickhouse/types/) -INSTALL(FILES types/types.h DESTINATION include/clickhouse/types/) +INSTALL(FILES types/type_parser.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/types/) +INSTALL(FILES types/types.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/clickhouse/types/) IF (WITH_OPENSSL) TARGET_LINK_LIBRARIES (clickhouse-cpp-lib OpenSSL::SSL) From 7228d15837a2afbafbb6c24861af5320fadbad54 Mon Sep 17 00:00:00 2001 From: Grzegorz Kowalski Date: Sun, 13 Apr 2025 11:59:40 +0200 Subject: [PATCH 4/5] cmake: separate build and install include dirs (cherry picked from commit 5957432f54d941fd5bb16a2abfaad905dde52f09) --- clickhouse/CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clickhouse/CMakeLists.txt b/clickhouse/CMakeLists.txt index c6012aa8..70662bf9 100644 --- a/clickhouse/CMakeLists.txt +++ b/clickhouse/CMakeLists.txt @@ -123,8 +123,9 @@ TARGET_LINK_LIBRARIES (clickhouse-cpp-lib PRIVATE lz4::lz4 PRIVATE zstd::zstd ) -TARGET_INCLUDE_DIRECTORIES (clickhouse-cpp-lib - PUBLIC ${PROJECT_SOURCE_DIR} +TARGET_INCLUDE_DIRECTORIES (clickhouse-cpp-lib PUBLIC + $ + $ ) IF (BUILD_SHARED_LIBS) From 3065ac3332fd263c290e881809a6ae3bcf3d42be Mon Sep 17 00:00:00 2001 From: Grzegorz Kowalski Date: Sun, 13 Apr 2025 12:00:18 +0200 Subject: [PATCH 5/5] cmake: export and install cmake configuration file (cherry picked from commit 8b5241d46e3686292723aec77cc791a9ca198e4e) --- clickhouse/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/clickhouse/CMakeLists.txt b/clickhouse/CMakeLists.txt index 70662bf9..5bd2d253 100644 --- a/clickhouse/CMakeLists.txt +++ b/clickhouse/CMakeLists.txt @@ -168,7 +168,7 @@ IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT DISABLE_CLANG_LIBC_WORKAROUND ENDIF () -INSTALL (TARGETS clickhouse-cpp-lib +INSTALL (TARGETS clickhouse-cpp-lib EXPORT clickhouse-cpp ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) @@ -256,3 +256,9 @@ ENDIF () IF (WIN32 OR MINGW) TARGET_LINK_LIBRARIES (clickhouse-cpp-lib wsock32 ws2_32) ENDIF () + +# export installed library +INSTALL (EXPORT clickhouse-cpp + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/clickhouse-cpp + FILE clickhouse-cpp-config.cmake +)