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

EAPI=8

PYTHON_COMPAT=( python3_{9..11} )

inherit readme.gentoo-r1 systemd udev xdg-utils distutils-r1 linux-mod

DESCRIPTION="Drivers and user-space daemon to control Razer devices on GNU/Linux"
HOMEPAGE="https://openrazer.github.io/
	https://github.com/openrazer/openrazer/"
SRC_URI="https://github.com/${PN}/${PN}/archive/v${PV}.tar.gz
	-> ${P}.tar.gz"

LICENSE="GPL-2+"
SLOT="0"
KEYWORDS="amd64 ~x86"

IUSE="+client +daemon"
REQUIRED_USE="
	client? ( daemon )
	daemon? ( ${PYTHON_REQUIRED_USE} )
	test? ( daemon )
"

RDEPEND="
	client? ( dev-python/numpy[${PYTHON_USEDEP}] )
	daemon? (
		acct-group/plugdev
		dev-python/daemonize[${PYTHON_USEDEP}]
		dev-python/dbus-python[${PYTHON_USEDEP}]
		dev-python/notify2[${PYTHON_USEDEP}]
		dev-python/pygobject:3[${PYTHON_USEDEP}]
		dev-python/pyudev[${PYTHON_USEDEP}]
		dev-python/setproctitle[${PYTHON_USEDEP}]
		x11-libs/gtk+:3[introspection]
		x11-misc/xautomation
		x11-misc/xdotool
	)
"
BDEPEND="
	${RDEPEND}
	virtual/linux-sources
"

DOCS=( README.md )

DOC_CONTENTS="To successfully use OpenRazer: load desired kernel module
(razeraccessory, razerkbd, razerkraken and/or razermouse),
add your user to the \"plugdev\" group and start the OpenRazer daemon.
To automatically start up the OpenRazer daemon on session login copy
/usr/share/openrazer/openrazer-daemon.desktop file into Your user's
~/.config/autostart/ directory."

BUILD_TARGETS="clean driver"
BUILD_PARAMS="-C ${S} SUBDIRS=${S}/driver KERNELDIR=${KERNEL_DIR}"
MODULE_NAMES="
	razeraccessory(hid:${S}/driver)
	razerkbd(hid:${S}/driver)
	razerkraken(hid:${S}/driver)
	razermouse(hid:${S}/driver)
"

distutils_enable_tests unittest

python_compile() {
	if use daemon ; then
		( cd "${S}"/daemon || die ; distutils-r1_python_compile )
	fi
	if use client ; then
		( cd "${S}"/pylib || die ; distutils-r1_python_compile )
	fi
}

python_install() {
	if use daemon ; then
		( cd "${S}"/daemon || die ; distutils-r1_python_install )
		python_scriptinto /usr/bin
		python_newscript "${S}"/daemon/run_openrazer_daemon.py ${PN}-daemon
	fi
	if use client ; then
		( cd "${S}"/pylib || die ; distutils-r1_python_install )
	fi
}

src_prepare() {
	xdg_environment_reset
	distutils-r1_src_prepare

	# Remove bad tests.
	rm "${S}"/daemon/tests/test_effect_sync.py || die
}

src_compile() {
	linux-mod_src_compile
	distutils-r1_src_compile

	if use daemon ; then
		emake -C "${S}"/daemon PREFIX=/usr service
	fi

	readme.gentoo_create_doc
}

src_test() {
	( cd "${S}"/daemon/tests || die ; distutils-r1_src_test )
}

src_install() {
	linux-mod_src_install
	distutils-r1_src_install

	udev_dorules "${S}"/install_files/udev/99-razer.rules
	exeinto "$(get_udevdir)"
	doexe "${S}"/install_files/udev/razer_mount

	# Install configuration example so that the daemon does not complain.
	insinto /usr/share/${PN}
	newins "${S}"/daemon/resources/razer.conf razer.conf.example

	if use daemon ; then
		# dbus service
		insinto /usr/share/dbus-1/services
		doins "${S}"/daemon/org.razer.service

		# systemd unit
		systemd_douserunit "${S}"/daemon/${PN}-daemon.service

		# xdg autostart example file
		insinto /usr/share/${PN}
		doins "${S}"/install_files/desktop/openrazer-daemon.desktop

		# Manpages
		doman "${S}"/daemon/resources/man/${PN}-daemon.8
		doman "${S}"/daemon/resources/man/razer.conf.5
	fi
}

pkg_postinst() {
	linux-mod_pkg_postinst
	udev_reload

	if use daemon ; then
		xdg_icon_cache_update
		xdg_desktop_database_update
	fi

	readme.gentoo_print_elog
}

pkg_postrm() {
	linux-mod_pkg_postrm
	udev_reload

	if use daemon ; then
		xdg_icon_cache_update
		xdg_desktop_database_update
	fi
}