View Raw Ebuild
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake-multilib flag-o-matic
DESCRIPTION="The C++ Actor Framework (CAF)"
HOMEPAGE="https://www.actor-framework.org/"
SRC_URI="https://github.com/actor-framework/actor-framework/archive/${PV}.tar.gz
-> ${P}.tar.gz"
S="${WORKDIR}/actor-framework-${PV}"
LICENSE="BSD"
SLOT="0/$(ver_cut 1-3)"
KEYWORDS="~amd64 ~x86"
IUSE="debug doc examples +openssl static-libs test"
RESTRICT="!test? ( test )"
# libcaf_net links OpenSSL::SSL and OpenSSL::Crypto as PUBLIC deps; it is
# always built, so OpenSSL is an unconditional dependency. The openssl USE
# flag additionally enables the legacy libcaf_openssl TLS module for libcaf_io.
RDEPEND="
dev-libs/openssl:0=[${MULTILIB_USEDEP},static-libs?]
examples? (
net-misc/curl
dev-libs/protobuf:=
dev-qt/qtbase:6[gui,widgets] )"
DEPEND="${RDEPEND}"
BDEPEND="doc? (
app-text/doxygen[dot]
dev-python/sphinx
dev-python/sphinx-rtd-theme )"
src_prepare() {
# conf.py references git.Repo but doesn't import gitpython; remove the dead
# line so has_release_date() runs instead — it reads CHANGELOG.md and
# returns true for any release tarball, giving release = version naturally.
sed -i '/repo = git\.Repo/d' "${S}"/manual/conf.py
# CAFTargets.cmake exposes OpenSSL::SSL/OpenSSL::Crypto as
# INTERFACE_LINK_LIBRARIES but CAFConfig.cmake.in never calls
# find_dependency(OpenSSL), breaking downstream cmake consumers.
sed -i '/find_dependency(Threads)/a find_dependency(OpenSSL)' \
"${S}"/cmake/CAFConfig.cmake.in
cmake_src_prepare
}
multilib_src_configure() {
# GCC 15 false-positive: bits/move.h triggers -Wuninitialized via CAF's
# server_factory_base; suppress until upstream resolves it.
append-cxxflags -Wno-uninitialized
local mycmakeargs=(
-DBUILD_SHARED_LIBS="$(usex static-libs no yes)"
-DCAF_CXX_VERSION=20
-DCAF_ENABLE_EXCEPTIONS=no
-DCAF_ENABLE_OPENSSL_MODULE="$(usex openssl)"
-DCAF_ENABLE_RUNTIME_CHECKS="$(usex debug)"
-DCAF_LOG_LEVEL="$(usex debug DEBUG QUIET)"
-DCAF_USE_STD_FORMAT=yes
)
if multilib_is_native_abi; then
mycmakeargs+=(
-DCAF_ENABLE_CURL_EXAMPLES="$(usex examples)"
-DCAF_ENABLE_EXAMPLES="$(usex examples)"
-DCAF_ENABLE_PROTOBUF_EXAMPLES="$(usex examples)"
-DCAF_ENABLE_QT6_EXAMPLES="$(usex examples)"
-DCAF_ENABLE_TESTING="$(usex test)"
)
else
mycmakeargs+=(
-DCAF_ENABLE_CURL_EXAMPLES=no
-DCAF_ENABLE_EXAMPLES=no
-DCAF_ENABLE_PROTOBUF_EXAMPLES=no
-DCAF_ENABLE_QT6_EXAMPLES=no
-DCAF_ENABLE_TESTING=no
)
fi
cmake_src_configure
}
multilib_src_compile() {
cmake_src_compile
if multilib_is_native_abi && use doc; then
# Doxyfile is generated by cmake into BUILD_DIR, not present in S.
doxygen "${BUILD_DIR}"/Doxyfile || die "doxygen failed"
sphinx-build "${S}"/manual "${S}"/manual/html || die "sphinx failed"
fi
}
multilib_src_test() {
# cmake sets BUILD_RPATH on test executables pointing to their build-tree
# library locations; run tests for the native ABI only.
multilib_is_native_abi && cmake_src_test
}
multilib_src_install() {
cmake_src_install
if multilib_is_native_abi && use doc; then
docinto api
dodoc -r "${BUILD_DIR}"/html/*
docinto manual
dodoc -r "${S}"/manual/html/*
fi
}