Skip to content

Commit

Permalink
net-libs/grpc: add 1.62.1, wire up tests
Browse files Browse the repository at this point in the history
There are newer releases available but this is the latest that does not
require abseil-cpp bump.  Not investigating every single failure right
now as even with all the exclusions this still plugs in 500+ tests that
were not there before.

Closes: https://bugs.gentoo.org/927403
Signed-off-by: Matoro Mahri <[email protected]>
Closes: gentoo#36711
Signed-off-by: Arthur Zamarin <[email protected]>
  • Loading branch information
matoro authored and arthurzam committed Jul 1, 2024
1 parent 09aa8f9 commit b30702e
Show file tree
Hide file tree
Showing 3 changed files with 299 additions and 0 deletions.
1 change: 1 addition & 0 deletions net-libs/grpc/Manifest
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ DIST grpc-1.55.1.tar.gz 9272441 BLAKE2B b2788d8deeb9791f04073294caa82c10e2cfe637
DIST grpc-1.56.1.tar.gz 11750628 BLAKE2B 52ea088d3d19fa7c1d1dc44899cd67bfd0132df2fd37690d855194d3196e4c26cfdd6fe589b5e4f802cdf88e70aad6c33b3ee98c1bd1bc47356d0dee9cdc706d SHA512 2bf9619edb60a6cec4cdaa89ee3c470c52b9745ea954bfe205aef6eb29bb55949de02e8c2afc7352eacdcd33fe4000861fd16fda9e5f66c87222674b17d6322a
DIST grpc-1.57.0.tar.gz 17337863 BLAKE2B 10c6fb35f606806aeb25cd55dd993d9af168eb8b1db64b4515830e2144dc44f35ce8f8329316a38d933b8032a0eff386591a0ddb87f2e405c5deaba012db2824 SHA512 b323de7c1f35b9de3fb7bf02ff4db6993abb0eee6860bbf2082818dda405fbe3a19fad91c5b48565cb65c6318de739bb91e47b5095801c078c6cbf3e8c73600c
DIST grpc-1.60.0.tar.gz 17442762 BLAKE2B 35cc0ea938deb848ca91e3d5f8879b85b80f94ac09b582600f05fee1f55c162ae98f2f744480f69d78e78da0c0f2d9e198f812101daaa1f1959869f26ba7d97a SHA512 91c2406ed4198509ac0d5360b3da6898fa4f40f459eb6fff541faa44cc238eed98fd7489e7ef7a80a6f4a318bc5b9130eaa0ba1beaa358d1c074fc82825648ff
DIST grpc-1.62.1.tar.gz 22384671 BLAKE2B 134e40732e784e52d518cde6e518e4c08e2f67a025754d88b92a9a314f86e53bee33ee793395b9e225c0895c6ac8b9c036892c82c19d0fddf69909a22eac4b78 SHA512 3224ad2617c18156f90c54c1ebf1f2015e405a6f12546e8709e0c905f52508c9f1a13b4d5a6cc7a35abf58b429985b5b504c9062f50c0d3d6aa163180a61047a
88 changes: 88 additions & 0 deletions net-libs/grpc/files/grpc-1.62.1-system-gtest.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
https://bugs.gentoo.org/927403

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7a55616fb6..ee62502267 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3442,81 +3442,6 @@ if(gRPC_INSTALL)
)
endif()

