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

EAPI=8

DISTUTILS_OPTIONAL=1
PYTHON_COMPAT=( python3_{10..12} )

inherit linux-info meson python-single-r1

DESCRIPTION="User-space front-end for Ftrace"
HOMEPAGE="https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git"

if [[ ${PV} == *9999 ]] ; then
	EGIT_REPO_URI="https://git.kernel.org/pub/scm/utils/trace-cmd/${PN}.git"
	inherit git-r3
else
	SRC_URI="https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/snapshot/${PN}-v${PV}.tar.gz"
	KEYWORDS="amd64 ~arm64 ~riscv ~x86"
	S="${WORKDIR}/${PN}-v${PV}"
fi

LICENSE="GPL-2+ LGPL-2.1+"
SLOT="0/${PV}"
IUSE="python test"
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
# Tests segfault for now?
RESTRICT="!test? ( test ) test"

RDEPEND="
	>=app-arch/zstd-1.4
	>=dev-libs/libtracefs-1.8
	>=dev-libs/libtraceevent-1.6.3
	sys-libs/zlib
	sys-process/audit
	python? ( ${PYTHON_DEPS} )
"
DEPEND="
	${RDEPEND}
	sys-kernel/linux-headers
	test? ( dev-util/cunit )
"
BDEPEND="
	app-text/asciidoc
	virtual/pkgconfig
	python? ( dev-lang/swig )
"

pkg_setup() {
	local CONFIG_CHECK="
		~TRACING
		~FTRACE
		~BLK_DEV_IO_TRACE"

	linux-info_pkg_setup

	# TODO: Once we have options for doc+tests, we can revisit Python being
	# single-impl.
	use python && python-single-r1_pkg_setup
}

src_prepare() {
	default

	# Due to the in-progress meson build transaction, we decide to separate
	# the libtracecmd as an independent package, see bug #909439
	# Note: dev-util/trace-cmd still use in-source static libtracecmd duo to
	# it still use internal private API.
	sed -i -e "/^libtracecmd_standalone_build/s/true/false/" \
		"${S}"/lib/meson.build || die
}

src_configure() {
	local emesonargs=(
		-Dasciidoctor=false
		$(meson_use python)
	)

	# TODO: udis86 isn't wired up to meson at all
	# TODO: get docs & tests optional upstream
	# TODO: audit/zstd/zlib lack meson options for now. Previously, the situation
	# was somewhat automagic, so this isn't a huge loss for now, but we should
	# upstream some build options for these.
	meson_src_configure
}

src_install() {
	meson_src_install
	use python && python_install

	# TODO: fix bash completion name
	mv "${D}"/usr/share/bash-completion/completions/${PN}.bash \
		"${D}"/usr/share/bash-completion/completions/${PN} || die
}

python_install() {
	python_optimize "${D}$(python_get_sitedir)"
}