Skip to content

Support for CMake #411

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 61 additions & 30 deletions clickhouse/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,9 @@ TARGET_LINK_LIBRARIES (clickhouse-cpp-lib
zstd::zstd
)
TARGET_INCLUDE_DIRECTORIES (clickhouse-cpp-lib
PUBLIC ${PROJECT_SOURCE_DIR}
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include/clickhouse>
)

IF (NOT BUILD_SHARED_LIBS)
Expand Down Expand Up @@ -151,36 +153,65 @@ IF (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT DISABLE_CLANG_LIBC_WORKAROUND
ENDIF ()
ENDIF ()

#special case for all system dependencies
IF (WITH_SYSTEM_ABSEIL AND WITH_SYSTEM_CITYHASH AND WITH_SYSTEM_LZ4 AND WITH_SYSTEM_ZSTD)
INSTALL (TARGETS clickhouse-cpp-lib
EXPORT clickhouse-cpp-config
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)

INSTALL (TARGETS clickhouse-cpp-lib
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
IF (NOT BUILD_SHARED_LIBS)
IF (NOT WITH_SYSTEM_CITYHASH)
INSTALL (TARGETS cityhash
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
IF (NOT WITH_SYSTEM_LZ4)
INSTALL (TARGETS lz4
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
IF (NOT WITH_SYSTEM_ZSTD)
INSTALL (TARGETS zstdstatic
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
IF (NOT WITH_SYSTEM_ABSEIL)
INSTALL (TARGETS absl_int128
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
include(CMakePackageConfigHelpers)
configure_package_config_file(
../cmake/clickhouse-cpp-config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/clickhouse-cpp-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/cmake/clickhouse-cpp
)

INSTALL(EXPORT clickhouse-cpp-config
FILE clickhouse-cpp-targets.cmake
DESTINATION lib/cmake/clickhouse-cpp
)

INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib/cmake/clickhouse-cpp-config.cmake
DESTINATION lib/cmake/clickhouse-cpp
)

install(FILES ../cmake/Findabsl.cmake DESTINATION lib/cmake/clickhouse-cpp)
install(FILES ../cmake/Findcityhash.cmake DESTINATION lib/cmake/clickhouse-cpp)
install(FILES ../cmake/Findlz4.cmake DESTINATION lib/cmake/clickhouse-cpp)
install(FILES ../cmake/Findzstd.cmake DESTINATION lib/cmake/clickhouse-cpp)
ELSE ()
INSTALL (TARGETS clickhouse-cpp-lib
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
IF (NOT BUILD_SHARED_LIBS)
IF (NOT WITH_SYSTEM_CITYHASH)
INSTALL (TARGETS cityhash
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
IF (NOT WITH_SYSTEM_LZ4)
INSTALL (TARGETS lz4
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
IF (NOT WITH_SYSTEM_ZSTD)
INSTALL (TARGETS zstdstatic
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
IF (NOT WITH_SYSTEM_ABSEIL)
INSTALL (TARGETS absl_int128
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
)
ENDIF()
ENDIF ()
ENDIF()

# general
Expand Down
30 changes: 30 additions & 0 deletions cmake/Findabsl.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
find_path(absl_INCLUDE_DIR
NAMES absl/base/config.h
DOC "absl include directory"
REQUIRED
)
mark_as_advanced(absl_INCLUDE_DIR)
find_library(absl_LIBRARY
NAMES absl_int128 libabsl_int128
DOC "absl library"
REQUIRED
)
mark_as_advanced(absl_LIBRARY)

# Unlike lz4, absl's version information does not seem to be available.

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(absl
REQUIRED_VARS absl_LIBRARY absl_INCLUDE_DIR)

if (absl_FOUND)
set(absl_INCLUDE_DIRS "${absl_INCLUDE_DIR}")
set(absl_LIBRARIES "${absl_LIBRARY}")

if (NOT TARGET absl::int128)
add_library(absl::int128 UNKNOWN IMPORTED)
set_target_properties(absl::int128 PROPERTIES
IMPORTED_LOCATION "${absl_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${absl_INCLUDE_DIR}")
endif ()
endif ()
8 changes: 6 additions & 2 deletions cmake/Findcityhash.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
find_path(cityhash_INCLUDE_DIR
NAMES city.h
DOC "cityhash include directory")
DOC "cityhash include directory"
REQUIRED
)
mark_as_advanced(cityhash_INCLUDE_DIR)
find_library(cityhash_LIBRARY
NAMES cityhash libcityhash
DOC "cityhash library")
DOC "cityhash library"
REQUIRED
)
mark_as_advanced(cityhash_LIBRARY)

# Unlike lz4, cityhash's version information does not seem to be available.
Expand Down
8 changes: 6 additions & 2 deletions cmake/Findlz4.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
find_path(lz4_INCLUDE_DIR
NAMES lz4.h
DOC "lz4 include directory")
DOC "lz4 include directory"
REQUIRED
)
mark_as_advanced(lz4_INCLUDE_DIR)
find_library(lz4_LIBRARY
NAMES lz4 liblz4
DOC "lz4 library")
DOC "lz4 library"
REQUIRED
)
mark_as_advanced(lz4_LIBRARY)

if (lz4_INCLUDE_DIR)
Expand Down
8 changes: 6 additions & 2 deletions cmake/Findzstd.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
find_path(zstd_INCLUDE_DIR
NAMES zstd.h
DOC "zstd include directory")
DOC "zstd include directory"
REQUIRED
)
mark_as_advanced(zstd_INCLUDE_DIR)
find_library(zstd_LIBRARY
NAMES zstd libzstd
DOC "zstd library")
DOC "zstd library"
REQUIRED
)
mark_as_advanced(zstd_LIBRARY)

if (zstd_INCLUDE_DIR)
Expand Down
10 changes: 10 additions & 0 deletions cmake/clickhouse-cpp-config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@PACKAGE_INIT@

include(CMakeFindDependencyMacro)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
find_dependency(cityhash REQUIRED)
find_dependency(lz4 REQUIRED)
find_dependency(zstd REQUIRED)
find_dependency(absl REQUIRED)

include(clickhouse-cpp-targets)