ce88e01
# We need to use C++17 to link against the system abseil-cpp, or we get linker
ce88e01
# errors.
ce88e01
%global cpp_std 17
acc3813
acc3813
# However, gtest in Fedora uses the C++11 ABI, so we get linker errors building
acc3813
# the tests if we use C++17. We must therefore bundle a copy of gtest in the
acc3813
# source RPM rather than using the system copy. This is to be discouraged, but
acc3813
# there is no alternative in this case. It is not treated as a bundled library
acc3813
# because it is used only at build time, and is not installed.
acc3813
%global gtest_version 1.10.0
ce88e01
%bcond_with system_gtest
acc3813
ce88e01
# This must be enabled to get grpc_cli, which is apparently considered part of
ce88e01
# the tests by upstream. This is mentioned in
ce88e01
# https://github.com/grpc/grpc/issues/23432.
ce88e01
%bcond_without core_tests
34ecf95
426ac1e
# A few failing Python “test_lite” tests are skipped without understanding.
426ac1e
# This lets us easily re-enable them to try to work toward a fix or a useful
426ac1e
# upstream bug report.
426ac1e
%bcond_with unexplained_failing_python_lite_tests
426ac1e
426ac1e
# A great many of these tests (over 20%) fail. Any help in understanding these
426ac1e
# well enough to fix them or report them upstream is welcome.
426ac1e
%bcond_with python_aio_tests
426ac1e
426ac1e
# Several of these still fail. We should try to work toward re-enabling this.
426ac1e
%bcond_with python_gevent_tests
426ac1e
87469ef
Name:           grpc
ce88e01
Version:        1.37.1
fc9e7df
Release:        5%{?dist}
87469ef
Summary:        RPC library and framework
87469ef
7adc2b7
# CMakeLists.txt: gRPC_CORE_SOVERSION
ce88e01
%global c_so_version 15
7adc2b7
# CMakeLists.txt: gRPC_CPP_SOVERSION
9a14112
%global cpp_so_version 1.37
7adc2b7
# CMakeLists.txt: gRPC_CSHARP_SOVERSION
9a14112
%global csharp_so_version 2.37
9a14112
# See https://github.com/abseil/abseil-cpp/issues/950#issuecomment-843169602
9a14112
# regarding unusual SOVERSION style (not a single number).
7adc2b7
87469ef
# The entire source is ASL 2.0 except the following:
87469ef
#
87469ef
# BSD:
87469ef
#   - third_party/upb/, except third_party/upb/third_party/lunit/
87469ef
#     * Potentially linked into any compiled subpackage (but not -doc,
87469ef
#       pure-Python subpackages, etc.)
87469ef
#   - third_party/address_sorting/
87469ef
#     * Potentially linked into any compiled subpackage (but not -doc,
87469ef
#       pure-Python subpackages, etc.)
87469ef
#
87469ef
# as well as the following which do not contribute to the base License field or
87469ef
# any subpackage License field for the reasons noted:
87469ef
#
87469ef
# MPLv2.0:
87469ef
#   - etc/roots.pem
87469ef
#     * Truncated to an empty file in prep; a symlink to the shared system
87469ef
#       certificates is used instead
87469ef
#   - src/android/test/interop/app/src/main/assets/roots.pem
87469ef
#     * Truncated to an empty file in prep
87469ef
# ISC:
87469ef
#   - src/boringssl/crypto_test_data.cc and src/boringssl/err_data.c
87469ef
#     * Removed in prep; not used when building with system OpenSSL
87469ef
# BSD:
ce88e01
#   - src/objective-c/*.podspec and
ce88e01
#     templates/src/objective-c/*.podspec.template
87469ef
#     * Unused since the Objective-C bindings are not currently built
87469ef
# MIT:
87469ef
#   - third_party/cares/ares_build.h
87469ef
#     * Removed in prep; header from system C-Ares used instead
87469ef
#   - third_party/rake-compiler-dock/
87469ef
#     * Removed in prep, since we build no containers
87469ef
#   - third_party/upb/third_party/lunit/
87469ef
#     * Removed in prep, since there is no obvious way to run the upb tests
87469ef
License:        ASL 2.0 and BSD
87469ef
URL:            https://www.%{name}.io
87469ef
%global forgeurl https://github.com/%{name}/%{name}/
87469ef
Source0:        %{forgeurl}/archive/v%{version}/%{name}-%{version}.tar.gz
acc3813
# Used only at build time (not a bundled library); see notes at definition of
acc3813
# gtest_version macro for explanation and justification.
6abb104
%global gtest_url https://github.com/google/googletest
6abb104
%global gtest_archivename googletest-release-%{gtest_version}
6abb104
Source1:        https://github.com/google/googletest/archive/release-%{gtest_version}/%{gtest_archivename}.tar.gz
87469ef
ce88e01
# Downstream grpc_cli man pages; hand-written based on “grpc_cli help” output.
ce88e01
Source100:      %{name}_cli.1
ce88e01
Source101:      %{name}_cli-ls.1
ce88e01
Source102:      %{name}_cli-call.1
ce88e01
Source103:      %{name}_cli-type.1
ce88e01
Source104:      %{name}_cli-parse.1
ce88e01
Source105:      %{name}_cli-totext.1
ce88e01
Source106:      %{name}_cli-tojson.1
ce88e01
Source107:      %{name}_cli-tobinary.1
ce88e01
Source108:      %{name}_cli-help.1
ce88e01
87469ef
# ~~~~ C (core) and C++ (cpp) ~~~~
87469ef
87469ef
BuildRequires:  gcc-c++
34ecf95
BuildRequires:  cmake
34ecf95
BuildRequires:  ninja-build
ce88e01
%if %{with core_tests}
ce88e01
# Used on grpc_cli:
87469ef
BuildRequires:  chrpath
ce88e01
%endif
87469ef
5ab84a2
BuildRequires:  pkgconfig(zlib)
5ab84a2
BuildRequires:  cmake(gflags)
5ab84a2
BuildRequires:  pkgconfig(protobuf)
87469ef
BuildRequires:  protobuf-compiler
ce88e01
BuildRequires:  pkgconfig(re2)
5ab84a2
BuildRequires:  pkgconfig(openssl)
5ab84a2
BuildRequires:  cmake(c-ares)
ce88e01
BuildRequires:  abseil-cpp-devel
ce88e01
BuildRequires:  pkgconfig(libxxhash)
ec47db2
# Sets XXH_INCLUDE_ALL, which means xxhash is used as a header-only library
ec47db2
%if 0%{?fedora} > 34
ec47db2
# Uncomment if https://src.fedoraproject.org/rpms/xxhash/pull-request/1 is
ec47db2
# merged.
ec47db2
# BuildRequires:  xxhash-static
ec47db2
%endif
ce88e01
# Header-only C library, which we unbundle from the bundled copy of upb
ce88e01
BuildRequires:  wyhash_final1-devel
ce88e01
BuildRequires:  wyhash_final1-static
34ecf95
34ecf95
%if %{with core_tests}
5ab84a2
BuildRequires:  cmake(benchmark)
acc3813
%if %{with system_gtest}
5ab84a2
BuildRequires:  cmake(gtest)
5ab84a2
BuildRequires:  pkgconfig(gmock)
34ecf95
%endif
acc3813
%endif
87469ef
87469ef
# ~~~~ Python ~~~~
87469ef
87469ef
BuildRequires:  python3-devel
986bbc8
BuildRequires:  python3dist(setuptools)
986bbc8
986bbc8
# grpcio (setup.py) setup_requires (with
986bbc8
#     GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD):
986bbc8
BuildRequires:  python3dist(sphinx)
986bbc8
986bbc8
# grpcio (setup.py) setup_requires (with
986bbc8
#     GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD):
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
BuildRequires:  python3dist(six) >= 1.10
986bbc8
# grpcio (setup.py) install_requires also has:
986bbc8
#   six>=1.5.2
986bbc8
986bbc8
# grpcio (setup.py) setup_requires (with GRPC_PYTHON_BUILD_WITH_CYTHON, or
986bbc8
# absent generated sources); also needed for grpcio_tools
986bbc8
# (tools/distrib/python/grpcio_tools/setup.py)
87469ef
BuildRequires:  python3dist(cython)
986bbc8
986bbc8
# grpcio (setup.py) install_requires:
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
#   futures>=2.2.0; python_version<'3.2'
986bbc8
986bbc8
# grpcio (setup.py) install_requires:
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
#   enum34>=1.0.4; python_version<'3.4'
986bbc8
986bbc8
# grpcio_channelz (src/python/grpcio_channelz/setup.py) install_requires:
986bbc8
# grpcio_health_checking (src/python/grpcio_health_checking/setup.py)
986bbc8
#     install_requires:
986bbc8
# grpcio_reflection (src/python/grpcio_reflection/setup.py) install_requires:
986bbc8
# grpcio_status (src/python/grpcio_status/setup.py) install_requires:
986bbc8
# grpcio_testing (src/python/grpcio_testing/setup.py) install_requires:
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
BuildRequires:  python3dist(protobuf) >= 3.6.0
986bbc8
# grpcio_tools (tools/distrib/python/grpcio_tools/setup.py) install_requires
986bbc8
# also has:
986bbc8
#   protobuf>=3.5.0.post1
986bbc8
# which is written as
986bbc8
#   python3dist(protobuf) >= 3.5^post1
986bbc8
986bbc8
# grpcio_status (src/python/grpcio_status/setup.py) install_requires:
986bbc8
BuildRequires:  python3dist(googleapis-common-protos) >= 1.5.5
986bbc8
986bbc8
# Several packages have dependencies on grpcio or grpcio_tools—and grpcio-tests
986bbc8
# depends on all of the other Python packages—which are satisfied within this
986bbc8
# package.
986bbc8
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
BuildRequires:  python3dist(coverage) >= 4.0
986bbc8
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
BuildRequires:  python3dist(oauth2client) >= 1.4.7
986bbc8
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
BuildRequires:  python3dist(google-auth) >= 1.0.0
986bbc8
986bbc8
# grpcio_tests (src/python/grpcio_tests/setup.py) install_requires:
986bbc8
BuildRequires:  python3dist(requests) >= 2.4.12
986bbc8
934e38f
# Required for “test_gevent” tests:
934e38f
BuildRequires:  python3dist(gevent)
87469ef
ce88e01
# For stopping the port server
ce88e01
BuildRequires:  curl
ce88e01
87469ef
# ~~~~ Miscellaneous ~~~~
87469ef
87469ef
# https://bugzilla.redhat.com/show_bug.cgi?id=1893533
87469ef
%global _lto_cflags %{nil}
87469ef
119766d
# Reference documentation
119766d
BuildRequires:  doxygen
119766d
87469ef
BuildRequires:  ca-certificates
87469ef
# For converting absolute symlinks in the buildroot to relative ones
87469ef
BuildRequires:  symlinks
87469ef
87469ef
BuildRequires:  dos2unix
87469ef
2229437
# Apply Fedora system crypto policies. Since this is Fedora-specific, the patch
2229437
# is not suitable for upstream.
87469ef
# https://docs.fedoraproject.org/en-US/packaging-guidelines/CryptoPolicies/#_cc_applications
87469ef
Patch0:         %{name}-0001-enforce-system-crypto-policies.patch
87469ef
# Build python3-grpcio_tools against system protobuf packages instead of
87469ef
# expecting a git submodule. Must also add requisite linker flags using
87469ef
# GRPC_PYTHON_LDFLAGS.
ce88e01
Patch1:         %{name}-1.37.0-python-grpcio_tools-use-system-protobuf.patch
ce88e01
# Add an option GRPC_PYTHON_BUILD_SYSTEM_ABSL to go with the gRPC_ABSL_PROVIDER
ce88e01
# option already provided upstream. See
ce88e01
# https://github.com/grpc/grpc/issues/25559.
ce88e01
Patch2:         %{name}-1.37.0-python-grpcio-use-system-abseil.patch
53fe707
# Fix errors like:
53fe707
#   TypeError: super(type, obj): obj must be an instance or subtype of type
53fe707
# It is not clear why these occur.
ce88e01
Patch3:         %{name}-1.36.4-python-grpcio_tests-fixture-super.patch
53fe707
# Skip tests requiring non-loopback network access when the
53fe707
# FEDORA_NO_NETWORK_TESTS environment variable is set.
ce88e01
Patch4:         %{name}-1.36.4-python-grpcio_tests-make-network-tests-skippable.patch
53fe707
# A handful of compression tests miss the compression ratio threshold. It seems
53fe707
# to be inconsistent which particular combinations fail in a particular test
53fe707
# run. It is not clear that this is a real problem. Any help in understanding
53fe707
# the actual cause well enough to fix this or usefully report it upstream is
53fe707
# welcome.
ce88e01
Patch5:         %{name}-1.36.4-python-grpcio_tests-skip-compression-tests.patch
ce88e01
# The upstream requirement to link gtest/gmock from grpc_cli is spurious.
ce88e01
# Remove it. We still have to build the core tests and link a test library
ce88e01
# (libgrpc++_test_config.so…)
ce88e01
Patch6:         %{name}-1.37.0-grpc_cli-do-not-link-gtest-gmock.patch
ce88e01
# In Python 3.10, “import importlib” does not implicitly import importlib.abc.
ce88e01
# See https://github.com/grpc/grpc/issues/26062.
ec47db2
Patch7:         %{name}-1.37.0-importlib-abc-python3.10.patch
87469ef
87469ef
Requires:       %{name}-data = %{version}-%{release}
87469ef
87469ef
# Upstream https://github.com/protocolbuffers/upb does not support building
87469ef
# with anything other than Bazel, and Bazel is not likely to make it into
87469ef
# Fedora anytime soon due to its nightmarish collection of dependencies.
87469ef
# Monitor this at https://bugzilla.redhat.com/show_bug.cgi?id=1470842.
ce88e01
# Therefore upb cannot be packaged for Fedora, and we must use the bundled
ce88e01
# copy.
87469ef
#
87469ef
# Note that upstream has never chosen a version, and it is not clear from which
87469ef
# commit the bundled copy was taken or forked.
87469ef
#
87469ef
# Note also that libupb is installed in the system-wide linker path, which will
87469ef
# be a problem if upb is ever packaged separately. We will cross that bridge if
87469ef
# we get there.
87469ef
Provides:       bundled(upb)
87469ef
87469ef
# Regarding third_party/address_sorting: this looks a bit like a bundled
87469ef
# library, but it is not. From a source file comment:
87469ef
#   This is an adaptation of Android's implementation of RFC 6724 (in Android’s
87469ef
#   getaddrinfo.c). It has some cosmetic differences from Android’s
87469ef
#   getaddrinfo.c, but Android’s getaddrinfo.c was used as a guide or example
87469ef
#   of a way to implement the RFC 6724 spec when this was written.
b3bb2c6
bf7e9a8
%description
bf7e9a8
gRPC is a modern open source high performance RPC framework that can run in any
bf7e9a8
environment. It can efficiently connect services in and across data centers
bf7e9a8
with pluggable support for load balancing, tracing, health checking and
bf7e9a8
authentication. It is also applicable in last mile of distributed computing to
bf7e9a8
connect devices, mobile applications and browsers to backend services.
bf7e9a8
bf7e9a8
The main usage scenarios:
bf7e9a8
ce88e01
  • Efficiently connecting polyglot services in microservices style
