From 64a5f18e204ef2eb98abc2814956f78d340d7986 Mon Sep 17 00:00:00 2001 From: Stephan Hartmann Date: Thu, 26 Aug 2021 08:27:50 +0200 Subject: unpacker.eclass: enable EAPI 8 Add support for 7z, RAR and LHA/LZH. Signed-off-by: Stephan Hartmann --- eclass/unpacker.eclass | 59 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) (limited to 'eclass/unpacker.eclass') diff --git a/eclass/unpacker.eclass b/eclass/unpacker.eclass index c9dab4345c95..74899fd77b70 100644 --- a/eclass/unpacker.eclass +++ b/eclass/unpacker.eclass @@ -4,7 +4,7 @@ # @ECLASS: unpacker.eclass # @MAINTAINER: # base-system@gentoo.org -# @SUPPORTED_EAPIS: 5 6 7 +# @SUPPORTED_EAPIS: 5 6 7 8 # @BLURB: helpers for extraneous file formats and consistent behavior across EAPIs # @DESCRIPTION: # Some extraneous file formats are not part of PMS, or are only in certain @@ -16,7 +16,7 @@ # - support partial unpacks? case ${EAPI:-0} in - [567]) ;; + [5678]) ;; *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;; esac @@ -335,6 +335,47 @@ unpack_zip() { [[ $? -le 1 ]] || die "unpacking ${zip} failed (arch=unpack_zip)" } +# @FUNCTION: unpack_7z +# @USAGE: <7z file> +# @DESCRIPTION: +# Unpack 7z archives. +unpack_7z() { + [[ $# -eq 1 ]] || die "Usage: ${FUNCNAME} " + + local p7z=$(find_unpackable_file "$1") + unpack_banner "${p7z}" + local output="$(7z x -y "${p7z}")" + + if [ $? -ne 0 ]; then + echo "${output}" >&2 + die "unpacking ${p7z} failed (arch=unpack_7z)" + fi +} + +# @FUNCTION: unpack_rar +# @USAGE: +# @DESCRIPTION: +# Unpack RAR archives. +unpack_rar() { + [[ $# -eq 1 ]] || die "Usage: ${FUNCNAME} " + + local rar=$(find_unpackable_file "$1") + unpack_banner "${rar}" + unrar x -idq -o+ "${rar}" || die "unpacking ${rar} failed (arch=unpack_rar)" +} + +# @FUNCTION: unpack_lha +# @USAGE: +# @DESCRIPTION: +# Unpack LHA/LZH archives. +unpack_lha() { + [[ $# -eq 1 ]] || die "Usage: ${FUNCNAME} " + + local lha=$(find_unpackable_file "$1") + unpack_banner "${lha}" + lha xfq "${lha}" || die "unpacking ${lha} failed (arch=unpack_lha)" +} + # @FUNCTION: _unpacker # @USAGE: # @INTERNAL @@ -395,6 +436,18 @@ _unpacker() { arch="unpack_zip" ;; esac + # 7z, rar and lha/lzh are handled by package manager in EAPI < 8 + if [[ ${EAPI} != [567] ]]; then + case ${m} in + *.7z) + arch="unpack_7z" ;; + *.rar|*.RAR) + arch="unpack_rar" ;; + *.LHA|*.LHa|*.lha|*.lzh) + arch="unpack_lha" ;; + esac + fi + # finally do the unpack if [[ -z ${arch}${comp} ]] ; then unpack "$1" @@ -471,6 +524,8 @@ unpacker_src_uri_depends() { d="|| ( app-arch/plzip app-arch/pdlzip app-arch/lzip )" ;; *.zst) d="app-arch/zstd" ;; + *.LHA|*.LHa|*.lha|*.lzh) + d="app-arch/lha" ;; esac deps+=" ${d}" done -- cgit v1.2.3