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 a98a8282..5bd2d253 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 @@ -110,15 +118,23 @@ 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} +TARGET_INCLUDE_DIRECTORIES (clickhouse-cpp-lib PUBLIC + $ + $ ) +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 () @@ -152,86 +168,86 @@ IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT DISABLE_CLANG_LIBC_WORKAROUND ENDIF () -INSTALL (TARGETS clickhouse-cpp-lib - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib +INSTALL (TARGETS clickhouse-cpp-lib EXPORT clickhouse-cpp + 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) @@ -240,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 +)