summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/local.mk5
-rw-r--r--gnu/packages/admin.scm34
-rw-r--r--gnu/packages/algebra.scm10
-rw-r--r--gnu/packages/animation.scm8
-rw-r--r--gnu/packages/audio.scm35
-rw-r--r--gnu/packages/backup.scm59
-rw-r--r--gnu/packages/bioinformatics.scm22
-rw-r--r--gnu/packages/bootloaders.scm2
-rw-r--r--gnu/packages/busybox.scm20
-rw-r--r--gnu/packages/compression.scm65
-rw-r--r--gnu/packages/cups.scm75
-rw-r--r--gnu/packages/dns.scm17
-rw-r--r--gnu/packages/electronics.scm5
-rw-r--r--gnu/packages/emacs.scm100
-rw-r--r--gnu/packages/fltk.scm19
-rw-r--r--gnu/packages/fonts.scm8
-rw-r--r--gnu/packages/fpga.scm4
-rw-r--r--gnu/packages/games.scm7
-rw-r--r--gnu/packages/gimp.scm14
-rw-r--r--gnu/packages/gnome.scm18
-rw-r--r--gnu/packages/golang.scm10
-rw-r--r--gnu/packages/gps.scm2
-rw-r--r--gnu/packages/gtk.scm43
-rw-r--r--gnu/packages/guile.scm11
-rw-r--r--gnu/packages/irc.scm40
-rw-r--r--gnu/packages/java.scm42
-rw-r--r--gnu/packages/linux.scm20
-rw-r--r--gnu/packages/lisp.scm7
-rw-r--r--gnu/packages/logging.scm2
-rw-r--r--gnu/packages/mail.scm48
-rw-r--r--gnu/packages/maven.scm16
-rw-r--r--gnu/packages/music.scm151
-rw-r--r--gnu/packages/node.scm15
-rw-r--r--gnu/packages/opencl.scm120
-rw-r--r--gnu/packages/parallel.scm22
-rw-r--r--gnu/packages/patches/dovecot-trees-support-dovecot-2.3.patch60
-rw-r--r--gnu/packages/patches/java-commons-collections-fix-java8.patch299
-rw-r--r--gnu/packages/patches/nyx-show-header-stats-with-python3.patch70
-rw-r--r--gnu/packages/pdf.scm4
-rw-r--r--gnu/packages/perl-web.scm4
-rw-r--r--gnu/packages/python-crypto.scm6
-rw-r--r--gnu/packages/python-web.scm8
-rw-r--r--gnu/packages/python.scm46
-rw-r--r--gnu/packages/rdf.scm8
-rw-r--r--gnu/packages/ruby.scm8
-rw-r--r--gnu/packages/scheme.scm80
-rw-r--r--gnu/packages/sdl.scm4
-rw-r--r--gnu/packages/search.scm36
-rw-r--r--gnu/packages/security-token.scm31
-rw-r--r--gnu/packages/selinux.scm5
-rw-r--r--gnu/packages/ssh.scm44
-rw-r--r--gnu/packages/suckless.scm5
-rw-r--r--gnu/packages/syndication.scm6
-rw-r--r--gnu/packages/tls.scm4
-rw-r--r--gnu/packages/tor.scm87
-rw-r--r--gnu/packages/version-control.scm51
-rw-r--r--gnu/packages/video.scm103
-rw-r--r--gnu/packages/virtualization.scm53
-rw-r--r--gnu/packages/vpn.scm11
-rw-r--r--gnu/packages/web.scm60
-rw-r--r--gnu/packages/wine.scm6
-rw-r--r--gnu/packages/xfig.scm7
-rw-r--r--gnu/packages/zile.scm9
-rw-r--r--gnu/services/authentication.scm41
-rw-r--r--gnu/services/cuirass.scm5
-rw-r--r--gnu/services/cups.scm5
-rw-r--r--gnu/services/sound.scm34
-rw-r--r--gnu/system.scm34
68 files changed, 1642 insertions, 668 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 8cd855ad25..5b915317d9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -322,6 +322,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/ocaml.scm			\
   %D%/packages/ocr.scm				\
   %D%/packages/onc-rpc.scm			\
+  %D%/packages/opencl.scm			\
   %D%/packages/openbox.scm			\
   %D%/packages/openldap.scm			\
   %D%/packages/openstack.scm			\
@@ -471,6 +472,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/desktop.scm			\
   %D%/services/dict.scm				\
   %D%/services/dns.scm				\
+  %D%/services/authentication.scm		\
   %D%/services/games.scm			\
   %D%/services/kerberos.scm			\
   %D%/services/lirc.scm				\
@@ -637,6 +639,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/docbook-xsl-nonrecursive-string-subst.patch	\
   %D%/packages/patches/doc++-include-directives.patch		\
   %D%/packages/patches/doc++-segfault-fix.patch			\
+  %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch	\
   %D%/packages/patches/doxygen-gcc-ice.patch			\
   %D%/packages/patches/doxygen-test.patch			\
   %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
@@ -803,6 +806,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/jacal-fix-texinfo.patch			\
   %D%/packages/patches/jamvm-arm.patch				\
   %D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch	\
+  %D%/packages/patches/java-commons-collections-fix-java8.patch \
   %D%/packages/patches/java-jeromq-fix-tests.patch		\
   %D%/packages/patches/java-powermock-fix-java-files.patch		\
   %D%/packages/patches/java-simple-xml-fix-tests.patch		\
@@ -960,6 +964,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/nvi-assume-preserve-path.patch		\
   %D%/packages/patches/nvi-dbpagesize-binpower.patch		\
   %D%/packages/patches/nvi-db4.patch				\
+  %D%/packages/patches/nyx-show-header-stats-with-python3.patch	\
   %D%/packages/patches/ocaml-bisect-fix-camlp4-in-another-directory.patch	\
   %D%/packages/patches/ocaml-bitstring-fix-configure.patch \
   %D%/packages/patches/ocaml-CVE-2015-8869.patch		\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 9fd5215172..6b8af60b1b 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -256,7 +256,7 @@ services.")
     (origin
      (method url-fetch)
       (uri (string-append
-            "http://projects.gw-computing.net/attachments/download/615/dfc-"
+            "https://projects.gw-computing.net/attachments/download/615/dfc-"
             version ".tar.gz"))
       (sha256
        (base32
@@ -264,7 +264,7 @@ services.")
    (build-system cmake-build-system)
    (arguments '(#:tests? #f)) ; There are no tests.
    (native-inputs `(("gettext" ,gettext-minimal)))
-   (home-page "http://projects.gw-computing.net/projects/dfc")
+   (home-page "https://projects.gw-computing.net/projects/dfc")
    (synopsis "Display file system space usage using graphs and colors")
    (description
     "dfc (df color) is a modern version of df.  It uses colors, draws pretty
@@ -508,7 +508,7 @@ allow automatic login and starting any app.")
      "This package provides the /etc/services, /etc/protocols, and /etc/rpc
 files, which contain information about the IANA-assigned port, protocol, and
 ONC RPC numbers.")
-    (home-page "http://packages.debian.org/sid/netbase")
+    (home-page "https://packages.debian.org/sid/netbase")
     (license license:gpl2)))
 
 (define-public netcat
@@ -753,7 +753,7 @@ tools: server, client, and relay agent.")
     (version "1.8.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.tcpdump.org/release/libpcap-"
+              (uri (string-append "https://www.tcpdump.org/release/libpcap-"
                                   version ".tar.gz"))
               (sha256
                (base32
@@ -762,7 +762,7 @@ tools: server, client, and relay agent.")
     (native-inputs `(("bison" ,bison) ("flex" ,flex)))
     (arguments '(#:configure-flags '("--with-pcap=linux")
                  #:tests? #f))                    ; no 'check' target
-    (home-page "http://www.tcpdump.org")
+    (home-page "https://www.tcpdump.org")
     (synopsis "Network packet capture library")
     (description
      "libpcap is an interface for user-level packet capture.  It provides a
@@ -778,7 +778,7 @@ network statistics collection, security monitoring, network debugging, etc.")
     (version "4.9.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.tcpdump.org/release/tcpdump-"
+              (uri (string-append "https://www.tcpdump.org/release/tcpdump-"
                                   version ".tar.gz"))
               (sha256
                (base32
@@ -787,7 +787,7 @@ network statistics collection, security monitoring, network debugging, etc.")
     (inputs `(("libpcap" ,libpcap)
               ("openssl" ,openssl)))
     (native-inputs `(("perl" ,perl)))        ; for tests
-    (home-page "http://www.tcpdump.org/")
+    (home-page "https://www.tcpdump.org/")
     (synopsis "Network packet analyzer")
     (description
      "Tcpdump is a command-line tool to analyze network traffic passing
@@ -1043,7 +1043,7 @@ commands and their arguments.")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://w1.fi/releases/wpa_supplicant-"
+                    "https://w1.fi/releases/wpa_supplicant-"
                     version
                     ".tar.gz"))
               (patches (search-patches "wpa-supplicant-CVE-2017-13082.patch"
@@ -1104,7 +1104,7 @@ commands and their arguments.")
        ("libgcrypt" ,libgcrypt)))                 ;needed by crypto_gnutls.c
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://w1.fi/wpa_supplicant/")
+    (home-page "https://w1.fi/wpa_supplicant/")
     (synopsis "Connecting to WPA and WPA2-protected wireless networks")
     (description
      "wpa_supplicant is a WPA Supplicant with support for WPA and WPA2 (IEEE
@@ -1221,7 +1221,7 @@ This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.")
                          (string-append "--mandir=" out
                                         "/share/man")))))))
        #:tests? #f))
-    (home-page "http://kernel.org")               ; really, no home page
+    (home-page "https://www.kernel.org") ; really, no home page
     (synopsis "Send a wake-on-LAN packet")
     (description
      "WakeLan broadcasts a properly formatted UDP packet across the local area
@@ -1456,7 +1456,7 @@ track changes in important system configuration files.")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://people.redhat.com/sgrubb/libcap-ng/libcap-ng-"
+                    "https://people.redhat.com/sgrubb/libcap-ng/libcap-ng-"
                     version ".tar.gz"))
               (sha256
                (base32
@@ -1792,13 +1792,13 @@ platform-specific methods.")
     (version "2.4.5")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://people.redhat.com/sgrubb/audit/"
+              (uri (string-append "https://people.redhat.com/sgrubb/audit/"
                                   "audit-" version ".tar.gz"))
               (sha256
                (base32
                 "1q1q51dvxscbi4kbakmd4bn0xrvwwaiwvaya79925cbrqwzxsg77"))))
     (build-system gnu-build-system)
-    (home-page "http://people.redhat.com/sgrubb/audit/")
+    (home-page "https://people.redhat.com/sgrubb/audit/")
     (arguments
      `(#:configure-flags (list "--with-python=no")
        #:phases
@@ -2127,7 +2127,7 @@ with @code{ChallengeResponseAuthentication} and @code{PrivilegeSeparation}
 enabled, and supports extensive configuration either by PAM options or in
 krb5.conf or both.  PKINIT is supported with recent versions of both MIT
 Kerberos and Heimdal and FAST is supported with recent MIT Kerberos.")
-    (home-page "http://www.eyrie.org/~eagle/software/pam-krb5")
+    (home-page "https://www.eyrie.org/~eagle/software/pam-krb5")
     ;; Dual licenced under  a homebrew non-copyleft OR GPL (any version)
     ;; However, the tarball does not contain a copy of the GPL,  so unless
     ;; we put one in, we cannot distribute it under GPL without violating
@@ -2409,9 +2409,9 @@ tool for remote execution and deployment.")
        (modify-phases %standard-phases
          (delete 'configure))))         ; no configure script
     (home-page "https://github.com/dylanaraps/neofetch")
-    (synopsis "System info script")
-    (description "Neofetch is a CLI system information tool written in Bash.
-Neofetch displays information about your system next to an image, your OS
+    (synopsis "System information script")
+    (description "Neofetch is a command-line system information tool written in
+Bash.  Neofetch displays information about your system next to an image, your OS
 logo, or any ASCII file of your choice.  The main purpose of Neofetch is to be
 used in screenshots to show other users what operating system or distribution
 you are running, what theme or icon set you are using, etc.")
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 816f013655..45d15d6fd5 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -143,7 +143,7 @@ solve the shortest vector problem.")
    (source (origin
             (method url-fetch)
             (uri (string-append
-                  "http://pari.math.u-bordeaux.fr/pub/pari/unix/pari-"
+                  "https://pari.math.u-bordeaux.fr/pub/pari/unix/pari-"
                   version ".tar.gz"))
             (sha256
               (base32
@@ -174,7 +174,7 @@ polynomials, power series, algebraic numbers, etc., and a lot of
 transcendental functions.
 PARI is also available as a C library to allow for faster computations.")
    (license license:gpl2+)
-   (home-page "http://pari.math.u-bordeaux.fr/")))
+   (home-page "https://pari.math.u-bordeaux.fr/")))
 
 (define-public gp2c
   (package
@@ -183,7 +183,7 @@ PARI is also available as a C library to allow for faster computations.")
    (source (origin
             (method url-fetch)
             (uri (string-append
-                  "http://pari.math.u-bordeaux.fr/pub/pari/GP2C/gp2c-"
+                  "https://pari.math.u-bordeaux.fr/pub/pari/GP2C/gp2c-"
                   version ".tar.gz"))
             (sha256
               (base32
@@ -208,7 +208,7 @@ PARI is also available as a C library to allow for faster computations.
 
 GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
    (license license:gpl2)
-   (home-page "http://pari.math.u-bordeaux.fr/")))
+   (home-page "https://pari.math.u-bordeaux.fr/")))
 
 (define-public giac-xcas
   (package
@@ -746,7 +746,7 @@ Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
                              ;; Then run 'CTest' with -V so we get more
                              ;; details upon failure.
                              (zero? (system* "ctest" "-V" dash-j)))))))))
-    (home-page "http://eigen.tuxfamily.org")
+    (home-page "https://eigen.tuxfamily.org")
     (synopsis "C++ template library for linear algebra")
     (description
      "Eigen is a C++ template library for linear algebra: matrices, vectors,
diff --git a/gnu/packages/animation.scm b/gnu/packages/animation.scm
index b56a081984..22af707401 100644
--- a/gnu/packages/animation.scm
+++ b/gnu/packages/animation.scm
@@ -52,7 +52,7 @@
                (base32
                 "0ii73nsd3xzkhz6w1rnxwphl637j9w82xiy6apa9vin2isdynnmc"))))
     (build-system gnu-build-system)
-    (home-page "http://www.synfig.org")
+    (home-page "https://www.synfig.org")
     (synopsis "Extended C++ template library")
     (description
      "ETL is a class and template library designed to add new datatypes and
@@ -130,7 +130,7 @@ C++ @dfn{Standard Template Library} (STL).")
        ("pango" ,pango)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://www.synfig.org")
+    (home-page "https://www.synfig.org")
     (synopsis "Vector-based 2D animation renderer")
     (description
      "Synfig is a vector-based 2D animation package.  It is designed to be
@@ -180,7 +180,7 @@ for tweening, preventing the need to hand-draw each frame.")
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)))
-    (home-page "http://www.synfig.org")
+    (home-page "https://www.synfig.org")
     (synopsis "Vector-based 2D animation package (GUI)")
     (description
      "Synfig is a vector-based 2D animation package.  It is designed to
@@ -248,7 +248,7 @@ contains the graphical user interface for synfig.")
          ("libsndfile" ,libsndfile)))
       (native-inputs
        `(("qttools" ,qttools)))
-      (home-page "http://www.lostmarble.com/papagayo/")
+      (home-page "https://www.lostmarble.com/papagayo/")
       (synopsis "Lip-syncing for animations")
       (description
        "Papagayo is a lip-syncing program designed to help you line up
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index ab16707ee5..98f66aae88 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1476,7 +1476,7 @@ synchronous execution of all clients, and low latency operation.")
     (version "1.6.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://download.drobilla.net/jalv-"
+              (uri (string-append "https://download.drobilla.net/jalv-"
                                   version ".tar.bz2"))
               (sha256
                (base32
@@ -1501,7 +1501,7 @@ synchronous execution of all clients, and low latency operation.")
        ("jack" ,jack-1)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/jalv/")
+    (home-page "https://drobilla.net/software/jalv/")
     (synopsis "Simple LV2 host for JACK")
     (description
      "Jalv is a simple but fully featured LV2 host for JACK.  It runs LV2
@@ -1711,7 +1711,7 @@ included are the command line utilities @code{send_osc} and @code{dump_osc}.")
     (version "0.24.2")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://download.drobilla.net/lilv-"
+             (uri (string-append "https://download.drobilla.net/lilv-"
                                  version ".tar.bz2"))
              (sha256
               (base32
@@ -1737,7 +1737,7 @@ included are the command line utilities @code{send_osc} and @code{dump_osc}.")
      `(("lv2" ,lv2)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/lilv/")
+    (home-page "https://drobilla.net/software/lilv/")
     (synopsis "Library to simplify use of LV2 plugins in applications")
     (description
      "Lilv is a C library to make the use of LV2 plugins as simple as possible
@@ -1966,7 +1966,7 @@ buffers, and audio capture.")
     (version "1.0.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://download.drobilla.net/patchage-"
+              (uri (string-append "https://download.drobilla.net/patchage-"
                                   version
                                   ".tar.bz2"))
               (sha256
@@ -1984,7 +1984,7 @@ buffers, and audio capture.")
        ("dbus-glib" ,dbus-glib)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/patchage/")
+    (home-page "https://drobilla.net/software/patchage/")
     (synopsis "Modular patch bay for audio and MIDI systems")
     (description
      "Patchage is a modular patch bay for audio and MIDI systems based on JACK
@@ -2163,7 +2163,7 @@ using GuixSD.")
     (version "0.8.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://download.drobilla.net/raul-"
+              (uri (string-append "https://download.drobilla.net/raul-"
                                   version ".tar.bz2"))
               (sha256
                (base32
@@ -2177,7 +2177,7 @@ using GuixSD.")
        ("boost" ,boost)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/raul/")
+    (home-page "https://drobilla.net/software/raul/")
     (synopsis "Real-time audio utility library")
     (description
      "Raul (Real-time Audio Utility Library) is a C++ utility library primarily
@@ -2194,7 +2194,7 @@ aimed at audio/musical applications.")
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
-                      (url "http://git.drobilla.net/raul.git")
+                      (url "https://git.drobilla.net/raul.git")
                       (commit commit)))
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
@@ -2249,7 +2249,7 @@ tempo and pitch of an audio recording independently of one another.")
        #:phases (modify-phases %standard-phases
                   (add-after
                    'unpack 'autoconf
-                   (lambda _ (zero? (system* "autoreconf" "-vfi"))))
+                   (lambda _ (invoke "autoreconf" "-vfi")))
                   (add-before
                    'build 'fix-makefile
                    (lambda _
@@ -2287,7 +2287,7 @@ input/output.")
     (version "0.6.0")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://download.drobilla.net/sratom-"
+             (uri (string-append "https://download.drobilla.net/sratom-"
                                  version ".tar.bz2"))
              (sha256
               (base32
@@ -2300,7 +2300,7 @@ input/output.")
        ("sord" ,sord)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/sratom/")
+    (home-page "https://drobilla.net/software/sratom/")
     (synopsis "Library for serialising LV2 atoms to/from RDF")
     (description
      "Sratom is a library for serialising LV2 atoms to/from RDF, particularly
@@ -2313,7 +2313,7 @@ the Turtle syntax.")
     (version "0.10.0")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://download.drobilla.net/suil-"
+             (uri (string-append "https://download.drobilla.net/suil-"
                                  version ".tar.bz2"))
              (sha256
               (base32
@@ -2330,7 +2330,7 @@ the Turtle syntax.")
        ("qt" ,qtbase)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/suil/")
+    (home-page "https://drobilla.net/software/suil/")
     (synopsis "Library for loading and wrapping LV2 plugin UIs")
     (description
      "Suil is a lightweight C library for loading and wrapping LV2 plugin UIs.
@@ -2723,7 +2723,7 @@ portions of LAME.")
        (modify-phases %standard-phases
          (add-after 'unpack 'autoreconf
            (lambda _
-             (zero? (system* "autoreconf" "-vif")))))
+             (invoke "autoreconf" "-vif"))))
        #:tests? #f))                    ;no 'check' target
     (home-page "http://www.portaudio.com/")
     (synopsis "Audio I/O library")
@@ -2791,9 +2791,8 @@ synthesizer written in C++.")
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "CC" "gcc")
-             (zero?
-              (system* "./configure"
-                       (string-append "--prefix=" (assoc-ref outputs "out")))))))
+             (invoke "./configure"
+                     (string-append "--prefix=" (assoc-ref outputs "out"))))))
        ;; No 'check' target.
        #:tests? #f))
     (home-page "http://themaister.net/rsound.html")
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 9ef0ee7f09..9884f58fc3 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -147,7 +147,7 @@ spying and/or modification by the server.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'autoreconf
-           (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
+           (lambda _ (invoke "autoreconf" "-vfi"))))))
     (synopsis "File verification and repair tools")
     (description "Par2cmdline uses Reed-Solomon error-correcting codes to
 generate and verify PAR2 recovery files.  These files can be distributed
@@ -420,7 +420,7 @@ rdiff-backup is easy to use and settings have sensible defaults.")
                             "t/backup_exec/conf/backup_exec.conf")
                (("/bin/true") (which "true"))
                (("/bin/false") (which "false")))
-             (zero? (system* "make" "test")))))))
+             (invoke "make" "test"))))))
     (inputs
      `(("perl" ,perl)
        ("rsync" ,rsync)))
@@ -523,25 +523,24 @@ detection, and lossless compression.")
              ;; The tests should be run in an empty directory.
              (mkdir-p "tests")
              (with-directory-excursion "tests"
-               (zero?
-                 (system* "py.test" "-v" "--pyargs" "borg.testsuite" "-k"
-                          (string-append
-                            ;; These tests need to write to '/var'.
-                            "not test_get_cache_dir "
-                            "and not test_get_config_dir "
-                            "and not test_get_keys_dir "
-                            "and not test_get_security_dir "
-                            ;; These tests assume there is a root user in
-                            ;; '/etc/passwd'.
-                            "and not test_access_acl "
-                            "and not test_default_acl "
-                            "and not test_non_ascii_acl "
-                            ;; This test needs the unpackaged pytest-benchmark.
-                            "and not benchmark "
-                            ;; These tests assume the kernel supports FUSE.
-                            "and not test_fuse "
-                            "and not test_fuse_allow_damaged_files "
-                            "and not test_mount_hardlinks"))))))
+               (invoke "py.test" "-v" "--pyargs" "borg.testsuite" "-k"
+                       (string-append
+                        ;; These tests need to write to '/var'.
+                        "not test_get_cache_dir "
+                        "and not test_get_config_dir "
+                        "and not test_get_keys_dir "
+                        "and not test_get_security_dir "
+                        ;; These tests assume there is a root user in
+                        ;; '/etc/passwd'.
+                        "and not test_access_acl "
+                        "and not test_default_acl "
+                        "and not test_non_ascii_acl "
+                        ;; This test needs the unpackaged pytest-benchmark.
+                        "and not benchmark "
+                        ;; These tests assume the kernel supports FUSE.
+                        "and not test_fuse "
+                        "and not test_fuse_allow_damaged_files "
+                        "and not test_mount_hardlinks")))))
          (add-after 'install 'install-doc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -552,11 +551,9 @@ detection, and lossless compression.")
                            "docs/misc/internals-picture.txt"
                            "docs/misc/prune-example.txt"))
                (add-installed-pythonpath inputs outputs)
-               (and
-                 (zero? (system* "python3" "setup.py" "build_man"))
-                 (begin
-                   (copy-recursively "docs/man" man)
-                   #t))))))))
+               (invoke "python3" "setup.py" "build_man")
+               (copy-recursively "docs/man" man)
+               #t))))))
     (native-inputs
      `(("python-cython" ,python-cython)
        ("python-setuptools-scm" ,python-setuptools-scm)
@@ -686,17 +683,17 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
          (replace 'check
                   (lambda _
                     (substitute* "obnamlib/vfs_local_tests.py"
-                      ;; Check for the nobody user instead of root
+                      ;; Check for the nobody user instead of root.
                       (("self.fs.get_username\\(0\\), 'root'")
                        "self.fs.get_username(65534), 'nobody'")
-                      ;; Disable tests checking for root group
+                      ;; Disable tests checking for root group.
                       (("self.fs.get_groupname\\(0\\)") "'root'"))
                     (substitute* "obnamlib/vfs_local.py"
-                      ;; Don't cover get_groupname function
+                      ;; Don't cover get_groupname function.
                       (("def get_groupname\\(self, gid\\):")
                        "def get_groupname(self, gid):  # pragma: no cover"))
-                    ;; Can't run network tests
-                    (zero? (system* "./check" "--unit-tests")))))))
+                    ;; Can't run network tests.
+                    (invoke "./check" "--unit-tests"))))))
     (inputs
      `(("python2-cliapp" ,python2-cliapp)
        ("python2-larch" ,python2-larch)
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index a7356743f0..f89c60b8cd 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -11449,7 +11449,7 @@ applications for tackling some common problems in a user-friendly way.")
        ("python2-numpy" ,python2-numpy)
        ("python2-matplotlib" ,python2-matplotlib)
        ("python2-pysam" ,python2-pysam)))
-    (home-page "http://3dgenomes.github.io/TADbit/")
+    (home-page "https://3dgenomes.github.io/TADbit/")
     (synopsis "Analyze, model, and explore 3C-based data")
     (description
      "TADbit is a complete Python library to deal with all steps to analyze,
@@ -12725,7 +12725,7 @@ contains
        #:phases
        (modify-phases %standard-phases
          ;; FIXME: fails with "java.io.FileNotFoundException:
-         ;; /gnu/store/q76y0ximcziplgfpbn26kbw4h3s14f33-dropseq-tools-1.13/share/java/lib/biojava-alignment.jar"
+         ;; /gnu/store/…-dropseq-tools-1.13/share/java/lib/biojava-alignment.jar"
          (delete 'generate-jar-indices)
          ;; All dependencies must be linked to "lib", because that's where
          ;; they will be searched for when the Class-Path property of the
@@ -12906,7 +12906,7 @@ expression report comparing samples in an easily configurable manner.")
 (define-public pigx-chipseq
   (package
     (name "pigx-chipseq")
-    (version "0.0.16")
+    (version "0.0.17")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BIMSBbioinfo/pigx_chipseq/"
@@ -12914,20 +12914,10 @@ expression report comparing samples in an easily configurable manner.")
                                   "/pigx_chipseq-" version ".tar.gz"))
               (sha256
                (base32
-                "0s53840z53pih0jkllmcfb2la7c36zxmf229fshhyq8n6a2hgr8f"))))
+                "1c0x5lswvc8v9fw4iynl5rcfs7h7clzp4hqdnl65ia7rk35n4zg9"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f ; parts of the tests rely on access to the network
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'wrap-executable
-           ;; Make sure the executable finds all R modules.
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (wrap-program (string-append out "/bin/pigx-chipseq")
-                 `("R_LIBS_SITE" ":" = (,(getenv "R_LIBS_SITE")))
-                 `("PYTHONPATH"  ":" = (,(getenv "PYTHONPATH")))))
-             #t)))))
+    ;; parts of the tests rely on access to the network
+    (arguments '(#:tests? #f))
     (inputs
      `(("grep" ,grep)
        ("coreutils" ,coreutils)
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index eb1e433ba7..6e4e021180 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -500,7 +500,7 @@ board-independent tools.")))
                                                (string-drop-right file-name
                                                                   suffix-len))))
                                    (sort entries string-ci<)))
-                       #f)))))
+                       (error "Invalid boardname ~s." ,board))))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/busybox.scm b/gnu/packages/busybox.scm
index 6ef7200f9d..4cdea3a294 100644
--- a/gnu/packages/busybox.scm
+++ b/gnu/packages/busybox.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,7 +45,7 @@
      '(#:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda _ (zero? (system* "make" "defconfig"))))
+           (lambda _ (invoke "make" "defconfig")))
          (replace 'check
            (lambda _
              (substitute* '("testsuite/du/du-s-works"
@@ -71,18 +72,17 @@
              (delete-file "testsuite/which/which-uses-default-path")
              (rmdir "testsuite/which")
 
-             (zero? (system* "make"
-                             ;; "V=1"
-                             "SKIP_KNOWN_BUGS=1"
-                             "SKIP_INTERNET_TESTS=1"
-                             "check"))))
+             (invoke "make"
+                     ;; "V=1"
+                     "SKIP_KNOWN_BUGS=1"
+                     "SKIP_INTERNET_TESTS=1"
+                     "check")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (zero?
-                (system* "make"
-                         (string-append "CONFIG_PREFIX=" out)
-                         "install"))))))))
+               (invoke "make"
+                       (string-append "CONFIG_PREFIX=" out)
+                       "install")))))))
     (native-inputs `(("perl" ,perl) ; needed to generate the man pages (pod2man)
                      ;; The following are needed by the tests.
                      ("inetutils" ,inetutils)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 9cb0917dae..de3acaedc0 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -604,39 +604,40 @@ with the sfArk algorithm.")
     (license license:gpl3+)))
 
 (define-public sfarkxtc
- (let ((commit "b5e0a2ba3921f019d74d4b92bd31c36dd19d2cf1"))
-  (package
-    (name "sfarkxtc")
-    (version (string-take commit 10))
-    (source (origin
-              ;; There are no release tarballs, so we just fetch the latest
-              ;; commit at this time.
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/raboof/sfarkxtc.git")
-                    (commit commit)))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "0f5x6i46qfl6ry21s7g2p4sd4b2r1g4fb03yqi2vv4kq3saryhvj"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:tests? #f ;no "check" target
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (substitute* "Makefile"
-                      (("/usr/local") (assoc-ref outputs "out")))
-                    #t)))))
-    (inputs
-     `(("zlib" ,zlib)
-       ("sfarklib" ,sfarklib)))
-    (home-page "https://github.com/raboof/sfarkxtc")
-    (synopsis "Basic sfArk decompressor")
-    (description "SfArk extractor converts SoundFonts in the compressed legacy
+  (let ((commit "13cd6f93725a90d91ec5ea75babf1dbd694ac463")
+        (revision "1"))
+    (package
+      (name "sfarkxtc")
+      (version (git-version "0" revision commit))
+      (source (origin
+                ;; There are no release tarballs, so we just fetch the latest
+                ;; commit at this time.
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/raboof/sfarkxtc.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1mb1jyk1m11l1gppd9hmql9cyp55sdf7jk5rbc7acky1z4k4mv19"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f                    ;no "check" target
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'configure
+             (lambda* (#:key outputs #:allow-other-keys)
+               (substitute* "Makefile"
+                 (("/usr/local") (assoc-ref outputs "out")))
+               #t)))))
+      (inputs
+       `(("zlib" ,zlib)
+         ("sfarklib" ,sfarklib)))
+      (home-page "https://github.com/raboof/sfarkxtc")
+      (synopsis "Basic sfArk decompressor")
+      (description "SfArk extractor converts SoundFonts in the compressed legacy
 sfArk file format to the uncompressed sf2 format.")
-    (license license:gpl3+))))
+      (license license:gpl3+))))
 
 (define-public libmspack
   (package
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index a9cc3acba0..d365587022 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -23,29 +23,30 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages cups)
-  #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages fonts)     ; font-dejavu
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages groff)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages libusb)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pretty-print)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages scanner)
-  #:use-module (gnu packages image)
-  #:use-module (gnu packages fonts) ;font-dejavu
-  #:use-module (gnu packages fontutils)
-  #:use-module (gnu packages ghostscript)
-  #:use-module (gnu packages glib)
-  #:use-module (gnu packages pdf)
-  #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages tls)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
 
 (define-public cups-filters
   (package
@@ -379,14 +380,14 @@ device-specific programs to convert and print many types of files.")
 (define-public hplip
   (package
     (name "hplip")
-    (version "3.18.3")
+    (version "3.18.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/hplip/hplip/" version
                                   "/hplip-" version ".tar.gz"))
               (sha256
                (base32
-                "0x5xs86v18w46rxz5whc15bl4fb7p4km6xqjpwzclp83nl7rl01y"))
+                "0zbv6cp9n3xypf2fg4j6fpz8zkvl0z08lyc1vq1gd04ln1l3xkqf"))
               (modules '((guix build utils)))
               (snippet
                ;; Fix type mismatch.
@@ -396,8 +397,10 @@ device-specific programs to convert and print many types of files.")
                   #t))))
     (build-system gnu-build-system)
     (home-page "http://hplipopensource.com/")
-    (synopsis "HP Printer Drivers")
-    (description "Hewlett-Packard Printer Drivers and PPDs.")
+    (synopsis "HP printer drivers")
+    (description
+     "Hewlett-Packard printer drivers and PostScript Printer Descriptions
+(@dfn{PPD}s).")
 
     ;; The 'COPYING' file lists directories where each of these 3 licenses
     ;; applies.
@@ -424,7 +427,8 @@ device-specific programs to convert and print many types of files.")
          ,(string-append "--with-icondir="
                          (assoc-ref %outputs "out") "/share/applications")
          ,(string-append "--with-systraydir="
-                         (assoc-ref %outputs "out") "/etc/xdg"))
+                         (assoc-ref %outputs "out") "/etc/xdg")
+         "--enable-qt5" "--disable-qt4")
 
        #:imported-modules ((guix build python-build-system)
                            ,@%gnu-build-system-modules)
