# 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 }