summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2013-08-12 01:36:31 +0200
committerPierre Schmitz <pierre@archlinux.de>2013-08-18 18:19:12 +0200
commit9c85d116f0425817b4a631e7a693dc5c948e2470 (patch)
tree62bc1c5ee16f2bafee11093b7b752dd9c677ade3
parent914ebe3a74287a7972fd4ba33ce3daa77ff96fc8 (diff)
downloaddevtools-9c85d116f0425817b4a631e7a693dc5c948e2470.tar.gz
devtools-9c85d116f0425817b4a631e7a693dc5c948e2470.tar.xz
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> Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
-rw-r--r--checkpkg.in30
1 files 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