# Contributor: Konstantin Kulikov <k.kulikov2@gmail.com>
# Maintainer: Adam Jensen <adam@acj.sh>
pkgname=bpftrace
pkgver=0.23.3
pkgrel=0
pkgdesc="High-level tracing language for Linux eBPF"
url="https://github.com/iovisor/bpftrace"
arch="all !x86" # x86 unsupported
license="Apache-2.0"
_llvmver=18
makedepends="
	asciidoctor
	bcc-dev
	binutils-dev
	bison
	cereal
	clang$_llvmver-dev
	clang$_llvmver-extra-tools
	clang$_llvmver-static
	cmake
	elfutils-dev
	flex-dev
	libbpf-dev
	linux-headers
	llvm$_llvmver-dev
	llvm$_llvmver-gtest
	llvm$_llvmver-static
	samurai
	libxml2-dev
	"
source="$pkgname-$pkgver.tar.gz::https://github.com/iovisor/bpftrace/archive/v$pkgver.tar.gz"
# Tests require root, network to download gmock and a few tests fail.
# Stripping is done ourselves to keep the BEGIN_trigger symbol required
# for BEGIN probe (see https://github.com/iovisor/bpftrace/issues/954 )
options="!check !strip"
subpackages="$pkgname-doc:doc $pkgname-tools:tools:noarch $pkgname-tools-doc:tools_doc"

check_bcc_clang() {
	# check bcc builds with the same llvm version as we do
	local bcc_clang
	bcc_clang=$(readelf -d /usr/lib/libbcc.so.0 \
			| sed -ne 's/.*libclang-cpp.so\.\([0-9]*\)\..*/\1/p')
	if [ "$_llvmver" != "$bcc_clang" ]; then
		echo "BCC depends on LLVM $bcc_clang, update \$_llvmver (was $_llvmver)" >&2
		exit 1
	fi
}

build() {
	check_bcc_clang

	cmake -B build -G Ninja \
		-DCMAKE_INSTALL_PREFIX=/usr \
		-DCMAKE_BUILD_TYPE=MinSizeRel \
		-DBUILD_TESTING=OFF \
		-DCMAKE_PREFIX_PATH=/usr/lib/llvm$_llvmver/lib/cmake \
		-DLLVM_REQUESTED_VERSION="$(/usr/lib/llvm$_llvmver/bin/llvm-config --version)" \
		-DUSE_SYSTEM_BPF_BCC=1
	cmake --build build
}

# Main package contains only bpftrace binary.
package() {
	DESTDIR="$pkgdir" cmake --install build
	strip --keep-symbol BEGIN_trigger \
		--keep-symbol END_trigger \
		"$pkgdir"/usr/bin/bpftrace \
		"$pkgdir"/usr/bin/bpftrace-aotrt

	mv "$pkgdir/usr/share/bpftrace/tools/doc" "$pkgdir/usr/share/bpftrace/tools_doc"
}

# Doc package should contain only man page for bpftrace.
doc() {
	mkdir -p "$subpkgdir/usr/share/man/man8"
	mv "$pkgdir/usr/share/man/man8/bpftrace.8.gz" "$subpkgdir/usr/share/man/man8/"
}

# Tools are not installed in PATH, because they would conflict with other tools provided by bcc or perf-tools.
tools() {
	depends="$pkgname"
	pkgdesc="$pkgdesc (tools)"
	amove usr/share/bpftrace/tools
}

# Tools docs contains man pages and examples for tools.
tools_doc() {
	pkgdesc="$pkgdesc (tool docs and examples)"

	amove usr/share/bpftrace/tools_doc
	amove usr/share/man
}

sha512sums="
fa4fc7d843d4a7c34b4f06e23945eb87b8cdce975a2a58744e5010839fbebd7464fdfdc31a804d35fa7a38b019412c6079016e7f6b1cb322840942dab1abee91  bpftrace-0.23.3.tar.gz
"
