pivra
LOW
maintainer onbeskarakterli
0 votes
scanned 2026-10-30 19:57:05.223717
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: onbeskarakterli <onbeskarakterli@gmail.com>
2
# Stable Pivra 0.1.0 release package for Arch Linux.
3
# Immutable upstream commit and SHA-256 are pinned in this PKGBUILD.
4
pkgname=pivra
5
pkgver=0.1.0
6
pkgrel=1
7
pkgdesc='Native GNOME JPEG/PNG image viewer'
8
arch=('x86_64')
9
url='https://github.com/onbeskarakterli/Pivra'
10
license=('GPL-3.0-only')
11
# Dependencies and native build validated for the v0.1.0 Arch release.
12
depends=('gtk4>=4.16' 'libadwaita>=1.2' 'glib2' 'gdk-pixbuf2'
13
'gnome-desktop-4' 'glycin' 'bubblewrap' 'libseccomp' 'lcms2'
14
'fontconfig' 'cairo' 'graphene' 'glibc' 'gcc-libs' 'hicolor-icon-theme')
15
makedepends=('cargo' 'pkgconf' 'python>=3.11')
16
checkdepends=('desktop-file-utils')
17
_target="${CARCH}-unknown-linux-gnu"
18
_release_commit='18b9bc2e021aeeeb02dc42198db4522a67ed9e1b'
19
source=("pivra-$pkgver.tar.gz::https://github.com/onbeskarakterli/Pivra/archive/$_release_commit.tar.gz"
20
'collect-licenses.py')
21
sha256sums=('f8a31e5569ead7ae90b4a292c108ddfd77a45bc59327d2af10e88dc6d459cbf9' 'e0bad72c99f4629b0668f59450e53a75022ea746efe57191ab8da34fb5cf1201')
22
23
prepare() {
24
export CARGO_HOME="$srcdir/cargo-home"
25
export CARGO_TARGET_DIR="$srcdir/Pivra-$_release_commit/target"
26
cd "$srcdir/Pivra-$_release_commit" || return 1
27
cargo fetch --locked || return 1
28
}
29
30
build() {
31
export PIVRA_DISTRIBUTION_BUILD=1
32
export CARGO_HOME="$srcdir/cargo-home"
33
export CARGO_TARGET_DIR="$srcdir/Pivra-$_release_commit/target"
34
cd "$srcdir/Pivra-$_release_commit" || return 1
35
pkg-config --atleast-version=4.16 gtk4 || return 1
36
pkg-config --atleast-version=1.2 libadwaita-1 || return 1
37
pkg-config --exists gnome-desktop-4 gio-2.0 gobject-2.0 gdk-pixbuf-2.0 lcms2 libseccomp || return 1
38
# Do not silently use a static LCMS fallback or an SDK override.
39
if [[ -n ${LCMS2_STATIC+x} || -n ${LCMS2_LIB_DIR+x} ]]; then
40
printf '%s\n' 'BLOCKED: LCMS2 overrides must not change the shared-library contract.' >&2
41
return 1
42
fi
43
local flags
44
local -a compiler cppflags cflags ldflags pkg_cflags pkg_libs
45
read -r -a compiler <<< "${CC:-cc}"
46
read -r -a cppflags <<< "${CPPFLAGS:-}"
47
read -r -a cflags <<< "${CFLAGS:-}"
48
read -r -a ldflags <<< "${LDFLAGS:-}"
49
flags=$(pkg-config --cflags gnome-desktop-4 gio-2.0 gobject-2.0 gdk-pixbuf-2.0) || return 1
50
read -r -a pkg_cflags <<< "$flags"
51
flags=$(pkg-config --libs gnome-desktop-4 gio-2.0 gobject-2.0 gdk-pixbuf-2.0) || return 1
52
read -r -a pkg_libs <<< "$flags"
53
mkdir -p "$srcdir/build" || return 1
54
"${compiler[@]}" "${cppflags[@]}" "${cflags[@]}" "${pkg_cflags[@]}" -Wall -Wextra -Werror \
55
native/thumbnail_factory.c -o "$srcdir/build/pivra-thumbnail-factory" \
56
"${ldflags[@]}" "${pkg_libs[@]}" || return 1
57
cargo build --release --locked --offline --target "$_target" --bin pivra || return 1
58
python - "target/$_target/release/pivra" <<'PY' || return 1
59
import pathlib
60
import sys
61
if b'/out/pivra-thumbnail-factory' in pathlib.Path(sys.argv[1]).read_bytes():
62
sys.exit('FAIL: viewer embeds a Cargo OUT_DIR thumbnail-helper path')
63
PY
64
test -x "$srcdir/build/pivra-thumbnail-factory" || return 1
65
readelf -d "target/$_target/release/pivra" > "$srcdir/build/pivra.dynamic" || return 1
66
grep -F 'liblcms2.so.2' "$srcdir/build/pivra.dynamic" >/dev/null || return 1
67
grep -F 'libseccomp.so.2' "$srcdir/build/pivra.dynamic" >/dev/null || return 1
68
cargo metadata --locked --offline --format-version 1 > "$srcdir/build/metadata.json" || return 1
69
python "$srcdir/collect-licenses.py" --metadata "$srcdir/build/metadata.json" \
70
--lock Cargo.lock --cargo-home "$CARGO_HOME" \
71
--notices "$srcdir/build/third-party" --sources "$srcdir/build/crate-sources" || return 1
72
}
73
74
check() {
75
export PIVRA_DISTRIBUTION_BUILD=1
76
export CARGO_HOME="$srcdir/cargo-home"
77
export CARGO_TARGET_DIR="$srcdir/Pivra-$_release_commit/target"
78
cd "$srcdir/Pivra-$_release_commit" || return 1
79
CARGO_INCREMENTAL=0 cargo test --locked --offline --target "$_target" || return 1
80
cargo check --locked --offline --target "$_target" || return 1
81
desktop-file-validate data/io.github.onbeskarakterli.Pivra.desktop || return 1
82
}
83
84
package() {
85
cd "$srcdir/Pivra-$_release_commit" || return 1
86
install -Dm755 "target/$_target/release/pivra" "$pkgdir/usr/bin/pivra" || return 1
87
install -Dm755 "$srcdir/build/pivra-thumbnail-factory" "$pkgdir/usr/bin/pivra-thumbnail-factory" || return 1
88
install -Dm644 data/io.github.onbeskarakterli.Pivra.desktop \
89
"$pkgdir/usr/share/applications/io.github.onbeskarakterli.Pivra.desktop" || return 1
90
local variant name
91
for variant in scalable symbolic; do
92
name=io.github.onbeskarakterli.Pivra
93
[[ $variant == symbolic ]] && name+=-symbolic
94
install -Dm644 "data/icons/hicolor/$variant/apps/$name.svg" \
95
"$pkgdir/usr/share/icons/hicolor/$variant/apps/$name.svg" || return 1
96
done
97
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/pivra/LICENSE" || return 1
98
install -d "$pkgdir/usr/share/licenses/pivra/third-party" \
99
"$pkgdir/usr/share/doc/pivra/corresponding-source/crates" || return 1
100
cp -r --no-preserve=ownership "$srcdir/build/third-party/." \
101
"$pkgdir/usr/share/licenses/pivra/third-party/" || return 1
102
cp -r --no-preserve=ownership "$srcdir/build/crate-sources/." \
103
"$pkgdir/usr/share/doc/pivra/corresponding-source/crates/" || return 1
104
install -Dm644 "$srcdir/pivra-$pkgver.tar.gz" \
105
"$pkgdir/usr/share/doc/pivra/corresponding-source/pivra-$pkgver.tar.gz" || return 1
106
install -Dm644 "${BASH_SOURCE[0]}" \
107
"$pkgdir/usr/share/doc/pivra/corresponding-source/PKGBUILD" || return 1
108
install -Dm644 "$srcdir/collect-licenses.py" \
109
"$pkgdir/usr/share/doc/pivra/corresponding-source/collect-licenses.py" || return 1
110
local doc
111
for doc in PIVRA_V0.1_RELEASE_NOTES.md PIVRA_V0.1_DEPENDENCY_LICENSE_AUDIT.md; do
112
install -Dm644 "docs/releases/$doc" "$pkgdir/usr/share/doc/pivra/$doc" || return 1
113
done
114
}
115
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-10-30 19:57:05 | Low | 1 |