gnu: libjcat: Update to 0.1.8.
[jackhill/guix/guix.git] / gnu / packages / compression.scm
CommitLineData
233e7676 1;;; GNU Guix --- Functional package management for GNU
31dcc272 2;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
b357faac 3;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
144cc3c4 4;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
27f76fe6 5;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
69d9792a 6;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
9a2fcb63 7;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
77737e03 8;;; Copyright © 2015, 2017, 2018 Leo Famulari <leo@famulari.name>
820dc3f5 9;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
9098745b 10;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
23f3cbb8 11;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
3fd4b90d 12;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
0eacdd46 13;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
e4c2136d 14;;; Copyright © 2016 David Craven <david@craven.ch>
3480ceb1 15;;; Copyright © 2016, 2019, 2020 Kei Kebreau <kkebreau@posteo.net>
9fe4e45b 16;;; Copyright © 2016, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
3c986a7d 17;;; Copyright © 2017 Nikita <nikita@n0.is>
9e6ada8f 18;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
d109b1e8 19;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
ef5c40aa 20;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
b44ecca6 21;;; Copyright © 2017 Petter <petter@mykolab.ch>
9869bb12 22;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
e294c05e 23;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
2ed0ef2f 24;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
8ff5c735 25;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
09debcf5 26;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
9720104c 27;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
1ac624cd 28;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
d2b237d0 29;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
ee4ba542 30;;; Copyright © 2020, 2021 Lars-Dominik Braun <lars@6xq.net>
ff43f128 31;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
9d5ed931 32;;; Copyright © 2020 Léo Le Bouter <lle-bout@zaclys.net>
e7195e83 33;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
51697aab 34;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
a268f085 35;;;
233e7676 36;;; This file is part of GNU Guix.
a268f085 37;;;
233e7676 38;;; GNU Guix is free software; you can redistribute it and/or modify it
a268f085
LC
39;;; under the terms of the GNU General Public License as published by
40;;; the Free Software Foundation; either version 3 of the License, or (at
41;;; your option) any later version.
42;;;
233e7676 43;;; GNU Guix is distributed in the hope that it will be useful, but
a268f085
LC
44;;; WITHOUT ANY WARRANTY; without even the implied warranty of
45;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
46;;; GNU General Public License for more details.
47;;;
48;;; You should have received a copy of the GNU General Public License
233e7676 49;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
a268f085 50
1ffa7090 51(define-module (gnu packages compression)
b5b73a82 52 #:use-module ((guix licenses) #:prefix license:)
21b2ec4d 53 #:use-module (guix utils)
a268f085 54 #:use-module (guix packages)
87f5d366 55 #:use-module (guix download)
646898b3 56 #:use-module (guix git-download)
9e6ada8f 57 #:use-module (guix build-system cmake)
0745e28d 58 #:use-module (guix build-system glib-or-gtk)
b357faac 59 #:use-module (guix build-system gnu)
910bf1f7 60 #:use-module (guix build-system go)
9d5ed931 61 #:use-module (guix build-system meson)
d2b237d0 62 #:use-module (guix build-system python)
8ff5c735 63 #:use-module (guix build-system trivial)
e99dd67a 64 #:use-module (gnu packages)
389eb3fa 65 #:use-module (gnu packages assembly)
69d9792a 66 #:use-module (gnu packages autotools)
23f3cbb8 67 #:use-module (gnu packages backup)
73f542c3 68 #:use-module (gnu packages base)
bd1c5fe4 69 #:use-module (gnu packages benchmark)
e294c05e 70 #:use-module (gnu packages boost)
0f03c531 71 #:use-module (gnu packages check)
9e6ada8f 72 #:use-module (gnu packages curl)
09debcf5 73 #:use-module (gnu packages documentation)
ef5c40aa 74 #:use-module (gnu packages file)
0745e28d
RG
75 #:use-module (gnu packages gettext)
76 #:use-module (gnu packages glib)
77 #:use-module (gnu packages gnome)
9d5ed931 78 #:use-module (gnu packages gnupg)
0745e28d 79 #:use-module (gnu packages gtk)
9d5ed931 80 #:use-module (gnu packages man)
9869bb12 81 #:use-module (gnu packages maths)
646898b3 82 #:use-module (gnu packages perl)
23f3cbb8 83 #:use-module (gnu packages pkg-config)
1ae60db8 84 #:use-module (gnu packages python)
09debcf5 85 #:use-module (gnu packages qt)
9e6ada8f 86 #:use-module (gnu packages tls)
82aa2a28 87 #:use-module (gnu packages valgrind)
9d5ed931 88 #:use-module (gnu packages version-control)
0745e28d 89 #:use-module (gnu packages xml)
36df995c 90 #:use-module (ice-9 match)
f7fdafef 91 #:use-module (srfi srfi-1))
a268f085 92
6a92093d
LC
93(define-public zlib
94 (package
95 (name "zlib")
2b8bea03 96 (version "1.2.11")
6a92093d
LC
97 (source
98 (origin
87f5d366 99 (method url-fetch)
a67f97fe
CR
100 (uri (list (string-append "http://zlib.net/zlib-"
101 version ".tar.gz")
b2859a4f
LC
102 (string-append "mirror://sourceforge/libpng/zlib/"
103 version "/zlib-" version ".tar.gz")))
6a92093d
LC
104 (sha256
105 (base32
2b8bea03 106 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
6a92093d 107 (build-system gnu-build-system)
b90289da 108 (outputs '("out" "static"))
6a92093d 109 (arguments
6cd00453
EF
110 `(#:phases
111 (modify-phases %standard-phases
112 (replace 'configure
113 (lambda* (#:key outputs #:allow-other-keys)
114 ;; Zlib's home-made `configure' fails when passed
115 ;; extra flags like `--enable-fast-install', so we need to
116 ;; invoke it with just what it understand.
117 (let ((out (assoc-ref outputs "out")))
118 ;; 'configure' doesn't understand '--host'.
119 ,@(if (%current-target-system)
120 `((setenv "CHOST" ,(%current-target-system)))
121 '())
144cc3c4 122 (invoke "./configure"
b90289da
MB
123 (string-append "--prefix=" out)))))
124 (add-after 'install 'move-static-library
125 (lambda* (#:key outputs #:allow-other-keys)
126 (let ((out (assoc-ref outputs "out"))
127 (static (assoc-ref outputs "static")))
128 (with-directory-excursion (string-append out "/lib")
129 (install-file "libz.a" (string-append static "/lib"))
130 (delete-file "libz.a")
131 #t)))))))
7f1773ea 132 (home-page "https://zlib.net/")
35b9e423 133 (synopsis "Compression library")
6a92093d
LC
134 (description
135 "zlib is designed to be a free, general-purpose, legally unencumbered --
136that is, not covered by any patents -- lossless data-compression library for
137use on virtually any computer hardware and operating system. The zlib data
35b9e423 138format is itself portable across platforms. Unlike the LZW compression method
6a92093d
LC
139used in Unix compress(1) and in the GIF image format, the compression method
140currently used in zlib essentially never expands the data. (LZW can double or
141triple the file size in extreme cases.) zlib's memory footprint is also
142independent of the input data and can be reduced, if necessary, at some cost
143in compression.")
4a44e743 144 (license license:zlib)))
6a92093d 145
8298df96
MB
146(define-public minizip
147 (package
148 (name "minizip")
149 (version (package-version zlib))
150 (source (package-source zlib))
151 (build-system gnu-build-system)
152 (arguments
153 `(#:phases
154 (modify-phases %standard-phases
155 (add-after 'unpack 'enter-source
c11ac62d
LC
156 (lambda _ (chdir "contrib/minizip") #t))
157 (add-after 'install 'remove-crypt-h
158 (lambda* (#:key outputs #:allow-other-keys)
159 ;; Remove <minizip/crypt.h> because it interferes with libc's
160 ;; <crypt.h> given that 'minizip.pc' says "-I…/include/minizip".
161 ;; Fedora does the same:
162 ;; <https://src.fedoraproject.org/rpms/zlib/c/4d2785ec3116947872f6f32dc4104e6d36d8a7a4?branch=master>.
163 (let ((out (assoc-ref outputs "out")))
164 (delete-file (string-append out "/include/minizip/crypt.h"))
165 #t))))))
8298df96
MB
166 (native-inputs
167 `(("autoconf" ,autoconf)
168 ("automake" ,automake)
169 ("libtool" ,libtool)))
170 (propagated-inputs `(("zlib" ,zlib)))
171 (home-page (package-home-page zlib))
172 (synopsis "Zip Compression library")
173 (description
174 "Minizip is a minimalistic library that supports compressing,
175extracting and viewing ZIP archives. This version is extracted from
176the @code{zlib} source.")
177 (license (package-license zlib))))
178
ee97be9f
RW
179(define-public fastjar
180 (package
181 (name "fastjar")
182 (version "0.98")
183 (source (origin
184 (method url-fetch)
185 (uri (string-append "mirror://savannah/fastjar/fastjar-"
186 version ".tar.gz"))
187 (sha256
188 (base32
189 "0iginbz2m15hcsa3x4y7v3mhk54gr1r7m3ghx0pg4n46vv2snmpi"))))
190 (build-system gnu-build-system)
191 (inputs `(("zlib" ,zlib)))
340978d7 192 (home-page "https://savannah.nongnu.org/projects/fastjar")
ee97be9f
RW
193 (synopsis "Replacement for Sun's 'jar' utility")
194 (description
36a4366d
EF
195 "FastJar is an attempt to create a much faster replacement for Sun's
196@code{jar} utility. Instead of being written in Java, FastJar is written in C.")
ee97be9f
RW
197 (license license:gpl2+)))
198
58593975
RW
199(define-public libtar
200 (package
201 (name "libtar")
89d80159 202 (version "1.2.20")
58593975
RW
203 (source (origin
204 (method url-fetch)
89d80159
EF
205 (uri (list
206 (string-append
207 "ftp://ftp.feep.net/pub/software/libtar/libtar-"
208 version ".tar.gz")
209 (string-append
210 "mirror://debian/pool/main/libt/libtar/libtar_"
211 version ".orig.tar.gz")))
58593975
RW
212 (sha256
213 (base32
e99dd67a
EF
214 "02cihzl77ia0dcz7z2cga2412vyhhs5pa2355q4wpwbyga2lrwjh"))
215 (patches (search-patches "libtar-CVE-2013-4420.patch"))))
58593975 216 (build-system gnu-build-system)
112fcafb 217 (arguments `(#:tests? #f)) ; no "check" target
89d80159
EF
218 (native-inputs
219 `(("autoconf" ,autoconf)
220 ("automake" ,automake)
221 ("libtool" ,libtool)))
222 (inputs
223 `(("zlib" ,zlib)))
58593975
RW
224 (synopsis "C library for manipulating POSIX tar files")
225 (description
226 "libtar is a C library for manipulating POSIX tar files. It handles
227adding and extracting files to/from a tar archive.")
89d80159 228 (home-page "https://repo.or.cz/libtar.git")
58593975
RW
229 (license license:bsd-3)))
230
a268f085
LC
231(define-public gzip
232 (package
233 (name "gzip")
07c95566 234 (version "1.10")
a268f085 235 (source (origin
87f5d366 236 (method url-fetch)
0db342a5 237 (uri (string-append "mirror://gnu/gzip/gzip-"
28181faf 238 version ".tar.xz"))
a268f085
LC
239 (sha256
240 (base32
07c95566 241 "1h6p374d3j8d4cdfydzls021xa2yby8myc0h8d6m8bc7k6ncq9c4"))))
a268f085 242 (build-system gnu-build-system)
f50d2669 243 (synopsis "General file (de)compression (using lzw)")
a268f085
LC
244 (arguments
245 ;; FIXME: The test suite wants `less', and optionally Perl.
48623f5b
RW
246 '(#:tests? #f
247 #:phases
248 (modify-phases %standard-phases
c7b87eed
MB
249 (add-after 'unpack 'patch-for-glibc-2.28
250 (lambda _
251 ;; Adjust the bundled gnulib to work with glibc 2.28. See e.g.
252 ;; "m4-gnulib-libio.patch". This is a phase rather than patch
253 ;; or snippet to work around <https://bugs.gnu.org/32347>.
254 (substitute* (find-files "lib" "\\.c$")
255 (("#if defined _IO_ftrylockfile")
256 "#if defined _IO_EOF_SEEN"))
257 (substitute* "lib/stdio-impl.h"
258 (("^/\\* BSD stdio derived implementations")
259 (string-append "#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN\n"
260 "# define _IO_IN_BACKUP 0x100\n"
261 "#endif\n\n"
262 "/* BSD stdio derived implementations")))
263 #t))
48623f5b
RW
264 (add-after 'unpack 'use-absolute-name-of-gzip
265 (lambda* (#:key outputs #:allow-other-keys)
266 (substitute* "gunzip.in"
267 (("exec gzip")
268 (string-append "exec " (assoc-ref outputs "out")
269 "/bin/gzip")))
270 #t)))))
a268f085 271 (description
79c311b8
LC
272 "GNU Gzip provides data compression and decompression utilities; the
273typical extension is \".gz\". Unlike the \"zip\" format, it compresses a single
274file; as a result, it is often used in conjunction with \"tar\", resulting in
275\".tar.gz\" or \".tgz\", etc.")
4a44e743 276 (license license:gpl3+)
6fd52309 277 (home-page "https://www.gnu.org/software/gzip/")))
a268f085
LC
278
279(define-public bzip2
03bc86b8
CB
280 (package
281 (name "bzip2")
b9a3654e 282 (version "1.0.8")
03bc86b8
CB
283 (source (origin
284 (method url-fetch)
b9a3654e
MB
285 (uri (string-append "https://sourceware.org/pub/bzip2/bzip2-"
286 version ".tar.gz"))
03bc86b8
CB
287 (sha256
288 (base32
b9a3654e 289 "0s92986cv0p692icqlw1j42y9nld8zd83qwhzbqd61p1dqbh6nmb"))))
03bc86b8
CB
290 (build-system gnu-build-system)
291 (arguments
292 `(#:modules ((guix build gnu-build-system)
293 (guix build utils)
5212c52c 294 (ice-9 ftw)
03bc86b8
CB
295 (srfi srfi-1))
296 #:phases
297 (modify-phases %standard-phases
8e98f750
MB
298 (add-after 'set-paths 'hide-input-bzip2
299 (lambda* (#:key inputs #:allow-other-keys)
300 (let ((bzip2 (assoc-ref inputs "bzip2")))
301 (if bzip2
302 ;; Prevent the build system from retaining a reference to
303 ;; BZIP2 from INPUTS.
304 (begin
305 (setenv "LIBRARY_PATH"
306 (string-join (delete (string-append bzip2 "/lib")
307 (string-split (getenv "LIBRARY_PATH")
308 #\:))
309 ":"))
310 (format #t "environment variable `LIBRARY_PATH' set to `~a'~%"
311 (getenv "LIBRARY_PATH")))
312 (format #t "no bzip2 found, nothing done~%"))
313 #t)))
03bc86b8
CB
314 (replace 'configure
315 (lambda* (#:key target #:allow-other-keys)
3158bc04
MW
316 (when ,(%current-target-system)
317 ;; Cross-compilation: use the cross tools.
318 (substitute* (find-files "." "Makefile")
319 (("CC=.*$")
320 (string-append "CC = " target "-gcc\n"))
321 (("AR=.*$")
322 (string-append "AR = " target "-ar\n"))
323 (("RANLIB=.*$")
324 (string-append "RANLIB = " target "-ranlib\n"))
325 (("^all:(.*)test" _ prerequisites)
326 ;; Remove 'all' -> 'test' dependency.
327 (string-append "all:" prerequisites "\n"))))
328 #t))
03bc86b8
CB
329 (add-before 'build 'build-shared-lib
330 (lambda* (#:key inputs #:allow-other-keys)
331 (patch-makefile-SHELL "Makefile-libbz2_so")
3158bc04 332 (invoke "make" "-f" "Makefile-libbz2_so")))
03bc86b8
CB
333 (add-after 'install 'install-shared-lib
334 (lambda* (#:key outputs #:allow-other-keys)
2b786f67
MB
335 ;; The Makefile above does not have an 'install' target, nor does
336 ;; it create all the (un)versioned symlinks, so we handle it here.
03bc86b8 337 (let* ((out (assoc-ref outputs "out"))
2b786f67 338 (libdir (string-append out "/lib"))
5212c52c
MB
339 (soname "libbz2.so")
340 ;; Locate the built library (e.g. "libbz2.so.1.0.6").
341 (lib (car (scandir "."
342 (lambda (file)
343 (and (string-prefix? soname file)
344 (eq? 'regular
345 (stat:type (lstat file))))))))
346 (soversion (string-drop lib (+ 1 (string-length soname)))))
2b786f67
MB
347 (install-file lib libdir)
348 (with-directory-excursion libdir
349 ;; Create symlinks libbz2.so.1 -> libbz2.so.1.0, etc.
5212c52c 350 (let loop ((base soname)
2b786f67
MB
351 (numbers (string-split soversion #\.)))
352 (unless (null? numbers)
353 (let ((so-file (string-append base "." (car numbers))))
354 (symlink so-file base)
355 (loop so-file (cdr numbers))))))
356 #t)))
45719c1d
MB
357 (add-after 'install-shared-lib 'move-static-lib
358 (lambda* (#:key outputs #:allow-other-keys)
359 (let ((out (assoc-ref outputs "out"))
360 (static (assoc-ref outputs "static")))
361 (with-directory-excursion (string-append out "/lib")
362 (install-file "libbz2.a" (string-append static "/lib"))
363 (delete-file "libbz2.a")
364 #t))))
e7ee50f2
CB
365 (add-after 'install-shared-lib 'patch-scripts
366 (lambda* (#:key outputs inputs #:allow-other-keys)
367 (let* ((out (assoc-ref outputs "out")))
368 (substitute* (string-append out "/bin/bzdiff")
369 (("/bin/rm") "rm")))
03bc86b8 370 #t)))
ab4fab19 371
03bc86b8
CB
372 #:make-flags (list (string-append "PREFIX="
373 (assoc-ref %outputs "out")))
ab4fab19 374
03bc86b8
CB
375 ;; Don't attempt to run the tests when cross-compiling.
376 ,@(if (%current-target-system)
377 '(#:tests? #f)
378 '())))
45719c1d 379 (outputs '("out" "static"))
03bc86b8
CB
380 (synopsis "High-quality data compression program")
381 (description
382 "bzip2 is a freely available, patent free (see below), high-quality data
a268f085
LC
383compressor. It typically compresses files to within 10% to 15% of the best
384available techniques (the PPM family of statistical compressors), whilst
385being around twice as fast at compression and six times faster at
386decompression.")
03bc86b8
CB
387 (license (license:non-copyleft "file://LICENSE"
388 "See LICENSE in the distribution."))
7598b678 389 (home-page "https://web.archive.org/web/20180801004107/http://www.bzip.org/")))
a268f085 390
669b7b83 391(define-public lbzip2
7bb7bb5c
TGR
392 ;; The last 2.5 release is 4 years behind the newest commit (from 2018) and
393 ;; may create files that can't even be decompressed by newer bzip2 versions.
394 (let ((commit "b6dc48a7b9bfe6b340ed1f6d72133608ad57144b")
395 (revision "0"))
396 (package
397 (name "lbzip2")
398 (version (git-version "2.5" revision commit))
399 (source
400 (origin
401 (method git-fetch)
402 (uri (git-reference
403 (url "https://github.com/kjn/lbzip2")
404 (commit commit)))
405 (sha256
406 (base32 "140xp00dmjsr6c3dwb4dwf0pzlgf159igri321inbinsjiclkngy"))
407 (file-name (git-file-name name version))))
408 (build-system gnu-build-system)
409 (arguments
410 `(#:phases
411 (modify-phases %standard-phases
412 (add-after 'unpack 'unpack-gnulib
413 (lambda* (#:key inputs #:allow-other-keys)
414 (let ((gnulib (assoc-ref inputs "gnulib")))
415 (copy-recursively gnulib "lib")
416 (setenv "PATH" (string-append "lib:" (getenv "PATH")))
417 #t)))
418 (delete 'bootstrap) ; gnulib still has unpatched shebangs
419 (add-after 'patch-source-shebangs 'bootstrap
420 (lambda _
421 (invoke "sh" "build-aux/autogen.sh")
422 #t)))))
423 (native-inputs
424 `(("autoconf" ,autoconf)
425 ("automake" ,automake)
426 ("gnulib"
427 ,(let ((commit "2d431ac35c4943a3655c07ba91870d2323321b43"))
428 (origin
429 (method git-fetch)
430 (uri (git-reference
431 (url "git://git.savannah.gnu.org/gnulib.git")
432 (commit commit)))
433 (sha256
434 (base32 "1f0xr4w89bqvhzsfcflcagdixidrk41k00k7kpr91w9lazfis4kf"))
435 (file-name (git-file-name "gnulib" commit)))))
436 ("perl" ,perl)))
437 (synopsis "Parallel bzip2 compression utility")
438 (description
439 "lbzip2 is a multi-threaded compression utility with support for the
669b7b83
RW
440bzip2 compressed file format. lbzip2 can process standard bz2 files in
441parallel. It uses POSIX threading model (pthreads), which allows it to take
442full advantage of symmetric multiprocessing (SMP) systems. It has been proven
443to scale linearly, even to over one hundred processor cores. lbzip2 is fully
444compatible with bzip2 – both at file format and command line level.")
7bb7bb5c
TGR
445 ;; lbzip2.org now looks fishy. There is no source code to be found.
446 ;; Reported upstream: <https://github.com/kjn/lbzip2/issues/26>.
447 (home-page "https://github.com/kjn/lbzip2")
448 (license license:gpl3+))))
669b7b83 449
5d47eab0
EF
450(define-public pbzip2
451 (package
452 (name "pbzip2")
bf867709 453 (version "1.1.13")
5d47eab0
EF
454 (source (origin
455 (method url-fetch)
21b2ec4d
EF
456 (uri (string-append "https://launchpad.net/pbzip2/"
457 (version-major+minor version) "/" version
458 "/+download/" name "-" version ".tar.gz"))
5d47eab0
EF
459 (sha256
460 (base32
bf867709 461 "1rnvgcdixjzbrmcr1nv9b6ccrjfrhryaj7jwz28yxxv6lam3xlcg"))))
5d47eab0
EF
462 (build-system gnu-build-system)
463 (inputs
b3546174 464 `(("bzip2" ,bzip2)))
5d47eab0 465 (arguments
bf867709 466 `(#:tests? #f ; no tests
5d47eab0 467 #:phases (modify-phases %standard-phases
bf867709 468 (delete 'configure)) ; no configure script
21b2ec4d 469 #:make-flags (list (string-append "PREFIX=" %output))))
1ac624cd
BH
470 (home-page (string-append "https://web.archive.org/web/20180412020219/"
471 "http://compression.ca/pbzip2/"))
5d47eab0
EF
472 (synopsis "Parallel bzip2 implementation")
473 (description
474 "Pbzip2 is a parallel implementation of the bzip2 block-sorting file
475compressor that uses pthreads and achieves near-linear speedup on SMP machines.
21b2ec4d 476The output of this version is fully compatible with bzip2 v1.0.2 (i.e. anything
5d47eab0
EF
477compressed with pbzip2 can be decompressed with bzip2).")
478 (license (license:non-copyleft "file://COPYING"
21b2ec4d 479 "See COPYING in the distribution."))))
5d47eab0 480
a268f085
LC
481(define-public xz
482 (package
483 (name "xz")
957aac76 484 (version "5.2.4")
a268f085 485 (source (origin
87f5d366 486 (method url-fetch)
52d76b64
LC
487 (uri (list (string-append "http://tukaani.org/xz/xz-" version
488 ".tar.gz")
489 (string-append "http://multiprecision.org/guix/xz-"
490 version ".tar.gz")))
a268f085
LC
491 (sha256
492 (base32
957aac76 493 "0ibi2zsfaz6l756spjwc5rayf4ckgc9hwmy8qinppcyk4svz64mm"))))
a268f085 494 (build-system gnu-build-system)
5b2da2a6
MB
495 (arguments
496 `(#:phases
497 (modify-phases %standard-phases
498 (add-after 'install 'move-static-lib
499 (lambda* (#:key outputs #:allow-other-keys)
500 (let ((out (assoc-ref outputs "out"))
501 (static (assoc-ref outputs "static")))
502 (mkdir-p (string-append static "/lib"))
503 (rename-file (string-append out "/lib/liblzma.a")
504 (string-append static "/lib/liblzma.a"))
505 ;; Remove reference to the static library from the .la file
506 ;; so Libtool does the right thing when both the shared and
507 ;; static library is available.
508 (substitute* (string-append out "/lib/liblzma.la")
509 (("^old_library='liblzma.a'") "old_library=''"))
510 #t))))))
511 (outputs '("out" "static"))
35b9e423 512 (synopsis "General-purpose data compression")
a268f085
LC
513 (description
514 "XZ Utils is free general-purpose data compression software with high
515compression ratio. XZ Utils were written for POSIX-like systems, but also
516work on some not-so-POSIX systems. XZ Utils are the successor to LZMA Utils.
517
518The core of the XZ Utils compression code is based on LZMA SDK, but it has
519been modified quite a lot to be suitable for XZ Utils. The primary
520compression algorithm is currently LZMA2, which is used inside the .xz
521container format. With typical files, XZ Utils create 30 % smaller output
522than gzip and 15 % smaller output than bzip2.")
38bbd61d 523 (license (list license:gpl2+ license:lgpl2.1+)) ; bits of both
58891850 524 (home-page "https://tukaani.org/xz/")))
c6eac761 525
0dcea35d
KK
526(define-public lhasa
527 (package
528 (name "lhasa")
529 (version "0.3.1")
530 (source (origin
531 (method url-fetch)
532 (uri (string-append
533 "https://github.com/fragglet/lhasa/releases/download/v"
534 version "/lhasa-" version ".tar.gz"))
535 (sha256
536 (base32
537 "092zi9av18ma20c6h9448k0bapvx2plnp292741dvfd9hmgqxc1z"))))
538 (build-system gnu-build-system)
539 (arguments
540 '(#:phases
541 (modify-phases %standard-phases
542 (add-before 'check 'set-up-test-environment
543 (lambda* (#:key inputs #:allow-other-keys)
544 (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
545 "/share/zoneinfo"))
546 #t)))))
547 (native-inputs
5a8ef3c1 548 `(("tzdata" ,tzdata-for-tests)))
0dcea35d
KK
549 (home-page "https://fragglet.github.com/lhasa/")
550 (synopsis "LHA archive decompressor")
551 (description "Lhasa is a replacement for the Unix LHA tool, for
552decompressing .lzh (LHA / LHarc) and .lzs (LArc) archives. The backend for the
553tool is a library, so that it can be reused for other purposes. Lhasa aims to
554be compatible with as many types of lzh/lzs archives as possible. It also aims
555to generate the same output as the (non-free) Unix LHA tool, so that it will
556act as a free drop-in replacement.")
557 (license license:isc)))
558
c6eac761
LC
559(define-public lzo
560 (package
561 (name "lzo")
7276eca4 562 (version "2.10")
c6eac761
LC
563 (source
564 (origin
565 (method url-fetch)
566 (uri (string-append "http://www.oberhumer.com/opensource/lzo/download/lzo-"
567 version ".tar.gz"))
568 (sha256
569 (base32
7276eca4 570 "0wm04519pd3g8hqpjqhfr72q8qmbiwqaxcs3cndny9h86aa95y60"))))
c6eac761 571 (build-system gnu-build-system)
165fd9d5 572 (arguments '(#:configure-flags '("--enable-shared")))
c6eac761
LC
573 (home-page "http://www.oberhumer.com/opensource/lzo")
574 (synopsis
e881752c 575 "Data compression library suitable for real-time data de-/compression")
c6eac761
LC
576 (description
577 "LZO is a data compression library which is suitable for data
578de-/compression in real-time. This means it favours speed over
579compression ratio.
580
581LZO is written in ANSI C. Both the source code and the compressed data
582format are designed to be portable across platforms.")
4a44e743 583 (license license:gpl2+)))
0f323dad 584
a9f48ff0
EB
585(define-public lzop
586 (package
587 (name "lzop")
89d159fe 588 (version "1.04")
a9f48ff0
EB
589 (source
590 (origin
591 (method url-fetch)
592 (uri (string-append "http://www.lzop.org/download/lzop-"
593 version ".tar.gz"))
594 (sha256
595 (base32
89d159fe 596 "0h9gb8q7y54m9mvy3jvsmxf21yx8fc3ylzh418hgbbv0i8mbcwky"))))
a9f48ff0
EB
597 (build-system gnu-build-system)
598 (inputs `(("lzo" ,lzo)))
6f465a51 599 (home-page "https://www.lzop.org/")
a9f48ff0
EB
600 (synopsis "Compress or expand files")
601 (description
602 "Lzop is a file compressor which is very similar to gzip. Lzop uses the
603LZO data compression library for compression services, and its main advantages
604over gzip are much higher compression and decompression speed (at the cost of
605some compression ratio).")
606 (license license:gpl2+)))
607
0f323dad
LC
608(define-public lzip
609 (package
610 (name "lzip")
43d9ed77 611 (version "1.21")
0f323dad
LC
612 (source (origin
613 (method url-fetch)
614 (uri (string-append "mirror://savannah/lzip/lzip-"
615 version ".tar.gz"))
616 (sha256
617 (base32
43d9ed77 618 "12qdcw5k1cx77brv9yxi1h4dzwibhfmdpigrj43nfk8nscwm12z4"))))
0f323dad 619 (build-system gnu-build-system)
340978d7 620 (home-page "https://www.nongnu.org/lzip/lzip.html")
0f323dad
LC
621 (synopsis "Lossless data compressor based on the LZMA algorithm")
622 (description
623 "Lzip is a lossless data compressor with a user interface similar to the
624one of gzip or bzip2. Lzip decompresses almost as fast as gzip and compresses
0963e3e4 625more than bzip2, which makes it well-suited for software distribution and data
0f323dad
LC
626archiving. Lzip is a clean implementation of the LZMA algorithm.")
627 (license license:gpl3+)))
b357faac 628
9d9fc399
TGR
629(define-public lziprecover
630 (package
631 (name "lziprecover")
0eacdd46 632 (version "1.22")
9d9fc399
TGR
633 (source (origin
634 (method url-fetch)
f6145bb6
TGR
635 (uri (string-append "mirror://savannah/lzip/lziprecover/"
636 "lziprecover-" version ".tar.gz"))
9d9fc399
TGR
637 (sha256
638 (base32
0eacdd46 639 "0qh8dnhr5rly2k9dnx43qqynqwqzi5kfb15pyd29qwppfl4qm5gx"))))
9d9fc399 640 (build-system gnu-build-system)
340978d7 641 (home-page "https://www.nongnu.org/lzip/lziprecover.html")
9d9fc399
TGR
642 (synopsis "Recover and decompress data from damaged lzip files")
643 (description
644 "Lziprecover is a data recovery tool and decompressor for files in the lzip
645compressed data format (.lz). It can test the integrity of lzip files, extract
646data from damaged ones, and repair most files with small errors (up to one
647single-byte error per member) entirely.
648
649Lziprecover is not a replacement for regular backups, but a last line of defence
650when even the backups are corrupt. It can recover files by merging the good
651parts of two or more damaged copies, such as can be easily produced by running
652@command{ddrescue} on a failing device.
653
654This package also includes @command{unzcrash}, a tool to test the robustness of
655decompressors when faced with corrupted input.")
656 (license (list license:bsd-2 ; arg_parser.{cc,h}
657 license:gpl2+)))) ; everything else
658
b357faac
AE
659(define-public sharutils
660 (package
661 (name "sharutils")
9a59ce24 662 (version "4.15.2")
b357faac
AE
663 (source
664 (origin
665 (method url-fetch)
666 (uri (string-append "mirror://gnu/sharutils/sharutils-"
667 version ".tar.xz"))
d0ee11b2 668 (patches (search-patches "sharutils-CVE-2018-1000097.patch"))
b357faac
AE
669 (sha256
670 (base32
b50d58b3 671 "16isapn8f39lnffc3dp4dan05b7x6mnc76v6q5nn8ysxvvvwy19b"))
211db9ca
EF
672 (modules '((guix build utils)))
673 (snippet
674 '(begin
9fe4e45b 675 ;; Adjust for newer libc versions.
211db9ca
EF
676 (substitute* (find-files "lib" "\\.c$")
677 (("#if defined _IO_ftrylockfile")
678 "#if defined _IO_EOF_SEEN"))
679 (substitute* "lib/stdio-impl.h"
680 (("^/\\* BSD stdio derived implementations")
681 (string-append "#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN\n"
682 "# define _IO_IN_BACKUP 0x100\n"
683 "#endif\n\n"
684 "/* BSD stdio derived implementations")))
9fe4e45b
MB
685 ;; ... and for newer GCC with -fno-common.
686 (substitute* '("src/shar-opts.h"
687 "src/unshar-opts.h"
688 "src/uudecode-opts.h"
689 "src/uuencode-opts.h")
690 (("char const \\* const program_name" all)
691 (string-append "extern " all)))))))
b357faac 692 (build-system gnu-build-system)
de471774 693 (native-inputs
b357faac
AE
694 `(("which" ,which)))
695 (arguments
696 `(#:phases
dc1d3cde
KK
697 (modify-phases %standard-phases
698 (add-after 'patch-source-shebangs 'unpatch-source-shebang
699 ;; revert the patch-shebang phase on a script which is
700 ;; in fact test data
701 (lambda _
702 (substitute* "tests/shar-1.ok"
9fe4e45b 703 (((which "sh")) "/bin/sh")))))))
6fd52309 704 (home-page "https://www.gnu.org/software/sharutils/")
b357faac
AE
705 (synopsis "Archives in shell scripts, uuencode/uudecode")
706 (description
79c311b8
LC
707 "GNU sharutils is a package for creating and manipulating shell
708archives that can be readily emailed. A shell archive is a file that can be
e881752c 709processed by a Bourne-type shell to unpack the original collection of files.
79c311b8 710This package is mostly for compatibility and historical interest.")
b357faac 711 (license license:gpl3+)))
28469ab0 712
646898b3
RW
713(define-public sfarklib
714 (package
715 (name "sfarklib")
979f9e8a 716 (version "2.24")
646898b3 717 (source (origin
d40362f4
EF
718 (method git-fetch)
719 (uri (git-reference
b0e7b699 720 (url "https://github.com/raboof/sfArkLib")
d40362f4
EF
721 (commit version)))
722 (file-name (git-file-name name version))
646898b3
RW
723 (sha256
724 (base32
d40362f4 725 "0jrxy24gak7q5ml06p5jjgzk9i5r2mkfjk4ycirkp4kg7k5a237w"))))
646898b3
RW
726 (build-system gnu-build-system)
727 (arguments
728 `(#:tests? #f ;no "check" target
729 #:phases
730 (modify-phases %standard-phases
731 (replace 'configure
732 (lambda* (#:key outputs #:allow-other-keys)
733 (substitute* "Makefile"
734 (("/usr/local") (assoc-ref outputs "out")))
735 #t)))))
736 (inputs
737 `(("zlib" ,zlib)))
738 (home-page "https://github.com/raboof/sfArkLib")
739 (synopsis "Library for SoundFont decompression")
740 (description
741 "SfArkLib is a C++ library for decompressing SoundFont files compressed
742with the sfArk algorithm.")
743 (license license:gpl3+)))
744
b5ad1659 745(define-public sfarkxtc
3fa31317
RW
746 (let ((commit "13cd6f93725a90d91ec5ea75babf1dbd694ac463")
747 (revision "1"))
748 (package
749 (name "sfarkxtc")
750 (version (git-version "0" revision commit))
751 (source (origin
752 ;; There are no release tarballs, so we just fetch the latest
753 ;; commit at this time.
754 (method git-fetch)
755 (uri (git-reference
b0e7b699 756 (url "https://github.com/raboof/sfarkxtc")
3fa31317
RW
757 (commit commit)))
758 (file-name (git-file-name name version))
759 (sha256
760 (base32
761 "1mb1jyk1m11l1gppd9hmql9cyp55sdf7jk5rbc7acky1z4k4mv19"))))
762 (build-system gnu-build-system)
763 (arguments
764 `(#:tests? #f ;no "check" target
765 #:phases
766 (modify-phases %standard-phases
767 (replace 'configure
768 (lambda* (#:key outputs #:allow-other-keys)
769 (substitute* "Makefile"
770 (("/usr/local") (assoc-ref outputs "out")))
771 #t)))))
772 (inputs
773 `(("zlib" ,zlib)
774 ("sfarklib" ,sfarklib)))
775 (home-page "https://github.com/raboof/sfarkxtc")
776 (synopsis "Basic sfArk decompressor")
777 (description "SfArk extractor converts SoundFonts in the compressed legacy
b5ad1659 778sfArk file format to the uncompressed sf2 format.")
3fa31317 779 (license license:gpl3+))))
b5ad1659 780
27f76fe6
TUBK
781(define-public libmspack
782 (package
783 (name "libmspack")
27b2f34c 784 (home-page "https://cabextract.org.uk/libmspack/")
511930c2 785 (version "0.10.1")
27f76fe6
TUBK
786 (source
787 (origin
788 (method url-fetch)
27b2f34c 789 (uri (string-append home-page name "-" version "alpha.tar.gz"))
27f76fe6 790 (sha256
511930c2 791 (base32 "13janaqsvm7aqc4agjgd4819pbgqv50j88bh5kci1z70wvg65j5s"))))
27f76fe6 792 (build-system gnu-build-system)
03c16bb5
MB
793 (arguments
794 `(#:configure-flags '("--disable-static")))
27f76fe6
TUBK
795 (synopsis "Compression tools for some formats used by Microsoft")
796 (description
797 "The purpose of libmspack is to provide both compression and
798decompression of some loosely related file formats used by Microsoft.")
799 (license license:lgpl2.1+)))
73f542c3 800
82aa2a28
LF
801(define-public lz4
802 (package
803 (name "lz4")
c4227f7b 804 (version "1.9.3")
82aa2a28
LF
805 (source
806 (origin
b38cfa1d
MB
807 (method git-fetch)
808 (uri (git-reference (url "https://github.com/lz4/lz4")
809 (commit (string-append "v" version))))
82aa2a28 810 (sha256
c4227f7b 811 (base32 "1w02kazh1fps3sji2sn89fz862j1199c5ajrqcgl1bnlxj09kcbz"))
b38cfa1d 812 (file-name (git-file-name name version))))
82aa2a28 813 (build-system gnu-build-system)
2e8a9db6 814 (outputs (list "out" "static"))
9205f451
MB
815 (native-inputs
816 `(;; For tests.
817 ("python" ,python)
818 ("valgrind" ,valgrind)))
82aa2a28 819 (arguments
78bbf6c4
LLB
820 `(;; Not designed for parallel testing.
821 ;; See https://github.com/lz4/lz4/issues/957#issuecomment-737419821
822 #:parallel-tests? #f
823 #:test-target "test"
2b6ecdf4 824 #:make-flags (list (string-append "CC=" ,(cc-for-target))
0dd6d21a 825 (string-append "prefix=" (assoc-ref %outputs "out")))
2e8a9db6
TGR
826 #:phases
827 (modify-phases %standard-phases
828 (delete 'configure) ; no configure script
829 (add-before 'check 'disable-broken-test
830 (lambda _
831 (substitute* "tests/Makefile"
832 ;; This fails when $prefix is not a single top-level directory.
833 (("^test: (.*) test-install" _ targets)
834 (string-append "test: " targets)))
835 #t))
836 (add-after 'install 'move-static-library
837 (lambda* (#:key outputs #:allow-other-keys)
838 (let ((out (assoc-ref outputs "out"))
839 (static (assoc-ref outputs "static")))
840 (mkdir-p (string-append static "/lib"))
841 (rename-file (string-append out "/lib/liblz4.a")
842 (string-append static "/lib/liblz4.a"))
843 #t))))))
fd174342 844 (home-page "https://www.lz4.org")
82aa2a28
LF
845 (synopsis "Compression algorithm focused on speed")
846 (description "LZ4 is a lossless compression algorithm, providing
847compression speed at 400 MB/s per core (0.16 Bytes/cycle). It also features an
848extremely fast decoder, with speed in multiple GB/s per core (0.71 Bytes/cycle).
849A high compression derivative, called LZ4_HC, is also provided. It trades CPU
850time for compression ratio.")
b7585ca3 851 ;; The libraries (lz4, lz4hc, and xxhash) are BSD licenced. The command
82aa2a28
LF
852 ;; line interface programs (lz4, fullbench, fuzzer, datagen) are GPL2+.
853 (license (list license:bsd-2 license:gpl2+))))
dd8d6d65
SB
854
855(define-public squashfs-tools
856 (package
857 (name "squashfs-tools")
957fe1c2 858 (version "4.4")
dd8d6d65
SB
859 (source (origin
860 (method url-fetch)
de67e922
LF
861 (uri (string-append "mirror://sourceforge/squashfs/squashfs/"
862 "squashfs" version "/"
dd8d6d65
SB
863 "squashfs" version ".tar.gz"))
864 (sha256
865 (base32
9351b2a4
MB
866 "0zmhvczscqz0mzh4b9m8m42asq14db0a6lc8clp5ljq5ybrv70d9"))
867 (modules '((guix build utils)))
868 (snippet
869 '(begin
870 ;; Fix build with -fno-common (default in GCC 10).
871 ;; Remove for squashfs-tools > 4.4.
872 (substitute* "squashfs-tools/mksquashfs.h"
873 (("struct cache \\*bwriter_buffer" all)
874 (string-append "extern " all)))))))
dd8d6d65
SB
875 (build-system gnu-build-system)
876 (arguments
c0040f0e 877 `(#:tests? #f ; no check target
dd8d6d65 878 #:make-flags
c0040f0e 879 (list (string-append "CC=" ,(cc-for-target))
dd8d6d65
SB
880 "XZ_SUPPORT=1"
881 "LZO_SUPPORT=1"
882 "LZ4_SUPPORT=1"
883 (string-append "INSTALL_DIR=" %output "/bin"))
884 #:phases
885 (modify-phases %standard-phases
886 (replace 'configure
f793b4ef
EF
887 (lambda _
888 (chdir "squashfs-tools")
f793b4ef 889 #t)))))
dd8d6d65
SB
890 (inputs
891 `(("lz4" ,lz4)
892 ("lzo" ,lzo)
893 ("xz" ,xz)
894 ("zlib" ,zlib)))
c5bb55a8 895 (home-page "https://github.com/plougher/squashfs-tools")
8f65585b 896 (synopsis "Tools to create and extract squashfs file systems")
dd8d6d65 897 (description
8f65585b 898 "Squashfs is a highly compressed read-only file system for Linux. It uses
dd8d6d65
SB
899zlib to compress files, inodes, and directories. All blocks are packed to
900minimize the data overhead, and block sizes of between 4K and 1M are supported.
901It is intended to be used for archival use, for live CDs, and for embedded
902systems where low overhead is needed. This package allows you to create and
8f65585b 903extract such file systems.")
dd8d6d65 904 (license license:gpl2+)))
820dc3f5
JM
905
906(define-public pigz
907 (package
908 (name "pigz")
69f75ce1 909 (version "2.6")
820dc3f5
JM
910 (source (origin
911 (method url-fetch)
912 (uri (string-append "http://zlib.net/pigz/"
913 name "-" version ".tar.gz"))
914 (sha256
915 (base32
69f75ce1 916 "0z9avc4mifwcpj3qdsf9m2rjw9jx03b2r9pj0c4xgla9fh6ppv9f"))))
820dc3f5
JM
917 (build-system gnu-build-system)
918 (arguments
919 `(#:phases
920 (modify-phases %standard-phases
921 (delete 'configure)
922 (replace 'install
923 (lambda* (#:key outputs #:allow-other-keys)
924 (let* ((out (assoc-ref outputs "out"))
925 (bin (string-append out "/bin"))
926 (man (string-append out "/share/man/man1")))
927 (install-file "pigz" bin)
928 (symlink "pigz" (string-append bin "/unpigz"))
929 (install-file "pigz.1" man)
930 #t))))
9b9bc1b0
TGR
931 #:make-flags
932 (list ,(string-append "CC=" (cc-for-target)))
820dc3f5
JM
933 #:test-target "tests"))
934 (inputs `(("zlib" ,zlib)))
7f1773ea 935 (home-page "https://zlib.net/pigz/")
820dc3f5
JM
936 (synopsis "Parallel implementation of gzip")
937 (description
938 "This package provides a parallel implementation of gzip that exploits
939multiple processors and multiple cores when compressing data.")
940
941 ;; Things under zopfli/ are under ASL2.0, but 4 files at the top-level,
942 ;; written by Mark Adler, are under another non-copyleft license.
943 (license license:asl2.0)))
23f3cbb8
BW
944
945(define-public pixz
946 (package
947 (name "pixz")
468c8f64 948 (version "1.0.7")
23f3cbb8
BW
949 (source (origin
950 (method url-fetch)
951 (uri (string-append
952 "https://github.com/vasi/pixz/releases/download/v" version
953 "/pixz-" version ".tar.xz"))
954 (sha256
955 (base32
468c8f64 956 "1ifxr18f2h75gkcrkx8033kwmwmrcgxshpaawyc2n4dzn1p2rqz5"))))
23f3cbb8
BW
957 (build-system gnu-build-system)
958 (native-inputs
959 `(("pkg-config" ,pkg-config)
960 ("libarchive" ,libarchive)))
961 (home-page "https://github.com/vasi/pixz")
962 (synopsis "Parallel indexing implementation of LZMA")
963 (description
964 "The existing XZ Utils provide great compression in the .xz file format,
965but they produce just one big block of compressed data. Pixz instead produces
966a collection of smaller blocks which makes random access to the original data
967possible and can compress in parallel. This is especially useful for large
968tarballs.")
969 (license license:bsd-2)))
69d9792a 970
3fd4b90d
DM
971(define-public cabextract
972 (package
973 (name "cabextract")
27b2f34c 974 (home-page "https://cabextract.org.uk/")
bde093c2 975 (version "1.9.1")
3fd4b90d
DM
976 (source (origin
977 (method url-fetch)
393b55d5 978 (uri (string-append home-page "cabextract-" version ".tar.gz"))
3fd4b90d
DM
979 (sha256
980 (base32
bde093c2 981 "19qwhl2r8ip95q4vxzxg2kp4p125hjmc9762sns1dwwf7ikm7hmg"))
92526ade
MB
982 (modules '((guix build utils)))
983 (snippet
984 '(begin
985 ;; Delete bundled libmspack.
986 (delete-file-recursively "mspack")
987 #t))))
3fd4b90d 988 (build-system gnu-build-system)
b3175c70
KK
989 (arguments
990 '(#:configure-flags '("--with-external-libmspack")
991 #:phases
992 (modify-phases %standard-phases
993 ;; cabextract needs some of libmspack's header files.
994 ;; These are located in the "mspack" directory of libmspack.
995 (add-before 'build 'unpack-libmspack
996 (lambda* (#:key inputs #:allow-other-keys)
997 (let ((dir-name "libmspack-src"))
998 (mkdir dir-name)
999 (invoke "tar" "-xvf" (assoc-ref inputs "libmspack-source")
1000 "-C" dir-name "--strip-components" "1")
1001 (rename-file (string-append dir-name "/mspack")
1002 "mspack")
1003 (delete-file-recursively dir-name)
1004 #t))))))
3fd4b90d
DM
1005 (native-inputs
1006 `(("pkg-config" ,pkg-config)))
1007 (inputs
b3175c70
KK
1008 `(("libmspack" ,libmspack)
1009 ("libmspack-source" ,(package-source libmspack))))
3fd4b90d
DM
1010 (synopsis "Tool to unpack Cabinet archives")
1011 (description "Extracts files out of Microsoft Cabinet (.cab) archives")
1012 ;; Some source files specify gpl2+, lgpl2+, however COPYING is gpl3.
1013 (license license:gpl3+)))
0b073506 1014
9d5ed931
LLB
1015(define-public libjcat
1016 (package
1017 (name "libjcat")
38c892f6 1018 (version "0.1.8")
9d5ed931
LLB
1019 (source
1020 (origin
1021 (method git-fetch)
1022 (uri
1023 (git-reference
1024 (url "https://github.com/hughsie/libjcat")
1025 (commit version)))
1026 (file-name (git-file-name name version))
1027 (sha256
38c892f6 1028 (base32 "18qkyg19r7fxzv93kar5n808n3582ygjmqwa7rnyg5y4b6hnwihl"))))
9d5ed931
LLB
1029 (build-system meson-build-system)
1030 (native-inputs
1031 `(("gobject-introspection" ,gobject-introspection)
1032 ("help2man" ,help2man)
1033 ("pkg-config" ,pkg-config)))
1034 (inputs
1035 `(("git" ,git)
1036 ("glib" ,glib)
1037 ("gnupg" ,gnupg)
1038 ("gnutls" ,gnutls)
1039 ("gpgme" ,gpgme)
1040 ("json-glib" ,json-glib)
1041 ("vala" ,vala)))
1042 (home-page "https://github.com/hughsie/libjcat")
1043 (synopsis "Library for reading and writing Jcat files")
1044 (description
1045 "This library allows reading and writing gzip-compressed JSON catalog
1046files, which can be used to store GPG, PKCS-7 and SHA-256 checksums for each
1047file.")
1048 (license license:lgpl2.1+)))
1049
0b073506
TGR
1050(define-public xdelta
1051 (package
1052 (name "xdelta")
1053 (version "3.1.0")
1054 (source
1055 (origin
0633c77b
RW
1056 (method git-fetch)
1057 (uri (git-reference
b0e7b699 1058 (url "https://github.com/jmacd/xdelta")
0633c77b
RW
1059 (commit (string-append "v" version))))
1060 (file-name (git-file-name name version))
0b073506
TGR
1061 (sha256
1062 (base32
0633c77b 1063 "09mmsalc7dwlvgrda56s2k927rpl3a5dzfa88aslkqcjnr790wjy"))
0b073506
TGR
1064 (snippet
1065 ;; This file isn't freely distributable and has no effect on building.
6cbee49d
MW
1066 '(begin
1067 (delete-file "xdelta3/draft-korn-vcdiff.txt")
1068 #t))))
0b073506
TGR
1069 (build-system gnu-build-system)
1070 (native-inputs
1071 `(("autoconf" ,autoconf)
1072 ("automake" ,automake)))
1073 (arguments
1074 `(#:phases
1075 (modify-phases %standard-phases
1076 (add-after 'unpack 'enter-build-directory
e5ff963a 1077 (lambda _ (chdir "xdelta3") #t)))))
69b7fa3e 1078 (home-page "http://xdelta.org")
0b073506
TGR
1079 (synopsis "Delta encoder for binary files")
1080 (description "xdelta encodes only the differences between two binary files
1081using the VCDIFF algorithm and patch file format described in RFC 3284. It can
1082also be used to apply such patches. xdelta is similar to @command{diff} and
1083@command{patch}, but is not limited to plain text and does not generate
1084human-readable output.")
1085 (license license:asl2.0)))
389eb3fa
TGR
1086
1087(define-public lrzip
1088 (package
1089 (name "lrzip")
2e6d40b3 1090 (version "0.641")
389eb3fa
TGR
1091 (source
1092 (origin
1093 (method url-fetch)
1094 (uri (string-append
51697aab 1095 "http://ck.kolivas.org/apps/lrzip/lrzip-" version ".tar.xz"))
389eb3fa 1096 (sha256
2e6d40b3 1097 (base32 "0ziyanspd96dc3lp2qdcylc7aq8dhb511jhqrhxvlp502fjqjqrc"))))
389eb3fa
TGR
1098 (build-system gnu-build-system)
1099 (native-inputs
1100 `(;; nasm is only required when building for 32-bit x86 platforms
1101 ,@(if (string-prefix? "i686" (or (%current-target-system)
1102 (%current-system)))
1103 `(("nasm" ,nasm))
1104 '())
1105 ("perl" ,perl)))
1106 (inputs
1107 `(("bzip2" ,bzip2)
51697aab 1108 ("lz4" ,lz4)
389eb3fa
TGR
1109 ("lzo" ,lzo)
1110 ("zlib" ,zlib)))
1111 (home-page "http://ck.kolivas.org/apps/lrzip/")
1112 (synopsis "Large file compressor with a very high compression ratio")
1113 (description "lrzip is a compression utility that uses long-range
1114redundancy reduction to improve the subsequent compression ratio of
1115larger files. It can then further compress the result with the ZPAQ or
1116LZMA algorithms for maximum compression, or LZO for maximum speed. This
1117choice between size or speed allows for either better compression than
1118even LZMA can provide, or a higher speed than gzip while compressing as
1119well as bzip2.")
1120 (license (list license:gpl3+
1121 license:public-domain)))) ; most files in lzma/
e4c2136d
DC
1122
1123(define-public snappy
1124 (package
1125 (name "snappy")
bd1c5fe4 1126 (version "1.1.9")
16de7f15
TGR
1127 (source
1128 (origin
898ac8e7
EF
1129 (method git-fetch)
1130 (uri (git-reference
b0e7b699 1131 (url "https://github.com/google/snappy")
898ac8e7
EF
1132 (commit version)))
1133 (file-name (git-file-name name version))
16de7f15 1134 (sha256
bd1c5fe4
TGR
1135 (base32 "03zz56h79z0sgvi5sangjqn9dahhzvf645v26n1y0gwmfbmsax95"))
1136 (patches
1137 (search-patches "snappy-add-O2-flag-in-CmakeLists.txt.patch"
1138 "snappy-add-inline-for-GCC.patch"))))
5a437357
MB
1139 (build-system cmake-build-system)
1140 (arguments
bd1c5fe4
TGR
1141 `(#:configure-flags
1142 (list "-DBUILD_SHARED_LIBS=ON"
1143 ;; These would be installed alongside Snappy otherwise.
1144 "-DBENCHMARK_ENABLE_INSTALL=OFF"
1145 "-DINSTALL_GTEST=OFF")
1146 #:phases
1147 (modify-phases %standard-phases
1148 (add-after 'unpack 'unpack-third_party-subprojects
1149 (lambda* (#:key inputs #:allow-other-keys)
1150 (with-directory-excursion "third_party"
1151 (for-each (lambda (subproject)
1152 (let* ((input (string-append subproject "-source"))
1153 (source (assoc-ref inputs input)))
1154 (with-directory-excursion subproject
1155 ;; Take advantage of the coincidence that both
1156 ;; use GIT-FETCH, which creates a directory.
1157 (copy-recursively source "."))))
1158 (list "benchmark"
1159 "googletest"))
1160 #;punt))))))
1161 (native-inputs
1162 `(("benchmark-source" ,(package-source benchmark))
1163 ("googletest-source" ,(package-source googletest))))
e4c2136d
DC
1164 (home-page "https://github.com/google/snappy")
1165 (synopsis "Fast compressor/decompressor")
5a437357 1166 (description "Snappy is a compression/decompression library. It does not
e4c2136d 1167aim for maximum compression, or compatibility with any other compression library;
5a437357 1168instead, it aims for very high speeds and reasonable compression. For instance,
e4c2136d
DC
1169compared to the fastest mode of zlib, Snappy is an order of magnitude faster
1170for most inputs, but the resulting compressed files are anywhere from 20% to
1171100% bigger.")
1172 (license license:asl2.0)))
adbd7faf
KK
1173
1174(define-public p7zip
1175 (package
1176 (name "p7zip")
1177 (version "16.02")
1178 (source (origin
1179 (method url-fetch)
1180 (uri (string-append "mirror://sourceforge/" name "/" name "/"
1181 version "/" name "_" version
1182 "_src_all.tar.bz2"))
1183 (sha256
1184 (base32
1185 "07rlwbbgszq8i7m8jh3x6j2w2hc9a72dc7fmqawnqkwlwb00mcjy"))
1186 (modules '((guix build utils)))
1187 (snippet
1188 '(begin
1189 ;; Remove non-free source files
1190 (for-each delete-file
1191 (append
1192 (find-files "CPP/7zip/Compress" "Rar.*")
1193 (find-files "CPP/7zip/Crypto" "Rar.*")
1194 (find-files "DOC/unRarLicense.txt")
1195 (find-files "Utils/file_Codecs_Rar_so.py")))
1196 (delete-file-recursively "CPP/7zip/Archive/Rar")
1197 (delete-file-recursively "CPP/7zip/Compress/Rar")
1198 #t))
1ac675a5 1199 (patches (search-patches "p7zip-CVE-2016-9296.patch"
a630c647 1200 "p7zip-CVE-2017-17969.patch"
1ac675a5 1201 "p7zip-remove-unused-code.patch"))))
adbd7faf
KK
1202 (build-system gnu-build-system)
1203 (arguments
1204 `(#:make-flags
1205 (list (string-append "DEST_HOME=" (assoc-ref %outputs "out")) "all3")
1206 #:phases
1207 (modify-phases %standard-phases
1208 (replace 'configure
1209 (lambda* (#:key system outputs #:allow-other-keys)
8fcdd9d5
MW
1210 (invoke "cp"
1211 (let ((system ,(or (%current-target-system)
1212 (%current-system))))
1213 (cond
1214 ((string-prefix? "x86_64" system)
1215 "makefile.linux_amd64_asm")
1216 ((string-prefix? "i686" system)
1217 "makefile.linux_x86_asm_gcc_4.X")
1218 (else
1219 "makefile.linux_any_cpu_gcc_4.X")))
1220 "makefile.machine")))
adbd7faf
KK
1221 (replace 'check
1222 (lambda _
8fcdd9d5
MW
1223 (invoke "make" "test")
1224 (invoke "make" "test_7z")
1225 (invoke "make" "test_7zr"))))))
0f4f5715 1226 (native-inputs
adbd7faf
KK
1227 (let ((system (or (%current-target-system)
1228 (%current-system))))
1229 `(,@(cond ((string-prefix? "x86_64" system)
1230 `(("yasm" ,yasm)))
1231 ((string-prefix? "i686" system)
1232 `(("nasm" ,nasm)))
1233 (else '())))))
1234 (home-page "http://p7zip.sourceforge.net/")
1235 (synopsis "Command-line file archiver with high compression ratio")
1236 (description "p7zip is a command-line port of 7-Zip, a file archiver that
1237handles the 7z format which features very high compression ratios.")
1238 (license (list license:lgpl2.1+
1239 license:gpl2+
1240 license:public-domain))))
618089f9
MB
1241
1242(define-public gzstream
1243 (package
1244 (name "gzstream")
1245 (version "1.5")
1246 (source (origin
1247 (method url-fetch)
1248 (uri
1249 ;; No versioned URL, but last release was in 2003.
1250 "http://www.cs.unc.edu/Research/compgeom/gzstream/gzstream.tgz")
1251 (file-name (string-append name "-" version ".tgz"))
1252 (sha256
1253 (base32
1254 "00y19pqjsdj5zcrx4p9j56pl73vayfwnb7y2hvp423nx0cwv5b4r"))
1255 (modules '((guix build utils)))
1256 (snippet
1257 ;; Remove pre-compiled object.
6cbee49d
MW
1258 '(begin
1259 (delete-file "gzstream.o")
1260 #t))))
618089f9
MB
1261 (build-system gnu-build-system)
1262 (arguments
1263 `(#:test-target "test"
1264 #:phases
1265 (modify-phases %standard-phases
ee4ba542
LDB
1266 ;; Enable PIC, so it can be used in shared libraries.
1267 (add-after 'unpack 'use-pic
1268 (lambda _
1269 (substitute* "Makefile"
1270 (("CPPFLAGS = " all) (string-append all "-fPIC ")))
1271 #t))
618089f9
MB
1272 (delete 'configure)
1273 (replace 'install
1274 (lambda* (#:key outputs #:allow-other-keys)
1275 (let* ((out (assoc-ref outputs "out"))
1276 (lib (string-append out "/lib"))
1277 (include (string-append out "/include")))
1278 (install-file "libgzstream.a" lib)
1279 (install-file "gzstream.h" include)
1280 #t))))))
1281 (propagated-inputs `(("zlib" ,zlib)))
1282 (home-page "http://www.cs.unc.edu/Research/compgeom/gzstream/")
1283 (synopsis "Compressed C++ iostream")
1284 (description "gzstream is a small library for providing zlib
1285functionality in a C++ iostream.")
1286 (license license:lgpl2.1+)))
36df995c
TGR
1287
1288(define-public zpaq
1289 (package
1290 (name "zpaq")
1291 (version "7.15")
1292 (source
1293 (origin
1294 (method url-fetch/zipbomb)
1295 (uri (string-append "http://mattmahoney.net/dc/zpaq"
1296 (string-delete #\. version) ".zip"))
1297 (sha256
1298 (base32
1299 "066l94yyladlfzri877nh2dhkvspagjn3m5bmv725fmhkr9c4pp8"))
1300 (modules '((guix build utils)))
1301 (snippet
1302 ;; Delete irrelevant pre-compiled binaries.
6cbee49d
MW
1303 '(begin
1304 (for-each delete-file (find-files "." "\\.exe$"))
1305 #t))))
36df995c
TGR
1306 (build-system gnu-build-system)
1307 (arguments
1308 `(#:phases
1309 (modify-phases %standard-phases
1310 (delete 'configure)) ; no ‘configure’ script
1311 #:make-flags
1312 (list
1313 (string-append "CPPFLAGS=-Dunix"
1314 ,(match (or (%current-target-system)
1315 (%current-system))
1316 ("x86_64-linux" "")
1317 ("i686-linux" "")
1318 (_ " -DNOJIT")))
1319 ;; These should be safe, lowest-common-denominator instruction sets,
1320 ;; allowing for some optimisation while remaining reproducible.
effd7198 1321 (string-append "CXXFLAGS=-O3 -DNDEBUG"
36df995c
TGR
1322 ,(match (or (%current-target-system)
1323 (%current-system))
effd7198
EF
1324 ("x86_64-linux" " -march=nocona -mtune=generic")
1325 ("i686-linux" " -march=i686 -mtune=generic")
1326 ("armhf-linux" " -mtune=generic-armv7-a")
36df995c
TGR
1327 (_ "")))
1328 (string-append "PREFIX="
1329 (assoc-ref %outputs "out")))))
1330 (native-inputs
1331 `(("perl" ,perl))) ; for pod2man
1332 (home-page "http://mattmahoney.net/dc/zpaq.html")
1333 (synopsis "Incremental journaling archiver")
1334 (description "ZPAQ is a command-line archiver for realistic situations with
1335many duplicate and already compressed files. It backs up only those files
1336modified since the last update. All previous versions remain untouched and can
1337be independently recovered. Identical files are only stored once (known as
1338@dfn{de-duplication}). Archives can also be encrypted.
1339
1340ZPAQ is intended to back up user data, not entire operating systems. It ignores
1341owner and group IDs, ACLs, extended attributes, or special file types like
1342devices, sockets, or named pipes. It does not follow or restore symbolic links
1343or junctions, and always follows hard links.")
1344 (license (list license:public-domain
1345 ;; libzpaq.cpp contains a mix of public-domain and
1346 ;; expat-licenced (or ‘MIT’) code.
1347 license:expat))))
0da8313c 1348
9e6ada8f
MR
1349(define-public unshield
1350 (package
1351 (name "unshield")
6cf48e8c 1352 (version "1.4.3")
9e6ada8f 1353 (source
298180cd
EF
1354 (origin (method git-fetch)
1355 (uri (git-reference
8ed4c468 1356 (url "http://github.com/twogood/unshield")
298180cd
EF
1357 (commit version)))
1358 (file-name (git-file-name name version))
9e6ada8f
MR
1359 (sha256
1360 (base32
298180cd 1361 "19wn22vszhci8dfcixx5rliz7phx3lv5ablvhjlclvj75k2vsdqd"))))
9e6ada8f
MR
1362 (build-system cmake-build-system)
1363 (inputs
1364 `(("zlib" ,zlib)
1365 ("openssl" ,openssl)
6cf48e8c 1366 ;; Test data that is otherwise downloaded with curl.
9e6ada8f
MR
1367 ("unshield-avigomanager11b22.zip"
1368 ,(origin
1369 (method url-fetch)
6cf48e8c
TGR
1370 (uri (string-append
1371 "https://www.dropbox.com/s/8r4b6752swe3nhu/"
1372 "unshield-avigomanager11b22.zip?dl=1"))
9e6ada8f
MR
1373 (sha256
1374 (base32 "0fwq7lih04if68wpwpsk5wjqyvh32db76a41sq6gbx4dn1lc3ddn"))
1375 (file-name "unshield-avigomanager11b22.zip")))
6cf48e8c
TGR
1376 ("unshield-baldurs_gate_patch_v1_1_4315_international.zip"
1377 ,(origin
1378 (method url-fetch)
1379 (uri (string-append
1380 "https://www.dropbox.com/s/9ruil8oi6amjbbk/"
1381 "unshield-baldurs_gate_patch_v1_1_4315_international.zip?dl=1"))
1382 (sha256
1383 (base32 "0spaxf6dardlhqxz3ys09fzamj007q3nfyw4xng6gh3qp9780maj"))
1384 (file-name "unshield-baldurs_gate_patch_v1_1_4315_international.zip")))
9e6ada8f
MR
1385 ("unshield-the-feeble-files-spanish.zip"
1386 ,(origin
1387 (method url-fetch)
6cf48e8c
TGR
1388 (uri (string-append
1389 "https://www.dropbox.com/s/1ng0z9kfxc7eb1e/"
1390 "unshield-the-feeble-files-spanish.zip?dl=1"))
9e6ada8f
MR
1391 (sha256
1392 (base32 "1k5cw6vnpja8yjlnhx5124xrw9i8s1l539hfdqqrqz3l5gn0bnyd"))
1393 (file-name "unshield-the-feeble-files-spanish.zip")))))
1394 (native-inputs
1395 `(("unzip" ,unzip)))
1396 (arguments
1397 `(#:out-of-source? #f
1398 #:phases
1399 (modify-phases %standard-phases
1400 (add-before 'check 'pre-check
1401 (lambda* (#:key inputs #:allow-other-keys)
1402 (for-each (lambda (i)
1403 (copy-file (assoc-ref inputs i)
1404 (string-append "test/v0/" i)))
1405 '("unshield-avigomanager11b22.zip"
6cf48e8c 1406 "unshield-baldurs_gate_patch_v1_1_4315_international.zip"
9e6ada8f
MR
1407 "unshield-the-feeble-files-spanish.zip"))
1408 (substitute* (find-files "test/" "/*\\.sh")
1409 ;; Tests expect the unshield binary in a specific
1410 ;; location.
1411 (("/var/tmp/unshield/bin/unshield")
1412 (string-append (getcwd) "/src/unshield"))
1413 ;; We no longer need to download the data.
1414 ((".?URL=.*$") "")
1415 (("curl -(|f)sSL -o test.zip .*") ""))
1416 (substitute* "test/v0/avigomanager.sh"
1417 (("test.zip")
1418 (string-append (getcwd)
6cf48e8c
TGR
1419 "/test/v0/unshield-avigomanager11b22.zip")))
1420 (substitute* "test/v0/baldurs_gate_patch_v1_1_4315_international.sh"
1421 (("test.zip")
1422 (string-append
1423 (getcwd)
1424 "/test/v0/unshield-baldurs_gate_patch_v1_1_4315_international.zip")))
9e6ada8f
MR
1425 (substitute* "test/v0/the-feeble-files-spanish.sh"
1426 (("test.zip")
1427 (string-append (getcwd)
1428 "/test/v0/unshield-the-feeble-files-spanish.zip")))
1429 #t))
1430 (replace 'check
1431 (lambda _
df04bd25 1432 (invoke "./run-tests.sh"))))))
9e6ada8f
MR
1433 (home-page "https://github.com/twogood/unshield")
1434 (synopsis "Extract CAB files from InstallShield installers")
1435 (description
1436 "@command{unshield} is a tool and library for extracting @file{.cab}
1437 archives from InstallShield installers.")
1438 (license license:expat)))
1439
f6ac3101
TGR
1440(define-public zstd
1441 (package
1442 (name "zstd")
ca0576d6 1443 (version "1.4.4")
3880537c
TGR
1444 (source
1445 (origin
1446 (method url-fetch)
1447 (uri (string-append "https://github.com/facebook/zstd/releases/download/"
1448 "v" version "/zstd-" version ".tar.gz"))
1449 (sha256
ca0576d6 1450 (base32 "05ckxap00qvc0j51d3ci38150cxsw82w7s9zgd5fgzspnzmp1vsr"))))
9feef62b 1451 (replacement zstd/fixed)
f6ac3101 1452 (build-system gnu-build-system)
ca0576d6
MB
1453 (outputs '("out" ;1.2MiB executables and documentation
1454 "lib" ;1.2MiB shared library and headers
1455 "static")) ;1.2MiB static library
f6ac3101
TGR
1456 (arguments
1457 `(#:phases
1458 (modify-phases %standard-phases
ec0de9d8
MB
1459 (delete 'configure) ;no configure script
1460 (add-after 'install 'adjust-library-locations
1461 (lambda* (#:key outputs #:allow-other-keys)
1462 (let* ((out (assoc-ref outputs "out"))
1463 (lib (assoc-ref outputs "lib"))
1464 (static (assoc-ref outputs "static"))
1465 (shared-libs (string-append lib "/lib"))
1466 (static-libs (string-append static "/lib")))
1467 ;; Move the static library to its own output to save ~1MiB.
1468 (mkdir-p static-libs)
1469 (for-each (lambda (ar)
1470 (link ar (string-append static-libs "/"
1471 (basename ar)))
1472 (delete-file ar))
1473 (find-files shared-libs "\\.a$"))
1474
ca0576d6 1475 ;; Make sure the pkg-config file refers to the right output.
ec0de9d8 1476 (substitute* (string-append shared-libs "/pkgconfig/libzstd.pc")
ca0576d6
MB
1477 (("^prefix=.*")
1478 (string-append "prefix=" lib "\n")))
ec0de9d8
MB
1479
1480 #t))))
f6ac3101 1481 #:make-flags
9f58c83c
EF
1482 ;; TODO: Integrate in next rebuild cycle.
1483 (list ,(if (%current-target-system)
1484 (string-append "CC=" (cc-for-target))
1485 "CC=gcc")
f45e314e 1486 (string-append "PREFIX=" (assoc-ref %outputs "out"))
ec0de9d8
MB
1487 (string-append "LIBDIR=" (assoc-ref %outputs "lib") "/lib")
1488 (string-append "INCLUDEDIR=" (assoc-ref %outputs "lib") "/include")
f45e314e
TGR
1489 ;; Skip auto-detection of, and creating a dependency on, the build
1490 ;; environment's ‘xz’ for what amounts to a dubious feature anyway.
1491 "HAVE_LZMA=0"
1492 ;; Not currently detected, but be explicit & avoid surprises later.
1493 "HAVE_LZ4=0"
e8073063 1494 "HAVE_ZLIB=0")))
2f325b63 1495 (home-page "https://facebook.github.io/zstd/")
f6ac3101
TGR
1496 (synopsis "Zstandard real-time compression algorithm")
1497 (description "Zstandard (@command{zstd}) is a lossless compression algorithm
1498that combines very fast operation with a compression ratio comparable to that of
1499zlib. In most scenarios, both compression and decompression can be performed in
1500‘real time’. The compressor can be configured to provide the most suitable
1501trade-off between compression ratio and speed, without affecting decompression
1502speed.")
1503 (license (list license:bsd-3 ; the main top-level LICENSE file
16123d1d 1504 license:bsd-2 ; many files explicitly state 2-Clause
5a719dee 1505 license:gpl2 ; the main top-level COPYING file
16123d1d
TGR
1506 license:gpl3+ ; tests/gzip/*.sh
1507 license:expat ; lib/dictBuilder/divsufsort.[ch]
f6ac3101
TGR
1508 license:public-domain ; zlibWrapper/examples/fitblk*
1509 license:zlib)))) ; zlibWrapper/{gz*.c,gzguts.h}
0f03c531 1510
9feef62b 1511(define zstd/fixed
6f873731
LLB
1512 (package
1513 (inherit zstd)
6f873731
LLB
1514 (source
1515 (origin
9feef62b
LLB
1516 (inherit (package-source zstd))
1517 (patches
1518 (search-patches
1519 ;; From Ubuntu focal-security
1520 "zstd-CVE-2021-24031_CVE-2021-24032.patch"))))))
6f873731 1521
0f03c531 1522(define-public pzstd
b26f9586 1523 (package/inherit zstd
0f03c531 1524 (name "pzstd")
b26f9586 1525 (outputs '("out"))
455daf46
EF
1526 (inputs
1527 `(,@(if (%current-target-system)
1528 `(("googletest" ,googletest))
1529 '())))
0f03c531 1530 (native-inputs
455daf46
EF
1531 `(,@(if (%current-system)
1532 `(("googletest" ,googletest))
1533 '())))
0f03c531
TGR
1534 (arguments
1535 `(#:phases
1536 (modify-phases %standard-phases
1537 (add-after 'unpack 'enter-subdirectory
9f6f726c 1538 (lambda _ (chdir "contrib/pzstd") #t))
0f03c531
TGR
1539 (delete 'configure) ; no configure script
1540 (add-before 'check 'compile-tests
1541 (lambda* (#:key make-flags #:allow-other-keys)
745e83ca 1542 (apply invoke "make" "tests" make-flags)))
0f03c531
TGR
1543 (add-after 'install 'install-documentation
1544 (lambda* (#:key outputs #:allow-other-keys)
1545 (let* ((out (assoc-ref outputs "out"))
1546 (doc (string-append out "/share/doc/" ,name)))
1547 (mkdir-p doc)
1548 (install-file "README.md" doc)
1549 #t))))
1550 #:make-flags
455daf46
EF
1551 (list (string-append "CC=" ,(cc-for-target))
1552 (string-append "CXX=" ,(cxx-for-target))
0f03c531
TGR
1553 (string-append "PREFIX=" (assoc-ref %outputs "out")))))
1554 (home-page (package-home-page zstd))
1555 (synopsis "Threaded implementation of the Zstandard compression algorithm")
1556 (description "Parallel Zstandard (PZstandard or @command{pzstd}) is a
1557multi-threaded implementation of the @uref{http://zstd.net/, Zstandard
1558compression algorithm}. It is fully compatible with the original Zstandard file
1559format and command-line interface, and can be used as a drop-in replacement.
1560
1561Compression is distributed over multiple processor cores to improve performance,
1562as is the decompression of data compressed in this manner. Data compressed by
1563other implementations will only be decompressed by two threads: one performing
1564the actual decompression, the other input and output.")
1565 (license (package-license zstd))))
148585c2
AI
1566
1567(define-public zip
1568 (package
1569 (name "zip")
1570 (version "3.0")
1571 (source
1572 (origin
1573 (method url-fetch)
1574 (uri (string-append "mirror://sourceforge/infozip"
1575 "/Zip%203.x%20%28latest%29/3.0/zip30.tar.gz"))
1576 (sha256
1577 (base32
1578 "0sb3h3067pzf3a7mlxn1hikpcjrsvycjcnj9hl9b1c3ykcgvps7h"))))
1579 (build-system gnu-build-system)
1580 (inputs `(("bzip2" ,bzip2)))
1581 (arguments
1582 `(#:tests? #f ; no test target
1583 #:make-flags (let ((out (assoc-ref %outputs "out")))
1584 (list "-f" "unix/Makefile"
1585 (string-append "prefix=" out)
1586 (string-append "MANDIR=" out "/share/man/man1")))
148585c2
AI
1587 #:phases
1588 (modify-phases %standard-phases
1589 (replace 'build
1590 (lambda* (#:key (make-flags '()) #:allow-other-keys)
b0559d24 1591 (apply invoke "make" "generic_gcc" make-flags)))
148585c2
AI
1592 (delete 'configure))))
1593 (home-page "http://www.info-zip.org/Zip.html")
1594 (synopsis "Compression and file packing utility")
1595 (description
1596 "Zip is a compression and file packaging/archive utility. Zip is useful
1597for packaging a set of files for distribution, for archiving files, and for
1598saving disk space by temporarily compressing unused files or directories.
1599Zip puts one or more compressed files into a single ZIP archive, along with
1600information about the files (name, path, date, time of last modification,
1601protection, and check information to verify file integrity). An entire
1602directory structure can be packed into a ZIP archive with a single command.
1603
1604Zip has one compression method (deflation) and can also store files without
1605compression. Zip automatically chooses the better of the two for each file.
1606Compression ratios of 2:1 to 3:1 are common for text files.")
1607 (license (license:non-copyleft "file://LICENSE"
1608 "See LICENSE in the distribution."))))
1609
1610(define-public unzip
1611 (package (inherit zip)
1612 (name "unzip")
1613 (version "6.0")
1614 (source
1615 (origin
1616 (method url-fetch)
1617 (uri (string-append "mirror://sourceforge/infozip"
1618 "/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz"))
1619 (sha256
1620 (base32
1621 "0dxx11knh3nk95p2gg2ak777dd11pr7jx5das2g49l262scrcv83"))
1622 (patches (search-patches "unzip-CVE-2014-8139.patch"
1623 "unzip-CVE-2014-8140.patch"
1624 "unzip-CVE-2014-8141.patch"
1625 "unzip-CVE-2014-9636.patch"
1626 "unzip-CVE-2015-7696.patch"
1627 "unzip-CVE-2015-7697.patch"
1628 "unzip-allow-greater-hostver-values.patch"
1629 "unzip-initialize-symlink-flag.patch"
1630 "unzip-remove-build-date.patch"
1631 "unzip-attribs-overflow.patch"
1632 "unzip-overflow-on-invalid-input.patch"
1633 "unzip-format-secure.patch"
1634 "unzip-overflow-long-fsize.patch"))))
31d289a4 1635 (replacement unzip/fixed)
148585c2
AI
1636 (build-system gnu-build-system)
1637 ;; no inputs; bzip2 is not supported, since not compiled with BZ_NO_STDIO
1638 (arguments
1639 `(#:phases (modify-phases %standard-phases
1640 (delete 'configure)
190376a1
MW
1641 (add-after 'unpack 'fortify
1642 (lambda _
1643 ;; Mitigate CVE-2018-1000035, an exploitable buffer overflow.
1644 ;; This environment variable is recommended in 'unix/Makefile'
1645 ;; for passing flags to the C compiler.
1646 (setenv "LOCAL_UNZIP" "-D_FORTIFY_SOURCE=1")
1647 #t))
148585c2
AI
1648 (replace 'build
1649 (lambda* (#:key make-flags #:allow-other-keys)
fa76696b
MW
1650 (apply invoke "make"
1651 `("-j" ,(number->string
1652 (parallel-job-count))
1653 ,@make-flags
1654 "generic_gcc")))))
148585c2
AI
1655 #:make-flags (list "-f" "unix/Makefile"
1656 (string-append "prefix=" %output)
1657 (string-append "MANDIR=" %output "/share/man/man1"))))
1658 (home-page "http://www.info-zip.org/UnZip.html")
1659 (synopsis "Decompression and file extraction utility")
1660 (description
1661 "UnZip is an extraction utility for archives compressed in .zip format,
1662also called \"zipfiles\".
1663
1664UnZip lists, tests, or extracts files from a .zip archive. The default
1665behaviour (with no options) is to extract into the current directory, and
1666subdirectories below it, all files from the specified zipfile. UnZip
1667recreates the stored directory structure by default.")
1668 (license (license:non-copyleft "file://LICENSE"
1669 "See LICENSE in the distribution."))))
1670
cddf0b89 1671(define unzip/fixed
31d289a4
LLB
1672 (package
1673 (inherit unzip)
1674 (version "6.0")
1675 (source
1676 (origin
1677 (method url-fetch)
1678 (uri (string-append "mirror://sourceforge/infozip"
1679 "/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz"))
1680 (sha256
1681 (base32
1682 "0dxx11knh3nk95p2gg2ak777dd11pr7jx5das2g49l262scrcv83"))
1683 (patches (search-patches "unzip-CVE-2014-8139.patch"
1684 "unzip-CVE-2014-8140.patch"
1685 "unzip-CVE-2014-8141.patch"
1686 "unzip-CVE-2014-9636.patch"
1687 "unzip-CVE-2015-7696.patch"
1688 "unzip-CVE-2015-7697.patch"
1689 "unzip-allow-greater-hostver-values.patch"
1690 "unzip-initialize-symlink-flag.patch"
1691 "unzip-remove-build-date.patch"
1692 "unzip-attribs-overflow.patch"
1693 "unzip-overflow-on-invalid-input.patch"
1694 "unzip-format-secure.patch"
1695 "unzip-overflow-long-fsize.patch"
1696
1697 ;; From Fedora
1698 "unzip-alt-iconv-utf8.patch"
1699 "unzip-alt-iconv-utf8-print.patch"
1700 "unzip-fix-recmatch.patch"
699a56e3 1701 "unzip-case-insensitive.patch"
31d289a4
LLB
1702 "unzip-close.patch"
1703 "unzip-COVSCAN-fix-unterminated-string.patch"
1704 "unzip-CVE-2016-9844.patch"
1705 "unzip-CVE-2018-1000035.patch"
1706 "unzip-CVE-2018-18384.patch"
1707 "unzip-exec-shield.patch"
1708 "unzip-manpage-fix.patch"
1709 "unzip-overflow.patch"
1710 "unzip-timestamp.patch"
1711 "unzip-valgrind.patch"
1712 "unzip-x-option.patch"
1713 ;; CVE-2019-13232
1714 "unzip-zipbomb-manpage.patch"
1715 "unzip-zipbomb-part1.patch"
1716 "unzip-zipbomb-part2.patch"
70384392
LLB
1717 "unzip-zipbomb-part3.patch"
1718
1719 ;; https://github.com/madler/unzip/issues/2
1720 "unzip-32bit-zipbomb-fix.patch"))))))
31d289a4 1721
65c110e2
TGR
1722(define-public ziptime
1723 (let ((commit "2a5bc9dfbf7c6a80e5f7cb4dd05b4036741478bc")
1724 (revision "0"))
1725 (package
1726 (name "ziptime")
1727 (version (git-version "0.0.0" revision commit))
1728 (source
1729 (origin
1730 (method git-fetch)
1731 (uri (git-reference
1732 (url "https://android.googlesource.com/platform/build")
1733 (commit commit)))
1734 (file-name (git-file-name name version))
1735 (sha256
1736 (base32 "0hrn61b3a97dlc4iqc28rwx8k8zf7ycbwzqqp93vj34zy5a541kn"))))
1737 (build-system gnu-build-system)
1738 (arguments
1739 `(#:tests? #f ; no test suite
1740 #:phases
1741 (modify-phases %standard-phases
1742 (add-after 'unpack 'change-directory
1743 (lambda _
1744 (chdir "tools/ziptime")))
1745 (delete 'configure) ; nothing to configure
1746 (replace 'build
1747 ;; There is no Makefile, only an ‘Android.bp’ file. Ignore it.
1748 (lambda _
1749 (let ((c++ ,(cxx-for-target)))
1750 (apply invoke c++ "-O2" "-o" "ziptime"
1751 (find-files "." "\\.cpp$")))))
1752 (replace 'install
1753 (lambda* (#:key outputs #:allow-other-keys)
1754 (let* ((out (assoc-ref outputs "out"))
1755 (bin (string-append out "/bin"))
1756 (doc (string-append out "/share/doc/" ,name "-" ,version)))
1757 (install-file "ziptime" bin)
1758 (install-file "README.txt" doc)))))))
1759 ;; There is no separate home page for this tiny bundled build tool.
1760 (home-page (string-append "https://android.googlesource.com/platform/build/"
1761 "+/master/tools/ziptime/README.txt"))
1762 (synopsis "Normalize @file{.zip} archive header timestamps")
1763 (description
1764 "Ziptime helps make @file{.zip} archives reproducible by replacing
1765timestamps in the file header with a fixed time (1 January 2008).
1766
1767``Extra fields'' are not changed, so you'll need to use the @code{-X} option to
1768@command{zip} to prevent it from storing the ``universal time'' field.")
1769 (license license:asl2.0))))
1770
148585c2
AI
1771(define-public zziplib
1772 (package
1773 (name "zziplib")
3f986ff6
MB
1774 (version "0.13.69")
1775 (home-page "https://github.com/gdraheim/zziplib")
d0a52e65
MB
1776 (source (origin
1777 (method git-fetch)
1778 (uri (git-reference (url home-page)
1779 (commit (string-append "v" version))))
1780 (file-name (git-file-name name version))
e6bd8b5e 1781 (patches (search-patches "zziplib-CVE-2018-16548.patch"))
d0a52e65
MB
1782 (sha256
1783 (base32
1784 "0fbk9k7ryas2wh2ykwkvm1pbi40i88rfvc3dydh9xyd7w2jcki92"))))
f7fdafef 1785 (replacement zziplib/fixed)
148585c2 1786 (build-system gnu-build-system)
d0a52e65
MB
1787 (arguments
1788 `(#:phases (modify-phases %standard-phases
1789 (add-before 'check 'make-files-writable
1790 (lambda _
1791 (for-each make-file-writable
1792 (find-files "test" #:directories? #t))
b0dc2454
MB
1793 #t)))
1794
1795 ;; XXX: The default test target attempts to download external resources and
1796 ;; fails without error: <https://github.com/gdraheim/zziplib/issues/53>.
1797 ;; To prevent confusing log messages, just run a simple zip test that works.
1798 #:test-target "check-readme"))
148585c2
AI
1799 (inputs
1800 `(("zlib" ,zlib)))
1801 (native-inputs `(("perl" ,perl) ; for the documentation
1802 ("pkg-config" ,pkg-config)
1803 ;; for the documentation; Python 3 not supported,
1804 ;; http://forums.gentoo.org/viewtopic-t-863161-start-0.html
1805 ("python" ,python-2)
1806 ("zip" ,zip))) ; to create test files
148585c2
AI
1807 (synopsis "Library for accessing zip files")
1808 (description
1809 "ZZipLib is a library based on zlib for accessing zip files.")
0d729c5b
MB
1810 ;; zziplib is dual licensed under LGPL2.0+ and MPL1.1. Some example source
1811 ;; files carry the Zlib license; see "docs/copying.html" for details.
1812 (license (list license:lgpl2.0+ license:mpl1.1))))
148585c2 1813
f7fdafef
LLB
1814(define-public zziplib/fixed
1815 (package
1816 (inherit zziplib)
1817 (name "zziplib")
1818 (version "0.13.72")
1819 (home-page "https://github.com/gdraheim/zziplib")
1820 (source (origin
1821 (method git-fetch)
1822 (uri (git-reference (url home-page)
1823 (commit (string-append "v" version))))
1824 (file-name (git-file-name name version))
1825 (sha256
1826 (base32
1827 "0i6bpa2b13z19alm6ig80364dnin1w28cvif18k6wkkb0w3dzp8y"))))
9098745b
EF
1828 (arguments
1829 `(#:phases
1830 (modify-phases %standard-phases
1831 (add-after 'install 'install-compatibility-symlinks
1832 (lambda* (#:key outputs #:allow-other-keys)
1833 (with-directory-excursion
1834 (string-append (assoc-ref outputs "out") "/lib")
1835 (map (lambda (lib new-symlink)
1836 (symlink lib new-symlink))
1837 (list "libzzip.so.13" "libzzipfseeko.so.13"
1838 "libzzipmmapped.so.13" "libzzipwrap.so.13")
1839 (list "libzzip-0.so.13" "libzzipfseeko-0.so.13"
1840 "libzzipmmapped-0.so.13" "libzzipwrap-0.so.13")))
1841 #t)))))
f7fdafef
LLB
1842 (native-inputs
1843 `(("python" ,python)
1844 ,@(alist-delete "python"
1845 (package-native-inputs zziplib))))
1846 (build-system cmake-build-system)))
1847
06de4aaf
TF
1848(define-public libzip
1849 (package
1850 (name "libzip")
7e6df0e9 1851 (version "1.7.3")
06de4aaf
TF
1852 (source (origin
1853 (method url-fetch)
1854 (uri (string-append
66fea0c4 1855 "https://libzip.org/download/libzip-" version ".tar.xz"))
06de4aaf
TF
1856 (sha256
1857 (base32
7e6df0e9 1858 "0ck1dk7zn5qzpgxklg0r26nfsf04xb6c46gsig060hkvvgzp6156"))))
06de4aaf
TF
1859 (native-inputs
1860 `(("perl" ,perl)))
1861 (inputs
a9b15d4c 1862 `(("gnutls" ,gnutls)
dcc3f215 1863 ("liblzma" ,xz)
a9b15d4c
BH
1864 ("openssl" ,openssl)
1865 ("zlib" ,zlib)))
80486319 1866 (build-system cmake-build-system)
8d6c7456 1867 (home-page "https://libzip.org")
06de4aaf
TF
1868 (synopsis "C library for reading, creating, and modifying zip archives")
1869 (description "Libzip is a C library for reading, creating, and modifying
1870zip archives. Files can be added from data buffers, files, or compressed data
1871copied directly from other zip archives. Changes made without closing the
1872archive can be reverted.")
1873 (license license:bsd-3)))
ef5c40aa
SR
1874
1875(define-public atool
1876 (package
1877 (name "atool")
1878 (version "0.39.0")
1879 (source
1880 (origin
1881 (method url-fetch)
97ac5b70 1882 (uri (string-append "mirror://savannah/atool/atool-"
ef5c40aa
SR
1883 version ".tar.gz"))
1884 (sha256
1885 (base32
1886 "0fvhzip2v08jgnlfpyj6rapan39xlsl1ksgq4lp8gfsai2ah1xma"))))
1887 (build-system gnu-build-system)
1888 (arguments
1889 `(#:phases
1890 (modify-phases %standard-phases
1891 (add-after 'unpack 'embed-absolute-file-name
1892 (lambda* (#:key inputs #:allow-other-keys)
1893 (substitute* "atool"
1894 (("(^\\$::cfg_path_file.*= )'file'" _ pre)
1895 (string-append pre "'" (assoc-ref inputs "file")
1896 "/bin/file'")))
1897 #t)))))
1898 (inputs
1899 `(("perl" ,perl)
1900 ("file" ,file)))
340978d7 1901 (home-page "https://www.nongnu.org/atool/")
ef5c40aa
SR
1902 (synopsis "Universal tool to manage file archives of various types")
1903 (description "The main command is @command{aunpack} which extracts files
1904from an archive. The other commands provided are @command{apack} (to create
1905archives), @command{als} (to list files in archives), and @command{acat} (to
1906extract files to standard out). As @command{atool} invokes external programs
1907to handle the archives, not all commands may be supported for a certain type
1908of archives.")
1909 (license license:gpl2+)))
b44ecca6 1910
34e8cf22
TGR
1911(define-public lunzip
1912 (package
1913 (name "lunzip")
4bf11e25 1914 (version "1.12")
34e8cf22
TGR
1915 (source
1916 (origin
1917 (method url-fetch)
a28cd477
TGR
1918 (uri (string-append "mirror://savannah/lzip/lunzip/"
1919 "lunzip-" version ".tar.gz"))
34e8cf22 1920 (sha256
4bf11e25 1921 (base32 "1liaynyy3qcs29hfk1pnb7i9r1mnmpw557j5v356qsv6qnm4lnz5"))))
34e8cf22
TGR
1922 (build-system gnu-build-system)
1923 (arguments
1924 `(#:configure-flags
cb3ca320 1925 (list ,(string-append "CC=" (cc-for-target)))))
340978d7 1926 (home-page "https://www.nongnu.org/lzip/lunzip.html")
34e8cf22
TGR
1927 (synopsis "Small, stand-alone lzip decompressor")
1928 (description
1929 "Lunzip is a decompressor for files in the lzip compression format (.lz),
1930written as a single small C tool with no dependencies. This makes it
1931well-suited to embedded and other systems without a C++ compiler, or for use in
1932applications such as software installers that need only to decompress files,
1933not compress them.
1934Lunzip is intended to be fully compatible with the regular lzip package.")
1935 (license (list license:bsd-2 ; carg_parser.[ch]
1936 license:gpl2+)))) ; everything else
5dca4c76
TGR
1937
1938(define-public clzip
1939 (package
1940 (name "clzip")
afeb2e27 1941 (version "1.12")
5dca4c76
TGR
1942 (source
1943 (origin
1944 (method url-fetch)
39e5d3b6
TGR
1945 (uri (string-append "mirror://savannah/lzip/clzip/"
1946 "clzip-" version ".tar.gz"))
5dca4c76 1947 (sha256
afeb2e27 1948 (base32 "1s7yidqvmxi61hh569h5aci816l6qkffjgx0zx57qyyq0qq2pjgw"))))
5dca4c76
TGR
1949 (build-system gnu-build-system)
1950 (arguments
1951 `(#:configure-flags
cb056c40 1952 (list ,(string-append "CC=" (cc-for-target)))))
340978d7 1953 (home-page "https://www.nongnu.org/lzip/clzip.html")
5dca4c76
TGR
1954 (synopsis "Small, stand-alone lzip compressor and decompressor")
1955 (description
1956 "Clzip is a compressor and decompressor for files in the lzip compression
1957format (.lz), written as a single small C tool with no dependencies. This makes
1958it well-suited to embedded and other systems without a C++ compiler, or for use
1959in other applications like package managers.
1960Clzip is intended to be fully compatible with the regular lzip package.")
1961 (license (list license:bsd-2 ; carg_parser.[ch], lzd in clzip.texi
1962 license:gpl2+))))
2e3b1a92
TGR
1963
1964(define-public lzlib
1965 (package
1966 (name "lzlib")
57b0949a 1967 (version "1.12")
2e3b1a92
TGR
1968 (source
1969 (origin
1970 (method url-fetch)
76b2f084
TGR
1971 (uri (string-append "mirror://savannah/lzip/lzlib/"
1972 "lzlib-" version ".tar.gz"))
2e3b1a92 1973 (sha256
57b0949a 1974 (base32 "1c9pwd6by8is4z8bs6j306jyy6pgm2dvsn4fr7fg2b5m5qj88pcf"))))
2e3b1a92 1975 (build-system gnu-build-system)
2e3b1a92
TGR
1976 (arguments
1977 `(#:configure-flags
31dcc272 1978 (list (string-append "CC=" ,(cc-for-target))
6c519722 1979 "--disable-static"
2e3b1a92 1980 "--enable-shared"))) ; only static (.a) is built by default
340978d7 1981 (home-page "https://www.nongnu.org/lzip/lzlib.html")
2e3b1a92
TGR
1982 (synopsis "Lzip data compression C library")
1983 (description
1984 "Lzlib is a C library for in-memory LZMA compression and decompression in
1985the lzip format. It supports integrity checking of the decompressed data, and
1986all functions are thread-safe. The library should never crash, even in case of
1987corrupted input.")
1988 (license (list license:bsd-2 ; the library itself
1989 license:gpl2+)))) ; main.c (i.e. minilzip used by tests)
8c4ca853
TGR
1990
1991(define-public plzip
1992 (package
1993 (name "plzip")
341b2d3d 1994 (version "1.9")
8c4ca853
TGR
1995 (source
1996 (origin
1997 (method url-fetch)
894669a7
TGR
1998 (uri (string-append "mirror://savannah/lzip/plzip/"
1999 "plzip-" version ".tar.gz"))
8c4ca853 2000 (sha256
341b2d3d 2001 (base32 "19zinpx7hssl6r3vilpvq2s7wha3545xan8b0vcvsxnyipdx3n0l"))))
8c4ca853
TGR
2002 (build-system gnu-build-system)
2003 (inputs
2004 `(("lzlib" ,lzlib)))
340978d7 2005 (home-page "https://www.nongnu.org/lzip/plzip.html")
8c4ca853
TGR
2006 (synopsis "Parallel lossless data compressor for the lzip format")
2007 (description
2008 "Plzip is a massively parallel (multi-threaded) lossless data compressor
2009and decompressor that uses the lzip file format (.lz). Files produced by plzip
2010are fully compatible with lzip and can be rescued with lziprecover.
2011On multiprocessor machines, plzip can compress and decompress large files much
2012faster than lzip, at the cost of a slightly reduced compression ratio (0.4% to
20132%). The number of usable threads is limited by file size: on files of only a
2014few MiB, plzip is no faster than lzip.
2015Files that were compressed with regular lzip will also not be decompressed
2016faster by plzip, unless the @code{-b} option was used: lzip usually produces
2017single-member files which can't be decompressed in parallel.")
2018 (license (list license:bsd-2 ; arg_parser.{cc,h}
2019 license:gpl2+)))) ; everything else
e294c05e
RH
2020
2021(define-public innoextract
2022 (package
2023 (name "innoextract")
73996c02 2024 (version "1.9")
e294c05e
RH
2025 (source
2026 (origin
2027 (method url-fetch)
73996c02
TGR
2028 (uri (string-append "https://constexpr.org/innoextract/files/"
2029 "innoextract-" version "/"
ff983864 2030 "/innoextract-" version ".tar.gz"))
e294c05e 2031 (sha256
73996c02 2032 (base32 "09l1z1nbl6ijqqwszdwch9mqr54qb7df0wp2sd77v17dq6gsci33"))))
e294c05e
RH
2033 (build-system cmake-build-system)
2034 (arguments
73996c02 2035 `(#:tests? #f))
4cb9b726 2036 (inputs `(("boost" ,boost)
e294c05e
RH
2037 ("libiconv" ,libiconv)
2038 ("xz" ,xz)))
2039 (native-inputs `(("pkg-config" ,pkg-config)))
2040 (home-page "https://constexpr.org/innoextract/")
2041 (synopsis "Tool for extracting Inno Setup installers")
2042 (description "innoextract allows extracting Inno Setup installers under
2043non-Windows systems without running the actual installer using wine.")
2044 (license license:zlib)))
2ed0ef2f
LF
2045
2046(define-public google-brotli
2047 (package
2048 (name "google-brotli")
6b7c4833 2049 (version "1.0.9")
fc82c175
TGR
2050 (source
2051 (origin
2052 (method git-fetch)
2053 (uri (git-reference
b0e7b699 2054 (url "https://github.com/google/brotli")
fc82c175
TGR
2055 (commit (string-append "v" version))))
2056 (file-name (git-file-name name version))
2057 (sha256
6b7c4833
EF
2058 (base32 "1fikasxf7r2dwlk8mv8w7nmjkn0jw5ic31ky3mvpkdzwgd4xfndl"))
2059 (modules '((guix build utils)))
2060 (snippet
2061 '(begin
2062 ;; Cherry-picked from upstream since the latest release
2063 ;; https://github.com/google/brotli/commit/09b0992b6acb7faa6fd3b23f9bc036ea117230fc
2064 (substitute* (find-files "scripts" "^lib.*pc\\.in")
2065 (("-R\\$\\{libdir\\} ") ""))
2066 #t))))
2ed0ef2f
LF
2067 (build-system cmake-build-system)
2068 (arguments
2069 `(#:phases
2070 (modify-phases %standard-phases
2071 (add-after 'install 'rename-static-libraries
2072 ;; The build tools put a 'static' suffix on the static libraries, but
2073 ;; other applications don't know how to find these.
2074 (lambda* (#:key outputs #:allow-other-keys)
2075 (let ((lib (string-append (assoc-ref %outputs "out") "/lib/")))
2076 (rename-file (string-append lib "libbrotlicommon-static.a")
2077 (string-append lib "libbrotlicommon.a"))
2078 (rename-file (string-append lib "libbrotlidec-static.a")
2079 (string-append lib "libbrotlidec.a"))
2080 (rename-file (string-append lib "libbrotlienc-static.a")
2081 (string-append lib "libbrotlienc.a"))
2082 #t))))
2083 #:configure-flags
2084 (list ;; Defaults to "lib64" on 64-bit archs.
2085 (string-append "-DCMAKE_INSTALL_LIBDIR="
2086 (assoc-ref %outputs "out") "/lib"))))
2087 (home-page "https://github.com/google/brotli")
2088 (synopsis "General-purpose lossless compression")
2089 (description "This package provides the reference implementation of Brotli,
2090a generic-purpose lossless compression algorithm that compresses data using a
2091combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd
2092order context modeling, with a compression ratio comparable to the best
2093currently available general-purpose compression methods. It is similar in speed
2094with @code{deflate} but offers more dense compression.
2095
2096The specification of the Brotli Compressed Data Format is defined in RFC 7932.")
2097 (license license:expat)))
71987177 2098
83ac7cb4
LDB
2099(define-public brotli
2100 ;; We used to provide an older version under the name "brotli".
2101 (deprecated-package "brotli" google-brotli))
2102
d2b237d0
AI
2103(define-public python-google-brotli
2104 (package
2105 (inherit google-brotli)
2106 (name "python-google-brotli")
2107 (build-system python-build-system)
2108 (arguments '())
2109 (synopsis "Python interface to google-brotli")
2110 (description "@code{python-google-brotli} provides a Python interface to
2111@code{google-brotli}, an implementation of the Brotli lossless compression
2112algorithm.")))
2113
71987177
PN
2114(define-public ucl
2115 (package
2116 (name "ucl")
2117 (version "1.03")
2118 (source (origin
2119 (method url-fetch)
01c8b90b 2120 (uri (string-append "https://www.oberhumer.com/opensource/"
71987177
PN
2121 name "/download/" name "-" version ".tar.gz"))
2122 (sha256
2123 (base32
2124 "0j036lkwsxvm15gr29n8wn07cqq79dswjs9k54939ms5zngjjrdq"))))
2125 (build-system gnu-build-system)
7349f926
MB
2126 (arguments
2127 `(;; UCL 1.03 fails to build with newer C standards.
41c27444
MB
2128 #:configure-flags '("CFLAGS=-std=gnu90"
2129 "--enable-shared" "--disable-static")))
01c8b90b 2130 (home-page "https://www.oberhumer.com/opensource/ucl/")
71987177
PN
2131 (synopsis "Portable lossless data compression library")
2132 (description "UCL implements a number of compression algorithms that
2133achieve an excellent compression ratio while allowing fast decompression.
2134Decompression requires no additional memory.
2135
2136Compared to LZO, the UCL algorithms achieve a better compression ratio but
2137decompression is a little bit slower.")
2138 (license license:gpl2+)))
5735256d
PN
2139
2140(define-public upx
2141 (package
2142 (name "upx")
f5255ed3 2143 (version "3.96")
5735256d
PN
2144 (source (origin
2145 (method url-fetch)
2146 (uri (string-append "https://github.com/upx/upx/releases/download/v"
de5bc83c 2147 version "/upx-" version "-src.tar.xz"))
5735256d
PN
2148 (sha256
2149 (base32
53dd99bc
LLB
2150 "051pk5jk8fcfg5mpgzj43z5p4cn7jy5jbyshyn78dwjqr7slsxs7"))
2151 (patches (search-patches "upx-CVE-2021-20285.patch"))))
5735256d 2152 (build-system gnu-build-system)
d8963031
MB
2153 (native-inputs
2154 `(("perl" ,perl)))
2155 (inputs
2156 `(("ucl" ,ucl)
2157 ("zlib" ,zlib)))
5735256d
PN
2158 (arguments
2159 `(#:make-flags
f5255ed3 2160 (list "all")
5735256d
PN
2161 #:phases
2162 (modify-phases %standard-phases
7046106e
TGR
2163 (delete 'configure) ; no configure script
2164 (delete 'check) ; no test suite
5735256d
PN
2165 (add-before 'build 'patch-exec-bin-sh
2166 (lambda _
7046106e
TGR
2167 (substitute* (list "Makefile"
2168 "src/Makefile")
5735256d
PN
2169 (("/bin/sh") (which "sh")))
2170 #t))
7046106e 2171 (replace 'install
5735256d
PN
2172 (lambda* (#:key outputs #:allow-other-keys)
2173 (let* ((out (assoc-ref outputs "out"))
7046106e 2174 (bin (string-append out "/bin")))
5735256d
PN
2175 (mkdir-p bin)
2176 (copy-file "src/upx.out" (string-append bin "/upx")))
7046106e 2177 #t)))))
5735256d
PN
2178 (home-page "https://upx.github.io/")
2179 (synopsis "Compression tool for executables")
2180 (description
2181 "The Ultimate Packer for eXecutables (UPX) is an executable file
2182compressor. UPX typically reduces the file size of programs and shared
2183libraries by around 50%--70%, thus reducing disk space, network load times,
2184download times, and other distribution and storage costs.")
2185 (license license:gpl2+)))
09debcf5
NG
2186
2187(define-public quazip
2188 (package
2189 (name "quazip")
d84ddbb9 2190 (version "0.9.1")
09debcf5
NG
2191 (source (origin
2192 (method git-fetch)
2193 (uri (git-reference
b0e7b699 2194 (url "https://github.com/stachenov/quazip")
09debcf5
NG
2195 (commit (string-append "v" version))))
2196 (file-name (git-file-name name version))
2197 (sha256
2198 (base32
d84ddbb9 2199 "11icgwv2xyxhd1hm1add51xv54zwkcqkg85d1xqlgiigvbm196iq"))))
09debcf5
NG
2200 (build-system cmake-build-system)
2201 (arguments
2202 `(#:tests? #f)) ;no test
2203 (native-inputs
2204 `(("doxygen" ,doxygen)))
2205 (inputs
2206 `(("qtbase" ,qtbase)
2207 ("zlib" ,zlib)))
2208 (home-page "https://stachenov.github.io/quazip/index.html")
2209 (synopsis "Qt/C++ wrapper for Minizip")
2210 (description "QuaZIP is a simple C++ wrapper over Gilles Vollant's
2211ZIP/UNZIP package that can be used to access ZIP archives. It uses
2212Trolltech's Qt toolkit.
2213
2214QuaZIP allows you to access files inside ZIP archives using QIODevice
2215API, and that means that you can also use QTextStream, QDataStream or
2216whatever you would like to use on your zipped files.
2217
2218QuaZIP provides complete abstraction of the ZIP/UNZIP API, for both
2219reading from and writing to ZIP archives. ")
2220 ;; Project is distributed under LGPL, but "quazip/z*" "quazip/unzip.*" are
2221 ;; distributed under zlib terms.
2222 (license (list license:lgpl2.1+ license:zlib))))
f5111b4d
TGR
2223
2224(define-public zutils
2225 (package
2226 (name "zutils")
8818bb3a 2227 (version "1.10")
f5111b4d
TGR
2228 (source
2229 (origin
2230 (method url-fetch)
2231 (uri (string-append "mirror://savannah/zutils/zutils-" version ".tar.lz"))
2232 (sha256
8818bb3a 2233 (base32 "15dimqp8zlqaaa2l46r22srp1py38mlmn69ph1j5fmrd54w43m0d"))))
f5111b4d
TGR
2234 (build-system gnu-build-system)
2235 (arguments
2236 `(#:configure-flags
2237 (list "--sysconfdir=/etc")
2238 #:phases
2239 (modify-phases %standard-phases
1de23e55 2240 (add-before 'check 'disable-failing-tests
2f650473 2241 ;; XXX https://lists.nongnu.org/archive/html/zutils-bug/2020-07/msg00005.html
1de23e55
TGR
2242 (lambda _
2243 (substitute* "testsuite/check.sh"
2244 (("\"\\$\\{ZGREP\\}\" -N -L \"GNU\"") "true")
2245 (("\"\\$\\{ZGREP\\}\" -N -L \"nx_pattern\"") "false"))
2246 #t))
f5111b4d
TGR
2247 (replace 'install
2248 (lambda* (#:key make-flags outputs #:allow-other-keys)
2249 (apply invoke "make" "install"
2250 (string-append "sysconfdir=" (assoc-ref outputs "out")
2251 "/etc")
2252 make-flags))))))
2253 (native-inputs
2254 ;; Needed to extract the source tarball and run the test suite.
2255 `(("lzip" ,lzip)))
f5111b4d
TGR
2256 (home-page "https://www.nongnu.org/zutils/zutils.html")
2257 (synopsis "Utilities that transparently operate on compressed files")
2258 (description
2259 "Zutils is a collection of utilities able to process any combination of
2260compressed and uncompressed files transparently. If any given file, including
2261standard input, is compressed, its decompressed content is used instead.
2262
2263@command{zcat}, @command{zcmp}, @command{zdiff}, and @command{zgrep} are
2264improved replacements for the shell scripts provided by GNU gzip.
2265@command{ztest} tests the integrity of supported compressed files.
2266@command{zupdate} recompresses files with lzip, similar to gzip's
2267@command{znew}.
2268
2269Supported compression formats are bzip2, gzip, lzip, and xz. Zutils uses
2270external compressors: the compressor to be used for each format is configurable
2271at run time, and must be installed separately.")
2272 (license (list license:bsd-2 ; arg_parser.{cc,h}
2273 license:gpl2+)))) ; the rest
8ff5c735
PN
2274
2275(define-public makeself-safeextract
2276 (let ((commit "1a95e121fa8e3c02d307ae37b9b7834e616c3683"))
2277 (package
2278 (name "makeself-safeextract")
2279 (version (git-version "0.0.0" "1" commit))
2280 (home-page "https://github.com/ssokolow/makeself_safeextract")
2281 (source
2282 (origin
2283 (method git-fetch)
2284 (uri (git-reference
2285 (url home-page)
2286 (commit commit)))
2287 (file-name (git-file-name name version))
2288 (sha256
2289 (base32
2290 "1anlinaj9lvfi8bn00wp11vzqq0f9sig4fm9yrspisx31v0z4a2c"))))
2291 (build-system trivial-build-system)
2292 (inputs
2293 `(("python" ,python-2)
2294 ("p7zip" ,p7zip)
2295 ("unzip" ,unzip)))
2296 (arguments
2297 `(#:modules ((guix build utils))
2298 #:builder
2299 (begin
2300 (use-modules (guix build utils))
2301 (let* ((name "makeself_safeextract")
2302 (source (string-append (assoc-ref %build-inputs "source")
2303 "/" name ".py"))
2304 (bin (string-append (assoc-ref %outputs "out") "/bin"))
2305 (target (string-append bin "/" name))
2306 (python (string-append (assoc-ref %build-inputs "python") "/bin"))
2307 (7z (string-append (assoc-ref %build-inputs "p7zip") "/bin/7z"))
2308 (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
2309 (setenv "PATH" (string-append (getenv "PATH") ":" python))
2310 (mkdir-p bin)
2311 (copy-file source target)
2312 (substitute* target
2313 (("'7z'") (format #f "'~a'" 7z))
2314 (("'unzip'") (format #f "'~a'" unzip)))
2315 (patch-shebang target)))))
2316 (synopsis "Extract makeself and mojo archives without running untrusted code")
2317 (description "This package provides a script to unpack self-extracting
2318archives generated by @command{makeself} or @command{mojo} without running the
2319possibly untrusted extraction shell script.")
2320 (license license:gpl3+))))
9720104c
JN
2321
2322(define-public ncompress
2323 (package
2324 (name "ncompress")
f38eabe9 2325 (version "4.2.4.6")
9720104c
JN
2326 (source (origin
2327 (method git-fetch)
2328 (uri (git-reference
2329 (url "https://github.com/vapier/ncompress")
2330 (commit (string-append "v" version))))
2331 (patches (search-patches "ncompress-fix-softlinks.patch"))
2332 (file-name (string-append name "-" version ".tar.gz"))
2333 (sha256
2334 (base32
f38eabe9 2335 "1a4yir1ilafz0nzxdwigj204j4yy2zljbc501nsaqqm3dxdap8zn"))))
9720104c
JN
2336 (arguments
2337 '(#:make-flags (list "CC=gcc"
2338 (string-append "BINDIR=" %output "/bin")
2339 (string-append "MANDIR=" %output "/share/man/man1"))
2340 #:phases (modify-phases %standard-phases
2341 (delete 'configure))))
2342 (build-system gnu-build-system)
2343 (home-page "https://github.com/vapier/ncompress/")
2344 (synopsis "Original Lempel-Ziv compress/uncompress programs")
2345 (description "(N)compress provides the original compress and uncompress
2346programs that used to be the de facto UNIX standard for compressing and
2347uncompressing files. These programs implement a fast, simple Lempel-Ziv (LZW)
2348file compression algorithm.")
2349 (license license:gpl2+)))
0745e28d
RG
2350
2351(define-public xarchiver
2352 (package
2353 (name "xarchiver")
43e09b43 2354 (version "0.5.4.17")
0745e28d
RG
2355 (source
2356 (origin
2357 (method git-fetch)
2358 (uri (git-reference
b0e7b699 2359 (url "https://github.com/ib/xarchiver")
0745e28d
RG
2360 (commit version)))
2361 (file-name (git-file-name name version))
2362 (sha256
43e09b43 2363 (base32 "00adrjpxqlaccrwjf65w3vhxfswdj0as8aj263c6f9b85llypc5v"))))
0745e28d
RG
2364 (build-system glib-or-gtk-build-system)
2365 (native-inputs
2366 `(("gettext" ,gettext-minimal)
2367 ("intltool" ,intltool)
2368 ("libxslt" ,libxslt)
2369 ("pkg-config" ,pkg-config)))
2370 (inputs
ddde8a07 2371 `(("adwaita-icon-theme" ,adwaita-icon-theme) ; hard-coded theme
0745e28d
RG
2372 ("gtk+" ,gtk+)))
2373 (home-page "https://github.com/ib/xarchiver")
2374 (synopsis "Graphical front-end for archive operations")
2375 (description "Xarchiver is a front-end to various command line archiving
2376tools. It uses GTK+ tool-kit and is designed to be desktop-environment
2377independent. Supported formats are 7z, ARJ, bzip2, gzip, LHA, lzma, lzop,
2378RAR, RPM, DEB, tar, and ZIP. It cannot perform functions for archives, whose
2379archiver is not installed.")
2380 (license license:gpl2+)))
910bf1f7
LDB
2381
2382(define-public tarsplitter
2383 (package
2384 (name "tarsplitter")
2385 (version "2.2.0")
2386 (source (origin
2387 (method git-fetch)
2388 (uri (git-reference
b0e7b699 2389 (url "https://github.com/AQUAOSOTech/tarsplitter")
910bf1f7
LDB
2390 (commit (string-append "v" version))))
2391 (file-name (git-file-name name version))
2392 (sha256
2393 (base32
2394 "17qkg95r97kcrs17b0mcqswx99280ni47j5yx8xa7nl3bdhm6325"))))
2395 (build-system go-build-system)
2396 (arguments
2397 `(#:import-path "github.com/AQUAOSOTech/tarsplitter"
2398 #:install-source? #f
2399 #:phases
2400 (modify-phases %standard-phases
2401 (add-after 'install 'install-documentation
2402 (lambda* (#:key import-path outputs #:allow-other-keys)
2403 (let* ((source (string-append "src/" import-path))
2404 (out (assoc-ref outputs "out"))
2405 (doc (string-append out "/share/doc/" ,name "-" ,version)))
2406 (with-directory-excursion source
2407 (install-file "README.md" doc))
2408 #t))))))
2409 (home-page "https://github.com/AQUAOSOTech/tarsplitter")
2410 (synopsis "Multithreaded tar utility")
2411 (description
bb6d9e26 2412 "Archive huge numbers of files, or split massive tar archives into smaller
910bf1f7
LDB
2413chunks.")
2414 (license license:expat)))
9a2fcb63
RW
2415
2416(define-public c-blosc
2417 (package
2418 (name "c-blosc")
2419 (version "1.18.1")
2420 (source (origin
2421 (method git-fetch)
2422 (uri (git-reference
b0e7b699 2423 (url "https://github.com/Blosc/c-blosc")
9a2fcb63
RW
2424 (commit (string-append "v" version))))
2425 (file-name (git-file-name name version))
2426 (sha256
2427 (base32
2428 "1ywq8j70149859vvs19wgjq89d6xsvvmvm2n1dmkzpchxgrvnw70"))))
2429 (build-system cmake-build-system)
2430 (home-page "https://blosc.org")
2431 (synopsis "Blocking, shuffling and lossless compression library")
2432 (description
2433 "Blosc is a high performance compressor optimized for binary data. It has
2434been designed to transmit data to the processor cache faster than the
2435traditional, non-compressed, direct memory fetch approach via a
2436@code{memcpy()} system call. Blosc is meant not only to reduce the size of
2437large datasets on-disk or in-memory, but also to accelerate memory-bound
2438computations.")
2439 ;; Blosc itself is released under BSD-3 but it incorporates code under
2440 ;; other non-copyleft licenses.
2441 (license license:bsd-3)))
3480ceb1
KK
2442
2443(define-public ecm
2444 (package
2445 (name "ecm")
2446 (version "1.0.3")
2447 (source (origin
2448 (method git-fetch)
2449 (uri (git-reference
2450 (url "https://github.com/alucryd/ecm-tools")
2451 (commit (string-append "v" version))))
2452 (file-name (git-file-name name version))
2453 (sha256
2454 (base32
2455 "1rvyx5gcy8lfklgj80szlz3312x45wzx0d9jsgwyvy8f6m4nnb0c"))))
2456 (build-system gnu-build-system)
2457 (arguments
2458 `(#:tests? #f ; no check target
2459 #:make-flags
1ca44ae3
MB
2460 (list (string-append "CC=" ,(cc-for-target))
2461 (string-append "DESTDIR=" (assoc-ref %outputs "out")))
3480ceb1
KK
2462 #:phases
2463 (modify-phases %standard-phases
2464 (replace 'configure
2465 (lambda _
2466 (substitute* "Makefile"
2467 (("\\$\\(DESTDIR\\)/usr") "$(DESTDIR)"))
2468 #t)))))
2469 (home-page "https://github.com/alucryd/ecm-tools")
2470 (synopsis "Error code modeler")
2471 (description "ECM is a utility that converts ECM files, i.e., CD data files
2472with their error correction data losslessly rearranged for better compression,
2473to their original, binary CD format.")
2474 (license license:gpl3+)))
ff43f128
GLV
2475
2476(define-public tarlz
2477 (package
2478 (name "tarlz")
e7195e83 2479 (version "0.19")
ff43f128
GLV
2480 (source
2481 (origin
2482 (method url-fetch)
2483 (uri (string-append "mirror://savannah/lzip/tarlz/"
2484 "tarlz-" version ".tar.lz"))
2485 (sha256
e7195e83 2486 (base32 "09xal55973ivzpaja93jcc1pfla8gb3vrk8dx7pj9qvvz5aynf9n"))))
ff43f128
GLV
2487 (build-system gnu-build-system)
2488 (native-inputs
2489 `(("lzip" ,lzip)))
2490 (inputs
2491 `(("lzlib" ,lzlib)))
2492 (home-page "https://www.nongnu.org/lzip/tarlz.html")
2493 (synopsis "Combination of the tar archiver and the lzip compressor")
2494 (description
2495 "Tarlz is a massively parallel (multi-threaded) combined implementation of
2496the tar archiver and the lzip compressor. Tarlz creates, lists, and extracts
2497archives in a simplified and safer variant of the POSIX pax format compressed
2498with lzip, keeping the alignment between tar members and lzip members. The
2499resulting multimember tar.lz archive is fully backward compatible with standard
2500tar tools like GNU tar, which treat it like any other tar.lz archive. Tarlz
2501can append files to the end of such compressed archives.")
2502 (license license:gpl2+)))