EAPI=8 inherit cmake flag-o-matic DESCRIPTION="AIRouter runtime (C++; replaces the Rust 0.1.x airouterd)" HOMEPAGE="https://trunkmasters.com/airouter" SRC_URI="https://www.hedronfire.com/distfiles/${P}.tar.gz" # Mirrors the Rust net-misc/airouter; the license declaration is an owner decision. LICENSE="MIT" SLOT="0" KEYWORDS="~amd64" # The build pins exact dependency versions (M0 host pins). Compiler pins are # enforced by CMake itself (GCC 14.4.1 or Clang 23.1.3). DEPEND=" =dev-libs/boost-1.91.0* =dev-libs/openssl-3.6.5* =dev-db/postgresql-18.6* =dev-cpp/nlohmann_json-3.12.0* =dev-cpp/tomlplusplus-3.4.0* =dev-cpp/yaml-cpp-0.9.0* " # chronyc reports are parsed in their verified CSV shapes (ADR-05 [time]). RDEPEND=" ${DEPEND} >=acct-group/airouter-1 >=acct-user/airouter-1 app-admin/sudo =net-misc/chrony-4.9* >=dev-lang/python-3.11 " BDEPEND=" =dev-cpp/catch-3.15.3* >=dev-lang/python-3.11 " src_configure() { # The project refuses in-source builds and requires an absolute build root. export AIROUTER_CPP_BUILD_ROOT="${WORKDIR}/build" # GCC 14 at -O2 reports -Wmismatched-new-delete (a -Werror error here) inside # Boost.Asio's recycling awaitable-frame allocator: operator new and operator delete # are a matched pair, but GCC sees the inlined aligned_alloc. The CMake presets # (-O0, -O3) do not trigger it. Only this one diagnostic is disabled; -Werror stays. append-cxxflags -Wno-mismatched-new-delete local mycmakeargs=( -DAIROUTER_SANITIZER=none ) cmake_src_configure } src_test() { # Unit and digest-vector tests run here. The PostgreSQL/bwrap end-to-end and the # install-layout tests run in CI, outside the Portage sandbox. cmake_src_test -R '^m1-(unit|digest-vectors)$' } src_install() { cmake_src_install newinitd "${ED}"/usr/share/airouter/openrc/airouterd.initd airouterd newconfd "${ED}"/usr/share/airouter/openrc/airouterd.confd airouterd insinto /etc/airouter newins packaging/airouterd.toml.example airouterd.toml.example # /var/lib/airouter is the acct-user home (owned there); the service's # start_pre creates its receipts, run and log directories with checkpath. } pkg_postinst() { elog "Copy /etc/airouter/airouterd.toml.example to airouterd.toml," elog "apply the schema with airouter-migrate (as the migrator role, from" elog "/usr/share/airouter/sql), keep execution.cgroup equal to AIROUTERD_CGROUP" elog "in /etc/conf.d/airouterd (the service delegates it at start)," elog "create the [history] directory on its own filesystem (for example a ZFS dataset" elog "outside the database's snapshots and backups; the daemon refuses a shared one)," elog "set [time] to the NTS-authenticated chronyd (its socket, uid, config, the" elog "config's sha256sum and the addresses its NTS server name resolves to), install" elog "/usr/share/airouter/sudoers.airouter as /etc/sudoers.d/airouterd with" elog "those addresses (it lets the service read chronyd's reports as ntp)," elog "then: rc-service airouterd start." }