Read PKGBUILD variables with CARCH set and refuse to queue a package whose version cannot be read
makepkg always exports CARCH, so PKGBUILDs may branch on it at file scope. Every place the tooling sourced a PKGBUILD did so without CARCH, taking the wrong branch or aborting partway, and check-versions turned the resulting empty pkgver/pkgrel into the version '-', which never matches a published version and queues an endless rebuild. package_pkgbuild_var reads one variable the way makepkg would see it, for the architecture being checked, and reports whether the source succeeded. check-versions, sync-rebuilds and omarchy-pkgs use it. check-versions now warns and skips a package whose pkgver or pkgrel is empty instead of comparing a partial version. A self-test covers a PKGBUILD that branches on CARCH before assigning its version.
This commit is contained in:
4 files changed
+70
-10
No files matched your search
+21
-1
@@ -237,7 +237,7 @@ pkgbuild_field() {
|
||||
local package_dir="$1"
|
||||
local field="$2"
|
||||
|
||||
(cd "$package_dir" && env -u OMARCHY_SRC bash -c "source PKGBUILD 2>/dev/null; echo \"\${$field:-}\"")
|
||||
package_pkgbuild_var "$package_dir" "$field"
|
||||
}
|
||||
|
||||
# 2 -> 3, and 1.1 -> 1.2. Anything else is a pkgrel this command has no business
|
||||
@@ -781,6 +781,26 @@ cmd_self_test() {
|
||||
unset SELFTEST_ARCHES
|
||||
check "pkgrel untouched" 1 "$(pkgrel_of "$root/pkgbuilds/t-x86")"
|
||||
|
||||
echo "A PKGBUILD that branches on CARCH at file scope still reads its version:"
|
||||
root=$(selftest_root carch-branch)
|
||||
mkdir -p "$root/pkgbuilds/t-carch/.omarchy"
|
||||
cat > "$root/pkgbuilds/t-carch/PKGBUILD" <<'PKG'
|
||||
pkgname=t-carch
|
||||
case "$CARCH" in
|
||||
x86_64) _suffix=x64 ;;
|
||||
aarch64) _suffix=arm64 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
pkgver=1.0
|
||||
pkgrel=3
|
||||
arch=(x86_64 aarch64)
|
||||
PKG
|
||||
echo '{"source":"local"}' > "$root/pkgbuilds/t-carch/.omarchy/package.json"
|
||||
check "pkgver read for x86_64" "1.0" "$(package_pkgbuild_var "$root/pkgbuilds/t-carch" pkgver x86_64)"
|
||||
check "pkgrel read for x86_64" "3" "$(package_pkgbuild_var "$root/pkgbuilds/t-carch" pkgrel x86_64)"
|
||||
check "arch-specific value follows CARCH" "arm64" "$(package_pkgbuild_var "$root/pkgbuilds/t-carch" _suffix aarch64)"
|
||||
check "unsupported arch reports failure" 1 "$(package_pkgbuild_var "$root/pkgbuilds/t-carch" pkgver armv7h >/dev/null; echo $?)"
|
||||
|
||||
echo ""
|
||||
if [[ "$failures" -eq 0 ]]; then
|
||||
print_success "Self-test passed"
|
||||
|
||||
Reference in new issue
Block a user