It looks like in the last few days upstream has made commits that allow
syslog-ng to build w/ libmongoc-dev >= 2.0. I have identified the
commits and attached them as patches to this email. Note that two of the
patches required slight tweaking to apply to the Debian package.

Regards,

-Roberto

-- 
Roberto C. Sánchez
>From 578023072f5be1e1ac464cd69e7249a3fe810e3b Mon Sep 17 00:00:00 2001
From: Hofi <[email protected]>
Date: Wed, 27 Aug 2025 14:02:00 +0200
Subject: [PATCH 1/2] mongo-c: add v1 v2 detection to autotools

Signed-off-by: Hofi <[email protected]>
---
 configure.ac |   38 ++++++++++++++++++++++++++++----------
 1 file changed, 28 insertions(+), 10 deletions(-)

--- a/configure.ac
+++ b/configure.ac
@@ -49,7 +49,8 @@
 IVYKIS_UPDATED_VERSION="0.39"
 JSON_C_MIN_VERSION="0.13"
 PCRE2_MIN_VERSION="10.0"
-LMC_MIN_VERSION="1.0.0"
+LMC_1_MIN_VERSION="1.0.0"
+LMC_MIN_VERSION="2.0.0"
 LRMQ_MIN_VERSION="0.0.1"
 LRC_MIN_VERSION="1.6.0"
 LIBBPF_MIN_VERSION="1.0.1"
