gnu: guix: Update to 0.10.0.
[jackhill/guix/guix.git] / gnu / packages / package-management.scm
CommitLineData
bbe8d8f0 1;;; GNU Guix --- Functional package management for GNU
e8e2e18b 2;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
8d422e25 3;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
bbe8d8f0
LC
4;;;
5;;; This file is part of GNU Guix.
6;;;
7;;; GNU Guix is free software; you can redistribute it and/or modify it
8;;; under the terms of the GNU General Public License as published by
9;;; the Free Software Foundation; either version 3 of the License, or (at
10;;; your option) any later version.
11;;;
12;;; GNU Guix is distributed in the hope that it will be useful, but
13;;; WITHOUT ANY WARRANTY; without even the implied warranty of
14;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15;;; GNU General Public License for more details.
16;;;
17;;; You should have received a copy of the GNU General Public License
18;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
19
20(define-module (gnu packages package-management)
21 #:use-module (guix packages)
22 #:use-module (guix download)
480af4d6
LC
23 #:use-module (guix git-download)
24 #:use-module (guix utils)
bbe8d8f0 25 #:use-module (guix build-system gnu)
e3e1ecf6
LC
26 #:use-module (guix build-system python)
27 #:use-module ((guix licenses) #:select (gpl2+ gpl3+ lgpl2.1+ asl2.0))
8a43ff10 28 #:use-module (gnu packages)
bbe8d8f0 29 #:use-module (gnu packages guile)
e3e1ecf6
LC
30 #:use-module (gnu packages file)
31 #:use-module (gnu packages backup)
38cf2ba0 32 #:use-module (gnu packages compression)
bbe8d8f0 33 #:use-module (gnu packages gnupg)
5f96f303 34 #:use-module (gnu packages databases)
480af4d6
LC
35 #:use-module (gnu packages graphviz)
36 #:use-module (gnu packages pkg-config)
37 #:use-module (gnu packages autotools)
38 #:use-module (gnu packages gettext)
fcb0109d 39 #:use-module (gnu packages texinfo)
e3e1ecf6 40 #:use-module (gnu packages nettle)
fcb0109d
LC
41 #:use-module (gnu packages perl)
42 #:use-module (gnu packages curl)
43 #:use-module (gnu packages web)
e21adc76 44 #:use-module (gnu packages man)
b173d0e4 45 #:use-module (gnu packages emacs)
a7fd7b68 46 #:use-module (gnu packages bdw-gc)
e3e1ecf6
LC
47 #:use-module (gnu packages python)
48 #:use-module (gnu packages popt)
49 #:use-module (gnu packages gnuzilla)
50 #:use-module (gnu packages cpio)
a7fd7b68 51 #:use-module (gnu packages tls))
bbe8d8f0 52
39de700c
LC
53(define (boot-guile-uri arch)
54 "Return the URI for the bootstrap Guile tarball for ARCH."
55 (if (string=? "armhf" arch)
56 (string-append "http://alpha.gnu.org/gnu/guix/bootstrap/"
57 arch "-linux"
58 "/20150101/guile-2.0.11.tar.xz")
59 (string-append "http://alpha.gnu.org/gnu/guix/bootstrap/"
60 arch "-linux"
61 "/20131110/guile-2.0.9.tar.xz")))
62
58f0aae5 63(define-public guix-0.10.0
bbe8d8f0
LC
64 (package
65 (name "guix")
58f0aae5 66 (version "0.10.0")
bbe8d8f0
LC
67 (source (origin
68 (method url-fetch)
69 (uri (string-append "ftp://alpha.gnu.org/gnu/guix/guix-"
70 version ".tar.gz"))
71 (sha256
72 (base32
58f0aae5 73 "0d4afwy7bpqi4k4bzvwc4ga4shwssis1nrvdw53qjyg9bw1a8lbn"))))
bbe8d8f0
LC
74 (build-system gnu-build-system)
75 (arguments
76 `(#:configure-flags (list
2d195e67 77 "--localstatedir=/var"
202adef2 78 "--sysconfdir=/etc"
dd3a42e6
MW
79 (string-append "--with-bash-completion-dir="
80 (assoc-ref %outputs "out")
81 "/etc/bash_completion.d")
bbe8d8f0
LC
82 (string-append "--with-libgcrypt-prefix="
83 (assoc-ref %build-inputs
84 "libgcrypt")))
dc57d527 85 #:parallel-tests? #f ;work around <http://bugs.gnu.org/21097>
02c2cf43
LC
86 #:phases (modify-phases %standard-phases
87 (add-before
88 'configure 'copy-bootstrap-guile
89 (lambda* (#:key system inputs #:allow-other-keys)
90 (define (boot-guile-version arch)
91 (if (string=? "armhf" arch)
92 "2.0.11"
93 "2.0.9"))
39de700c 94
02c2cf43
LC
95 (define (copy arch)
96 (let ((guile (assoc-ref inputs
97 (string-append "boot-guile/"
98 arch)))
99 (target (string-append "gnu/packages/bootstrap/"
100 arch "-linux/"
101 "/guile-"
102 (boot-guile-version arch)
103 ".tar.xz")))
104 (copy-file guile target)))
bbe8d8f0 105
02c2cf43
LC
106 (copy "i686")
107 (copy "x86_64")
108 (copy "mips64el")
109 (copy "armhf")
932e7204 110 #t))
5d09263b
LC
111 (add-after
112 'unpack 'disable-container-tests
113 ;; XXX FIXME: These tests fail within the build container.
114 (lambda _
115 (substitute* "tests/syscalls.scm"
116 (("^\\(test-assert \"(clone|setns|pivot-root)\"" all)
117 (string-append "(test-skip 1)\n" all)))
118 (substitute* "tests/containers.scm"
119 (("^\\(test-assert" all)
120 (string-append "(test-skip 1)\n" all)))
dc57d527
LC
121 (when (file-exists? "tests/guix-environment-container.sh")
122 (substitute* "tests/guix-environment-container.sh"
123 (("guix environment --version")
124 "exit 77\n")))
5d09263b 125 #t))
dc57d527
LC
126 (add-before 'check 'set-SHELL
127 (lambda _
128 ;; 'guix environment' tests rely on 'SHELL' having a
129 ;; correct value, so set it.
130 (setenv "SHELL" (which "sh"))
131 #t))
932e7204
LC
132 (add-after
133 'install 'wrap-program
134 (lambda* (#:key inputs outputs #:allow-other-keys)
135 ;; Make sure the 'guix' command finds GnuTLS and
136 ;; Guile-JSON automatically.
137 (let* ((out (assoc-ref outputs "out"))
138 (json (assoc-ref inputs "guile-json"))
139 (gnutls (assoc-ref inputs "gnutls"))
140 (path (string-append
141 json "/share/guile/site/2.0:"
142 gnutls "/share/guile/site/2.0")))
143 (wrap-program (string-append out "/bin/guix")
144 `("GUILE_LOAD_PATH" ":" prefix (,path))
145 `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,path)))
146 #t))))))
b173d0e4 147 (native-inputs `(("pkg-config" ,pkg-config)
2d32d153 148 ("emacs" ,emacs-no-x))) ;for guix.el
bbe8d8f0
LC
149 (inputs
150 (let ((boot-guile (lambda (arch hash)
151 (origin
152 (method url-fetch)
39de700c 153 (uri (boot-guile-uri arch))
bbe8d8f0
LC
154 (sha256 hash)))))
155 `(("bzip2" ,bzip2)
2d195e67
LC
156 ("gzip" ,gzip)
157
bbe8d8f0
LC
158 ("sqlite" ,sqlite)
159 ("libgcrypt" ,libgcrypt)
160 ("guile" ,guile-2.0)
bbe8d8f0
LC
161
162 ("boot-guile/i686"
163 ,(boot-guile "i686"
164 (base32
8a43ff10 165 "0im800m30abgh7msh331pcbjvb4n02smz5cfzf1srv0kpx3csmxp")))
bbe8d8f0
LC
166 ("boot-guile/x86_64"
167 ,(boot-guile "x86_64"
168 (base32
8a43ff10
LC
169 "1w2p5zyrglzzniqgvyn1b55vprfzhgk8vzbzkkbdgl5248si0yq3")))
170 ("boot-guile/mips64el"
171 ,(boot-guile "mips64el"
172 (base32
39de700c
LC
173 "0fzp93lvi0hn54acc0fpvhc7bvl0yc853k62l958cihk03q80ilr")))
174 ("boot-guile/armhf"
175 ,(boot-guile "armhf"
176 (base32
177 "1mi3brl7l58aww34rawhvja84xc7l1b4hmwdmc36fp9q9mfx0lg5"))))))
f1082ec1 178 (propagated-inputs
45cbe390
TUBK
179 `(("gnutls" ,gnutls) ;for 'guix download' & co.
180 ("guile-json" ,guile-json)
f1082ec1
LC
181 ("geiser" ,geiser))) ;for guix.el
182
bbe8d8f0 183 (home-page "http://www.gnu.org/software/guix")
79c311b8 184 (synopsis "Functional package manager for installed software packages and versions")
bbe8d8f0 185 (description
79c311b8 186 "GNU Guix is a functional package manager for the GNU system, and is
c5779c93 187also a distribution thereof. It includes a virtual machine image. Besides
79c311b8 188the usual package management features, it also supports transactional
c5779c93
LC
189upgrades and roll-backs, per-user profiles, and much more. It is based on
190the Nix package manager.")
bbe8d8f0 191 (license gpl3+)))
30f25b03 192
3ad9a0b1 193(define guix-devel
480af4d6 194 ;; Development version of Guix.
1dccdb75 195 ;;
a2da8c17
LC
196 ;; Note: use a very short commit id; with a longer one, the limit on
197 ;; hash-bang lines would be exceeded while running the tests.
198 (let ((commit "dd21308225610e7adfcbd1bfa07f72a42d7c7c35"))
58f0aae5 199 (package (inherit guix-0.10.0)
a2da8c17 200 (version (string-append "0.9.0-1." (string-take commit 4)))
480af4d6
LC
201 (source (origin
202 (method git-fetch)
203 (uri (git-reference
204 (url "git://git.sv.gnu.org/guix.git")
2e69dd8c 205 (commit commit)))
480af4d6
LC
206 (sha256
207 (base32
a2da8c17 208 "1yxjmjjfw2n6hwidrbaawljca11pwzsvif2b02virs94xqdy9zww"))
e21adc76 209 (file-name (string-append "guix-" version "-checkout"))))
480af4d6 210 (arguments
58f0aae5 211 (substitute-keyword-arguments (package-arguments guix-0.10.0)
c56ab21b
LC
212 ((#:configure-flags flags)
213 ;; Set 'DOT_USER_PROGRAM' to the empty string so we don't keep a
214 ;; reference to Graphviz, whose closure is pretty big (too big for
215 ;; the GuixSD installation image.)
216 `(cons "ac_cv_path_DOT_USER_PROGRAM=dot" ,flags))
480af4d6 217 ((#:phases phases)
b93c1d9d
MW
218 `(modify-phases ,phases
219 (add-after
220 'unpack 'bootstrap
221 (lambda _
222 ;; Make sure 'msgmerge' can modify the PO files.
223 (for-each (lambda (po)
224 (chmod po #o666))
225 (find-files "." "\\.po$"))
480af4d6 226
34582b30 227 (zero? (system* "sh" "bootstrap"))))))))
480af4d6
LC
228 (native-inputs
229 `(("autoconf" ,(autoconf-wrapper))
230 ("automake" ,automake)
231 ("gettext" ,gnu-gettext)
232 ("texinfo" ,texinfo)
233 ("graphviz" ,graphviz)
e21adc76 234 ("help2man" ,help2man)
58f0aae5 235 ,@(package-native-inputs guix-0.10.0))))))
3ad9a0b1 236
f8c0c8e4 237(define-public guix guix-devel)
fcb0109d
LC
238
239(define-public nix
240 (package
241 (name "nix")
56f5f921 242 (version "1.11.2")
fcb0109d
LC
243 (source (origin
244 (method url-fetch)
245 (uri (string-append "http://nixos.org/releases/nix/nix-"
246 version "/nix-" version ".tar.xz"))
247 (sha256
248 (base32
56f5f921 249 "1mk9z75gklxcv6kzwwz1h5r2ci5kjy6bh7qwk4m5lf5v9s0k64pw"))))
fcb0109d
LC
250 (build-system gnu-build-system)
251 ;; XXX: Should we pass '--with-store-dir=/gnu/store'? But then we'd also
252 ;; need '--localstatedir=/var'. But then! The thing would use /var/nix
253 ;; instead of /var/guix. So in the end, we do nothing special.
9083788a
SB
254 (arguments
255 '(#:configure-flags
256 ;; Set the prefixes of Perl libraries to avoid propagation.
257 (let ((perl-libdir (lambda (p)
258 (string-append
259 (assoc-ref %build-inputs p)
260 "/lib/perl5/site_perl"))))
261 (list (string-append "--with-dbi="
262 (perl-libdir "perl-dbi"))
263 (string-append "--with-dbd-sqlite="
264 (perl-libdir "perl-dbd-sqlite"))
265 (string-append "--with-www-curl="
266 (perl-libdir "perl-www-curl"))))))
fcb0109d
LC
267 (native-inputs `(("perl" ,perl)
268 ("pkg-config" ,pkg-config)))
269 (inputs `(("curl" ,curl)
270 ("openssl" ,openssl)
271 ("libgc" ,libgc)
272 ("sqlite" ,sqlite)
9083788a
SB
273 ("bzip2" ,bzip2)
274 ("perl-www-curl" ,perl-www-curl)
275 ("perl-dbi" ,perl-dbi)
276 ("perl-dbd-sqlite" ,perl-dbd-sqlite)))
fcb0109d
LC
277 (home-page "http://nixos.org/nix/")
278 (synopsis "The Nix package manager")
279 (description
280 "Nix is a purely functional package manager. This means that it treats
281packages like values in purely functional programming languages such as
282Haskell—they are built by functions that don't have side-effects, and they
283never change after they have been built. Nix stores packages in the Nix
284store, usually the directory /nix/store, where each package has its own unique
285sub-directory.")
286 (license lgpl2.1+)))
8d422e25
RW
287
288(define-public stow
289 (package
290 (name "stow")
ddfd70da 291 (version "2.2.2")
8d422e25
RW
292 (source (origin
293 (method url-fetch)
294 (uri (string-append "mirror://gnu/stow/stow-"
295 version ".tar.gz"))
296 (sha256
297 (base32
ddfd70da 298 "1pvky9fayms4r6fhns8jd0vavszd7d979w62vfd5n88v614pdxz2"))))
8d422e25
RW
299 (build-system gnu-build-system)
300 (inputs
301 `(("perl" ,perl)))
302 (native-inputs
303 `(("perl-test-simple" ,perl-test-simple)
304 ("perl-test-output" ,perl-test-output)
ddfd70da
LC
305 ("perl-capture-tiny" ,perl-capture-tiny)
306 ("perl-io-stringy" ,perl-io-stringy)))
8d422e25
RW
307 (home-page "https://www.gnu.org/software/stow/")
308 (synopsis "Managing installed software packages")
309 (description
310 "GNU Stow is a symlink manager. It generates symlinks to directories
311of data and makes them appear to be merged into the same directory. It is
312typically used for managing software packages installed from source, by
313letting you install them apart in distinct directories and then create
314symlinks to the files in a common directory such as /usr/local.")
315 (license gpl2+)))
e3e1ecf6
LC
316
317(define-public rpm
318 (package
319 (name "rpm")
320 (version "4.12.0")
321 (source (origin
322 (method url-fetch)
323 (uri (string-append "http://rpm.org/releases/rpm-4.12.x/rpm-"
324 version ".tar.bz2"))
325 (sha256
326 (base32
327 "18hk47hc755nslvb7xkq4jb095z7va0nlcyxdpxayc4lmb8mq3bp"))))
328 (build-system gnu-build-system)
329 (arguments
330 '(#:configure-flags '("--with-external-db" ;use the system's bdb
331 "--enable-python"
332 "--without-lua")
333 #:phases (modify-phases %standard-phases
334 (add-before 'configure 'set-nspr-search-path
335 (lambda* (#:key inputs #:allow-other-keys)
336 ;; nspr.pc contains the right -I flag pointing to
337 ;; 'include/nspr', but unfortunately 'configure' doesn't
338 ;; use 'pkg-config'. Thus, augment CPATH.
339 ;; Likewise for NSS.
340 (let ((nspr (assoc-ref inputs "nspr"))
341 (nss (assoc-ref inputs "nss")))
342 (setenv "CPATH"
e8e2e18b 343 (string-append (getenv "C_INCLUDE_PATH") ":"
e3e1ecf6
LC
344 nspr "/include/nspr:"
345 nss "/include/nss"))
346 (setenv "LIBRARY_PATH"
347 (string-append (getenv "LIBRARY_PATH") ":"
348 nss "/lib/nss"))
349 #t)))
350 (add-after 'install 'fix-rpm-symlinks
351 (lambda* (#:key outputs #:allow-other-keys)
352 ;; 'make install' gets these symlinks wrong. Fix them.
353 (let* ((out (assoc-ref outputs "out"))
354 (bin (string-append out "/bin")))
355 (with-directory-excursion bin
356 (for-each (lambda (file)
357 (delete-file file)
358 (symlink "rpm" file))
359 '("rpmquery" "rpmverify"))
360 #t)))))))
361 (native-inputs
362 `(("pkg-config" ,pkg-config)))
363 (inputs
364 `(("python" ,python-2)
365 ("xz" ,xz)
366 ("bdb" ,bdb)
367 ("popt" ,popt)
368 ("nss" ,nss)
369 ("nspr" ,nspr)
370 ("libarchive" ,libarchive)
371 ("nettle" ,nettle) ;XXX: actually a dependency of libarchive
372 ("file" ,file)
373 ("bzip2" ,bzip2)
374 ("zlib" ,zlib)
375 ("cpio" ,cpio)))
376 (home-page "http://www.rpm.org/")
377 (synopsis "The RPM Package Manager")
378 (description
379 "The RPM Package Manager (RPM) is a command-line driven package
380management system capable of installing, uninstalling, verifying, querying,
381and updating computer software packages. Each software package consists of an
382archive of files along with information about the package like its version, a
383description. There is also a library permitting developers to manage such
384transactions from C or Python.")
385
386 ;; The whole is GPLv2+; librpm itself is dual-licensed LGPLv2+ | GPLv2+.
387 (license gpl2+)))
388
08dcff47
LC
389(define-public diffoscope
390 (package
391 (name "diffoscope")
15bdd91c 392 (version "51")
08dcff47 393 (source (origin
7dd21101
LF
394 (method url-fetch)
395 (uri (pypi-uri name version))
08dcff47
LC
396 (sha256
397 (base32
15bdd91c 398 "18rn6rrwh586228vnaf1nq0wayh19zbvfc0qmnbys6ln2pv2v007"))))
08dcff47
LC
399 (build-system python-build-system)
400 (arguments
7dd21101
LF
401 `(#:phases (modify-phases %standard-phases
402 ;; setup.py mistakenly requires python-magic from PyPi, even
403 ;; though the Python bindings of `file` are sufficient.
404 ;; https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815844
405 (add-after 'unpack 'dependency-on-python-magic
406 (lambda _
407 (substitute* "setup.py"
408 (("'python-magic',") ""))))
08dcff47
LC
409 (add-before 'build 'disable-egg-zipping
410 (lambda _
411 ;; Leave the .egg file uncompressed.
412 (let ((port (open-file "setup.cfg" "a")))
413 (display "\n[easy_install]\nzip_ok = 0\n"
414 port)
415 (close-port port)
7dd21101 416 #t))))))
08dcff47 417 (inputs `(("rpm" ,rpm) ;for rpm-python
7dd21101
LF
418 ("python-file" ,python-file)
419 ("python-debian" ,python-debian)
420 ("python-libarchive-c" ,python-libarchive-c)
421 ("python-tlsh" ,python-tlsh)
08dcff47
LC
422
423 ;; Below are modules used for tests.
7dd21101
LF
424 ("python-pytest" ,python-pytest)
425 ("python-chardet" ,python-chardet)))
08dcff47
LC
426 (home-page "http://diffoscope.org/")
427 (synopsis "Compare files, archives, and directories in depth")
428 (description
429 "Diffoscope tries to get to the bottom of what makes files or directories
430different. It recursively unpacks archives of many kinds and transforms
431various binary formats into more human readable forms to compare them. It can
432compare two tarballs, ISO images, or PDFs just as easily.")
433 (license gpl3+)))