Gentoo Archives: gentoo-dev

From: Stephan Hartmann <sultan@g.o>
To: gentoo-dev@l.g.o
Cc: base-system@g.o, Stephan Hartmann <sultan@g.o>
Subject: [gentoo-dev] [PATCH v2] unpacker.eclass: enable EAPI 8
Date: Fri, 27 Aug 2021 17:44:10
Message-Id: 20210827174349.27739-1-sultan@gentoo.org
1 Add support for 7z, RAR and LHA/LZH.
2
3 Signed-off-by: Stephan Hartmann <sultan@g.o>
4 ---
5 eclass/unpacker.eclass | 59 ++++++++++++++++++++++++++++++++++++++++--
6 1 file changed, 57 insertions(+), 2 deletions(-)
7
8 diff --git a/eclass/unpacker.eclass b/eclass/unpacker.eclass
9 index c9dab4345c9..74899fd77b7 100644
10 --- a/eclass/unpacker.eclass
11 +++ b/eclass/unpacker.eclass
12 @@ -4,7 +4,7 @@
13 # @ECLASS: unpacker.eclass
14 # @MAINTAINER:
15 # base-system@g.o
16 -# @SUPPORTED_EAPIS: 5 6 7
17 +# @SUPPORTED_EAPIS: 5 6 7 8
18 # @BLURB: helpers for extraneous file formats and consistent behavior across EAPIs
19 # @DESCRIPTION:
20 # Some extraneous file formats are not part of PMS, or are only in certain
21 @@ -16,7 +16,7 @@
22 # - support partial unpacks?
23
24 case ${EAPI:-0} in
25 - [567]) ;;
26 + [5678]) ;;
27 *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
28 esac
29
30 @@ -335,6 +335,47 @@ unpack_zip() {
31 [[ $? -le 1 ]] || die "unpacking ${zip} failed (arch=unpack_zip)"
32 }
33
34 +# @FUNCTION: unpack_7z
35 +# @USAGE: <7z file>
36 +# @DESCRIPTION:
37 +# Unpack 7z archives.
38 +unpack_7z() {
39 + [[ $# -eq 1 ]] || die "Usage: ${FUNCNAME} <file>"
40 +
41 + local p7z=$(find_unpackable_file "$1")
42 + unpack_banner "${p7z}"
43 + local output="$(7z x -y "${p7z}")"
44 +
45 + if [ $? -ne 0 ]; then
46 + echo "${output}" >&2
47 + die "unpacking ${p7z} failed (arch=unpack_7z)"
48 + fi
49 +}
50 +
51 +# @FUNCTION: unpack_rar
52 +# @USAGE: <rar file>
53 +# @DESCRIPTION:
54 +# Unpack RAR archives.
55 +unpack_rar() {
56 + [[ $# -eq 1 ]] || die "Usage: ${FUNCNAME} <file>"
57 +
58 + local rar=$(find_unpackable_file "$1")
59 + unpack_banner "${rar}"
60 + unrar x -idq -o+ "${rar}" || die "unpacking ${rar} failed (arch=unpack_rar)"
61 +}
62 +
63 +# @FUNCTION: unpack_lha
64 +# @USAGE: <lha file>
65 +# @DESCRIPTION:
66 +# Unpack LHA/LZH archives.
67 +unpack_lha() {
68 + [[ $# -eq 1 ]] || die "Usage: ${FUNCNAME} <file>"
69 +
70 + local lha=$(find_unpackable_file "$1")
71 + unpack_banner "${lha}"
72 + lha xfq "${lha}" || die "unpacking ${lha} failed (arch=unpack_lha)"
73 +}
74 +
75 # @FUNCTION: _unpacker
76 # @USAGE: <one archive to unpack>
77 # @INTERNAL
78 @@ -395,6 +436,18 @@ _unpacker() {
79 arch="unpack_zip" ;;
80 esac
81
82 + # 7z, rar and lha/lzh are handled by package manager in EAPI < 8
83 + if [[ ${EAPI} != [567] ]]; then
84 + case ${m} in
85 + *.7z)
86 + arch="unpack_7z" ;;
87 + *.rar|*.RAR)
88 + arch="unpack_rar" ;;
89 + *.LHA|*.LHa|*.lha|*.lzh)
90 + arch="unpack_lha" ;;
91 + esac
92 + fi
93 +
94 # finally do the unpack
95 if [[ -z ${arch}${comp} ]] ; then
96 unpack "$1"
97 @@ -471,6 +524,8 @@ unpacker_src_uri_depends() {
98 d="|| ( app-arch/plzip app-arch/pdlzip app-arch/lzip )" ;;
99 *.zst)
100 d="app-arch/zstd" ;;
101 + *.LHA|*.LHa|*.lha|*.lzh)
102 + d="app-arch/lha" ;;
103 esac
104 deps+=" ${d}"
105 done
106 --
107 2.31.1