dev-libs/protobuf-c: add 1.5.0-r2

Drop patch causing "Built-in generator --c_out specifies a maximum edition
PROTO3 which is not the protoc maximum 2023"
Add dependency on dev-cpp/abseil-cpp:=

Closes: https://bugs.gentoo.org/934464
Closes: https://bugs.gentoo.org/936230
Closes: https://bugs.gentoo.org/936167
Closes: https://bugs.gentoo.org/936122
Closes: https://bugs.gentoo.org/936120
Closes: https://bugs.gentoo.org/936030
Signed-off-by: Paul Zander <negril.nx+gentoo@gmail.com>
Closes: https://github.com/gentoo/gentoo/pull/37607
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Paul Zander
2024-07-18 21:09:20 +02:00
committed by Sam James
parent 5e64b372e4
commit a7a48ed2a0
2 changed files with 7 additions and 54 deletions

View File

@@ -115,55 +115,3 @@ index 062d330b..be28b601 100644
}
// Work around changes in protobuf >= 22.x without breaking compilation against
From 2480f4d9d2fa97e5511ed0914ee529a344e969a7 Mon Sep 17 00:00:00 2001
From: Robert Edmonds <edmonds@users.noreply.github.com>
Date: Wed, 20 Mar 2024 22:43:30 -0400
Subject: [PATCH 03/11] CGenerator: Protect against being invoked against
"edition" syntax .proto files
The Google protobuf project is currently experimenting with a new syntax
for .proto files called "editions". Since protobuf-c is a proto2/proto3
compiler, after the previous commit reimplementing `FieldSyntax()`, the
protobuf compiler will abort like this if presented with an "editions"
syntax .proto file due to the safety check in `FieldSyntax()`:
$ protoc --experimental_editions --c_out=. test.proto
protoc-gen-c: ./protoc-c/c_helpers.h:178: int google::protobuf::compiler::c::FieldSyntax(const google::protobuf::FieldDescriptor*): Assertion `syntax == "proto2" || syntax == "proto3"' failed.
--c_out: protoc-gen-c: Plugin killed by signal 6.
On protobuf 26, our `CodeGenerator` can implement certain methods to
declare that we "support" editions, and then reject any other edition
except proto2 and proto3, which have apparently been retroactively
declared to be "editions". Of course this needs to be wrapped in a
version guard.
With this protection in place, the protobuf compiler cleanly exits with
a nice error message like this:
$ protoc --experimental_editions --c_out=. test.proto
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
E0000 00:00:1710988958.296200 20022 descriptor.cc:4620] Invalid proto descriptor for file "test.proto":
E0000 00:00:1710988958.296239 20022 descriptor.cc:4623] test.proto: Edition 2023 is later than the maximum supported edition PROTO3
--c_out: protoc-gen-c: Plugin failed with status code 1.
---
protoc-c/c_generator.h | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/protoc-c/c_generator.h b/protoc-c/c_generator.h
index b8b44aaa..4aeb5790 100644
--- a/protoc-c/c_generator.h
+++ b/protoc-c/c_generator.h
@@ -93,6 +93,12 @@ class PROTOC_C_EXPORT CGenerator : public CodeGenerator {
const std::string& parameter,
OutputDirectory* output_directory,
std::string* error) const;
+
+#if GOOGLE_PROTOBUF_VERSION >= 5026000
+ uint64_t GetSupportedFeatures() const { return CodeGenerator::FEATURE_SUPPORTS_EDITIONS; }
+ Edition GetMinimumEdition() const { return Edition::EDITION_PROTO2; }
+ Edition GetMaximumEdition() const { return Edition::EDITION_PROTO3; }
+#endif
};
} // namespace c

View File

@@ -16,7 +16,7 @@ S="${WORKDIR}/${MY_P}"
LICENSE="BSD-2"
# Subslot == SONAME version
SLOT="0/1.0.0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~mips ~ppc64 ~riscv ~sparc ~x86"
IUSE="static-libs"
BDEPEND="
@@ -25,7 +25,12 @@ BDEPEND="
"
DEPEND="
>=dev-libs/protobuf-3:0=[${MULTILIB_USEDEP}]"
RDEPEND="${DEPEND}"
# NOTE
# protobuf links to abseil-cpp libraries via it's .pc files.
# To cause rebuild when the abseil-cpp version changes we add it to RDEPEND only.
RDEPEND="${DEPEND}
dev-cpp/abseil-cpp:=[${MULTILIB_USEDEP}]
"
PATCHES=(
"${FILESDIR}/${PN}-1.5.0-Clean-CMake.patch"