Apocrypha

udev-hid-bpf-2.2.0_p20251121gentoo

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

# Autogenerated by pycargoebuild 0.15.0

EAPI=8

CRATES="
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]+v1.6.1
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]+wasi-snapshot-preview1
	[email protected]+wasi-0.2.4
	[email protected]+wasi-0.2.4
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
"
RUST_MIN_VER="1.82.0"
PYTHON_COMPAT=( python3_{11..14} )

inherit cargo linux-info meson python-any-r1 udev

MY_PV=${PV/_p/-}
MY_P=${PN}-${MY_PV}
DESCRIPTION="Automatic HID-BPF loader based on udev events for device workarounds"
HOMEPAGE="https://libevdev.pages.freedesktop.org/udev-hid-bpf/"
SRC_URI="
	https://gitlab.freedesktop.org/libevdev/udev-hid-bpf/-/archive/${MY_PV}/${MY_P}.tar.bz2
	${CARGO_CRATE_URIS}
"
S="${WORKDIR}"/${MY_P}

LICENSE="GPL-2"
# Dependent crate licenses
LICENSE+="
	BSD-2 MIT Unicode-3.0
	|| ( Apache-2.0 Boost-1.0 )
"
SLOT="0"
KEYWORDS="~amd64"
IUSE="test userhacks"
RESTRICT="!test? ( test )"

DEPEND="
	dev-libs/libbpf:=
	virtual/libudev:=
"
RDEPEND="${DEPEND}"
BDEPEND="
	>=dev-util/bpftool-7.0.0
	llvm-core/clang[llvm_targets_BPF]
	test? (
		$(python_gen_any_dep '
			dev-python/pytest-xdist[${PYTHON_USEDEP}]
		')
	)
"

# BPF
QA_EXECSTACK="
	usr/lib/firmware/hid/bpf/*
	lib/firmware/hid/bpf/*
"

PATCHES=(
	"${FILESDIR}"/${PN}-2.2.0_p20251121-click.patch
	"${FILESDIR}"/${PN}-2.2.0_p20251121-cargo-no-bundled-libbpf.patch
)

python_check_deps() {
	python_has_version "dev-python/pytest-xdist[${PYTHON_USEDEP}]"
}

pkg_pretend() {
	local options=(
		BPF DEBUG_INFO_BTF DEBUG_INFO_BTF_MODULES
		# hidraw: https://docs.kernel.org/hid/hid-bpf.html#tracing
		HID_BPF HIDRAW BPF_EVENTS TRACING BPF_SYSCALL
		# tools/testing/selftests/hid/config
		BPF_JIT BPF_KPROBE_OVERRIDE BPF_LSM
		BPF_PRELOAD BPF_PRELOAD_UMD BPF_KPROBE_OVERRIDE
		BPF_STREAM_PARSER CGROUP_BPF DYNAMIC_FTRACE_WITH_DIRECT_CALLS
		FPROBE FTRACE_SYSCALLS FUNCTION_TRACER HID
		INPUT_EVDEV UHID LEDS_CLASS_MULTICOLOR
		USB USB_HID HID_APPLE HID_ITE HID_MULTITOUCH
		HID_PLAYSTATION PLAYSTATION_FF HID_SONY
		SONY_FF HID_WACOM
	)

	local CONFIG_CHECK f
	for f in "${options[@]}"; do
		CONFIG_CHECK+=" ~${f}"
	done

	check_extra_config
}

pkg_setup() {
	use test && python-any-r1_pkg_setup
}

src_configure() {
	# cargo_env vs meson, plus cargo test wants build to be a subdir
	BUILD_DIR="${S}"/build

	local bpf_types=(
		# https://gitlab.freedesktop.org/libevdev/udev-hid-bpf#quirks-user-hack-testing-and-stable
		# 'stable' isn't on by default, but README says:
		#   Distributions that package udev-hid-bpf should package these stable quirks.
		stable
		testing
		$(usev userhacks)
	)

	local emesonargs=(
		# Can't yet use GCC: https://gcc.gnu.org/PR121419
		-Dbpf-compiler=clang
		-Dbpfs="$(IFS=,; echo "${bpf_types[*]}")"
		-Dudevdir="${EPREFIX}$(get_udevdir)"
		$(meson_feature test tests)
	)

	cargo_env meson_src_configure
	ln -s "${CARGO_HOME}" "${BUILD_DIR}/cargo-home" || die
}

src_compile() {
	cargo_env meson_src_compile
}

src_test() {
	# Breakage w/ click-8.3 and mysterious missing _fields_
	local -x PYTEST_ADDOPTS="-k 'not (test_sync_with_kernel_tree.py or TestTUXEDOSirius16Gen1andGen2)'"
	cargo_env meson_src_test
}

src_install() {
	cargo_env meson_src_install

	# BPF objects
	dostrip -x /usr/lib/firmware /lib/firmware
}

pkg_postrm() {
	udev_reload
}

pkg_postinst() {
	udev_reload
}