libfprint-sigfm-0078
CLEAN
maintainer rsd
0 votes
scanned 2026-10-19 00:03:55.276608
Triggered rules
Clean
AI review downgraded a static finding
llm_review
The static rules flagged this LOW, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it CLEAN (confidence 95%): The package builds from pinned git sources on GitHub, includes proper b2sums for verification, and installs a library and a setup tool without executing remote code or introducing unverifiable binaries; the flagged low votes and recent upload are mitigated by transparent, reviewable build process.
1 higher static finding superseded - not the current verdict (shown for transparency)
Low
Few votes, recently uploaded
zero_votes_recent
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
PKGBUILD
1
# Maintainer: Raul Dias <raul at dias dot com dot br>
2
# Contributor: Jan Alexander Steffens (heftig)
3
# Contributor: Tom Gundersen
4
# Contributor: Thomas Baechler
5
# Based on the Arch Linux libfprint PKGBUILD.
6
7
pkgname=libfprint-sigfm-0078
8
pkgver=1.94.100.r25.gf9c60a2
9
pkgrel=3
10
pkgdesc="Library for fingerprint readers, with the SIGFM matcher and the Synaptics 06cb:0078 driver"
11
url="https://github.com/rsd/fingerprint-06cb-0078"
12
arch=(x86_64)
13
# The libfprint fork is LGPL-2.1-or-later; this project's setup tool and Python
14
# package (synaptics0078) are MIT.
15
license=(LGPL-2.1-or-later MIT)
16
depends=(
17
libgcc
18
glib2
19
glibc
20
libgudev
21
libgusb
22
openssl
23
pixman
24
# SIGFM matcher, used by the synaptics0078 driver
25
opencv
26
libstdc++
27
# synaptics0078-setup: the interpreter, USB access (calibration), download,
28
# bsdtar (vendor archives) and setpriv (unprivileged extraction)
29
python
30
python-pyusb
31
curl
32
libarchive
33
util-linux
34
)
35
makedepends=(
36
git
37
glib2-devel
38
gobject-introspection
39
gtk-doc
40
meson
41
python-cairo
42
python-gobject
43
systemd
44
)
45
checkdepends=(
46
cairo
47
umockdev
48
python-pytest
49
)
50
# libfprint-git too: Omarchy's fingerprint setup checks `pacman -Q libfprint-git`
51
# and would otherwise replace this package with its own libfprint-git.
52
provides=(
53
"libfprint=${pkgver%%.r*}"
54
"libfprint-git=${pkgver%%.r*}"
55
libfprint-2.so
56
)
57
conflicts=(libfprint libfprint-git)
58
groups=(fprint)
59
# The libfprint fork: upstream 1.94.100 master + the SIGFM series + the
60
# synaptics0078 driver, branch sigfm-0078, pinned by commit.
61
_repo=https://github.com/rsd/libfprint.git
62
_commit=f9c60a25c95b8fcf805812bae1ddb984e2e568d9
63
# This project (synaptics0078-setup and the synaptics0078 Python package),
64
# pinned by release tag.
65
_toolrepo=https://github.com/rsd/fingerprint-06cb-0078.git
66
_tooltag=v0.1.0
67
source=(
68
"libfprint::git+${_repo}#commit=${_commit}"
69
"fp0078::git+${_toolrepo}#tag=${_tooltag}"
70
)
71
# b2sums of `git archive` of each pin (makepkg verifies git sources pinned by
72
# commit or tag), so a moved tag fails the build.
73
b2sums=('040fb63356af23dd30d14cab7c29c02cd64d7b8089c99380875da9b1fa7ee290df09dd06bd9606d682ac8f9b6f4770c139f52d7ca518182d9f984be186653cb6'
74
'b1392843542f4b7e8387f24c2449f02183e04d3e42d1fd80499a554d93c4db70e818e9c8464545f9720bc79f1db518faec83e162e67739abc142ca8f1517c00e')
75
install=libfprint-sigfm-0078.install
76
77
prepare() {
78
local f
79
for f in synaptics0078/__init__.py packaging/arch/libfprint-sigfm-0078/synaptics0078-setup LICENSE; do
80
if [[ ! -f fp0078/$f ]]; then
81
echo "fp0078 at ${_tooltag} has no $f" >&2
82
return 1
83
fi
84
done
85
}
86
87
build() {
88
local meson_options=(
89
# Add virtual drivers for integration tests (e.g. in fprintd)
90
-D drivers=all
91
92
-D installed-tests=false
93
94
# synaptics0078_data_dir stays at its default, /var/lib/fprint/synaptics0078,
95
# where synaptics0078-setup installs the per-unit files.
96
)
97
98
arch-meson libfprint build "${meson_options[@]}"
99
100
# Without OpenCV, meson silently drops the synaptics0078 driver from
101
# drivers=all; that build must never ship.
102
if ! grep -qx '#define HAVE_SIGFM 1' build/config.h; then
103
echo "OpenCV not found: HAVE_SIGFM is unset, synaptics0078 would be missing" >&2
104
return 1
105
fi
106
107
meson compile -C build
108
}
109
110
check() {
111
# makepkg runs this under errexit: a failing step fails the build.
112
_check_meson
113
_check_python
114
}
115
116
_check_meson() {
117
meson test -C build --print-errorlogs && return 0
118
119
# egis_etu905 fails intermittently on unmodified upstream too (its umockdev
120
# replay times out while cancelling). When it is the ONLY failure, it is
121
# rerun alone, up to 3 times; every attempt stays in the log. Any other
122
# failure, or egis_etu905 failing all 3 reruns, fails the build.
123
local failed
124
failed=$(python3 -c '
125
import json, sys
126
for line in open(sys.argv[1]):
127
t = json.loads(line)
128
if t["result"] not in ("OK", "SKIP", "EXPECTEDFAIL"):
129
print(t["name"])
130
' build/meson-logs/testlog.json)
131
if [[ $failed != *:egis_etu905 || $failed == *$'\n'* ]]; then
132
return 1
133
fi
134
local i
135
for i in 1 2 3; do
136
echo "check: egis_etu905 was the only failure (known upstream flake); rerun $i of 3" >&2
137
meson test -C build --print-errorlogs egis_etu905 && return 0
138
done
139
return 1
140
}
141
142
# The package and setup tests, from the pinned checkout, with the system
143
# interpreter. Tests that need local/b5 or the template skip there: a git
144
# checkout has no local/ or proto/data/.
145
_check_python() {
146
cd fp0078
147
PYTHONDONTWRITEBYTECODE=1 python -m pytest -q -p no:cacheprovider \
148
synaptics0078/tests tools/test_synaptics0078_setup.py
149
}
150
151
package() {
152
meson install -C build --destdir "$pkgdir"
153
154
cd fp0078
155
install -Dm755 packaging/arch/libfprint-sigfm-0078/synaptics0078-setup \
156
"$pkgdir/usr/bin/synaptics0078-setup"
157
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE-synaptics0078"
158
159
# The Python package goes to a private dir (it survives Python minor upgrades,
160
# which site-packages does not without a rebuild), without its tests.
161
local _libdir=/usr/lib/synaptics0078 f
162
while IFS= read -r -d '' f; do
163
install -Dm644 "$f" "$pkgdir$_libdir/$f"
164
done < <(find synaptics0078 -path synaptics0078/tests -prune -o -type f -name '*.py' -print0)
165
# pyc at build time, so pacman owns them (the setup runs with -B). The recorded
166
# source path is the installed one; checked-hash pycs stay valid whatever
167
# mtime makepkg gives the files.
168
python -m compileall -q -f --invalidation-mode checked-hash \
169
-s "$pkgdir" -p / "$pkgdir$_libdir/synaptics0078"
170
}
171
172
# vim:set sw=2 sts=-1 et:
173
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-10-19 00:03:55 | Clean | 2 |
| 2026-10-18 23:23:07 | Low | 1 |