| |
@@ -15,7 +15,7 @@
|
| |
%global gtest_commit 0e402173c97aea7a00749e825b194bfede4f2e45
|
| |
#global gtest_version 1.11.0
|
| |
#global gtest_dir googletest-release-#{gtest_version}
|
| |
- %bcond system_gtest 0
|
| |
+ %bcond system_gtest 1
|
| |
|
| |
# =====
|
| |
|
| |
@@ -44,7 +44,7 @@
|
| |
# it is unlikely to every be successfully packaged under the Fedora packaging
|
| |
# guidelines. Note that the URL is a read-only mirror based on
|
| |
# https://github.com/envoyproxy/envoy, with different commit hashes.
|
| |
- %global envoy_api_commit 9c42588c956220b48eb3099d186487c2f04d32ec
|
| |
+ %global envoy_api_commit 9d6ffa70677c4dbf23f6ed569676206c4e2edff4
|
| |
%global envoy_api_url https://github.com/envoyproxy/data-plane-api
|
| |
%global envoy_api_dir data-plane-api-%{envoy_api_commit}
|
| |
|
| |
@@ -56,7 +56,7 @@
|
| |
%global opencensus_proto_url https://github.com/census-instrumentation/opencensus-proto
|
| |
%global opencensus_proto_dir opencensus-proto-%{opencensus_proto_version}
|
| |
|
| |
- %global xds_commit cb28da3451f158a947dfc45090fe92b07b243bc1
|
| |
+ %global xds_commit e9ce68804cb4e64cab5a52e3c8baf840d4ff87b7
|
| |
%global xds_url https://github.com/cncf/xds
|
| |
%global xds_dir xds-%{xds_commit}
|
| |
|
| |
@@ -116,19 +116,19 @@
|
| |
# documentation. Instead, we have just dropped all documentation.
|
| |
|
| |
Name: grpc
|
| |
- Version: 1.48.4
|
| |
+ Version: 1.60.0
|
| |
Release: %autorelease
|
| |
- Summary: RPC library and framework
|
| |
+ Summary: High performance, open source universal RPC framework
|
| |
|
| |
%global srcversion %(echo '%{version}' | sed -r 's/~rc/-pre/')
|
| |
%global pyversion %(echo '%{version}' | tr -d '~')
|
| |
|
| |
# CMakeLists.txt: gRPC_CORE_SOVERSION
|
| |
- %global c_so_version 26
|
| |
+ %global c_so_version 37
|
| |
# CMakeLists.txt: gRPC_CPP_SOVERSION
|
| |
# See https://github.com/abseil/abseil-cpp/issues/950#issuecomment-843169602
|
| |
# regarding unusual C++ SOVERSION style (not a single number).
|
| |
- %global cpp_so_version 1.48
|
| |
+ %global cpp_so_version 1.60
|
| |
|
| |
# The entire source is Apache-2.0 except the following:
|
| |
#
|
| |
@@ -140,15 +140,14 @@
|
| |
# * Potentially linked into any compiled subpackage (but not pure-Python
|
| |
# subpackages, etc.)
|
| |
# BSD-3-Clause:
|
| |
- # - third_party/upb/, except third_party/upb/third_party/lunit/ and
|
| |
- # third_party/upb/third_party/utf8_range/
|
| |
+ # - third_party/upb/, except third_party/upb/third_party/lunit/
|
| |
# * Potentially linked into any compiled subpackage (but not pure-Python
|
| |
# subpackages, etc.)
|
| |
# - third_party/address_sorting/
|
| |
# * Potentially linked into any compiled subpackage (but not pure-Python
|
| |
# subpackages, etc.)
|
| |
# MIT:
|
| |
- # - third_party/upb/third_party/utf8_range
|
| |
+ # - third_party/utf8_range
|
| |
# * Potentially linked into any compiled subpackage (but not pure-Python
|
| |
# subpackages, etc.)
|
| |
#
|
| |
@@ -212,6 +211,7 @@
|
| |
BuildRequires: cmake(gflags)
|
| |
BuildRequires: pkgconfig(protobuf)
|
| |
BuildRequires: protobuf-compiler
|
| |
+ BuildRequires: pkgconfig(protobuf-lite)
|
| |
BuildRequires: pkgconfig(re2)
|
| |
BuildRequires: pkgconfig(openssl)
|
| |
BuildRequires: cmake(c-ares)
|
| |
@@ -219,6 +219,7 @@
|
| |
# Sets XXH_INCLUDE_ALL, which means xxhash is used as a header-only library
|
| |
BuildRequires: pkgconfig(libxxhash)
|
| |
BuildRequires: xxhash-static
|
| |
+ BuildRequires: pkgconfig(libsystemd)
|
| |
|
| |
%if %{with core_tests}
|
| |
BuildRequires: cmake(benchmark)
|
| |
@@ -255,15 +256,6 @@
|
| |
# (tools/distrib/python/grpcio_tools/setup.py)
|
| |
BuildRequires: python3dist(cython) > 0.23
|
| |
|
| |
- # grpcio (setup.py) install_requires:
|
| |
- # grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
|
| |
- # futures>=2.2.0; python_version<'3.2'
|
| |
-
|
| |
- # grpcio (setup.py) install_requires:
|
| |
- # grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
|
| |
- # enum34>=1.0.4; python_version<'3.4'
|
| |
-
|
| |
- # grpcio_csds (src/python/grpcio_csds/setup.py) install_requires:
|
| |
# grpcio_channelz (src/python/grpcio_channelz/setup.py) install_requires:
|
| |
# grpcio_health_checking (src/python/grpcio_health_checking/setup.py)
|
| |
# install_requires:
|
| |
@@ -271,8 +263,9 @@
|
| |
# grpcio_status (src/python/grpcio_status/setup.py) install_requires:
|
| |
# grpcio_testing (src/python/grpcio_testing/setup.py) install_requires:
|
| |
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
|
| |
+ # * This technically has protobuf>=4.21.6rc1,!=4.22.0.*
|
| |
# grpcio_tools (tools/distrib/python/grpcio_tools/setup.py) install_requires:
|
| |
- BuildRequires: python3dist(protobuf) >= 3.12.0
|
| |
+ BuildRequires: python3dist(protobuf) >= 4.21.6
|
| |
|
| |
# grpcio_status (src/python/grpcio_status/setup.py) install_requires:
|
| |
BuildRequires: python3dist(googleapis-common-protos) >= 1.5.5
|
| |
@@ -281,7 +274,10 @@
|
| |
# depends on all of the other Python packages—which are satisfied within this
|
| |
# package.
|
| |
#
|
| |
- # Similarly, grpcio_admin depends on grpcio_channelz and grpcio_csds.
|
| |
+ # Similarly, grpcio_admin depends on grpcio_channelz and grpcio_csds (but we do
|
| |
+ # not package either grpcio_admin or grpc_csds because they depend on the
|
| |
+ # problematic xds-protos; see the note above the corresponding Obsoletes later
|
| |
+ # in this spec file).
|
| |
|
| |
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
|
| |
BuildRequires: python3dist(coverage) >= 4.0
|
| |
@@ -295,6 +291,11 @@
|
| |
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
|
| |
BuildRequires: python3dist(requests) >= 2.14.2
|
| |
|
| |
+ # dns_server.py imports
|
| |
+ BuildRequires: python3dist(twisted)
|
| |
+ BuildRequires: python3dist(service-identity)
|
| |
+ BuildRequires: python3dist(pyyaml)
|
| |
+
|
| |
%if %{with python_gevent_tests}
|
| |
# Required for “test_gevent” tests:
|
| |
BuildRequires: python3dist(gevent)
|
| |
@@ -322,11 +323,11 @@
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/CryptoPolicies/#_cc_applications
|
| |
#
|
| |
# In fact, this may not be needed, since only testing code is patched.
|
| |
- Patch: grpc-1.39.0-system-crypto-policies.patch
|
| |
+ Patch: grpc-1.56.1-Use-the-system-OpenSSL-profile.patch
|
| |
# Fix errors like:
|
| |
# TypeError: super(type, obj): obj must be an instance or subtype of type
|
| |
# It is not clear why these occur.
|
| |
- Patch: grpc-1.36.4-python-grpcio_tests-fixture-super.patch
|
| |
+ # Patch: grpc-1.36.4-python-grpcio_tests-fixture-super.patch
|
| |
# Skip tests requiring non-loopback network access when the
|
| |
# FEDORA_NO_NETWORK_TESTS environment variable is set.
|
| |
Patch: grpc-1.40.0-python-grpcio_tests-make-network-tests-skippable.patch
|
| |
@@ -335,11 +336,11 @@
|
| |
# run. It is not clear that this is a real problem. Any help in understanding
|
| |
# the actual cause well enough to fix this or usefully report it upstream is
|
| |
# welcome.
|
| |
- Patch: grpc-1.48.0-python-grpcio_tests-skip-compression-tests.patch
|
| |
+ Patch: grpc-1.60.0-python-grpcio_tests-skip-compression-tests.patch
|
| |
# The upstream requirement to link gtest/gmock from grpc_cli is spurious.
|
| |
# Remove it. We still have to build the core tests and link a test library
|
| |
# (libgrpc++_test_config.so…)
|
| |
- Patch: grpc-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch
|
| |
+ # Patch: grpc-1.56.1-Do-not-link-gtest-gmock-from-grpc_cli.patch
|
| |
# Fix confusion about path to python_wrapper.sh in httpcli/httpscli tests. I
|
| |
# suppose that the unpatched code must be correct for how upstream runs the
|
| |
# tests, somehow.
|
| |
@@ -354,71 +355,14 @@
|
| |
#
|
| |
# TODO: Attempt to reproduce this outside the RPM build environment and submit
|
| |
# a useful/actionable upstream bug report.
|
| |
- Patch: grpc-1.46.3-ChannelzServicerTest-python3.11-regressions.patch
|
| |
+ Patch: grpc-1.60.0-ChannelzServicerTest-python3.11-regressions.patch
|
| |
# Running Python “test_lite”, in grpcio_tests,
|
| |
# unit._dynamic_stubs_test.DynamicStubTest.test_grpc_tools_unimportable hangs.
|
| |
# This may be related to:
|
| |
# [FLAKE] DynamicStubTest timeout under gevent macOS
|
| |
# https://github.com/grpc/grpc/issues/25368
|
| |
# The patch simply skips the test.
|
| |
- Patch: grpc-1.48.0-python-grpcio_tests-DynamicStubTest-hang.patch
|
| |
- # Use CMake variables for paths in pkg-config files
|
| |
- #
|
| |
- # Use @gRPC_INSTALL_LIBDIR@ for libdir; this fixes an incorrect
|
| |
- # -L/usr/lib on multilib Linux systems where that is the 32-bit library
|
| |
- # path and the correct path is /usr/lib64.
|
| |
- #
|
| |
- # Use @gRPC_INSTALL_INCLUDEDIR@ for consistency.
|
| |
- #
|
| |
- # See also:
|
| |
- # https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/
|
| |
- # thread/P2N35UMQVEXPILAF47RQB53MWRV2GM3J/
|
| |
- #
|
| |
- # https://github.com/grpc/grpc/pull/31671
|
| |
- Patch: %{forgeurl}/pull/31671.patch
|
| |
- # [Test] Use ssl.SSLContext.wrap_socket, not ssl.wrap_socket
|
| |
- #
|
| |
- # The latter emits a DeprecationWarning since Python 3.10 and is removed
|
| |
- # in Python 3.12.
|
| |
- #
|
| |
- # https://github.com/grpc/grpc/pull/33492
|
| |
- #
|
| |
- # Backported to 1.48.4.
|
| |
- Patch: grpc-1.48.4-wrap_socket.patch
|
| |
- # [Test] Do not use importlib find_module API, removed in Python 3.12
|
| |
- # https://github.com/grpc/grpc/pull/33506
|
| |
- #
|
| |
- # Backported to 1.48.4.
|
| |
- Patch: grpc-1.48.4-find_module.patch
|
| |
- # Backport several #include directives
|
| |
- # These were included in https://github.com/grpc/grpc/pull/30952
|
| |
- #
|
| |
- # [Fix] Added missing #include (#34359)
|
| |
- # See: https://github.com/grpc/grpc/pull/34359
|
| |
- #
|
| |
- # Add abseil includes in test/cpp/end2end/xds/xds_server.h
|
| |
- # Downstream-only because the current release, 1.60.0, builds without changes.
|
| |
- #
|
| |
- # Together, these fix compatibility with abseil-cpp-20240116.rc1.
|
| |
- Patch: grpc-1.48.4-abseil-cpp-includes.patch
|
| |
-
|
| |
- # [http2] Dont drop connections on metadata limit exceeded (#32309)
|
| |
- #
|
| |
- # * [http] Dont drop connections on metadata limit exceeded
|
| |
- #
|
| |
- # * remove bad test
|
| |
- #
|
| |
- # * Automated change: Fix sanity tests
|
| |
- # https://github.com/grpc/grpc/commit/29d8beee0ac2555773b2a2dda5601c74a95d6c10
|
| |
- # https://github.com/grpc/grpc/pull/32309
|
| |
- #
|
| |
- # Fixes CVE-2023-32732
|
| |
- # https://nvd.nist.gov/vuln/detail/CVE-2023-32732
|
| |
- # CVE-2023-32732 grpc: denial of service [fedora-all]
|
| |
- # https://bugzilla.redhat.com/show_bug.cgi?id=2214470
|
| |
- #
|
| |
- # Backported to 1.48.4.
|
| |
- Patch: 0001-http2-Dont-drop-connections-on-metadata-limit-exceed.patch
|
| |
+ Patch: grpc-1.60.0-Skip-hanging-DynamicStubTest.patch
|
| |
# [Python] Specify noexcept for cdef functions (#34242)
|
| |
#
|
| |
# This is needed to build grpc with Cython 3.
|
| |
@@ -429,7 +373,14 @@
|
| |
Patch: 0001-Specify-noexcept-for-cdef-functions.patch
|
| |
# [Python] Do not call PyEval_InitThreads
|
| |
# https://github.com/grpc/grpc/pull/34857
|
| |
- Patch: %{forgeurl}/pull/34857.patch
|
| |
+ # Patch: %%{forgeurl}/pull/34857.patch
|
| |
+
|
| |
+ # Use system gtest
|
| |
+ Patch: grpc-1.60.0-system-gtest.patch
|
| |
+
|
| |
+ # Fix RbacServiceConfigParsingTest.BadActionAndPolicyType test
|
| |
+ # so that it uses the latest output string for its testing
|
| |
+ Patch: grpc-1.60.0-fix-test-string-RbacServiceConfigParsingTest.BadActionAndPolicyType.patch
|
| |
|
| |
Requires: grpc-data = %{version}-%{release}
|
| |
|
| |
@@ -446,7 +397,10 @@
|
| |
# Note also that libupb is installed in the system-wide linker path, which will
|
| |
# be a problem if upb is ever packaged separately. We will cross that bridge if
|
| |
# we get there.
|
| |
- Provides: bundled(upb)
|
| |
+ #
|
| |
+ # According to https://github.com/grpc/grpc/pull/32914, this is upb 23.0.
|
| |
+ %global upb_version 23.0
|
| |
+ Provides: bundled(upb) = %{upb_version}
|
| |
# The bundled upb itself bundles https://github.com/cyb70289/utf8; we follow
|
| |
# upstream in styling this as “utf8_range”. It cannot reasonably be unbundled
|
| |
# because the original code is not structured for distribution as a library (it
|
| |
@@ -461,26 +415,12 @@
|
| |
# getaddrinfo.c, but Android’s getaddrinfo.c was used as a guide or example
|
| |
# of a way to implement the RFC 6724 spec when this was written.
|
| |
|
| |
- %description
|
| |
- gRPC is a modern open source high performance RPC framework that can run in any
|
| |
- environment. It can efficiently connect services in and across data centers
|
| |
- with pluggable support for load balancing, tracing, health checking and
|
| |
- authentication. It is also applicable in last mile of distributed computing to
|
| |
- connect devices, mobile applications and browsers to backend services.
|
| |
-
|
| |
- The main usage scenarios:
|
| |
-
|
| |
- • Efficiently connecting polyglot services in microservices style
|
| |
- architecture
|
| |
- • Connecting mobile devices, browser clients to backend services
|
| |
- • Generating efficient client libraries
|
| |
-
|
| |
- Core Features that make it awesome:
|
| |
+ %global common_description %{expand:
|
| |
+ gRPC is a modern, open source, high-performance remote procedure call (RPC)
|
| |
+ framework that can run anywhere. gRPC enables client and server applications to
|
| |
+ communicate transparently, and simplifies the building of connected systems.}
|
| |
|
| |
- • Idiomatic client libraries in 10 languages
|
| |
- • Highly efficient on wire and with a simple service definition framework
|
| |
- • Bi-directional streaming with http/2 based transport
|
| |
- • Pluggable auth, tracing, load balancing and health checking
|
| |
+ %description %{common_description}
|
| |
|
| |
This package provides the shared C core library.
|
| |
|
| |
@@ -492,9 +432,10 @@
|
| |
|
| |
Requires: ca-certificates
|
| |
|
| |
- %description data
|
| |
- Common data for gRPC bindings: currently, this contains only a symbolic link to
|
| |
- the system shared TLS certificates.
|
| |
+ %description data %{common_description}
|
| |
+
|
| |
+ This package provides common data for gRPC bindings: currently, this contains
|
| |
+ only a symbolic link to the system shared TLS certificates.
|
| |
|
| |
|
| |
%package doc
|
| |
@@ -512,30 +453,11 @@
|
| |
Provides: python-grpcio-status-doc = %{version}-%{release}
|
| |
Provides: python-grpcio-testing-doc = %{version}-%{release}
|
| |
|
| |
- %description doc
|
| |
- Documentation and examples for gRPC, including Markdown documentation sources
|
| |
- for the following:
|
| |
-
|
| |
- • C (core)
|
| |
- ○ API
|
| |
- ○ Internals
|
| |
- • C++
|
| |
- ○ API
|
| |
- ○ Internals
|
| |
- • Objective C
|
| |
- ○ API
|
| |
- ○ Internals
|
| |
- • Python
|
| |
- ○ grpcio
|
| |
- ○ grpcio_admin
|
| |
- ○ grpcio_csds
|
| |
- ○ grpcio_channelz
|
| |
- ○ grpcio_health_checking
|
| |
- ○ grpcio_reflection
|
| |
- ○ grpcio_status
|
| |
- ○ grpcio_testing
|
| |
-
|
| |
- For rendered HTML documentation, please see https://grpc.io/docs/.
|
| |
+ %description doc %{common_description}
|
| |
+
|
| |
+ This package provides examples and documentation sources (but not rendered
|
| |
+ documentation) for gRPC. For rendered HTML documentation, please see
|
| |
+ https://grpc.io/docs/.
|
| |
|
| |
|
| |
%package cpp
|
| |
@@ -545,11 +467,12 @@
|
| |
Requires: grpc%{?_isa} = %{version}-%{release}
|
| |
Requires: grpc-cpp%{?_isa} = %{version}-%{release}
|
| |
|
| |
- Provides: bundled(upb)
|
| |
+ Provides: bundled(upb) = %{upb_version}
|
| |
Provides: bundled(utf8_range)
|
| |
|
| |
- %description cpp
|
| |
- C++ language bindings for gRPC.
|
| |
+ %description cpp %{common_description}
|
| |
+
|
| |
+ This package provides C++ language bindings for gRPC.
|
| |
|
| |
|
| |
%package plugins
|
| |
@@ -560,12 +483,13 @@
|
| |
Requires: grpc-cpp%{?_isa} = %{version}-%{release}
|
| |
Requires: protobuf-compiler
|
| |
|
| |
- Provides: bundled(upb)
|
| |
+ Provides: bundled(upb) = %{upb_version}
|
| |
Provides: bundled(utf8_range)
|
| |
|
| |
- %description plugins
|
| |
- Plugins to the protocol buffers compiler to generate gRPC sources.
|
| |
+ %description plugins %{common_description}
|
| |
|
| |
+ This package provides plugins to the protocol buffers compiler to generate gRPC
|
| |
+ sources.
|
| |
|
| |
%package cli
|
| |
Summary: Command-line tool for gRPC
|
| |
@@ -574,10 +498,11 @@
|
| |
Requires: grpc%{?_isa} = %{version}-%{release}
|
| |
Requires: grpc-cpp%{?_isa} = %{version}-%{release}
|
| |
|
| |
- Provides: bundled(upb)
|
| |
+ Provides: bundled(upb) = %{upb_version}
|
| |
Provides: bundled(utf8_range)
|
| |
|
| |
- %description cli
|
| |
+ %description cli %{common_description}
|
| |
+
|
| |
The command line tool can do the following things:
|
| |
|
| |
• Send unary rpc.
|
| |
@@ -614,9 +539,13 @@
|
| |
Requires: cmake(c-ares)
|
| |
# grpc.pc has -lz
|
| |
Requires: pkgconfig(zlib)
|
| |
+ # gRPCTargets.cmake links libsystemd.so
|
| |
+ Requires: pkgconfig(libsystemd)
|
| |
+
|
| |
+ %description devel %{common_description}
|
| |
|
| |
- %description devel
|
| |
- Development headers and files for gRPC libraries (both C and C++).
|
| |
+ This package provides development headers and files for gRPC libraries (both C
|
| |
+ and C++).
|
| |
|
| |
|
| |
%package -n python3-grpcio
|
| |
@@ -629,7 +558,7 @@
|
| |
# to do so.
|
| |
Requires: grpc-data = %{version}-%{release}
|
| |
|
| |
- Provides: bundled(upb)
|
| |
+ Provides: bundled(upb) = %{upb_version}
|
| |
Provides: bundled(utf8_range)
|
| |
|
| |
# We no longer package these because they require python3dist(xds-protos),
|
| |
@@ -648,8 +577,10 @@
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_provides_for_importable_modules
|
| |
%py_provides python3-grpc
|
| |
|
| |
- %description -n python3-grpcio
|
| |
- Python language bindings for gRPC (HTTP/2-based RPC framework).
|
| |
+ %description -n python3-grpcio %{common_description}
|
| |
+
|
| |
+ This package provides Python language bindings for gRPC (HTTP/2-based RPC
|
| |
+ framework).
|
| |
|
| |
|
| |
%global grpcio_egg %{python3_sitearch}/grpcio-%{pyversion}-py%{python3_version}.egg-info
|
| |
@@ -660,14 +591,15 @@
|
| |
Summary: Package for gRPC Python tools
|
| |
# License: same as base package
|
| |
|
| |
- Provides: bundled(upb)
|
| |
+ Provides: bundled(upb) = %{upb_version}
|
| |
Provides: bundled(utf8_range)
|
| |
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_provides_for_importable_modules
|
| |
%py_provides python3-grpc-tools
|
| |
|
| |
- %description -n python3-grpcio-tools
|
| |
- Package for gRPC Python tools.
|
| |
+ %description -n python3-grpcio-tools %{common_description}
|
| |
+
|
| |
+ This package provides gRPC Python tools.
|
| |
|
| |
|
| |
%package -n python3-grpcio-channelz
|
| |
@@ -679,9 +611,7 @@
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_provides_for_importable_modules
|
| |
%py_provides python3-grpc-channelz
|
| |
|
| |
- %description -n python3-grpcio-channelz
|
| |
- gRPC Python Channelz package
|
| |
- ============================
|
| |
+ %description -n python3-grpcio-channelz %{common_description}
|
| |
|
| |
Channelz is a live debug tool in gRPC Python.
|
| |
|
| |
@@ -695,11 +625,9 @@
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_provides_for_importable_modules
|
| |
%py_provides python3-grpc-health
|
| |
|
| |
- %description -n python3-grpcio-health-checking
|
| |
- gRPC Python Health Checking
|
| |
- ===========================
|
| |
+ %description -n python3-grpcio-health-checking %{common_description}
|
| |
|
| |
- Reference package for GRPC Python health checking.
|
| |
+ This is the reference package for gRPC Python health checking.
|
| |
|
| |
|
| |
%package -n python3-grpcio-reflection
|
| |
@@ -711,11 +639,8 @@
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_provides_for_importable_modules
|
| |
%py_provides python3-grpc-reflection
|
| |
|
| |
- %description -n python3-grpcio-reflection
|
| |
- gRPC Python Reflection package
|
| |
- ==============================
|
| |
-
|
| |
- Reference package for reflection in GRPC Python.
|
| |
+ %description -n python3-grpcio-reflection %{common_description}
|
| |
+ This is the reference package for reflection in gRPC Python.
|
| |
|
| |
|
| |
%package -n python3-grpcio-status
|
| |
@@ -727,11 +652,9 @@
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_provides_for_importable_modules
|
| |
%py_provides python3-grpc-status
|
| |
|
| |
- %description -n python3-grpcio-status
|
| |
- gRPC Python Status Proto
|
| |
- ===========================
|
| |
+ %description -n python3-grpcio-status %{common_description}
|
| |
|
| |
- Reference package for GRPC Python status proto mapping.
|
| |
+ This is the reference package for gRPC Python status proto mapping.
|
| |
|
| |
|
| |
%package -n python3-grpcio-testing
|
| |
@@ -743,33 +666,41 @@
|
| |
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/#_provides_for_importable_modules
|
| |
%py_provides python3-grpc-testing
|
| |
|
| |
- %description -n python3-grpcio-testing
|
| |
- gRPC Python Testing Package
|
| |
- ===========================
|
| |
+ %description -n python3-grpcio-testing %{common_description}
|
| |
|
| |
- Testing utilities for gRPC Python.
|
| |
+ This package provides testing utilities for gRPC Python.
|
| |
|
| |
|
| |
%prep
|
| |
%autosetup -p1 -n grpc-%{srcversion}
|
| |
|
| |
- cp -p third_party/upb/third_party/utf8_range/LICENSE LICENSE-utf8_range
|
| |
+ cp -p third_party/utf8_range/LICENSE LICENSE-utf8_range
|
| |
|
| |
- echo '===== Patching grpcio_tools for system protobuf =====' 2>&1
|
| |
+ echo '===== Patching grpcio_tools for system protobuf/abseil-cpp =====' 2>&1
|
| |
# Build python3-grpcio_tools against system protobuf packages instead of
|
| |
# expecting a git submodule. Must also add requisite linker flags using
|
| |
# GRPC_PYTHON_LDFLAGS. This was formerly done by
|
| |
# grpc-VERSION-python-grpcio_tools-use-system-protobuf.patch, but it had to be
|
| |
# tediously but trivially rebased every patch release as the CC_FILES list
|
| |
# changed, so we automated the patch.
|
| |
- sed -r -i \
|
| |
- -e "s/^(# AUTO-GENERATED .*)/\\1\\n\
|
| |
- # Then, modified by hand to build with an external system protobuf\
|
| |
- # installation./" \
|
| |
- -e 's/^(CC_FILES=\[).*(\])/\1\2/' \
|
| |
- -e "s@^((CC|PROTO)_INCLUDE=')[^']+'@\1%{_includedir}'@" \
|
| |
- -e '/^PROTOBUF_SUBMODULE_VERSION=/d' \
|
| |
- 'tools/distrib/python/grpcio_tools/protoc_lib_deps.py'
|
| |
+ cat >> 'tools/distrib/python/grpcio_tools/protoc_lib_deps.py' <<'EOF'
|
| |
+
|
| |
+ # Downstream patch: override or modify values so that we do not depend on
|
| |
+ # bundled files for system libraries.
|
| |
+
|
| |
+ del PROTOBUF_SUBMODULE_VERSION
|
| |
+ PROTO_INCLUDE="%{_includedir}"
|
| |
+
|
| |
+ _unbundle_libs = {"abseil-cpp", "protobuf"}
|
| |
+ _unbundle_prefixes = {f"third_party/{lib}" for lib in _unbundle_libs}
|
| |
+
|
| |
+ def _ok_prefix(path):
|
| |
+ return not any(map(path.startswith, _unbundle_prefixes))
|
| |
+
|
| |
+ CC_FILES = list(filter(_ok_prefix, CC_FILES))
|
| |
+ CC_INCLUDES = list(filter(_ok_prefix, CC_INCLUDES))
|
| |
+ EOF
|
| |
+
|
| |
|
| |
echo '===== Preparing gtest/gmock =====' 2>&1
|
| |
%if %{without system_gtest}
|
| |
@@ -778,6 +709,9 @@
|
| |
rm -rvf 'third_party/googletest'
|
| |
mv '../%{gtest_dir}' 'third_party/googletest'
|
| |
%else
|
| |
+
|
| |
+
|
| |
+ %if 0
|
| |
# Patch CMakeLists for external gtest/gmock.
|
| |
#
|
| |
# 1. Create dummy sources, adding a typedef so the translation unit is not
|
| |
@@ -799,6 +733,8 @@
|
| |
'\1\2\n\1gtest\n\1gmock/' CMakeLists.txt
|
| |
%endif
|
| |
|
| |
+ %endif
|
| |
+
|
| |
# Extract the source tarballs needed for their .proto files, which upstream
|
| |
# expects to download at build time.
|
| |
%setup -q -T -D -b 2 -n grpc-%{srcversion}
|
| |
@@ -890,6 +826,96 @@
|
| |
tools/run_tests/artifacts/artifact_targets.py \
|
| |
tools/distrib/python/grpcio_tools/setup.py
|
| |
|
| |
+ # Fix:
|
| |
+ # cc1plus: fatal error: third_party/utf8_range/utf8_validity.cc: No such file
|
| |
+ # or directory
|
| |
+ # This is new from 1.48.4 to 1.56.1, and it might be an upstream build system
|
| |
+ # bug, but we have to build the package so differently from upstream, and the
|
| |
+ # build system is so messy with so much indirection, that it’s hard to track
|
| |
+ # down exactly what we should report or how it should be fixed properly. For
|
| |
+ # now, we just work around it with a symlink.
|
| |
+ ln -s ../../../../third_party/ tools/distrib/python/grpcio_tools/third_party
|
| |
+
|
| |
+
|
| |
+ echo '===== Adding any neccessary Python test skips =====' 2>&1
|
| |
+ # This appears to be merely a representation discrepancy. We haven’t been able
|
| |
+ # to track it down to a particular change (e.g. dependency version update). It
|
| |
+ # appears in F38 as well, if the necessary abseil-cpp and protobuf packages are
|
| |
+ # built. Since we don’t understand this well enough to report it upstream
|
| |
+ # usefully, we just skip it downstream for now. Assistance welcome.
|
| |
+ #
|
| |
+ # Sample difference:
|
| |
+ #
|
| |
+ # - ' "channelz._channelz_servicer_test.ChannelzServicerTest",\n'
|
| |
+ # ? ^^^ ^ ---
|
| |
+ # + 'tests.channelz._channelz_servicer_test.ChannelzServicerTest',
|
| |
+ # ? ^^^^^^ ^
|
| |
+ from='^([[:blank:]]+)(def testTestsJsonUpToDate\()'
|
| |
+ skip='@unittest.skip("JSON representations differ; cause not ascertained")'
|
| |
+ sed -r -i "s/${from}/\\1${skip}\\n\\1\\2/" \
|
| |
+ src/python/grpcio_tests/tests/_sanity/_sanity_test.py
|
| |
+ # With abseil-cpp-20240116.0:
|
| |
+ # [mutex.cc : 1418] RAW: Potential Mutex deadlock:
|
| |
+ # …
|
| |
+ # [mutex.cc : 1428] RAW: Acquiring absl::Mutex 0x556a1fa3d0e0 while holding
|
| |
+ # 0x556a1fa4bdc0 0x7f55cc003530; a cycle in the historical lock ordering graph
|
| |
+ # has been observed
|
| |
+ #
|
| |
+ # In TestLeak:test_leak_with_single_shot_rpcs.
|
| |
+ #
|
| |
+ # Since this is the only test in the case, we can’t just skip it with a
|
| |
+ # decorator or unittest explodes with a KeyError. Since this is the only test
|
| |
+ # case in the module, we remove the entire module.
|
| |
+ rm src/python/grpcio_tests/tests_py3_only/unit/_leak_test.py
|
| |
+ %ifarch aarch64 s390x x86_64
|
| |
+ # With abseil-cpp-20240116.0 on s390x or x86_64 (output from s390x):
|
| |
+ #
|
| |
+ # Running tests_py3_only.unit._simple_stubs_test.SimpleStubsTest.test_total_channels_enforced
|
| |
+ # [mutex.cc : 1418] RAW: Potential Mutex deadlock:
|
| |
+ # @ 0x3ffacc8c7f0 absl::lts_20240116::Mutex::Lock()
|
| |
+ # …
|
| |
+ # [mutex.cc : 1428] RAW: Acquiring absl::Mutex 0x2aa274724d0 while holding 0x2aa2748aa90 0x2aa27463910; a cycle in the historical lock ordering graph has been observed
|
| |
+ # …
|
| |
+ # [mutex.cc : 1454] RAW: dying due to potential deadlock
|
| |
+ #
|
| |
+ # This failure is flaky. It’s unclear whether s390x is the only affected
|
| |
+ # architecture or whether this is the only affected test.
|
| |
+ #
|
| |
+ # from='^([[:blank:]]+)(def test_total_channels_enforced\()'
|
| |
+ # skip='@unittest.skip("Deadlock \/ lock ordering graph cycle")'
|
| |
+ # sed -r -i "s/${from}/\\1${skip}\\n\\1\\2/" \
|
| |
+ # src/python/grpcio_tests/tests_py3_only/unit/_simple_stubs_test.py
|
| |
+ #
|
| |
+ # -----
|
| |
+ #
|
| |
+ # With abseil-cpp-20240116.0 on aarch64:
|
| |
+ #
|
| |
+ # Running tests_py3_only.unit._simple_stubs_test.SimpleStubsTest.test_stream_stream
|
| |
+ # /builddir/build/BUILD/grpc-1.60.0/src/python/grpcio_tests/tests_py3_only/unit/_simple_stubs_test.py:293: ExperimentalApiWarning: 'stream_stream' is an experimental API. It is subject to change or removal between minor releases. Proceed with caution.
|
| |
+ # for response in grpc.experimental.stream_stream(
|
| |
+ # [mutex.cc : 1418] RAW: Potential Mutex deadlock:
|
| |
+ # @ 0x21ffff84f96a38
|
| |
+ # …
|
| |
+ # [mutex.cc : 1428] RAW: Acquiring absl::Mutex 0xaaaadadf77a0 while holding 0xaaaadae500b0; a cycle in the historical lock ordering graph has been observed
|
| |
+ # …
|
| |
+ # [mutex.cc : 1454] RAW: dying due to potential deadlock
|
| |
+ #
|
| |
+ # This failure is flaky. It’s unclear whether aarch64 is the only affected
|
| |
+ # architecture or whether this is the only affected test.
|
| |
+ #
|
| |
+ # from='^([[:blank:]]+)(def test_stream_stream\()'
|
| |
+ # skip='@unittest.skip("Deadlock \/ lock ordering graph cycle")'
|
| |
+ # sed -r -i "s/${from}/\\1${skip}\\n\\1\\2/" \
|
| |
+ # src/python/grpcio_tests/tests_py3_only/unit/_simple_stubs_test.py
|
| |
+ #
|
| |
+ # -----
|
| |
+ #
|
| |
+ # Even skipping a single test with a decorator causes unittest to explode with
|
| |
+ # a KeyError, which is very strange. We just remove the entire test module on
|
| |
+ # these architectures.
|
| |
+ rm src/python/grpcio_tests/tests_py3_only/unit/_simple_stubs_test.py
|
| |
+ %endif
|
| |
+
|
| |
|
| |
%build
|
| |
# ~~~~ C (core) and C++ (cpp) ~~~~
|
| |
@@ -934,6 +960,9 @@
|
| |
-DgRPC_BUILD_GRPC_PHP_PLUGIN:BOOL=ON \
|
| |
-DgRPC_BUILD_GRPC_PYTHON_PLUGIN:BOOL=ON \
|
| |
-DgRPC_BUILD_GRPC_RUBY_PLUGIN:BOOL=ON \
|
| |
+ %if %{with system_gtest}
|
| |
+ -DgRPC_USE_EXTERNAL_GOOGLETEST:BOOL=ON \
|
| |
+ %endif
|
| |
-GNinja
|
| |
%cmake_build
|
| |
# ~~~~ Python ~~~~
|
| |
@@ -1000,6 +1029,15 @@
|
| |
-O1 --skip-build --root "${PYROOT}" --prefix %{_prefix}
|
| |
popd >/dev/null
|
| |
|
| |
+ # ~~ xds_protos ~~
|
| |
+ echo '===== Building Python xds_protos package =====' 2>&1
|
| |
+ pushd "tools/distrib/python/xds_protos" >/dev/null
|
| |
+ %py3_build
|
| |
+ %{__python3} %{py_setup} %{?py_setup_args} install \
|
| |
+ -O1 --skip-build --root "${PYROOT}" --prefix %{_prefix}
|
| |
+ popd >/dev/null
|
| |
+
|
| |
+
|
| |
echo '===== Building pure-Python packages =====' 1>&2
|
| |
for suffix in channelz health_checking reflection status testing tests
|
| |
do
|
| |
@@ -1159,6 +1197,9 @@
|
| |
# Seems to require privilege:
|
| |
flaky_network
|
| |
|
| |
+ # No idea why this one is failing, but it definitely is everywhere.
|
| |
+ no_logging
|
| |
+
|
| |
%ifarch s390x
|
| |
# Unexplained:
|
| |
#
|
| |
@@ -1345,6 +1386,82 @@
|
| |
alts_zero_copy_grpc_protector
|
| |
%endif
|
| |
|
| |
+ %ifarch s390x
|
| |
+ # https://github.com/grpc/grpc/issues/35350
|
| |
+ # Unexplained, except that this is clearly an endianness issue:
|
| |
+ #
|
| |
+ # [ RUN ] BufferListTest.TestLongPendingAckForSomeTracedBuffers
|
| |
+ # /builddir/build/BUILD/grpc-1.56.2/test/core/event_engine/posix/traced_buffer_list_test.cc:266: Failure
|
| |
+ # Expected equality of these values:
|
| |
+ # (__atomic_load_n((&verifier_called[i]), 2))
|
| |
+ # Which is: 4294967296
|
| |
+ # static_cast<gpr_atm>(1)
|
| |
+ # Which is: 1
|
| |
+ # [ FAILED ] BufferListTest.TestLongPendingAckForSomeTracedBuffers (0 ms)
|
| |
+ #
|
| |
+ # Confirmed in 1.56.2 2022-09-20
|
| |
+ buffer_list
|
| |
+ traced_buffer_list
|
| |
+ %endif
|
| |
+
|
| |
+ %ifarch x86_64
|
| |
+ # Unexplained, possibly flaky:
|
| |
+ #
|
| |
+ # [ OK ] CoreEnd2endTest.CancelAfterInvoke5/Chttp2FullstackLocalUds (103 ms)
|
| |
+ # [ RUN ] CoreEnd2endTest.CancelAfterInvoke5/Chttp2FullstackNoRetry
|
| |
+ # E0205 23:12:04.513997016 61661 cq_verifier.cc:362] Verify tag(1)-✅ for 10000ms
|
| |
+ # E0205 23:12:04.514440029 61661 cq_verifier.cc:362] Verify tag(-1)-🤷 for 10000ms
|
| |
+ # timeout: sending signal TERM to command ‘redhat-linux-build/cancel_after_invoke_test’
|
| |
+ # *** SIGTERM received at time=1707178067 on cpu 0 ***
|
| |
+ # PC: @ 0x7f8e78213623 (unknown) clock_nanosleep@@GLIBC_2.17
|
| |
+ # @ 0x7f8e77e307ee 80 (unknown)
|
| |
+ # @ 0x7f8e78172710 1897319136 (unknown)
|
| |
+ # @ 0x7f8e7821f3c7 16 nanosleep
|
| |
+ # @ 0x7f8e786021f4 144 AbslInternalSleepFor_lts_20240116
|
| |
+ # @ 0x56300e82c569 64 grpc_event_engine::experimental::WaitForSingleOwner()
|
| |
+ # @ 0x56300e829052 64 absl::lts_20240116::internal_any_invocable::LocalInvoker<>()
|
| |
+ # @ 0x56300e81a988 96 grpc_core::CoreEnd2endTest::TearDown()
|
| |
+ # @ 0x7f8e78ff8a8a 96 (unknown)
|
| |
+ # @ 0x7f8e78fe3735 128 testing::TestInfo::Run()
|
| |
+ # @ 0x7f8e78fe393f 96 testing::TestSuite::Run()
|
| |
+ # @ 0x7f8e78ff0170 208 testing::internal::UnitTestImpl::RunAllTests()
|
| |
+ # @ 0x7f8e78feed40 160 testing::UnitTest::Run()
|
| |
+ # @ 0x56300e7ed0dd 912 main
|
| |
+ # @ 0x7f8e7815c088 160 __libc_start_call_main
|
| |
+ # @ 0x7f8e7815c14b 96 __libc_start_main@GLIBC_2.2.5
|
| |
+ # @ 0x56300e7eeb05 (unknown) _start
|
| |
+ #
|
| |
+ # Confirmed in 1.60.0 2024-02-05 (seen on x86_64 only):
|
| |
+ cancel_after_invoke
|
| |
+ # Unexplained, possibly flaky:
|
| |
+ #
|
| |
+ # [ RUN ] CoreEnd2endTest.CancelWithStatus3/Chttp2SimplSslFullstackTls12
|
| |
+ # E0207 05:39:53.271444926 69303 cq_verifier.cc:362] Verify tag(1)-✅ for 10000ms
|
| |
+ # E0207 05:39:53.271645133 69303 cq_verifier.cc:362] Verify tag(-1)-🤷 for 10000ms
|
| |
+ # timeout: sending signal TERM to command ‘redhat-linux-build/cancel_with_status_test’
|
| |
+ # *** SIGTERM received at time=1707287989 on cpu 0 ***
|
| |
+ # PC: @ 0x7f4c5c0cd623 (unknown) clock_nanosleep@@GLIBC_2.17
|
| |
+ # @ 0x7f4c5bcea7ee 80 (unknown)
|
| |
+ # @ 0x7f4c5c02c710 (unknown) (unknown)
|
| |
+ # @ 0x7f4c5c0d93c7 16 nanosleep
|
| |
+ # @ 0x7f4c5c4bc1f4 144 AbslInternalSleepFor_lts_20240116
|
| |
+ # @ 0x55bb9eaaadb9 64 grpc_event_engine::experimental::WaitForSingleOwner()
|
| |
+ # @ 0x55bb9eaa9552 64 absl::lts_20240116::internal_any_invocable::LocalInvoker<>()
|
| |
+ # @ 0x55bb9ea9c6f8 96 grpc_core::CoreEnd2endTest::TearDown()
|
| |
+ # @ 0x7f4c5ceb2a8a 96 (unknown)
|
| |
+ # @ 0x7f4c5ce9d735 128 testing::TestInfo::Run()
|
| |
+ # @ 0x7f4c5ce9d93f 96 testing::TestSuite::Run()
|
| |
+ # @ 0x7f4c5ceaa170 208 testing::internal::UnitTestImpl::RunAllTests()
|
| |
+ # @ 0x7f4c5cea8d40 160 testing::UnitTest::Run()
|
| |
+ # @ 0x55bb9ea6f07d 912 main
|
| |
+ # @ 0x7f4c5c016088 160 __libc_start_call_main
|
| |
+ # @ 0x7f4c5c01614b 96 __libc_start_main@GLIBC_2.2.5
|
| |
+ # @ 0x55bb9ea70875 (unknown) _start
|
| |
+ #
|
| |
+ # Confirmed in 1.60.0 2024-02-06 (seen on x86_64 only):
|
| |
+ cancel_with_status
|
| |
+ %endif
|
| |
+
|
| |
# Unexplained, flaky:
|
| |
#
|
| |
# (hangs indefinitely, timeout triggered)
|
| |
@@ -1438,27 +1555,6 @@
|
| |
grpc_tool
|
| |
%endif
|
| |
|
| |
- %ifarch s390x
|
| |
- # Unexplained:
|
| |
- #
|
| |
- # *** SIGABRT received at time=1663181750 on cpu 2 ***
|
| |
- # PC: @ 0x3ffaec9cf2a (unknown) __pthread_kill_implementation
|
| |
- # @ 0x3ffaeb82560 (unknown) (unknown)
|
| |
- # @ 0x3ffaeb82802 (unknown) (unknown)
|
| |
- # @ 0x3ffaf37e490 (unknown) (unknown)
|
| |
- # @ 0x3ffaec9cf2a (unknown) __pthread_kill_implementation
|
| |
- # @ 0x3ffaec49d20 (unknown) gsignal
|
| |
- # @ 0x3ffaec2b364 (unknown) abort
|
| |
- # @ 0x2aa1be8145e (unknown) verification_test()
|
| |
- # @ 0x2aa1be811e8 (unknown) main
|
| |
- # @ 0x3ffaec2b618 (unknown) __libc_start_call_main
|
| |
- # @ 0x3ffaec2b700 (unknown) __libc_start_main@GLIBC_2.2
|
| |
- # @ 0x2aa1be81270 (unknown) (unknown)
|
| |
- #
|
| |
- # Confirmed in 1.48.1 2022-09-14
|
| |
- murmur_hash
|
| |
- %endif
|
| |
-
|
| |
%ifarch x86_64 aarch64
|
| |
# Unexplained:
|
| |
#
|
| |
@@ -1582,8 +1678,8 @@
|
| |
%endif
|
| |
|
| |
pushd src/python/grpcio_tests
|
| |
+ # disabled test_lite because it wants admin and csds and xds_protos, see Obsolete comment
|
| |
for suite in \
|
| |
- test_lite \
|
| |
%{?with_python_aio_tests:test_aio} \
|
| |
%{?with_python_gevent_tests:test_gevent} \
|
| |
test_py3_only
|
| |
@@ -1620,6 +1716,10 @@
|
| |
%{_libdir}/libgrpc.so.%{c_so_version}{,.*}
|
| |
%{_libdir}/libgrpc_unsecure.so.%{c_so_version}{,.*}
|
| |
%{_libdir}/libupb.so.%{c_so_version}{,.*}
|
| |
+ %{_libdir}/libupb_collections_lib.so.%{c_so_version}{,.*}
|
| |
+ %{_libdir}/libupb_json_lib.so.%{c_so_version}{,.*}
|
| |
+ %{_libdir}/libupb_textformat_lib.so.%{c_so_version}{,.*}
|
| |
+ %{_libdir}/libutf8_range_lib.so.%{c_so_version}{,.*}
|
| |
|
| |
|
| |
%files data
|
| |
@@ -1649,6 +1749,7 @@
|
| |
%{_libdir}/libgrpc++_error_details.so.%{cpp_so_version}{,.*}
|
| |
%{_libdir}/libgrpc++_reflection.so.%{cpp_so_version}{,.*}
|
| |
%{_libdir}/libgrpc++_unsecure.so.%{cpp_so_version}{,.*}
|
| |
+ %{_libdir}/libgrpc_authorization_provider.so.%{cpp_so_version}{,.*}
|
| |
%{_libdir}/libgrpc_plugin_support.so.%{cpp_so_version}{,.*}
|
| |
|
| |
%{_libdir}/libgrpcpp_channelz.so.%{cpp_so_version}{,.*}
|
| |
@@ -1674,8 +1775,14 @@
|
| |
%{_libdir}/libaddress_sorting.so
|
| |
%{_libdir}/libgpr.so
|
| |
%{_libdir}/libgrpc.so
|
| |
+ %{_libdir}/libgrpc_authorization_provider.so
|
| |
%{_libdir}/libgrpc_unsecure.so
|
| |
%{_libdir}/libupb.so
|
| |
+ %{_libdir}/libupb_collections_lib.so
|
| |
+ %{_libdir}/libupb_json_lib.so
|
| |
+ %{_libdir}/libupb_textformat_lib.so
|
| |
+ %{_libdir}/libutf8_range_lib.so
|
| |
+
|
| |
%{_includedir}/grpc/
|
| |
%{_libdir}/pkgconfig/gpr.pc
|
| |
%{_libdir}/pkgconfig/grpc.pc
|
| |
This updates grpc to 1.60.0. It is intended to be complimentary to my PR for protobuf to bring it current: https://src.fedoraproject.org/rpms/protobuf/pull-request/26
I included the fixes from the earlier PR to update grpc.
This builds against the current protobuf, and most packages should rebuild against this pairing without any changes (or very minor patches). I have a copr here (https://copr.fedorainfracloud.org/coprs/spot/cura/) which has these packages built against all current Fedora arches. ppc64le sometimes times out on the tests, but this is ephemeral, it will succeed on retry.
New grpc (and new protobuf) are necessary to update cura in Fedora.