@@ -463,7 +467,7 @@ device-specific programs to convert and print many types of files.")
                            (string-append "hplip_confdir = " out
                                           "/etc/hp"))
                           (("halpredir = /usr/share/hal/fdi/preprobe/10osvendor")
-                           ;; Note: We don't use hal.
+                           ;; We don't use hal.
                            (string-append "halpredir = " out
                                           "/share/hal/fdi/preprobe/10osvendor"))
                           (("rulesdir = /etc/udev/rules.d")
@@ -477,23 +481,30 @@ device-specific programs to convert and print many types of files.")
                           (("/etc/sane.d")
                            (string-append out "/etc/sane.d"))))))
 
-                  ;; Wrap bin/* so that the Python libs are found.
+                  ;; Wrap bin/* so that the Python libraries are found.
                   (add-after 'install 'wrap-binaries
                     (assoc-ref python:%standard-phases 'wrap)))))
 
-    ;; Python3 support is available starting from hplip@3.15.2.
-    (inputs `(("libjpeg" ,libjpeg)
-              ("cups-minimal" ,cups-minimal)
-              ("libusb" ,libusb)
-              ("sane-backends" ,sane-backends-minimal)
-              ("zlib" ,zlib)
-              ("dbus" ,dbus)
-              ("python-wrapper" ,python-wrapper)
-              ("python" ,python)
-              ;; TODO: Make hp-setup find python-dbus.
-              ("python-dbus" ,python-dbus)))
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("perl" ,perl)))))
+    ;; Note that the error messages printed by the tools in the case of
+    ;; missing dependencies are often downright misleading.
+    ;; TODO: hp-toolbox still fails to start with:
+    ;;   from dbus.mainloop.pyqt5 import DBusQtMainLoop
+    ;;   ModuleNotFoundError: No module named 'dbus.mainloop.pyqt5'
+    (inputs
+     `(("cups-minimal" ,cups-minimal)
+       ("dbus" ,dbus)
+       ("libjpeg" ,libjpeg)
+       ("libusb" ,libusb)
+       ("python" ,python)
+       ("python-dbus" ,python-dbus)
+       ("python-pygobject" ,python-pygobject)
+       ("python-pyqt" ,python-pyqt)
+       ("python-wrapper" ,python-wrapper)
+       ("sane-backends" ,sane-backends-minimal)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("perl" ,perl)
+       ("pkg-config" ,pkg-config)))))
 
 (define-public foomatic-filters
   (package
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 4fce4b34ba..78479b2d32 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -190,7 +190,7 @@ high-volume and high-reliability applications. The name BIND stands for
              ;; Re-generate build files due to unbundling ltdl.
              ;; TODO: Prevent generating new libltdl and building it.
              ;; The system version is still favored and referenced.
-             (zero? (system* "autoreconf" "-vif")))))))
+             (invoke "autoreconf" "-vif"))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("automake" ,automake)
@@ -235,7 +235,7 @@ servers is included, and an up-to-date version is available at
        (modify-phases %standard-phases
          (add-after 'unpack 'create-configure
            (lambda _
-             (zero? (system* "make" "configure")))))))
+             (invoke "make" "configure"))))))
     (native-inputs
      `(("autoconf" ,autoconf)))
     (inputs
@@ -426,9 +426,9 @@ struct servent *getservbyport(int port, const char *proto) {
   }
   return s;
 }" port)))
-               (system* (string-append gcc "/bin/gcc")
-                        "-shared" "-fPIC" "-o" "/tmp/nss_preload.so"
-                        "/tmp/nss_preload.c")
+               (invoke (string-append gcc "/bin/gcc")
+                       "-shared" "-fPIC" "-o" "/tmp/nss_preload.so"
+                       "/tmp/nss_preload.c")
                ;; The preload library only affects the unittests.
                (substitute* "Makefile"
                  (("./unittest")
@@ -541,10 +541,9 @@ Extensions} (DNSSEC).")
              (let* ((out (assoc-ref outputs "out"))
                     (doc (string-append out "/share/doc/knot"))
                     (etc (string-append doc "/examples/etc")))
-               (zero?
-                (system* "make"
-                         (string-append "config_dir=" etc)
-                         "install")))))
+               (invoke "make"
+                       (string-append "config_dir=" etc)
+                       "install"))))
          (add-after 'install 'wrap-python-scripts
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/electronics.scm b/gnu/packages/electronics.scm
index 068aa23e36..af3ebeb805 100644
--- a/gnu/packages/electronics.scm
+++ b/gnu/packages/electronics.scm
@@ -146,7 +146,7 @@ as simple logic analyzer and/or oscilloscope hardware.")
                #t)))
          (add-after 'build 'build-doc
            (lambda _
-             (zero? (system* "doxygen"))))
+             (invoke "doxygen")))
          (add-after 'install 'install-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (copy-recursively "doxy/html-api"
@@ -158,7 +158,8 @@ as simple logic analyzer and/or oscilloscope hardware.")
              (install-file "contrib/60-libsigrok.rules"
                            (string-append
                             (assoc-ref outputs "out")
-                            "/lib/udev/rules.d/"))))
+                            "/lib/udev/rules.d/"))
+             #t))
          (add-after 'install-udev-rules 'install-fw
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((fx2lafw (assoc-ref inputs "sigrok-firmware-fx2lafw"))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index cdd72ec553..55aa5511df 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -108,6 +108,7 @@
   #:use-module (gnu packages password-utils)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages shells)
+  #:use-module (gnu packages gnupg)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match))
@@ -936,7 +937,8 @@ provides an optional IDE-like error list.")
                    (vorbis  (assoc-ref inputs "vorbis-tools"))
                    (alsa    (assoc-ref inputs "alsa-utils"))
                    (mpg321  (assoc-ref inputs "mpg321"))
-                   (mp3info (assoc-ref inputs "mp3info")))
+                   (mp3info (assoc-ref inputs "mp3info"))
+                   (opus    (assoc-ref inputs "opus-tools")))
                ;; Specify the installation directory.
                (substitute* "Makefile"
                  (("PREFIX=.*$")
@@ -961,6 +963,9 @@ provides an optional IDE-like error list.")
                  (emacs-substitute-variables "emms-info-ogginfo.el"
                    ("emms-info-ogginfo-program-name"
                     (string-append vorbis "/bin/ogginfo")))
+                 (emacs-substitute-variables "emms-info-opusinfo.el"
+                   ("emms-info-opusinfo-program-name"
+                    (string-append opus "/bin/opusinfo")))
                  (emacs-substitute-variables "emms-info-libtag.el"
                    ("emms-info-libtag-program-name"
                     (string-append out "/bin/emms-print-metadata")))
@@ -1009,7 +1014,8 @@ provides an optional IDE-like error list.")
               ("vorbis-tools" ,vorbis-tools)
               ("mpg321" ,mpg321)
               ("taglib" ,taglib)
-              ("mp3info" ,mp3info)))
+              ("mp3info" ,mp3info)
+              ("opus-tools" ,opus-tools)))
     (properties '((upstream-name . "emms")))
     (synopsis "Emacs Multimedia System")
     (description
@@ -1022,27 +1028,8 @@ light user interface.")
     (license license:gpl3+)))
 
 (define-public emacs-emms-player-mpv
-  (package
-    (name "emacs-emms-player-mpv")
-    (version "0.1.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/dochang/emms-player-mpv/archive/"
-                           version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32
-         "05qwbagc4i7yn7i94r1hdgj6wc5xijy1pxqv08pwsmli9rqj51n9"))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emms" ,emms)))
-    (home-page "https://github.com/dochang/emms-player-mpv/")
-    (synopsis "Mpv support for EMMS")
-    (description
-     "This package provides an EMMS player that uses mpv.  It supports pause
-and seeking.")
-    (license license:gpl3+)))
+  ;; A new mpv backend is included in Emms from 5.0.
+  (deprecated-package "emacs-emms-player-mpv" emms))
 
 (define-public emacs-emms-mode-line-cycle
   (package
@@ -4494,7 +4481,7 @@ the file buffer.")
 (define-public emacs-helm
   (package
     (name "emacs-helm")
-    (version "2.9.0")
+    (version "2.9.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4503,7 +4490,7 @@ the file buffer.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1798gn0za11cxdbi436javfczv4abniccxcl0jppl463r8lzb8is"))))
+                "1f7m09i8gr0gk5nw5dn7rpdz20dg3hl4p77dpygkhl82yhk9q2ql"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -5467,8 +5454,8 @@ Yasnippet.")
       (license license:gpl2+))))
 
 (define-public emacs-helm-system-packages
-  (let ((commit "986b7bd360a705053500c4ce2c9bea03dd7b24a6")
-        (revision "1"))
+  (let ((commit "b41f8f251695cf236e9d1627070049a5b41aa38a")
+        (revision "2"))
     (package
       (name "emacs-helm-system-packages")
       (version (git-version "1.9.0" revision commit))
@@ -5480,7 +5467,7 @@ Yasnippet.")
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "19iklhpxgh5xx6h4dysf58nd46lmyb46xj601lf7kbwl6yq0y61f"))))
+                  "1wrsx1j86c9a74nsdndjv21slzl46idd3p6wqy5wnasawj0kfn8r"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-helm" ,emacs-helm)))
@@ -9656,31 +9643,8 @@ time is being spent during Emacs startup in order to optimize startup time.")
     (license license:gpl3+)))
 
 (define-public emacs-emms-player-simple-mpv
-  (let ((commit "101d120ccdee1c2c213fd2f0423c858b21649c00")
-        (revision "1"))
-    (package
-      (name "emacs-emms-player-simple-mpv")
-      (version (string-append "0.4.0" "-" revision "."
-                              (string-take commit 7)))
-
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/momomo5717/emms-player-simple-mpv.git")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "1i6rxkm0ra0jbkkwgkwxg3vk5xfl794h1gkgnlpscynz0v94b6ll"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-emms" ,emms)))
-      (home-page "https://github.com/momomo5717/emms-player-simple-mpv")
-      (synopsis "Extension of @file{emms-player-simple.el} for mpv JSON IPC")
-      (description "@code{emms-player-simple-mpv} provides macros and
-functions for defining emms simple players of mpv.")
-      (license license:gpl3+))))
+  ;; A new mpv backend is included in Emms from 5.0.
+  (deprecated-package "emacs-emms-player-simple-mpv" emms))
 
 (define-public emacs-magit-org-todos-el
   (let ((commit "df206287737b9671f2e36ae7b1474ebbe9940d2a"))
@@ -11283,3 +11247,33 @@ their own face.  Threads can be displayed linearly (in which case e-mails are
 displayed in chronological order) or as an Org document where the node tree
 maps the thread tree.")
       (license license:gpl3+))))
+
+(define-public emacs-pinentry
+  (let ((commit "dcc9ba03252ee5d39e03bba31b420e0708c3ba0c")
+        (revision "1"))
+    (package
+      (name "emacs-pinentry")
+      (version (git-version "0.1" revision commit))
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append
+               "http://git.savannah.gnu.org/cgit/emacs/elpa.git/plain"
+               "/packages/pinentry/pinentry.el?id=" commit))
+         (file-name (string-append "pinentry.el"))
+         (sha256
+          (base32
+           "1lf30q6r8nz5cjzclbb9bbymsk2y75nskvb55hnjdv93gr3j0sik"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("gnupg" ,gnupg)))
+      (home-page "https://elpa.gnu.org/packages/pinentry.html")
+      (synopsis "GnuPG Pinentry server implementation")
+      (description
+       "This package allows GnuPG passphrase to be prompted through the
+minibuffer instead of graphical dialog.
+
+To use, add @code{allow-emacs-pinentry} to @code{~/.gnupg/gpg-agent.conf},
+reload the configuration with @code{gpgconf --reload gpg-agent}, and start the
+server with @code{M-x pinentry-start}.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/fltk.scm b/gnu/packages/fltk.scm
index af7186ab7f..e4eb2fcad0 100644
--- a/gnu/packages/fltk.scm
+++ b/gnu/packages/fltk.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
@@ -99,7 +99,7 @@ UI builder called FLUID that can be used to create applications in minutes.")
 (define-public ntk
   (package
     (name "ntk")
-    (version "1.3.0")
+    (version "1.3.1000")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -107,21 +107,20 @@ UI builder called FLUID that can be used to create applications in minutes.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "0ggrh6rihf676z1vfgpgcl6kpqwyh39ih0hskcgzklh7fphfik39"))
+                "0j38mhnfqy6swcrnc5zxcwlqi8b1pgklyghxk6qs1lf4japv2zc0"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
-       #:python ,python-2
        #:configure-flags '("--enable-gl")
        #:phases
        (modify-phases %standard-phases
-         (add-before
-          'configure 'set-ldflags
-          (lambda* (#:key outputs #:allow-other-keys)
-            (setenv "LDFLAGS"
-                    (string-append "-Wl,-rpath="
-                                   (assoc-ref outputs "out") "/lib")))))))
+         (add-before 'configure 'set-ldflags
+           (lambda* (#:key outputs #:allow-other-keys)
+             (setenv "LDFLAGS"
+                     (string-append "-Wl,-rpath="
+                                    (assoc-ref outputs "out") "/lib"))
+             #t)))))
     (inputs
      `(("libjpeg" ,libjpeg)
        ("glu" ,glu)))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 204f23a804..e9b68a7797 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -431,15 +431,19 @@ text in Simplified Chinese, Traditional Chinese, Japanese, and Korean.")
     (license license:silofl1.1)))
 
 (define-public font-cns11643
+  ;; Since upstream doesn't provide any version numbers, the date of the last
+  ;; edit is used, taken from https://data.gov.tw/dataset/5961
+  ;; XXX: The source is also updated in-place, so it may be desirable to mirror
+  ;; it elsewhere to avoid suddenly losing the current source file.
   (package
     (name "font-cns11643")
-    (version "98.1.20170524")
+    (version "98.1.20180605")
     (source (origin
               (method url-fetch)
               (uri "http://www.cns11643.gov.tw/AIDB/Open_Data.zip")
               (sha256
                (base32
-                "1iad6rklxkx03ji1fav9faq7cmqkci3i6pcyg2ilvh984j5qzhq3"))))
+                "000a9whrjr1cd4pjc23pbl60zwkq3wcb5g61p9qi7fn3hwkp0kyw"))))
     (build-system font-build-system)
     (home-page "http://www.cns11643.gov.tw/AIDB/welcome.do")
     (synopsis "CJK TrueType fonts, TW-Kai and TW-Sung")
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index 0a5568a016..5c461f9861 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -152,7 +152,7 @@ For synthesis, the compiler generates netlists in the desired format.")
              #t))
          (replace 'configure
            (lambda* (#:key inputs (make-flags '()) #:allow-other-keys)
-             (zero? (apply system* "make" "config-gcc" make-flags))))
+             (apply invoke "make" "config-gcc" make-flags)))
          (add-after 'configure 'prepare-abc
            (lambda* (#:key inputs #:allow-other-keys)
              (let* ((sourceabc (assoc-ref inputs "abc"))
@@ -163,7 +163,7 @@ For synthesis, the compiler generates netlists in the desired format.")
                      (lambda (port)
                        (format port ".PHONY: all\nall:\n\tcp -f abc abc-default\n")))
                    (copy-file source "abc/abc")
-                   (zero? (system* "chmod" "+w" "abc/abc")))))
+                   (invoke "chmod" "+w" "abc/abc"))))
           (add-before 'check 'fix-iverilog-references
              (lambda* (#:key inputs native-inputs #:allow-other-keys)
                (let* ((xinputs (or native-inputs inputs))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 65def5ae61..2ced2b51da 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -4422,7 +4422,7 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
 (define-public tome4
   (package
     (name "tome4")
-    (version "1.5.5")
+    (version "1.5.10")
     (synopsis "Single-player, RPG roguelike game set in the world of Eyal")
     (source
      (origin
@@ -4431,7 +4431,7 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
                            version ".tar.bz2"))
        (sha256
         (base32
-         "0v2qgdfpvdzd1bcbp9v8pfahj1bgczsq2d4xfhh5wg11jgjcwz03"))
+         "0mc5dgh2x9nbili7gy6srjhb23ckalf08wqq2amyjr5rq392jvd7"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -4453,9 +4453,10 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
     (arguments
      `(#:make-flags '("CC=gcc" "config=release")
        #:phases (modify-phases %standard-phases
+                  (delete 'bootstrap)
                   (replace 'configure
                     (lambda _
-                      (zero? (system* "premake4" "gmake"))
+                      (invoke "premake4" "gmake")
                       #t))
                   (add-after 'set-paths 'set-sdl-paths
                     (lambda* (#:key inputs #:allow-other-keys)
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index 628d285e45..3a16309618 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -48,7 +48,7 @@
 (define-public babl
   (package
     (name "babl")
-    (version "0.1.46")
+    (version "0.1.50")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://download.gimp.org/pub/babl/"
@@ -62,7 +62,7 @@
                                         "/babl-" version ".tar.bz2")))
               (sha256
                (base32
-                "0nwyhvfca6m35wjcccvwca7fcihzgdfyc012qi703y5d3cxl1hmv"))))
+                "0bavr2y4v88pip7vlca4kwmnksk2qxcvkkdp9jyfi6pzh701sb5m"))))
     (build-system gnu-build-system)
     (home-page "http://gegl.org/babl/")
     (synopsis "Image pixel format conversion library")
@@ -79,7 +79,7 @@ provided, as well as a framework to add new color models and data types.")
 (define-public gegl
   (package
     (name "gegl")
-    (version "0.4.0")
+    (version "0.4.2")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://download.gimp.org/pub/gegl/"
@@ -87,7 +87,7 @@ provided, as well as a framework to add new color models and data types.")
                                         "/" name "-" version ".tar.bz2")))
               (sha256
                (base32
-                "1ighk4z8nlqrzyj8w97s140hzj59564l3xv6fpzbr97m1zx2nkfh"))))
+                "13bzl0k5l12pk8bkcq4ar7wscbnw7jswhp34mwfsrf10kp0qndba"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("LDFLAGS=-lm")))
@@ -117,7 +117,7 @@ buffers.")
 (define-public gimp
   (package
     (name "gimp")
-    (version "2.10.0")
+    (version "2.10.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.gimp.org/pub/gimp/v"
@@ -125,10 +125,10 @@ buffers.")
                                   "/gimp-" version ".tar.bz2"))
               (sha256
                (base32
-                "1qkxaigbfkx26xym5nzrgfrmn97cbnhn63v1saaha2nbi3xrdk3z"))))
+                "1srkqd9cx1xmny7cyk3b6f14dknb3fd77whm38vlvr7grnpbmc0w"))))
     (build-system gnu-build-system)
     (outputs '("out"
-               "doc"))                            ;9 MiB of gtk-doc HTML
+               "doc"))                            ; 9 MiB of gtk-doc HTML
     (arguments
      '(#:configure-flags (list (string-append "--with-html-dir="
                                               (assoc-ref %outputs "doc")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index a21adf4f56..b9c1417186 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -4191,7 +4191,7 @@ a secret password store, an adblocker, and a modern UI.")
 (define-public epiphany
   (package
     (name "epiphany")
-    (version "3.28.2.1")
+    (version "3.28.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -4199,7 +4199,7 @@ a secret password store, an adblocker, and a modern UI.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0ba0qqsbg3cv1k1pcj971y7l8kqib5l7kbr743x9a7hbmkqfk95s"))))
+                "1xz6xl6b0iihvczyr0cs1z5ifvpai6anb4m0ng1caiph06klc1b9"))))
 
     (build-system meson-build-system)
     (arguments
@@ -6312,7 +6312,7 @@ fit the GNOME desktop.")
 (define-public gnome-dictionary
   (package
     (name "gnome-dictionary")
-    (version "3.24.0")
+    (version "3.26.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -6320,8 +6320,9 @@ fit the GNOME desktop.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1wnrpg8yndacq0xnzc84d519yp7f28brzklm3a48xcgs1i50drs1"))))
-    (build-system glib-or-gtk-build-system)
+                "007k2bq8iplg4psdpz074r5d4zxvn4s95qym4rw9hs6giljbrf0n"))))
+    (build-system meson-build-system)
+    (arguments '(#:glib-or-gtk? #t))
     (native-inputs
      `(("glib:bin" ,glib "bin")
        ("gobject-introspection" ,gobject-introspection)
@@ -7301,9 +7302,10 @@ mp3, Ogg Vorbis and FLAC")
                        ("gobject-introspection" ,gobject-introspection)
                        ("python2" ,python-2)))
       (synopsis "Tool to help prevent repetitive strain injury (RSI)")
-      (description "Workrave is a program that assists in the recovery and
-prevention of repetitive strain injury (RSI).  The program frequently alerts
-you to take micro-pauses, rest breaks and restricts you to your daily limit")
+      (description
+       "Workrave is a program that assists in the recovery and prevention of
+repetitive strain injury (@dfn{RSI}).  The program frequently alerts you to take
+micro-pauses and rest breaks, and restricts you to your daily limit.")
       (home-page "http://www.workrave.org")
       (license license:gpl3+))))
 
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index ea6ca2286c..3640d7640b 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -78,7 +78,8 @@
          (delete 'configure)
          (add-after 'patch-generated-file-shebangs 'chdir
            (lambda _
-             (chdir "src")))
+             (chdir "src")
+             #t))
          (add-before 'build 'prebuild
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib"))
@@ -160,7 +161,7 @@
                ;; Go 1.4's cgo will not work with binutils >= 2.27:
                ;; https://github.com/golang/go/issues/16906
                (setenv "CGO_ENABLED" "0")
-               (zero? (system* "sh" "all.bash")))))
+               (invoke "sh" "all.bash"))))
 
          (replace 'install
            (lambda* (#:key outputs inputs #:allow-other-keys)
@@ -343,7 +344,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                  (setenv "GOROOT" (dirname (getcwd)))
                  (setenv "GOROOT_FINAL" output)
                  (setenv "CGO_ENABLED" "1")
-                 (zero? (system* "sh" "all.bash")))))
+                 (invoke "sh" "all.bash"))))
 
            (replace 'install
              ;; TODO: Most of this could be factorized with Go 1.4.
@@ -374,7 +375,8 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                   '("README.md" "CONTRIBUTORS" "AUTHORS" "PATENTS"
                     "LICENSE" "VERSION" "CONTRIBUTING.md" "robots.txt"))
 
-                 (copy-recursively "../" output))))))))
+                 (copy-recursively "../" output)
+                 #t)))))))
     (native-inputs
      `(("go" ,go-1.4)
        ,@(package-native-inputs go-1.4)))
diff --git a/gnu/packages/gps.scm b/gnu/packages/gps.scm
index e913c25904..0555d831e3 100644
--- a/gnu/packages/gps.scm
+++ b/gnu/packages/gps.scm
@@ -193,7 +193,7 @@ coordinates as well as partial support for adjustments in global coordinate syst
            ;; Use lrelease to convert TS translation files into QM files.
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (for-each (lambda (file)
-                         (system* "lrelease" file))
+                         (invoke "lrelease" file))
                        (find-files "lang" "\\.ts"))
              (substitute* "src/config.h"
                (("/usr/share/gpxsee")
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 2e641c61c5..3718e939d1 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
-;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
@@ -285,7 +285,7 @@ functions which were removed.")
     (version "1.4.2")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://download.drobilla.net/ganv-"
+              (uri (string-append "https://download.drobilla.net/ganv-"
                                   version ".tar.bz2"))
               (sha256
                (base32
@@ -310,7 +310,7 @@ functions which were removed.")
     (native-inputs
      `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
        ("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/ganv/")
+    (home-page "https://drobilla.net/software/ganv/")
     (synopsis "GTK+ widget for interactive graph-like environments")
     (description
      "Ganv is an interactive GTK+ widget for interactive “boxes and lines” or
@@ -329,7 +329,7 @@ diagrams.")
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
-                      (url "http://git.drobilla.net/ganv.git")
+                      (url "https://git.drobilla.net/ganv.git")
                       (commit commit)))
                 (file-name (git-file-name name version))
                 (sha256
@@ -1411,7 +1411,7 @@ information.")
 (define-public gtk-doc
   (package
     (name "gtk-doc")
-    (version "1.25")
+    (version "1.27")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -1419,12 +1419,30 @@ information.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0hpxcij9xx9ny3gs9p0iz4r8zslw8wqymbyababiyl7603a6x90y"))))
+                "0vwsdl61nvnmqswlz5j9m4hg7qirhazwcikcnqf9nx0c13vx6sz2"))))
     (build-system gnu-build-system)
     (arguments
      `(#:parallel-tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-gtk-doc-scan
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "gtk-doc.xsl"
+              (("http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl")
+               (string-append (assoc-ref inputs "docbook-xsl")
+                              "/xml/xsl/docbook-xsl-"
+                              ,(package-version docbook-xsl)
+                              "/html/chunk.xsl")))
+             #t))
+         (add-after 'patch-gtk-doc-scan 'patch-test-out
+           (lambda _
+             ;; sanity.sh counts the number of status lines.  Since our
+             ;; texlive regenerates the fonts every time and the font
+             ;; generator metafont outputs a lot of extra lines, this
+             ;; test would always fail.  Disable it for now.
+             (substitute* "tests/Makefile.in"
+              (("empty.sh sanity.sh") "empty.sh"))
+             #t))
          (add-before 'build 'set-HOME
            (lambda _
              ;; FIXME: dblatex with texlive-union does not find the built
@@ -1445,7 +1463,15 @@ information.")
                 (string-append (car (find-files (assoc-ref inputs "docbook-xsl")
                                                 "^catalog.xml$"))
                                " \"http://docbook.sourceforge.net/release/xsl/")))
-             #t)))
+             #t))
+         (add-after 'install 'wrap-executables
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (lambda (prog)
+                           (wrap-program prog
+                             `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
+                         (find-files (string-append out "/bin")))
+               #t))))
        #:configure-flags
        (list (string-append "--with-xml-catalog="
                             (assoc-ref %build-inputs "docbook-xml")
@@ -1464,7 +1490,8 @@ information.")
        ("docbook-xml" ,docbook-xml-4.3)
        ("docbook-xsl" ,docbook-xsl)
        ("source-highlight" ,source-highlight)
-       ("glib" ,glib)))
+       ("glib" ,glib)
+       ("python-six" ,python-six)))
     (home-page "http://www.gtk.org/gtk-doc/")
     (synopsis "Documentation generator from C source code")
     (description
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 4cd26cf7f2..eea7e0f79a 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -2117,8 +2117,8 @@ It has a nice, simple s-expression based syntax.")
     (license license:gpl3+)))
 
 (define-public guile-simple-zmq
-  (let ((commit "d76657aeb1cd10ef8136edc06bb90999914c7c3c")
-        (revision "0"))
+  (let ((commit "1f3b7c0b9b249c6fde8e8a632b252d8a1b794424")
+        (revision "1"))
     (package
       (name "guile-simple-zmq")
       (version (git-version "0.0.0" revision commit))
@@ -2130,7 +2130,7 @@ It has a nice, simple s-expression based syntax.")
                (commit commit)))
          (sha256
           (base32
-           "1w73dy5gpyv33jn34dqlkqpwh9w4y8wm6hgvbpb3wbp6xsa2mk4z"))
+           "0nj2pd5bsmmgd3c54wh4sixfhmsv1arsq7yam2d7487h3n9q57r7"))
          (file-name (git-file-name name version))))
       (build-system trivial-build-system)
       (arguments
@@ -2195,9 +2195,10 @@ It has a nice, simple s-expression based syntax.")
                                             file go-file)))))
                        (list scm-file))
              #t))))
+      (inputs
+       `(("guile" ,guile-2.2)))
       (propagated-inputs
-       `(("guile" ,guile-2.2)
-         ("zeromq" ,zeromq)))
+       `(("zeromq" ,zeromq)))
       (home-page "https://github.com/jerry40/guile-simple-zmq")
       (synopsis "Guile wrapper over ZeroMQ library")
       (description
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index 993102f272..5a1df6d600 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -133,12 +133,11 @@ irssi, but graphical.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (setenv "CONFIG_SHELL" (which "bash"))
-               (zero?
-                (system* "./configure"
-                         (string-append "--prefix=" out)
-                         (string-append "--with-proxy")
-                         (string-append "--with-socks")
-                         (string-append "--with-bot")))))))))
+               (invoke "./configure"
+                       (string-append "--prefix=" out)
+                       (string-append "--with-proxy")
+                       (string-append "--with-socks")
+                       (string-append "--with-bot"))))))))
     (inputs
      `(("glib" ,glib)
        ("ncurses" ,ncurses)
@@ -405,21 +404,20 @@ other enhancements and bug fixes.")
                      '())
                (setenv "CONFIG_SHELL" (which "bash"))
                (setenv "SHELL" (which "bash"))
-               (zero?
-                (system* "./configure"
-                         (string-append "--prefix=" out)
-                         "--with-ipv6" "--with-libarchive"
-                         ;; We use libressl because openssl does not come
-                         ;; with the lib/libssl.a which is needed for epic5.
-                         ;; XXX: No matter which implementation is chosen,
-                         ;; epic5 fails to connect to tls ports of roundrobin
-                         ;; irc networks. This however is believed to be an
-                         ;; protocol issue at epic5 related to ircd.
-                         (string-append "--with-ssl="
-                                        (assoc-ref %build-inputs "libressl"))
-                         (string-append "--with-tcl="
-                                        (assoc-ref %build-inputs "tcl")
-                                        "/lib/tclConfig.sh")))))))))
+               (invoke "./configure"
+                       (string-append "--prefix=" out)
+                       "--with-ipv6" "--with-libarchive"
+                       ;; We use libressl because openssl does not come
+                       ;; with the lib/libssl.a which is needed for epic5.
+                       ;; XXX: No matter which implementation is chosen,
+                       ;; epic5 fails to connect to tls ports of roundrobin
+                       ;; irc networks. This however is believed to be an
+                       ;; protocol issue at epic5 related to ircd.
+                       (string-append "--with-ssl="
+                                      (assoc-ref %build-inputs "libressl"))
+                       (string-append "--with-tcl="
+                                      (assoc-ref %build-inputs "tcl")
+                                      "/lib/tclConfig.sh"))))))))
     (inputs
      `(("libressl" ,libressl)
        ("ncurses" ,ncurses)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 04342d3104..f48305132a 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -4091,7 +4091,9 @@ are many features, including:
                                   "commons-collections-" version "-src.tar.gz"))
               (sha256
                (base32
-                "055r51a5lfc3z7rkxnxmnn1npvkvda7636hjpm4qk7cnfzz98387"))))
+                "055r51a5lfc3z7rkxnxmnn1npvkvda7636hjpm4qk7cnfzz98387"))
+              (patches
+               (search-patches "java-commons-collections-fix-java8.patch"))))
     (arguments
       (substitute-keyword-arguments (package-arguments java-commons-collections4)
         ((#:phases phases)
@@ -7059,22 +7061,52 @@ it manages project dependencies, gives diffs jars, and much more.")
     (name "java-aqute-libg")
     (arguments
      `(#:jar-name "java-aqute-libg.jar"
-       #:source-dir "aQute.libg/src"
-       #:tests? #f)); FIXME: tests are in "aQute.libg/test", not in a java directory
+       ;; The build fails when source/target more recent than 1.7. This
+       ;; is a known issue. See: https://github.com/bndtools/bnd/issues/1327
+       ;;
+       ;; It is closed as won't fix. There is no way to change the source
+       ;; so that it works on 1.8, and still works on 1.6, the upstream
+       ;; target. It work fine on 1.7, so we use 1.7.
+       #:make-flags (list "-Dant.build.javac.source=1.7"
+                          "-Dant.build.javac.target=1.7")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           ;; Change to aQute.libg directory, so that the relative
+           ;; paths in the tests aren't broken.
+           (lambda _
+             (chdir "aQute.libg")
+             #t))
+         (add-before 'check 'create-test-directory
+           ;; Copy the test directory to test/java, since that's where
+           ;; ant-build-system's default project in build.xml expects to find
+           ;; the test classes. Leave a copy in the original place to not
+           ;; break paths in tests.
+           (lambda _
+             (mkdir "src/test")
+             (copy-recursively "test" "src/test/java")
+             #t)))))
     (inputs
      `(("slf4j" ,java-slf4j-api)
        ("osgi-annot" ,java-osgi-annotation)
        ("java-osgi-cmpn" ,java-osgi-cmpn)
-       ("osgi" ,java-osgi-core)))))
+       ("osgi" ,java-osgi-core)))
+    (native-inputs
+     `(("hamcrest" ,java-hamcrest-core)
+       ("java-junit" ,java-junit)))))
 
 (define java-aqute-libg-bootstrap
   (package
     (inherit java-aqute-libg)
     (name "java-aqute-libg-bootstrap")
+    (arguments
+     ;; Disable tests, at this stage of bootstrap we have no test frameworks.
+     `(#:tests? #f))
     (inputs
      `(("slf4j-bootstrap" ,java-slf4j-api-bootstrap)
        ,@(delete `("slf4j" ,java-slf4j-api)
-                 (package-inputs java-aqute-libg))))))
+                 (package-inputs java-aqute-libg))))
+    (native-inputs '())))
 
 (define-public java-aqute-bndlib
   (package
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 8c240b5990..7367b953f7 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -50,6 +50,7 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages attr)
+  #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
@@ -410,8 +411,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.50")
-(define %linux-libre-4.14-hash "19k7s33dyykm2vh1zpxxh3qrbjcx2p2md2r8s8z5mbv8yaldgvmj")
+(define %linux-libre-4.14-version "4.14.51")
+(define %linux-libre-4.14-hash "1ifczslgp3ng0948l5p0khcnfkv9i44mq0bzk1y8mwdhy4mik0b9")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -1060,7 +1061,7 @@ MIDI functionality to the Linux-based operating system.")
     ;; TODO: Remove OSS related plugins, they add support to run native
     ;; ALSA applications on OSS however we do not offer OSS and OSS is
     ;; obsolete.
-    (outputs '("out" "pulseaudio"))
+    (outputs '("out" "pulseaudio" "jack"))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -1068,9 +1069,17 @@ MIDI functionality to the Linux-based operating system.")
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Distribute the binaries to the various outputs.
              (let* ((out (assoc-ref outputs "out"))
+                    (jack (assoc-ref outputs "jack"))
+                    (jacklib (string-append jack "/lib/alsa-lib"))
                     (pua (assoc-ref outputs "pulseaudio"))
                     (pualib (string-append pua "/lib/alsa-lib"))
                     (puaconf (string-append pua "/share/alsa/alsa.conf.d")))
+               ;; For jack.
+               (mkdir-p jacklib)
+               (for-each (lambda (file)
+                           (rename-file file (string-append jacklib "/" (basename file))))
+                         (find-files out ".*jack\\.(la|so)"))
+               ;; For pluseaudio.
                (mkdir-p puaconf)
                (mkdir-p pualib)
                (chdir (string-append out "/share"))
@@ -1087,6 +1096,7 @@ MIDI functionality to the Linux-based operating system.")
                #t))))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
+       ("jack" ,jack-1)
        ("speex" ,speex) ; libspeexdsp resampling plugin
        ("libsamplerate" ,libsamplerate) ; libsamplerate resampling plugin
        ("ffmpeg" ,ffmpeg) ; libavcodec resampling plugin, a52 plugin
@@ -3929,7 +3939,7 @@ under OpenGL graphics workloads.")
 (define-public efivar
   (package
     (name "efivar")
-    (version "36")
+    (version "35")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rhinstaller/" name
@@ -3937,7 +3947,7 @@ under OpenGL graphics workloads.")
                                   "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0cqdikspdmj7imc646q0k7hhw10r8spxa22zm1w0ji49131crgwl"))))
+                "153k2ifyl4giz5fkryxhz8z621diqjy7v25hfga4z94rs32ks0qy"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Tests require a UEFI system and is not detected in the chroot.
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 258e9827a5..720ac070cc 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -944,18 +944,19 @@ from other CLXes around the net.")
 (define-public sbcl-stumpwm
   (package
     (name "sbcl-stumpwm")
-    (version "1.0.0")
+    (version "18.05")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://github.com/stumpwm/stumpwm/archive/"
                     version ".tar.gz"))
               (sha256
-               (base32 "1maxp98gh64az3d9vz9br6zdd6rc9fmj2imvax4by85g6kxvdz1i"))
+               (base32 "1n2gaab3lwgf5r1hmwdcw13dkv9xdd7drn2shx28kfxvhdc9kbb9"))
               (file-name (string-append "stumpwm-" version ".tar.gz"))))
     (build-system asdf-build-system/sbcl)
     (inputs `(("cl-ppcre" ,sbcl-cl-ppcre)
-              ("clx" ,sbcl-clx)))
+              ("clx" ,sbcl-clx)
+              ("alexandria" ,sbcl-alexandria)))
     (outputs '("out" "lib"))
     (arguments
      '(#:phases
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index f50a2f1cbb..665b384b95 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -86,7 +86,7 @@ staying as close to their API as is reasonable.")
                       ;; mismatch, so run the whole thing.
                       (delete-file "test-driver")
                       (delete-file "configure")   ;it's read-only
-                      (zero? (system* "autoreconf" "-vfi"))))
+                      (invoke "autoreconf" "-vfi")))
                   (add-before 'check 'disable-signal-tests
                     (lambda _
                       ;; See e.g. https://github.com/google/glog/issues/219
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 57d589721a..bf77b0a7fe 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -517,7 +517,7 @@ and corrections.  It is based on a Bayesian filter.")
              (substitute* "docs/Makefile"
                ;; Prevent xmllint and xsltproc from downloading a DTD file.
                (("a2x -v") "a2x --no-xmllint --xsltproc-opts=--nonet -v"))
-             (zero? (system* "make" "-C" "docs" "man"))))
+             (invoke "make" "-C" "docs" "man")))
          (add-after 'install 'install-documentation
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -795,12 +795,10 @@ invoking @command{notifymuch} from the post-new hook.")
                              (elisp
                               (string-append out "/share/emacs/site-lisp/guix.d/"
                                              ,name "-" ,version)))
-                        (zero?
-                         (system*
-                          "./configure"
-                          (string-append "--prefix=" out)
-                          (string-append "--emacslispdir=" elisp)
-                          (string-append "--emacsetcdir=" elisp))))))
+                        (invoke "./configure"
+                                (string-append "--prefix=" out)
+                                (string-append "--emacslispdir=" elisp)
+                                (string-append "--emacsetcdir=" elisp)))))
                   (add-before 'check 'prepare-test-environment
                     (lambda _
                       (setenv "TEST_CC" "gcc")
@@ -977,7 +975,7 @@ useful features.")
           (add-after 'unpack 'autogen
             (lambda _
               (setenv "NOCONFIGURE" "true")
-              (zero? (system* "sh" "autogen.sh")))))
+              (invoke "sh" "autogen.sh"))))
         #:configure-flags
         '("--disable-static" "--disable-db")))
     (home-page "http://www.etpan.org/libetpan.html")
@@ -1273,7 +1271,9 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0rkk10b1bsjz979sc864vpgcdchy7yxwmyv4ik50lar1h6awdnrf"))))
+         "0rkk10b1bsjz979sc864vpgcdchy7yxwmyv4ik50lar1h6awdnrf"))
+       (patches
+        (search-patches "dovecot-trees-support-dovecot-2.3.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("automake" ,automake)
@@ -1292,7 +1292,7 @@ It supports mbox/Maildir and its own dbox/mdbox formats.")
        (modify-phases %standard-phases
          (add-after 'unpack 'autogen
            (lambda _
-             (zero? (system* "sh" "autogen.sh")))))))
+             (invoke "sh" "autogen.sh"))))))
     (home-page "https://0xacab.org/riseuplabs/trees")
     (synopsis "NaCL-based Dovecot email storage encryption plugin")
     (description
@@ -1348,7 +1348,7 @@ using lidsodium sealed boxes.
          (modify-phases %standard-phases
            (add-after 'unpack 'autogen
              (lambda _
-               (zero? (system* "sh" "autogen.sh")))))))
+               (invoke "sh" "autogen.sh"))))))
       (home-page "https://github.com/LuckyFellow/dovecot-libsodium-plugin")
       (synopsis "Libsodium password hashing schemes plugin for Dovecot")
       (description
@@ -1955,14 +1955,15 @@ define(`confLIBS', `-lresolv')
 define(`confINSTALL', `~a/devtools/bin/install.sh')
 define(`confDEPEND_TYPE', `CC-M')
 define(`confINST_DEP', `')
-" (getcwd))))))
+" (getcwd))))
+             #t))
          (replace 'build
            (lambda _
-             (and (zero? (system* "sh" "Build"))
-                  (with-directory-excursion "cf/cf"
-                    (begin
-                      (copy-file "generic-linux.mc" "sendmail.mc")
-                      (zero? (system* "sh" "Build" "sendmail.cf")))))))
+             (invoke "sh" "Build")
+             (with-directory-excursion "cf/cf"
+               (copy-file "generic-linux.mc" "sendmail.mc")
+               (invoke "sh" "Build" "sendmail.cf"))
+             #t))
          (add-before 'install 'pre-install
            (lambda _
              (let ((out (assoc-ref %outputs "out")))
@@ -1971,7 +1972,8 @@ define(`confINST_DEP', `')
                (mkdir-p (string-append out "/etc/mail"))
                (setenv "DESTDIR" out)
                (with-directory-excursion "cf/cf"
-                 (zero? (system* "sh" "Build" "install-cf")))))))
+                 (invoke "sh" "Build" "install-cf"))
+               #t))))
        ;; There is no make check.  There are some post installation tests, but those
        ;; require root privileges
        #:tests? #f))
@@ -2223,12 +2225,10 @@ installation on systems where resources are limited.  Its features include:
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (zero?
-              (system*
-               "django-admin"
-               "test"
-               "--settings=django_mailman3.tests.settings_test"
-               "django_mailman3")))))
+             (invoke "django-admin"
+                     "test"
+                     "--settings=django_mailman3.tests.settings_test"
+                     "django_mailman3"))))
        #:python ,python-2))
     (inputs
      `(("python2-django" ,python2-django)))
diff --git a/gnu/packages/maven.scm b/gnu/packages/maven.scm
index 0feb01f040..f63fcee6b2 100644
--- a/gnu/packages/maven.scm
+++ b/gnu/packages/maven.scm
@@ -23,6 +23,7 @@
   #:use-module (guix utils)
   #:use-module (guix build-system ant)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages java)
   #:use-module (gnu packages web)
@@ -1079,6 +1080,18 @@ generally generated from plugin sources using maven-plugin-plugin.")))
              (mkdir-p "build/classes/")
              (copy-recursively "src/main/resources" "build/classes")
              #t))
+         (add-after 'copy-resources 'fill-properties
+           (lambda _
+             ;; This file controls the output of some mvn subcommands, such as
+             ;; mvn -version.
+             (substitute* "build/classes/org/apache/maven/messages/build.properties"
+               (("\\$\\{buildNumber\\}") "guix_build")
+               (("\\$\\{timestamp\\}") "0")
+               (("\\$\\{project.version\\}") ,(package-version maven-artifact))
+               (("\\$\\{distributionId\\}") "apache-maven")
+               (("\\$\\{distributionShortName\\}") "Maven")
+               (("\\$\\{distributionName\\}") "Apache Maven"))
+             #t))
          (add-before 'build 'generate-sisu-named
            (lambda _
              (mkdir-p "build/classes/META-INF/sisu")
@@ -1502,6 +1515,9 @@ layer for plugins that need to keep Maven2 compatibility.")))
        ("java-slf4j-api" ,java-slf4j-api)
        ;; TODO: replace with maven-slf4j-provider
        ("java-slf4j-simple" ,java-slf4j-simple)))
+    (propagated-inputs
+     `(("coreutils" ,coreutils)
+       ("which" ,which)))
     (description "Apache Maven is a software project management and comprehension
 tool.  Based on the concept of a project object model: builds, dependency
 management, documentation creation, site publication, and distribution
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index daefbc57fa..824b03dc0c 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 nee <nee.git@hidamari.blue>
 ;;; Copyright © 2018 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2018 Pierre Neidhardt <ambrevar@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,10 +42,12 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (guix build-system scons)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system waf)
+  #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages apr)
@@ -554,14 +557,14 @@ MusePack, Monkey's Audio, and WavPack files.")
     (name "extempore")
     (version "0.7.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/digego/extempore/archive/"
-                    version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/digego/extempore.git")
+                    (commit version)))
               (sha256
                (base32
-                "1wap1mvsicrhlazikf7l8zxg37fir8bmnh9rin28m1rix730vcch"))
-              (file-name (string-append name "-" version ".tar.gz"))))
+                "12fsp7zkfxb9kykwq46l88kcbbici9arczrrsl4qn87m6vm5349l"))
+              (file-name (string-append name "-" version "-checkout"))))
     (build-system cmake-build-system)
     (arguments
      `(;; The default target also includes ahead-of-time compilation of the
@@ -918,8 +921,8 @@ Guile.")
 (define-public non-sequencer
   ;; The latest tagged release is three years old and uses a custom build
   ;; system, so we take the last commit.
-  (let ((commit "10c31e57291b6e42be53371567a722b62b32d220")
-        (revision "3"))
+  (let ((commit "5ae43bb27c42387052a73e5ffc5d33efb9d946a9")
+        (revision "4"))
     (package
       (name "non-sequencer")
       (version (string-append "1.9.5-" revision "." (string-take commit 7)))
@@ -930,7 +933,7 @@ Guile.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "080rha4ffp7qycyg1mqcf4vj0s7z8qfvz6bxm0w29xgg2kkmb3fx"))
+                  "1cljkkyi9dxqpqhx8y6l2ja4zjmlya26m26kqxml8gx08vyvddhx"))
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system waf-build-system)
       (arguments
@@ -3196,7 +3199,7 @@ plugins, a switch trigger, a toggle switch, and a peakmeter.")
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "http://git.drobilla.net/ingen.git")
+               (url "https://git.drobilla.net/ingen.git")
                (commit commit)))
          (file-name (string-append name "-" version "-checkout"))
          (sha256
@@ -3257,7 +3260,7 @@ plugins, a switch trigger, a toggle switch, and a peakmeter.")
       (native-inputs
        `(("pkg-config" ,pkg-config)
          ("python-pygments" ,python-pygments)))
-      (home-page "http://drobilla.net/software/ingen")
+      (home-page "https://drobilla.net/software/ingen")
       (synopsis "Modular audio processing system")
       (description "Ingen is a modular audio processing system for JACK and
 LV2 based systems.  Ingen is built around LV2 technology and a strict
@@ -3781,32 +3784,43 @@ notation and includes basic support for digital audio.")
     (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
+  ;; There have been no releases for more than a year.
+  (let ((commit "a0b0b1e791f4574d5abd059cfe1819c71e8b18d5")
+        (revision "1"))
+    (package
+      (name "patchmatrix")
+      (version (git-version "0.12.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/OpenMusicKontrollers/patchmatrix.git")
+                      (commit commit)))
+                (file-name (string-append "patchmatrix-" version "-checkout"))
+                (sha256
+                 (base32
+                  "0pph4ra7aci3rbpqvvr564pi16vxrk448bmvp8985cd9lbjlrp3m"))))
+      (build-system meson-build-system)
+      (arguments
+       '(#:tests? #f          ; no test target
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'reset-gzip-timestamps 'make-gzip-archive-writable
+             (lambda* (#:key outputs #:allow-other-keys)
+               (map make-file-writable
+                    (find-files (assoc-ref outputs "out") ".*\\.gz$"))
+               #t)))))
+      (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)))
+      (license license:artistic2.0))))
 
 (define-public sorcer
   (package
@@ -4004,3 +4018,70 @@ ISRCs and the MCN (=UPC/EAN) from disc.")
 mb_client, is a development library geared towards developers who wish to add
 MusicBrainz lookup capabilities to their applications.")
     (license license:lgpl2.1+)))
+
+(define-public clyrics
+  (package
+    (name "clyrics")
+    (version "0.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/trizen/clyrics/archive/"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1l0cg26afnjv8cgk0jbiavbyvq55q1djyigzmi526rpcjjwq9jwn"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system trivial-build-system)
+    (native-inputs `(("tar" ,tar)
+                     ("gzip" ,gzip)))
+    (inputs
+     `(("bash" ,bash)                             ;for the wrapped program
+       ("perl" ,perl)
+       ("perl-www-mechanize" ,perl-www-mechanize)
+       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
+       ;; Required or else LWP will fail with "GET https://www.google.com/ ==>
+       ;; 500 Can't verify SSL peers without knowing which Certificate
+       ;; Authorities to trust".
+       ("perl-mozilla-ca" ,perl-mozilla-ca)))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder (begin
+                   (use-modules (guix build utils)
+                                (ice-9 match)
+                                (srfi srfi-26))
+                   (let* ((source (assoc-ref %build-inputs "source"))
+                          (tar (assoc-ref %build-inputs "tar"))
+                          (gzip (assoc-ref %build-inputs "gzip"))
+                          (output (assoc-ref %outputs "out")))
+                     (setenv "PATH"
+                             (string-append
+                              (assoc-ref %build-inputs "gzip") "/bin" ":"
+                              (assoc-ref %build-inputs "bash") "/bin" ":"
+                              (assoc-ref %build-inputs "perl") "/bin" ":"))
+                     (invoke (string-append tar "/bin/tar") "xvf"
+                             source)
+                     (chdir ,(string-append "clyrics-" version))
+                     (patch-shebang "clyrics")
+                     (substitute* "clyrics"
+                       (("/usr/share") output))
+                     (install-file "clyrics" (string-append output "/bin"))
+                     (wrap-program (string-append output "/bin/clyrics")
+                       `("PERL5LIB" ":" =
+                         ,(delete
+                           ""
+                           (map (match-lambda
+                                  (((?  (cut string-prefix? "perl-" <>) name) . dir)
+                                   (string-append dir "/lib/perl5/site_perl"))
+                                  (_ ""))
+                                %build-inputs))))
+                     (copy-recursively "plugins" (string-append output "/clyrics"))
+                     #t))))
+    (home-page "https://github.com/trizen/clyrics")
+    (synopsis "Extensible lyrics fetcher")
+    (description
+     "Clyrics is an extensible command-line tool to fetch the lyrics of songs.
+It can be used in daemon mode along with the Music-on-Console (MOC) and cmus
+console music players.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 1a79066eac..d1de7a536c 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -46,7 +47,7 @@
     (version "9.11.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://nodejs.org/dist/v" version
+              (uri (string-append "https://nodejs.org/dist/v" version
                                   "/node-v" version ".tar.gz"))
               (sha256
                (base32
@@ -64,7 +65,7 @@
                               "deps/uv"
                               "deps/zlib"))
                   (substitute* "Makefile"
-                    ;; Remove references to bundled software
+                    ;; Remove references to bundled software.
                     (("deps/http_parser/http_parser.gyp") "")
                     (("deps/uv/include/\\*.h") "")
                     (("deps/uv/uv.gyp") "")
@@ -138,10 +139,10 @@
                ;; Node's configure script expects the CC environment variable to
                ;; be set.
                (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-               (zero? (apply system*
-                             (string-append (assoc-ref inputs "python")
-                                            "/bin/python")
-                             "configure" flags)))))
+               (apply invoke
+                      (string-append (assoc-ref inputs "python")
+                                     "/bin/python")
+                      "configure" flags))))
          (add-after 'patch-shebangs 'patch-npm-shebang
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((bindir (string-append (assoc-ref outputs "out")
@@ -176,6 +177,6 @@ for easily building fast, scalable network applications.  Node.js uses an
 event-driven, non-blocking I/O model that makes it lightweight and efficient,
 perfect for data-intensive real-time applications that run across distributed
 devices.")
-    (home-page "http://nodejs.org/")
+    (home-page "https://nodejs.org/")
     (license expat)
     (properties '((timeout . 3600))))) ; 1 h
diff --git a/gnu/packages/opencl.scm b/gnu/packages/opencl.scm
new file mode 100644
index 0000000000..b31fa09474
--- /dev/null
+++ b/gnu/packages/opencl.scm
@@ -0,0 +1,120 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
+;;;
+;;; 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 opencl)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages python))
+
+;; This file adds OpenCL implementation related packages. Due to the fact that
+;; OpenCL devices are not available during build (store environment), tests are
+;; all disabled.
+;; Check https://lists.gnu.org/archive/html/guix-devel/2018-04/msg00293.html
+
+(define (make-opencl-headers major-version subversion)
+  (let ((commit "e986688daf750633898dfd3994e14a9e618f2aa5")
+        (revision "0"))
+    (package
+      (name "opencl-headers")
+      (version (git-version
+                (string-append major-version "." subversion ".0")
+                revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/KhronosGroup/OpenCL-Headers.git")
+                      (commit commit)))
+                (file-name (string-append name "-" commit))
+                (sha256
+                 (base32
+                  "176ydpbyws5nr4av6hf8p41pkhc0rc4m4vrah9w6gp2fw2i32838"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (delete 'build)
+           (delete 'check)
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (copy-recursively (string-append "./opencl" (string-append
+                                                            ,major-version
+                                                            ,subversion) "/CL")
+                                 (string-append
+                                  (assoc-ref outputs "out")
+                                  "/include/CL")))))))
+      (synopsis "The Khronos OpenCL headers")
+      (description
+       "This package provides the C headers by Khronos for OpenCL
+programming.")
+      (home-page "https://www.khronos.org/registry/OpenCL/")
+      (license license:expat))))
+
+(define-public opencl-headers-2.2
+  (make-opencl-headers "2" "2"))
+(define-public opencl-headers-2.1
+  (make-opencl-headers "2" "1"))
+(define-public opencl-headers-2.0
+  (make-opencl-headers "2" "0"))
+(define-public opencl-headers-1.2
+  (make-opencl-headers "1" "2"))
+(define-public opencl-headers-1.1
+  (make-opencl-headers "1" "1"))
+(define-public opencl-headers-1.0
+  (make-opencl-headers "1" "0"))
+
+(define-public opencl-headers opencl-headers-2.2)
+
+(define-public opencl-clhpp
+  (package
+    (name "opencl-clhpp")
+    (version "2.0.10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/KhronosGroup/OpenCL-CLHPP/archive/v"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0awg6yznbz3h285kmnd47fykx2qa34a07sr4x1657yn3jmi4a9zs"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (native-inputs
+     `(("python" ,python-wrapper)))
+    (propagated-inputs
+     `(("opencl-headers" ,opencl-headers)))
+    (arguments
+     `(#:configure-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list
+          "-DBUILD_EXAMPLES=OFF"
+          "-DBUILD_TESTS=OFF"
+          (string-append "-DCMAKE_INSTALL_PREFIX="
+                         (assoc-ref %outputs "out")
+                         "/include")))
+       ;; regression tests requires a lot more dependencies
+       #:tests? #f))
+    (build-system cmake-build-system)
+    (home-page "http://github.khronos.org/OpenCL-CLHPP/")
+    (synopsis "Khronos OpenCL-CLHPP")
+    (description
+     "This package provides the @dfn{host API} C++ headers for OpenCL.")
+    (license license:expat)))
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 716b433443..cb27f49c07 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,7 +48,7 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20180522")
+    (version "20180622")
     (source
      (origin
       (method url-fetch)
@@ -55,7 +56,7 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1khcz9pm7rjnq4gw8pn30k1d40x337a204dxj4y4qijpx8m7w0gb"))))
+        "1n91dnnl8d8pman20hr03l9qrpc9wm5hw32ph45xjs0bgp1nmk7j"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -68,13 +69,20 @@
                   ;; Patch hard coded '/bin/sh' in the lin ending in:
                   ;; $Global::shell = $ENV{'PARALLEL_SHELL'} ||
                   ;;  parent_shell($$) || $ENV{'SHELL'} || "/bin/sh";
-                  (("/bin/sh\\\";\n$") (string-append (which "sh") "\";\n"))
-                  ;; Patch call to 'ps' and 'perl' commands.
-                  ((" ps ") (string-append " " (which "ps") " "))
-                  ((" perl -") (string-append " " (which "perl") " -"))))
+                  (("/bin/sh\\\";\n$") (string-append (which "sh") "\";\n"))))
               (list "src/parallel" "src/sem"))
              #t))
-         (add-after 'install 'post-install-test
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/parallel")
+                 `("PATH" ":" prefix
+                   ,(map (lambda (input)
+                           (string-append (assoc-ref inputs input) "/bin"))
+                         '("perl"
+                           "procps"))))
+               #t)))
+         (add-after 'wrap-program 'post-install-test
            (lambda* (#:key outputs #:allow-other-keys)
              (invoke (string-append
                       (assoc-ref outputs "out") "/bin/parallel")
diff --git a/gnu/packages/patches/dovecot-trees-support-dovecot-2.3.patch b/gnu/packages/patches/dovecot-trees-support-dovecot-2.3.patch
new file mode 100644
index 0000000000..314f6b6de0
--- /dev/null
+++ b/gnu/packages/patches/dovecot-trees-support-dovecot-2.3.patch
@@ -0,0 +1,60 @@
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Mon, 25 Jun 2018 00:34:52 +0200
+Subject: dovecot-trees: Fix build with dovecot 2.3.
+
+The following patch was taken verbatim from the upstream repository[0]
+and will be included in the next release.
+
+[0]: https://0xacab.org/riseuplabs/trees/commit/e136c32a044701d68b0235b8405357c5fca62a11
+---
+From e136c32a044701d68b0235b8405357c5fca62a11 Mon Sep 17 00:00:00 2001
+From: David Goulet <dgoulet@ev0ke.net>
+Date: Tue, 10 Apr 2018 13:48:01 -0400
+Subject: [PATCH] Support dovecot 2.3
+
+Untested but it builds now properly. Thanks to "smorks" for the report!
+
+Fixes #16
+
+Signed-off-by: David Goulet <dgoulet@ev0ke.net>
+---
+ src/trees-istream.c | 4 ++++
+ src/trees-ostream.c | 7 +++++++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/src/trees-istream.c b/src/trees-istream.c
+index b08ff16..e94be7d 100644
+--- a/src/trees-istream.c
++++ b/src/trees-istream.c
+@@ -431,5 +431,9 @@ trees_istream_create(struct istream *input,
+   sstream->out_byte_count = 0;
+ #endif
+ 
++#if DOVECOT_PREREQ(2, 3)
++	return i_stream_create(&sstream->istream, input, i_stream_get_fd(input), 0);
++#else
+   return i_stream_create(&sstream->istream, input, i_stream_get_fd(input));
++#endif /* DOVECOT_PREREQ */
+ }
+diff --git a/src/trees-ostream.c b/src/trees-ostream.c
+index 1b25a91..0cb7867 100644
+--- a/src/trees-ostream.c
++++ b/src/trees-ostream.c
+@@ -174,7 +174,14 @@ trees_ostream_sendv(struct ostream_private *stream,
+ static int
+ trees_ostream_flush(struct ostream_private *stream)
+ {
++  /* This is pretty ugly but unfortunately between 2.2 and 2.3, Dovecot changed
++   * the expected value to be non zero in 2.3+ . */
++#if DOVECOT_PREREQ(2, 3)
++  ssize_t result = 1;
++#else
+   ssize_t result = 0;
++#endif /* DOVECOT_PREREQ */
++
+   struct trees_ostream *sstream = (struct trees_ostream *) stream;
+ 
+   if (sstream->flushed) {
+-- 
+2.17.1
+
diff --git a/gnu/packages/patches/java-commons-collections-fix-java8.patch b/gnu/packages/patches/java-commons-collections-fix-java8.patch
new file mode 100644
index 0000000000..322fd7f699
--- /dev/null
+++ b/gnu/packages/patches/java-commons-collections-fix-java8.patch
@@ -0,0 +1,299 @@
+From e760d181abd20ecb98654af63faec7b2a4d61189 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?G=C3=A1bor=20Boskovits?= <boskovits@gmail.com>
+Date: Mon, 25 Jun 2018 15:02:25 +0200
+Subject: [PATCH] Rename removes in maps to fix java8.
+
+* src/java/org/apache/commons/collections/MultiHashMap.java:
+Rename "V MultiHashMap#remove(K, V)"
+to "boolean MulitHashMap#removeMapping(K, V)".
+* src/java/org/apache/commons/collections/MultiMap.java:
+Rename "V MultiMap#remove(K, V)"
+to "boolean MultiMap#removeMapping(K, V)".
+* src/java/org/apache/commons/collections/map/MultiKeyMap.java:
+Rename "V MultiKeyMap#remove(...)"
+to "V MultiKeyMap#removeMultiKey(...)".
+* src/java/org/apache/commons/collections/map/MultiValueMap.java:
+Rename "V MultiValueMap#remove(K, V)"
+to "boolean MultiValueMap#removeMapping(K, V)".
+* src/test/org/apache/commons/collections/TestMultiHashMap.java:
+Adjust accordingly.
+* src/test/org/apache/commons/collections/map/TestMultiKeyMap.java:
+Adjust accordingly.
+* src/test/org/apache/commons/collections/map/TestMultiValueMap.java:
+Adjust accordingly.
+---
+ .../commons/collections/MultiHashMap.java      |  8 ++++----
+ .../apache/commons/collections/MultiMap.java   |  2 +-
+ .../commons/collections/map/MultiKeyMap.java   |  8 ++++----
+ .../commons/collections/map/MultiValueMap.java |  8 ++++----
+ .../commons/collections/TestMultiHashMap.java  | 16 ++++++++--------
+ .../collections/map/TestMultiKeyMap.java       | 16 ++++++++--------
+ .../collections/map/TestMultiValueMap.java     | 18 +++++++++---------
+ 7 files changed, 38 insertions(+), 38 deletions(-)
+
+diff --git a/src/java/org/apache/commons/collections/MultiHashMap.java b/src/java/org/apache/commons/collections/MultiHashMap.java
+index 7fec9af..482ecbd 100644
+--- a/src/java/org/apache/commons/collections/MultiHashMap.java
++++ b/src/java/org/apache/commons/collections/MultiHashMap.java
+@@ -331,21 +331,21 @@ public class MultiHashMap extends HashMap implements MultiMap {
+      * @param item  the value to remove
+      * @return the value removed (which was passed in), null if nothing removed
+      */
+-    public Object remove(Object key, Object item) {
++    public boolean removeMapping(Object key, Object item) {
+         Collection valuesForKey = getCollection(key);
+         if (valuesForKey == null) {
+-            return null;
++            return false;
+         }
+         boolean removed = valuesForKey.remove(item);
+         if (removed == false) {
+-            return null;
++            return false;
+         }
+         // remove the list if it is now empty
+         // (saves space, and allows equals to work)
+         if (valuesForKey.isEmpty()){
+             remove(key);
+         }
+-        return item;
++        return true;
+     }
+ 
+     /**
+diff --git a/src/java/org/apache/commons/collections/MultiMap.java b/src/java/org/apache/commons/collections/MultiMap.java
+index be9455b..fe54234 100644
+--- a/src/java/org/apache/commons/collections/MultiMap.java
++++ b/src/java/org/apache/commons/collections/MultiMap.java
+@@ -66,7 +66,7 @@ public interface MultiMap extends Map {
+      * @throws ClassCastException if the key or value is of an invalid type
+      * @throws NullPointerException if the key or value is null and null is invalid
+      */
+-    public Object remove(Object key, Object item);
++    public boolean removeMapping(Object key, Object item);
+ 
+     //-----------------------------------------------------------------------
+     /**
+diff --git a/src/java/org/apache/commons/collections/map/MultiKeyMap.java b/src/java/org/apache/commons/collections/map/MultiKeyMap.java
+index 9e3e02d..0b99b65 100644
+--- a/src/java/org/apache/commons/collections/map/MultiKeyMap.java
++++ b/src/java/org/apache/commons/collections/map/MultiKeyMap.java
+@@ -197,7 +197,7 @@ public class MultiKeyMap
+      * @param key2  the second key
+      * @return the value mapped to the removed key, null if key not in map
+      */
+-    public Object remove(Object key1, Object key2) {
++    public Object removeMultiKey(Object key1, Object key2) {
+         int hashCode = hash(key1, key2);
+         int index = map.hashIndex(hashCode, map.data.length);
+         AbstractHashedMap.HashEntry entry = map.data[index];
+@@ -327,7 +327,7 @@ public class MultiKeyMap
+      * @param key3  the third key
+      * @return the value mapped to the removed key, null if key not in map
+      */
+-    public Object remove(Object key1, Object key2, Object key3) {
++    public Object removeMultiKey(Object key1, Object key2, Object key3) {
+         int hashCode = hash(key1, key2, key3);
+         int index = map.hashIndex(hashCode, map.data.length);
+         AbstractHashedMap.HashEntry entry = map.data[index];
+@@ -467,7 +467,7 @@ public class MultiKeyMap
+      * @param key4  the fourth key
+      * @return the value mapped to the removed key, null if key not in map
+      */
+-    public Object remove(Object key1, Object key2, Object key3, Object key4) {
++    public Object removeMultiKey(Object key1, Object key2, Object key3, Object key4) {
+         int hashCode = hash(key1, key2, key3, key4);
+         int index = map.hashIndex(hashCode, map.data.length);
+         AbstractHashedMap.HashEntry entry = map.data[index];
+@@ -617,7 +617,7 @@ public class MultiKeyMap
+      * @param key5  the fifth key
+      * @return the value mapped to the removed key, null if key not in map
+      */
+-    public Object remove(Object key1, Object key2, Object key3, Object key4, Object key5) {
++    public Object removeMultiKey(Object key1, Object key2, Object key3, Object key4, Object key5) {
+         int hashCode = hash(key1, key2, key3, key4, key5);
+         int index = map.hashIndex(hashCode, map.data.length);
+         AbstractHashedMap.HashEntry entry = map.data[index];
+diff --git a/src/java/org/apache/commons/collections/map/MultiValueMap.java b/src/java/org/apache/commons/collections/map/MultiValueMap.java
+index f44999b..86eaeb0 100644
+--- a/src/java/org/apache/commons/collections/map/MultiValueMap.java
++++ b/src/java/org/apache/commons/collections/map/MultiValueMap.java
+@@ -153,19 +153,19 @@ public class MultiValueMap extends AbstractMapDecorator implements MultiMap {
+      * @param value the value to remove
+      * @return the value removed (which was passed in), null if nothing removed
+      */
+-    public Object remove(Object key, Object value) {
++    public boolean removeMapping(Object key, Object value) {
+         Collection valuesForKey = getCollection(key);
+         if (valuesForKey == null) {
+-            return null;
++            return false;
+         }
+         boolean removed = valuesForKey.remove(value);
+         if (removed == false) {
+-            return null;
++            return false;
+         }
+         if (valuesForKey.isEmpty()) {
+             remove(key);
+         }
+-        return value;
++        return true;
+     }
+ 
+     /**
+diff --git a/src/test/org/apache/commons/collections/TestMultiHashMap.java b/src/test/org/apache/commons/collections/TestMultiHashMap.java
+index eca833a..a1de943 100644
+--- a/src/test/org/apache/commons/collections/TestMultiHashMap.java
++++ b/src/test/org/apache/commons/collections/TestMultiHashMap.java
+@@ -217,7 +217,7 @@ public class TestMultiHashMap extends AbstractTestMap {
+         MultiHashMap one = new MultiHashMap();
+         Integer value = new Integer(1);
+         one.put("One", value);
+-        one.remove("One", value);
++        one.removeMapping("One", value);
+         
+         MultiHashMap two = new MultiHashMap();
+         assertEquals(two, one);
+@@ -269,7 +269,7 @@ public class TestMultiHashMap extends AbstractTestMap {
+         assertEquals(4, map.totalSize());
+         map.remove("A");
+         assertEquals(3, map.totalSize());
+-        map.remove("B", "BC");
++        map.removeMapping("B", "BC");
+         assertEquals(2, map.totalSize());
+     }
+     
+@@ -292,7 +292,7 @@ public class TestMultiHashMap extends AbstractTestMap {
+         map.remove("A");
+         assertEquals(0, map.size("A"));
+         assertEquals(3, map.size("B"));
+-        map.remove("B", "BC");
++        map.removeMapping("B", "BC");
+         assertEquals(0, map.size("A"));
+         assertEquals(2, map.size("B"));
+     }
+@@ -464,11 +464,11 @@ public class TestMultiHashMap extends AbstractTestMap {
+         map.put("A", "AA");
+         map.put("A", "AB");
+         map.put("A", "AC");
+-        assertEquals(null, map.remove("C", "CA"));
+-        assertEquals(null, map.remove("A", "AD"));
+-        assertEquals("AC", map.remove("A", "AC"));
+-        assertEquals("AB", map.remove("A", "AB"));
+-        assertEquals("AA", map.remove("A", "AA"));
++        assertEquals(false, map.removeMapping("C", "CA"));
++        assertEquals(false, map.removeMapping("A", "AD"));
++        assertEquals(true, map.removeMapping("A", "AC"));
++        assertEquals(true, map.removeMapping("A", "AB"));
++        assertEquals(true, map.removeMapping("A", "AA"));
+         assertEquals(new MultiHashMap(), map);
+     }
+ 
+diff --git a/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java b/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
+index b1ee3d0..b18f480 100644
+--- a/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
++++ b/src/test/org/apache/commons/collections/map/TestMultiKeyMap.java
+@@ -315,34 +315,34 @@ public class TestMultiKeyMap extends AbstractTestIterableMap {
+             switch (key.size()) {
+                 case 2:
+                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1)));
+-                assertEquals(value, multimap.remove(key.getKey(0), key.getKey(1)));
++                assertEquals(value, multimap.removeMultiKey(key.getKey(0), key.getKey(1)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1)));
+                 assertEquals(size - 1, multimap.size());
+-                assertEquals(null, multimap.remove(key.getKey(0), key.getKey(1)));
++                assertEquals(null, multimap.removeMultiKey(key.getKey(0), key.getKey(1)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1)));
+                 break;
+                 case 3:
+                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2)));
+-                assertEquals(value, multimap.remove(key.getKey(0), key.getKey(1), key.getKey(2)));
++                assertEquals(value, multimap.removeMultiKey(key.getKey(0), key.getKey(1), key.getKey(2)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2)));
+                 assertEquals(size - 1, multimap.size());
+-                assertEquals(null, multimap.remove(key.getKey(0), key.getKey(1), key.getKey(2)));
++                assertEquals(null, multimap.removeMultiKey(key.getKey(0), key.getKey(1), key.getKey(2)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2)));
+                 break;
+                 case 4:
+                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
+-                assertEquals(value, multimap.remove(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
++                assertEquals(value, multimap.removeMultiKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
+                 assertEquals(size - 1, multimap.size());
+-                assertEquals(null, multimap.remove(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
++                assertEquals(null, multimap.removeMultiKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3)));
+                 break;
+                 case 5:
+                 assertEquals(true, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
+-                assertEquals(value, multimap.remove(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
++                assertEquals(value, multimap.removeMultiKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
+                 assertEquals(size - 1, multimap.size());
+-                assertEquals(null, multimap.remove(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
++                assertEquals(null, multimap.removeMultiKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
+                 assertEquals(false, multimap.containsKey(key.getKey(0), key.getKey(1), key.getKey(2), key.getKey(3), key.getKey(4)));
+                 break;
+                 default:
+diff --git a/src/test/org/apache/commons/collections/map/TestMultiValueMap.java b/src/test/org/apache/commons/collections/map/TestMultiValueMap.java
+index b9a5ac8..9ecc269 100644
+--- a/src/test/org/apache/commons/collections/map/TestMultiValueMap.java
++++ b/src/test/org/apache/commons/collections/map/TestMultiValueMap.java
+@@ -161,7 +161,7 @@ public class TestMultiValueMap extends TestCase {
+         MultiValueMap one = new MultiValueMap();

+         Integer value = new Integer(1);

+         one.put("One", value);

+-        one.remove("One", value);

++        one.removeMapping("One", value);

+         

+         MultiValueMap two = new MultiValueMap();

+         assertEquals(two, one);

+@@ -187,7 +187,7 @@ public class TestMultiValueMap extends TestCase {
+         assertEquals(4, map.totalSize());

+         map.remove("A");

+         assertEquals(3, map.totalSize());

+-        map.remove("B", "BC");

++        map.removeMapping("B", "BC");

+         assertEquals(2, map.totalSize());

+     }

+     

+@@ -204,7 +204,7 @@ public class TestMultiValueMap extends TestCase {
+         assertEquals(2, map.size());

+         map.remove("A");

+         assertEquals(2, map.size());

+-        map.remove("B", "BC");

++        map.removeMapping("B", "BC");

+         assertEquals(2, map.size());

+     }

+     

+@@ -227,7 +227,7 @@ public class TestMultiValueMap extends TestCase {
+         map.remove("A");

+         assertEquals(0, map.size("A"));

+         assertEquals(3, map.size("B"));

+-        map.remove("B", "BC");

++        map.removeMapping("B", "BC");

+         assertEquals(0, map.size("A"));

+         assertEquals(2, map.size("B"));

+     }

+@@ -338,11 +338,11 @@ public class TestMultiValueMap extends TestCase {
+         map.put("A", "AA");

+         map.put("A", "AB");

+         map.put("A", "AC");

+-        assertEquals(null, map.remove("C", "CA"));

+-        assertEquals(null, map.remove("A", "AD"));

+-        assertEquals("AC", map.remove("A", "AC"));

+-        assertEquals("AB", map.remove("A", "AB"));

+-        assertEquals("AA", map.remove("A", "AA"));

++        assertEquals(false, map.removeMapping("C", "CA"));

++        assertEquals(false, map.removeMapping("A", "AD"));

++        assertEquals(true, map.removeMapping("A", "AC"));

++        assertEquals(true, map.removeMapping("A", "AB"));

++        assertEquals(true, map.removeMapping("A", "AA"));

+         assertEquals(new MultiValueMap(), map);

+     }

+ 

+-- 
+2.18.0
+
diff --git a/gnu/packages/patches/nyx-show-header-stats-with-python3.patch b/gnu/packages/patches/nyx-show-header-stats-with-python3.patch
new file mode 100644
index 0000000000..5b20f180f7
--- /dev/null
+++ b/gnu/packages/patches/nyx-show-header-stats-with-python3.patch
@@ -0,0 +1,70 @@
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Fri, 22 Jun 2018 02:56:39 +0200
+Subject: nyx: Show header stats.
+
+The following patch was taken verbatim from the upstream repository and
+will be included in the next release.
+---
+commit 3494111cc81ad4985e81d0c1ea5e451d8f7a2bcc
+Author: Damian Johnson <atagar@torproject.org>
+Date:   Mon Feb 5 20:07:40 2018 -0800
+
+    Header stats missing with python3
+    
+    Ick! took me a while to find this. Python3 changed division from providing ints
+    to floats. This in turn caused our header panel to call addstr with float x/y
+    coordinates, which made that funciton fail silently. End result is that when
+    the header panel showed two columns of stats the right column was missing.
+    
+    Caught thanks to Stijn.
+
+diff --git a/nyx/panel/header.py b/nyx/panel/header.py
+index 09e3838..fb6f2f7 100644
+--- a/nyx/panel/header.py
++++ b/nyx/panel/header.py
+@@ -155,7 +155,7 @@ class HeaderPanel(nyx.panel.DaemonPanel):
+     # space available for content
+ 
+     interface = nyx_interface()
+-    left_width = max(subwindow.width / 2, 77) if is_wide else subwindow.width
++    left_width = max(subwindow.width // 2, 77) if is_wide else subwindow.width
+     right_width = subwindow.width - left_width
+ 
+     _draw_platform_section(subwindow, 0, 0, left_width, vals)
+diff --git a/web/changelog/index.html b/web/changelog/index.html
+index 333fa84..196d82b 100644
+--- a/web/changelog/index.html
++++ b/web/changelog/index.html
+@@ -74,6 +74,12 @@
+           </ul>
+         </li>
+ 
++        <li><span class="component">Header</span>
++          <ul>
++            <li>Right column of stats missing when using python 3.x</li>
++          </ul>
++        </li>
++
+         <li><span class="component">Connections</span>
+           <ul>
+             <li>Geoip information unavailable for inbound connections</li>
+diff --git a/web/changelog/legacy.html b/web/changelog/legacy.html
+index a380806..02d405f 100644
+--- a/web/changelog/legacy.html
++++ b/web/changelog/legacy.html
+@@ -137,13 +137,13 @@
+           </ul>
+         </li>
+ 
+-        <li><span class="component">Startup</span>
++        <li><span class="component">Graph</span>
+           <ul>
+             <li>Crash when pausing if we showed accounting stats</li>
+           </ul>
+         </li>
+ 
+-        <li><span class="component">Startup</span>
++        <li><span class="component">Logging</span>
+           <ul>
+             <li>Skip reading from malformed tor log files</li>
+             <li>Unable to log GUARD events</li>
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 067b4061e8..66fbb20038 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -277,7 +277,7 @@ Poppler PDF rendering library.")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'autogen
-          (lambda _ (zero? (system* "autoreconf" "-vif")))))))
+          (lambda _ (invoke "autoreconf" "-vif"))))))
    (inputs
     `(("zlib" ,zlib)
       ("libpng" ,libpng)))
@@ -937,7 +937,7 @@ converter using the Poppler and Cairo libraries.")
             #t))
          (replace 'check
            (lambda _
-             (zero? (system* "python" "-m" "unittest" "Tests.tests")))))))
+             (invoke "python" "-m" "unittest" "Tests.tests"))))))
     (home-page "http://mstamy2.github.com/PyPDF2")
     (synopsis "Pure Python PDF toolkit")
     (description "PyPDF2 is a pure Python PDF library capable of:
diff --git a/gnu/packages/perl-web.scm b/gnu/packages/perl-web.scm
index 7a398675b2..3c462aed03 100644
--- a/gnu/packages/perl-web.scm
+++ b/gnu/packages/perl-web.scm
@@ -51,7 +51,7 @@ endeavor to implement this idea using modern technologies.")
 (define-public perl-uri-escape
   (package
     (name "perl-uri-escape")
-    (version "1.73")
+    (version "1.74")
     (source
      (origin
        (method url-fetch)
@@ -59,7 +59,7 @@ endeavor to implement this idea using modern technologies.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "04z4xwiryrbxxi48bwbkgq9q9pwfgqry3wp0ramcrwv3dx5ap9yc"))))
+         "0gfmrpyy075pn2mbshs5599h8m096gjdz2dn8vcivjw9bzs59hm9"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-needs" ,perl-test-needs)))
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index b7cd51e868..e29eaea801 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -607,18 +607,18 @@ PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
 (define-public python-pynacl
   (package
     (name "python-pynacl")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "PyNaCl" version))
        (modules '((guix build utils)))
-       ;; Remove bundled libsodium
+       ;; Remove bundled libsodium.
        (snippet '(begin (delete-file-recursively "src/libsodium")
                         #t))
        (sha256
         (base32
-         "01vjq0pxyw1mxaqy013hzs8nknmvg3kpzlzmh69jxznyipgvria5"))))
+         "1ada3qr83cliap6dk897vnvjkynij1kjqbwizdbgarazlyh8zlz0"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 9523ff3734..4e130fa164 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -783,14 +783,14 @@ that have uses outside of the Zope framework.")
 (define-public python-zope-testing
   (package
     (name "python-zope-testing")
-    (version "4.6.1")
+    (version "4.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "zope.testing" version))
        (sha256
         (base32
-         "1vvxhjmzl7vw2i1akfj1xbggwn36270ym7f2ic9xwbaswfw1ap56"))
+         "0iiq54hjhkk2gpvzfjac70vyn4r0kw0ngvicshxbdwrkgf2gjq3g"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -798,10 +798,6 @@ that have uses outside of the Zope framework.")
            (for-each delete-file (find-files "." "(\\.pyc|~)$"))
            #t))))
     (build-system python-build-system)
-    (native-inputs
-     `(("python-zope-exceptions" ,python-zope-exceptions)))
-    (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
     (home-page "https://pypi.python.org/pypi/zope.testing")
     (synopsis "Zope testing helpers")
     (description "Zope.testing provides a number of testing utilities for HTML
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 9c0ddd037e..5d19fb40d5 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -4485,13 +4485,13 @@ them as the version argument or in a SCM managed file.")
 (define-public python-pathpy
   (package
     (name "python-pathpy")
-    (version "11.0")
+    (version "11.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "path.py" version))
        (sha256
-        (base32 "12s84maimiz61980q065rjgi8ang6xw2wwm64m0lmfks51dlw4qn"))))
+        (base32 "07x15v8c7ry9bvycw294c9yq6ky9v2b0dalvgi6rn38ilh69vsz7"))))
     ;; (outputs '("out" "doc"))
     (build-system python-build-system)
     (propagated-inputs
@@ -12886,6 +12886,48 @@ and works only with Python 2 and NumPy < 1.9.")
 (define-public python2-phonenumbers
   (package-with-python2 python-phonenumbers))
 
+(define-public python-send2trash
+  (package
+    (name "python-send2trash")
+    (version "1.4.2")
+    (source
+     (origin (method url-fetch)
+             ;; Source tarball on PyPI doesn't include tests.
+             (uri (string-append "https://github.com/hsoft/send2trash/archive/"
+                                 version ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "0ffyhwjyx61slkdy38iwjc4gmj7fj9gs2q58f075gwvq630pzm9z"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda _
+             (mkdir-p "/tmp/foo")
+             (setenv "HOME" "/tmp/foo")
+             #t)))))
+    (home-page "https://github.com/hsoft/send2trash")
+    (synopsis "Send files to the user's @file{~/Trash} directory")
+    (description "This package provides a Python library to send files to the
+user's @file{~/Trash} directory.")
+    (license license:bsd-3)))
+
+(define-public python2-send2trash
+  (package
+    (inherit (package-with-python2 python-send2trash))
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-send2trash)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-before 'check 'setenv
+             (lambda _
+               (setenv "PYTHONPATH"
+                       (string-append (getcwd) ":" (getenv "PYTHONPATH")))
+               #t))))))
+    (properties `((python2-variant . ,(delay python-send2trash))))))
+
 (define-public python-yapf
   (package
     (name "python-yapf")
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index 973fef72f0..1618b29b06 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -233,7 +233,7 @@ and triple stores.")
     (version "0.28.0")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://download.drobilla.net/serd-"
+             (uri (string-append "https://download.drobilla.net/serd-"
                                  version ".tar.bz2"))
              (sha256
               (base32
@@ -250,7 +250,7 @@ and triple stores.")
                     (string-append "-Wl,-rpath="
                                    (assoc-ref outputs "out") "/lib"))
             #t)))))
-    (home-page "http://drobilla.net/software/serd/")
+    (home-page "https://drobilla.net/software/serd/")
     (synopsis "Library for RDF syntax supporting Turtle and NTriples")
     (description
      "Serd is a lightweight C library for RDF syntax which supports reading
@@ -267,7 +267,7 @@ ideal (e.g. in LV2 implementations or embedded applications).")
     (version "0.16.0")
     (source (origin
              (method url-fetch)
-             (uri (string-append "http://download.drobilla.net/sord-"
+             (uri (string-append "https://download.drobilla.net/sord-"
                                  version ".tar.bz2"))
              (sha256
               (base32
@@ -288,7 +288,7 @@ ideal (e.g. in LV2 implementations or embedded applications).")
      `(("serd" ,serd)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://drobilla.net/software/sord/")
+    (home-page "https://drobilla.net/software/sord/")
     (synopsis "C library for storing RDF data in memory")
     (description
      "Sord is a lightweight C library for storing RDF data in memory.")
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 5df945d1d7..1602fd5d5e 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -3330,7 +3330,7 @@ differences (added or removed nodes) between two XML/HTML documents.")
 (define-public ruby-rack
   (package
     (name "ruby-rack")
-    (version "2.0.3")
+    (version "2.0.5")
     (source
      (origin
        (method url-fetch)
@@ -3342,7 +3342,7 @@ differences (added or removed nodes) between two XML/HTML documents.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "12bnqrcg43x9hsswjqg31qqwk8cwj2fh0d2m179y20bjghhn54kx"))
+         "1k1k4wk10l6bxx46pw58j2p3nmyzjqnr65hbjjqydd6517fmxgib"))
        ;; Ignore test which fails inside the build environment but works
        ;; outside.
        (patches (search-patches "ruby-rack-ignore-failing-test.patch"))))
@@ -3417,14 +3417,14 @@ testing libraries to build on.")
 (define-public ruby-rack-protection
   (package
     (name "ruby-rack-protection")
-    (version "2.0.2")
+    (version "2.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "rack-protection" version))
        (sha256
         (base32
-         "0fik7c77rhzs55ip3s8fwa6b0yvmy6313720cqkjx38w34yn2889"))))
+         "1z5598qipilmnf45428jnxi63ykrgvnyywa5ckpr52zv2vpd8jdp"))))
     (build-system ruby-build-system)
     (arguments
      '(;; Tests missing from the gem.
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index dba5067e9e..0b15ea8376 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -356,7 +357,7 @@ mashups, office (web agendas, mail clients, ...), etc.")
      `(#:modules ((guix build gnu-build-system)
                   (guix build utils)
                   (srfi srfi-1))
-       
+
        ;; No `configure' script; run "make check" after "make install" as
        ;; prescribed by README.
        #:phases
@@ -1025,3 +1026,80 @@ the same program, without any interference between them.  Foreign functions in C
 can be added and values can be defined in the Scheme environment.  Being quite a
 small program, it is easy to comprehend, get to grips with, and use.")
     (license bsd-3)))                   ; there are no licence headers
+
+(define-public stalin
+  (let ((commit "ed1c9e339c352b7a6fee40bb2a47607c3466f0be"))
+    ;; FIXME: The Stalin "source" contains C code generated by itself:
+    ;; 'stalin-AMD64.c', etc.
+    (package
+      (name "stalin")
+      (version "0.11")
+      (source (origin
+                ;; Use Pearlmutter's upstream branch with AMD64 patches
+                ;; applied. Saves us from including those 20M! patches
+                ;; in Guix. For more info, see:
+                ;; <ftp.ecn.purdue.edu/qobi/stalin-0.11-amd64-patches.tgz>
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/barak/stalin.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "15a5gxj9v7jqlgkg0543gdflw0rbrir7fj5zgifnb33m074wiyhn"))
+                (modules '((guix build utils)))
+                (snippet
+                 ;; remove gc libs from build, we have them as input
+                 '(begin
+                    (delete-file "gc6.8.tar.gz")
+                    (delete-file-recursively "benchmarks")
+                    (substitute* "build"
+                      ((".*gc6.8.*") "")
+                      (("  cd \\.\\.") "")
+                      ((".*B include/libgc.a") "")
+                      ((".*make.*") ""))
+                    #t))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags (list "ARCH_OPTS=-freg-struct-return")
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'configure
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (include-out (string-append out "/include")))
+                 (invoke "./build")
+                 (for-each (lambda (fname)
+                             (install-file fname include-out))
+                           (find-files "include"))
+                 (substitute* "makefile"
+                   (("\\./include") include-out))
+                 (substitute* "post-make"
+                   (("`pwd`") out))
+                 #t)))
+           (delete 'check)
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (install-file "stalin.1"
+                               (string-append out "/share/man/man1"))
+                 (install-file "stalin"
+                               (string-append out "/bin"))
+                 #t))))))
+      (inputs
+       `(("libx11" ,libx11)))
+      (propagated-inputs
+       `(("libgc" ,libgc)))
+      (supported-systems '("x86_64-linux"))
+      (home-page "https://engineering.purdue.edu/~qobi/papers/fdlcc.pdf")
+      (synopsis "Brutally efficient Scheme compiler")
+      (description
+       "Stalin is an aggressively optimizing whole-program compiler
+for Scheme that does polyvariant interprocedural flow analysis,
+flow-directed interprocedural escape analysis, flow-directed
+lightweight CPS conversion, flow-directed lightweight closure
+conversion, flow-directed interprocedural lifetime analysis, automatic
+in-lining, unboxing, and flow-directed program-specific and
+program-point-specific low-level representation selection and code
+generation.")
+      (license gpl2+))))
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index ba4477df9c..3e21cde83c 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -349,7 +349,7 @@ directory.")
 (define-public sdl2-image
   (package (inherit sdl-image)
     (name "sdl2-image")
-    (version "2.0.2")
+    (version "2.0.3")
     (source (origin
               (method url-fetch)
               (uri
@@ -357,7 +357,7 @@ directory.")
                               version ".tar.gz"))
               (sha256
                (base32
-                "1s3ciydixrgv34vlf45ak5syq5nlfaqf19wf162lbz4ixxd0gpvj"))))
+                "0s13dmakn21q6yw8avl67d4zkxzl1wap6l5nwf6cvzrmlxfw441m"))))
     (propagated-inputs
      (propagated-inputs-with-sdl2 sdl-image))))
 
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index e176fd1aa7..e9e74817f2 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -126,24 +126,24 @@ rich set of boolean query operators.")
     (inputs `(("unqlite" ,unqlite)))
     (arguments
      `(#:phases (modify-phases %standard-phases
-                  (add-before
-                   'configure 'chdir-source
-                   (lambda _ (chdir "libtocc/src")))
-                  (replace
-                   'check
-                   (lambda _
-                     (with-directory-excursion "../tests"
-                       (and (zero? (system* "./configure"
-                                            (string-append "CONFIG_SHELL="
-                                                           (which "sh"))
-                                            (string-append "SHELL="
-                                                           (which "sh"))
-                                            "CPPFLAGS=-I../src"
-                                            (string-append
-                                             "LDFLAGS=-L../src/.libs "
-                                             "-Wl,-rpath=../src/.libs")))
-                            (zero? (system* "make"))
-                            (zero? (system* "./libtocctests")))))))))
+                  (add-before 'configure 'chdir-source
+                    (lambda _
+                      (chdir "libtocc/src")
+                      #t))
+                  (replace 'check
+                    (lambda _
+                      (with-directory-excursion "../tests"
+                        (invoke "./configure"
+                                (string-append "CONFIG_SHELL="
+                                               (which "sh"))
+                                (string-append "SHELL="
+                                               (which "sh"))
+                                "CPPFLAGS=-I../src"
+                                (string-append
+                                 "LDFLAGS=-L../src/.libs "
+                                 "-Wl,-rpath=../src/.libs"))
+                        (invoke "make")
+                        (invoke "./libtocctests")))))))
     (home-page "https://t-o-c-c.com/")
     (synopsis "Tool for Obsessive Compulsive Classifiers")
     (description
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 9c8474dd02..7fdcaaf1ea 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -28,6 +28,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages autotools)
@@ -91,16 +92,15 @@ readers and is needed to communicate with such devices through the
 (define-public eid-mw
   (package
     (name "eid-mw")
-    (version "4.3.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/Fedict/eid-mw/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1ay9znry9dkhhn783paqy8czvv3w5gdpmq8ag8znx9akza8c929z"))))
+    (version "4.4.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/Fedict/eid-mw")
+             (commit (string-append "v" version))))
+       (sha256
+        (base32 "1h90iz4l85drchpkmhlsvg7f9abhw6890fdr9x5n5ir3kxikwcdm"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -121,9 +121,14 @@ readers and is needed to communicate with such devices through the
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         ;; The github tarball doesn't contain a configure script.
-         (add-before 'configure 'autoreconf
-           (lambda _ (zero? (system* "autoreconf" "-i")))))))
+         (add-after 'unpack 'bootstrap
+           (lambda _
+             ;; configure.ac relies on ‘git --describe’ to get the version.
+             ;; Patch it to just return the real version number directly.
+             (substitute* "scripts/build-aux/genver.sh"
+               (("/bin/sh") (which "sh"))
+               (("\\$GITDESC") ,version))
+             (invoke "sh" "./bootstrap.sh"))))))
     (synopsis "Belgian eID Middleware")
     (description "The Belgian eID Middleware is required to authenticate with
 online services using the Belgian electronic identity card.")
diff --git a/gnu/packages/selinux.scm b/gnu/packages/selinux.scm
index 9562123bda..c56a991d99 100644
--- a/gnu/packages/selinux.scm
+++ b/gnu/packages/selinux.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -201,10 +202,10 @@ the core SELinux management utilities.")
              (lambda _ (chdir ,name) #t))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
-               (zero? (apply system* "make" "pywrap" make-flags))))
+               (apply invoke "make" "pywrap" make-flags)))
            (add-after 'install 'install-pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
-               (zero? (apply system* "make" "install-pywrap" make-flags))))))))
+               (apply invoke "make" "install-pywrap" make-flags)))))))
     (inputs
      `(("libsepol" ,libsepol)
        ("libselinux" ,libselinux)
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index dd8518002d..cd92c62f58 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -256,22 +256,22 @@ Additionally, various channel-specific options can be negotiated.")
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'autoreconf
                     (lambda* (#:key inputs #:allow-other-keys)
-                      (zero? (system* "autoreconf" "-vfi"))))
+                      (invoke "autoreconf" "-vfi")))
                   (add-before 'build 'fix-libguile-ssh-file-name
                     (lambda* (#:key outputs #:allow-other-keys)
                       ;; Build and install libguile-ssh.so so that we can use
                       ;; its absolute file name in .scm files, before we build
                       ;; the .go files.
-                      (and (zero? (system* "make" "install"
-                                           "-C" "libguile-ssh"
-                                           "-j" (number->string
-                                                 (parallel-job-count))))
-                           (let* ((out      (assoc-ref outputs "out"))
-                                  (libdir   (string-append out "/lib")))
-                             (substitute* (find-files "." "\\.scm$")
-                               (("\"libguile-ssh\"")
-                                (string-append "\"" libdir "/libguile-ssh\"")))
-                             #t))))
+                      (let* ((out (assoc-ref outputs "out"))
+                             (lib (string-append out "/lib")))
+                        (invoke "make" "install"
+                                "-C" "libguile-ssh"
+                                "-j" (number->string
+                                      (parallel-job-count)))
+                        (substitute* (find-files "." "\\.scm$")
+                          (("\"libguile-ssh\"")
+                           (string-append "\"" lib "/libguile-ssh\"")))
+                        #t)))
                   (add-after 'install 'remove-bin-directory
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out"))
@@ -329,29 +329,25 @@ libssh library.")
                 "1gmhas4va6gd70i2x2mpxpwpgww6413mji29mg282jms3jscn3qd"))))
     (build-system gnu-build-system)
     (arguments
-     ;; Replace configure phase as the ./configure script does not link
-     ;; CONFIG_SHELL and SHELL passed as parameters
-     '(#:phases
+     `(#:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key outputs inputs system build target
-                           #:allow-other-keys #:rest args)
-             (let* ((configure (assoc-ref %standard-phases 'configure))
-                    (prefix (assoc-ref outputs "out"))
-                    (bash   (which "bash"))
+           ;; Replace configure phase as the ./configure script does not like
+           ;; CONFIG_SHELL and SHELL passed as parameters
+           (lambda* (#:key outputs build target #:allow-other-keys)
+             (let* ((out   (assoc-ref outputs "out"))
+                    (bash  (which "bash"))
                     ;; Set --build and --host flags as the provided config.guess
                     ;; is not able to detect them
-                    (flags `(,(string-append "--prefix=" prefix)
+                    (flags `(,(string-append "--prefix=" out)
                              ,(string-append "--build=" build)
                              ,(string-append "--host=" (or target build)))))
                (setenv "CONFIG_SHELL" bash)
-               (zero? (apply system* bash
-                             (string-append "." "/configure")
-                             flags)))))
+               (apply invoke bash "./configure" flags))))
          (add-after 'install 'install-documentation
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (doc (string-append out "/share/doc/corkscrew")))
+                    (doc (string-append out "/share/doc/" ,name "-" ,version)))
                (install-file "README" doc)
                #t))))))
     (home-page "http://www.agroman.net/corkscrew")
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index a343e3cb6e..dbfaa29127 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -100,9 +100,8 @@ a custom raw video format with a simple container.")
         (replace 'install
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out")))
-              (zero?
-               (system* "make" "install"
-                        (string-append "DESTDIR=" out) "PREFIX=")))))
+              (invoke "make" "install"
+                      (string-append "DESTDIR=" out) "PREFIX="))))
         (add-after 'build 'install-xsession
           (lambda* (#:key outputs #:allow-other-keys)
             ;; Add a .desktop file to xsessions.
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 27b49895e2..f37c0eaac5 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -32,7 +32,7 @@
 (define-public newsboat
   (package
     (name "newsboat")
-    (version "2.11.1")
+    (version "2.12")
     (source
      (origin
        (method url-fetch)
@@ -40,7 +40,7 @@
                            "/newsboat-" version ".tar.xz"))
        (sha256
         (base32
-         "1krpxl854h5dwmpr81m1s84cwk8zivdzvw0s5s0i4dba736pvdma"))))
+         "1x23zlgljaqf46v7sp8wnkyf6wighvirvn48ankpa34yr8mvrgcv"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -60,7 +60,7 @@
          (delete 'configure)            ; no configure script
          (add-after 'build 'build-documentation
            (lambda _
-             (zero? (system* "make" "doc")))))
+             (invoke "make" "doc"))))
        #:make-flags
        (list (string-append "prefix=" (assoc-ref %outputs "out")))
        #:test-target "test"))
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index c14feb2983..e89dc85d18 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -824,7 +824,7 @@ then ported to the GNU / Linux environment.")
 (define-public mbedtls-apache
   (package
     (name "mbedtls-apache")
-    (version "2.7.3")
+    (version "2.7.4")
     (source
      (origin
        (method url-fetch)
@@ -834,7 +834,7 @@ then ported to the GNU / Linux environment.")
                            version "-apache.tgz"))
        (sha256
         (base32
-         "0rfpcc4i01qsl66iy1z9vaw00s34h4qgx3r41i1v5vazv7vjla05"))))
+         "1x9qia3rd77brz6qiv46w3ham2q78shn2rsz1jbpgqq0jpa69q9l"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 56269dd8cf..054d1e4029 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -256,51 +256,46 @@ from you.")
                    license:bsd-3))))    ; onionshare/socks.py
 
 (define-public nyx
-  ;; The last ‘arm’ relase was 5 years ago.  Meanwhile, python3 support has
-  ;; been added and the software was renamed to ‘nyx’.
-  (let ((commit "fea209127484d9b304b908a4711c9528b1d065bc")
-        (revision "1"))                 ; Guix package revision
-    (package
-      (name "nyx")
-      (version (string-append "1.9-"
-                              revision "." (string-take commit 7)))
-      (source
-       (origin
-         (method git-fetch)
-         (file-name (string-append name "-" version "-checkout"))
-         (uri (git-reference
-               (url "https://git.torproject.org/nyx.git")
-               (commit commit)))
-         (sha256
-          (base32
-           "1g0l4988076xg5gs0x0nxzlg58rfx5g5agmklvyh4yp03vxncdb9"))))
-      (build-system python-build-system)
-      (native-inputs
-       `(("python-mock" ,python-mock)
-         ("python-pep8" ,python-pep8)
-         ("python-pyflakes" ,python-pyflakes)))
-      (inputs
-       `(("python-stem" ,python-stem)))
-      (arguments
-       `(#:configure-flags
-         (list (string-append "--man-page="
-                              (assoc-ref %outputs "out")
-                              "/share/man/man1/nyx.1")
-               (string-append "--sample-path="
-                              (assoc-ref %outputs "out")
-                              "/share/doc/nyx/nyxrc.sample"))
-         #:use-setuptools? #f           ; setup.py still uses distutils
-         #:phases
-         (modify-phases %standard-phases
-           (replace 'check
-             (lambda _
-               (zero? (system* "./run_tests.py" "--unit")))))))
-      ;; A Nyx home page is ‘being worked on’.  Use Arm's for now, which at
-      ;; least mentions the new source repository:
-      (home-page "http://www.atagar.com/arm/")
-      (synopsis "Tor relay status monitor")
-      (description "Nyx (formerly Anonymizing Relay Monitor or \"arm\")
-monitors the performance of relays participating in the
+  (package
+    (name "nyx")
+    (version "2.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri name version))
+       (patches
+        (search-patches "nyx-show-header-stats-with-python3.patch"))
+       (sha256
+        (base32
+         "0pm7vfcqr02pzqz4b2f6sw5prxxmgqwr1912am42xmy2i53n7nrq"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-stem" ,python-stem)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-man-page
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (man (string-append out "/share/man")))
+               (install-file "nyx.1" (string-append man "/man1"))
+               #t)))
+         (add-after 'install 'install-sample-configuration
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (doc (string-append out "/share/doc/" ,name "-" ,version)))
+               (install-file "web/nyxrc.sample" doc)
+               #t))))
+       ;; XXX The tests seem to require more of a real terminal than the build
+       ;; environment provides:
+       ;;   _curses.error: setupterm: could not find terminal
+       ;; With TERM=linux, the tests try to move the cursor and still fail:
+       ;;   _curses.error: cbreak() returned ERR
+       #:tests? #f))
+    (home-page "https://nyx.torproject.org/")
+    (synopsis "Tor relay status monitor")
+    (description
+     "Nyx monitors the performance of relays participating in the
 @uref{https://www.torproject.org/, Tor anonymity network}.  It displays this
 information visually and in real time, using a curses-based terminal interface.
 This makes Nyx well-suited for remote shell connections and servers without a
@@ -316,4 +311,4 @@ statistics and status reports on:
 @end enumerate
 
 Potential client and exit connections are scrubbed of sensitive information.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 15974c8792..7971892082 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -53,6 +53,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
@@ -144,14 +145,14 @@ as well as the classic centralized workflow.")
    (name "git")
    ;; XXX When updating Git, check if the special 'git:src' input to cgit needs
    ;; to be updated as well.
-   (version "2.17.1")
+   (version "2.18.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0pm6bdnrrm165k3krnazxcxadifk2gqi30awlbcf9fism1x6w4vr"))))
+              "14hfwfkrci829a9316hnvkglnqqw1p03cw9k56p4fcb078wbwh4b"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -164,7 +165,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "0m7grrwsqaihdgcgaicxiy4rlqjpa75n5wl6hi2qhi33xa34gmc3"))))))
+            "15k04s9pcc5wkmlfa8x99nbgczjbx0c91767ciqmjy9kwsavxqws"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
@@ -173,6 +174,10 @@ as well as the classic centralized workflow.")
       ("python" ,python-2) ; CAVEAT: incompatible with python-3 according to INSTALL
       ("zlib" ,zlib)
 
+      ;; Note: we keep this in inputs rather than native-inputs to work around
+      ;; a problem in 'patch-shebangs'; see <https://bugs.gnu.org/31952>.
+      ("bash-for-tests" ,bash)
+
       ;; For 'gitweb.cgi'
       ("perl-cgi" ,perl-cgi)
 
@@ -191,14 +196,28 @@ as well as the classic centralized workflow.")
    (outputs '("out"                               ; the core
               "send-email"                        ; for git-send-email
               "svn"                               ; git-svn
+              "credential-netrc"                  ; git-credential-netrc
               "gui"))                             ; gitk, git gui
    (arguments
     `(#:make-flags `("V=1"                        ;more verbose compilation
 
+                     ,(string-append "SHELL_PATH="
+                                     (assoc-ref %build-inputs "bash")
+                                     "/bin/sh")
+
+                     ;; Tests require a bash with completion support.
+                     ,(string-append "TEST_SHELL_PATH="
+                                     (assoc-ref %build-inputs "bash-for-tests")
+                                     "/bin/bash")
+
                      ;; By default 'make install' creates hard links for
                      ;; things in 'libexec/git-core', which leads to huge
                      ;; nars; see <https://bugs.gnu.org/21949>.
                      "NO_INSTALL_HARDLINKS=indeed")
+
+      ;; Make sure the full bash does not end up in the final closure.
+      #:disallowed-references (,bash)
+
       #:test-target "test"
 
       ;; Tests fail randomly when parallel: <https://bugs.gnu.org/29512>.
@@ -211,13 +230,23 @@ as well as the classic centralized workflow.")
                                              "/bin/wish8.6")) ; XXX
 
       #:modules ((srfi srfi-1)
+                 (srfi srfi-26)
                  ,@%gnu-build-system-modules)
       #:phases
       (modify-phases %standard-phases
+        (add-after 'unpack 'modify-PATH
+          (lambda* (#:key inputs #:allow-other-keys)
+            (let ((path (string-split (getenv "PATH") #\:))
+                  (bash-full (assoc-ref inputs "bash-for-tests")))
+              ;; Drop the test bash from PATH so that (which "sh") and
+              ;; similar does the right thing.
+              (setenv "PATH" (string-join
+                              (remove (cut string-prefix? bash-full <>) path)
+                              ":"))
+              #t)))
         (add-after 'configure 'patch-makefiles
           (lambda _
             (substitute* "Makefile"
-              (("/bin/sh") (which "sh"))
               (("/usr/bin/perl") (which "perl"))
               (("/usr/bin/python") (which "python")))
             #t))
@@ -274,6 +303,12 @@ as well as the classic centralized workflow.")
               (copy-file "contrib/completion/git-completion.bash"
                          (string-append completions "/git"))
               #t)))
+        (add-after 'install 'install-credential-netrc
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let* ((netrc (assoc-ref outputs "credential-netrc")))
+              (install-file "contrib/credential/netrc/git-credential-netrc"
+                            (string-append netrc "/bin"))
+              #t)))
         (add-after 'install 'split
           (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; Split the binaries to the various outputs.
@@ -416,7 +451,7 @@ everything from small to very large projects with speed and efficiency.")
              #t))
          ;; Run checks more verbosely.
          (replace 'check
-           (lambda _ (zero? (system* "./libgit2_clar" "-v" "-Q")))))))
+           (lambda _ (invoke "./libgit2_clar" "-v" "-Q"))))))
     (inputs
      `(("libssh2" ,libssh2)
        ("http-parser" ,http-parser)
@@ -459,12 +494,12 @@ write native speed custom Git applications in any language with bindings.")
          (delete 'configure)
          (replace 'build
            (lambda _
-             (zero? (system* "make"))))
+             (invoke "make")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system* "make" "install"
-                               (string-append "PREFIX=" out)))))))))
+               (invoke "make" "install"
+                       (string-append "PREFIX=" out))))))))
     (home-page "https://www.agwa.name/projects/git-crypt")
     (synopsis "Transparent encryption of files in a git repository")
     (description "git-crypt enables transparent encryption and decryption of
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 132f9cca74..ce90d470f4 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -123,6 +123,7 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages time)
   #:use-module (gnu packages upnp)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages vulkan)
@@ -1039,8 +1040,7 @@ treaming protocols.")
                 (("#! /bin/sh") (string-append "#!" (which "sh"))))
               (setenv "SHELL" (which "bash"))
               (setenv "CONFIG_SHELL" (which "bash"))
-              (zero? (system*
-                      "./configure"
+              (invoke "./configure"
                       (string-append "--extra-cflags=-I"
                                      libx11 "/include") ; to detect libx11
                       "--disable-ffmpeg_a" ; disables bundled ffmpeg
@@ -1062,7 +1062,7 @@ treaming protocols.")
                                     (or (%current-target-system)
                                         (nix-system->gnu-triplet
                                          (%current-system)))))))
-                      "--disable-iwmmxt"))))))))
+                      "--disable-iwmmxt")))))))
     (home-page "https://www.mplayerhq.hu/design7/news.html")
     (synopsis "Audio and video player")
     (description "MPlayer is a movie player.  It plays most MPEG/VOB, AVI,
@@ -1765,10 +1765,9 @@ capabilities.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after
-          'unpack 'autogen
-          (lambda _
-            (zero? (system* "sh" "autogen.sh")))))))
+         (add-after 'unpack 'autogen
+           (lambda _
+             (invoke "sh" "autogen.sh"))))))
     (home-page "http://www.vapoursynth.com/")
     (synopsis "Video processing framework")
     (description "VapourSynth is a C++ library and Python module for video
@@ -1815,34 +1814,41 @@ and custom quantization matrices.")
     (license license:gpl2+)))
 
 (define-public streamlink
-  (package
-    (name "streamlink")
-    (version "0.11.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "streamlink" version))
-       (sha256
-        (base32
-         "02h8b3k8l5zz4vjm0nhxvl1pm924jms8y7sjl40fbybrzvsa4mg2"))))
-    (build-system python-build-system)
-    (home-page "https://github.com/streamlink/streamlink")
-    (native-inputs
-     `(("python-pytest" ,python-pytest)
-       ("python-mock" ,python-mock)
-       ("python-requests-mock" ,python-requests-mock)))
-    (propagated-inputs
-     `(("python-pysocks" ,python-pysocks)
-       ("python-websocket-client" ,python-websocket-client)
-       ("python-iso3166" ,python-iso3166)
-       ("python-iso639" ,python-iso639)
-       ("python-pycryptodome" ,python-pycryptodome)
-       ("python-requests" ,python-requests)
-       ("python-urllib3" ,python-urllib3)))
-    (synopsis "Extract streams from various services")
-    (description "Streamlink is command-line utility that extracts streams
+  ;; Release tarball doesn't contain ‘tests/resources/dash/’ directory.
+  (let ((commit "2dca7930a938f60b48d8e23260963ea7c49d979f"))
+    (package
+      (name "streamlink")
+      (version (git-version "0.13.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/streamlink/streamlink.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0vq19aspshim63aj8yl2p64ykrbk2mwwlawdx427b3j2djlc5qhw"))))
+      (build-system python-build-system)
+      (home-page "https://github.com/streamlink/streamlink")
+      (native-inputs
+       `(("python-freezegun" ,python-freezegun)
+         ("python-pytest" ,python-pytest)
+         ("python-mock" ,python-mock)
+         ("python-requests-mock" ,python-requests-mock)))
+      (propagated-inputs
+       `(("python-pysocks" ,python-pysocks)
+         ("python-websocket-client" ,python-websocket-client)
+         ("python-iso3166" ,python-iso3166)
+         ("python-iso639" ,python-iso639)
+         ("python-isodate", python-isodate)
+         ("python-pycryptodome" ,python-pycryptodome)
+         ("python-requests" ,python-requests)
+         ("python-urllib3" ,python-urllib3)))
+      (synopsis "Extract streams from various services")
+      (description "Streamlink is command-line utility that extracts streams
 from sites like Twitch.tv and pipes them into a video player of choice.")
-    (license license:bsd-2)))
+      (license license:bsd-2))))
 
 (define-public livestreamer
   (deprecated-package "livestreamer" streamlink))
@@ -2196,10 +2202,11 @@ Other features include a live preview and live streaming.")
                 "18yfkr70lr1x1hc8snn2ldnbzdcc7b64xmkqrfk8w59gpg7sl1xn"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'autogen.sh
-                    (lambda _
-                      (zero? (system* "sh" "autogen.sh")))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'autogen.sh
+           (lambda _
+             (invoke "sh" "autogen.sh"))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)))
@@ -2363,7 +2370,7 @@ supported players in addition to this package.")
              ;; Patch the Makefile so that it doesn't bootstrap again.
              (substitute* "gtk/module.rules"
                ((".*autogen\\.sh.*") ""))
-             (zero? (system* "sh" "./gtk/autogen.sh"))))
+             (invoke "sh" "./gtk/autogen.sh")))
          (add-before 'configure 'disable-contrib
            (lambda _
              (substitute* "make/include/main.defs"
@@ -2385,9 +2392,9 @@ supported players in addition to this package.")
              ;; errors on unrecognized arguments,
              ;; e.g. --enable-fast-install
              (let ((out (assoc-ref outputs "out")))
-               (zero? (apply system* "./configure"
-                             (string-append "--prefix=" out)
-                             (or configure-flags '()))))))
+               (apply invoke "./configure"
+                      (string-append "--prefix=" out)
+                      (or configure-flags '())))))
          (add-after 'configure 'chdir-build
            (lambda _ (chdir "./build") #t)))))
     (home-page "https://handbrake.fr")
@@ -2520,7 +2527,7 @@ practically any type of media.")
              #t))
          (add-after 'change-to-build-dir 'autogen
            (lambda _
-             (zero? (system* "sh" "autogen.sh")))))))
+             (invoke "sh" "autogen.sh"))))))
     (home-page "https://mediaarea.net/en/MediaInfo")
     (synopsis "Library for retrieving media metadata")
     (description "MediaInfo is a library used for retrieving technical
@@ -2579,7 +2586,7 @@ MPEG-2, MPEG-4, DVD (VOB)...
              #t))
          (add-after 'change-to-build-dir 'autogen
            (lambda _
-             (zero? (system* "sh" "autogen.sh")))))))
+             (invoke "sh" "autogen.sh"))))))
     (home-page "https://mediaarea.net/en/MediaInfo")
     (synopsis "Utility for reading media metadata")
     (description "MediaInfo is a utility used for retrieving technical
@@ -2621,8 +2628,8 @@ many codecs and formats supported by libmediainfo.")
                       #t))
                   (replace 'configure
                     (lambda _
-                      (zero? (system* "./genMakefiles"
-                                      "linux-with-shared-libraries")))))))
+                      (invoke "./genMakefiles"
+                              "linux-with-shared-libraries"))))))
     (home-page "http://www.live555.com/liveMedia/")
     (synopsis "Set of C++ libraries for multimedia streaming")
     (description "This code forms a set of C++ libraries for multimedia
@@ -2819,8 +2826,8 @@ alpha blending etc).")
        (modify-phases %standard-phases
          (add-after 'unpack 'autotools
            (lambda _
-             (zero? (system* "sh" "autogen.sh")))))))
-    ;; TODO: opencv for additional face detection filters
+             (invoke "sh" "autogen.sh"))))))
+    ;; TODO: opencv for additional face detection filters.
     (inputs
      `(("gavl" ,gavl)
        ("cairo" ,cairo)))
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index b82dcb4c80..ebc57dc369 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -52,6 +52,7 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages perl)
@@ -65,6 +66,7 @@
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages spice)
   #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
@@ -128,28 +130,27 @@
 
                ;; The binaries need to be linked against -lrt.
                (setenv "LDFLAGS" "-lrt")
-               (zero?
-                (apply system*
-                       `("./configure"
-                         ,(string-append "--cc=" (which "gcc"))
-                         ;; Some architectures insist on using HOST_CC
-                         ,(string-append "--host-cc=" (which "gcc"))
-                         "--disable-debug-info" ; save build space
-                         "--enable-virtfs"      ; just to be sure
-                         ,(string-append "--prefix=" out)
-                         ,(string-append "--sysconfdir=/etc")
-                         ,@configure-flags))))))
+               (apply invoke
+                      `("./configure"
+                        ,(string-append "--cc=" (which "gcc"))
+                        ;; Some architectures insist on using HOST_CC
+                        ,(string-append "--host-cc=" (which "gcc"))
+                        "--disable-debug-info" ; save build space
+                        "--enable-virtfs"      ; just to be sure
+                        ,(string-append "--prefix=" out)
+                        ,(string-append "--sysconfdir=/etc")
+                        ,@configure-flags)))))
          (add-after 'install 'install-info
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Install the Info manual, unless Texinfo is missing.
-             (or (not (assoc-ref inputs "texinfo"))
-                 (let ((out (assoc-ref outputs "out")))
-                   (and (zero? (system* "make" "info"))
-                        (let ((infodir (string-append out "/share/info")))
-                          (for-each (lambda (info)
-                                      (install-file info infodir))
-                                    (find-files "." "\\.info"))
-                          #t))))))
+             (when (assoc-ref inputs "texinfo")
+               (let* ((out  (assoc-ref outputs "out"))
+                      (dir (string-append out "/share/info")))
+                 (invoke "make" "info")
+                 (for-each (lambda (info)
+                             (install-file info dir))
+                           (find-files "." "\\.info"))))
+             #t))
          ;; Create a wrapper for Samba. This allows QEMU to use Samba without
          ;; pulling it in as an input. Note that you need to explicitly install
          ;; Samba in your Guix profile for Samba support.
@@ -368,14 +369,13 @@ all common programming languages.  Vala bindings are also provided.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out         (assoc-ref outputs "out"))
                     (bashcompdir (string-append out "/etc/bash_completion.d")))
-               (zero? (system*
-                       "make" "install"
+               (invoke "make" "install"
                        (string-append "bashcompdir=" bashcompdir)
                        ;; Don't install files into /var and /etc.
                        "LXCPATH=/tmp/var/lib/lxc"
                        "localstatedir=/tmp/var"
                        "sysconfdir=/tmp/etc"
-                       "sysconfigdir=/tmp/etc/default"))))))))
+                       "sysconfigdir=/tmp/etc/default")))))))
     (synopsis "Linux container tools")
     (home-page "https://linuxcontainers.org/")
     (description
@@ -770,7 +770,7 @@ Machine Protocol.")
 (define-public lookingglass
   (package
    (name "lookingglass")
-   (version "a10")
+   (version "a11")
    (source
     (origin
      (method url-fetch)
@@ -779,7 +779,7 @@ Machine Protocol.")
      (file-name (string-append name "-" version))
      (sha256
       (base32
-       "0zlxg9ibzr0a598wr5nl1pb4l7mzsqn8ip72v4frph0vwsm5il6c"))))
+       "11qwyp332l66sqksqa0z9439yi4accmbq7wjc6kikc5fimdh9wk5"))))
    (build-system gnu-build-system)
    (inputs `(("fontconfig" ,fontconfig)
              ("glu" ,glu)
@@ -788,9 +788,12 @@ Machine Protocol.")
              ("sdl2" ,sdl2)
              ("sdl2-ttf" ,sdl2-ttf)
              ("spice-protocol" ,spice-protocol)))
-   (native-inputs `(("pkg-config" ,pkg-config)))
+   (native-inputs `(("libconfig" ,libconfig)
+                    ("nettle" ,nettle)
+                    ("pkg-config" ,pkg-config)))
    (arguments
     `(#:tests? #f ;; No tests are available.
+      #:make-flags '("CC=gcc")
       #:phases (modify-phases %standard-phases
                  (replace 'configure
                    (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index fb06196ec4..85bbe7e9c6 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -122,10 +122,10 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
    (home-page "http://www.unix-ag.uni-kl.de/~massar/vpnc/")))
 
 (define-public vpnc-scripts
-  (let ((commit "6f87b0fe7b20d802a0747cc310217920047d58d3"))
+  (let ((commit "07c3518dd6b8dc424e9c3650a62bed994a4dcbe1"))
     (package
       (name "vpnc-scripts")
-      (version (string-append "20161214." (string-take commit 7)))
+      (version (string-append "20180226." (string-take commit 7)))
       (source (origin
                 (method git-fetch)
                 (uri
@@ -135,7 +135,7 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0pa36w4wlyyvfb66cayhans99wsr2j5si2fvfr7ldfm512ajwn8h"))))
+                  "02d29nrmnj6kfa889cavqn1pkn9ssb5gyp4lz1v47spwx7abpdi7"))))
       (build-system gnu-build-system)
       (inputs `(("coreutils" ,coreutils)
                 ("grep" ,grep)
@@ -161,7 +161,7 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
            (delete 'configure)          ; no configure script
            (replace 'build
              (lambda _
-               (zero? (system* "gcc" "-o" "netunshare" "netunshare.c"))))
+               (invoke "gcc" "-o" "netunshare" "netunshare.c")))
            (replace 'install
              ;; There is no Makefile; manually install the relevant files.
              (lambda* (#:key outputs #:allow-other-keys)
@@ -193,7 +193,8 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
                                     "sed"
                                     "which")))))
                   (find-files (string-append out "/etc/vpnc/vpnc-script")
-                              "^vpnc-script"))))))
+                              "^vpnc-script"))
+                 #t))))
          #:tests? #f))                  ; no tests
       (home-page "http://git.infradead.org/users/dwmw2/vpnc-scripts.git")
       (synopsis "Network configuration scripts for Cisco VPN clients")
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 858ea1c759..3507dd59f2 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -61,6 +61,7 @@
   #:use-module (guix build-system ant)
   #:use-module (guix build-system scons)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages adns)
   #:use-module (gnu packages apr)
   #:use-module (gnu packages check)
@@ -93,6 +94,7 @@
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages libunistring)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages lisp)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages markup)
@@ -1845,31 +1847,27 @@ MIME type directly to the browser, without being processed through Catalyst.")
 (define-public perl-catalyst-runtime
   (package
     (name "perl-catalyst-runtime")
-    (version "5.90115")
+    (version "5.90118")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/J/JJ/JJNAPIORK/"
+       (uri (string-append "mirror://cpan/authors/id/H/HA/HAARG/"
                            "Catalyst-Runtime-" version ".tar.gz"))
        (sha256
         (base32
-         "0kh3ng6pjpxmndq9vrn515f70x7h44ish5bsgjwj4pjvchcyivzm"))))
+         "0cws3szx3vvh0372qdx8fypgv6qphcc3v81rbq30sl1ghby7ksd3"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-install" ,perl-module-install)
-       ("perl-test-fatal" ,perl-test-fatal)))
+     `(("perl-test-fatal" ,perl-test-fatal)))
     (propagated-inputs
      `(("perl-cgi-simple" ,perl-cgi-simple)
        ("perl-cgi-struct" ,perl-cgi-struct)
        ("perl-class-c3-adopt-next" ,perl-class-c3-adopt-next)
-       ("perl-class-data-inheritable" ,perl-class-data-inheritable)
        ("perl-class-date" ,perl-class-date)
        ("perl-class-load" ,perl-class-load)
        ("perl-data-dump" ,perl-data-dump)
        ("perl-http-body" ,perl-http-body)
        ("perl-http-message" ,perl-http-message)
-       ("perl-http-request-ascgi" ,perl-http-request-ascgi)
-       ("perl-io-stringy" ,perl-io-stringy)
        ("perl-json-maybexs" ,perl-json-maybexs)
        ("perl-libwww" ,perl-libwww)
        ("perl-module-pluggable" ,perl-module-pluggable)
@@ -1878,8 +1876,6 @@ MIME type directly to the browser, without being processed through Catalyst.")
         ,perl-moosex-emulate-class-accessor-fast)
        ("perl-moosex-getopt" ,perl-moosex-getopt)
        ("perl-moosex-methodattributes" ,perl-moosex-methodattributes)
-       ("perl-moosex-role-withoverloading" ,perl-moosex-role-withoverloading)
-       ("perl-namespace-autoclean" ,perl-namespace-autoclean)
        ("perl-namespace-clean" ,perl-namespace-clean)
        ("perl-path-class" ,perl-path-class)
        ("perl-plack" ,perl-plack)
@@ -2079,7 +2075,7 @@ application classes.")
 (define-public perl-catalystx-script-server-starman
   (package
     (name "perl-catalystx-script-server-starman")
-    (version "0.02")
+    (version "0.03")
     (source
      (origin
        (method url-fetch)
@@ -2088,7 +2084,7 @@ application classes.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0h02mpkc4cmi3jpvcd7iw7xyzx55bqvvl1qkf967gqkvpklm0qx5"))))
+         "08jvibq4v8xjj0c3cr93h0w8w0c88ajwjn37xjy7ygxl9krlffp6"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-module-install" ,perl-module-install)
@@ -2186,19 +2182,21 @@ HTTP requests.")
 (define-public perl-cgi-simple
   (package
     (name "perl-cgi-simple")
-    (version "1.115")
+    (version "1.15")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/S/SZ/SZABGAB/"
+       (uri (string-append "mirror://cpan/authors/id/M/MA/MANWAR/"
                            "CGI-Simple-" version ".tar.gz"))
        (sha256
         (base32
-         "1nkyb1m1g5r47xykflf68dplanih5p15njv82frbgbsms34kp1sg"))))
+         "013dcy9k4sj9alkksk5aqz65ryxw0rxgg71c7w666y941gd8n46q"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-build" ,perl-module-build)
-       ("perl-io-stringy" ,perl-io-stringy))) ;for IO::Scalar
+     `(("perl-io-stringy" ,perl-io-stringy) ; for IO::Scalar
+       ("perl-module-build" ,perl-module-build)
+       ("perl-test-exception" ,perl-test-exception)
+       ("perl-test-nowarnings" ,perl-test-nowarnings)))
     (home-page "http://search.cpan.org/dist/CGI-Simple")
     (synopsis "CGI interface that is CGI.pm compliant")
     (description "CGI::Simple provides a relatively lightweight drop in
@@ -4927,7 +4925,7 @@ tools like SSH (Secure Shell) to reach the outside world.")
 (define-public stunnel
   (package
   (name "stunnel")
-  (version "5.46")
+  (version "5.47")
   (source
     (origin
       (method url-fetch)
@@ -4935,12 +4933,34 @@ tools like SSH (Secure Shell) to reach the outside world.")
                           version ".tar.gz"))
       (sha256
        (base32
-        "1iw4gap9ysag8iww2ik029scmdllk7jdzcpnnbj7hgbl526b9akn"))))
+        "02qx0b0dd38rfcl9vfd6zq1pcg5gv0z2mxw5z3p2pfbfk7dpbrn4"))))
   (build-system gnu-build-system)
+  (native-inputs
+   ;; For tests.
+   `(("iproute" ,iproute)
+     ("netcat" ,netcat)
+     ("procps" ,procps)))
   (inputs `(("openssl" ,openssl)))
   (arguments
    `(#:configure-flags
-     (list (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl")))))
+     (list (string-append "--with-ssl=" (assoc-ref %build-inputs "openssl")))
+     #:phases
+     (modify-phases %standard-phases
+       (add-after 'unpack 'patch-output-directories
+         (lambda _
+           ;; Some (not all) Makefiles have a hard-coded incorrect docdir.
+           (substitute* (list "Makefile.in"
+                              "doc/Makefile.in"
+                              "tools/Makefile.in")
+             (("/doc/stunnel")
+              (string-append "/doc/" ,name "-" ,version)))
+           #t))
+       (add-before 'check 'patch-tests
+         (lambda _
+           (substitute* "tests/make_test"
+             (("/bin/sh ")
+              (string-append (which "sh") " ")))
+           #t)))))
   (home-page "https://www.stunnel.org")
   (synopsis "TLS proxy for clients or servers")
   (description "Stunnel is a proxy designed to add TLS encryption
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 6a936c7916..68d7c51ac1 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -223,7 +223,7 @@ integrate Windows applications into your desktop.")
 (define-public wine-staging-patchset-data
   (package
    (name "wine-staging-patchset-data")
-   (version "3.10")
+   (version "3.11")
    (source
     (origin
      (method url-fetch)
@@ -232,7 +232,7 @@ integrate Windows applications into your desktop.")
      (file-name (string-append name "-" version ".zip"))
      (sha256
       (base32
-       "14rf3g9szxygbd6ypg6zbqw1h84rn8gqgrzwi607xwgh8wm59sli"))))
+       "1sd9chv919y0wfqcshasl82899isvq9rik4h8d44g2cf4m9zzhvi"))))
    (build-system trivial-build-system)
    (native-inputs
     `(("bash" ,bash)
@@ -279,7 +279,7 @@ integrate Windows applications into your desktop.")
               (file-name (string-append name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1df6g8g5nfb4ca218m78giqp3k1fmv0grv26387rbn3wkk3mql6p"))))
+                "0zlhkz6aybkr9jg8za9x56fp92q10df0abadn9bsa8ryparr5d15"))))
     (inputs `(("autoconf" ,autoconf) ; for autoreconf
               ("gtk+" ,gtk+)
               ("libva" ,libva)
diff --git a/gnu/packages/xfig.scm b/gnu/packages/xfig.scm
index 86fbd9159b..9c1f28592f 100644
--- a/gnu/packages/xfig.scm
+++ b/gnu/packages/xfig.scm
@@ -119,7 +119,7 @@ selected in various ways.  For text, 35 fonts are available.")
                  (("/usr/local/lib/fig2dev") (string-append out "/lib")))
                ;; The -a argument is required in order to pick up the correct paths
                ;; to several X header files.
-               (zero? (system* "xmkmf" "-a"))
+               (invoke "xmkmf" "-a")
                (substitute* '("Makefile"
                               "fig2dev/Makefile"
                               "transfig/Makefile")
@@ -130,10 +130,11 @@ selected in various ways.  For text, 35 fonts are available.")
                  (("(MANPATH = )[[:graph:]]*" _ front)
                   (string-append front out "/share/man"))
                  (("(CONFDIR = )([[:graph:]]*)" _ front default)
-                  (string-append front out default))))))
+                  (string-append front out default)))
+               #t)))
          (add-after 'install 'install/doc
            (lambda _
-             (zero? (system* "make" "install.man")))))))
+             (invoke "make" "install.man"))))))
     (home-page "http://mcj.sourceforge.net/")
     (synopsis "Create portable LaTeX figures")
     (description
diff --git a/gnu/packages/zile.scm b/gnu/packages/zile.scm
index 858117de28..eea0dba272 100644
--- a/gnu/packages/zile.scm
+++ b/gnu/packages/zile.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012, 2013, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -122,10 +123,10 @@ default Emacs configuration, but it carries a much lighter feature set.")
                              (chmod file #o755))
                            (find-files "."))
                  (patch-shebang "gnulib/gnulib-tool")
-                 (zero? (system* "sh" "./bootstrap"
-                                 "--gnulib-srcdir=gnulib"
-                                 "--skip-git" "--skip-po"
-                                 "--verbose"))))
+                 (invoke "sh" "./bootstrap"
+                         "--gnulib-srcdir=gnulib"
+                         "--skip-git" "--skip-po"
+                         "--verbose")))
              (add-after 'install 'wrap-command
                (lambda* (#:key outputs #:allow-other-keys)
                  ;; Add zile.scm to the search path.
diff --git a/gnu/services/authentication.scm b/gnu/services/authentication.scm
new file mode 100644
index 0000000000..1a2629d475
--- /dev/null
+++ b/gnu/services/authentication.scm
@@ -0,0 +1,41 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
+;;;
+;;; 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 services authentication)
+  #:use-module (gnu services)
+  #:use-module (gnu services dbus)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:export (fprintd-configuration
+            fprintd-configuration?
+            fprintd-service-type))
+
+(define-record-type* <fprintd-configuration>
+  fprintd-configuration make-fprintd-configuration
+  fprintd-configuration?
+  (ntp      fprintd-configuration-fprintd
+            (default fprintd)))
+
+(define fprintd-service-type
+  (service-type (name 'fprintd)
+                (extensions
+                 (list (service-extension dbus-root-service-type
+                                          list)))
+                (description
+                 "Run fprintd, a fingerprint management daemon.")))
diff --git a/gnu/services/cuirass.scm b/gnu/services/cuirass.scm
index a9ef9881b3..4664a36dcf 100644
--- a/gnu/services/cuirass.scm
+++ b/gnu/services/cuirass.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -172,5 +173,7 @@
      (service-extension rottlog-service-type cuirass-log-rotations)
      (service-extension activation-service-type cuirass-activation)
      (service-extension shepherd-root-service-type cuirass-shepherd-service)
-     (service-extension account-service-type cuirass-account)))))
+     (service-extension account-service-type cuirass-account)))
+   (description
+    "Run the Cuirass continuous integration service.")))
 
diff --git a/gnu/services/cups.scm b/gnu/services/cups.scm
index 4c62e6a6f7..715d333a71 100644
--- a/gnu/services/cups.scm
+++ b/gnu/services/cups.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Andy Wingo <wingo@pobox.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1024,7 +1025,9 @@ extensions that it uses."
                        (append (opaque-cups-configuration-extensions config)
                                extensions)))))))
 
-                (default-value (cups-configuration))))
+                (default-value (cups-configuration))
+                (description
+                 "Run the CUPS print server.")))
 
 ;; A little helper to make it easier to document all those fields.
 (define (generate-cups-documentation)
diff --git a/gnu/services/sound.scm b/gnu/services/sound.scm
index 5fe555e8b6..f2dd24402f 100644
--- a/gnu/services/sound.scm
+++ b/gnu/services/sound.scm
@@ -26,6 +26,7 @@
   #:use-module (guix packages)
   #:use-module (guix records)
   #:use-module (guix store)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages pulseaudio)
   #:use-module (ice-9 match)
   #:export (alsa-configuration
@@ -44,17 +45,31 @@
 
 (define-record-type* <alsa-configuration>
   alsa-configuration make-alsa-configuration alsa-configuration?
+  (alsa-plugins alsa-configuration-alsa-plugins ;<package>
+                (default alsa-plugins))
   (pulseaudio?   alsa-configuration-pulseaudio? ;boolean
                  (default #t))
   (extra-options alsa-configuration-extra-options ;string
                  (default "")))
 
-(define (alsa-config-file config)
-  "Return the ALSA configuration file corresponding to CONFIG."
-  (plain-file "asound.conf"
-              (string-append "# Generated by 'alsa-service'.\n\n"
-                             (if (alsa-configuration-pulseaudio? config)
-                                 "# Use PulseAudio by default
+(define alsa-config-file
+  ;; Return the ALSA configuration file.
+  (match-lambda
+    (($ <alsa-configuration> alsa-plugins pulseaudio? extra-options)
+     (apply mixed-text-file "asound.conf"
+            `("# Generated by 'alsa-service'.\n\n"
+              ,@(if pulseaudio?
+                    `("# Use PulseAudio by default
+pcm_type.pulse {
+  lib \"" ,#~(string-append #$alsa-plugins:pulseaudio
+                            "/lib/alsa-lib/libasound_module_pcm_pulse.so") "\"
+}
+
+ctl_type.pulse {
+  lib \"" ,#~(string-append #$alsa-plugins:pulseaudio
+                            "/lib/alsa-lib/libasound_module_ctl_pulse.so") "\"
+}
+
 pcm.!default {
   type pulse
   fallback \"sysdefault\"
@@ -67,10 +82,9 @@ pcm.!default {
 ctl.!default {
   type pulse
   fallback \"sysdefault\"
-}
-"
-                                 "")
-                             (alsa-configuration-extra-options config))))
+}\n\n")
+                    '())
+              ,extra-options)))))
 
 (define (alsa-etc-service config)
   (list `("asound.conf" ,(alsa-config-file config))))
diff --git a/gnu/system.scm b/gnu/system.scm
index 84eab5f84f..e4a57475a9 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -359,6 +359,9 @@ marked as 'needed-for-boot'."
     (remove file-system-needed-for-boot?
             (operating-system-file-systems os)))
 
+  (define mapped-devices-for-boot
+    (operating-system-boot-mapped-devices os))
+
   (define (device-mappings fs)
     (let ((device (file-system-device fs)))
       (if (string? device)                        ;title is 'device
@@ -374,21 +377,23 @@ marked as 'needed-for-boot'."
     (file-system
       (inherit fs)
       (dependencies
-       (delete-duplicates (append (device-mappings fs)
-                                  (file-system-dependencies fs))
-                          eq?))))
+       (delete-duplicates
+        (remove (cut member <> mapped-devices-for-boot)
+                (append (device-mappings fs)
+                        (file-system-dependencies fs)))
+        eq?))))
 
   (service file-system-service-type
            (map add-dependencies file-systems)))
 
-(define (mapped-device-user device file-systems)
-  "Return a file system among FILE-SYSTEMS that uses DEVICE, or #f."
+(define (mapped-device-users device file-systems)
+  "Return the subset of FILE-SYSTEMS that use DEVICE."
   (let ((target (string-append "/dev/mapper/" (mapped-device-target device))))
-    (find (lambda (fs)
-            (or (member device (file-system-dependencies fs))
-                (and (string? (file-system-device fs))
-                     (string=? (file-system-device fs) target))))
-          file-systems)))
+    (filter (lambda (fs)
+              (or (member device (file-system-dependencies fs))
+                  (and (string? (file-system-device fs))
+                       (string=? (file-system-device fs) target))))
+            file-systems)))
 
 (define (operating-system-user-mapped-devices os)
   "Return the subset of mapped devices that can be installed in
@@ -396,9 +401,8 @@ user-land--i.e., those not needed during boot."
   (let ((devices      (operating-system-mapped-devices os))
         (file-systems (operating-system-file-systems os)))
    (filter (lambda (md)
-             (let ((user (mapped-device-user md file-systems)))
-               (or (not user)
-                   (not (file-system-needed-for-boot? user)))))
+             (let ((users (mapped-device-users md file-systems)))
+               (not (any file-system-needed-for-boot? users))))
            devices)))
 
 (define (operating-system-boot-mapped-devices os)
@@ -407,8 +411,8 @@ from the initrd."
   (let ((devices      (operating-system-mapped-devices os))
         (file-systems (operating-system-file-systems os)))
    (filter (lambda (md)
-             (let ((user (mapped-device-user md file-systems)))
-               (and user (file-system-needed-for-boot? user))))
+             (let ((users (mapped-device-users md file-systems)))
+               (any file-system-needed-for-boot? users)))
            devices)))
 
 (define (device-mapping-services os)