gearlever-bin: ship ftputil + desktop-entry-lib inside /usr/share/gearlever (pinned via upstream requirements.txt) instead of depending on the AUR packages. bottles-bin: build the fvs2 CLI (with its core library) from source and bundle it under /usr/lib/bottles (Bottles patched to use that path), and ship patool, pathvalidate and vkbasalt-cli in /usr/share/bottles. vkbasalt becomes an optdepend. Installing either package now needs no AUR builds.
66 lines
2.8 KiB
Bash
66 lines
2.8 KiB
Bash
# gearlever-bin - prebuilt package of https://github.com/mijorus/gearlever
|
|
# ("Gear Lever", a GTK4 + LibAdwaita AppImage manager written in Python).
|
|
#
|
|
# Upstream only publishes a Flatpak bundle, so build_artifact() builds the
|
|
# app from the release tarball and the resulting install tree is published as
|
|
# a GitHub release asset of this repository, which the PKGBUILD then uses.
|
|
|
|
UPSTREAM_REPO="mijorus/gearlever"
|
|
|
|
# Installed in CI (pacman) before build_artifact runs.
|
|
BUILD_DEPS=(meson ninja glib2 glib2-devel python gettext python-pip)
|
|
|
|
latest_version() {
|
|
# gh instead of curl: unauthenticated GitHub API calls are rate-limited on
|
|
# shared CI runner IPs.
|
|
gh api "repos/$UPSTREAM_REPO/releases/latest" --jq '.tag_name' | sed 's/^v//'
|
|
}
|
|
|
|
# build_artifact <version> <output-file>
|
|
build_artifact() {
|
|
local ver="$1" outfile="$2"
|
|
local workdir destdir srctree
|
|
workdir="$(mktemp -d)"
|
|
destdir="$(mktemp -d)"
|
|
|
|
curl -sfL "https://github.com/$UPSTREAM_REPO/archive/refs/tags/$ver.tar.gz" | tar -xz -C "$workdir"
|
|
srctree="$workdir/gearlever-$ver"
|
|
|
|
# Arch's 7zip package ships /usr/bin/7z, not the 7zz binary the Flatpak
|
|
# bundles, and the ELF-offset helper lives in /usr/lib/gearlever instead of
|
|
# somewhere on $PATH.
|
|
sed -i -e 's/7zz/7z/g' \
|
|
-e 's|get_appimage_offset|/usr/lib/gearlever/get_appimage_offset|g' \
|
|
"$srctree/src/providers/AppImageProvider.py"
|
|
|
|
meson setup "$workdir/build" "$srctree" --prefix=/usr --buildtype=release
|
|
meson install -C "$workdir/build" --destdir "$destdir"
|
|
|
|
install -Dm755 "$srctree/build-aux/get_appimage_offset.sh" \
|
|
"$destdir/usr/lib/gearlever/get_appimage_offset"
|
|
|
|
# src/meson.build uses install_subdir('.'), which drags the meson.build
|
|
# files themselves into the install tree.
|
|
find "$destdir" -name meson.build -delete
|
|
|
|
# ftputil and desktop-entry-lib are AUR-only; bundle them (pure python)
|
|
# into the app's module dir, which the launcher puts on sys.path. Versions
|
|
# come from upstream's requirements.txt pins.
|
|
grep -E '^(ftputil|desktop-entry-lib)' "$srctree/requirements.txt" > "$workdir/bundle-reqs.txt"
|
|
[[ "$(wc -l < "$workdir/bundle-reqs.txt")" -eq 2 ]] || { echo "expected 2 pinned bundle deps in requirements.txt" >&2; return 1; }
|
|
python -m pip install --isolated --no-deps --target "$destdir/usr/share/gearlever" \
|
|
-r "$workdir/bundle-reqs.txt"
|
|
rm -rf "$destdir/usr/share/gearlever/bin"
|
|
|
|
# These caches are generated by pacman hooks; shipping them would cause
|
|
# file conflicts on install.
|
|
rm -f "$destdir/usr/share/glib-2.0/schemas/gschemas.compiled" \
|
|
"$destdir/usr/share/applications/mimeinfo.cache" \
|
|
"$destdir/usr/share/icons/hicolor/icon-theme.cache"
|
|
|
|
tar --zstd --sort=name --owner=0 --group=0 --numeric-owner --mtime='@0' \
|
|
-cf "$outfile" -C "$destdir" usr
|
|
|
|
rm -rf "$workdir" "$destdir"
|
|
}
|