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

EAPI=8

MODULES_KERNEL_MIN=6.16
MODULES_INITRAMFS_IUSE=+initramfs
MY_PN="bcachefs-tools"
MODULE_S="module/src/${PN%-*}-${PV}"
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/kentoverstreet.asc

inherit flag-o-matic linux-mod-r1 toolchain-funcs unpacker verify-sig

DESCRIPTION="Linux bcachefs kernel module for sys-fs/bcachefs-tools"
HOMEPAGE="https://bcachefs.org/"
if [[ ${PV} == "9999" ]]; then
	inherit git-r3
	EGIT_REPO_URI="https://evilpiepirate.org/git/bcachefs-tools.git"
else
	SRC_URI="https://evilpiepirate.org/bcachefs-tools/bcachefs-tools-${PV}.tar.zst"
	SRC_URI+=" verify-sig? ( https://evilpiepirate.org/bcachefs-tools/bcachefs-tools-${PV}.tar.sign )"
	S="${WORKDIR}/${P}"
	KEYWORDS="~amd64 ~arm64"
fi

S="${WORKDIR}/${MY_PN}-${PV}"

LICENSE="GPL-2"
# Dependent crate licenses
LICENSE+=" Apache-2.0 BSD ISC MIT Unicode-DFS-2016"
SLOT="0"

IUSE="debug verify-sig"

DEPEND="~sys-fs/bcachefs-tools-${PV}"

RDEPEND="${DEPEND}
"

BDEPEND=">=sys-kernel/linux-headers-6.16
	verify-sig? ( >=sec-keys/openpgp-keys-kentoverstreet-20241012 )
"
pkg_setup() {
	local CONFIG_CHECK="
		BLOCK
		CRC_OPTIMIZATIONS
		EXPORTFS
		CLOSURES
		CRC32
		CRC64
		FS_POSIX_ACL
		LZ4_COMPRESS
		LZ4_DECOMPRESS
		LZ4HC_COMPRESS
		ZLIB_DEFLATE
		ZLIB_INFLATE
		ZSTD_COMPRESS
		ZSTD_DECOMPRESS
		CRYPTO_LIB_SHA256
		CRYPTO_LIB_CHACHA
		CRYPTO_LIB_POLY1305
		KEYS
		RAID6_PQ
		XOR_BLOCKS
		XXHASH
		SYMBOLIC_ERRNAME
		MIN_HEAP
		XARRAY_MULTI
	"
	use amd64 && CONFIG_CHECK+="
		CRYPTO_CHACHA20_X86_64
		CRYPTO_POLY1305_X86_64
	"
	use debug && CONFIG_CHECK+="
		DEBUG_INFO
		FRAME_POINTER
		!DEBUG_INFO_REDUCED
	"
	linux-mod-r1_pkg_setup
}

src_unpack() {
	# Upstream signs the uncompressed tarball
	if use verify-sig; then
		einfo "Unpacking ${P}.tar.zst ..."
		verify-sig_verify_detached - "${DISTDIR}"/${MY_PN}-${PV}.tar.sign \
			< <(zstd -fdc "${DISTDIR}"/${MY_PN}-${PV}.tar.zst | tee >(tar -xf -))
		assert "Unpack failed"
	fi

	if [[ ${PV} == "9999" ]]; then
		git-r3_src_unpack
	else
		unpacker ${MY_PN}-${PV}.tar.zst
	fi

}

src_prepare() {
	default
	tc-export CC

	sed -i s/^VERSION=.*$/VERSION=${PV}/ Makefile || die
	sed \
		-e '/^CFLAGS/s:-O2::' \
		-e '/^CFLAGS/s:-g::' \
		-i Makefile || die
	append-lfs-flags

	emake DESTDIR="${WORKDIR}" PREFIX="/module" install_dkms
	sed -i "s|^#define TRACE_INCLUDE_PATH .*|#define TRACE_INCLUDE_PATH ${WORKDIR}/${MODULE_S}/src/fs/bcachefs|" \
		../${MODULE_S}/src/fs/bcachefs/trace.h || die
	sed -i '/mean_and_variance_test.o/Id' ../${MODULE_S}/src/fs/bcachefs/Makefile|| die
}

src_compile() {
	local modlist=( "bcachefs=kernel/fs/bcachefs:../${MODULE_S}:../${MODULE_S}/src/fs/bcachefs" )
	local modargs=(
		KDIR=${KV_OUT_DIR}
	)

	linux-mod-r1_src_compile
}

src_install() {
	linux-mod-r1_src_install
}

pkg_postinst() {
	linux-mod-r1_pkg_postinst
}