summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/build/linux-modules.scm169
-rw-r--r--gnu/local.mk13
-rw-r--r--gnu/packages/abiword.scm2
-rw-r--r--gnu/packages/accessibility.scm9
-rw-r--r--gnu/packages/admin.scm5
-rw-r--r--gnu/packages/algebra.scm103
-rw-r--r--gnu/packages/animation.scm1
-rw-r--r--gnu/packages/audio.scm11
-rw-r--r--gnu/packages/base.scm11
-rw-r--r--gnu/packages/bioconductor.scm42
-rw-r--r--gnu/packages/bioinformatics.scm866
-rw-r--r--gnu/packages/boost.scm14
-rw-r--r--gnu/packages/cmake.scm59
-rw-r--r--gnu/packages/code.scm25
-rw-r--r--gnu/packages/compression.scm45
-rw-r--r--gnu/packages/conky.scm4
-rw-r--r--gnu/packages/cran.scm529
-rw-r--r--gnu/packages/crypto.scm11
-rw-r--r--gnu/packages/curl.scm1
-rw-r--r--gnu/packages/databases.scm78
-rw-r--r--gnu/packages/debug.scm4
-rw-r--r--gnu/packages/dictionaries.scm17
-rw-r--r--gnu/packages/django.scm4
-rw-r--r--gnu/packages/emacs.scm56
-rw-r--r--gnu/packages/enlightenment.scm8
-rw-r--r--gnu/packages/file-systems.scm1
-rw-r--r--gnu/packages/firmware.scm52
-rw-r--r--gnu/packages/games.scm3
-rw-r--r--gnu/packages/gnuzilla.scm133
-rw-r--r--gnu/packages/golang.scm3
-rw-r--r--gnu/packages/graph.scm29
-rw-r--r--gnu/packages/haskell.scm10
-rw-r--r--gnu/packages/image-viewers.scm4
-rw-r--r--gnu/packages/inkscape.scm5
-rw-r--r--gnu/packages/irc.scm14
-rw-r--r--gnu/packages/java.scm491
-rw-r--r--gnu/packages/libftdi.scm2
-rw-r--r--gnu/packages/linux.scm34
-rw-r--r--gnu/packages/mail.scm4
-rw-r--r--gnu/packages/monitoring.scm5
-rw-r--r--gnu/packages/music.scm28
-rw-r--r--gnu/packages/networking.scm50
-rw-r--r--gnu/packages/ntp.scm13
-rw-r--r--gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch35
-rw-r--r--gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch35
-rw-r--r--gnu/packages/patches/ceph-disable-cpu-optimizations.patch64
-rw-r--r--gnu/packages/patches/ceph-disable-unittest-throttle.patch52
-rw-r--r--gnu/packages/patches/ceph-rocksdb-compat.patch63
-rw-r--r--gnu/packages/patches/gd-CVE-2018-5711.patch61
-rw-r--r--gnu/packages/patches/glibc-allow-kernel-2.6.32.patch39
-rw-r--r--gnu/packages/patches/icecat-bug-1348660-pt5.patch727
-rw-r--r--gnu/packages/patches/icecat-bug-1414945.patch73
-rw-r--r--gnu/packages/patches/icecat-bug-1415133.patch40
-rw-r--r--gnu/packages/patches/icecat-bug-1424373-pt2.patch183
-rw-r--r--gnu/packages/perl-check.scm4
-rw-r--r--gnu/packages/perl.scm8
-rw-r--r--gnu/packages/php.scm22
-rw-r--r--gnu/packages/pretty-print.scm14
-rw-r--r--gnu/packages/profiling.scm34
-rw-r--r--gnu/packages/python-web.scm60
-rw-r--r--gnu/packages/python.scm21
-rw-r--r--gnu/packages/qt.scm2
-rw-r--r--gnu/packages/regex.scm4
-rw-r--r--gnu/packages/ruby.scm258
-rw-r--r--gnu/packages/sdcc.scm11
-rw-r--r--gnu/packages/sdl.scm4
-rw-r--r--gnu/packages/search.scm4
-rw-r--r--gnu/packages/statistics.scm99
-rw-r--r--gnu/packages/storage.scm42
-rw-r--r--gnu/packages/suckless.scm4
-rw-r--r--gnu/packages/syncthing.scm226
-rw-r--r--gnu/packages/tex.scm41
-rw-r--r--gnu/packages/textutils.scm8
-rw-r--r--gnu/packages/tor.scm11
-rw-r--r--gnu/packages/version-control.scm22
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/vpn.scm9
-rw-r--r--gnu/packages/web.scm20
-rw-r--r--gnu/packages/wv.scm12
-rw-r--r--gnu/packages/xml.scm12
-rw-r--r--gnu/packages/xorg.scm12
-rw-r--r--gnu/services/configuration.scm17
-rw-r--r--gnu/services/databases.scm15
-rw-r--r--gnu/services/messaging.scm106
-rw-r--r--gnu/services/networking.scm102
-rw-r--r--gnu/system.scm7
-rw-r--r--gnu/system/examples/beaglebone-black.tmpl9
-rw-r--r--gnu/system/install.scm7
-rw-r--r--gnu/system/linux-initrd.scm118
-rw-r--r--gnu/system/mapped-devices.scm53
-rw-r--r--gnu/system/vm.scm10
-rw-r--r--gnu/tests/install.scm11
92 files changed, 3744 insertions, 2019 deletions
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index 115a17c64e..4fe673cca2 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -19,6 +19,7 @@
 
 (define-module (gnu build linux-modules)
   #:use-module (guix elf)
+  #:use-module (guix glob)
   #:use-module (guix build syscalls)
   #:use-module (rnrs io ports)
   #:use-module (rnrs bytevectors)
@@ -26,15 +27,21 @@
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 rdelim)
   #:export (dot-ko
             ensure-dot-ko
+            module-aliases
             module-dependencies
             recursive-module-dependencies
             modules-loaded
             module-loaded?
             load-linux-module*
 
-            current-module-debugging-port))
+            current-module-debugging-port
+
+            device-module-aliases
+            known-module-aliases
+            matching-modules))
 
 ;;; Commentary:
 ;;;
@@ -89,6 +96,15 @@ contains module names, not actual file names."
       (('depends . what)
        (string-tokenize what %not-comma)))))
 
+(define (module-aliases file)
+  "Return the list of aliases of module FILE."
+  (let ((info (modinfo-section-contents file)))
+    (filter-map (match-lambda
+                 (('alias . value)
+                  value)
+                 (_ #f))
+                (modinfo-section-contents file))))
+
 (define dot-ko
   (cut string-append <> ".ko"))
 
@@ -213,4 +229,155 @@ appears in BLACK-LIST are not loaded."
              (or (and recursive? (= EEXIST (system-error-errno args)))
                  (apply throw args)))))))
 
+
+;;;
+;;; Device modules.
+;;;
+
+;; Copied from (guix utils).  FIXME: Factorize.
+(define (readlink* file)
+  "Call 'readlink' until the result is not a symlink."
+  (define %max-symlink-depth 50)
+
+  (let loop ((file  file)
+             (depth 0))
+    (define (absolute target)
+      (if (absolute-file-name? target)
+          target
+          (string-append (dirname file) "/" target)))
+
+    (if (>= depth %max-symlink-depth)
+        file
+        (call-with-values
+            (lambda ()
+              (catch 'system-error
+                (lambda ()
+                  (values #t (readlink file)))
+                (lambda args
+                  (let ((errno (system-error-errno args)))
+                    (if (or (= errno EINVAL))
+                        (values #f file)
+                        (apply throw args))))))
+          (lambda (success? target)
+            (if success?
+                (loop (absolute target) (+ depth 1))
+                file))))))
+
+;; See 'major' and 'minor' in <sys/sysmacros.h>.
+
+(define (stat->device-major st)
+  (ash (logand #xfff00 (stat:rdev st)) -8))
+
+(define (stat->device-minor st)
+  (logand #xff (stat:rdev st)))
+
+(define %not-slash
+  (char-set-complement (char-set #\/)))
+
+(define (read-uevent port)
+  "Read a /sys 'uevent' file from PORT and return an alist where each car is a
+key such as 'MAJOR or 'DEVTYPE and each cdr is the corresponding value."
+  (let loop ((result '()))
+    (match (read-line port)
+      ((? eof-object?)
+       (reverse result))
+      (line
+       (loop (cons (key=value->pair line) result))))))
+
+(define (device-module-aliases device)
+  "Return the list of module aliases required by DEVICE, a /dev file name, as
+in this example:
+
+  (device-module-aliases \"/dev/sda\")
+  => (\"scsi:t-0x00\" \"pci:v00008086d00009D03sv0000103Csd000080FAbc01sc06i01\")
+
+The modules corresponding to these aliases can then be found using
+'matching-modules'."
+  ;; The approach is adapted from
+  ;; <https://unix.stackexchange.com/questions/97676/how-to-find-the-driver-module-associated-with-a-device-on-linux>.
+  (let* ((st        (stat device))
+         (type      (stat:type st))
+         (major     (stat->device-major st))
+         (minor     (stat->device-minor st))
+         (sys-name  (string-append "/sys/dev/"
+                                   (case type
+                                     ((block-special) "block")
+                                     ((char-special)  "char")
+                                     (else (symbol->string type)))
+                                   "/" (number->string major) ":"
+                                   (number->string minor)))
+         (directory (canonicalize-path (readlink* sys-name))))
+    (let loop ((components (string-tokenize directory %not-slash))
+               (aliases    '()))
+      (match components
+        (("sys" "devices" _)
+         (reverse aliases))
+        ((head ... _)
+         (let ((uevent (string-append (string-join components "/" 'prefix)
+                                      "/uevent")))
+           (if (file-exists? uevent)
+               (let ((props (call-with-input-file uevent read-uevent)))
+                 (match (assq-ref props 'MODALIAS)
+                   (#f    (loop head aliases))
+                   (alias (loop head (cons alias aliases)))))
+               (loop head aliases))))))))
+
+(define (read-module-aliases port)
+  "Read from PORT data in the Linux 'modules.alias' file format.  Return a
+list of alias/module pairs where each alias is a glob pattern as like the
+result of:
+
+  (compile-glob-pattern \"scsi:t-0x01*\")
+
+and each module is a module name like \"snd_hda_intel\"."
+  (define (comment? str)
+    (string-prefix? "#" str))
+
+  (define (tokenize str)
+    ;; Lines have the form "alias ALIAS MODULE", where ALIAS can contain
+    ;; whitespace.  This is why we don't use 'string-tokenize'.
+    (let* ((str   (string-trim-both str))
+           (left  (string-index str #\space))
+           (right (string-rindex str #\space)))
+      (list (string-take str left)
+            (string-trim-both (substring str left right))
+            (string-trim-both (string-drop str right)))))
+
+  (let loop ((aliases '()))
+    (match (read-line port)
+      ((? eof-object?)
+       (reverse aliases))
+      ((? comment?)
+       (loop aliases))
+      (line
+       (match (tokenize line)
+         (("alias" alias module)
+          (loop (alist-cons (compile-glob-pattern alias) module
+                            aliases)))
+         (()                                      ;empty line
+          (loop aliases)))))))
+
+(define (current-alias-file)
+  "Return the absolute file name of the default 'modules.alias' file."
+  (string-append (or (getenv "LINUX_MODULE_DIRECTORY")
+                     "/run/booted-system/kernel/lib/modules")
+                 "/" (utsname:release (uname))
+                 "/" "modules.alias"))
+
+(define* (known-module-aliases #:optional (alias-file (current-alias-file)))
+  "Return the list of alias/module pairs read from ALIAS-FILE.  Each alias is
+actually a pattern."
+  (call-with-input-file alias-file read-module-aliases))
+
+(define* (matching-modules alias
+                           #:optional (known-aliases (known-module-aliases)))
+  "Return the list of modules that match ALIAS according to KNOWN-ALIASES.
+ALIAS is a string like \"scsi:t-0x00\" as returned by
+'device-module-aliases'."
+  (filter-map (match-lambda
+                ((pattern . module)
+                 (and (glob-match? pattern alias)
+                      module)))
+              known-aliases))
+
 ;;; linux-modules.scm ends here
diff --git a/gnu/local.mk b/gnu/local.mk
index c3f28da6dd..ea9c5da0cc 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -7,7 +7,7 @@
 # Copyright © 2016, 2017, 2018 Kei Kebreau <kkebreau@posteo.net>
 # Copyright © 2016, 2017 Rene Saavedra <rennes@openmailbox.org>
 # Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
-# Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+# Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 # Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 # Copyright © 2016, 2017, 2018 Alex Vong <alexvong1995@gmail.com>
 # Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
@@ -76,6 +76,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/bash.scm				\
   %D%/packages/bdw-gc.scm			\
   %D%/packages/benchmark.scm			\
+  %D%/packages/bioconductor.scm			\
   %D%/packages/bioinformatics.scm		\
   %D%/packages/bittorrent.scm			\
   %D%/packages/bison.scm			\
@@ -552,6 +553,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/agg-am_c_prototype.patch			\
   %D%/packages/patches/ansible-wrap-program-hack.patch		\
   %D%/packages/patches/antiword-CVE-2014-8123.patch			\
+  %D%/packages/patches/antlr3-3_1-fix-java8-compilation.patch	\
+  %D%/packages/patches/antlr3-3_3-fix-java8-compilation.patch	\
   %D%/packages/patches/ao-cad-aarch64-support.patch		\
   %D%/packages/patches/apr-skip-getservbyname-test.patch	\
   %D%/packages/patches/aspell-default-dict-dir.patch		\
@@ -578,7 +581,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/cdparanoia-fpic.patch			\
   %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch 	\
   %D%/packages/patches/ceph-disable-cpu-optimizations.patch	\
-  %D%/packages/patches/ceph-disable-unittest-throttle.patch	\
+  %D%/packages/patches/ceph-rocksdb-compat.patch		\
   %D%/packages/patches/ceph-skip-collect-sys-info-test.patch	\
   %D%/packages/patches/ceph-skip-unittest_blockdev.patch	\
   %D%/packages/patches/chmlib-inttypes.patch			\
@@ -681,6 +684,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gcc-6-source-date-epoch-2.patch		\
   %D%/packages/patches/gcr-disable-failing-tests.patch		\
   %D%/packages/patches/gcr-fix-collection-tests-to-work-with-gpg-21.patch	\
+  %D%/packages/patches/gd-CVE-2018-5711.patch			\
   %D%/packages/patches/gd-fix-tests-on-i686.patch		\
   %D%/packages/patches/gd-freetype-test-failure.patch		\
   %D%/packages/patches/gegl-CVE-2012-4433.patch			\
@@ -708,6 +712,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt1.patch		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt2.patch		\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt3.patch		\
+  %D%/packages/patches/glibc-allow-kernel-2.6.32.patch		\
   %D%/packages/patches/glibc-bootstrap-system.patch		\
   %D%/packages/patches/glibc-ldd-x86_64.patch			\
   %D%/packages/patches/glibc-locales.patch			\
@@ -771,10 +776,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/hwloc-tests-without-sysfs.patch		\
   %D%/packages/patches/hydra-disable-darcs-test.patch		\
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
-  %D%/packages/patches/icecat-bug-1348660-pt5.patch		\
-  %D%/packages/patches/icecat-bug-1415133.patch			\
-  %D%/packages/patches/icecat-bug-1414945.patch			\
-  %D%/packages/patches/icecat-bug-1424373-pt2.patch		\
   %D%/packages/patches/icecat-use-system-graphite2.patch	\
   %D%/packages/patches/icecat-use-system-harfbuzz.patch		\
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
diff --git a/gnu/packages/abiword.scm b/gnu/packages/abiword.scm
index b00dac9a63..cf906c6ea4 100644
--- a/gnu/packages/abiword.scm
+++ b/gnu/packages/abiword.scm
@@ -82,7 +82,7 @@
         ;; the tests to pass.
         #:tests? #f
         #:make-flags
-        (list "CXXFLAGS=-std=c++11")))
+        (list "CXXFLAGS=-std=c++11" "gtk_update_icon_cache=true")))
     (inputs
       `(("boost" ,boost)
         ("enchant" ,enchant)
diff --git a/gnu/packages/accessibility.scm b/gnu/packages/accessibility.scm
index 2ca4e27f81..f2cbfc480b 100644
--- a/gnu/packages/accessibility.scm
+++ b/gnu/packages/accessibility.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 ng0 <ng0@infotropique.org>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -82,10 +83,11 @@ available to help to click.")
     (license license:gpl2+)))
 
 (define-public footswitch
-  (let ((commit "7cb0a9333a150c27c7e4746ee827765d244e567a"))
+  (let ((commit "deedd87fd90fad90ce342aeabafd4a3198d7d3d4")
+        (revision "2"))
     (package
       (name "footswitch")
-      (version (git-version "0.1" "1" commit))
+      (version (git-version "0.1" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -93,7 +95,7 @@ available to help to click.")
                       (commit commit)))
                 (file-name (git-file-name name version))
                 (sha256
-                 (base32 "0mg1vr4a9vls5y435w7wdnr1vb5059gy60lvrdfjgzhd2wwf47iw"))))
+                 (base32 "1ys90wqyz62kffa8m3hgaq1dl7f29x3mrc3zqfjrkbn2ps0k6ps0"))))
       (build-system gnu-build-system)
       (native-inputs
        `(("pkg-config" ,pkg-config)))
@@ -109,7 +111,6 @@ available to help to click.")
                       (lambda* (#:key outputs #:allow-other-keys)
                         (let ((bin (string-append (assoc-ref outputs "out")
                                                   "/bin")))
-                          (mkdir-p bin)
                           (install-file "footswitch" bin)
                           #t))))))
       (home-page "https://github.com/rgerganov/footswitch")
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 80cf8c391c..78b7b64dd1 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -610,14 +610,14 @@ connection alive.")
                                       bind-release-version)))
     (package
       (name "isc-dhcp")
-      (version "4.3.6")
+      (version "4.3.6-P1")
       (source (origin
                 (method url-fetch)
                 (uri (string-append "http://ftp.isc.org/isc/dhcp/"
                                     version "/dhcp-" version ".tar.gz"))
                 (sha256
                  (base32
-                  "06vgxhm6agzkp6r1jy10467vrfw2rzcp2mnkcph7ydziciisy7m4"))))
+                  "1hx3az6ckvgvybr1ag4k9kqr8zfcpzcww4vpw5gz0mi8y2z7gl9g"))))
       (build-system gnu-build-system)
       (arguments
        `(#:parallel-build? #f
@@ -2433,6 +2433,7 @@ on systems running the Linux kernel.")
               (method url-fetch)
               (uri (string-append "https://github.com/robertdavidgraham/masscan"
                                   "/archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
                 "1y9af345g00z83rliv6bmlqg37xwc7xpnx5xqdgmjikzcxgk9pji"))))
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 2bc8431033..2aa1777db3 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -35,6 +35,7 @@
   #:use-module (gnu packages gl)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages java)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages multiprecision)
@@ -46,9 +47,11 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix utils))
@@ -612,6 +615,104 @@ cosine/ sine transforms or DCT/DST).")
     (synopsis "Computing the discrete Fourier transform (AVX2-optimized)")
     (supported-systems '("x86_64-linux"))))
 
+(define-public java-la4j
+  (package
+    (name "java-la4j")
+    (version "0.6.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/vkostyukov/la4j.git")
+                    (commit version)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1qir8dr978cfvz9k12m2kbdwpyf6cqdf1d0ilb7lnkhbgq5i53w3"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "la4j.jar"
+       #:jdk ,icedtea-8
+       #:test-exclude (list "**/Abstract*.java"
+                            "**/MatrixTest.java"
+                            "**/DenseMatrixTest.java"
+                            "**/SparseMatrixTest.java"
+                            "**/VectorTest.java"
+                            "**/SparseVectorTest.java"
+                            "**/DenseVectorTest.java")))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://la4j.org/")
+    (synopsis "Java library that provides Linear Algebra primitives and algorithms")
+    (description "The la4j library is a Java library that provides Linear
+Algebra primitives (matrices and vectors) and algorithms.  The key features of
+the la4j library are:
+
+@itemize
+@item No dependencies and tiny size
+@item Fluent object-oriented/functional API
+@item Sparse (CRS, CCS) and dense (1D/2D arrays) matrices
+@item Linear systems solving (Gaussian, Jacobi, Zeidel, Square Root, Sweep and other)
+@item Matrices decomposition (Eigenvalues/Eigenvectors, SVD, QR, LU, Cholesky and other)
+@item MatrixMarket/CSV IO formats support for matrices and vectors
+@end itemize\n")
+    (license license:asl2.0)))
+
+(define-public java-jlargearrays
+  (package
+    (name "java-jlargearrays")
+    (version "1.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://search.maven.org/remotecontent?"
+                                  "filepath=pl/edu/icm/JLargeArrays/"
+                                  version "/JLargeArrays-" version
+                                  "-sources.jar"))
+              (file-name (string-append name "-" version ".jar"))
+              (sha256
+               (base32
+                "0v05iphpxbjnd7f4jf1rlqq3m8hslhcm0imdbsgxr20pi3xkaf2a"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "jlargearrays.jar"
+       #:tests? #f ; tests are not included in the release archive
+       #:jdk ,icedtea-8))
+    (propagated-inputs
+     `(("java-commons-math3" ,java-commons-math3)))
+    (home-page "https://gitlab.com/ICM-VisLab/JLargeArrays")
+    (synopsis "Library of one-dimensional arrays that can store up to 263 elements")
+    (description "JLargeArrays is a Java library of one-dimensional arrays
+that can store up to 263 elements.")
+    (license license:bsd-2)))
+
+(define-public java-jtransforms
+  (package
+    (name "java-jtransforms")
+    (version "3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://search.maven.org/remotecontent?"
+                                  "filepath=com/github/wendykierp/JTransforms/"
+                                  version "/JTransforms-" version "-sources.jar"))
+              (sha256
+               (base32
+                "1haw5m8shv5srgcpwkl853dz8bv6h90bzlhcps6mdpb4cixjirsg"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "jtransforms.jar"
+       #:tests? #f ; tests are not included in the release archive
+       #:jdk ,icedtea-8))
+    (propagated-inputs
+     `(("java-commons-math3" ,java-commons-math3)
+       ("java-jlargearrays" ,java-jlargearrays)))
+    (home-page "https://github.com/wendykierp/JTransforms")
+    (synopsis "Multithreaded FFT library written in pure Java")
+    (description "JTransforms is a multithreaded FFT library written in pure
+Java.  Currently, four types of transforms are available: @dfn{Discrete
+Fourier Transform} (DFT), @dfn{Discrete Cosine Transform} (DCT), @dfn{Discrete
+Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
+    (license license:bsd-2)))
+
 (define-public eigen
   (package
     (name "eigen")
diff --git a/gnu/packages/animation.scm b/gnu/packages/animation.scm
index 952d3bab0d..b56a081984 100644
--- a/gnu/packages/animation.scm
+++ b/gnu/packages/animation.scm
@@ -200,6 +200,7 @@ contains the graphical user interface for synfig.")
                 (uri (git-reference
                       (url "https://github.com/LostMoho/Papagayo.git")
                       (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "1p9gffjhbph34jhrvgpg93yha75bf88vkvlnk06x1r9601ph5321"))
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 1cf6441df0..d8569096ab 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1155,6 +1155,7 @@ PS, and DAB+.")
                                            (string-map (lambda (c)
                                                          (if (char=? c #\.) #\- c))
                                                        version)))))
+              (file-name (string-append "faust-" version "-checkout"))
               (sha256
                (base32
                 "06km0ygwxxwgw1lqldccqidxhmjfz8ck0wnbd95qk5sg8sbpc068"))))
@@ -1628,14 +1629,14 @@ essential distortions.")
 (define-public liblo
   (package
     (name "liblo")
-    (version "0.28")
+    (version "0.29")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/liblo/liblo/" version
                                  "/liblo-" version ".tar.gz"))
              (sha256
               (base32
-               "02drgnpirvl2ihvzgsmn02agr5sj3vipzzw9vma56qlkgfvak56s"))))
+               "0sn0ckc1d0845mhsaa62wf7f9v0c0ykiq796a30ja5096kib9qdc"))))
     (build-system gnu-build-system)
     (arguments
      `(;; liblo test FAILED
@@ -1645,7 +1646,7 @@ essential distortions.")
     (synopsis "Implementation of the Open Sound Control protocol")
     (description
      "liblo is a lightweight library that provides an easy to use
-implementation of the Open Sound Control (OSC) protocol.")
+implementation of the Open Sound Control (@dfn{OSC}) protocol.")
     (license license:lgpl2.1+)))
 
 (define-public python-pyaudio
@@ -1783,6 +1784,7 @@ software.")
                 (uri (git-reference
                       (url "http://lv2plug.in/git/lv2.git")
                       (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "1gp2rd99dfmpibvpixrqn115mrhybzf3if3h8bssf6siyi13f29r")))))))
@@ -1796,6 +1798,7 @@ software.")
               (uri (git-reference
                     (url "http://git.elephly.net/software/lv2-mdametapiano.git")
                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "07lywf6lpfpndg3i9w752mmlg2hgn1bwp23h8b0mdj6awh67abqd"))))
@@ -2024,6 +2027,7 @@ into various outputs and to start, stop and configure jackd")
               (uri (git-reference
                     (url "https://github.com/orouits/qjackrcd.git")
                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "1l5iq2mkqd4gn9yr8xbh9qlpp1clcflazychl4vhdbz0bzq4c6al"))))
@@ -2103,6 +2107,7 @@ aimed at audio/musical applications.")
                (string-append "https://bitbucket.org/breakfastquay/rubberband/get/v"
                               version
                               ".tar.bz2"))
+              (file-name (string-append name "-" version ".tar.bz2"))
               (sha256
                (base32
                 "05amrbrxx0da3w7m237q51799r8xgs4ffqabi2qv06hq8dpcj386"))))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index b6c6dabae1..72dd9f8e13 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -537,6 +538,7 @@ store.")
    ;; Note: Always use a dot after the minor version since various places rely
    ;; on "version-major+minor" to determine where locales are found.
    (version "2.26.105-g0890d5379c")
+   (replacement glibc-2.26-patched)
    (source (origin
             (method url-fetch)
             (uri (string-append "https://alpha.gnu.org/gnu/guix/mirror/"
@@ -839,6 +841,15 @@ GLIBC/HURD for a Hurd host"
 ;; Below are old libc versions, which we use mostly to build locale data in
 ;; the old format (which the new libc cannot cope with.)
 
+(define glibc-2.26-patched
+  (package
+    (inherit glibc)
+    (replacement #f)
+    (source (origin
+              (inherit (package-source glibc))
+              (patches (cons (search-patch "glibc-allow-kernel-2.6.32.patch")
+                             (origin-patches (package-source glibc))))))))
+
 (define-public glibc-2.25
   (package
     (inherit glibc)
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
new file mode 100644
index 0000000000..f557dce8e5
--- /dev/null
+++ b/gnu/packages/bioconductor.scm
@@ -0,0 +1,42 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages bioconductor)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system r)
+  #:use-module (gnu packages))
+
+(define-public r-hpar
+  (package
+    (name "r-hpar")
+    (version "1.20.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "hpar" version))
+       (sha256
+        (base32
+         "0s5v79mgxdx862v1jrdf5pdap81nz5vjx25ni8s3sl97ldckf6j8"))))
+    (build-system r-build-system)
+    (home-page "https://bioconductor.org/packages/hpar/")
+    (synopsis "Human Protein Atlas in R")
+    (description "This package provides a simple interface to and data from
+the Human Protein Atlas project.")
+    (license license:artistic2.0)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index c427a6d036..546b240f84 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -1854,38 +1854,22 @@ file formats including SAM/BAM, Wiggle/BigWig, BED, GFF/GTF, VCF.")
 (define-public cutadapt
   (package
     (name "cutadapt")
-    (version "1.14")
+    (version "1.16")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/marcelm/cutadapt/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/marcelm/cutadapt.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "16gbpiwy4m48vq2h5wqar3i8vr6vcj9gcl2qvqim19x6ya9dp8kd"))))
+                "09pr02067jiks19nc0aby4xp70hhgvb554i2y1c04rv1m401w7q8"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         ;; The tests must be run after installation.
-         (delete 'check)
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (assoc-ref outputs "out")
-                      "/lib/python"
-                      (string-take (string-take-right
-                                    (assoc-ref inputs "python") 5) 3)
-                      "/site-packages"))
-             (zero? (system* "nosetests" "-P" "tests")))))))
     (inputs
      `(("python-xopen" ,python-xopen)))
     (native-inputs
      `(("python-cython" ,python-cython)
-       ("python-nose" ,python-nose)))
+       ("python-pytest" ,python-pytest)))
     (home-page "https://cutadapt.readthedocs.io/en/stable/")
     (synopsis "Remove adapter sequences from nucleotide sequencing reads")
     (description
@@ -3019,6 +3003,76 @@ sequencing (HTS) data.  There are also an number of useful utilities for
 manipulating HTS data.")
     (license license:expat)))
 
+(define-public java-htsjdk-latest
+  (package
+    (name "java-htsjdk")
+    (version "2.14.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/samtools/htsjdk.git")
+                    (commit version)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1lmya1fdjy03mz6zmdmd86j9v9vfhqb3952mqq075navx1i6g4bc"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f                      ; test require Scala
+       #:jdk ,icedtea-8
+       #:jar-name "htsjdk.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-useless-build.xml
+           (lambda _ (delete-file "build.xml") #t))
+         ;; The tests require the scalatest package.
+         (add-after 'unpack 'remove-tests
+           (lambda _ (delete-file-recursively "src/test") #t)))))
+    (inputs
+     `(("java-ngs" ,java-ngs)
+       ("java-snappy-1" ,java-snappy-1)
+       ("java-commons-compress" ,java-commons-compress)
+       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ("java-commons-jexl-2" ,java-commons-jexl-2)
+       ("java-xz" ,java-xz)))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://samtools.github.io/htsjdk/")
+    (synopsis "Java API for high-throughput sequencing data (HTS) formats")
+    (description
+     "HTSJDK is an implementation of a unified Java library for accessing
+common file formats, such as SAM and VCF, used for high-throughput
+sequencing (HTS) data.  There are also an number of useful utilities for
+manipulating HTS data.")
+    (license license:expat)))
+
+;; This is needed for picard 2.10.3
+(define-public java-htsjdk-2.10.1
+  (package (inherit java-htsjdk-latest)
+    (name "java-htsjdk")
+    (version "2.10.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/samtools/htsjdk.git")
+                    (commit version)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1kxh7slm2pm3x9p6jxa1wqsq9a31dhiiflhxnxqcisan4k3rwia2"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f                      ; tests require Scala
+       #:jdk ,icedtea-8
+       #:jar-name "htsjdk.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-useless-build.xml
+           (lambda _ (delete-file "build.xml") #t))
+         ;; The tests require the scalatest package.
+         (add-after 'unpack 'remove-tests
+           (lambda _ (delete-file-recursively "src/test") #t)))))))
+
 ;; This version matches java-htsjdk 2.3.0.  Later versions also require a more
 ;; recent version of java-htsjdk, which depends on gradle.
 (define-public java-picard
@@ -3097,6 +3151,90 @@ commonly used for high-throughput sequencing data such as SAM, BAM, CRAM and
 VCF.")
     (license license:expat)))
 
+;; This is needed for dropseq-tools
+(define-public java-picard-2.10.3
+  (package
+    (name "java-picard")
+    (version "2.10.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/broadinstitute/picard.git")
+                    (commit version)))
+              (file-name (string-append "java-picard-" version "-checkout"))
+              (sha256
+               (base32
+                "1ajlx31l6i1k3y2rhnmgq07sz99g2czqfqgkr9mihmdjp3gwjhvi"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "picard.jar"
+       ;; Tests require jacoco:coverage.
+       #:tests? #f
+       #:jdk ,icedtea-8
+       #:main-class "picard.cmdline.PicardCommandLine"
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (guix build java-utils)
+                  (sxml simple)
+                  (sxml transform)
+                  (sxml xpath))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-useless-build.xml
+           (lambda _ (delete-file "build.xml") #t))
+         ;; This is necessary to ensure that htsjdk is found when using
+         ;; picard.jar as an executable.
+         (add-before 'build 'edit-classpath-in-manifest
+           (lambda* (#:key inputs #:allow-other-keys)
+             (chmod "build.xml" #o664)
+             (call-with-output-file "build.xml.new"
+               (lambda (port)
+                 (sxml->xml
+                  (pre-post-order
+                   (with-input-from-file "build.xml"
+                     (lambda _ (xml->sxml #:trim-whitespace? #t)))
+                   `((target    . ,(lambda (tag . kids)
+                                     (let ((name ((sxpath '(name *text*))
+                                                  (car kids)))
+                                           ;; FIXME: We're breaking the line
+                                           ;; early with a dummy path to
+                                           ;; ensure that the store reference
+                                           ;; isn't broken apart and can still
+                                           ;; be found by the reference
+                                           ;; scanner.
+                                           (msg (format #f
+                                                        "\
+Class-Path: /~a \
+ ~a/share/java/htsjdk.jar${line.separator}"
+                                                        ;; maximum line length is 70
+                                                        (string-tabulate (const #\b) 57)
+                                                        (assoc-ref inputs "java-htsjdk"))))
+                                       (if (member "manifest" name)
+                                           `(,tag ,@kids
+                                                  (echo
+                                                   (@ (message ,msg)
+                                                      (file "${manifest.file}")
+                                                      (append "true"))))
+                                           `(,tag ,@kids)))))
+                     (*default* . ,(lambda (tag . kids) `(,tag ,@kids)))
+                     (*text*    . ,(lambda (_ txt) txt))))
+                  port)))
+             (rename-file "build.xml.new" "build.xml")
+             #t)))))
+    (propagated-inputs
+     `(("java-htsjdk" ,java-htsjdk-2.10.1)))
+    (native-inputs
+     `(("java-testng" ,java-testng)
+       ("java-guava" ,java-guava)))
+    (home-page "http://broadinstitute.github.io/picard/")
+    (synopsis "Tools for manipulating high-throughput sequencing data and formats")
+    (description "Picard is a set of Java command line tools for manipulating
+high-throughput sequencing (HTS) data and formats.  Picard is implemented
+using the HTSJDK Java library to support accessing file formats that are
+commonly used for high-throughput sequencing data such as SAM, BAM, CRAM and
+VCF.")
+    (license license:expat)))
+
 ;; This is the last version of Picard to provide net.sf.samtools
 (define-public java-picard-1.113
   (package (inherit java-picard)
@@ -3211,10 +3349,89 @@ VCF.")
        ("jdk" ,icedtea-8 "jdk")
        ("jdk-src" ,(car (assoc-ref (package-native-inputs icedtea-8) "jdk-drop")))))))
 
+(define-public fastqc
+  (package
+    (name "fastqc")
+    (version "0.11.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.bioinformatics.babraham.ac.uk/"
+                           "projects/fastqc/fastqc_v"
+                           version "_source.zip"))
+       (sha256
+        (base32
+         "18rrlkhcrxvvvlapch4dpj6xc6mpayzys8qfppybi8jrpgx5cc5f"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f                      ; there are no tests
+       #:build-target "build"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-dependencies
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "build.xml"
+               (("jbzip2-0.9.jar")
+                (string-append (assoc-ref inputs "java-jbzip2")
+                               "/share/java/jbzip2.jar"))
+               (("sam-1.103.jar")
+                (string-append (assoc-ref inputs "java-picard-1.113")
+                               "/share/java/sam-1.112.jar"))
+               (("cisd-jhdf5.jar")
+                (string-append (assoc-ref inputs "java-cisd-jhdf5")
+                               "/share/java/sis-jhdf5.jar")))
+             #t))
+         ;; There is no installation target
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out   (assoc-ref outputs "out"))
+                    (bin   (string-append out "/bin"))
+                    (share (string-append out "/share/fastqc/"))
+                    (exe   (string-append share "/fastqc")))
+               (for-each mkdir-p (list bin share))
+               (copy-recursively "bin" share)
+               (substitute* exe
+                 (("my \\$java_bin = 'java';")
+                  (string-append "my $java_bin = '"
+                                 (assoc-ref inputs "java")
+                                 "/bin/java';")))
+               (chmod exe #o555)
+               (symlink exe (string-append bin "/fastqc"))
+               #t))))))
+    (inputs
+     `(("java" ,icedtea)
+       ("perl" ,perl)                   ; needed for the wrapper script
+       ("java-cisd-jhdf5" ,java-cisd-jhdf5)
+       ("java-picard-1.113" ,java-picard-1.113)
+       ("java-jbzip2" ,java-jbzip2)))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "http://www.bioinformatics.babraham.ac.uk/projects/fastqc/")
+    (synopsis "Quality control tool for high throughput sequence data")
+    (description
+     "FastQC aims to provide a simple way to do some quality control
+checks on raw sequence data coming from high throughput sequencing
+pipelines.  It provides a modular set of analyses which you can use to
+give a quick impression of whether your data has any problems of which
+you should be aware before doing any further analysis.
+
+The main functions of FastQC are:
+
+@itemize
+@item Import of data from BAM, SAM or FastQ files (any variant);
+@item Providing a quick overview to tell you in which areas there may
+  be problems;
+@item Summary graphs and tables to quickly assess your data;
+@item Export of results to an HTML based permanent report;
+@item Offline operation to allow automated generation of reports
+  without running the interactive application.
+@end itemize\n")
+    (license license:gpl3+)))
+
 (define-public htslib
   (package
     (name "htslib")
-    (version "1.6")
+    (version "1.7")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3222,17 +3439,8 @@ VCF.")
                     version "/htslib-" version ".tar.bz2"))
               (sha256
                (base32
-                "1jsca3hg4rbr6iqq6imkj4lsvgl8g9768bcmny3hlff2w25vx24m"))))
+                "1il6i2p84b0y9c93dhvzzki1ifw9bvapm2mvpr0xvb2nq8jlwgdy"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after
-          'unpack 'patch-tests
-          (lambda _
-            (substitute* "test/test.pl"
-              (("/bin/bash") (which "bash")))
-            #t)))))
     (inputs
      `(("openssl" ,openssl)
        ("curl" ,curl)
@@ -4629,6 +4837,7 @@ distribution, coverage uniformity, strand specificity, etc.")
                 (uri (hg-reference
                       (url "https://bitbucket.org/libsleipnir/sleipnir")
                       (changeset changeset)))
+                (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
                   "0qrvilwh18dpbhkf92qvxbmay0j75ra3jg2wrhz67gf538zzphsx"))))
@@ -4687,7 +4896,7 @@ to the user's query of interest.")
 (define-public samtools
   (package
     (name "samtools")
-    (version "1.5")
+    (version "1.7")
     (source
      (origin
        (method url-fetch)
@@ -4696,7 +4905,7 @@ to the user's query of interest.")
                        version "/samtools-" version ".tar.bz2"))
        (sha256
         (base32
-         "1xidmv0jmfy7l0kb32hdnlshcxgzi1hmygvig0cqrq1fhckdlhl5"))))
+         "18acyqysbxpydlc44lqv2hpp57l06bs9a3yqmcvjk8va2xrrdc77"))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((ice-9 ftw)
@@ -6017,14 +6226,14 @@ distribution.")
 (define-public r-dexseq
   (package
     (name "r-dexseq")
-    (version "1.24.2")
+    (version "1.24.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "DEXSeq" version))
        (sha256
         (base32
-         "18nh8ynxirfwkmc4sawdxgl7w1sl9ny5zpv8zbhv9vi5vgb8pxmj"))))
+         "0xip73hlbr3zry9d7ly9vvvsbb3xjcmfa09lr9fdy528dwjrf084"))))
     (properties `((upstream-name . "DEXSeq")))
     (build-system r-build-system)
     (propagated-inputs
@@ -6200,14 +6409,14 @@ testing and other simple calculations.")
 (define-public r-shortread
   (package
     (name "r-shortread")
-    (version "1.36.0")
+    (version "1.36.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "ShortRead" version))
        (sha256
         (base32
-         "06mknlsmd4hnaxzdjapgvp2kgdnf9w103y500dsac5jgsz4vwzcz"))))
+         "1cyv47632m9ljkxfsvnvmd19sb607ys5kz8fwh6v39dnw16g0a6m"))))
     (properties `((upstream-name . "ShortRead")))
     (build-system r-build-system)
     (inputs
@@ -6968,13 +7177,13 @@ names in their natural, rather than lexicographic, order.")
 (define-public r-edger
   (package
     (name "r-edger")
-    (version "3.20.8")
+    (version "3.20.9")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "edgeR" version))
               (sha256
                (base32
-                "0g7bj6w61blw3m22hw9rc01n554k9qkjizh7njr3j4shmhads58d"))))
+                "0y52snwbz37xzdd7gihdkqczbndlfzmmypv6hri3ymjyfmlx6qaw"))))
     (properties `((upstream-name . "edgeR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -7034,13 +7243,13 @@ coding changes and predict coding outcomes.")
 (define-public r-limma
   (package
     (name "r-limma")
-    (version "3.34.8")
+    (version "3.34.9")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "limma" version))
               (sha256
                (base32
-                "0bmxsgz2yll83sd3wbxsrsfd35468igb0d8lldym0d0lqfz906bw"))))
+                "1y2fm61g5i0fn0j3l31xvwh9zww9bpkc4nwzb1d0yv1cag20jkdc"))))
     (build-system r-build-system)
     (home-page "http://bioinf.wehi.edu.au/limma")
     (synopsis "Package for linear models for microarray and RNA-seq data")
@@ -7089,13 +7298,13 @@ different technologies, including microarrays, RNA-seq, and quantitative PCR.")
 (define-public r-genomicranges
   (package
     (name "r-genomicranges")
-    (version "1.30.2")
+    (version "1.30.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicRanges" version))
               (sha256
                (base32
-                "0c3r155603vb4zjs3adqa72770bh8karc11y8gl62l1m24jrkbnj"))))
+                "07cszc9ri94nzk4dffwnsj247ih6pchnrzrvnb0q4dkk33gwy8n1"))))
     (properties
      `((upstream-name . "GenomicRanges")))
     (build-system r-build-system)
@@ -7519,13 +7728,13 @@ information about the latest version of the Gene Ontologies.")
 (define-public r-topgo
   (package
     (name "r-topgo")
-    (version "2.30.0")
+    (version "2.30.1")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "topGO" version))
               (sha256
                (base32
-                "1hqffz5qp7glxdvjp37005g8qk5nam3f9wpf6d1wjnzpar04f3dz"))))
+                "1cgz4knxr328xfqlhl6ypxl6x86rfrlqz748kn94ainxjzz55i6x"))))
     (properties
      `((upstream-name . "topGO")))
     (build-system r-build-system)
@@ -8365,14 +8574,14 @@ in SNV base substitution data.")
 (define-public r-wgcna
   (package
     (name "r-wgcna")
-    (version "1.62")
+    (version "1.63")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "WGCNA" version))
        (sha256
         (base32
-         "0c52rp09gqphz6g5x9jzkdcsyvfrknq0dkq9saslgy8q8ap974vx"))))
+         "1225dqm68bynkmklnsxdqdd3zqrpzbvqwyly8ibxmk75z33xz309"))))
     (properties `((upstream-name . "WGCNA")))
     (build-system r-build-system)
     (propagated-inputs
@@ -8542,6 +8751,16 @@ of gene-level counts.")
                       "src/hdf5source/hdf5small.tgz" "-C" "src/" )
              (substitute* "src/hdf5/configure"
                (("/bin/mv") "mv"))
+             ;; Remove timestamp and host system information to make
+             ;; the build reproducible.
+             (substitute* "src/hdf5/src/libhdf5.settings.in"
+               (("Configured on: @CONFIG_DATE@")
+                "Configured on: Guix")
+               (("Uname information:.*")
+                "Uname information: Linux\n")
+               ;; Remove unnecessary store reference.
+               (("C Compiler:.*")
+                "C Compiler: GCC\n"))
              #t)))))
     (propagated-inputs
      `(("r-zlibbioc" ,r-zlibbioc)))
@@ -8706,6 +8925,7 @@ intervals (e.g. genes, sequence alignments).")
                 (uri (git-reference
                       (url "https://github.com/smithlabcode/piranha.git")
                       (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "117dc0zf20c61jam69sk4abl57ah6yi6i7qra7d7y5zrbgk12q5n"))))
@@ -10588,14 +10808,14 @@ quality control.")
 (define-public r-scran
   (package
     (name "r-scran")
-    (version "1.6.7")
+    (version "1.6.8")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "scran" version))
        (sha256
         (base32
-         "0zfm5i8xrnzb3894xygqd6zkbwaa2x3z74wbxw39fcjhyhxv2hmb"))))
+         "07wniyrh2fhhkz28v0bfgpvpi1hkkn2cvhacrvvvck142j79944x"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-beachmat" ,r-beachmat)
@@ -10671,6 +10891,7 @@ memory usage and processing time is minimized.")
          (uri (git-reference
                (url "https://github.com/rajewsky-lab/dropbead.git")
                (commit commit)))
+         (file-name (git-file-name name version))
          (sha256
           (base32
            "1b2lphsc236s1rdzlijxg8yl1jnqpwcvj4x938r89rqpj93jb780"))))
@@ -11431,6 +11652,7 @@ dependency like SeqAn.")
               (uri (git-reference
                     (url "https://github.com/y-256/libdivsufsort.git")
                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "0fgdz9fzihlvjjrxy01md1bv9vh12rkgkwbm90b1hj5xpbaqp7z2"))))
@@ -11886,3 +12108,541 @@ variable number of row and column annotations.  Loom also supports sparse
 graphs.  This library makes it easy to work with @file{.loom} files for
 single-cell RNA-seq data.")
     (license license:bsd-3)))
+
+;; We cannot use the latest commit because it requires Java 9.
+(define-public java-forester
+  (let ((commit "86b07efe302d5094b42deed9260f719a4c4ac2e6")
+        (revision "1"))
+    (package
+      (name "java-forester")
+      (version (string-append "0-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/cmzmasek/forester.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "0vxavc1yrf84yrnf20dq26hi0lglidk8d382xrxsy4qmlbjd276z"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Delete bundled jars and pre-built classes
+                    (delete-file-recursively "forester/java/resources")
+                    (delete-file-recursively "forester/java/classes")
+                    (for-each delete-file (find-files "forester/java/" "\\.jar$"))
+                    ;; Delete bundled applications
+                    (delete-file-recursively "forester_applications")
+                    #t))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:tests? #f ; there are none
+         #:jdk ,icedtea-8
+         #:modules ((guix build ant-build-system)
+                    (guix build utils)
+                    (guix build java-utils)
+                    (sxml simple)
+                    (sxml transform))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'chdir
+             (lambda _ (chdir "forester/java") #t))
+           (add-after 'chdir 'fix-dependencies
+             (lambda _
+               (chmod "build.xml" #o664)
+               (call-with-output-file "build.xml.new"
+                 (lambda (port)
+                   (sxml->xml
+                    (pre-post-order
+                     (with-input-from-file "build.xml"
+                       (lambda _ (xml->sxml #:trim-whitespace? #t)))
+                     `(;; Remove all unjar tags to avoid repacking classes.
+                       (unjar     . ,(lambda _ '()))
+                       (*default* . ,(lambda (tag . kids) `(,tag ,@kids)))
+                       (*text*    . ,(lambda (_ txt) txt))))
+                    port)))
+               (rename-file "build.xml.new" "build.xml")
+               #t))
+           ;; FIXME: itext is difficult to package as it depends on a few
+           ;; unpackaged libraries.
+           (add-after 'chdir 'remove-dependency-on-unpackaged-itext
+             (lambda _
+               (delete-file "src/org/forester/archaeopteryx/PdfExporter.java")
+               (substitute* "src/org/forester/archaeopteryx/MainFrame.java"
+                 (("pdf_written_to = PdfExporter.*")
+                  "throw new IOException(\"PDF export is not available.\");"))
+               #t))
+           ;; There is no install target
+           (replace 'install (install-jars ".")))))
+      (propagated-inputs
+       `(("java-commons-codec" ,java-commons-codec)
+         ("java-openchart2" ,java-openchart2)))
+      (home-page "https://sites.google.com/site/cmzmasek/home/software/forester")
+      (synopsis "Phylogenomics libraries for Java")
+      (description "Forester is a collection of Java libraries for
+phylogenomics and evolutionary biology research.  It includes support for
+reading, writing, and exporting phylogenetic trees.")
+      (license license:lgpl2.1+))))
+
+(define-public java-forester-1.005
+  (package
+    (name "java-forester")
+    (version "1.005")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://search.maven.org/remotecontent?"
+                                  "filepath=org/biojava/thirdparty/forester/"
+                                  version "/forester-" version "-sources.jar"))
+              (file-name (string-append name "-" version ".jar"))
+              (sha256
+               (base32
+                "04r8qv4rk3p71z4ajrvp11py1z46qrx0047j3zzs79s6lnsm3lcv"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; there are none
+       #:jdk ,icedtea-8
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (guix build java-utils)
+                  (sxml simple)
+                  (sxml transform))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-dependencies
+           (lambda* (#:key inputs #:allow-other-keys)
+             (call-with-output-file "build.xml"
+               (lambda (port)
+                 (sxml->xml
+                  (pre-post-order
+                   (with-input-from-file "src/build.xml"
+                     (lambda _ (xml->sxml #:trim-whitespace? #t)))
+                   `(;; Remove all unjar tags to avoid repacking classes.
+                     (unjar     . ,(lambda _ '()))
+                     (*default* . ,(lambda (tag . kids) `(,tag ,@kids)))
+                     (*text*    . ,(lambda (_ txt) txt))))
+                  port)))
+             (copy-file (assoc-ref inputs "synth_look_and_feel_1.xml")
+                        "synth_look_and_feel_1.xml")
+             (copy-file (assoc-ref inputs "phyloxml.xsd")
+                        "phyloxml.xsd")
+             (substitute* "build.xml"
+               (("../resources/synth_laf/synth_look_and_feel_1.xml")
+                "synth_look_and_feel_1.xml")
+               (("../resources/phyloxml_schema/1.10/phyloxml.xsd")
+                "phyloxml.xsd"))
+             #t))
+         ;; FIXME: itext is difficult to package as it depends on a few
+         ;; unpackaged libraries.
+         (add-after 'unpack 'remove-dependency-on-unpackaged-itext
+           (lambda _
+             (delete-file "src/org/forester/archaeopteryx/PdfExporter.java")
+             (substitute* '("src/org/forester/archaeopteryx/MainFrame.java"
+                            "src/org/forester/archaeopteryx/MainFrameApplication.java")
+               (("pdf_written_to = PdfExporter.*")
+                "throw new IOException(\"PDF export is not available.\"); /*")
+               ((".getPrintSizeX\\(\\), getOptions\\(\\).getPrintSizeY\\(\\) \\);") "*/")
+               (("getCurrentTreePanel\\(\\).getHeight\\(\\) \\);") "*/"))
+             #t))
+         (add-after 'unpack 'delete-pre-built-classes
+           (lambda _ (delete-file-recursively "src/classes") #t))
+         ;; There is no install target
+         (replace 'install (install-jars ".")))))
+    (propagated-inputs
+     `(("java-commons-codec" ,java-commons-codec)
+       ("java-openchart2" ,java-openchart2)))
+    ;; The source archive does not contain the resources.
+    (native-inputs
+     `(("phyloxml.xsd"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "https://raw.githubusercontent.com/cmzmasek/forester/"
+                               "b61cc2dcede0bede317db362472333115756b8c6/"
+                               "forester/resources/phyloxml_schema/1.10/phyloxml.xsd"))
+           (file-name (string-append name "-phyloxml-" version ".xsd"))
+           (sha256
+            (base32
+             "1zxc4m8sn4n389nqdnpxa8d0k17qnr3pm2y5y6g6vh4k0zm52npv"))))
+       ("synth_look_and_feel_1.xml"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "https://raw.githubusercontent.com/cmzmasek/forester/"
+                               "29e04321615da6b35c1e15c60e52caf3f21d8e6a/"
+                               "forester/java/classes/resources/synth_look_and_feel_1.xml"))
+           (file-name (string-append name "-synth-look-and-feel-" version ".xml"))
+           (sha256
+            (base32
+             "1gv5602gv4k7y7713y75a4jvj7i9s7nildsbdl7n9q10sc2ikg8h"))))))
+    (home-page "https://sites.google.com/site/cmzmasek/home/software/forester")
+    (synopsis "Phylogenomics libraries for Java")
+    (description "Forester is a collection of Java libraries for
+phylogenomics and evolutionary biology research.  It includes support for
+reading, writing, and exporting phylogenetic trees.")
+    (license license:lgpl2.1+)))
+
+(define-public java-biojava-core
+  (package
+    (name "java-biojava-core")
+    (version "4.2.11")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/biojava/biojava")
+                    (commit (string-append "biojava-" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1bvryh2bpsvash8ln79cmc9sqm8qw72hz4xzwqxcrjm8ssxszhqk"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jdk ,icedtea-8
+       #:jar-name "biojava-core.jar"
+       #:source-dir "biojava-core/src/main/java/"
+       #:test-dir "biojava-core/src/test"
+       ;; These tests seem to require internet access.
+       #:test-exclude (list "**/SearchIOTest.java"
+                            "**/BlastXMLParserTest.java"
+                            "**/GenbankCookbookTest.java"
+                            "**/GenbankProxySequenceReaderTest.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "biojava-core/src/main/resources"
+                               "build/classes")
+             #t))
+         (add-before 'check 'copy-test-resources
+           (lambda _
+             (copy-recursively "biojava-core/src/test/resources"
+                               "build/test-classes")
+             #t)))))
+    (propagated-inputs
+     `(("java-log4j-api" ,java-log4j-api)
+       ("java-log4j-core" ,java-log4j-core)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ("java-slf4j-simple" ,java-slf4j-simple)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://biojava.org")
+    (synopsis "Core libraries of Java framework for processing biological data")
+    (description "BioJava is a project dedicated to providing a Java framework
+for processing biological data.  It provides analytical and statistical
+routines, parsers for common file formats, reference implementations of
+popular algorithms, and allows the manipulation of sequences and 3D
+structures.  The goal of the biojava project is to facilitate rapid
+application development for bioinformatics.
+
+This package provides the core libraries.")
+    (license license:lgpl2.1+)))
+
+(define-public java-biojava-phylo
+  (package (inherit java-biojava-core)
+    (name "java-biojava-phylo")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jdk ,icedtea-8
+       #:jar-name "biojava-phylo.jar"
+       #:source-dir "biojava-phylo/src/main/java/"
+       #:test-dir "biojava-phylo/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "biojava-phylo/src/main/resources"
+                               "build/classes")
+             #t))
+         (add-before 'check 'copy-test-resources
+           (lambda _
+             (copy-recursively "biojava-phylo/src/test/resources"
+                               "build/test-classes")
+             #t)))))
+    (propagated-inputs
+     `(("java-log4j-api" ,java-log4j-api)
+       ("java-log4j-core" ,java-log4j-core)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ("java-slf4j-simple" ,java-slf4j-simple)
+       ("java-biojava-core" ,java-biojava-core)
+       ("java-forester" ,java-forester)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://biojava.org")
+    (synopsis "Biojava interface to the forester phylogenomics library")
+    (description "The phylo module provides a biojava interface layer to the
+forester phylogenomics library for constructing phylogenetic trees.")))
+
+(define-public java-biojava-alignment
+  (package (inherit java-biojava-core)
+    (name "java-biojava-alignment")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jdk ,icedtea-8
+       #:jar-name "biojava-alignment.jar"
+       #:source-dir "biojava-alignment/src/main/java/"
+       #:test-dir "biojava-alignment/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "biojava-alignment/src/main/resources"
+                               "build/classes")
+             #t))
+         (add-before 'check 'copy-test-resources
+           (lambda _
+             (copy-recursively "biojava-alignment/src/test/resources"
+                               "build/test-classes")
+             #t)))))
+    (propagated-inputs
+     `(("java-log4j-api" ,java-log4j-api)
+       ("java-log4j-core" ,java-log4j-core)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ("java-slf4j-simple" ,java-slf4j-simple)
+       ("java-biojava-core" ,java-biojava-core)
+       ("java-biojava-phylo" ,java-biojava-phylo)
+       ("java-forester" ,java-forester)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://biojava.org")
+    (synopsis "Biojava API for genetic sequence alignment")
+    (description "The alignment module of BioJava provides an API that
+contains
+
+@itemize
+@item implementations of dynamic programming algorithms for sequence
+  alignment;
+@item reading and writing of popular alignment file formats;
+@item a single-, or multi- threaded multiple sequence alignment algorithm.
+@end itemize\n")))
+
+(define-public java-biojava-core-4.0
+  (package (inherit java-biojava-core)
+    (name "java-biojava-core")
+    (version "4.0.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/biojava/biojava")
+                    (commit (string-append "biojava-" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "13675f6y9aqi7bi2lk3s1z7a22ynccjiqwa8izh7p97xi9wsfmd8"))))))
+
+(define-public java-biojava-phylo-4.0
+  (package (inherit java-biojava-core-4.0)
+    (name "java-biojava-phylo")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jdk ,icedtea-8
+       #:jar-name "biojava-phylo.jar"
+       #:source-dir "biojava-phylo/src/main/java/"
+       #:test-dir "biojava-phylo/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "biojava-phylo/src/main/resources"
+                               "build/classes")
+             #t))
+         (add-before 'check 'copy-test-resources
+           (lambda _
+             (copy-recursively "biojava-phylo/src/test/resources"
+                               "build/test-classes")
+             #t)))))
+    (propagated-inputs
+     `(("java-log4j-api" ,java-log4j-api)
+       ("java-log4j-core" ,java-log4j-core)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ("java-slf4j-simple" ,java-slf4j-simple)
+       ("java-biojava-core" ,java-biojava-core-4.0)
+       ("java-forester" ,java-forester-1.005)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://biojava.org")
+    (synopsis "Biojava interface to the forester phylogenomics library")
+    (description "The phylo module provides a biojava interface layer to the
+forester phylogenomics library for constructing phylogenetic trees.")))
+
+(define-public java-biojava-alignment-4.0
+  (package (inherit java-biojava-core-4.0)
+    (name "java-biojava-alignment")
+    (build-system ant-build-system)
+    (arguments
+     `(#:jdk ,icedtea-8
+       #:jar-name "biojava-alignment.jar"
+       #:source-dir "biojava-alignment/src/main/java/"
+       #:test-dir "biojava-alignment/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "biojava-alignment/src/main/resources"
+                               "build/classes")
+             #t))
+         (add-before 'check 'copy-test-resources
+           (lambda _
+             (copy-recursively "biojava-alignment/src/test/resources"
+                               "build/test-classes")
+             #t)))))
+    (propagated-inputs
+     `(("java-log4j-api" ,java-log4j-api)
+       ("java-log4j-core" ,java-log4j-core)
+       ("java-slf4j-api" ,java-slf4j-api)
+       ("java-slf4j-simple" ,java-slf4j-simple)
+       ("java-biojava-core" ,java-biojava-core-4.0)
+       ("java-biojava-phylo" ,java-biojava-phylo-4.0)
+       ("java-forester" ,java-forester-1.005)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://biojava.org")
+    (synopsis "Biojava API for genetic sequence alignment")
+    (description "The alignment module of BioJava provides an API that
+contains
+
+@itemize
+@item implementations of dynamic programming algorithms for sequence
+  alignment;
+@item reading and writing of popular alignment file formats;
+@item a single-, or multi- threaded multiple sequence alignment algorithm.
+@end itemize\n")))
+
+(define-public dropseq-tools
+  (package
+    (name "dropseq-tools")
+    (version "1.13")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "http://mccarrolllab.com/download/1276/")
+       (file-name (string-append "dropseq-tools-" version ".zip"))
+       (sha256
+        (base32
+         "0yrffckxqk5l8b5xb6z4laq157zd9mdypr2p4b4vq2bhjzi1sj0s"))
+       ;; Delete bundled libraries
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (for-each delete-file (find-files "jar/lib" "\\.jar$"))
+           (delete-file-recursively "3rdParty")))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f                      ; test data are not included
+       #:test-target "test"
+       #:build-target "all"
+       #:source-dir "public/src/"
+       #:jdk ,icedtea-8
+       #:make-flags
+       (list (string-append "-Dpicard.executable.dir="
+                            (assoc-ref %build-inputs "java-picard")
+                            "/share/java/"))
+       #:modules ((ice-9 match)
+                  (srfi srfi-1)
+                  (guix build utils)
+                  (guix build java-utils)
+                  (guix build ant-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         ;; All dependencies must be linked to "lib", because that's where
+         ;; they will be searched for when the Class-Path property of the
+         ;; manifest is computed.
+         (add-after 'unpack 'record-references
+	   (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir-p "jar/lib")
+             (let ((dirs (filter-map (match-lambda
+                                       ((name . dir)
+                                        (if (and (string-prefix? "java-" name)
+                                                 (not (string=? name "java-testng")))
+                                            dir #f)))
+                                     inputs)))
+               (for-each (lambda (jar)
+                           (symlink jar (string-append "jar/lib/" (basename jar))))
+                         (append-map (lambda (dir) (find-files dir "\\.jar$"))
+                                     dirs)))
+	     #t))
+         ;; There is no installation target
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out     (assoc-ref outputs "out"))
+                    (bin     (string-append out "/bin"))
+                    (share   (string-append out "/share/java/"))
+                    (lib     (string-append share "/lib/"))
+                    (scripts (list "BAMTagHistogram"
+                                   "BAMTagofTagCounts"
+                                   "BaseDistributionAtReadPosition"
+                                   "CollapseBarcodesInPlace"
+                                   "CollapseTagWithContext"
+                                   "ConvertToRefFlat"
+                                   "CreateIntervalsFiles"
+                                   "DetectBeadSynthesisErrors"
+                                   "DigitalExpression"
+                                   "Drop-seq_alignment.sh"
+                                   "FilterBAM"
+                                   "FilterBAMByTag"
+                                   "GatherGeneGCLength"
+                                   "GatherMolecularBarcodeDistributionByGene"
+                                   "GatherReadQualityMetrics"
+                                   "PolyATrimmer"
+                                   "ReduceGTF"
+                                   "SelectCellsByNumTranscripts"
+                                   "SingleCellRnaSeqMetricsCollector"
+                                   "TagBamWithReadSequenceExtended"
+                                   "TagReadWithGeneExon"
+                                   "TagReadWithInterval"
+                                   "TrimStartingSequence"
+                                   "ValidateReference")))
+               (for-each mkdir-p (list bin share lib))
+               (install-file "dist/dropseq.jar" share)
+               (for-each (lambda (script)
+                           (chmod script #o555)
+                           (install-file script bin))
+                         scripts)
+               (substitute* (map (lambda (script)
+                                   (string-append bin "/" script))
+                                 scripts)
+                 (("^java") (which "java"))
+                 (("jar_deploy_dir=.*")
+                  (string-append "jar_deploy_dir=" share "\n"))))
+             #t))
+         ;; FIXME: We do this after stripping jars because we don't want it to
+         ;; copy all these jars and strip them.  We only want to install
+         ;; links.  Arguably, this is a problem with the ant-build-system.
+         (add-after 'strip-jar-timestamps 'install-links
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out     (assoc-ref outputs "out"))
+                    (share   (string-append out "/share/java/"))
+                    (lib     (string-append share "/lib/")))
+               (for-each (lambda (jar)
+                           (symlink (readlink jar)
+                                    (string-append lib (basename jar))))
+                         (find-files "jar/lib" "\\.jar$")))
+             #t)))))
+    (inputs
+     `(("jdk" ,icedtea-8)
+       ("java-picard" ,java-picard-2.10.3)
+       ("java-log4j-1.2-api" ,java-log4j-1.2-api)
+       ("java-commons-math3" ,java-commons-math3)
+       ("java-commons-jexl2" ,java-commons-jexl-2)
+       ("java-commons-collections4" ,java-commons-collections4)
+       ("java-commons-lang2" ,java-commons-lang)
+       ("java-commons-io" ,java-commons-io)
+       ("java-snappy-1.0.3-rc3" ,java-snappy-1)
+       ("java-guava" ,java-guava)
+       ("java-la4j" ,java-la4j)
+       ("java-biojava-core" ,java-biojava-core-4.0)
+       ("java-biojava-alignment" ,java-biojava-alignment-4.0)
+       ("java-jdistlib" ,java-jdistlib)
+       ("java-simple-xml" ,java-simple-xml)
+       ("java-snakeyaml" ,java-snakeyaml)))
+    (native-inputs
+     `(("unzip" ,unzip)
+       ("java-testng" ,java-testng)))
+    (home-page "http://mccarrolllab.com/dropseq/")
+    (synopsis "Tools for Drop-seq analyses")
+    (description "Drop-seq is a technology to enable biologists to
+analyze RNA expression genome-wide in thousands of individual cells at
+once.  This package provides tools to perform Drop-seq analyses.")
+    (license license:expat)))
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index 91dd2f9156..f4ba82810a 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -110,6 +110,20 @@ across a broad spectrum of applications.")
     (license (license:x11-style "http://www.boost.org/LICENSE_1_0.txt"
                                 "Some components have other similar licences."))))
 
+(define-public boost-1.66
+  (package
+    (inherit boost)
+    (version "1.66.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/boost/boost/" version "/boost_"
+                    (string-map (lambda (x) (if (eq? x #\.) #\_ x)) version)
+                    ".tar.bz2"))
+              (sha256
+               (base32
+                "1aaw48cmimsskzgiclwn0iifp62a5iw9cbqrhfari876af1828ap"))))))
+
 (define-public mdds
   (package
     (name "mdds")
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index a4e2d38e36..e6c5c4e793 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +31,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages crypto)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages file)
   #:use-module (gnu packages libevent)
@@ -149,3 +150,59 @@ and workspaces that can be used in the compiler environment of your choice.")
                    license:bsd-2             ; cmlibarchive
                    license:expat             ; cmjsoncpp is dual MIT/public domain
                    license:public-domain)))) ; cmlibarchive/archive_getdate.c
+
+;; Recent Ceph requires Boost 1.66, which in turn requires CMake 3.11 for
+;; its updated "FindBoost.cmake" facility.
+(define-public cmake-3.11
+  (package
+    (inherit cmake)
+    (version "3.11.0-rc2")
+    (source (origin
+              (inherit (package-source cmake))
+              (uri (string-append "https://www.cmake.org/files/v"
+                                  (version-major+minor version)
+                                  "/cmake-" version ".tar.gz"))
+              (sha256
+               (base32
+                "14p6ais19nfcwl914n4n5rbzaqwafv3qkg6nd8jw54ykn6lz6mf3"))
+              (snippet
+               '(begin
+                  ;; Drop bundled software.
+                  (with-directory-excursion "Utilities"
+                    (for-each delete-file-recursively
+                              '("cmbzip2"
+                                "cmcurl"
+                                "cmexpat"
+                                "cmliblzma"
+                                "cmzlib"))
+                    #t)))))
+    (build-system gnu-build-system)
+    (arguments
+     (substitute-keyword-arguments (package-arguments cmake)
+       ((#:make-flags flags ''()) `(cons (string-append
+                                          "ARGS=-j "
+                                          (number->string (parallel-job-count))
+                                          " --output-on-failure")
+                                         ,flags))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'patch-bin-sh
+             (lambda _
+               (substitute*
+                   '("Modules/CompilerId/Xcode-3.pbxproj.in"
+                     "Modules/CPack.RuntimeScript.in"
+                     "Source/cmakexbuild.cxx"
+                     "Source/cmGlobalXCodeGenerator.cxx"
+                     "Source/cmLocalUnixMakefileGenerator3.cxx"
+                     "Source/cmExecProgramCommand.cxx"
+                     "Utilities/Release/release_cmake.cmake"
+                     "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
+                     "Tests/CMakeLists.txt"
+                     "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
+                 (("/bin/sh") (which "sh")))
+               #t))
+           ;; This is now passed through #:make-flags.
+           (delete 'set-test-environment)))))
+    (inputs
+     `(("rhash" ,rhash)
+       ,@(package-inputs cmake)))))
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 2067067f20..8d9c661302 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -204,23 +204,24 @@ COCOMO model or user-provided parameters.")
 (define-public cloc
   (package
     (name "cloc")
-    (version "1.74")
+    (version "1.76")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
-             "https://github.com/AlDanial/cloc/releases/download/" version
+             "https://github.com/AlDanial/cloc/releases/download/v" version
              "/cloc-" version ".tar.gz"))
        (sha256
         (base32
-         "0rq5xfiln1wlv3yr9mg18ax4gskbss786iqaf0v45iv6awyl5b2m"))))
+         "05srlvzwisr7y7ymvzb5yfdsrspja27ysqdmkwhiiivy84mq2gnl"))))
     (build-system gnu-build-system)
     (inputs
      `(("coreutils" ,coreutils)
        ("perl" ,perl)
        ("perl-algorithm-diff" ,perl-algorithm-diff)
-       ("perl-regexp-common" ,perl-regexp-common)
-       ("perl-digest-md5" ,perl-digest-md5)))
+       ("perl-digest-md5" ,perl-digest-md5)
+       ("perl-parallel-forkmanager" ,perl-parallel-forkmanager)
+       ("perl-regexp-common" ,perl-regexp-common)))
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (delete 'configure)
@@ -228,13 +229,13 @@ COCOMO model or user-provided parameters.")
                   (replace 'install
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out")))
-                        (zero?
-                         (system* "make" "-C" "Unix"
-                                  (string-append "prefix=" out)
-                                  (string-append "INSTALL="
-                                                 (assoc-ref inputs "coreutils")
-                                                 "/bin/install")
-                                  "install")))))
+                        (invoke "make" "-C" "Unix"
+                                (string-append "prefix=" out)
+                                (string-append "INSTALL="
+                                               (assoc-ref inputs "coreutils")
+                                               "/bin/install")
+                                "install")
+                        #t)))
                   (add-after 'install 'wrap-program
                     (lambda* (#:key inputs outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index f25c4bba3a..423d3989aa 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -600,6 +600,7 @@ with the sfArk algorithm.")
               (uri (git-reference
                     (url "https://github.com/raboof/sfarkxtc.git")
                     (commit commit)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "0f5x6i46qfl6ry21s7g2p4sd4b2r1g4fb03yqi2vv4kq3saryhvj"))))
@@ -1070,21 +1071,23 @@ algorithm within the Numpy framework.")
 (define-public snappy
   (package
     (name "snappy")
-    (version "1.1.3")
+    (version "1.1.7")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://github.com/google/snappy/releases/download/"
-                    version "/" name "-" version ".tar.gz"))
+              (uri (string-append "https://github.com/google/snappy/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append "snappy-" version ".tar.gz"))
               (sha256
                (base32
-                "1wzf8yif5ym2gj52db6v5m1pxnmn258i38x7llk9x346y2nq47ig"))))
-    (build-system gnu-build-system)
+                "1m7rcdqzkys5lspj8jcsaah8w33zh28s771bw0ga2lgzfgl05yix"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
     (home-page "https://github.com/google/snappy")
     (synopsis "Fast compressor/decompressor")
-    (description "Snappy is a compression/decompression library. It does not
+    (description "Snappy is a compression/decompression library.  It does not
 aim for maximum compression, or compatibility with any other compression library;
-instead, it aims for very high speeds and reasonable compression. For instance,
+instead, it aims for very high speeds and reasonable compression.  For instance,
 compared to the fastest mode of zlib, Snappy is an order of magnitude faster
 for most inputs, but the resulting compressed files are anywhere from 20% to
 100% bigger.")
@@ -1130,7 +1133,7 @@ install: libbitshuffle.so
 (define-public java-snappy
   (package
     (name "java-snappy")
-    (version "1.1.4")
+    (version "1.1.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/xerial/snappy-java/archive/"
@@ -1138,7 +1141,7 @@ install: libbitshuffle.so
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1w58diryma7qz7aa24yv8shf3flxcbbw8jgcn2lih14wgmww58ww"))))
+                "0q4kxz2n97czf6g5gzq0d8yz22cgiaj7wp51rzsswh3bi99bpgg5"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "snappy.jar"
@@ -1178,7 +1181,9 @@ install: libbitshuffle.so
                (("NAME\\): \\$\\(SNAPPY_OBJ\\)")
                 "NAME): $(SNAPPY_OBJ)\n\t@mkdir -p $(@D)"))
              ;; Finally we can run the Makefile to build the dynamic library.
-             (zero? (system* "make" "native"))))
+             ;; Use the -nocmake target to avoid a dependency on cmake,
+             ;; which in turn requires the "git_unpacked" directory.
+             (invoke "make" "native-nocmake")))
          ;; Once we have built the shared library, we need to place it in the
          ;; "build" directory so it can be added to the jar file.
          (add-after 'build-jni 'copy-jni
@@ -1187,13 +1192,14 @@ install: libbitshuffle.so
                                "build/classes/org/xerial/snappy/native")))
          (add-before 'check 'fix-failing
            (lambda _
-             ;; This package assumes maven build, which puts results in "target".
-             ;; We put them in "build" instead, so fix that.
-             (substitute* "src/test/java/org/xerial/snappy/SnappyLoaderTest.java"
-               (("target/classes") "build/classes"))
-             ;; FIXME: probably an error
-             (substitute* "src/test/java/org/xerial/snappy/SnappyOutputStreamTest.java"
-               (("91080") "91013")))))))
+             (with-directory-excursion "src/test/java/org/xerial/snappy"
+               ;; This package assumes maven build, which puts results in "target".
+               ;; We put them in "build" instead, so fix that.
+               (substitute* "SnappyLoaderTest.java"
+                 (("target/classes") "build/classes"))
+               ;; This requires Hadoop, which is not in Guix yet.
+               (delete-file "SnappyHadoopCompatibleOutputStreamTest.java"))
+             #t)))))
     (inputs
      `(("osgi-framework" ,java-osgi-framework)))
     (propagated-inputs
@@ -1204,6 +1210,8 @@ install: libbitshuffle.so
        ("hamcrest" ,java-hamcrest-core)
        ("xerial-core" ,java-xerial-core)
        ("classworlds" ,java-plexus-classworlds)
+       ("commons-lang" ,java-commons-lang)
+       ("commons-io" ,java-commons-io)
        ("perl" ,perl)))
     (home-page "https://github.com/xerial/snappy-java")
     (synopsis "Compression/decompression algorithm in Java")
@@ -1533,6 +1541,7 @@ or junctions, and always follows hard links.")
      (origin (method url-fetch)
              (uri (string-append "http://github.com/twogood/unshield/archive/"
                                  version ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "0x7ps644yp5dka2zhb8w0ifqmw3d255jafpzfwv8xbcpgq6fmm2x"))))
diff --git a/gnu/packages/conky.scm b/gnu/packages/conky.scm
index 22a0427b9a..0da9f8438b 100644
--- a/gnu/packages/conky.scm
+++ b/gnu/packages/conky.scm
@@ -60,8 +60,8 @@
              #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out") "/bin")))
-               (mkdir-p bin)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
                (install-file "src/conky" bin))
              #t)))))
     (inputs
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index e1fb1b6215..f8d17e1ad2 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -1472,14 +1472,14 @@ imputations.")
 (define-public r-truncnorm
   (package
     (name "r-truncnorm")
-    (version "1.0-7")
+    (version "1.0-8")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "truncnorm" version))
        (sha256
         (base32
-         "1qac05z50618y4bw1d7yznsli1bv82s0g8h37iacrjrdkv87bmy7"))))
+         "0zn88wdd58223kibk085rhsikl4yhlrwiyq109hzjg06hy6lwmj9"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/truncnorm/")
     (synopsis "Truncated normal distribution")
@@ -1637,21 +1637,21 @@ simplifying cross-class interoperability.")
 (define-public r-performanceanalytics
   (package
     (name "r-performanceanalytics")
-    (version "1.4.3541")
+    (version "1.5.2")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "PerformanceAnalytics" version))
        (sha256
         (base32
-         "1czchsccsbdfjw743j6rm101q2q01pggyl8zmlva213pwm86zb3v"))))
+         "01bgm57z079g6r505w3bj293zkbd49fwa8sg55z87vizwavipml6"))))
     (properties
      `((upstream-name . "PerformanceAnalytics")))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-xts" ,r-xts)
+     `(("r-quadprog" ,r-quadprog)
+       ("r-xts" ,r-xts)
        ("r-zoo" ,r-zoo)))
-    (native-inputs `(("gfortran" ,gfortran)))
     (home-page "http://r-forge.r-project.org/projects/returnanalytics/")
     (synopsis "Econometric tools for performance and risk analysis")
     (description "This is a collection of econometric functions for
@@ -2139,14 +2139,14 @@ display.")
 (define-public r-pillar
   (package
     (name "r-pillar")
-    (version "1.1.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "pillar" version))
        (sha256
         (base32
-         "1gh3j2pbbf5y4d5nyqnlr0x27jjyvjjspcccmw61airs1n6rx8jq"))))
+         "1ryd7m570y6q3w71wd5dz042b3d0dv24g2rbkw1kdx0n6jj9gsbd"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-cli" ,r-cli)
@@ -2225,3 +2225,516 @@ meta-analysis of significance values including the methods of Edgington,
 Fisher, Stouffer, Tippett, and Wilkinson; a number of data-sets to replicate
 published results; and a routine for graphical display.")
     (license license:gpl2)))
+
+(define-public r-network
+  (package
+    (name "r-network")
+    (version "1.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "network" version))
+       (sha256
+        (base32
+         "11sg330xb7gcnl3f6lwhhjdabz6mk43828i2np635pqw4s4yl13s"))))
+    (build-system r-build-system)
+    (home-page "http://statnet.org/")
+    (synopsis "Classes for relational data")
+    (description
+     "This package provides tools to create and modify network objects.  The
+@code{network} class can represent a range of relational data types, and
+supports arbitrary vertex/edge/graph attributes.")
+    (license license:gpl2+)))
+
+(define-public r-statnet-common
+  (package
+    (name "r-statnet-common")
+    (version "4.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (cran-uri "statnet.common" version))
+        (sha256
+          (base32
+            "0yw6l5b4qv0jqlg4zyczas7m12a5pyqghs6ydxy2f6v6vxkijvi0"))))
+    (properties
+      `((upstream-name . "statnet.common")))
+    (build-system r-build-system)
+    (home-page "http://www.statnet.org")
+    (synopsis "R scripts and utilities used by the Statnet software")
+    (description "This package provides non-statistical utilities used by the
+software developed by the Statnet Project.")
+    (license license:gpl3)))
+
+(define-public r-sna
+  (package
+    (name "r-sna")
+    (version "2.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "sna" version))
+       (sha256
+        (base32
+         "1ks8819qvpdfansfqj9p32s1rhvl26frvbi78m4rx1wd1qcv74i2"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-network" ,r-network)
+       ("r-statnet-common" ,r-statnet-common)))
+    (home-page "http://www.statnet.org")
+    (synopsis "Tools for social network analysis")
+    (description
+     "This package provides a range of tools for social network analysis,
+including node and graph-level indices, structural distance and covariance
+methods, structural equivalence detection, network regression, random graph
+generation, and 2D/3D network visualization.")
+    (license license:gpl2+)))
+
+(define-public r-ttr
+  (package
+    (name "r-ttr")
+    (version "0.23-3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "TTR" version))
+       (sha256
+        (base32
+         "07r62ngyzjl4aszdxnr3n6bnbcgcap32yhd430jsilicg8n06di1"))))
+    (properties `((upstream-name . "TTR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-curl" ,r-curl)
+       ("r-xts" ,r-xts)
+       ("r-zoo" ,r-zoo)))
+    (native-inputs `(("gfortran" ,gfortran)))
+    (home-page "https://github.com/joshuaulrich/TTR")
+    (synopsis "Technical trading rules")
+    (description
+     "This package provides functions and data to construct technical trading
+rules with R.")
+    (license license:gpl2)))
+
+(define-public r-leaps
+  (package
+    (name "r-leaps")
+    (version "3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "leaps" version))
+       (sha256
+        (base32
+         "11gjmn1azrjw5xlvdb4gknj9985kck9x8zb9np1rnk2smp6pka2m"))))
+    (build-system r-build-system)
+    (native-inputs `(("gfortran" ,gfortran)))
+    (home-page "http://cran.r-project.org/web/packages/leaps/")
+    (synopsis "Regression subset selection")
+    (description
+     "This package provides tools for regression subset selection, including
+exhaustive search.")
+    (license license:gpl2+)))
+
+(define-public r-splus2r
+  (package
+    (name "r-splus2r")
+    (version "1.2-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "splus2R" version))
+       (sha256
+        (base32
+         "0xrbj8vxy0pc6hl7m8abv71d3hjw47cl51s7j7priadyqczkq6sz"))))
+    (properties `((upstream-name . "splus2R")))
+    (build-system r-build-system)
+    (native-inputs `(("gfortran" ,gfortran)))
+    (home-page "http://cran.r-project.org/web/packages/splus2R/")
+    (synopsis "Supplemental S-PLUS functionality in R")
+    (description
+     "Currently there are many functions in S-PLUS that are missing in R.  To
+facilitate the conversion of S-PLUS packages to R packages, this package
+provides some missing S-PLUS functionality in R.")
+    (license license:gpl2)))
+
+(define-public r-ifultools
+  (package
+    (name "r-ifultools")
+    (version "2.0-4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "ifultools" version))
+       (sha256
+        (base32
+         "0pv2msaa1rmj8csxdclzi2jwg9pfdvh87blj9j3xa3myisglq092"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-mass" ,r-mass)
+       ("r-splus2r" ,r-splus2r)))
+    (home-page "http://cran.r-project.org/web/packages/ifultools/")
+    (synopsis "Insightful research tools")
+    (description "This package provides C code used by the wmtsa, fractal, and
+sapa R packages.")
+    (license license:gpl2)))
+
+(define-public r-sapa
+  (package
+    (name "r-sapa")
+    (version "2.0-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "sapa" version))
+       (sha256
+        (base32
+         "056xlh14dnzq4x7sbp7ff2k61jxy7110a742b502vz549qfrr5ds"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-ifultools" ,r-ifultools)
+       ("r-splus2r" ,r-splus2r)))
+    (home-page "http://cran.r-project.org/web/packages/sapa/")
+    (synopsis "Spectral analysis for physical applications")
+    (description "This package provides software for the book Spectral
+Analysis for Physical Applications, Donald B. Percival and Andrew T. Walden,
+Cambridge University Press, 1993.")
+    (license license:gpl2)))
+
+(define-public r-quantmod
+  (package
+    (name "r-quantmod")
+    (version "0.4-12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "quantmod" version))
+       (sha256
+        (base32
+         "0y7gh0k1s10vdsfch8777avbhf99mc9crikvx7ahqrw0j631vmhq"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-curl" ,r-curl)
+       ("r-ttr" ,r-ttr)
+       ("r-xts" ,r-xts)
+       ("r-zoo" ,r-zoo)))
+    (home-page "http://cran.r-project.org/web/packages/quantmod/")
+    (synopsis "Quantitative financial modelling framework")
+    (description "This package provides a quantitative financial modelling
+framework to allow users to specify, build, trade, and analyse quantitative
+financial trading strategies.")
+    (license license:gpl3)))
+
+(define-public r-tseries
+  (package
+    (name "r-tseries")
+    (version "0.10-43")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "tseries" version))
+       (sha256
+        (base32
+         "1yjxhj7l1p2przczl6frggfcr5iwda9lbcsmh0y75gbbbps14yf2"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-quadprog" ,r-quadprog)
+       ("r-quantmod" ,r-quantmod)
+       ("r-zoo" ,r-zoo)))
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "http://cran.r-project.org/web/packages/tseries/")
+    (synopsis "Time series analysis and computational finance")
+    (description
+     "This package provides functions relating to time series analysis and
+computational finance.")
+    (license license:gpl2)))
+
+(define-public r-wmtsa
+  (package
+    (name "r-wmtsa")
+    (version "2.0-3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "wmtsa" version))
+       (sha256
+        (base32
+         "1q436krz5p1f4a7a7sya6a9rh9x9mi8zzcgq66gbk9w9w4hcqcj6"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-ifultools" ,r-ifultools)
+       ("r-mass" ,r-mass)
+       ("r-splus2r" ,r-splus2r)))
+    (home-page "http://cran.r-project.org/web/packages/wmtsa/")
+    (synopsis "Wavelet methods for time series analysis")
+    (description
+     "This package provides software to accompany the book \"Wavelet Methods
+for Time Series Analysis\", Donald B. Percival and Andrew T. Walden, Cambridge
+University Press, 2000.")
+    (license license:gpl2)))
+
+(define-public r-tsa
+  (package
+    (name "r-tsa")
+    (version "1.01")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "TSA" version))
+       (sha256
+        (base32
+         "0cm97hwxm6vfgy9mc3kgwq6dnmn86p8a4avnfjbai048qnwrn6hx"))))
+    (properties `((upstream-name . "TSA")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-leaps" ,r-leaps)
+       ("r-locfit" ,r-locfit)
+       ("r-mgcv" ,r-mgcv)
+       ("r-tseries" ,r-tseries)))
+    (home-page "http://www.stat.uiowa.edu/~kchan/TSA.htm")
+    (synopsis "Time series analysis")
+    (description
+     "This package contains R functions and datasets detailed in the book
+\"Time Series Analysis with Applications in R (second edition)\" by Jonathan
+Cryer and Kung-Sik Chan.")
+    (license license:gpl2+)))
+
+(define-public r-extradistr
+  (package
+    (name "r-extradistr")
+    (version "1.8.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "extraDistr" version))
+       (sha256
+        (base32
+         "0ywn4qwnamv36l1hw27l9y5kh3v6ha5781wsv2bz6szqjgg7kdb3"))))
+    (properties `((upstream-name . "extraDistr")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (home-page "https://github.com/twolodzko/extraDistr")
+    (synopsis "Additional univariate and multivariate distributions")
+    (description
+     "This package implements density, distribution functions, quantile
+functions and random generation functions for a large number of univariate and
+multivariate distributions.")
+    (license license:gpl2)))
+
+(define-public r-fractal
+  (package
+    (name "r-fractal")
+    (version "2.0-4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "fractal" version))
+       (sha256
+        (base32
+         "18lr9z0gslvfc3z8vyj3krqj3bfhg60zv1fzinrwwkc4cpk1w7mp"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-ifultools" ,r-ifultools)
+       ("r-mass" ,r-mass)
+       ("r-sapa" ,r-sapa)
+       ("r-scatterplot3d" ,r-scatterplot3d)
+       ("r-splus2r" ,r-splus2r)
+       ("r-wmtsa" ,r-wmtsa)))
+    (home-page "http://cran.r-project.org/web/packages/fractal/")
+    (synopsis "Fractal time series modeling and analysis")
+    (description
+     "This package provides tools for stochastic fractal and deterministic
+chaotic time series analysis.")
+    (license license:gpl2)))
+
+(define-public r-urca
+  (package
+    (name "r-urca")
+    (version "1.3-0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "urca" version))
+       (sha256
+        (base32
+         "1akaqwf3fvvvx4sgfn641fd4sj51s0701pvfl6s5hnz2k0iwh732"))))
+    (build-system r-build-system)
+    (propagated-inputs `(("r-nlme" ,r-nlme)))
+    (native-inputs `(("gfortran" ,gfortran)))
+    (home-page "http://cran.r-project.org/web/packages/urca/")
+    (synopsis "Unit root and cointegration tests for time series data")
+    (description
+     "This package provides unit root and cointegration tests encountered in
+applied econometric analysis.")
+    (license license:gpl2+)))
+
+(define-public r-cubature
+  (package
+    (name "r-cubature")
+    (version "1.3-11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "cubature" version))
+       (sha256
+        (base32
+         "06f6gsvbb732p80r6hxvzh4ik546icxfvx21dyh65ypmw3kgm64k"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (home-page "https://github.com/bnaras/cubature")
+    (synopsis "Adaptive multivariate integration over hypercubes")
+    (description
+     "This package is an R wrapper around the cubature C library for adaptive
+multivariate integration over hypercubes.  This version provides both
+@code{hcubature} and @code{pcubature} routines in addition to a vector
+interface.")
+    ;; The included cubature C library is released under GPLv2+, but the
+    ;; wrapper declares the license to be GPLv3+.
+    (license (list license:gpl2+ license:gpl3+))))
+
+(define-public r-trend
+  (package
+    (name "r-trend")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "trend" version))
+       (sha256
+        (base32
+         "06yifqbsvxbmk5gld4z2nnyhf59v8ks5xjwacmb25mv9r6bn388b"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-extradistr" ,r-extradistr)))
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "http://cran.r-project.org/web/packages/trend/")
+    (synopsis "Non-parametric trend tests and change-point detection")
+    (description
+     "The analysis of environmental data often requires the detection of
+trends and change-points.  This package includes tests for trend
+detection (Cox-Stuart Trend Test, Mann-Kendall Trend Test, (correlated)
+Hirsch-Slack Test, partial Mann-Kendall Trend Test, multivariate (multisite)
+Mann-Kendall Trend Test, (Seasonal) Sen's slope, partial Pearson and Spearman
+correlation trend test), change-point detection (Lanzante's test procedures,
+Pettitt's test, Buishand Range Test, Buishand U Test, Standard Normal
+Homogeinity Test), detection of non-randomness (Wallis-Moore Phase Frequency
+Test, Bartels rank von Neumann's ratio test, Wald-Wolfowitz Test) and the two
+sample Robust Rank-Order Distributional Test.")
+    (license license:gpl3)))
+
+(define-public r-expm
+  (package
+    (name "r-expm")
+    (version "0.999-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "expm" version))
+       (sha256
+        (base32
+         "1mihl67kvv1xv0figp25jkmwfn4iwkcx15cng2348y8gm6zybw9q"))))
+    (build-system r-build-system)
+    (propagated-inputs `(("r-matrix" ,r-matrix)))
+    (native-inputs `(("gfortran" ,gfortran)))
+    (home-page "http://r-forge.r-project.org/projects/expm/")
+    (synopsis "Tools for matrix exponentials and related quantities")
+    (description
+     "This package provides tools for the computation of the matrix
+exponential, logarithm, square root, and related quantities.")
+    (license license:gpl2+)))
+
+(define-public r-complexplus
+  (package
+    (name "r-complexplus")
+    (version "2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "complexplus" version))
+       (sha256
+        (base32
+         "16w9v7d1ckavqmr86l34frr37pkvdn0iqnb17ssb8xaggns5lgqx"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-expm" ,r-expm)
+       ("r-matrix" ,r-matrix)))
+    (home-page "http://cran.r-project.org/web/packages/complexplus/")
+    (synopsis "Functions of complex or real variables")
+    (description
+     "This package extends several functions to the complex domain, including
+the matrix exponential and logarithm, and the determinant.")
+    (license license:gpl2)))
+
+(define-public r-phontools
+  (package
+    (name "r-phontools")
+    (version "0.2-2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "phonTools" version))
+       (sha256
+        (base32
+         "01i481mhswsys3gpasw9gn6nxkfmi7bz46g5c84m13pg0cv8hxc7"))))
+    (properties `((upstream-name . "phonTools")))
+    (build-system r-build-system)
+    (home-page "http://www.santiagobarreda.com/rscripts.html")
+    (synopsis "Tools for phonetic and acoustic analyses")
+    (description
+     "This package contains tools for the organization, display, and analysis
+of the sorts of data frequently encountered in phonetics research and
+experimentation, including the easy creation of IPA vowel plots, and the
+creation and manipulation of WAVE audio files.")
+    (license license:bsd-2)))
+
+(define-public r-np
+  (package
+    (name "r-np")
+    (version "0.60-6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "np" version))
+       (sha256
+        (base32
+         "1y72x5j9j9mcgcy2xizk31gl843hfkngxdn8s4qw7yhw2qj79hsr"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-boot" ,r-boot)
+       ("r-cubature" ,r-cubature)
+       ("r-quantreg" ,r-quantreg)))
+    (home-page "https://github.com/JeffreyRacine/R-Package-np")
+    (synopsis "Non-parametric kernel smoothing methods for mixed data types")
+    (description "This package provides non-parametric (and semi-parametric)
+kernel methods that seamlessly handle a mix of continuous, unordered, and
+ordered factor data types.")
+    ;; Any version of the GPL.
+    (license license:gpl3+)))
+
+(define-public r-powerplus
+  (package
+    (name "r-powerplus")
+    (version "3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "powerplus" version))
+       (sha256
+        (base32
+         "0ayp6x34hkzgris4j3zbbs0r23n81bhww3wgfyy630ri4sk6brrn"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-complexplus" ,r-complexplus)
+       ("r-expm" ,r-expm)
+       ("r-mass" ,r-mass)
+       ("r-matrix" ,r-matrix)
+       ("r-phontools" ,r-phontools)))
+    (home-page "http://cran.r-project.org/web/packages/powerplus/")
+    (synopsis "Exponentiation operations")
+    (description
+     "This package provides tools for the computation of matrix and scalar
+exponentiation.")
+    (license license:gpl2)))
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 695f6ca088..b498aabf4d 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -384,9 +384,9 @@ no man page, refer to the home page for usage details.")
          (delete 'configure)   ;no configuration to be done
          (add-after 'install 'i18n
            (lambda* (#:key make-flags #:allow-other-keys)
-             (zero? (apply system*
-                           "make" "-C" "extras/translations"
-                           "install" make-flags))))
+             (apply invoke "make" "-C" "extras/translations"
+                    "install" make-flags)
+             #t))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -411,8 +411,9 @@ no man page, refer to the home page for usage details.")
              ;; querying `tomb -h`.
              (let ((tomb (string-append (assoc-ref outputs "out")
                                         "/bin/tomb")))
-               (zero? (system* tomb "dig" "-s" "10" "secrets.tomb"))))))))
-    (home-page "http://www.dyne.org/software/tomb")
+               (invoke tomb "dig" "-s" "10" "secrets.tomb")
+               #t))))))
+    (home-page "https://www.dyne.org/software/tomb")
     (synopsis "File encryption for secret data")
     (description
      "Tomb is an application to manage the creation and access of encrypted
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index e51e014e99..32509fc3fc 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -158,6 +158,7 @@ tunneling, and so on.")
               (uri (git-reference
                      (url "https://github.com/davidjpeacock/kurly.git")
                      (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "1q192f457sjypgvwq7grrf8gq8w272p3zf1d5ppc20mriqm0mbc3"))))
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 56984af6e2..87f65404f8 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -17,7 +17,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
-;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
@@ -396,14 +396,15 @@ mapping from string keys to string values.")
 (define-public memcached
   (package
     (name "memcached")
-    (version "1.5.0")
+    (version "1.5.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://memcached.org/files/memcached-" version ".tar.gz"))
        (sha256
-        (base32 "0chwc0g7wfvcad36z8pf2jbgygdnm9nm1l6pwjsn3d2b089gh0f0"))))
+        (base32
+         "00szy9d4szaixi260dcd4846zci04y0sd47ia2lzg0bxkn2ywxcn"))))
     (build-system gnu-build-system)
     (inputs
      `(("libevent" ,libevent)
@@ -699,14 +700,14 @@ as a drop-in replacement of MySQL.")
 (define-public postgresql
   (package
     (name "postgresql")
-    (version "10.2")
+    (version "10.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "1bav2iyi93h866skrrlqlvsp4sfv1sfww1s305zpzffxcadh0cpy"))))
+                "06lkcwsf851z49zqcws5yc77s2yrbaazf2nvbk38hpp31rw6i8kf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-uuid=e2fs")
@@ -744,14 +745,14 @@ pictures, sounds, or video.")
   (package
     (inherit postgresql)
     (name "postgresql")
-    (version "9.6.6")
+    (version "9.6.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "0m417h30s18rwa7yzkqqcdb22ifpcda2fpg2cyx8bxvjp3ydz71r"))))))
+                "0w7bwf19wbdd3jjbjv03cnx56qka4801srcbsayk9v792awv7zga"))))))
 
 (define-public qdbm
   (package
@@ -840,7 +841,7 @@ types are supported, as is encryption.")
 (define-public rocksdb
   (package
     (name "rocksdb")
-    (version "5.2.1")
+    (version "5.10.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/facebook/rocksdb"
@@ -848,18 +849,28 @@ types are supported, as is encryption.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1v2q05bl56sfp51m09z7g6489hkfq4vf6b4qgfg3d96ylgmay9yb"))
+                "0hp7jxr99vyc57n708hiqk4lks9a9zmjgfjc21mx6v1rmabj2944"))
               (modules '((guix build utils)))
               (snippet
                '(begin
                   ;; TODO: unbundle gtest.
                   (delete-file "build_tools/gnu_parallel")
+                  (substitute* "Makefile"
+                    (("build_tools/gnu_parallel") "parallel"))
                   #t))))
     (build-system gnu-build-system)
     (arguments
-     `(#:make-flags (list "CC=gcc"
+     `(#:make-flags (list "CC=gcc" "V=1"
+                          ;; Ceph requires that RTTI is enabled.
+                          "USE_RTTI=1"
                           (string-append "INSTALL_PATH="
-                                         (assoc-ref %outputs "out")))
+                                         (assoc-ref %outputs "out"))
+
+                          ;; Running the full test suite takes hours and require
+                          ;; a lot of disk space.  Instead we only run a subset
+                          ;; (see .travis.yml and Makefile).
+                          "ROCKSDBTESTS_END=db_tailing_iter_test")
+       #:test-target "check_some"
        ;; Many tests fail on 32-bit platforms. There are multiple reports about
        ;; this upstream, but it's not going to be supported any time soon.
        #:tests? (let ((system ,(or (%current-target-system)
@@ -871,7 +882,6 @@ types are supported, as is encryption.")
          (add-after 'unpack 'patch-Makefile
            (lambda _
              (substitute* "Makefile"
-               (("build_tools/gnu_parallel") "parallel")
                ;; Don't depend on the static library when installing.
                (("install: install-static")
                 "install: install-shared")
@@ -888,20 +898,20 @@ types are supported, as is encryption.")
          (add-before 'check 'disable-failing-tests
            (lambda _
              (substitute* "Makefile"
-               ;; This test fails with GCC-5 and is unmaintained.
-               ;; https://github.com/facebook/rocksdb/issues/2148
-               (("^[[:blank:]]+spatial_db_test[[:blank:]]+\\\\") "\\")
                ;; These tests reliably fail due to "Too many open files".
                (("^[[:blank:]]+env_test[[:blank:]]+\\\\") "\\")
                (("^[[:blank:]]+persistent_cache_test[[:blank:]]+\\\\") "\\"))
              #t))
-         (add-after 'check 'build-release-libraries
+         (add-after 'check 'build
            ;; The default build target is a debug build for tests. The
-           ;; install target depends on "shared_lib" and "static_lib"
-           ;; targets for release builds so we build them here for clarity.
-           ;; TODO: Add debug output.
-           (lambda* (#:key (make-flags '()) #:allow-other-keys)
-             (zero? (apply system* "make" "shared_lib" make-flags)))))))
+           ;; install target depends on the "shared_lib" release target
+           ;; so we build it here for clarity.
+           (lambda* (#:key (make-flags '()) parallel-build? #:allow-other-keys)
+               (apply invoke "make" "shared_lib"
+                      `(,@(if parallel-build?
+                              `("-j" ,(number->string (parallel-job-count)))
+                              '())
+                        ,@make-flags)))))))
     (native-inputs
      `(("parallel" ,parallel)
        ("perl" ,perl)
@@ -925,8 +935,9 @@ between @dfn{Write-Amplification-Factor} (WAF), @dfn{Read-Amplification-Factor}
 (RAF) and @dfn{Space-Amplification-Factor} (SAF).  It has multi-threaded
 compactions, making it specially suitable for storing multiple terabytes of
 data in a single database.  RocksDB is partially based on @code{LevelDB}.")
-    ;; RocksDB is BSD-3 and the JNI adapter is Apache 2.0.
-    (license (list license:bsd-3 license:asl2.0))))
+    ;; RocksDB is dual licensed under GPL2 and ASL 2.0.  Some header
+    ;; files carry the 3-clause BSD license.
+    (license (list license:gpl2 license:asl2.0 license:bsd-3))))
 
 (define-public sparql-query
   (package
@@ -2042,14 +2053,14 @@ and web services platform functionality.")
 (define-public r-rmysql
   (package
     (name "r-rmysql")
-    (version "0.10.13")
+    (version "0.10.14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RMySQL" version))
        (sha256
         (base32
-         "1j0vr2l4s02cg2hzgr3pla96pjj4h85sxw28lidy58rg5awnsf82"))))
+         "01891kn263b02y6addgpy3gn5axg7m10bqbqv7dg9yx9k85am590"))))
     (properties `((upstream-name . "RMySQL")))
     (build-system r-build-system)
     (native-inputs
@@ -2284,30 +2295,31 @@ PickleShare.")
         (method url-fetch)
         (uri (string-append "https://github.com/rogerbinns/apsw/archive/"
                             version ".tar.gz"))
+        (file-name (string-append "apsw-" version ".tar.gz"))
         (sha256
           (base32
            "00ai7m2pqi26qaflhz314d8k5i3syw7xzr145fhfl0crhyh6adz2"))))
     (build-system python-build-system)
     (inputs
-      `(("sqlite" ,sqlite)))
+     `(("sqlite" ,sqlite)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'build
            (lambda _
-             (zero?
-              (system* "python" "setup.py" "build" "--enable-all-extensions"))))
+             (invoke "python" "setup.py" "build" "--enable-all-extensions")
+             #t))
          (add-after 'build 'build-test-helper
            (lambda _
-             (zero?
-              (system
-               (string-append "gcc -fPIC -shared -o ./testextension.sqlext "
-                              "-I. -Isqlite3 src/testextension.c") ))))
+             (invoke "gcc" "-fPIC" "-shared" "-o" "./testextension.sqlext"
+                     "-I." "-Isqlite3" "src/testextension.c")
+             #t))
          (delete 'check)
          (add-after 'install 'check
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
-             (zero? (system* "python" "setup.py" "test")))))))
+             (invoke "python" "setup.py" "test")
+             #t)))))
     (home-page "https://github.com/rogerbinns/apsw/")
     (synopsis "Another Python SQLite Wrapper")
     (description "APSW is a Python wrapper for the SQLite
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 2354f0fbb9..6b566b0097 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -66,8 +66,6 @@
                     (bin (string-append out "/bin"))
                     (doc (string-append out "/share/doc/delta-" ,version)))
                (begin
-                 (mkdir-p bin)
-                 (mkdir-p doc)
                  (for-each (lambda (h)
                              (install-file h doc))
                            `("License.txt" ,@(find-files "www" ".*\\.html")))
@@ -75,7 +73,7 @@
                              (install-file b bin))
                            `("delta" "multidelta" "topformflat"))))
              #t))
-         (delete 'configure))))
+         (delete 'configure))))         ; no configure script
     (home-page "http://delta.tigris.org/")
     (synopsis "Heuristical file minimizer")
     (description
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index 25e4613170..3f50070ef7 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
+;;; Copyright © 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -211,7 +212,7 @@ It comes with a German-English dictionary with approximately 270,000 entries.")
 (define-public grammalecte
   (package
     (name "grammalecte")
-    (version "0.6.1")
+    (version "0.6.2")
     (source
      (origin
        (method url-fetch/zipbomb)
@@ -219,20 +220,8 @@ It comes with a German-English dictionary with approximately 270,000 entries.")
                            "Grammalecte-fr-v" version ".zip"))
        (sha256
         (base32
-         "0bl342i7nqbg8swk3fxashg9liyp3jdnix59pndhy41cpm1xln4i"))))
+         "0pvblclvbxbfgmq0cvmpmzpf6bi6r41arndwprl7ab9kci9hi8j2"))))
     (build-system python-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-setup.py
-           ;; FIXME: "setup.py" contains a typo in 0.6.1 release. The
-           ;; issue was reported and fixed upstream
-           ;; (https://dicollecte.org/thread.php?prj=fr&t=674). This
-           ;; phase can be removed in next release.
-           (lambda _
-             (substitute* "setup.py"
-               (("server_options\\.") "grammalecte-server-options."))
-             #t)))))
     (home-page "https://www.dicollecte.org")
     (synopsis  "French spelling and grammar checker")
     (description "Grammalecte is a grammar checker dedicated to the French
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index 0b447b5176..c52c812f00 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -36,13 +36,13 @@
 (define-public python-django
   (package
     (name "python-django")
-    (version "1.11.10")
+    (version "1.11.11")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Django" version))
               (sha256
                (base32
-                "1ndc7axr7cz8jwhr4mz16fvwd0jcd6i81q2wi9nl172s71kkaf12"))))
+                "1p0fk0dszci9gx76hyhay3n8n0k8r4sznbdcrpd9g2xl15rps1vl"))))
     (build-system python-build-system)
     (arguments
      '(#:modules ((srfi srfi-1)
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 67bbb153fb..a6f398ac3b 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -614,7 +614,7 @@ process, passing on the arguments as command line arguments.")
           'build 'pre-build
           (lambda* (#:key inputs #:allow-other-keys)
             (define (el-dir store-dir)
-              (match (find-files store-dir)
+              (match (find-files store-dir "\\.el$")
                 ((f1 f2 ...) (dirname f1))
                 (_ "")))
 
@@ -3546,6 +3546,7 @@ It is recommended to use @code{clojure-mode} with paredit or smartparens.")
               (uri (string-append
                     "https://github.com/cask/epl/archive/"
                     version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
                 "1511n3a3f5gvaf2b4nh018by61ciyzi3y3603fzqma7p9hrckarc"))))
@@ -4300,6 +4301,7 @@ CIDER).")
          (uri (git-reference
                (url "https://github.com/joaotavora/sly.git")
                (commit commit)))
+         (file-name (git-file-name name version))
          (sha256
           (base32
            "0ib4q4k3h3qn88pymyjjmlmnpizdn1mfg5gpk5a715nqsgxlg09l"))))
@@ -6889,7 +6891,7 @@ in a generalized CSV (character-separated values) format.")
 (define-public emacs-transmission
   (package
     (name "emacs-transmission")
-    (version "0.12")
+    (version "0.12.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -6898,7 +6900,7 @@ in a generalized CSV (character-separated values) format.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1y0bpsy16pycp6m9aqvfjh2x1yswfb305ib7m2slcjpb6njgxfi6"))))
+                "1rrlgn96gi1ljfwbwvlyyxbq75xzamlbdhq1bpyadxxmxcvlmk3n"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/holomorph/transmission")
     (synopsis "Emacs interface to a Transmission session")
@@ -7311,3 +7313,51 @@ Features:
     (description "@code{epipe} provides an utility to use your editor in
 the pipeline, featuring the support for running @code{emacsclient}.")
     (license license:gpl3+)))
+
+(define-public emacs-hcl-mode
+  (package
+    (name "emacs-hcl-mode")
+    (version "0.03")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/syohex/emacs-hcl-mode/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0pvw74qpwh0znqzp6syp4wxjqs7dp1hbn5h7xfk97mff9l5d8k6x"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/syohex/emacs-hcl-mode")
+    (synopsis "Major mode for the Hashicorp Configuration Language")
+    (description
+     "@code{emacs-hcl-mode} provides an Emacs major mode for working with
+@acronym{HCL, Hashicorp Configuration Language}.  It provides syntax
+highlighting and indentation support.")
+    (license license:gpl3+)))
+
+(define-public emacs-terraform-mode
+  (package
+    (name "emacs-terraform-mode")
+    (version "0.06")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/syohex/emacs-terraform-mode/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0h9267ifdjmcin4sj8slxydbacx4bqicbvg8pa1qq2l72h9m5381"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-hcl-mode" ,emacs-hcl-mode)))
+    (home-page "https://github.com/syohex/emacs-terraform-mode")
+    (synopsis "Major mode for Terraform")
+    (description
+     "@code{emacs-terraform-mode} provides a major mode for working with
+@uref{https://www.terraform.io/, Terraform} configuration files.  Most of the
+functionality is inherited from @code{hcl-mode}.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 413bc5f102..8550a89640 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Tomáš Čech <sleep_walker@suse.cz>
 ;;; Copyright © 2015 Daniel Pimentel <d4n1@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 ng0 <ng0@infotropique.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -60,7 +60,7 @@
 (define-public efl
   (package
     (name "efl")
-    (version "1.20.6")
+    (version "1.20.7")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -68,7 +68,9 @@
                     version ".tar.xz"))
               (sha256
                (base32
-                "1h9jkb1pkp2g6ld7ra9mxgblx3x5id4162ja697klx9mfjkpxijn"))))
+                "1zkn5ix81xck3n84dxvkjh4alwc6zj8x989d0zqi5c6ppijvgadh"))))
+    (outputs '("out"       ; 49 MB
+               "include")) ; 17 MB
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 1d73f4aef4..0e65213c72 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -114,6 +114,7 @@ single file can be mounted.")
        (uri (git-reference
              (url "https://github.com/ReproducibleBuilds/disorderfs.git")
              (commit "0.5.2")))
+       (file-name (git-file-name name version))
        (sha256
         (base32
          "1j028dq3d4m64mn9xmfamcnnc7i2drmra4pdmxdmqdsi8p7yj4sv"))))
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 12595dc31c..714af3df72 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 David Craven <david@craven.ch>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -70,11 +71,8 @@
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out    (assoc-ref outputs "out"))
                     (fw-dir (string-append out "/lib/firmware")))
-               (mkdir-p fw-dir)
                (for-each (lambda (file)
-                           (copy-file file
-                                      (string-append fw-dir "/"
-                                                     (basename file))))
+                           (install-file file fw-dir))
                          (find-files "." "\\.fw$"))
               #t))))
        #:tests? #f))
@@ -94,11 +92,11 @@ Linux-libre.")
     (license (license:non-copyleft "http://directory.fsf.org/wiki/License:ClearBSD"))))
 
 (define-public b43-tools
-  (let ((commit "8dce53297966b31b6c70a7a03c2433978dd9f288")
-        (rev "1"))
+  (let ((commit "27892ef741e7f1d08cb939744f8b8f5dac7b04ae")
+        (revision "1"))
     (package
       (name "b43-tools")
-      (version (string-append "20140625-" rev "." (string-take commit 7)))
+      (version (git-version "0.0.0" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -108,7 +106,7 @@ Linux-libre.")
          (file-name (string-append name "-" version "-checkout"))
          (sha256
           (base32
-           "08k7sdr9jagm43r2zv4h03j86klhkblpk73p12444a3vzg1gy1lv"))))
+           "1wgmj4d65izbhprwb5bcwimc2ryv19b9066lqzy4sa5m6wncm9cn"))))
       (build-system gnu-build-system)
       (native-inputs
        `(("flex" ,flex)
@@ -117,11 +115,11 @@ Linux-libre.")
        `(#:modules ((srfi srfi-1)
                     (guix build gnu-build-system)
                     (guix build utils))
-         #:tests? #f                    ;no tests
+         #:tests? #f                    ; no tests
          #:phases
          (let ((subdirs '("assembler" "disassembler")))
            (modify-phases %standard-phases
-             (delete 'configure)
+             (delete 'configure)        ; no configure script
              (add-before 'build 'patch-/bin/true
                (lambda _
                  (substitute* (find-files "." "Makefile")
@@ -129,21 +127,22 @@ Linux-libre.")
                  #t))
              (replace 'build
                (lambda _
-                 (every (lambda (dir)
-                          (zero? (system* "make" "-C" dir "CC=gcc")))
-                        subdirs)))
+                 (for-each (lambda (dir)
+                             (invoke "make" "-C" dir "CC=gcc"))
+                           subdirs)
+                 #t))
              (replace 'install
                (lambda* (#:key outputs #:allow-other-keys)
                  (let ((out (assoc-ref outputs "out")))
                    (mkdir-p (string-append out "/bin"))
-                   (every (lambda (dir)
-                            (zero?
-                             (system* "make" "-C" dir
-                                      (string-append "PREFIX=" out)
-                                      "install")))
-                          subdirs))))))))
+                   (for-each (lambda (dir)
+                               (invoke "make" "-C" dir
+                                       (string-append "PREFIX=" out)
+                                       "install"))
+                             subdirs)
+                   #t)))))))
       (home-page
-       "http://bues.ch/cms/hacking/misc.html#linux_b43_driver_firmware_tools")
+       "https://bues.ch/cms/hacking/misc.html#linux_b43_driver_firmware_tools")
       (synopsis "Collection of tools for the b43 wireless driver")
       (description
        "The b43 firmware tools is a collection of firmware extractor,
@@ -259,6 +258,8 @@ coreboot.")
                (setenv "WORKSPACE" cwd)
                (setenv "EDK_TOOLS_PATH" tools)
                (setenv "PATH" (string-append (getenv "PATH") ":" bin))
+               ; FIXME: The below script errors out. When using 'invoke' instead
+               ; of 'system*' this causes the build to fail.
                (system* "bash" "edksetup.sh" "BaseTools")
                (substitute* "Conf/target.txt"
                  (("^TARGET[ ]*=.*$") "TARGET = RELEASE\n")
@@ -268,14 +269,16 @@ coreboot.")
                           (number->string (parallel-job-count)))))
                ;; Build build support.
                (setenv "BUILD_CC" "gcc")
-               (zero? (system* "make" "-C" (string-append tools "/Source/C"))))))
+               (invoke "make" "-C" (string-append tools "/Source/C"))
+               #t)))
          (add-after 'build 'build-ia32
            (lambda _
              (substitute* "Conf/target.txt"
                (("^TARGET_ARCH[ ]*=.*$") "TARGET_ARCH = IA32\n")
                (("^ACTIVE_PLATFORM[ ]*=.*$")
                 "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgIa32.dsc\n"))
-             (zero? (system* "build"))))
+             (invoke "build")
+             #t))
          ,@(if (string=? "x86_64-linux" (%current-system))
              '((add-after 'build 'build-x64
                 (lambda _
@@ -283,7 +286,8 @@ coreboot.")
                     (("^TARGET_ARCH[ ]*=.*$") "TARGET_ARCH = X64\n")
                     (("^ACTIVE_PLATFORM[ ]*=.*$")
                      "ACTIVE_PLATFORM = OvmfPkg/OvmfPkgX64.dsc\n"))
-                  (zero? (system* "build")))))
+                  (invoke "build")
+                  #t)))
              '())
          (delete 'build)
          (replace 'install
@@ -299,7 +303,7 @@ coreboot.")
                    '()))
              #t)))))
     (supported-systems '("x86_64-linux" "i686-linux"))
-    (home-page "http://www.tianocore.org")
+    (home-page "https://www.tianocore.org")
     (synopsis "UEFI firmware for QEMU")
     (description "OVMF is an EDK II based project to enable UEFI support for
 Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 272e9bce96..a33da03ad5 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -370,7 +370,7 @@ effects and music to make a completely free game.")
     (version "3.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/golly/golly-"
+              (uri (string-append "mirror://sourceforge/golly/golly/golly-"
                                   version "/golly-" version
                                   "-src.tar.gz"))
               (sha256
@@ -3491,6 +3491,7 @@ Magic, Egypt, Indians, Norsemen, Persian or Romans.")
                 (uri (git-reference
                       (url "https://github.com/freegish/freegish.git")
                       (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "1p1zf5qqagmcpi1db2bs02cnalpy3qiymp6yzan7k1bhmv859gsx"))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 66b5383868..a097e2df7a 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -405,7 +405,7 @@ security standards.")
 (define-public icecat
   (package
     (name "icecat")
-    (version "52.3.0-gnu1")
+    (version "52.6.0-gnu1")
     (source
      (origin
       (method url-fetch)
@@ -414,7 +414,7 @@ security standards.")
                           "/" name "-" version ".tar.bz2"))
       (sha256
        (base32
-        "00jki754d6310fxj1b7dbhqj69y5igck6gqg6rgfya243nsb56k9"))
+        "09fn54glqg1aa93hnz5zdcy07cps09dbni2b4200azh6nang630a"))
       (patches
        (list
         (search-patch "icecat-avoid-bundled-libraries.patch")
@@ -422,125 +422,26 @@ security standards.")
         (search-patch "icecat-use-system-graphite2.patch")
         (mozilla-patch "icecat-bug-546387.patch"         "d13e3fefb76e" "1b760r0bg2ydbl585wlmajljh1nlisrwxvjws5b28a3sgjy01i6k")
         (mozilla-patch "icecat-bug-1350152.patch"        "f822bda79c28" "1wf56169ca874shr6r7qx40s17h2gwj7ngmpyylrpmd1c6hipvsj")
-        (mozilla-patch "icecat-bug-1388166.patch"        "fbb0bdb191d5" "1y8wpj38vw1dd6f375s9i0mrk9bd8z8gz5g70p4qynfllpkn072d")
-        (mozilla-patch "icecat-CVE-2017-7810-pt1.patch"  "fbddb5cdd3c7" "0k5nyl2z1y2rx9fwqyfj64678yv6v3pnmshgk552pbzqmaf8i1hq")
-        (mozilla-patch "icecat-CVE-2017-7810-pt2.patch"  "76c25987a275" "095b9vwsiza9ikbnnppfcld16h75x5bxjfxc73913y04n0i42ifh")
-        (mozilla-patch "icecat-CVE-2017-7810-pt3.patch"  "32eec29a85a5" "057simakqg56jvas1wkskg5kszn96m74nca26x08d5w7rzmbv1q2")
-        (mozilla-patch "icecat-bug-1373222.patch"        "ecef71fa933f" "0vsymgy5j702lamvh2riahni7rdj9ba3bd6i4a2m22d638rwp1i2")
-        (mozilla-patch "icecat-CVE-2017-7814.patch"      "68a444daf85b" "1faaadaajidzb9i00710zxdyv370hlrdg1l5rw2ymfmzbjj4jqyd")
-        (mozilla-patch "icecat-bug-1376825.patch"        "eeeec9cafc4e" "188qf6zi9kyxb33330yia6wmrd5mdyqn5hr1cl38zy7m3akv8srh")
-        (mozilla-patch "icecat-bug-1385272.patch"        "d68fa12fbffc" "13gh97vz9n2b7303jcvr1072iy8bghy9chvbmxzvw82prvkscavw")
-        (mozilla-patch "icecat-bug-1390002.patch"        "c24e6fc9f689" "0aswhy5fz2f6wzd5j5gg3nqvz707ip344089h2z2chcp146vxmf4")
-        (mozilla-patch "icecat-CVE-2017-7810-pt4.patch"  "ae110cf77596" "0gdrkfq9wy9cfcdgbj14ci86xgh2prkbz69pfy97r9igd8059syw")
-        (mozilla-patch "icecat-CVE-2017-7810-pt5.patch"  "b8417112486d" "1hya6lccz7vm51v4f6ww072794cwzmfn9xhxmvrnqbiyspxx5fz4")
-        (mozilla-patch "icecat-bug-1386905.patch"        "badbf4308211" "0fj1pyjqfdsbrlfykwmkzav2nvdj1f4grwq3cal9f7ay6wjnfs9b")
-        (mozilla-patch "icecat-CVE-2017-7810-pt6.patch"  "d78675515c78" "03w5hqy40xkckbaf5bm9kdbdqvp9ffvpk9mlrc9lja6b7qa4pjhg")
-        (mozilla-patch "icecat-bug-1382303.patch"        "f01155fe4d54" "0hnz1kvmvspg6453kydsklbvrjgzn8x3djvrym3f2xl2yinaf90d")
-        (mozilla-patch "icecat-bug-1393467.patch"        "4eec2a60622c" "1h006mwcsagq7mz7haymwgr7fn4zj14n5lxbjcmhdqrxdvma2hjj")
-        (mozilla-patch "icecat-bug-1384801.patch"        "9556e792f905" "0i74r807189s8i78483caiifw68cn7fs543i4cys6k3gn12dhhjy")
-        (mozilla-patch "icecat-CVE-2017-7823.patch"      "bd284765b5bc" "1c4hss87kc4qwx30magbqczm9h7zmwirjfc8zimqbrnwv9bbsfh3")
-        (mozilla-patch "icecat-CVE-2017-7805.patch"      "113da8d46aa4" "1vy0lw659mwixmb57mgybga152rdwqd5zj1g7nfw1zgp15pfwr75")
-        (mozilla-patch "icecat-bug-1376399.patch"        "58a574502ca9" "1zmg91pg0s5nwngc32a4fywidvxyaayvx1h052fsv0i4cfm16l9v")
-        (mozilla-patch "icecat-bug-1396570.patch"        "24db61862c54" "0af1jjfma042xvn0xhgims1yvb2b51nhn4m0pcfwg3fn0llmka03")
-        (mozilla-patch "icecat-CVE-2017-7819.patch"      "1a02f11c6efe" "18a9qvdvrqw34qw3lljg6gkn358jl23lyimhmbc964023rhs36sz")
-        (mozilla-patch "icecat-CVE-2017-7810-pt7.patch"  "002686d9536f" "065g0d759wfiaj69b1sqg7l08p2knc0q9m9hvkgwwsf0r78xcbjj")
-        (mozilla-patch "icecat-CVE-2017-7810-pt8.patch"  "eaadb31758d8" "0b3k3la6ykac5mbp9gyqqgjbmj19vx9sl1b0wp387qar0p12nyaz")
-        (mozilla-patch "icecat-bug-1368269.patch"        "0cff5e66e0f4" "0jb0wqi7c0ih4441s1908j6gv18v4inh7k2w47h3c9nhz4rgyrw7")
-        (mozilla-patch "icecat-CVE-2017-7793.patch"      "6ff3c82962f0" "0bw82034kdmrpznigbavzzsiybzrw8giyf8v0z2cxf6mwl72bf9k")
-        (mozilla-patch "icecat-bug-1400399.patch"        "d6f78b1349b7" "0i3gwr2al3xl65yfa3nimvy8dp0jzpx21f6bjw18xwn7zkkh9j54")
-        (mozilla-patch "icecat-bug-1400721.patch"        "285cde398833" "0a1i32zl30wfyw7zkqj595s94n6wdlg5c495m0910pd05pjg3qam")
-        (mozilla-patch "icecat-CVE-2017-7826-pt01.patch" "98b3988592a6" "03wy173lj6mvmh5q92brf596h8676h0zasgqfnndpvsmsiaih120")
-        (mozilla-patch "icecat-CVE-2017-7826-pt02.patch" "47590f0c274b" "0zsys6dcyhfb4a8k2dhsls7425jg6r1ijlrsn1lc5smwyf62zx5v")
-        (mozilla-patch "icecat-CVE-2017-7826-pt03.patch" "55b435cbbb55" "1gcasaqrxa13a55v05bkxl3d1md829kpfhqiaws83wn08x28l0my")
-        (mozilla-patch "icecat-CVE-2017-7826-pt04.patch" "8549cf2dab3e" "168gs32ncavaj9xn4gwhh9i01cbpnhgx9yn333apsrc1gwknpvsr")
-        (mozilla-patch "icecat-CVE-2017-7826-pt05.patch" "349acf56ff49" "1vwn87rdryfjsn809pl50xmr82q98gz3vz9h6clkd905vbd9rwz7")
-        (mozilla-patch "icecat-CVE-2017-7826-pt06.patch" "3af5bf8bdea0" "07az28dnpxr36j7i3llxkrlkrmg0bwk4f3sm75x1f0r1v5575p3p")
-        (mozilla-patch "icecat-CVE-2017-7826-pt07.patch" "592df6088926" "1gy27idik4b6wcg4szww08cmpcljssja8wql6w1d807h7ni65lr7")
-        (mozilla-patch "icecat-CVE-2017-7826-pt08.patch" "77a2d4610275" "13ysbwflnysj4rs45ibckd621s0vyg1s8dvannlvanvrz1g72zcz")
-        (mozilla-patch "icecat-CVE-2017-7826-pt09.patch" "2b30335d0b95" "0hs5cwickvfw7r5dn7y148jgr2b21hl613qp83k56634d0y64qwp")
-        (mozilla-patch "icecat-CVE-2017-7826-pt10.patch" "d6f008f95598" "0xclxrbg7pv8pa2j15p0gy9c8sigy2i9j0kvazl5fbyg6jsg3xgd")
-        (mozilla-patch "icecat-CVE-2017-7826-pt11.patch" "ab9b51cd75ac" "08jy3rbkyh934aw261ls0s87947d2mhss7xqk1xfdir9crij2g27")
-        (mozilla-patch "icecat-bug-1343147-pt1.patch"    "971d6345bc3a" "13791cvc51i991i5qyz6gp94vwzwkx479bnr8fsf8dw7z72wrsch")
-        (mozilla-patch "icecat-bug-1343147-pt2.patch"    "60df7db06669" "0r372g1zksvkzyz0qpq0mp30frilgsfxxx2xida8xc08wgxp5lh9")
-        (mozilla-patch "icecat-CVE-2017-7826-pt12.patch" "df49c25e6e4c" "0j77xbkxpflqf4jlccrv61vq0jgp4lfn8kb0zw1lswp3cyd6ml4i")
-        (mozilla-patch "icecat-CVE-2017-7826-pt13.patch" "3b899f872623" "01zjcpm8yp4s8yf4mj1bzq01aylmi69kd8qv0rrcl9hmj4g3pzr2")
-        (mozilla-patch "icecat-CVE-2017-7826-pt14.patch" "3d6d558ae6a6" "17wynknvs5wi7m9g5vn43rjmivbg1l6pnv8jymz1ccidy27qgdqi")
-        (mozilla-patch "icecat-CVE-2017-7826-pt15.patch" "8426754b7130" "0bbm2294bkvld55rdbpsc8b82ljqdcxpbg6cwdzvwfhqayl2pnqm")
-        (mozilla-patch "icecat-CVE-2017-7828-pt1.patch"  "5ddd5d2aa769" "12z5i8h6qwjb1h1fvp2426bgsnsxx539d8k2is9x1q4133356niy")
-        (mozilla-patch "icecat-CVE-2017-7826-pt16.patch" "dd068f4e132a" "17qy9c1vfkz3pj6y8qmqbic73wrangsbdlylk2s54nbzhhp9cj1g")
-        (mozilla-patch "icecat-CVE-2017-7826-pt17.patch" "e6bd533b57e9" "1mmqav9yhxd0j47yffcdykaqjibfwjsk0jn0f44099s87y8qn9zy")
-        (mozilla-patch "icecat-CVE-2017-7826-pt18.patch" "2a87fb6b9c07" "0z0scw4y1vqhqkbw1ag14g8xrif14l95x7fd50q2sw425lli29lc")
-        (mozilla-patch "icecat-bug-1404910.patch"        "5007f2472f64" "0ns1l4yipwbb52sps2xzg30qd1rkpwykxq4chjg3wllhmcxbvvpw")
-        (mozilla-patch "icecat-CVE-2017-7830.patch"      "04e3b5c1f0b2" "0nmv3jnx94ykxg64xkiwc8kx4df8zw7y5yzjnxz1sll2v88b9hmf")
-        (mozilla-patch "icecat-CVE-2017-7828-pt2.patch"  "2f48c03d9b3f" "16qdy3rahmkhsjnzqjcgzg1a4k7czd40m04gs9i75cd88kbripri")
-        (mozilla-patch "icecat-bug-1348660-pt1.patch"    "a352bfcbaf55" "1j3kxnhci9fh3lj8rizbcfv8xzn5kikxwpfy8a091d51sdn20873")
-        (mozilla-patch "icecat-bug-1348660-pt2.patch"    "57f43e2ab9b5" "1jva4y79zb85npak3mddrx5rsf4mxczb314kcr8yhlkwqv0nx5sp")
-        (mozilla-patch "icecat-bug-1348660-pt3.patch"    "917d65bb8896" "0k29y8i96lanqjjm6vybg0s6gjbk1mz5bfnga6aj1g0hnb7c3s8d")
-        (mozilla-patch "icecat-bug-1348660-pt4.patch"    "28934912eede" "1mhxw26050l3d09n8w912a86df87afcshvsk9k1k375anfk0927x")
-        (search-patch  "icecat-bug-1348660-pt5.patch")
-        (mozilla-patch "icecat-bug-1348660-pt6.patch"    "556ff3bfb9fc" "0kckjc8jp885xfaiwx2b9qnk1plqjhi0mwhjjcmfajvh3l3mrl8h")
-        (mozilla-patch "icecat-bug-1350564.patch"        "2abf26abb2a2" "0axdzp9g9k74wpkwrsdx263h01sv9bd3rarhhl68xnvc7n6i45lx")
-        (mozilla-patch "icecat-bug-1404787.patch"        "8335e1d7b140" "17d7kb8ginzflhdkrbi60vh2b907spbzmvwih7a595gqpihmnqqn")
-        (mozilla-patch "icecat-CVE-2017-7826-pt19.patch" "de336078d36b" "0gyzbap8hr1iywk0x2x0h7z7zp7q89hi56h8c03vvc7771dkvjkf")
-        (mozilla-patch "icecat-bug-1047098-pt1.patch"    "088577f0c46e" "0y3sz6kx07ls7jsvhqhhrl6v69a94wqvv3lz7hnplah23y06h17z")
-        (mozilla-patch "icecat-bug-1047098-pt2.patch"    "c7e3abf74023" "11dcjzx56v4yb2dvm23j2g86q8yva2hc69lmb7s5w18l6ygwwhzr")
-        (mozilla-patch "icecat-bug-1047098-pt3.patch"    "36bd15d14c5a" "0cb3l3hpsgk674f08kfamxhqfga3ah5v904gpxq9ag006vzd2cxz")
-        (mozilla-patch "icecat-bug-1404105.patch"        "2909ba991f31" "126vssj57dc800347f075wlnjzcwamnxxmgxl9w78jpb0hj9gf16")
-        (search-patch  "icecat-bug-1415133.patch")
-        (mozilla-patch "icecat-bug-1355576.patch"        "cf34a0574e58" "1z7sa1d12hypgivm5xxn32s58afpjcij97jvnafcgnfvxywrgr1m")
-        (mozilla-patch "icecat-CVE-2017-7843.patch"      "f6216ea8b8fc" "0jnhdkj0ch9mj01mzlvhjgf8zsxlbg6m7yvpq99qr7xmg0pzbgwl")
-        (mozilla-patch "icecat-bug-1413741.patch"        "4e00ce2897c4" "0k95vi31glia2i03djidkc0gkwp9qldy34fz1rxcj56a1iphbq7w")
-        (mozilla-patch "icecat-CVE-2018-5089-pt01.patch" "92d450811409" "0xsvggnr0y65nd52nkbjvpcbs5nd84pvbayk5vinbx1mnk2wh2vy")
-        (mozilla-patch "icecat-CVE-2018-5089-pt02.patch" "7eba7d14704a" "1vi17qmjzh3kji14iz370kvs4425asgp93ns2chf5ldlq5b9196g")
-        (mozilla-patch "icecat-CVE-2018-5089-pt03.patch" "457d023c167e" "11g8hg8yp20lsn52dx1ym8r4yjsnsmx0h182d6nbl6ab9wp7d1m9")
-        (mozilla-patch "icecat-CVE-2018-5089-pt04.patch" "5e7b16213198" "14c4x6c3mygf8p77n9bia5rndjpngbvik1r1ylk97k3ggy4fj6zh")
-        (mozilla-patch "icecat-CVE-2018-5102.patch"      "0712b6cbbdc8" "0rllsq6ckpms7g9k6qky1gr5rz1gav4widrha6w1s9f88cbrqgk5")
-        (mozilla-patch "icecat-CVE-2018-5089-pt05.patch" "084c427ccf99" "0sjdy2iang09a9g6liavpjgry04dp6smjgj0y7lp5lfqijdr8q2d")
-        (mozilla-patch "icecat-CVE-2018-5089-pt06.patch" "1bfb3d8d4510" "0c2dcxj74ijs6qf9sqcbj8w998hblic66vy41818z7xnw46j5j1j")
-        (mozilla-patch "icecat-bug-1414425.patch"        "5623e01e63a8" "08dn3v96bsb61hy3wfxz43fhn1mk9vlm5ydvdjgi3wiqadvacgzs")
-        (mozilla-patch "icecat-CVE-2018-5089-pt07.patch" "14a389d40329" "0f4gbak5bd2walxrxs3myig28v9lhvplf3a1nws1a4ajx80slzq1")
-        (mozilla-patch "icecat-bug-1415441.patch"        "7339297cddb7" "017lbw0mn5rwzb2abfw6qrk07m3r96vwbj81cmqvdfnmprcjni5j")
-        (mozilla-patch "icecat-CVE-2018-5096.patch"      "aa55d4cdaee5" "1l3qwjfx0jsbbw2dg8bsnx7k47zibamgswndq0d1bchnmary62aw")
-        (mozilla-patch "icecat-bug-1382358.patch"        "762f4e53889a" "0n61zrb6rz9bhhdsqs5ziwaiy81pq52c76p9qmi9hrxbn24ism1k")
-        (mozilla-patch "icecat-CVE-2018-5089-pt08.patch" "0152d097672f" "16ybg718calvciv00kil8s97lhh11hj6gx0acf73r44xfkvm8nfg")
-        (search-patch  "icecat-bug-1414945.patch")
-        (mozilla-patch "icecat-CVE-2018-5089-pt09.patch" "079356ed5317" "107c0b93g2k743wvhwz2ps3j6p09qld7d0raljijv5y5n8q4wp92")
-        (mozilla-patch "icecat-CVE-2018-5089-pt10.patch" "93e4994a892c" "00r2qxw3619529vy9d04dl9kcziqy3fv3iawgy9svzygyx1kj5wx")
-        (mozilla-patch "icecat-CVE-2018-5089-pt11.patch" "f8a6e1864832" "1wbxn0v50637yjg8b8675k01x9cyx95jpjxpyqfaa97762qkznba")
-        (mozilla-patch "icecat-CVE-2018-5089-pt12.patch" "0cc1c9068714" "1qmqpi14zs7c95k3c7396gpp6apb622k0mgv553kw4rr81nj1yac")
-        (mozilla-patch "icecat-CVE-2018-5095.patch"      "ce6f3fb2bf58" "1b1msb5d5jsgrqa2hkbsrm0n54qdmx1b2bf65v44v17appa03lra")
-        (mozilla-patch "icecat-CVE-2018-5103.patch"      "6b4d3c5d5e51" "074p93dhwr1ckhypkjpblnmg9hg44a9030g1glqffi9dyn3iq3k4")
-        (mozilla-patch "icecat-bug-1411745.patch"        "1a510ee578a0" "1imb7glh2m1zwvvpvr4k4iddms5byqzr35j7kv3y5is77aiwl4z5")
         (mozilla-patch "icecat-bug-1411708.patch"        "34c968767eb7" "0l2jy201ikj3m3h66mvlsj4y0ki7cpm7x7nnfygbwnfxg42s1sip")
-        (mozilla-patch "icecat-CVE-2018-5091.patch"      "bc166be85bb4" "0w1lrjzfrfflaw4l6sfi3ir81iyi9gyfck5g41dwp0jc1b59jzvg")
-        (mozilla-patch "icecat-CVE-2018-5089-pt13.patch" "66cfc3c4047d" "05j8ic4lv2d2ygr6d62rkdlfyg2rpljalwrkkhllinw2dfi3n15b")
-        (mozilla-patch "icecat-CVE-2018-5098.patch"      "3236ffdf0ced" "1kvk4qyslaj1ldgs1wpxnf79zajcihzcd1zvbrg990i3hgyn3gk3")
-        (mozilla-patch "icecat-bug-1424373-pt1.patch"    "320032aaa068" "1ch282qibprz1q0f2imvynh4sg7gads6sf3ayhjcd62zjncpgyz7")
-        (search-patch  "icecat-bug-1424373-pt2.patch")
-        (mozilla-patch "icecat-CVE-2018-5089-pt14.patch" "c2945f1249eb" "18p0344w6grpyfiz8dczfw977p0qy37iqv95whgnrjli2ab51kji")
-        (mozilla-patch "icecat-CVE-2018-5117-pt1.patch"  "263165eacc54" "0518xnd9f4qkn7l0z73kldm9dr33y6hf054ril4f8r2j8s9fy33i")
-        (mozilla-patch "icecat-CVE-2018-5117-pt2.patch"  "58e87d9cc44e" "0j9qwjm25bmhw0sj426yl4fqaa6zknf5cjk0yisdd3895652n5i4")
-        (mozilla-patch "icecat-CVE-2018-5089-pt15.patch" "aa4b11615431" "0whfvwaj3dmk89ah2kbv7zz7a8ckqa0xajf5fl12bgl7q8c8ndnm")
-        (mozilla-patch "icecat-CVE-2018-5104.patch"      "66761c5bfbe1" "076128pxc7ik1zq2v0d5m6vd7nls2030jzdc4w0ggy8hd5yyb8g9")
-        (mozilla-patch "icecat-bug-1408631.patch"        "6f5c8df1925d" "1hgr18p5dwhlsan6jxlj3ay7cbfyywk40bpbnjc8gqmq6y25cn48")
-        (mozilla-patch "icecat-bug-1422735.patch"        "b88ef76f5687" "0rzpxfrhddc0238rq3r1b02j95g0rdplk1fjmk85m51xvggh9086")
-        (mozilla-patch "icecat-bug-1261963.patch"        "d0c98f5b6c12" "1z9jn19hnwjand9c0ifc39gq71nz17jjqy2s5fqr2z06y8qys62h")
-        (mozilla-patch "icecat-CVE-2018-5089-pt16.patch" "f7865afb1fe6" "0i7ydmcr1g0ih3myyxaxjq6wfg3rvq5j4893kjqksqihfqrkzs4j")
-        (mozilla-patch "icecat-CVE-2018-5097.patch"      "9fb7614319df" "1xirahk06w8pyw4pdh64f4pg3qcb7c8x8frrmad2895fagy14g4k")
-        (mozilla-patch "icecat-mitigate-spectre.patch"   "81d6465bd7c2" "1za5l249pb5x7f283vrimy0ankjzvwa99hfql3v4fm5a4grjkj9n")
-        (mozilla-patch "icecat-CVE-2018-5089-pt17.patch" "5f753161df25" "1k2mpwagz08wzxfzwy2b4a0pz0hkhdqby6n11i7pasx3ary670km")
-        (mozilla-patch "icecat-CVE-2018-5099.patch"      "b95d654de120" "1cv7nz2gsyjjigw6wv4xagh8q6bcg0971md8b6xjvz5m26aynlaw")
-        (mozilla-patch "icecat-bug-1408631.patch"        "3b1faddc0e5f" "0817x5mrdyjj0gc9yi19m6d78d18ypc9nbld64d2axhc8v9bz3xf")
-        (mozilla-patch "icecat-glibc-2.26.patch"         "57d4fae4dffe" "1sv7kp7m4i7n31ny8k7cpjsrqpxh5y5jm27sh2cgpj7fhi5kqsj2")
-        (mozilla-patch "icecat-CVE-2018-5089-pt18.patch" "fe271a2b9503" "11wr8mdxw01dlmzkq55hf0qd52cwmx4vk96cff66d4kkl1dbj6qn")
-        (mozilla-patch "icecat-CVE-2018-5089-pt19.patch" "410da936a1e8" "14dvaysz0svlh50kdabjhd2s5avz6p93sbyqhwik5rlvcg5ax5zp")
-        (mozilla-patch "icecat-CVE-2018-5089-pt20.patch" "8368a9a379e3" "0fqq01ms7m4kb9b10n8gy5n9n4x43crz2gn1r6c4ny52wzgm3j6f")
-        (mozilla-patch "icecat-CVE-2018-5089-pt21.patch" "a7c8e85285e2" "1caa2w5r8rqb1qrk4mgf2vw1k592idvqmgs8qfz2dp2744kk6z98")
         (mozilla-patch "icecat-bug-1375217.patch"        "00fc630c9a46" "17pcprp452nslk6sac6sili0p74zh8w3g0v1wsdn0ikm9xmnphhv")
         (mozilla-patch "icecat-bug-1261175.patch"        "f0ec180993d2" "0jiazxcwki83wr00fyh2g518ynsd33p7nk65zk4d1682gn22lc8v")
         (mozilla-patch "icecat-bug-1433005.patch"        "a6a9e26688c1" "0cvizvilb4k422j2gzqcbakznvsffmk6n6xn1ayj5rgxfaizkkqk")
         (mozilla-patch "icecat-bug-1434580.patch"        "198ad052621e" "1721zx8hifdlflrhvw6hmkdgjbvsmxl9n84iji5qywhlp2krdk9r")
-        (mozilla-patch "icecat-bug-1426087.patch"        "391ea77ebfdb" "1fhkvd0z6mvdkj7m0d3jlj42rsdw5r4x122c1wb1i428228ifw6n")))
+        (mozilla-patch "icecat-bug-1426087.patch"        "391ea77ebfdb" "1fhkvd0z6mvdkj7m0d3jlj42rsdw5r4x122c1wb1i428228ifw6n")
+        (mozilla-patch "icecat-bug-1416307.patch"        "54f2f7f93b30" "1ncjir16mqya37wgf6fy2rqki3vl433c4grjr3fypmlig6xfgg1l")
+        (mozilla-patch "icecat-bug-1430557.patch"        "2c4d7a59041b" "178c6gid89cvw52yqs43i6x6s5w0hslj0rfa2r8b4762ij3civ92")
+        (mozilla-patch "icecat-bug-1416529.patch"        "f87ef3774d5e" "0payf3az2w93nzl5qknqx290jbxk8v39rwhdgq7wyd5f245dywxk")
+        (mozilla-patch "icecat-bug-1324042.patch"        "ac743923f81d" "0msyr45xr1j5q4x6ah4r907pwjngyi0k6pp9y8ixk21cnwbzrdwx")
+        (mozilla-patch "icecat-bug-1428947.patch"        "456913d7e8b5" "0fx0s06kxxj7g4hllinaskgh41z3k48zml6yqqzxx485qk3hdh9x")
+        (mozilla-patch "icecat-bug-1334465-pt1.patch"    "f95c5b881442" "0iaddhf65jd9cycj4bw0b207n2jiqkr4q84jifzyqn4ygs75wdqd")
+        (mozilla-patch "icecat-bug-1334465-pt2.patch"    "8a4265c8fb41" "1d9zfdbrlw9wzr84b7pj7lxgy487lsx0kfd89287hjk0al8m6vrw")
+        (mozilla-patch "icecat-bug-1398021.patch"        "28855df568d8" "1kmq836gniplxpjnvq8lhbcc1aqi56al628r1mzdy94b5yb0lis3")
+        (mozilla-patch "icecat-bug-1388020.patch"        "e8ab2736499b" "0n28vcd65rxsyq3z22rfcfksryfndhm1i3g6ah3akg11jnagqf5v")
+        (mozilla-patch "icecat-bug-1437087.patch"        "014877bf17ea" "0hk90pnf7h7kvidji6ydvva1zpyraipn03pjhvprdqr7k2fqzmsz")
+        (mozilla-patch "icecat-bug-1437507.patch"        "5b3a5de48912" "1ifya05rcd34ryp9zawdacihhkkf2m0xn2q8m8c6v78bvxj0mgig")
+        (mozilla-patch "icecat-bug-1440926.patch"        "1df9b4404acd" "1sd59vsarfsbh3vlrzrqv6n1ni7vxdzm83j6s6g0fygl1h8kwijg")
+        (mozilla-patch "icecat-bug-1430173-pt1.patch"    "9124c3972e2b" "13ns5yy39yzfx7lrkv4rgwdz6s6q0z4i09wkbxdvnkfsz17cd17i")
+        (mozilla-patch "icecat-bug-1430173-pt2.patch"    "9f6dc031be51" "0bv2p98z5ahp3x9wxnhwxn87g21djvzzp7jy55ik90hqixsbhwdl")))
       (modules '((guix build utils)))
       (snippet
        '(begin
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index e201ac8e4c..20a8c538be 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -502,6 +502,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                 (uri (git-reference
                        (url "https://github.com/alsm/ioprogress.git")
                        (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "10ym5qlq77nynmkxbk767f2hfwyxg2k7hrzph05hvgzv833dhivh"))))
@@ -527,6 +528,7 @@ writers can be supplied for alternate environments.")
                 (uri (git-reference
                        (url "https://github.com/aki237/nscjar.git")
                        (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "03y7zzq12qvhsq86lb06sgns8xrkblbn7i7wd886wk3zr5574b96"))))
@@ -551,6 +553,7 @@ jar struct to manage the cookies added to the cookie jar.")
                 (uri (git-reference
                        (url "https://github.com/davidjpeacock/cli.git")
                        (commit commit)))
+                (file-name (git-file-name name version))
                 (sha256
                  (base32
                   "01s53ny3p0fdx64rnwcnmjj4xpc5adihnh6islsfq5z1ph2phhnj"))))
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index 70df77b5d2..19c9b2269b 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,6 +18,7 @@
 
 (define-module (gnu packages graph)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
@@ -172,3 +173,29 @@ model.")
      "This package interfaces R with the graphviz library for plotting R graph
 objects from the @code{graph} package.")
     (license license:epl1.0)))
+
+(define-public r-rbiofabric
+  (let ((commit "666c2ae8b0a537c006592d067fac6285f71890ac")
+        (revision "1"))
+    (package
+      (name "r-rbiofabric")
+      (version (string-append "0.3-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/wjrl/RBioFabric.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1yahqrcrqpbcywv73y9rlmyz8apdnp08afialibrr93ch0p06f8z"))))
+      (build-system r-build-system)
+      (propagated-inputs
+       `(("r-igraph" ,r-igraph)))
+      (home-page "http://www.biofabric.org/")
+      (synopsis "BioFabric network visualization")
+      (description "This package provides an implementation of the function
+@code{bioFabric} for creating scalable network digrams where nodes are
+represented by horizontal lines, and edges are represented by vertical
+lines.")
+      (license license:expat))))
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index dbb9ebc808..e7401e5cf4 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -1072,7 +1072,7 @@ patterns as per the HaRP extension as well as HSX-style embedded XML syntax.")
     (synopsis "Specify refactorings to perform with apply-refact")
     (description
      "This library provides a datatype which can be interpreted by
-@code{apply-refact}.  It exists as a seperate library so that applications can
+@code{apply-refact}.  It exists as a separate library so that applications can
 specify refactorings without depending on GHC.")
     (license license:bsd-3)))
 
@@ -8181,12 +8181,12 @@ Background: There exists a feature space for queues that extends between:
 @itemize
 @item Simple, single-ended, non-concurrent, bounded queues
 
-@item Double-ended, threadsafe, growable queues with important points
-inbetween (such as the queues used for work-stealing).
+@item Double-ended, thread-safe, growable queues with important points
+in between (such as the queues used for work stealing).
 @end itemize
 
 This package includes an interface for Deques that allows the programmer
-to use a single API for all of the above, while using the type-system to
+to use a single API for all of the above, while using the type system to
 select an efficient implementation given the requirements (using type families).
 
 This package also includes a simple reference implementation based on
@@ -8532,6 +8532,8 @@ functions.")
         (base32
          "09xhk42yhxvqmka0iqrv3338asncz8cap3j0ic0ps896f2581b6z"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:configure-flags (list "--allow-newer=QuickCheck")))
     (inputs `(("ghc-cryptohash-sha1" ,ghc-cryptohash-sha1)
               ("ghc-cryptohash-md5" ,ghc-cryptohash-md5)
               ("ghc-entropy" ,ghc-entropy)
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index a3887ee22d..7a33f6c871 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -59,7 +59,7 @@
 (define-public feh
   (package
     (name "feh")
-    (version "2.24")
+    (version "2.25")
     (home-page "https://feh.finalrewind.org/")
     (source (origin
               (method url-fetch)
@@ -67,7 +67,7 @@
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "148qbxkk5m7i3cxymnfwi7aikqjyfxr306dlqm9ndp6x932js5wq"))))
+                "102rwi30n09l8rih6kv6bb7lhv3djklgzill4p2zag0h700yqfq6"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases (delete 'configure))
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index f1a3cb23f4..dc5a30b868 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -87,7 +87,10 @@
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)))
     ;; FIXME: tests require gmock
-    (arguments `(#:tests? #f))
+    (arguments
+     `(#:tests? #f
+       #:make-flags
+       '("gtk_update_icon_cache=true")))
     (home-page "https://inkscape.org/")
     (synopsis "Vector graphics editor")
     (description "Inkscape is a vector graphics editor.  What sets Inkscape
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index b00fd6cc19..e59b34417b 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 ng0 <ng0@infotropique.org>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -272,23 +272,23 @@ using a mouse.  It is customizable and extensible with plugins and scripts.")
 (define-public ii
   (package
     (name "ii")
-    (version "1.7")
+    (version "1.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dl.suckless.org/tools/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "176cqwnn6h7w4kbfd66hzqa243l26pqp2b06bii0nmnm0rkaqwis"))))
+                "1lk8vjl7i8dcjh4jkg8h8bkapcbs465sy8g9c0chfqsywbmf3ndr"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no tests
+     `(#:tests? #f                      ; no tests
        #:make-flags (list (string-append "PREFIX=" %output)
                           "CC=gcc")
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)))) ; no configure
-    (home-page "http://tools.suckless.org/ii/")
+         (delete 'configure))))         ; no configure
+    (home-page "https://tools.suckless.org/ii/")
     (synopsis "FIFO and file system based IRC client")
     (description
      "ii (Irc it) is a minimalist FIFO and file system based IRC client.")
@@ -313,7 +313,7 @@ using a mouse.  It is customizable and extensible with plugins and scripts.")
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)))) ; no configure
-    (home-page "http://tools.suckless.org/sic/")
+    (home-page "https://tools.suckless.org/sic/")
     (synopsis "Simple IRC client")
     (description
      "sic is a simple IRC client, even more minimalistic than ii.")
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 0f8c04e8ba..5cc4a56f81 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -59,6 +59,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux) ;alsa
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages web)
   #:use-module (gnu packages wget)
   #:use-module (gnu packages pkg-config)
@@ -2084,6 +2085,444 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
     (native-inputs
      `(("unzip" ,unzip)))))
 
+(define-public java-cisd-base
+  (let ((revision 38938)
+        (base-version "14.12.0"))
+    (package
+      (name "java-cisd-base")
+      (version (string-append base-version "-" (number->string revision)))
+      (source (origin
+                (method svn-fetch)
+                (uri (svn-reference
+                      (url (string-append "http://svnsis.ethz.ch/repos/cisd/"
+                                          "base/tags/release/"
+                                          (version-major+minor base-version)
+                                          ".x/" base-version "/base/"))
+                      (revision revision)))
+                (file-name (string-append "java-cisd-base-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1i5adyf7nzclb0wydgwa1az04qliid8035vpahaandmkmigbnxiy"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Delete included gradle jar
+                    (delete-file-recursively "gradle/wrapper")
+                    ;; Delete pre-built native libraries
+                    (delete-file-recursively "libs")
+                    #t))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:make-flags '("-file" "build/build.xml")
+         #:test-target "jar-test"
+         #:jdk ,icedtea-8
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'unpack-build-resources
+             (lambda* (#:key inputs #:allow-other-keys)
+               (copy-recursively (assoc-ref inputs "build-resources")
+                                 "../build_resources")
+               #t))
+           (add-after 'unpack-build-resources 'fix-dependencies
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "build/build.xml"
+                 (("\\$\\{lib\\}/testng/testng-jdk15.jar")
+                  (string-append (assoc-ref inputs "java-testng")
+                                 "/share/java/java-testng.jar"))
+                 (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
+                  (string-append (assoc-ref inputs "java-commons-lang")
+                                 "/share/java/commons-lang-"
+                                 ,(package-version java-commons-lang) ".jar"))
+                 (("\\$\\{lib\\}/commons-io/commons-io.jar")
+                  (string-append (assoc-ref inputs "java-commons-io")
+                                 "/share/java/commons-io-"
+                                 ,(package-version java-commons-io)
+                                 "-SNAPSHOT.jar"))
+                 ;; Remove dependency on svn
+                 (("<build-info.*") "")
+                 (("\\$\\{revision.number\\}")
+                  ,(number->string revision))
+                 (("\\$\\{version.number\\}") ,base-version))
+               ;; Remove dependency on classycle
+               (substitute* "../build_resources/ant/build-common.xml"
+                 (("<taskdef name=\"dependency-checker.*") "")
+                 (("classname=\"classycle.*") "")
+                 (("classpath=\"\\$\\{lib\\}/classycle.*") ""))
+               #t))
+           ;; A few tests fail because of the lack of a proper /etc/groups and
+           ;; /etc/passwd file in the build container.
+           (add-after 'unpack 'disable-broken-tests
+             (lambda _
+               (substitute* "sourceTest/java/ch/systemsx/cisd/base/AllTests.java"
+                 (("Unix.isOperational\\(\\)") "false"))
+               #t))
+           ;; These decorators are almost useless and pull in an unpackaged
+           ;; dependency.
+           (add-after 'unpack 'remove-useless-decorators
+             (lambda _
+               (substitute* "source/java/ch/systemsx/cisd/base/unix/Unix.java"
+                 (("@Private") "")
+                 (("import ch.rinn.restrictions.Private;") ""))
+               (substitute* "sourceTest/java/ch/systemsx/cisd/base/unix/UnixTests.java"
+                 (("@Friend.*") "")
+                 (("import ch.rinn.restrictions.Friend;") ""))
+               #t))
+           (add-before 'configure 'build-native-code
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((jdk (assoc-ref inputs "jdk"))
+                     (dir ,(match (%current-system)
+                             ("i686-linux"
+                              "i386-Linux")
+                             ((or "armhf-linux" "aarch64-linux")
+                              "arm-Linux")
+                             ((or "x86_64-linux")
+                              "amd64-Linux")
+                             (_ "unknown-Linux"))))
+                 (with-directory-excursion "source/c"
+                   (invoke "gcc" "-shared" "-O3" "-fPIC" "unix.c"
+                           (string-append "-I" jdk "/include")
+                           (string-append "-I" jdk "/include/linux")
+                           "-o" "libunix.so")
+                   (invoke "gcc" "-shared" "-O3" "-fPIC"
+                           "-DMACHINE_BYTE_ORDER=1"
+                           "copyCommon.c"
+                           "copyByteChar.c"
+                           "copyByteDouble.c"
+                           "copyByteFloat.c"
+                           "copyByteInt.c"
+                           "copyByteLong.c"
+                           "copyByteShort.c"
+                           (string-append "-I" jdk "/include")
+                           (string-append "-I" jdk "/include/linux")
+                           "-o" "libnativedata.so"))
+                 (install-file "source/c/libunix.so"
+                               (string-append "libs/native/unix/" dir))
+                 (install-file "source/c/libnativedata.so"
+                               (string-append "libs/native/nativedata/" dir))
+                 #t)))
+           ;; In the "check" phase we only build the test executable.
+           (add-after 'check 'run-tests
+             (lambda _
+               (invoke "java" "-jar" "targets/dist/sis-base-test.jar")
+               (delete-file "targets/dist/sis-base-test.jar")
+               #t))
+           (replace 'install (install-jars "targets/dist")))))
+      (native-inputs
+       `(("jdk" ,icedtea-8)
+         ("java-commons-lang" ,java-commons-lang)
+         ("java-commons-io" ,java-commons-io)
+         ("java-testng" ,java-testng)
+         ("build-resources"
+          ,(origin
+             (method svn-fetch)
+             (uri (svn-reference
+                   (url (string-append "http://svnsis.ethz.ch/repos/cisd/"
+                                       "base/tags/release/"
+                                       (version-major+minor base-version)
+                                       ".x/" base-version
+                                       "/build_resources/"))
+                   (revision revision)))
+             (sha256
+              (base32
+               "0b6335gkm4x895rac6kfg9d3rpq0sy19ph4zpg2gyw6asfsisjhk"))))))
+      (home-page "http://svnsis.ethz.ch")
+      (synopsis "Utility classes for libraries from ETH Zurich")
+      (description "This library supplies some utility classes needed for
+libraries from the SIS division at ETH Zurich like jHDF5.")
+      ;; The C sources are under a non-copyleft license, which looks like a
+      ;; variant of the BSD licenses.  The whole package is under the ASL2.0.
+      (license (list license:asl2.0
+                     (license:non-copyleft "file://source/c/COPYING"))))))
+
+(define-public java-cisd-args4j
+  (let ((revision 39162)
+        (base-version "9.11.2"))
+    (package
+      (name "java-cisd-args4j")
+      (version (string-append base-version "-" (number->string revision)))
+      (source (origin
+                (method svn-fetch)
+                (uri (svn-reference
+                      (url (string-append "http://svnsis.ethz.ch/repos/cisd/"
+                                          "args4j/tags/release/"
+                                          (version-major+minor base-version)
+                                          ".x/" base-version "/args4j/"))
+                      (revision revision)))
+                (file-name (string-append "java-cisd-args4j-" version "-checkout"))
+                (sha256
+                 (base32
+                  "0hhqznjaivq7ips7mkwas78z42s6djsm20rrs7g1zd59rcsakxn2"))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:make-flags '("-file" "build/build.xml")
+         #:tests? #f ; there are no tests
+         ;; There are weird build failures with JDK8, such as: "The type
+         ;; java.io.ObjectInputStream cannot be resolved. It is indirectly
+         ;; referenced from required .class files"
+         #:jdk ,icedtea-7
+         #:modules ((guix build ant-build-system)
+                    (guix build utils)
+                    (guix build java-utils)
+                    (sxml simple)
+                    (sxml transform)
+                    (sxml xpath))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'unpack-build-resources
+             (lambda* (#:key inputs #:allow-other-keys)
+               (mkdir-p "../build_resources")
+               (invoke "tar" "xf" (assoc-ref inputs "build-resources")
+                       "-C" "../build_resources"
+                       "--strip-components=1")
+               (mkdir-p "../build_resources/lib")
+               #t))
+           (add-after 'unpack-build-resources 'fix-dependencies
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; FIXME: There should be a more convenient abstraction for
+               ;; editing XML files.
+               (with-directory-excursion "../build_resources/ant/"
+                 (chmod "build-common.xml" #o664)
+                 (call-with-output-file "build-common.xml.new"
+                   (lambda (port)
+                     (sxml->xml
+                      (pre-post-order
+                       (with-input-from-file "build-common.xml"
+                         (lambda _ (xml->sxml #:trim-whitespace? #t)))
+                       `(;; Remove dependency on classycle and custom ant tasks
+                         (taskdef   . ,(lambda (tag . kids)
+                                         (let ((name ((sxpath '(name *text*)) kids)))
+                                           (if (or (member "build-info" name)
+                                                   (member "dependency-checker" name)
+                                                   (member "build-java-subprojects" name)
+                                                   (member "project-classpath" name))
+                                               '() ; skip
+                                               `(,tag ,@kids)))))
+                         (typedef   . ,(lambda (tag . kids)
+                                         (let ((name ((sxpath '(name *text*)) kids)))
+                                           (if (member "recursive-jar" name)
+                                               '() ; skip
+                                               `(,tag ,@kids)))))
+                         (build-java-subprojects . ,(lambda _ '()))
+                         ;; Ignore everything else
+                         (*default* . ,(lambda (tag . kids) `(,tag ,@kids)))
+                         (*text*    . ,(lambda (_ txt) txt))))
+                      port)))
+                 (rename-file "build-common.xml.new" "build-common.xml"))
+               (substitute* "build/build.xml"
+                 (("\\$\\{lib\\}/cisd-base/cisd-base.jar")
+                  (string-append (assoc-ref inputs "java-cisd-base")
+                                 "/share/java/sis-base.jar"))
+                 ;; Remove dependency on svn
+                 (("<build-info.*") "")
+                 (("\\$\\{revision.number\\}")
+                  ,(number->string revision))
+                 (("\\$\\{version.number\\}") ,base-version)
+                 ;; Don't use custom ant tasks.
+                 (("recursive-jar") "jar")
+                 (("<project-classpath.*") ""))
+               #t))
+           (replace 'install (install-jars "targets/dist")))))
+      (inputs
+       `(("java-cisd-base" ,java-cisd-base)))
+      (native-inputs
+       `(("ecj" ,java-ecj-3.5)
+         ("build-resources"
+          ,(origin
+             (method svn-fetch)
+             (uri (svn-reference
+                   (url (string-append "http://svnsis.ethz.ch/repos/cisd/"
+                                       "args4j/tags/release/"
+                                       (version-major+minor base-version)
+                                       ".x/" base-version
+                                       "/build_resources/"))
+                   (revision revision)))
+             (sha256
+              (base32
+               "056cam4k8pll7ass31sy6gwn8g8719njc41yf4l02b0342nilkyf"))
+             (modules '((guix build utils)))
+             ;; Delete bundled pre-built jars.
+             (snippet
+              '(begin (delete-file-recursively "lib/") #t))))))
+      (home-page "http://svnsis.ethz.ch")
+      (synopsis "Command line parser library")
+      (description "This package provides a parser for command line arguments.")
+      (license license:asl2.0))))
+
+(define-public java-cisd-jhdf5
+  (let ((revision 39162)
+        (base-version "14.12.6"))
+    (package
+      (name "java-cisd-jhdf5")
+      (version (string-append base-version "-" (number->string revision)))
+      (source (origin
+                (method svn-fetch)
+                (uri (svn-reference
+                      (url (string-append "http://svnsis.ethz.ch/repos/cisd/"
+                                          "jhdf5/tags/release/"
+                                          (version-major+minor base-version)
+                                          ".x/" base-version "/jhdf5/"))
+                      (revision revision)))
+                (file-name (string-append "java-cisd-jhdf5-" version "-checkout"))
+                (sha256
+                 (base32
+                  "13i17s2hn0q9drdqvp8csy7770p3hdbh9rp30ihln2ldkfawdmz0"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Delete included gradle jar
+                    (delete-file-recursively "gradle/wrapper")
+                    ;; Delete pre-built native libraries
+                    (delete-file-recursively "libs")
+                    #t))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:make-flags '("-file" "build/build.xml")
+         #:build-target "jar-all"
+         #:test-target "jar-test"
+         #:jdk ,icedtea-8
+         #:phases
+         (modify-phases %standard-phases
+           ;; Don't erase results from the build phase when building tests.
+           (add-after 'unpack 'separate-test-target-from-clean
+             (lambda _
+               (substitute* "build/build.xml"
+                 (("\"jar-test\" depends=\"clean, ")
+                  "\"jar-test\" depends=\""))
+               #t))
+           (add-after 'unpack 'unpack-build-resources
+             (lambda* (#:key inputs #:allow-other-keys)
+               (copy-recursively (assoc-ref inputs "build-resources")
+                                 "../build_resources")
+               (delete-file-recursively "../build_resources/lib/")
+               (mkdir-p "../build_resources/lib")
+               ;; Remove dependency on classycle
+               (substitute* "../build_resources/ant/build-common.xml"
+                 (("<taskdef name=\"dependency-checker.*") "")
+                 (("classname=\"classycle.*") "")
+                 (("classpath=\"\\$\\{lib\\}/classycle.*") ""))
+               ;; Remove dependency on svn
+               (substitute* "build/build.xml"
+                 (("<build-info.*") "")
+                 (("\\$\\{revision.number\\}")
+                  ,(number->string revision))
+                 (("\\$\\{version.number\\}") ,base-version))
+               #t))
+           (add-after 'unpack-build-resources 'fix-dependencies
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "../build_resources/ant/build-common.xml"
+                 (("../libraries/testng/testng-jdk15.jar")
+                  (string-append (assoc-ref inputs "java-testng")
+                                 "/share/java/java-testng.jar")))
+               (substitute* "build/build.xml"
+                 (("\\$\\{lib\\}/sis-base/sis-base.jar")
+                  (string-append (assoc-ref inputs "java-cisd-base")
+                                 "/share/java/sis-base.jar"))
+                 (("\\$\\{lib\\}/cisd-args4j/cisd-args4j.jar")
+                  (string-append (assoc-ref inputs "java-cisd-args4j")
+                                 "/share/java/cisd-args4j.jar"))
+                 (("\\$\\{lib\\}/commons-lang/commons-lang.jar")
+                  (string-append (assoc-ref inputs "java-commons-lang")
+                                 "/share/java/commons-lang-"
+                                 ,(package-version java-commons-lang) ".jar"))
+                 (("\\$\\{lib\\}/commons-io/commons-io.jar")
+                  (string-append (assoc-ref inputs "java-commons-io")
+                                 "/share/java/commons-io-"
+                                 ,(package-version java-commons-io)
+                                 "-SNAPSHOT.jar"))
+                 (("\\$\\{lib\\}/testng/testng-jdk15.jar")
+                  (string-append (assoc-ref inputs "java-testng")
+                                 "/share/java/java-testng.jar"))
+                 (("\\$\\{lib\\}/junit4/junit.jar")
+                  (string-append (assoc-ref inputs "java-junit")
+                                 "/share/java/junit.jar"))
+                 (("\\$\\{lib\\}/jmock/hamcrest/hamcrest-core.jar")
+                  (string-append (assoc-ref inputs "java-hamcrest-core")
+                                 "/share/java/hamcrest-core.jar")))
+               ;; Remove dependency on ch.rinn.restrictions
+               (with-directory-excursion "source/java/ch/systemsx/cisd/hdf5/"
+                 (substitute* '("BitSetConversionUtils.java"
+                                "HDF5Utils.java")
+                   (("import ch.rinn.restrictions.Private;") "")
+                   (("@Private") "")))
+               (with-directory-excursion "sourceTest/java/ch/systemsx/cisd/hdf5/"
+                 (substitute* '("BitSetConversionTest.java"
+                                "h5ar/HDF5ArchiverTest.java")
+                   (("import ch.rinn.restrictions.Friend;") "")
+                   (("@Friend.*") ""))
+                 ;; Remove leftovers from removing @Friend
+                 (substitute* "h5ar/HDF5ArchiverTest.java"
+                   (("\\{ HDF5Archiver.class, IdCache.class, LinkRecord.class \\}\\)")
+                    "")))
+               #t))
+           (add-before 'configure 'build-native-library
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((jdk  (assoc-ref inputs "jdk"))
+                     (hdf5 (assoc-ref inputs "hdf5"))
+                     (dir  ,(match (%current-system)
+                              ("i686-linux"
+                               "i386-Linux")
+                              ((or "armhf-linux" "aarch64-linux")
+                               "arm-Linux")
+                              ((or "x86_64-linux")
+                               "amd64-Linux")
+                              (_ "unknown-Linux"))))
+                 (with-directory-excursion "source/c"
+                   (apply invoke `("gcc" "-shared" "-O3"
+                                   "-fPIC"
+                                   "-Wl,--exclude-libs,ALL"
+                                   ,@(find-files "jhdf5" "\\.c$")
+                                   ,@(find-files "hdf-java" "\\.c$")
+                                   ,(string-append "-I" hdf5 "/include")
+                                   ,(string-append "-I" jdk "/include")
+                                   ,(string-append "-I" jdk "/include/linux")
+                                   ,(string-append hdf5 "/lib/libhdf5.a")
+                                   "-o" "libjhdf5.so" "-lz")))
+                 (install-file "source/c/libjhdf5.so"
+                               (string-append "libs/native/jhdf5/" dir))
+                 #t)))
+           ;; In the "check" phase we only build the test executable.
+           (add-after 'check 'run-tests
+             (lambda _
+               (invoke "java" "-jar" "targets/dist/sis-jhdf5-test.jar")
+               (delete-file "targets/dist/sis-jhdf5-test.jar")
+               #t))
+           (replace 'install
+             (install-jars "targets/dist")))))
+      (inputs
+       `(("java-cisd-base" ,java-cisd-base)
+         ("java-cisd-args4j" ,java-cisd-args4j)
+         ("java-commons-lang" ,java-commons-lang)
+         ("java-commons-io" ,java-commons-io)
+         ("hdf5" ,hdf5)
+         ("zlib" ,zlib)))
+      (native-inputs
+       `(("jdk" ,icedtea-8)
+         ("java-testng" ,java-testng)
+         ("java-junit" ,java-junit)
+         ("java-jmock" ,java-jmock)
+         ("java-hamcrest-core" ,java-hamcrest-core)
+         ("build-resources"
+          ,(origin
+             (method svn-fetch)
+             (uri (svn-reference
+                   (url (string-append "http://svnsis.ethz.ch/repos/cisd/"
+                                       "jhdf5/tags/release/"
+                                       (version-major+minor base-version)
+                                       ".x/" base-version
+                                       "/build_resources/"))
+                   (revision revision)))
+             (sha256
+              (base32
+               "0b6335gkm4x895rac6kfg9d3rpq0sy19ph4zpg2gyw6asfsisjhk"))))))
+      (home-page "https://wiki-bsse.ethz.ch/display/JHDF5/")
+      (synopsis "Java binding for HDF5")
+      (description "JHDF5 is a high-level API in Java for reading and writing
+HDF5 files, building on the libraries provided by the HDF Group.")
+      ;; The C sources are under a non-copyleft license, which looks like a
+      ;; variant of the BSD licenses.  The whole package is under the ASL2.0.
+      (license (list license:asl2.0
+                     (license:non-copyleft "file://source/c/COPYING"))))))
+
 (define-public java-classpathx-servletapi
   (package
     (name "java-classpathx-servletapi")
@@ -5584,7 +6023,9 @@ tree walking, and translation.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0qgg5vgsm4l1d6dj9pfbaa25dpv2ry2gny8ajy4vvgvfklw97b3m"))))
+                "0qgg5vgsm4l1d6dj9pfbaa25dpv2ry2gny8ajy4vvgvfklw97b3m"))
+              (patches
+               (search-patches "antlr3-3_3-fix-java8-compilation.patch"))))
     (arguments
      `(#:jar-name (string-append ,name "-" ,version ".jar")
        #:source-dir (string-join '("tool/src/main/java"
@@ -5674,7 +6115,9 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0sfimc9cpbgrihz4giyygc8afgpma2c93yqpwb951giriri6x66z"))))
+                "0sfimc9cpbgrihz4giyygc8afgpma2c93yqpwb951giriri6x66z"))
+              (patches
+               (search-patches "antlr3-3_1-fix-java8-compilation.patch"))))
     (arguments
      `(#:jar-name (string-append "antlr3-" ,version ".jar")
        #:source-dir "src:runtime/Java/src"
@@ -6537,7 +6980,8 @@ it manages project dependencies, gives diffs jars, and much more.")
              ;; packaging.  It uses the version referenced in pom.xml.  We replace
              ;; it with our own version.
              (substitute* "src/test/java/org/ops4j/pax/tinybundles/bnd/BndTest.java"
-               (("2.4.0.201411031534") "3.4.0")))))))
+               (("[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*")
+                ,(package-version java-aqute-bndlib))))))))
     (inputs
      `(("lang" ,java-ops4j-base-lang)
        ("io" ,java-ops4j-base-io)
@@ -8853,3 +9297,44 @@ against expected outcomes.")
        ("java-junit" ,java-junit)))
     (native-inputs
      `(("java-mockito-1" ,java-mockito-1)))))
+
+(define-public java-openchart2
+  (package
+    (name "java-openchart2")
+    (version "1.4.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://download.approximatrix.com/openchart2/"
+                                  "openchart2-" version ".source.zip"))
+              (sha256
+               (base32
+                "1xq96zm5r02n1blja0072jmmsifmxc40lbyfbnmcnr6mw42frh4g"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-junit-errors
+           (lambda _
+             (with-directory-excursion "unittest/src/com/approximatrix/charting/"
+               (substitute* '("coordsystem/ticklocator/NumericXTickLocatorTest.java"
+                              "coordsystem/ticklocator/NumericYTickLocatorTest.java"
+                              "coordsystem/ticklocator/ObjectXTickLocatorTest.java"
+                              "model/DefaultChartDataModelConstraintsTest.java"
+                              "model/MultiScatterDataModelConstraintsTest.java"
+                              "model/threedimensional/DotPlotDataModelConstraintsTest.java")
+                 (("(assertEquals[^;]+);" before _)
+                  (string-append (string-drop-right before 2) ", 1E-6);"))))
+             #t))
+         (replace 'install (install-jars ".")))))
+    (native-inputs
+     `(("unzip" ,unzip)
+       ("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://approximatrix.com/products/openchart2/")
+    (synopsis "Simple plotting for Java")
+    (description "Openchart2 provides a simple, yet powerful, interface for
+Java programmers to create two-dimensional charts and plots.  The library
+features an assortment of graph styles, including advanced scatter plots, bar
+graphs, and pie charts.")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/libftdi.scm b/gnu/packages/libftdi.scm
index 78f849d02d..bbb98ff1f4 100644
--- a/gnu/packages/libftdi.scm
+++ b/gnu/packages/libftdi.scm
@@ -40,7 +40,7 @@
     (build-system cmake-build-system)
     (propagated-inputs
      `(("libusb" ,libusb))) ; required by libftdi1.pc
-    (home-page "http://www.intra2net.com/en/developer/libftdi/")
+    (home-page "https://www.intra2net.com/en/developer/libftdi/")
     (synopsis "FTDI USB driver with bitbang mode")
     (description
      "libFTDI is a library to talk to FTDI chips: FT232BM,
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index c33b473ca9..875f110622 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -383,8 +383,8 @@ It has been modified to remove all non-free binary blobs.")
 ;; supports qemu "virt" machine and possibly a large number of ARM boards.
 ;; See : https://wiki.debian.org/DebianKernel/ARMMP.
 
-(define %linux-libre-version "4.15.6")
-(define %linux-libre-hash "13mv6wrhwjw2wll918c1r9l872wzzanvyi8rk6gv0k6cg0f56jal")
+(define %linux-libre-version "4.15.7")
+(define %linux-libre-hash "1h17wc12lvva5vcm2z06cf57ywxb6i2snm9vxixw1lwibnksrb6l")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -392,8 +392,8 @@ It has been modified to remove all non-free binary blobs.")
                     %linux-compatible-systems
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.14-version "4.14.22")
-(define %linux-libre-4.14-hash "1lhswcvgl077kzsln3nxmrdbnlc3b8mphjjmkqz0f2663wa6rhcv")
+(define %linux-libre-4.14-version "4.14.24")
+(define %linux-libre-4.14-hash "1i14djw3rmxb6syl6vfd5w76rjksbbaviynwj2dwwp9ki1h6p1hr")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -402,14 +402,14 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.84"
-                    "08bgdcysva2igz4rc55slyz7nbzwz5skakh5c2iahsklg343pwbw"
+  (make-linux-libre "4.9.86"
+                    "0fqixx3yyvznianygk8bfxzfqj8zpnjcalifhpfyb7rm3dyvi3wd"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.118"
-                    "0di91awl8ii1fxrfyqbpfpn134apcc98fas7yisjg87f16bn4azl"
+  (make-linux-libre "4.4.120"
+                    "17zk5dbpa3kilf8m8i6r2jifjgi4yjim42gyk9j6n4218jjcszv6"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -873,7 +873,7 @@ ext3 or ext4 partition.")
 (define-public zerofree
   (package
     (name "zerofree")
-    (version "1.1.0")
+    (version "1.1.1")
     (home-page "https://frippery.org/uml/")
     (source (origin
               (method url-fetch)
@@ -881,7 +881,7 @@ ext3 or ext4 partition.")
                                   ".tgz"))
               (sha256
                (base32
-                "059g29x5r1xj6wcj4xj85l8w6qrxyl86yqbybjqqz6nxz4falxzf"))))
+                "0rrqfa5z103ws89vi8kfvbks1cfs74ix6n1wb6vs582vnmhwhswm"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -2530,14 +2530,14 @@ thanks to the use of namespaces.")
 (define-public hdparm
   (package
     (name "hdparm")
-    (version "9.53")
+    (version "9.54")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/" name "/" name "/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1rb5086gp4l1h1fn2nk10ziqxjxigsd0c1zczahwc5k9vy8zawr6"))))
+                "0ghnhdj7wfw6acfyhdawpfa5n9kvkvzgi1fw6i7sghgbjx5nhyjd"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (let ((out (assoc-ref %outputs "out")))
@@ -2864,15 +2864,15 @@ arrays when needed.")
 (define-public multipath-tools
   (package
     (name "multipath-tools")
-    (version "0.7.1")
+    (version "0.7.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://git.opensvc.com/?p=multipath-tools/"
+              (uri (string-append "https://git.opensvc.com/?p=multipath-tools/"
                                   ".git;a=snapshot;h=" version ";sf=tgz"))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0w0rgi3lqksaki30yvd4l5rgjqb0d7js1sh7masl8aw6xbrsm26p"))
+                "02lk453wa2gfxkl8zmdws15nkcibln2yw76zm779pkngkhggl6w8"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -3717,7 +3717,7 @@ of flash storage.")
 (define-public libseccomp
   (package
     (name "libseccomp")
-    (version "2.3.2")
+    (version "2.3.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/seccomp/libseccomp/"
@@ -3725,7 +3725,7 @@ of flash storage.")
                                   "/libseccomp-" version ".tar.gz"))
               (sha256
                (base32
-                "18dwfxzsw3agiy2dxbflrkhmjgvlji0wwkk636nabh2ng41qrp1x"))))
+                "0mdiyfljrkfl50q1m3ws8yfcyfjwf1zgkvcva8ffcwncji18zhkz"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("which" ,which)))
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 8d3544f908..7d85d5208a 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1375,7 +1375,7 @@ write simple, representation-independent mail handling code.")
 (define-public perl-email-address
   (package
     (name "perl-email-address")
-    (version "1.908")
+    (version "1.909")
     (source
      (origin
        (method url-fetch)
@@ -1383,7 +1383,7 @@ write simple, representation-independent mail handling code.")
                            "Email-Address-" version ".tar.gz"))
        (sha256
         (base32
-         "0i6ljdvpy279hpbqf6lgv4figr376rb2sh4yphj86xkdzsyn1y75"))))
+         "0l7x6sl06j9ffgfz5f9vgms2b5axd4cgp5fj03ivb3kia4km6b3g"))))
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Email-Address")
     (synopsis "Email address parsing and creation")
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index d7a1641ad8..c5a86d02c6 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org>
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,7 +41,7 @@
 (define-public nagios
   (package
     (name "nagios")
-    (version "4.2.4")
+    (version "4.3.4")
     ;; XXX: Nagios 4.2.x and later bundle a copy of AngularJS.
     (source (origin
               (method url-fetch)
@@ -49,7 +50,7 @@
                     version "/nagios-" version ".tar.gz"))
               (sha256
                (base32
-                "0w0blbwiw0ps04b7gkyyk89qkgwsxh6gydhmggbm1kl3ar3mq1dh"))
+                "1wa4m952sb23dqi5w759adimsp21bkhp598rpq9dnhz3v497h2y9"))
               (modules '((guix build utils)))
               (snippet
                ;; Ensure reproducibility.
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 63b82900c0..65dfa92896 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -3726,6 +3726,34 @@ notation and includes basic support for digital audio.")
     (home-page "http://www.rosegardenmusic.com/")
     (license license:gpl2)))
 
+(define-public patchmatrix
+  (package
+    (name "patchmatrix")
+    (version "0.12.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/OpenMusicKontrollers/patchmatrix.git")
+                    (commit version)))
+              (file-name (string-append "patchmatrix-" version "-checkout"))
+              (sha256
+               (base32
+                "19ivp7h5vq6r1qhmycjxzvrgg7fc4a3v5vb3n4c7afs4z3pj53zi"))))
+    (build-system cmake-build-system)
+    (arguments '(#:tests? #f))          ; no test target
+    (inputs
+     `(("jack" ,jack-1)
+       ("lv2" ,lv2)
+       ("mesa" ,mesa)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/OpenMusicKontrollers/patchmatrix")
+    (synopsis "Simple JACK patch bay")
+    (description "PatchMatrix is a patch bay for the JACK audio connection
+kit.  It provides a patch bay in flow matrix style for audio, MIDI, CV, and
+OSC connections.")
+    (license license:artistic2.0)))
+
 (define-public sorcer
   (package
     (name "sorcer")
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index cd3f4f124b..bf4bee2f87 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Raimon Grau <raimonster@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
-;;; Copyright © 2016, 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 ng0 <ng0@infotropique.org>
 ;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
@@ -267,6 +267,42 @@ filtering (subscriptions), seamless access to multiple transport protocols and
 more.")
     (license license:lgpl3+)))
 
+(define-public czmq
+  (package
+    (name "czmq")
+    (version "4.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/zeromq/" name
+                    "/releases/download/v" version
+                    "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "04gwf61rijwm6b2wblwv8gky1gdrbfmg1d19hf72kdc691ds7vrv"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(;; TODO Tests fail for some reason:
+       ;;  * zauth: OK
+       ;;  * zbeacon: OK (skipping test, no UDP broadcasting)
+       ;; E: (czmq_selftest) 18-02-24 16:25:52 No broadcast interface found, (ZSYS_INTERFACE=lo)
+       ;; make[2]: *** [Makefile:2245: check-local] Segmentation fault
+       ;; make[2]: Leaving directory '/tmp/guix-build-czmq-4.1.0.drv-0/czmq-4.1.0'
+       ;; make[1]: *** [Makefile:2032: check-am] Error 2
+       ;; make[1]: Leaving directory '/tmp/guix-build-czmq-4.1.0.drv-0/czmq-4.1.0'
+       ;; make: *** [Makefile:1588: check-recursive] Error 1
+       ;; phase `check' failed after 19.4 seconds
+       #:tests? #f
+       #:configure-flags '("--enable-drafts")))
+    (inputs
+     `(("zeromq" ,zeromq)))
+    (home-page "http://zeromq.org")
+    (synopsis "High-level C bindings for ØMQ")
+    (description
+     "czmq provides bindings for the ØMQ core API that hides the differences
+between different versions of ØMQ.")
+    (license license:mpl2.0)))
+
 (define-public librdkafka
   (package
     (name "librdkafka")
@@ -498,7 +534,7 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "2.4.4")
+    (version "2.4.5")
     (source
      (origin
        (method url-fetch)
@@ -506,7 +542,7 @@ of the same name.")
                            version ".tar.xz"))
        (sha256
         (base32
-         "0n3g28hrhifnchlz4av0blq4ykm4zaxwwxbzdm9wsba27677b6h4"))))
+         "1mvgy67rvnwj2kbc43s4il81jvz5ai0bx2j3j2js7x50zclyrcmk"))))
     (build-system gnu-build-system)
     (inputs `(("c-ares" ,c-ares)
               ("glib" ,glib)
@@ -1031,7 +1067,7 @@ library remains flexible, portable, and easily embeddable.")
 (define-public sslh
   (package
     (name "sslh")
-    (version "1.19b")
+    (version "1.19c")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/yrutschle/sslh/archive/v"
@@ -1039,7 +1075,7 @@ library remains flexible, portable, and easily embeddable.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0p0zfy5ifzj7508zqidgkf8g43frm7l5xcs5s6v7132lypcsbd4k"))))
+                "0pd8hifa9h0rm7vms3k6ic1k29xigrlv2idc5wgcafmb1v1243di"))))
     (build-system gnu-build-system)
     (native-inputs
      `(;; Test dependencies.
@@ -1403,14 +1439,14 @@ does not use SSH and requires a pre-shared symmetric key.")
 (define-public quagga
   (package
     (name "quagga")
-    (version "1.2.3")
+    (version "1.2.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/quagga/quagga-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0cddxip9gd579parx64n6d7iq937ikrb8qxgvjxjm406l43hjb7f"))
+                "1lsksqxij5f1llqn86pkygrf5672kvrqn1kvxghi169hqf1c0r73"))
               (patches
                (search-patches "quagga-reproducible-build.patch"))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index d270f513dc..1c3b8cd313 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -107,6 +107,17 @@ computers over a network.")
                (base32
                 "0fn12i4kzsi0zkr4qp3dp9bycmirnfapajqvdfx02zhr4hanj0kv"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--with-privsep-user=ntpd"
+                           "--localstatedir=/var")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'modify-install-locations
+           (lambda _
+             ;; Don't try to create /var/run or /var/db
+             (substitute* "src/Makefile.in"
+               (("DESTDIR\\)\\$\\(localstatedir") "TMPDIR"))
+             #t)))))
     (inputs
      `(("libressl" ,libressl))) ; enable TLS time constraints. See ntpd.conf(5).
     (home-page "http://www.openntpd.org/")
diff --git a/gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch b/gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch
new file mode 100644
index 0000000000..0c4deb024b
--- /dev/null
+++ b/gnu/packages/patches/antlr3-3_1-fix-java8-compilation.patch
@@ -0,0 +1,35 @@
+Based on the upstream fix for the java8 compilation issue.
+Simplified patch.
+Upstream version of patch does not work with this source tree.
+
+The issue is that in java8 it is an error to pass null to
+removeAll. Results in null pointer exception. java7
+behaviour was to return the list unmodified.
+
+From db2a350c6d90efaa8dde949fa76005c2c5af45c4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>
+Date: Fri, 5 Jan 2018 17:05:31 +0100
+Subject: [PATCH] Fix java8 compilation.
+
+---
+ src/org/antlr/tool/CompositeGrammar.java | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/org/antlr/tool/CompositeGrammar.java b/src/org/antlr/tool/CompositeGrammar.java
+index f1408e7..7e02431 100644
+--- a/src/org/antlr/tool/CompositeGrammar.java
++++ b/src/org/antlr/tool/CompositeGrammar.java
+@@ -218,7 +218,9 @@ public class CompositeGrammar {
+ 	public List<Grammar> getIndirectDelegates(Grammar g) {
+ 		List<Grammar> direct = getDirectDelegates(g);
+ 		List<Grammar> delegates = getDelegates(g);
+-		delegates.removeAll(direct);
++		if (direct != null) {
++			delegates.removeAll(direct);
++		}
+ 		return delegates;
+ 	}
+ 
+-- 
+2.15.1
+
diff --git a/gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch b/gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch
new file mode 100644
index 0000000000..a7d6be9b6b
--- /dev/null
+++ b/gnu/packages/patches/antlr3-3_3-fix-java8-compilation.patch
@@ -0,0 +1,35 @@
+Based on the upstream fix for the java8 compilation issue.
+Simplified patch.
+Upstream version of patch does not work with this source tree.
+
+The issue is that in java8 it is an error to pass null to
+removeAll. Results in null pointer exception. java7
+behaviour was to return the list unmodified.
+
+From 43867d50c05d1c06ab7220eb974a8874ae10c308 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>
+Date: Fri, 5 Jan 2018 19:08:24 +0100
+Subject: [PATCH] Fix java8 complilation error.
+
+---
+ tool/src/main/java/org/antlr/tool/CompositeGrammar.java | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/tool/src/main/java/org/antlr/tool/CompositeGrammar.java b/tool/src/main/java/org/antlr/tool/CompositeGrammar.java
+index f34ea73..63740a6 100644
+--- a/tool/src/main/java/org/antlr/tool/CompositeGrammar.java
++++ b/tool/src/main/java/org/antlr/tool/CompositeGrammar.java
+@@ -226,7 +226,9 @@ public class CompositeGrammar {
+ 	public List<Grammar> getIndirectDelegates(Grammar g) {
+ 		List<Grammar> direct = getDirectDelegates(g);
+ 		List<Grammar> delegates = getDelegates(g);
+-		delegates.removeAll(direct);
++		if(direct != null) {
++		        delegates.removeAll(direct);
++		}
+ 		return delegates;
+ 	}
+ 
+-- 
+2.15.1
+
diff --git a/gnu/packages/patches/ceph-disable-cpu-optimizations.patch b/gnu/packages/patches/ceph-disable-cpu-optimizations.patch
index f33eb629d6..421b1d4fe1 100644
--- a/gnu/packages/patches/ceph-disable-cpu-optimizations.patch
+++ b/gnu/packages/patches/ceph-disable-cpu-optimizations.patch
@@ -1,5 +1,4 @@
-Disable CPU optimizations not supported by all x86_64 systems. Also
-don't add anything for i686.
+Disable CPU optimizations not supported by all x86_64 systems.
 
 --- a/cmake/modules/SIMDExt.cmake	2017-03-23 22:22:58.254071694 +0100
 +++ b/cmake/modules/SIMDExt.cmake	2017-03-23 22:23:22.446848845 +0100
@@ -15,39 +14,30 @@ don't add anything for i686.
  #
  # SIMD_COMPILE_FLAGS
  #
-@@ -73,7 +68,7 @@
-     set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mfpu=neon")
-   endif()
- 
--elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|amd64|x86_64|AMD64")
-+elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
-   set(HAVE_INTEL 1)
-   CHECK_C_COMPILER_FLAG(-msse HAVE_INTEL_SSE)
-   if(HAVE_INTEL_SSE)
-@@ -83,26 +78,6 @@
-   if(HAVE_INTEL_SSE2)
-     set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse2")
-   endif()
--  CHECK_C_COMPILER_FLAG(-msse3 HAVE_INTEL_SSE3)
--  if(HAVE_INTEL_SSE3)
--    set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse3")
--  endif()
--  CHECK_C_COMPILER_FLAG(-mssse3 HAVE_INTEL_SSSE3)
--  if(HAVE_INTEL_SSSE3)
--    set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mssse3")
--  endif()
--  CHECK_C_COMPILER_FLAG(-mpclmul HAVE_INTEL_PCLMUL)
--  if(HAVE_INTEL_PCLMUL)
--    set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mpclmul")
--  endif()
--  CHECK_C_COMPILER_FLAG(-msse4.1 HAVE_INTEL_SSE4_1)
--  if(HAVE_INTEL_SSE4_1)
--    set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.1")
--  endif()
--  CHECK_C_COMPILER_FLAG(-msse4.2 HAVE_INTEL_SSE4_2)
--  if(HAVE_INTEL_SSE4_2)
--    set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.2")
--  endif()
+@@ -85,26 +80,6 @@
+       if(HAVE_INTEL_SSE2)
+         set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse2")
+       endif()
+-      CHECK_C_COMPILER_FLAG(-msse3 HAVE_INTEL_SSE3)
+-      if(HAVE_INTEL_SSE3)
+-        set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse3")
+-      endif()
+-      CHECK_C_COMPILER_FLAG(-mssse3 HAVE_INTEL_SSSE3)
+-      if(HAVE_INTEL_SSSE3)
+-        set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mssse3")
+-      endif()
+-      CHECK_C_COMPILER_FLAG(-mpclmul HAVE_INTEL_PCLMUL)
+-      if(HAVE_INTEL_PCLMUL)
+-        set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -mpclmul")
+-      endif()
+-      CHECK_C_COMPILER_FLAG(-msse4.1 HAVE_INTEL_SSE4_1)
+-      if(HAVE_INTEL_SSE4_1)
+-        set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.1")
+-      endif()
+-      CHECK_C_COMPILER_FLAG(-msse4.2 HAVE_INTEL_SSE4_2)
+-      if(HAVE_INTEL_SSE4_2)
+-        set(SIMD_COMPILE_FLAGS "${SIMD_COMPILE_FLAGS} -msse4.2")
+-      endif()
+     endif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64")
+   endif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686|amd64|x86_64|AMD64")
  elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64le")
-   set(HAVE_PPC64LE 1)
-   message(STATUS " we are ppc64le")
diff --git a/gnu/packages/patches/ceph-disable-unittest-throttle.patch b/gnu/packages/patches/ceph-disable-unittest-throttle.patch
deleted file mode 100644
index 08ae5f9e24..0000000000
--- a/gnu/packages/patches/ceph-disable-unittest-throttle.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-FIXME: This test broke after the gcc-5/glibc-2.25 core-updates merge.
-Not sure what's going on here, it hangs after spawning the first thread.
-
-diff --git a/src/test/common/Throttle.cc b/src/test/common/Throttle.cc
-index 5b6d73217d..40a477b2a3 100644
---- a/src/test/common/Throttle.cc
-+++ b/src/test/common/Throttle.cc
-@@ -216,44 +216,6 @@ TEST_F(ThrottleTest, wait) {
-   } while(!waited);
- }
- 
--TEST_F(ThrottleTest, destructor) {
--  Thread_get *t;
--  {
--    int64_t throttle_max = 10;
--    Throttle *throttle = new Throttle(g_ceph_context, "throttle", throttle_max);
--
--    ASSERT_FALSE(throttle->get(5));
--
--    t = new Thread_get(*throttle, 7);
--    t->create("t_throttle");
--    bool blocked;
--    useconds_t delay = 1;
--    do {
--      usleep(delay);
--      if (throttle->get_or_fail(1)) {
--	throttle->put(1);
--	blocked = false;
--      } else {
--	blocked = true;
--      }
--      delay *= 2;
--    } while(!blocked);
--    delete throttle;
--  }
--
--  { //
--    // The thread is left hanging, otherwise it will abort().
--    // Deleting the Throttle on which it is waiting creates a
--    // inconsistency that will be detected: the Throttle object that
--    // it references no longer exists.
--    //
--    pthread_t id = t->get_thread_id();
--    ASSERT_EQ(pthread_kill(id, 0), 0);
--    delete t;
--    ASSERT_EQ(pthread_kill(id, 0), 0);
--  }
--}
--
- std::pair<double, std::chrono::duration<double> > test_backoff(
-   double low_threshhold,
-   double high_threshhold,
diff --git a/gnu/packages/patches/ceph-rocksdb-compat.patch b/gnu/packages/patches/ceph-rocksdb-compat.patch
new file mode 100644
index 0000000000..1a3c6b0b23
--- /dev/null
+++ b/gnu/packages/patches/ceph-rocksdb-compat.patch
@@ -0,0 +1,63 @@
+Fix compatibility with newer versions of RocksDB.
+
+Adapted from this upstream patch, with some additional changes for 12.2:
+https://github.com/ceph/ceph/commit/9d73a7121fdb1ae87cb1aa6f7d9d7a13f329ae68
+
+diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc
+index 8660afe1886d..bc0de79e23cb 100644
+--- a/src/kv/RocksDBStore.cc
++++ b/src/kv/RocksDBStore.cc
+@@ -505,7 +505,7 @@
+   // considering performance overhead, default is disabled
+   if (g_conf->rocksdb_perf) {
+     rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex);
+-    rocksdb::perf_context.Reset();
++    rocksdb::get_perf_context()->Reset();
+   }
+ 
+   RocksDBTransactionImpl * _t =
+@@ -532,13 +532,13 @@
+     utime_t write_wal_time;
+     utime_t write_pre_and_post_process_time;
+     write_wal_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_wal_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_wal_time)/1000000000);
+     write_memtable_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_memtable_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_memtable_time)/1000000000);
+     write_delay_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_delay_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_delay_time)/1000000000);
+     write_pre_and_post_process_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_pre_and_post_process_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_pre_and_post_process_time)/1000000000);
+     logger->tinc(l_rocksdb_write_memtable_time, write_memtable_time);
+     logger->tinc(l_rocksdb_write_delay_time, write_delay_time);
+     logger->tinc(l_rocksdb_write_wal_time, write_wal_time);
+@@ -558,7 +558,7 @@
+   // considering performance overhead, default is disabled
+   if (g_conf->rocksdb_perf) {
+     rocksdb::SetPerfLevel(rocksdb::PerfLevel::kEnableTimeExceptForMutex);
+-    rocksdb::perf_context.Reset();
++    rocksdb::get_perf_context()->Reset();
+   }
+ 
+   RocksDBTransactionImpl * _t =
+@@ -586,13 +586,13 @@
+     utime_t write_wal_time;
+     utime_t write_pre_and_post_process_time;
+     write_wal_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_wal_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_wal_time)/1000000000);
+     write_memtable_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_memtable_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_memtable_time)/1000000000);
+     write_delay_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_delay_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_delay_time)/1000000000);
+     write_pre_and_post_process_time.set_from_double(
+-	static_cast<double>(rocksdb::perf_context.write_pre_and_post_process_time)/1000000000);
++	static_cast<double>(rocksdb::get_perf_context()->write_pre_and_post_process_time)/1000000000);
+     logger->tinc(l_rocksdb_write_memtable_time, write_memtable_time);
+     logger->tinc(l_rocksdb_write_delay_time, write_delay_time);
+     logger->tinc(l_rocksdb_write_wal_time, write_wal_time);
diff --git a/gnu/packages/patches/gd-CVE-2018-5711.patch b/gnu/packages/patches/gd-CVE-2018-5711.patch
new file mode 100644
index 0000000000..83b12cde63
--- /dev/null
+++ b/gnu/packages/patches/gd-CVE-2018-5711.patch
@@ -0,0 +1,61 @@
+This patch is adapted from commit a11f47475e6443b7f32d21f2271f28f417e2ac04 and
+fixes CVE-2018-5711.
+
+From a11f47475e6443b7f32d21f2271f28f417e2ac04 Mon Sep 17 00:00:00 2001
+From: "Christoph M. Becker" <cmbecker69@gmx.de>
+Date: Wed, 29 Nov 2017 19:37:38 +0100
+Subject: [PATCH] Fix #420: Potential infinite loop in gdImageCreateFromGifCtx
+
+Due to a signedness confusion in `GetCode_` a corrupt GIF file can
+trigger an infinite loop.  Furthermore we make sure that a GIF without
+any palette entries is treated as invalid *after* open palette entries
+have been removed.
+
+CVE-2018-5711
+
+See also https://bugs.php.net/bug.php?id=75571.
+---
+ src/gd_gif_in.c             |  12 ++++++------
+ 1 file changed, 38 insertions(+), 6 deletions(-)
+
+diff --git a/src/gd_gif_in.c b/src/gd_gif_in.c
+index daf26e7..0a8bd71 100644
+--- a/src/gd_gif_in.c
++++ b/src/gd_gif_in.c
+@@ -335,11 +335,6 @@ terminated:
+ 		return 0;
+ 	}
+ 
+-	if(!im->colorsTotal) {
+-		gdImageDestroy(im);
+-		return 0;
+-	}
+-
+ 	/* Check for open colors at the end, so
+ 	 * we can reduce colorsTotal and ultimately
+ 	 * BitsPerPixel */
+@@ -351,6 +346,11 @@ terminated:
+ 		}
+ 	}
+ 
++	if(!im->colorsTotal) {
++		gdImageDestroy(im);
++		return 0;
++	}
++
+ 	return im;
+ }
+ 
+@@ -447,7 +447,7 @@ static int
+ GetCode_(gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP)
+ {
+ 	int i, j, ret;
+-	unsigned char count;
++	int count;
+ 
+ 	if(flag) {
+ 		scd->curbit = 0;
+
+-- 
+2.13.6
+
diff --git a/gnu/packages/patches/glibc-allow-kernel-2.6.32.patch b/gnu/packages/patches/glibc-allow-kernel-2.6.32.patch
new file mode 100644
index 0000000000..ce18b874c4
--- /dev/null
+++ b/gnu/packages/patches/glibc-allow-kernel-2.6.32.patch
@@ -0,0 +1,39 @@
+diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure
+index cace758c01..38fe7fe0b0 100644
+--- a/sysdeps/unix/sysv/linux/configure
++++ b/sysdeps/unix/sysv/linux/configure
+@@ -69,7 +69,7 @@ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel header at least $minimum_kernel" >&5
+ $as_echo_n "checking for kernel header at least $minimum_kernel... " >&6; }
+ decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+-abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
++abinum=`echo "2.6.32.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <linux/version.h>
+diff --git a/sysdeps/unix/sysv/linux/configure.ac b/sysdeps/unix/sysv/linux/configure.ac
+index 13abda0a51..6abc12eaed 100644
+--- a/sysdeps/unix/sysv/linux/configure.ac
++++ b/sysdeps/unix/sysv/linux/configure.ac
+@@ -50,7 +50,7 @@ fi
+ AC_MSG_CHECKING(for kernel header at least $minimum_kernel)
+ changequote(,)dnl
+ decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+-abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
++abinum=`echo "2.6.32.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
+ changequote([,])dnl
+ AC_TRY_COMPILE([#include <linux/version.h>
+ #if LINUX_VERSION_CODE < $decnum
+diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
+index 823cd8224d..482caaeeec 100644
+--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
++++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
+@@ -39,7 +39,7 @@
+ 	  GLRO(dl_osversion) = version;					      \
+ 									      \
+ 	/* Now we can test with the required version.  */		      \
+-	if (__LINUX_KERNEL_VERSION > 0 && version < __LINUX_KERNEL_VERSION)   \
++	if (__LINUX_KERNEL_VERSION > 0 && version < __LINUX_KERNEL_VERSION && version != 0x020620)   \
+ 	  /* Not sufficent.  */						      \
+ 	  FATAL ("FATAL: kernel too old\n");				      \
+       }									      \
diff --git a/gnu/packages/patches/icecat-bug-1348660-pt5.patch b/gnu/packages/patches/icecat-bug-1348660-pt5.patch
deleted file mode 100644
index b0bede3b38..0000000000
--- a/gnu/packages/patches/icecat-bug-1348660-pt5.patch
+++ /dev/null
@@ -1,727 +0,0 @@
-This is a subset of the following changeset from upstream:
-  https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/5e07bd37ac61
-
-This excludes all test code from that changeset, including a GIT binary patch
-that is not supported by Guix's patch-and-repack mechanism.
-
-# HG changeset patch
-# User Jan Varga <jan.varga@gmail.com>
-# Date 1490181244 -3600
-# Node ID 5e07bd37ac6162f218dfe03ed83b5dcca9653b68
-# Parent  28934912eede9e14895baf4af7575ca9639f59ee
-Bug 1348660 - Part 5: Implement a method to retrieve usage data for all origins at once. r=btseng, a=lizzard
-
-diff --git a/dom/quota/ActorsChild.cpp b/dom/quota/ActorsChild.cpp
---- a/dom/quota/ActorsChild.cpp
-+++ b/dom/quota/ActorsChild.cpp
-@@ -137,16 +137,52 @@ QuotaUsageRequestChild::HandleResponse(n
-   AssertIsOnOwningThread();
-   MOZ_ASSERT(NS_FAILED(aResponse));
-   MOZ_ASSERT(mRequest);
- 
-   mRequest->SetError(aResponse);
- }
- 
- void
-+QuotaUsageRequestChild::HandleResponse(const nsTArray<OriginUsage>& aResponse)
-+{
-+  AssertIsOnOwningThread();
-+  MOZ_ASSERT(mRequest);
-+
-+  RefPtr<nsVariant> variant = new nsVariant();
-+
-+  if (aResponse.IsEmpty()) {
-+    variant->SetAsEmptyArray();
-+  } else {
-+    nsTArray<RefPtr<UsageResult>> usageResults;
-+
-+    const uint32_t count = aResponse.Length();
-+
-+    usageResults.SetCapacity(count);
-+
-+    for (uint32_t index = 0; index < count; index++) {
-+      auto& originUsage = aResponse[index];
-+
-+      RefPtr<UsageResult> usageResult = new UsageResult(originUsage.origin(),
-+                                                        originUsage.persisted(),
-+                                                        originUsage.usage());
-+
-+      usageResults.AppendElement(usageResult.forget());
-+    }
-+
-+    variant->SetAsArray(nsIDataType::VTYPE_INTERFACE_IS,
-+                        &NS_GET_IID(nsIQuotaUsageResult),
-+                        usageResults.Length(),
-+                        static_cast<void*>(usageResults.Elements()));
-+  }
-+
-+  mRequest->SetResult(variant);
-+}
-+
-+void
- QuotaUsageRequestChild::HandleResponse(const OriginUsageResponse& aResponse)
- {
-   AssertIsOnOwningThread();
-   MOZ_ASSERT(mRequest);
- 
-   RefPtr<OriginUsageResult> result =
-     new OriginUsageResult(aResponse.usage(),
-                           aResponse.fileUsage(),
-@@ -177,16 +213,20 @@ QuotaUsageRequestChild::Recv__delete__(c
-   AssertIsOnOwningThread();
-   MOZ_ASSERT(mRequest);
- 
-   switch (aResponse.type()) {
-     case UsageRequestResponse::Tnsresult:
-       HandleResponse(aResponse.get_nsresult());
-       break;
- 
-+    case UsageRequestResponse::TAllUsageResponse:
-+      HandleResponse(aResponse.get_AllUsageResponse().originUsages());
-+      break;
-+
-     case UsageRequestResponse::TOriginUsageResponse:
-       HandleResponse(aResponse.get_OriginUsageResponse());
-       break;
- 
-     default:
-       MOZ_CRASH("Unknown response type!");
-   }
- 
-diff --git a/dom/quota/ActorsChild.h b/dom/quota/ActorsChild.h
---- a/dom/quota/ActorsChild.h
-+++ b/dom/quota/ActorsChild.h
-@@ -93,16 +93,19 @@ private:
- 
-   // Only destroyed by QuotaChild.
-   ~QuotaUsageRequestChild();
- 
-   void
-   HandleResponse(nsresult aResponse);
- 
-   void
-+  HandleResponse(const nsTArray<OriginUsage>& aResponse);
-+
-+  void
-   HandleResponse(const OriginUsageResponse& aResponse);
- 
-   // IPDL methods are only called by IPDL.
-   virtual void
-   ActorDestroy(ActorDestroyReason aWhy) override;
- 
-   virtual bool
-   Recv__delete__(const UsageRequestResponse& aResponse) override;
-diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp
---- a/dom/quota/ActorsParent.cpp
-+++ b/dom/quota/ActorsParent.cpp
-@@ -1039,16 +1039,42 @@ private:
-   // IPDL methods.
-   void
-   ActorDestroy(ActorDestroyReason aWhy) override;
- 
-   bool
-   RecvCancel() override;
- };
- 
-+class GetUsageOp final
-+  : public QuotaUsageRequestBase
-+{
-+  nsTArray<OriginUsage> mOriginUsages;
-+  nsDataHashtable<nsCStringHashKey, uint32_t> mOriginUsagesIndex;
-+
-+  bool mGetAll;
-+
-+public:
-+  explicit GetUsageOp(const UsageRequestParams& aParams);
-+
-+private:
-+  ~GetUsageOp()
-+  { }
-+
-+  nsresult
-+  TraverseRepository(QuotaManager* aQuotaManager,
-+                     PersistenceType aPersistenceType);
-+
-+  nsresult
-+  DoDirectoryWork(QuotaManager* aQuotaManager) override;
-+
-+  void
-+  GetResponse(UsageRequestResponse& aResponse) override;
-+};
-+
- class GetOriginUsageOp final
-   : public QuotaUsageRequestBase
- {
-   // If mGetGroupUsage is false, we use mUsageInfo to record the origin usage
-   // and the file usage. Otherwise, we use it to record the group usage and the
-   // limit.
-   UsageInfo mUsageInfo;
- 
-@@ -5693,16 +5719,20 @@ PQuotaUsageRequestParent*
- Quota::AllocPQuotaUsageRequestParent(const UsageRequestParams& aParams)
- {
-   AssertIsOnBackgroundThread();
-   MOZ_ASSERT(aParams.type() != UsageRequestParams::T__None);
- 
-   RefPtr<QuotaUsageRequestBase> actor;
- 
-   switch (aParams.type()) {
-+    case UsageRequestParams::TAllUsageParams:
-+      actor = new GetUsageOp(aParams);
-+      break;
-+
-     case UsageRequestParams::TOriginUsageParams:
-       actor = new GetOriginUsageOp(aParams);
-       break;
- 
-     default:
-       MOZ_CRASH("Should never get here!");
-   }
- 
-@@ -6033,16 +6063,189 @@ QuotaUsageRequestBase::RecvCancel()
-   if (mCanceled.exchange(true)) {
-     NS_WARNING("Canceled more than once?!");
-     return false;
-   }
- 
-   return true;
- }
- 
-+GetUsageOp::GetUsageOp(const UsageRequestParams& aParams)
-+  : mGetAll(aParams.get_AllUsageParams().getAll())
-+{
-+  AssertIsOnOwningThread();
-+  MOZ_ASSERT(aParams.type() == UsageRequestParams::TAllUsageParams);
-+}
-+
-+nsresult
-+GetUsageOp::TraverseRepository(QuotaManager* aQuotaManager,
-+                               PersistenceType aPersistenceType)
-+{
-+  AssertIsOnIOThread();
-+  MOZ_ASSERT(aQuotaManager);
-+
-+  nsresult rv;
-+
-+  nsCOMPtr<nsIFile> directory =
-+    do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv);
-+  if (NS_WARN_IF(NS_FAILED(rv))) {
-+    return rv;
-+  }
-+
-+  rv = directory->InitWithPath(aQuotaManager->GetStoragePath(aPersistenceType));
-+  if (NS_WARN_IF(NS_FAILED(rv))) {
-+    return rv;
-+  }
-+
-+  bool exists;
-+  rv = directory->Exists(&exists);
-+  if (NS_WARN_IF(NS_FAILED(rv))) {
-+    return rv;
-+  }
-+
-+  if (!exists) {
-+    return NS_OK;
-+  }
-+
-+  nsCOMPtr<nsISimpleEnumerator> entries;
-+  rv = directory->GetDirectoryEntries(getter_AddRefs(entries));
-+  if (NS_WARN_IF(NS_FAILED(rv))) {
-+    return rv;
-+  }
-+
-+  bool persistent = aPersistenceType == PERSISTENCE_TYPE_PERSISTENT;
-+
-+  bool hasMore;
-+  while (NS_SUCCEEDED((rv = entries->HasMoreElements(&hasMore))) &&
-+         hasMore && !mCanceled) {
-+    nsCOMPtr<nsISupports> entry;
-+    rv = entries->GetNext(getter_AddRefs(entry));
-+    if (NS_WARN_IF(NS_FAILED(rv))) {
-+      return rv;
-+    }
-+
-+    nsCOMPtr<nsIFile> originDir = do_QueryInterface(entry);
-+    MOZ_ASSERT(originDir);
-+
-+    bool isDirectory;
-+    rv = originDir->IsDirectory(&isDirectory);
-+    if (NS_WARN_IF(NS_FAILED(rv))) {
-+      return rv;
-+    }
-+
-+    if (!isDirectory) {
-+      nsString leafName;
-+      rv = originDir->GetLeafName(leafName);
-+      if (NS_WARN_IF(NS_FAILED(rv))) {
-+        return rv;
-+      }
-+
-+      if (!leafName.EqualsLiteral(DSSTORE_FILE_NAME)) {
-+        QM_WARNING("Something (%s) in the repository that doesn't belong!",
-+                   NS_ConvertUTF16toUTF8(leafName).get());
-+      }
-+      continue;
-+    }
-+
-+    int64_t timestamp;
-+    nsCString suffix;
-+    nsCString group;
-+    nsCString origin;
-+    bool isApp;
-+    rv = aQuotaManager->GetDirectoryMetadata2WithRestore(originDir,
-+                                                         persistent,
-+                                                         &timestamp,
-+                                                         suffix,
-+                                                         group,
-+                                                         origin,
-+                                                         &isApp);
-+    if (NS_WARN_IF(NS_FAILED(rv))) {
-+      return rv;
-+    }
-+
-+    if (!mGetAll &&
-+        aQuotaManager->IsOriginWhitelistedForPersistentStorage(origin)) {
-+      continue;
-+    }
-+
-+    OriginUsage* originUsage;
-+
-+    // We can't store pointers to OriginUsage objects in the hashtable
-+    // since AppendElement() reallocates its internal array buffer as number
-+    // of elements grows.
-+    uint32_t index;
-+    if (mOriginUsagesIndex.Get(origin, &index)) {
-+      originUsage = &mOriginUsages[index];
-+    } else {
-+      index = mOriginUsages.Length();
-+
-+      originUsage = mOriginUsages.AppendElement();
-+
-+      originUsage->origin() = origin;
-+      originUsage->persisted() = false;
-+      originUsage->usage() = 0;
-+
-+      mOriginUsagesIndex.Put(origin, index);
-+    }
-+
-+    UsageInfo usageInfo;
-+    rv = GetUsageForOrigin(aQuotaManager,
-+                           aPersistenceType,
-+                           group,
-+                           origin,
-+                           isApp,
-+                           &usageInfo);
-+    if (NS_WARN_IF(NS_FAILED(rv))) {
-+      return rv;
-+    }
-+
-+    originUsage->usage() = originUsage->usage() + usageInfo.TotalUsage();
-+  }
-+  if (NS_WARN_IF(NS_FAILED(rv))) {
-+    return rv;
-+  }
-+
-+  return NS_OK;
-+}
-+
-+nsresult
-+GetUsageOp::DoDirectoryWork(QuotaManager* aQuotaManager)
-+{
-+  AssertIsOnIOThread();
-+
-+  PROFILER_LABEL("Quota", "GetUsageOp::DoDirectoryWork",
-+                 js::ProfileEntry::Category::OTHER);
-+
-+  nsresult rv;
-+
-+  for (const PersistenceType type : kAllPersistenceTypes) {
-+    rv = TraverseRepository(aQuotaManager, type);
-+    if (NS_WARN_IF(NS_FAILED(rv))) {
-+      return rv;
-+    }
-+  }
-+
-+  return NS_OK;
-+}
-+
-+void
-+GetUsageOp::GetResponse(UsageRequestResponse& aResponse)
-+{
-+  AssertIsOnOwningThread();
-+
-+  aResponse = AllUsageResponse();
-+
-+  if (!mOriginUsages.IsEmpty()) {
-+    nsTArray<OriginUsage>& originUsages =
-+      aResponse.get_AllUsageResponse().originUsages();
-+
-+    mOriginUsages.SwapElements(originUsages);
-+  }
-+}
-+
- GetOriginUsageOp::GetOriginUsageOp(const UsageRequestParams& aParams)
-   : mParams(aParams.get_OriginUsageParams())
-   , mGetGroupUsage(aParams.get_OriginUsageParams().getGroupUsage())
- {
-   AssertIsOnOwningThread();
-   MOZ_ASSERT(aParams.type() == UsageRequestParams::TOriginUsageParams);
- }
- 
-diff --git a/dom/quota/PQuota.ipdl b/dom/quota/PQuota.ipdl
---- a/dom/quota/PQuota.ipdl
-+++ b/dom/quota/PQuota.ipdl
-@@ -12,24 +12,30 @@ include "mozilla/dom/quota/Serialization
- 
- using mozilla::dom::quota::PersistenceType
-   from "mozilla/dom/quota/PersistenceType.h";
- 
- namespace mozilla {
- namespace dom {
- namespace quota {
- 
-+struct AllUsageParams
-+{
-+  bool getAll;
-+};
-+
- struct OriginUsageParams
- {
-   PrincipalInfo principalInfo;
-   bool getGroupUsage;
- };
- 
- union UsageRequestParams
- {
-+  AllUsageParams;
-   OriginUsageParams;
- };
- 
- struct ClearOriginParams
- {
-   PrincipalInfo principalInfo;
-   PersistenceType persistenceType;
-   bool persistenceTypeIsExplicit;
-diff --git a/dom/quota/PQuotaUsageRequest.ipdl b/dom/quota/PQuotaUsageRequest.ipdl
---- a/dom/quota/PQuotaUsageRequest.ipdl
-+++ b/dom/quota/PQuotaUsageRequest.ipdl
-@@ -3,26 +3,39 @@
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- include protocol PQuota;
- 
- namespace mozilla {
- namespace dom {
- namespace quota {
- 
-+struct OriginUsage
-+{
-+  nsCString origin;
-+  bool persisted;
-+  uint64_t usage;
-+};
-+
-+struct AllUsageResponse
-+{
-+  OriginUsage[] originUsages;
-+};
-+
- struct OriginUsageResponse
- {
-   uint64_t usage;
-   uint64_t fileUsage;
-   uint64_t limit;
- };
- 
- union UsageRequestResponse
- {
-   nsresult;
-+  AllUsageResponse;
-   OriginUsageResponse;
- };
- 
- protocol PQuotaUsageRequest
- {
-   manager PQuota;
- 
- parent:
-diff --git a/dom/quota/QuotaManagerService.cpp b/dom/quota/QuotaManagerService.cpp
---- a/dom/quota/QuotaManagerService.cpp
-+++ b/dom/quota/QuotaManagerService.cpp
-@@ -490,16 +490,41 @@ QuotaManagerService::RemoveIdleObserver(
- 
- NS_IMPL_ADDREF(QuotaManagerService)
- NS_IMPL_RELEASE_WITH_DESTROY(QuotaManagerService, Destroy())
- NS_IMPL_QUERY_INTERFACE(QuotaManagerService,
-                         nsIQuotaManagerService,
-                         nsIObserver)
- 
- NS_IMETHODIMP
-+QuotaManagerService::GetUsage(nsIQuotaUsageCallback* aCallback,
-+                              bool aGetAll,
-+                              nsIQuotaUsageRequest** _retval)
-+{
-+  MOZ_ASSERT(NS_IsMainThread());
-+  MOZ_ASSERT(aCallback);
-+
-+  RefPtr<UsageRequest> request = new UsageRequest(aCallback);
-+
-+  AllUsageParams params;
-+
-+  params.getAll() = aGetAll;
-+
-+  nsAutoPtr<PendingRequestInfo> info(new UsageRequestInfo(request, params));
-+
-+  nsresult rv = InitiateRequest(info);
-+  if (NS_WARN_IF(NS_FAILED(rv))) {
-+    return rv;
-+  }
-+
-+  request.forget(_retval);
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
- QuotaManagerService::GetUsageForPrincipal(nsIPrincipal* aPrincipal,
-                                           nsIQuotaUsageCallback* aCallback,
-                                           bool aGetGroupUsage,
-                                           nsIQuotaUsageRequest** _retval)
- {
-   MOZ_ASSERT(NS_IsMainThread());
-   MOZ_ASSERT(aPrincipal);
-   MOZ_ASSERT(aCallback);
-diff --git a/dom/quota/QuotaRequests.cpp b/dom/quota/QuotaRequests.cpp
---- a/dom/quota/QuotaRequests.cpp
-+++ b/dom/quota/QuotaRequests.cpp
-@@ -86,16 +86,25 @@ RequestBase::GetResultCode(nsresult* aRe
-   if (!mHaveResultOrErrorCode) {
-     return NS_ERROR_FAILURE;
-   }
- 
-   *aResultCode = mResultCode;
-   return NS_OK;
- }
- 
-+UsageRequest::UsageRequest(nsIQuotaUsageCallback* aCallback)
-+  : mCallback(aCallback)
-+  , mBackgroundActor(nullptr)
-+  , mCanceled(false)
-+{
-+  AssertIsOnOwningThread();
-+  MOZ_ASSERT(aCallback);
-+}
-+
- UsageRequest::UsageRequest(nsIPrincipal* aPrincipal,
-                            nsIQuotaUsageCallback* aCallback)
-   : RequestBase(aPrincipal)
-   , mCallback(aCallback)
-   , mBackgroundActor(nullptr)
-   , mCanceled(false)
- {
-   AssertIsOnOwningThread();
-diff --git a/dom/quota/QuotaRequests.h b/dom/quota/QuotaRequests.h
---- a/dom/quota/QuotaRequests.h
-+++ b/dom/quota/QuotaRequests.h
-@@ -73,16 +73,18 @@ class UsageRequest final
- 
-   nsCOMPtr<nsIVariant> mResult;
- 
-   QuotaUsageRequestChild* mBackgroundActor;
- 
-   bool mCanceled;
- 
- public:
-+  explicit UsageRequest(nsIQuotaUsageCallback* aCallback);
-+
-   UsageRequest(nsIPrincipal* aPrincipal,
-                nsIQuotaUsageCallback* aCallback);
- 
-   void
-   SetBackgroundActor(QuotaUsageRequestChild* aBackgroundActor);
- 
-   void
-   ClearBackgroundActor()
-diff --git a/dom/quota/QuotaResults.cpp b/dom/quota/QuotaResults.cpp
---- a/dom/quota/QuotaResults.cpp
-+++ b/dom/quota/QuotaResults.cpp
-@@ -5,16 +5,53 @@
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "QuotaResults.h"
- 
- namespace mozilla {
- namespace dom {
- namespace quota {
- 
-+UsageResult::UsageResult(const nsACString& aOrigin,
-+                         bool aPersisted,
-+                         uint64_t aUsage)
-+  : mOrigin(aOrigin)
-+  , mUsage(aUsage)
-+  , mPersisted(aPersisted)
-+{
-+}
-+
-+NS_IMPL_ISUPPORTS(UsageResult,
-+                  nsIQuotaUsageResult)
-+
-+NS_IMETHODIMP
-+UsageResult::GetOrigin(nsACString& aOrigin)
-+{
-+  aOrigin = mOrigin;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+UsageResult::GetPersisted(bool* aPersisted)
-+{
-+  MOZ_ASSERT(aPersisted);
-+
-+  *aPersisted = mPersisted;
-+  return NS_OK;
-+}
-+
-+NS_IMETHODIMP
-+UsageResult::GetUsage(uint64_t* aUsage)
-+{
-+  MOZ_ASSERT(aUsage);
-+
-+  *aUsage = mUsage;
-+  return NS_OK;
-+}
-+
- OriginUsageResult::OriginUsageResult(uint64_t aUsage,
-                                      uint64_t aFileUsage,
-                                      uint64_t aLimit)
-   : mUsage(aUsage)
-   , mFileUsage(aFileUsage)
-   , mLimit(aLimit)
- {
- }
-diff --git a/dom/quota/QuotaResults.h b/dom/quota/QuotaResults.h
---- a/dom/quota/QuotaResults.h
-+++ b/dom/quota/QuotaResults.h
-@@ -8,16 +8,36 @@
- #define mozilla_dom_quota_QuotaResults_h
- 
- #include "nsIQuotaResults.h"
- 
- namespace mozilla {
- namespace dom {
- namespace quota {
- 
-+class UsageResult
-+  : public nsIQuotaUsageResult
-+{
-+  nsCString mOrigin;
-+  uint64_t mUsage;
-+  bool mPersisted;
-+
-+public:
-+  UsageResult(const nsACString& aOrigin,
-+              bool aPersisted,
-+              uint64_t aUsage);
-+
-+private:
-+  virtual ~UsageResult()
-+  { }
-+
-+  NS_DECL_ISUPPORTS
-+  NS_DECL_NSIQUOTAUSAGERESULT
-+};
-+
- class OriginUsageResult
-   : public nsIQuotaOriginUsageResult
- {
-   uint64_t mUsage;
-   uint64_t mFileUsage;
-   uint64_t mLimit;
- 
- public:
-diff --git a/dom/quota/nsIQuotaManagerService.idl b/dom/quota/nsIQuotaManagerService.idl
---- a/dom/quota/nsIQuotaManagerService.idl
-+++ b/dom/quota/nsIQuotaManagerService.idl
-@@ -10,16 +10,31 @@ interface nsIPrincipal;
- interface nsIQuotaRequest;
- interface nsIQuotaUsageCallback;
- interface nsIQuotaUsageRequest;
- 
- [scriptable, builtinclass, uuid(1b3d0a38-8151-4cf9-89fa-4f92c2ef0e7e)]
- interface nsIQuotaManagerService : nsISupports
- {
-   /**
-+   * Schedules an asynchronous callback that will inspect all origins and
-+   * return the total amount of disk space being used by storages for each
-+   * origin separately.
-+   *
-+   * @param aCallback
-+   *        The callback that will be called when the usage is available.
-+   * @param aGetAll
-+   *        An optional boolean to indicate inspection of all origins,
-+   *        including internal ones.
-+   */
-+  [must_use] nsIQuotaUsageRequest
-+  getUsage(in nsIQuotaUsageCallback aCallback,
-+           [optional] in boolean aGetAll);
-+
-+  /**
-    * Schedules an asynchronous callback that will return the total amount of
-    * disk space being used by storages for the given origin.
-    *
-    * @param aPrincipal
-    *        A principal for the origin whose usage is being queried.
-    * @param aCallback
-    *        The callback that will be called when the usage is available.
-    * @param aGetGroupUsage
-diff --git a/dom/quota/nsIQuotaRequests.idl b/dom/quota/nsIQuotaRequests.idl
---- a/dom/quota/nsIQuotaRequests.idl
-+++ b/dom/quota/nsIQuotaRequests.idl
-@@ -18,16 +18,17 @@ interface nsIQuotaRequestBase : nsISuppo
- 
-   [must_use] readonly attribute nsresult resultCode;
- };
- 
- [scriptable, uuid(166e28e6-cf6d-4927-a6d7-b51bca9d3469)]
- interface nsIQuotaUsageRequest : nsIQuotaRequestBase
- {
-   // The result can contain one of these types:
-+  //   array of nsIQuotaUsageResult
-   //   nsIQuotaOriginUsageResult
-   [must_use] readonly attribute nsIVariant result;
- 
-   attribute nsIQuotaUsageCallback callback;
- 
-   [must_use] void
-   cancel();
- };
-diff --git a/dom/quota/nsIQuotaResults.idl b/dom/quota/nsIQuotaResults.idl
---- a/dom/quota/nsIQuotaResults.idl
-+++ b/dom/quota/nsIQuotaResults.idl
-@@ -1,16 +1,26 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* vim: set ts=2 et sw=2 tw=80: */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "nsISupports.idl"
- 
-+[scriptable, function, uuid(d8c9328b-9aa8-4f5d-90e6-482de4a6d5b8)]
-+interface nsIQuotaUsageResult : nsISupports
-+{
-+  readonly attribute ACString origin;
-+
-+  readonly attribute boolean persisted;
-+
-+  readonly attribute unsigned long long usage;
-+};
-+
- [scriptable, function, uuid(96df03d2-116a-493f-bb0b-118c212a6b32)]
- interface nsIQuotaOriginUsageResult : nsISupports
- {
-   readonly attribute unsigned long long usage;
- 
-   readonly attribute unsigned long long fileUsage;
- 
-   readonly attribute unsigned long long limit;
-
diff --git a/gnu/packages/patches/icecat-bug-1414945.patch b/gnu/packages/patches/icecat-bug-1414945.patch
deleted file mode 100644
index 3638ace1c4..0000000000
--- a/gnu/packages/patches/icecat-bug-1414945.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Based on:
-  https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/d303b3bb88c3
-
-Adapted to apply cleanly to IceCat.
-
-# HG changeset patch
-# User Philip Chimento <philip.chimento@gmail.com>
-# Date 1510012155 28800
-# Node ID d303b3bb88c3345d3a089901e2b6fe883d148e44
-# Parent  0152d097672f7e99504815cf7b06d9f303419fba
-Bug 1414945 - Don't use TimeDuration in static initializer. r=jandem, a=ritu
-
-On Darwin this would cause a race between two static initializers.
-
-diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
---- a/js/src/shell/js.cpp
-+++ b/js/src/shell/js.cpp
-@@ -138,17 +138,17 @@ static const size_t gMaxStackSize = 2 * 
- #else
- static const size_t gMaxStackSize = 128 * sizeof(size_t) * 1024;
- #endif
- 
- /*
-  * Limit the timeout to 30 minutes to prevent an overflow on platfoms
-  * that represent the time internally in microseconds using 32-bit int.
-  */
--static const TimeDuration MAX_TIMEOUT_INTERVAL = TimeDuration::FromSeconds(1800.0);
-+static const double MAX_TIMEOUT_SECONDS = 1800.0;
- 
- // SharedArrayBuffer and Atomics settings track IceCat.  Choose a custom setting
- // with --shared-memory={on,off}.
- #ifndef RELEASE_OR_BETA
- # define SHARED_MEMORY_DEFAULT 1
- #else
- # define SHARED_MEMORY_DEFAULT 0
- #endif
-@@ -3518,16 +3518,17 @@ Sleep_fn(JSContext* cx, unsigned argc, V
-         if (!ToNumber(cx, args[0], &t_secs))
-             return false;
-         if (mozilla::IsNaN(t_secs)) {
-             JS_ReportErrorASCII(cx, "sleep interval is not a number");
-             return false;
-         }
- 
-         duration = TimeDuration::FromSeconds(Max(0.0, t_secs));
-+        const TimeDuration MAX_TIMEOUT_INTERVAL = TimeDuration::FromSeconds(MAX_TIMEOUT_SECONDS);
-         if (duration > MAX_TIMEOUT_INTERVAL) {
-             JS_ReportErrorASCII(cx, "Excessive sleep interval");
-             return false;
-         }
-     }
-     {
-         LockGuard<Mutex> guard(sc->watchdogLock);
-         TimeStamp toWakeup = TimeStamp::Now() + duration;
-@@ -3675,16 +3676,17 @@ CancelExecution(JSContext* cx)
- 
- static bool
- SetTimeoutValue(JSContext* cx, double t)
- {
-     if (mozilla::IsNaN(t)) {
-         JS_ReportErrorASCII(cx, "timeout is not a number");
-         return false;
-     }
-+    const TimeDuration MAX_TIMEOUT_INTERVAL = TimeDuration::FromSeconds(MAX_TIMEOUT_SECONDS);
-     if (TimeDuration::FromSeconds(t) > MAX_TIMEOUT_INTERVAL) {
-         JS_ReportErrorASCII(cx, "Excessive timeout value");
-         return false;
-     }
-     GetShellContext(cx)->timeoutInterval = t;
-     if (!ScheduleWatchdog(cx, t)) {
-         JS_ReportErrorASCII(cx, "Failed to create the watchdog");
-         return false;
-
diff --git a/gnu/packages/patches/icecat-bug-1415133.patch b/gnu/packages/patches/icecat-bug-1415133.patch
deleted file mode 100644
index 4e322d21fb..0000000000
--- a/gnu/packages/patches/icecat-bug-1415133.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-Based on:
-  https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/22fe3ff3f923
-
-Adapted to apply cleanly to IceCat.
-
-# HG changeset patch
-# User Marco Bonardo <mbonardo@mozilla.com>
-# Date 1510052455 -3600
-# Node ID 22fe3ff3f92358596521f7155ddc512006022207
-# Parent  2909ba991f3134f9fbf4859cf08582f1c9845594
-Bug 1415133 - Downgrades from 55+ to ESR lose bookmarks. r=past a=lizzard
-
-MozReview-Commit-ID: 44Rw7m1FP4h
-
-diff --git a/toolkit/components/places/Database.cpp b/toolkit/components/places/Database.cpp
---- a/toolkit/components/places/Database.cpp
-+++ b/toolkit/components/places/Database.cpp
-@@ -761,16 +761,21 @@ Database::InitSchema(bool* aDatabaseMigr
-     // 2. implement a method that performs upgrade to your version from the
-     //    previous one.
-     //
-     // NOTE: The downgrade process is pretty much complicated by the fact old
-     //       versions cannot know what a new version is going to implement.
-     //       The only thing we will do for downgrades is setting back the schema
-     //       version, so that next upgrades will run again the migration step.
- 
-+    if (currentSchemaVersion > 36) {
-+      // These versions are not downgradable.
-+      return NS_ERROR_FILE_CORRUPTED;
-+    }
-+
-     if (currentSchemaVersion < DATABASE_SCHEMA_VERSION) {
-       *aDatabaseMigrated = true;
- 
-       if (currentSchemaVersion < 11) {
-         // These are versions older than IceCat 4 that are not supported
-         // anymore.  In this case it's safer to just replace the database.
-         return NS_ERROR_FILE_CORRUPTED;
-       }
-
diff --git a/gnu/packages/patches/icecat-bug-1424373-pt2.patch b/gnu/packages/patches/icecat-bug-1424373-pt2.patch
deleted file mode 100644
index cdc7226bd3..0000000000
--- a/gnu/packages/patches/icecat-bug-1424373-pt2.patch
+++ /dev/null
@@ -1,183 +0,0 @@
-Based on:
-  https://hg.mozilla.org/releases/mozilla-esr52/raw-rev/19ea736e7e3d
-
-Adapted to apply cleanly to IceCat.
-
-# HG changeset patch
-# User Mike Conley <mconley@mozilla.com>
-# Date 1513892173 18000
-# Node ID 19ea736e7e3d20555ee6633b9d7803c1225979e1
-# Parent  320032aaa06899f5585dcd0288059e5342118714
-Bug 1424373 - Rename crash report submission pref. r=Mossop a=jcristau
-
-diff --git a/browser/app/profile/icecat.js b/browser/app/profile/icecat.js
---- a/browser/app/profile/icecat.js
-+++ b/browser/app/profile/icecat.js
-@@ -1557,15 +1557,15 @@ pref("browser.crashReports.unsubmittedCh
- pref("browser.crashReports.unsubmittedCheck.enabled", false);
- #endif
- 
- // chancesUntilSuppress is how many times we'll show the unsubmitted
- // crash report notification across different days and shutdown
- // without a user choice before we suppress the notification for
- // some number of days.
- pref("browser.crashReports.unsubmittedCheck.chancesUntilSuppress", 4);
--pref("browser.crashReports.unsubmittedCheck.autoSubmit", false);
-+pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
- 
- #ifdef NIGHTLY_BUILD
- // Enable the (fairly costly) client/server validation on nightly only. The other prefs
- // controlling validation are located in /services/sync/services-sync.js
- pref("services.sync.validation.enabled", true);
- #endif
-diff --git a/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js b/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
---- a/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
-+++ b/browser/base/content/test/tabcrashed/browser_autoSubmitRequest.js
-@@ -1,12 +1,12 @@
- "use strict";
- 
- const PAGE = "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page.";
--const AUTOSUBMIT_PREF = "browser.crashReports.unsubmittedCheck.autoSubmit";
-+const AUTOSUBMIT_PREF = "browser.crashReports.unsubmittedCheck.autoSubmit2";
- 
- const {TabStateFlusher} =
-   Cu.import("resource:///modules/sessionstore/TabStateFlusher.jsm", {});
- 
- // On debug builds, crashing tabs results in much thinking, which
- // slows down the test and results in intermittent test timeouts,
- // so we'll pump up the expected timeout for this test.
- requestLongerTimeout(2);
-diff --git a/browser/components/preferences/in-content/advanced.xul b/browser/components/preferences/in-content/advanced.xul
---- a/browser/components/preferences/in-content/advanced.xul
-+++ b/browser/components/preferences/in-content/advanced.xul
-@@ -51,18 +51,18 @@
- #ifdef MOZ_TELEMETRY_REPORTING
-   <preference id="toolkit.telemetry.enabled"
-               name="toolkit.telemetry.enabled"
-               type="bool"/>
- #endif
- 
-   <!-- Data Choices tab -->
- #ifdef MOZ_CRASHREPORTER
--  <preference id="browser.crashReports.unsubmittedCheck.autoSubmit"
--              name="browser.crashReports.unsubmittedCheck.autoSubmit"
-+  <preference id="browser.crashReports.unsubmittedCheck.autoSubmit2"
-+              name="browser.crashReports.unsubmittedCheck.autoSubmit2"
-               type="bool"/>
- #endif
- 
-   <!-- Network tab -->
-   <preference id="browser.cache.disk.capacity"
-               name="browser.cache.disk.capacity"
-               type="int"/>
-   <preference id="browser.offline-apps.notify"
-@@ -232,17 +232,17 @@
-           </hbox>
-         </vbox>
-       </groupbox>
- #endif
- #ifdef MOZ_CRASHREPORTER
-       <groupbox>
-         <caption>
-           <checkbox id="automaticallySubmitCrashesBox"
--                    preference="browser.crashReports.unsubmittedCheck.autoSubmit"
-+                    preference="browser.crashReports.unsubmittedCheck.autoSubmit2"
-                     label="&alwaysSubmitCrashReports.label;"
-                     accesskey="&alwaysSubmitCrashReports.accesskey;"/>
-         </caption>
-         <hbox class="indent">
-           <label flex="1">&crashReporterDesc2.label;</label>
-           <spacer flex="10"/>
-           <label id="crashReporterLearnMore"
-                  class="text-link">&crashReporterLearnMore.label;</label>
-diff --git a/browser/components/sessionstore/test/browser_background_tab_crash.js b/browser/components/sessionstore/test/browser_background_tab_crash.js
---- a/browser/components/sessionstore/test/browser_background_tab_crash.js
-+++ b/browser/components/sessionstore/test/browser_background_tab_crash.js
-@@ -142,17 +142,17 @@ add_task(function* test_background_crash
- /**
-  * Tests that if a content process crashes taking down only
-  * background tabs, and the user is configured to send backlogged
-  * crash reports automatically, that the tab crashed page is not
-  * shown.
-  */
- add_task(function* test_background_crash_autosubmit_backlogged() {
-   yield SpecialPowers.pushPrefEnv({
--    set: [["browser.crashReports.unsubmittedCheck.autoSubmit", true]],
-+    set: [["browser.crashReports.unsubmittedCheck.autoSubmit2", true]],
-   });
- 
-   yield setupBackgroundTabs(function*([tab1, tab2]) {
-     // Let's crash one of those background tabs now...
-     yield crashBackgroundTabs([tab1, tab2]);
- 
-     // Selecting the first tab should restore it.
-     let tabRestored = promiseTabRestored(tab1);
-diff --git a/browser/modules/ContentCrashHandlers.jsm b/browser/modules/ContentCrashHandlers.jsm
---- a/browser/modules/ContentCrashHandlers.jsm
-+++ b/browser/modules/ContentCrashHandlers.jsm
-@@ -865,21 +865,21 @@ this.UnsubmittedCrashHandler = {
-     return nb.appendNotification(message, notificationID,
-                                  "chrome://browser/skin/tab-crashed.svg",
-                                  nb.PRIORITY_INFO_HIGH, buttons,
-                                  eventCallback);
-   },
- 
-   get autoSubmit() {
-     return Services.prefs
--                   .getBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit");
-+                   .getBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit2");
-   },
- 
-   set autoSubmit(val) {
--    Services.prefs.setBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit",
-+    Services.prefs.setBoolPref("browser.crashReports.unsubmittedCheck.autoSubmit2",
-                                val);
-   },
- 
-   /**
-    * Attempt to submit reports to the crash report server. Each
-    * report will have the "SubmittedFromInfobar" extra key set
-    * to true.
-    *
-diff --git a/browser/modules/test/browser_UnsubmittedCrashHandler.js b/browser/modules/test/browser_UnsubmittedCrashHandler.js
---- a/browser/modules/test/browser_UnsubmittedCrashHandler.js
-+++ b/browser/modules/test/browser_UnsubmittedCrashHandler.js
-@@ -344,17 +344,17 @@ add_task(function* test_can_submit_sever
-   clearPendingCrashReports();
- });
- 
- /**
-  * Tests that choosing "Send Always" flips the autoSubmit pref
-  * and sends the pending crash reports.
-  */
- add_task(function* test_can_submit_always() {
--  let pref = "browser.crashReports.unsubmittedCheck.autoSubmit";
-+  let pref = "browser.crashReports.unsubmittedCheck.autoSubmit2";
-   Assert.equal(Services.prefs.getBoolPref(pref), false,
-                "We should not be auto-submitting by default");
- 
-   let reportIDs = yield createPendingCrashReports(1);
-   let notification =
-     yield UnsubmittedCrashHandler.checkForUnsubmittedCrashReports();
-   Assert.ok(notification, "There should be a notification");
- 
-@@ -388,17 +388,17 @@ add_task(function* test_can_submit_alway
- 
- /**
-  * Tests that if the user has chosen to automatically send
-  * crash reports that no notification is displayed to the
-  * user.
-  */
- add_task(function* test_can_auto_submit() {
-   yield SpecialPowers.pushPrefEnv({ set: [
--    ["browser.crashReports.unsubmittedCheck.autoSubmit", true],
-+    ["browser.crashReports.unsubmittedCheck.autoSubmit2", true],
-   ]});
- 
-   let reportIDs = yield createPendingCrashReports(3);
-   let promiseReports = waitForSubmittedReports(reportIDs);
-   let notification =
-     yield UnsubmittedCrashHandler.checkForUnsubmittedCrashReports();
-   Assert.equal(notification, null, "There should be no notification");
-   info("Waiting on reports to be received.");
-
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index 110ba45d3d..6464385327 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -529,7 +529,7 @@ contents of a file is equal to a particular string.")
 (define-public perl-test-harness
   (package
     (name "perl-test-harness")
-    (version "3.39")
+    (version "3.41")
     (source
      (origin
        (method url-fetch)
@@ -537,7 +537,7 @@ contents of a file is equal to a particular string.")
                            "Test-Harness-" version ".tar.gz"))
        (sha256
         (base32
-         "0chiqnzmna2mglm37nzxvn9qhq2j31iwz3i9isqjs7bf3k449gb9"))))
+         "0cgdgzywvscbvb9i0dmd2ls5jwqlnf2z6hx4f4lljpvdjd59v3m8"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 556d8d31b4..badff6e4d1 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -6008,7 +6008,7 @@ of data.")
 (define-public perl-mozilla-ca
   (package
     (name "perl-mozilla-ca")
-    (version "20160104")
+    (version "20180117")
     (source
      (origin
        (method url-fetch)
@@ -6016,7 +6016,7 @@ of data.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0aizn08lrdrgjz9vagkjmw2c7sxn46fzz521v9dbcqii4jd0d9r7"))))
+         "01p4ykyilk1639dxgjaa2n7rz1f0zbqxkq11yc9n6xcz26z9zk7j"))))
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Mozilla-CA/")
     (synopsis "Mozilla's CA cert bundle in PEM format")
@@ -7340,7 +7340,7 @@ return value is the sub.")
 (define-public perl-sub-quote
   (package
     (name "perl-sub-quote")
-    (version "2.004000")
+    (version "2.005000")
     (source
      (origin
        (method url-fetch)
@@ -7349,7 +7349,7 @@ return value is the sub.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1zrh3apxsw1ks25zkh9dcn00656rsvq4mimqz3w8p37s2c1m4qaq"))))
+         "1zv45cvj4ifkbr61ydcpphnj6lvib37gfxwfh40h0yzf3c8lbca4"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-fatal" ,perl-test-fatal)))
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index b9a5eb4bf2..f3f279a533 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,10 +50,19 @@
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:prefix license:))
 
+(define gd-for-php
+  (package
+    (inherit gd)
+    (source (origin
+             (inherit (package-source gd))
+             (patches (search-patches "gd-fix-tests-on-i686.patch"
+                                      "gd-freetype-test-failure.patch"
+                                      "gd-CVE-2018-5711.patch"))))))
+
 (define-public php
   (package
     (name "php")
-    (version "7.2.1")
+    (version "7.2.3")
     (home-page "https://secure.php.net/")
     (source (origin
               (method url-fetch)
@@ -60,7 +70,7 @@
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "08l8zmp8wbavq6wlgx19irz59csb44jhbsr172bfsq36v8pzhv3c"))
+                "07v5bq5b97zdqwmig6sxqsdb50vdf04w6jzmjq5kqh9gaqdlzadk"))
               (modules '((guix build utils)))
               (snippet
                '(with-directory-excursion "ext"
@@ -277,11 +287,7 @@
                          "ext/mbstring/tests/mb_ereg_variation3.phpt"
                          "ext/mbstring/tests/mb_ereg_replace_variation1.phpt"
                          "ext/mbstring/tests/bug72994.phpt"
-                         "ext/ldap/tests/ldap_set_option_error.phpt"
-                         
-                         ;; XXX: This is CVE-2018-5711. There is no fix yet in libgd.
-                         ;; See https://github.com/libgd/libgd/issues/420
-                         "ext/gd/tests/bug75571.phpt"))
+                         "ext/ldap/tests/ldap_set_option_error.phpt"))
 
              ;; Skip tests requiring network access.
              (setenv "SKIP_ONLINE_TESTS" "1")
@@ -298,7 +304,7 @@
        ("curl" ,curl)
        ("cyrus-sasl" ,cyrus-sasl)
        ("freetype" ,freetype)
-       ("gd" ,gd)
+       ("gd" ,gd-for-php)
        ("gdbm" ,gdbm)
        ("glibc" ,glibc)
        ("gmp" ,gmp)
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 2f61de8994..6edfba95cc 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +27,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages groff)
@@ -242,7 +243,7 @@ seen in a terminal.")
 (define-public highlight
   (package
     (name "highlight")
-    (version "3.33")
+    (version "3.42")
     (source
      (origin
        (method url-fetch)
@@ -250,10 +251,10 @@ seen in a terminal.")
                            version ".tar.bz2"))
        (sha256
         (base32
-         "0g2whi6pxl640795vymikm82a1my841jmh7fiqzbrjpc9wsk1db4"))))
+         "07iihzy8ckzdrxqd6bzbij4hy4mmlixibjnjviqfihd0hh1q30m5"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no tests
+     `(#:tests? #f                      ; no tests
        #:make-flags
        (let ((confdir (string-append %output "/share/highlight/config/")))
          (list (string-append "PREFIX=" %output)
@@ -261,12 +262,13 @@ seen in a terminal.")
                (string-append "conf_dir=" confdir)))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (delete 'configure)            ; no configure script
          (add-after 'unpack 'fix-search-for-lua
            (lambda _
              (substitute* "src/makefile"
                (("(pkg-config.*)lua" _ prefix)
-                (string-append prefix "lua-5.3")))
+                (string-append prefix "lua-" ,(version-major+minor
+                                               (package-version lua)))))
              #t)))))
     (inputs
      `(("lua" ,lua)
diff --git a/gnu/packages/profiling.scm b/gnu/packages/profiling.scm
index 4fdf260c67..d6f3aede28 100644
--- a/gnu/packages/profiling.scm
+++ b/gnu/packages/profiling.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Dave Love <fx@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -65,7 +66,7 @@
      `(("autoconf" ,autoconf)
        ("gfortran" ,gfortran)))
     (arguments
-     '(#:tests? #f ; no check target
+     `(#:tests? #f ; no check target
        #:configure-flags
        ;; These are roughly per Fedora, but elide mx (assumed to be dead, even
        ;; Open-MX) and add and powercap -- I don't know the pros/cons of
@@ -84,7 +85,8 @@ stealtime lmsensors infiniband powercap"
          (add-before 'configure 'autoconf
            (lambda _
              (chdir "src")
-             (zero? (system* "autoconf"))))
+             (invoke "autoconf")
+             #t))
          ;; Amalgamating with the following clause gives double substitution.
          (add-before 'patch-source-shebangs 'patch-components
            (lambda _
@@ -95,28 +97,26 @@ stealtime lmsensors infiniband powercap"
          (add-after 'configure 'components
            (lambda*  (#:key inputs #:allow-other-keys)
              (with-directory-excursion "components"
-               (and
-                (with-directory-excursion "infiniband_umad"
-                  (zero? (system* "./configure")))
-                (with-directory-excursion "lmsensors"
-                  (let ((base  (assoc-ref inputs "lm-sensors")))
-                    (zero?
-                     (system*
-                      "./configure"
-                      (string-append "--with-sensors_incdir=" base
-                                     "/include/sensors")
-                      (string-append "--with-sensors_libdir=" base "/lib")))))))))
+               (with-directory-excursion "infiniband_umad"
+                 (invoke "./configure"))
+               (with-directory-excursion "lmsensors"
+                 (let ((base (assoc-ref inputs "lm-sensors")))
+                   (invoke "./configure"
+                           (string-append "--with-sensors_incdir="
+                                          base "/include/sensors")
+                           (string-append "--with-sensors_libdir="
+                                          base "/lib")))))
+             #t))
          (add-after 'install 'extra-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((doc (string-append (assoc-ref outputs "out")
-                                       "/share/doc")))
-               (mkdir-p doc)
+                                       "/share/doc/" ,name "-" ,version)))
                (chdir "..")             ; we went into src above
                (for-each (lambda (file)
                            (install-file file doc))
-                         '("README" "RELEASENOTES.txt" "LICENSE.txt"))
+                         '("README" "RELEASENOTES.txt"))
                #t))))))
-    (home-page "http://icl.cs.utk.edu/papi/")
+    (home-page "https://icl.utk.edu/papi/")
     (synopsis "Performance Application Programming Interface")
     (description
      "PAPI provides the tool designer and application engineer with a consistent
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 47fc5cd63a..d9721f1375 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -138,14 +138,14 @@ between a web browser and web server.")
 (define-public python-flask-babel
   (package
     (name "python-flask-babel")
-    (version "0.11.1")
+    (version "0.11.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "Flask-Babel" version))
         (sha256
           (base32
-            "16b80cipdba9xj3jlaiaq6wgrgpjb70w3j01jjy9hbp4k71kd6yj"))))
+            "0ff9n165vhf1nhv6807ckhpp224jw7k7sd7jz5kfh3sbpl85gmy0"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-flask" ,python-flask)
@@ -254,7 +254,8 @@ C, yielding parse times that can be a thirtieth of the html5lib parse times.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (zero? (system* "py.test" "-v" "webencodings/tests.py")))))))
+             (invoke "py.test" "-v" "webencodings/tests.py")
+             #t)))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (home-page "https://github.com/SimonSapin/python-webencodings")
@@ -264,7 +265,7 @@ C, yielding parse times that can be a thirtieth of the html5lib parse times.")
 something like @code{Content-Type: text/html; charset=latin1}, tools need
 to use a particular set of aliases for encoding labels as well as some
 overriding rules.  For example, @code{US-ASCII} and @code{iso-8859-1} on
-the web are actually aliases for @code{windows-1252}, and an @code{UTF-8}
+the web are actually aliases for @code{windows-1252}, and a @code{UTF-8}
 or @code{UTF-16} BOM takes precedence over any other encoding declaration.
 The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
 defines all such details so that implementations do not have to
@@ -295,7 +296,8 @@ is Python’s.")
        (modify-phases %standard-phases
         (replace 'check
           (lambda _
-            (zero? (system* "./admin/runtests")))))))
+            (invoke "./admin/runtests")
+            #t)))))
     (properties `((python2-variant . ,(delay python2-openid))))
     (propagated-inputs
      `(("python-defusedxml" ,python-defusedxml)))
@@ -332,19 +334,19 @@ for clients and servers.")
 (define-public python-cssutils
   (package
     (name "python-cssutils")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "cssutils" version))
         (sha256
          (base32
-          "0qwha9x1wml2qmipbcz03gndnlwhzrjdvw9i09si247a90l8p8fq"))))
+          "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
     (build-system python-build-system)
     (native-inputs
-      `(("unzip" ,unzip))) ; for unpacking the source
+     `(("unzip" ,unzip)))               ; for unpacking the source
     (arguments
-     `(#:tests? #f))                    ;tests require python-pbr < 1.7.0
+     `(#:tests? #f))                    ; tests require python-pbr < 1.7.0
     (home-page "http://cthedot.de/cssutils/")
     (synopsis
       "CSS Cascading Style Sheets library for Python")
@@ -451,7 +453,8 @@ teams extension for python-openid.")
        ;;     (lambda _
        ;;       ;; 'setup.py test' hits an AssertionError on BSD-specific
        ;;       ;; "tornado/platform/kqueue.py". This is the supported method:
-       ;;       (zero? (system* "python" "-m" "tornado.test")))))
+       ;;       (invoke- "python" "-m" "tornado.test")
+       ;;       #t)))
        #:tests? #f))
     (native-inputs
      `(("python-certifi" ,python-certifi)))
@@ -522,7 +525,8 @@ web framework, either via the basic or digest authentication schemes.")
        (modify-phases %standard-phases
          (replace 'check
                   (lambda _
-                    (zero? (system* "nosetests")))))))
+                    (invoke "nosetests")
+                    #t)))))
     (home-page "https://github.com/takluyver/terminado")
     (synopsis "Terminals served to term.js using Tornado websockets")
     (description "This package provides a Tornado websocket backend for the
@@ -956,13 +960,13 @@ facilities for defining, registering and looking up components.")
 (define-public python-ndg-httpsclient
   (package
     (name "python-ndg-httpsclient")
-    (version "0.4.2")
+    (version "0.4.4")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "ndg_httpsclient" version))
               (sha256
                 (base32
-                  "1b5qirv46v4dpnmfqviwq42mdwfcby4dxmz0i41wad2337pqf2aq"))))
+                  "0sl5ak1r1xil9ms0a9fh9fm6ncml65kgnjpjfic9dhnaimwx997v"))))
     (build-system python-build-system)
     (arguments
      '(;; The tests appear to require networking.
@@ -1306,14 +1310,14 @@ file.")
 (define-public python-webtest
   (package
     (name "python-webtest")
-    (version "2.0.20")
+    (version "2.0.29")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "WebTest" version))
        (sha256
         (base32
-         "0bv0qhdjakdsdgj4sk21gnpp8xp8bga4x03p6gjb83ihrsb7n4xv"))))
+         "0bcj1ica5lnmj5zbvk46x28kgphcsgh7sfnwjmn0cr94mhawrg6v"))))
     (build-system python-build-system)
     (arguments
      `(;; Unfortunately we have to disable tests!
@@ -1519,7 +1523,8 @@ library.")
          (add-after 'install 'check
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
-             (zero? (system* "py.test" "src/geventhttpclient/tests" "-v")))))))
+             (invoke "py.test" "src/geventhttpclient/tests" "-v")
+             #t)))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (propagated-inputs
@@ -1629,7 +1634,8 @@ provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients."
              (setenv "PYTHONPATH"
                      (string-append (getcwd) "/build/lib:"
                                     (getenv "PYTHONPATH")))
-             (zero? (system* "py.test" "-vv")))))))
+             (invoke "py.test" "-vv")
+             #t)))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
        ("python-redis" ,python-redis)
@@ -1700,13 +1706,13 @@ Betamax.")
 (define-public python-s3transfer
   (package
     (name "python-s3transfer")
-    (version "0.1.11")
+    (version "0.1.13")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "s3transfer" version))
               (sha256
                (base32
-                "0yfrfnf404cxzn3iswibqjxklsl0b1lwgqiml6pwiqj79a7zbwbn"))))
+                "1harvyn1s8v54n1w5h7c0lg4bgjh68aylhg28s8n174q53h1ip4h"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1715,7 +1721,8 @@ Betamax.")
            (lambda _
              ;; 7 of the 'integration' tests require network access or login
              ;; credentials.
-             (zero? (system* "nosetests" "--exclude=integration")))))))
+             (invoke "nosetests" "--exclude=integration")
+             #t)))))
     (native-inputs
      `(("python-docutils" ,python-docutils)
        ("python-mock" ,python-mock)
@@ -1831,7 +1838,8 @@ transfers.")
        ;; (modify-phases %standard-phases
        ;;   (replace 'check
        ;;     (lambda _
-       ;;       (zero? (system* "nosetests")))))))
+       ;;       (invoke "nosetests")
+       ;;       #t)))))
     (propagated-inputs
       `(("python-aniso8601" ,python-aniso8601)
         ("python-flask" ,python-flask)
@@ -1877,16 +1885,16 @@ specs from your Flask-Restful projects.")
 (define-public python-htmlmin
   (package
     (name "python-htmlmin")
-    (version "0.1.10")
+    (version "0.1.12")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "htmlmin" version))
        (sha256
         (base32
-         "0qxa93j3p1ak32qh8d9kshqv8v3z0hkc13dwbhp5cn7sn3xmsp6a"))))
+         "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
     (arguments
-     `(#:tests? #f)) ;htmlmin has no tests
+     `(#:tests? #f))                    ; no tests
     (build-system python-build-system)
     (home-page "https://htmlmin.readthedocs.org/en/latest/")
     (synopsis "HTML minifier")
@@ -2081,14 +2089,14 @@ this it tries to be opinion-free and very extendable.")
 (define-public python-flask-script
   (package
   (name "python-flask-script")
-  (version "2.0.5")
+  (version "2.0.6")
   (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "Flask-Script" version))
       (sha256
         (base32
-          "0zqh2yq8zk7m9b4xw1ryqmrljkdigfb3hk5155a3b5hkfnn6xxyf"))))
+          "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
   (build-system python-build-system)
   (propagated-inputs
    `(("python-flask" ,python-flask)
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index ce56e72847..a0f1f1deab 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2014, 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Omar Radwan <toxemicsquire4@gmail.com>
 ;;; Copyright © 2015 Pierre-Antoine Rault <par@rigelk.eu>
-;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
@@ -9352,21 +9352,29 @@ etc.")
 (define-public python-stem
   (package
     (name "python-stem")
-    (version "1.5.4")
+    (version "1.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "stem" version))
        (sha256
         (base32
-         "1j7pnblrn0yr6jmxvsq6y0ihmxmj5x50jl2n2606w67f6wq16j9n"))))
+         "1va9p3ij7lxg6ixfsvaql06dn11l3fgpxmss1dhlvafm7sqizznp"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
+         (add-before 'check 'fix-test-environment
+           (lambda _
+             ;; Fixes: FileNotFoundError: [Errno 2] No such file or directory:
+             ;; '/tmp/guix-build-python-stem-1.6.0.drv-0/stem-1.6.0/.gitignore'.
+             (with-output-to-file ".gitignore"
+               (lambda _ (format #t "%")))
+             #t))
          (replace 'check
            (lambda _
-             (zero? (system* "./run_tests.py" "--unit")))))))
+             (invoke "./run_tests.py" "--unit")
+             #t)))))
     (native-inputs
      `(("python-mock" ,python-mock)
        ("python-pep8" ,python-pep8)
@@ -10165,14 +10173,14 @@ network.")
 (define-public python-xopen
   (package
     (name "python-xopen")
-    (version "0.1.1")
+    (version "0.3.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "xopen" version))
         (sha256
           (base32
-           "1wx6mylzcsyhjl19ycb83qq6iqpmr927lz62njfsar6ldsj0qcni"))
+           "0bzjmn3rl1cd3d2q39cjwnkhaspk2b0hfj3rl64pclm44ihg5fb6"))
         (file-name (string-append name "-" version ".tar.gz"))))
     (build-system python-build-system)
     (home-page "https://github.com/marcelm/xopen/")
@@ -12717,7 +12725,6 @@ functions by partial application of operators.")
              (invoke "py.test"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
-       ("python-pytest-warnings" ,python-pytest-warnings)
        ("python-whatever" ,python-whatever)))
     (home-page "http://github.com/Suor/funcy")
     (synopsis "Functional tools")
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 4c4249bb90..a8c2729ee8 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -1735,7 +1735,7 @@ contain over 620 classes.")
                  (string-append out "/lib/qt$${QT_MAJOR_VERSION}")))
                (invoke "qmake")))))))
     (native-inputs `(("qtbase" ,qtbase)))
-    (home-page "http://www.riverbankcomputing.co.uk/software/qscintilla/intro")
+    (home-page "https://www.riverbankcomputing.co.uk/software/qscintilla/intro")
     (synopsis "Qt port of the Scintilla C++ editor control")
     (description "QScintilla is a port to Qt of Neil Hodgson's Scintilla C++
 editor control.  QScintilla includes features especially useful when editing
diff --git a/gnu/packages/regex.scm b/gnu/packages/regex.scm
index e6fcfe304c..1294149609 100644
--- a/gnu/packages/regex.scm
+++ b/gnu/packages/regex.scm
@@ -29,7 +29,7 @@
 (define-public re2
    (package
      (name "re2")
-     (version "2018-02-01")
+     (version "2018-03-01")
      (source (origin
                (method url-fetch)
                (uri
@@ -39,7 +39,7 @@
                (file-name (string-append name "-" version ".tar.gz"))
                (sha256
                 (base32
-                 "1131hwgid76la15hh2g15gj20fzz8iq3krniwks6wxn9h4q87ay8"))))
+                 "0y21g321a802xmxdbkfz0rkcark7ypglpb3jjqhf13m6s7lpxp2i"))))
      (build-system gnu-build-system)
      (arguments
       `(#:modules ((guix build gnu-build-system)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index b15e1a2717..ee5d20955c 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -36,6 +36,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages java)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages python)
   #:use-module (gnu packages ragel)
   #:use-module (gnu packages tls)
@@ -280,6 +281,62 @@ an extensible architecture with a swappable backend.")
     (home-page "https://github.com/svenfuchs/i18n")
     (license license:expat)))
 
+(define-public ruby-iruby
+  (package
+    (name "ruby-iruby")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "iruby" version))
+       (sha256
+        (base32
+         "1wdf2c0x8y6cya0n3y0p3p7b1sxkb2fdavdn2k58rf4rs37s7rzn"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; TODO: Tests currently fail.
+     ;;
+     ;; Finished in 1.764405s, 1.1335 runs/s, 5.1009 assertions/s.
+     ;;
+     ;;   1) Failure:
+     ;; IntegrationTest#test_interaction [/tmp/guix-build-ruby-iruby-0.3.drv-0/gem/test/integration_test.rb:25]:
+     ;; In [ expected
+     ;;
+     ;; 2 runs, 9 assertions, 1 failures, 0 errors, 0 skips
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-ipython
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "lib/iruby/command.rb"
+               (("version = `")
+                (string-append
+                 "version = `"
+                 (assoc-ref inputs "python-ipython")
+                 "/bin/"))
+               (("Kernel\\.exec\\('")
+                (string-append
+                 "Kernel.exec('"
+                 (assoc-ref inputs "python-ipython")
+                 "/bin/")))
+             #t)))))
+    (inputs
+     `(("python-ipython" ,python-ipython)))
+    (propagated-inputs
+     `(("ruby-bond" ,ruby-bond)
+       ("ruby-data_uri" ,ruby-data_uri)
+       ("ruby-mimemagic" ,ruby-mimemagic)
+       ("ruby-multi-json" ,ruby-multi-json)
+       ("ruby-cztop" ,ruby-cztop)
+       ;; Optional inputs
+       ("ruby-pry" ,ruby-pry)))
+    (synopsis "Ruby kernel for Jupyter/IPython")
+    (description
+     "This package provides a Ruby kernel for Jupyter/IPython frontends (e.g.
+notebook).")
+    (home-page "https://github.com/SciRuby/iruby")
+    (license license:expat)))
+
 ;; RSpec is the dominant testing library for Ruby projects.  Even RSpec's
 ;; dependencies use RSpec for their test suites!  To avoid these circular
 ;; dependencies, we disable tests for all of the RSpec-related packages.
@@ -635,6 +692,84 @@ format.")
     (home-page "https://github.com/nicksieger/ci_reporter")
     (license license:expat)))
 
+(define-public ruby-czmq-ffi-gen
+  (package
+    (name "ruby-czmq-ffi-gen")
+    (version "0.13.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "czmq-ffi-gen" version))
+       (sha256
+        (base32
+         "1yf719dmf4mwks1hqdsy6i5kzfvlsha69sfnhb2fr2cgk2snbys3"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:tests? #f ;; Tests are not included in the release on rubygems.org
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-lib_dirs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "lib/czmq-ffi-gen/czmq/ffi.rb"
+               (("lib\\_dirs = \\[.*\\]")
+                (string-append "lib_dirs = ['"
+                               (assoc-ref inputs "czmq") "/lib"
+                               "']")))
+             (substitute* "lib/czmq-ffi-gen/libzmq.rb"
+               (("lib\\_dirs = \\[.*\\]")
+                (string-append "lib_dirs = ['"
+                               (assoc-ref inputs "zeromq") "/lib"
+                               "']"))))))))
+    (inputs
+     `(("zeromq" ,zeromq)
+       ("czmq" ,czmq)))
+    (propagated-inputs `(("ruby-ffi" ,ruby-ffi)))
+    (synopsis "Low-level Ruby bindings for CZMQ (generated using zproject)")
+    (description
+     "These Ruby bindings are not intended to be directly used, but rather
+used by higher level bindings like those provided by CZTop.")
+    (home-page
+     "https://github.com/paddor/czmq-ffi-gen")
+    (license license:isc)))
+
+(define-public ruby-cztop
+  (package
+    (name "ruby-cztop")
+    (version "0.12.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "cztop" version))
+       (sha256
+        (base32
+         "0yqbpaiw5d7f271d73lyrsh8xpx6n4zi6xqwfgi00dacxrq3s3fa"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:test-target "spec"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-lib_paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "lib/cztop/poller/zmq.rb"
+               (("lib\\_paths = \\[.*\\]")
+                (string-append "lib_paths = ['"
+                               (assoc-ref inputs "zeromq") "/lib"
+                               "']"))))))))
+    (native-inputs
+     `(("bundler" ,bundler)
+       ("ruby-rspec" ,ruby-rspec)))
+    (inputs
+     `(("zeromq" ,zeromq)))
+    (propagated-inputs
+     `(("ruby-czmq-ffi-gen" ,ruby-czmq-ffi-gen)))
+    (synopsis "CZMQ Ruby bindings")
+    (description
+     "CZMQ Ruby bindings, based on the generated low-level FFI bindings of
+CZMQ.  The focus of of CZTop is on being easy to use and providing first class
+support for security mechanisms.")
+    (home-page "https://github.com/paddor/cztop")
+    (license license:isc)))
+
 (define-public ruby-saikuro-treemap
   (package
     (name "ruby-saikuro-treemap")
@@ -1094,6 +1229,30 @@ features.")
     (home-page "https://github.com/chneukirchen/bacon")
     (license license:expat)))
 
+(define-public ruby-bacon-bits
+  (package
+    (name "ruby-bacon-bits")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bacon-bits" version))
+       (sha256
+        (base32
+         "1ghpj8ja94lhi8rgi872hqk4fd2amz2k7g9znd64z5dj7v6l0dmx"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; No tests
+     '(#:tests? #f))
+    (propagated-inputs `(("ruby-bacon" ,ruby-bacon)))
+    (synopsis "Extensions to Bacon, for disabling tests, before and after
+blocks and more")
+    (description
+     "This extends the bacon testing framework with useful extensions to
+disable tests, have before and after blocks that run once and more.")
+    (home-page "https://github.com/cldwalker/bacon-bits")
+    (license license:expat)))
+
 (define-public ruby-connection-pool
   (package
     (name "ruby-connection-pool")
@@ -1337,6 +1496,34 @@ as a base class when writing classes that depend upon
     (home-page "https://github.com/masover/blankslate")
     (license license:expat)))
 
+(define-public ruby-bond
+  (package
+    (name "ruby-bond")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "bond" version))
+       (sha256
+        (base32
+         "1r19ifc4skyl2gxnifrxa5jvbbay9fb2in79ppgv02b6n4bhsw90"))))
+    (build-system ruby-build-system)
+    (native-inputs
+     `(("ruby-bacon" ,ruby-bacon)
+       ("ruby-bacon-bits" ,ruby-bacon-bits)
+       ("ruby-mocha-on-bacon" ,ruby-mocha-on-bacon)))
+    (synopsis "Bond can provide custom autocompletion for arguments, methods
+and more")
+    (description
+     "Bond can autocomplete argument(s) to methods, uniquely completing per
+module, per method and per argument.  Bond provides a configuration system and
+a DSL for creating custom completions and completion rules.  Bond can also
+load completions that ship with gems.  Bond is able to offer more than irb's
+completion since it uses the full line of input when completing as opposed to
+irb's last-word approach.")
+    (home-page "http://tagaholic.me/bond/")
+    (license license:expat)))
+
 (define-public ruby-instantiator
   (package
     (name "ruby-instantiator")
@@ -1502,6 +1689,30 @@ allows mocking and stubbing of methods on real (non-mock) classes.")
     (home-page "http://gofreerange.com/mocha/docs")
     (license license:expat)))
 
+(define-public ruby-mocha-on-bacon
+  (package
+    (name "ruby-mocha-on-bacon")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mocha-on-bacon" version))
+       (sha256
+        (base32
+         "1h49b33rq889hn8x3wp9byczl91va16jh1w4d2wyy4yj23icdrcp"))))
+    (build-system ruby-build-system)
+    (arguments
+     ;; rubygems.org release missing tests
+     '(#:tests? #f))
+    (propagated-inputs `(("ruby-mocha" ,ruby-mocha)))
+    (synopsis "Mocha adapter for Bacon")
+    (description
+     "This package provides a Mocha adapter for Bacon, allowing you to use the
+Mocha stubbing and mocking library with Bacon, a small RSpec clone.")
+    (home-page
+     "https://github.com/alloy/mocha-on-bacon")
+    (license license:expat)))
+
 (define-public ruby-net-ssh
   (package
     (name "ruby-net-ssh")
@@ -1810,6 +2021,26 @@ run as a daemon and to be controlled by simple start/stop/restart commands.")
     (home-page "https://github.com/thuehlinger/daemons")
     (license license:expat)))
 
+(define-public ruby-data_uri
+  (package
+    (name "ruby-data_uri")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "data_uri" version))
+       (sha256
+        (base32
+         "0fzkxgdxrlbfl4537y3n9mjxbm28kir639gcw3x47ffchwsgdcky"))))
+    (build-system ruby-build-system)
+    (synopsis "URI class for parsing data URIs")
+    (description
+     "Data @acronym{URI, universal resource idenfitier}s allow resources to be
+embedded inside a URI.  The URI::Data class provides support for parsing these
+URIs using the normal URI.parse method.")
+    (home-page "https://github.com/dball/data_uri")
+    (license license:expat)))
+
 (define-public ruby-git
   (package
     (name "ruby-git")
@@ -3328,6 +3559,33 @@ that TURN is no longer being maintained.")
     (home-page "http://rubygems.org/gems/turn")
     (license license:expat)))
 
+(define-public ruby-mimemagic
+  (package
+    (name "ruby-mimemagic")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (rubygems-uri "mimemagic" version))
+       (sha256
+        (base32
+         "00ibc1mhvdfyfyl103xwb45621nwyqxf124cni5hyfhag0fn1c3q"))))
+    (build-system ruby-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; This phase breaks the tests, as it patches some of the test data.
+         (delete 'patch-source-shebangs))))
+    (native-inputs
+     `(("ruby-bacon" ,ruby-bacon)))
+    (synopsis "Ruby library for MIME detection by extension or content")
+    (description
+     "@acronym{MIME, Multipurpose Internet Mail Extensions} detection by
+extension or content, using the freedesktop.org.xml shared-mime-info
+database.")
+    (home-page "https://github.com/minad/mimemagic")
+    (license license:expat)))
+
 (define-public ruby-mime-types-data
   (package
     (name "ruby-mime-types-data")
diff --git a/gnu/packages/sdcc.scm b/gnu/packages/sdcc.scm
index 331425d98f..6d05470101 100644
--- a/gnu/packages/sdcc.scm
+++ b/gnu/packages/sdcc.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,7 +31,7 @@
 (define-public sdcc
   (package
     (name "sdcc")
-    (version "3.6.0")
+    (version "3.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -38,7 +39,7 @@
                     "/" version "/sdcc-src-" version ".tar.bz2"))
               (sha256
                (base32
-                "0x53gh5yrrfjvlnkk29mjn8hq4v52alrsf7c8nsyzzq13sqwwpg8"))))
+                "13llvx0j3v5qa7qd4fh7nix4j3alpd3ccprxvx163c4q8q4lfkc5"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
@@ -59,10 +60,10 @@
              #t)))))
     (home-page "http://sdcc.sourceforge.net")
     (synopsis "Small devices C compiler")
-    (description "SDCC is a retargettable, optimizing Standard C compiler suite
-that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, ...),
+    (description "SDCC is a retargetable, optimizing Standard C compiler suite
+that targets the Intel MCS51-based microprocessors (8031, 8032, 8051, 8052, ...),
 Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola)
-HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit
+HC08-based (hc08, s08), Zilog Z80-based MCUs (z80, z180, gbz80, Rabbit
 2000/3000, Rabbit 3000A, TLCS-90) and STMicroelectronics STM8.
 Work is in progress on supporting the Microchip PIC16 and PIC18 targets.
 It can be retargeted for other microprocessors.")
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index c56e5d94c8..222fd5b6f1 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -99,7 +99,7 @@ joystick, and graphics hardware.")
 (define-public sdl2
   (package (inherit sdl)
     (name "sdl2")
-    (version "2.0.7")
+    (version "2.0.8")
     (source (origin
              (method url-fetch)
              (uri
@@ -107,7 +107,7 @@ joystick, and graphics hardware.")
                              version ".tar.gz"))
              (sha256
               (base32
-               "0pjdpxla5kh1w1b0shxrx97a116vyy31njxi0jhyvqhk8d6cfdgf"))))
+               "1v4js1gkr75hzbxzhwzzif0sf9g07234sd23x1vdaqc661bprizd"))))
     (arguments
      (substitute-keyword-arguments (package-arguments sdl)
        ((#:configure-flags flags)
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 1479d1bbbb..a719819927 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -137,7 +137,7 @@ rich set of boolean query operators.")
                                              "-Wl,-rpath=../src/.libs")))
                             (zero? (system* "make"))
                             (zero? (system* "./libtocctests")))))))))
-    (home-page "http://t-o-c-c.com/")
+    (home-page "https://t-o-c-c.com/")
     (synopsis "Tool for Obsessive Compulsive Classifiers")
     (description
      "libtocc is the engine of the Tocc project, a tag-based file management
@@ -161,7 +161,7 @@ files and directories.")
                   (add-after
                    'unpack 'chdir-source
                    (lambda _ (chdir "cli/src"))))))
-    (home-page "http://t-o-c-c.com/")
+    (home-page "https://t-o-c-c.com/")
     (synopsis "Command-line interface to libtocc")
     (description
      "Tocc is a tag-based file management system.  This package contains the
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index c1012a635b..8ebdce1376 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -32,11 +32,13 @@
   #:use-module (guix hg-download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system r)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cran)
@@ -318,14 +320,14 @@ D.V. Hinkley (1997, CUP), originally written by Angelo Canty for S.")
 (define-public r-mass
   (package
     (name "r-mass")
-    (version "7.3-48")
+    (version "7.3-49")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "MASS" version))
        (sha256
         (base32
-         "02q95ba909p2gxnzfp295ipxjnv14f7bm55nicxwn2kj8hizpzqd"))))
+         "1yjbnj1p4z0vw84wga8q5fyqiw4n6r7pc6rdwam7vsbiamyzfcqs"))))
     (properties `((upstream-name . "MASS")))
     (build-system r-build-system)
     (home-page "http://www.stats.ox.ac.uk/pub/MASS4/")
@@ -554,14 +556,14 @@ single hidden layer, and for multinomial log-linear models.")
 (define-public r-rpart
   (package
     (name "r-rpart")
-    (version "4.1-12")
+    (version "4.1-13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "rpart" version))
        (sha256
         (base32
-         "177p03w4m0qshb3sqkdyixim3f44g2an31v3vlbjmpzjvd5ff6yq"))))
+         "0k29qx3k3pj5sgrpg0p47yd8i811rmdakaw57bigpq1449asc4cf"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/rpart")
     (synopsis "Recursive partitioning and regression trees")
@@ -1098,20 +1100,21 @@ agnes cluster diagrams.")
 (define-public r-gdtools
   (package
     (name "r-gdtools")
-    (version "0.1.6")
+    (version "0.1.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "gdtools" version))
        (sha256
         (base32
-         "103wnc8sq0iwcnj4j14hd420d2dqdyf13s3f25icsznrlyzdkhf5"))))
+         "122k9spymawfnfyksxyapwq9cigydy5nrjwhrwrhy3qkax3aycf6"))))
     (build-system r-build-system)
     (native-inputs
      `(("r-rcpp" ,r-rcpp)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("cairo" ,cairo)))
+     `(("cairo" ,cairo)
+       ("zlib" ,zlib)))
     (propagated-inputs
      `(("r-withr" ,r-withr)))
     (home-page "https://cran.r-project.org/web/packages/gdtools")
@@ -1187,13 +1190,13 @@ evaluation (NSE) in R.")
 (define-public r-dbi
   (package
     (name "r-dbi")
-    (version "0.7")
+    (version "0.8")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "DBI" version))
               (sha256
                (base32
-                "04fyrxdpqcygg5wviy637y6lgk64xqjjq31lvv4hwqj5kbaxamr5"))))
+                "16nf8flxr5vdz8yrpprfbzydy3ajixkp9hc8ibd9n7r9nc29waym"))))
     (build-system r-build-system)
     (home-page "https://github.com/rstats-db/DBI")
     (synopsis "R database interface")
@@ -1330,13 +1333,13 @@ syntax that can be converted to XHTML or other formats.")
 (define-public r-yaml
   (package
     (name "r-yaml")
-    (version "2.1.16")
+    (version "2.1.17")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "yaml" version))
               (sha256
                (base32
-                "1xlsmqal607w6c9rx86061y1fwpbyd5lqp9bad5n7cc9a0blpnkm"))))
+                "10y6wnv2v8k396far29haqv2s82p4zm04rrsxk183wg19gb51was"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/yaml/")
     (synopsis "Methods to convert R data to YAML and back")
@@ -2481,13 +2484,13 @@ well as additional utilities such as panel and axis annotation functions.")
 (define-public r-rcpparmadillo
   (package
     (name "r-rcpparmadillo")
-    (version "0.8.300.1.0")
+    (version "0.8.400.0.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RcppArmadillo" version))
               (sha256
                (base32
-                "0p6cbnwxgzigf7n5qhqvxdr3nd3pq3c2qq6pskqz7avzf813fy83"))))
+                "11y2ksf46zw6fcz0kk70szyfn7qqxwwd33xylrxvnyb7ldmbc5yr"))))
     (properties `((upstream-name . "RcppArmadillo")))
     (build-system r-build-system)
     (native-inputs
@@ -2575,14 +2578,14 @@ certain criterion, e.g., it contains a certain regular file.")
 (define-public r-rmarkdown
   (package
     (name "r-rmarkdown")
-    (version "1.8")
+    (version "1.9")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "rmarkdown" version))
         (sha256
           (base32
-            "0q1y1qx87xp6vf9h7mfl77rqhmd01xl53l9ap9qj99bfvpabb572"))))
+            "0wq6kbhrkv3fhcy4hg5yyv9gdvf8gr4nsjwdifs4ih8lnn0dmdyb"))))
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2811,6 +2814,19 @@ plotted and compared with the asymptotic curve.")
                 "0vql32np716dpd0kjn7s7wgawd02ysgp2a5il4kb19nlw661ii3x"))))
     (properties `((upstream-name . "lambda.r")))
     (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'check 'delete-test-log
+           ;; The test report contains time stamps and is not important for
+           ;; the installed package.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (delete-file-recursively
+              (string-append (assoc-ref outputs "out")
+                             "/site-library/lambda.r/unitTests"))
+             #t)))))
+    (native-inputs
+     `(("r-runit" ,r-runit)))
     (home-page "https://cran.r-project.org/web/packages/lambda.r")
     (synopsis "Functional programming extension for R")
     (description
@@ -3577,14 +3593,14 @@ the 'lite' version of the more complete @code{viridis} package.")
 (define-public r-tidyselect
   (package
     (name "r-tidyselect")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidyselect" version))
        (sha256
         (base32
-         "0b0w30yq30c7bwpaghp3hp0nncqwcmvrra9j58fhx9jihay3l68c"))))
+         "1592dbzawhd1hpsp9919l4sifyiaaj6xr7lnhsbwa6jwmmb0xcsw"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-glue" ,r-glue)
@@ -4039,6 +4055,14 @@ Zurich, including many that are related to graphics.")
         (base32
          "1xknwk9xlsj027pg0nwiizigcrsc84hdrig0jn0cgcyxj8dabdl6"))))
     (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'make-deterministic
+           (lambda _
+             (substitute* "R/checkReverseDependencies.R"
+               (("tempdir\\(\\)") "\"/tmp\""))
+             #t)))))
     (home-page "https://cran.r-project.org/web/packages/gtools")
     (synopsis "Various R programming tools")
     (description
@@ -5356,14 +5380,14 @@ is supported.")
 (define-public r-lubridate
   (package
     (name "r-lubridate")
-    (version "1.7.2")
+    (version "1.7.3")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "lubridate" version))
        (sha256
         (base32
-         "0k417a1xp5gxf77ycbnx5apzpc5d25sjm83ss7wmqpbnhnr5dcav"))))
+         "1pzkqfiahnsdm3zx46asgn8fw43vlxvbh7r4cn70c7ffmxabzzrc"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-rcpp" ,r-rcpp)
@@ -5539,3 +5563,40 @@ inferring an appropriate positioning method.")
       (description "Did you ever wish you could make scatter plots with cat
 shaped points?  Now you can!")
       (license license:asl2.0))))
+
+(define-public java-jdistlib
+  (package
+    (name "java-jdistlib")
+    (version "0.4.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/jdistlib/jdistlib-"
+                                  version "-src.jar"))
+              (sha256
+               (base32
+                "1pkj8aahw9ydr1isbaqrkd05nvq98ik5jwwhf3yf3rky3z869v11"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "jdistlib.jar"
+       #:jdk ,icedtea-8
+       #:tests? #f ; no dedicated test directory
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-broken-encoding
+           (lambda _
+             (with-fluids ((%default-port-encoding "ISO-8859-1"))
+               (substitute* "src/jdistlib/Beta.java"
+                 (("Scheff.+-Tukey") "Scheffe-Tukey")))
+             #t)))))
+    (propagated-inputs
+     `(("java-jtransforms" ,java-jtransforms)))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://jdistlib.sourceforge.net/")
+    (synopsis "Java library of statistical distributions")
+    (description "JDistlib is the Java Statistical Distribution Library, a
+Java package that provides routines for various statistical distributions.")
+    ;; The files that were translated from R code are under GPLv2+; some files
+    ;; are under the GPLv3, which is a mistake.  The author confirmed in an
+    ;; email that this whole project should be under GPLv2+.
+    (license license:gpl2+)))
diff --git a/gnu/packages/storage.scm b/gnu/packages/storage.scm
index bee349f6f6..54d91c1f3c 100644
--- a/gnu/packages/storage.scm
+++ b/gnu/packages/storage.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -29,6 +29,7 @@
   #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages cryptsetup)
@@ -36,6 +37,7 @@
   #:use-module (gnu packages databases)
   #:use-module (gnu packages disk)
   #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages gperf)
   #:use-module (gnu packages jemalloc)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
@@ -50,18 +52,18 @@
 (define-public ceph
   (package
     (name "ceph")
-    (version "12.0.2")
+    (version "12.2.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.ceph.com/tarballs/ceph-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0l9v072ba28i984y5rwny9i11nmpyx5bl7awxg48plyadm2l3g14"))
+                "13hv8scaxc1gdvrhzbfnsk4yy3pla6n1i4j4j4zf7schmbf0j8mp"))
               (patches
                (search-patches "ceph-skip-unittest_blockdev.patch"
                                "ceph-skip-collect-sys-info-test.patch"
-                               "ceph-disable-unittest-throttle.patch"
+                               "ceph-rocksdb-compat.patch"
                                "ceph-disable-cpu-optimizations.patch"))
               (modules '((guix build utils)))
               (snippet
@@ -74,7 +76,6 @@
                               ;"src/xxHash"
                               ;"src/zstd"
                               ;"src/civetweb"
-                              ;"src/Beast"
                               "src/test/downloads"
                               "src/dpdk"
                               "src/spdk"
@@ -105,6 +106,7 @@
                "-DWITH_SYSTEM_BOOST=ON"
                "-DWITH_PYTHON3=ON"
                ;; TODO: Enable these when available in Guix.
+               "-DWITH_BABELTRACE=OFF"
                "-DWITH_LTTNG=OFF"
                "-DWITH_XFS=OFF"
                "-DWITH_XIO=OFF"
@@ -114,6 +116,7 @@
        ;; <https://bugs.gnu.org/29674> for details. Disable tests until
        ;; resolved.
        #:tests? #f
+       #:cmake ,cmake-3.11
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-source
@@ -152,21 +155,17 @@
 
                (substitute* "src/test/test_subprocess.cc"
                  (("/bin/sh") (which "sh")))
-               (substitute* "src/test/ceph_objectstore_tool.py"
+               (substitute* "qa/standalone/special/ceph_objectstore_tool.py"
                  (("/bin/rm") (which "rm")))
                (substitute* "src/ceph-disk/ceph_disk/main.py"
                  (("/bin/mount") "mount")
                  (("/bin/umount") "umount")
                  (("/sbin/blkid") (which "blkid"))
+                 (("'cryptsetup'") (string-append "'" (which "cryptsetup") "'"))
                  (("'sgdisk'") (string-append "'" (which "sgdisk") "'"))
                  (("'parted'") (string-append "'" (which "parted") "'"))
                  (("'udevadm'") (string-append "'" (which "udevadm") "'")))
 
-               (substitute* "src/ceph-disk-udev"
-                 (("/sbin/cryptsetup") (which "cryptsetup"))
-                 (("/usr/sbin/sgdisk") (which "sgdisk"))
-                 (("/usr/sbin/ceph-disk")
-                  (string-append out "/bin/ceph-disk")))
                (substitute* "udev/50-rbd.rules"
                  (("/usr/bin/ceph-rbdnamer")
                   (string-append out "/bin/ceph-rbdnamer")))
@@ -263,23 +262,31 @@
                                       (getenv "PYTHONPATH")))
                #t)))
          (add-after 'install 'wrap-python-scripts
-           (lambda* (#:key outputs #:allow-other-keys)
+           (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
+                    (ceph (string-append out "/bin/ceph"))
                     (ceph-disk (string-append out "/bin/ceph-disk"))
                     (ceph-detect-init (string-append
                                        out "/bin/ceph-detect-init"))
-                    (PYTHONPATH (string-append
-                                 out "/lib/python2.7/site-packages")))
 
+                    (prettytable (assoc-ref inputs "python2-prettytable"))
+
+                    (sitedir (lambda (package)
+                               (string-append package
+                                              "/lib/python2.7/site-packages")))
+                    (PYTHONPATH (string-append
+                                 (sitedir out) ":"
+                                 (sitedir prettytable))))
                (for-each (lambda (executable)
                            (wrap-program executable
                              `("PYTHONPATH" ":" prefix (,PYTHONPATH))))
-                         (list ceph-disk ceph-detect-init))
+                         (list ceph ceph-disk ceph-detect-init))
                #t))))))
     (outputs
      '("out" "lib"))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("gperf" ,gperf)
+       ("pkg-config" ,pkg-config)
        ("python-cython" ,python-cython)
        ("python-sphinx" ,python-sphinx)
        ("yasm" ,yasm)
@@ -310,7 +317,7 @@
        ("python2-testtools" ,python2-testtools)
        ("python2-tox" ,python2-tox)))
     (inputs
-     `(("boost" ,boost)
+     `(("boost" ,boost-1.66)
        ("curl" ,curl)
        ("cryptsetup" ,cryptsetup)
        ("expat" ,expat)
@@ -329,6 +336,7 @@
        ("nss" ,nss)
        ("parted" ,parted)
        ("python@2" ,python-2)
+       ("python2-prettytable" ,python2-prettytable)      ;used by ceph_daemon.py
        ("python@3" ,python-3)
        ("rocksdb" ,rocksdb)
        ("snappy" ,snappy)
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index 8a5f158878..c343b42274 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -564,7 +564,7 @@ environment variable.")
 (define-public fortify-headers
   (package
     (name "fortify-headers")
-    (version "0.8")
+    (version "0.9")
     (source
      (origin
        (method url-fetch)
@@ -572,7 +572,7 @@ environment variable.")
                            name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1cacdczpjb49c4i1168g541wnl3i3gbpv2m2wbnmw5wddlyhgkdg"))))
+         "1z517ajy34l2k5lz2gvhbmia9xjgagffi4s22azqxnlmgb1g2xfg"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; No tests
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index f5e5bb85be..6c3792b92f 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -28,7 +28,7 @@
 (define-public syncthing
   (package
     (name "syncthing")
-    (version "0.14.44")
+    (version "0.14.45")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/syncthing/syncthing"
@@ -36,7 +36,7 @@
                                   "/syncthing-source-v" version ".tar.gz"))
               (sha256
                (base32
-                "0fxq52w1b05928xp0a333rg23fabj0nykgg7v4gz01f3vrxyydi1"))
+                "0nv5g9ymykl4316l2g3mnac77y2rx9ps4j2kg3pymxlq6qms2dij"))
               (modules '((guix build utils)))
               ;; Delete bundled ("vendored") free software source code.
               (snippet
@@ -110,8 +110,6 @@
     (inputs
      `(("go-github-com-audriusbutkevicius-cli"
         ,go-github-com-audriusbutkevicius-cli)
-       ("go-github-com-xtaci-kcp-go"
-        ,go-github-com-xtaci-kcp-go)
        ("go-github-com-audriusbutkevicius-go-nat-pmp"
         ,go-github-com-audriusbutkevicius-go-nat-pmp)
        ("go-github-com-audriusbutkevicius-pfilter"
@@ -119,8 +117,6 @@
        ("go-github-com-bkaradzic-go-lz4" ,go-github-com-bkaradzic-go-lz4)
        ("go-github-com-calmh-du" ,go-github-com-calmh-du)
        ("go-github-com-calmh-xdr" ,go-github-com-calmh-xdr)
-       ("go-github-com-ccding-go-stun"
-        ,go-github-com-ccding-go-stun)
        ("go-github-com-prometheus-union" ,(go-github-com-prometheus-union))
        ("go-github-com-chmduquesne-rollinghash-adler32"
         ,go-github-com-chmduquesne-rollinghash-adler32)
@@ -137,12 +133,12 @@
        ("go-github-com-minio-sha256-simd" ,go-github-com-minio-sha256-simd)
        ("go-github-com-oschwald-geoip2-golang"
         ,go-github-com-oschwald-geoip2-golang)
+       ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
        ("go-github-com-rcrowley-go-metrics" ,go-github-com-rcrowley-go-metrics)
        ("go-github-com-sasha-s-go-deadlock" ,go-github-com-sasha-s-go-deadlock)
        ("go-github-com-syndtr-goleveldb" ,go-github-com-syndtr-goleveldb)
        ("go-github-com-thejerf-suture" ,go-github-com-thejerf-suture)
        ("go-github-com-vitrun-qart" ,(go-github-com-vitrun-qart-union))
-       ("go-github-com-xtaci-smux" ,go-github-com-xtaci-smux)
        ("go-golang-org-x-crypto" ,(go-golang-org-x-crypto-union))
        ("go-golang-org-x-net-union" ,(go-golang-org-x-net-union))
        ("go-golang-org-x-text" ,(go-golang-org-x-text-union))
@@ -1526,31 +1522,6 @@ virtual connections from a single physical connection.")
       (home-page "https://github.com/AudriusButkevicius/pfilter")
       (license expat))))
 
-(define-public go-github-com-ccding-go-stun
-  (let ((commit "d9bbe8f8fa7bf7ed03e6cfc6a2796bb36139e1f4")
-        (revision "1"))
-    (package
-      (name "go-github-com-ccding-go-stun")
-      (version (git-version "0.0.0" revision commit))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/ccding/go-stun.git")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "04a4q69cmw6snlx54wikyj1y6gk94qzm9xv9als17inmj8z60xv7"))))
-      (build-system go-build-system)
-      (arguments
-       '(#:import-path "github.com/ccding/go-stun"))
-      (synopsis "STUN client implementation")
-      (description "Go-stun is a go implementation of the STUN client (RFC 3489
-and RFC 5389).")
-      (home-page "https://github.com/ccding/go-stun")
-      (license asl2.0))))
-
 (define-public go-github-com-chmduquesne-rollinghash-adler32
   (let ((commit "3dc7875a1f890f9bcf0619adb5571fc6f7d516bb")
         (revision "1"))
@@ -1577,97 +1548,6 @@ rolling hash.")
       (home-page "https://github.com/chmduquesne/rollinghash")
       (license expat))))
 
-(define-public go-github-com-xtaci-kcp-go
-  (let ((commit "86eebd5cadb519b7c9306082c7eb3bcee2c49a7b")
-        (revision "0"))
-    (package
-      (name "go-github-com-xtaci-kcp-go")
-      (version (git-version "0.0.0" revision commit))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/xtaci/kcp-go")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "1mdfsya4y04nycfgsk9ghm67zpim5pw78si3f1566xgrv4ghl0ni"))))
-      (build-system go-build-system)
-      (propagated-inputs
-       `(("go-golang-org-x-net-ipv4" ,go-golang-org-x-net-ipv4)
-         ("go-github-com-klauspost-reedsolomon"
-          ,go-github-com-klauspost-reedsolomon)
-         ("go-github-com-tjfoc-gmsm-sm4" ,go-github-com-tjfoc-gmsm-sm4)
-         ("go-github-com-pkg-errors" ,go-github-com-pkg-errors)
-         ("go-golang-org-x-crypto" ,(go-golang-org-x-crypto-union))
-         ("go-github-com-templexxx-xor" ,go-github-com-templexxx-xor)))
-      (arguments
-       '(#:import-path "github.com/xtaci/kcp-go"
-         ;; XXX update comment
-         ;; 'TestListenerClose' is known to fail. It seems that the test suite
-         ;; is not being used upstream:
-         ;; https://github.com/AudriusButkevicius/kcp-go/pull/1
-         #:tests? #f))
-      (synopsis "Reliable UDP connections in Go")
-      (description "This package provides @code{kcp-go}, a reliable UDP library
-written in Go.  It offers fast, ordered and error-checked delivery of streams
-over UDP packets.")
-      (home-page "https://github.com/xtaci/kcp-go")
-      (license expat))))
-
-(define-public go-github-com-templexxx-xor
-  (package
-    (name "go-github-com-templexxx-xor")
-    (version "0.1.2")
-    (source
-      (origin
-        (method git-fetch)
-        (uri (git-reference
-               (url "https://github.com/templexxx/xor.git")
-               (commit version)))
-        (file-name (git-file-name name version))
-        (sha256
-         (base32
-          "0v1maiii0sggmxk9bgpy6pypb40j3hy2328pc4kd5bldkpdb67d5"))))
-    (build-system go-build-system)
-    (arguments
-     '(#:import-path "github.com/templexxx/xor"))
-    (propagated-inputs
-     `(("go-github-com-templexxx-cpufeat" ,go-github-com-templexxx-cpufeat)))
-    (synopsis "XOR in Go")
-    (description "This packages provides a Go implementation of XOR.")
-    (home-page "https://github.com/templexxx/xor")
-    (license expat)))
-
-(define-public go-github-com-xtaci-smux
-  (let ((commit "c3e18246ff2252a6e9d6b529fcbf22ae5c74c007")
-        (revision "0"))
-    (package
-      (name "go-github-com-xtaci-smux")
-      (version (git-version "1.0.6" revision commit))
-      (source
-        (origin
-          (method git-fetch)
-          (uri (git-reference
-                 (url "https://github.com/xtaci/smux.git")
-                 (commit commit)))
-          (file-name (git-file-name name version))
-          (sha256
-           (base32
-            "1dfmxd9g31idldhq6n7r998gi4jw51ji3xvkjrzypsw2ypbjx1dz"))))
-      (build-system go-build-system)
-      (propagated-inputs
-       `(("go-github-com-pkg-errors" ,go-github-com-pkg-errors)))
-      (arguments
-       '(#:import-path "github.com/xtaci/smux"))
-      (synopsis "Network multiplexing in Go")
-      (description "Smux ( Simple MUltipleXing) is a multiplexing library for
-Golang.  It relies on an underlying connection to provide reliability and
-ordering, such as TCP or KCP, and provides stream-oriented multiplexing.")
-      (home-page "https://github.com/xtaci/smux")
-      (license expat))))
-
 (define-public go-github-com-pkg-errors
   (let ((commit "e881fd58d78e04cf6d0de1217f8707c8cc2249bc")
         (revision "1"))
@@ -1792,56 +1672,6 @@ using sh's word-splitting rules.")
       (home-page "https://github.com/kballard/go-shellquote")
       (license expat))))
 
-(define-public go-github-com-templexxx-cpufeat
-  (let ((commit "3794dfbfb04749f896b521032f69383f24c3687e")
-        (revision "0"))
-    (package
-      (name "go-github-com-templexxx-cpufeat")
-      (version (git-version "0.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/templexxx/cpufeat.git")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0b9f5p6nsiv907rz5d66qzgxnsz4k68r2f45vxi2hwdbnkjfxz8j"))))
-      (build-system go-build-system)
-      (arguments
-       '(#:import-path "github.com/templexxx/cpufeat"))
-      (synopsis "CPU feature identification for Go")
-      (description "This package provides @code{cpu}, which implements
-processor feature detection used by the Go standard libary.")
-      (home-page "https://github.com/templexxx/cpufeat")
-      (license bsd-3))))
-
-(define-public go-github-com-tjfoc-gmsm-sm4
-  (let ((commit "98aa888b79d8de04afe0fccf45ed10594efc858b")
-        (revision "1"))
-    (package
-      (name "go-github-com-tjfoc-gmsm-sm4")
-      (version (git-version "0.0.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                       (url "https://github.com/tjfoc/gmsm")
-                       (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1ii4imnz3ims2s23pdv0l4ijzxjsvl82h4yzgfqm5y809ph6pjq9"))))
-      (build-system go-build-system)
-      (arguments
-       '(#:import-path "github.com/tjfoc/gmsm/sm4"
-         #:unpack-path "github.com/tjfoc/gmsm"))
-      (synopsis "SM4 block cipher")
-      (description "This package provides a Go implementation of SM4, a block
-cipher used in the Chinese National Standard for Wireless LAN WAPI (Wired
-Authentication and Privacy Infrastructure).")
-      (home-page "https://github.com/tjfoc/gmsm")
-      (license asl2.0))))
-
 (define-public go-github-com-zillode-notify
   (let ((commit "a8abcfb1ce88ee8d79a300ed65d94b8fb616ddb3")
         (revision "2"))
@@ -1868,56 +1698,6 @@ notification library in Go.")
       (home-page "https://github.com/zillode/notify")
       (license expat))))
 
-(define-public go-github-com-klauspost-cpuid
-  (let ((commit "eae9b3e628d72774e13bdf024e78c0802f85a5b9")
-        (revision "0"))
-  (package
-    (name "go-github-com-klauspost-cpuid")
-    (version (git-version "1.1" revision commit))
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/klauspost/cpuid.git")
-                     (commit commit)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0dgxlsxdfhfapmz1qlvc919m3kcbmfqcfpxk78zl9am5zc3zr689"))))
-    (build-system go-build-system)
-    (arguments
-     '(#:import-path "github.com/klauspost/cpuid"))
-    (synopsis "CPU feature identification library")
-    (description "This package provides @code{cpuid}, a Go library that provides information about the CPU running the current program")
-    (home-page "https://github.com/klauspost/cpuid")
-    (license expat))))
-
-(define-public go-github-com-klauspost-reedsolomon
-  (let ((commit "0b30fa71cc8e4e9010c9aba6d0320e2e5b163b29")
-        (revision "0"))
-  (package
-    (name "go-github-com-klauspost-reedsolomon")
-    (version (git-version "1.6" revision commit))
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/klauspost/reedsolomon.git")
-                     (commit commit)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "04jvf65ybsa7w4d7s2n0s174p0q2fl0dqd5hhn2krw66z9i3rc6d"))))
-    (build-system go-build-system)
-    (arguments
-     '(#:import-path "github.com/klauspost/reedsolomon"))
-    (propagated-inputs
-     `(("go-github-com-klauspost-cpuid"
-        ,go-github-com-klauspost-cpuid)))
-    (synopsis "Reed-Solomon Erasure Coding in Go")
-    (description "This package provides and implemenation of Reed-Solomon
-Erasure Coding in Go.")
-    (home-page "https://github.com/klauspost/reedsolomon")
-    (license expat))))
-
 (define-public go-github-com-beorn7-perks-quantile
   (let ((commit "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9")
         (revision "0"))
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 4e8efc8faf..764f4fff15 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -3424,6 +3424,47 @@ TeX metrics (VF and TFM files) and macros for use with LaTeX.")
     ;; Any version of the GPL with font exception.
     (license license:gpl3+)))
 
+(define-public texlive-fonts-iwona
+  (package
+    (name "texlive-fonts-iwona")
+    (version "0.995b")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://jmn.pl/pliki/Iwona-tex-"
+                                  (string-map (lambda (c)
+                                                (if (char=? c #\.)
+                                                    #\_ c))
+                                              version)
+                                  ".zip"))
+              (sha256
+               (base32
+                "13684iqx5granpc5rfvqnmyvdpgpbr1x9y7i7y7bcaq0qxv7ph1x"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let ((target (string-append (assoc-ref %outputs "out")
+                                      "/share/texmf-dist/"))
+               (unzip  (string-append (assoc-ref %build-inputs "unzip")
+                                      "/bin/unzip")))
+           (system* unzip (assoc-ref %build-inputs "source"))
+           (mkdir-p target)
+           (copy-recursively "iwona" target)))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "http://jmn.pl/en/kurier-i-iwona/")
+    (synopsis "Sans-serif typeface for TeX")
+    (description "Iwona is a two-element sans-serif typeface. It was created
+as an alternative version of the Kurier typeface, which was designed in 1975
+for a diploma in typeface design at the Warsaw Academy of Fine Arts under the
+supervision of Roman Tomaszewski.  Kurier was designed for linotype
+typesetting of newspapers and similar periodicals. The Iwona fonts are an
+alternative version of the Kurier fonts.  The difference lies in the absence
+of ink traps which typify the Kurier font.")
+    (license license:gfl1.0)))
+
 (define-public texlive-latex-titlesec
   (package
     (name "texlive-latex-titlesec")
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index 1417bea4e5..d75ba7766e 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -508,10 +508,12 @@ in a portable way.")
          (add-after 'unpack 'delete-test
            ;; See comments about the license.
            (lambda _
-             (delete-file "src/tests/dbacl-jap.shin")))
+             (delete-file "src/tests/dbacl-jap.shin")
+             #t))
          (add-after 'delete-sample6-and-japanese 'autoreconf
            (lambda _
-             (zero? (system* "autoreconf" "-vif"))))
+             (invoke "autoreconf" "-vif")
+             #t))
          (add-after 'unpack 'fix-test-files
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -532,7 +534,7 @@ in a portable way.")
        ("autoconf" ,autoconf)
        ("automake" ,automake)
        ("pkg-config" ,pkg-config)))
-    (home-page "http://www.lbreyer.com/dbacl.html")
+    (home-page "https://www.lbreyer.com/dbacl.html")
     (synopsis "Bayesian text and email classifier")
     (description
      "dbacl is a fast Bayesian text and email classifier.  It builds a variety
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 4a39100511..2d685fc7d5 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -47,14 +47,14 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.3.2.9")
+    (version "0.3.2.10")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://dist.torproject.org/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "03qn55c969zynnx71r82iaqnadpzq0qclq0zmjhb3n4qma8pnnj3"))))
+               "1vnb2wkcmm8rnz0fqi3k7arl60mpycs8rjn8hvbgv56g3p1pgpv0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-gcc-hardening"
@@ -146,7 +146,8 @@ rejects UDP traffic from the application you're using.")
            (lambda _
              ;; Unfortunately, this is not a tarball produced by
              ;; "make dist".
-             (zero? (system* "autoreconf" "-vfi")))))
+             (invoke "autoreconf" "-vfi")
+             #t)))
        #:tests? #f))
     (inputs
      `(("w3m" ,w3m)
@@ -230,7 +231,9 @@ networks.")
            ;; After all the patching we run the tests after installing.
            ;; This is also a known issue:
            ;; https://github.com/micahflee/onionshare/issues/284
-           (lambda _ (zero? (system* "nosetests" "test")))))))
+           (lambda _
+             (invoke "nosetests" "test")
+             #t)))))
     (native-inputs
      `(("python-nose" ,python-nose)))
     (inputs
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 6c05ab59db..209df2bb12 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -928,7 +928,7 @@ also walk each side of a merge and test those changes individually.")
 (define-public gitolite
   (package
     (name "gitolite")
-    (version "3.6.6")
+    (version "3.6.7")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -937,7 +937,7 @@ also walk each side of a merge and test those changes individually.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "07q33f86694s0x3k9lcmy1vzfw9appdrlmmb9j3bz4qkrxqdnwb9"))))
+                "1idxipg0df80bhjcxgwxs3lllqnkvhwpinmfv1xvg1l98fxiapgp"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -958,7 +958,8 @@ also walk each side of a merge and test those changes individually.")
                         ;; This works because gitolite-shell is in the PATH.
                         (substitute* "src/triggers/post-compile/ssh-authkeys"
                           (("\\$glshell \\$user")
-                           "gitolite-shell $user")))))
+                           "gitolite-shell $user"))
+                        #t)))
                   (replace 'install
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((output (assoc-ref outputs "out"))
@@ -966,7 +967,7 @@ also walk each side of a merge and test those changes individually.")
                              (bindir (string-append output "/bin")))
                         (mkdir-p sharedir)
                         (mkdir-p bindir)
-                        (system* "./install" "-to" sharedir)
+                        (invoke "./install" "-to" sharedir)
                         ;; Create symlinks for executable scripts in /bin.
                         (for-each (lambda (script)
                                     (symlink (string-append sharedir "/" script)
@@ -1643,14 +1644,15 @@ repository\" with git-annex.")
        #:phases (modify-phases %standard-phases
                   (replace 'configure
                     (lambda* (#:key outputs (configure-flags '())
-                                    #:allow-other-keys)
+                              #:allow-other-keys)
                       ;; The 'configure' script is not an autoconf script and
                       ;; chokes on unrecognized options.
-                      (zero? (apply system*
-                                    "./configure"
-                                    (string-append "--prefix="
-                                                   (assoc-ref outputs "out"))
-                                    configure-flags))))
+                      (apply invoke
+                             "./configure"
+                             (string-append "--prefix="
+                                            (assoc-ref outputs "out"))
+                             configure-flags)
+                      #t))
                   (add-before 'check 'test-setup
                     (lambda _
                       (setenv "USER" "guix")
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 549380cda1..7d546d0b92 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1091,7 +1091,7 @@ projects while introducing many more.")
 (define-public gnome-mpv
   (package
     (name "gnome-mpv")
-    (version "0.13")
+    (version "0.14")
     (source
      (origin
        (method url-fetch)
@@ -1100,7 +1100,7 @@ projects while introducing many more.")
                            ".tar.xz"))
        (sha256
         (base32
-         "1w944ymyssgfcjiczrq4saig90crw9b9hhdsnchfbjsw173qi8n5"))))
+         "03kjwd5jq0i5ajnvhjwf5019bjjaa16xkdrhdkiz1k58ipjvvj93"))))
     (native-inputs
      `(("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index 952f12ce55..642ca1c044 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -241,7 +241,7 @@ and probably others.")
 (define-public openvpn
   (package
     (name "openvpn")
-    (version "2.4.4")
+    (version "2.4.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -249,7 +249,7 @@ and probably others.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "102an395nv8l7qfx3syydzhmd9xfbycd6gvwy0h2kjz8w67ipkcn"))))
+                "17njq59hsraqyxrbhkrxr7dvx0p066s3pn8w1mi0yd9jldis7h23"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-iproute2=yes")))
@@ -262,11 +262,12 @@ and probably others.")
        ("linux-pam" ,linux-pam)))
     (home-page "https://openvpn.net/")
     (synopsis "Virtual private network daemon")
-    (description "OpenVPN implements virtual private network (VPN) techniques
+    (description
+     "OpenVPN implements virtual private network (@dfn{VPN}) techniques
 for creating secure point-to-point or site-to-site connections in routed or
 bridged configurations and remote access facilities.  It uses a custom
 security protocol that utilizes SSL/TLS for key exchange.  It is capable of
-traversing network address translators (NATs) and firewalls.")
+traversing network address translators (@dfn{NAT}s) and firewalls.")
     (license license:gpl2)))
 
 (define-public tinc
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 04cebcff73..e90794b3c5 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -799,7 +799,7 @@ for efficient socket-like bidirectional reliable communication channels.")
 (define-public libpsl
   (package
     (name "libpsl")
-    (version "0.20.0")
+    (version "0.20.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rockdaboot/libpsl/"
@@ -807,7 +807,7 @@ for efficient socket-like bidirectional reliable communication channels.")
                                   "/libpsl-" version ".tar.gz"))
               (sha256
                (base32
-                "0rsjm6mb71nnj6ikr2dq5qmny314v3j7m07zz1i7m6v8hxxm98i7"))))
+                "17r18y25ka2ck2ykfidbg4a7jpyzmkqwrzplgqjp7mwd2l9rc6cm"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -2933,7 +2933,7 @@ algorithm specified in section 8.2.2.1 of the draft standard.")
 (define-public perl-io-socket-ip
   (package
     (name "perl-io-socket-ip")
-    (version "0.38")
+    (version "0.39")
     (source
      (origin
        (method url-fetch)
@@ -2941,7 +2941,7 @@ algorithm specified in section 8.2.2.1 of the draft standard.")
                            "IO-Socket-IP-" version ".tar.gz"))
        (sha256
         (base32
-         "0scsnahxwnymg80a3k0p0cnr574nk7x9inn9wjniz0iycicclyhb"))))
+         "15kv5g1yb4a345sk3r5wfr99f868lhfqkddzsgpqddvccfkhv58i"))))
     (build-system perl-build-system)
     (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/IO-Socket-IP")
@@ -3660,7 +3660,7 @@ library.")
 (define-public perl-www-mechanize
   (package
     (name "perl-www-mechanize")
-    (version "1.86")
+    (version "1.87")
     (source
      (origin
        (method url-fetch)
@@ -3668,7 +3668,7 @@ library.")
                            "WWW-Mechanize-" version ".tar.gz"))
        (sha256
         (base32
-         "0sfl6b7mx8nannnh3ys5jk44d1s1b2d1mffrnrphkzzykaw6hm0f"))))
+         "1kxrydhl7nxlyjv0xvyiyj4igdv4fwnggv0ihlp79bysbjjl54w1"))))
     (build-system perl-build-system)
     (native-inputs                      ;only for tests
      `(("perl-cgi" ,perl-cgi)
@@ -3783,13 +3783,13 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
 (define-public r-httpuv
   (package
     (name "r-httpuv")
-    (version "1.3.6")
+    (version "1.3.6.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "httpuv" version))
               (sha256
                (base32
-                "1nzbcw1dm4l5qc9156kz95rdb8bwnpdr57wfc87w8arv7m0i40bc"))))
+                "0h3hkw575b211bxma23inbq1565wkhiapgasd539h219apqs534f"))))
     (build-system r-build-system)
     (native-inputs `(("r-rcpp" ,r-rcpp)))
     (home-page "https://github.com/rstudio/httpuv")
@@ -6353,7 +6353,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
 (define-public nghttp2
   (package
     (name "nghttp2")
-    (version "1.30.0")
+    (version "1.31.0")
     (source
      (origin
        (method url-fetch)
@@ -6362,7 +6362,7 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "1b2j7il0wp8hi4jl3cah7fkshmg29cchdski9cw74gx5496gp6h8"))))
+         "1ivs74v9sa2sds3dq0s7vn9bkmhr2hgwyg1an1rah3agqwnkqmrn"))))
     (build-system gnu-build-system)
     (outputs (list "out"
                    "lib"))              ; only libnghttp2
diff --git a/gnu/packages/wv.scm b/gnu/packages/wv.scm
index 12201faa3a..866cfee222 100644
--- a/gnu/packages/wv.scm
+++ b/gnu/packages/wv.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Marek Benc <merkur32@gmail.com>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,11 +53,12 @@
         ("pkg-config" ,pkg-config)))
     (synopsis "Microsoft Word conversion library and utilities")
     (description
-      "wv converts Word 2,6,7,8,9 files to HTML and LaTeX.  The Word 2
-conversion is still incomplete (no formatting), but it will do a passable job
-extracting the text, which is what you probably want anyway.
+     "wv converts files written by Word 2000, 97, 95, and 6 (known internally as
+Word 9, 8, 7, and 6) to HTML or LaTeX.  Word 2 documents can still be converted
+to plain text but will lack formatting.
 
-libwv can be used as a library by third party programs, AbiWord uses it as its
-word importer, and KWord may use it in the future.")
+Othe programs can use wv as a library to convert Word documents to other
+formats.  AbiWord uses it as its Word importer, and KWord uses concepts and
+code from wv in theirs.")
     (home-page "http://wvware.sourceforge.net/")
     (license license:gpl2+)))
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index add374c899..5f7a95463a 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -469,14 +469,14 @@ checks.")
 (define-public perl-xml-rss
   (package
     (name "perl-xml-rss")
-    (version "1.59")
+    (version "1.60")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/S/SH/SHLOMIF/"
                                   "XML-RSS-" version ".tar.gz"))
               (sha256
                (base32
-                "0v6vfizn2psy6av057kp7fv3z3y73s6b3w56jm3zr6hlq48llsx2"))))
+                "0xw6aaqka3vqwbv152sbh6fbi8j306q1gvg7v83br8miif3mjcsb"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-module-build" ,perl-module-build)
@@ -684,14 +684,14 @@ a schema.")
 (define-public perl-xml-compile-cache
   (package
     (name "perl-xml-compile-cache")
-    (version "1.05")
+    (version "1.06")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/M/MA/MARKOV/"
                                   "XML-Compile-Cache-" version ".tar.gz"))
               (sha256
                (base32
-                "0xbwlszhi9hg8sxm5ylglm2qvnb689i595p913awrj2g4mp9yfsw"))))
+                "181qf1s7ymgi7saph3cf9p6dbxkxyh1ja23na4dchhi8v5mi66sr"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-log-report" ,perl-log-report)
@@ -1249,14 +1249,14 @@ libxls cannot write Excel files.")
 (define-public freexl
   (package
     (name "freexl")
-    (version "1.0.4")
+    (version "1.0.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.gaia-gis.it/gaia-sins/"
                                   name  "-" version ".tar.gz"))
               (sha256
                (base32
-                "09bwzqjc41cc8qw8qkw9wq58rg9nax8r3fg19iny5vmw1c0z23sh"))))
+                "03bmwq6hngmzwpqpb7c2amqlspz4q69iv96nlf0f5c0qs98b3j9x"))))
     (build-system gnu-build-system)
     (home-page "https://www.gaia-gis.it/fossil/freexl/index")
     (synopsis "Read Excel files")
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 4de93d2161..6fc99de919 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -357,7 +357,7 @@ provided.")
 (define-public editres
   (package
     (name "editres")
-    (version "1.0.6")
+    (version "1.0.7")
     (source
       (origin
         (method url-fetch)
@@ -367,7 +367,7 @@ provided.")
                ".tar.bz2"))
         (sha256
          (base32
-          "1w2d5hb5pw9ii2jlf4yjlp899402zfwc8hdkpdr3i1fy1cjd2riv"))))
+          "04awfwmy3f9f0bchidc4ssbgrbicn5gzasg3jydpfnp5513d76h8"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -918,7 +918,7 @@ rendering commands to the X server.")
 (define-public iceauth
   (package
     (name "iceauth")
-    (version "1.0.7")
+    (version "1.0.8")
     (source
       (origin
         (method url-fetch)
@@ -928,7 +928,7 @@ rendering commands to the X server.")
                ".tar.bz2"))
         (sha256
           (base32
-            "02izdyzhwpgiyjd8brzilwvwnfr72ncjb6mzz3y1icwrxqnsy5hj"))))
+            "1ik0mdidmyvy48hn8p2hwvf3535rf3m96hhf0mvcqrbj44x23vp6"))))
     (build-system gnu-build-system)
     (inputs
       `(("libice" ,libice)))
@@ -5944,7 +5944,7 @@ basic eye-candy effects.")
 (define-public xpra
   (package
     (name "xpra")
-    (version "2.2.4")
+    (version "2.2.5")
     (source
      (origin
        (method url-fetch)
@@ -5952,7 +5952,7 @@ basic eye-candy effects.")
                            version ".tar.xz"))
        (sha256
         (base32
-         "0v8yflvisk94bfj0zg4ggdfwrig0f3ss9kjnws3zflsr33cb2hxy"))))
+         "1q2l00nc3bgwlhjzkbk4a8x2l8z9w1799yn31icsx5hrgh98a1js"))))
     (build-system python-build-system)
     (inputs `(("ffmpeg" ,ffmpeg)
               ("flac" ,flac)
diff --git a/gnu/services/configuration.scm b/gnu/services/configuration.scm
index c45340f02f..707944cbe0 100644
--- a/gnu/services/configuration.scm
+++ b/gnu/services/configuration.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
-;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,11 +74,12 @@
   (documentation configuration-field-documentation))
 
 (define (serialize-configuration config fields)
-  (for-each (lambda (field)
-              ((configuration-field-serializer field)
-               (configuration-field-name field)
-               ((configuration-field-getter field) config)))
-            fields))
+  #~(string-append
+     #$@(map (lambda (field)
+               ((configuration-field-serializer field)
+                (configuration-field-name field)
+                ((configuration-field-getter field) config)))
+             fields)))
 
 (define (validate-configuration config fields)
   (for-each (lambda (field)
@@ -105,7 +106,7 @@
              (define (maybe-stem? val)
                (or (eq? val 'disabled) (stem? val)))
              (define (serialize-maybe-stem field-name val)
-               (when (stem? val) (serialize-stem field-name val)))))))))
+               (if (stem? val) (serialize-stem field-name val) ""))))))))
 
 (define-syntax define-configuration
   (lambda (stx)
@@ -147,7 +148,7 @@
                    conf))))))))
 
 (define (serialize-package field-name val)
-  #f)
+  "")
 
 ;; A little helper to make it easier to document all those fields.
 (define (generate-documentation documentation documentation-name)
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index b34a67aa95..3ca8f471fc 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -77,8 +77,10 @@
                   (default 5432))
   (locale         postgresql-configuration-locale
                   (default "en_US.utf8"))
-  (config-file    postgresql-configuration-file)
-  (data-directory postgresql-configuration-data-directory))
+  (config-file    postgresql-configuration-file
+                  (default %default-postgres-config))
+  (data-directory postgresql-configuration-data-directory
+                  (default "/var/lib/postgresql/data")))
 
 (define %default-postgres-hba
   (plain-file "pg_hba.conf"
@@ -184,7 +186,8 @@ host	all	all	::1/128 	trust"))
                        (service-extension activation-service-type
                                           postgresql-activation)
                        (service-extension account-service-type
-                                          (const %postgresql-accounts))))))
+                                          (const %postgresql-accounts))))
+                (default-value (postgresql-configuration))))
 
 (define* (postgresql-service #:key (postgresql postgresql)
                              (port 5432)
@@ -466,7 +469,8 @@ FLUSH PRIVILEGES;
           (service-extension activation-service-type
                              %mysql-activation)
           (service-extension shepherd-root-service-type
-                             mysql-shepherd-service)))))
+                             mysql-shepherd-service)))
+   (default-value (mysql-configuration))))
 
 (define* (mysql-service #:key (config (mysql-configuration)))
   "Return a service that runs @command{mysqld}, the MySQL or MariaDB
@@ -548,4 +552,5 @@ The optional @var{config} argument specifies the configuration for
                        (service-extension activation-service-type
                                           redis-activation)
                        (service-extension account-service-type
-                                          (const %redis-accounts))))))
+                                          (const %redis-accounts))))
+                (default-value (redis-configuration))))
diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm
index 427e2121f6..80ffed0f2f 100644
--- a/gnu/services/messaging.scm
+++ b/gnu/services/messaging.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
@@ -115,16 +115,9 @@
                  "_")))
 
 (define (serialize-field field-name val)
-  (format #t "~a = ~a;\n" (uglify-field-name field-name) val))
+  #~(format #f "~a = ~a;\n" #$(uglify-field-name field-name) #$val))
 (define (serialize-field-list field-name val)
-  (serialize-field field-name
-                   (with-output-to-string
-                     (lambda ()
-                       (format #t "{\n")
-                       (for-each (lambda (x)
-                                   (format #t "~a;\n" x))
-                                 val)
-                       (format #t "}")))))
+  (serialize-field field-name #~(format #f "{\n~@{~a;\n~}}" #$@val)))
 
 (define (serialize-boolean field-name val)
   (serialize-field field-name (if val "true" "false")))
@@ -140,17 +133,17 @@
 (define (non-negative-integer? val)
   (and (exact-integer? val) (not (negative? val))))
 (define (serialize-non-negative-integer field-name val)
-  (serialize-field field-name val))
+  (serialize-field field-name (number->string val)))
 (define-maybe non-negative-integer)
 
 (define (non-negative-integer-list? val)
   (and (list? val) (and-map non-negative-integer? val)))
 (define (serialize-non-negative-integer-list field-name val)
-  (serialize-field-list field-name val))
+  (serialize-field-list field-name (map number->string val)))
 (define-maybe non-negative-integer-list)
 
 (define (enclose-quotes s)
-  (format #f "\"~a\"" s))
+  #~(string-append "\"" #$s "\""))
 (define (serialize-string field-name val)
   (serialize-field field-name (enclose-quotes val)))
 (define-maybe string)
@@ -183,10 +176,22 @@
   (serialize-string-list field-name val))
 (define-maybe file-name)
 
+(define (file-object? val)
+  (or (file-like? val) (file-name? val)))
+(define (serialize-file-object field-name val)
+  (serialize-string field-name val))
+(define-maybe file-object)
+
+(define (file-object-list? val)
+  (and (list? val) (and-map file-object? val)))
+(define (serialize-file-object-list field-name val)
+  (serialize-string-list field-name val))
+(define-maybe file-object)
+
 (define (raw-content? val)
   (not (eq? val 'disabled)))
 (define (serialize-raw-content field-name val)
-  (format #t "~a" val))
+  val)
 (define-maybe raw-content)
 
 (define-configuration mod-muc-configuration
@@ -224,12 +229,12 @@ just joined the room."))
    "Path to your certificate file.")
 
   (capath
-   (file-name "/etc/ssl/certs")
+   (file-object "/etc/ssl/certs")
    "Path to directory containing root certificates that you wish Prosody to
 trust when verifying the certificates of remote servers.")
 
   (cafile
-   (maybe-file-name 'disabled)
+   (maybe-file-object 'disabled)
    "Path to a file containing root certificates that you wish Prosody to trust.
 Similar to @code{capath} but with all certificates concatenated together.")
 
@@ -273,9 +278,8 @@ can create such a file with:
    (maybe-string 'disabled)
    "Password for encrypted private keys."))
 (define (serialize-ssl-configuration field-name val)
-  (format #t "ssl = {\n")
-  (serialize-configuration val ssl-configuration-fields)
-  (format #t "};\n"))
+  #~(format #f "ssl = {\n~a};\n"
+            #$(serialize-configuration val ssl-configuration-fields)))
 (define-maybe ssl-configuration)
 
 (define %default-modules-enabled
@@ -303,20 +307,23 @@ can create such a file with:
   (define (virtualhost-configuration-list? val)
     (and (list? val) (and-map virtualhost-configuration? val)))
   (define (serialize-virtualhost-configuration-list l)
-    (for-each
-     (lambda (val) (serialize-virtualhost-configuration val)) l))
+    #~(string-append
+       #$@(map (lambda (val)
+                 (serialize-virtualhost-configuration val)) l)))
 
   (define (int-component-configuration-list? val)
     (and (list? val) (and-map int-component-configuration? val)))
   (define (serialize-int-component-configuration-list l)
-    (for-each
-     (lambda (val) (serialize-int-component-configuration val)) l))
+    #~(string-append
+       #$@(map (lambda (val)
+                 (serialize-int-component-configuration val)) l)))
 
   (define (ext-component-configuration-list? val)
     (and (list? val) (and-map ext-component-configuration? val)))
   (define (serialize-ext-component-configuration-list l)
-    (for-each
-     (lambda (val) (serialize-ext-component-configuration val)) l))
+    #~(string-append
+       #$@(map (lambda (val)
+                 (serialize-ext-component-configuration val)) l)))
 
   (define-all-configurations prosody-configuration
     (prosody
@@ -331,7 +338,7 @@ can create such a file with:
      global)
 
     (plugin-paths
-     (file-name-list '())
+     (file-object-list '())
      "Additional plugin directories.  They are searched in all the specified
 paths in order.  See @url{https://prosody.im/doc/plugins_directory}."
      global)
@@ -372,7 +379,7 @@ should you want to disable them then add them to this list."
      common)
 
     (groups-file
-     (file-name "/var/lib/prosody/sharedgroups.txt")
+     (file-object "/var/lib/prosody/sharedgroups.txt")
      "Path to a text file where the shared groups are defined.  If this path is
 empty then @samp{mod_groups} does nothing.  See
 @url{https://prosody.im/doc/modules/mod_groups}."
@@ -566,8 +573,9 @@ See also @url{https://prosody.im/doc/modules/mod_muc}."
                '(domain))))
   (let ((domain (virtualhost-configuration-domain config))
         (rest (filter rest? virtualhost-configuration-fields)))
-    (format #t "VirtualHost \"~a\"\n" domain)
-    (serialize-configuration config rest)))
+    #~(string-append
+       #$(format #f "VirtualHost \"~a\"\n" domain)
+       #$(serialize-configuration config rest))))
 
 ;; Serialize Component line first.
 (define (serialize-int-component-configuration config)
@@ -577,8 +585,9 @@ See also @url{https://prosody.im/doc/modules/mod_muc}."
   (let ((hostname (int-component-configuration-hostname config))
         (plugin (int-component-configuration-plugin config))
         (rest (filter rest? int-component-configuration-fields)))
-    (format #t "Component \"~a\" \"~a\"\n" hostname plugin)
-    (serialize-configuration config rest)))
+    #~(string-append
+       #$(format #f "Component \"~a\" \"~a\"\n" hostname plugin)
+       #$(serialize-configuration config rest))))
 
 ;; Serialize Component line first.
 (define (serialize-ext-component-configuration config)
@@ -587,22 +596,24 @@ See also @url{https://prosody.im/doc/modules/mod_muc}."
                '(hostname))))
   (let ((hostname (ext-component-configuration-hostname config))
         (rest (filter rest? ext-component-configuration-fields)))
-    (format #t "Component \"~a\"\n" hostname)
-    (serialize-configuration config rest)))
+    #~(string-append
+       #$(format #f "Component \"~a\"\n" hostname)
+       #$(serialize-configuration config rest))))
 
 ;; Serialize virtualhosts and components last.
 (define (serialize-prosody-configuration config)
   (define (rest? field)
     (not (memq (configuration-field-name field)
                '(virtualhosts int-components ext-components))))
-  (let ((rest (filter rest? prosody-configuration-fields)))
-    (serialize-configuration config rest))
-  (serialize-virtualhost-configuration-list
-   (prosody-configuration-virtualhosts config))
-  (serialize-int-component-configuration-list
-   (prosody-configuration-int-components config))
-  (serialize-ext-component-configuration-list
-   (prosody-configuration-ext-components config)))
+  #~(string-append
+     #$(let ((rest (filter rest? prosody-configuration-fields)))
+         (serialize-configuration config rest))
+     #$(serialize-virtualhost-configuration-list
+        (prosody-configuration-virtualhosts config))
+     #$(serialize-int-component-configuration-list
+        (prosody-configuration-int-components config))
+     #$(serialize-ext-component-configuration-list
+        (prosody-configuration-ext-components config))))
 
 (define-configuration opaque-prosody-configuration
   (prosody
@@ -646,13 +657,12 @@ See also @url{https://prosody.im/doc/modules/mod_muc}."
          (default-certs-dir "/etc/prosody/certs")
          (data-path (prosody-configuration-data-path config))
          (pidfile-dir (dirname (prosody-configuration-pidfile config)))
-         (config-str
-          (if (opaque-prosody-configuration? config)
-              (opaque-prosody-configuration-prosody.cfg.lua config)
-              (with-output-to-string
-                (lambda ()
-                  (serialize-prosody-configuration config)))))
-         (config-file (plain-file "prosody.cfg.lua" config-str)))
+         (config-str (if (opaque-prosody-configuration? config)
+                         (opaque-prosody-configuration-prosody.cfg.lua config)
+                         #~(begin
+                             (use-modules (ice-9 format))
+                             #$(serialize-prosody-configuration config))))
+         (config-file (mixed-text-file "prosody.cfg.lua" config-str)))
     #~(begin
         (use-modules (guix build utils))
         (define %user (getpw "prosody"))
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 5ba3c5eed6..6ac440fd26 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
@@ -64,6 +64,10 @@
             ntp-service
             ntp-service-type
 
+            openntpd-configuration
+            openntpd-configuration?
+            openntpd-service-type
+
             inetd-configuration
             inetd-entry
             inetd-service-type
@@ -448,6 +452,102 @@ make an initial adjustment of more than 1,000 seconds."
 
 
 ;;;
+;;; OpenNTPD.
+;;;
+
+(define-record-type* <openntpd-configuration>
+  openntpd-configuration make-openntpd-configuration
+  openntpd-configuration?
+  (openntpd                openntpd-configuration-openntpd
+                           (default openntpd))
+  (listen-on               openntpd-listen-on
+                           (default '("127.0.0.1"
+                                      "::1")))
+  (query-from              openntpd-query-from
+                           (default '()))
+  (sensor                  openntpd-sensor
+                           (default '()))
+  (server                  openntpd-server
+                           (default %ntp-servers))
+  (servers                 openntpd-servers
+                           (default '()))
+  (constraint-from         openntpd-constraint-from
+                           (default '()))
+  (constraints-from        openntpd-constraints-from
+                           (default '()))
+  (allow-large-adjustment? openntpd-allow-large-adjustment?
+                           (default #f))) ; upstream default
+
+(define (openntpd-shepherd-service config)
+  (match-record config <openntpd-configuration>
+    (openntpd listen-on query-from sensor server servers constraint-from
+              constraints-from allow-large-adjustment?)
+    (let ()
+      (define config
+        (string-join
+          (filter-map
+            (lambda (field value)
+              (string-join
+                (map (cut string-append field <> "\n")
+                     value)))
+            '("listen on " "query from " "sensor " "server " "servers "
+              "constraint from ")
+            (list listen-on query-from sensor server servers constraint-from))
+          ;; The 'constraints from' field needs to be enclosed in double quotes.
+          (string-join
+            (map (cut string-append "constraints from \"" <> "\"\n")
+                 constraints-from))))
+
+      (define ntpd.conf
+        (plain-file "ntpd.conf" config))
+
+      (list (shepherd-service
+              (provision '(ntpd))
+              (documentation "Run the Network Time Protocol (NTP) daemon.")
+              (requirement '(user-processes networking))
+              (start #~(make-forkexec-constructor
+                         (list (string-append #$openntpd "/sbin/ntpd")
+                               "-f" #$ntpd.conf
+                               "-d" ;; don't daemonize
+                               #$@(if allow-large-adjustment?
+                                    '("-s")
+                                    '()))
+                         ;; When ntpd is daemonized it repeatedly tries to respawn
+                         ;; while running, leading shepherd to disable it.  To
+                         ;; prevent spamming stderr, redirect output to logfile.
+                         #:log-file "/var/log/ntpd"))
+              (stop #~(make-kill-destructor)))))))
+
+(define (openntpd-service-activation config)
+  "Return the activation gexp for CONFIG."
+  (with-imported-modules '((guix build utils))
+    #~(begin
+        (use-modules (guix build utils))
+
+        (mkdir-p "/var/db")
+        (mkdir-p "/var/run")
+        (unless (file-exists? "/var/db/ntpd.drift")
+          (with-output-to-file "/var/db/ntpd.drift"
+                               (lambda _
+                                 (format #t "0.0")))))))
+
+(define openntpd-service-type
+  (service-type (name 'openntpd)
+                (extensions
+                 (list (service-extension shepherd-root-service-type
+                                          openntpd-shepherd-service)
+                       (service-extension account-service-type
+                                          (const %ntp-accounts))
+                       (service-extension activation-service-type
+                                          openntpd-service-activation)))
+                (default-value (openntpd-configuration))
+                (description
+                 "Run the @command{ntpd}, the Network Time Protocol (NTP)
+daemon, as implemented by @uref{http://www.openntpd.org, OpenNTPD}.  The
+daemon will keep the system clock synchronized with that of the given servers.")))
+
+
+;;;
 ;;; Inetd.
 ;;;
 
diff --git a/gnu/system.scm b/gnu/system.scm
index 71beee8259..1bcc1e1384 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -74,6 +74,7 @@
             operating-system-kernel
             operating-system-kernel-file
             operating-system-kernel-arguments
+            operating-system-initrd-modules
             operating-system-initrd
             operating-system-users
             operating-system-groups
@@ -154,6 +155,10 @@ booted from ROOT-DEVICE"
 
   (initrd operating-system-initrd                 ; (list fs) -> M derivation
           (default base-initrd))
+  (initrd-modules operating-system-initrd-modules ; list of strings
+                  (thunked)                       ; it's system-dependent
+                  (default %base-initrd-modules))
+
   (firmware operating-system-firmware             ; list of packages
             (default %base-firmware))
 
@@ -846,6 +851,8 @@ hardware-related operations as necessary when booting a Linux container."
 
   (mlet %store-monad ((initrd (make-initrd boot-file-systems
                                            #:linux (operating-system-kernel os)
+                                           #:linux-modules
+                                           (operating-system-initrd-modules os)
                                            #:mapped-devices mapped-devices)))
     (return (file-append initrd "/initrd"))))
 
diff --git a/gnu/system/examples/beaglebone-black.tmpl b/gnu/system/examples/beaglebone-black.tmpl
index 4b090e0fb7..97201330c7 100644
--- a/gnu/system/examples/beaglebone-black.tmpl
+++ b/gnu/system/examples/beaglebone-black.tmpl
@@ -15,11 +15,10 @@
   (bootloader (bootloader-configuration
                (bootloader u-boot-beaglebone-black-bootloader)
                (target "/dev/mmcblk1")))
-  (initrd (lambda (fs . rest)
-            (apply base-initrd fs
-                   ;; This module is required to mount the sd card.
-                   #:extra-modules (list "omap_hsmmc")
-                   rest)))
+
+  ;; This module is required to mount the SD card.
+  (initrd-modules (cons "omap_hsmmc" %base-initrd-modules))
+
   (file-systems (cons (file-system
                         (device "my-root")
                         (title 'label)
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index b61660b4b9..37c591ec3a 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -396,10 +396,7 @@ The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET."
     (kernel-arguments
      (cons (string-append "console=" tty)
            (operating-system-user-kernel-arguments installation-os)))
-    (initrd (lambda (fs . rest)
-              (apply base-initrd fs
-                     #:extra-modules extra-modules
-                     rest)))))
+    (initrd-modules (append extra-modules %base-initrd-modules))))
 
 (define beaglebone-black-installation-os
   (embedded-installation-os u-boot-beaglebone-black-bootloader
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 330438bce4..e0cb59c009 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -39,9 +39,11 @@
   #:use-module (gnu system mapped-devices)
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
+  #:use-module (ice-9 vlist)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:export (expression->initrd
+            %base-initrd-modules
             raw-initrd
             file-system-packages
             base-initrd))
@@ -242,14 +244,71 @@ FILE-SYSTEMS."
           (list btrfs-progs/static)
           '())))
 
+(define-syntax vhash                              ;TODO: factorize
+  (syntax-rules (=>)
+    "Build a vhash with the given key/value mappings."
+    ((_)
+     vlist-null)
+    ((_ (key others ... => value) rest ...)
+     (vhash-cons key value
+                 (vhash (others ... => value) rest ...)))
+    ((_ (=> value) rest ...)
+     (vhash rest ...))))
+
+(define-syntax lookup-procedure
+  (syntax-rules (else)
+    "Return a procedure that lookups keys in the given dictionary."
+    ((_ mapping ... (else default))
+     (let ((table (vhash mapping ...)))
+       (lambda (key)
+         (match (vhash-assoc key table)
+           (#f            default)
+           ((key . value) value)))))))
+
+(define file-system-type-modules
+  ;; Given a file system type, return the list of modules it needs.
+  (lookup-procedure ("cifs" => '("md4" "ecb" "cifs"))
+                    ("9p" => '("9p" "9pnet_virtio"))
+                    ("btrfs" => '("btrfs"))
+                    ("iso9660" => '("isofs"))
+                    (else '())))
+
+(define (file-system-modules file-systems)
+  "Return the list of Linux modules needed to mount FILE-SYSTEMS."
+  (append-map (compose file-system-type-modules file-system-type)
+              file-systems))
+
+(define* (default-initrd-modules #:optional (system (%current-system)))
+  "Return the list of modules included in the initrd by default."
+  (define virtio-modules
+    ;; Modules for Linux para-virtualized devices, for use in QEMU guests.
+    '("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
+      "virtio_console"))
+
+  `("ahci"                                  ;for SATA controllers
+    "usb-storage" "uas"                     ;for the installation image etc.
+    "usbhid" "hid-generic" "hid-apple"      ;keyboards during early boot
+    "dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions
+    "nls_iso8859-1"                            ;for `mkfs.fat`, et.al
+    ,@(if (string-match "^(x86_64|i[3-6]86)-" system)
+          '("pata_acpi" "pata_atiixp"    ;for ATA controllers
+            "isci")                      ;for SAS controllers like Intel C602
+          '())
+
+    ,@virtio-modules))
+
+(define-syntax %base-initrd-modules
+  ;; This more closely matches our naming convention.
+  (identifier-syntax (default-initrd-modules)))
+
 (define* (base-initrd file-systems
                       #:key
                       (linux linux-libre)
+                      (linux-modules '())
                       (mapped-devices '())
                       qemu-networking?
                       volatile-root?
-                      (virtio? #t)
-                      (extra-modules '())
+                      (extra-modules '())         ;deprecated
                       (on-error 'debug))
   "Return a monadic derivation that builds a generic initrd, with kernel
 modules taken from LINUX.  FILE-SYSTEMS is a list of file-systems to be
@@ -259,57 +318,14 @@ mappings to realize before FILE-SYSTEMS are mounted.
 
 QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd.
 
-When VIRTIO? is true, load additional modules so the initrd can
-be used as a QEMU guest with the root file system on a para-virtualized block
-device.
-
 The initrd is automatically populated with all the kernel modules necessary
-for FILE-SYSTEMS and for the given options.  However, additional kernel
-modules can be listed in EXTRA-MODULES.  They will be added to the initrd, and
+for FILE-SYSTEMS and for the given options.  Additional kernel
+modules can be listed in LINUX-MODULES.  They will be added to the initrd, and
 loaded at boot time in the order in which they appear."
-  (define virtio-modules
-    ;; Modules for Linux para-virtualized devices, for use in QEMU guests.
-    '("virtio_pci" "virtio_balloon" "virtio_blk" "virtio_net"
-      "virtio_console"))
-
-  (define cifs-modules
-    ;; Modules needed to mount CIFS file systems.
-    '("md4" "ecb" "cifs"))
-
-  (define virtio-9p-modules
-    ;; Modules for the 9p paravirtualized file system.
-    '("9p" "9pnet_virtio"))
-
-  (define (file-system-type-predicate type)
-    (lambda (fs)
-      (string=? (file-system-type fs) type)))
-
-  (define linux-modules
+  (define linux-modules*
     ;; Modules added to the initrd and loaded from the initrd.
-    `("ahci"                                  ;for SATA controllers
-      "usb-storage" "uas"                     ;for the installation image etc.
-      "usbhid" "hid-generic" "hid-apple"      ;keyboards during early boot
-      "dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions
-      "nls_iso8859-1"                            ;for `mkfs.fat`, et.al
-      ,@(if (string-match "^(x86_64|i[3-6]86)-" (%current-system))
-            '("pata_acpi" "pata_atiixp"    ;for ATA controllers
-              "isci")                      ;for SAS controllers like Intel C602
-            '())
-      ,@(if (or virtio? qemu-networking?)
-            virtio-modules
-            '())
-      ,@(if (find (file-system-type-predicate "cifs") file-systems)
-            cifs-modules
-            '())
-      ,@(if (find (file-system-type-predicate "9p") file-systems)
-            virtio-9p-modules
-            '())
-      ,@(if (find (file-system-type-predicate "btrfs") file-systems)
-            '("btrfs")
-            '())
-      ,@(if (find (file-system-type-predicate "iso9660") file-systems)
-            '("isofs")
-            '())
+    `(,@linux-modules
+      ,@(file-system-modules file-systems)
       ,@(if volatile-root?
             '("overlay")
             '())
@@ -320,7 +336,7 @@ loaded at boot time in the order in which they appear."
 
   (raw-initrd file-systems
               #:linux linux
-              #:linux-modules linux-modules
+              #:linux-modules linux-modules*
               #:mapped-devices mapped-devices
               #:helper-packages helper-packages
               #:qemu-networking? qemu-networking?
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index dbeb0d3436..5ceb5e658c 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;;
@@ -30,9 +30,12 @@
   #:use-module (gnu services shepherd)
   #:use-module (gnu system uuid)
   #:autoload   (gnu build file-systems) (find-partition-by-luks-uuid)
+  #:autoload   (gnu build linux-modules)
+                 (device-module-aliases matching-modules)
   #:autoload   (gnu packages cryptsetup) (cryptsetup-static)
   #:autoload   (gnu packages linux) (mdadm-static)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
@@ -151,19 +154,43 @@
   #~(zero? (system* #$(file-append cryptsetup-static "/sbin/cryptsetup")
                     "close" #$target)))
 
-(define (check-luks-device md)
+(define (check-device-initrd-modules device linux-modules location)
+  "Raise an error if DEVICE needs modules beyond LINUX-MODULES to operate.
+DEVICE must be a \"/dev\" file name."
+  (let ((modules (delete-duplicates
+                  (append-map matching-modules
+                              (device-module-aliases device)))))
+    (unless (every (cute member <> linux-modules) modules)
+      (raise (condition
+              (&message
+               (message (format #f (G_ "you may need these modules \
+in the initrd for ~a:~{ ~a~}")
+                                device modules)))
+              (&error-location
+               (location (source-properties->location location))))))))
+
+(define* (check-luks-device md #:key
+                            needed-for-boot?
+                            (initrd-modules '())
+                            #:allow-other-keys
+                            #:rest rest)
   "Ensure the source of MD is valid."
-  (let ((source (mapped-device-source md)))
-    (or (not (uuid? source))
-        (not (zero? (getuid)))
-        (find-partition-by-luks-uuid (uuid-bytevector source))
-        (raise (condition
-                (&message
-                 (message (format #f (G_ "no LUKS partition with UUID '~a'")
-                                  (uuid->string source))))
-                (&error-location
-                 (location (source-properties->location
-                            (mapped-device-location md)))))))))
+  (let ((source   (mapped-device-source md))
+        (location (mapped-device-location md)))
+    (or (not (zero? (getuid)))
+        (if (uuid? source)
+            (match (find-partition-by-luks-uuid (uuid-bytevector source))
+              (#f
+               (raise (condition
+                       (&message
+                        (message (format #f (G_ "no LUKS partition with UUID '~a'")
+                                         (uuid->string source))))
+                       (&error-location
+                        (location (source-properties->location
+                                   (mapped-device-location md)))))))
+              ((? string? device)
+               (check-device-initrd-modules device initrd-modules location)))
+            (check-device-initrd-modules source initrd-modules location)))))
 
 (define luks-device-mapping
   ;; The type of LUKS mapped devices.
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 345cecedd8..91ff32ce9a 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -143,7 +143,7 @@ made available under the /xchg CIFS share."
                          (return initrd)
                          (base-initrd %linux-vm-file-systems
                                       #:linux linux
-                                      #:virtio? #t
+                                      #:linux-modules %base-initrd-modules
                                       #:qemu-networking? #t))))
 
     (define builder
@@ -512,12 +512,7 @@ of the GNU system as described by OS."
 
 
   (let ((os (operating-system (inherit os)
-              ;; Use an initrd with the whole QEMU shebang.
-              (initrd (lambda (file-systems . rest)
-                        (apply (operating-system-initrd os)
-                               file-systems
-                               #:virtio? #t
-                               rest)))
+              ;; Assume we have an initrd with the whole QEMU shebang.
 
               ;; Force our own root file system.  Refer to it by UUID so that
               ;; it works regardless of how the image is used ("qemu -hda",
@@ -614,7 +609,6 @@ environment with the store shared with the host.  MAPPINGS is a list of
               (apply (operating-system-initrd os)
                      file-systems
                      #:volatile-root? #t
-                     #:virtio? #t
                      rest)))
 
     ;; Disable swap.
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 3ac4a579da..e3bb1b46af 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -565,11 +565,10 @@ where /gnu lives on a separate partition.")
                  (bootloader grub-bootloader)
                  (target "/dev/vdb")))
     (kernel-arguments '("console=ttyS0"))
-    (initrd (lambda (file-systems . rest)
-              ;; Add a kernel module for RAID-0 (aka. "stripe").
-              (apply base-initrd file-systems
-                     #:extra-modules '("raid0")
-                     rest)))
+
+    ;; Add a kernel module for RAID-0 (aka. "stripe").
+    (initrd-modules (cons "raid0" %base-initrd-modules))
+
     (mapped-devices (list (mapped-device
                            (source (list "/dev/vda2" "/dev/vda3"))
                            (target "/dev/md0")