183 lines
3.7 KiB
Bash
183 lines
3.7 KiB
Bash
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 <directory>.\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="${tar_cmd}"
|
|
local sfx
|
|
local archive="$1"
|
|
local ret=0
|
|
|
|
[ -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
|
|
*.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 <directory>.\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"
|
|
}
|
|
|
|
vtar() {
|
|
bsdtar "$@"
|
|
}
|
|
|
|
vsrccopy() {
|
|
local _tgt
|
|
if [ $# -lt 2 ]; then
|
|
msg_error "vsrccopy <file>... <target>"
|
|
fi
|
|
_tgt="${@: -1}"
|
|
mkdir -p "$_tgt"
|
|
while [ $# -gt 1 ]; do
|
|
cp -a "${XBPS_SRCDISTDIR}/${pkgname}-${version}/$1" "$_tgt"
|
|
shift
|
|
done
|
|
}
|