gnu: libjcat: Update to 0.1.8.
[jackhill/guix/guix.git] / gnu / packages / compression.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
4 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
5 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
6 ;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
7 ;;; Copyright © 2015, 2016, 2017, 2018, 2020 Ricardo Wurmus <rekado@elephly.net>
8 ;;; Copyright © 2015, 2017, 2018 Leo Famulari <leo@famulari.name>
9 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
10 ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
11 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
12 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
13 ;;; Copyright © 2016–2021 Tobias Geerinckx-Rice <me@tobias.gr>
14 ;;; Copyright © 2016 David Craven <david@craven.ch>
15 ;;; Copyright © 2016, 2019, 2020 Kei Kebreau <kkebreau@posteo.net>
16 ;;; Copyright © 2016, 2018, 2019, 2020, 2021 Marius Bakke <marius@gnu.org>
17 ;;; Copyright © 2017 Nikita <nikita@n0.is>
18 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
19 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
20 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
21 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
22 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
23 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
24 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
25 ;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
26 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
27 ;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
28 ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
29 ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net>
30 ;;; Copyright © 2020, 2021 Lars-Dominik Braun <lars@6xq.net>
31 ;;; Copyright © 2020 Guillaume Le Vaillant <glv@posteo.net>
32 ;;; Copyright © 2020 Léo Le Bouter <lle-bout@zaclys.net>
33 ;;; Copyright © 2021 Antoine Côté <antoine.cote@posteo.net>
34 ;;; Copyright © 2021 Vincent Legoll <vincent.legoll@gmail.com>
35 ;;;
36 ;;; This file is part of GNU Guix.
37 ;;;
38 ;;; GNU Guix is free software; you can redistribute it and/or modify it
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 ;;;
43 ;;; GNU Guix is distributed in the hope that it will be useful, but
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
49 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
50
51 (define-module (gnu packages compression)
52 #:use-module ((guix licenses) #:prefix license:)
53 #:use-module (guix utils)
54 #:use-module (guix packages)
55 #:use-module (guix download)
56 #:use-module (guix git-download)
57 #:use-module (guix build-system cmake)
58 #:use-module (guix build-system glib-or-gtk)
59 #:use-module (guix build-system gnu)
60 #:use-module (guix build-system go)
61 #:use-module (guix build-system meson)
62 #:use-module (guix build-system python)
63 #:use-module (guix build-system trivial)
64 #:use-module (gnu packages)
65 #:use-module (gnu packages assembly)
66 #:use-module (gnu packages autotools)
67 #:use-module (gnu packages backup)
68 #:use-module (gnu packages base)
69 #:use-module (gnu packages benchmark)
70 #:use-module (gnu packages boost)
71 #:use-module (gnu packages check)
72 #:use-module (gnu packages curl)
73 #:use-module (gnu packages documentation)
74 #:use-module (gnu packages file)
75 #:use-module (gnu packages gettext)
76 #:use-module (gnu packages glib)
77 #:use-module (gnu packages gnome)
78 #:use-module (gnu packages gnupg)
79 #:use-module (gnu packages gtk)
80 #:use-module (gnu packages man)
81 #:use-module (gnu packages maths)
82 #:use-module (gnu packages perl)
83 #:use-module (gnu packages pkg-config)
84 #:use-module (gnu packages python)
85 #:use-module (gnu packages qt)
86 #:use-module (gnu packages tls)
87 #:use-module (gnu packages valgrind)
88 #:use-module (gnu packages version-control)
89 #:use-module (gnu packages xml)
90 #:use-module (ice-9 match)
91 #:use-module (srfi srfi-1))
92
93 (define-public zlib
94 (package
95 (name "zlib")
96 (version "1.2.11")
97 (source
98 (origin
99 (method url-fetch)
100 (uri (list (string-append "http://zlib.net/zlib-"
101 version ".tar.gz")
102 (string-append "mirror://sourceforge/libpng/zlib/"
103 version "/zlib-" version ".tar.gz")))
104 (sha256
105 (base32
106 "18dighcs333gsvajvvgqp8l4cx7h1x7yx9gd5xacnk80spyykrf3"))))
107 (build-system gnu-build-system)
108 (outputs '("out" "static"))
109 (arguments
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 '())
122 (invoke "./configure"
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)))))))
132 (home-page "https://zlib.net/")
133 (synopsis "Compression library")
134 (description
135 "zlib is designed to be a free, general-purpose, legally unencumbered --
136 that is, not covered by any patents -- lossless data-compression library for
137 use on virtually any computer hardware and operating system. The zlib data
138 format is itself portable across platforms. Unlike the LZW compression method
139 used in Unix compress(1) and in the GIF image format, the compression method
140 currently used in zlib essentially never expands the data. (LZW can double or
141 triple the file size in extreme cases.) zlib's memory footprint is also
142 independent of the input data and can be reduced, if necessary, at some cost
143 in compression.")
144 (license license:zlib)))
145
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
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))))))
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,
175 extracting and viewing ZIP archives. This version is extracted from
176 the @code{zlib} source.")
177 (license (package-license zlib))))
178
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)))
192 (home-page "https://savannah.nongnu.org/projects/fastjar")
193 (synopsis "Replacement for Sun's 'jar' utility")
194 (description
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.")
197 (license license:gpl2+)))
198
199 (define-public libtar
200 (package
201 (name "libtar")
202 (version "1.2.20")
203 (source (origin
204 (method url-fetch)
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")))
212 (sha256
213 (base32
214 "02cihzl77ia0dcz7z2cga2412vyhhs5pa2355q4wpwbyga2lrwjh"))
215 (patches (search-patches "libtar-CVE-2013-4420.patch"))))
216 (build-system gnu-build-system)
217 (arguments `(#:tests? #f)) ; no "check" target
218 (native-inputs
219 `(("autoconf" ,autoconf)
220 ("automake" ,automake)
221 ("libtool" ,libtool)))
222 (inputs
223 `(("zlib" ,zlib)))
224 (synopsis "C library for manipulating POSIX tar files")
225 (description
226 "libtar is a C library for manipulating POSIX tar files. It handles
227 adding and extracting files to/from a tar archive.")
228 (home-page "https://repo.or.cz/libtar.git")
229 (license license:bsd-3)))
230
231 (define-public gzip
232 (package
233 (name "gzip")
234 (version "1.10")
235 (source (origin
236 (method url-fetch)
237 (uri (string-append "mirror://gnu/gzip/gzip-"
238 version ".tar.xz"))
239 (sha256
240 (base32
241 "1h6p374d3j8d4cdfydzls021xa2yby8myc0h8d6m8bc7k6ncq9c4"))))
242 (build-system gnu-build-system)
243 (synopsis "General file (de)compression (using lzw)")
244 (arguments
245 ;; FIXME: The test suite wants `less', and optionally Perl.
246 '(#:tests? #f
247 #:phases
248 (modify-phases %standard-phases
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))
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)))))
271 (description
272 "GNU Gzip provides data compression and decompression utilities; the
273 typical extension is \".gz\". Unlike the \"zip\" format, it compresses a single
274 file; as a result, it is often used in conjunction with \"tar\", resulting in
275 \".tar.gz\" or \".tgz\", etc.")
276 (license license:gpl3+)
277 (home-page "https://www.gnu.org/software/gzip/")))
278
279 (define-public bzip2
280 (package
281 (name "bzip2")
282 (version "1.0.8")
283 (source (origin
284 (method url-fetch)
285 (uri (string-append "https://sourceware.org/pub/bzip2/bzip2-"
286 version ".tar.gz"))
287 (sha256
288 (base32
289 "0s92986cv0p692icqlw1j42y9nld8zd83qwhzbqd61p1dqbh6nmb"))))
290 (build-system gnu-build-system)
291 (arguments
292 `(#:modules ((guix build gnu-build-system)
293 (guix build utils)
294 (ice-9 ftw)
295 (srfi srfi-1))
296 #:phases
297 (modify-phases %standard-phases
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)))
314 (replace 'configure
315 (lambda* (#:key target #:allow-other-keys)
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))
329 (add-before 'build 'build-shared-lib
330 (lambda* (#:key inputs #:allow-other-keys)
331 (patch-makefile-SHELL "Makefile-libbz2_so")
332 (invoke "make" "-f" "Makefile-libbz2_so")))
333 (add-after 'install 'install-shared-lib
334 (lambda* (#:key outputs #:allow-other-keys)
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.
337 (let* ((out (assoc-ref outputs "out"))
338 (libdir (string-append out "/lib"))
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)))))
347 (install-file lib libdir)
348 (with-directory-excursion libdir
349 ;; Create symlinks libbz2.so.1 -> libbz2.so.1.0, etc.
350 (let loop ((base soname)
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)))
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))))
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")))
370 #t)))
371
372 #:make-flags (list (string-append "PREFIX="
373 (assoc-ref %outputs "out")))
374
375 ;; Don't attempt to run the tests when cross-compiling.
376 ,@(if (%current-target-system)
377 '(#:tests? #f)
378 '())))
379 (outputs '("out" "static"))
380 (synopsis "High-quality data compression program")
381 (description
382 "bzip2 is a freely available, patent free (see below), high-quality data
383 compressor. It typically compresses files to within 10% to 15% of the best
384 available techniques (the PPM family of statistical compressors), whilst
385 being around twice as fast at compression and six times faster at
386 decompression.")
387 (license (license:non-copyleft "file://LICENSE"
388 "See LICENSE in the distribution."))
389 (home-page "https://web.archive.org/web/20180801004107/http://www.bzip.org/")))
390
391 (define-public lbzip2
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
440 bzip2 compressed file format. lbzip2 can process standard bz2 files in
441 parallel. It uses POSIX threading model (pthreads), which allows it to take
442 full advantage of symmetric multiprocessing (SMP) systems. It has been proven
443 to scale linearly, even to over one hundred processor cores. lbzip2 is fully
444 compatible with bzip2 – both at file format and command line level.")
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+))))
449
450 (define-public pbzip2
451 (package
452 (name "pbzip2")
453 (version "1.1.13")
454 (source (origin
455 (method url-fetch)
456 (uri (string-append "https://launchpad.net/pbzip2/"
457 (version-major+minor version) "/" version
458 "/+download/" name "-" version ".tar.gz"))
459 (sha256
460 (base32
461 "1rnvgcdixjzbrmcr1nv9b6ccrjfrhryaj7jwz28yxxv6lam3xlcg"))))
462 (build-system gnu-build-system)
463 (inputs
464 `(("bzip2" ,bzip2)))
465 (arguments
466 `(#:tests? #f ; no tests
467 #:phases (modify-phases %standard-phases
468 (delete 'configure)) ; no configure script
469 #:make-flags (list (string-append "PREFIX=" %output))))
470 (home-page (string-append "https://web.archive.org/web/20180412020219/"
471 "http://compression.ca/pbzip2/"))
472 (synopsis "Parallel bzip2 implementation")
473 (description
474 "Pbzip2 is a parallel implementation of the bzip2 block-sorting file
475 compressor that uses pthreads and achieves near-linear speedup on SMP machines.
476 The output of this version is fully compatible with bzip2 v1.0.2 (i.e. anything
477 compressed with pbzip2 can be decompressed with bzip2).")
478 (license (license:non-copyleft "file://COPYING"
479 "See COPYING in the distribution."))))
480
481 (define-public xz
482 (package
483 (name "xz")
484 (version "5.2.4")
485 (source (origin
486 (method url-fetch)
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")))
491 (sha256
492 (base32
493 "0ibi2zsfaz6l756spjwc5rayf4ckgc9hwmy8qinppcyk4svz64mm"))))
494 (build-system gnu-build-system)
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"))
512 (synopsis "General-purpose data compression")
513 (description
514 "XZ Utils is free general-purpose data compression software with high
515 compression ratio. XZ Utils were written for POSIX-like systems, but also
516 work on some not-so-POSIX systems. XZ Utils are the successor to LZMA Utils.
517
518 The core of the XZ Utils compression code is based on LZMA SDK, but it has
519 been modified quite a lot to be suitable for XZ Utils. The primary
520 compression algorithm is currently LZMA2, which is used inside the .xz
521 container format. With typical files, XZ Utils create 30 % smaller output
522 than gzip and 15 % smaller output than bzip2.")
523 (license (list license:gpl2+ license:lgpl2.1+)) ; bits of both
524 (home-page "https://tukaani.org/xz/")))
525
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
548 `(("tzdata" ,tzdata-for-tests)))
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
552 decompressing .lzh (LHA / LHarc) and .lzs (LArc) archives. The backend for the
553 tool is a library, so that it can be reused for other purposes. Lhasa aims to
554 be compatible with as many types of lzh/lzs archives as possible. It also aims
555 to generate the same output as the (non-free) Unix LHA tool, so that it will
556 act as a free drop-in replacement.")
557 (license license:isc)))
558
559 (define-public lzo
560 (package
561 (name "lzo")
562 (version "2.10")
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
570 "0wm04519pd3g8hqpjqhfr72q8qmbiwqaxcs3cndny9h86aa95y60"))))
571 (build-system gnu-build-system)
572 (arguments '(#:configure-flags '("--enable-shared")))
573 (home-page "http://www.oberhumer.com/opensource/lzo")
574 (synopsis
575 "Data compression library suitable for real-time data de-/compression")
576 (description
577 "LZO is a data compression library which is suitable for data
578 de-/compression in real-time. This means it favours speed over
579 compression ratio.
580
581 LZO is written in ANSI C. Both the source code and the compressed data
582 format are designed to be portable across platforms.")
583 (license license:gpl2+)))
584
585 (define-public lzop
586 (package
587 (name "lzop")
588 (version "1.04")
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
596 "0h9gb8q7y54m9mvy3jvsmxf21yx8fc3ylzh418hgbbv0i8mbcwky"))))
597 (build-system gnu-build-system)
598 (inputs `(("lzo" ,lzo)))
599 (home-page "https://www.lzop.org/")
600 (synopsis "Compress or expand files")
601 (description
602 "Lzop is a file compressor which is very similar to gzip. Lzop uses the
603 LZO data compression library for compression services, and its main advantages
604 over gzip are much higher compression and decompression speed (at the cost of
605 some compression ratio).")
606 (license license:gpl2+)))
607
608 (define-public lzip
609 (package
610 (name "lzip")
611 (version "1.21")
612 (source (origin
613 (method url-fetch)
614 (uri (string-append "mirror://savannah/lzip/lzip-"
615 version ".tar.gz"))
616 (sha256
617 (base32
618 "12qdcw5k1cx77brv9yxi1h4dzwibhfmdpigrj43nfk8nscwm12z4"))))
619 (build-system gnu-build-system)
620 (home-page "https://www.nongnu.org/lzip/lzip.html")
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
624 one of gzip or bzip2. Lzip decompresses almost as fast as gzip and compresses
625 more than bzip2, which makes it well-suited for software distribution and data
626 archiving. Lzip is a clean implementation of the LZMA algorithm.")
627 (license license:gpl3+)))
628
629 (define-public lziprecover
630 (package
631 (name "lziprecover")
632 (version "1.22")
633 (source (origin
634 (method url-fetch)
635 (uri (string-append "mirror://savannah/lzip/lziprecover/"
636 "lziprecover-" version ".tar.gz"))
637 (sha256
638 (base32
639 "0qh8dnhr5rly2k9dnx43qqynqwqzi5kfb15pyd29qwppfl4qm5gx"))))
640 (build-system gnu-build-system)
641 (home-page "https://www.nongnu.org/lzip/lziprecover.html")
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
645 compressed data format (.lz). It can test the integrity of lzip files, extract
646 data from damaged ones, and repair most files with small errors (up to one
647 single-byte error per member) entirely.
648
649 Lziprecover is not a replacement for regular backups, but a last line of defence
650 when even the backups are corrupt. It can recover files by merging the good
651 parts of two or more damaged copies, such as can be easily produced by running
652 @command{ddrescue} on a failing device.
653
654 This package also includes @command{unzcrash}, a tool to test the robustness of
655 decompressors when faced with corrupted input.")
656 (license (list license:bsd-2 ; arg_parser.{cc,h}
657 license:gpl2+)))) ; everything else
658
659 (define-public sharutils
660 (package
661 (name "sharutils")
662 (version "4.15.2")
663 (source
664 (origin
665 (method url-fetch)
666 (uri (string-append "mirror://gnu/sharutils/sharutils-"
667 version ".tar.xz"))
668 (patches (search-patches "sharutils-CVE-2018-1000097.patch"))
669 (sha256
670 (base32
671 "16isapn8f39lnffc3dp4dan05b7x6mnc76v6q5nn8ysxvvvwy19b"))
672 (modules '((guix build utils)))
673 (snippet
674 '(begin
675 ;; Adjust for newer libc versions.
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")))
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)))))))
692 (build-system gnu-build-system)
693 (native-inputs
694 `(("which" ,which)))
695 (arguments
696 `(#:phases
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"
703 (((which "sh")) "/bin/sh")))))))
704 (home-page "https://www.gnu.org/software/sharutils/")
705 (synopsis "Archives in shell scripts, uuencode/uudecode")
706 (description
707 "GNU sharutils is a package for creating and manipulating shell
708 archives that can be readily emailed. A shell archive is a file that can be
709 processed by a Bourne-type shell to unpack the original collection of files.
710 This package is mostly for compatibility and historical interest.")
711 (license license:gpl3+)))
712
713 (define-public sfarklib
714 (package
715 (name "sfarklib")
716 (version "2.24")
717 (source (origin
718 (method git-fetch)
719 (uri (git-reference
720 (url "https://github.com/raboof/sfArkLib")
721 (commit version)))
722 (file-name (git-file-name name version))
723 (sha256
724 (base32
725 "0jrxy24gak7q5ml06p5jjgzk9i5r2mkfjk4ycirkp4kg7k5a237w"))))
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
742 with the sfArk algorithm.")
743 (license license:gpl3+)))
744
745 (define-public sfarkxtc
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
756 (url "https://github.com/raboof/sfarkxtc")
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
778 sfArk file format to the uncompressed sf2 format.")
779 (license license:gpl3+))))
780
781 (define-public libmspack
782 (package
783 (name "libmspack")
784 (home-page "https://cabextract.org.uk/libmspack/")
785 (version "0.10.1")
786 (source
787 (origin
788 (method url-fetch)
789 (uri (string-append home-page name "-" version "alpha.tar.gz"))
790 (sha256
791 (base32 "13janaqsvm7aqc4agjgd4819pbgqv50j88bh5kci1z70wvg65j5s"))))
792 (build-system gnu-build-system)
793 (arguments
794 `(#:configure-flags '("--disable-static")))
795 (synopsis "Compression tools for some formats used by Microsoft")
796 (description
797 "The purpose of libmspack is to provide both compression and
798 decompression of some loosely related file formats used by Microsoft.")
799 (license license:lgpl2.1+)))
800
801 (define-public lz4
802 (package
803 (name "lz4")
804 (version "1.9.3")
805 (source
806 (origin
807 (method git-fetch)
808 (uri (git-reference (url "https://github.com/lz4/lz4")
809 (commit (string-append "v" version))))
810 (sha256
811 (base32 "1w02kazh1fps3sji2sn89fz862j1199c5ajrqcgl1bnlxj09kcbz"))
812 (file-name (git-file-name name version))))
813 (build-system gnu-build-system)
814 (outputs (list "out" "static"))
815 (native-inputs
816 `(;; For tests.
817 ("python" ,python)
818 ("valgrind" ,valgrind)))
819 (arguments
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"
824 #:make-flags (list (string-append "CC=" ,(cc-for-target))
825 (string-append "prefix=" (assoc-ref %outputs "out")))
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))))))
844 (home-page "https://www.lz4.org")
845 (synopsis "Compression algorithm focused on speed")
846 (description "LZ4 is a lossless compression algorithm, providing
847 compression speed at 400 MB/s per core (0.16 Bytes/cycle). It also features an
848 extremely fast decoder, with speed in multiple GB/s per core (0.71 Bytes/cycle).
849 A high compression derivative, called LZ4_HC, is also provided. It trades CPU
850 time for compression ratio.")
851 ;; The libraries (lz4, lz4hc, and xxhash) are BSD licenced. The command
852 ;; line interface programs (lz4, fullbench, fuzzer, datagen) are GPL2+.
853 (license (list license:bsd-2 license:gpl2+))))
854
855 (define-public squashfs-tools
856 (package
857 (name "squashfs-tools")
858 (version "4.4")
859 (source (origin
860 (method url-fetch)
861 (uri (string-append "mirror://sourceforge/squashfs/squashfs/"
862 "squashfs" version "/"
863 "squashfs" version ".tar.gz"))
864 (sha256
865 (base32
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)))))))
875 (build-system gnu-build-system)
876 (arguments
877 `(#:tests? #f ; no check target
878 #:make-flags
879 (list (string-append "CC=" ,(cc-for-target))
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
887 (lambda _
888 (chdir "squashfs-tools")
889 #t)))))
890 (inputs
891 `(("lz4" ,lz4)
892 ("lzo" ,lzo)
893 ("xz" ,xz)
894 ("zlib" ,zlib)))
895 (home-page "https://github.com/plougher/squashfs-tools")
896 (synopsis "Tools to create and extract squashfs file systems")
897 (description
898 "Squashfs is a highly compressed read-only file system for Linux. It uses
899 zlib to compress files, inodes, and directories. All blocks are packed to
900 minimize the data overhead, and block sizes of between 4K and 1M are supported.
901 It is intended to be used for archival use, for live CDs, and for embedded
902 systems where low overhead is needed. This package allows you to create and
903 extract such file systems.")
904 (license license:gpl2+)))
905
906 (define-public pigz
907 (package
908 (name "pigz")
909 (version "2.6")
910 (source (origin
911 (method url-fetch)
912 (uri (string-append "http://zlib.net/pigz/"
913 name "-" version ".tar.gz"))
914 (sha256
915 (base32
916 "0z9avc4mifwcpj3qdsf9m2rjw9jx03b2r9pj0c4xgla9fh6ppv9f"))))
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))))
931 #:make-flags
932 (list ,(string-append "CC=" (cc-for-target)))
933 #:test-target "tests"))
934 (inputs `(("zlib" ,zlib)))
935 (home-page "https://zlib.net/pigz/")
936 (synopsis "Parallel implementation of gzip")
937 (description
938 "This package provides a parallel implementation of gzip that exploits
939 multiple 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)))
944
945 (define-public pixz
946 (package
947 (name "pixz")
948 (version "1.0.7")
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
956 "1ifxr18f2h75gkcrkx8033kwmwmrcgxshpaawyc2n4dzn1p2rqz5"))))
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,
965 but they produce just one big block of compressed data. Pixz instead produces
966 a collection of smaller blocks which makes random access to the original data
967 possible and can compress in parallel. This is especially useful for large
968 tarballs.")
969 (license license:bsd-2)))
970
971 (define-public cabextract
972 (package
973 (name "cabextract")
974 (home-page "https://cabextract.org.uk/")
975 (version "1.9.1")
976 (source (origin
977 (method url-fetch)
978 (uri (string-append home-page "cabextract-" version ".tar.gz"))
979 (sha256
980 (base32
981 "19qwhl2r8ip95q4vxzxg2kp4p125hjmc9762sns1dwwf7ikm7hmg"))
982 (modules '((guix build utils)))
983 (snippet
984 '(begin
985 ;; Delete bundled libmspack.
986 (delete-file-recursively "mspack")
987 #t))))
988 (build-system gnu-build-system)
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))))))
1005 (native-inputs
1006 `(("pkg-config" ,pkg-config)))
1007 (inputs
1008 `(("libmspack" ,libmspack)
1009 ("libmspack-source" ,(package-source libmspack))))
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+)))
1014
1015 (define-public libjcat
1016 (package
1017 (name "libjcat")
1018 (version "0.1.8")
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
1028 (base32 "18qkyg19r7fxzv93kar5n808n3582ygjmqwa7rnyg5y4b6hnwihl"))))
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
1046 files, which can be used to store GPG, PKCS-7 and SHA-256 checksums for each
1047 file.")
1048 (license license:lgpl2.1+)))
1049
1050 (define-public xdelta
1051 (package
1052 (name "xdelta")
1053 (version "3.1.0")
1054 (source
1055 (origin
1056 (method git-fetch)
1057 (uri (git-reference
1058 (url "https://github.com/jmacd/xdelta")
1059 (commit (string-append "v" version))))
1060 (file-name (git-file-name name version))
1061 (sha256
1062 (base32
1063 "09mmsalc7dwlvgrda56s2k927rpl3a5dzfa88aslkqcjnr790wjy"))
1064 (snippet
1065 ;; This file isn't freely distributable and has no effect on building.
1066 '(begin
1067 (delete-file "xdelta3/draft-korn-vcdiff.txt")
1068 #t))))
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
1077 (lambda _ (chdir "xdelta3") #t)))))
1078 (home-page "http://xdelta.org")
1079 (synopsis "Delta encoder for binary files")
1080 (description "xdelta encodes only the differences between two binary files
1081 using the VCDIFF algorithm and patch file format described in RFC 3284. It can
1082 also 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
1084 human-readable output.")
1085 (license license:asl2.0)))
1086
1087 (define-public lrzip
1088 (package
1089 (name "lrzip")
1090 (version "0.641")
1091 (source
1092 (origin
1093 (method url-fetch)
1094 (uri (string-append
1095 "http://ck.kolivas.org/apps/lrzip/lrzip-" version ".tar.xz"))
1096 (sha256
1097 (base32 "0ziyanspd96dc3lp2qdcylc7aq8dhb511jhqrhxvlp502fjqjqrc"))))
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)
1108 ("lz4" ,lz4)
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
1114 redundancy reduction to improve the subsequent compression ratio of
1115 larger files. It can then further compress the result with the ZPAQ or
1116 LZMA algorithms for maximum compression, or LZO for maximum speed. This
1117 choice between size or speed allows for either better compression than
1118 even LZMA can provide, or a higher speed than gzip while compressing as
1119 well as bzip2.")
1120 (license (list license:gpl3+
1121 license:public-domain)))) ; most files in lzma/
1122
1123 (define-public snappy
1124 (package
1125 (name "snappy")
1126 (version "1.1.9")
1127 (source
1128 (origin
1129 (method git-fetch)
1130 (uri (git-reference
1131 (url "https://github.com/google/snappy")
1132 (commit version)))
1133 (file-name (git-file-name name version))
1134 (sha256
1135 (base32 "03zz56h79z0sgvi5sangjqn9dahhzvf645v26n1y0gwmfbmsax95"))
1136 (patches
1137 (search-patches "snappy-add-O2-flag-in-CmakeLists.txt.patch"
1138 "snappy-add-inline-for-GCC.patch"))))
1139 (build-system cmake-build-system)
1140 (arguments
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))))
1164 (home-page "https://github.com/google/snappy")
1165 (synopsis "Fast compressor/decompressor")
1166 (description "Snappy is a compression/decompression library. It does not
1167 aim for maximum compression, or compatibility with any other compression library;
1168 instead, it aims for very high speeds and reasonable compression. For instance,
1169 compared to the fastest mode of zlib, Snappy is an order of magnitude faster
1170 for most inputs, but the resulting compressed files are anywhere from 20% to
1171 100% bigger.")
1172 (license license:asl2.0)))
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))
1199 (patches (search-patches "p7zip-CVE-2016-9296.patch"
1200 "p7zip-CVE-2017-17969.patch"
1201 "p7zip-remove-unused-code.patch"))))
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)
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")))
1221 (replace 'check
1222 (lambda _
1223 (invoke "make" "test")
1224 (invoke "make" "test_7z")
1225 (invoke "make" "test_7zr"))))))
1226 (native-inputs
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
1237 handles the 7z format which features very high compression ratios.")
1238 (license (list license:lgpl2.1+
1239 license:gpl2+
1240 license:public-domain))))
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.
1258 '(begin
1259 (delete-file "gzstream.o")
1260 #t))))
1261 (build-system gnu-build-system)
1262 (arguments
1263 `(#:test-target "test"
1264 #:phases
1265 (modify-phases %standard-phases
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))
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
1285 functionality in a C++ iostream.")
1286 (license license:lgpl2.1+)))
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.
1303 '(begin
1304 (for-each delete-file (find-files "." "\\.exe$"))
1305 #t))))
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.
1321 (string-append "CXXFLAGS=-O3 -DNDEBUG"
1322 ,(match (or (%current-target-system)
1323 (%current-system))
1324 ("x86_64-linux" " -march=nocona -mtune=generic")
1325 ("i686-linux" " -march=i686 -mtune=generic")
1326 ("armhf-linux" " -mtune=generic-armv7-a")
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
1335 many duplicate and already compressed files. It backs up only those files
1336 modified since the last update. All previous versions remain untouched and can
1337 be independently recovered. Identical files are only stored once (known as
1338 @dfn{de-duplication}). Archives can also be encrypted.
1339
1340 ZPAQ is intended to back up user data, not entire operating systems. It ignores
1341 owner and group IDs, ACLs, extended attributes, or special file types like
1342 devices, sockets, or named pipes. It does not follow or restore symbolic links
1343 or 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))))
1348
1349 (define-public unshield
1350 (package
1351 (name "unshield")
1352 (version "1.4.3")
1353 (source
1354 (origin (method git-fetch)
1355 (uri (git-reference
1356 (url "http://github.com/twogood/unshield")
1357 (commit version)))
1358 (file-name (git-file-name name version))
1359 (sha256
1360 (base32
1361 "19wn22vszhci8dfcixx5rliz7phx3lv5ablvhjlclvj75k2vsdqd"))))
1362 (build-system cmake-build-system)
1363 (inputs
1364 `(("zlib" ,zlib)
1365 ("openssl" ,openssl)
1366 ;; Test data that is otherwise downloaded with curl.
1367 ("unshield-avigomanager11b22.zip"
1368 ,(origin
1369 (method url-fetch)
1370 (uri (string-append
1371 "https://www.dropbox.com/s/8r4b6752swe3nhu/"
1372 "unshield-avigomanager11b22.zip?dl=1"))
1373 (sha256
1374 (base32 "0fwq7lih04if68wpwpsk5wjqyvh32db76a41sq6gbx4dn1lc3ddn"))
1375 (file-name "unshield-avigomanager11b22.zip")))
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")))
1385 ("unshield-the-feeble-files-spanish.zip"
1386 ,(origin
1387 (method url-fetch)
1388 (uri (string-append
1389 "https://www.dropbox.com/s/1ng0z9kfxc7eb1e/"
1390 "unshield-the-feeble-files-spanish.zip?dl=1"))
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"
1406 "unshield-baldurs_gate_patch_v1_1_4315_international.zip"
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)
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")))
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 _
1432 (invoke "./run-tests.sh"))))))
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
1440 (define-public zstd
1441 (package
1442 (name "zstd")
1443 (version "1.4.4")
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
1450 (base32 "05ckxap00qvc0j51d3ci38150cxsw82w7s9zgd5fgzspnzmp1vsr"))))
1451 (replacement zstd/fixed)
1452 (build-system gnu-build-system)
1453 (outputs '("out" ;1.2MiB executables and documentation
1454 "lib" ;1.2MiB shared library and headers
1455 "static")) ;1.2MiB static library
1456 (arguments
1457 `(#:phases
1458 (modify-phases %standard-phases
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
1475 ;; Make sure the pkg-config file refers to the right output.
1476 (substitute* (string-append shared-libs "/pkgconfig/libzstd.pc")
1477 (("^prefix=.*")
1478 (string-append "prefix=" lib "\n")))
1479
1480 #t))))
1481 #:make-flags
1482 ;; TODO: Integrate in next rebuild cycle.
1483 (list ,(if (%current-target-system)
1484 (string-append "CC=" (cc-for-target))
1485 "CC=gcc")
1486 (string-append "PREFIX=" (assoc-ref %outputs "out"))
1487 (string-append "LIBDIR=" (assoc-ref %outputs "lib") "/lib")
1488 (string-append "INCLUDEDIR=" (assoc-ref %outputs "lib") "/include")
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"
1494 "HAVE_ZLIB=0")))
1495 (home-page "https://facebook.github.io/zstd/")
1496 (synopsis "Zstandard real-time compression algorithm")
1497 (description "Zstandard (@command{zstd}) is a lossless compression algorithm
1498 that combines very fast operation with a compression ratio comparable to that of
1499 zlib. In most scenarios, both compression and decompression can be performed in
1500 ‘real time’. The compressor can be configured to provide the most suitable
1501 trade-off between compression ratio and speed, without affecting decompression
1502 speed.")
1503 (license (list license:bsd-3 ; the main top-level LICENSE file
1504 license:bsd-2 ; many files explicitly state 2-Clause
1505 license:gpl2 ; the main top-level COPYING file
1506 license:gpl3+ ; tests/gzip/*.sh
1507 license:expat ; lib/dictBuilder/divsufsort.[ch]
1508 license:public-domain ; zlibWrapper/examples/fitblk*
1509 license:zlib)))) ; zlibWrapper/{gz*.c,gzguts.h}
1510
1511 (define zstd/fixed
1512 (package
1513 (inherit zstd)
1514 (source
1515 (origin
1516 (inherit (package-source zstd))
1517 (patches
1518 (search-patches
1519 ;; From Ubuntu focal-security
1520 "zstd-CVE-2021-24031_CVE-2021-24032.patch"))))))
1521
1522 (define-public pzstd
1523 (package/inherit zstd
1524 (name "pzstd")
1525 (outputs '("out"))
1526 (inputs
1527 `(,@(if (%current-target-system)
1528 `(("googletest" ,googletest))
1529 '())))
1530 (native-inputs
1531 `(,@(if (%current-system)
1532 `(("googletest" ,googletest))
1533 '())))
1534 (arguments
1535 `(#:phases
1536 (modify-phases %standard-phases
1537 (add-after 'unpack 'enter-subdirectory
1538 (lambda _ (chdir "contrib/pzstd") #t))
1539 (delete 'configure) ; no configure script
1540 (add-before 'check 'compile-tests
1541 (lambda* (#:key make-flags #:allow-other-keys)
1542 (apply invoke "make" "tests" make-flags)))
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
1551 (list (string-append "CC=" ,(cc-for-target))
1552 (string-append "CXX=" ,(cxx-for-target))
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
1557 multi-threaded implementation of the @uref{http://zstd.net/, Zstandard
1558 compression algorithm}. It is fully compatible with the original Zstandard file
1559 format and command-line interface, and can be used as a drop-in replacement.
1560
1561 Compression is distributed over multiple processor cores to improve performance,
1562 as is the decompression of data compressed in this manner. Data compressed by
1563 other implementations will only be decompressed by two threads: one performing
1564 the actual decompression, the other input and output.")
1565 (license (package-license zstd))))
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")))
1587 #:phases
1588 (modify-phases %standard-phases
1589 (replace 'build
1590 (lambda* (#:key (make-flags '()) #:allow-other-keys)
1591 (apply invoke "make" "generic_gcc" make-flags)))
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
1597 for packaging a set of files for distribution, for archiving files, and for
1598 saving disk space by temporarily compressing unused files or directories.
1599 Zip puts one or more compressed files into a single ZIP archive, along with
1600 information about the files (name, path, date, time of last modification,
1601 protection, and check information to verify file integrity). An entire
1602 directory structure can be packed into a ZIP archive with a single command.
1603
1604 Zip has one compression method (deflation) and can also store files without
1605 compression. Zip automatically chooses the better of the two for each file.
1606 Compression 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"))))
1635 (replacement unzip/fixed)
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)
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))
1648 (replace 'build
1649 (lambda* (#:key make-flags #:allow-other-keys)
1650 (apply invoke "make"
1651 `("-j" ,(number->string
1652 (parallel-job-count))
1653 ,@make-flags
1654 "generic_gcc")))))
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,
1662 also called \"zipfiles\".
1663
1664 UnZip lists, tests, or extracts files from a .zip archive. The default
1665 behaviour (with no options) is to extract into the current directory, and
1666 subdirectories below it, all files from the specified zipfile. UnZip
1667 recreates the stored directory structure by default.")
1668 (license (license:non-copyleft "file://LICENSE"
1669 "See LICENSE in the distribution."))))
1670
1671 (define unzip/fixed
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"
1701 "unzip-case-insensitive.patch"
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"
1717 "unzip-zipbomb-part3.patch"
1718
1719 ;; https://github.com/madler/unzip/issues/2
1720 "unzip-32bit-zipbomb-fix.patch"))))))
1721
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
1765 timestamps 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
1771 (define-public zziplib
1772 (package
1773 (name "zziplib")
1774 (version "0.13.69")
1775 (home-page "https://github.com/gdraheim/zziplib")
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))
1781 (patches (search-patches "zziplib-CVE-2018-16548.patch"))
1782 (sha256
1783 (base32
1784 "0fbk9k7ryas2wh2ykwkvm1pbi40i88rfvc3dydh9xyd7w2jcki92"))))
1785 (replacement zziplib/fixed)
1786 (build-system gnu-build-system)
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))
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"))
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
1807 (synopsis "Library for accessing zip files")
1808 (description
1809 "ZZipLib is a library based on zlib for accessing zip files.")
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))))
1813
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"))))
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)))))
1842 (native-inputs
1843 `(("python" ,python)
1844 ,@(alist-delete "python"
1845 (package-native-inputs zziplib))))
1846 (build-system cmake-build-system)))
1847
1848 (define-public libzip
1849 (package
1850 (name "libzip")
1851 (version "1.7.3")
1852 (source (origin
1853 (method url-fetch)
1854 (uri (string-append
1855 "https://libzip.org/download/libzip-" version ".tar.xz"))
1856 (sha256
1857 (base32
1858 "0ck1dk7zn5qzpgxklg0r26nfsf04xb6c46gsig060hkvvgzp6156"))))
1859 (native-inputs
1860 `(("perl" ,perl)))
1861 (inputs
1862 `(("gnutls" ,gnutls)
1863 ("liblzma" ,xz)
1864 ("openssl" ,openssl)
1865 ("zlib" ,zlib)))
1866 (build-system cmake-build-system)
1867 (home-page "https://libzip.org")
1868 (synopsis "C library for reading, creating, and modifying zip archives")
1869 (description "Libzip is a C library for reading, creating, and modifying
1870 zip archives. Files can be added from data buffers, files, or compressed data
1871 copied directly from other zip archives. Changes made without closing the
1872 archive can be reverted.")
1873 (license license:bsd-3)))
1874
1875 (define-public atool
1876 (package
1877 (name "atool")
1878 (version "0.39.0")
1879 (source
1880 (origin
1881 (method url-fetch)
1882 (uri (string-append "mirror://savannah/atool/atool-"
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)))
1901 (home-page "https://www.nongnu.org/atool/")
1902 (synopsis "Universal tool to manage file archives of various types")
1903 (description "The main command is @command{aunpack} which extracts files
1904 from an archive. The other commands provided are @command{apack} (to create
1905 archives), @command{als} (to list files in archives), and @command{acat} (to
1906 extract files to standard out). As @command{atool} invokes external programs
1907 to handle the archives, not all commands may be supported for a certain type
1908 of archives.")
1909 (license license:gpl2+)))
1910
1911 (define-public lunzip
1912 (package
1913 (name "lunzip")
1914 (version "1.12")
1915 (source
1916 (origin
1917 (method url-fetch)
1918 (uri (string-append "mirror://savannah/lzip/lunzip/"
1919 "lunzip-" version ".tar.gz"))
1920 (sha256
1921 (base32 "1liaynyy3qcs29hfk1pnb7i9r1mnmpw557j5v356qsv6qnm4lnz5"))))
1922 (build-system gnu-build-system)
1923 (arguments
1924 `(#:configure-flags
1925 (list ,(string-append "CC=" (cc-for-target)))))
1926 (home-page "https://www.nongnu.org/lzip/lunzip.html")
1927 (synopsis "Small, stand-alone lzip decompressor")
1928 (description
1929 "Lunzip is a decompressor for files in the lzip compression format (.lz),
1930 written as a single small C tool with no dependencies. This makes it
1931 well-suited to embedded and other systems without a C++ compiler, or for use in
1932 applications such as software installers that need only to decompress files,
1933 not compress them.
1934 Lunzip 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
1937
1938 (define-public clzip
1939 (package
1940 (name "clzip")
1941 (version "1.12")
1942 (source
1943 (origin
1944 (method url-fetch)
1945 (uri (string-append "mirror://savannah/lzip/clzip/"
1946 "clzip-" version ".tar.gz"))
1947 (sha256
1948 (base32 "1s7yidqvmxi61hh569h5aci816l6qkffjgx0zx57qyyq0qq2pjgw"))))
1949 (build-system gnu-build-system)
1950 (arguments
1951 `(#:configure-flags
1952 (list ,(string-append "CC=" (cc-for-target)))))
1953 (home-page "https://www.nongnu.org/lzip/clzip.html")
1954 (synopsis "Small, stand-alone lzip compressor and decompressor")
1955 (description
1956 "Clzip is a compressor and decompressor for files in the lzip compression
1957 format (.lz), written as a single small C tool with no dependencies. This makes
1958 it well-suited to embedded and other systems without a C++ compiler, or for use
1959 in other applications like package managers.
1960 Clzip 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+))))
1963
1964 (define-public lzlib
1965 (package
1966 (name "lzlib")
1967 (version "1.12")
1968 (source
1969 (origin
1970 (method url-fetch)
1971 (uri (string-append "mirror://savannah/lzip/lzlib/"
1972 "lzlib-" version ".tar.gz"))
1973 (sha256
1974 (base32 "1c9pwd6by8is4z8bs6j306jyy6pgm2dvsn4fr7fg2b5m5qj88pcf"))))
1975 (build-system gnu-build-system)
1976 (arguments
1977 `(#:configure-flags
1978 (list (string-append "CC=" ,(cc-for-target))
1979 "--disable-static"
1980 "--enable-shared"))) ; only static (.a) is built by default
1981 (home-page "https://www.nongnu.org/lzip/lzlib.html")
1982 (synopsis "Lzip data compression C library")
1983 (description
1984 "Lzlib is a C library for in-memory LZMA compression and decompression in
1985 the lzip format. It supports integrity checking of the decompressed data, and
1986 all functions are thread-safe. The library should never crash, even in case of
1987 corrupted input.")
1988 (license (list license:bsd-2 ; the library itself
1989 license:gpl2+)))) ; main.c (i.e. minilzip used by tests)
1990
1991 (define-public plzip
1992 (package
1993 (name "plzip")
1994 (version "1.9")
1995 (source
1996 (origin
1997 (method url-fetch)
1998 (uri (string-append "mirror://savannah/lzip/plzip/"
1999 "plzip-" version ".tar.gz"))
2000 (sha256
2001 (base32 "19zinpx7hssl6r3vilpvq2s7wha3545xan8b0vcvsxnyipdx3n0l"))))
2002 (build-system gnu-build-system)
2003 (inputs
2004 `(("lzlib" ,lzlib)))
2005 (home-page "https://www.nongnu.org/lzip/plzip.html")
2006 (synopsis "Parallel lossless data compressor for the lzip format")
2007 (description
2008 "Plzip is a massively parallel (multi-threaded) lossless data compressor
2009 and decompressor that uses the lzip file format (.lz). Files produced by plzip
2010 are fully compatible with lzip and can be rescued with lziprecover.
2011 On multiprocessor machines, plzip can compress and decompress large files much
2012 faster than lzip, at the cost of a slightly reduced compression ratio (0.4% to
2013 2%). The number of usable threads is limited by file size: on files of only a
2014 few MiB, plzip is no faster than lzip.
2015 Files that were compressed with regular lzip will also not be decompressed
2016 faster by plzip, unless the @code{-b} option was used: lzip usually produces
2017 single-member files which can't be decompressed in parallel.")
2018 (license (list license:bsd-2 ; arg_parser.{cc,h}
2019 license:gpl2+)))) ; everything else
2020
2021 (define-public innoextract
2022 (package
2023 (name "innoextract")
2024 (version "1.9")
2025 (source
2026 (origin
2027 (method url-fetch)
2028 (uri (string-append "https://constexpr.org/innoextract/files/"
2029 "innoextract-" version "/"
2030 "/innoextract-" version ".tar.gz"))
2031 (sha256
2032 (base32 "09l1z1nbl6ijqqwszdwch9mqr54qb7df0wp2sd77v17dq6gsci33"))))
2033 (build-system cmake-build-system)
2034 (arguments
2035 `(#:tests? #f))
2036 (inputs `(("boost" ,boost)
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
2043 non-Windows systems without running the actual installer using wine.")
2044 (license license:zlib)))
2045
2046 (define-public google-brotli
2047 (package
2048 (name "google-brotli")
2049 (version "1.0.9")
2050 (source
2051 (origin
2052 (method git-fetch)
2053 (uri (git-reference
2054 (url "https://github.com/google/brotli")
2055 (commit (string-append "v" version))))
2056 (file-name (git-file-name name version))
2057 (sha256
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))))
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,
2090 a generic-purpose lossless compression algorithm that compresses data using a
2091 combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd
2092 order context modeling, with a compression ratio comparable to the best
2093 currently available general-purpose compression methods. It is similar in speed
2094 with @code{deflate} but offers more dense compression.
2095
2096 The specification of the Brotli Compressed Data Format is defined in RFC 7932.")
2097 (license license:expat)))
2098
2099 (define-public brotli
2100 ;; We used to provide an older version under the name "brotli".
2101 (deprecated-package "brotli" google-brotli))
2102
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
2112 algorithm.")))
2113
2114 (define-public ucl
2115 (package
2116 (name "ucl")
2117 (version "1.03")
2118 (source (origin
2119 (method url-fetch)
2120 (uri (string-append "https://www.oberhumer.com/opensource/"
2121 name "/download/" name "-" version ".tar.gz"))
2122 (sha256
2123 (base32
2124 "0j036lkwsxvm15gr29n8wn07cqq79dswjs9k54939ms5zngjjrdq"))))
2125 (build-system gnu-build-system)
2126 (arguments
2127 `(;; UCL 1.03 fails to build with newer C standards.
2128 #:configure-flags '("CFLAGS=-std=gnu90"
2129 "--enable-shared" "--disable-static")))
2130 (home-page "https://www.oberhumer.com/opensource/ucl/")
2131 (synopsis "Portable lossless data compression library")
2132 (description "UCL implements a number of compression algorithms that
2133 achieve an excellent compression ratio while allowing fast decompression.
2134 Decompression requires no additional memory.
2135
2136 Compared to LZO, the UCL algorithms achieve a better compression ratio but
2137 decompression is a little bit slower.")
2138 (license license:gpl2+)))
2139
2140 (define-public upx
2141 (package
2142 (name "upx")
2143 (version "3.96")
2144 (source (origin
2145 (method url-fetch)
2146 (uri (string-append "https://github.com/upx/upx/releases/download/v"
2147 version "/upx-" version "-src.tar.xz"))
2148 (sha256
2149 (base32
2150 "051pk5jk8fcfg5mpgzj43z5p4cn7jy5jbyshyn78dwjqr7slsxs7"))
2151 (patches (search-patches "upx-CVE-2021-20285.patch"))))
2152 (build-system gnu-build-system)
2153 (native-inputs
2154 `(("perl" ,perl)))
2155 (inputs
2156 `(("ucl" ,ucl)
2157 ("zlib" ,zlib)))
2158 (arguments
2159 `(#:make-flags
2160 (list "all")
2161 #:phases
2162 (modify-phases %standard-phases
2163 (delete 'configure) ; no configure script
2164 (delete 'check) ; no test suite
2165 (add-before 'build 'patch-exec-bin-sh
2166 (lambda _
2167 (substitute* (list "Makefile"
2168 "src/Makefile")
2169 (("/bin/sh") (which "sh")))
2170 #t))
2171 (replace 'install
2172 (lambda* (#:key outputs #:allow-other-keys)
2173 (let* ((out (assoc-ref outputs "out"))
2174 (bin (string-append out "/bin")))
2175 (mkdir-p bin)
2176 (copy-file "src/upx.out" (string-append bin "/upx")))
2177 #t)))))
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
2182 compressor. UPX typically reduces the file size of programs and shared
2183 libraries by around 50%--70%, thus reducing disk space, network load times,
2184 download times, and other distribution and storage costs.")
2185 (license license:gpl2+)))
2186
2187 (define-public quazip
2188 (package
2189 (name "quazip")
2190 (version "0.9.1")
2191 (source (origin
2192 (method git-fetch)
2193 (uri (git-reference
2194 (url "https://github.com/stachenov/quazip")
2195 (commit (string-append "v" version))))
2196 (file-name (git-file-name name version))
2197 (sha256
2198 (base32
2199 "11icgwv2xyxhd1hm1add51xv54zwkcqkg85d1xqlgiigvbm196iq"))))
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
2211 ZIP/UNZIP package that can be used to access ZIP archives. It uses
2212 Trolltech's Qt toolkit.
2213
2214 QuaZIP allows you to access files inside ZIP archives using QIODevice
2215 API, and that means that you can also use QTextStream, QDataStream or
2216 whatever you would like to use on your zipped files.
2217
2218 QuaZIP provides complete abstraction of the ZIP/UNZIP API, for both
2219 reading 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))))
2223
2224 (define-public zutils
2225 (package
2226 (name "zutils")
2227 (version "1.10")
2228 (source
2229 (origin
2230 (method url-fetch)
2231 (uri (string-append "mirror://savannah/zutils/zutils-" version ".tar.lz"))
2232 (sha256
2233 (base32 "15dimqp8zlqaaa2l46r22srp1py38mlmn69ph1j5fmrd54w43m0d"))))
2234 (build-system gnu-build-system)
2235 (arguments
2236 `(#:configure-flags
2237 (list "--sysconfdir=/etc")
2238 #:phases
2239 (modify-phases %standard-phases
2240 (add-before 'check 'disable-failing-tests
2241 ;; XXX https://lists.nongnu.org/archive/html/zutils-bug/2020-07/msg00005.html
2242 (lambda _
2243 (substitute* "testsuite/check.sh"
2244 (("\"\\$\\{ZGREP\\}\" -N -L \"GNU\"") "true")
2245 (("\"\\$\\{ZGREP\\}\" -N -L \"nx_pattern\"") "false"))
2246 #t))
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)))
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
2260 compressed and uncompressed files transparently. If any given file, including
2261 standard input, is compressed, its decompressed content is used instead.
2262
2263 @command{zcat}, @command{zcmp}, @command{zdiff}, and @command{zgrep} are
2264 improved 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
2269 Supported compression formats are bzip2, gzip, lzip, and xz. Zutils uses
2270 external compressors: the compressor to be used for each format is configurable
2271 at run time, and must be installed separately.")
2272 (license (list license:bsd-2 ; arg_parser.{cc,h}
2273 license:gpl2+)))) ; the rest
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
2318 archives generated by @command{makeself} or @command{mojo} without running the
2319 possibly untrusted extraction shell script.")
2320 (license license:gpl3+))))
2321
2322 (define-public ncompress
2323 (package
2324 (name "ncompress")
2325 (version "4.2.4.6")
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
2335 "1a4yir1ilafz0nzxdwigj204j4yy2zljbc501nsaqqm3dxdap8zn"))))
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
2346 programs that used to be the de facto UNIX standard for compressing and
2347 uncompressing files. These programs implement a fast, simple Lempel-Ziv (LZW)
2348 file compression algorithm.")
2349 (license license:gpl2+)))
2350
2351 (define-public xarchiver
2352 (package
2353 (name "xarchiver")
2354 (version "0.5.4.17")
2355 (source
2356 (origin
2357 (method git-fetch)
2358 (uri (git-reference
2359 (url "https://github.com/ib/xarchiver")
2360 (commit version)))
2361 (file-name (git-file-name name version))
2362 (sha256
2363 (base32 "00adrjpxqlaccrwjf65w3vhxfswdj0as8aj263c6f9b85llypc5v"))))
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
2371 `(("adwaita-icon-theme" ,adwaita-icon-theme) ; hard-coded theme
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
2376 tools. It uses GTK+ tool-kit and is designed to be desktop-environment
2377 independent. Supported formats are 7z, ARJ, bzip2, gzip, LHA, lzma, lzop,
2378 RAR, RPM, DEB, tar, and ZIP. It cannot perform functions for archives, whose
2379 archiver is not installed.")
2380 (license license:gpl2+)))
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
2389 (url "https://github.com/AQUAOSOTech/tarsplitter")
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
2412 "Archive huge numbers of files, or split massive tar archives into smaller
2413 chunks.")
2414 (license license:expat)))
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
2423 (url "https://github.com/Blosc/c-blosc")
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
2434 been designed to transmit data to the processor cache faster than the
2435 traditional, non-compressed, direct memory fetch approach via a
2436 @code{memcpy()} system call. Blosc is meant not only to reduce the size of
2437 large datasets on-disk or in-memory, but also to accelerate memory-bound
2438 computations.")
2439 ;; Blosc itself is released under BSD-3 but it incorporates code under
2440 ;; other non-copyleft licenses.
2441 (license license:bsd-3)))
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
2460 (list (string-append "CC=" ,(cc-for-target))
2461 (string-append "DESTDIR=" (assoc-ref %outputs "out")))
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
2472 with their error correction data losslessly rearranged for better compression,
2473 to their original, binary CD format.")
2474 (license license:gpl3+)))
2475
2476 (define-public tarlz
2477 (package
2478 (name "tarlz")
2479 (version "0.19")
2480 (source
2481 (origin
2482 (method url-fetch)
2483 (uri (string-append "mirror://savannah/lzip/tarlz/"
2484 "tarlz-" version ".tar.lz"))
2485 (sha256
2486 (base32 "09xal55973ivzpaja93jcc1pfla8gb3vrk8dx7pj9qvvz5aynf9n"))))
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
2496 the tar archiver and the lzip compressor. Tarlz creates, lists, and extracts
2497 archives in a simplified and safer variant of the POSIX pax format compressed
2498 with lzip, keeping the alignment between tar members and lzip members. The
2499 resulting multimember tar.lz archive is fully backward compatible with standard
2500 tar tools like GNU tar, which treat it like any other tar.lz archive. Tarlz
2501 can append files to the end of such compressed archives.")
2502 (license license:gpl2+)))