Commit 9c85d116 authored by Dave Reisner's avatar Dave Reisner Committed by Pierre Schmitz
Browse files

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: default avatarDave Reisner <dreisner@archlinux.org>
Signed-off-by: default avatarPierre Schmitz <pierre@archlinux.de>
parent 914ebe3a
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
#!/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
@@ -62,19 +66,17 @@ for _pkgname in "${pkgname[@]}"; do
		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