plico
LOW
maintainer gradia64
0 votes
scanned 2026-10-20 09:27:54.737837
Why flagged
Uploaded within the last 14 days with 2 or fewer community votes — little peer review so far.
Triggered rules
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: gradia <gradia@disroot.org>
2
3
pkgname=plico
4
pkgver=0.1.4
5
pkgrel=1
6
pkgdesc="Editor PDF nativo per Linux: pagine, cancellazione vera, moduli, OCR, firma (PySide6/Qt)"
7
arch=('any')
8
url="https://github.com/gradia64/Plico"
9
license=('GPL-3.0-or-later')
10
# Tutto dai repository ufficiali. pyHanko e le sue due dipendenze che Arch
11
# non ha (pyhanko-certvalidator, uritools) sono Python puro e vengono incluse
12
# in /usr/share/plico/vendor, fissate per SHA-256 qui sotto: la firma PAdES
13
# funziona senza pacchetti AUR di terzi.
14
depends=(
15
'python' 'pyside6' 'qt6-svg' 'hicolor-icon-theme'
16
# il plugin TIFF di Qt (scansioni .tif in «Crea da immagini» e «Unisci»)
17
'qt6-imageformats'
18
'python-pymupdf' 'python-pikepdf'
19
# dipendenze di pyHanko e pyhanko-certvalidator
20
'python-asn1crypto' 'python-tzlocal' 'python-aiohttp' 'python-cryptography'
21
'python-lxml' 'python-oscrypto' 'python-certifi'
22
)
23
makedepends=('git' 'qt6-tools')
24
checkdepends=('python-pytest' 'ttf-dejavu')
25
# Tesseract è dentro MuPDF (python-pymupdf): l'OCR vuole solo i dati di lingua
26
optdepends=(
27
'tesseract-data-ita: OCR dei documenti in italiano'
28
'tesseract-data-eng: OCR dei documenti in inglese'
29
'tesseract-data-fra: OCR dei documenti in francese'
30
'tesseract-data-deu: OCR dei documenti in tedesco'
31
'tesseract-data-spa: OCR dei documenti in spagnolo'
32
)
33
_pyhanko=pyhanko-0.37.0-py3-none-any.whl
34
_certvalidator=pyhanko_certvalidator-0.32.1-py3-none-any.whl
35
_uritools=uritools-6.1.3-py3-none-any.whl
36
# Il tag firmato dal maintainer: con «?signed» makepkg verifica la firma del
37
# tag annotato e la accetta solo da una chiave in validpgpkeys. Il prefisso
38
# «$pkgname::» fissa la cartella del clone in $srcdir/plico.
39
source=(
40
"$pkgname::git+$url.git#tag=v$pkgver?signed"
41
"https://files.pythonhosted.org/packages/1c/6e/e6dfe44b6669574cf37f37efbe67cc969cb69e27620ac5e5ff7b45bab607/$_pyhanko"
42
"https://files.pythonhosted.org/packages/f4/49/81f92016547077d004a883864da9148e725741f365064a1c9dfe5558f49a/$_certvalidator"
43
"https://files.pythonhosted.org/packages/ac/76/e9bb35862bcc5b82218d2c017b1eacdcfeb3ba46ce0c0ca8ffc4db80ddbe/$_uritools"
44
)
45
# le wheel sono zip: makepkg non le scompatta, lo fa prepare() nella cartella giusta
46
noextract=("$_pyhanko" "$_certvalidator" "$_uritools")
47
# SKIP per il sorgente git: lo garantisce la firma del tag
48
sha256sums=('SKIP'
49
'79046d8057edec5fcc61aa66dc1041262f5248eec473c33a89905a0a661eed05'
50
'76100cdda13bd085beaa94d4b9080fe6f4ee67248976ec9a19c4d58642558a2b'
51
'136f113e76e53f85bf2d9cce0c3d40ceec775d0409e7d6de9b28f046a7d42838')
52
# Impronta della primaria: makepkg accetta anche le firme delle sue
53
# sottochiavi, quindi una rotazione delle sottochiavi non cambia questa riga.
54
validpgpkeys=('184307C7A1585AFAD7F09DF6EBC8B4A0FFD5B91F') # gradia (Plico release key)
55
56
prepare() {
57
rm -rf vendor
58
for wheel in "$_pyhanko" "$_certvalidator" "$_uritools"; do
59
python -m zipfile -e "$wheel" vendor
60
done
61
}
62
63
build() {
64
cd "$pkgname"
65
# i cataloghi: lrelease sta in qt6-tools, che serve solo per costruire
66
local lrelease=/usr/lib/qt6/bin/lrelease
67
for ts in src/plico/translations/*.ts; do
68
"$lrelease" -silent "$ts" -qm "${ts%.ts}.qm"
69
done
70
}
71
72
check() {
73
cd "$pkgname"
74
QT_QPA_PLATFORM=offscreen PYTHONPATH="$PWD/src:$srcdir/vendor" \
75
python -m pytest -q -p no:cacheprovider tests
76
}
77
78
package() {
79
cd "$pkgname"
80
81
install -d "$pkgdir/usr/share/plico"
82
cp -r src/plico "$pkgdir/usr/share/plico/"
83
rm -f "$pkgdir"/usr/share/plico/plico/translations/*.ts
84
cp -r "$srcdir/vendor" "$pkgdir/usr/share/plico/vendor"
85
find "$pkgdir/usr/share/plico" -type d -name __pycache__ -prune -exec rm -rf {} +
86
install -Dm644 packaging/common/launcher.py "$pkgdir/usr/share/plico/launcher.py"
87
python -m compileall -q -s "$pkgdir" -p / "$pkgdir/usr/share/plico"
88
89
# vendor/ nel PYTHONPATH: dopo la cartella di launcher.py (sys.path[0]),
90
# prima dei pacchetti di sistema. Qui e non in launcher.py, perché il
91
# launcher viene dal tag, e un tag vecchio non sa di vendor/
92
install -d "$pkgdir/usr/bin"
93
cat > "$pkgdir/usr/bin/plico" <<'SH'
94
#!/bin/sh
95
PYTHONPATH="/usr/share/plico/vendor${PYTHONPATH:+:$PYTHONPATH}"
96
export PYTHONPATH
97
exec /usr/bin/python3 /usr/share/plico/launcher.py "$@"
98
SH
99
chmod 755 "$pkgdir/usr/bin/plico"
100
101
install -Dm644 flatpak/io.github.gradia64.plico.desktop \
102
"$pkgdir/usr/share/applications/io.github.gradia64.plico.desktop"
103
install -Dm644 flatpak/io.github.gradia64.plico.svg \
104
"$pkgdir/usr/share/icons/hicolor/scalable/apps/io.github.gradia64.plico.svg"
105
install -Dm644 flatpak/io.github.gradia64.plico.metainfo.xml \
106
"$pkgdir/usr/share/metainfo/io.github.gradia64.plico.metainfo.xml"
107
install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md"
108
}
109
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-10-20 09:27:54 | Low | 1 |