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 |