From 9d44753b9ce0af983c296ff1a2b97ea04bca55ef Mon Sep 17 00:00:00 2001 From: Ward from fusion-voyager-3 Date: Sun, 17 Mar 2024 16:34:25 +0300 Subject: [PATCH] initial commit --- debian/README.source | 10 + debian/changelog | 6 +- debian/control | 165 ++- debian/copyright | 45 + debian/docs | 2 + debian/gbp-post-import-hook.sh | 8 + debian/gbp.conf | 17 + debian/gir1.2-fprint-2.0.install | 1 + debian/libfprint-2-2.install | 3 + debian/libfprint-2-2.lintian-overrides | 3 + debian/libfprint-2-2.postinst | 315 ++++++ debian/libfprint-2-2.postinst.in | 17 + debian/libfprint-2-2.symbols | 94 ++ debian/libfprint-2-dev.install | 4 + debian/libfprint-2-doc.install | 1 + debian/libfprint-2-tests.install | 2 + debian/rules | 95 +- debian/scripts/get_pwd.sh | 2 - debian/update-udev-triggers.sh | 32 + debian/upstream/metadata | 4 + debian/watch | 4 + main.sh | 8 +- patches/469.patch | 1002 +++++++++++++++++ patches/build-Look-for-sh-just-once.patch | 70 ++ ...st-if-the-test-requires-it-during-in.patch | 36 + patches/series | 3 + 26 files changed, 1849 insertions(+), 100 deletions(-) create mode 100644 debian/README.source create mode 100644 debian/docs create mode 100755 debian/gbp-post-import-hook.sh create mode 100644 debian/gbp.conf create mode 100644 debian/gir1.2-fprint-2.0.install create mode 100644 debian/libfprint-2-2.install create mode 100644 debian/libfprint-2-2.lintian-overrides create mode 100644 debian/libfprint-2-2.postinst create mode 100644 debian/libfprint-2-2.postinst.in create mode 100644 debian/libfprint-2-2.symbols create mode 100644 debian/libfprint-2-dev.install create mode 100644 debian/libfprint-2-doc.install create mode 100644 debian/libfprint-2-tests.install delete mode 100755 debian/scripts/get_pwd.sh create mode 100755 debian/update-udev-triggers.sh create mode 100644 debian/upstream/metadata create mode 100644 debian/watch create mode 100644 patches/469.patch create mode 100644 patches/build-Look-for-sh-just-once.patch create mode 100644 patches/build-tests-Skip-a-test-if-the-test-requires-it-during-in.patch create mode 100644 patches/series diff --git a/debian/README.source b/debian/README.source new file mode 100644 index 0000000..1a73d01 --- /dev/null +++ b/debian/README.source @@ -0,0 +1,10 @@ +The libfprint-2-2 postinst script calls udevadmin trigger for all the supported +USB readers. The list of readers used in that file is generated using the gbp +import hook when `gbp import-orig` (via --uscan or with a tarball) is used. + +Alternatively it can be called manually by using: + + GBP_SOURCES_DIR=. debian/update-udev-triggers.sh + +When preparing a new upstream release, this script should be called against the +upstream provided .hwdb file. diff --git a/debian/changelog b/debian/changelog index 328bc5c..923e83f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,5 @@ -upstream-name (pkgver-pkgrel) distro_codename; urgency=medium +libfprint (1:1.94.7-100pika1) pikauwu; urgency=medium - * Initial release. (Closes: #nnnn) + * New upstream release - -- ferreo Wed, 18 Jan 2023 21:48:14 +0000 + -- Marco Trevisan (Treviño) Wed, 23 Aug 2023 01:11:51 +0200 diff --git a/debian/control b/debian/control index 0bcd8e0..77ee6a3 100644 --- a/debian/control +++ b/debian/control @@ -1,19 +1,150 @@ -Source: upstream-name -Section: admin +Source: libfprint Priority: optional -Maintainer: name -Standards-Version: 4.6.1 -Build-Depends: debhelper-compat (= 13) -Rules-Requires-Root: no +Section: libs +Maintainer: FingerForce Team +Uploaders: Ulises Vitulli , + Marco Trevisan +Build-Depends: debhelper-compat (= 13), + gir1.2-gobject-2.0-dev , + gir1.2-gio-2.0-dev , + gobject-introspection, + gtk-doc-tools, + libcairo-dev , + libgirepository1.0-dev, + libglib2.0-dev, + libgudev-1.0-dev, + libgusb-dev, + libnss3-dev, + libpixman-1-dev, + meson, + python3 , + python3-cairo , + python3-gi , + systemd-dev, + umockdev +Build-Depends-Indep: libglib2.0-doc , libgusb-doc +Standards-Version: 4.6.2 +Homepage: https://www.freedesktop.org/wiki/Software/fprint/libfprint +Vcs-Browser: https://salsa.debian.org/debian/libfprint +Vcs-Git: https://salsa.debian.org/debian/libfprint.git -Package: pkgname1 -Architecture: linux-any -# Delete any of these lines if un-used -Depends: ${misc:Depends}, depends -Recommends: high priority optdepends -Conflicts: conflicts -Suggests: low priority optdepends -Breaks: also conflicts!? -Provides: provides -# -Description: pkgdesc +Package: libfprint-2-2 +Architecture: any +Depends: ${misc:Depends}, ${shlibs:Depends} +Pre-Depends: ${misc:Pre-Depends} +Description: async fingerprint library of fprint project, shared libraries + The fprint project aims to support for consumer fingerprint reader devices. + . + Previously, Linux support for such devices has been scattered amongst different + projects (many incomplete) and inconsistent in that application developers + would have to implement support for each type of fingerprint reader separately. + The idea is to change that by providing a central system to support all the + fingerprint readers as it's possible to get hands on. + . + libfprint is the centre of efforts, this component does the dirty job of + talking to fingerprint reading devices, and processing fingerprint data. + . + This library depends on the new libusb, which performs asynchronous callbacks, + allowing fprint to perform non-blocking device tasks. + . + This package provides shared libraries. + +Package: libfprint-2-dev +Section: libdevel +Architecture: any +Multi-Arch: same +Depends: gir1.2-fprint-2.0 (= ${binary:Version}), + libfprint-2-2 (= ${binary:Version}), + ${misc:Depends}, + ${gir:Depends}, +Provides: ${gir:Provides}, +Suggests: libfprint-2-doc +Description: async fingerprint library of fprint project, development headers + The fprint project aims to support for consumer fingerprint reader devices. + . + Previously, Linux support for such devices has been scattered amongst different + projects (many incomplete) and inconsistent in that application developers + would have to implement support for each type of fingerprint reader separately. + The idea is to change that by providing a central system to support all the + fingerprint readers as it's possible to get hands on. + . + libfprint is the centre of efforts, this component does the dirty job of + talking to fingerprint reading devices, and processing fingerprint data. + . + This library depends on the new libusb, which performs asynchronous callbacks, + allowing fprint to perform non-blocking device tasks. + . + This package provides development headers. + +Package: libfprint-2-doc +Section: doc +Architecture: all +Multi-Arch: foreign +Depends: ${misc:Depends} +Description: async fingerprint library of fprint project, API documentation + The fprint project aims to support for consumer fingerprint reader devices. + . + Previously, Linux support for such devices has been scattered amongst different + projects (many incomplete) and inconsistent in that application developers + would have to implement support for each type of fingerprint reader separately. + The idea is to change that by providing a central system to support all the + fingerprint readers as it's possible to get hands on. + . + libfprint is the centre of efforts, this component does the dirty job of + talking to fingerprint reading devices, and processing fingerprint data. + . + This library depends on the new libusb, which performs asynchronous callbacks, + allowing fprint to perform non-blocking device tasks. + . + This package provides the API documentation. + +Package: gir1.2-fprint-2.0 +Architecture: any +Multi-Arch: same +Section: introspection +Depends: ${gir:Depends}, ${misc:Depends}, ${shlibs:Depends} +Pre-Depends: ${misc:Pre-Depends} +Description: async fingerprint library of fprint project, gir bindings + The fprint project aims to support for consumer fingerprint reader devices. + . + Previously, Linux support for such devices has been scattered amongst different + projects (many incomplete) and inconsistent in that application developers + would have to implement support for each type of fingerprint reader separately. + The idea is to change that by providing a central system to support all the + fingerprint readers as it's possible to get hands on. + . + libfprint is the centre of efforts, this component does the dirty job of + talking to fingerprint reading devices, and processing fingerprint data. + . + This library depends on the new libusb, which performs asynchronous callbacks, + allowing fprint to perform non-blocking device tasks. + . + This package can be used by other packages using the GIRepository format to + generate dynamic bindings. + +Package: libfprint-2-tests +Architecture: any +Depends: gir1.2-fprint-2.0 (= ${binary:Version}), + libfprint-2-2 (= ${binary:Version}), + python3, + python3-cairo, + python3-gi, + umockdev, + ${misc:Depends}, ${shlibs:Depends} +Description: Tests for async fingerprint library of fprint project + The fprint project aims to support for consumer fingerprint reader devices. + . + Previously, Linux support for such devices has been scattered amongst different + projects (many incomplete) and inconsistent in that application developers + would have to implement support for each type of fingerprint reader separately. + The idea is to change that by providing a central system to support all the + fingerprint readers as it's possible to get hands on. + . + libfprint is the centre of efforts, this component does the dirty job of + talking to fingerprint reading devices, and processing fingerprint data. + . + This library depends on the new libusb, which performs asynchronous callbacks, + allowing fprint to perform non-blocking device tasks. + . + This package contains test programs, designed to be run as part of a + regression testsuite. diff --git a/debian/copyright b/debian/copyright index e69de29..2613559 100644 --- a/debian/copyright +++ b/debian/copyright @@ -0,0 +1,45 @@ +This package was debianized by Ulises Vitulli on +Fri, 19 Sep 2008 05:14:30 -0300. + +It was downloaded from + +Upstream Authors, and Copyright: + +Copyright © 2007 Daniel Drake +Copyright © 2006-2007 Timo Hoenig +Copyright © 2006 Pavel Machek +Copyright © 1999 Erik Walthinsen +Copyright © 2004,2006 Thomas Vander Stichele +Copyright © 2007 Cyrille Bagard +Copyright © 2007 Vasily Khoruzhick +Copyright © 2007 Jan-Michael Brummer +Copyright © 2007 Anthony Bretaudeau + + +License: +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +The files under libfprint/nbis directory has this license: + +This software was developed at the National Institute of Standards and +Technology (NIST) by employees of the Federal Government in the course +of their official duties. Pursuant to title 17 Section 105 of the +United States Code, this software is not subject to copyright protection +and is in the public domain. NIST assumes no responsibility whatsoever for +its use by other parties, and makes no guarantees, expressed or implied, +about its quality, reliability, or any other characteristic. + +The Debian packaging is © 2008, Ulises Vitulli and is +licensed under the LGPL v2.1, see `/usr/share/common-licenses/LGPL-2.1'. diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..8913f46 --- /dev/null +++ b/debian/docs @@ -0,0 +1,2 @@ +NEWS +README.md diff --git a/debian/gbp-post-import-hook.sh b/debian/gbp-post-import-hook.sh new file mode 100755 index 0000000..3d6d1dc --- /dev/null +++ b/debian/gbp-post-import-hook.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +dch -v"$GBP_DEBIAN_VERSION" "New upstream release" +git add debian/changelog +debcommit + +debian/update-udev-triggers.sh diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..c532069 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,17 @@ +[DEFAULT] +pristine-tar = True +debian-branch = debian +upstream-vcs-tag = v%(version)s + +[buildpackage] +sign-tags = True + +[dch] +multimaint-merge = True + +[import-orig] +postimport = debian/gbp-post-import-hook.sh + +[pq] +patch-numbers = False + diff --git a/debian/gir1.2-fprint-2.0.install b/debian/gir1.2-fprint-2.0.install new file mode 100644 index 0000000..d801923 --- /dev/null +++ b/debian/gir1.2-fprint-2.0.install @@ -0,0 +1 @@ +usr/lib/${DEB_HOST_MULTIARCH}/girepository-1.0/FPrint-*.typelib diff --git a/debian/libfprint-2-2.install b/debian/libfprint-2-2.install new file mode 100644 index 0000000..8dd1e0a --- /dev/null +++ b/debian/libfprint-2-2.install @@ -0,0 +1,3 @@ +usr/lib/udev/hwdb.d/ +usr/lib/udev/rules.d/ +usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9].so.* diff --git a/debian/libfprint-2-2.lintian-overrides b/debian/libfprint-2-2.lintian-overrides new file mode 100644 index 0000000..f89cb21 --- /dev/null +++ b/debian/libfprint-2-2.lintian-overrides @@ -0,0 +1,3 @@ +# For security reasons, we don't want the fingerprint readers to be accessible +# by unprivileged users +udev-rule-missing-uaccess diff --git a/debian/libfprint-2-2.postinst b/debian/libfprint-2-2.postinst new file mode 100644 index 0000000..d77fb5d --- /dev/null +++ b/debian/libfprint-2-2.postinst @@ -0,0 +1,315 @@ +#!/bin/sh + +set -e + +#DEBHELPER# + +if [ "$1" = "configure" -o "$1" = "upgrade" ] && command -V udevadm >/dev/null 2>&1; then + # apply hwdb rules at package installation, see + # + # NOTA BENE: after the DEBHELPER section since dh_installudev + # adds stuff there + # The devices ID list is auto-generated using the gbp postimport hook + # see debian/README.sources for more details. + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1600 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1660 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1680 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1681 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1682 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1683 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1684 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1685 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1686 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1687 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1688 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=1689 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168a || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168b || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168c || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168d || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168e || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=168f || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2500 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2580 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2550 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2810 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2660 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2680 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2681 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2682 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2683 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2684 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2685 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2686 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2687 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2688 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2689 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268a || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268b || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268c || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268d || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268e || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=268f || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=2691 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=5731 || true + udevadm trigger --action=add --attr-match=idVendor=08ff --attr-match=idProduct=5501 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0570 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0571 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0582 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=05a1 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0903 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0907 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c01 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c02 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c03 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c04 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c05 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c06 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c07 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c08 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c09 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0a || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0b || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0c || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0e || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c0f || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c10 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c11 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c12 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c13 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c14 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c15 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c16 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c17 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c18 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c19 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1a || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1b || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1c || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1e || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c1f || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c20 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c21 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c22 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c23 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c24 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c25 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c26 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c27 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c28 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c29 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2a || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2b || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2c || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2e || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c2f || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c30 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c31 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c32 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c33 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c3d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c42 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4b || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4f || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c63 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c6e || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c58 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c7d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c7e || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c82 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c88 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c8c || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c8d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c99 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0603 || true + udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=9e48 || true + udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=d979 || true + udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=a959 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=ffe0 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=a305 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=da04 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=d805 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=d205 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5840 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6014 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6092 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6094 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=609c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=60a2 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=60a4 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=60bc || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6304 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=631c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=633c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=634c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6384 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=639c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=63ac || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=63bc || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=63cc || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6496 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6582 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6584 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=658c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6592 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6594 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=659a || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=659c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6a94 || true + udevadm trigger --action=add --attr-match=idVendor=298d --attr-match=idProduct=1010 || true + udevadm trigger --action=add --attr-match=idVendor=0bda --attr-match=idProduct=5813 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00bd || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00df || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00f9 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00fc || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00c2 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0100 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00f0 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0103 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0123 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0124 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0126 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0129 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0168 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=015f || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0104 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0173 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0106 || true + udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=2016 || true + udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=1000 || true + udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=1001 || true + udevadm trigger --action=add --attr-match=idVendor=0483 --attr-match=idProduct=2015 || true + udevadm trigger --action=add --attr-match=idVendor=0483 --attr-match=idProduct=2017 || true + udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=3001 || true + udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=2020 || true + udevadm trigger --action=add --attr-match=idVendor=045e --attr-match=idProduct=00bc || true + udevadm trigger --action=add --attr-match=idVendor=045e --attr-match=idProduct=00bd || true + udevadm trigger --action=add --attr-match=idVendor=045e --attr-match=idProduct=00ca || true + udevadm trigger --action=add --attr-match=idVendor=05ba --attr-match=idProduct=0007 || true + udevadm trigger --action=add --attr-match=idVendor=05ba --attr-match=idProduct=0008 || true + udevadm trigger --action=add --attr-match=idVendor=05ba --attr-match=idProduct=000a || true + udevadm trigger --action=add --attr-match=idVendor=061a --attr-match=idProduct=0110 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0050 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0001 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0005 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0008 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0010 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0011 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0015 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0017 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0018 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0091 || true + udevadm trigger --action=add --attr-match=idVendor=047d --attr-match=idProduct=00f2 || true + udevadm trigger --action=add --attr-match=idVendor=04e8 --attr-match=idProduct=730b || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=036b || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c00 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c4c || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c57 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c5e || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c5a || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c6c || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c70 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c72 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=0c77 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=2706 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3032 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3057 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3104 || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=310d || true + udevadm trigger --action=add --attr-match=idVendor=04f3 --attr-match=idProduct=3128 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0081 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=0088 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=008a || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=009a || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=009b || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00a2 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00a8 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00b7 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00bb || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00be || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00c4 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00cb || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00c9 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00d8 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00da || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00dc || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00e4 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00e7 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00e9 || true + udevadm trigger --action=add --attr-match=idVendor=06cb --attr-match=idProduct=00fd || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5801 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5805 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5834 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5840 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5841 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5842 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5843 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5844 || true + udevadm trigger --action=add --attr-match=idVendor=0a5c --attr-match=idProduct=5845 || true + udevadm trigger --action=add --attr-match=idVendor=0bda --attr-match=idProduct=5812 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=0007 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=9200 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=9800 || true + udevadm trigger --action=add --attr-match=idVendor=10a5 --attr-match=idProduct=e340 || true + udevadm trigger --action=add --attr-match=idVendor=1188 --attr-match=idProduct=9545 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0007 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003a || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003c || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003d || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=003f || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0090 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0092 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0094 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=0097 || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=009d || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=00ab || true + udevadm trigger --action=add --attr-match=idVendor=138a --attr-match=idProduct=00a6 || true + udevadm trigger --action=add --attr-match=idVendor=147e --attr-match=idProduct=1002 || true + udevadm trigger --action=add --attr-match=idVendor=1491 --attr-match=idProduct=0088 || true + udevadm trigger --action=add --attr-match=idVendor=16d1 --attr-match=idProduct=1027 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0300 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0575 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0576 || true + udevadm trigger --action=add --attr-match=idVendor=1c7a --attr-match=idProduct=0577 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5042 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5110 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5117 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5120 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5125 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5201 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=521d || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5301 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=530c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=532d || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5335 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=533c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5381 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5385 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=538c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=538d || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5395 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5503 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=550a || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=550c || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5584 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=55a2 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=55a4 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=55b4 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5740 || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=5e0a || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=581a || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=589a || true + udevadm trigger --action=add --attr-match=idVendor=27c6 --attr-match=idProduct=6382 || true + udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=9338 || true + udevadm trigger --action=add --attr-match=idVendor=2808 --attr-match=idProduct=93a9 || true + udevadm trigger --action=add --attr-match=idVendor=298d --attr-match=idProduct=2020 || true + udevadm trigger --action=add --attr-match=idVendor=298d --attr-match=idProduct=2033 || true + udevadm trigger --action=add --attr-match=idVendor=3538 --attr-match=idProduct=0930 || true + +fi + +exit 0 diff --git a/debian/libfprint-2-2.postinst.in b/debian/libfprint-2-2.postinst.in new file mode 100644 index 0000000..83398aa --- /dev/null +++ b/debian/libfprint-2-2.postinst.in @@ -0,0 +1,17 @@ +#!/bin/sh + +set -e + +#DEBHELPER# + +if [ "$1" = "configure" -o "$1" = "upgrade" ] && command -V udevadm >/dev/null 2>&1; then + # apply hwdb rules at package installation, see + # + # NOTA BENE: after the DEBHELPER section since dh_installudev + # adds stuff there + # The devices ID list is auto-generated using the gbp postimport hook + # see debian/README.sources for more details. +@UDEVADM_TRIGGERS@ +fi + +exit 0 diff --git a/debian/libfprint-2-2.symbols b/debian/libfprint-2-2.symbols new file mode 100644 index 0000000..8e106ae --- /dev/null +++ b/debian/libfprint-2-2.symbols @@ -0,0 +1,94 @@ +libfprint-2.so.2 libfprint-2-2 #MINVER# +* Build-Depends-Package: libfprint-2-dev + LIBFPRINT_2.0.0@LIBFPRINT_2.0.0 1:1.90.1 + fp_context_enumerate@LIBFPRINT_2.0.0 1:1.90.1 + fp_context_get_devices@LIBFPRINT_2.0.0 1:1.90.1 + fp_context_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_context_new@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_capture@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_capture_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_capture_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_clear_storage@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_clear_storage_finish@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_clear_storage_sync@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_close@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_close_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_close_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_delete_print@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_delete_print_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_delete_print_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_enroll@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_enroll_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_enroll_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_error_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_error_quark@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_feature_get_type@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_get_device_id@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_get_driver@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_get_features@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_get_finger_status@LIBFPRINT_2.0.0 1:1.90.4 + fp_device_get_name@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_get_nr_enroll_stages@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_get_scan_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_get_temperature@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_has_feature@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_has_storage@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_identify@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_identify_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_identify_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_is_open@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_list_prints@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_list_prints_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_list_prints_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_open@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_open_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_open_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_resume@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_resume_finish@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_resume_sync@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_retry_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_retry_quark@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_supports_capture@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_supports_identify@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_suspend@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_suspend_finish@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_suspend_sync@LIBFPRINT_2.0.0 1:1.94.1 + fp_device_type_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_verify@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_verify_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_device_verify_sync@LIBFPRINT_2.0.0 1:1.90.1 + fp_finger_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_finger_status_flags_get_type@LIBFPRINT_2.0.0 1:1.90.4 + fp_image_detect_minutiae@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_detect_minutiae_finish@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_device_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_get_binarized@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_get_data@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_get_height@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_get_minutiae@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_get_ppmm@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_get_width@LIBFPRINT_2.0.0 1:1.90.1 + fp_image_new@LIBFPRINT_2.0.0 1:1.90.1 + fp_minutia_get_coords@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_compatible@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_deserialize@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_equal@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_description@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_device_id@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_device_stored@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_driver@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_enroll_date@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_finger@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_image@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_get_username@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_new@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_serialize@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_set_description@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_set_enroll_date@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_set_finger@LIBFPRINT_2.0.0 1:1.90.1 + fp_print_set_username@LIBFPRINT_2.0.0 1:1.90.1 + fp_scan_type_get_type@LIBFPRINT_2.0.0 1:1.90.1 + fp_temperature_get_type@LIBFPRINT_2.0.0 1:1.94.1 diff --git a/debian/libfprint-2-dev.install b/debian/libfprint-2-dev.install new file mode 100644 index 0000000..377615d --- /dev/null +++ b/debian/libfprint-2-dev.install @@ -0,0 +1,4 @@ +usr/include/libfprint-[0-9]/*.h +usr/lib/${DEB_HOST_MULTIARCH}/libfprint-[0-9].so +usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/libfprint-[0-9].pc +usr/share/gir-1.0/FPrint-*.gir diff --git a/debian/libfprint-2-doc.install b/debian/libfprint-2-doc.install new file mode 100644 index 0000000..41cae7c --- /dev/null +++ b/debian/libfprint-2-doc.install @@ -0,0 +1 @@ +usr/share/gtk-doc/*/libfprint-* diff --git a/debian/libfprint-2-tests.install b/debian/libfprint-2-tests.install new file mode 100644 index 0000000..8b3d0ba --- /dev/null +++ b/debian/libfprint-2-tests.install @@ -0,0 +1,2 @@ +usr/libexec/installed-tests/libfprint-[0-9] +usr/share/installed-tests/libfprint-[0-9] diff --git a/debian/rules b/debian/rules index ed40aff..787a8e5 100755 --- a/debian/rules +++ b/debian/rules @@ -1,80 +1,25 @@ -#! /usr/bin/make -f +#!/usr/bin/make -f -## See debhelper(7) (uncomment to enable). -## Output every command that modifies files on the build system. -export DH_VERBOSE = 1 +export DPKG_GENSYMBOLS_CHECK_LEVEL = 2 -## === Set paths env vars === +BUILDDIR = $(CURDIR)/obj-$(DEB_HOST_GNU_TYPE) -## Source directory, called upon by $(srcdir) -srcdir = $(shell debian/scripts/get_pwd.sh) -## The Root of package number one, called upon by $(pkgdir1) -pkgdir1 = $(srcdir)/debian/pkgdir1 -## The Root of package number two, you can add as many of these as you like -pkgdir2 = $(srcdir)/debian/pkgdir2 +# Configuration arguments +CONFIG_ARGS = \ + -Dudev_hwdb=enabled \ + -Dudev_rules=enabled \ + -Ddrivers=all \ + -Dgtk-examples=false -## If building a singular package you can remove the number, and as you guessed you call upon it with $(pkgdir) -# pkgdir = $(srcdir)/debian/pkgdir - -## === End end of region === - -## === the chain of command === -## debuild runs a chain of dh functions in the following order: -## dh_testdir -## dh_clean -## dh_auto_clean -## dh_update_autotools_config -## dh_autoreconf -## dh_auto_configure -## dh_prep -## dh_build -## dh_auto_build -## dh_install -## dh_auto_install -## dh_installdocs -## dh_installchangelogs -## dh_perl -## dh_link -## dh_strip_nondeterminism -## dh_compress -## dh_fixperms -## dh_missing -## dh_dwz -## dh_strip -## dh_makeshlibs -## dh_shlibdeps -## dh_installdeb -## dh_gencontrol -## but you are most likely to only need to override the following: -## dh_clean -## dh_auto_configure -## dh_build -## dh_install - -## === End end of region === - -## === overriding dh functions === -## by default all dh functions will run a specific command based on the build system selected by "dh $@" -## if you have a makefile that does everything you need this is fine, -## but most likely you have no MakeFile and you want to add your own commands -## Note : overrides must be places above %: -## So here's a few examples: - -## overriding dh_clean to make it not delete rust vendor files: -#override_dh_clean: -# echo "disabled" - -## overriding dh_auto_configure to add custom configs: -#override_dh_auto_configure: -# $(srcdir)/configure -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_DATADIR=/usr/share -DCMAKE_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu -DBUILD_PLUGIN=OFF - -## overriding dh_install to install files to a package: -#override_dh_auto_configure: -# mkdir -p $(pkgdir1)/usr/bin -# cp $(srcdir)/pikman $(pkgdir1)/usr/bin/ - -## === End end of region === - -## This here will start the build: %: - dh $@ + dh $@ --with gir + +override_dh_auto_configure: + dh_auto_configure -- $(CONFIG_ARGS) + +override_dh_auto_test: + dh_auto_test -- -C $(BUILDDIR) --timeout-multiplier 5 + +override_dh_auto_clean: + rm -rf tests/__pycache__ + dh_auto_clean diff --git a/debian/scripts/get_pwd.sh b/debian/scripts/get_pwd.sh deleted file mode 100755 index ef98ce9..0000000 --- a/debian/scripts/get_pwd.sh +++ /dev/null @@ -1,2 +0,0 @@ -#! /bin/sh -env | grep -w "PWD" | cut -c5- diff --git a/debian/update-udev-triggers.sh b/debian/update-udev-triggers.sh new file mode 100755 index 0000000..db2ee81 --- /dev/null +++ b/debian/update-udev-triggers.sh @@ -0,0 +1,32 @@ +#!/bin/bash +set -e + +srcdir="${GBP_SOURCES_DIR:-.}" +debpath="$(dirname "$0")" +autosuspend_file="$srcdir/data/autosuspend.hwdb" +commands_lines=() + +while IFS= read -r line; do + if [[ $line =~ ^usb:v([A-Fa-f0-9]{4})p([A-Fa-f0-9]{4}) ]]; then + vendor="$(echo "${BASH_REMATCH[1]}" | tr '[:upper:]' '[:lower:]')" + product="$(echo "${BASH_REMATCH[2]}" | tr '[:upper:]' '[:lower:]')" + commands_lines+=("\tudevadm trigger --action=add --attr-match=idVendor=$vendor --attr-match=idProduct=$product || true") + fi +done < "$autosuspend_file" + +UDEVADM_TRIGGERS=$( IFS=$'\n'; echo -e "${commands_lines[*]}" ) +export UDEVADM_TRIGGERS + +for i in "$debpath"/libfprint-*.post*.in; do + out="${i%.in}" + perl -pe 's/\@UDEVADM_TRIGGERS\@/`printenv UDEVADM_TRIGGERS`/e' "$i" > "$out" + + if [ -n "$GBP_BRANCH" ]; then + if ! git diff-index --quiet HEAD -- "$out"; then + git add "$out" + dch "${out#$srcdir}: Devices triggers updated" + git add debian/changelog + debcommit + fi + fi +done diff --git a/debian/upstream/metadata b/debian/upstream/metadata new file mode 100644 index 0000000..dfcbfd2 --- /dev/null +++ b/debian/upstream/metadata @@ -0,0 +1,4 @@ +--- +Bug-Database: https://gitlab.freedesktop.org/libfprint/libfprint/-/issues +Bug-Submit: https://gitlab.freedesktop.org/libfprint/libfprint/-/issues/new +Repository-Browse: https://gitlab.freedesktop.org/libfprint/libfprint diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..46a0137 --- /dev/null +++ b/debian/watch @@ -0,0 +1,4 @@ +version=4 + +https://gitlab.freedesktop.org/libfprint/@PACKAGE@/tags?sort=updated_desc \ + archive/v(?:[^/]*)/@PACKAGE@-v(\d\S*)@ARCHIVE_EXT@ diff --git a/main.sh b/main.sh index 4fd7b08..0933955 100755 --- a/main.sh +++ b/main.sh @@ -3,9 +3,11 @@ DEBIAN_FRONTEND=noninteractive # Clone Upstream -mkdir -p ./src-pkg-name -cp -rvf ./debian ./src-pkg-name/ -cd ./src-pkg-name/ +git clone -b v1.94.7 https://gitlab.freedesktop.org/libfprint/libfprint ./libfprintd-2-2 +cp -rvf ./debian ./libfprintd-2-2/ +cd ./libfprintd-2-2/ + +for i in $(cat ../patches/series | grep -v '^#') ; do echo "Applying Patch: $i" && patch -Np1 -i ../patches/$i || bash -c "echo "Applying Patch $i Failed!" && exit 2"; done # Get build deps apt-get build-dep ./ -y diff --git a/patches/469.patch b/patches/469.patch new file mode 100644 index 0000000..8dbb098 --- /dev/null +++ b/patches/469.patch @@ -0,0 +1,1002 @@ +From d6334a7a4ce57092d426c5016aed286c61b3bffb Mon Sep 17 00:00:00 2001 +From: Tamer Hassan +Date: Sat, 9 Mar 2024 12:20:15 +0400 +Subject: [PATCH] egismoc: add 0587 support (also supports 0586 but missing + device file) + +--- + data/autosuspend.hwdb | 1 + + libfprint/drivers/egismoc/egismoc.c | 80 ++++++++- + libfprint/drivers/egismoc/egismoc.h | 7 +- + tests/egismoc-0587/custom.pcapng | Bin 0 -> 92988 bytes + tests/egismoc-0587/custom.py | 156 ++++++++++++++++ + tests/egismoc-0587/device | 270 ++++++++++++++++++++++++++++ + tests/meson.build | 1 + + 7 files changed, 508 insertions(+), 7 deletions(-) + create mode 100644 tests/egismoc-0587/custom.pcapng + create mode 100755 tests/egismoc-0587/custom.py + create mode 100644 tests/egismoc-0587/device + +diff --git a/data/autosuspend.hwdb b/data/autosuspend.hwdb +index 74ac65b0..d8a112b0 100644 +--- a/data/autosuspend.hwdb ++++ b/data/autosuspend.hwdb +@@ -79,6 +79,7 @@ usb:v1C7Ap0571* + + # Supported by libfprint driver egismoc + usb:v1C7Ap0582* ++usb:v1C7Ap0587* + usb:v1C7Ap05A1* + ID_AUTOSUSPEND=1 + ID_PERSIST=0 +diff --git a/libfprint/drivers/egismoc/egismoc.c b/libfprint/drivers/egismoc/egismoc.c +index 336ea53c..97997a2d 100644 +--- a/libfprint/drivers/egismoc/egismoc.c ++++ b/libfprint/drivers/egismoc/egismoc.c +@@ -43,14 +43,20 @@ struct _FpiDeviceEgisMoc + FpiSsm *cmd_ssm; + FpiUsbTransfer *cmd_transfer; + GCancellable *interrupt_cancellable; +- + GPtrArray *enrolled_ids; ++ gint max_enroll_stages; + }; + + G_DEFINE_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FP_TYPE_DEVICE); + + static const FpIdEntry egismoc_id_table[] = { + { .vid = 0x1c7a, .pid = 0x0582, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 }, ++ /* ++ * 0x0586 is supported in the same way as 0587 per user report, but missing submission of device file to be included ++ * ++ * { .vid = 0x1c7a, .pid = 0x0586, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 }, ++ */ ++ { .vid = 0x1c7a, .pid = 0x0587, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 | EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 }, + { .vid = 0x1c7a, .pid = 0x05a1, .driver_data = EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 }, + { .vid = 0, .pid = 0, .driver_data = 0 } + }; +@@ -769,7 +775,7 @@ egismoc_enroll_status_report (FpDevice *device, + enroll_print->stage++; + fp_info ("Partial capture successful. Please touch the sensor again (%d/%d)", + enroll_print->stage, +- EGISMOC_MAX_ENROLL_NUM); ++ self->max_enroll_stages); + fpi_device_enroll_progress (device, enroll_print->stage, enroll_print->print, NULL); + break; + +@@ -849,7 +855,7 @@ egismoc_read_capture_cb (FpDevice *device, + egismoc_enroll_status_report (device, enroll_print, ENROLL_STATUS_RETRY, error); + } + +- if (enroll_print->stage == EGISMOC_ENROLL_TIMES) ++ if (enroll_print->stage == self->max_enroll_stages) + fpi_ssm_next_state (self->task_ssm); + else + fpi_ssm_jump_to_state (self->task_ssm, ENROLL_CAPTURE_SENSOR_RESET); +@@ -1460,6 +1466,71 @@ egismoc_dev_init_handler (FpiSsm *ssm, + NULL); + } + ++static void ++egismoc_probe (FpDevice *device) ++{ ++ GUsbDevice *usb_dev; ++ GError *error = NULL; ++ g_autofree gchar *serial = NULL; ++ FpiDeviceEgisMoc *self = FPI_DEVICE_EGISMOC (device); ++ ++ fp_dbg ("%s enter --> ", G_STRFUNC); ++ ++ /* Claim usb interface */ ++ usb_dev = fpi_device_get_usb_device (device); ++ if (!g_usb_device_open (usb_dev, &error)) ++ { ++ fp_dbg ("%s g_usb_device_open failed %s", G_STRFUNC, error->message); ++ fpi_device_probe_complete (device, NULL, NULL, error); ++ return; ++ } ++ ++ if (!g_usb_device_reset (usb_dev, &error)) ++ { ++ fp_dbg ("%s g_usb_device_reset failed %s", G_STRFUNC, error->message); ++ g_usb_device_close (usb_dev, NULL); ++ fpi_device_probe_complete (device, NULL, NULL, error); ++ return; ++ } ++ ++ if (!g_usb_device_claim_interface (usb_dev, 0, 0, &error)) ++ { ++ fp_dbg ("%s g_usb_device_claim_interface failed %s", G_STRFUNC, error->message); ++ g_usb_device_close (usb_dev, NULL); ++ fpi_device_probe_complete (device, NULL, NULL, error); ++ return; ++ } ++ ++ if (g_strcmp0 (g_getenv ("FP_DEVICE_EMULATION"), "1") == 0) ++ serial = g_strdup ("emulated-device"); ++ else ++ serial = g_usb_device_get_string_descriptor (usb_dev, ++ g_usb_device_get_serial_number_index (usb_dev), ++ &error); ++ ++ if (error) ++ { ++ fp_dbg ("%s g_usb_device_get_string_descriptor failed %s", G_STRFUNC, error->message); ++ g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)), ++ 0, 0, NULL); ++ g_usb_device_close (usb_dev, NULL); ++ fpi_device_probe_complete (device, NULL, NULL, error); ++ return; ++ } ++ ++ if (fpi_device_get_driver_data (device) & EGISMOC_DRIVER_MAX_ENROLL_STAGES_20) ++ self->max_enroll_stages = 20; ++ else ++ self->max_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT; ++ ++ fpi_device_set_nr_enroll_stages (device, self->max_enroll_stages); ++ ++ g_usb_device_release_interface (fpi_device_get_usb_device (FP_DEVICE (device)), 0, 0, NULL); ++ g_usb_device_close (usb_dev, NULL); ++ ++ fpi_device_probe_complete (device, serial, NULL, error); ++} ++ + static void + egismoc_open (FpDevice *device) + { +@@ -1540,10 +1611,11 @@ fpi_device_egismoc_class_init (FpiDeviceEgisMocClass *klass) + dev_class->type = FP_DEVICE_TYPE_USB; + dev_class->scan_type = FP_SCAN_TYPE_PRESS; + dev_class->id_table = egismoc_id_table; +- dev_class->nr_enroll_stages = EGISMOC_ENROLL_TIMES; ++ dev_class->nr_enroll_stages = EGISMOC_MAX_ENROLL_STAGES_DEFAULT; + /* device should be "always off" unless being used */ + dev_class->temp_hot_seconds = 0; + ++ dev_class->probe = egismoc_probe; + dev_class->open = egismoc_open; + dev_class->cancel = egismoc_cancel; + dev_class->suspend = egismoc_suspend; +diff --git a/libfprint/drivers/egismoc/egismoc.h b/libfprint/drivers/egismoc/egismoc.h +index f027ea23..ef31d2cd 100644 +--- a/libfprint/drivers/egismoc/egismoc.h ++++ b/libfprint/drivers/egismoc/egismoc.h +@@ -36,6 +36,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC, + + #define EGISMOC_DRIVER_CHECK_PREFIX_TYPE1 (1 << 0) + #define EGISMOC_DRIVER_CHECK_PREFIX_TYPE2 (1 << 1) ++#define EGISMOC_DRIVER_MAX_ENROLL_STAGES_20 (1 << 2) + + #define EGISMOC_EP_CMD_OUT (0x02 | FPI_USB_ENDPOINT_OUT) + #define EGISMOC_EP_CMD_IN (0x81 | FPI_USB_ENDPOINT_IN) +@@ -49,7 +50,7 @@ G_DECLARE_FINAL_TYPE (FpiDeviceEgisMoc, fpi_device_egismoc, FPI, DEVICE_EGISMOC, + #define EGISMOC_USB_IN_RECV_LENGTH 4096 + #define EGISMOC_USB_INTERRUPT_IN_RECV_LENGTH 64 + +-#define EGISMOC_ENROLL_TIMES 10 ++#define EGISMOC_MAX_ENROLL_STAGES_DEFAULT 10 + #define EGISMOC_MAX_ENROLL_NUM 10 + #define EGISMOC_FINGERPRINT_DATA_SIZE 32 + #define EGISMOC_LIST_RESPONSE_PREFIX_SIZE 14 +@@ -100,11 +101,11 @@ static guchar cmd_read_capture[] = {0x00, 0x00, 0x00, 0x07, 0x50, 0x16, 0x02, 0x + static gsize cmd_read_capture_len = sizeof (cmd_read_capture) / sizeof (cmd_read_capture[0]); + static guchar rsp_read_success_prefix[] = {0x00, 0x00, 0x00, 0x04}; + static gsize rsp_read_success_prefix_len = sizeof (rsp_read_success_prefix) / sizeof (rsp_read_success_prefix[0]); +-static guchar rsp_read_success_suffix[] = {0x0a, 0x90, 0x00}; ++static guchar rsp_read_success_suffix[] = {0x90, 0x00}; + static gsize rsp_read_success_suffix_len = sizeof (rsp_read_success_suffix) / sizeof (rsp_read_success_suffix[0]); + static guchar rsp_read_offcenter_prefix[] = {0x00, 0x00, 0x00, 0x04}; + static gsize rsp_read_offcenter_prefix_len = sizeof (rsp_read_offcenter_prefix) / sizeof (rsp_read_offcenter_prefix[0]); +-static guchar rsp_read_offcenter_suffix[] = {0x0a, 0x64, 0x91}; ++static guchar rsp_read_offcenter_suffix[] = {0x64, 0x91}; + static gsize rsp_read_offcenter_suffix_len = sizeof (rsp_read_offcenter_suffix) / sizeof (rsp_read_offcenter_suffix[0]); + static guchar rsp_read_dirty_prefix[] = {0x00, 0x00, 0x00, 0x02, 0x64}; + static gsize rsp_read_dirty_prefix_len = sizeof (rsp_read_dirty_prefix) / sizeof (rsp_read_dirty_prefix[0]); +diff --git a/tests/egismoc-0587/custom.pcapng b/tests/egismoc-0587/custom.pcapng +new file mode 100644 +index 0000000000000000000000000000000000000000..c721929c2e46976dceaf808a77f9e30df486a586 +GIT binary patch +literal 92988 +zcmd5_2bdJa*6j`CC>co$C^_d$69hq!Rm23mHwp+yT2U19AecaL5s|2(pd#`s7*JGj +z5J55`Nuq%y3Wy*m=bdh!-1koP0Yvbwjb +zd1VqjUzR1=YGBoGc;BG3&I5+0bs2u&fT7iHte)0k#K-~FZt7k=ZE*A2^&2*?SMS=i +zY7Y#CPxb71O`|#us#{iyRl@2vc=)K%X-(=hsZ+0Z{YJG14j4XQxHm?iE{W*9UAY +z*j8-kwNUp!wL>XZvX#pkb?=?SMhtIg<$`u%f!A0g#q`XNA|^yMP$ddH +zN&Gy?Rjs5XYjy*83psc!_W+j-?_(t{uFoI9g|SqH&tMU;&?|U@#qx~vDWQMsC+74X +z2(PgcKG$dIPa+mXG*Bf9Jn>laq{5&8rL0^z#w5emTse}()7TW-%3&ctkF)ZWMJmqV +zKzAOVl6lzggS@`;u-40qR2~vO#Yy->Kg{dIl&C!X7C3D{#7dl`9dQ=^NW?__>P5TD +zQx_@i2%pE)_G1y#zp35p(_+W@6SMY1TZ?GJF#QBuS(Y@0b^}Zcm +zV~rGNxlcr#SHfqoW+@W?%9Q$6bE}!v2)w?jm2P#gdcmuP@Y=GFljr5xS>a-{&>t<* +zu<2(aHpQ6--8yRtz*`)@*Q;6aJ0v51?KXrz<#Q2RRz&wZ;qZsf&Wg`-aKTd1{=yP2 +zl!p5)dIfJXZ8GHN&+d&o +zJXYF<0_OgT`m1$F#N*%rhKPq=!5b_d^dl@7&*yU%^&SNO$4dBoOkDtcEQp9TONkJV +zm2^v&>wEQV&p-bRyusrfIakLStQbDd50;BKC7l&?faw*ykpB(9e-XbwR4f>0+MA1d +zV?(eKK94i-m538zBozG5DDq9rcEsi}%moe`-p6Xy4Ije+;6Ps>{2+eTWRn{L@Gg&` +z`&&8&!sjtOzv7?8unstE;Kmwi96pA8UyB%W!)LIBZp24=1^;C+48qM&P>0EHFY0|Q +z{2wdf^BA@OJ{Cm8nx#nmyamOULGXlqHClcUd1}pD)VmkF#u}yc{N@ywd+ep{6LI;`@!Jhr$DqXLIu`!z-_>!N +z(>ubeXKh^6dlbCJYE_|l-Q#f&vRntqsc(l@Dr5Ah#+rvF@ +z5wy#O_pwsDxXypbeu~y6{PO@*j$e6`#}26l_BAxOEz}J@GmX0$v;1f|Yo=PV;~liyxhKex~t5 +z4JaofrHu@siod0{@V@x*m9*Z9VM@sV0vv6@jlZk<-_6!An{ +zTanx}o+@^NH&WA`L-}xPd>;d+4IjZuoLr;Rz=;Jpqm=+`lbqN%a||G +za)x}Qg3M9umT)a8vjQ)<}gk +zT2>i8Q9Zq63OuDn`mlQ64m$@f3+=MuGgzrzq$9PfEVK(tv^L@P093By?*@M81&Ukf +zNcg|Yxc%rjc(|dX#OFE=#$1LH_x@lod^kBXH3Ob79&>J$GGeis1BafYc*Izvcv89w +z9pjw?Tb+R-jBtB*M@CaiI?kC9C)$#nOhw-@PjW?TyC9?%DCdyDN{7Z +z@#tcYELLj^gwJ&LQ +z92z+DgHrET7{BMguZ>7vrPmfr&usXp;hB>tUbl`7ZxuSm>zT3UUfqGyh9)~za&is3 +z11A}2Bjc<*mnA{pxxJ|?quZB1Vu;6}h|KobB5kA*&Kb~xYQdm~!h55iVj5_xU +zYK?-kC?2;)mtlbsJu_a762O`!si+_4T$!~t5LMMSB0l^e}!njCg)z{hZXJ+@z{b^JtDtTWKIO&1^V7> +zs8}%Pp6|Xy&%Go*&AkZ!`D(Za6!Wfl=3aHm!H4UYNcKDTGWQ1sdn{4=1M5}N)19LQ +zYos`O#=Ac#hpXMNKY)|}7IqEt@%=$<;I-j>ti;Rnv^MZ!@v}e3ldkdY2^5z*PxI6i +zamAabrvKjZ^=Ep{D)D)q-tro*?g=jpJJw|0(Eea6j?2`fLYeSHW836>_8ZL^978d= +zwR-lAR8M{q%kvilrw#4FN}OD$#lVRrY>dtp@eqI~o(C=0XncDr#pKqhzHFwZYGT*PBL +zy`~@H@%(;YEK{CO_}ugRO%-Q!<2~L^r036Ex=eX~Na^X$(V5e7C*1Rw05A3@R^sJ( +zx&(N!`0@PN%QU_{BYd9Do-X2wH&0FfE&4)8jcvl`d0O;tab60?S=h10Jb#Ph`N%cA4%Sf1Y!IBobFti;K6Y6+ZJ!p7)q5f1@);-0^1 +zvc?aoIfvWxR}J@nUTOKskn()O=Q=Hy=dlyv`DafV8jTOH(bYZD>w6vbM{xn{VqIv$!w=7pVZNDVrVV-|; +z193gAEmBuK#^d>Wm#$ErPx##P_f8XQ#@XTdr9vx|=LaW~o^Bs0HB+oHCvu+O6?m~f +zu@W!O)2_ga#gFH=U#{`(i4>PRPutJ(cD}~+`~sh^)SfT#DNj$!b=D1dRTPwn{>wc7 +zJIC`=B6|KqOEqU`<|)@&D{;2C+1t87EYJTOIBkdlD{+!e#Q89AV)5ho^}f{j_Dd9# +z(24L*!1|eAKe?y;D(xo{pX*fr6Vd*7{Uq8vKRIoc&Wk4~9x +z>G`D5H}Fj$%sJa()erG_e!F+pXwR4UI4&vB4 +zk)B`u-8DK-B`?p@BfyKrkLNdDpz(uaC@y!Np6=*v&A{~hwAa?Du}%0qPk(HRv)cGQ +zf3xHHsS!PY-WvwzIEu-w)u5KJp6Fq%IF{#MJ!hTLDJVI)P6vUL;&lEK;UNI;^LhTd +zxdwhF#pKp$LTeFIyvJi1k{{Q0PF`N8JU=M$xlSKU6YWog=hsSFuk&I&#pBlK=yY!y +z#q#`4z-dFwSc8(2Ym{?_e~tDT_@P%RCbvef0>0n&pm(jop~JC?C|{i*KbswAAFwlbmwT30eKuf +z6Y2TC0Iv;EVz<-fqa_e-oqlhV9olMUkmUpxE6N%4tsy)Zsx +z_Ef16^ZW++^ZTCXztwE3_I!!YJ^!xF;!9ZB;rTbU+^Rf3G$nkF7Ta1d;hw)7cx})S +zEAjF?9Rs{r{CNJd)&~AGip%XKk8Kxm#p@-e=kF@DU5)LK#HTzxBiD9rA0duMib?nhab9_kI3|tA>GWv)>-nDmrwxCDl{iT!;%o|>Sp4`&(J~r8 +z_%g*LbRzu8GNyQSGClwDxb4dG37_lq_-=3O2GKl!!;@Mg`$>w&tx@+q-ZYBk`A2}$ +zhW>Y|k-OH}qdv+i7y_dzGie +z%ky;cKUmx8dps+CPx&2DifivbSlg+ye3$Zk-F{~rScLyxNqsyWcC3jsR@ZTEbUZ&- +zM9&|vLUU3s^_1666X(Iw-qsCbt?ldtP8&uWR^sG3-FBsp6FwHP1YirF=ij>0z>nZ3 +z-fZZM|$ZteLI{3IzT+8?iy&eljuYgJSOTzx`$@i{8b8F=;3%dE +zgZ-}?w7vI7<@toqb^3Bm;?{O8o}AHA>&7H6nbj(YK8fx3+WS2OSTsC2`Lm+{FLd&V`%@ +zwCBsUF!KDfat)xRytzwutnK8?eL#EuOuD{B9E(!>I+YdY|=^Awjj9wq#vGOl=!N6odJ>rNb0o=^Ccr-VNtRhT-Cv#?{0dH#CG +z^YcXX{OeC@PWuUp$*tAIoZ^@?BB#@%@vrSn0ZtqK#;KB%>$D9xv4oA$*&-eS@WlOO +z$tjH=d{Ew>QThq><6pT%O!4YuuI)^`;gIrt!sj||93a}Ch?lka2{U|2)Sb9UoG_??98q~nygW~z0$wbBJik^sjUO68ak=w!Xnk+rBQZU{S=ryz*d~0Qr=#oTa@rr! +ze?=OrwVku;;Nz)z3iY29{ySN_Drin?G{xlB>dHpBoOQ^EoKB14_xxUIzbT!Flj}4E +zII;Nglfe}Y{D&zfw@&Xg7BTtplOj+2raa%0_*|zOUl#38gy-KrR%;Y|gyL~)G-Ika +zjbeHJ$G~Yr|6?UiuF+}W#NtPzYsYDPYZS%g*65jO{xxdyw4ss2=NjEV)0;-oJpcM< +zbUeZPWjxIDC(aV_*iNtMhj`X@Zcjh1JfHBn=g;UbzAup-p1vZ5X5tAR!?{@fv@_fSQIz4y6+qyxt_59m@(HhwgP&{spreE}?Q7q4Y0XS{w +zf2T@LuF)po#NtPzQb#m?XehbvR%0vH0F5I*5GU7Y +zFK}Y8_LhHG03Y)<}N`#I4c$r@d(uZJyu%DkC2H?vC_)il_e> +z5s&Tkntq69p1-chn0n)lJ8_;+7U{CBdt)j6l~ +zlz4fbc7xyO!Q#jB+ttHZmUO`J+1vjclja^g}%J{32gkeIAED!D>l-?)gO~W#9dFN-Vef +z^n#{gwX2byZXYQzIq~<~84tWRavHomPsal<7C-a+v0rKYP%Vnf?ImMh@_)abW`8I5 +zxe?limGCJ~|B`EV=bppXi*Xiqtg(6iYRB^nMD+Y-mo=x|lwuNEDb9&vy$bolayl)F +z{~YdZz-hzZI8}0zPQ+RI1pyk34?hur%00i0m7?)$QcOZ8!oLLge!tgW`#&jt(t#JN +zE%CWd$Bw~9C^(+gn0DTg4@{?M^Za)IO;LFftVr>=HA?#3n?|wb`Tqe<8=8uhIJrjU +zffI`#jjj%8d@GG&a%*%@#uUB-fmrro0RD?PkO377UeBJppVo-*xkjr`iqFTZQ8drb +z*I&mItS947i(MSz0v%a&I`tKFXbD6*9JVS#LM&aiVLD&qH)5XhxL;3L$l)3Ix+S8 +zKEU_lCFXkm`Zsf_v8~(hj021CpKC1Erf{5v9cwag=w8a-IG$fHqUUd#r#UH?Xswty +zUuY)Qt0Hn@he08&V$Jh=zLQJoM4ViwqRn-j0zLd=0N&=FKWx6nr}55ps@=ld8l34T +zD|6&lo=^DPPoA72+8?izH3 +z;d9SFH&?7xWsB#R%&R?L&4-!iza`cm6Y2SVfEW7{tDYx2ylu$8%Dyf7#gFILFQxJI +z@r!$I@(191$y3wwt5?sj#x~*eJU#NMSeuIIzs&PjIi6oAqUZlmQ*+WWBlnZnJ{Rj% +z5jmm1vBc~7MQi0(IuR%LlP$oBCG399*&-eS@Weg;tclOo4JZ#j`NG>8oarYw)yc0t +zpRF4Zez9eu{fY4WGj$D(*xC;9E&kG*MzK7UwhLin&+2nqT^9(q|EbotQ7IsPOs^QcsxIU$Aa4PX+2cntNGyi +zEn+=1J3PN@r-I7!X|I>K|mFE*a&(qP(^crf|vF6e97rm=FgLLjm-g|+@_B}1Vtrf?b=l=Y{-^nBp7p>MH?Fx6E{@lgeeW6UxAJD6m8r!z|oeHs@PwhYWhG;*Iv#?`Lq_MhIGuGOU +zeXGH#e!If$C!se*Oc6PuEm&v{8O!s(22LA3?^N}B77k|{inHTeI!^d##1eol_(^=m +zg6F%&+^+HIT4ug)PMYUUrwjq_;Me%Ll=6JS=YBFjS*#((>nG9X`NI|)8qx1@$YU|; +zuVX2Ry;k#S;ItuTr_yh92u`I@u2d0Y*gTZ|g--#fT%&HEXneXqKi6nI;CopoH8mPk +zvb5Gn-T&V`mVW8)O`~X@zo2w!)nD{|0Gj8MMzsctcx>nov&7^1c4~f7PI*3kpM%zRsD1CIisQCKdj4GCwV^Yy5-*>dT$MxgiyzOwa*4*L +z-(lc+IwPmI<5AP|*On`a=M`$@e{JW+4V9GVtKZg;o_|5E?Y#KC +zIPS_0&%b|TCFS|_n;4X%)V{?##j$82J%0x9+K^vZiI?(}cy|FW7C)YU!Nh03#X7IvPtNR?v`>YZE2Qn@{YX`@ltE_yV@X1pM +zzs@w#{NnTq=t^vG#YvEZ@G;^!;(83q5xO81H6W9kg>;k>vpd({O)OYH{wzr#n|IimlA4ivVBd-qysmksYbm43@Z9uH7IKI)^$%6HOA>)0bIxN +zhrL~c73;V<1e}gO(8t8debM^G|20@s_i22(F9g?U#}WV6V5R(^H6nbjQHNjunMS53 +z_WHSs@%nKRW+}od +z)H+qSsql$PvCJvc%7l-hH<>!7oz*&8Yrb;*?k~j~NcOhg7>|zk0Qp5ALLx+!`(@?oGoCM-idnmw=xRudxz7 +z*YGmnV<{}F^TK>!V=>x(&C0JevR6_(ZjEgC9T414N1VG#Zt~2uYvGO5^pZ(1WygHL +z)&`(r!92YVIBod9Qza+YXoB(EBk<9PB>-DE{=@Elv~Pv@Tq +z|Ha{AZ8hHG(%R(#yne}~G{~Dci?cJB4S$C1Gkv7)fNIJ|?7gI?J4Z)k_*yS7iQN(| +zN7I4RhHXxjoIFP}ffI`#A6avk#t-hHnA|yLtbDd8^yRk%TGj0z+<@mw12L1}_7q`x#ZQgWVh-6T3?DjuUy-z0mAFCzt +zxz2Nc&y8E1eM-9XKlYF;UekAmZr%y6+c$uR*;eQT_CD5I7r+A)T!+Eeu{u1{!glhp +zyy{SOHI}XKsXyF#lJjJ4Py3r#$5D+BSJxU#POkAN;Kbr*EYJK!kF%<0{lq^KZiEI(=P3tXJ2AzrmWNu(9a%ILh2_ +zHmq1jjkQn&PrkR7SkI1kZWn8;y#bsy1cjA2xrRRjCl)_r?O-L1Z>eJnrePg#-@DIn +zS|c>-pEHautmqqWLOY!|hk!zedjkemb-rE8%mEHUK`Bcr}VP|4y!|_S8P2 +zd{gYRseSh@68Gwh*GJ^J%ZT&uJBRgDIjX(X;cP>kKLaNgKR)u^aE-6`al%Ik|HcnR +zOn&y+@2~Eua+L5XM+v`f0kNhQZ;o;wG3Vbi*Y;HNZ<-^}+9&aqDJ0ei|Ci?9SFF=I +zP`k;CsNIvG-B|q0zlW~Z_!gU+5&qG_-qubRI;|07_uTfI^!!`REuB2F2!AyE{wJ1n +zS)CW=1KVF5!9d%GY9+bm-xl08vH@)PXY=n}J8x2BnT{8Dp4?vE+j>u|IYF6SH>t5q +zoLu9Xz=_4rSblW3fv@H{?y>y0Tp#f>mZwa-RgGnRjOf<5_!e*9E97I@oPXai^;R|i +z)@uW9zumlBe6KK(^Y4|wYl8+@iI?ki%^ne_pZWK|=^9_JA-+gC4seOdazo~uY$_w9&*GFQ_zdr&_ +z8{)>w&xI1_eZYyuPmUITL*s|ox+vj)Tfy7D!1R$fE3IEQAMEm{vh&lhh +z^U{-Q{%x;wAIB44rAI_O|4Z}l&CqTeG<2$LH|;N|-IJi*Sp3Yt+geX4{Lnt?7qQPL +z{L7De(|MuO8nM3^Qt)Xt|0aB{bIs?37p24BVa-ycH_-Zbmz&`e?E`fZHUBo}cE^f7 +zt>$*tchnzZPC)(ff0KllC30>zu-MZ|2jb;ASA9|Rlb^ZW+2R^Mq~dbx{K;f*`&xpjQ`4iQ(p$5N(_R+kA%N5bbihF1N%I-2vp>$*kRw|p8Jc8DP9dToYn}> +z?b>aE+P7K~pKF+Rt!RH?_&cmw3LA^j=IG_R8ycy2+#2l#K2O)Ebb%H{nWNtgoHl#} +ztB%p(Y(qX>W1WAEj+^)@@7&|;J;3*SeXQNX&`9N&gKts$tqtBZiZ(~Dldk)V#x>2+ +ziSIb@VLVQsV!z6w@!X7)*QX-!}C;*5-0fxagM*w|9PBmAJO=BL5fM_DB%~r-~V}> +zx4)mKe1!1HM+pD$W^da +zZY+N0==t_)e7hX=i(BXGw)@vP$NqP;&Jv&Ne9azjUbJm61Z#Zf!kn8`J@}5An}y0y +zJZ_x_?h{@V@7&Dl41Dn27+ljygNl6UQ30q}aE`hHcy0JUR^sJ4rTie`^fNbm?684f +zisEwXwCqQ3`;1IzD;8}3%p2ybxmif!lTNA9V`qxXWa7Sl_(F96uXOOqhwC1`-tLfd +z?aCcxR%~3*qf_CkKTPV}zEJUZs;x?&a$a8tZqCgn^_;IgwE)E{bfoscp^~Tleyq9K +z2H>=z$ykGulQbmG4dO7#*W9dhFO6?sK`{vp3BNR4;^KF|pYhRrJ=P>X*DzxU1P3J% +zbF;dOwMKR_#pBkf?l5l}$^Bl5WEgDW)=!rJrw#3Qs^sJvEdfp}e&)}|KFNwt>!+mA +zvElwTN-OcM)=0JA$pMS-(>93q$E#7ax!D6H-_`v^IVZ1QAif7Sig;{6s~+Q-n+;g^ +zg_@gDPSe~hhxCoBZM{Pq3~K2TjK3nlUSa=1vqVJBUa+%I!y*nEMa4GwupxSJn?x!zfKz8 +zQu7hv`P7e9tcO2T6XwRPryx5;uiI=>Dcnj_q{o=>-_Zs-2 +z6pBmaDdG18e7~Om*3b>g^9i5wl<=#(roAxiSQFtX&)?#BesV<5&ox4GT9m8u{x!t; +z^y`WB{L#RP8et_)uG2Z-#1b|}XN!0Uz!UeA$1)6j<|h=>r8oS0e!)!}BKis8PlPMR +zu*5ru|H@hweGtmlsfP8-^fmG(1Sqm&f?o`1l^XZvM}sXyR*8B3<; +ze_MB>)=1*>v6OzNH;tls{`vYFRe#YuhSp#yo`?GT_x#hBwrbCpb2IMwqw0(AXJm)x +z4^G;qJzvd--JXA>p||g?#52#|3%r=4SoJ*F;cY|x-nWte@2$L*V&JPevD@>jH1YPm +z6?1Hl{&l+hsp~&uBUSv6wm!nc+)7>Jikr)4y6%sa*dV&Cl)^%1#Zyz +z!Mx$;Pd|?JuhGhdS|h^e8eOyBn?}(*|M&+wo=|!BJfAcgeo(|?JH4hKFh`ss$8G># +zU{245iUp5b4!pfbd%nac&(9_2`BzO7^Q7$X{7&=tD9@*JBb1}mzNco0c~&CVc9sCI +z4Sj@_cqvbb_b=eZ;%A=UbAiU^=VSNBpMzO( +zn&(r0-PT3iQvmzaEb(~$4O8|j&nJBD`IDZ^zTcf%K6StLd^XRg_>-PV{O?ZHo3>x| +zdn7N(0A4J9JpaOUjUUPLTaNetyHj(52V;8v{tR&)0gkh>;Kky{^Y<9|!Lsh-QNrIN;|hNvEf5QObzaMy=P#>!RCzw(Q=St3vb}npJM37K +z_;e0;ljHe0BYOV42AY%BZMjzSeoX9oe))z+wNC8(AjMh!Cmp9FScHcFywCk)RwDzS +zt>+W|te?Fdk7Y=HJdPNdc~p76#m)~B{>V1o){3L8=kJ(gXvEIB5Z{iriCxcc^`g;- +zbk0!TbC@_=+5Xq_+fCN^bnc2gpYYqY^S_?|HsGg&W>^WIkEOQ(9}9Xe)+~jMrD&et +z^d%jSMd$kDIb4dTX?y?c`LlALP@Yft-1BEG78m?whv%=%dqR1Burzt2n3queD?b(Y +z)k@^rPHMgr%1elsdw%K?(Jy{He|~O8+t_R?rfA|CO{jZ3ea8s7L7Lo +z@PF?4+jAQDc_{zHc^AsR?H_sjPFsfLM9&}B@1*tUoJDsn?}(*|M4|C9*c60dH&-Mh3iA1|=`g(;-ttzxeU| +z@<+1bbI&h7)!TU|)AJAfc~*J8ZolJIRvvl$HaCFZUJ&Cf>{w%-|JOSBaB8kX{U_<` +zuuab7vzk-os=RK8IKR5n+i#b~I*0opaN5u;ti(w=5ohy$I!^ppq!NG)+)s*~)A-y^ +z2!AW!`@JS) +z&;RLj-Cr~hr?nm8d%dby+pwYOW{Jo1dp>bNd%ir5pm{#w7d@VR=WsiWyP!Ou)>vrn +zNbO5Gk@$1CZv(Flor#rrd7cggUMzk*zs*w`U#;2kJpIGlnt|!R&yV_BjcvlG`6KmP +z_n&a|#P9hVoOyoki1Yl>qcta8E5x;GcEH>D!C0Pu2smws0V{EGo!$aYEPniCy^Qj*j9P)pD@Z65SmFHXPe1v=7{AmYo=Le(B^RM2iHKOZ;xJCy%it~fmU(x!E +zj>Tem{y^Zg0ShZ}a*e89BVvrk2Y;^CF$4Gl3eH>m?b7&kT@cNmNTbS~yxm9L^!&ap +zFDZ=(pO2+-Z+p`yn&%g2eM$8fT_?mnf5SZg=WstLo!s|v=sT>0&pm%+HlD-XS|+(~ +zFK8Q9OPxa#$D*X?OHYgA9Q593{!2L;&$XKE$|m=<0S_zj@;t?J$5^6q;`RVkJ~ug1 +zPU8nt>G;L%CGR}z?ReDm{2OYe_Pr5!u@XMd(<`QVJBNGDndj$@IL{wgS997WDJHj8 +zRcCrTKN!pNcLJvkF*;Rpa-F6FCl)_`vbDZ}UyNdM>-5qq{?8BQd_J{rIRf$0>@^M_5)8qr*UkEdfFdDAGC=g$I88=8uh +zIQdvA`>}tGu6s`7)BKF)`P7H&0N=}4GBx`9h}MYk`B-|iXyVS{uK7*JL-TN&=Tkgg +ziu*r@+jo8e<@tn9^L)bJD}Uz;{T?e7m47Vf66yIF?-o#=Psdd}M^DJ#1xw^SKLors +z1nN|E9~5Uk)Q0-ShTq-7;%A=!-vt`qQrDo0xe4L_;PH38Owa%1%|goa37_X_(@o;O +ztmyagc>X%a^YcdZ{NeKqPPGmq=8zQA@y*`uGaPH4e;PP#Xg^lHHsaQ4)OR{g=VK8b +z0`NZf{FUWris_oI-tIqZ`pKnSg_Y;)wJ9eLEW&@RzBmVs<4uh@GX^&PqIv%P +zc?zq%2xgvg{WdP~ooV3hJbNt9-wK>Iv==LJa?ii1q5t#j6Y?7P<0vNgSjyMP|9SQf +z!?i|1iO@)yo^WA^GTz}r;B*7PtBt8L*_&PHeycChKdE}8AD$# +zsy$!gbI(8er8sUuzsE|2fG~7d?k)^66yJcrWaLtO1wNzUjSY# +zemsBo3?-@%(%dJ^!`| +znv<>%C9Q~a`bcm0?~3L5+kn%CFt8FQ=|r5x?}d#}!tU3^Cg(8#kKFTXJg@Qf^{2v5 +z2>)*Ac)xSVNvDcy&sW!)3eP9}&AUV+alEN9C*Bf|9y~wiX+tA+9USp>+T%^5Sf2kd +zaN5vPto#}{;`|&qvG~!b#~F=J*Qn7vpYUJU>tCZeJxgef6i@F~;yk|{*)Eojz>+; +zpY%r=<@toq^K|p~=x}13g&k|mOV&7^pFg7KhyK)@bl#YIzO^T@=Wtt}E~9iJPVV`S +z0w=}k{3pUg0N&@G|MeM-Py2rEC#n1VpTiw`Ls{)7>|QRE2Md~cJ3kn0p5L-(S)CW` +zemlhXaErvA!<_@1HuNo4eh!y7_X8)EuzBcg5f1@);u_`arSa)liEDISEC1(khXQ^& +z@M0x=K9&{$J{I&u<%`Zc@_~(|Xr4d+W+NUtUY7HG>aSm0`#*=?Rb8Hh@L;^xWP&H +zfR)#3QZDV^Chj2=ky9oYoo|md&#(D=MWqw1{c+D9vR%hXxf|{|0B>?X*>OVS)7mHZ +zlak+iyDw6PB*)|Ilh;*JenR+Mrv?qZoga+m`Ioy@Qh7mZ(|o_&wvjl#j8~&r^ZYg4 +zD=CeLlWUZxv4}Bj9vWhW)9AVDH9nnVolLN33b9y#ZESPim6uDY?KH<|mKfhc9xaSk`dGvd%R5<>> +zG0(rh*wxDOgJWo|PIx}G@BSs?xGj;M{~GYx5GYpSr936x*MJv`AJ0EnT;to7?1E#Q +z-|rBfPxuEv^L9LHdj7R}s;aR~_>`xFf9-q1)FX~<=K0?^o?kGc=iB)-XQ(p8R_dVA70H+OqgOxbBPJMtAiyuGv!@#%eP)u%}{*W<+pWp$p?8gB77sp=) +zR4h3D9vMwwpWFr6xSd7iEVUM#*m|5pRQ5yj=s(}OQ~TQe{{fB&&s+Vdqo +z&(r-citiCe9NSFSRgUKuis<=kP8ggmC?>a7Yo>_r7DwcCdNls~?X>=*mexsfa-CYg +ztmBmMVV?r2AyGYR{MW-1EELC9Xq9zsE|2J`@cTFM)`Wm^CRVHjTNH(5&f5WNi5IrSy6M+*rs&@(yHew +z5mQ7?nOyO%?W_b&8~z3>adMqj0w)$fe)3}_13!Z2|M-nJoid!(i19b+k$N#be^N!U +zHihF&jX8idc*2`T(LDdHAB_H@c`oz(x5f#LY-p=lRDQ5{ +zX3Gzu=jSffSb09pqsj9N$hDo-4~cWq==WHuaQuJ6^Y19#SbIJl=Sa_|_EmgDoWoA! +zJpWnXwINWf>i9?Swjtgwz>CGtJio@38lR3AX$_L_f0c2?o2TYHzv;b=mFE*a%}ogZ +z>^9NIoNV2IINN>i?R)*P*7H9DP8&49%GV8u^C95G;>S0yHvElKB`58diF2v^u8SXy9^9_+Lz^fjw?@sId;6}7 +zsZnN=CR!tj&oxS)?oFd;p8tH)CaS;accp1PpZcr&3=t3ZsaaHh$eakkMn2EK_JJ14 +z^9i4Oe(qiPSJ|_+)9}F-%JYNENl$l8wyq@1-hvp>zqIo{$YKq5eLSlLT2f#@> +z5hvGa6!)aFRy09Gww>CBKpP-oB8m$I=ziT`1zHDeD +z@wrAr{_>_#G|xXZ)reIQ%;qPipj0jt*yMR8^rSb^T0_ug(N4}=`-NO5;jI>i+BjY6ZexMyEVS` +zEXCy3>ATkcuiJU7nXNpZ@VQQHW_nvUi01kETi7ZutQRRBw?^w{dDAG?JbyHB+R(RH +ziIZ#8>=pkSz1LFX2cM>x+!_sk)xSm;XK0NGpKJ8R-`+He=J};x(eZ?ylJUs39rFC0 +zmqk2IpJKnt63;w8?^PX@=Mz48enGjmGrnW?t?fKkrK9rv&{)z_1OP^G^jk>ai{HDNhOi-q-b-M_50M +zW1esRcJY748CofSbZfP5t~aeNb^-x%rI)~Owx>ZwKJLrk1FsG5V+~1OuGOt?`qyf} +zQ(5t89gh0);9K6bGS?0ssoY8VzHYyh3l`yD?BMOXkZpsZGmw6CE@1k{-Ud6}U +zU8&xV2cqr22OjF8#yEL59amG{9M0+Om@U>EYa4Ld(6?BLlWWu~m;Yn7D~@P<+P`v* +zCgt&e%=Q%Er$gJZ5ayM|R9Z{q!C1V)3K%F9i&Ic5F)cgX;L#xknYPGe0&Z{7rCw +zOf1=@Gw!RfU|ue+)>Z90`5FYZw~71>!^ZG8SR)l0&z)w$C#t5G!f$)J_nl$V6F!6O +z;p4GNb*&S%i;wrWpj}v^wF$QepmO}5Y8d#m_9X8iKylx3owq#5Kr$%UuPbtPSH7&) +zp5(o&3BN;CZ}+<3`%ZJb_R8B`jo090nt!|JK-+3~`wmz)ai>--TR_$SP7r+KU*~y?XL%)!J4HoU+(rIe4XS9QYhQgO{CLdKO~f0oueOWmt6_HQpi?+s{S(?{!#1bNcJc9g +zAG8aLA76d8w#E0g!O0%lSJgd{ +z+`d|?sQ8{4j*DnxgZ7W{`07dEwE+*SzE_gN+lI#DNZ`d1jT5&Apz{6SV}Ba>>i$*k +m`R=7+{=W}+0r1m-7puNkm3s}~;o{zOx;z5Fk_TMEeE5F>3ZJ_G + +literal 0 +HcmV?d00001 + +diff --git a/tests/egismoc-0587/custom.py b/tests/egismoc-0587/custom.py +new file mode 100755 +index 00000000..3a662380 +--- /dev/null ++++ b/tests/egismoc-0587/custom.py +@@ -0,0 +1,156 @@ ++#!/usr/bin/python3 ++ ++import traceback ++import sys ++import time ++import gi ++ ++gi.require_version('FPrint', '2.0') ++from gi.repository import FPrint, GLib ++ ++# Exit with error on any exception, included those happening in async callbacks ++sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1)) ++ ++ctx = GLib.main_context_default() ++ ++c = FPrint.Context() ++c.enumerate() ++devices = c.get_devices() ++ ++d = devices[0] ++del devices ++ ++d.open_sync() ++ ++assert d.get_driver() == "egismoc" ++assert not d.has_feature(FPrint.DeviceFeature.CAPTURE) ++assert d.has_feature(FPrint.DeviceFeature.IDENTIFY) ++assert d.has_feature(FPrint.DeviceFeature.VERIFY) ++assert d.has_feature(FPrint.DeviceFeature.DUPLICATES_CHECK) ++assert d.has_feature(FPrint.DeviceFeature.STORAGE) ++assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST) ++assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE) ++assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR) ++ ++def enroll_progress(*args): ++ print("finger status: ", d.get_finger_status()) ++ print('enroll progress: ' + str(args)) ++ ++def identify_done(dev, res): ++ global identified ++ identified = True ++ identify_match, identify_print = dev.identify_finish(res) ++ print('indentification_done: ', identify_match, identify_print) ++ assert identify_match.equal(identify_print) ++ ++# Beginning with list and clear assumes you begin with >0 prints enrolled before capturing ++ ++print("listing - device should have prints") ++stored = d.list_prints_sync() ++assert len(stored) > 0 ++del stored ++ ++print("clear device storage") ++d.clear_storage_sync() ++print("clear done") ++ ++print("listing - device should be empty") ++stored = d.list_prints_sync() ++assert len(stored) == 0 ++del stored ++ ++print("enrolling") ++template = FPrint.Print.new(d) ++template.set_finger(FPrint.Finger.LEFT_INDEX) ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++p1 = d.enroll_sync(template, None, enroll_progress, None) ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++print("enroll done") ++del template ++ ++print("listing - device should have 1 print") ++stored = d.list_prints_sync() ++assert len(stored) == 1 ++assert stored[0].equal(p1) ++ ++print("verifying") ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++verify_res, verify_print = d.verify_sync(p1) ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++print("verify done") ++assert verify_res == True ++ ++identified = False ++deserialized_prints = [] ++for p in stored: ++ deserialized_prints.append(FPrint.Print.deserialize(p.serialize())) ++ assert deserialized_prints[-1].equal(p) ++del stored ++ ++print('async identifying') ++d.identify(deserialized_prints, callback=identify_done) ++del deserialized_prints ++ ++while not identified: ++ ctx.iteration(True) ++ ++print("try to enroll duplicate") ++template = FPrint.Print.new(d) ++template.set_finger(FPrint.Finger.RIGHT_INDEX) ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++try: ++ d.enroll_sync(template, None, enroll_progress, None) ++except GLib.Error as error: ++ assert error.matches(FPrint.DeviceError.quark(), ++ FPrint.DeviceError.DATA_DUPLICATE) ++except Exception as exc: ++ raise ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++print("duplicate enroll attempt done") ++ ++print("listing - device should still only have 1 print") ++stored = d.list_prints_sync() ++assert len(stored) == 1 ++assert stored[0].equal(p1) ++del stored ++ ++print("enroll new finger") ++template = FPrint.Print.new(d) ++template.set_finger(FPrint.Finger.RIGHT_INDEX) ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++p2 = d.enroll_sync(template, None, enroll_progress, None) ++assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE ++print("enroll new finger done") ++del template ++ ++print("listing - device should have 2 prints") ++stored = d.list_prints_sync() ++assert len(stored) == 2 ++assert (stored[0].equal(p1) and stored[1].equal(p2)) or (stored[0].equal(p2) and stored[1].equal(p1)) ++del stored ++ ++print("deleting first print") ++d.delete_print_sync(p1) ++print("delete done") ++del p1 ++ ++print("listing - device should only have second print") ++stored = d.list_prints_sync() ++assert len(stored) == 1 ++assert stored[0].equal(p2) ++del stored ++del p2 ++ ++print("clear device storage") ++d.clear_storage_sync() ++print("clear done") ++ ++print("listing - device should be empty") ++stored = d.list_prints_sync() ++assert len(stored) == 0 ++del stored ++ ++d.close_sync() ++ ++del d ++del c +diff --git a/tests/egismoc-0587/device b/tests/egismoc-0587/device +new file mode 100644 +index 00000000..91744df1 +--- /dev/null ++++ b/tests/egismoc-0587/device +@@ -0,0 +1,270 @@ ++P: /devices/pci0000:00/0000:00:14.0/usb3/3-5 ++N: bus/usb/003/009=12010002FF0000407A1C870567640102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005 ++E: BUSNUM=003 ++E: DEVNAME=/dev/bus/usb/003/009 ++E: DEVNUM=009 ++E: DEVTYPE=usb_device ++E: DRIVER=usb ++E: ID_AUTOSUSPEND=1 ++E: ID_BUS=usb ++E: ID_MODEL=ETU905A88-E ++E: ID_MODEL_ENC=ETU905A88-E ++E: ID_MODEL_ID=0587 ++E: ID_PATH=pci-0000:00:14.0-usb-0:5 ++E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_5 ++E: ID_PATH_WITH_USB_REVISION=pci-0000:00:14.0-usbv2-0:5 ++E: ID_PERSIST=0 ++E: ID_REVISION=6467 ++E: ID_SERIAL=EGIS_ETU905A88-E_198427PCU834 ++E: ID_SERIAL_SHORT=198427PCU834 ++E: ID_USB_INTERFACES=:ff0000: ++E: ID_USB_MODEL=ETU905A88-E ++E: ID_USB_MODEL_ENC=ETU905A88-E ++E: ID_USB_MODEL_ID=0587 ++E: ID_USB_REVISION=6467 ++E: ID_USB_SERIAL=EGIS_ETU905A88-E_198427PCU834 ++E: ID_USB_SERIAL_SHORT=198427PCU834 ++E: ID_USB_VENDOR=EGIS ++E: ID_USB_VENDOR_ENC=EGIS ++E: ID_USB_VENDOR_ID=1c7a ++E: ID_VENDOR=EGIS ++E: ID_VENDOR_ENC=EGIS ++E: ID_VENDOR_FROM_DATABASE=LighTuning Technology Inc. ++E: ID_VENDOR_ID=1c7a ++E: MAJOR=189 ++E: MINOR=264 ++E: PRODUCT=1c7a/587/6467 ++E: SUBSYSTEM=usb ++E: TYPE=255/0/0 ++A: authorized=1\n ++A: avoid_reset_quirk=0\n ++A: bConfigurationValue=1\n ++A: bDeviceClass=ff\n ++A: bDeviceProtocol=00\n ++A: bDeviceSubClass=00\n ++A: bMaxPacketSize0=64\n ++A: bMaxPower=100mA\n ++A: bNumConfigurations=1\n ++A: bNumInterfaces= 1\n ++A: bcdDevice=6467\n ++A: bmAttributes=a0\n ++A: busnum=3\n ++A: configuration= ++H: descriptors=12010002FF0000407A1C870567640102030109022700010100A0320904000003FF000000070581020002000705020200020007058303400005 ++A: dev=189:264\n ++A: devnum=9\n ++A: devpath=5\n ++L: driver=../../../../../bus/usb/drivers/usb ++L: firmware_node=../../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f/device:54 ++A: idProduct=0587\n ++A: idVendor=1c7a\n ++A: ltm_capable=no\n ++A: manufacturer=EGIS\n ++A: maxchild=0\n ++A: physical_location/dock=no\n ++A: physical_location/horizontal_position=left\n ++A: physical_location/lid=no\n ++A: physical_location/panel=top\n ++A: physical_location/vertical_position=upper\n ++L: port=../3-0:1.0/usb3-port5 ++A: power/active_duration=58096\n ++A: power/async=enabled\n ++A: power/autosuspend=2\n ++A: power/autosuspend_delay_ms=2000\n ++A: power/connected_duration=183928\n ++A: power/control=auto\n ++A: power/level=auto\n ++A: power/persist=0\n ++A: power/runtime_active_kids=0\n ++A: power/runtime_active_time=58510\n ++A: power/runtime_enabled=enabled\n ++A: power/runtime_status=active\n ++A: power/runtime_suspended_time=125136\n ++A: power/runtime_usage=0\n ++A: power/wakeup=disabled\n ++A: power/wakeup_abort_count=\n ++A: power/wakeup_active=\n ++A: power/wakeup_active_count=\n ++A: power/wakeup_count=\n ++A: power/wakeup_expire_count=\n ++A: power/wakeup_last_time_ms=\n ++A: power/wakeup_max_time_ms=\n ++A: power/wakeup_total_time_ms=\n ++A: product=ETU905A88-E\n ++A: quirks=0x0\n ++A: removable=fixed\n ++A: rx_lanes=1\n ++A: serial=198427PCU834\n ++A: speed=480\n ++A: tx_lanes=1\n ++A: urbnum=547\n ++A: version= 2.00\n ++ ++P: /devices/pci0000:00/0000:00:14.0/usb3 ++N: bus/usb/003/001=12010002090001406B1D020006060302010109021900010100E0000904000001090000000705810304000C ++E: BUSNUM=003 ++E: CURRENT_TAGS=:seat: ++E: DEVNAME=/dev/bus/usb/003/001 ++E: DEVNUM=001 ++E: DEVTYPE=usb_device ++E: DRIVER=usb ++E: ID_AUTOSUSPEND=1 ++E: ID_BUS=usb ++E: ID_FOR_SEAT=usb-pci-0000_00_14_0 ++E: ID_MODEL=xHCI_Host_Controller ++E: ID_MODEL_ENC=xHCI\x20Host\x20Controller ++E: ID_MODEL_FROM_DATABASE=2.0 root hub ++E: ID_MODEL_ID=0002 ++E: ID_PATH=pci-0000:00:14.0 ++E: ID_PATH_TAG=pci-0000_00_14_0 ++E: ID_REVISION=0606 ++E: ID_SERIAL=Linux_6.6.0-14-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 ++E: ID_SERIAL_SHORT=0000:00:14.0 ++E: ID_USB_INTERFACES=:090000: ++E: ID_USB_MODEL=xHCI_Host_Controller ++E: ID_USB_MODEL_ENC=xHCI\x20Host\x20Controller ++E: ID_USB_MODEL_ID=0002 ++E: ID_USB_REVISION=0606 ++E: ID_USB_SERIAL=Linux_6.6.0-14-generic_xhci-hcd_xHCI_Host_Controller_0000:00:14.0 ++E: ID_USB_SERIAL_SHORT=0000:00:14.0 ++E: ID_USB_VENDOR=Linux_6.6.0-14-generic_xhci-hcd ++E: ID_USB_VENDOR_ENC=Linux\x206.6.0-14-generic\x20xhci-hcd ++E: ID_USB_VENDOR_ID=1d6b ++E: ID_VENDOR=Linux_6.6.0-14-generic_xhci-hcd ++E: ID_VENDOR_ENC=Linux\x206.6.0-14-generic\x20xhci-hcd ++E: ID_VENDOR_FROM_DATABASE=Linux Foundation ++E: ID_VENDOR_ID=1d6b ++E: MAJOR=189 ++E: MINOR=256 ++E: PRODUCT=1d6b/2/606 ++E: SUBSYSTEM=usb ++E: TAGS=:seat: ++E: TYPE=9/0/1 ++A: authorized=1\n ++A: authorized_default=1\n ++A: avoid_reset_quirk=0\n ++A: bConfigurationValue=1\n ++A: bDeviceClass=09\n ++A: bDeviceProtocol=01\n ++A: bDeviceSubClass=00\n ++A: bMaxPacketSize0=64\n ++A: bMaxPower=0mA\n ++A: bNumConfigurations=1\n ++A: bNumInterfaces= 1\n ++A: bcdDevice=0606\n ++A: bmAttributes=e0\n ++A: busnum=3\n ++A: configuration= ++H: descriptors=12010002090001406B1D020006060302010109021900010100E0000904000001090000000705810304000C ++A: dev=189:256\n ++A: devnum=1\n ++A: devpath=0\n ++L: driver=../../../../bus/usb/drivers/usb ++L: firmware_node=../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e/device:4f ++A: idProduct=0002\n ++A: idVendor=1d6b\n ++A: interface_authorized_default=1\n ++A: ltm_capable=no\n ++A: manufacturer=Linux 6.6.0-14-generic xhci-hcd\n ++A: maxchild=12\n ++A: power/active_duration=5145268\n ++A: power/async=enabled\n ++A: power/autosuspend=0\n ++A: power/autosuspend_delay_ms=0\n ++A: power/connected_duration=5191200\n ++A: power/control=auto\n ++A: power/level=auto\n ++A: power/runtime_active_kids=2\n ++A: power/runtime_active_time=5145262\n ++A: power/runtime_enabled=enabled\n ++A: power/runtime_status=active\n ++A: power/runtime_suspended_time=45937\n ++A: power/runtime_usage=0\n ++A: power/wakeup=disabled\n ++A: power/wakeup_abort_count=\n ++A: power/wakeup_active=\n ++A: power/wakeup_active_count=\n ++A: power/wakeup_count=\n ++A: power/wakeup_expire_count=\n ++A: power/wakeup_last_time_ms=\n ++A: power/wakeup_max_time_ms=\n ++A: power/wakeup_total_time_ms=\n ++A: product=xHCI Host Controller\n ++A: quirks=0x0\n ++A: removable=unknown\n ++A: rx_lanes=1\n ++A: serial=0000:00:14.0\n ++A: speed=480\n ++A: tx_lanes=1\n ++A: urbnum=637\n ++A: version= 2.00\n ++ ++P: /devices/pci0000:00/0000:00:14.0 ++E: DRIVER=xhci_hcd ++E: ID_AUTOSUSPEND=1 ++E: ID_MODEL_FROM_DATABASE=Alder Lake PCH USB 3.2 xHCI Host Controller ++E: ID_PATH=pci-0000:00:14.0 ++E: ID_PATH_TAG=pci-0000_00_14_0 ++E: ID_PCI_CLASS_FROM_DATABASE=Serial bus controller ++E: ID_PCI_INTERFACE_FROM_DATABASE=XHCI ++E: ID_PCI_SUBCLASS_FROM_DATABASE=USB controller ++E: ID_VENDOR_FROM_DATABASE=Intel Corporation ++E: MODALIAS=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30 ++E: PCI_CLASS=C0330 ++E: PCI_ID=8086:51ED ++E: PCI_SLOT_NAME=0000:00:14.0 ++E: PCI_SUBSYS_ID=1043:201F ++E: SUBSYSTEM=pci ++A: ari_enabled=0\n ++A: broken_parity_status=0\n ++A: class=0x0c0330\n ++H: config=8680ED51060490020130030C000080000400262F62000000000000000000000000000000000000000000000043101F20000000007000000000000000FF010000FD0134A089C27F8000000000000000003F6DD80F000000000000000000000000316000000000000000000000000000000180C2C1080000000000000000000000059087001805E0FE000000000000000009B014F01000400100000000C10A080000080E00001800008F50020000010000090000018680C00009001014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B50F110112000000 ++A: consistent_dma_mask_bits=64\n ++A: d3cold_allowed=1\n ++A: dbc=disabled\n ++A: dbc_bInterfaceProtocol=01\n ++A: dbc_bcdDevice=0010\n ++A: dbc_idProduct=0010\n ++A: dbc_idVendor=1d6b\n ++A: device=0x51ed\n ++A: dma_mask_bits=64\n ++L: driver=../../../bus/pci/drivers/xhci_hcd ++A: driver_override=(null)\n ++A: enable=1\n ++L: firmware_node=../../LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:4e ++A: index=10\n ++L: iommu=../../virtual/iommu/dmar1 ++L: iommu_group=../../../kernel/iommu_groups/11 ++A: irq=145\n ++A: label=Onboard - Other\n ++A: local_cpulist=0-19\n ++A: local_cpus=fffff\n ++A: modalias=pci:v00008086d000051EDsv00001043sd0000201Fbc0Csc03i30\n ++A: msi_bus=1\n ++A: msi_irqs/145=msi\n ++A: numa_node=-1\n ++A: pools=poolinfo - 0.1\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 1 32 128 1\nbuffer-32 0 0 32 0\nxHCI 1KB stream ctx arrays 0 0 1024 0\nxHCI 256 byte stream ctx arrays 0 0 256 0\nxHCI input/output contexts 10 11 2112 11\nxHCI ring segments 38 38 4096 38\nbuffer-2048 0 0 2048 0\nbuffer-512 0 0 512 0\nbuffer-128 6 32 128 1\nbuffer-32 0 0 32 0\n ++A: power/async=enabled\n ++A: power/control=auto\n ++A: power/runtime_active_kids=2\n ++A: power/runtime_active_time=5192072\n ++A: power/runtime_enabled=enabled\n ++A: power/runtime_status=active\n ++A: power/runtime_suspended_time=0\n ++A: power/runtime_usage=0\n ++A: power/wakeup=enabled\n ++A: power/wakeup_abort_count=0\n ++A: power/wakeup_active=0\n ++A: power/wakeup_active_count=0\n ++A: power/wakeup_count=0\n ++A: power/wakeup_expire_count=0\n ++A: power/wakeup_last_time_ms=0\n ++A: power/wakeup_max_time_ms=0\n ++A: power/wakeup_total_time_ms=0\n ++A: power_state=D0\n ++A: resource=0x000000622f260000 0x000000622f26ffff 0x0000000000140204\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n0x0000000000000000 0x0000000000000000 0x0000000000000000\n ++A: revision=0x01\n ++A: subsystem_device=0x201f\n ++A: subsystem_vendor=0x1043\n ++A: vendor=0x8086\n ++ +diff --git a/tests/meson.build b/tests/meson.build +index dc3b70e2..7a7afc03 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -53,6 +53,7 @@ drivers_tests = [ + 'egis0570', + 'egismoc', + 'egismoc-05a1', ++ 'egismoc-0587', + 'fpcmoc', + 'realtek', + 'focaltech_moc', +-- +GitLab + diff --git a/patches/build-Look-for-sh-just-once.patch b/patches/build-Look-for-sh-just-once.patch new file mode 100644 index 0000000..2dadcd6 --- /dev/null +++ b/patches/build-Look-for-sh-just-once.patch @@ -0,0 +1,70 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Tue, 20 Feb 2024 08:22:42 +0100 +Subject: build: Look for sh just once + +Origin: https://gitlab.freedesktop.org/libfprint/libfprint/commit/4b72f27d +Forwarded: yes +--- + meson.build | 1 + + tests/meson.build | 10 +++++----- + 2 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/meson.build b/meson.build +index 435827c..28ee27a 100644 +--- a/meson.build ++++ b/meson.build +@@ -91,6 +91,7 @@ gusb_dep = dependency('gusb', version: '>= 0.2.0') + mathlib_dep = cc.find_library('m', required: false) + + # The following dependencies are only used for tests ++sh = find_program('sh', required: true) + cairo_dep = dependency('cairo', required: false) + + # introspection scanning and Gio-2.0.gir +diff --git a/tests/meson.build b/tests/meson.build +index f68ed40..8c8f5d0 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -151,7 +151,7 @@ if get_option('introspection') + endif + else + test(vdtest, +- find_program('sh'), ++ sh, + args: ['-c', 'exit 77'] + ) + endif +@@ -205,7 +205,7 @@ if get_option('introspection') + endif + else + test(driver_test, +- find_program('sh'), ++ sh, + args: ['-c', 'exit 77'] + ) + endif +@@ -224,13 +224,13 @@ if get_option('introspection') + else + warning('Skipping all driver tests as introspection bindings are missing') + test('virtual-image', +- find_program('sh'), ++ sh, + args: ['-c', 'exit 77'] + ) + + foreach driver_test: drivers_tests + test(driver_test, +- find_program('sh'), ++ sh, + args: ['-c', 'exit 77'] + ) + endforeach +@@ -273,7 +273,7 @@ foreach test_name: unit_tests + # Create a dummy test that always skips instead + warning('Test @0@ cannot be compiled due to missing dependencies'.format(test_name)) + test(test_name, +- find_program('sh'), ++ sh, + suite: ['unit-tests'], + args: ['-c', 'exit 77'], + ) diff --git a/patches/build-tests-Skip-a-test-if-the-test-requires-it-during-in.patch b/patches/build-tests-Skip-a-test-if-the-test-requires-it-during-in.patch new file mode 100644 index 0000000..ad36306 --- /dev/null +++ b/patches/build-tests-Skip-a-test-if-the-test-requires-it-during-in.patch @@ -0,0 +1,36 @@ +From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= +Date: Tue, 20 Feb 2024 08:24:12 +0100 +Subject: build/tests: Skip a test if the test requires it during inspection + +In case we don't have dependencies, we should skip the test, otherwise +we can just fail at test time + +Origin: https://gitlab.freedesktop.org/libfprint/libfprint/commit/7dbb21e7 +Forwarded: yes +--- + tests/meson.build | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/tests/meson.build b/tests/meson.build +index 8c8f5d0..dc3b70e 100644 +--- a/tests/meson.build ++++ b/tests/meson.build +@@ -100,11 +100,17 @@ if get_option('introspection') + base_args = files(vdtest + '.py') + suite = ['virtual-driver'] + +- r = run_command(unittest_inspector, files(vdtest + '.py'), check: true) ++ r = run_command(unittest_inspector, files(vdtest + '.py'), check: false) + unit_tests = r.stdout().strip().split('\n') + + if r.returncode() == 0 and unit_tests.length() > 0 + suite += vdtest ++ elif r.returncode() == 77 ++ test(vdtest, ++ sh, ++ args: ['-c', 'exit 77'] ++ ) ++ continue + else + unit_tests = [vdtest] + endif diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..3f5621a --- /dev/null +++ b/patches/series @@ -0,0 +1,3 @@ +build-Look-for-sh-just-once.patch +build-tests-Skip-a-test-if-the-test-requires-it-during-in.patch +469.patch