# Contributor: Leo <thinkabit.ukim@gmail.com>
# Contributor: Carlo Landmeter <clandmeter@alpinelinux.org>
# Maintainer: Milan P. Stanić <mps@arvanta.net>
pkgname=linux-tools
pkgver=6.15.0
_kernver=${pkgver%.*}
pkgrel=0
pkgdesc="Linux kernel tools meta package"
url="https://www.kernel.org/"
arch="all"
license="GPL-2.0-only"
depends="perf cpupower $pkgname-gpio $pkgname-iio"
depends_dev="pciutils-dev readline-dev gettext-dev"
_llvmver=20
makedepends="
	$depends_dev
	asciidoc
	autoconf
	automake
	bash
	binutils-dev
	bison
	clang$_llvmver
	diffutils
	elfutils-dev
	findutils
	flex
	glib-dev
	libbpf-dev
	libcap-dev
	libnl3-dev
	libtool
	libtraceevent-dev
	eudev-dev
	libunwind-dev
	linux-headers
	llvm$_llvmver-dev
	ncurses-dev
	numactl-dev
	openssl-dev
	python3-dev
	slang-dev
	sysfsutils-dev
	xmlto
	zlib-dev
	zstd-dev
	"
subpackages="
	$pkgname-doc
	perf
	perf-bash-completion:perf_bashcomp:noarch
	cpupower
	cpupower-openrc:cpupower_openrc
	cpupower-bash-completion:cpupower_bashcomp:noarch
	$pkgname-dev
	$pkgname-gpio
	$pkgname-iio
	$pkgname-spi
	$pkgname-tmon
	$pkgname-usbip
	$pkgname-usbip-openrc:usbip_openrc
	bpftool
	bpftool-bash-completion:bpftool_bashcomp:noarch
	"
source="https://kernel.org/pub/linux/kernel/v6.x/linux-$_kernver.tar.xz
	cpupower-libs.patch
	dt_lnk.patch
	perf-doc.patch
	perf-basename.patch
	bpftool-basename.patch
	cpupower.initd
	cpupower.confd
	usbip.initd
	usbip.confd
	"
# append patch for non .0
case $pkgver in
*.*.0)
	;;
*.*.*)
	source="
		patch-$pkgver.patch.xz::https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/patch-$pkgver.xz
		$source
		"
	;;
esac

builddir="$srcdir"/linux-$_kernver

prepare() {
	# tools/perf/Makefile is just a wrapper around tools/perf/Makefile.perf
	# which calls the latter with a -j make(1) option set. However, it discards
	# variables set via the command-line in the process (e.g. mandir or prefix).
	# As such, it prevents us from correctly installing man pages with our current
	# setup. Just symlink the former to the latter to fix that.
	ln -fs Makefile.perf tools/perf/Makefile

	default_prepare
}

_make_tools() {
	make -C "$builddir"/tools \
		VERSION=$pkgver-$pkgrel NLS=false LIBINTL_LIBS=-lintl WERROR=0 \
		prefix=/usr libdir=/usr/lib lib=lib mandir=/usr/share/man \
		"$@"
}

build() {
	_make_tools perf cpupower gpio iio spi tmon bpf/bpftool
	(
		cd tools/usb/usbip
		sed -i 's,-Wall -Werror -Wextra,,' configure.ac
		./autogen.sh
		./configure \
			--build=$CBUILD \
			--host=$CHOST \
			--prefix=/usr \
			--sysconfdir=/etc \
			--mandir=/usr/share/man \
			--infodir=/usr/share/info \
			--libdir=/usr/lib \
			--datarootdir=/usr/share
		make
	)
}