ce88e01
    architecture
56e498c
  • Connecting mobile devices, browser clients to backend services
56e498c
  • Generating efficient client libraries
bf7e9a8
bf7e9a8
Core Features that make it awesome:
bf7e9a8
56e498c
  • Idiomatic client libraries in 10 languages
56e498c
  • Highly efficient on wire and with a simple service definition framework
56e498c
  • Bi-directional streaming with http/2 based transport
56e498c
  • Pluggable auth, tracing, load balancing and health checking
87469ef
87469ef
This package provides the shared C core library.
87469ef
87469ef
87469ef
%package data
87469ef
Summary:        Data for gRPC bindings
87469ef
License:        ASL 2.0
87469ef
BuildArch:      noarch
87469ef
87469ef
Requires:       ca-certificates
87469ef
87469ef
%description data
87469ef
Common data for gRPC bindings: currently, this contains only a symbolic link to
87469ef
the system shared TLS certificates.
87469ef
87469ef
87469ef
%package doc
87469ef
Summary:        Documentation and examples for gRPC
87469ef
License:        ASL 2.0
87469ef
BuildArch:      noarch
87469ef
119766d
Obsoletes:      python-grpcio-doc < 1.26.0-13
119766d
Provides:       python-grpcio-doc = %{version}-%{release}
119766d
Provides:       python-grpcio-channelz-doc = %{version}-%{release}
119766d
Provides:       python-grpcio-health-checking-doc = %{version}-%{release}
119766d
Provides:       python-grpcio-reflection-doc = %{version}-%{release}
119766d
Provides:       python-grpcio-status-doc = %{version}-%{release}
119766d
Provides:       python-grpcio-testing-doc = %{version}-%{release}
119766d
87469ef
%description doc
119766d
Documentation and examples for gRPC, including documentation for the following:
119766d
119766d
  • C (core)
119766d
    ○ API
119766d
    ○ Internals
119766d
  • C++
119766d
    ○ API
119766d
    ○ Internals
119766d
  • Objective C
119766d
    ○ API
119766d
    ○ Internals
119766d
  • Python
119766d
    ○ grpcio
119766d
    ○ grpcio_channelz
119766d
    ○ grpcio_health_checking
119766d
    ○ grpcio_reflection
119766d
    ○ grpcio_status
119766d
    ○ grpcio_testing
87469ef
87469ef
87469ef
%package cpp
87469ef
Summary:        C++ language bindings for gRPC
87469ef
# License:        same as base package
87469ef
Requires:       %{name}%{?_isa} = %{version}-%{release}
87469ef
87469ef
%description cpp
87469ef
C++ language bindings for gRPC.
bf7e9a8
bf7e9a8
bf7e9a8
%package plugins
87469ef
Summary:        Protocol buffers compiler plugins for gRPC
87469ef
# License:        same as base package
87469ef
Requires:       %{name}%{?_isa} = %{version}-%{release}
87469ef
Requires:       protobuf-compiler
bf7e9a8
bf7e9a8
%description plugins
bf7e9a8
Plugins to the protocol buffers compiler to generate gRPC sources.
bf7e9a8
87469ef
bf7e9a8
%package cli
87469ef
Summary:        Command-line tool for gRPC
87469ef
# License:        same as base package
87469ef
Requires:       %{name}%{?_isa} = %{version}-%{release}
bf7e9a8
bf7e9a8
%description cli
87469ef
The command line tool can do the following things:
87469ef
56e498c
  • Send unary rpc.
56e498c
  • Attach metadata and display received metadata.
56e498c
  • Handle common authentication to server.
56e498c
  • Infer request/response types from server reflection result.
56e498c
  • Find the request/response types from a given proto file.
56e498c
  • Read proto request in text form.
56e498c
  • Read request in wire form (for protobuf messages, this means serialized
87469ef
    binary form).
56e498c
  • Display proto response in text form.
56e498c
  • Write response in wire form to a file.
