From: Florian Forster Date: Thu, 7 Dec 2023 14:43:46 +0000 (+0100) Subject: configure: Check whether protoc requires `--experimental_allow_proto3_optional`. X-Git-Tag: 6.0.0-rc0~17^2~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1a8004a073ebf06ca90a9306fc3c64b8001921f8;p=thirdparty%2Fcollectd.git configure: Check whether protoc requires `--experimental_allow_proto3_optional`. --- diff --git a/Makefile.am b/Makefile.am index 442a5df2a..f959136ec 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 diff --git a/configure.ac b/configure.ac index a6a4ab6a2..13eb9d6a9 100644 --- a/configure.ac +++ b/configure.ac @@ -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 <"$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"