From 0d61ce8153e91c25d4bc9aad3c33dd1e3e439840 Mon Sep 17 00:00:00 2001 From: Konstantin Goncharik Date: Mon, 13 Apr 2026 18:46:05 +0700 Subject: [PATCH] feat mongo: add CMake support for mongo-c-driver 2.x.x --- cmake/SetupMongoDeps.cmake | 15 +++++++++++++++ mongo/CMakeLists.txt | 7 +++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cmake/SetupMongoDeps.cmake b/cmake/SetupMongoDeps.cmake index 14a77326b8bb..63ac294b3552 100644 --- a/cmake/SetupMongoDeps.cmake +++ b/cmake/SetupMongoDeps.cmake @@ -3,6 +3,21 @@ include_guard(GLOBAL) option(USERVER_MONGODB_USE_CMAKE_CONFIG "Use mongoc cmake configuration" ON) if(USERVER_MONGODB_USE_CMAKE_CONFIG) + # Try to find via modern mongo-c-driver 2.x.x way first + find_package(mongoc 2.0.0 QUIET CONFIG) + if(mongoc_FOUND) + message(STATUS "Mongoc: using config version: (bson: ${bson_VERSION}, mongoc: ${mongoc_VERSION})") + + # prefer static libs here for compat + # https://github.com/mongodb/mongo-c-driver/blob/2.0.0/src/libmongoc/etc/mongocConfig.cmake.in#L7-L12 + # mongoc::mongoc is mongoc::static first then mongoc::shared. Same for bson. + set(USERVER_MONGO_LIBMONGOC_NAME mongoc::mongoc) + set(USERVER_MONGO_LIBBSON_NAME bson::bson) + + return() + endif() + + # Go back to 1.x.x find_package(mongoc-1.0 QUIET CONFIG) if(mongoc-1.0_FOUND) message(STATUS "Mongoc: using config version: (bson: ${bson-1.0_VERSION}, mongoc: ${mongoc-1.0_VERSION})") diff --git a/mongo/CMakeLists.txt b/mongo/CMakeLists.txt index 607065ebcc8a..d2ee99f85658 100644 --- a/mongo/CMakeLists.txt +++ b/mongo/CMakeLists.txt @@ -1,5 +1,8 @@ project(userver-mongo CXX) +set(USERVER_MONGO_LIBMONGOC_NAME mongo::mongoc_static) +set(USERVER_MONGO_LIBBSON_NAME mongo::bson_static) + if(USERVER_CONAN) find_package(mongoc-1.0 REQUIRED) else() @@ -9,8 +12,8 @@ endif() userver_module( mongo SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" - LINK_LIBRARIES mongo::bson_static - LINK_LIBRARIES_PRIVATE mongo::mongoc_static + LINK_LIBRARIES "${USERVER_MONGO_LIBBSON_NAME}" + LINK_LIBRARIES_PRIVATE "${USERVER_MONGO_LIBMONGOC_NAME}" UTEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*_test.cpp" DBTEST_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*_mongotest.cpp" DBTEST_DATABASES mongo