87469ef
bf7e9a8
bf7e9a8
%package devel
87469ef
Summary:        Development files for gRPC library
87469ef
# License:        same as base package
87469ef
Requires:       %{name}%{?_isa} = %{version}-%{release}
87469ef
Requires:       %{name}-cpp%{?_isa} = %{version}-%{release}
ce88e01
41172ba
Requires:       cmake-filesystem
bf7e9a8
ce88e01
# grpc/impl/codegen/port_platform.h includes linux/version.h
ce88e01
Requires:       kernel-headers%{?_isa}
ce88e01
# grpcpp/impl/codegen/config_protobuf.h includes google/protobuf/…
ce88e01
Requires:       pkgconfig(protobuf)
ce88e01
# grpcpp/test/mock_stream.h includes gmock/gmock.h
ce88e01
Requires:       pkgconfig(gmock)
ce88e01
# grpcpp/impl/codegen/sync.h includes absl/synchronization/mutex.h
ce88e01
# grpc.pc has -labsl_[…]
ce88e01
Requires:       abseil-cpp-devel%{?_isa}
ce88e01
# grpc.pc has -lre2
ce88e01
Requires:       pkgconfig(re2)
ce88e01
# grpc.pc has -lcares
ce88e01
Requires:       cmake(c-ares)
ce88e01
# grpc.pc has -lz
ce88e01
Requires:       pkgconfig(zlib)
ce88e01
bf7e9a8
%description devel
87469ef
Development headers and files for gRPC libraries (both C and C++).
87469ef
bf7e9a8
637ef64
%package -n python3-grpcio
87469ef
Summary:        Python language bindings for gRPC
87469ef
# License:        same as base package
87469ef
87469ef
# Note that the Python package has no runtime dependency on the base C library;
87469ef
# everything it needs is bundled.
87469ef
Requires:       %{name}-data = %{version}-%{release}
637ef64
637ef64
%description -n python3-grpcio
87469ef
Python language bindings for gRPC (HTTP/2-based RPC framework).
87469ef
87469ef
87469ef
%package -n python3-grpcio-tools
87469ef
Summary:       Package for gRPC Python tools
87469ef
# License:        same as base package
87469ef
87469ef
%description -n python3-grpcio-tools
87469ef
Package for gRPC Python tools.
87469ef
87469ef
87469ef
%package -n python3-grpcio-channelz
87469ef
Summary:        Channel Level Live Debug Information Service for gRPC
87469ef
License:        ASL 2.0
87469ef
BuildArch:      noarch
87469ef
87469ef
%description -n python3-grpcio-channelz
87469ef
Channelz is a live debug tool in gRPC Python.
87469ef
87469ef
87469ef
%package -n python3-grpcio-health-checking
87469ef
Summary:        Standard Health Checking Service for gRPC
87469ef
License:        ASL 2.0
87469ef
BuildArch:      noarch
87469ef
87469ef
%description -n python3-grpcio-health-checking
87469ef
Reference package for GRPC Python health checking.
87469ef
87469ef
87469ef
%package -n python3-grpcio-reflection
87469ef
Summary:        Standard Protobuf Reflection Service for gRPC
87469ef
License:        ASL 2.0
87469ef
BuildArch:      noarch
87469ef
87469ef
%description -n python3-grpcio-reflection
87469ef
Reference package for reflection in GRPC Python.
87469ef
87469ef
87469ef
%package -n python3-grpcio-status
87469ef
Summary:        Status proto mapping for gRPC
87469ef
License:        ASL 2.0
87469ef
BuildArch:      noarch
87469ef
87469ef
%description -n python3-grpcio-status
87469ef
Reference package for GRPC Python status proto mapping.
87469ef
87469ef
87469ef
%package -n python3-grpcio-testing
87469ef
Summary:        Testing utilities for gRPC Python
87469ef
License:        ASL 2.0
87469ef
BuildArch:      noarch
87469ef
87469ef
%description -n python3-grpcio-testing
87469ef
Testing utilities for gRPC Python.
87469ef
87469ef
bf7e9a8
%prep
87469ef
%autosetup -p1
87469ef
acc3813
%if %{without system_gtest}
acc3813
# Copy in the needed gtest/gmock implementations.
acc3813
%setup -q -T -D -b 1
acc3813
rm -rvf 'third_party/googletest'
6abb104
mv '../%{gtest_archivename}' 'third_party/googletest'
acc3813
%else
acc3813
# Patch CMakeLists for external gtest/gmock.
acc3813
#
acc3813
#  1. Create dummy sources, adding a typedef so the translation unit is not
acc3813
#     empty, rather than removing references to these sources from
acc3813
#     CMakeLists.txt. This is so that we do not end up with executables with no
acc3813
#     sources, only libraries, which is a CMake error.
acc3813
#  2. Either remove references to the corresponding include directories, or
acc3813
#     create the directories and leave them empty.
acc3813
#  3. “Stuff” the external library into the target_link_libraries() for each
acc3813
#     test by noting that GMock/GTest/GFlags are always used together.
acc3813
for gwhat in test mock
acc3813
do
acc3813
  mkdir -p "third_party/googletest/google${gwhat}/src" \
acc3813
      "third_party/googletest/google${gwhat}/include"
acc3813
  echo "typedef int dummy_${gwhat}_type;" \
acc3813
      > "third_party/googletest/google${gwhat}/src/g${gwhat}-all.cc"
acc3813
done
acc3813
sed -r -i 's/^([[:blank:]]*)(\$\{_gRPC_GFLAGS_LIBRARIES\})/'\
acc3813
'\1\2\n\1gtest\n\1gmock/' CMakeLists.txt
acc3813
%endif
acc3813
ce88e01
# Remove bundled wyhash (via upb); to avoid patching the build system, simply
ce88e01
# use a symlink to find the system copy. This is sufficient since it is a
ce88e01
# header-only library.
ce88e01
rm -rvf third_party/upb/third_party/wyhash
ce88e01
ln -s %{_includedir}/wyhash_final1/ third_party/upb/third_party/wyhash
ce88e01
ce88e01
# Remove bundled xxhash
ce88e01
rm -rvf third_party/xxhash
ec47db2
# Since grpc sets XXH_INCLUDE_ALL wherever it uses xxhash, it is using xxhash
ec47db2
# as a header-only library. This means we can replace it with the system copy
ec47db2
# by doing nothing further; xxhash.h is in the system include path and will be
ec47db2
# found instead, and there are no linker flags to add. See also
ec47db2
# https://github.com/grpc/grpc/issues/25945.
9af26a9
87469ef
# Fix some of the weirdest accidentally-executable files
87469ef
find . -type f -name '*.md' -perm /0111 -execdir chmod -v a-x '{}' '+'
87469ef
87469ef
# Allow building Python documentation with a newer Sphinx; the upstream version
87469ef
# requirement is needlessly strict. (It is fine for upstream’s own purposes, as
87469ef
# they are happy to build documentation with a pinned old version.)
87469ef
sed -r -i "s/('Sphinx)~=.*'/\1'/" setup.py
87469ef
87469ef
# Remove unused sources that have licenses not in the License field, to ensure
87469ef
# they are not accidentally used in the build. See the comment above the base
87469ef
# package License field for more details.
87469ef
rm -rfv \
87469ef
    src/boringssl/*.c src/boringssl/*.cc \
87469ef
    third_party/cares/ares_build.h \
87469ef
    third_party/rake-compiler-dock \
87469ef
    third_party/upb/third_party/lunit
87469ef
# Since we are replacing roots.pem with a symlink to the shared system
87469ef
# certificates, we do not include its license (MPLv2.0) in any License field.
87469ef
# We remove its contents so that, if we make a packaging mistake, we will have
87469ef
# a bug but not an incorrect License field.
87469ef
echo '' > etc/roots.pem
87469ef
87469ef
# Remove Android sources and examples. We do not need these on Linux, and they
87469ef
# have some issues that will be flagged when reviewing the package, such as:
87469ef
#   - Another copy of the MPLv2.0-licensed certificate bundle from
87469ef
#     etc/roots.pem, in src/android/test/interop/app/src/main/assets/roots.pem
87469ef
#   - Pre-built jar files at
87469ef
#     src/android/test/interop/gradle/wrapper/gradle-wrapper.jar and
87469ef
#     examples/android/helloworld/gradle/wrapper/gradle-wrapper.jar
87469ef
rm -rvf examples/android src/android
87469ef
87469ef
# Remove unwanted .gitignore files, generally in examples. One could argue that
87469ef
# a sample .gitignore file is part of the example, but, well, we’re not going
87469ef
# to do that.
87469ef
find . -type f -name .gitignore -print -delete
87469ef
87469ef
# Find executables with /usr/bin/env shebangs in the examples, and fix them.
87469ef
find examples -type f -perm /0111 |
87469ef
  while read -r fn
87469ef
  do
87469ef
    if head -n 1 "${fn}" | grep -E '^#!/usr/bin/env[[:blank:]]'
87469ef
    then
87469ef
      sed -r -i '1{s|^(#!/usr/bin/)env[[:blank:]]+([^[:blank:]]+)|\1\2|}' \
87469ef
          "${fn}"
87469ef
    fi
87469ef
  done
87469ef
87469ef
# Fix some CRNL line endings:
87469ef
dos2unix \
87469ef
    examples/cpp/helloworld/CMakeLists.txt \
87469ef
    examples/cpp/helloworld/cmake_externalproject/CMakeLists.txt
87469ef
# We leave those under examples/csharp alone.
87469ef
ce88e01
# We need to adjust the C++ standard to avoid abseil-related linker errors. For
ce88e01
# the main C++ build, we can use CMAKE_CXX_STANDARD. For extensions, examples,
ce88e01
# etc., we must patch.
ce88e01
sed -r -i 's/(std=c\+\+)11/\1%{cpp_std}/g' \
ce88e01
    setup.py %{name}.gyp Rakefile \
ce88e01
    examples/cpp/*/Makefile \
