File fprintd.spec of Package fprintd

#
# spec file for package fprintd
#
# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#

# Systemd 248 and later already comes with the autosuspend hwdb
%if 0%{?suse_version} >= 1550
%define install_fp_udev_hwdb 0
%else
%define install_fp_udev_hwdb 1
%endif

Name:           fprintd
Version:        1.94.10
Release:        0
Summary:        D-Bus service for Fingerprint reader access
License:        GPL-2.0-or-later
Group:          Productivity/Security
URL:            https://fprint.freedesktop.org/
Source0:        https://gitlab.freedesktop.org/libfprint/fprintd/-/archive/v%{version}/%{name}-v%{version}.tar.bz2
Source1:        baselibs.conf
BuildRequires:  gcc-c++
BuildRequires:  gobject-introspection
BuildRequires:  gobject-introspection-devel
BuildRequires:  gtk-doc >= 1.3
BuildRequires:  intltool
BuildRequires:  meson >= 0.56.0
BuildRequires:  pam-devel
BuildRequires:  pkgconfig
BuildRequires:  python3-cairo
BuildRequires:  python3-dbus-python
BuildRequires:  python3-dbusmock
BuildRequires:  python3-libpamtest
BuildRequires:  typelib-1_0-FPrint-2_0
BuildRequires:  pkgconfig(dbus-glib-1)
BuildRequires:  pkgconfig(glib-2.0)
BuildRequires:  pkgconfig(libfprint-2) >= 1.94.9
BuildRequires:  pkgconfig(libsystemd)
BuildRequires:  pkgconfig(pam_wrapper)
BuildRequires:  pkgconfig(polkit-gobject-1)
BuildRequires:  pkgconfig(systemd)
BuildRequires:  pkgconfig(opencv4)
BuildRequires:  doctest-devel 
BuildRequires:  pkgconfig(gusb)
BuildRequires:  pkgconfig(cairo)
BuildRequires:  pkgconfig(pixman-1)
BuildRequires:  pkgconfig(cairo)
BuildRequires:  pkgconfig(nss)
BuildRequires:  pkgconfig(gudev-1.0)
BuildRequires:  pkgconfig(libudev)
BuildRequires:  pkgconfig(udev)

ExcludeArch:    s390 s390x
%{?systemd_requires}

%description
The fprint project provides a central system
to support consumer fingerprint reader devices.

%package pam
Summary:        PAM module for fingerprint authentication
License:        GPL-2.0-or-later
Group:          Productivity/Security
Requires:       %{name} = %{version}
Requires(postun): coreutils
Requires(postun): pam
Requires(postun): pam-config
# on biarch platforms we need to have it before the call of pam-config
Supplements:    modalias(usb:v045Ep00BBd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v045Ep00BCd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v045Ep00BDd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v045Ep00CAd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v0483p2015d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v0483p2016d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v0483p2017d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0903d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0907d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C02d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C03d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C04d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C05d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C06d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C07d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C08d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C09d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C0Ad*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C0Bd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C0Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C0Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C0Ed*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C0Fd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C10d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C11d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C12d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C13d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C14d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C15d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C16d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C17d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C18d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C19d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C1Ad*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C1Bd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C1Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C1Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C1Ed*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C1Fd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C20d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C21d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C22d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C22d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C23d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C24d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C25d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C26d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C27d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C28d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C29d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C2Ad*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C2Bd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C2Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C2Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C2Ed*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C2Fd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C30d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C31d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C32d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C33d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C3Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C42d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C4Bd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C4Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C4Fd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C58d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C63d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C6Ed*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C7Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C7Ed*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C82d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C88d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v04F3p0C8Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v05BAp0007d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v05BAp0008d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v05BAp000Ad*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v061Ap0110d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp00BDd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp00C2d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp00DFd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp00F0d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp00F9d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp00FCd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp0100d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp0103d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp0104d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp0123d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp0126d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp0129d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp015Fd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v06CBp0168d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1600d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1660d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1680d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1681d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1682d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1683d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1684d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1685d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1686d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1687d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1688d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp1689d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp168Ad*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp168Bd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp168Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp168Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp168Ed*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp168Fd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2500d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2550d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2580d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2660d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2680d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2681d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2682d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2683d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2684d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2685d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2686d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2687d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2688d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2689d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp268Ad*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp268Bd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp268Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp268Dd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp268Ed*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp268Fd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2691d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp2810d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp5501d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v08FFp5731d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v10A5pA305d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v10A5pD205d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v10A5pD805d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v10A5pDA04d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v10A5pFFE0d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0001d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0005d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0008d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0010d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0011d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0015d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0017d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0018d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0050d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v138Ap0091d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v147Ep1000d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v147Ep1001d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v147Ep2016d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v147Ep2020d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v147Ep3001d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v1C7Ap0570d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v1C7Ap0571d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v1C7Ap0603d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p5840d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6014d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6094d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p609Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p60A2d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p631Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p634Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6384d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p639Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p63ACd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p63BCd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p63CCd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6496d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6584d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p658Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6592d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6594d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p659Ad*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p659Cd*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v27C6p6A94d*dc*dsc*dp*ic*isc*ip*)
Supplements:    modalias(usb:v298Dp1010d*dc*dsc*dp*ic*isc*ip*)
Obsoletes:      pam_fprint < 0.2-7
Provides:       pam_fprint = %{version}-%{release}
Obsoletes:      pam_thinkfinger < 0.3
Provides:       pam_thinkfinger = 0.3
Obsoletes:      pam_fp < 0.1
Provides:       pam_fp = 0.1

