mirror of
https://github.com/xHyroM/void-packages.git
synced 2024-12-23 12:41:05 +01:00
98 lines
2.4 KiB
Bash
98 lines
2.4 KiB
Bash
|
# This hook extracts $distfiles into $XBPS_BUILDDIR if $distfiles and $checksum
|
||
|
# variables are set.
|
||
|
|
||
|
hook() {
|
||
|
local srcdir="$XBPS_SRCDISTDIR/$pkgname-$version"
|
||
|
local f j curfile found extractdir innerdir innerfile num_dirs
|
||
|
local TAR_CMD
|
||
|
|
||
|
if [ -z "$distfiles" -a -z "$checksum" ]; then
|
||
|
mkdir -p "$wrksrc"
|
||
|
return 0
|
||
|
fi
|
||
|
|
||
|
# Check that distfiles are there before anything else.
|
||
|
for f in ${distfiles}; do
|
||
|
curfile="${f#*>}"
|
||
|
curfile="${curfile##*/}"
|
||
|
if [ ! -f $srcdir/$curfile ]; then
|
||
|
msg_error "$pkgver: cannot find ${curfile}, use 'xbps-src fetch' first.\n"
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Disable trap on ERR; the code is smart enough to report errors and abort.
|
||
|
trap - ERR
|
||
|
|
||
|
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"
|
||
|
|
||
|
extractdir=$(mktemp -d "$XBPS_BUILDDIR/.extractdir-XXXXXXX") ||
|
||
|
msg_error "Cannot create temporary dir for do-extract\n"
|
||
|
|
||
|
msg_normal "$pkgver: extracting distfile(s), please wait...\n"
|
||
|
|
||
|
for f in ${distfiles}; do
|
||
|
curfile="${f#*>}"
|
||
|
curfile="${curfile##*/}"
|
||
|
for j in ${skip_extraction}; do
|
||
|
if [ "$curfile" = "$j" ]; then
|
||
|
found=1
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
if [ -n "$found" ]; then
|
||
|
unset found
|
||
|
continue
|
||
|
fi
|
||
|
vsrcextract --no-strip-components -C "$extractdir" "$curfile"
|
||
|
done
|
||
|
|
||
|
cd "$extractdir"
|
||
|
# find "$extractdir" -mindepth 1 -maxdepth 1 -printf '1\n' | wc -l
|
||
|
# However, it requires GNU's find
|
||
|
num_dirs=0
|
||
|
for f in * .*; do
|
||
|
if [ -e "$f" ] || [ -L "$f" ]; then
|
||
|
case "$f" in
|
||
|
. | ..) ;;
|
||
|
*)
|
||
|
innerdir="$f"
|
||
|
num_dirs=$(( num_dirs + 1 ))
|
||
|
;;
|
||
|
esac
|
||
|
fi
|
||
|
done
|
||
|
# Special case for num_dirs = 2, and it contains metadata
|
||
|
if [ "$num_dirs" != 2 ] || [ "$create_wrksrc" ]; then
|
||
|
:
|
||
|
elif grep -q 'xmlns="http://pear[.]php[.]net/dtd/package' package.xml 2>/dev/null
|
||
|
then
|
||
|
# PHP modules' metadata
|
||
|
rm -f package.xml
|
||
|
for f in */; do innerdir="$f"; done
|
||
|
num_dirs=1
|
||
|
else
|
||
|
for f in *; do
|
||
|
# AppleDouble encoded Macintosh file
|
||
|
if [ -e "$f" ] && [ -e "._$f" ]; then
|
||
|
rm -f "._$f"
|
||
|
num_dirs=1
|
||
|
innerdir="$f"
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
fi
|
||
|
rm -rf "$wrksrc"
|
||
|
innerdir="$extractdir/$innerdir"
|
||
|
cd "$XBPS_BUILDDIR"
|
||
|
if [ "$num_dirs" = 1 ] && [ -d "$innerdir" ] && [ -z "$create_wrksrc" ]; then
|
||
|
# rename the subdirectory (top-level of distfiles) to $wrksrc
|
||
|
mv "$innerdir" "$wrksrc" &&
|
||
|
rmdir "$extractdir"
|
||
|
else
|
||
|
mv "$extractdir" "$wrksrc"
|
||
|
fi ||
|
||
|
msg_error "$pkgver: failed to move sources to $wrksrc\n"
|
||
|
}
|