[arch-projects] [devtools] [PATCH] checkpkg: avoid using PKGEXT to guess tarball name
We can't rely on PKGEXT since it's not sourced from a controlled location. Case in point, if a user sets PKGEXT=.pkg.tar.gz, checkpkg fails and offers no easy workaround. Instead, use glob expansion to resolve the name of the tarball, bailing if it can't be found definitively. This involves some refactoring to avoid modifying PWD (which is advisable regardless). Signed-off-by: Dave Reisner <dreisner@archlinux.org> --- Got tired of hacking checkpkg to work on my system... I realize this is somewhat of a sledgehammer approach -- we could just as easily declare the makepkg-x86_64.conf to be "golden" and source that instead, but that might be prone to other issues.... checkpkg.in | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/checkpkg.in b/checkpkg.in index 54149db..ef46399 100644 --- a/checkpkg.in +++ b/checkpkg.in @@ -1,5 +1,7 @@ #!/bin/bash +shopt -s extglob + m4_include(lib/common.sh) # Source makepkg.conf; fail if it is not found @@ -25,15 +27,17 @@ fi STARTDIR=$(pwd) TEMPDIR=$(mktemp -d --tmpdir checkpkg-script.XXXX) -cd "$TEMPDIR" for _pkgname in "${pkgname[@]}"; do - pkgfile=${_pkgname}-$(get_full_version $_pkgname)-${CARCH}${PKGEXT} + pkgfile=(${_pkgname}-$(get_full_version $_pkgname)-${CARCH}.pkg.tar?(.?z)) + if (( ${#pkgfile[*]} != 1 )); then + die 'Ambiguous package name: %s\n' "${pkgfile[*]}" + fi if [[ -f "$STARTDIR/$pkgfile" ]]; then - ln -s "$STARTDIR/$pkgfile" "$pkgfile" + ln -s "$STARTDIR/$pkgfile" "$TEMPDIR/$pkgfile" elif [[ -f "$PKGDEST/$pkgfile" ]]; then - ln -s "$PKGDEST/$pkgfile" "$pkgfile" + ln -s "$PKGDEST/$pkgfile" "$TEMPDIR/$pkgfile" else die "File \"$pkgfile\" doesn't exist" fi @@ -58,23 +62,21 @@ for _pkgname in "${pkgname[@]}"; do elif [[ -f "$STARTDIR/$oldpkg" ]]; then ln -s "$STARTDIR/$oldpkg" "$oldpkg" else - curl -fsLC - --retry 3 --retry-delay 3 -o "$oldpkg" "$pkgurl" + curl -fsLC - --retry 3 --retry-delay 3 -o "$oldpkg" "$pkgurl" fi fi - bsdtar tf "$oldpkg" | sort > "filelist-$_pkgname-old" - bsdtar tf "$pkgfile" | sort > "filelist-$_pkgname" + bsdtar tf "$oldpkg" | sort > "$TEMPDIR/filelist-$_pkgname-old" + bsdtar tf "$pkgfile" | sort > "$TEMPDIR/filelist-$_pkgname" - sdiff -s "filelist-$_pkgname-old" "filelist-$_pkgname" + sdiff -s "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname" - if diff "filelist-$_pkgname-old" "filelist-$_pkgname" | grep '\.so' > /dev/null 2>&1; then - mkdir -p pkg - cd pkg - bsdtar xf ../"$pkgfile" > /dev/null - diff "../filelist-$_pkgname-old" "../filelist-$_pkgname" | awk '/>.*\.so/{$1 = ""; print $0}' | while read i; do + if diff "$TEMPDIR/filelist-$_pkgname"{-old,} | grep '\.so' &>/dev/null; then + mkdir -p "$TEMPDIR/pkg" + bsdtar -C "$TEMPDIR" xf ../"$pkgfile" #> /dev/null + diff "$TEMPDIR/filelist-$_pkgname-old" "$TEMPDIR/filelist-$_pkgname" | awk '/>.*\.so/{$1 = ""; print $0}' | while read i; do echo "${i}: " "$(objdump -p "$i" | grep SONAME)" done - cd .. else msg "No soname differences for $_pkgname." fi -- 1.8.3.4
participants (1)
-
Dave Reisner