1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
From: Faidon Liambotis <paravoid@debian.org>
Date: Wed, 3 Sep 2025 18:27:04 +0300
Subject: Add --enable-nanopb-ext option to build with an external nanopb
Bug: https://github.com/confluentinc/librdkafka/issues/5186
---
configure.self | 9 +++++++++
src/Makefile | 5 ++++-
src/rdkafka_telemetry.c | 2 +-
src/rdkafka_telemetry_decode.c | 2 +-
src/rdkafka_telemetry_encode.c | 2 +-
5 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/configure.self b/configure.self
index 45c7bdb..05ef948 100644
--- a/configure.self
+++ b/configure.self
@@ -41,6 +41,8 @@ mkl_toggle_option "Feature" ENABLE_REGEX_EXT "--enable-regex-ext" "Enable extern
mkl_toggle_option "Feature" ENABLE_CJSON_EXT "--enable-cjson-ext" "Enable external cJSON (else use builtin)" "y"
+mkl_toggle_option "Feature" ENABLE_NANOPB_EXT "--enable-nanopb-ext" "Enable external Nanopb (else use builtin)" "y"
+
# librdkafka with TSAN won't work with glibc C11 threads on Ubuntu 19.04.
# This option allows disabling libc-based C11 threads and instead
# use the builtin tinycthread alternative.
@@ -128,6 +130,13 @@ void foo (void) {
"#include <cJSON.h>"
fi
+ # Use builtin nanopb if linking statically or if --disable-nanopb-ext is used.
+ if [[ $MKL_SOURCE_DEPS_ONLY != y ]] && [[ $WITH_STATIC_LINKING != y ]] && [[ $ENABLE_NANOPB_EXT == y ]]; then
+ mkl_meta_set "libnanopb" "static" "libprotobuf-nanopb.a"
+ mkl_lib_check "libnanopb" "WITH_NANOPB_EXT" disable CC "-lprotobuf-nanopb" \
+ "#include <nanopb/pb.h>"
+ fi
+
if [[ $ENABLE_SYSLOG == y ]]; then
mkl_compile_check "syslog" "WITH_SYSLOG" disable CC "" \
'
diff --git a/src/Makefile b/src/Makefile
index 6838516..5ad4a4f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -37,6 +37,10 @@ ifneq ($(WITH_CJSON_EXT), y)
SRCS_y += cJSON.c
endif
+ifneq ($(WITH_NANOPB_EXT), y)
+SRCS_y += nanopb/pb_encode.c nanopb/pb_decode.c nanopb/pb_common.c
+endif
+
ifneq ($(HAVE_REGEX), y)
SRCS_y += regexp.c
endif
@@ -64,7 +68,6 @@ SRCS= rdkafka.c rdkafka_broker.c rdkafka_msg.c rdkafka_topic.c \
rdkafka_mock.c rdkafka_mock_handlers.c rdkafka_mock_cgrp.c \
rdkafka_error.c rdkafka_fetcher.c rdkafka_telemetry.c \
rdkafka_telemetry_encode.c rdkafka_telemetry_decode.c \
- nanopb/pb_encode.c nanopb/pb_decode.c nanopb/pb_common.c \
opentelemetry/metrics.pb.c opentelemetry/common.pb.c opentelemetry/resource.pb.c \
$(SRCS_y)
diff --git a/src/rdkafka_telemetry.c b/src/rdkafka_telemetry.c
index b76effa..cad88e9 100644
--- a/src/rdkafka_telemetry.c
+++ b/src/rdkafka_telemetry.c
@@ -30,7 +30,7 @@
#include "rdkafka_msgset.h"
#include "rdkafka_telemetry_encode.h"
#include "rdkafka_request.h"
-#include "nanopb/pb.h"
+#include <nanopb/pb.h>
#include "rdkafka_lz4.h"
#include "snappy.h"
#include "rdunittest.h"
diff --git a/src/rdkafka_telemetry_decode.c b/src/rdkafka_telemetry_decode.c
index 452e43c..fedd61f 100644
--- a/src/rdkafka_telemetry_decode.c
+++ b/src/rdkafka_telemetry_decode.c
@@ -27,7 +27,7 @@
*/
#include "rdkafka_telemetry_decode.h"
-#include "nanopb/pb_decode.h"
+#include <nanopb/pb_decode.h>
#include "rdunittest.h"
#include "rdkafka_lz4.h"
#include "rdgz.h"
diff --git a/src/rdkafka_telemetry_encode.c b/src/rdkafka_telemetry_encode.c
index da1a341..ff8b8df 100644
--- a/src/rdkafka_telemetry_encode.c
+++ b/src/rdkafka_telemetry_encode.c
@@ -27,7 +27,7 @@
*/
#include "rdkafka_telemetry_encode.h"
-#include "nanopb/pb_encode.h"
+#include <nanopb/pb_encode.h>
#include "opentelemetry/metrics.pb.h"
#define THREE_ORDERS_MAGNITUDE 1000
|