Skip to content

Commit 001e4ef

Browse files
committed
CXXCBC-639: Allow to build both static and shared libraries
To avoid issues with generation of cmake helper scripts the following changes has been made: * interface libraries that are used to carry compiler options and flags are declared as IMPORTED to avoid unnecessary INTERFACE_LINK dependencies for the static library * jsonsl, asio and couchbase_backtrace libraries are not linked as a targets, but rather as a object files directly. This is also done to avoid announcing them as a transitive dependencies. All these libraries are hidden and never exposed. * for other third-party dependencies do not disable install tasks, which generate export files This patch also removes some unused cmake files (of crypto, sasl and operations/management directories). Fixes #701
1 parent 428d64f commit 001e4ef

15 files changed

+112
-418
lines changed

CMakeLists.txt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ include(cmake/PreventInSourceBuilds.cmake)
3535
include(cmake/StandardProjectSettings.cmake)
3636

3737
# 'library' to set the c++ standard / compile-time options requested
38-
add_library(project_options INTERFACE)
38+
add_library(project_options INTERFACE IMPORTED)
3939
target_compile_features(project_options INTERFACE cxx_std_17)
4040
if(MSVC)
4141
target_compile_options(project_options INTERFACE /bigobj)
4242
endif()
4343

4444
# 'library' to use the warnings specified in CompilerWarnings.cmake
45-
add_library(project_warnings INTERFACE)
45+
add_library(project_warnings INTERFACE IMPORTED)
4646

4747
include(cmake/BuildTracing.cmake)
4848

@@ -72,8 +72,6 @@ find_package(Threads REQUIRED)
7272

7373
include(cmake/ThirdPartyDependencies.cmake)
7474

75-
include(cmake/OpenSSL.cmake)
76-
7775
include(cmake/VersionInfo.cmake)
7876

7977
include(cmake/RPath.cmake)
@@ -505,8 +503,11 @@ foreach(TARGET ${couchbase_cxx_client_LIBRARIES})
505503
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/generated_$<CONFIG>>)
506504

507505
target_include_directories(
508-
${TARGET} SYSTEM PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/cxx_function>
509-
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/expected/include>)
506+
${TARGET} SYSTEM
507+
PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/cxx_function>
508+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/expected/include>
509+
$<BUILD_INTERFACE:$<TARGET_PROPERTY:jsonsl,INTERFACE_INCLUDE_DIRECTORIES>>
510+
$<BUILD_INTERFACE:$<TARGET_PROPERTY:asio,INTERFACE_INCLUDE_DIRECTORIES>>)
510511

511512
target_include_directories(${TARGET} PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
512513

@@ -517,13 +518,13 @@ foreach(TARGET ${couchbase_cxx_client_LIBRARIES})
517518
project_warnings
518519
spdlog::spdlog
519520
Microsoft.GSL::GSL
520-
asio
521521
llhttp::llhttp
522522
taocpp::json
523523
snappy
524-
jsonsl
525-
couchbase_backtrace
526-
hdr_histogram_static)
524+
hdr_histogram_static
525+
$<TARGET_OBJECTS:asio>
526+
$<TARGET_OBJECTS:couchbase_backtrace>
527+
$<TARGET_OBJECTS:jsonsl>)
527528

