mirror of
https://github.com/LibreELEC/LibreELEC.tv
synced 2025-09-24 19:46:01 +07:00
GNU tar can automatically detect the compression format based on the file name since at least 2006. So just use "tar xf" to extract all tarballs and drop the redundant cases. GNU tar can also strip the top level directory from the archive which allows us to extract it to the directory wanted by the build system ($PKG_NAME-$PKG_VERSION), so packages don't need to specify PKG_SOURCE_DIR if the top level dir from that and scripts/unpack doesn't need to rename the directory. If PKG_SOURCE_DIR is not set the top level dir is automatically stripped from the archive and extracted to $BUILD/$PKG_NAME-$PKG_VERSION If PKG_SOURCE_DIR is set, scripts/extract behaviour is unchanged. Signed-off-by: Matthias Reichl <hias@horus.com>
74 lines
2.0 KiB
Bash
Executable File
74 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv)
|
|
|
|
. config/options $1
|
|
|
|
if [ -z "$2" ]; then
|
|
echo "usage: $0 package_name target_dir"
|
|
exit 1
|
|
fi
|
|
|
|
[ -z "$PKG_URL" -o -z "$PKG_SOURCE_NAME" ] && exit 1
|
|
[ ! -d "$SOURCES/$1" -o ! -d "$2" ] && exit 1
|
|
|
|
if [[ ${PKG_URL} =~ ^file:// ]]; then
|
|
FULL_SOURCE_PATH="$PKG_SOURCE_NAME"
|
|
else
|
|
FULL_SOURCE_PATH="$SOURCES/$1/$PKG_SOURCE_NAME"
|
|
fi
|
|
|
|
if [ ! -f "$FULL_SOURCE_PATH" -a ! -d "$FULL_SOURCE_PATH" ]; then
|
|
echo "error: File $PKG_SOURCE_NAME doesn't exist for package $1"
|
|
echo "Have you called scripts/extract before scripts/get ?"
|
|
exit 1
|
|
fi
|
|
|
|
# The build system expects packages to be extracted to
|
|
# $BUILD/$PKG_NAME-$PKG_VERSION.
|
|
# Try to strip the top level dir from the archive and extract to
|
|
# the correct directory if possible so packages don't need to
|
|
# set PKG_SOURCE_DIR and scripts/unpack doesn't need to rename
|
|
# the directory.
|
|
# Currently this is only supported for tar archives.
|
|
# If PKG_SOURCE_DIR is set don't apply any directory mangling
|
|
# so advanced renaming (eg stripping more than one directory level)
|
|
# can be performed by scripts/unpack.
|
|
if [ -z "$PKG_SOURCE_DIR" ]; then
|
|
TAR_OPTS="--strip-components=1"
|
|
DESTDIR="$2/$PKG_NAME-$PKG_VERSION"
|
|
else
|
|
TAR_OPTS=""
|
|
DESTDIR="$2"
|
|
fi
|
|
|
|
case $PKG_SOURCE_NAME in
|
|
*.tar | *.tar.bz2 | *.tbz | *.tar.gz | *.tgz | *.tar.xz | *.txz)
|
|
mkdir -p "$DESTDIR"
|
|
tar xf $FULL_SOURCE_PATH $TAR_OPTS -C "$DESTDIR"
|
|
;;
|
|
*.7z)
|
|
mkdir -p $2/$1
|
|
7z x -o$2/$1 $FULL_SOURCE_PATH
|
|
;;
|
|
*.zip)
|
|
unzip -q $FULL_SOURCE_PATH -d $2
|
|
;;
|
|
*.diff | *.patch)
|
|
cat $FULL_SOURCE_PATH | patch -d $2 -p1
|
|
;;
|
|
*.diff.bz2 | *.patch.bz2 | patch-*.bz2)
|
|
bzcat $FULL_SOURCE_PATH | patch -d $2 -p1
|
|
;;
|
|
*.diff.gz | *.patch.gz | patch-*.gz)
|
|
zcat $FULL_SOURCE_PATH | patch -d $2 -p1
|
|
;;
|
|
*)
|
|
FULL_DEST_PATH="$2/$PKG_NAME-$PKG_VERSION"
|
|
mkdir $FULL_DEST_PATH
|
|
tar cf - -C $FULL_SOURCE_PATH $PKG_TAR_COPY_OPTS . | \
|
|
tar xf - -C $FULL_DEST_PATH
|
|
;;
|
|
esac
|