From bb60d62b5c3e6a6a1904e1d4026f1cddd6416711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Tue, 11 Jul 2023 23:02:44 +0700 Subject: [PATCH 1/5] do-extract: move main logic into helper function --- common/environment/setup/archive.sh | 164 ++++++++++++++++++++++++ common/hooks/do-extract/00-distfiles.sh | 123 +----------------- 2 files changed, 165 insertions(+), 122 deletions(-) create mode 100644 common/environment/setup/archive.sh diff --git a/common/environment/setup/archive.sh b/common/environment/setup/archive.sh new file mode 100644 index 0000000000000..4920bcdb41cbd --- /dev/null +++ b/common/environment/setup/archive.sh @@ -0,0 +1,164 @@ +vextract() { + local sc=--strip-components=1 + local dst= + while [ "$#" -ne 1 ]; do + case "$1" in + -C) + if [ -z "$2" ]; then + msg_error "$pkgver: vextract -C .\n" + fi + dst="$2" + mkdir -p "$dst" + shift 2 + ;; + --no-strip-components) + sc= + shift + ;; + --strip-components=*) + sc="$1" + shift + ;; + --) + shift; break ;; + *) + break ;; + esac + done + + local TAR_CMD sfx + local archive="$1" + local ret=0 + + 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" + case "$archive" in + *.tar.lzma) sfx="txz";; + *.tar.lz) sfx="tlz";; + *.tlz) sfx="tlz";; + *.tar.xz) sfx="txz";; + *.txz) sfx="txz";; + *.tar.bz2) sfx="tbz";; + *.tbz) sfx="tbz";; + *.tar.gz) sfx="tgz";; + *.tgz) sfx="tgz";; + *.tar.zst) sfx="tzst";; + *.tzst) sfx="tzst";; + *.gz) sfx="gz";; + *.xz) sfx="xz";; + *.bz2) sfx="bz2";; + *.zst) sfx="zst";; + *.tar) sfx="tar";; + *.zip) sfx="zip";; + *.rpm) sfx="rpm";; + *.deb) sfx="deb";; + *.patch) sfx="txt";; + *.diff) sfx="txt";; + *.txt) sfx="txt";; + *.sh) sfx="txt";; + *.7z) sfx="7z";; + *.gem) sfx="gem";; + *.crate) sfx="crate";; + *) msg_error "$pkgver: unknown distfile suffix for $archive.\n";; + esac + + case ${sfx} in + tar|txz|tbz|tlz|tgz|tzst|crate) + $TAR_CMD ${sc:+"$sc"} ${dst:+-C "$dst"} -x \ + --no-same-permissions --no-same-owner \ + -f $archive + ;; + gz|bz2|xz|zst) + cp -f $archive "$dst" + ( + if [ "$dst" ]; then cd "$dst"; fi + case ${sfx} in + gz) + gunzip -f $archive + ;; + bz2) + bunzip2 -f $archive + ;; + xz) + unxz -f $archive + ;; + zst) + unzstd $archive + ;; + esac + ) + ;; + zip) + if command -v unzip &>/dev/null; then + unzip -o -q $archive ${dst:+-d "$dst"} + elif command -v bsdtar &>/dev/null; then + bsdtar ${sc:+"$sc"} ${dst:+-C "$dst"} -xf $archive + else + msg_error "$pkgver: cannot find unzip or bsdtar bin for extraction.\n" + fi + ;; + rpm) + if ! command -v bsdtar &>/dev/null; then + msg_error "$pkgver: cannot find bsdtar for extraction.\n" + fi + bsdtar ${sc:+"$sc"} ${dst:+-C "$dst"} -x \ + --no-same-permissions --no-same-owner -f $archive + ;; + deb) + if command -v bsdtar &>/dev/null; then + bsdtar -x -O -f "$archive" "data.tar.*" | + bsdtar ${sc:+"$sc"} ${dst:+-C "$dst"} -x \ + --no-same-permissions --no-same-owner -f - + else + msg_error "$pkgver: cannot find bsdtar for extraction.\n" + fi + ;; + txt) + cp -f $archive "$dst" + ;; + 7z) + if command -v 7z &>/dev/null; then + 7z x $archive -o"$dst" + elif command -v bsdtar &>/dev/null; then + bsdtar ${sc:+"$sc"} ${dst:+-C "$dst"} -xf $archive + else + msg_error "$pkgver: cannot find 7z or bsdtar bin for extraction.\n" + fi + ;; + gem) + $TAR_CMD -xOf $archive data.tar.gz | + $TAR_CMD ${sc:+"$sc"} ${dst:+-C "$dst"} -xz -f - + ;; + *) + msg_error "$pkgver: cannot guess $archive extract suffix. ($sfx)\n" + ;; + esac + if [ "$?" -ne 0 ]; then + msg_error "$pkgver: extracting $archive.\n" + fi +} + +vsrcextract() { + local sc=--strip-components=1 + local dst= + while [ "$#" -ge 1 ]; do + case "$1" in + -C) + if [ -z "$2" ]; then + msg_error "$pkgver: vsrcextract -C .\n" + fi + dst="$2" + shift 2 + ;; + --no-strip-components|--strip-components=*) + sc="$1" + shift + ;; + *) + break ;; + esac + done + vextract "$sc" ${dst:+-C "$dst"} \ + "${XBPS_SRCDISTDIR}/${pkgname}-${version}/$1" +} diff --git a/common/hooks/do-extract/00-distfiles.sh b/common/hooks/do-extract/00-distfiles.sh index 07e987a6862be..445346299e34d 100644 --- a/common/hooks/do-extract/00-distfiles.sh +++ b/common/hooks/do-extract/00-distfiles.sh @@ -45,128 +45,7 @@ hook() { unset found continue fi - - case $curfile in - *.tar.lzma) cursufx="txz";; - *.tar.lz) cursufx="tlz";; - *.tlz) cursufx="tlz";; - *.tar.xz) cursufx="txz";; - *.txz) cursufx="txz";; - *.tar.bz2) cursufx="tbz";; - *.tbz) cursufx="tbz";; - *.tar.gz) cursufx="tgz";; - *.tgz) cursufx="tgz";; - *.tar.zst) cursufx="tzst";; - *.tzst) cursufx="tzst";; - *.gz) cursufx="gz";; - *.xz) cursufx="xz";; - *.bz2) cursufx="bz2";; - *.zst) cursufx="zst";; - *.tar) cursufx="tar";; - *.zip) cursufx="zip";; - *.rpm) cursufx="rpm";; - *.deb) cursufx="deb";; - *.patch) cursufx="txt";; - *.diff) cursufx="txt";; - *.txt) cursufx="txt";; - *.sh) cursufx="txt";; - *.7z) cursufx="7z";; - *.gem) cursufx="gem";; - *.crate) cursufx="crate";; - *) msg_error "$pkgver: unknown distfile suffix for $curfile.\n";; - esac - - case ${cursufx} in - tar|txz|tbz|tlz|tgz|tzst|crate) - $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 - ;; - gz|bz2|xz|zst) - cp -f $srcdir/$curfile "$extractdir" - cd "$extractdir" - case ${cursufx} in - gz) - gunzip -f $curfile - ;; - bz2) - bunzip2 -f $curfile - ;; - xz) - unxz -f $curfile - ;; - zst) - unzstd $curfile - ;; - esac - ;; - zip) - if command -v unzip &>/dev/null; then - unzip -o -q $srcdir/$curfile -d "$extractdir" - if [ $? -ne 0 ]; then - msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" - fi - elif command -v bsdtar &>/dev/null; then - bsdtar -xf $srcdir/$curfile -C "$extractdir" - if [ $? -ne 0 ]; then - msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" - fi - else - msg_error "$pkgver: cannot find unzip or bsdtar bin for extraction.\n" - fi - ;; - rpm) - if ! command -v bsdtar &>/dev/null; then - msg_error "$pkgver: cannot find bsdtar for extraction.\n" - fi - bsdtar -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 - ;; - deb) - if command -v bsdtar &>/dev/null; then - bsdtar -x -O -f "$srcdir/$curfile" "data.tar.*" | - bsdtar -C "$extractdir" -x --no-same-permissions --no-same-owner - if [ $? -ne 0 ]; then - msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" - fi - else - msg_error "$pkgver: cannot find bsdtar for extraction.\n" - fi - ;; - txt) - cp -f $srcdir/$curfile "$extractdir" - ;; - 7z) - if command -v 7z &>/dev/null; then - 7z x $srcdir/$curfile -o"$extractdir" - if [ $? -ne 0 ]; then - msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" - fi - elif command -v bsdtar &>/dev/null; then - bsdtar -xf $srcdir/$curfile -C "$extractdir" - if [ $? -ne 0 ]; then - msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" - fi - else - msg_error "$pkgver: cannot find 7z or bsdtar bin for extraction.\n" - fi - ;; - gem) - innerdir="$extractdir/${wrksrc##*/}" - mkdir -p "$innerdir" - $TAR_CMD -xOf $srcdir/$curfile data.tar.gz | - $TAR_CMD -xz -C "$innerdir" -f - - if [ $? -ne 0 ]; then - msg_error "$pkgver: extracting $curfile into $XBPS_BUILDDIR.\n" - fi - ;; - *) - msg_error "$pkgver: cannot guess $curfile extract suffix. ($cursufx)\n" - ;; - esac + vsrcextract --no-strip-components -C "$extractdir" "$curfile" done cd "$extractdir" From 8b5e8d83cd78ecfdd9bda6ce5e8a2e61baf9dd8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Tue, 11 Jul 2023 23:13:54 +0700 Subject: [PATCH 2/5] kexec-tools: drop custom do_extract --- common/environment/setup/archive.sh | 7 ++++++- srcpkgs/kexec-tools/template | 10 ---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/common/environment/setup/archive.sh b/common/environment/setup/archive.sh index 4920bcdb41cbd..38853b87a8fdc 100644 --- a/common/environment/setup/archive.sh +++ b/common/environment/setup/archive.sh @@ -30,7 +30,12 @@ vextract() { local archive="$1" local ret=0 - TAR_CMD="$(command -v bsdtar)" + # When tar is explicitly put *first* in hostmakedepends + # Some packages require tar to build but not for extraction + case "$hostmakedepends " in + "tar "*) TAR_CMD="tar" ;; + esac + [ -z "$TAR_CMD" ] && 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" case "$archive" in diff --git a/srcpkgs/kexec-tools/template b/srcpkgs/kexec-tools/template index 6bd5b65e18206..aa68b6f60a56f 100644 --- a/srcpkgs/kexec-tools/template +++ b/srcpkgs/kexec-tools/template @@ -2,7 +2,6 @@ pkgname=kexec-tools version=2.0.26 revision=1 -create_wrksrc=yes build_style=gnu-configure hostmakedepends="tar xz" makedepends="zlib-devel liblzma-devel" @@ -12,7 +11,6 @@ license="GPL-2.0-only" homepage="http://kernel.org/pub/linux/utils/kernel/kexec/" distfiles="${KERNEL_SITE}/utils/kernel/kexec/${pkgname}-${version}.tar.xz" checksum=7fe36a064101cd5c515e41b2be393dce3ca88adce59d6ee668e0af7c0c4570cd -skip_extraction="${pkgname}-${version}.tar.xz" CFLAGS="-fcommon" @@ -20,14 +18,6 @@ case "$XBPS_TARGET_MACHINE" in ppc-musl) nopie=yes;; # textrels not supported esac -do_extract() { - # bsdtar fails to extract version 2.0.20 tarball which - # contains (buggy) hard links from files to themselves. - tar --strip-components 1 --no-same-owner --extract --file \ - ${XBPS_SRCDISTDIR}/${pkgname}-${version}/${pkgname}-${version}.tar.xz \ - --directory ${wrksrc} -} - pre_build() { rm ${XBPS_WRAPPERDIR}/strip case "$XBPS_TARGET_MACHINE" in From 6914567d90c9c02302bda468938639143ccb2907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Tue, 11 Jul 2023 23:46:41 +0700 Subject: [PATCH 3/5] epson-inkjet-printer-escpr2: abstract bsdtar usage --- srcpkgs/epson-inkjet-printer-escpr2/template | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/srcpkgs/epson-inkjet-printer-escpr2/template b/srcpkgs/epson-inkjet-printer-escpr2/template index 6fa318254b1e8..818217056b926 100644 --- a/srcpkgs/epson-inkjet-printer-escpr2/template +++ b/srcpkgs/epson-inkjet-printer-escpr2/template @@ -18,8 +18,7 @@ restricted=yes repository=nonfree post_extract() { - bsdtar --strip-components=1 -xf \ - epson-inkjet-printer-escpr2-${version}-1lsb3.2.tar.gz + vextract epson-inkjet-printer-escpr2-${version}-1lsb3.2.tar.gz } post_install() { From a46f1753b8f4de091533c8d7e89f7533b467f21b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Tue, 11 Jul 2023 23:47:16 +0700 Subject: [PATCH 4/5] qbittorrent: hide bsdtar usage --- srcpkgs/qbittorrent/template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srcpkgs/qbittorrent/template b/srcpkgs/qbittorrent/template index c5067b733ac48..87d58e8a502e1 100644 --- a/srcpkgs/qbittorrent/template +++ b/srcpkgs/qbittorrent/template @@ -22,8 +22,8 @@ CXXFLAGS=-std=gnu++17 do_extract() { local n=${pkgname}-${version} mkdir -p build-nox build-x11 - bsdtar xf ${XBPS_SRCDISTDIR}/${n}/${n}.tar.xz --strip-components=1 -C build-x11 - bsdtar xf ${XBPS_SRCDISTDIR}/${n}/${n}.tar.xz --strip-components=1 -C build-nox + vsrcextract -C build-x11 ${n}.tar.xz + vsrcextract -C build-nox ${n}.tar.xz } do_configure() { From f504b0094dce59ae2c75515beda231d81fe9841e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90o=C3=A0n=20Tr=E1=BA=A7n=20C=C3=B4ng=20Danh?= Date: Wed, 12 Jul 2023 12:42:07 +0700 Subject: [PATCH 5/5] xen: use vsrcextract --- common/environment/setup/archive.sh | 17 +++++++++++++++++ srcpkgs/xen/template | 28 ++++++++++++---------------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/common/environment/setup/archive.sh b/common/environment/setup/archive.sh index 38853b87a8fdc..45fa96a8b1cfd 100644 --- a/common/environment/setup/archive.sh +++ b/common/environment/setup/archive.sh @@ -167,3 +167,20 @@ vsrcextract() { vextract "$sc" ${dst:+-C "$dst"} \ "${XBPS_SRCDISTDIR}/${pkgname}-${version}/$1" } + +vtar() { + bsdtar "$@" +} + +vsrccopy() { + local _tgt + if [ $# -lt 2 ]; then + msg_error "vsrccopy ... " + fi + _tgt="${@:-1}" + mkdir -p "$_tgt" + while [ $# -gt 1 ]; do + cp -a "${XBPS_SRCDISTDIR}/${pkgname}-${version}/$1" "$_tgt" + shift + done +} diff --git a/srcpkgs/xen/template b/srcpkgs/xen/template index 160db8e659295..9f08f0eb13868 100644 --- a/srcpkgs/xen/template +++ b/srcpkgs/xen/template @@ -104,15 +104,11 @@ conf_files=" /etc/xen/xl.conf" post_extract() { - local _src="${XBPS_SRCDISTDIR}/${pkgname}-${version}" - msg_normal "Extracting etherboot ipxe files ...\n" mkdir tools/firmware/etherboot/ipxe - tar --strip-components=1 -x \ - -f ${_src}/${_git_tag_ipxe}.tar.gz \ - -C tools/firmware/etherboot/ipxe/ + vsrcextract -C tools/firmware/etherboot/ipxe ${_git_tag_ipxe}.tar.gz # Create a tarball w/o the git tag - tar -czf tools/firmware/etherboot/ipxe.tar.gz \ + vtar -czf tools/firmware/etherboot/ipxe.tar.gz \ -C tools/firmware/etherboot/ ipxe if [ "$build_option_stubdom" ]; then @@ -121,16 +117,16 @@ post_extract() { -e"/RAW_ADDR/s/(int) grub_scratch_mem/(long) grub_scratch_mem/" mkdir -p stubdom/mini-os-x86_64-grub/{arch/x86,console,lib,xenbus} msg_normal "Copying stubdom files ...\n" - cp -pv \ - ${_src}/grub-${_grub_version}.tar.gz \ - ${_src}/gmp-${_gmp_version}.tar.bz2 \ - ${_src}/zlib-${_zlib_version}.tar.gz \ - ${_src}/lwip-${_lwip_version}.tar.gz \ - ${_src}/polarssl-${_polarssl_version}-gpl.tgz \ - ${_src}/newlib-${_newlib_version}.tar.gz \ - ${_src}/pciutils-${_libpci_version}.tar.bz2 \ - ${_src}/tpm_emulator-${_tpmemu_version}.tar.gz \ - ${_src}/ocaml-${_ocaml_version}.tar.gz \ + vsrccopy \ + grub-${_grub_version}.tar.gz \ + gmp-${_gmp_version}.tar.bz2 \ + zlib-${_zlib_version}.tar.gz \ + lwip-${_lwip_version}.tar.gz \ + polarssl-${_polarssl_version}-gpl.tgz \ + newlib-${_newlib_version}.tar.gz \ + pciutils-${_libpci_version}.tar.bz2 \ + tpm_emulator-${_tpmemu_version}.tar.gz \ + ocaml-${_ocaml_version}.tar.gz \ stubdom/ fi }