diff --git a/common/hooks/do-extract/00-distfiles.sh b/common/hooks/do-extract/00-distfiles.sh index 303fe27e0a1..d1f457edcc5 100644 --- a/common/hooks/do-extract/00-distfiles.sh +++ b/common/hooks/do-extract/00-distfiles.sh @@ -4,6 +4,7 @@ hook() { local srcdir="$XBPS_SRCDISTDIR/$pkgname-$version" local f j curfile found extractdir + local TAR_CMD if [ -z "$distfiles" -a -z "$checksum" ]; then mkdir -p $wrksrc @@ -23,6 +24,10 @@ hook() { mkdir -p ${wrksrc} || msg_error "$pkgver: failed to create wrksrc.\n" fi + TAR_CMD="$(command -v bsdtar)" + [ -z "$TAR_CMD" ] && TAR_CMD="$(command -v tar)" + [ -z "$TAR_CMD" ] && msg_error "xbps-src: no suitable tar cmd (bsdtar, tar)\n" + msg_normal "$pkgver: extracting distfile(s), please wait...\n" for f in ${distfiles}; do @@ -71,7 +76,7 @@ hook() { case ${cursufx} in tar|txz|tbz|tlz|tgz|crate) - bsdtar -x --no-same-permissions --no-same-owner -f $srcdir/$curfile -C $extractdir + $TAR_CMD -x --no-same-permissions --no-same-owner -f $srcdir/$curfile -C $extractdir if [ $? -ne 0 ]; then msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" fi diff --git a/common/hooks/do-fetch/00-distfiles.sh b/common/hooks/do-fetch/00-distfiles.sh index 73239da1c73..db4f29c73a2 100644 --- a/common/hooks/do-fetch/00-distfiles.sh +++ b/common/hooks/do-fetch/00-distfiles.sh @@ -50,7 +50,7 @@ contents_cksum() { case ${cursufx} in tar|txz|tbz|tlz|tgz|crate) - cksum=$($XBPS_DIGEST_CMD <(bsdtar xf "$curfile" --list)) + cksum=$($XBPS_DIGEST_CMD <($TAR_CMD xf "$curfile" $TAR_CMD_STDOUT)) if [ $? -ne 0 ]; then msg_error "$pkgver: extracting $curfile to pipe.\n" fi @@ -73,7 +73,7 @@ contents_cksum() { ;; rpm) if command -v rpmextract &>/dev/null; then - cksum=$($XBPS_DIGEST_CMD <(rpm2cpio "$curfile" | bsdtar xf - --to-stdout)) + cksum=$($XBPS_DIGEST_CMD <(rpm2cpio "$curfile" | $TAR_CMD xf - $TAR_CMD_STDOUT)) if [ $? -ne 0 ]; then msg_error "$pkgver: extracting $curfile to pipe.\n" fi @@ -95,7 +95,7 @@ contents_cksum() { fi ;; gem) - cksum=$($XBPS_DIGEST_CMD <(bsdtar -xf "$curfile" data.tar.gz --list | bsdtar -xzO )) + cksum=$($XBPS_DIGEST_CMD <($TAR_CMD -xf "$curfile" data.tar.gz $TAR_CMD_STDOUT | $TAR_CMD -xzO )) ;; *) msg_error "$pkgver: cannot guess $curfile extract suffix. ($cursufx)\n" @@ -210,6 +210,15 @@ hook() { # Disable trap on ERR; the code is smart enough to report errors and abort. trap - ERR + # Detect bsdtar and GNU tar (in that order of preference) + TAR_CMD="$(command -v bsdtar)" + if [ "$TAR_CMD" ]; then + TAR_CMD_STDOUT="--list" + else + TAR_CMD="$(command -v tar)" + TAR_CMD_STDOUT="--to-stdout" + fi + # Detect distfiles with obsolete checksum and purge them from the cache for f in ${distfiles}; do curfile="${f#*>}" @@ -273,6 +282,8 @@ hook() { dfcount=$((dfcount + 1)) done + unset TAR_CMD TAR_CMD_STDOUT + if [ $errors -gt 0 ]; then msg_error "$pkgver: couldn't verify distfiles, exiting...\n" fi