-if(gRPC_BUILD_TESTS)
-
-
-add_library(gtest
- third_party/googletest/googlemock/src/gmock-cardinalities.cc
- third_party/googletest/googlemock/src/gmock-internal-utils.cc
- third_party/googletest/googlemock/src/gmock-matchers.cc
- third_party/googletest/googlemock/src/gmock-spec-builders.cc
- third_party/googletest/googlemock/src/gmock.cc
- third_party/googletest/googletest/src/gtest-assertion-result.cc
- third_party/googletest/googletest/src/gtest-death-test.cc
- third_party/googletest/googletest/src/gtest-filepath.cc
- third_party/googletest/googletest/src/gtest-matchers.cc
- third_party/googletest/googletest/src/gtest-port.cc
- third_party/googletest/googletest/src/gtest-printers.cc
- third_party/googletest/googletest/src/gtest-test-part.cc
- third_party/googletest/googletest/src/gtest-typed-test.cc
- third_party/googletest/googletest/src/gtest.cc
-)
-
-target_compile_features(gtest PUBLIC cxx_std_14)
-
-set_target_properties(gtest PROPERTIES
- VERSION ${gRPC_CORE_VERSION}
- SOVERSION ${gRPC_CORE_SOVERSION}
-)
-
-if(WIN32 AND MSVC)
- set_target_properties(gtest PROPERTIES COMPILE_PDB_NAME "gtest"
- COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
- )
- if(gRPC_INSTALL)
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/gtest.pdb
- DESTINATION ${gRPC_INSTALL_LIBDIR} OPTIONAL
- )
- endif()
-endif()
-
-target_include_directories(gtest
- PUBLIC $<INSTALL_INTERFACE:${gRPC_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
- PRIVATE
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
- ${_gRPC_RE2_INCLUDE_DIR}
- ${_gRPC_SSL_INCLUDE_DIR}
- ${_gRPC_UPB_GENERATED_DIR}
- ${_gRPC_UPB_GRPC_GENERATED_DIR}
- ${_gRPC_UPB_INCLUDE_DIR}
- ${_gRPC_XXHASH_INCLUDE_DIR}
- ${_gRPC_ZLIB_INCLUDE_DIR}
- third_party/googletest/googletest/include
- third_party/googletest/googletest
- third_party/googletest/googlemock/include
- third_party/googletest/googlemock
-)
-target_link_libraries(gtest
- ${_gRPC_ALLTARGETS_LIBRARIES}
- ${_gRPC_RE2_LIBRARIES}
- absl::flat_hash_set
- absl::failure_signal_handler
- absl::stacktrace
- absl::symbolize
- absl::flags
- absl::flags_parse
- absl::flags_reflection
- absl::flags_usage
- absl::strings
- absl::any
- absl::optional
- absl::variant
-)
-
-
-endif()
-

add_library(upb_base_lib
third_party/upb/upb/base/status.c
210 changes: 210 additions & 0 deletions net-libs/grpc/grpc-1.62.1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

CMAKE_IN_SOURCE_BUILD=1
PYTHON_COMPAT=( python3_{10,12} )
inherit cmake flag-o-matic python-any-r1

MY_PV="${PV//_pre/-pre}"

DESCRIPTION="Modern open source high performance RPC framework"
HOMEPAGE="https://www.grpc.io"
SRC_URI="https://github.com/${PN}/${PN}/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz"

S="${WORKDIR}/${PN}-${MY_PV}"
LICENSE="Apache-2.0"
# format is 0/${CORE_SOVERSION//./}.${CPP_SOVERSION//./} , check top level CMakeLists.txt
SLOT="0/39.162"
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
IUSE="doc examples test systemd"
RESTRICT="!test? ( test )"

# look for submodule versions in third_party dir
RDEPEND="
=dev-cpp/abseil-cpp-20230802.0*:=
>=dev-libs/re2-0.2021.11.01:=
>=dev-libs/openssl-1.1.1:0=[-bindist(-)]
>=dev-libs/protobuf-23.3:=
dev-libs/xxhash
>=net-dns/c-ares-1.15.0:=
sys-libs/zlib:=
systemd? ( sys-apps/systemd:= )
"
DEPEND="
${RDEPEND}
test? (
dev-cpp/benchmark
dev-cpp/gflags
dev-cpp/gtest
)
"
BDEPEND="
${RDEPEND}
virtual/pkgconfig
test? (
net-misc/curl
$(python_gen_any_dep '
dev-python/twisted[${PYTHON_USEDEP}]
dev-python/pyyaml[${PYTHON_USEDEP}]
dev-python/cffi[${PYTHON_USEDEP}]
dev-python/six[${PYTHON_USEDEP}]
')
)
"

PATCHES=( "${FILESDIR}/${PN}-1.62.1-system-gtest.patch" )

python_check_deps() {
python_has_version -b "dev-python/twisted[${PYTHON_USEDEP}]" &&
python_has_version -b "dev-python/pyyaml[${PYTHON_USEDEP}]" &&
python_has_version -b "dev-python/cffi[${PYTHON_USEDEP}]" &&
python_has_version -b "dev-python/six[${PYTHON_USEDEP}]"
}

pkg_setup() {
use test && python-any-r1_pkg_setup
}

soversion_check() {
local core_sover cpp_sover
# extract quoted number. line we check looks like this: 'set(gRPC_CPP_SOVERSION "1.37")'
core_sover="$(grep 'set(gRPC_CORE_SOVERSION ' CMakeLists.txt | sed '/.*\"\(.*\)\".*/ s//\1/')"
cpp_sover="$(grep 'set(gRPC_CPP_SOVERSION ' CMakeLists.txt | sed '/.*\"\(.*\)\".*/ s//\1/')"
# remove dots, e.g. 1.37 -> 137
core_sover="${core_sover//./}"
cpp_sover="${cpp_sover//./}"
[[ ${core_sover} -eq $(ver_cut 2 ${SLOT}) ]] || die "fix core sublot! should be ${core_sover}"
[[ ${cpp_sover} -eq $(ver_cut 3 ${SLOT}) ]] || die "fix cpp sublot! should be ${cpp_sover}"
}

src_prepare() {
# These extra libs are defined as dependencies of the vendored gtest,
# which is a dependency of the unit tests, therefore they are normally
# implicitly picked up and linked to the test binaries. However removing
# the vendored gtest to use the system one also removes these dependencies,
# so we have to redeclare them as dependencies of the test binaries individually.
local extra_libs=("gtest"
"gmock"
"\${_gRPC_RE2_LIBRARIES}"
"absl::flat_hash_set"
"absl::failure_signal_handler"
"absl::stacktrace"
"absl::symbolize"
"absl::flags"
"absl::flags_parse"
"absl::flags_reflection"
"absl::flags_usage"
"absl::strings"
"absl::any"
"absl::optional"
"absl::variant")
: "$(echo "${extra_libs[@]}" | "${EPYTHON}" -c 'import sys;print("\\n\\1".join(sys.stdin.read().split()))')"
local rstring="${_}"
sed -i -E "s/( +)gtest/\1${rstring}/g" "CMakeLists.txt" || die

# Integrate tests with ctest rather than the custom test framework.
# Formatted with dev-python/black.
"${EPYTHON}" - <<-EOF | tee -a "CMakeLists.txt"
import json, pathlib
print("if(gRPC_BUILD_TESTS)")
print(" ENABLE_TESTING()")
for line in [
json.dumps([t["name"], "./" + t["name"], *t["args"]]).translate(
str.maketrans(dict.fromkeys("[],", None))
)
for t in json.loads(
pathlib.Path("tools/run_tests/generated/tests.json").read_text()
)
if "linux" in t["platforms"] and not t["flaky"] and not t.get("boringssl", False)
]:
print(f" add_test({line})")
print("endif()")
EOF

# Weird path issue. All tests except these two assume they are running from top-level src
sed -i -E "s/lslash != nullptr/false/" "test/core/http/httpcli_test_util.cc" || die

# Called via system() by some of the C++ sources, respect EPYTHON
sed -i -E "s#for p in #for p in \"${EPYTHON}\"#" "tools/distrib/python_wrapper.sh" || die

# Respect EPYTHON when testing, don't touch installed files otherwise
use test && python_fix_shebang --force "${S}"

cmake_src_prepare

# un-hardcode libdir
sed -i "s@/lib@/$(get_libdir)@" cmake/pkg-config-template.pc.in || die

# suppress network access, package builds fine without the submodules
mkdir "${S}/third_party/opencensus-proto/src" || die

soversion_check
}

src_configure() {
# https://github.com/grpc/grpc/issues/29652
filter-lto

local mycmakeargs=(
-DgRPC_INSTALL=ON
-DgRPC_ABSL_PROVIDER=package
-DgRPC_CARES_PROVIDER=package
-DgRPC_INSTALL_CMAKEDIR="$(get_libdir)/cmake/${PN}"
-DgRPC_INSTALL_LIBDIR="$(get_libdir)"
-DgRPC_PROTOBUF_PROVIDER=package
-DgRPC_RE2_PROVIDER=package
-DgRPC_SSL_PROVIDER=package
-DgRPC_ZLIB_PROVIDER=package
-DgRPC_BUILD_TESTS=$(usex test)
-DCMAKE_CXX_STANDARD=17
-DCMAKE_DISABLE_FIND_PACKAGE_systemd=$(usex !systemd)
$(usex test '-DgRPC_BENCHMARK_PROVIDER=package' '')
)
cmake_src_configure
}

src_test() {
# This is normally done with start_port_server.py, but this forks and exits,
# while we need to capture the pid, so run it ourselves
"${EPYTHON}" "tools/run_tests/python_utils/port_server.py" \
-p 32766 -l "${T}/port_server.log" &
local port_server_pid="${!}"

# Reimplementation of what start_port_server.py does with curl
curl --retry 9999 --retry-all-errors --retry-max-time 120 \
--fail --silent --output /dev/null "http://localhost:32766/get" || die

local disabled_tests=(
no_logging_test # hangs everywhere, no output
grpc_tool_test # fails everywhere
examine_stack_test # fails on amd64 only
stack_tracer_test # fails on amd64 only
endpoint_pair_test # fails on alpha
event_poller_posix_test # fails on alpha
tcp_posix_test # fails on alpha
)

cmake_src_test -E "($(IFS=$"|"; echo "${disabled_tests[*]}"))"

kill "${port_server_pid}" || die
}

src_install() {
cmake_src_install

if use examples; then
find examples -name '.gitignore' -delete || die
dodoc -r examples
docompress -x /usr/share/doc/${PF}/examples
fi

if use doc; then
find doc -name '.gitignore' -delete || die
local DOCS=( AUTHORS CONCEPTS.md README.md TROUBLESHOOTING.md doc/. )
fi

einstalldocs
}

0 comments on commit b30702e

Please sign in to comment.