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

EAPI=8

QTMIN=6.8.1
KFMIN=6.18.0

inherit ecm xdg

DESCRIPTION="Linux perf GUI for performance analysis"
HOMEPAGE="https://github.com/KDAB/hotspot"

if [[ ${PV} == 9999 ]] ; then
	EGIT_REPO_URI="https://github.com/KDAB/hotspot"
	inherit git-r3
elif [[ ${PV} == *_p* ]] ; then
	HOTSPOT_COMMIT="b61451d827dd23e35c5f611e3626226a119dfa48"
	PERFPARSER_COMMIT="65472541f74da213583535c8bb4fea831e875109"
	PREFIXTICKLABELS_COMMIT="7cd6d5a04cf3747cc9327efdbcbf43620efaa0c1"
	SRC_URI="
		https://github.com/KDAB/hotspot/archive/${HOTSPOT_COMMIT}.tar.gz -> ${PN}-${HOTSPOT_COMMIT}.gh.tar.gz
		https://github.com/KDAB/perfparser/archive/${PERFPARSER_COMMIT}.tar.gz -> perfparser-${PERFPARSER_COMMIT}.gh.tar.gz
		https://github.com/koenpoppe/PrefixTickLabels/archive/${PREFIXTICKLABELS_COMMIT}.tar.gz -> PrefixTickLabels-${PREFIXTICKLABELS_COMMIT}.gh.tar.gz
	"
	S="${WORKDIR}"/${PN}-${HOTSPOT_COMMIT}
else
	SRC_URI="
		https://github.com/KDAB/hotspot/releases/download/v${PV}/${PN}-v${PV}.tar.gz
		https://github.com/KDAB/hotspot/releases/download/v${PV}/${PN}-perfparser-v${PV}.tar.gz -> ${PN}-v${PV}-perfparser.tar.gz
		https://github.com/KDAB/hotspot/releases/download/v${PV}/${PN}-PrefixTickLabels-v${PV}.tar.gz -> ${PN}-v${PV}-PrefixTickLabels.tar.gz
	"
	S="${WORKDIR}"/${PN}
fi

# hotspot itself is GPL-2 or GPL-3
# bundled perfparser is GPL-3
# bundled PrefixTickLabels is GPL-3
LICENSE="|| ( GPL-2 GPL-3 ) GPL-3"
SLOT="0"
IUSE="debuginfod"
if [[ ${PV} != 9999 ]] ; then
	KEYWORDS="~amd64"
fi

DEPEND="
	app-arch/zstd:=
	dev-libs/elfutils[debuginfod?]
	dev-libs/qcustomplot
	>=dev-qt/qtbase-${QTMIN}:6=[network,widgets]
	>=dev-qt/qtsvg-${QTMIN}:6
	gui-libs/kddockwidgets:=
	>=kde-frameworks/karchive-${KFMIN}:6
	>=kde-frameworks/kconfigwidgets-${KFMIN}:6
	>=kde-frameworks/kcoreaddons-${KFMIN}:6
	>=kde-frameworks/ki18n-${KFMIN}:6
	>=kde-frameworks/kiconthemes-${KFMIN}:6
	>=kde-frameworks/kio-${KFMIN}:6
	>=kde-frameworks/kitemviews-${KFMIN}:6
	>=kde-frameworks/kitemmodels-${KFMIN}:6
	>=kde-frameworks/knotifications-${KFMIN}:6
	>=kde-frameworks/kparts-${KFMIN}:6
	>=kde-frameworks/kwindowsystem-${KFMIN}:6
	>=kde-frameworks/solid-${KFMIN}:6
	>=kde-frameworks/syntax-highlighting-${KFMIN}:6
	>=kde-frameworks/threadweaver-${KFMIN}:6
	media-gfx/kgraphviewer
	sys-devel/gettext
"
RDEPEND="
	${DEPEND}
	dev-util/perf
	sys-devel/binutils:*
"

PATCHES=(
	"${FILESDIR}"/${PN}-odr.patch
)

src_unpack() {
	if [[ ${PV} == 9999 ]] ; then
		git-r3_src_unpack
	elif [[ ${PV} == *_p* ]] ; then
		unpack ${PN}-${HOTSPOT_COMMIT}.gh.tar.gz
		tar -xf "${DISTDIR}"/perfparser-${PERFPARSER_COMMIT}.gh.tar.gz --strip-components=1 -C "${S}"/3rdparty/perfparser || die
		tar -xf "${DISTDIR}"/PrefixTickLabels-${PREFIXTICKLABELS_COMMIT}.gh.tar.gz --strip-components=1 -C "${S}"/3rdparty/PrefixTickLabels || die
	else
		unpack ${PN}-v${PV}.tar.gz
		tar -xf "${DISTDIR}"/${PN}-v${PV}-perfparser.tar.gz --strip-components=1 -C "${S}"/3rdparty/perfparser || die
		tar -xf "${DISTDIR}"/${PN}-v${PV}-PrefixTickLabels.tar.gz --strip-components=1 -C "${S}"/3rdparty/PrefixTickLabels || die
	fi
}

src_prepare() {
	if ! use debuginfod ; then
		sed -i \
			'/target_link_libraries(libhotspot-perfparser PRIVATE ${LIBDEBUGINFOD_LIBRARIES})/d' \
			3rdparty/perfparser.cmake || die "sed failed for perfparser"

		sed -i \
			'/target_compile_definitions(libhotspot-perfparser PRIVATE HAVE_DWFL_GET_DEBUGINFOD_CLIENT=1)/d' \
			3rdparty/perfparser.cmake || die "sed failed for perfparser"
	fi

	ecm_src_prepare
}

src_configure() {
	local mycmakeargs=(
		-DQT6_BUILD=true
	)

	ecm_src_configure
}

src_test() {
	CMAKE_SKIP_TESTS=(
		# Complains about {d,rustc}_demangle missing, but may fail
		# for other reasons too.
		tst_perfparser
	)

	ecm_src_test
}