528529
if(WIN32)
529530
target_link_libraries(${TARGET} PRIVATE iphlpapi)
@@ -542,7 +543,10 @@ foreach(TARGET ${couchbase_cxx_client_LIBRARIES})
542543
if(MINGW)
543544
target_link_libraries(${TARGET} PUBLIC ws2_32)
544545
endif()
545-
target_link_libraries(${TARGET} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
546+
target_link_libraries(${TARGET} PUBLIC $<TARGET_OBJECTS:ssl> $<TARGET_OBJECTS:crypto>)
547+
target_include_directories(
548+
${TARGET} SYSTEM PRIVATE $<BUILD_INTERFACE:$<TARGET_PROPERTY:ssl,INTERFACE_INCLUDE_DIRECTORIES>>
549+
$<BUILD_INTERFACE:$<TARGET_PROPERTY:crypto,INTERFACE_INCLUDE_DIRECTORIES>>)
546550
else()
547551
if(TARGET PkgConfig::PKG_CONFIG_OPENSSL)
548552
target_link_libraries(${TARGET} PUBLIC PkgConfig::PKG_CONFIG_OPENSSL)

bin/build_boringssl

Lines changed: 0 additions & 55 deletions
This file was deleted.

bin/build_boringssl_win.bat

Lines changed: 0 additions & 122 deletions
This file was deleted.

cmake/APKBUILD.in

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ license="Apache-2.0"
1616
depends=""
1717
makedepends="
1818
linux-headers
19-
cmake
20-
ninja
21-
"
19+
cmake ninja "
2220
subpackages="${pkgname}-dev ${pkgname}-tools"
2321
options="!check"
2422

@@ -37,7 +35,7 @@ build() {
3735
-DCOUCHBASE_CXX_CLIENT_BUILD_EXAMPLES=OFF \
3836
-DCOUCHBASE_CXX_CLIENT_BUILD_TESTS=OFF \
3937
-DCOUCHBASE_CXX_CLIENT_BUILD_TOOLS=ON \
40-
-DCOUCHBASE_CXX_CLIENT_BUILD_STATIC=OFF \
38+
-DCOUCHBASE_CXX_CLIENT_BUILD_STATIC=ON \
4139
-DCOUCHBASE_CXX_CLIENT_BUILD_SHARED=ON
4240
cmake --build apk-build
4341
}

cmake/OpenSSL.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ elseif(COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL)
5555
endif()
5656
endif()
5757
declare_system_library(ssl)
58+
declare_system_library(crypto)
5859
add_library(OpenSSL::SSL ALIAS ssl)
59-
add_library(OpenSSL::Crypto ALIAS ssl)
60+
add_library(OpenSSL::Crypto ALIAS crypto)
6061
else()
6162
option(COUCHBASE_CXX_CLIENT_STATIC_OPENSSL "Statically link OpenSSL library" FALSE)
6263
if(COUCHBASE_CXX_CLIENT_STATIC_OPENSSL)

cmake/Packaging.cmake

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ include(CMakePackageConfigHelpers)
44
install(DIRECTORY ${PROJECT_SOURCE_DIR}/couchbase DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
55
install(FILES LICENSE.txt DESTINATION ${CMAKE_INSTALL_DOCDIR})
66

7-
set(COUCHBASE_CXX_CLIENT_PKGCONFIG_VERSION "${COUCHBASE_CXX_CLIENT_SEMVER}" CACHE STRING "The version to use in couchbase_cxx_client.pc")
7+
set(COUCHBASE_CXX_CLIENT_PKGCONFIG_VERSION
8+
"${COUCHBASE_CXX_CLIENT_SEMVER}"
9+
CACHE STRING "The version to use in couchbase_cxx_client.pc")
810
configure_file(${PROJECT_SOURCE_DIR}/cmake/couchbase_cxx_client.pc.in
911
${PROJECT_BINARY_DIR}/packaging/couchbase_cxx_client.pc @ONLY)
1012
install(FILES ${PROJECT_BINARY_DIR}/packaging/couchbase_cxx_client.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
@@ -17,6 +19,7 @@ write_basic_package_version_file(
1719
VERSION ${couchbase_cxx_client_VERSION}
1820
COMPATIBILITY SameMinorVersion)
1921
install(FILES ${PROJECT_BINARY_DIR}/couchbase_cxx_client-version.cmake
22+
${PROJECT_BINARY_DIR}/couchbase_cxx_client-config.cmake
2023
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/couchbase_cxx_client)
2124

2225
if(COUCHBASE_CXX_CLIENT_BUILD_TOOLS)
@@ -31,7 +34,7 @@ install(
3134
install(
3235
EXPORT couchbase_cxx_client-targets
3336
NAMESPACE couchbase_cxx_client::
34-
FILE couchbase_cxx_client-config.cmake
37+
FILE couchbase_cxx_client-targets.cmake
3538
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/couchbase_cxx_client)
3639

3740
set(COUCHBASE_CXX_CLIENT_TARBALL_NAME "couchbase-cxx-client-${COUCHBASE_CXX_CLIENT_SEMVER}")
@@ -255,7 +258,8 @@ if(COUCHBASE_CXX_CLIENT_RPM_TARGETS)
255258
"rocky-8-${CMAKE_SYSTEM_PROCESSOR}"
256259
"amazonlinux-2023-${CMAKE_SYSTEM_PROCESSOR}"
257260
"fedora-41-${CMAKE_SYSTEM_PROCESSOR}"
258-
"fedora-40-${CMAKE_SYSTEM_PROCESSOR}")
261+
"fedora-40-${CMAKE_SYSTEM_PROCESSOR}"
262+
)
259263

260264
message(STATUS "Supported build roots for RPM packages: ${COUCHBASE_CXX_CLIENT_SUPPORTED_ROOTS}")
261265

0 commit comments

Comments
 (0)