blob: 9e1a8a28def75f03fb137537a6ca4e048d532816 (
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
|
# Copyright 2024 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_{10..13} )
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:=
sys-libs/zlib:=
"
RDEPEND="
${DEPEND}
"
# TODO: try to remove coverage dep
BDEPEND="
dev-python/cython[${PYTHON_USEDEP}]
test? (
dev-python/coverage[${PYTHON_USEDEP}]
>=dev-python/protobuf-python-5.26.1[${PYTHON_USEDEP}]
)
"
EPYTEST_XDIST=1
distutils_enable_tests pytest
src_configure() {
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++14
# 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_aio/unit/channel_argument_test.py::test_if_reuse_port_enabled
)
local EPYTEST_IGNORE=(
# not a test
tests/unit/test_common.py
# requires oauth2client
tests/unit/beta/_implementations_test.py
)
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
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
}
|