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

EAPI=8

inherit gnome2-utils meson pam systemd verify-sig virtualx xdg

MY_PN="${PN%-shell}"
MY_P="${MY_PN}-${PV}"
DESCRIPTION="Pure Wayland shell for mobile devices"
HOMEPAGE="https://gitlab.gnome.org/World/Phosh/phosh/"
SRC_URI="https://sources.phosh.mobi/releases/${MY_PN}/${MY_P}.tar.xz
	verify-sig? ( https://sources.phosh.mobi/releases/${MY_PN}/${MY_P}.tar.xz.asc )"
S="${WORKDIR}/${MY_P}"

LICENSE="CC0-1.0 CC-BY-SA-4.0 GPL-2+ GPL-3+ LGPL-2+ LGPL-2.1+ MIT"
SLOT="0"
KEYWORDS="~amd64 ~arm64"
IUSE="elogind gtk-doc introspection +lockscreen-plugins man test test-full"
REQUIRED_USE="
	gtk-doc? ( introspection )
	test? ( lockscreen-plugins )
"

COMMON_DEPEND="
	>=app-crypt/gcr-3.7.5:0[introspection?]
	app-crypt/libsecret
	>=dev-libs/feedbackd-0.4.0
	dev-libs/fribidi
	>=dev-libs/glib-2.76:2
	dev-libs/gmobile
	dev-libs/libgudev:=
	dev-libs/libical:=
	>=dev-libs/wayland-1.14
	>=gnome-base/gnome-desktop-3.26:3
	>=gnome-base/gsettings-desktop-schemas-42
	>=gnome-extra/evolution-data-server-3.33.1:=
	>=gui-libs/libhandy-1.1.90:1[introspection?]
	media-libs/libpulse[glib]
	media-sound/callaudiod
	net-libs/libsoup:3.0
	net-misc/modemmanager:=
	>=net-misc/networkmanager-1.14[introspection?]
	>=net-wireless/gnome-bluetooth-46.0:3
	sys-apps/dbus
	>=sys-auth/polkit-0.122
	sys-libs/pam
	>=sys-power/upower-0.99.1:=
	x11-libs/cairo
	x11-libs/gdk-pixbuf
	x11-libs/pango
	>=x11-libs/gtk+-3.22:3[introspection?,wayland]
	elogind? ( >=sys-auth/elogind-241 )
	!elogind? ( >=sys-apps/systemd-241:= )
	lockscreen-plugins? (
		app-text/evince:=
		>=gui-libs/gtk-4.12:4
		>=gui-libs/libadwaita-1.5:1
	)
"
RUNTIME_DEPEND="
	gnome-base/gnome-shell
	virtual/freedesktop-icon-theme
	x11-themes/gnome-themes-standard
"

DEPEND="
	${COMMON_DEPEND:?}
	>=dev-libs/wayland-protocols-1.12
	test-full? ( ${RUNTIME_DEPEND:?} )
"
RDEPEND="
	${COMMON_DEPEND:?}
	${RUNTIME_DEPEND:?}
	!elogind? ( sys-libs/libcap )
"
BDEPEND="
	dev-libs/glib:2
	dev-libs/libxml2
	dev-util/gdbus-codegen
	dev-util/glib-utils
	dev-util/wayland-scanner
	sys-devel/gettext
	gtk-doc? ( dev-util/gi-docgen )
	man? ( dev-python/docutils )
	test-full? ( >=gui-wm/phoc-0.36.0-r1 )
	verify-sig? ( sec-keys/openpgp-keys-phosh )
"

VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/phosh.asc"

src_configure() {
	local emesonargs=(
		-Dcompositor="${EPREFIX}"/usr/bin/phoc
		-Dbindings-lib=true
		-Dtools=true
		-Dquick-setting-plugins=true
		$(meson_use gtk-doc gtk_doc)
		$(meson_use introspection)
		$(meson_use lockscreen-plugins)
		$(meson_use man)
		$(meson_use test tests)
		$(meson_feature test-full phoc_tests)
	)
	meson_src_configure
}

src_test() {
	my_src_test() {
		local -x LC_ALL="C.UTF-8"
		local -x WLR_RENDERER="pixman"
		local -x PHOSH_TEST_PHOC_INI="${T}/phoc.ini"

		meson_src_test --suite unit || return 1
		if use test-full; then
			meson_src_test --suite integration || return 1
		fi
	}

	# Xwayland breaks "phosh:integration / shell", pollutes /tmp
	cat data/phoc.ini - > "${T}"/phoc.ini <<- EOF || die
		[core]
		xwayland=false
	EOF

	virtx my_src_test
}

src_install() {
	meson_src_install
	rm -f "${ED}"/usr/$(get_libdir)/libphosh*.a

	pamd_mimic system-local-login phosh auth account session
	systemd_douserunit data/phosh.service

	if use gtk-doc; then
		mkdir -p "${ED}"/usr/share/gtk-doc/html/ || die
		mv "${ED}"/usr/share/doc/${MY_PN}-${SLOT} "${ED}"/usr/share/gtk-doc/html/ || die
	fi
}

phosh_giomodule_cache_update() {
	local plugins_dir
	plugins_dir=$(pkg-config --variable=lockscreen_plugins_dir phosh-plugins) || return 1

	ebegin "Updating GIO modules cache"
	gio-querymodules "${plugins_dir}"
	eend $?
}

pkg_postinst() {
	xdg_pkg_postinst
	gnome2_schemas_update
	phosh_giomodule_cache_update
}

pkg_postrm() {
	xdg_pkg_postrm
	gnome2_schemas_update
	phosh_giomodule_cache_update
}