blob: c9bcf2b84e07a1e4bb9deb65fac0604063cfd203 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# Copyright 2024-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_EXT=1
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{11..14} )
inherit distutils-r1 flag-o-matic multiprocessing pypi
MY_P=grpc-${PV}
DESCRIPTION="HTTP/2-based RPC framework"
HOMEPAGE="
https://grpc.io/
https://github.com/grpc/grpc/
https://pypi.org/project/grpcio/
"
# Tests need other packages from the source tree, so use a GitHub
# archive. sdist provides bundled library sources (git submodules).
SRC_URI+="
test? (
https://github.com/grpc/grpc/archive/v${PV}.tar.gz
-> ${MY_P}.gh.tar.gz
$(pypi_sdist_url grpcio_tools)
)
"
LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~arm64 ~x86"
DEPEND="
dev-libs/openssl:=
net-dns/c-ares:=
virtual/zlib:=
"
RDEPEND="
${DEPEND}
>=dev-python/typing-extensions-4.12.2[${PYTHON_USEDEP}]
"
# TODO: try to remove coverage dep
BDEPEND="
>=dev-python/cython-3.1.1[${PYTHON_USEDEP}]
test? (
dev-python/coverage[${PYTHON_USEDEP}]
>=dev-python/protobuf-6.31.1[${PYTHON_USEDEP}]
)
"
EPYTEST_PLUGINS=()
# signal handling tests hang often
EPYTEST_RERUNS=5
: ${EPYTEST_TIMEOUT=15}
EPYTEST_XDIST=1
distutils_enable_tests pytest
src_prepare() {
distutils-r1_src_prepare
sed -i -e '/INSTALL_REQUIRES/s:~=:>=:' setup.py || die
}
src_configure() {
# -Werror=odr -Werror=lto-type-mismatch
# https://bugs.gentoo.org/856775
# https://github.com/grpc/grpc/issues/36158
filter-lto
export GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS="$(makeopts_jobs)"
# system abseil-cpp crashes with USE=-debug, sigh
# https://bugs.gentoo.org/942021
#export GRPC_PYTHON_BUILD_SYSTEM_ABSL=1
export GRPC_PYTHON_BUILD_SYSTEM_CARES=1
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
# re2 needs to be built against the same abseil-cpp version
#export GRPC_PYTHON_BUILD_SYSTEM_RE2=1
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1
export GRPC_PYTHON_BUILD_WITH_CYTHON=1
# copied from setup.py, except for removed -std= that does not apply
# to C code and causes warnings
export GRPC_PYTHON_CFLAGS="-fvisibility=hidden -fno-wrapv -fno-exceptions"
# required by abseil-cpp
append-cxxflags -std=c++17
# silence a lot of harmless noise from bad quality code
append-cxxflags -Wno-attributes
}
python_test() {
local EPYTEST_DESELECT=(
# Internet
tests/unit/_dns_resolver_test.py::DNSResolverTest::test_connect_loopback
# not a test
tests/unit/_compression_test.py::test_compression
tests_aio/unit/channel_argument_test.py::test_if_reuse_port_enabled
# expects grpcio-admin
tests/unit/test_all_modules_installed.py::TestAllModulesInstalled::test_import_all_modules
# TODO
tests_py3_only/unit/_simple_stubs_test.py::SimpleStubsTest::test_default_ssl
)
local EPYTEST_IGNORE=(
# not a test
tests/unit/test_common.py
# requires oauth2client
tests/unit/beta/_implementations_test.py
)
cp -a "${BUILD_DIR}"/{install,test} || die
local -x PATH=${BUILD_DIR}/test/usr/bin:${PATH}
# grpcio proper builds against system libs
# grpcio_tools supports bundled libs only, and requires different
# flags
unset GRPC_PYTHON_CFLAGS
cd "${WORKDIR}/grpcio_tools-${PV}" || die
distutils_pep517_install "${BUILD_DIR}"/test
cd "${WORKDIR}/${MY_P}" || die
local protodir=src/proto/grpc/testing
local testdir=src/python/grpcio_tests
"${EPYTHON}" -m grpc_tools.protoc -I. --python_out="${testdir}" \
"${protodir}"/{empty,messages}.proto || die
"${EPYTHON}" -m grpc_tools.protoc -I. --grpc_python_out="${testdir}" \
"${protodir}"/test.proto || die
cd "${testdir}" || die
"${EPYTHON}" -m grpc_tools.protoc -I. --python_out=. \
tests/testing/proto/{requests,services}.proto || die
"${EPYTHON}" -m grpc_tools.protoc -I. --grpc_python_out=. \
tests/testing/proto/services.proto || die
# TODO: aio tests are failing randomly, so we're skipping them entirely
epytest tests{_py3_only,}/unit
}
|