diff --git a/build-package.sh b/build-package.sh index bb698d200..be0f2891f 100755 --- a/build-package.sh +++ b/build-package.sh @@ -46,44 +46,7 @@ source scripts/build/termux_step_get_repo_files.sh source scripts/build/termux_step_start_build.sh # Run just after sourcing $TERMUX_PKG_BUILDER_SCRIPT. May be overridden by packages. -termux_step_extract_package() { - if [ -z "${TERMUX_PKG_SRCURL:=""}" ] || [ -n "${TERMUX_PKG_SKIP_SRC_EXTRACT:=""}" ]; then - mkdir -p "$TERMUX_PKG_SRCDIR" - return - fi - cd "$TERMUX_PKG_TMPDIR" - local PKG_SRCURL=(${TERMUX_PKG_SRCURL[@]}) - local PKG_SHA256=(${TERMUX_PKG_SHA256[@]}) - if [ ! ${#PKG_SRCURL[@]} == ${#PKG_SHA256[@]} ] && [ ! ${#PKG_SHA256[@]} == 0 ]; then - termux_error_exit "Error: length of TERMUX_PKG_SRCURL isn't equal to length of TERMUX_PKG_SHA256." - fi - # STRIP=1 extracts archives straight into TERMUX_PKG_SRCDIR while STRIP=0 puts them in subfolders. zip has same behaviour per default - # If this isn't desired then this can be fixed in termux_step_post_extract_package. - local STRIP=1 - for i in $(seq 0 $(( ${#PKG_SRCURL[@]}-1 ))); do - test "$i" -gt 0 && STRIP=0 - local filename - filename=$(basename "${PKG_SRCURL[$i]}") - local file="$TERMUX_PKG_CACHEDIR/$filename" - # Allow TERMUX_PKG_SHA256 to be empty: - set +u - termux_download "${PKG_SRCURL[$i]}" "$file" "${PKG_SHA256[$i]}" - set -u - - local folder - set +o pipefail - if [ "${file##*.}" = zip ]; then - folder=$(unzip -qql "$file" | head -n1 | tr -s ' ' | cut -d' ' -f5-) - rm -Rf $folder - unzip -q "$file" - mv $folder "$TERMUX_PKG_SRCDIR" - else - mkdir -p "$TERMUX_PKG_SRCDIR" - tar xf "$file" -C "$TERMUX_PKG_SRCDIR" --strip-components=$STRIP - fi - set -o pipefail - done -} +source scripts/build/termux_step_extract_package.sh # Hook for packages to act just after the package has been extracted. # Invoked in $TERMUX_PKG_SRCDIR. diff --git a/scripts/build/termux_step_extract_package.sh b/scripts/build/termux_step_extract_package.sh new file mode 100644 index 000000000..1fed93567 --- /dev/null +++ b/scripts/build/termux_step_extract_package.sh @@ -0,0 +1,38 @@ +termux_step_extract_package() { + if [ -z "${TERMUX_PKG_SRCURL:=""}" ] || [ -n "${TERMUX_PKG_SKIP_SRC_EXTRACT:=""}" ]; then + mkdir -p "$TERMUX_PKG_SRCDIR" + return + fi + cd "$TERMUX_PKG_TMPDIR" + local PKG_SRCURL=(${TERMUX_PKG_SRCURL[@]}) + local PKG_SHA256=(${TERMUX_PKG_SHA256[@]}) + if [ ! ${#PKG_SRCURL[@]} == ${#PKG_SHA256[@]} ] && [ ! ${#PKG_SHA256[@]} == 0 ]; then + termux_error_exit "Error: length of TERMUX_PKG_SRCURL isn't equal to length of TERMUX_PKG_SHA256." + fi + # STRIP=1 extracts archives straight into TERMUX_PKG_SRCDIR while STRIP=0 puts them in subfolders. zip has same behaviour per default + # If this isn't desired then this can be fixed in termux_step_post_extract_package. + local STRIP=1 + for i in $(seq 0 $(( ${#PKG_SRCURL[@]}-1 ))); do + test "$i" -gt 0 && STRIP=0 + local filename + filename=$(basename "${PKG_SRCURL[$i]}") + local file="$TERMUX_PKG_CACHEDIR/$filename" + # Allow TERMUX_PKG_SHA256 to be empty: + set +u + termux_download "${PKG_SRCURL[$i]}" "$file" "${PKG_SHA256[$i]}" + set -u + + local folder + set +o pipefail + if [ "${file##*.}" = zip ]; then + folder=$(unzip -qql "$file" | head -n1 | tr -s ' ' | cut -d' ' -f5-) + rm -Rf $folder + unzip -q "$file" + mv $folder "$TERMUX_PKG_SRCDIR" + else + mkdir -p "$TERMUX_PKG_SRCDIR" + tar xf "$file" -C "$TERMUX_PKG_SRCDIR" --strip-components=$STRIP + fi + set -o pipefail + done +}