# Copyright 2025 RomikB
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit linux-mod-r1

DESCRIPTION="AmneziaWG Linux kernel module"
HOMEPAGE="https://github.com/amnezia-vpn/amneziawg-linux-kernel-module"
SRC_URI="https://github.com/amnezia-vpn/amneziawg-linux-kernel-module/archive/v${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="amd64"

DEPEND="dist-kernel? ( sys-kernel/amneziawg-sources )"

PATCHES=( "${FILESDIR}/fix-apply-patches.patch" )

src_unpack() {
	default
	mv "${WORKDIR}"/amneziawg-linux-kernel-module-* "${S}" || die
}

src_compile() {
	local src_kernel
	if use dist-kernel; then
		einfo "Building for kernel ${KV_FULL}"
		local src_root=/usr/src/amneziawg-sources kv_patch="$KV_PATCH"
		while [ "${kv_patch}" -ge 1 ]; do
			local kv_full="${KV_MAJOR}.${KV_MINOR}.${kv_patch}${KV_LOCAL}"
			local src_full="${src_root}/${kv_full}"
			if [[ -d "${src_full}" ]]; then
				src_kernel="${src_full}"
				break
			fi
			kv_patch=$((kv_patch - 1))
		done
	fi
	local kernel_dir=src/kernel
	if [[ -n "${src_kernel}" ]]; then
		einfo "Using AmneziaWG kernel sources from ${src_kernel}"
		local wg_dir="${kernel_dir}"/drivers/net wg_name=wireguard
		mkdir -p "${wg_dir}"
		ln -s "${src_kernel}" "${wg_dir}"/"${wg_name}"
		ln -s "${KV_DIR}"/include "${kernel_dir}"/
	else
		einfo "Using kernel sources from ${KV_DIR}"
		ln -s "${KV_DIR}" "${kernel_dir}"
	fi
	local modargs=(KERNELRELEASE="${KV_FULL}")
	local modlist=(amneziawg=kernel/drivers/net:src:src:all)
	linux-mod-r1_src_compile
}