]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
configure: Check whether protoc requires `--experimental_allow_proto3_optional`.
authorFlorian Forster <octo@collectd.org>
Thu, 7 Dec 2023 14:43:46 +0000 (15:43 +0100)
committerFlorian Forster <octo@collectd.org>
Wed, 3 Jan 2024 16:16:28 +0000 (17:16 +0100)
Makefile.am
configure.ac

index 442a5df2aee46017723887ee4f134ea63f031ed7..f959136ec8b141f6e81db8ac589c0773d749eb58 100644 (file)
@@ -2473,16 +2473,16 @@ if HAVE_GRPC_CPP
 BUILT_SOURCES += collectd.grpc.pb.cc types.grpc.pb.cc collectd.pb.cc types.pb.cc
 
 collectd.grpc.pb.cc types.grpc.pb.cc: $(srcdir)/proto/collectd.proto $(srcdir)/proto/types.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/proto \
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/proto \
                --grpc_out=$(builddir) --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN) \
        $(srcdir)/proto/collectd.proto $(srcdir)/proto/types.proto
 
 collectd.pb.cc: $(srcdir)/proto/collectd.proto $(srcdir)/proto/types.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/proto --cpp_out=$(builddir) \
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/proto --cpp_out=$(builddir) \
        $(srcdir)/proto/collectd.proto $(srcdir)/proto/types.proto
 
 types.pb.cc: $(srcdir)/proto/types.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/proto --cpp_out=$(builddir) \
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/proto --cpp_out=$(builddir) \
        $(srcdir)/proto/types.proto
 
 BUILT_SOURCES += \
@@ -2492,22 +2492,21 @@ BUILT_SOURCES += \
        opentelemetry/proto/metrics/v1/metrics.pb.cc \
        opentelemetry/proto/resource/v1/resource.pb.cc
 
-
 opentelemetry/proto/collector/metrics/v1/metrics_service.grpc.pb.cc: $(srcdir)/opentelemetry-proto/opentelemetry/proto/collector/metrics/v1/metrics_service.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/opentelemetry-proto --grpc_out=$(builddir) \
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/opentelemetry-proto --grpc_out=$(builddir) \
                --plugin="protoc-gen-grpc=$(GRPC_CPP_PLUGIN)" $<
 
 opentelemetry/proto/collector/metrics/v1/metrics_service.pb.cc: $(srcdir)/opentelemetry-proto/opentelemetry/proto/collector/metrics/v1/metrics_service.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
 
 opentelemetry/proto/common/v1/common.pb.cc: $(srcdir)/opentelemetry-proto/opentelemetry/proto/metrics/v1/metrics.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
 
 opentelemetry/proto/metrics/v1/metrics.pb.cc: $(srcdir)/opentelemetry-proto/opentelemetry/proto/resource/v1/resource.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
 
 opentelemetry/proto/resource/v1/resource.pb.cc: $(srcdir)/opentelemetry-proto/opentelemetry/proto/common/v1/common.proto
-       $(V_PROTOC)$(PROTOC) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
+       $(V_PROTOC)$(PROTOC) $(PROTOC_FLAGS) -I$(srcdir)/opentelemetry-proto --cpp_out=$(builddir) $<
 
 endif
 endif
index a6a4ab6a2412392ee1dd1ed2f30c046c023761da..13eb9d6a9e3a90f4ca7229ea50840334f5663466 100644 (file)
@@ -4873,6 +4873,35 @@ if test "x$PROTOC" != "x"; then
 fi
 AM_CONDITIONAL([HAVE_PROTOC3], [test "x$have_protoc3" = "xyes"])
 
+protoc3_optional="no"
+if test "x$have_protoc3" = "xyes"; then
+  AC_MSG_CHECKING([whether protoc supports optional fields])
+  testfile=`mktemp`
+  cat <<EOF >"$testfile"
+syntax = "proto3";
+message Test {
+  optional bool support_optional = 1;
+}
+EOF
+  cpp_out=`mktemp -d`
+
+  protoc3_optional="no"
+  PROTOC_FLAGS=""
+  if $PROTOC -I`dirname $testfile` --cpp_out="$cpp_out" "$testfile"; then
+    protoc3_optional="yes"
+  elif $PROTOC -I`dirname $testfile` --cpp_out="$cpp_out" --experimental_allow_proto3_optional "$testfile"; then
+    protoc3_optional="yes (with --experimental_allow_proto3_optional)"
+    PROTOC_FLAGS="--experimental_allow_proto3_optional"
+  fi
+
+  # Clean up
+  rm "$testfile" "$cpp_out/`basename $testfile`.pb.cc" "$cpp_out/`basename $testfile`.pb.h"
+  rmdir "$cpp_out"
+
+  AC_MSG_RESULT([$protoc3_optional])
+  AC_SUBST(PROTOC_FLAGS)
+fi
+
 # --with-libprotobuf-c {{{
 AC_ARG_WITH([libprotobuf-c],
   [AS_HELP_STRING([--with-libprotobuf-c@<:@=PREFIX@:>@], [Path to libprotobuf-c.])],
@@ -7131,6 +7160,9 @@ if test "x$with_libgrpcpp" != "xyes"; then
   plugin_grpc="no (libgrpc++ not found)"
   plugin_write_open_telemetry="no (libgrpc++ not found)"
 fi
+if test "x$protoc3_optional" = "xno"; then
+  plugin_write_open_telemetry="no (protoc does not support optional fields)"
+fi
 
 if test "x$have_getifaddrs" = "xyes"; then
   plugin_interface="yes"