ce88e01
    examples/cpp/*/CMakeLists.txt \
ce88e01
    tools/run_tests/artifacts/artifact_targets.py \
ce88e01
    tools/distrib/python/grpcio_tools/setup.py
ce88e01
78adfdc
# Fix the install path for .pc files
78adfdc
# https://github.com/grpc/grpc/issues/25635
78adfdc
sed -r -i 's|lib(/pkgconfig)|\${gRPC_INSTALL_LIBDIR}\1|' CMakeLists.txt
78adfdc
426ac1e
%if %{without unexplained_failing_python_lite_tests}
ce88e01
# TODO figure out how to report this upstream in a useful/actionable way
ce88e01
sed -r -i "s/^([[:blank:]]*)(def \
ce88e01
test_immediately_connectable_channel_connectivity)\\b/\
ce88e01
\\1@unittest.skip('May hang unexplainedly')\\n\\1\\2/" \
ce88e01
    'src/python/grpcio_tests/tests/unit/_channel_connectivity_test.py'
ce88e01
ce88e01
%ifarch %{ix86} %{arm32}
426ac1e
# TODO figure out how to report this upstream in a useful/actionable way
426ac1e
sed -r -i "s/^([[:blank:]]*)(def test_concurrent_stream_stream)\\b/\
426ac1e
\\1@unittest.skip('May hang unexplainedly')\\n\\1\\2/" \
426ac1e
    'src/python/grpcio_tests/tests/testing/_client_test.py'
ce88e01
426ac1e
# These tests fail with:
426ac1e
#   OverflowError: Python int too large to convert to C ssize_t
426ac1e
# TODO figure out how to report this upstream in a useful/actionable way
426ac1e
sed -r -i \
426ac1e
    "s/^([[:blank:]]*)(def test(SSLSessionCacheLRU|SessionResumption))\\b/\
426ac1e
\\1@unittest.skip('Unexplained overflow error on 32-bit')\\n\\1\\2/" \
426ac1e
    'src/python/grpcio_tests/tests/unit/_auth_context_test.py' \
426ac1e
    'src/python/grpcio_tests/tests/unit/_session_cache_test.py'
426ac1e
%endif
426ac1e
ce88e01
%ifarch s390x
ce88e01
# Unexplained segmentation fault
ce88e01
# TODO figure out how to report this upstream in a useful/actionable way
ce88e01
sed -r -i "s/^([[:blank:]]*)(def test_start_xds_server)\\b/\
ce88e01
\\1@unittest.skip('Unexplained segmentation fault')\\n\\1\\2/" \
ce88e01
    'src/python/grpcio_tests/tests/unit/_xds_credentials_test.py'
426ac1e
%endif
ce88e01
fc9e7df
%if 0%{?fedora} > 34 || 0%{?rhel} > 8
ce88e01
# Python 3.10 failures:
ce88e01
ce88e01
# AssertionError: 'StatusCode.NOT_FOUND' not found in '<_InactiveRpcError of
ce88e01
# RPC that terminated with:\n\tstatus = NOT_FOUND\n\tdetails = "Failed to get
ce88e01
# the channel, please ensure your channel_id==10000 is
ce88e01
# valid"\n\tdebug_error_string =
ce88e01
# "{"created":"@1619130545.513500675","description":"Error received from peer
ce88e01
# ipv6:[::1]:35867","file":"src/core/lib/surface/call.cc","file_line":1067,"grpc_message":"Failed
ce88e01
# to get the channel, please ensure your channel_id==10000 is
ce88e01
# valid","grpc_status":5}"\n>'
ce88e01
#
ce88e01
# AttributeError: 'NoneType' object has no attribute 'IsInitialized'
ce88e01
sed -r -i "s/^([[:blank:]]*)(def test_invalid_query_get_\
ce88e01
(channel|server(_sockets)?|socket|subchannel))\\b/\
ce88e01
\\1@unittest.skip('Unexplained failure')\\n\\1\\2/" \
ce88e01
    'src/python/grpcio_tests/tests/channelz/_channelz_servicer_test.py'
ce88e01
%endif
ce88e01
426ac1e
%endif
426ac1e
bf7e9a8
bf7e9a8
%build
87469ef
# ~~~~ C (core) and C++ (cpp) ~~~~
87469ef
34ecf95
# We could use either make or ninja as the backend; ninja is faster and has no
34ecf95
# disadvantages (except a small additional BR, given we already need Python)
ce88e01
#
ce88e01
# We need to adjust the C++ standard to avoid abseil-related linker errors.
34ecf95
%cmake \
e1dddac
    -DgRPC_INSTALL:BOOL=ON \
ce88e01
    -DCMAKE_CXX_STANDARD:STRING=%{cpp_std} \
ce88e01
    -DCMAKE_SKIP_INSTALL_RPATH:BOOL=ON \
e1dddac
    -DgRPC_INSTALL_BINDIR:PATH=%{_bindir} \
e1dddac
    -DgRPC_INSTALL_LIBDIR:PATH=%{_libdir} \
e1dddac
    -DgRPC_INSTALL_INCLUDEDIR:PATH=%{_includedir} \
e1dddac
    -DgRPC_INSTALL_CMAKEDIR:PATH=%{_libdir}/cmake/%{name} \
e1dddac
    -DgRPC_INSTALL_SHAREDIR:PATH=%{_datadir}/%{name} \
34ecf95
    -DgRPC_BUILD_TESTS:BOOL=%{?with_core_tests:ON}%{?!with_core_tests:OFF} \
34ecf95
    -DgRPC_BUILD_CODEGEN:BOOL=ON \
e1dddac
    -DgRPC_BUILD_CSHARP_EXT:BOOL=ON \
34ecf95
    -DgRPC_BACKWARDS_COMPATIBILITY_MODE:BOOL=OFF \
34ecf95
    -DgRPC_ZLIB_PROVIDER:STRING='package' \
34ecf95
    -DgRPC_CARES_PROVIDER:STRING='package' \
ce88e01
    -DgRPC_RE2_PROVIDER:STRING='package' \
34ecf95
    -DgRPC_SSL_PROVIDER:STRING='package' \
34ecf95
    -DgRPC_PROTOBUF_PROVIDER:STRING='package' \
34ecf95
    -DgRPC_PROTOBUF_PACKAGE_TYPE:STRING='MODULE' \
34ecf95
    -DgRPC_BENCHMARK_PROVIDER:STRING='package' \
ce88e01
    -DgRPC_ABSL_PROVIDER:STRING='package' \
e1dddac
    -DgRPC_USE_PROTO_LITE:BOOL=OFF \
e1dddac
    -DgRPC_BUILD_GRPC_CPP_PLUGIN:BOOL=ON \
e1dddac
    -DgRPC_BUILD_GRPC_CSHARP_PLUGIN:BOOL=ON \
e1dddac
    -DgRPC_BUILD_GRPC_NODE_PLUGIN:BOOL=ON \
e1dddac
    -DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN:BOOL=ON \
e1dddac
    -DgRPC_BUILD_GRPC_PHP_PLUGIN:BOOL=ON \
e1dddac
    -DgRPC_BUILD_GRPC_PYTHON_PLUGIN:BOOL=ON \
e1dddac
    -DgRPC_BUILD_GRPC_RUBY_PLUGIN:BOOL=ON \
e1dddac
    -GNinja
34ecf95
%cmake_build
bf7e9a8
87469ef
# ~~~~ Python ~~~~
87469ef
87469ef
# Since we will need all of the Python packages for the documentation build,
87469ef
# and there are some other interdependencies (e.g., many have setup_requires:
87469ef
# grpcio-tools), we do a temporary install of the built packages into a local
87469ef
# directory, and add it to the PYTHONPATH.
87469ef
PYROOT="${PWD}/%{_vpath_builddir}/pyroot"
87469ef
if [ -n "${PYTHONPATH-}" ]; then PYTHONPATH="${PYTHONPATH}:"; fi
87469ef
PYTHONPATH="${PYTHONPATH-}${PYROOT}%{python3_sitelib}"
87469ef
PYTHONPATH="${PYTHONPATH}:${PYROOT}%{python3_sitearch}"
87469ef
export PYTHONPATH
87469ef
87469ef
# ~~ grpcio ~~
ce88e01
# Note that we had to patch in the GRPC_PYTHON_BUILD_SYSTEM_ABSL option.
ce88e01
export GRPC_PYTHON_BUILD_WITH_CYTHON='True'
ce88e01
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL='True'
ce88e01
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB='True'
ce88e01
export GRPC_PYTHON_BUILD_SYSTEM_CARES='True'
ce88e01
export GRPC_PYTHON_BUILD_SYSTEM_RE2='True'
ce88e01
export GRPC_PYTHON_BUILD_SYSTEM_ABSL='True'
ce88e01
export GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY='True'
ce88e01
export GRPC_PYTHON_ENABLE_DOCUMENTATION_BUILD='True'
7796406
# We must set GRPC_PYTHON_CFLAGS to avoid unwanted defaults. We take the
7796406
# upstream flags except that we remove -std=c99, which is inapplicable to the
7796406
# C++ parts of the extension.
7796406
#
7796406
# We must set GRPC_PYTHON_LDFLAGS to avoid unwanted defaults. The upstream
7796406
# flags attempt to statically link libgcc, so we do not need any of them. Since
7796406
# we forcibly unbundle protobuf, we need to add linker flags for protobuf
7796406
# ourselves.
7796406
export GRPC_PYTHON_CFLAGS="-fvisibility=hidden -fno-wrapv -fno-exceptions $(
7796406
  pkg-config --cflags protobuf
7796406
)"
7796406
export GRPC_PYTHON_LDFLAGS="$(pkg-config --libs protobuf)"
87469ef
%py3_build
87469ef
%{__python3} %{py_setup} %{?py_setup_args} install \
87469ef
    -O1 --skip-build --root "${PYROOT}"
87469ef
87469ef
# ~~ grpcio-tools ~~
87469ef
pushd "tools/distrib/python/grpcio_tools/" >/dev/null
87469ef
# When copying more things in here, make sure the subpackage License field
87469ef
# stays correct. We need copies, not symlinks, so that the “graft” in
87469ef
# MANIFEST.in works.
87469ef
mkdir -p %{name}_root/src
87469ef
for srcdir in compiler
87469ef
do
87469ef
  cp -rp "../../../../src/${srcdir}" "%{name}_root/src/"
87469ef
done
87469ef
cp -rp '../../../../include' '%{name}_root/'
7796406
# We must set GRPC_PYTHON_CFLAGS and GRPC_PYTHON_LDFLAGS again; grpcio_tools
7796406
# does not have the same default upstream flags as grpcio does, and it needs to
7796406
# link the protobuf compiler library.
7796406
export GRPC_PYTHON_CFLAGS="-fno-wrapv -frtti $(pkg-config --cflags protobuf)"
7796406
export GRPC_PYTHON_LDFLAGS="$(pkg-config --libs protobuf) -lprotoc"
7796406
%py3_build
87469ef
# Remove unwanted shebang from grpc_tools.protoc source file, which will be
87469ef
# installed without an executable bit:
87469ef
find . -type f -name protoc.py -execdir sed -r -i '1{/^#!/d}' '{}' '+'
87469ef
%{__python3} %{py_setup} %{?py_setup_args} install \
87469ef
    -O1 --skip-build --root "${PYROOT}"
87469ef
popd >/dev/null
87469ef
87469ef
# ~~ pure-python modules grpcio-* ~~
7796406
for suffix in channelz health_checking reflection status testing tests
87469ef
do
87469ef
  echo "----> grpcio_${suffix} <----" 1>&2
87469ef
  pushd "src/python/grpcio_${suffix}/" >/dev/null
7796406
  %{__python3} %{py_setup} %{?py_setup_args} preprocess
7796406
  if [ "${suffix}" != 'testing' ]
7796406
  then
7796406
    %{__python3} %{py_setup} %{?py_setup_args} build_package_protos
7796406
  fi
87469ef
  %py3_build
87469ef
  %{__python3} %{py_setup} %{?py_setup_args} install \
87469ef
      -O1 --skip-build --root "${PYROOT}"
87469ef
  popd >/dev/null
87469ef
done
87469ef
87469ef
# ~~ documentation ~~
119766d
# Doxygen (reference: C/core, C++, objc)
119766d
./tools/doxygen/run_doxygen.sh
119766d
# Sphinx (Python)
87469ef
%{__python3} %{py_setup} %{?py_setup_args} doc
119766d
rm -vrf doc/build/.buildinfo doc/build/.doctrees
87469ef
637ef64
bf7e9a8
%install
87469ef
# ~~~~ C (core) and C++ (cpp) ~~~~
34ecf95
%cmake_install
ce88e01
ce88e01
%if %{with core_tests}
dc22a8a
# For some reason, grpc_cli is not installed. Do it manually.
dc22a8a
install -t '%{buildroot}%{_bindir}' -p -D '%{_vpath_builddir}/%{name}_cli'
dc22a8a
# grpc_cli build does not respect CMAKE_INSTALL_RPATH
dc22a8a
# https://github.com/grpc/grpc/issues/25176
dc22a8a
chrpath --delete '%{buildroot}%{_bindir}/%{name}_cli'
ce88e01
ce88e01
# This library is also required for grpc_cli; it is built as part of the test
ce88e01
# code.
ce88e01
install -t '%{buildroot}%{_libdir}' -p \
ce88e01
    %{_vpath_builddir}/lib%{name}++_test_config.so.*
ce88e01
chrpath --delete '%{buildroot}%{_libdir}/'lib%{name}++_test_config.so.*
ce88e01
ce88e01
install -d '%{buildroot}/%{_mandir}/man1'
ce88e01
install -t '%{buildroot}/%{_mandir}/man1' -p -m 0644 \
ce88e01
    %{SOURCE100} %{SOURCE101} %{SOURCE102} %{SOURCE103} %{SOURCE104} \
ce88e01
    %{SOURCE106} %{SOURCE107} %{SOURCE108}
34ecf95
%endif
ce88e01
87469ef
# Remove any static libraries that may have been installed against our wishes
87469ef
find %{buildroot} -type f -name '*.a' -print -delete
87469ef
# Fix wrong permissions on installed headers
87469ef
find %{buildroot}%{_includedir}/%{name}* -type f -name '*.h' -perm /0111 \
87469ef
    -execdir chmod -v a-x '{}' '+'
87469ef
87469ef
# ~~~~ Python ~~~~
87469ef
87469ef
# Since several packages have an install_requires: grpcio-tools, we must ensure
87469ef
# the buildroot Python site-packages directories are in the PYTHONPATH.
87469ef
pushd '%{buildroot}'
87469ef
PYROOT="${PWD}"
87469ef
popd
87469ef
if [ -n "${PYTHONPATH-}" ]; then PYTHONPATH="${PYTHONPATH}:"; fi
87469ef
PYTHONPATH="${PYTHONPATH-}${PYROOT}%{python3_sitelib}"
87469ef
PYTHONPATH="${PYTHONPATH}:${PYROOT}%{python3_sitearch}"
87469ef
export PYTHONPATH
87469ef
87469ef
# ~~ grpcio ~~
87469ef
%py3_install
87469ef
87469ef
# ~~ grpcio-tools ~~
87469ef
pushd "tools/distrib/python/grpcio_tools/" >/dev/null
637ef64
%py3_install
87469ef
popd >/dev/null
87469ef
87469ef
# ~~ pure-python modules grpcio-* ~~
87469ef
for suffix in channelz health_checking reflection status testing
87469ef
do
87469ef
  pushd "src/python/grpcio_${suffix}/" >/dev/null
87469ef
  %py3_install
87469ef
  popd >/dev/null
87469ef
done
91ffc30
# The grpcio_tests package should not be installed; it would provide top-level
91ffc30
# packages with generic names like “tests” or “tests_aio”.
87469ef
87469ef
# ~~~~ Miscellaneous ~~~~
87469ef
87469ef
# Replace copies of the certificate bundle with symlinks to the shared system
87469ef
# certificates. This has the following benefits:
87469ef
#   - Reduces duplication and save space
87469ef
#   - Respects system-wide administrative trust configuration
87469ef
#   - Keeps “MPLv2.0” from having to be added to a number of License fields
87469ef
%global sysbundle %{_sysconfdir}/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
87469ef
# We do not own this file; we temporarily install it in the buildroot so we do
87469ef
# not have dangling symlinks.
87469ef
install -D -t "%{buildroot}$(dirname '%{sysbundle}')" -m 0644 '%{sysbundle}'
87469ef
87469ef
find '%{buildroot}' -type f -name 'roots.pem' |
87469ef
  while read -r fn
87469ef
  do
87469ef
    ln -s -f "%{buildroot}%{sysbundle}" "${fn}"
87469ef
    symlinks -c -o "${fn}"
87469ef
  done
87469ef
13d2166
rm -rvf "%{buildroot}$(dirname '%{sysbundle}')"
13d2166
87469ef
# ~~ documentation and examples ~~
87469ef
87469ef
install -D -t '%{buildroot}%{_pkgdocdir}' -m 0644 -p AUTHORS *.md
119766d
cp -rp doc/ref examples '%{buildroot}%{_pkgdocdir}'
119766d
install -d '%{buildroot}%{_pkgdocdir}/python'
119766d
cp -rp doc/build '%{buildroot}%{_pkgdocdir}/python/html'
87469ef
87469ef
87469ef
%check
53fe707
export FEDORA_NO_NETWORK_TESTS=1
53fe707
ce88e01
%if %{with core_tests}
ce88e01
PORT_SERVER_PORT="$(awk '
ce88e01
  /_PORT_SERVER_PORT[[:blank:]]*=[[:blank:]]*[[:digit:]]+$/ { print $NF }
ce88e01
' tools/run_tests/python_utils/start_port_server.py)"
ce88e01
ee2d9c9
# Note that no tests are actually found by ctest:
34ecf95
%ctest
ee2d9c9
ce88e01
# Exclude tests that are known to hang or otherwise fail. Assistance welcome in
ce88e01
# figuring out what is wrong with these.  Note, however, that we are running
ce88e01
# the tests very differently from upstream, which uses scripts in
ce88e01
# tools/run_tests/ that rebuild the entire source and use Docker, so it is
ce88e01
# likely to be difficult to get help from upstream for any failures here. Note
ce88e01
# that some of these tests would never work in an environment without Internet
ce88e01
# access.
ee2d9c9
(
ee2d9c9
  cat <<'EOF'
ce88e01
# Requires (or may require) network:
ce88e01
resolve_address_using_ares_resolver
ce88e01
resolve_address_using_ares_resolver_posix
ce88e01
resolve_address_using_native_resolver
ce88e01
resolve_address_using_native_resolver_posix
ce88e01
ssl_transport_security
ce88e01
ce88e01
# Seems to require privilege:
ce88e01
flaky_network
ce88e01
ce88e01
# Bad assumption about which directory the tests are running in:
ce88e01
#
ce88e01
# E0413 22:43:56.610039235   19861 subprocess_posix.cc:61]
ce88e01
#   execv 'x86_64-redhat-linux-gnu/../../test/core/http/python_wrapper.sh'
ce88e01
#   failed: No such file or directory
ce88e01
# E0413 22:44:02.613251909   19856 httpscli_test.cc:55]
ce88e01
#   assertion failed: response->status == 200
ce88e01
httpcli
ce88e01
httpscli
ce88e01
ce88e01
# Error shutting down fd, then falsely claims the port server is not running.
ce88e01
#
ce88e01
# [ RUN      ] ServerBuilderTest.CreateServerOnePort
ce88e01
# E0413 22:52:26.853421021   28920 ev_epollex_linux.cc:516]
ce88e01
#   Error shutting down fd 7. errno: 9
ce88e01
# E0413 22:52:30.082373319   28920 ev_epollex_linux.cc:516]
ce88e01
#   Error shutting down fd 7. errno: 9
ce88e01
# E0413 22:52:33.168560214   28923 ev_epollex_linux.cc:516]
ce88e01
#   Error shutting down fd 7. errno: 9
ce88e01
# E0413 22:52:36.905371168   28920 ev_epollex_linux.cc:516]
ce88e01
#   Error shutting down fd 7. errno: 9
ce88e01
# E0413 22:52:40.455413890   28923 ev_epollex_linux.cc:516]
ce88e01
#   Error shutting down fd 7. errno: 9
ce88e01
# E0413 22:52:44.012408974   28922 ev_epollex_linux.cc:516]
ce88e01
#   Error shutting down fd 7. errno: 9
ce88e01
# gRPC tests require a helper port server to allocate ports used
ce88e01
# during the test.
ce88e01
#
ce88e01
# This server is not currently running.
ce88e01
#
ce88e01
# To start it, run tools/run_tests/start_port_server.py
ce88e01
admin_services_end2end
ee2d9c9
alts_concurrent_connectivity
ce88e01
async_end2end
ee2d9c9
channelz_service
ee2d9c9
cli_call
ee2d9c9
client_callback_end2end
ee2d9c9
client_channel_stress
ee2d9c9
client_interceptors_end2end
ee2d9c9
client_lb_end2end
ce88e01
context_allocator_end2end
ee2d9c9
delegating_channel
ee2d9c9
end2end
ee2d9c9
filter_end2end
ee2d9c9
generic_end2end
ee2d9c9
grpc_tool
ce88e01
grpclb_end2end
ee2d9c9
health_service_end2end
ee2d9c9
hybrid_end2end
ee2d9c9
mock
ee2d9c9
nonblocking
ee2d9c9
proto_server_reflection
ee2d9c9
raw_end2end
ee2d9c9
server_builder
ce88e01
server_builder_plugin
ee2d9c9
service_config_end2end
ee2d9c9
shutdown
ee2d9c9
streaming_throughput
ee2d9c9
thread_stress
ee2d9c9
xds_end2end
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] EvaluateArgsMetadataTest.HandlesNullMetadata
ce88e01
# *** SIGSEGV received at time=1618368497 ***
ce88e01
# PC: @     0x7fc56bfc1d3a  (unknown)  __strlen_sse2
ce88e01
#     @ ... and at least 1 more frames
ce88e01
evaluate_args
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] ExamineStackTest.AbseilStackProvider
ce88e01
# ../test/core/gprpp/examine_stack_test.cc:75: Failure
ce88e01
# Value of: stack_trace->find("GetCurrentStackTrace") != std::string::npos
ce88e01
#   Actual: false
ce88e01
# Expected: true
ce88e01
examine_stack
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] StackTracerTest.Basic
ce88e01
# ../test/core/util/stack_tracer_test.cc:35: Failure
ce88e01
# Value of: absl::StrContains(stack_trace, "Basic")
ce88e01
#   Actual: false
ce88e01
# Expected: true
ce88e01
# [  FAILED  ] StackTracerTest.Basic (3 ms)
ce88e01
stack_tracer
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# E0413 22:47:06.188890509   22233 oauth2_credentials.cc:157]
ce88e01
#   Call to http server ended with error 401
ce88e01
#   [{"access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_", "expires_in":3599,
ce88e01
#   "token_type":"Bearer"}].
ce88e01
# *** SIGSEGV received at time=1618368426 ***
ce88e01
test_core_security_credentials
ce88e01
ce88e01
%ifarch s390x
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] AddressSortingTest.TestSorterKnowsIpv6LoopbackIsAvailable
ce88e01
# ../test/cpp/naming/address_sorting_test.cc:807: Failure
ce88e01
# Expected equality of these values:
ce88e01
#   source_addr_output->sin6_family
ce88e01
#     Which is: 0
ce88e01
#   10
ce88e01
# ../test/cpp/naming/address_sorting_test.cc:817: Failure
ce88e01
# Expected equality of these values:
ce88e01
#   source_addr_str
ce88e01
#     Which is: "::"
ce88e01
#   "::1"
ce88e01
# [  FAILED  ] AddressSortingTest.TestSorterKnowsIpv6LoopbackIsAvailable (0 ms)
ce88e01
address_sorting
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# Status is not ok: Setting authenticated associated data failed
ce88e01
# E0422 21:34:46.864696339 3920578 aes_gcm_test.cc:77]         assertion
ce88e01
#   failed: status == GRPC_STATUS_OK
ce88e01
# *** SIGABRT received at time=1619127286 ***
ce88e01
# PC: @      0x3ff83748e0c  (unknown)  raise
ce88e01
#     @      0x3ff836014c4  (unknown)  (unknown)
ce88e01
#     @      0x3ff8360168a  (unknown)  (unknown)
ce88e01
#     @      0x3ff84264b78  (unknown)  (unknown)
ce88e01
#     @      0x3ff83748e0c  (unknown)  raise
ce88e01
#     @      0x3ff8372bae8  (unknown)  abort
ce88e01
#     @      0x2aa3ed83a38  (unknown)  gsec_assert_ok()
ce88e01
#     @      0x2aa3ed83b70  (unknown)  gsec_test_random_encrypt_decrypt()
ce88e01
#     @      0x2aa3ed8155e  (unknown)  main
ce88e01
#     @      0x3ff8372bdf4  (unknown)  __libc_start_main
ce88e01
#     @      0x2aa3ed82724  (unknown)  (unknown)
ce88e01
alts_crypt
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# (aborted without output)
ce88e01
alts_crypter
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# (aborted without output)
ce88e01
alts_frame_protector
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# E0502 15:06:40.951214061 1640707
ce88e01
# alts_grpc_integrity_only_record_protocol.cc:109] Failed to protect, Setting
ce88e01
#   authenticated associated data failed
ce88e01
# E0502 15:06:40.951411109 1640707 alts_grpc_record_protocol_test.cc:282]
ce88e01
#   assertion failed: status == TSI_OK
ce88e01
# *** SIGABRT received at time=1619968000 ***
ce88e01
# PC: @      0x3ff939c8e0c  (unknown)  raise
ce88e01
#     @      0x3ff938814c4  (unknown)  (unknown)
ce88e01
#     @      0x3ff9388168a  (unknown)  (unknown)
ce88e01
#     @      0x3ff944e4b78  (unknown)  (unknown)
ce88e01
#     @      0x3ff939c8e0c  (unknown)  raise
ce88e01
#     @      0x3ff939abae8  (unknown)  abort
ce88e01
#     @      0x2aa11482c9e  (unknown)  random_seal_unseal()
ce88e01
#     @      0x2aa11483558  (unknown)  alts_grpc_record_protocol_tests()
ce88e01
#     @      0x2aa11481b08  (unknown)  main
ce88e01
#     @      0x3ff939abdf4  (unknown)  __libc_start_main
ce88e01
#     @      0x2aa11481bc4  (unknown)  (unknown)
ce88e01
alts_grpc_record_protocol
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# E0505 21:08:10.125639702 2153925 alts_handshaker_client.cc:863]
ce88e01
#   client or client->vtable has not been initialized properly
ce88e01
# E0505 21:08:10.125794714 2153925 alts_handshaker_client.cc:579]
ce88e01
#   Invalid arguments to handshaker_client_start_server()
ce88e01
# E0505 21:08:10.125877215 2153925 alts_handshaker_client.cc:874]
ce88e01
#   client or client->vtable has not been initialized properly
ce88e01
# E0505 21:08:10.125948887 2153925 alts_handshaker_client.cc:615]
ce88e01
#   Invalid arguments to handshaker_client_next()
ce88e01
# E0505 21:08:10.126015062 2153925 alts_handshaker_client.cc:885]
ce88e01
#   client or client->vtable has not been initialized properly
ce88e01
# E0505 21:08:10.126146291 2153925 alts_handshaker_client_test.cc:177]
ce88e01
#   assertion failed:
ce88e01
#   grpc_gcp_StartClientHandshakeReq_handshake_security_protocol( client_start)
ce88e01
#   == grpc_gcp_ALTS
ce88e01
# *** SIGABRT received at time=1620248890 ***
ce88e01
# PC: @      0x3ff98ac8e0c  (unknown)  raise
ce88e01
#     @      0x3ff989814c4  (unknown)  (unknown)
ce88e01
#     @      0x3ff9898168a  (unknown)  (unknown)
ce88e01
#     @      0x3ff99664b78  (unknown)  (unknown)
ce88e01
#     @      0x3ff98ac8e0c  (unknown)  raise
ce88e01
#     @      0x3ff98aabae8  (unknown)  abort
ce88e01
#     @      0x2aa3760375e  (unknown)  check_client_start_success()
ce88e01
#     @      0x3ff99419a72  (unknown)  continue_make_grpc_call()
ce88e01
#     @      0x3ff9941ac58  (unknown)  handshaker_client_start_client()
ce88e01
#     @      0x2aa37603c66  (unknown)  schedule_request_success_test()
ce88e01
#     @      0x2aa3760281e  (unknown)  main
ce88e01
#     @      0x3ff98aabdf4  (unknown)  __libc_start_main
ce88e01
#     @      0x2aa376028b4  (unknown)  (unknown)
ce88e01
alts_handshaker_client
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# (aborted without output)
ce88e01
alts_iovec_record_protocol
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] AltsUtilTest.AuthContextWithGoodAltsContextWithoutRpcVersions
ce88e01
# ../test/cpp/common/alts_util_test.cc:122: Failure
ce88e01
# Expected equality of these values:
ce88e01
#   expected_sl
ce88e01
#     Which is: 1
ce88e01
#   alts_context->security_level()
ce88e01
#     Which is: 0
ce88e01
# [  FAILED  ] AltsUtilTest.AuthContextWithGoodAltsContextWithoutRpcVersions (0 ms)
ce88e01
# [ RUN      ] AltsUtilTest.AuthContextWithGoodAltsContext
ce88e01
# [       OK ] AltsUtilTest.AuthContextWithGoodAltsContext (0 ms)
ce88e01
# [ RUN      ] AltsUtilTest.AltsClientAuthzCheck
ce88e01
# [       OK ] AltsUtilTest.AltsClientAuthzCheck (0 ms)
ce88e01
# [----------] 7 tests from AltsUtilTest (0 ms total)
ce88e01
# [----------] Global test environment tear-down
ce88e01
# [==========] 7 tests from 1 test suite ran. (0 ms total)
ce88e01
# [  PASSED  ] 6 tests.
ce88e01
# [  FAILED  ] 1 test, listed below:
ce88e01
# [  FAILED  ] AltsUtilTest.AuthContextWithGoodAltsContextWithoutRpcVersions
ce88e01
#  1 FAILED TEST
ce88e01
# E0506 13:27:12.407095885 2895549 alts_util.cc:37]
ce88e01
#     auth_context is nullptr.
ce88e01
# E0506 13:27:12.407174329 2895549 alts_util.cc:43]
ce88e01
#     contains zero or more than one ALTS context.
ce88e01
# E0506 13:27:12.407191312 2895549 alts_util.cc:43]
ce88e01
#     contains zero or more than one ALTS context.
ce88e01
# E0506 13:27:12.407210713 2895549 alts_util.cc:50]
ce88e01
#     fails to parse ALTS context.
ce88e01
# E0506 13:27:12.407261763 2895549 alts_util.cc:43]
ce88e01
#     contains zero or more than one ALTS context.
ce88e01
alts_util
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# E0506 14:42:08.079363072 2916785
ce88e01
#     alts_grpc_integrity_only_record_protocol.cc:109] Failed to protect,
ce88e01
#     Setting authenticated associated data failed
ce88e01
# E0506 14:42:08.079807806 2916785 alts_zero_copy_grpc_protector_test.cc:183]
ce88e01
#     assertion failed: tsi_zero_copy_grpc_protector_protect( sender,
ce88e01
#     &var->original_sb, &var->protected_sb) == TSI_OK
ce88e01
# *** SIGABRT received at time=1620312128 ***
ce88e01
# PC: @      0x3ffae548e0c  (unknown)  raise
ce88e01
#     @      0x3ffae4014c4  (unknown)  (unknown)
ce88e01
#     @      0x3ffae40168a  (unknown)  (unknown)
ce88e01
#     @      0x3ffaf064b78  (unknown)  (unknown)
ce88e01
#     @      0x3ffae548e0c  (unknown)  raise
ce88e01
#     @      0x3ffae52bae8  (unknown)  abort
ce88e01
#     @      0x2aa11202728  (unknown)  seal_unseal_small_buffer()
ce88e01
#     @      0x2aa112028d8  (unknown)
ce88e01
#         alts_zero_copy_protector_seal_unseal_small_buffer_tests()
ce88e01
#     @      0x2aa112019d6  (unknown)  main
ce88e01
#     @      0x3ffae52bdf4  (unknown)  __libc_start_main
ce88e01
#     @      0x2aa11201a84  (unknown)  (unknown)
ce88e01
alts_zero_copy_grpc_protector
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# E0506 16:24:35.085362185 2328244 cq_verifier.cc:228]
ce88e01
#     no event received, but expected:tag(257) GRPC_OP_COMPLETE success=1
ce88e01
#     ../test/core/end2end/goaway_server_test.cc:264
ce88e01
# tag(769) GRPC_OP_COMPLETE success=1
ce88e01
#     ../test/core/end2end/goaway_server_test.cc:265
ce88e01
# *** SIGABRT received at time=1620318275 ***
ce88e01
# PC: @      0x3ffa05c8e0c  (unknown)  raise
ce88e01
#     @      0x3ffa04814c4  (unknown)  (unknown)
ce88e01
#     @      0x3ffa048168a  (unknown)  (unknown)
ce88e01
#     @      0x3ffa11e4b78  (unknown)  (unknown)
ce88e01
#     @      0x3ffa05c8e0c  (unknown)  raise
ce88e01
#     @      0x3ffa05abae8  (unknown)  abort
ce88e01
#     @      0x2aa1e984e96  (unknown)  cq_verify()
ce88e01
#     @      0x2aa1e9833ce  (unknown)  main
ce88e01
#     @      0x3ffa05abdf4  (unknown)  __libc_start_main
ce88e01
#     @      0x2aa1e983ac4  (unknown)  (unknown)
ce88e01
goaway_server
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# *** SIGABRT received at time=1620336694 ***
ce88e01
# PC: @      0x3ffa3348e0c  (unknown)  raise
ce88e01
#     @      0x3ffa32014c4  (unknown)  (unknown)
ce88e01
#     @      0x3ffa320168a  (unknown)  (unknown)
ce88e01
#     @      0x3ffa39e4b78  (unknown)  (unknown)
ce88e01
#     @      0x3ffa3348e0c  (unknown)  raise
ce88e01
#     @      0x3ffa332bae8  (unknown)  abort
ce88e01
#     @      0x2aa27600c8e  (unknown)  verification_test()
ce88e01
#     @      0x2aa27600a24  (unknown)  main
ce88e01
#     @      0x3ffa332bdf4  (unknown)  __libc_start_main
ce88e01
#     @      0x2aa27600aa4  (unknown)  (unknown)
ce88e01
murmur_hash
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# E0416 16:03:14.051081049   67245 tcp_posix_test.cc:387]
ce88e01
#     assertion failed: error == GRPC_ERROR_NONE
ce88e01
# *** SIGABRT received at time=1618588994 ***
ce88e01
# PC: @       0x4001f5be0c  (unknown)  raise
ce88e01
#     @       0x40020bf4c4  (unknown)  (unknown)
ce88e01
#     @       0x40020bf68a  (unknown)  (unknown)
ce88e01
#     @       0x4002624df0  (unknown)  (unknown)
ce88e01
#     @       0x4001f5be0c  (unknown)  raise
ce88e01
#     @       0x4001f3eae8  (unknown)  abort
ce88e01
#     @       0x4000003f60  (unknown)  timestamps_verifier()
ce88e01
#     @       0x4001ac36d8  (unknown)  grpc_core::TracedBuffer::Shutdown()
ce88e01
#     @       0x4001ae53ea  (unknown)  tcp_shutdown_buffer_list()
ce88e01
#     @       0x4001ae774a  (unknown)  tcp_flush()
ce88e01
#     @       0x4001ae99f2  (unknown)  tcp_write()
ce88e01
#     @       0x4000005806  (unknown)  write_test()
ce88e01
#     @       0x400000622e  (unknown)  run_tests()
ce88e01
#     @       0x40000028c8  (unknown)  main
ce88e01
#     @       0x4001f3edf4  (unknown)  __libc_start_main
ce88e01
#     @       0x40000029f4  (unknown)  (unknown)
ce88e01
tcp_posix
ce88e01
%endif
ce88e01
ce88e01
%ifarch %{ix86}
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] ChannelTracerTest.TestMultipleEviction
ce88e01
# ../test/core/channel/channel_trace_test.cc:65: Failure
ce88e01
# Expected equality of these values:
ce88e01
#   array.array_value().size()
ce88e01
#     Which is: 3
ce88e01
#   expected
ce88e01
#     Which is: 4
ce88e01
# [  FAILED  ] ChannelTracerTest.TestMultipleEviction (2 ms)
ce88e01
channel_trace
ce88e01
%endif
ce88e01
ce88e01
%ifarch %{ix86} %{arm32}
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] CertificateProviderStoreTest.Multithreaded
ce88e01
# terminate called without an active exception
ce88e01
# *** SIGABRT received at time=1619103150 ***
ce88e01
# PC: @ 0xf7fa3559  (unknown)  __kernel_vsyscall
ce88e01
#     @ ... and at least 1 more frames
ce88e01
certificate_provider_store
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] GrpcTlsCertificateDistributorTest.SetKeyMaterialsInCallback
ce88e01
# terminate called without an active exception
ce88e01
# *** SIGABRT received at time=1619125567 ***
ce88e01
# PC: @ 0xb682c114  (unknown)  raise
ce88e01
#     @ 0xb67e817c  (unknown)  (unknown)
ce88e01
#     @ 0xb682d6b0  (unknown)  (unknown)
ce88e01
#     @ 0xb682c114  (unknown)  raise
ce88e01
grpc_tls_certificate_distributor
ce88e01
ce88e01
# Unexplained:
ce88e01
#
ce88e01
# [ RUN      ] GetCpuStatsTest.BusyNoLargerThanTotal
ce88e01
# ../test/cpp/server/load_reporter/get_cpu_stats_test.cc:39: Failure
ce88e01
# Expected: (busy) <= (total), actual: 9025859384538762329 vs
ce88e01
#     3751280126112716351
ce88e01
# [  FAILED  ] GetCpuStatsTest.BusyNoLargerThanTotal (0 ms)
ce88e01
lb_get_cpu_stats
ce88e01
%endif
ce88e01
ee2d9c9
EOF
ce88e01
) |
ce88e01
  grep -E -v '^(#|$)' |
ce88e01
  sed -r 's|^(.*)$|%{_vpath_builddir}/\1_test|' |
ce88e01
  xargs -r chmod -v a-x
ee2d9c9
ce88e01
find %{_vpath_builddir} -type f -perm /0111 -name '*_test' | sort |
ee2d9c9
  while read -r testexe
ee2d9c9
  do
ee2d9c9
    echo "==== $(date -u --iso-8601=ns): $(basename "${testexe}") ===="
ce88e01
    %{__python3} tools/run_tests/start_port_server.py
ee2d9c9
    # We have tried to skip all tests that hang, but since this is a common
ee2d9c9
    # problem, we use timeout so that a test that does hang breaks the build in
ee2d9c9
    # a reasonable amount of time.
ee2d9c9
    timeout -k 11m -v 10m "${testexe}"
ee2d9c9
  done
ce88e01
ce88e01
# Stop the port server
ce88e01
curl "http://localhost:${PORT_SERVER_PORT}/quitquitquit" || :
34ecf95
%endif
87469ef
87469ef
pushd src/python/grpcio_tests
426ac1e
for suite in \
426ac1e
    test_lite \
426ac1e
    %{?with_python_aio_tests:test_aio} \
ce88e01
    %{?with_python_gevent_tests:test_gevent} \
ce88e01
    test_py3_only
426ac1e
do
426ac1e
  # See the implementation of the %%pytest macro, upon which our environment
426ac1e
  # setup is based:
426ac1e
  env CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" \
426ac1e
      LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" \
426ac1e
      PATH="%{buildroot}%{_bindir}:$PATH" \
426ac1e
      PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}" \
426ac1e
      PYTHONDONTWRITEBYTECODE=1 \
426ac1e
      %{__python3} %{py_setup} %{?py_setup_args} "${suite}"
426ac1e
done
87469ef
popd
bf7e9a8
acc3813
%if %{without system_gtest}
acc3813
# As a sanity check for our claim that gtest/gmock are not bundled, check
acc3813
# installed executables for symbols that appear to have come from gtest/gmock.
acc3813
foundgtest=0
acc3813
if find %{buildroot} -type f -perm /0111 \
acc3813
      -execdir objdump --syms --dynamic-syms --demangle '{}' '+' 2>/dev/null |
acc3813
    grep -E '[^:]testing::'
acc3813
then
acc3813
  echo 'Found traces of gtest/gmock' 1>&2
acc3813
  exit 1
acc3813
fi
acc3813
%endif
acc3813
bf7e9a8
bf7e9a8
%files
87469ef
%license LICENSE NOTICE.txt
87469ef
%{_libdir}/libaddress_sorting.so.%{c_so_version}*
87469ef
%{_libdir}/libgpr.so.%{c_so_version}*
87469ef
%{_libdir}/lib%{name}.so.%{c_so_version}*
87469ef
%{_libdir}/lib%{name}_unsecure.so.%{c_so_version}*
87469ef
%{_libdir}/libupb.so.%{c_so_version}*
87469ef
87469ef
87469ef
%files data
87469ef
%license LICENSE NOTICE.txt
87469ef
%dir %{_datadir}/%{name}
87469ef
%{_datadir}/%{name}/roots.pem
87469ef
87469ef
87469ef
%files doc
87469ef
%license LICENSE NOTICE.txt
87469ef
%{_pkgdocdir}
87469ef
87469ef
87469ef
%files cpp
87469ef
%{_libdir}/lib%{name}++.so.%{cpp_so_version}*
ce88e01
%{_libdir}/lib%{name}++_alts.so.%{cpp_so_version}*
87469ef
%{_libdir}/lib%{name}++_error_details.so.%{cpp_so_version}*
87469ef
%{_libdir}/lib%{name}++_reflection.so.%{cpp_so_version}*
87469ef
%{_libdir}/lib%{name}++_unsecure.so.%{cpp_so_version}*
ce88e01
%{_libdir}/lib%{name}_plugin_support.so.%{cpp_so_version}*
9ce49f9
87469ef
%{_libdir}/lib%{name}pp_channelz.so.%{cpp_so_version}*
87469ef
bf7e9a8
ce88e01
%if %{with core_tests}
bf7e9a8
%files cli
87469ef
%{_bindir}/%{name}_cli
ce88e01
%{_libdir}/lib%{name}++_test_config.so.%{cpp_so_version}*
ce88e01
%{_mandir}/man1/%{name}_cli.1*
ce88e01
%{_mandir}/man1/%{name}_cli-*.1*
ce88e01
%endif
87469ef
bf7e9a8
bf7e9a8
%files plugins
ce88e01
# These are for program use and do not offer a CLI for the end user, so they
ce88e01
# should really be in %%{_libexecdir}; however, too many downstream users
ce88e01
# expect them in $PATH to change this for the time being.
87469ef
%{_bindir}/%{name}_*_plugin
87469ef
bf7e9a8
bf7e9a8
%files devel
3b94ecf
%{_libdir}/libaddress_sorting.so
3b94ecf
%{_libdir}/libgpr.so
87469ef
%{_libdir}/lib%{name}.so
87469ef
%{_libdir}/lib%{name}_unsecure.so
3b94ecf
%{_libdir}/libupb.so
87469ef
%{_includedir}/%{name}
87469ef
%{_libdir}/pkgconfig/gpr.pc
87469ef
%{_libdir}/pkgconfig/%{name}.pc
87469ef
%{_libdir}/pkgconfig/%{name}_unsecure.pc
ce88e01
%{_libdir}/cmake/%{name}
87469ef
87469ef
%{_libdir}/lib%{name}++.so
ce88e01
%{_libdir}/lib%{name}++_alts.so
87469ef
%{_libdir}/lib%{name}++_error_details.so
87469ef
%{_libdir}/lib%{name}++_reflection.so
87469ef
%{_libdir}/lib%{name}++_unsecure.so
ce88e01
%{_libdir}/lib%{name}_plugin_support.so
87469ef
%{_includedir}/%{name}++
87469ef
%{_libdir}/pkgconfig/%{name}++.pc
87469ef
%{_libdir}/pkgconfig/%{name}++_unsecure.pc
87469ef
87469ef
%{_libdir}/lib%{name}pp_channelz.so
87469ef
%{_includedir}/%{name}pp
87469ef
bf7e9a8
637ef64
%files -n python3-grpcio
87469ef
%license LICENSE NOTICE.txt
637ef64
%{python3_sitearch}/grpc
aa731c9
%{python3_sitearch}/grpcio-%{version}-py%{python3_version}.egg-info
637ef64
87469ef
87469ef
%files -n python3-grpcio-tools
87469ef
%{python3_sitearch}/grpc_tools
87469ef
%{python3_sitearch}/grpcio_tools-%{version}-py%{python3_version}.egg-info
87469ef
87469ef
87469ef
%files -n python3-grpcio-channelz
87469ef
%{python3_sitelib}/grpc_channelz
87469ef
%{python3_sitelib}/grpcio_channelz-%{version}-py%{python3_version}.egg-info
87469ef
87469ef
87469ef
%files -n python3-grpcio-health-checking
87469ef
%{python3_sitelib}/grpc_health
87469ef
%{python3_sitelib}/grpcio_health_checking-%{version}-py%{python3_version}.egg-info
87469ef
87469ef
87469ef
%files -n python3-grpcio-reflection
87469ef
%{python3_sitelib}/grpc_reflection
87469ef
%{python3_sitelib}/grpcio_reflection-%{version}-py%{python3_version}.egg-info
87469ef
87469ef
87469ef
%files -n python3-grpcio-status
87469ef
%{python3_sitelib}/grpc_status
87469ef
%{python3_sitelib}/grpcio_status-%{version}-py%{python3_version}.egg-info
87469ef
87469ef
87469ef
%files -n python3-grpcio-testing
87469ef
%{python3_sitelib}/grpc_testing
87469ef
%{python3_sitelib}/grpcio_testing-%{version}-py%{python3_version}.egg-info
87469ef
87469ef
bf7e9a8
%changelog
fc9e7df
* Thu Jun 10 2021 Stephen Gallagher <sgallagh@redhat.com> - 1.37.1-5
fc9e7df
- Fix builds against Python 3.10 on ELN/RHEL as well
fc9e7df
ec47db2
* Thu Jun 10 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.37.1-4
ec47db2
- Since it turns out xxhash is used as a header-only library, we can stop
ec47db2
  patching the source to unbundle it; removing the bundled copy suffices
ec47db2
f37e5cf
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 1.37.1-3
f37e5cf
- Rebuilt for Python 3.10
f37e5cf
9a14112
* Fri May 21 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.37.1-2
9a14112
- Use full gRPC_{CPP,CSHARP}_SOVERSION in file globs
9a14112
ce88e01
* Tue May 11 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.37.1-1
ce88e01
- General:
ce88e01
  * New version 1.37.1
ce88e01
  * Drop patches that were upstreamed since the last packaged release, were
ce88e01
    backported from upstream in the first place, or have otherwise been
ce88e01
    obsoleted by upstream changes.
ce88e01
  * Rebase/update remaining patches as needed
ce88e01
  * Drop Fedora 32 compatibility
ce88e01
  * Add man pages for grpc_cli
ce88e01
- C (core) and C++ (cpp):
ce88e01
  * Switch to CMake build system
ce88e01
  * Build with C++17 for compatibility with the abseil-cpp package in Fedora
ce88e01
  * Add various Requires to -devel subpackage
ce88e01
13d2166
* Tue Apr 06 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.26.0-15
13d2166
- General:
13d2166
  * Do not use %%exclude for unpackaged files (RPM 4.17 compatibility)
986bbc8
- Python:
986bbc8
  * Stop using %%pyproject_buildrequires, since it is difficult to fit the
986bbc8
    pyproject-rpm-macros build and install macros into this package, and Miro
986bbc8
    Hrončok has advised that “mixing %%pyproject_buildrequires with
986bbc8
    %%py3_build/%%py3_install is generally not a supported way of building
986bbc8
    Python packages.”
986bbc8
6abb104
* Thu Mar 25 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.26.0-14
6abb104
- General:
6abb104
  * Improved googletest source URL (better tarball name)
6abb104
ee2d9c9
* Tue Mar 23 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.26.0-13
56e498c
- General:
56e498c
  * Replace * with • in descriptions
5ab84a2
  * Use cmake() dependencies first, and pkgconfig() dependencies second, where
5ab84a2
    available
9255a1a
  * Drop explicit pkgconfig BR
78adfdc
  * Fix the directory in which CMake installs pkgconfig files
e1dddac
  * Improved CMake options
119766d
  * Build the Doxygen reference manuals
41172ba
- C (core) and C++ (cpp):
41172ba
  * Let the -devel package require cmake-filesystem
acc3813
  * Allow building tests with our own copy of gtest/gmock, which will become
acc3813
    mandatory when we depend on abseil-cpp and switch to C++17
53fe707
  * Fix a link error in the core tests when using CMake
dc22a8a
  * Manually install grpc_cli (CMake)
3ac80ec
  * Add CMake files to the files list for the -devel package
ee2d9c9
  * Start running some of the core tests in %%check
53fe707
- Python:
53fe707
  * Add several patches required for the tests
934e38f
  * BR gevent for gevent_tests
7796406
  * Fix build; in particular, add missing preprocess and build_package_protos
7796406
    steps, without which the packages were missing generated proto modules and
7796406
    were not
7796406
    usable!
5c54e16
  * Add %%py_provides for Fedora 32
59c4bca
  * Drop python3dist(setuptools) BR, redundant with %%pyproject_buildrequires
119766d
  * Start running most of the Python tests in %%check
119766d
  * Merge the python-grpcio-doc subpackage into grpc-doc
56e498c
34ecf95
* Tue Feb 16 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.26.0-12
34ecf95
- C (core) and C++ (cpp):
34ecf95
  * Add CMake build support but do not enable it yet; there is still a problem
34ecf95
    where grpc_cli is only built with the tests, and a linking problem when
34ecf95
    building the tests
34ecf95
34ecf95
* Tue Feb 02 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.26.0-11
87469ef
- General:
87469ef
  * Update summaries and descriptions
87469ef
  * Update License fields to include licenses from bundled components
87469ef
  * Fix failure to respect Fedora build flags
87469ef
  * Use the system shared certificate bundle instead of shipping our own
87469ef
- CLI:
87469ef
  * No longer set rpath $ORIGIN
87469ef
- C (core) and C++ (cpp):
87469ef
  * Add c_so_version/cpp_so_version macros
87469ef
  * Split out C++ bindings and shared data into subpackages
87469ef
  * Drop obsolete ldconfig_scriptlets macro
87469ef
  * Stop stripping debugging symbols
87469ef
- Python:
87469ef
  * Use generated BR’s
87469ef
  * Build and package Python binding documentation
87469ef
  * Disable accommodations for older libc’s
87469ef
  * Patch out -std=gnu99 flag, which is inappropriate for C++
87469ef
  * Build additional Python packages grpcio_tools, gprcio_channelz,
87469ef
    grpcio_health_checking, grpcio_reflection, grpcio_status, and
87469ef
    grpcio_testing
87469ef
00c46bd
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.26.0-10
00c46bd
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
00c46bd
42cea2c
* Thu Jan 14 08:46:34 CET 2021 Adrian Reber <adrian@lisas.de> - 1.26.0-9
42cea2c
- Rebuilt for protobuf 3.14
42cea2c
06f39c9
* Fri Nov 13 2020 Artem Polishchuk <ego.cordatus@gmail.com> - 1.26.0-8
06f39c9
- build: disable LTO due to rh#1893533
06f39c9
9310245
* Thu Sep 24 2020 Adrian Reber <adrian@lisas.de> - 1.26.0-7
9310245
- Rebuilt for protobuf 3.13
9310245
7c4d8c0
* Mon Aug 03 2020 Gwyn Ciesla <gwync@protonmail.com> - 1.26.0-6
7c4d8c0
- Patches for https://github.com/grpc/grpc/pull/21669
7c4d8c0
fd56af7
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.26.0-5
fd56af7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
fd56af7
ef05f06
* Sun Jun 14 2020 Adrian Reber <adrian@lisas.de> - 1.26.0-4
ef05f06
- Rebuilt for protobuf 3.12
ef05f06
ae84ab8
* Tue May 26 2020 Miro Hrončok <mhroncok@redhat.com> - 1.26.0-3
ae84ab8
- Rebuilt for Python 3.9
ae84ab8
324b1af
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.26.0-2
324b1af
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
324b1af
3b94ecf
* Wed Jan 15 2020 Sergey Avseyev <sergey.avseyev@gmail.com> - 1.26.0-1
3b94ecf
- Update to 1.26.0
3b94ecf
f302d3b
* Thu Dec 19 2019 Orion Poplawski <orion@nwra.com> - 1.20.1-5
f302d3b
- Rebuild for protobuf 3.11
f302d3b
4d76576
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 1.20.1-4
4d76576
- Rebuilt for Python 3.8.0rc1 (#1748018)
4d76576
751c424
* Mon Aug 19 2019 Miro Hrončok <mhroncok@redhat.com> - 1.20.1-3
751c424
- Rebuilt for Python 3.8
751c424
081b763
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.20.1-2
081b763
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
081b763
1f1b01a
* Fri May 17 2019 Sergey Avseyev <sergey.avseyev@gmail.com> - 1.20.1-1
1f1b01a
- Update to 1.20.1
1f1b01a
eabd20e
* Fri Feb 01 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.18.0-2
eabd20e
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
eabd20e
4d8a3c0
* Wed Jan 16 2019 Sergey Avseyev <sergey.avseyev@gmail.com> - 1.18.0-1
4d8a3c0
- Update to 1.18.0
4d8a3c0
c9c00b2
* Mon Dec 17 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.17.1-3
c9c00b2
- Properly store patch in SRPM
c9c00b2
fe04497
* Mon Dec 17 2018 Sergey Avseyev <sergey.avseyev@gmail.com> - 1.17.1-2
fe04497
- Build without ruby plugin for Fedora < 30 (Thanks to Mathieu Bridon)
fe04497
637ef64
* Fri Dec 14 2018 Sergey Avseyev <sergey.avseyev@gmail.com> - 1.17.1-1
637ef64
- Update to 1.17.1 and package python bindings
637ef64
bf7e9a8
* Fri Dec 07 2018 Sergey Avseyev <sergey.avseyev@gmail.com> - 1.17.0-1
bf7e9a8
- Initial revision