%description pam
PAM module that uses the fprintd D-Bus service for fingerprint
authentication.

%package devel
Summary:        Development files for %{name}
License:        GFDL-1.1-or-later
Group:          Development/Languages/C and C++
Requires:       %{name} = %{version}
Requires:       gtk-doc
BuildArch:      noarch

%description devel
Development documentation for fprintd, the D-Bus service for
fingerprint readers access.

%package doc
Summary:        Development documents of fprintd
License:        GPL-2.0-or-later
Group:          Productivity/Security
Requires:       %{name} = %{version}
BuildArch:      noarch

%description doc
This package contains Development documents for fprintd

%lang_package

%prep
%autosetup -p1 -n %{name}-v%{version}

%build
%meson \
	-Dgtk-examples=false \
	-Dinstalled-tests=false \
%if %{install_fp_udev_hwdb}
	-Dudev_hwdb=enabled \
%else
	-Dudev_hwdb=disabled \
%endif
	%{nil}
%meson_build

%install
%meson_install

install -d %{buildroot}%{_sbindir}
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}
find %{buildroot} -type f -name "*.la" -delete -print
mkdir -p %{buildroot}/%{_localstatedir}/lib/fprint


%pre
%service_add_pre fprintd.service

%post
%service_add_post fprintd.service

%preun
%service_del_preun fprintd.service

%postun
%service_del_postun fprintd.service

%postun pam
if [ "$1" = "0" ]; then
        %{_sbindir}/pam-config -d --fprintd ||:
fi


%files
# Licencia
%license COPYING

# Binarios
%{_sbindir}/rc%{name}

# Directorio de estado
%{_localstatedir}/lib/fprint

# PAM módulo (condicional)
%if 0%{?build_pam} == 1
%{_pam_moduledir}/pam_fprintd.so
%{_mandir}/man8/pam_fprintd.8%{?ext_man}
%endif

# GTK-doc/documentación mínima (condicional)
%if 0%{?build_doc} == 1
%{_datadir}/gtk-doc/html/%{name}
%endif
/usr/lib/udev/rules.d/70-libfprint-2.rules

# ------------------------
# Development files
# ------------------------
%files devel
/usr/include/libfprint-2/*
/usr/lib64/libfprint-2.so*
/usr/lib64/pkgconfig/libfprint-2.pc

# ------------------------
# Documentation files
# ------------------------
%files doc
/usr/lib64/girepository-1.0/FPrint-2.0.typelib
/usr/share/gir-1.0/FPrint-2.0.gir
/usr/share/gtk-doc/html/libfprint-2/*

openSUSE Build Service is sponsored by