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

EAPI=8
PYTHON_COMPAT=( python3_{10..12} )

inherit flag-o-matic gnome.org gnome2-utils meson python-any-r1 virtualx xdg

DESCRIPTION="GNOME's main interface to configure various aspects of the desktop"
HOMEPAGE="https://gitlab.gnome.org/GNOME/gnome-control-center"
SRC_URI+=" https://dev.gentoo.org/~mattst88/distfiles/${PN}-gentoo-logo.svg"
SRC_URI+=" https://dev.gentoo.org/~mattst88/distfiles/${PN}-gentoo-logo-dark.svg"
# Logo is CC-BY-SA-2.5
LICENSE="GPL-2+ CC-BY-SA-2.5"
SLOT="2"
KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~x86"

IUSE="+bluetooth +cups debug elogind +gnome-online-accounts +ibus +input_devices_wacom +kerberos +geolocation networkmanager systemd test wayland"
REQUIRED_USE="
	^^ ( elogind systemd )
" # Theoretically "?? ( elogind systemd )" is fine too, lacking some functionality at runtime,
#   but needs testing if handled gracefully enough

RESTRICT="!test? ( test )"

# kerberos unfortunately means mit-krb5; build fails with heimdal
# display panel requires colord and gnome-settings-daemon[colord]
# wacom panel requires gsd-enums.h from gsd at build time, probably also runtime support
# printer panel requires cups and smbclient (the latter is not patched yet to be separately optional)
# First block is toplevel meson.build deps in order of occurrence (plus deeper deps if in same conditional).
# Second block is dependency() from subdir meson.builds, sorted by directory name occurrence order
DEPEND="
	x11-libs/gtk+:3
	>=net-libs/gnome-online-accounts-3.52.0:=
	>=media-libs/libpulse-2.0[glib]
	>=gui-libs/gtk-4.11.2:4[X,wayland=]
	>=gui-libs/libadwaita-1.4_alpha:1
	>=sys-apps/accountsservice-0.6.39
	>=x11-misc/colord-0.1.34:0=
	>=x11-libs/gdk-pixbuf-2.23.0:2
	>=dev-libs/glib-2.76.6:2
	gnome-base/gnome-desktop:4=
	>=gnome-base/gnome-settings-daemon-47.1[colord,input_devices_wacom?]
	>=gnome-base/gsettings-desktop-schemas-47.1
	dev-libs/libxml2:2
	>=sys-power/upower-0.99.8:=
	>=dev-libs/libgudev-232
	>=x11-libs/libX11-1.8
	>=x11-libs/libXi-1.2
	media-libs/libepoxy
	>=app-crypt/gcr-4.1.0
	>=dev-libs/libpwquality-1.2.2
	>=sys-auth/polkit-0.114
	>=net-print/cups-1.7[dbus]
	>=net-fs/samba-4.0.0[client]
	ibus? ( >=app-i18n/ibus-1.5.2 )
	>=net-libs/libnma-1.10.2
	>=net-misc/networkmanager-1.24.0[modemmanager]
	>=net-misc/modemmanager-0.7.990:=
	net-wireless/gnome-bluetooth:3=
	>=dev-libs/libwacom-1.4:=
	app-crypt/mit-krb5

	x11-libs/cairo[glib]
	>=x11-libs/colord-gtk-0.3.0:=
	media-libs/fontconfig
	gnome-base/libgtop:2=
	>=sys-fs/udisks-2.1.8:2
	app-crypt/libsecret
	net-libs/gnutls:=
	media-libs/gsound

	x11-libs/pango
"

RDEPEND="${DEPEND}
	media-libs/libcanberra[pulseaudio]
	systemd? ( >=sys-apps/systemd-31 )
	elogind? (
		app-admin/openrc-settingsd
		sys-auth/elogind
	)
	x11-themes/adwaita-icon-theme
	>=gnome-extra/gnome-color-manager-3.1.2
	cups? (
		app-admin/system-config-printer
		net-print/cups-pk-helper
	)
	gnome-extra/tecla
	wayland? ( dev-libs/libinput )
	!wayland? (
		>=x11-drivers/xf86-input-libinput-0.19.0
		input_devices_wacom? ( >=x11-drivers/xf86-input-wacom-0.33.0 )
	)
"
# PDEPEND to avoid circular dependency; gnome-session-check-accelerated called by info panel
# gnome-session-2.91.6-r1 also needed so that 10-user-dirs-update is run at login
PDEPEND=">=gnome-base/gnome-session-2.91.6-r1
	networkmanager? ( gnome-extra/nm-applet )" # networking panel can call into nm-connection-editor

# meson.build depends on python unconditionally
BDEPEND="${PYTHON_DEPS}
	dev-libs/libxslt
	app-text/docbook-xsl-stylesheets
	app-text/docbook-xml-dtd:4.2
	x11-base/xorg-proto
	dev-libs/libxml2:2
	dev-util/gdbus-codegen
	dev-util/glib-utils
	>=sys-devel/gettext-0.19.8
	virtual/pkgconfig
	test? (
		$(python_gen_any_dep '
			dev-python/python-dbusmock[${PYTHON_USEDEP}]
		')
		x11-apps/setxkbmap
	)
"

python_check_deps() {
	use test || return 0
	python_has_version "dev-python/python-dbusmock[${PYTHON_USEDEP}]"
}

pkg_setup() {
	python-any-r1_pkg_setup
}

src_prepare() {
	default
	xdg_environment_reset
	# Mark python tests with shebang executable, so that meson will launch them directly, instead
	# of via its own python-single-r1 version, which might not match what we get from python_check_deps
	chmod a+x tests/network/test-network-panel.py tests/datetime/test-datetime.py || die
}

src_configure() {
	# -Werror=strict-aliasing
	# https://bugs.gentoo.org/889008
	# https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/2563
	#
	# Do not trust with LTO either
	append-flags -fno-strict-aliasing
	filter-lto

	local emesonargs=(
		-Ddeprecated-declarations=disabled
		-Ddocumentation=true # manpage
		-Dlocation-services=$(usex geolocation enabled disabled)
		$(meson_use ibus)
		-Dprivileged_group=wheel
		-Dsnap=false
		$(meson_use test tests)
		-Dmalcontent=false # unpackaged
		-Ddistributor_logo=/usr/share/pixmaps/gnome-control-center-gentoo-logo.svg
		-Ddark_mode_distributor_logo=/usr/share/pixmaps/gnome-control-center-gentoo-logo-dark.svg
	)
	meson_src_configure
}

src_test() {
	virtx meson_src_test
}

src_install() {
	meson_src_install
	insinto /usr/share/pixmaps
	doins "${DISTDIR}"/gnome-control-center-gentoo-logo.svg
	doins "${DISTDIR}"/gnome-control-center-gentoo-logo-dark.svg
}

pkg_postinst() {
	xdg_pkg_postinst
	gnome2_schemas_update
}

pkg_postrm() {
	xdg_pkg_postrm
	gnome2_schemas_update
}