# Copyright 1999-2023 Gentoo Authors
#
# Distributed under the terms of the GNU General Public License v2

EAPI=8
inherit linux-info meson systemd

DESCRIPTION="A very small VPN daemon which tunnels IP packets and Ethernet frames over UDP."
HOMEPAGE="https://fastd.readthedocs.io/"
SRC_URI="https://github.com/NeoRaider/fastd/releases/download/v${PV}/${P}.tar.xz"

# while source COPYRIGHT also mentions LGPLv2.1+, that only applies to
# vendored libmnl. we are using system libmnl.
LICENSE="BSD BSD-2"

SLOT="0"
KEYWORDS="~amd64 ~arm64"
IUSE="+caps doc offload-l2tp systemd test"
RESTRICT="!test? ( test )"

RDEPEND="
>=net-libs/libuecc-6
dev-libs/json-c
dev-libs/libsodium
dev-libs/openssl
offload-l2tp? ( net-libs/libmnl )
caps? ( sys-libs/libcap )
test? ( dev-util/cmocka )
"
DEPEND="${RDEPEND}"
BDEPEND="
sys-devel/bison
doc? ( dev-python/sphinx )
"

pkg_setup() {
	if use offload-l2tp; then
		CONFIG_CHECK="~L2TP ~L2TP_V3 ~L2TP_ETH"
		declare -g ERROR_L2TP="CONFIG_L2TP     isn't set. Offloading L2TP to kernel will not work."
		declare -g ERROR_L2TP_V3="CONFIG_L2TP_V3  isn't set. Offloading L2TP to kernel will not work."
		declare -g ERROR_L2TP_ETH="CONFIG_L2TP_ETH isn't set. Offloading L2TP to kernel will not work."
		linux-info_pkg_setup
	fi
}

src_configure() {
	local emesonargs=(
		$(meson_feature caps capabilities)
		$(meson_feature offload-l2tp offload_l2tp)
		$(meson_feature systemd)
		$(meson_use test build_tests)
		-Dlibmnl_builtin=false
	)
	meson_src_configure
}

src_compile() {
	meson_src_compile
	if use doc; then
		einfo "Building documentation ..."
		local doc_dir="${S}/doc"
		cd "${doc_dir}" || die "Cannot chdir into \"${doc_dir}\"!"
		emake man || die "Building documentation failed!"
	fi
}

src_install() {
	meson_src_install
	systemd_dounit "doc/examples/fastd@.service"
	newinitd "${FILESDIR}/fastd.init" fastd
	use doc && doman doc/build/man/*
	keepdir /etc/fastd
}