package() {
	mkdir -p "$pkgdir"
	_make_tools DESTDIR="$pkgdir" \
		perf_install cpupower_install gpio_install iio_install spi_install

	[ "$CARCH" = x86_64 ] && _make_tools DESTDIR="$pkgdir" \
		intel-speed-select_install turbostat_install x86_energy_perf_policy_install

	make -C "$builddir/tools/bpf/bpftool" prefix=/usr \
		DESTDIR="$pkgdir" install
	(
		cd tools/thermal/tmon
		make install INSTALL_ROOT="$pkgdir"
	)
	(
		cd tools/usb/usbip
		make DESTDIR="$pkgdir" install
	)

	# we only support bash completions in usr/share/bash-completion
	mv "$pkgdir"/etc/bash_completion.d/* "$pkgdir"/usr/share/bash-completion/completions/
	rmdir "$pkgdir"/etc/bash_completion.d

	install -Dm755 "$srcdir"/cpupower.initd "$pkgdir"/etc/init.d/cpupower
	install -Dm644 "$srcdir"/cpupower.confd "$pkgdir"/etc/conf.d/cpupower
	install -Dm755 "$srcdir"/usbip.initd "$pkgdir"/etc/init.d/usbip
	install -Dm644 "$srcdir"/usbip.confd "$pkgdir"/etc/conf.d/usbip
}

cpupower() {
	pkgdesc="Linux kernel tool to set CPU power features"
	depends=""

	amove \
		usr/bin/cpu* \
		usr/sbin/cpu* \
		usr/lib/libcpu*.so.* \
		etc/cpu*

	if [ "$CARCH" = x86_64 ]; then
		amove usr/bin/intel-speed-select
		amove usr/bin/turbostat
		amove usr/bin/x86_energy_perf_policy
	fi
}

cpupower_openrc() {
	pkgdesc="Linux kernel tool to set CPU power features (OpenRC init scripts)"
	depends=""
	install_if="cpupower=$pkgver-r$pkgrel openrc"

	amove \
		etc/init.d/cpupower \
		etc/conf.d/cpupower
}

cpupower_bashcomp() {
	pkgdesc="Bash completion for cpupower"
	install_if="cpupower=$pkgver-r$pkgrel bash-completion"

	amove usr/share/bash-completion/completions/cpupower
}

usbip() {
	pkgdesc="utilities for USB device sharing over IP network"
	replaces="usbip-utils"
	provides="usbip-utils=$pkgver-r$pkgrel"
	depends=""

	amove \
		usr/sbin/usb* \
		usr/lib/libusb*
}

usbip_openrc() {
	pkgdesc="utilities for USB device sharing over IP network (OpenRC init scripts)"
	depends=""
	install_if="$pkgname-usbip=$pkgver-r$pkgrel openrc"

	amove \
		etc/init.d/usbip \
		etc/conf.d/usbip
}

perf() {
	pkgdesc="Linux kernel performance auditing tool"
	depends="libtraceevent-plugins"

	amove \
		usr/bin/perf \
		usr/bin/trace \
		usr/libexec/perf-core

	# /usr/share/perf-core is apprently not installed on all arches
	if [ -e "$pkgdir"/usr/share/perf-core ]; then
		amove usr/share/perf-core
	fi

	# just tests
	rm -r "$subpkgdir"/usr/libexec/perf-core/tests
}

perf_bashcomp() {
	replaces="$pkgname-bash-completion" # Backward compatibility
	pkgdesc="Bash completion for perf"
	install_if="perf=$pkgver-r$pkgrel bash-completion"

	amove usr/share/bash-completion/completions/perf
}

gpio() {
	pkgdesc="Linux kernel GPIO tools"
	depends=""

	amove usr/bin/*gpio*
}

iio() {
	pkgdesc="Linux kernel IIO tools"
	depends=""

	amove usr/bin/*iio*
}

spi() {
	pkgdesc="Linux kernel SPI tools"
	depends=""

	amove usr/bin/spi*
}

tmon() {
	pkgdesc="Linux kernel thermal monitor tools"
	replaces="tmon"
	depends=""

	amove usr/bin/tmon
}

bpftool() {
	pkgdesc="Linux kernel bpf manipulation tool"

	amove usr/sbin/bpftool
}

bpftool_bashcomp() {
	pkgdesc="Bash completion for bpftool"
	install_if="bpftool=$pkgver-r$pkgrel bash-completion"

	amove usr/share/bash-completion/completions/bpftool
}

doc() {
	default_doc
}

sha512sums="
d03788ffa8d8ae1b84ef1286bb44a08fc01432e509dfec6cccae5c5a5a47201d378aec2bcd21e6f0bbd1e625b26f47780c06ee9c1cef3775358f98b160923f30  linux-6.15.tar.xz
a46e3a84b00a39a356618831d0ddfb7f0d10f0a3799d1307ba2cc832e73c01f8d637a4e801a6dd25025f6f13155c6ad8b836422ff72d365e51063ac0bf907f52  cpupower-libs.patch
0657b461659e79c1926379aab30e7b7ab2d59eaf3e686f1dce468b79eb1320c188c14a0507361660abd2553bccffa9e149fa5b6e4d770d10c99bf5dafd2e05ee  dt_lnk.patch
2092b96d64e6c379ae52700b3c1bf459581afea69622a296821381e74ecafa4a08cea24eab002ad2152878a4508918de7807ac98ba72faf2d4dea18cc275933f  perf-doc.patch
518a843bc4f11275e746a3fbcdbf126111f4f86f7f757033fa1b0e19ec1f8965bbfbcd9f170f9d33ab562b3e09743c080adc7fb8657f263ddcf120cf76b4da44  perf-basename.patch
ea04b71c828df423e55ce22058015fe3cf13f58a1adbddefa61a8df26b343d22596d16737c592ead87a82df68672d44cbe4d4bfa4561185347db5c80ee9db340  bpftool-basename.patch
97ecfeaaaa8efca7af585316b843bf7be885e88095bbdfbf52bc9a96b14dc862435482781e205ea022ab208978aaa4aabb317354fab890ed514a5088ae5045c8  cpupower.initd
63cd12a4d8782198c71662e9205e346e064b65bae5e3e175b5bc43bdf7ec6ddf675b60349750afe3c37c8a925f9ae9a93530671821342581bd282a69e0773b8c  cpupower.confd
fcbd64d844c9bc187d08cef5995e91a46c0df78deb24e96ac9210c0e2c730eca0301970d9b8ffbf003df274682d05072431a26b59d8c491f396618268a12ec92  usbip.initd
eb8de617e27c4d5fdfee9c442e8f74b0afb4d0fe7b59eca3a19629eb70fea7e09b3c125bc968aa8810d845ce661c829bd0f3fdb2288664f2cccf423bc0ae6ae8  usbip.confd
"
