Apocrypha

gaze-0.2.6-r1bennypowers

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

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]
	[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]
	[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]
	[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]
	[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]
	[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]
	[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]
	[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]
	[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]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]+spec-1.1.0
	[email protected]+spec-1.1.0
	[email protected]+spec-1.1.0
	[email protected]+spec-1.1.0
	[email protected]+spec-1.1.0
	[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.12
	[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]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]
	[email protected]+zstd.1.5.7
	[email protected]
	[email protected]
	[email protected]
	[email protected]
"

RUST_MIN_VER="1.96.0"

inherit cargo gnome2-utils systemd

DESCRIPTION="Facial authentication for Linux"
HOMEPAGE="
	https://gaze.gundulabs.com
	https://github.com/GunduLabs/Gaze
"
SRC_URI="
	https://github.com/GunduLabs/Gaze/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
	${CARGO_CRATE_URIS}
"

S="${WORKDIR}/${P}"

LICENSE="MIT"
# Dependent crate licenses
LICENSE+=" Apache-2.0 BSD ISC MIT MPL-2.0 Unicode-3.0 ZLIB"
LICENSE+=" || ( Apache-2.0 MIT )"
SLOT="0"
KEYWORDS="~amd64"
IUSE="gnome gui"

RDEPEND="
	app-crypt/tpm2-tss:=
	dev-libs/openssl:=
	media-libs/gst-plugins-base:1.0
	media-libs/gstreamer:1.0
	media-libs/libv4l
	media-libs/opencv:=
	sci-libs/onnxruntime:=
	sys-libs/pam
	gui? (
		gui-libs/gtk:4
		gui-libs/libadwaita:1
	)
	gnome? ( gnome-base/gnome-shell )
"
DEPEND="${RDEPEND}"
BDEPEND="
	llvm-core/clang
	virtual/pkgconfig
"

RESTRICT="test"

QA_FLAGS_IGNORED="
	usr/bin/gazed
	usr/bin/gaze
	usr/bin/gaze-gui
	usr/lib*/security/pam_gaze.so
	usr/lib*/security/pam_gaze_grosshack.so
"

src_prepare() {
	default
	if ! use gnome; then
		sed -i 's| /etc/dconf/db$||' packaging/config/gazed.service || die
	fi
}

src_configure() {
	cargo_src_configure
}

src_compile() {
	export ORT_LIB_LOCATION="${ESYSROOT}/usr/$(get_libdir)"
	export ORT_PREFER_DYNAMIC_LINK=1

	# Daemon must be built separately from client binaries. The `gaze` crate
	# enables gaze-core's `detection` feature (which pulls in ort/ONNX Runtime).
	# Client binaries use gaze-core with default-features=false to avoid linking
	# ONNX Runtime, whose static constructors require AVX2 and would crash on
	# older CPUs.
	local target_args=( -p gaze )
	set -- "${CARGO}" build $(usex debug "" --release) ${ECARGO_ARGS[@]} "${target_args[@]}"
	einfo "${@}"
	cargo_env "${@}" || die "daemon build failed"

	target_args=( -p gaze-cli -p pam-gaze -p pam-gaze-grosshack )
	if use gui; then
		target_args+=( -p gaze-gui )
	fi
	set -- "${CARGO}" build $(usex debug "" --release) ${ECARGO_ARGS[@]} "${target_args[@]}"
	einfo "${@}"
	cargo_env "${@}" || die "client build failed"
}

src_install() {
	local target_dir
	target_dir=$(cargo_target_dir)

	dobin "${target_dir}/gazed"
	dobin "${target_dir}/gaze"
	use gui && dobin "${target_dir}/gaze-gui"

	exeinto "/usr/$(get_libdir)/security"
	newexe "${target_dir}/libpam_gaze.so" pam_gaze.so
	newexe "${target_dir}/libpam_gaze_grosshack.so" pam_gaze_grosshack.so

	insinto /etc/gaze
	doins packaging/config/config.toml

	insinto /etc/dbus-1/system.d
	doins packaging/config/com.gundulabs.Gaze.conf

	insinto /usr/share/polkit-1/actions
	doins packaging/config/com.gundulabs.gaze.policy

	systemd_dounit packaging/config/gazed.service

	if use gui; then
		domenu packaging/gui/com.gundulabs.Gaze.desktop
		doicon -s scalable packaging/gui/com.gundulabs.Gaze.svg
		insinto /usr/share/metainfo
		doins packaging/gui/com.gundulabs.Gaze.metainfo.xml
	fi

	if use gnome; then
		local extdir="/usr/share/gnome-shell/extensions/[email protected]"
		insinto "${extdir}"
		doins gnome-shell-extension/{metadata.json,extension.js,prefs.js}

		insinto /usr/share/glib-2.0/schemas
		doins packaging/config/org.gnome.shell.extensions.gaze.gschema.xml
	fi
}

pkg_postinst() {
	use gui && xdg_desktop_database_update && xdg_icon_cache_update
	use gnome && gnome2_schemas_update

	elog "The gazed daemon downloads ML models on first use."
	elog "To start: systemctl enable --now gazed"
	elog "To enroll: gaze enroll"
	elog ""
	elog "For TPM-sealed template encryption, set encrypt_templates = true"
	elog "in /etc/gaze/config.toml (requires a TPM 2.0)."
	elog ""
	elog "To enable face auth, add pam_gaze.so to your PAM stack."
	elog "Example /etc/pam.d entry for a lock screen:"
	elog "  auth [success=done default=ignore] pam_gaze.so"
	elog "See https://gaze.gundulabs.com for PAM integration guides."
}

pkg_postrm() {
	use gui && xdg_desktop_database_update && xdg_icon_cache_update
	use gnome && gnome2_schemas_update
}