blob: 12a2f97efa9eda1fd831d5db0c408846550fc5bb [file] [log] [blame] [edit]
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit cros-fuzzer cros-sanitizers cmake
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"
LICENSE="Apache-2.0"
# format is 0/${CORE_SOVERSION//./}.${CPP_SOVERSION//./} , check top level CMakeLists.txt
SLOT="0/21.143"
KEYWORDS="*"
IUSE="cros_host doc examples test"
# look for submodule versions in third_party dir
RDEPEND="
=dev-cpp/abseil-cpp-20211102.0*:=
>=dev-libs/re2-0.2021.11.01:=
>=dev-libs/openssl-1.1.1:0=[-bindist(-)]
>=dev-libs/protobuf-3.18.1:=
dev-libs/xxhash
>=net-dns/c-ares-1.15.0:=
!net-libs/grpc:1.16.1
sys-libs/zlib:=
"
DEPEND="${RDEPEND}
test? (
dev-cpp/benchmark
dev-cpp/gflags
)
"
BDEPEND="virtual/pkgconfig"
PATCHES=(
"${FILESDIR}/${P}-support-vsock.patch"
"${FILESDIR}/${P}-build-codegen.patch"
"${FILESDIR}/${P}-Add-a-VsockResolverFactory.patch"
)
# requires sources of many google tools
RESTRICT="test"
S="${WORKDIR}/${PN}-${MY_PV}"
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() {
cmake_src_prepare
# un-hardcode libdir
sed -i "s@lib/pkgconfig@$(get_libdir)/pkgconfig@" CMakeLists.txt || die
sed -i "s@/lib@/$(get_libdir)@" cmake/pkg-config-template.pc.in || die
soversion_check
}
src_configure() {
# Suppress "-Wnon-c-typedef-for-linkage warning, https://crbug.com/1055907
append-flags "-Wno-non-c-typedef-for-linkage"
if use_sanitizers; then
# grpc ebuild need to disable some features for building with
# sanitizers, https://crbug.com/1015125 .
append-flags "-fno-sanitize=vptr"
append-flags "-Wno-frame-larger-than="
fi
local mycmakeargs=(
-DgRPC_INSTALL=ON
-DgRPC_ABSL_PROVIDER=package
-DgRPC_BACKWARDS_COMPATIBILITY_MODE=OFF
-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
$(usex test '-DgRPC_BENCHMARK_PROVIDER=package' '')
)
# ChromeOS: Disable protoc plugins if cross-compiling since protoc is not
# available on the target.
if ! use cros_host; then
mycmakeargs+=(
-DgRPC_BUILD_CODEGEN=OFF
-DgRPC_BUILD_GRPC_CPP_PLUGIN=OFF
-DgRPC_BUILD_GRPC_CSHARP_PLUGIN=OFF
-DgRPC_BUILD_GRPC_NODE_PLUGIN=OFF
-DgRPC_BUILD_GRPC_OBJECTIVE_C_PLUGIN=OFF
-DgRPC_BUILD_GRPC_PHP_PLUGIN=OFF
-DgRPC_BUILD_GRPC_PYTHON_PLUGIN=OFF
-DgRPC_BUILD_GRPC_RUBY_PLUGIN=OFF
)
fi
cmake_src_configure
}
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
}