@@ -274,7 +275,7 @@
               ,,enable_gcov="no")
 
 AC_ARG_ENABLE(mongodb,
-	      [  --enable-mongodb        Enable mongodb destination (default: auto)]
+	      [  --enable-mongodb        Enable support for mongodb destination (default: auto)]
               ,,enable_mongodb="auto")
 
 AC_ARG_WITH(jsonc,
@@ -423,6 +424,7 @@
 if test "x$enable_all_modules" != "xauto"; then
    state="$enable_all_modules"
 
+   # TODO: atomate collection of modules somehow
    MODULES="spoof_source sun_streams sql pacct mongodb json amqp stomp \
             redis systemd geoip2 riemann ipv6 smtp native python python_modules java java_modules \
             http afsnmp kafka mqtt grpc"
@@ -1383,20 +1385,36 @@
 dnl mongo-c-driver headers/libraries
 dnl ***************************************************************************
 
-PKG_CHECK_MODULES(LIBMONGO, libmongoc-1.0 >= $LMC_MIN_VERSION, with_mongoc="yes", with_mongoc="no")
+# Try libmongoc-1.0 first
+PKG_CHECK_MODULES(LIBMONGO,
+    libmongoc-1.0 >= $LMC_1_MIN_VERSION,
+    [with_mongoc=yes; mongo_version_str="v1"; MONGOC_HEADER="<mongoc.h>"],
+    [   # Try mongoc2 (libmongoc-2.0) if 1.0 not found
+        PKG_CHECK_MODULES(LIBMONGO,
+            mongoc2 >= $LMC_MIN_VERSION,
+            [
+            AC_DEFINE([HAVE_MONGOC_V2], [1], [Define if using MongoDB C Driver v2.x])
+            with_mongoc=yes
+            mongo_version_str="v2"
+            MONGOC_HEADER="<mongoc/mongoc.h>"
+            ],
+            [with_mongoc=no]
+        )
+    ]
+)
 
 if test "x$with_mongoc" = "xno" && test "x$enable_mongodb" = "xyes"; then
-   AC_MSG_ERROR([Could not find mongo-c-driver, and MongoDB support was explicitly enabled.])
+    AC_MSG_ERROR([Could not find mongo-c-driver, and MongoDB support was explicitly enabled.])
 fi
 
 if test "x$with_mongoc" = "xyes"; then
-CPPFLAGS_SAVE="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS $LIBMONGO_CFLAGS"
+    CPPFLAGS_SAVE="$CPPFLAGS"
+    CPPFLAGS="$CPPFLAGS $LIBMONGO_CFLAGS"
 
-AC_CHECK_DECLS([mongoc_uri_set_option_as_int32], [], [], [[#include <mongoc.h>]])
-AC_CHECK_DECLS([MONGOC_URI_SERVERSELECTIONTIMEOUTMS], [], [], [[#include <mongoc.h>]])
+    AC_CHECK_DECLS([mongoc_uri_set_option_as_int32], [], [], [[#include $MONGOC_HEADER]])
+    AC_CHECK_DECLS([MONGOC_URI_SERVERSELECTIONTIMEOUTMS], [], [], [[#include $MONGOC_HEADER]])
 
-CPPFLAGS="$CPPFLAGS_SAVE"
+    CPPFLAGS="$CPPFLAGS_SAVE"
 fi
 
 dnl ***************************************************************************
@@ -2432,7 +2450,7 @@
 echo "  OpenBSD syslog (module)     : ${enable_openbsd_system_source:=no}"
 echo "  SQL support (module)        : ${enable_sql:=no}"
 echo "  PACCT module (EXPERIMENTAL) : ${enable_pacct:=no}"
-echo "  MongoDB destination (module): ${enable_mongodb:=no}"
+echo "  MongoDB destination (module): ${enable_mongodb:=no} (${mongo_version_str})"
 echo "  JSON support (module)       : ${enable_json:=no}"
 echo "  SMTP support (module)       : ${enable_smtp:=no}"
 echo "  HTTP support (module)       : ${enable_http:=no}"
>From 7c61ccbbb3dbf3671a7c00c6c68ba059ca103441 Mon Sep 17 00:00:00 2001
From: Hofi <[email protected]>
Date: Wed, 27 Aug 2025 14:02:26 +0200
Subject: [PATCH 2/2] afmongodb: use v1/v2 headers correctly

Signed-off-by: Hofi <[email protected]>
---
 modules/afmongodb/afmongodb-private.h | 6 +++++-
 modules/afmongodb/afmongodb-worker.h  | 6 +++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/modules/afmongodb/afmongodb-private.h b/modules/afmongodb/afmongodb-private.h
index 7de550fe9..77df2fd52 100644
--- a/modules/afmongodb/afmongodb-private.h
+++ b/modules/afmongodb/afmongodb-private.h
@@ -24,7 +24,11 @@
 #define AFMONGODB_PRIVATE_H_
 
 #include "syslog-ng.h"
-#include "mongoc.h"
+#ifdef SYSLOG_NG_HAVE_MONGOC_V2
+# include "mongoc/mongoc.h"
+#else
+# include "mongoc.h"
+#endif
 #include "logthrdest/logthrdestdrv.h"
 #include "template/templates.h"
 #include "value-pairs/value-pairs.h"
diff --git a/modules/afmongodb/afmongodb-worker.h b/modules/afmongodb/afmongodb-worker.h
index a56638977..5c61c15cb 100644
--- a/modules/afmongodb/afmongodb-worker.h
+++ b/modules/afmongodb/afmongodb-worker.h
@@ -26,7 +26,11 @@
 #define AFMONGODB_WORKER_H_INCLUDED
 
 #include "syslog-ng.h"
-#include "mongoc.h"
+#ifdef SYSLOG_NG_HAVE_MONGOC_V2
+# include "mongoc/mongoc.h"
+#else
+# include "mongoc.h"
+#endif
 #include "logthrdest/logthrdestdrv.h"
 
 typedef struct MongoDBDestWorker
-- 
2.39.5

>From 5e108a0140131cff26a8222ec880480c1859c338 Mon Sep 17 00:00:00 2001
From: Hofi <[email protected]>
Date: Wed, 27 Aug 2025 17:23:32 +0200
Subject: [PATCH] cmake: fix afmongodb discovery, add support for v2

Signed-off-by: Hofi <[email protected]>
---
 modules/afmongodb/CMakeLists.txt |  118 ++++++++++++++++++++++++++++-----------
 syslog-ng-config.h.in            |    2 
 2 files changed, 89 insertions(+), 31 deletions(-)

--- a/modules/afmongodb/CMakeLists.txt
+++ b/modules/afmongodb/CMakeLists.txt
@@ -1,39 +1,95 @@
-if (ENABLE_MONGODB STREQUAL OFF)
-  return()
+if(NOT DEFINED ENABLE_MONGODB OR ENABLE_MONGODB)
+  set(LMC_1_MIN_VERSION 1.0.0)
+  set(LMC_MIN_VERSION 2.0.0)
+
+  find_package(PkgConfig REQUIRED)
+
+  # First try libmongoc-1.0
+  pkg_check_modules(LIBMONGO libmongoc-1.0>=${LMC_1_MIN_VERSION})
+
+  if(LIBMONGO_FOUND)
+    set(ENABLE_MONGODB_INFO_STR "v1" CACHE INTERNAL "MongoDB version")
+    set(MONGOC_HEADER "<mongoc.h>")
+
+    # libbson-1.0 is needed for libmongoc-1.0
+    pkg_check_modules(LIBBSON libbson-1.0>=${LMC_1_MIN_VERSION})
+
+    if(NOT LIBBSON_FOUND)
+      message(FATAL_ERROR "libbson-1.0 is required for libmongoc-1.0")
+    endif()
+
+    include_directories(${LIBMONGO_INCLUDE_DIRS} ${LIBBSON_INCLUDE_DIRS})
+    link_directories(${LIBMONGO_LIBRARY_DIRS} ${LIBBSON_LIBRARY_DIRS})
+
+  else()
+    # libmongoc-1.0 not found, try mongoc2
+    pkg_check_modules(LIBMONGO mongoc2>=${LMC_MIN_VERSION})
+
+    if(LIBMONGO_FOUND)
+      set(SYSLOG_NG_HAVE_MONGOC_V2 1 CACHE INTERNAL "MongoDB version 2 is available")
+      set(ENABLE_MONGODB_INFO_STR "v2" CACHE INTERNAL "MongoDB version")
+      set(MONGOC_HEADER "<mongoc/mongoc.h>")
+
+      include_directories(${LIBMONGO_INCLUDE_DIRS})
+      link_directories(${LIBMONGO_LIBRARY_DIRS})
+    endif()
+  endif()
+endif()
+
+if(ENABLE_MONGODB AND NOT LIBMONGO_FOUND)
+  message(FATAL_ERROR "Could not find suitable mongo-c-driver (or its dependencies), and MongoDB support was explicitly enabled.")
 endif()
 
-find_package(libmongoc-1.0)
-find_package(libbson-1.0)
+module_switch(ENABLE_MONGODB "Enable mongodb destination driver" LIBMONGO_FOUND)
+
+if(NOT ENABLE_MONGODB)
+  return()
+endif()
 
-module_switch(ENABLE_MONGODB "Enable mongodb destination driver" libmongoc-1.0_FOUND)
+include(CheckCSourceCompiles)
+set(CMAKE_REQUIRED_INCLUDES ${LIBMONGO_INCLUDE_DIRS})
 
-if (ENABLE_MONGODB)
+if(ENABLE_MONGODB_INFO_STR STREQUAL "v1")
+  list(APPEND CMAKE_REQUIRED_INCLUDES ${LIBBSON_INCLUDE_DIRS})
+endif()
 
-  set(CMAKE_REQUIRED_INCLUDES ${MONGOC_INCLUDE_DIRS})
-  set(CMAKE_REQUIRED_LIBRARIES ${MONGOC_LIBRARY})
-  set(CMAKE_REQUIRED_LIBRARIES ${BSON_LIBRARY})
-  check_symbol_exists(mongoc_uri_set_option_as_int32 "mongoc.h" SYSLOG_NG_HAVE_DECL_MONGOC_URI_SET_OPTION_AS_INT32)
-  check_symbol_exists(MONGOC_URI_SERVERSELECTIONTIMEOUTMS "mongoc.h" SYSLOG_NG_HAVE_DECL_MONGOC_URI_SERVERSELECTIONTIMEOUTMS)
-
-  set(AFMONGODB_SOURCES
-    "afmongodb.h"
-    "afmongodb.c"
-    "afmongodb-worker.h"
-    "afmongodb-worker.c"
-    "afmongodb-parser.h"
-    "afmongodb-parser.c"
-    "afmongodb-private.h"
-  )
-
-  add_module(
-    TARGET afmongodb
-    GRAMMAR afmongodb-grammar
-    INCLUDES ${MONGOC_INCLUDE_DIRS}
-    DEPENDS ${MONGOC_LIBRARY}
-    DEPENDS ${BSON_LIBRARY}
-    SOURCES ${AFMONGODB_SOURCES}
-  )
+check_c_source_compiles("
+#include ${MONGOC_HEADER}
+#include <bson/bson.h>
+int main() {
+    (void) mongoc_uri_set_option_as_int32;
+    return 0;
+}" HAVE_MONGOC_URI_SET_OPTION_AS_INT32)
+check_c_source_compiles("
+#include ${MONGOC_HEADER}
+int main() {
+    (void) MONGOC_URI_SERVERSELECTIONTIMEOUTMS;
+    return 0;
+}" HAVE_MONGOC_URI_SERVERSELECTIONTIMEOUTMS)
 
-  add_test_subdirectory(tests)
+if(HAVE_MONGOC_URI_SET_OPTION_AS_INT32)
+  add_compile_definitions(HAVE_MONGOC_URI_SET_OPTION_AS_INT32=1)
+endif()
 
+if(HAVE_MONGOC_URI_SERVERSELECTIONTIMEOUTMS)
+  add_compile_definitions(HAVE_MONGOC_URI_SERVERSELECTIONTIMEOUTMS=1)
 endif()
+
+set(AFMONGODB_SOURCES
+  "afmongodb.h"
+  "afmongodb.c"
+  "afmongodb-worker.h"
+  "afmongodb-worker.c"
+  "afmongodb-parser.h"
+  "afmongodb-parser.c"
+  "afmongodb-private.h"
+)
+
+add_module(
+  TARGET afmongodb
+  GRAMMAR afmongodb-grammar
+  DEPENDS ${LIBMONGO_LDFLAGS}
+  SOURCES ${AFMONGODB_SOURCES}
+)
+
+add_test_subdirectory(tests)
--- a/syslog-ng-config.h.in
+++ b/syslog-ng-config.h.in
@@ -109,3 +109,5 @@
 #cmakedefine01 SYSLOG_NG_ENABLE_AFSOCKET_MEMINFO_METRICS
 #cmakedefine01 SYSLOG_NG_HAVE_IV_WORK_POOL_SUBMIT_CONTINUATION
 #cmakedefine01 SYSLOG_NG_HAVE_DECL_CURLUE_LAST
+#cmakedefine01 SYSLOG_NG_HAVE_MEMDUP2
+#cmakedefine01 SYSLOG_NG_HAVE_MONGOC_V2

Reply via email to