summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/guix.texi105
-rwxr-xr-xetc/guix-install.sh4
-rw-r--r--gnu/local.mk16
-rw-r--r--gnu/packages/admin.scm3
-rw-r--r--gnu/packages/audio.scm2
-rw-r--r--gnu/packages/benchmark.scm4
-rw-r--r--gnu/packages/bioinformatics.scm4
-rw-r--r--gnu/packages/bootloaders.scm18
-rw-r--r--gnu/packages/cook.scm37
-rw-r--r--gnu/packages/cran.scm4
-rw-r--r--gnu/packages/crypto.scm47
-rw-r--r--gnu/packages/debug.scm2
-rw-r--r--gnu/packages/ebook.scm16
-rw-r--r--gnu/packages/emacs.scm66
-rw-r--r--gnu/packages/emulators.scm1111
-rw-r--r--gnu/packages/games.scm923
-rw-r--r--gnu/packages/geo.scm114
-rw-r--r--gnu/packages/gettext.scm2
-rw-r--r--gnu/packages/gl.scm6
-rw-r--r--gnu/packages/gnome.scm4
-rw-r--r--gnu/packages/gnupg.scm4
-rw-r--r--gnu/packages/image.scm17
-rw-r--r--gnu/packages/ldc.scm126
-rw-r--r--gnu/packages/license.scm160
-rw-r--r--gnu/packages/linux.scm37
-rw-r--r--gnu/packages/lout.scm147
-rw-r--r--gnu/packages/mail.scm4
-rw-r--r--gnu/packages/maths.scm28
-rw-r--r--gnu/packages/mpd.scm22
-rw-r--r--gnu/packages/musl.scm7
-rw-r--r--gnu/packages/networking.scm12
-rw-r--r--gnu/packages/parallel.scm4
-rw-r--r--gnu/packages/password-utils.scm5
-rw-r--r--gnu/packages/patches/htop-fix-process-tree.patch99
-rw-r--r--gnu/packages/patches/ldc-1.1.0-disable-dmd-tests.patch35
-rw-r--r--gnu/packages/patches/ldc-1.1.0-disable-phobos-tests.patch414
-rw-r--r--gnu/packages/patches/ldc-1.7.0-disable-phobos-tests.patch88
-rw-r--r--gnu/packages/patches/ldc-bootstrap-disable-tests.patch (renamed from gnu/packages/patches/ldc-disable-tests.patch)18
-rw-r--r--gnu/packages/patches/optipng-CVE-2017-1000229.patch22
-rw-r--r--gnu/packages/patches/password-store-gnupg-compat.patch28
-rw-r--r--gnu/packages/patches/qemu-CVE-2017-15038.patch51
-rw-r--r--gnu/packages/patches/qemu-CVE-2017-15289.patch66
-rw-r--r--gnu/packages/patches/wavpack-CVE-2018-7253.patch29
-rw-r--r--gnu/packages/patches/wavpack-CVE-2018-7254.patch62
-rw-r--r--gnu/packages/perl-check.scm73
-rw-r--r--gnu/packages/perl.scm411
-rw-r--r--gnu/packages/pumpio.scm7
-rw-r--r--gnu/packages/python.scm4
-rw-r--r--gnu/packages/samba.scm4
-rw-r--r--gnu/packages/scheme.scm47
-rw-r--r--gnu/packages/security-token.scm6
-rw-r--r--gnu/packages/skarnet.scm90
-rw-r--r--gnu/packages/slang.scm10
-rw-r--r--gnu/packages/statistics.scm39
-rw-r--r--gnu/packages/tls.scm4
-rw-r--r--gnu/packages/upnp.scm4
-rw-r--r--gnu/packages/version-control.scm35
-rw-r--r--gnu/packages/video.scm19
-rw-r--r--gnu/packages/virtualization.scm6
-rw-r--r--gnu/packages/vulkan.scm15
-rw-r--r--gnu/packages/web.scm8
-rw-r--r--gnu/packages/wm.scm55
-rw-r--r--gnu/packages/wxwidgets.scm36
-rw-r--r--gnu/packages/xorg.scm4
-rw-r--r--gnu/services/certbot.scm137
-rw-r--r--gnu/services/xorg.scm9
-rw-r--r--guix/scripts/environment.scm22
-rw-r--r--tests/guix-environment.sh9
68 files changed, 3058 insertions, 1969 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 7ed39ff132..691164502b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -30,7 +30,7 @@ Copyright @copyright{} 2016, 2017 ng0@*
 Copyright @copyright{} 2016, 2017 Jan Nieuwenhuizen@*
 Copyright @copyright{} 2016 Julien Lepiller@*
 Copyright @copyright{} 2016 Alex ter Weele@*
-Copyright @copyright{} 2017 Clément Lassieur@*
+Copyright @copyright{} 2017, 2018 Clément Lassieur@*
 Copyright @copyright{} 2017 Mathieu Othacehe@*
 Copyright @copyright{} 2017 Federico Beffa@*
 Copyright @copyright{} 2017 Carlo Zancanaro@*
@@ -7231,6 +7231,15 @@ As an example, @var{file} might contain a definition like this
 @verbatiminclude environment-gdb.scm
 @end example
 
+@item --manifest=@var{file}
+@itemx -m @var{file}
+Create an environment for the packages contained in the manifest object
+returned by the Scheme code in @var{file}.
+
+This is similar to the same-named option in @command{guix package}
+(@pxref{profile-manifest, @option{--manifest}}) and uses the same
+manifest files.
+
 @item --ad-hoc
 Include all specified packages in the resulting environment, as if an
 @i{ad hoc} package were defined with them as inputs.  This option is
@@ -11263,6 +11272,9 @@ The XAuth package to use.
 The Shepherd package used when invoking @command{halt} and
 @command{reboot}.
 
+@item @code{sessreg} (default: @code{sessreg})
+The sessreg package used in order to register the session.
+
 @item @code{slim} (default: @code{slim})
 The SLiM package to use.
 @end table
@@ -15721,14 +15733,48 @@ signature.
 The certbot service automates this process: the initial key
 generation, the initial certification request to the Let's Encrypt
 service, the web server challenge/response integration, writing the
-certificate to disk, and the automated periodic renewals.
+certificate to disk, the automated periodic renewals, and the deployment
+tasks associated with the renewal (e.g. reloading services, copying keys
+with different permissions).
+
+Certbot is run twice a day, at a random minute within the hour.  It
+won't do anything until your certificates are due for renewal or
+revoked, but running it regularly would give your service a chance of
+staying online in case a Let's Encrypt-initiated revocation happened for
+some reason.
+
+By using this service, you agree to the ACME Subscriber Agreement, which
+can be found there:
+@url{https://acme-v01.api.letsencrypt.org/directory}.
 
 @defvr {Scheme Variable} certbot-service-type
-A service type for the @code{certbot} Let's Encrypt client.
+A service type for the @code{certbot} Let's Encrypt client.  Its value
+must be a @code{certbot-configuration} record as in this example:
+
+@example
+(define %nginx-deploy-hook
+  (program-file
+   "nginx-deploy-hook"
+   #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
+       (kill pid SIGHUP))))
+
+(service certbot-service-type
+         (certbot-configuration
+          (email "foo@@example.net")
+          (certificates
+           (list
+            (certificate-configuration
+             (domains '("example.net" "www.example.net"))
+             (deploy-hook %nginx-deploy-hook))
+            (certificate-configuration
+             (domains '("bar.example.net")))))))
+@end example
+
+See below for details about @code{certbot-configuration}.
 @end defvr
 
 @deftp {Data Type} certbot-configuration
-Data type representing the configuration of the @code{certbot} serice.
+Data type representing the configuration of the @code{certbot} service.
 This type has the following parameters:
 
 @table @asis
@@ -15739,16 +15785,24 @@ The certbot package to use.
 The directory from which to serve the Let's Encrypt challenge/response
 files.
 
-@item @code{hosts} (default: @code{()})
-A list of hosts for which to generate certificates and request
-signatures.
+@item @code{certificates} (default: @code{()})
+A list of @code{certificates-configuration}s for which to generate
+certificates and request signatures.  Each certificate has a @code{name}
+and several @code{domains}.
+
+@item @code{email}
+Mandatory email used for registration, recovery contact, and important
+account notifications.
+
+@item @code{rsa-key-size} (default: @code{2048})
+Size of the RSA key.
 
 @item @code{default-location} (default: @i{see below})
 The default @code{nginx-location-configuration}.  Because @code{certbot}
 needs to be able to serve challenges and responses, it needs to be able
 to run a web server.  It does so by extending the @code{nginx} web
 service with an @code{nginx-server-configuration} listening on the
-@var{hosts} on port 80, and which has a
+@var{domains} on port 80, and which has a
 @code{nginx-location-configuration} for the @code{/.well-known/} URI
 path subspace used by Let's Encrypt.  @xref{Web Services}, for more on
 these nginx configuration data types.
@@ -15758,19 +15812,44 @@ Requests to other URL paths will be matched by the
 @code{nginx-server-configuration}s.
 
 By default, the @code{default-location} will issue a redirect from
-@code{http://@var{host}/...} to @code{https://@var{host}/...}, leaving
+@code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
 you to define what to serve on your site via @code{https}.
 
 Pass @code{#f} to not issue a default location.
 @end table
 @end deftp
 
-The public key and its signatures will be written to
-@code{/etc/letsencrypt/live/@var{host}/fullchain.pem}, for each
-@var{host} in the configuration.  The private key is written to
-@code{/etc/letsencrypt/live/@var{host}/privkey.pem}.
+@deftp {Data Type} certificate-configuration
+Data type representing the configuration of a certificate.
+This type has the following parameters:
+
+@table @asis
+@item @code{name} (default: @i{see below})
+This name is used by Certbot for housekeeping and in file paths; it
+doesn't affect the content of the certificate itself.  To see
+certificate names, run @code{certbot certificates}.
+
+Its default is the first provided domain.
+
+@item @code{domains} (default: @code{()})
+The first domain provided will be the subject CN of the certificate, and
+all domains will be Subject Alternative Names on the certificate.
+
+@item @code{deploy-hook} (default: @code{#f})
+Command to be run in a shell once for each successfully issued
+certificate.  For this command, the shell variable
+@code{$RENEWED_LINEAGE} will point to the config live subdirectory (for
+example, @samp{"/etc/letsencrypt/live/example.com"}) containing the new
+certificates and keys; the shell variable @code{$RENEWED_DOMAINS} will
+contain a space-delimited list of renewed certificate domains (for
+example, @samp{"example.com www.example.com"}.
 
+@end table
+@end deftp
 
+For each @code{certificate-configuration}, the certificate is saved to
+@code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is
+saved to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
 @node DNS Services
 @subsubsection DNS Services
 @cindex DNS (domain name system)
diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index 75cff68d8b..933492a338 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -2,6 +2,7 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2017 sharlatan <sharlatanus@gmail.com>
 # Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+# Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 #
 # This file is part of GNU Guix.
 #
@@ -153,6 +154,9 @@ chk_sys_arch()
         x86_64 | x86-64 | x64 | amd64)
             local arch=x86_64
             ;;
+        aarch64)
+            local arch=aarch64
+            ;;
         *)
             _err "${ERR}Unsupported CPU type: ${arch}"
             exit 1
diff --git a/gnu/local.mk b/gnu/local.mk
index ce110516be..49aea157a1 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -13,7 +13,7 @@
 # Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 # Copyright © 2016, 2017 Jan Nieuwenhuizen <janneke@gnu.org>
 # Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
-# Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+# Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 # Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 # Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
 # Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
@@ -142,6 +142,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/elixir.scm			\
   %D%/packages/embedded.scm			\
   %D%/packages/emacs.scm			\
+  %D%/packages/emulators.scm			\
   %D%/packages/enchant.scm			\
   %D%/packages/engineering.scm			\
   %D%/packages/enlightenment.scm		\
@@ -248,6 +249,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/libffcall.scm			\
   %D%/packages/libffi.scm			\
   %D%/packages/libftdi.scm			\
+  %D%/packages/license.scm			\
   %D%/packages/calendar.scm			\
   %D%/packages/libidn.scm			\
   %D%/packages/libphidget.scm			\
@@ -763,6 +765,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/heimdal-CVE-2017-11103.patch		\
   %D%/packages/patches/hmmer-remove-cpu-specificity.patch	\
   %D%/packages/patches/higan-remove-march-native-flag.patch	\
+  %D%/packages/patches/htop-fix-process-tree.patch		\
   %D%/packages/patches/hubbub-sort-entities.patch		\
   %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
   %D%/packages/patches/hwloc-tests-without-sysfs.patch		\
@@ -801,9 +804,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/kobodeluxe-graphics-window-signed-char.patch	\
   %D%/packages/patches/laby-make-install.patch			\
   %D%/packages/patches/lcms-CVE-2016-10165.patch		\
-  %D%/packages/patches/ldc-disable-tests.patch			\
-  %D%/packages/patches/ldc-1.1.0-disable-dmd-tests.patch	\
-  %D%/packages/patches/ldc-1.1.0-disable-phobos-tests.patch	\
+  %D%/packages/patches/ldc-bootstrap-disable-tests.patch	\
+  %D%/packages/patches/ldc-1.7.0-disable-phobos-tests.patch	\
   %D%/packages/patches/ledger-fix-uninitialized.patch		\
   %D%/packages/patches/ledger-revert-boost-python-fix.patch	\
   %D%/packages/patches/liba52-enable-pic.patch			\
@@ -948,7 +950,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/openssl-runpath.patch			\
   %D%/packages/patches/openssl-1.1.0-c-rehash-in.patch		\
   %D%/packages/patches/openssl-c-rehash-in.patch		\
-  %D%/packages/patches/optipng-CVE-2017-1000229.patch		\
   %D%/packages/patches/orpheus-cast-errors-and-includes.patch	\
   %D%/packages/patches/osip-CVE-2017-7853.patch			\
   %D%/packages/patches/ots-no-include-missing-file.patch	\
@@ -956,6 +957,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/p7zip-CVE-2016-9296.patch		\
   %D%/packages/patches/p7zip-CVE-2017-17969.patch		\
   %D%/packages/patches/p7zip-remove-unused-code.patch		\
+  %D%/packages/patches/password-store-gnupg-compat.patch	\
   %D%/packages/patches/patchelf-page-size.patch			\
   %D%/packages/patches/patchelf-rework-for-arm.patch		\
   %D%/packages/patches/patchutils-xfail-gendiff-tests.patch	\
@@ -1044,8 +1046,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-unittest2-python3-compat.patch	\
   %D%/packages/patches/python-unittest2-remove-argparse.patch	\
   %D%/packages/patches/python-waitress-fix-tests.patch		\
-  %D%/packages/patches/qemu-CVE-2017-15038.patch		\
-  %D%/packages/patches/qemu-CVE-2017-15289.patch		\
   %D%/packages/patches/qt4-ldflags.patch			\
   %D%/packages/patches/qtbase-use-TZDIR.patch			\
   %D%/packages/patches/qtscript-disable-tests.patch		\
@@ -1141,6 +1141,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/vsearch-unbundle-cityhash.patch		\
   %D%/packages/patches/vte-CVE-2012-2738-pt1.patch			\
   %D%/packages/patches/vte-CVE-2012-2738-pt2.patch			\
+  %D%/packages/patches/wavpack-CVE-2018-7253.patch		\
+  %D%/packages/patches/wavpack-CVE-2018-7254.patch		\
   %D%/packages/patches/weechat-python.patch			\
   %D%/packages/patches/wicd-bitrate-none-fix.patch		\
   %D%/packages/patches/wicd-get-selected-profile-fix.patch	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 6121402048..cf9524eb5f 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -269,7 +269,8 @@ graphs and can export its output to different formats.")
                   version "/htop-" version ".tar.gz"))
             (sha256
              (base32
-              "0j07z0xm2gj1vzvbgh4323k4db9mr7drd7gw95mmpqi61ncvwq1j"))))
+              "0j07z0xm2gj1vzvbgh4323k4db9mr7drd7gw95mmpqi61ncvwq1j"))
+            (patches (search-patches "htop-fix-process-tree.patch"))))
    (build-system gnu-build-system)
    (inputs
     `(("ncurses" ,ncurses)))
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 47179aea92..b1a15ed34d 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -2377,6 +2377,8 @@ stretching and pitch scaling of audio.  This package contains the library.")
               (method url-fetch)
               (uri (string-append "http://www.wavpack.com/"
                                   name "-" version ".tar.bz2"))
+              (patches (search-patches "wavpack-CVE-2018-7253.patch"
+                                       "wavpack-CVE-2018-7254.patch"))
               (sha256
                (base32
                 "0i19c6krc0p9krwrqy9s5xahaafigqzxcn31piidmlaqadyn4f8r"))))
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index ae7279f286..77dcd78331 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -34,7 +34,7 @@
 (define-public fio
   (package
     (name "fio")
-    (version "3.4")
+    (version "3.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -42,7 +42,7 @@
                        "fio-" version ".tar.bz2"))
               (sha256
                (base32
-                "01dqvg5mgb4fh1jqqmi179k2rb517p4h4sr3mhlnd0alk1x12w8a"))))
+                "1rrzcrn07db4pffvi2q0d0k884bwcapx6r1rfv4yx9066snvx240"))))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "test"
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 820bd84d66..c427a6d036 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -8111,7 +8111,7 @@ throughput genetic sequencing data sets using regression methods.")
 (define-public r-qtl
  (package
   (name "r-qtl")
-  (version "1.42-7")
+  (version "1.42-8")
   (source
    (origin
     (method url-fetch)
@@ -8119,7 +8119,7 @@ throughput genetic sequencing data sets using regression methods.")
                         version ".tar.gz"))
     (sha256
      (base32
-      "0hxij8v4my5x4pf5fn5327g7m3n7vjkbzrl580vcmp81n3n3nmrx"))))
+      "1l528dwvfpdlr05imrrm4rq32axp6hld9nqm6mm43kn5n7z2f5k6"))))
   (build-system r-build-system)
   (home-page "http://rqtl.org/")
   (synopsis "R package for analyzing QTL experiments in genetics")
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 59eb22f242..9ea8748a5b 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -71,6 +71,22 @@
      (base32
       "0p2vhnc18cnbmb39vq4m7hzv4mhnm2l0a2s7gx3ar277fwng3hys"))))
 
+;; The GRUB test suite fails with later versions of Qemu, so we
+;; keep it at 2.10 for now.  See
+;; <https://lists.gnu.org/archive/html/bug-grub/2018-02/msg00004.html>.
+;; TODO: When grub no longer needs this version, move to gnu/packages/debug.scm.
+(define qemu-minimal-2.10
+  (package
+    (inherit qemu-minimal)
+    (version "2.10.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://download.qemu.org/qemu-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))))))
+
 (define-public grub
   (package
     (name "grub")
@@ -144,7 +160,7 @@
        ;; Dependencies for the test suite.  The "real" QEMU is needed here,
        ;; because several targets are used.
        ("parted" ,parted)
-       ("qemu" ,qemu-minimal)
+       ("qemu" ,qemu-minimal-2.10)
        ("xorriso" ,xorriso)))
     (home-page "https://www.gnu.org/software/grub/")
     (synopsis "GRand Unified Boot loader")
diff --git a/gnu/packages/cook.scm b/gnu/packages/cook.scm
index e149968f24..17e090d725 100644
--- a/gnu/packages/cook.scm
+++ b/gnu/packages/cook.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,26 +42,26 @@
     (arguments
      `(#:parallel-build? #f ; There are some nasty racy rules in the Makefile.
        #:phases
-       (alist-cons-before
-        'configure 'pre-conf
-        (lambda _
-          (substitute* (append '("common/env.c")
-                               (find-files "test" "\\.sh"))
-            (("/bin/sh") (which "sh")))
+       (modify-phases %standard-phases
+         (add-before 'configure 'pre-conf
+           (lambda _
+             (substitute* (append '("common/env.c")
+                                  (find-files "test" "\\.sh"))
+               (("/bin/sh") (which "sh")))
 
-          ;; Guix's binutils (because it wants bit-reproducable builds) is
-          ;; is configured with the  --enable-deterministic-archives flag.
-          ;; This means the timestamp of files appended to an ar archive
-          ;; are automatically and silently mutated to 00:00 1 Jan 1970
-          ;; which plays havoc with this test, for which correct timestamps
-          ;; are very important. Adding the U flag undoes the effect of
-          ;; --enable-deterministic-archives and allows this test to work
-          ;; again.
-          (substitute* "test/00/t0077a.sh"
-            (("ar qc") "ar qcU"))
+             ;; Guix's binutils (because it wants bit-reproducable builds) is
+             ;; is configured with the  --enable-deterministic-archives flag.
+             ;; This means the timestamp of files appended to an ar archive
+             ;; are automatically and silently mutated to 00:00 1 Jan 1970
+             ;; which plays havoc with this test, for which correct timestamps
+             ;; are very important. Adding the U flag undoes the effect of
+             ;; --enable-deterministic-archives and allows this test to work
+             ;; again.
+             (substitute* "test/00/t0077a.sh"
+               (("ar qc") "ar qcU"))
 
-          (setenv "SH" (which "sh")))
-        %standard-phases)))
+             (setenv "SH" (which "sh"))
+             #t)))))
     (native-inputs `(("bison" ,bison)
                      ;; For building the documentation:
                      ("groff" ,groff)
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 108650d19a..e1fb1b6215 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -1109,14 +1109,14 @@ methods.")
 (define-public r-timedate
   (package
     (name "r-timedate")
-    (version "3042.101")
+    (version "3043.102")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "timeDate" version))
        (sha256
         (base32
-         "0vcckaw1gqz3j4v69r9jn41vlmk5a5c7572xam1nl75ki5v4r3bc"))))
+         "0wvl5pq261rvbgly7vilk3x3m9xk3ly6il1i5scwdf6srl1vlz1p"))))
     (properties `((upstream-name . "timeDate")))
     (build-system r-build-system)
     (home-page "https://www.rmetrics.org")
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 225c26378d..695f6ca088 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2016, 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -663,3 +664,49 @@ that are faster than MD5, SHA-1, SHA-2, and SHA-3, yet are at least as secure
 as the latest standard, SHA-3.  It is an improved version of the SHA-3 finalist
 BLAKE.")
       (license license:public-domain))))
+
+(define-public rhash
+  (package
+    (name "rhash")
+    (version "1.3.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/rhash/RHash/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0bhz3xdl6r06k1bqigdjz42l31iqz2qdpg7zk316i7p2ra56iq4q"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list "CC=gcc"
+                          (string-append "PREFIX=" %output))
+       #:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "Makefile"
+               (("\\$\\(DESTDIR\\)/etc")
+                (string-append (assoc-ref outputs "out") "/etc")))
+             #t))
+         (add-after 'build 'build-library
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "lib-shared" make-flags)))
+         (add-after 'install 'install-library
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "install-lib-shared" make-flags)
+             (apply invoke
+                    "make" "-C" "librhash" "install-headers"
+                    "install-so-link" make-flags)))
+         (add-after 'check 'check-library
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "test-shared-lib" make-flags))))))
+    (home-page "https://sourceforge.net/projects/rhash/")
+    (synopsis "Utility for computing hash sums")
+    (description "RHash is a console utility for calculation and verification
+of magnet links and a wide range of hash sums like CRC32, MD4, MD5, SHA1,
+SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R
+34.11-94, RIPEMD-160, HAS-160, EDON-R, Whirlpool and Snefru.")
+    (license (license:non-copyleft "file://COPYING"))))
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 09efcbdd6c..2354f0fbb9 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -169,7 +169,7 @@ tools that process C/C++ code.")
       (inputs
        `(("custom-qemu"
           ;; The afl-qemu tool builds qemu 2.10.0 with a few patches applied.
-          ,(package (inherit qemu-minimal)
+          ,(package (inherit (@@ (gnu packages bootloaders) qemu-minimal-2.10))
              (name "afl-qemu")
              (inputs
               `(("afl-src" ,source)
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index 7d34bfafac..bf4b6a750e 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,7 +75,7 @@
 (define-public calibre
   (package
     (name "calibre")
-    (version "3.11.1")
+    (version "3.17.0")
     (source
       (origin
         (method url-fetch)
@@ -83,7 +84,7 @@
                             version ".tar.xz"))
         (sha256
          (base32
-          "0kwza7iyyyfhq476z5fk9962iyd0qpgmzm1k36nqcy8sfjbk8mrl"))
+          "1w6hw1s0d4daa4q2ykzhxdndiq61l8z7ls7rxh7k7p62ia0i5sxp"))
         ;; Remove non-free or doubtful code, see
         ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html
         (modules '((guix build utils)))
@@ -175,7 +176,8 @@
               (substitute* "setup/build_environment.py"
                 (("sys.prefix") (string-append "'" pyqt "'")))
               (setenv "PODOFO_INC_DIR" (string-append podofo "/include/podofo"))
-              (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib")))))
+              (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib"))
+              #t)))
          (add-after 'install 'install-font-liberation
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (for-each (lambda (file)
@@ -194,11 +196,11 @@
              #t)))))
     (home-page "http://calibre-ebook.com/")
     (synopsis "E-book library management software")
-    (description "Calibre is an ebook library manager.  It can view, convert
-and catalog ebooks in most of the major ebook formats.  It can also talk
-to many ebook reader devices.  It can go out to the Internet and fetch
+    (description "Calibre is an e-book library manager.  It can view, convert
+and catalog e-books in most of the major e-book formats.  It can also talk
+to many e-book reader devices.  It can go out to the Internet and fetch
 metadata for books.  It can download newspapers and convert them into
-ebooks for convenient reading.")
+e-books for convenient reading.")
     ;; Calibre is largely GPL3+, but includes a number of components covered
     ;; by other licenses. See COPYRIGHT for more details.
     (license (list license:gpl3+
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 94b371202c..81e6885f66 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -3844,6 +3844,26 @@ strings, and code folding.")
 in Emacs.")
     (license license:gpl3+)))
 
+(define-public emacs-edit-indirect
+  (package
+    (name "emacs-edit-indirect")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/Fanael/edit-indirect/archive/"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "07kr58rd1p5j764wminsssazr73hy51yw8iqcsv5z2dwgj7msv71"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/Fanael/edit-indirect")
+    (synopsis "Edit regions in separate buffers")
+    (description "This package allows you to edit regions in separate buffers,
+like @code{org-edit-src-code} but for arbitrary regions.")
+    (license license:gpl3+)))
+
 (define-public emacs-projectile
   (package
     (name "emacs-projectile")
@@ -4266,6 +4286,52 @@ are pretty much the same (and SLIME served as the principle inspiration for
 CIDER).")
     (license license:gpl3+)))
 
+;; There hasn't been a tag or release since 2015, so we take the latest
+;; commit.
+(define-public emacs-sly
+  (let ((commit "486bfbe95612bcdc0960c490207970a188e0fbb9")
+        (revision "1"))
+    (package
+      (name "emacs-sly")
+      (version (string-append "1.0.0-" revision "." (string-take commit 9)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/joaotavora/sly.git")
+               (commit commit)))
+         (sha256
+          (base32
+           "0ib4q4k3h3qn88pymyjjmlmnpizdn1mfg5gpk5a715nqsgxlg09l"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:include (cons "^lib\\/" %default-include)
+         #:phases
+         ;; The package provides autoloads.
+         (modify-phases %standard-phases
+           (delete 'make-autoloads))))
+      (home-page "https://github.com/joaotavora/sly")
+      (synopsis "Sylvester the Cat's Common Lisp IDE")
+      (description
+       "SLY is Sylvester the Cat's Common Lisp IDE.  SLY is a fork of SLIME, and
+contains the following improvements over it:
+
+@enumerate
+@item Completely redesigned REPL based on Emacs's own full-featured
+  @code{comint.el}
+@item Live code annotations via a new @code{sly-stickers} contrib
+@item Consistent interactive button interface.  Everything can be copied to
+  the REPL.
+@item Multiple inspectors with independent history
+@item Regexp-capable @code{M-x sly-apropos}
+@item Contribs are first class SLY citizens and enabled by default
+@item Use ASDF to loads contribs on demand.
+@end enumerate
+
+SLY tracks SLIME's bugfixes and all its familar features (debugger, inspector,
+xref, etc...) are still available, but with better integration.")
+      (license license:gpl3+))))
+
 (define-public emacs-lua-mode
   (let ((commit "652e299cb967fccca827dda381d61a9c144d97de")
         (revision "1"))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
new file mode 100644
index 0000000000..142603b082
--- /dev/null
+++ b/gnu/packages/emulators.scm
@@ -0,0 +1,1111 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
+;;; Copyright © 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
+;;; Copyright © 2015, 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
+;;; Copyright © 2015, 2018 David Thompson <dthompson2@worcester.edu>
+;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
+;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.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 emulators)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix svn-download)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages audio)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages backup)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages fonts)
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages game-development)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages libedit)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages sdl)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages upnp)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages vulkan)
+  #:use-module (gnu packages wxwidgets)
+  #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xiph)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages xorg)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu))
+
+(define-public desmume
+  (package
+    (name "desmume")
+    (version "0.9.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://sourceforge/desmume/desmume/"
+             version "/desmume-" version ".tar.gz"))
+       (sha256
+        (base32
+         "15l8wdw3q61fniy3h93d84dnm6s4pyadvh95a0j6d580rjk4pcrs"))))
+    (build-system gnu-build-system)
+    (arguments
+     ;; Enable support for WiFi and microphone.
+     `(#:configure-flags '("--enable-wifi"
+                           "--enable-openal")))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("intltool" ,intltool)))
+    (inputs
+     `(("zlib" ,zlib)
+       ("sdl" ,sdl)
+       ("glib" ,glib)
+       ("gtk+" ,gtk+-2)
+       ("glu" ,glu)))
+    (home-page "http://desmume.org/")
+    (synopsis "Nintendo DS emulator")
+    (description
+     "DeSmuME is an emulator for the Nintendo DS handheld gaming console.")
+    (license license:gpl2)))
+
+;; Building from recent Git because the official 5.0 release no longer builds.
+(define-public dolphin-emu
+  (let ((commit "d04b179111f8d863f360839474cb82c766f762b8")
+        (revision "0"))
+    (package
+      (name "dolphin-emu")
+      (version (git-version "5.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/dolphin-emu/dolphin.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             ;; Remove external stuff we don't need.
+             (for-each (lambda (dir)
+                         (delete-file-recursively
+                           (string-append "Externals/" dir)))
+                       '("LZO" "OpenAL" "Qt" "SFML" "SOIL" "curl" "ffmpeg"
+                         "gettext" "hidapi" "libpng" "libusb" "mbedtls"
+                         "miniupnpc" "wxWidgets3" "zlib"))
+             ;; Clean up source.
+             (for-each delete-file (find-files "." ".*\\.(bin|dsy|exe|jar|rar)$"))
+             #t))
+         (sha256
+          (base32
+           "0g725wmhlim73zrhi47wmr1bmplpy4b7sbimd5pm8xpfhj5nm10l"))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:tests? #f
+         ;; The FindGTK2 cmake script only checks hardcoded directories for
+         ;; glib/gtk headers.
+
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'configure 'generate-fonts&hardcore-libvulkan-path
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((fontfile
+                      (string-append (assoc-ref inputs "font-wqy-microhei")
+                                     "/share/fonts/truetype/wqy-microhei.ttc"))
+                     (libvulkan
+                      (string-append (assoc-ref inputs "vulkan-icd-loader")
+                                     "/lib/libvulkan.so")))
+                 (chdir "docs")
+                 (invoke "bash" "-c" "g++ -O2 -std=c++11 $(freetype-config \
+--cflags --libs) gc-font-tool.cpp -o gc-font-tool")
+                 (invoke "./gc-font-tool" "a" fontfile "font_western.bin")
+                 (invoke "./gc-font-tool" "s" fontfile "font_japanese.bin")
+                 (copy-file "font_japanese.bin" "../Data/Sys/GC/font_japanese.bin")
+                 (copy-file "font_western.bin" "../Data/Sys/GC/font_western.bin")
+                 (chdir "..")
+                 (substitute* "Source/Core/VideoBackends/Vulkan/VulkanLoader.cpp"
+                              (("libvulkan.so") libvulkan))
+                 #t))))
+
+         #:configure-flags
+         (list (string-append "-DGTK2_GDKCONFIG_INCLUDE_DIR="
+                              (assoc-ref %build-inputs "gtk+")
+                              "/lib/gtk-2.0/include")
+               (string-append "-DGTK2_GLIBCONFIG_INCLUDE_DIR="
+                              (assoc-ref %build-inputs "glib")
+                              "/lib/glib-2.0/include")
+               (string-append "-DX11_INCLUDE_DIR="
+                              (assoc-ref %build-inputs "libx11")
+                              "/include")
+               (string-append "-DX11_LIBRARIES="
+                              (assoc-ref %build-inputs "libx11")
+                              "/lib/libX11.so")
+               "-DX11_FOUND=1")))
+      (native-inputs
+       `(("pkg-config" ,pkg-config)
+         ("gettext" ,gnu-gettext)))
+      (inputs
+       `(("alsa-lib" ,alsa-lib)
+         ("ao" ,ao)
+         ("bluez" ,bluez)
+         ("curl" ,curl)
+         ("eudev" ,eudev)
+         ("ffmpeg" ,ffmpeg)
+         ("font-wqy-microhei" ,font-wqy-microhei)
+         ("freetype" ,freetype)
+         ("glew" ,glew)
+         ("glib" ,glib)
+         ("glu" ,glu)
+         ("gtk+" ,gtk+-2)
+         ("hidapi" ,hidapi)
+         ("libevdev" ,libevdev)
+         ("libpng" ,libpng)
+         ("libusb" ,libusb)
+         ("libx11" ,libx11)
+         ("libxi" ,libxi)
+         ("libxrandr" ,libxrandr)
+         ("lzo" ,lzo)
+         ("mbedtls-apache" ,mbedtls-apache)
+         ("mesa" ,mesa)
+         ("miniupnpc" ,miniupnpc)
+         ("openal" ,openal)
+         ("pulseaudio" ,pulseaudio)
+         ("qtbase" ,qtbase)
+         ("sdl2" ,sdl2)
+         ("sfml" ,sfml)
+         ("soil" ,soil)
+         ("soundtouch" ,soundtouch)
+         ("vulkan-icd-loader" ,vulkan-icd-loader)
+         ("wxwidgets" ,wxwidgets-gtk2-3.1)
+         ("zlib" ,zlib)))
+      (home-page "https://dolphin-emu.org/")
+      (synopsis "Nintendo Wii and GameCube emulator")
+      (description
+       "Dolphin is an emulator for two Nintendo video game consoles: the
+GameCube and the Wii.  It provides compatibility with all PC controllers,
+turbo speed, networked multiplayer, and graphical enhancements.")
+      (supported-systems '("x86_64-linux" "aarch64-linux"))
+      ; dolphin/Data/Sys/GC/font_*.bin: Licensed under ASL2.0.
+      (license (list license:gpl2+ license:asl2.0 license:fdl1.2+)))))
+
+(define-public dosbox
+  (package
+    (name "dosbox")
+    (version "0.74.svn3947")
+    (source (origin
+              (method svn-fetch)
+              (uri (svn-reference
+                    (url "http://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk/")
+                    (revision 3947)))
+              (file-name (string-append name "-" version "-checkout"))
+              ;; Use SVN head, since the last release (2010) is incompatible
+              ;; with GCC 4.8+ (see
+              ;; <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=624976>).
+              (sha256
+               (base32
+                "1p918j6090d1nkvgq7ifvmn506zrdmyi32y7p3ms40d5ssqjg8fj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after
+                   'unpack 'autogen.sh
+                   (lambda _
+                     (zero? (system* "sh" "autogen.sh")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)))
+    (inputs
+     `(("sdl" ,sdl)
+       ("libpng" ,libpng)
+       ("zlib" ,zlib)
+       ("alsa-lib" ,alsa-lib)
+       ("glu" ,glu)
+       ("mesa" ,mesa)))
+    (home-page "http://www.dosbox.com")
+    (synopsis "X86 emulator with CGA/EGA/VGA/etc. graphics and sound")
+    (description "DOSBox is a DOS-emulator that uses the SDL library.  DOSBox
+also emulates CPU:286/386 realmode/protected mode, Directory
+FileSystem/XMS/EMS, Tandy/Hercules/CGA/EGA/VGA/VESA graphics, a
+SoundBlaster/Gravis Ultra Sound card for excellent sound compatibility with
+older games.")
+    (license license:gpl2+)))
+
+(define-public emulation-station
+  (let ((commit "646bede3d9ec0acf0ae378415edac136774a66c5"))
+    (package
+      (name "emulation-station")
+      (version "2.0.1")
+      (source (origin
+                (method git-fetch) ; no tarball available
+                (uri (git-reference
+                      (url "https://github.com/Aloshi/EmulationStation.git")
+                      (commit commit))) ; no version tag
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "0cm0sq2wri2l9cvab1l0g02za59q7klj0h3p028vr96n6njj4w9v"))))
+      (build-system cmake-build-system)
+      (arguments
+       '(#:tests? #f)) ; no tests
+      (inputs
+       `(("alsa-lib" ,alsa-lib)
+         ("boost" ,boost)
+         ("curl" ,curl)
+         ("eigin" ,eigen)
+         ("freeimage" ,freeimage)
+         ("freetype" ,freetype)
+         ("mesa" ,mesa)
+         ("sdl2" ,sdl2)))
+      (synopsis "Video game console emulator front-end")
+      (description "EmulationStation provides a graphical front-end to a large
+number of video game console emulators.  It features an interface that is
+usable with any game controller that has at least 4 buttons, theming support,
+and a game metadata scraper.")
+      (home-page "http://www.emulationstation.org")
+      (license license:expat))))
+
+(define-public higan
+  (package
+    (name "higan")
+    (version "106")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://gitlab.com/higan/higan/repository/archive.tar.gz?ref=v"
+             version))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0y42pra0dxzlbkyzcp3r8a39pji2bj3p9fl40425f60af2igr4rw"))
+       (patches (search-patches "higan-remove-march-native-flag.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("ao" ,ao)
+       ("eudev" ,eudev)
+       ("gtk+" ,gtk+-2)
+       ("gtksourceview-2" ,gtksourceview-2)
+       ("libxv" ,libxv)
+       ("mesa" ,mesa)
+       ("openal" ,openal)
+       ("pulseaudio" ,pulseaudio)
+       ("sdl" ,sdl)))
+    (arguments
+     '(#:phases
+       (let ((build-phase (assoc-ref %standard-phases 'build))
+             (install-phase (assoc-ref %standard-phases 'install)))
+         (modify-phases %standard-phases
+           ;; The higan build system has no configure phase.
+           (delete 'configure)
+           (add-before 'build 'chdir-to-higan
+             (lambda _
+               (chdir "higan")))
+           (add-before 'install 'create-/share/applications
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 ;; It seems the author forgot to do this in the Makefile.
+                 (mkdir-p (string-append out "/share/applications")))))
+           (add-after 'install 'chdir-to-icarus
+             (lambda _
+               (chdir "../icarus")))
+           (add-after 'chdir-to-icarus 'build-icarus build-phase)
+           (add-after 'build-icarus 'install-icarus install-phase)
+           (add-after 'install-icarus 'wrap-higan-executable
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin"))
+                      (higan (string-append bin "/higan"))
+                      (higan-original (string-append higan "-original"))
+                      (bash (string-append (assoc-ref inputs "bash")
+                                           "/bin/bash"))
+                      (coreutils (assoc-ref inputs "coreutils"))
+                      (mkdir (string-append coreutils "/bin/mkdir"))
+                      (cp (string-append coreutils "/bin/cp"))
+                      (cp-r (string-append cp " -r --no-preserve=mode")))
+                 ;; First, have the executable make sure ~/.local/share/higan
+                 ;; contains up to date files.  Higan insists on looking there
+                 ;; for these data files.
+                 (rename-file higan higan-original)
+                 (with-output-to-file higan
+                   (lambda ()
+                     (display
+                      (string-append
+                       "#!" bash "\n"
+                       ;; higan doesn't respect $XDG_DATA_HOME
+                       mkdir " -p ~/.local/share\n"
+                       cp-r " " out "/share/higan ~/.local/share\n"
+                       "exec " higan-original))))
+                 (chmod higan #o555)
+                 ;; Second, make sure higan will find icarus in PATH.
+                 (wrap-program higan
+                   `("PATH" ":" prefix (,bin))))))))
+       #:make-flags
+       (list "compiler=g++"
+             (string-append "prefix=" (assoc-ref %outputs "out")))
+       ;; There is no test suite.
+       #:tests? #f))
+    (home-page "http://byuu.org/emulation/higan/")
+    (synopsis "Nintendo multi-system emulator")
+    (description
+     "higan (formerly bsnes) is an emulator for multiple Nintendo video game
+consoles, including the Nintendo Entertainment System (NES/Famicom), Super
+Nintendo Entertainment System (SNES/Super Famicom), Game Boy, Game Boy
+Color (GBC), and Game Boy Advance (GBA).  It also supports the subsystems
+Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
+    ;; As noted in these files among more:
+    ;; - icarus/icarus.cpp
+    ;; - higan/emulator/emulator.hpp
+    (license license:gpl3)))
+
+(define-public mgba
+  (package
+    (name "mgba")
+    (version "0.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/mgba-emu/mgba/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0xmq1q1j71hnpd49wm91cqq8w5zdhb921cm17jchp4qjmaqgwy3w"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Make sure we don't use the bundled software.
+               '(for-each
+                 (lambda (subdir)
+                   (let ((lib-subdir (string-append "src/third-party/" subdir)))
+                     (delete-file-recursively lib-subdir)))
+                 '("libpng" "lzma" "sqlite3" "zlib")))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f                      ;no "test" target
+       #:configure-flags
+       (list "-DUSE_LZMA=OFF"           ;do not use bundled LZMA
+             "-DUSE_LIBZIP=OFF"         ;use "zlib" instead
+             (string-append "-DCMAKE_INSTALL_LIBDIR="
+                            (assoc-ref %outputs "out") "/lib"))))
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs `(("ffmpeg" ,ffmpeg)
+              ("imagemagick" ,imagemagick)
+              ("libedit" ,libedit)
+              ("libepoxy" ,libepoxy)
+              ("libpng" ,libpng)
+              ("mesa" ,mesa)
+              ("minizip" ,minizip)
+              ("ncurses" ,ncurses)
+              ("qtbase" ,qtbase)
+              ("qtmultimedia" ,qtmultimedia)
+              ("qttools" ,qttools)
+              ("sdl2" ,sdl2)
+              ("sqlite" ,sqlite)
+              ("zlib" ,zlib)))
+    (home-page "https://mgba.io")
+    (synopsis "Game Boy Advance emulator")
+    (description
+     "mGBA is an emulator for running Game Boy Advance games.  It aims to be
+faster and more accurate than many existing Game Boy Advance emulators, as
+well as adding features that other emulators lack.  It also supports Game Boy
+and Game Boy Color games.")
+    ;; Code is mainly MPL 2.0. "blip_buf.c" is LGPL 2.1+ and "inih.c" is
+    ;; BSD-3.
+    (license (list license:mpl2.0 license:lgpl2.1+ license:bsd-3))))
+
+(define-public mupen64plus-core
+  (package
+    (name "mupen64plus-core")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-core/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0dg2hksm5qni2hcha93k7n4fqr92888p946f7phb0ndschzfh9kk"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("freetype" ,freetype)
+       ("glu" ,glu)
+       ("libpng" ,libpng)
+       ("mesa" ,mesa)
+       ("sdl2" ,sdl2)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags (let ((out (assoc-ref %outputs "out")))
+                      (list "all" (string-append "PREFIX=" out)))
+       ;; There are no tests.
+       #:tests? #f))
+    ;; As per the Makefile (in projects/unix/Makefile):
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Nintendo 64 emulator core library")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+core library.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-audio-sdl
+  (package
+    (name "mupen64plus-audio-sdl")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-audio-sdl/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0ss6w92n2rpfnazhg9lbq0nvs3fqx93nliz3k3wjxdlx4dpi7h3a"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+SDL audio plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-input-sdl
+  (package
+    (name "mupen64plus-input-sdl")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-input-sdl/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11sj5dbalp2nrlmki34vy7wy28vc175pnnkdk65p8599hnyq37ri"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("which" ,which)))
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+SDL input plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-rsp-hle
+  (package
+    (name "mupen64plus-rsp-hle")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-rsp-hle/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "15h7mgz6xd2zjzm6l3f96sbs8kwr3xvbwzgikhnka79m6c69hsxv"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+high-level emulation (HLE) RSP processor plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-rsp-z64
+  (package
+    (name "mupen64plus-rsp-z64")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-rsp-z64/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "10jz1w2dhx5slhyk4m8mdqlpsd6cshchslr1fckb2ayzb1ls3ghi"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Z64 RSP processor plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-arachnoid
+  (package
+    (name "mupen64plus-video-arachnoid")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-arachnoid/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0jjwf144rihznm4lnqbhgigxw664v3v32wy94adaa6imk8z6gslh"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Arachnoid video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-glide64
+  (package
+    (name "mupen64plus-video-glide64")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-glide64/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1rm55dbf6xgsq1blbzs6swa2ajv0qkn38acbljj346abnk6s3dla"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix")))
+         ;; XXX Should be unnecessary with the next release.
+         (add-before
+          'build 'use-sdl2
+          (lambda _
+            (substitute* "Makefile"
+              (("SDL_CONFIG = (.*)sdl-config" all prefix)
+               (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Glide64 video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-glide64mk2
+  (package
+    (name "mupen64plus-video-glide64mk2")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-glide64mk2/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ihl4q293d6svba26b4mhapjcdg12p90gibz79b4mx423jlcxxj9"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("boost" ,boost)
+       ("libpng" ,libpng)
+       ("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Glide64MK2 video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-rice
+  (package
+    (name "mupen64plus-video-rice")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-rice/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0rd2scjmh285w61aj3mgx71whg5rqrjbry3cdgicczrnyvf8wdvk"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("libpng" ,libpng)
+       ("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Rice Video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-z64
+  (package
+    (name "mupen64plus-video-z64")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-z64/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1x7wsjs5gx2iwx20p4cjcbf696zsjlh31qxmghwv0ifrq8x58s1b"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("glew" ,glew)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix")))
+         ;; XXX Should be unnecessary with the next release.
+         (add-before
+          'build 'use-sdl2
+          (lambda _
+            (substitute* "Makefile"
+              (("SDL_CONFIG = (.*)sdl-config" all prefix)
+               (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Z64 video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Z64 video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-ui-console
+  (package
+    (name "mupen64plus-ui-console")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-ui-console/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "04qkpd8ic7xsgnqz7spl00wxdygf79m7d1k8rabbygjk5lg6p8z2"))
+       (patches (search-patches "mupen64plus-ui-console-notice.patch"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("sdl2" ,sdl2)))
+    ;; Mupen64Plus supports a single data directory and a single plugin
+    ;; directory in its configuration, yet we need data and plugin files from
+    ;; a variety of packages.  The best way to deal with this is to install
+    ;; all packages from which data and plugin files are needed into one's
+    ;; profile, and point the configuration there.  Hence, propagate the most
+    ;; important packages here to save the user from the bother.  The patch
+    ;; mupen64plus-ui-console-notice also gives users instructions on what
+    ;; they need to do in order to point the configuration to their profile.
+    (propagated-inputs
+     `(("mupen64plus-core" ,mupen64plus-core)
+       ("mupen64plus-audio-sdl" ,mupen64plus-audio-sdl)
+       ("mupen64plus-input-sdl" ,mupen64plus-input-sdl)
+       ("mupen64plus-rsp-hle" ,mupen64plus-rsp-hle)
+       ("mupen64plus-video-glide64" ,mupen64plus-video-glide64)
+       ("mupen64plus-video-glide64mk2" ,mupen64plus-video-glide64mk2)
+       ("mupen64plus-video-rice" ,mupen64plus-video-rice)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")
+               ;; Trailing slash matters here.
+               (string-append "COREDIR=" m64p "/lib/")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+command line user interface.  Installing this package is the easiest way
+towards a working Mupen64Plus for casual users.")
+    (license license:gpl2+)))
+
+(define-public nestopia-ue
+  (package
+    (name "nestopia-ue")
+    (version "1.47")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/rdanbrook/nestopia/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1dzrrjmvyqks64q5l5pfly80jb6qcsbj5b3dm40fijd5xnpbapci"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; We don't need libretro for the GNU/Linux build.
+                  (delete-file-recursively "libretro")
+                  ;; Use system zlib.
+                  (delete-file-recursively "source/zlib")
+                  (substitute* "source/core/NstZlib.cpp"
+                    (("#include \"../zlib/zlib.h\"") "#include <zlib.h>"))))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("ao" ,ao)
+       ("glu" ,glu)
+       ("gtk+" ,gtk+)
+       ("libarchive" ,libarchive)
+       ("mesa" ,mesa)
+       ("sdl2" ,sdl2)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The Nestopia build system consists solely of a Makefile.
+         (delete 'configure)
+         (add-before 'build 'remove-xdg-desktop-menu-call
+           (lambda _
+             (substitute* "Makefile"
+               (("xdg-desktop-menu install .*") ""))))
+         (add-before 'build 'remove-gdkwayland-include
+           (lambda _
+             (substitute* "source/unix/gtkui/gtkui.h"
+               (("#include <gdk/gdkwayland\\.h>") "")))))
+       #:make-flags (let ((out (assoc-ref %outputs "out")))
+                      (list "CC=gcc" "CXX=g++" (string-append "PREFIX=" out)))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://0ldsk00l.ca/nestopia/")
+    (synopsis "Nintendo Entertainment System (NES/Famicom) emulator")
+    (description
+     "Nestopia UE (Undead Edition) is a fork of the Nintendo Entertainment
+System (NES/Famicom) emulator Nestopia, with enhancements from members of the
+emulation community.  It provides highly accurate emulation.")
+    (license license:gpl2+)))
+
+(define-public retroarch
+  (package
+    (name "retroarch")
+    (version "1.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/libretro/RetroArch/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0fdribjfc5zz9brzhqcxw6m76kvyg13l67aiigszv4wsjd5j3gpz"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f                      ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (etc (string-append out "/etc"))
+                    (vulkan (assoc-ref inputs "vulkan-icd-loader")))
+               ;; Hard-code the path to libvulkan.so.
+               (substitute* "gfx/common/vulkan_common.c"
+                 (("libvulkan.so") (string-append vulkan "/lib/libvulkan.so")))
+               (substitute* "qb/qb.libs.sh"
+                 (("/bin/true") (which "true")))
+               ;; The configure script does not yet accept the extra arguments
+               ;; (like ‘CONFIG_SHELL=’) passed by the default configure phase.
+               (zero? (system*
+                       "./configure"
+                       (string-append "--prefix=" out)
+                       (string-append "--global-config-dir=" etc)))))))))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("ffmpeg" ,ffmpeg)
+       ("freetype" ,freetype)
+       ("libxinerama" ,libxinerama)
+       ("libxkbcommon" ,libxkbcommon)
+       ("libxml2" ,libxml2)
+       ("libxv" ,libxv)
+       ("mesa" ,mesa)
+       ("openal" ,openal)
+       ("pulseaudio" ,pulseaudio)
+       ("python" ,python)
+       ("sdl" ,sdl2)
+       ("udev" ,eudev)
+       ("vulkan-icd-loader" ,vulkan-icd-loader)
+       ("wayland", wayland)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (home-page "https://www.libretro.com/")
+    (synopsis "Reference frontend for the libretro API")
+    (description
+     "Libretro is a simple but powerful development interface that allows for
+the easy creation of emulators, games and multimedia applications that can plug
+straight into any libretro-compatible frontend.  RetroArch is the official
+reference frontend for the libretro API, currently used by most as a modular
+multi-system game/emulator system.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 0ac7d992c9..272e9bce96 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014, 2015, 2016 David Thompson <dthompson2@worcester.edu>
+;;; Copyright © 2014, 2016 David Thompson <dthompson2@worcester.edu>
 ;;; Copyright © 2014, 2015, 2016, 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
@@ -14,9 +14,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2016, 2017 Rodger Fox <thylakoid@openmailbox.org>
-;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 ng0 <ng0@n0.is>
 ;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org>
 ;;; Copyright © 2016, 2017, 2018 Kei Kebreau <kkebreau@posteo.net>
@@ -1619,69 +1617,6 @@ interactive fiction, also known as text adventures, which were implemented
 either by Infocom or created using the Inform compiler.")
     (license license:bsd-3)))
 
-(define-public retroarch
-  (package
-    (name "retroarch")
-    (version "1.7.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/libretro/RetroArch/archive/v"
-                           version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0fdribjfc5zz9brzhqcxw6m76kvyg13l67aiigszv4wsjd5j3gpz"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:tests? #f                      ; no tests
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (etc (string-append out "/etc"))
-                    (vulkan (assoc-ref inputs "vulkan-icd-loader")))
-               ;; Hard-code the path to libvulkan.so.
-               (substitute* "gfx/common/vulkan_common.c"
-                 (("libvulkan.so") (string-append vulkan "/lib/libvulkan.so")))
-               (substitute* "qb/qb.libs.sh"
-                 (("/bin/true") (which "true")))
-               ;; The configure script does not yet accept the extra arguments
-               ;; (like ‘CONFIG_SHELL=’) passed by the default configure phase.
-               (zero? (system*
-                       "./configure"
-                       (string-append "--prefix=" out)
-                       (string-append "--global-config-dir=" etc)))))))))
-    (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ffmpeg" ,ffmpeg)
-       ("freetype" ,freetype)
-       ("libxinerama" ,libxinerama)
-       ("libxkbcommon" ,libxkbcommon)
-       ("libxml2" ,libxml2)
-       ("libxv" ,libxv)
-       ("mesa" ,mesa)
-       ("openal" ,openal)
-       ("pulseaudio" ,pulseaudio)
-       ("python" ,python)
-       ("sdl" ,sdl2)
-       ("udev" ,eudev)
-       ("vulkan-icd-loader" ,vulkan-icd-loader)
-       ("wayland", wayland)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (home-page "https://www.libretro.com/")
-    (synopsis "Reference frontend for the libretro API")
-    (description
-     "Libretro is a simple but powerful development interface that allows for
-the easy creation of emulators, games and multimedia applications that can plug
-straight into any libretro-compatible frontend.  RetroArch is the official
-reference frontend for the libretro API, currently used by most as a modular
-multi-system game/emulator system.")
-    (license license:gpl3+)))
-
 (define-public gnugo
   (package
     (name "gnugo")
@@ -1922,48 +1857,6 @@ next campaign.")
     (description "This package contains a dedicated server for @emph{The
 Battle for Wesnoth}.")))
 
-(define-public dosbox
-  (package
-    (name "dosbox")
-    (version "0.74.svn3947")
-    (source (origin
-              (method svn-fetch)
-              (uri (svn-reference
-                    (url "http://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk/")
-                    (revision 3947)))
-              (file-name (string-append name "-" version "-checkout"))
-              ;; Use SVN head, since the last release (2010) is incompatible
-              ;; with GCC 4.8+ (see
-              ;; <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=624976>).
-              (sha256
-               (base32
-                "1p918j6090d1nkvgq7ifvmn506zrdmyi32y7p3ms40d5ssqjg8fj"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-after
-                   'unpack 'autogen.sh
-                   (lambda _
-                     (zero? (system* "sh" "autogen.sh")))))))
-    (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)))
-    (inputs
-     `(("sdl" ,sdl)
-       ("libpng" ,libpng)
-       ("zlib" ,zlib)
-       ("alsa-lib" ,alsa-lib)
-       ("glu" ,glu)
-       ("mesa" ,mesa)))
-    (home-page "http://www.dosbox.com")
-    (synopsis "X86 emulator with CGA/EGA/VGA/etc. graphics and sound")
-    (description "DOSBox is a DOS-emulator that uses the SDL library.  DOSBox
-also emulates CPU:286/386 realmode/protected mode, Directory
-FileSystem/XMS/EMS, Tandy/Hercules/CGA/EGA/VGA/VESA graphics, a
-SoundBlaster/Gravis Ultra Sound card for excellent sound compatibility with
-older games.")
-    (license license:gpl2+)))
-
 (define-public gamine
   (package
     (name "gamine")
@@ -2082,638 +1975,6 @@ world}, @uref{http://evolonline.org, Evol Online} and
     ;; The rest is under GPL2+.
     (license (list license:gpl2+ license:zlib license:cc-by-sa4.0))))
 
-(define-public mupen64plus-core
-  (package
-    (name "mupen64plus-core")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-core/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0dg2hksm5qni2hcha93k7n4fqr92888p946f7phb0ndschzfh9kk"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("freetype" ,freetype)
-       ("glu" ,glu)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags (let ((out (assoc-ref %outputs "out")))
-                      (list "all" (string-append "PREFIX=" out)))
-       ;; There are no tests.
-       #:tests? #f))
-    ;; As per the Makefile (in projects/unix/Makefile):
-    (supported-systems '("i686-linux" "x86_64-linux"))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Nintendo 64 emulator core library")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-core library.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-audio-sdl
-  (package
-    (name "mupen64plus-audio-sdl")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-audio-sdl/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0ss6w92n2rpfnazhg9lbq0nvs3fqx93nliz3k3wjxdlx4dpi7h3a"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus SDL input plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-SDL audio plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-input-sdl
-  (package
-    (name "mupen64plus-input-sdl")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-input-sdl/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "11sj5dbalp2nrlmki34vy7wy28vc175pnnkdk65p8599hnyq37ri"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("which" ,which)))
-    (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus SDL input plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-SDL input plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-rsp-hle
-  (package
-    (name "mupen64plus-rsp-hle")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-rsp-hle/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "15h7mgz6xd2zjzm6l3f96sbs8kwr3xvbwzgikhnka79m6c69hsxv"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus SDL input plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-high-level emulation (HLE) RSP processor plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-rsp-z64
-  (package
-    (name "mupen64plus-rsp-z64")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-rsp-z64/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "10jz1w2dhx5slhyk4m8mdqlpsd6cshchslr1fckb2ayzb1ls3ghi"))))
-    (build-system gnu-build-system)
-    (inputs
-     `(("mupen64plus-core" ,mupen64plus-core)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus SDL input plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-Z64 RSP processor plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-video-arachnoid
-  (package
-    (name "mupen64plus-video-arachnoid")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-video-arachnoid/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0jjwf144rihznm4lnqbhgigxw664v3v32wy94adaa6imk8z6gslh"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus Rice Video plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-Arachnoid video plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-video-glide64
-  (package
-    (name "mupen64plus-video-glide64")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-video-glide64/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1rm55dbf6xgsq1blbzs6swa2ajv0qkn38acbljj346abnk6s3dla"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix")))
-         ;; XXX Should be unnecessary with the next release.
-         (add-before
-          'build 'use-sdl2
-          (lambda _
-            (substitute* "Makefile"
-              (("SDL_CONFIG = (.*)sdl-config" all prefix)
-               (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus Rice Video plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-Glide64 video plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-video-glide64mk2
-  (package
-    (name "mupen64plus-video-glide64mk2")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-video-glide64mk2/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1ihl4q293d6svba26b4mhapjcdg12p90gibz79b4mx423jlcxxj9"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("boost" ,boost)
-       ("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus Rice Video plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-Glide64MK2 video plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-video-rice
-  (package
-    (name "mupen64plus-video-rice")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-video-rice/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0rd2scjmh285w61aj3mgx71whg5rqrjbry3cdgicczrnyvf8wdvk"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("libpng" ,libpng)
-       ("mesa" ,mesa)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus Rice Video plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-Rice Video plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-video-z64
-  (package
-    (name "mupen64plus-video-z64")
-    (version "2.0.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-video-z64/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1x7wsjs5gx2iwx20p4cjcbf696zsjlh31qxmghwv0ifrq8x58s1b"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("glew" ,glew)
-       ("mupen64plus-core" ,mupen64plus-core)
-       ("sdl2" ,sdl2)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix")))
-         ;; XXX Should be unnecessary with the next release.
-         (add-before
-          'build 'use-sdl2
-          (lambda _
-            (substitute* "Makefile"
-              (("SDL_CONFIG = (.*)sdl-config" all prefix)
-               (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus Z64 video plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-Z64 video plugin.")
-    (license license:gpl2+)))
-
-(define-public mupen64plus-ui-console
-  (package
-    (name "mupen64plus-ui-console")
-    (version "2.5")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/mupen64plus/mupen64plus-ui-console/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "04qkpd8ic7xsgnqz7spl00wxdygf79m7d1k8rabbygjk5lg6p8z2"))
-       (patches (search-patches "mupen64plus-ui-console-notice.patch"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("which" ,which)))
-    (inputs
-     `(("sdl2" ,sdl2)))
-    ;; Mupen64Plus supports a single data directory and a single plugin
-    ;; directory in its configuration, yet we need data and plugin files from
-    ;; a variety of packages.  The best way to deal with this is to install
-    ;; all packages from which data and plugin files are needed into one's
-    ;; profile, and point the configuration there.  Hence, propagate the most
-    ;; important packages here to save the user from the bother.  The patch
-    ;; mupen64plus-ui-console-notice also gives users instructions on what
-    ;; they need to do in order to point the configuration to their profile.
-    (propagated-inputs
-     `(("mupen64plus-core" ,mupen64plus-core)
-       ("mupen64plus-audio-sdl" ,mupen64plus-audio-sdl)
-       ("mupen64plus-input-sdl" ,mupen64plus-input-sdl)
-       ("mupen64plus-rsp-hle" ,mupen64plus-rsp-hle)
-       ("mupen64plus-video-glide64" ,mupen64plus-video-glide64)
-       ("mupen64plus-video-glide64mk2" ,mupen64plus-video-glide64mk2)
-       ("mupen64plus-video-rice" ,mupen64plus-video-rice)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The mupen64plus build system has no configure phase.
-         (delete 'configure)
-         ;; Makefile is in a subdirectory.
-         (add-before
-          'build 'cd-to-project-dir
-          (lambda _
-            (chdir "projects/unix"))))
-       #:make-flags
-       (let ((out (assoc-ref %outputs "out"))
-             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
-         (list "all"
-               (string-append "PREFIX=" out)
-               (string-append "APIDIR=" m64p "/include/mupen64plus")
-               ;; Trailing slash matters here.
-               (string-append "COREDIR=" m64p "/lib/")))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://www.mupen64plus.org/")
-    (synopsis "Mupen64Plus SDL input plugin")
-    (description
-     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
-which is capable of accurately playing many games.  This package contains the
-command line user interface.  Installing this package is the easiest way
-towards a working Mupen64Plus for casual users.")
-    (license license:gpl2+)))
-
-(define-public nestopia-ue
-  (package
-    (name "nestopia-ue")
-    (version "1.47")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/rdanbrook/nestopia/archive/"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "1dzrrjmvyqks64q5l5pfly80jb6qcsbj5b3dm40fijd5xnpbapci"))
-              (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  ;; We don't need libretro for the GNU/Linux build.
-                  (delete-file-recursively "libretro")
-                  ;; Use system zlib.
-                  (delete-file-recursively "source/zlib")
-                  (substitute* "source/core/NstZlib.cpp"
-                    (("#include \"../zlib/zlib.h\"") "#include <zlib.h>"))))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("ao" ,ao)
-       ("glu" ,glu)
-       ("gtk+" ,gtk+)
-       ("libarchive" ,libarchive)
-       ("mesa" ,mesa)
-       ("sdl2" ,sdl2)
-       ("zlib" ,zlib)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         ;; The Nestopia build system consists solely of a Makefile.
-         (delete 'configure)
-         (add-before 'build 'remove-xdg-desktop-menu-call
-           (lambda _
-             (substitute* "Makefile"
-               (("xdg-desktop-menu install .*") ""))))
-         (add-before 'build 'remove-gdkwayland-include
-           (lambda _
-             (substitute* "source/unix/gtkui/gtkui.h"
-               (("#include <gdk/gdkwayland\\.h>") "")))))
-       #:make-flags (let ((out (assoc-ref %outputs "out")))
-                      (list "CC=gcc" "CXX=g++" (string-append "PREFIX=" out)))
-       ;; There are no tests.
-       #:tests? #f))
-    (home-page "http://0ldsk00l.ca/nestopia/")
-    (synopsis "Nintendo Entertainment System (NES/Famicom) emulator")
-    (description
-     "Nestopia UE (Undead Edition) is a fork of the Nintendo Entertainment
-System (NES/Famicom) emulator Nestopia, with enhancements from members of the
-emulation community.  It provides highly accurate emulation.")
-    (license license:gpl2+)))
-
-(define-public emulation-station
-  (let ((commit "646bede3d9ec0acf0ae378415edac136774a66c5"))
-    (package
-      (name "emulation-station")
-      (version "2.0.1")
-      (source (origin
-                (method git-fetch) ; no tarball available
-                (uri (git-reference
-                      (url "https://github.com/Aloshi/EmulationStation.git")
-                      (commit commit))) ; no version tag
-                (file-name (string-append name "-" version "-checkout"))
-                (sha256
-                 (base32
-                  "0cm0sq2wri2l9cvab1l0g02za59q7klj0h3p028vr96n6njj4w9v"))))
-      (build-system cmake-build-system)
-      (arguments
-       '(#:tests? #f)) ; no tests
-      (inputs
-       `(("alsa-lib" ,alsa-lib)
-         ("boost" ,boost)
-         ("curl" ,curl)
-         ("eigin" ,eigen)
-         ("freeimage" ,freeimage)
-         ("freetype" ,freetype)
-         ("mesa" ,mesa)
-         ("sdl2" ,sdl2)))
-      (synopsis "Video game console emulator front-end")
-      (description "EmulationStation provides a graphical front-end to a large
-number of video game console emulators.  It features an interface that is
-usable with any game controller that has at least 4 buttons, theming support,
-and a game metadata scraper.")
-      (home-page "http://www.emulationstation.org")
-      (license license:expat))))
-
 (define openttd-engine
   (package
     (name "openttd-engine")
@@ -3055,39 +2316,6 @@ players.")
     (home-page "http://pio.sourceforge.net/")
     (license license:gpl2+)))
 
-(define-public desmume
-  (package
-    (name "desmume")
-    (version "0.9.11")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "mirror://sourceforge/desmume/desmume/"
-             version "/desmume-" version ".tar.gz"))
-       (sha256
-        (base32
-         "15l8wdw3q61fniy3h93d84dnm6s4pyadvh95a0j6d580rjk4pcrs"))))
-    (build-system gnu-build-system)
-    (arguments
-     ;; Enable support for WiFi and microphone.
-     `(#:configure-flags '("--enable-wifi"
-                           "--enable-openal")))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("intltool" ,intltool)))
-    (inputs
-     `(("zlib" ,zlib)
-       ("sdl" ,sdl)
-       ("glib" ,glib)
-       ("gtk+" ,gtk+-2)
-       ("glu" ,glu)))
-    (home-page "http://desmume.org/")
-    (synopsis "Nintendo DS emulator")
-    (description
-     "DeSmuME is an emulator for the Nintendo DS handheld gaming console.")
-    (license license:gpl2)))
-
 (define-public einstein
   (package
     (name "einstein")
@@ -3343,155 +2571,6 @@ Red Eclipse provides fast paced and accessible gameplay.")
                      license:cc-by3.0
                      license:cc0)))))
 
-(define-public higan
-  (package
-    (name "higan")
-    (version "106")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://gitlab.com/higan/higan/repository/archive.tar.gz?ref=v"
-             version))
-       (file-name (string-append name "-" version ".tar.gz"))
-       (sha256
-        (base32 "0y42pra0dxzlbkyzcp3r8a39pji2bj3p9fl40425f60af2igr4rw"))
-       (patches (search-patches "higan-remove-march-native-flag.patch"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("ao" ,ao)
-       ("eudev" ,eudev)
-       ("gtk+" ,gtk+-2)
-       ("gtksourceview-2" ,gtksourceview-2)
-       ("libxv" ,libxv)
-       ("mesa" ,mesa)
-       ("openal" ,openal)
-       ("pulseaudio" ,pulseaudio)
-       ("sdl" ,sdl)))
-    (arguments
-     '(#:phases
-       (let ((build-phase (assoc-ref %standard-phases 'build))
-             (install-phase (assoc-ref %standard-phases 'install)))
-         (modify-phases %standard-phases
-           ;; The higan build system has no configure phase.
-           (delete 'configure)
-           (add-before 'build 'chdir-to-higan
-             (lambda _
-               (chdir "higan")))
-           (add-before 'install 'create-/share/applications
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let ((out (assoc-ref outputs "out")))
-                 ;; It seems the author forgot to do this in the Makefile.
-                 (mkdir-p (string-append out "/share/applications")))))
-           (add-after 'install 'chdir-to-icarus
-             (lambda _
-               (chdir "../icarus")))
-           (add-after 'chdir-to-icarus 'build-icarus build-phase)
-           (add-after 'build-icarus 'install-icarus install-phase)
-           (add-after 'install-icarus 'wrap-higan-executable
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (bin (string-append out "/bin"))
-                      (higan (string-append bin "/higan"))
-                      (higan-original (string-append higan "-original"))
-                      (bash (string-append (assoc-ref inputs "bash")
-                                           "/bin/bash"))
-                      (coreutils (assoc-ref inputs "coreutils"))
-                      (mkdir (string-append coreutils "/bin/mkdir"))
-                      (cp (string-append coreutils "/bin/cp"))
-                      (cp-r (string-append cp " -r --no-preserve=mode")))
-                 ;; First, have the executable make sure ~/.local/share/higan
-                 ;; contains up to date files.  Higan insists on looking there
-                 ;; for these data files.
-                 (rename-file higan higan-original)
-                 (with-output-to-file higan
-                   (lambda ()
-                     (display
-                      (string-append
-                       "#!" bash "\n"
-                       ;; higan doesn't respect $XDG_DATA_HOME
-                       mkdir " -p ~/.local/share\n"
-                       cp-r " " out "/share/higan ~/.local/share\n"
-                       "exec " higan-original))))
-                 (chmod higan #o555)
-                 ;; Second, make sure higan will find icarus in PATH.
-                 (wrap-program higan
-                   `("PATH" ":" prefix (,bin))))))))
-       #:make-flags
-       (list "compiler=g++"
-             (string-append "prefix=" (assoc-ref %outputs "out")))
-       ;; There is no test suite.
-       #:tests? #f))
-    (home-page "http://byuu.org/emulation/higan/")
-    (synopsis "Nintendo multi-system emulator")
-    (description
-     "higan (formerly bsnes) is an emulator for multiple Nintendo video game
-consoles, including the Nintendo Entertainment System (NES/Famicom), Super
-Nintendo Entertainment System (SNES/Super Famicom), Game Boy, Game Boy
-Color (GBC), and Game Boy Advance (GBA).  It also supports the subsystems
-Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
-    ;; As noted in these files among more:
-    ;; - icarus/icarus.cpp
-    ;; - higan/emulator/emulator.hpp
-    (license license:gpl3)))
-
-(define-public mgba
-  (package
-    (name "mgba")
-    (version "0.6.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/mgba-emu/mgba/archive/"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0xmq1q1j71hnpd49wm91cqq8w5zdhb921cm17jchp4qjmaqgwy3w"))
-              (modules '((guix build utils)))
-              (snippet
-               ;; Make sure we don't use the bundled software.
-               '(for-each
-                 (lambda (subdir)
-                   (let ((lib-subdir (string-append "src/third-party/" subdir)))
-                     (delete-file-recursively lib-subdir)))
-                 '("libpng" "lzma" "sqlite3" "zlib")))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f                      ;no "test" target
-       #:configure-flags
-       (list "-DUSE_LZMA=OFF"           ;do not use bundled LZMA
-             "-DUSE_LIBZIP=OFF"         ;use "zlib" instead
-             (string-append "-DCMAKE_INSTALL_LIBDIR="
-                            (assoc-ref %outputs "out") "/lib"))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("ffmpeg" ,ffmpeg)
-              ("imagemagick" ,imagemagick)
-              ("libedit" ,libedit)
-              ("libepoxy" ,libepoxy)
-              ("libpng" ,libpng)
-              ("mesa" ,mesa)
-              ("minizip" ,minizip)
-              ("ncurses" ,ncurses)
-              ("qtbase" ,qtbase)
-              ("qtmultimedia" ,qtmultimedia)
-              ("qttools" ,qttools)
-              ("sdl2" ,sdl2)
-              ("sqlite" ,sqlite)
-              ("zlib" ,zlib)))
-    (home-page "https://mgba.io")
-    (synopsis "Game Boy Advance emulator")
-    (description
-     "mGBA is an emulator for running Game Boy Advance games.  It aims to be
-faster and more accurate than many existing Game Boy Advance emulators, as
-well as adding features that other emulators lack.  It also supports Game Boy
-and Game Boy Color games.")
-    ;; Code is mainly MPL 2.0. "blip_buf.c" is LGPL 2.1+ and "inih.c" is
-    ;; BSD-3.
-    (license (list license:mpl2.0 license:lgpl2.1+ license:bsd-3))))
-
 (define-public grue-hunter
   (package
     (name "grue-hunter")
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index d75416415c..9014cc3206 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2017 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
+;;; Copyright © 2017, 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
@@ -43,6 +43,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages webkit)
+  #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages xml))
 
 (define-public geos
@@ -153,6 +154,36 @@ and driving.")
     (home-page "https://wiki.gnome.org/Apps/Maps")
     (license license:gpl2+)))
 
+(define-public libgaiagraphics
+  (package
+    (name "libgaiagraphics")
+    (version "0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.gaia-gis.it/gaia-sins/libgaiagraphics-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "076afqv417ag3hfvnif0qc7qscmnq1dsf6y431yygwgf34rjkayc"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("cairo" ,cairo)
+       ("libpng" ,libpng)
+       ("libjepeg-turbo" ,libjpeg-turbo)
+       ("libtiff" ,libtiff)
+       ("libgeotiff" ,libgeotiff)
+       ("proj.4" ,proj.4)
+       ("libxml2" ,libxml2)
+       ("zlib" ,zlib)))
+     (synopsis "Gaia common graphics support")
+     (description "libgaiagraphics is a library supporting
+ common-utility raster handling methods.")
+    (home-page "https://www.gaia-gis.it/fossil/libgaiagraphics/index")
+    (license license:lgpl3+)))
+
 (define-public libgeotiff
   (package
     (name "libgeotiff")
@@ -202,6 +233,54 @@ writing GeoTIFF information tags.")
                    (license:non-copyleft "file://LICENSE"
                                          "See LICENSE in the distribution.")))))
 
+(define-public libspatialite
+  (package
+    (name "libspatialite")
+    (version "4.3.0a")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.gaia-gis.it/gaia-sins/libspatialite-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "16d4lpl7xrm9zy4gphy6nwanpjp8wn9g4wq2i2kh8abnlhq01448"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("freexl" ,freexl)
+       ("geos" ,geos)
+       ("libxml2" ,libxml2)
+       ("proj.4" ,proj.4)
+       ("sqlite" ,sqlite)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; 3 tests are failing, ignore them:
+         (add-after 'unpack 'ignore-broken-tests
+           (lambda _
+             (substitute* '("test/Makefile.in")
+               (("\tcheck_sql_stm.*" all) "\tcheck_multithread$(EXEEXT) \\\n")
+               (("(\tch.*) check_v.*ble2.*$" all vt1) (string-append vt1 " \\\n"))
+               (("\tch.* (check_v.*ble4.*)$" all vt4) (string-append "\t" vt4)))
+             #t)))))
+    (synopsis "Extend SQLite to support Spatial SQL capabilities")
+    (description
+     "SpatiaLite is a library intended to extend the SQLite core to support
+fully fledged Spatial SQL capabilities.")
+    (home-page "https://www.gaia-gis.it/fossil/libspatialite/index")
+    ;; For the genuine libspatialite-sources holds:
+    ;; Any of the licenses MPL1.1, GPL2+ or LGPL2.1+  may be picked.
+    ;; Files under src/control_points are from GRASS
+    ;; and are licensed under GPL2+ only.
+    ;; src/md5.[ch]: Placed into the public domain by Alexander Peslyak.
+    (license (list license:gpl2+
+                   license:lgpl2.1+
+                   license:mpl1.1
+                   license:public-domain))))
+
 (define-public proj.4
   (package
     (name "proj.4")
@@ -378,3 +457,36 @@ development.")
     (synopsis "Python bindings for Mapnik")
     (description "This package provides Python bindings for Mapnik.")
     (license license:lgpl2.1+)))
+
+(define-public spatialite-gui
+  (package
+    (name "spatialite-gui")
+    (version "1.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.gaia-gis.it/gaia-sins/spatialite_gui-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1r05dz9pyc8vsd2wbqxcsracpfbaamz470rcyp2myfpqwznv376b"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("freexl" ,freexl)
+       ("geos" ,geos)
+       ("libgaiagraphics" ,libgaiagraphics)
+       ("libspatialite" ,libspatialite)
+       ("libxml2" ,libxml2)
+       ("proj.4" ,proj.4)
+       ("sqlite" ,sqlite)
+       ("wxwidgets" ,wxwidgets-2)
+       ("zlib" ,zlib)))
+    (synopsis "Graphical user interface for SpatiaLite")
+    (description "Spatialite-gui provides a visual interface for viewing and
+ maintaining a spatialite database.  You can easily see the structure of the
+ tables and data contents using point and click functions, many of which
+ construct common SQL queries, or craft your own SQL queries.")
+    (home-page "https://www.gaia-gis.it/fossil/spatialite_gui/index")
+    (license license:gpl3+)))
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index 51b772a586..f14ca27810 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -198,7 +198,7 @@ translated messages from the catalogs.  Nearly all GNU packages use Gettext.")
        ("texlive" ,texlive-tiny) ;for tests
        ("libxml2" ,libxml2)
        ("xsltproc" ,libxslt)))
-    (home-page "http://po4a.alioth.debian.org/")
+    (home-page "https://po4a.org/")
     (synopsis "Scripts to ease maintenance of translations")
     (description
      "The po4a (PO for anything) project goal is to ease translations (and
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index cb65c9a286..6ce7fbc9b8 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -428,14 +428,14 @@ from software emulation to complete hardware acceleration for modern GPUs.")
 (define (mesa-demos-source version)
   (origin
     (method url-fetch)
-    (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/demos/" version
+    (uri (string-append "ftp://ftp.freedesktop.org/pub/mesa/demos"
                         "/mesa-demos-" version ".tar.bz2"))
-    (sha256 (base32 "1vqb7s5m3fcg2csbiz45mha1pys2xx6rhw94fcyvapqdpm5iawy1"))))
+    (sha256 (base32 "0zgzbz55a14hz83gbmm0n9gpjnf5zadzi2kjjvkn6khql2a9rs81"))))
 
 (define-public mesa-utils
   (package
     (name "mesa-utils")
-    (version "8.3.0")
+    (version "8.4.0")
     (source (mesa-demos-source version))
     (build-system gnu-build-system)
     (inputs
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index fcbb7f31a8..c45c821a91 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -2449,7 +2449,7 @@ libxml to ease remote use of the RESTful API.")
 (define-public libsoup
   (package
     (name "libsoup")
-    (version "2.60.2")
+    (version "2.60.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/libsoup/"
@@ -2457,7 +2457,7 @@ libxml to ease remote use of the RESTful API.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "00fsy12mz9b55algq7c6gk4xj5j6a5z6dxcnq59fdqkji3hwyqvj"))))
+                "08lawrdkkzycvpb1h0wfiqfz6dgx77jp0wxp546lxgisy9icf38v"))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (arguments
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 16685f6986..eeab5c5afd 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -214,14 +214,14 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.2.4")
+    (version "2.2.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "1v7j8v2ww1knknbrhw3svfrqkmf9ll58iq0dczbsdpqgg1j3w6j0"))))
+                "0mzgibq4dpxh3i9anmwg12xdjry28y83icafhx3j3djg5niqk89z"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 9052a34e96..93114d8e07 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -10,7 +10,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net>
@@ -1091,29 +1091,28 @@ installed as @code{stb_image}.")
 (define-public optipng
   (package
     (name "optipng")
-    (version "0.7.6")
+    (version "0.7.7")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://prdownloads.sourceforge.net/optipng/optipng-"
                            version ".tar.gz"))
-       (patches (search-patches "optipng-CVE-2017-1000229.patch"))
        (sha256
         (base32
-         "105yk5qykvhiahzag67gm36s2kplxf6qn5hay02md0nkrcgn6w28"))))
+         "0lj4clb851fzpaq446wgj0sfy922zs5l5misbpwv6w7qrqrz4cjg"))))
     (build-system gnu-build-system)
     (inputs
      `(("zlib" ,zlib)))
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         ;; configure script does not accept arguments CONFIG_SHELL and SHELL
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
-             (zero? (system* "sh" "configure"
-                             (string-append "--prefix=" (assoc-ref outputs "out")))))))))
-    (synopsis "Optimizer that recompresses PNG image files to a
-smaller size")
+             ;; configure script doesn't accept arguments CONFIG_SHELL and SHELL
+             (invoke "sh" "configure"
+                     (string-append "--prefix=" (assoc-ref outputs "out")))
+             #t)))))
+    (synopsis "Optimizer that recompresses PNG image files to a smaller size")
     (description "OptiPNG is a PNG optimizer that recompresses image
 files to a smaller size, without losing any information.  This program
 also converts external formats (BMP, GIF, PNM and TIFF) to optimized
diff --git a/gnu/packages/ldc.scm b/gnu/packages/ldc.scm
index 8fe59679f8..aca2cab0a2 100644
--- a/gnu/packages/ldc.scm
+++ b/gnu/packages/ldc.scm
@@ -41,14 +41,14 @@
 (define-public rdmd
   (package
     (name "rdmd")
-    (version "2.073.0")
+    (version "2.077.1")
     (source (origin
       (method url-fetch)
       (uri (string-append "https://github.com/dlang/tools/archive/v" version ".tar.gz"))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
-        "01if3ivnb7g2myfhymp4d9346s4vmvcl82i1kxfs5iza45almh7v"))))
+        "0c8w373rv6iz3xfid94w40ncv2lr2ncxi662qsr4lda4aghczmq7"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -58,7 +58,7 @@
          (replace
           'build
           (lambda _
-            (zero? (system* "ldc2" "rdmd.d"))))
+            (invoke "ldc2" "rdmd.d")))
          (replace
           'install
           (lambda* (#:key outputs #:allow-other-keys)
@@ -77,7 +77,6 @@ and freshness without requiring additional information from the user.")
     (license license:boost1.0)))
 
 (define-public ldc-bootstrap
-  (let ((runtime-version "0.17.3"))
     (package
       (name "ldc")
       (version "0.17.4")
@@ -92,6 +91,10 @@ and freshness without requiring additional information from the user.")
                   "1kw0j378k6bh0k66dvx99bjq8ilp8bb24w3jrmibn8rhmqv0d5q8"))))
       (build-system cmake-build-system)
       (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
+      (properties
+       ;; Some of the tests take a very long time on ARMv7.  See
+       ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
+       `((max-silent-time . ,(* 3600 3))))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -120,12 +123,15 @@ and freshness without requiring additional information from the user.")
                  (("echo") (which "echo")))
                (substitute* "runtime/phobos/std/datetime.d"
                  (("/usr/share/zoneinfo/")
-                  (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")))
+                  (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
+                 (("tzName == \"[+]VERSION\"")
+                  "(tzName == \"+VERSION\" || std.algorithm.endsWith(tzName, \"/leapseconds\"))"))
                (substitute* "tests/d2/dmd-testsuite/Makefile"
                  (("/bin/bash") (which "bash")))
                ;; FIXME: this test cannot be linked.
                (delete-file "tests/d2/dmd-testsuite/runnable/cppa.d")
-               #t)))))
+               ;; the following two tests fail on i686
+               (for-each delete-file '("tests/ir/attributes.d" "tests/ir/align.d")))))))
       (inputs
        `(("libconfig" ,libconfig)
          ("libedit" ,libedit)
@@ -142,59 +148,51 @@ and freshness without requiring additional information from the user.")
              (method url-fetch)
              (uri (string-append
                    "https://github.com/ldc-developers/phobos/archive/ldc-v"
-                   runtime-version ".tar.gz"))
+                   version ".tar.gz"))
              (sha256
               (base32
-               "0qywnvnp019mmmr74aw90ir9f03iz0hc7cgzna609agsar0b27jl"))
-             (patches (search-patches "ldc-disable-tests.patch"))))
+               "16x36kp46mqiihxx7jvr1d3mv3b96yfmhinb9lzinh2m4clr85wz"))
+             (patches (search-patches "ldc-bootstrap-disable-tests.patch"))))
          ("druntime-src"
           ,(origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/ldc-developers/druntime/archive/ldc-v"
-                   runtime-version ".tar.gz"))
+                   version ".tar.gz"))
              (sha256
               (base32
-               "0z418n6x2fxac07sxpi4rl69069qiym4w6r9sjppn91q58qh8hjs"))))
+               "0iw2xxhcbsc5f1707dgdzhff528363l4faqdk513gaxs2dhfx8vx"))))
          ("dmd-testsuite-src"
           ,(origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/ldc-developers/dmd-testsuite/archive/ldc-v"
-                   runtime-version ".tar.gz"))
+                   version ".tar.gz"))
              (sha256
               (base32
-               "196mkfax5y3yqm3gz7jhqhnkjwrvr2m4a8nc9k41l0511ldzsk9x"))))))
-
-      (properties
-       ;; Some of the tests take a very long time on ARMv7.  See
-       ;; <https://lists.gnu.org/archive/html/guix-devel/2018-02/msg00312.html>.
-       `((max-silent-time . ,(* 3600 3))))
-
+               "0z6ch930wjkg2vlnqkbliwxxxifad6ydsdpwdxwnajkb2kaxsjx4"))))))
       (home-page "http://wiki.dlang.org/LDC")
       (synopsis "LLVM compiler for the D programming language")
       (description
-       "LDC is a compiler for the D programming language.  It is based on the
-latest DMD frontend and uses LLVM as backend.")
+       "LDC is a compiler for the D programming language.  It is based on
+the latest DMD compiler that was written in C and is used for
+bootstrapping more recent compilers written in D.")
       ;; Most of the code is released under BSD-3, except for code originally
       ;; written for GDC, which is released under GPLv2+, and the DMD frontend,
       ;; which is released under the "Boost Software License version 1.0".
       (license (list license:bsd-3
                      license:gpl2+
-                     license:boost1.0)))))
+                     license:boost1.0))))
 
 (define-public ldc
-  ;; The phobos, druntime and dmd-testsuite dependencies do not have a newer
-  ;; release than 1.1.0-beta4, hence the need to make use of the older-version
-  ;; variable to hold this variable.
-  (let ((older-version "1.1.0"))
+  ;; Phobos, druntime and dmd-testsuite library dependencies do
+  ;; not always have a newer release than the compiler, hence we
+  ;; retain this variable.
+  (let ((older-version "1.7.0"))
     (package
       (inherit ldc-bootstrap)
       (name "ldc")
-      (version "1.1.1")
-      ;; Beta version needed to compile various scientific tools that require
-      ;; the newer beta versions, and won't compile successfully with the
-      ;; older stable version.
+      (version "1.7.0")
       (source (origin
                 (method url-fetch)
                 (uri (string-append
@@ -203,7 +201,7 @@ latest DMD frontend and uses LLVM as backend.")
                 (file-name (string-append name "-" version ".tar.gz"))
                 (sha256
                  (base32
-                  "0yjiwg8pnlm2286bwdkwasaqw6ys7lymrqvhh5xyb1adha1ndcav"))))
+                  "0rqchmlbhz1pd8ksl1vfhfd5s3cp9h9pqi4k4w2np9sq0zr7abwn"))))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -217,20 +215,36 @@ latest DMD frontend and uses LLVM as backend.")
                  (and (unpack "phobos-src" "runtime/phobos")
                       (unpack "druntime-src" "runtime/druntime")
                       (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")))))
-           ;; The 'patch-dmd2 step in ldc causes the build to fail since
-           ;; dmd2/root/port.c no longer exists.  Arguments needed to have
-           ;; 'patch-dmd2 step removed, but retain everything else.
            (add-after 'unpack-submodule-sources 'patch-phobos
              (lambda* (#:key inputs #:allow-other-keys)
-               (substitute* "runtime/phobos/std/process.d"
+               (substitute* '("runtime/phobos/std/process.d"
+                              "tests/linking/linker_switches.d")
                  (("/bin/sh") (which "sh"))
                  (("echo") (which "echo")))
-               (substitute* "runtime/phobos/std/datetime.d"
-                 (("/usr/share/zoneinfo/")
-                  (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo")))
                (substitute* "tests/d2/dmd-testsuite/Makefile"
-                 (("/bin/bash") (which "bash")))
-               #t)))))
+                            (("/bin/bash") (which "bash")))
+               ;; disable unittests in the following files. We are discussing with
+               ;; upstream
+               (substitute* '("runtime/phobos/std/net/curl.d"
+                              "runtime/phobos/std/datetime/systime.d"
+                              "runtime/phobos/std/datetime/timezone.d"
+                              )
+                 (("version(unittest)") "version(skipunittest)")
+                 ((" unittest") " version(skipunittest) unittest"))
+               ;; the following tests require a more recent LLVM
+               (delete-file "tests/compilable/ctfe_math.d")
+               (delete-file "tests/debuginfo/nested_gdb.d")
+               (delete-file "tests/debuginfo/classtypes_gdb.d")
+               ;; the following tests requires AVX instruction set in the CPU.
+               (substitute* "tests/d2/dmd-testsuite/runnable/test_cdvecfill.d"
+                (("^// DISABLED: ") "^// DISABLED: linux64 "))
+               #t))
+           (replace 'check
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      ;; some tests call into gdb binary which needs SHELL and CC set
+                      (setenv "SHELL" (which "sh"))
+                      (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
+                      (invoke "make" "test" "-j" (number->string (parallel-job-count))))))))
       (native-inputs
        `(("llvm" ,llvm)
          ("clang" ,clang)
@@ -247,7 +261,7 @@ latest DMD frontend and uses LLVM as backend.")
                    older-version ".tar.gz"))
              (sha256
               (base32
-               "0z5v55b9s1ppf0c2ivjq7sbmq688c37c92ihc3qwrbxnqvkkvrlk"))
+               "042hn3v0zk353r0h6yclq56z86hi437y969bckyb2qsnv00h60hi"))
              ;; This patch deactivates some tests that depend on network access
              ;; to pass.  It also deactivates some tests that have some reliance
              ;; on timezone.
@@ -257,7 +271,7 @@ latest DMD frontend and uses LLVM as backend.")
              ;; that is being pursued at
              ;; <https://forum.dlang.org/post/zmdbdgnzrxyvtpqafvyg@forum.dlang.org>.
              ;; It also deactivates a test that requires /root
-             (patches (search-patches "ldc-1.1.0-disable-phobos-tests.patch"))))
+             (patches (search-patches "ldc-1.7.0-disable-phobos-tests.patch"))))
          ("druntime-src"
           ,(origin
              (method url-fetch)
@@ -266,7 +280,7 @@ latest DMD frontend and uses LLVM as backend.")
                    older-version ".tar.gz"))
              (sha256
               (base32
-               "07qvrqj6vgakd6qr4x5f70w6zwkzd1li5x8i1b5ywnds1z5lnfp6"))))
+               "0pvabk70zw8c1gbmvy2i486bg22bn0l5nbacjz0qwmhf0w9y9ylh"))))
          ("dmd-testsuite-src"
           ,(origin
              (method url-fetch)
@@ -275,18 +289,12 @@ latest DMD frontend and uses LLVM as backend.")
                    older-version ".tar.gz"))
              (sha256
               (base32
-               "12cak7yqmsgjlflx0dp6fwmwb9dac25amgi86n0bb95ard3547wy"))
-             ;; Remove the gdb tests that fails with a "Error: No such file or
-             ;; directory" error, despite the files being present in the debug
-             ;; files left with the --keep-failed flag to guix build.
-             (patches (search-patches "ldc-1.1.0-disable-dmd-tests.patch")))))))))
-
-(define-public ldc-beta ldc)
+               "1i8j1raah7b26bprwkdick443ivdsihgi1l14sn9rh4a95rnrpd9")))))))))
 
 (define-public dub
   (package
     (name "dub")
-    (version "1.5.0")
+    (version "1.7.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/dlang/dub/archive/"
@@ -294,7 +302,7 @@ latest DMD frontend and uses LLVM as backend.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1p9pmzjsmd7v3jpilv0z0c8ar1ykvri6nn5fv95f8d2vriczj29m"))))
+                "1jvr1mmq8j77wnsrsg7x2xv8yfljqd6x8gn6yy7dd6h6y3cf408q"))))
    (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; it would have tested itself by installing some packages (vibe etc)
@@ -303,7 +311,7 @@ latest DMD frontend and uses LLVM as backend.")
          (delete 'configure)            ; no configure script
          (replace 'build
            (lambda _
-             (zero? (system* "./build.sh"))))
+             (invoke "./build.sh")))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -317,10 +325,12 @@ latest DMD frontend and uses LLVM as backend.")
     (home-page "https://code.dlang.org/getting_started")
     (synopsis "Package and build manager for D projects")
     (description
-     "DUB is a package and build manager for applications and libraries written
-in the D programming language.  It can automatically retrieve a project's
-dependencies and integrate them in the build process.
+     "DUB is a package and build manager for applications and
+libraries written in the D programming language.  It can
+automatically retrieve a project's dependencies and integrate
+them in the build process.
 
-The design emphasis is on maximum simplicity for simple projects, while
-providing the opportunity to customize things when needed. ")
+The design emphasis is on maximum simplicity for simple projects,
+while providing the opportunity to customize things when
+needed.")
     (license license:expat)))
diff --git a/gnu/packages/license.scm b/gnu/packages/license.scm
new file mode 100644
index 0000000000..2ef2108df2
--- /dev/null
+++ b/gnu/packages/license.scm
@@ -0,0 +1,160 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.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 license)
+  #:use-module (guix licenses)
+  #:use-module (gnu packages)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system perl)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages perl-check))
+
+;;;
+;;; Please: Try to add new module packages in alphabetic order.
+;;;
+
+(define-public perl-regexp-pattern-license
+  (package
+    (name "perl-regexp-pattern-license")
+    (version "3.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/J/JO/JONASS/Regexp-Pattern-License-"
+             "v" version ".tar.gz"))
+       (sha256
+        (base32
+         "1479ismcgq1mx712yhw0qswb4z75spc81f9k621vfpkji0smpyk2"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-regexp-pattern" ,perl-regexp-pattern)
+       ("perl-test-exception" ,perl-test-exception)))
+    (propagated-inputs
+     `(("perl-strictures" ,perl-strictures-2)))
+    (home-page "http://search.cpan.org/dist/Regexp-Pattern-License/")
+    (synopsis "Regular expressions for legal licenses")
+    (description "Regexp::Pattern::License provides a hash of regular
+expression patterns related to legal software licenses.
+
+Regexp::Pattern is a convention for organizing reusable regex patterns.")
+    (license gpl3+)))
+
+(define-public perl-string-copyright
+  (package
+    (name "perl-string-copyright")
+    (version "0.003005")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/J/JO/JONASS/String-Copyright-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "12c6x4c10gr46ryc3dpwgfi6wggmgy4a1ls2hwhcpdm3wvzy5619"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-number-range" ,perl-number-range)))
+    (propagated-inputs
+     `(("perl-exporter-tiny" ,perl-exporter-tiny)))
+    (home-page "http://search.cpan.org/dist/String-Copyright/")
+    (synopsis "Representation of text-based copyright statements")
+    (description "String::Copyright Parses common styles of copyright
+statements and serializes in normalized format.")
+    (license gpl3+)))
+
+(define-public perl-software-license
+  (package
+    (name "perl-software-license")
+    (version "0.103013")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/L/LE/LEONT/Software-License-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1wqgh7vdlc966amlrq0b2szz18lnrl9rfh8wlf7v0hqg74vxjh96"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-try-tiny" ,perl-try-tiny)))
+    (propagated-inputs
+     `(("perl-data-section" ,perl-data-section)
+       ("perl-text-template" ,perl-text-template)))
+    (home-page "http://search.cpan.org/dist/Software-License/")
+    (synopsis "Templated software licenses")
+    (description "This package provides templated software licenses.")
+    (license (package-license perl))))
+
+(define-public licensecheck
+  (package
+    (name "licensecheck")
+    (version "3.0.33")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/J/JO/JONASS/App-Licensecheck-"
+                    "v" version ".tar.gz"))
+              (sha256
+               (base32
+                "0wydxb2jks1k3bxkcp7p0pazh5v3awbbcf6haplvwzkkayszhgs4"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-regexp-pattern" ,perl-regexp-pattern)
+       ("perl-software-license" ,perl-software-license)
+       ("perl-test-requires" ,perl-test-requires)
+       ("perl-test-roo" ,perl-test-roo)
+       ("perl-test-script" ,perl-test-script)
+       ("perl-universal-require" ,perl-universal-require)
+       ("perl-number-range" ,perl-number-range)
+       ("perl-sub-quote" ,perl-sub-quote)))
+    (propagated-inputs
+     `(("perl-getopt-long-descriptive" ,perl-getopt-long-descriptive)
+       ("perl-moo" ,perl-moo-2)
+       ("perl-namespace-clean" ,perl-namespace-clean)
+       ("perl-path-iterator-rule" ,perl-path-iterator-rule)
+       ("perl-path-tiny" ,perl-path-tiny)
+       ("perl-pod-constants" ,perl-pod-constants)
+       ("perl-regexp-pattern-license" ,perl-regexp-pattern-license)
+       ("perl-sort-key" ,perl-sort-key)
+       ("perl-strictures" ,perl-strictures-2)
+       ("perl-string-copyright" ,perl-string-copyright)
+       ("perl-string-escape" ,perl-string-escape)
+       ("perl-try-tiny" ,perl-try-tiny)
+       ("perl-module-runtime" ,perl-module-runtime)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (perllib (string-append out "/lib/perl5/site_perl/"
+                                            ,(package-version perl))))
+               (wrap-program (string-append out "/bin/licensecheck")
+                 `("PERL5LIB" ":"
+                   prefix (,(string-append perllib ":" (getenv "PERL5LIB")))))
+               #t))))))
+    (home-page "http://search.cpan.org/dist/App-Licensecheck/")
+    (synopsis "License checker for source files")
+    (description "Licensecheck attempts to determine the license that applies
+to each file passed to it, by searching the start of the file for text
+belonging to various licenses.")
+    (license (package-license perl))))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 6ee78b457e..09c84e2e10 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -383,8 +383,8 @@ It has been modified to remove all non-free binary blobs.")
 ;; supports qemu "virt" machine and possibly a large number of ARM boards.
 ;; See : https://wiki.debian.org/DebianKernel/ARMMP.
 
-(define %linux-libre-version "4.15.4")
-(define %linux-libre-hash "0dg5b2vgp2ph0l63cxyq6bz05hvc90wab05f8y3a8731c9xsxmzq")
+(define %linux-libre-version "4.15.5")
+(define %linux-libre-hash "1vrqya5zkhzl37fpj5v0v1igm7jf2gi13apkpak90l51xiw592cs")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -392,8 +392,8 @@ It has been modified to remove all non-free binary blobs.")
                     %linux-compatible-systems
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.14-version "4.14.20")
-(define %linux-libre-4.14-hash "1xc5g2kq3wpn6i61rpypnlb0f82f05b8jac2lg62rv4v46bsvfwv")
+(define %linux-libre-4.14-version "4.14.21")
+(define %linux-libre-4.14-hash "07d27mph514jxxkzil4b3c848ywfd4r4js0wl5wsfy7a3j757278")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -402,14 +402,14 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.82"
-                    "1x2hbn2kf7ikgdiqwj2d6d0s1pa1xh4xywliyj3rfsilanny2ipw"
+  (make-linux-libre "4.9.83"
+                    "09mw2r2fbn0g6xfhyxk0n54c7sg0vk9nlp7k2ca3v0v24n7lrfza"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.116"
-                    "00y5xhgqiyf7ivivnphwvkjgszk8rzn4s8q3sgshswz3kdic55hj"
+  (make-linux-libre "4.4.117"
+                    "1mlq9npyriwj0wpj24zah55bkxil31l182ypbn6b3x4yvmr8lhz0"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -1089,7 +1089,7 @@ external rate conversion.")
 (define-public iptables
   (package
     (name "iptables")
-    (version "1.6.1")
+    (version "1.6.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1097,7 +1097,7 @@ external rate conversion.")
                    version ".tar.bz2"))
              (sha256
               (base32
-               "1x8c9y340x79djsq54bc1674ryv59jfphrk4f88i7qbvbnyxghhg"))))
+               "0crp0lvh5m2f15pr8cw97h8yb8zjj10x95zj06j46cr68vx2vl2m"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1111,14 +1111,17 @@ external rate conversion.")
        #:configure-flags ; add $libdir to the RUNPATH of executables
        (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))))
     (home-page "https://www.netfilter.org/projects/iptables/index.html")
-    (synopsis "Program to configure the Linux IP packet filtering rules")
+    (synopsis "Programs to configure Linux IP packet filtering rules")
     (description
-     "iptables is the userspace command line program used to configure the
-Linux 2.4.x and later IPv4 packet filtering ruleset (firewall).  It is targeted at
-system administrators.  Since Network Address Translation is also configured
-from the packet filter ruleset, iptables is used for this, too.  The iptables
-package also includes ip6tables.  ip6tables is used for configuring the IPv6
-packet filter.")
+     "@command{iptables} is the user-space command line program used to
+configure the Linux 2.4.x and later IPv4 packet filtering ruleset
+(@dfn{firewall}), including @dfn{NAT} (Network Address Translation).
+
+This package also includes @command{ip6tables}, which is used to configure the
+IPv6 packet filter.
+
+Both commands are targeted at system administrators.
+")
     (license license:gpl2+)))
 
 (define-public ebtables
diff --git a/gnu/packages/lout.scm b/gnu/packages/lout.scm
index 1a1d0b3274..ac66b4ecfc 100644
--- a/gnu/packages/lout.scm
+++ b/gnu/packages/lout.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,91 +25,81 @@
   #:use-module (gnu packages ghostscript))
 
 (define-public lout
-  ;; This one is a bit tricky, because it doesn't follow the GNU Build System
-  ;; rules.  Instead, it has a makefile that has to be patched to set the
-  ;; prefix, etc., and it has no makefile rules to build its doc.
-  (let ((configure-phase
-         '(lambda* (#:key outputs #:allow-other-keys)
-            (let ((out (assoc-ref outputs "out"))
-                  (doc (assoc-ref outputs "doc")))
-              (substitute* "makefile"
-                (("^PREFIX[[:blank:]]*=.*$")
-                 (string-append "PREFIX = " out "\n"))
-                (("^LOUTLIBDIR[[:blank:]]*=.*$")
-                 (string-append "LOUTLIBDIR = " out "/lib/lout\n"))
-                (("^LOUTDOCDIR[[:blank:]]*=.*$")
-                 (string-append "LOUTDOCDIR = " doc "/share/doc/lout\n"))
-                (("^MANDIR[[:blank:]]*=.*$")
-                 (string-append "MANDIR = " out "/man\n")))
-              (mkdir out)
-              (mkdir (string-append out "/bin"))
-              (mkdir (string-append out "/lib"))
-              (mkdir (string-append out "/man"))
-              (mkdir-p (string-append doc "/share/doc/lout")))))
-        (install-man-phase
-         '(lambda* (#:key outputs #:allow-other-keys)
-            (zero? (system* "make" "installman"))))
-        (doc-phase
-         '(lambda* (#:key outputs #:allow-other-keys)
-            (define out
-              (assoc-ref outputs "doc"))
-
-            (setenv "PATH"
-                    (string-append (assoc-ref outputs "out")
-                                   "/bin:" (getenv "PATH")))
-            (chdir "doc")
-            (every (lambda (doc)
-                     (format #t "doc: building `~a'...~%" doc)
-                     (with-directory-excursion doc
-                       (let ((file (string-append out "/share/doc/lout/"
-                                                  doc ".ps")))
-                         (and (or (file-exists? "outfile.ps")
-                                  (zero? (system* "lout" "-r4" "-o"
-                                                  "outfile.ps" "all")))
-                              (begin
-                                (copy-file "outfile.ps" file)
-                                #t)
-                              (zero? (system* "ps2pdf"
-                                              "-dPDFSETTINGS=/prepress"
-                                              "-sPAPERSIZE=a4"
-                                              file
-                                              (string-append out "/share/doc/lout/"
-                                                             doc ".pdf")))))))
-                   '("design" "expert" "slides" "user")))))
-   (package
+  (package
     (name "lout")
     (version "3.40")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://savannah/lout/lout-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "1gb8vb1wl7ikn269dd1c7ihqhkyrwk19jwx5kd0rdvbk6g7g25ix"))))
-    (build-system gnu-build-system)               ; actually, just a makefile
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/lout/lout-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1gb8vb1wl7ikn269dd1c7ihqhkyrwk19jwx5kd0rdvbk6g7g25ix"))))
+    (build-system gnu-build-system)     ; actually, just a makefile
     (outputs '("out" "doc"))
     (native-inputs
      `(("ghostscript" ,ghostscript)))
-    (arguments `(#:modules ((guix build utils)
-                            (guix build gnu-build-system)
-                            (srfi srfi-1))        ; we need SRFI-1
-                 #:tests? #f                      ; no "check" target
-
-                 ;; Customize the build phases.
-                 #:phases (alist-replace
-                           'configure ,configure-phase
-
-                           (alist-cons-after
-                            'install 'install-man-pages
-                            ,install-man-phase
-
-                            (alist-cons-after
-                             'install 'install-doc
-                             ,doc-phase
-                             %standard-phases)))))
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build gnu-build-system)
+                  (srfi srfi-1))        ; we need SRFI-1
+       #:tests? #f                      ; no "check" target
+       #:phases
+       (modify-phases %standard-phases
+         ;; This package is a bit tricky, because it doesn't follow the GNU
+         ;; Build System rules.  Instead, it has a makefile that has to be
+         ;; patched to set the prefix, etc., and it has no makefile rules to
+         ;; build its documentation.
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (doc (assoc-ref outputs "doc")))
+               (substitute* "makefile"
+                 (("^PREFIX[[:blank:]]*=.*$")
+                  (string-append "PREFIX = " out "\n"))
+                 (("^LOUTLIBDIR[[:blank:]]*=.*$")
+                  (string-append "LOUTLIBDIR = " out "/lib/lout\n"))
+                 (("^LOUTDOCDIR[[:blank:]]*=.*$")
+                  (string-append "LOUTDOCDIR = " doc "/share/doc/lout\n"))
+                 (("^MANDIR[[:blank:]]*=.*$")
+                  (string-append "MANDIR = " out "/man\n")))
+               (mkdir out)
+               (mkdir (string-append out "/bin"))
+               (mkdir (string-append out "/lib"))
+               (mkdir (string-append out "/man"))
+               (mkdir-p (string-append doc "/share/doc/lout"))
+               #t)))
+         (add-after 'install 'install-man-pages
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "make" "installman")
+             #t))
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "doc")))
+               (setenv "PATH"
+                       (string-append (assoc-ref outputs "out")
+                                      "/bin:" (getenv "PATH")))
+               (with-directory-excursion "doc"
+                 (every (lambda (doc)
+                          (format #t "doc: building `~a'...~%" doc)
+                          (with-directory-excursion doc
+                            (let ((file (string-append out "/share/doc/lout/"
+                                                       doc ".ps")))
+                              (unless (file-exists? "outfile.ps")
+                                (invoke "lout" "-r4" "-o"
+                                        "outfile.ps" "all"))
+                              (copy-file "outfile.ps" file)
+                              (invoke "ps2pdf"
+                                      "-dPDFSETTINGS=/prepress"
+                                      "-sPAPERSIZE=a4"
+                                      file
+                                      (string-append out "/share/doc/lout/"
+                                                     doc ".pdf")))))
+                        '("design" "expert" "slides" "user")))
+               #t))))))
     (synopsis "Document layout system")
     (description
-"The Lout document formatting system reads a high-level description of
+     "The Lout document formatting system reads a high-level description of
 a document similar in style to LaTeX and produces a PostScript or plain text
 output file.
 
@@ -124,4 +115,4 @@ TeX macros because Lout is a high-level, purely functional language, the
 outcome of an eight-year research project that went back to the
 beginning.")
     (license gpl3+)
-    (home-page "https://savannah.nongnu.org/projects/lout/"))))
+    (home-page "https://savannah.nongnu.org/projects/lout/")))
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index d7e76ac3e5..6e8f9a74ae 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -907,7 +907,7 @@ and search library.")
 (define-public getmail
   (package
     (name "getmail")
-    (version "5.4")
+    (version "5.5")
     (source
      (origin
        (method url-fetch)
@@ -915,7 +915,7 @@ and search library.")
                            name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1iwss9z94p165gxr2yw7s9q12a0bn71fcdbikzkykr5s7xxnz2ds"))))
+         "0l43lbnrnyyrq8mlnw37saq6v0mh3nkirdq1dwnsrihykzjjwf70"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; no tests
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 0f87346ea9..25e1d5a312 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -3047,7 +3047,7 @@ specifications.")
 (define-public lpsolve
   (package
     (name "lpsolve")
-    (version "5.5.2.0")
+    (version "5.5.2.5")
     (source
      (origin
       (method url-fetch)
@@ -3055,7 +3055,7 @@ specifications.")
                           "/lp_solve_" version "_source.tar.gz"))
       (sha256
        (base32
-        "176c7f023mb6b8bfmv4rfqnrlw88lsg422ca74zjh19i2h5s69sq"))
+        "12pj1idjz31r7c2mb5w03vy1cmvycvbkx9z29s40qdmkp1i7q6i0"))
       (modules '((guix build utils)))
       (snippet
        '(substitute* (list "lp_solve/ccc" "lpsolve55/ccc")
@@ -3073,16 +3073,17 @@ specifications.")
           (("isnan\\(0\\)") "isnan(0.)")))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; no check target
+     `(#:tests? #f                      ; no check target
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (delete 'configure)            ; no configure script
          (replace 'build
            (lambda _
-             (and (with-directory-excursion "lpsolve55"
-                    (zero? (system* "bash" "ccc")))
-                  (with-directory-excursion "lp_solve"
-                    (zero? (system* "bash" "ccc"))))))
+             (with-directory-excursion "lpsolve55"
+               (invoke "bash" "ccc"))
+             (with-directory-excursion "lp_solve"
+               (invoke "bash" "ccc"))
+             #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -3091,11 +3092,8 @@ specifications.")
                     ;; This is where LibreOffice expects to find the header
                     ;; files, and where they are installed by Debian.
                     (include (string-append out "/include/lpsolve")))
-               (mkdir-p lib)
-               (copy-file "lpsolve55/bin/ux64/liblpsolve55.a"
-                          (string-append lib "/liblpsolve55.a"))
-               (copy-file "lpsolve55/bin/ux64/liblpsolve55.so"
-                          (string-append lib "/liblpsolve55.so"))
+               (install-file "lpsolve55/bin/ux64/liblpsolve55.a" lib)
+               (install-file "lpsolve55/bin/ux64/liblpsolve55.so" lib)
                (install-file "lp_solve/bin/ux64/lp_solve" bin)
 
                ;; Install a subset of the header files as on Debian
@@ -3437,14 +3435,14 @@ supports compressed MAT files, as well as newer (version 7.3) MAT files.")
 (define-public vc
   (package
     (name "vc")
-    (version "1.2.0")
+    (version "1.3.3")
     (source
       (origin (method url-fetch)
               (uri (string-append "https://github.com/VcDevel/Vc/releases/"
                                   "download/" version "/Vc-" version ".tar.gz"))
               (sha256
                (base32
-                "1rh6dhqar3y07n4xqyml0sa0v48qv3ch9dc3yc2in855hlh4vnqi"))))
+                "1zmlpn32jzb38smp3j834llmbix3whsrbw0h397qxysbw792kih8"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index ac1fe51f15..1b06de2360 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
-;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -56,16 +56,16 @@
 (define-public libmpdclient
   (package
     (name "libmpdclient")
-    (version "2.13")
+    (version "2.14")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append "http://musicpd.org/download/libmpdclient/"
+               (string-append "https://musicpd.org/download/libmpdclient/"
                               (car (string-split version #\.))
                               "/libmpdclient-" version ".tar.xz"))
               (sha256
                (base32
-                "0pflbv2jzik7yxnacci1iqs0awy1i5ipwn67xk0hg9r0pi9bs5ai"))))
+                "0whk0qw0lsd3kaimdznz0c45bfym0p4885zf4b7pfc7y3dwy510a"))))
     (build-system meson-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -88,16 +88,16 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.20.15")
+    (version "0.20.17")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append "http://musicpd.org/download/mpd/"
+               (string-append "https://musicpd.org/download/mpd/"
                               (version-major+minor version)
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "0h7bm561i8p0bjp1hy8fsiy5zj7db24zyv6ypfihwf35wrklz766"))))
+                "1hfssmvp4wmy7zh4bl4zv2zqwiddsy77v69w9fh61pqrwbqfgc1c"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -162,17 +162,17 @@ protocol.")
 (define-public mpd-mpc
   (package
     (name "mpd-mpc")
-    (version "0.28")
+    (version "0.29")
     (source (origin
               (method url-fetch)
               (uri
-               (string-append "http://www.musicpd.org/download/mpc/"
+               (string-append "https://www.musicpd.org/download/mpc/"
                               (car (string-split version #\.))
                               "/mpc-" version ".tar.xz"))
               (sha256
                (base32
-                "0iy5mdffkk61255f62si7p8mhyhkib70zlr1i1iimj2xr037scx4"))))
-    (build-system gnu-build-system)
+                "1lxr0z5i5yx4lcvy9nyxj6q32qlz473j3zm6va68zd1cj3ndmw82"))))
+    (build-system meson-build-system)
     (inputs `(("libmpdclient" ,libmpdclient)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (synopsis "Music Player Daemon client")
diff --git a/gnu/packages/musl.scm b/gnu/packages/musl.scm
index 7c78d29385..ff789b8c6f 100644
--- a/gnu/packages/musl.scm
+++ b/gnu/packages/musl.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Vincent Legoll <vincent.legoll@gmail.com>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,14 +28,14 @@
 (define-public musl
   (package
     (name "musl")
-    (version "1.1.18")
+    (version "1.1.19")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.musl-libc.org/releases/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0651lnj5spckqjf83nz116s8qhhydgqdy3rkl4icbh5f05fyw5yh"))))
+                "1nf1wh44bhm8gdcfr75ayib29b99vpq62zmjymrq7f96h9bshnfv"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f  ; Musl has no tests
@@ -43,7 +44,7 @@
     (synopsis "Small C standard library")
     (description "musl is a simple and lightweight C standard library.  It
 strives to be correct in the sense of standards-conformance and safety.")
-    (home-page "http://www.musl-libc.org")
+    (home-page "https://www.musl-libc.org")
     ;; Musl as a whole is released under the Expat license.  Parts of it are
     ;; derived from various third-party projects that are released under
     ;; non-copyleft licenses.  See the COPYRIGHT file for details.
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index bb5b74005a..cd3f4f124b 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1584,21 +1584,20 @@ displays the results in real time.")
 (define-public strongswan
   (package
     (name "strongswan")
-    (version "5.6.1")
+    (version "5.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://download.strongswan.org/strongswan-"
                            version ".tar.bz2"))
        (sha256
-        (base32 "0lxbyiary8iapx3ysw40czrmxf983fhfzs5mvz2hk1j1mpc85hp0"))))
+        (base32 "14ifqay54brw2b2hbmm517bxw8bs9631d7jm4g139igkxcq0m9p0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'build 'adjust-to-environment
+         (add-before 'build 'patch-command-file-names
            (lambda* (#:key inputs #:allow-other-keys)
-             ;; Adjust file names.
              (substitute* "src/libstrongswan/utils/process.c"
                (("/bin/sh")
                 (string-append (assoc-ref inputs "bash") "/bin/sh")))
@@ -1607,8 +1606,9 @@ displays the results in real time.")
                (("/bin/sh") (which "sh"))
                (("/bin/echo") (which "echo"))
                (("cat") (which "cat")))
-
-             ;; This is needed for tests.
+             #t))
+         (add-before 'check 'set-up-test-environment
+           (lambda* (#:key inputs #:allow-other-keys)
              (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
                                             "/share/zoneinfo"))
              #t)))
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 95f0d6227a..17423856aa 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -47,7 +47,7 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20180122")
+    (version "20180222")
     (source
      (origin
       (method url-fetch)
@@ -55,7 +55,7 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1wkbppb4mc56grl6jsp803sf0hm7mg5ff7qmxalp7sd0vxqw41p9"))))
+        "1bwx1rcrqz04d8fajlllhrfkjqxg0mfvsd86wf6p067gmgdrf6g8"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 67e9379f89..f83c05a25b 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
@@ -342,7 +342,8 @@ any X11 window.")
                               name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0scqkpll2q8jhzcgcsh9kqz0gwdpvynivqjmmbzax2irjfaiklpn"))))
+                "0scqkpll2q8jhzcgcsh9kqz0gwdpvynivqjmmbzax2irjfaiklpn"))
+              (patches (search-patches "password-store-gnupg-compat.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/patches/htop-fix-process-tree.patch b/gnu/packages/patches/htop-fix-process-tree.patch
new file mode 100644
index 0000000000..d8e5e2ccac
--- /dev/null
+++ b/gnu/packages/patches/htop-fix-process-tree.patch
@@ -0,0 +1,99 @@
+From 2971a187551e062ffefdab965f55377b36cd94eb Mon Sep 17 00:00:00 2001
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Wed, 21 Feb 2018 06:00:50 +0100
+Subject: [PATCH] Fix process tree
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This manually reverts:
+
+  commit 584a9bceab948590dabd189d234a86e6bf4ec3f4
+  Author: wangqr <wangqr@wangqr.tk>
+  Date:   Fri Sep 1 21:27:24 2017 +0800
+
+  Find roots when constructing process tree, fix #587
+
+which breaks the process tree (‘t’) view in at least some cases.
+I will investigate further...
+---
+ ProcessList.c | 63 +++++++++++++++++------------------------------------------
+ 1 file changed, 18 insertions(+), 45 deletions(-)
+
+diff --git a/ProcessList.c b/ProcessList.c
+index 48b2d95..225253d 100644
+--- a/ProcessList.c
++++ b/ProcessList.c
+@@ -213,51 +213,24 @@ void ProcessList_sort(ProcessList* this) {
+       // Restore settings
+       this->settings->sortKey = sortKey;
+       this->settings->direction = direction;
+-      int vsize = Vector_size(this->processes);
+-      // Find all processes whose parent is not visible
+-      int size;
+-      while ((size = Vector_size(this->processes))) {
+-         int i;
+-         for (i = 0; i < size; i++) {
+-            Process* process = (Process*)(Vector_get(this->processes, i));
+-            // Immediately consume not shown processes
+-            if (!process->show) {
+-               process = (Process*)(Vector_take(this->processes, i));
+-               process->indent = 0;
+-               Vector_add(this->processes2, process);
+-               ProcessList_buildTree(this, process->pid, 0, 0, direction, false);
+-               break;
+-            }
+-            pid_t ppid = process->tgid == process->pid ? process->ppid : process->tgid;
+-            // Bisect the process vector to find parent
+-            int l = 0, r = size;
+-            // If PID corresponds with PPID (e.g. "kernel_task" (PID:0, PPID:0)
+-            // on Mac OS X 10.11.6) cancel bisecting and regard this process as
+-            // root.
+-            if (process->pid == ppid)
+-               r = 0;
+-            while (l < r) {
+-               int c = (l + r) / 2;
+-               pid_t pid = ((Process*)(Vector_get(this->processes, c)))->pid;
+-               if (ppid == pid) {
+-                  break;
+-               } else if (ppid < pid) {
+-                  r = c;
+-               } else {
+-                  l = c + 1;
+-               }
+-            }
+-            // If parent not found, then construct the tree with this root
+-            if (l >= r) {
+-               process = (Process*)(Vector_take(this->processes, i));
+-               process->indent = 0;
+-               Vector_add(this->processes2, process);
+-               ProcessList_buildTree(this, process->pid, 0, 0, direction, process->showChildren);
+-               break;
+-            }
+-         }
+-         // There should be no loop in the process tree
+-         assert(i < size);
++
++      // Take PID 1 as root and add to the new listing
++       int vsize = Vector_size(this->processes);
++      Process* init = (Process*) (Vector_take(this->processes, 0));
++      if (!init) return;
++      // This assertion crashes on hardened kernels.
++      // I wonder how well tree view works on those systems.
++      // assert(init->pid == 1);
++      init->indent = 0;
++      Vector_add(this->processes2, init);
++      // Recursively empty list
++      ProcessList_buildTree(this, init->pid, 0, 0, direction, true);
++      // Add leftovers
++      while (Vector_size(this->processes)) {
++         Process* p = (Process*) (Vector_take(this->processes, 0));
++         p->indent = 0;
++         Vector_add(this->processes2, p);
++         ProcessList_buildTree(this, p->pid, 0, 0, direction, p->showChildren);
+       }
+       assert(Vector_size(this->processes2) == vsize); (void)vsize;
+       assert(Vector_size(this->processes) == 0);
+-- 
+2.16.2
+
diff --git a/gnu/packages/patches/ldc-1.1.0-disable-dmd-tests.patch b/gnu/packages/patches/ldc-1.1.0-disable-dmd-tests.patch
deleted file mode 100644
index 31eb44aefc..0000000000
--- a/gnu/packages/patches/ldc-1.1.0-disable-dmd-tests.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-This patch deactivates some tests that fail when ldc is built with the command:
-
-./pre-inst-env guix environment guix --pure -- ./pre-inst-env guix build ldc@1.1.0-beta6
-
-When the --keep-failed flag is added to the build command above, and the tests
-run in the resulting /tmp/guix-build-ldc-1.1.0-beta6.drv-* directory, the tests
-pass.
-
-by Frederick M. Muriithi <fredmanglis@gmail.com>
-
-diff --git a/d_do_test.d b/d_do_test.d
-index aa67169..8173759 100755
---- a/d_do_test.d
-+++ b/d_do_test.d
-@@ -645,8 +645,6 @@ int main(string[] args)
-                     auto gdb_output = execute(fThisRun, command, true, result_path);
-                     if (testArgs.gdbMatch !is null)
-                     {
--                        enforce(match(gdb_output, regex(testArgs.gdbMatch)),
--                                "\nGDB regex: '"~testArgs.gdbMatch~"' didn't match output:\n----\n"~gdb_output~"\n----\n");
-                     }
-                 }
-             }
-diff --git a/runnable/gdb15729.sh b/runnable/gdb15729.sh
-index 1d390e0..906b2b6 100755
---- a/runnable/gdb15729.sh
-+++ b/runnable/gdb15729.sh
-@@ -21,7 +21,6 @@ if [ $OS == "linux" ]; then
-        echo RESULT=
-        p s.val
- EOF
--    gdb ${dir}${SEP}gdb15729 --batch -x ${dir}${SEP}gdb15729.gdb | grep 'RESULT=.*1234' || exit 1
- fi
- 
- rm -f ${libname} ${dir}${SEP}{gdb15729${OBJ},gdb15729${EXE},gdb15729.gdb}
diff --git a/gnu/packages/patches/ldc-1.1.0-disable-phobos-tests.patch b/gnu/packages/patches/ldc-1.1.0-disable-phobos-tests.patch
deleted file mode 100644
index 70dd419455..0000000000
--- a/gnu/packages/patches/ldc-1.1.0-disable-phobos-tests.patch
+++ /dev/null
@@ -1,414 +0,0 @@
-This patch deactivates failing tests that depend on network connectivity
-to pass in curl.d and socket.d
-It deactivates tests in path.d that assume /root
-
-A thread was started on the ldc forum to pursue the possibility of a
-version flag to deactivate tests conditionally. The thread is at
-https://forum.dlang.org/post/zmdbdgnzrxyvtpqafvyg@forum.dlang.org
-
-by Frederick M. Muriithi <fredmanglis@gmail.com>
-
-diff --git a/std/datetime.d b/std/datetime.d
-index 4d4afb1..2c91a44 100644
---- a/std/datetime.d
-+++ b/std/datetime.d
-@@ -27306,8 +27306,8 @@ public:
-         // leaving it commented out until I can sort it out.
-         //assert(equal(tzNames, tzNames.uniq()));
- 
--        foreach(tzName; tzNames)
--            assertNotThrown!DateTimeException(testPZSuccess(tzName));
-+        //foreach(tzName; tzNames)
-+            //assertNotThrown!DateTimeException(testPZSuccess(tzName));
-     }
- 
- 
-@@ -29178,8 +29178,8 @@ public:
- 
-         auto tzNames = getInstalledTZNames();
- 
--        foreach(tzName; tzNames)
--            assertNotThrown!DateTimeException(testPTZSuccess(tzName));
-+        //foreach(tzName; tzNames)
-+            //assertNotThrown!DateTimeException(testPTZSuccess(tzName));
- 
-         // No timezone directories on Android, just a single tzdata file
-         version(Android) {} else
-diff --git a/std/net/curl.d b/std/net/curl.d
-index 9c6af66..5fccb38 100644
---- a/std/net/curl.d
-+++ b/std/net/curl.d
-@@ -419,7 +419,7 @@ void download(Conn = AutoProtocol)(const(char)[] url, string saveToPath, Conn co
- 
- unittest
- {
--    static import std.file;
-+    /*static import std.file;
-     foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-@@ -430,7 +430,7 @@ unittest
-         scope (exit) std.file.remove(fn);
-         download(host, fn);
-         assert(std.file.readText(fn) == "Hello world");
--    }
-+    }*/
- }
- 
- /** Upload file from local files system using the HTTP or FTP protocol.
-@@ -483,7 +483,7 @@ void upload(Conn = AutoProtocol)(string loadFromPath, const(char)[] url, Conn co
- 
- unittest
- {
--    static import std.file;
-+    /*static import std.file;
-     foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         auto fn = std.file.deleteme;
-@@ -496,7 +496,7 @@ unittest
-             s.send(httpOK());
-         });
-         upload(fn, host ~ "/path");
--    }
-+    }*/
- }
- 
- /** HTTP/FTP get content.
-@@ -551,7 +551,7 @@ T[] get(Conn = AutoProtocol, T = char)(const(char)[] url, Conn conn = Conn())
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             assert(s.recvReq.hdrs.canFind("GET /path"));
-@@ -559,7 +559,7 @@ unittest
-         });
-         auto res = get(host ~ "/path");
-         assert(res == "GETRESPONSE");
--    }
-+    }*/
- }
- 
- 
-@@ -598,7 +598,7 @@ if (is(T == char) || is(T == ubyte))
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             auto req = s.recvReq;
-@@ -608,12 +608,12 @@ unittest
-         });
-         auto res = post(host ~ "/path", "POSTBODY");
-         assert(res == "POSTRESPONSE");
--    }
-+    }*/
- }
- 
- unittest
- {
--    auto data = new ubyte[](256);
-+    /*auto data = new ubyte[](256);
-     foreach (i, ref ub; data)
-         ub = cast(ubyte)i;
- 
-@@ -624,7 +624,7 @@ unittest
-         s.send(httpOK(cast(ubyte[])[17, 27, 35, 41]));
-     });
-     auto res = post!ubyte(testServer.addr, data);
--    assert(res == cast(ubyte[])[17, 27, 35, 41]);
-+    assert(res == cast(ubyte[])[17, 27, 35, 41]);*/
- }
- 
- 
-@@ -680,7 +680,7 @@ T[] put(Conn = AutoProtocol, T = char, PutUnit)(const(char)[] url, const(PutUnit
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             auto req = s.recvReq;
-@@ -690,7 +690,7 @@ unittest
-         });
-         auto res = put(host ~ "/path", "PUTBODY");
-         assert(res == "PUTRESPONSE");
--    }
-+    }*/
- }
- 
- 
-@@ -742,7 +742,7 @@ void del(Conn = AutoProtocol)(const(char)[] url, Conn conn = Conn())
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             auto req = s.recvReq;
-@@ -750,7 +750,7 @@ unittest
-             s.send(httpOK());
-         });
-         del(host ~ "/path");
--    }
-+    }*/
- }
- 
- 
-@@ -796,13 +796,13 @@ T[] options(T = char, OptionsUnit)(const(char)[] url,
- 
- unittest
- {
--    testServer.handle((s) {
-+    /*testServer.handle((s) {
-         auto req = s.recvReq;
-         assert(req.hdrs.canFind("OPTIONS /path"));
-         s.send(httpOK("OPTIONSRESPONSE"));
-     });
-     auto res = options(testServer.addr ~ "/path");
--    assert(res == "OPTIONSRESPONSE");
-+    assert(res == "OPTIONSRESPONSE");*/
- }
- 
- 
-@@ -836,13 +836,13 @@ T[] trace(T = char)(const(char)[] url, HTTP conn = HTTP())
- 
- unittest
- {
--    testServer.handle((s) {
-+    /*testServer.handle((s) {
-         auto req = s.recvReq;
-         assert(req.hdrs.canFind("TRACE /path"));
-         s.send(httpOK("TRACERESPONSE"));
-     });
-     auto res = trace(testServer.addr ~ "/path");
--    assert(res == "TRACERESPONSE");
-+    assert(res == "TRACERESPONSE");*/
- }
- 
- 
-@@ -875,13 +875,13 @@ T[] connect(T = char)(const(char)[] url, HTTP conn = HTTP())
- 
- unittest
- {
--    testServer.handle((s) {
-+    /*testServer.handle((s) {
-         auto req = s.recvReq;
-         assert(req.hdrs.canFind("CONNECT /path"));
-         s.send(httpOK("CONNECTRESPONSE"));
-     });
-     auto res = connect(testServer.addr ~ "/path");
--    assert(res == "CONNECTRESPONSE");
-+    assert(res == "CONNECTRESPONSE");*/
- }
- 
- 
-@@ -919,14 +919,14 @@ T[] patch(T = char, PatchUnit)(const(char)[] url, const(PatchUnit)[] patchData,
- 
- unittest
- {
--    testServer.handle((s) {
-+    /*testServer.handle((s) {
-         auto req = s.recvReq;
-         assert(req.hdrs.canFind("PATCH /path"));
-         assert(req.bdy.canFind("PATCHBODY"));
-         s.send(httpOK("PATCHRESPONSE"));
-     });
-     auto res = patch(testServer.addr ~ "/path", "PATCHBODY");
--    assert(res == "PATCHRESPONSE");
-+    assert(res == "PATCHRESPONSE");*/
- }
- 
- 
-@@ -1031,19 +1031,19 @@ private auto _basicHTTP(T)(const(char)[] url, const(void)[] sendData, HTTP clien
- 
- unittest
- {
--    testServer.handle((s) {
-+    /*testServer.handle((s) {
-         auto req = s.recvReq;
-         assert(req.hdrs.canFind("GET /path"));
-         s.send(httpNotFound());
-     });
-     auto e = collectException!CurlException(get(testServer.addr ~ "/path"));
--    assert(e.msg == "HTTP request returned status code 404 (Not Found)");
-+    assert(e.msg == "HTTP request returned status code 404 (Not Found)");*/
- }
- 
- // Bugzilla 14760 - content length must be reset after post
- unittest
- {
--    testServer.handle((s) {
-+    /*testServer.handle((s) {
-         auto req = s.recvReq;
-         assert(req.hdrs.canFind("POST /"));
-         assert(req.bdy.canFind("POSTBODY"));
-@@ -1061,7 +1061,7 @@ unittest
-     auto res = post(testServer.addr, "POSTBODY", http);
-     assert(res == "POSTRESPONSE");
-     res = trace(testServer.addr, http);
--    assert(res == "TRACERESPONSE");
-+    assert(res == "TRACERESPONSE");*/
- }
- 
- /*
-@@ -1265,14 +1265,14 @@ if (isCurlConn!Conn && isSomeChar!Char && isSomeChar!Terminator)
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             auto req = s.recvReq;
-             s.send(httpOK("Line1\nLine2\nLine3"));
-         });
-         assert(byLine(host).equal(["Line1", "Line2", "Line3"]));
--    }
-+    }*/
- }
- 
- /** HTTP/FTP fetch content as a range of chunks.
-@@ -1337,14 +1337,14 @@ auto byChunk(Conn = AutoProtocol)
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             auto req = s.recvReq;
-             s.send(httpOK(cast(ubyte[])[0, 1, 2, 3, 4, 5]));
-         });
-         assert(byChunk(host, 2).equal([[0, 1], [2, 3], [4, 5]]));
--    }
-+    }*/
- }
- 
- private T[] _getForRange(T,Conn)(const(char)[] url, Conn conn)
-@@ -1629,14 +1629,14 @@ auto byLineAsync(Conn = AutoProtocol, Terminator = char, Char = char)
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             auto req = s.recvReq;
-             s.send(httpOK("Line1\nLine2\nLine3"));
-         });
-         assert(byLineAsync(host).equal(["Line1", "Line2", "Line3"]));
--    }
-+    }*/
- }
- 
- 
-@@ -1778,14 +1778,14 @@ auto byChunkAsync(Conn = AutoProtocol)
- 
- unittest
- {
--    foreach (host; [testServer.addr, "http://"~testServer.addr])
-+    /*foreach (host; [testServer.addr, "http://"~testServer.addr])
-     {
-         testServer.handle((s) {
-             auto req = s.recvReq;
-             s.send(httpOK(cast(ubyte[])[0, 1, 2, 3, 4, 5]));
-         });
-         assert(byChunkAsync(host, 2).equal([[0, 1], [2, 3], [4, 5]]));
--    }
-+    }*/
- }
- 
- 
-@@ -2041,7 +2041,7 @@ private mixin template Protocol()
- 
-     unittest
-     {
--        testServer.handle((s) {
-+        /*testServer.handle((s) {
-             auto req = s.recvReq;
-             assert(req.hdrs.canFind("GET /"));
-             assert(req.hdrs.canFind("Basic dXNlcjpwYXNz"));
-@@ -2051,7 +2051,7 @@ private mixin template Protocol()
-         auto http = HTTP(testServer.addr);
-         http.onReceive = (ubyte[] data) { return data.length; };
-         http.setAuthentication("user", "pass");
--        http.perform();
-+        http.perform();*/
-     }
- 
-     /**
-@@ -2959,7 +2959,7 @@ struct HTTP
- 
-     unittest
-     {
--        testServer.handle((s) {
-+        /*testServer.handle((s) {
-             auto req = s.recvReq!ubyte;
-             assert(req.hdrs.canFind("POST /path"));
-             assert(req.bdy.canFind(cast(ubyte[])[0, 1, 2, 3, 4]));
-@@ -2975,7 +2975,7 @@ struct HTTP
-         ubyte[] res;
-         http.onReceive = (data) { res ~= data; return data.length; };
-         http.perform();
--        assert(res == cast(ubyte[])[17, 27, 35, 41]);
-+        assert(res == cast(ubyte[])[17, 27, 35, 41]);*/
-     }
- 
-     /**
-diff --git a/std/path.d b/std/path.d
-index 60c844f..0598104 100644
---- a/std/path.d
-+++ b/std/path.d
-@@ -3953,8 +3953,10 @@ unittest
-         }
-         else
-         {
-+/*
-             assert(expandTilde("~root") == "/root", expandTilde("~root"));
-             assert(expandTilde("~root/") == "/root/", expandTilde("~root/"));
-+*/
-         }
-         assert(expandTilde("~Idontexist/hey") == "~Idontexist/hey");
-     }
-diff --git a/std/socket.d b/std/socket.d
-index 7f5a3c3..e68b881 100644
---- a/std/socket.d
-+++ b/std/socket.d
-@@ -481,15 +481,15 @@ unittest
- {
-     softUnittest({
-         Protocol proto = new Protocol;
--        assert(proto.getProtocolByType(ProtocolType.TCP));
-+        //assert(proto.getProtocolByType(ProtocolType.TCP));
-         //writeln("About protocol TCP:");
-         //writefln("\tName: %s", proto.name);
-         // foreach(string s; proto.aliases)
-         // {
-         //      writefln("\tAlias: %s", s);
-         // }
--        assert(proto.name == "tcp");
--        assert(proto.aliases.length == 1 && proto.aliases[0] == "TCP");
-+        //assert(proto.name == "tcp");
-+        //assert(proto.aliases.length == 1 && proto.aliases[0] == "TCP");
-     });
- }
- 
-@@ -832,9 +832,9 @@ unittest
-     InternetHost ih = new InternetHost;
- 
-     ih.getHostByAddr(0x7F_00_00_01);
--    assert(ih.addrList[0] == 0x7F_00_00_01);
-+    //assert(ih.addrList[0] == 0x7F_00_00_01);
-     ih.getHostByAddr("127.0.0.1");
--    assert(ih.addrList[0] == 0x7F_00_00_01);
-+    //assert(ih.addrList[0] == 0x7F_00_00_01);
- 
-     softUnittest({
-         if (!ih.getHostByName("www.digitalmars.com"))
diff --git a/gnu/packages/patches/ldc-1.7.0-disable-phobos-tests.patch b/gnu/packages/patches/ldc-1.7.0-disable-phobos-tests.patch
new file mode 100644
index 0000000000..ccc136cc76
--- /dev/null
+++ b/gnu/packages/patches/ldc-1.7.0-disable-phobos-tests.patch
@@ -0,0 +1,88 @@
+diff --git a/std/path.d b/std/path.d
+index a9f0bd8..f47d103 100644
+--- a/std/path.d
++++ b/std/path.d
+@@ -4041,7 +4041,7 @@ version(unittest) import std.process : environment;
+         else version (Android)
+         {
+         }
+-        else
++        else version (HasRoot)
+         {
+             assert(expandTilde("~root") == "/root", expandTilde("~root"));
+             assert(expandTilde("~root/") == "/root/", expandTilde("~root/"));
+
+diff --git a/std/process.d b/std/process.d
+index df83296..d921cdb 100644
+--- a/std/process.d
++++ b/std/process.d
+@@ -1171,7 +1171,7 @@ version (Posix) @system unittest
+     assert(exists(buildPath(directory, "bar")));
+ }
+
+-@system unittest // Specifying a bad working directory.
++@system version(skipunittest) unittest // Specifying a bad working directory.
+ {
+     import std.exception : assertThrown;
+     TestScript prog = "/bin/echo";
+diff --git a/std/socket.d b/std/socket.d
+index 8a261d5..c1b87b6 100644
+--- a/std/socket.d
++++ b/std/socket.d
+@@ -484,7 +484,7 @@ class Protocol
+ // Skip this test on Android because getprotobyname/number are
+ // unimplemented in bionic.
+ version(CRuntime_Bionic) {} else
+-@safe unittest
++@safe version(hasNetwork) unittest
+ {
+     softUnittest({
+         Protocol proto = new Protocol;
+@@ -804,7 +804,7 @@ class InternetHost
+ }
+
+ ///
+-@safe unittest
++@safe version(hasNetwork) unittest
+ {
+     InternetHost ih = new InternetHost;
+
+@@ -959,7 +959,7 @@ AddressInfo[] getAddressInfo(T...)(in char[] node, T options)
+     return () @trusted { return getAddressInfoImpl(node, service, &hints); }();
+ }
+
+-@system unittest
++@system version(hasNetwork) unittest
+ {
+     struct Oops
+     {
+@@ -1010,7 +1010,7 @@ private AddressInfo[] getAddressInfoImpl(in char[] node, in char[] service, addr
+ }
+
+
+-@safe unittest
++@safe version(hasNetwork) unittest
+ {
+     softUnittest({
+         if (getaddrinfoPointer)
+diff --git a/std/stdio.d b/std/stdio.d
+index 10106a5..4b0590e 100644
+--- a/std/stdio.d
++++ b/std/stdio.d
+@@ -1426,8 +1426,7 @@ Removes the lock over the specified file segment.
+         g.unlock();
+     }
+
+-    version(Posix)
+-    @system unittest
++    @system version(skip) unittest
+     {
+         static import std.file;
+         auto deleteme = testFilename();
+@@ -1483,7 +1482,6 @@ Removes the lock over the specified file segment.
+         f.unlock();
+     }
+
+-
+ /**
+ Writes its arguments in text format to the file.
diff --git a/gnu/packages/patches/ldc-disable-tests.patch b/gnu/packages/patches/ldc-bootstrap-disable-tests.patch
index bdd6e5b76c..d2e40b8016 100644
--- a/gnu/packages/patches/ldc-disable-tests.patch
+++ b/gnu/packages/patches/ldc-bootstrap-disable-tests.patch
@@ -4,17 +4,17 @@ two others use networking.  Not bad out of almost 700 tests!
 
 by Pjotr Prins <pjotr.guix@thebird.nl>
 
---- a/std/datetime.d.orig	2016-11-24 01:13:52.584495545 +0100
-+++ b/std/datetime.d	2016-11-24 01:17:09.655306728 +0100
+--- a/std/datetime.d.orig      2016-11-24 01:13:52.584495545 +0100
++++ b/std/datetime.d   2016-11-24 01:17:09.655306728 +0100
 @@ -28081,22 +28081,24 @@
          import std.range : retro;
          import std.format : format;
- 
+
 -        name = strip(name);
 -
          enforce(tzDatabaseDir.exists(), new DateTimeException(format("Directory %s does not exist.", tzDatabaseDir)));
          enforce(tzDatabaseDir.isDir, new DateTimeException(format("%s is not a directory.", tzDatabaseDir)));
- 
+
          version(Android)
          {
 +            name = strip(name);
@@ -29,11 +29,11 @@ by Pjotr Prins <pjotr.guix@thebird.nl>
 +            auto filename = "./" ~ strip(name); // make sure the prefix is not stripped
 +            immutable file = buildNormalizedPath(tzDatabaseDir, filename);
 +        }
- 
+
 -        enforce(file.exists(), new DateTimeException(format("File %s does not exist.", file)));
 +        enforce(file.exists(), new DateTimeException(format("File %s does not exist in %s.", file, tzDatabaseDir)));
          enforce(file.isFile, new DateTimeException(format("%s is not a file.", file)));
- 
+
          auto tzFile = File(file);
 diff --git a/std/path.d b/std/path.d
 index 254d8f0..b0fc04d 100644
@@ -56,13 +56,13 @@ index b85d1c9..7fbf346 100644
 --- a/std/socket.d
 +++ b/std/socket.d
 @@ -859,6 +862,8 @@ class InternetHost
- 
+
  unittest
  {
 +    pragma(msg, "test disabled on GNU Guix");
 +    /*
      InternetHost ih = new InternetHost;
- 
+
      ih.getHostByAddr(0x7F_00_00_01);
 @@ -889,6 +894,7 @@ unittest
          //      writefln("aliases[%d] = %s", i, s);
@@ -70,5 +70,3 @@ index b85d1c9..7fbf346 100644
      });
 +    */
  }
- 
- 
diff --git a/gnu/packages/patches/optipng-CVE-2017-1000229.patch b/gnu/packages/patches/optipng-CVE-2017-1000229.patch
deleted file mode 100644
index 2cb3b2f21c..0000000000
--- a/gnu/packages/patches/optipng-CVE-2017-1000229.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Fix CVE-2017-1000229:
-
-https://security-tracker.debian.org/tracker/CVE-2017-1000229
-https://people.canonical.com/~ubuntu-security/cve/2017/CVE-2017-1000229.html
-https://nvd.nist.gov/vuln/detail/CVE-2017-1000229
-
-Patch copied from upstream bug tracker:
-https://sourceforge.net/p/optipng/bugs/65/
-
-diff --git a/src/minitiff/tiffread.c b/src/minitiff/tiffread.c
-index b4910ec..5f9b376 100644
---- a/src/minitiff/tiffread.c
-+++ b/src/minitiff/tiffread.c
-@@ -350,6 +350,8 @@ minitiff_read_info(struct minitiff_info *tiff_ptr, FILE *fp)
-         count = tiff_ptr->strip_offsets_count;
-         if (count == 0 || count > tiff_ptr->height)
-             goto err_invalid;
-+        if (count > (size_t)-1 / sizeof(long))
-+            goto err_memory;
-         tiff_ptr->strip_offsets = (long *)malloc(count * sizeof(long));
-         if (tiff_ptr->strip_offsets == NULL)
-             goto err_memory;
diff --git a/gnu/packages/patches/password-store-gnupg-compat.patch b/gnu/packages/patches/password-store-gnupg-compat.patch
new file mode 100644
index 0000000000..75c6362021
--- /dev/null
+++ b/gnu/packages/patches/password-store-gnupg-compat.patch
@@ -0,0 +1,28 @@
+Copied from upstream mailing list:
+https://lists.zx2c4.com/pipermail/password-store/2018-February/003216.html.
+
+From 9b0c86159d754cc88dd3642564eed527153dfb7f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Cl=C3=A9ment=20Lassieur?= <clement@lassieur.org>
+Date: Sat, 24 Feb 2018 12:05:46 +0100
+Subject: [PATCH] tests: fix compatibility with GnuPG 2.2.5
+
+---
+ tests/t0300-reencryption.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/t0300-reencryption.sh b/tests/t0300-reencryption.sh
+index 6d5811d..6d15364 100755
+--- a/tests/t0300-reencryption.sh
++++ b/tests/t0300-reencryption.sh
+@@ -10,7 +10,7 @@ canonicalize_gpg_keys() {
+ 	$GPG --list-keys --with-colons "$@" | sed -n 's/sub:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[a-zA-Z]*e[a-zA-Z]*:.*/\1/p' | LC_ALL=C sort -u
+ }
+ gpg_keys_from_encrypted_file() {
+-	$GPG -v --no-secmem-warning --no-permission-warning --decrypt --list-only --keyid-format long "$1" 2>&1 | cut -d ' ' -f 5 | LC_ALL=C sort -u
++	$GPG -v --no-secmem-warning --no-permission-warning --decrypt --list-only --keyid-format long "$1" 2>&1 | grep "public key is" | cut -d ' ' -f 5 | LC_ALL=C sort -u
+ }
+ gpg_keys_from_group() {
+ 	local output="$($GPG --list-config --with-colons | sed -n "s/^cfg:group:$1:\\(.*\\)/\\1/p" | head -n 1)"
+-- 
+2.16.2
+
diff --git a/gnu/packages/patches/qemu-CVE-2017-15038.patch b/gnu/packages/patches/qemu-CVE-2017-15038.patch
deleted file mode 100644
index 4791a186bf..0000000000
--- a/gnu/packages/patches/qemu-CVE-2017-15038.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Fix CVE-2017-15038:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15038
-
-Patch copied from upstream source repository:
-
-https://git.qemu.org/?p=qemu.git;a=commitdiff;h=7bd92756303f2158a68d5166264dc30139b813b6
-
-From 7bd92756303f2158a68d5166264dc30139b813b6 Mon Sep 17 00:00:00 2001
-From: Prasad J Pandit <pjp@fedoraproject.org>
-Date: Mon, 16 Oct 2017 14:21:59 +0200
-Subject: [PATCH] 9pfs: use g_malloc0 to allocate space for xattr
-
-9p back-end first queries the size of an extended attribute,
-allocates space for it via g_malloc() and then retrieves its
-value into allocated buffer. Race between querying attribute
-size and retrieving its could lead to memory bytes disclosure.
-Use g_malloc0() to avoid it.
-
-Reported-by: Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
-Signed-off-by: Prasad J Pandit <pjp@fedoraproject.org>
-Signed-off-by: Greg Kurz <groug@kaod.org>
----
- hw/9pfs/9p.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
-index 23ac7bb532..f8bbac251d 100644
---- a/hw/9pfs/9p.c
-+++ b/hw/9pfs/9p.c
-@@ -3234,7 +3234,7 @@ static void coroutine_fn v9fs_xattrwalk(void *opaque)
-         xattr_fidp->fid_type = P9_FID_XATTR;
-         xattr_fidp->fs.xattr.xattrwalk_fid = true;
-         if (size) {
--            xattr_fidp->fs.xattr.value = g_malloc(size);
-+            xattr_fidp->fs.xattr.value = g_malloc0(size);
-             err = v9fs_co_llistxattr(pdu, &xattr_fidp->path,
-                                      xattr_fidp->fs.xattr.value,
-                                      xattr_fidp->fs.xattr.len);
-@@ -3267,7 +3267,7 @@ static void coroutine_fn v9fs_xattrwalk(void *opaque)
-         xattr_fidp->fid_type = P9_FID_XATTR;
-         xattr_fidp->fs.xattr.xattrwalk_fid = true;
-         if (size) {
--            xattr_fidp->fs.xattr.value = g_malloc(size);
-+            xattr_fidp->fs.xattr.value = g_malloc0(size);
-             err = v9fs_co_lgetxattr(pdu, &xattr_fidp->path,
-                                     &name, xattr_fidp->fs.xattr.value,
-                                     xattr_fidp->fs.xattr.len);
--- 
-2.15.0
-
diff --git a/gnu/packages/patches/qemu-CVE-2017-15289.patch b/gnu/packages/patches/qemu-CVE-2017-15289.patch
deleted file mode 100644
index d4b536a405..0000000000
--- a/gnu/packages/patches/qemu-CVE-2017-15289.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Fix CVE-2017-15289:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15289
-
-Patch copied from upstream source repository:
-
-https://git.qemu.org/?p=qemu.git;a=commitdiff;h=eb38e1bc3740725ca29a535351de94107ec58d51 
-
-From eb38e1bc3740725ca29a535351de94107ec58d51 Mon Sep 17 00:00:00 2001
-From: Gerd Hoffmann <kraxel@redhat.com>
-Date: Wed, 11 Oct 2017 10:43:14 +0200
-Subject: [PATCH] cirrus: fix oob access in mode4and5 write functions
-
-Move dst calculation into the loop, so we apply the mask on each
-interation and will not overflow vga memory.
-
-Cc: Prasad J Pandit <pjp@fedoraproject.org>
-Reported-by: Niu Guoxiang <niuguoxiang@huawei.com>
-Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-Message-id: 20171011084314.21752-1-kraxel@redhat.com
----
- hw/display/cirrus_vga.c | 6 ++----
- 1 file changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c
-index b4d579857a..bc32bf1e39 100644
---- a/hw/display/cirrus_vga.c
-+++ b/hw/display/cirrus_vga.c
-@@ -2038,15 +2038,14 @@ static void cirrus_mem_writeb_mode4and5_8bpp(CirrusVGAState * s,
-     unsigned val = mem_value;
-     uint8_t *dst;
- 
--    dst = s->vga.vram_ptr + (offset &= s->cirrus_addr_mask);
-     for (x = 0; x < 8; x++) {
-+        dst = s->vga.vram_ptr + ((offset + x) & s->cirrus_addr_mask);
- 	if (val & 0x80) {
- 	    *dst = s->cirrus_shadow_gr1;
- 	} else if (mode == 5) {
- 	    *dst = s->cirrus_shadow_gr0;
- 	}
- 	val <<= 1;
--	dst++;
-     }
-     memory_region_set_dirty(&s->vga.vram, offset, 8);
- }
-@@ -2060,8 +2059,8 @@ static void cirrus_mem_writeb_mode4and5_16bpp(CirrusVGAState * s,
-     unsigned val = mem_value;
-     uint8_t *dst;
- 
--    dst = s->vga.vram_ptr + (offset &= s->cirrus_addr_mask);
-     for (x = 0; x < 8; x++) {
-+        dst = s->vga.vram_ptr + ((offset + 2 * x) & s->cirrus_addr_mask & ~1);
- 	if (val & 0x80) {
- 	    *dst = s->cirrus_shadow_gr1;
- 	    *(dst + 1) = s->vga.gr[0x11];
-@@ -2070,7 +2069,6 @@ static void cirrus_mem_writeb_mode4and5_16bpp(CirrusVGAState * s,
- 	    *(dst + 1) = s->vga.gr[0x10];
- 	}
- 	val <<= 1;
--	dst += 2;
-     }
-     memory_region_set_dirty(&s->vga.vram, offset, 16);
- }
--- 
-2.15.0
-
diff --git a/gnu/packages/patches/wavpack-CVE-2018-7253.patch b/gnu/packages/patches/wavpack-CVE-2018-7253.patch
new file mode 100644
index 0000000000..651755afd0
--- /dev/null
+++ b/gnu/packages/patches/wavpack-CVE-2018-7253.patch
@@ -0,0 +1,29 @@
+Fix CVE-2018-7253:
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7253
+
+Copied from upstream:
+https://github.com/dbry/WavPack/commit/36a24c7881427d2e1e4dc1cef58f19eee0d13aec
+
+diff --git a/cli/dsdiff.c b/cli/dsdiff.c
+index 410dc1c..c016df9 100644
+--- a/cli/dsdiff.c
++++ b/cli/dsdiff.c
+@@ -153,7 +153,17 @@ int ParseDsdiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpa
+                 error_line ("dsdiff file version = 0x%08x", version);
+         }
+         else if (!strncmp (dff_chunk_header.ckID, "PROP", 4)) {
+-            char *prop_chunk = malloc ((size_t) dff_chunk_header.ckDataSize);
++            char *prop_chunk;
++
++            if (dff_chunk_header.ckDataSize < 4 || dff_chunk_header.ckDataSize > 1024) {
++                error_line ("%s is not a valid .DFF file!", infilename);
++                return WAVPACK_SOFT_ERROR;
++            }
++
++            if (debug_logging_mode)
++                error_line ("got PROP chunk of %d bytes total", (int) dff_chunk_header.ckDataSize);
++
++            prop_chunk = malloc ((size_t) dff_chunk_header.ckDataSize);
+ 
+             if (!DoReadFile (infile, prop_chunk, (uint32_t) dff_chunk_header.ckDataSize, &bcount) ||
+                 bcount != dff_chunk_header.ckDataSize) {
diff --git a/gnu/packages/patches/wavpack-CVE-2018-7254.patch b/gnu/packages/patches/wavpack-CVE-2018-7254.patch
new file mode 100644
index 0000000000..61db296ec8
--- /dev/null
+++ b/gnu/packages/patches/wavpack-CVE-2018-7254.patch
@@ -0,0 +1,62 @@
+Fix CVE-2018-7254:
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7254
+
+Copied from upstream:
+https://github.com/dbry/WavPack/commit/8e3fe45a7bac31d9a3b558ae0079e2d92a04799e
+
+diff --git a/cli/caff.c b/cli/caff.c
+index ae57c4b..6248a71 100644
+--- a/cli/caff.c
++++ b/cli/caff.c
+@@ -89,8 +89,8 @@ typedef struct
+ 
+ #define CAFChannelDescriptionFormat "LLLLL"
+ 
+-static const char TMH_full [] = { 1,2,3,13,9,10,5,6,12,14,15,16,17,9,4,18,7,8,19,20,21 };
+-static const char TMH_std [] = { 1,2,3,11,8,9,5,6,10,12,13,14,15,7,4,16 };
++static const char TMH_full [] = { 1,2,3,13,9,10,5,6,12,14,15,16,17,9,4,18,7,8,19,20,21,0 };
++static const char TMH_std [] = { 1,2,3,11,8,9,5,6,10,12,13,14,15,7,4,16,0 };
+ 
+ static struct {
+     uint32_t mChannelLayoutTag;     // Core Audio layout, 100 - 146 in high word, num channels in low word
+@@ -274,10 +274,19 @@ int ParseCaffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpack
+             }
+         }
+         else if (!strncmp (caf_chunk_header.mChunkType, "chan", 4)) {
+-            CAFChannelLayout *caf_channel_layout = malloc ((size_t) caf_chunk_header.mChunkSize);
++            CAFChannelLayout *caf_channel_layout;
+ 
+-            if (caf_chunk_header.mChunkSize < sizeof (CAFChannelLayout) ||
+-                !DoReadFile (infile, caf_channel_layout, (uint32_t) caf_chunk_header.mChunkSize, &bcount) ||
++            if (caf_chunk_header.mChunkSize < sizeof (CAFChannelLayout) || caf_chunk_header.mChunkSize > 1024) {
++                error_line ("this .CAF file has an invalid 'chan' chunk!");
++                return WAVPACK_SOFT_ERROR;
++            }
++
++            if (debug_logging_mode)
++                error_line ("'chan' chunk is %d bytes", (int) caf_chunk_header.mChunkSize);
++
++            caf_channel_layout = malloc ((size_t) caf_chunk_header.mChunkSize);
++
++            if (!DoReadFile (infile, caf_channel_layout, (uint32_t) caf_chunk_header.mChunkSize, &bcount) ||
+                 bcount != caf_chunk_header.mChunkSize) {
+                     error_line ("%s is not a valid .CAF file!", infilename);
+                     free (caf_channel_layout);
+@@ -495,8 +504,15 @@ int ParseCaffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpack
+         }
+         else {          // just copy unknown chunks to output file
+ 
+-            int bytes_to_copy = (uint32_t) caf_chunk_header.mChunkSize;
+-            char *buff = malloc (bytes_to_copy);
++            uint32_t bytes_to_copy = (uint32_t) caf_chunk_header.mChunkSize;
++            char *buff;
++
++            if (caf_chunk_header.mChunkSize < 0 || caf_chunk_header.mChunkSize > 1048576) {
++                error_line ("%s is not a valid .CAF file!", infilename);
++                return WAVPACK_SOFT_ERROR;
++            }
++
++            buff = malloc (bytes_to_copy);
+ 
+             if (debug_logging_mode)
+                 error_line ("extra unknown chunk \"%c%c%c%c\" of %d bytes",
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index c04344a70b..110ba45d3d 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -409,6 +410,28 @@ exception based code.  It is built with Test::Builder and plays happily with
 Test::More and friends.")
     (license perl-license)))
 
+(define-public perl-test-failwarnings
+  (package
+    (name "perl-test-failwarnings")
+    (version "0.008")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DA/DAGOLDEN/Test-FailWarnings-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0vx9chcp5x8m0chq574p9fnfckh5gl94j7904rh9v17n568fyd6s"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-capture-tiny" ,perl-capture-tiny)))
+    (home-page "http://search.cpan.org/dist/Test-FailWarnings/")
+    (synopsis "Add test failures if warnings are caught")
+    (description
+     "Test::FailWarnings adds test failures if warnings are caught.")
+    (license asl2.0)))
+
 (define-public perl-test-fatal
   (package
     (name "perl-test-fatal")
@@ -456,6 +479,28 @@ testing exception-throwing code with about the same amount of typing.")
 for testing.")
     (license perl-license)))
 
+(define-public perl-test-filename
+  (package
+    (name "perl-test-filename")
+    (version "0.03")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DA/DAGOLDEN/Test-Filename-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1gpw4mjw68gnby8s4cifvbz6g2923xsc189jkw9d27i8qv20qiba"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-path-tiny" ,perl-path-tiny)))
+    (home-page "http://search.cpan.org/dist/Test-Filename/")
+    (synopsis "Portable filename comparison")
+    (description "Test::Filename provides functions to convert all path
+separators automatically.")
+    (license asl2.0)))
+
 (define-public perl-test-files
   (package
     (name "perl-test-files")
@@ -928,6 +973,34 @@ cannot connect to the specified hosts and ports, the exception is caught and
 reported, and the tests skipped.")
     (license perl-license)))
 
+(define-public perl-test-roo
+  (package
+    (name "perl-test-roo")
+    (version "1.004")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DA/DAGOLDEN/Test-Roo-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1mnym49j1lj7gzylma5b6nr4vp75rmgz2v71904v01xmxhy9l4i1"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-capture-tiny" ,perl-capture-tiny)))
+    (propagated-inputs
+     `(("perl-indirect" ,perl-indirect)
+       ("perl-moo" ,perl-moo)
+       ("perl-moox-types-mooselike" ,perl-moox-types-mooselike)
+       ("perl-multidimensional" ,perl-multidimensional)
+       ("perl-strictures" ,perl-strictures)
+       ("perl-sub-install" ,perl-sub-install)))
+    (home-page "http://search.cpan.org/dist/Test-Roo/")
+    (synopsis "Composable, reusable tests with roles and Moo")
+    (description "Test::Roo provides composable, reusable tests with roles.")
+    (license asl2.0)))
+
 (define-public perl-test-script
   (package
     (name "perl-test-script")
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 5a2fc6a6bb..cef42847c6 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +36,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages perl)
+  #:use-module (srfi srfi-1)
   #:use-module (guix licenses)
   #:use-module (gnu packages)
   #:use-module (guix packages)
@@ -343,6 +345,31 @@ autovivification for some constructs and optionally throws a warning or an
 error when it would have happened.")
     (license (package-license perl))))
 
+(define-public perl-bareword-filehandles
+  (package
+    (name "perl-bareword-filehandles")
+    (version "0.005")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/I/IL/ILMARI/bareword-filehandles-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0fdirls2pg7d6ymvlzzz59q3dy6hgh08k0qpr2mw51w127s8rav6"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
+       ("perl-extutils-depends" ,perl-extutils-depends)))
+    (propagated-inputs
+     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
+       ("perl-lexical-sealrequirehints" ,perl-lexical-sealrequirehints)))
+    (home-page "http://search.cpan.org/dist/bareword-filehandles/")
+    (synopsis "Disables bareword filehandles")
+    (description "This module disables bareword filehandles.")
+    (license (package-license perl))))
+
 (define-public perl-base
   (package
     (name "perl-base")
@@ -409,6 +436,27 @@ all known commands are checked.")
 compiling the surrounding scope.")
     (license (package-license perl))))
 
+(define-public perl-b-hooks-op-check
+  (package
+    (name "perl-b-hooks-op-check")
+    (version "0.22")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/E/ET/ETHER/B-Hooks-OP-Check-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1kfdv25gn6yik8jrwik4ajp99gi44s6idcvyyrzhiycyynzd3df7"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-extutils-depends" ,perl-extutils-depends)))
+    (home-page "http://search.cpan.org/dist/B-Hooks-OP-Check/")
+    (synopsis "Wrap OP check callbacks")
+    (description "This module allows you to wrap OP check callbacks.")
+    (license (package-license perl))))
+
 (define-public perl-b-keywords
   (package
     (name "perl-b-keywords")
@@ -1812,6 +1860,32 @@ an \"unless\" regular expression.  If the text in question matches the
 like split on newlines unless newlines are embedded in quotes.")
     (license (package-license perl))))
 
+(define-public perl-data-section
+  (package
+    (name "perl-data-section")
+    (version "0.200007")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/R/RJ/RJBS/Data-Section-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1pmlxca0a8sv2jjwvhwgqavq6iwys6kf457lby4anjp3f1dpx4yd"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-failwarnings" ,perl-test-failwarnings)))
+    (propagated-inputs
+     `(("perl-mro-compat" ,perl-mro-compat)
+       ("perl-sub-exporter" ,perl-sub-exporter)))
+    (home-page "http://search.cpan.org/dist/Data-Section/")
+    (synopsis "Read multiple hunks of data out of your DATA section")
+    (description "This package provides a Perl library to read multiple hunks
+of data out of your DATA section.")
+    (license (package-license perl))))
+
 (define-public perl-data-stag
   (package
     (name "perl-data-stag")
@@ -3003,6 +3077,30 @@ and alternative installers with the `installler` option.  But it's written in
 only about 40% as many lines of code and with zero non-core dependencies.")
     (license (package-license perl))))
 
+(define-public perl-extutils-depends
+  (package
+    (name "perl-extutils-depends")
+    (version "0.405")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/X/XA/XAOC/ExtUtils-Depends-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0b4ab9qmcihsfs2ajhn5qzg7nhazr68v3r0zvb7076smswd41mla"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-number-delta"
+        ,perl-test-number-delta)))
+    (home-page "http://search.cpan.org/dist/ExtUtils-Depends/")
+    (synopsis "Easily build XS extensions that depend on XS extensions")
+    (description "ExtUtils::Depends builds XS extensions that depend on XS
+extensions")
+    (license (package-license perl))))
+
 (define-public perl-extutils-installpaths
   (package
     (name "perl-extutils-installpaths")
@@ -3857,6 +3955,26 @@ dependencies for CPAN distributions.  These dependencies get bundled into the
 inc directory within a distribution and are used by Makefile.PL or Build.PL.")
     (license asl2.0)))
 
+(define-public perl-indirect
+  (package
+    (name "perl-indirect")
+    (version "0.38")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/V/VP/VPIT/indirect-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "13k5a8p903m8x3pcv9qqkzvnb8gpgq36cr3dvn3lk1ngsi9w5ydy"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/indirect/")
+    (synopsis "Lexically warn about using the indirect method call syntax")
+    (description
+     "Indirect warns about using the indirect method call syntax.")
+    (license (package-license perl))))
+
 (define-public perl-io-captureoutput
   (package
     (name "perl-io-captureoutput")
@@ -4175,6 +4293,29 @@ either uses the first module it finds or throws an error.")
 versa.")
     (license (package-license perl))))
 
+(define-public perl-lexical-sealrequirehints
+  (package
+    (name "perl-lexical-sealrequirehints")
+    (version "0.011")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/Z/ZE/ZEFRAM/Lexical-SealRequireHints-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0fh1arpr0hsj7skbn97yfvbk22pfcrpcvcfs15p5ss7g338qx4cy"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
+    (home-page "http://search.cpan.org/dist/Lexical-SealRequireHints/")
+    (synopsis "Prevent leakage of lexical hints")
+    (description
+     "Lexical::SealRequireHints prevents leakage of lexical hints")
+    (license (package-license perl))))
+
 (define-public perl-log-any
   (package
     (name "perl-log-any")
@@ -4980,6 +5121,37 @@ that avoids the details of Perl's object system.  Moo contains a subset of
 Moose and is optimised for rapid startup.")
     (license (package-license perl))))
 
+;; Some packages don't yet work with this newer version of ‘Moo’.
+(define-public perl-moo-2
+  (package
+    (inherit perl-moo)
+    (name "perl-moo-2")
+    (version "2.003004")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/H/HA/HAARG/"
+                           "Moo-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1qciprcgb4661g2g4ks0fxkx5gbjvn7h9yfg0nzflqz9z0jvdfzq"))))
+    (propagated-inputs
+     `(("perl-role-tiny" ,perl-role-tiny-2)
+       ("perl-sub-name" ,perl-sub-name)
+       ("perl-sub-quote" ,perl-sub-quote)
+       ("perl-strictures" ,perl-strictures-2)
+       ,@(alist-delete "perl-strictures"
+                       (alist-delete "perl-role-tiny"
+                                     (package-propagated-inputs perl-moo)))))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-perl-search-path
+           (lambda _
+             ;; Use perl-strictures for testing.
+             (setenv "MOO_FATAL_WARNINGS" "=1")
+             #t)))))))
+
 (define-public perl-moose
   (package
     (name "perl-moose")
@@ -5853,6 +6025,32 @@ Certificate Authority certificates in a form that can be consumed by modules
 and libraries based on OpenSSL.")
     (license mpl2.0)))
 
+(define-public perl-multidimensional
+  (package
+    (name "perl-multidimensional")
+    (version "0.013")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/I/IL/ILMARI/multidimensional-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "02p5zv68i39hnkmzzxsk1fi7xy56pfcsslrd7yqwzhq74czcw81x"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
+       ("perl-extutils-depends" ,perl-extutils-depends)))
+    (propagated-inputs
+     `(("perl-b-hooks-op-check" ,perl-b-hooks-op-check)
+       ("perl-lexical-sealrequirehints" ,perl-lexical-sealrequirehints)))
+    (home-page "http://search.cpan.org/dist/multidimensional/")
+    (synopsis "Disable multidimensional array emulation")
+    (description
+     "Multidimensional disables multidimensional array emulation.")
+    (license (package-license perl))))
+
 (define-public perl-mro-compat
   (package
     (name "perl-mro-compat")
@@ -6025,6 +6223,26 @@ collector daemon in use at Etsy.com.")
 subroutine, which you can call with a value to be tested against.")
     (license (package-license perl))))
 
+(define-public perl-number-range
+  (package
+    (name "perl-number-range")
+    (version "0.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/L/LA/LARRYSH/Number-Range-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0999xvs3w2xprs14q4shqndjf2m6mzvhzdljgr61ddjaqhd84gj3"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Number-Range/")
+    (synopsis "Perl extension defining ranges of numbers")
+    (description "Number::Range is an object-oriented interface to test if a
+number exists in a given range, and to be able to manipulate the range.")
+    (license (package-license perl))))
+
 (define-public perl-object-signature
   (package
     (name "perl-object-signature")
@@ -6626,6 +6844,20 @@ and @code{deserialize_regexp}.")
     (description "Role::Tiny is a minimalist role composition tool.")
     (license (package-license perl))))
 
+;; Some packages don't yet work with this newer version of ‘Role::Tiny’.
+(define-public perl-role-tiny-2
+  (package
+    (inherit perl-role-tiny)
+    (version "2.000006")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/H/HA/HAARG/"
+                           "Role-Tiny-" version ".tar.gz"))
+       (sha256
+        (base32
+         "10p3sc639c0nj56bb77a2wg8samyyl8sqpliv3n8c0jaj2642wyc"))))))
+
 (define-public perl-safe-isa
   (package
     (name "perl-safe-isa")
@@ -6865,6 +7097,20 @@ on the length of the size.")
 run from within a source-controlled directory.")
     (license (package-license perl))))
 
+;; Some packages don't yet work with this newer version of ‘strictures’.
+(define-public perl-strictures-2
+  (package
+    (inherit perl-strictures)
+    (version "2.000003")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/H/HA/HAARG/"
+                           "strictures-" version ".tar.gz"))
+       (sha256
+        (base32
+         "08mgvf1d2651gsg3jgjfs13878ndqa4ji8vfsda9f7jjd84ymy17"))))))
+
 (define-public perl-string-camelcase
   (package
     (name "perl-string-camelcase")
@@ -6894,6 +7140,28 @@ run from within a source-controlled directory.")
 CamelCase and back again.")
     (license (package-license perl))))
 
+(define-public perl-string-escape
+  (package
+    (name "perl-string-escape")
+    (version "2010.002")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/E/EV/EVO/String-Escape-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "12ls7f7847i4qcikkp3skwraqvjphjiv2zxfhl5d49326f5myr7x"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/String-Escape/")
+    (synopsis "Backslash escapes, quoted phrase, word elision, etc.")
+    (description "This module provides a flexible calling interface to some
+frequently-performed string conversion functions, including applying and
+expanding standard C/Unix-style backslash escapes like \n and \t, wrapping and
+removing double-quotes, and truncating to fit within a desired length.")
+    (license (package-license perl))))
+
 (define-public perl-string-rewriteprefix
   (package
     (name "perl-string-rewriteprefix")
@@ -7069,6 +7337,30 @@ specification is omitted in the name, then the current package is used.  The
 return value is the sub.")
     (license (package-license perl))))
 
+(define-public perl-sub-quote
+  (package
+    (name "perl-sub-quote")
+    (version "2.004000")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/H/HA/HAARG/Sub-Quote-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1zrh3apxsw1ks25zkh9dcn00656rsvq4mimqz3w8p37s2c1m4qaq"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-fatal" ,perl-test-fatal)))
+    (propagated-inputs
+     `(("perl-sub-name" ,perl-sub-name)))
+    (home-page "http://search.cpan.org/dist/Sub-Quote/")
+    (synopsis "Efficient generation of subroutines via string eval")
+    (description "Sub::Quote provides an efficient generation of subroutines
+via string eval.")
+    (license (package-license perl))))
+
 (define-public perl-sub-uplevel
   (package
     (name "perl-sub-uplevel")
@@ -8331,6 +8623,27 @@ UNIVERSAL::can() as a function, which it is not.")
 UNIVERSAL::isa as a function.")
     (license (package-license perl))))
 
+(define-public perl-universal-require
+  (package
+    (name "perl-universal-require")
+    (version "0.18")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/N/NE/NEILB/UNIVERSAL-require-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1v9qdg80ng6dzyzs7cn8sb6mn8ym042i32lcnpd478b7g6l3d9xj"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/UNIVERSAL-require/")
+    (synopsis "Require modules from a variable")
+    (description "This module lets you require other modules where the module
+name is in a variable, something you can't do with the @code{require}
+built-in.")
+    (license (package-license perl))))
+
 (define-public perl-variable-magic
   (package
     (name "perl-variable-magic")
@@ -8817,3 +9130,101 @@ till 5pm\" and \"on the second Tuesday of the month\" and \"between 4pm and
 4:15pm\" and \"in the first half of each minute\" and \"in January of
 1998\".")
     (license perl-license)))
+
+(define-public perl-path-iterator-rule
+  (package
+    (name "perl-path-iterator-rule")
+    (version "1.012")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DA/DAGOLDEN/Path-Iterator-Rule-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1z76avwvwgv4bw28kzx79mmb4449s5l345sn0wljq3dbf4wqigd1"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-file-pushd" ,perl-file-pushd)
+       ("perl-path-tiny" ,perl-path-tiny)
+       ("perl-test-deep" ,perl-test-deep)
+       ("perl-test-filename" ,perl-test-filename)))
+    (propagated-inputs
+     `(("perl-number-compare" ,perl-number-compare)
+       ("perl-text-glob" ,perl-text-glob)
+       ("perl-try-tiny" ,perl-try-tiny)))
+    (home-page "http://search.cpan.org/dist/Path-Iterator-Rule/")
+    (synopsis "Iterative, recursive file finder")
+    (description "Path::Iterator::Rule iterates over files and directories to
+identify ones matching a user-defined set of rules.  The API is based heavily
+on File::Find::Rule, but with more explicit distinction between matching rules
+and options that influence how directories are searched.  A
+Path::Iterator::Rule object is a collection of rules (match criteria) with
+methods to add additional criteria.  Options that control directory traversal
+are given as arguments to the method that generates an iterator.
+
+A summary of features for comparison to other file finding modules:
+
+@itemize
+@item provides many helper methods for specifying rules
+@item offers (lazy) iterator and flattened list interfaces
+@item custom rules implemented with callbacks
+@item breadth-first (default) or pre- or post-order depth-first searching
+@item follows symlinks (by default, but can be disabled)
+@item directories visited only once (no infinite loop; can be disabled)
+@item doesn't chdir during operation
+@item provides an API for extensions
+@end itemize
+
+As a convenience, the PIR module is an empty subclass of this one that is less
+arduous to type for one-liners.")
+    (license asl2.0)))
+
+(define-public perl-pod-constants
+  (package
+    (name "perl-pod-constants")
+    (version "0.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/M/MG/MGV/Pod-Constants-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1njgr2zly9nrwvfrjhgk9dqq48as1pmbb2rs4bh3irvla75v7azg"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Pod-Constants/")
+    (synopsis "Include constants from POD")
+    (description "This module allows you to specify those constants that
+should be documented in your POD, and pull them out a run time in a fairly
+arbitrary fashion.
+
+Pod::Constants uses Pod::Parser to do the parsing of the source file.  It has
+to open the source file it is called from, and does so directly either by
+lookup in %INC or by assuming it is $0 if the caller is @code{main}
+(or it can't find %INC{caller()}).")
+    (license artistic2.0)))
+
+(define-public perl-regexp-pattern
+  (package
+    (name "perl-regexp-pattern")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/P/PE/PERLANCAR/Regexp-Pattern-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0rwpl6dxd1yl2ng3d4jdy68jz3mggmdl35rphrw1x619sm1aa876"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-exception" ,perl-test-exception)))
+    (home-page "http://search.cpan.org/dist/Regexp-Pattern/")
+    (synopsis "Collection of regexp patterns")
+    (description "Regexp::Pattern is a convention for organizing reusable
+regexp patterns in modules.")
+    (license (package-license perl))))
diff --git a/gnu/packages/pumpio.scm b/gnu/packages/pumpio.scm
index e89418b6b1..b8741520f0 100644
--- a/gnu/packages/pumpio.scm
+++ b/gnu/packages/pumpio.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,7 +31,7 @@
 (define-public pumpa
   (package
     (name "pumpa")
-    (version "0.9.2")
+    (version "0.9.3")
     (source (origin
               (method git-fetch) ; no source tarballs
               (uri (git-reference
@@ -38,7 +39,7 @@
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "09www29s4ldvd6apr73w7r4nmq93rcl2d182fylwgfcnncbvpy8s"))
+                "14072vis539zjgryjr5a77j2cprxii5znyg3p01qbb11lijk9nj7"))
               (file-name (string-append name "-" version "-checkout"))))
     (build-system gnu-build-system)
     (arguments
@@ -57,7 +58,7 @@
              ;; Run qmake with proper installation prefix.
              (let ((prefix (string-append "PREFIX="
                                           (assoc-ref outputs "out"))))
-               (zero? (system* "qmake" prefix)))
+               (invoke "qmake" prefix))
              #t)))))
     (inputs
      `(("aspell" ,aspell)
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 3e410b0a51..d2c2c0b266 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -12756,14 +12756,14 @@ and other tools.")
 (define-public bpython
   (package
     (name "bpython")
-    (version "0.17")
+    (version "0.17.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bpython" version))
        (sha256
         (base32
-         "1mbah208jhd7bsfaa17fwpi55f7fvif0ghjwgrjmpmx8w1vqab9l"))))
+         "0bxhxi5zxdkrf8b4gwn0d363kdz3qnypjwhm1aydki53ph8ca1w9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 396006b27a..5ea7858a89 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -303,14 +303,14 @@ destructors.  It is the core memory allocator used in Samba.")
 (define-public tevent
   (package
     (name "tevent")
-    (version "0.9.35")
+    (version "0.9.36")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/tevent/tevent-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1s8nbkmqz8dzdlsd6qynhvyl05pw93r151f3i2kgjfpbck9ak8r5"))))
+                "0k1v4vnlzpf7h3p4khaw8a7damrc68g136bf2xzys08nzpinnaxx"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index d5286b312e..8947509cb1 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -90,37 +90,37 @@
        (modify-phases %standard-phases
          (replace 'unpack
            (lambda* (#:key inputs #:allow-other-keys)
-             (and (zero? (system* "tar" "xzvf"
-                                  (assoc-ref inputs "source")))
-                  (chdir ,(mit-scheme-source-directory (%current-system)
-                                                       version))
-                  (begin
-                    ;; Delete these dangling symlinks since they break
-                    ;; `patch-shebangs'.
-                    (for-each delete-file
-                              (append '("src/lib/shim-config.scm")
-                                      (find-files "src/lib/lib" "\\.so$")
-                                      (find-files "src/lib" "^liarc-")
-                                      (find-files "src/compiler" "^make\\.")))
-                    (chdir "src")
-                    #t))))
+             (invoke "tar" "xzvf"
+                     (assoc-ref inputs "source"))
+             (chdir ,(mit-scheme-source-directory (%current-system)
+                                                  version))
+             ;; Delete these dangling symlinks since they break
+             ;; `patch-shebangs'.
+             (for-each delete-file
+                       (append '("src/lib/shim-config.scm")
+                               (find-files "src/lib/lib" "\\.so$")
+                               (find-files "src/lib" "^liarc-")
+                               (find-files "src/compiler" "^make\\.")))
+             (chdir "src")
+             #t))
          (replace 'build
            (lambda* (#:key system outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (if (or (string-prefix? "x86_64" system)
                        (string-prefix? "i686" system))
-                   (zero? (system* "make" "compile-microcode"))
-                   (zero? (system* "./etc/make-liarc.sh"
-                                   (string-append "--prefix=" out)))))))
+                   (invoke "make" "compile-microcode")
+                   (invoke "./etc/make-liarc.sh"
+                           (string-append "--prefix=" out)))
+               #t)))
          (add-after 'configure 'configure-doc
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (with-directory-excursion "../doc"
                (let* ((out (assoc-ref outputs "out"))
                       (bash (assoc-ref inputs "bash"))
                       (bin/sh (string-append bash "/bin/sh")))
-                 (system* bin/sh "./configure"
-                          (string-append "--prefix=" out)
-                          (string-append "SHELL=" bin/sh))
+                 (invoke bin/sh "./configure"
+                         (string-append "--prefix=" out)
+                         (string-append "SHELL=" bin/sh))
                  (substitute* '("Makefile" "make-common")
                    (("/lib/mit-scheme/doc")
                     (string-append "/share/doc/" ,name "-" ,version)))
@@ -128,7 +128,8 @@
          (add-after 'build 'build-doc
            (lambda* _
              (with-directory-excursion "../doc"
-               (zero? (system* "make")))))
+               (invoke "make"))
+             #t))
          (add-after 'install 'install-doc
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -138,7 +139,7 @@
                      (string-append doc "/share/doc/" ,name "-" ,version)))
                (with-directory-excursion "../doc"
                  (for-each (lambda (target)
-                             (system* "make" target))
+                             (invoke "make" target))
                            '("install-config" "install-info-gz" "install-man"
                              "install-html" "install-pdf")))
                (mkdir-p new-doc/mit-scheme-dir)
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 7ce531bb6d..6ff83ce5a4 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -46,15 +46,15 @@
 (define-public ccid
   (package
     (name "ccid")
-    (version "1.4.28")
+    (version "1.4.29")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "https://alioth.debian.org/frs/download.php/file/4230/"
+                    "https://alioth.debian.org/frs/download.php/file/4238/"
                     "ccid-" version ".tar.bz2"))
               (sha256
                (base32
-                "1q5dz1l049m3hmr370adhrqicdkldrr3l98svi02p5cxbnn3cn47"))))
+                "0kdqmbma6sclsrbxy9w85h7cs0v11if4nc2r9v09613k8pl2lhx5"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--enable-usbdropdir=" %output
diff --git a/gnu/packages/skarnet.scm b/gnu/packages/skarnet.scm
index ce6fdc709d..a0b482a671 100644
--- a/gnu/packages/skarnet.scm
+++ b/gnu/packages/skarnet.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015 Claes Wallin <claes.wallin@greatsinodevelopment.com>
 ;;; Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
 ;;; Copyright © 2017 Z. Ren <zren@dlut.edu.cn>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,7 +29,7 @@
 (define-public skalibs
   (package
     (name "skalibs")
-    (version "2.3.10.0")
+    (version "2.6.3.1")
     (source
      (origin
       (method url-fetch)
@@ -36,11 +37,10 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "0i7af224kl1crxgml09wx0x6q8ab79vnyrllfwv2lnq585wi9mg4"))))
+        "108c4vslsfy57892ybbksscrjd4bx444hzzcq2g5wdg2sh0cl245"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags '("--enable-force-devr") ; do not analyze /dev/random
-       #:tests? #f ; no tests exist
+     '(#:tests? #f ; no tests exist
        #:phases (modify-phases %standard-phases
                   (add-after 'unpack 'reproducible
                     (lambda _
@@ -50,7 +50,7 @@
                         (("\\$\\(wildcard src/lib\\*/\\*.c\\)")
                          "$(sort $(wildcard src/lib*/*.c))"))
                       #t)))))
-    (home-page "http://skarnet.org/software/skalibs/")
+    (home-page "https://skarnet.org/software/skalibs/")
     (synopsis "Platform abstraction libraries for skarnet.org software")
     (description
      "This package provides lightweight C libraries isolating the developer
@@ -62,7 +62,7 @@ and file system operations.  It is used by all skarnet.org software.")
 (define-public execline
   (package
     (name "execline")
-    (version "2.1.5.0")
+    (version "2.3.0.4")
     (source
      (origin
       (method url-fetch)
@@ -70,7 +70,7 @@ and file system operations.  It is used by all skarnet.org software.")
                           version ".tar.gz"))
       (sha256
        (base32
-        "0hhirdmyh3sj9qagkis7addmmdvyic717wkb6ym3n63kvfk0adla"))))
+        "0jx60wjz3yj3r1wircbvd15in275pi7ggw69pbs9djhcyb48zfz4"))))
     (build-system gnu-build-system)
     (inputs `(("skalibs" ,skalibs)))
     (arguments
@@ -90,7 +90,7 @@ and file system operations.  It is used by all skarnet.org software.")
                       (wrap-program (string-append bin "/execlineb")
                         `("PATH" ":" prefix (,bin)))))))
        #:tests? #f)) ; No tests exist.
-    (home-page "http://skarnet.org/software/execline/")
+    (home-page "https://skarnet.org/software/execline/")
     (license isc)
     (synopsis "Non-interactive shell-like language with minimal overhead")
     (description
@@ -105,7 +105,7 @@ complexity.")))
 (define-public s6
   (package
    (name "s6")
-   (version "2.3.0.0")
+   (version "2.7.0.0")
    (source
     (origin
      (method url-fetch)
@@ -113,7 +113,7 @@ complexity.")))
                          version ".tar.gz"))
      (sha256
       (base32
-       "1rp8i228zxzbia1799pdav1kkzdk96fax9bcfyf2gilkdm3s1ja9"))))
+       "04vfviw00zvvb1mdpl78zdgzd7j491f1lahhqrkkq9vk5kwcn5v6"))))
    (build-system gnu-build-system)
    (inputs `(("skalibs" ,skalibs)
              ("execline" ,execline)))
@@ -129,7 +129,7 @@ complexity.")))
                                        (assoc-ref %build-inputs "skalibs")
                                        "/lib/skalibs/sysdeps"))
       #:tests? #f))
-   (home-page "http://skarnet.org/software/s6")
+   (home-page "https://skarnet.org/software/s6")
    (license isc)
    (synopsis "Small suite of programs for process supervision")
    (description
@@ -144,7 +144,7 @@ functionality with a very small amount of code.")))
 (define-public s6-dns
   (package
    (name "s6-dns")
-   (version "2.0.1.0")
+   (version "2.3.0.0")
    (source
     (origin
      (method url-fetch)
@@ -152,7 +152,7 @@ functionality with a very small amount of code.")))
                          version ".tar.gz"))
      (sha256
       (base32
-       "1ji47iy8czx4jmi763dxd6lgjbnp4vqqgcijh46ym65l0a97z04w"))))
+       "0h47ldxvh9cny91r0pjxq7zr5iqpqf1j50p3ip42f6bl90z5ha58"))))
     (build-system gnu-build-system)
     (inputs `(("skalibs" ,skalibs)))
     (arguments
@@ -164,7 +164,7 @@ functionality with a very small amount of code.")))
                                          (assoc-ref %build-inputs "skalibs")
                                          "/lib/skalibs/sysdeps"))
        #:tests? #f))
-    (home-page "http://skarnet.org/software/s6-dns")
+    (home-page "https://skarnet.org/software/s6-dns")
     (license isc)
     (synopsis "Suite of DNS client programs")
     (description
@@ -174,7 +174,7 @@ as an alternative to the BIND, djbdns or other DNS clients.")))
 (define-public s6-networking
   (package
    (name "s6-networking")
-   (version "2.1.1.0")
+   (version "2.3.0.2")
    (source
     (origin
      (method url-fetch)
@@ -182,7 +182,7 @@ as an alternative to the BIND, djbdns or other DNS clients.")))
                          version ".tar.gz"))
      (sha256
       (base32
-       "0r8gfv0l2k449nacjy919gqlgn25q7fjxaqra5r37k7kiikkgqfw"))))
+       "06j8fpldn187cmbjqp191hd65ka3ys19vj3jm3kcvkmvd9snh6fq"))))
     (build-system gnu-build-system)
     (inputs `(("skalibs" ,skalibs)
               ("execline" ,execline)
@@ -206,7 +206,7 @@ as an alternative to the BIND, djbdns or other DNS clients.")))
                                          (assoc-ref %build-inputs "skalibs")
                                          "/lib/skalibs/sysdeps"))
        #:tests? #f))
-    (home-page "http://skarnet.org/software/s6-networking")
+    (home-page "https://skarnet.org/software/s6-networking")
     (license isc)
     (synopsis "Suite of network utilities for Unix systems")
     (description
@@ -218,7 +218,7 @@ clock synchronization.")))
 (define-public s6-rc
   (package
    (name "s6-rc")
-   (version "0.0.3.0")
+   (version "0.4.0.0")
    (source
     (origin
      (method url-fetch)
@@ -226,7 +226,7 @@ clock synchronization.")))
                          version ".tar.gz"))
      (sha256
       (base32
-       "0bl94lbaphbpaaj4wbb86xqgp5bcgrf3m7p80mimw1qsjrvlxfay"))))
+       "1fkg9635cvrf6gw055y346a3n634dy2xiwbypawi68flfprfgf4n"))))
     (build-system gnu-build-system)
     (inputs `(("skalibs" ,skalibs)
               ("execline" ,execline)
@@ -246,7 +246,7 @@ clock synchronization.")))
                                          (assoc-ref %build-inputs "skalibs")
                                          "/lib/skalibs/sysdeps"))
        #:tests? #f))
-    (home-page "http://skarnet.org/software/s6-rc")
+    (home-page "https://skarnet.org/software/s6-rc")
     (license isc)
     (synopsis "Service manager for s6-based systems")
     (description
@@ -260,7 +260,7 @@ environment.")))
 (define-public s6-portable-utils
   (package
    (name "s6-portable-utils")
-   (version "2.0.6.0")
+   (version "2.2.1.1")
    (source
     (origin
      (method url-fetch)
@@ -269,7 +269,7 @@ environment.")))
            version ".tar.gz"))
      (sha256
       (base32
-       "0jwxj0ma4zd1h6i3i98nsp0miidr54phap7dqwf6c8vafq9psfr3"))))
+       "0ca5iiq3n6isj64jb81xpwjzjx1q8jg145nnnn91ra2qqk93kqka"))))
     (build-system gnu-build-system)
     (inputs `(("skalibs" ,skalibs)))
     (arguments
@@ -281,7 +281,7 @@ environment.")))
                                          (assoc-ref %build-inputs "skalibs")
                                          "/lib/skalibs/sysdeps"))
        #:tests? #f))
-    (home-page "http://skarnet.org/software/s6-portable-utils")
+    (home-page "https://skarnet.org/software/s6-portable-utils")
     (license isc)
     (synopsis "Tiny command-line Unix utilities")
     (description
@@ -290,10 +290,48 @@ performing well-known tasks such as @command{cut} and @command{grep}, but
 optimized for simplicity and small size.  They were designed for embedded
 systems and other constrained environments, but they work everywhere.")))
 
+(define-public s6-linux-init
+  (package
+   (name "s6-linux-init")
+   (version "0.3.1.1")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (string-append
+           "http://skarnet.org/software/s6-linux-init/s6-linux-init-"
+           version ".tar.gz"))
+     (sha256
+      (base32
+       "0yfxrjqlbb6kac4gcn78phxbwp5sj9jmc1vxpsrbql62mfjyiqly"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("skalibs" ,skalibs)))
+    (arguments
+     '(#:configure-flags
+       (list
+        (string-append "--with-lib="
+                       (assoc-ref %build-inputs "skalibs")
+                       "/lib/skalibs")
+        (string-append "--with-sysdeps="
+                       (assoc-ref %build-inputs "skalibs")
+                       "/lib/skalibs/sysdeps"))
+       #:tests? #f))
+    (home-page "https://skarnet.org/software/s6-linux-init")
+    (license isc)
+    (synopsis "Minimalistic tools to create an s6-based init system on Linux")
+    (description
+     " s6-linux-init is a set of minimalistic tools to create a s6-based init
+system, including an @command{/sbin/init} binary, on a Linux kernel.
+
+It is meant to automate creation of scripts revolving around the use of other
+skarnet.org tools, especially s6, in order to provide a complete booting
+environment with integrated supervision and logging without having to hand-craft
+all the details. ")))
+
 (define-public s6-linux-utils
   (package
    (name "s6-linux-utils")
-   (version "2.1.0.0")
+   (version "2.4.0.2")
    (source
     (origin
      (method url-fetch)
@@ -302,7 +340,7 @@ systems and other constrained environments, but they work everywhere.")))
            version ".tar.gz"))
      (sha256
       (base32
-       "1bby751blynb7p8wd3npjm71lf10ysmfvqrd3dqrhhajpa2bl8rm"))))
+       "0245rmk7wfyyfsi4g7f0niprwlvqlwkbyjxflb8kkbvhwfdavqip"))))
     (build-system gnu-build-system)
     (inputs `(("skalibs" ,skalibs)))
     (arguments
@@ -314,7 +352,7 @@ systems and other constrained environments, but they work everywhere.")))
                                          (assoc-ref %build-inputs "skalibs")
                                          "/lib/skalibs/sysdeps"))
        #:tests? #f))
-    (home-page "http://skarnet.org/software/s6-linux-utils")
+    (home-page "https://skarnet.org/software/s6-linux-utils")
     (license isc)
     (synopsis "Set of minimalistic Linux-specific system utilities")
     (description
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index b0a7ff0cfc..abc00c1a89 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -37,16 +37,14 @@
 (define-public slang
   (package
     (name "slang")
-    (version "2.3.0")
+    (version "2.3.1a")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "http://www.jedsoft.org/releases/slang/slang-"
-                    version
-                    ".tar.gz"))
+              (uri (string-append "http://www.jedsoft.org/releases/slang/slang-"
+                                  version ".tar.bz2"))
               (sha256
                (base32
-                "0aqd2cjabj6nhd4r3dc4vhqif2bf3dmqnrn2gj0xm4gqyfd177jy"))
+                "0dlcy0hn0j6cj9qj5x6hpb0axifnvzzmv5jqq0wq14fygw0c7w2l"))
               (modules '((guix build utils)))
               (snippet
                '(begin
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index f3e1135253..c1012a635b 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -965,16 +965,17 @@ transliteration, concatenation, date-time formatting and parsing, etc.")
 (define-public r-stringr
   (package
     (name "r-stringr")
-    (version "1.2.0")
+    (version "1.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stringr" version))
        (sha256
-        (base32 "16hj2rmv8x03lp6cp2jk0k2plibvbggf444kp05przdvd03v7l31"))))
+        (base32 "07dvfbkhv8gk6l32j43jvxpmqlhqp0mdby406h5a3bsc6k94ic13"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-magrittr" ,r-magrittr)
+     `(("r-glue" ,r-glue)
+       ("r-magrittr" ,r-magrittr)
        ("r-stringi" ,r-stringi)))
     (home-page "https://github.com/hadley/stringr")
     (synopsis "Simple, consistent wrappers for common string operations")
@@ -1347,13 +1348,13 @@ emitter (http://pyyaml.org/wiki/LibYAML) for R.")
 (define-public r-knitr
   (package
     (name "r-knitr")
-    (version "1.19")
+    (version "1.20")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "knitr" version))
               (sha256
                (base32
-                "1gyj9bw90h4h9rc9k1iqrnzirm2f8mj45zi8bkjc6rp610vlh63j"))))
+                "1408dm25cxahk2clff8hlajaqdj5v1gs40nm3q6rf0ghd82hj93v"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-evaluate" ,r-evaluate)
@@ -1549,13 +1550,13 @@ defined in different packages.")
 (define-public r-rlang
   (package
     (name "r-rlang")
-    (version "0.1.6")
+    (version "0.2.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "rlang" version))
               (sha256
                (base32
-                "1x62assn8m7cd0q75r809gxsdqmxmd2br1xz53ykzhrfz3j768kp"))))
+                "0f87fhw5pj6s2zjdxnpnd7pwn78czdz71b0xhm5adqg1p38sfwj8"))))
     (build-system r-build-system)
     (home-page "http://rlang.tidyverse.org")
     (synopsis "Functions for base types, core R and Tidyverse features")
@@ -1627,14 +1628,14 @@ database.")
 (define-public r-dbplyr
   (package
     (name "r-dbplyr")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "dbplyr" version))
        (sha256
         (base32
-         "17br61mhssi2pm6v8604f89ykglng3qp9ymfzmhw10cary6zm982"))))
+         "1nwrls9c3kc9q7405jp6b9sh23642sz13yw55iikgw134shffj5k"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-assertthat" ,r-assertthat)
@@ -2330,13 +2331,13 @@ informative error messages when it's not available.")
 (define-public r-devtools
   (package
     (name "r-devtools")
-    (version "1.13.4")
+    (version "1.13.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "devtools" version))
               (sha256
                (base32
-                "1az1qf50vyhm4w6k2a6wqw3pqc8jv2iqzdhs36cg079hx9swm0mb"))))
+                "1x3wsk7dh3yakii61kbfvafx9yz66h40ixiwfkf03dnp2n24hngs"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-digest" ,r-digest)
@@ -2747,18 +2748,21 @@ ldap, and also supports cookies, redirects, authentication, etc.")
 (define-public r-xml
   (package
     (name "r-xml")
-    (version "3.98-1.9")
+    (version "3.98-1.10")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "XML" version))
               (sha256
                (base32
-                "1hzkdkgs0nzmfg9wm7kyh1j9i0i2g7925whzlihqvg9grdlh3dx3"))))
+                "1faza9bbllp67lf1yv1sllxc3iv8llz52m9diazhq322iqbh97m1"))))
     (properties
      `((upstream-name . "XML")))
     (build-system r-build-system)
     (inputs
-     `(("libxml2" ,libxml2)))
+     `(("libxml2" ,libxml2)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
     (home-page "http://www.omegahat.org/RSXML")
     (synopsis "Tools for parsing and generating XML within R")
     (description
@@ -5407,18 +5411,19 @@ and the corresponding decision threshold.")
 (define-public r-forcats
   (package
     (name "r-forcats")
-    (version "0.2.0")
+    (version "0.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "forcats" version))
        (sha256
         (base32
-         "1mvwkynvvgz2vi8dyz11x7xrp53kadjawjcja34hwk1d89qf7g5m"))))
+         "0mxn1hng43zdjh1v8shd80hrszrqahcpaqxs1s1sif0qxh84d0cm"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-magrittr" ,r-magrittr)
-       ("r-tibble" ,r-tibble)))
+       ("r-tibble" ,r-tibble)
+       ("r-rlang" ,r-rlang)))
     (home-page "http://forcats.tidyverse.org")
     (synopsis "Tools for working with factors")
     (description "This package provides helpers for reordering factor
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index ee316c2289..9e06e675f4 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -787,7 +787,7 @@ then ported to the GNU / Linux environment.")
 (define-public mbedtls-apache
   (package
     (name "mbedtls-apache")
-    (version "2.6.0")
+    (version "2.7.0")
     (source
      (origin
        (method url-fetch)
@@ -797,7 +797,7 @@ then ported to the GNU / Linux environment.")
                            version "-apache.tgz"))
        (sha256
         (base32
-         "11wnj34rfqxjggmdgf042i49lr6civgbqwv2p7p8bn6k2919vg4r"))))
+         "1vsmgxnw7dpvma51896n63yaf9sncmf885ax2jfcg89ssin6vdmf"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/upnp.scm b/gnu/packages/upnp.scm
index 5e2c990469..8764cea9a6 100644
--- a/gnu/packages/upnp.scm
+++ b/gnu/packages/upnp.scm
@@ -29,14 +29,14 @@
 (define-public miniupnpc
   (package
     (name "miniupnpc")
-    (version "2.0.20180203")
+    (version "2.0.20180222")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://miniupnp.tuxfamily.org/files/"
                            name "-" version ".tar.gz"))
        (sha256
-        (base32 "1dr0qaf2qz49aawgsnv7l41rda5yvdk3qfz2hd5cv9iwav3sipch"))))
+        (base32 "0xavcrifk8v8gwig3mj0kjkm7rvw1kbsxcs4jxrrzl39cil48yaq"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-2)))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 75160c3376..91698b5f7f 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -636,35 +636,30 @@ default) of the repository.")
 (define-public shflags
   (package
     (name "shflags")
-    (version "1.2.0")
+    (version "1.2.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/kward/shflags/archive/v"
                                   version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0zxw12haylaq60a335xlqcs4afw2zrgwqymmpw0m21r51w6irdmr"))))
-    (build-system trivial-build-system)
+                "1h9xfrwwdhzflipfwdcgcc3y7zapdslnyk1rg5y8jm7k144rfrs4"))))
+    (build-system gnu-build-system)
     (native-inputs `(("tar" ,tar)
                      ("gzip" ,gzip)))
     (arguments
-     `(#:modules ((guix build utils))
-       #:builder (begin
-                   (use-modules (guix build utils))
-                   (let* ((source (assoc-ref %build-inputs "source"))
-                          (tar    (assoc-ref %build-inputs "tar"))
-                          (gzip   (assoc-ref %build-inputs "gzip"))
-                          (output (assoc-ref %outputs "out"))
-                          (srcdir (string-append output "/src")))
-                     (begin
-                       (setenv "PATH" (string-append gzip "/bin"))
-                       (system* (string-append tar "/bin/tar") "xzf"
-                                source)
-                       (chdir ,(string-append name "-" version))
-                       (mkdir-p srcdir)
-                       (copy-file "src/shflags"
-                                  (string-append srcdir "/shflags"))
-                       #t)))))
+     `(#:tests? #f                      ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ; nothing to configure
+         (delete 'build)                ; nothing to build
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (src (string-append out "/src")))
+               (install-file "shflags" src)
+               #t))))))
     (home-page "https://github.com/kward/shflags")
     (synopsis "Command-line flags library for shell scripts")
     (description
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 25b243ab63..287d142958 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -245,18 +245,18 @@ television and DVD.  It is also known as AC-3.")
 (define-public libx264
   (package
     (name "libx264")
-    (version "20170316-2245")
+    (version "20180219-2245")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.videolan.org/pub/x264/snapshots/"
-                                  "x264-snapshot-" version ".tar.bz2"))
+                                  "x264-snapshot-" version "-stable.tar.bz2"))
               (sha256
                (base32
-                "1s1nnvl3axz38sv4g09skijl6k9mbbngbb1nsh26w4dr2w2gyzad"))))
+                "1x0cg8l30wp84mr7q0ddp06jclm0kjrszazrx87d4k7js3qxjy8m"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("yasm" ,yasm)))
+       ("nasm" ,nasm)))
     ;; TODO: Add gpac input
     (arguments
      `(#:tests? #f  ;no check target
@@ -1275,7 +1275,7 @@ other site that youtube-dl supports.")
 (define-public you-get
   (package
     (name "you-get")
-    (version "0.4.1011")
+    (version "0.4.1025")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1284,7 +1284,7 @@ other site that youtube-dl supports.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0cdbh5w0chw3dlrwizm91l6sgkkzy7p6h0072dai4xbw5zgld31k"))))
+                "10103jw1gzar85jlajzl9wslk08vw21n26hkhfcz5bvkm9lxxs2c"))))
     (build-system python-build-system)
     (inputs
      `(("ffmpeg" ,ffmpeg)))             ; for multi-part and >=1080p videos
@@ -1737,7 +1737,12 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "10m3ry0b2pvqx3bk34qh5dq337nn8pkc2gzfyhsj4nv9abskln47"))))
+                "10m3ry0b2pvqx3bk34qh5dq337nn8pkc2gzfyhsj4nv9abskln47"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; As of glibc 2.26, <xlocale.h> no longer is.
+               '(substitute* "src/framework/mlt_property.h"
+                  (("xlocale\\.h") "locale.h")))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no tests
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index d49cdc208a..f8f9de16fc 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -82,16 +82,14 @@
 (define-public qemu
   (package
     (name "qemu")
-    (version "2.10.2")
+    (version "2.11.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qemu.org/qemu-"
                                  version ".tar.xz"))
-             (patches (search-patches "qemu-CVE-2017-15038.patch"
-                                      "qemu-CVE-2017-15289.patch"))
              (sha256
               (base32
-               "17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))))
+               "11l6cs6mib16rgdrnqrhkqs033fjik316gkgfz3asbmxz38lalca"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Running tests in parallel can occasionally lead to failures, like:
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index 4185064d8d..1d83b6f363 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -158,7 +158,7 @@ interpretation of the specifications for these languages.")
 (define-public vulkan-icd-loader
   (package
     (name "vulkan-icd-loader")
-    (version "1.0.65.2")
+    (version "1.0.68.0")
     (source
      (origin
        (method url-fetch)
@@ -167,11 +167,20 @@ interpretation of the specifications for these languages.")
              "archive/sdk-" version ".tar.gz"))
        (sha256
         (base32
-         "1ivvmb977n2xp95v3sryhflvryy3mxrcwrd1hnr2dmri40vg1sl8"))))
+         "1n5gry5zxpwi7330fmi06snalra8hkbbw68gnwbp531kd5ycyinh"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ;FIXME: 23/39 tests fail.  Try "tests/run_all_tests.sh".
-       #:configure-flags (list (string-append "-DCMAKE_INSTALL_LIBDIR="
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-spirv-tools-commit-id
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Remove lines trying to build in a git commit id.
+             (substitute* "CMakeLists.txt" ((".*spirv_tools_commit_id.h.*") ""))
+             #t)))
+       #:configure-flags (list
+                          "-DBUILD_LAYERS=OFF" ; FIXME: Fails to build.
+                          (string-append "-DCMAKE_INSTALL_LIBDIR="
                                               (assoc-ref %outputs "out") "/lib"))))
     (inputs `(("glslang" ,glslang)
               ("libxcb" ,libxcb)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 5219d30e04..ea302aa469 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -182,14 +182,14 @@ Interface} specification.")
     (name "nginx")
     ;; Consider updating the nginx-documentation package if the nginx package is
     ;; updated.
-    (version "1.13.8")
+    (version "1.13.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1ib4hkngj9z7pl73lnn96d85m7v2wwb56nkypwx7d6pm3z1vc444"))))
+                "0hpsyxpxj89p5vrzv9p1hp7xjbnj5c1w6fdy626ycvsiay4a3bjz"))))
     (build-system gnu-build-system)
     (inputs `(("openssl" ,openssl)
               ("pcre" ,pcre)
@@ -5654,14 +5654,14 @@ encoder/decoder based on the draft-12 specification for UBJSON.")
 (define-public java-tomcat
   (package
     (name "java-tomcat")
-    (version "8.5.23")
+    (version "8.5.28")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/tomcat/tomcat-8/v"
                                   version "/src/apache-tomcat-" version "-src.tar.gz"))
               (sha256
                (base32
-                "1m6b1dikib46kbgz9gf0p6svi00nsw62b9kgjzn6sda151skbbza"))))
+                "0q2bc3sajrmcx3z3vhhwp78y47ryc2ky8ssbdmfk24zvqdb76hvl"))))
     (build-system ant-build-system)
     (inputs
      `(("java-eclipse-jdt-core" ,java-eclipse-jdt-core)))
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 0cf6c1a2de..888173313b 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -9,7 +9,7 @@
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
+;;; Copyright © 2016, 2017, 2018 ng0 <ng0@crash.cx>
 ;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
 ;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
@@ -46,6 +46,7 @@
   #:use-module (gnu packages haskell-check)
   #:use-module (gnu packages haskell-web)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages base)
   #:use-module (gnu packages pkg-config)
@@ -915,3 +916,55 @@ It is inspired by Xmonad and dwm.  Its major features include:
 @end itemize\n")
     (home-page "https://github.com/conformal/spectrwm")
     (license license:isc)))
+
+(define-public cwm
+  (package
+    (name "cwm")
+    (version "6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://chneukirchen.org/releases/cwm-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1b8k2hjxpb0bzqjh2wj6mn2nf2360zacf8z19sw2rw5lxvmfy89x"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list "CC=gcc"
+                          (string-append "PREFIX=" %output))
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after 'build 'install-xsession
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Add a .desktop file to xsessions.
+             (let* ((output (assoc-ref outputs "out"))
+                    (xsessions (string-append output "/share/xsessions")))
+               (mkdir-p xsessions)
+               (with-output-to-file
+                   (string-append xsessions "/cwm.desktop")
+                 (lambda _
+                   (format #t
+                           "[Desktop Entry]~@
+                     Name=cwm~@
+                     Comment=OpenBSD Calm Window Manager fork~@
+                     Exec=~a/bin/cwm~@
+                     TryExec=~@*~a/bin/cwm~@
+                     Icon=~@
+                     Type=Application~%"
+                           output)))
+               #t))))))
+    (inputs
+     `(("libxft" ,libxft)
+       ("libxrandr" ,libxrandr)
+       ("libxinerama" ,libxinerama)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("bison" ,bison)))
+    (home-page "https://github.com/chneukirchen/cwm")
+    (synopsis "OpenBSD fork of the calmwm window manager")
+    (description "Cwm is a stacking window manager for X11.  It is an OpenBSD
+project derived from the original Calm Window Manager.")
+    (license license:isc)))
diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm
index 84446d8ef0..ad264a24e8 100644
--- a/gnu/packages/wxwidgets.scm
+++ b/gnu/packages/wxwidgets.scm
@@ -97,6 +97,34 @@ a graphical user interface.  It has language bindings for Python, Perl, Ruby
 and many other languages.")
     (license (list l:lgpl2.0+ (l:fsf-free "file://doc/license.txt")))))
 
+(define-public wxwidgets-2
+  (package
+    (inherit wxwidgets)
+    (version "2.8.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/wxWidgets/wxWidgets/"
+                           "releases/download/v" version
+                           "/wxGTK-" version ".tar.gz"))
+       (sha256
+        (base32 "1gjs9vfga60mk4j4ngiwsk9h6c7j22pw26m3asxr1jwvqbr8kkqk"))))
+    (inputs
+     `(("gtk" ,gtk+-2)
+       ("libjpeg" ,libjpeg)
+       ("libtiff" ,libtiff)
+       ("libmspack" ,libmspack)
+       ("sdl" ,sdl)
+       ("unixodbc" ,unixodbc)))
+    (arguments
+     `(#:configure-flags
+       '("--enable-unicode" "--with-regex=sys" "--with-sdl")
+       #:make-flags
+       (list (string-append "LDFLAGS=-Wl,-rpath="
+                            (assoc-ref %outputs "out") "/lib"))
+       ;; No 'check' target.
+       #:tests? #f))))
+
 (define-public wxwidgets-gtk2
   (package (inherit wxwidgets)
            (inputs `(("gtk+" ,gtk+-2)
@@ -126,6 +154,14 @@ and many other languages.")
               ((#:configure-flags flags)
                `(cons "--enable-mediactrl" ,flags))))))
 
+(define-public wxwidgets-gtk2-3.1
+  (package (inherit wxwidgets-3.1)
+           (inputs `(("gtk+" ,gtk+-2)
+                     ,@(alist-delete
+                        "gtk+"
+                        (package-inputs wxwidgets-3.1))))
+           (name "wxwidgets-gtk2")))
+
 (define-public python2-wxpython
   (package
     (name "python2-wxpython")
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index b78edf53fc..c16e5ecb13 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -4771,14 +4771,14 @@ common definitions and porting layer.")
 (define-public xorgproto
   (package
     (name "xorgproto")
-    (version "2018.2")
+    (version "2018.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://xorg/individual/proto/"
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0r3fk48vp24hk4viw4fjpyh0y7rdg13p5faxc0vicdyqcn5w02cp"))))
+                "1rdhw28n1gp7yylwia41jhih66gfx75nxgrmi2ggglzvzqhwr0x8"))))
     (build-system gnu-build-system)
     (propagated-inputs
      ;; To get util-macros in (almost?) all package inputs.
diff --git a/gnu/services/certbot.scm b/gnu/services/certbot.scm
index 8aac2638b3..066b8241b2 100644
--- a/gnu/services/certbot.scm
+++ b/gnu/services/certbot.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@member.fsf.org>
-;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +32,8 @@
   #:use-module (ice-9 match)
   #:export (certbot-service-type
             certbot-configuration
-            certbot-configuration?))
+            certbot-configuration?
+            certificate-configuration))
 
 ;;; Commentary:
 ;;;
@@ -41,6 +42,16 @@
 ;;; Code:
 
 
+(define-record-type* <certificate-configuration>
+  certificate-configuration make-certificate-configuration
+  certificate-configuration?
+  (name                certificate-configuration-name
+                       (default #f))
+  (domains             certificate-configuration-domains
+                       (default '()))
+  (deploy-hook         certificate-configuration-deploy-hook
+                       (default #f)))
+
 (define-record-type* <certbot-configuration>
   certbot-configuration make-certbot-configuration
   certbot-configuration?
@@ -48,8 +59,11 @@
                        (default certbot))
   (webroot             certbot-configuration-webroot
                        (default "/var/www"))
-  (hosts               certbot-configuration-hosts
+  (certificates        certbot-configuration-certificates
                        (default '()))
+  (email               certbot-configuration-email)
+  (rsa-key-size        certbot-configuration-rsa-key-size
+                       (default #f))
   (default-location    certbot-configuration-default-location
                        (default
                          (nginx-location-configuration
@@ -57,59 +71,75 @@
                           (body
                            (list "return 301 https://$host$request_uri;"))))))
 
-(define certbot-renewal-jobs
+(define certbot-command
   (match-lambda
-    (($ <certbot-configuration> package webroot hosts default-location)
-     (match hosts
-       ;; Avoid pinging certbot if we have no hosts.
-       (() '())
-       (_
-        (list
-         ;; Attempt to renew the certificates twice a week.
-         #~(job (lambda (now)
-                  (next-day-from (next-hour-from now '(3))
-                                 '(2 5)))
-                (string-append #$package "/bin/certbot renew"
-                               (string-concatenate
-                                (map (lambda (host)
-                                       (string-append " -d " host))
-                                     '#$hosts))))))))))
+    (($ <certbot-configuration> package webroot certificates email
+                                rsa-key-size default-location)
+     (let* ((certbot (file-append package "/bin/certbot"))
+            (rsa-key-size (and rsa-key-size (number->string rsa-key-size)))
+            (commands
+             (map
+              (match-lambda
+                (($ <certificate-configuration> custom-name domains
+                                                deploy-hook)
+                 (let ((name (or custom-name (car domains))))
+                   (append
+                    (list name certbot "certonly" "-n" "--agree-tos"
+                          "-m" email
+                          "--webroot" "-w" webroot
+                          "--cert-name" name
+                          "-d" (string-join domains ","))
+                    (if rsa-key-size `("--rsa-key-size" ,rsa-key-size) '())
+                    (if deploy-hook `("--deploy-hook" ,deploy-hook) '())))))
+              certificates)))
+       (program-file
+        "certbot-command"
+        #~(begin
+            (use-modules (ice-9 match))
+            (let ((code 0))
+              (for-each
+               (match-lambda
+                 ((name . command)
+                  (begin
+                    (format #t "Acquiring or renewing certificate: ~a~%" name)
+                    (set! code (or (apply system* command) code)))))
+               '#$commands) code)))))))
 
-(define certbot-activation
-  (match-lambda
-    (($ <certbot-configuration> package webroot hosts default-location)
+(define (certbot-renewal-jobs config)
+  (list
+   ;; Attempt to renew the certificates twice per day, at a random minute
+   ;; within the hour.  See https://certbot.eff.org/all-instructions/.
+   #~(job '(next-minute-from (next-hour '(0 12)) (list (random 60)))
+          #$(certbot-command config))))
+
+(define (certbot-activation config)
+  (match config
+    (($ <certbot-configuration> package webroot certificates email
+                                rsa-key-size default-location)
      (with-imported-modules '((guix build utils))
        #~(begin
-	   (use-modules (guix build utils))
-	   (mkdir-p #$webroot)
-           (for-each
-            (lambda (host)
-              (unless (file-exists? (in-vicinity "/etc/letsencrypt/live" host))
-                (unless (zero? (system*
-                                (string-append #$certbot "/bin/certbot")
-                                "certonly" "--webroot" "-w" #$webroot
-                                "-d" host))
-                  (error "failed to acquire cert for host" host))))
-            '#$hosts))))))
+           (use-modules (guix build utils))
+           (mkdir-p #$webroot)
+           (zero? (system* #$(certbot-command config))))))))
 
 (define certbot-nginx-server-configurations
   (match-lambda
-    (($ <certbot-configuration> package webroot hosts default-location)
-     (map
-      (lambda (host)
-        (nginx-server-configuration
-         (listen '("80"))
-         (ssl-certificate #f)
-         (ssl-certificate-key #f)
-         (server-name (list host))
-         (locations
-          (filter identity
-                  (list
-                   (nginx-location-configuration
-                    (uri "/.well-known")
-                    (body (list (list "root " webroot ";"))))
-                   default-location)))))
-      hosts))))
+    (($ <certbot-configuration> package webroot certificates email
+                                rsa-key-size default-location)
+     (list
+      (nginx-server-configuration
+       (listen '("80" "[::]:80"))
+       (ssl-certificate #f)
+       (ssl-certificate-key #f)
+       (server-name
+        (apply append (map certificate-configuration-domains certificates)))
+       (locations
+        (filter identity
+                (list
+                 (nginx-location-configuration
+                  (uri "/.well-known")
+                  (body (list (list "root " webroot ";"))))
+                 default-location))))))))
 
 (define certbot-service-type
   (service-type (name 'certbot)
@@ -121,12 +151,13 @@
                        (service-extension mcron-service-type
                                           certbot-renewal-jobs)))
                 (compose concatenate)
-                (extend (lambda (config additional-hosts)
+                (extend (lambda (config additional-certificates)
                           (certbot-configuration
                            (inherit config)
-                           (hosts (append (certbot-configuration-hosts config)
-                                          additional-hosts)))))
-                (default-value (certbot-configuration))
+                           (certificates
+                            (append
+                             (certbot-configuration-certificates config)
+                             additional-certificates)))))
                 (description
                  "Automatically renew @url{https://letsencrypt.org, Let's
 Encrypt} HTTPS certificates by adjusting the nginx web server configuration
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 50af2408b1..ea8433af3a 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -437,7 +437,9 @@ desktop session from the system or user profile will be used."
   (auto-login-session slim-configuration-auto-login-session
                       (default #f))
   (startx slim-configuration-startx
-          (default (xorg-start-command))))
+          (default (xorg-start-command)))
+  (sessreg slim-configuration-sessreg
+           (default sessreg)))
 
 (define (slim-pam-service config)
   "Return a PAM service for @command{slim}."
@@ -454,7 +456,8 @@ desktop session from the system or user profile will be used."
           (xauth   (slim-configuration-xauth config))
           (startx  (slim-configuration-startx config))
           (shepherd   (slim-configuration-shepherd config))
-          (theme-name (slim-configuration-theme-name config)))
+          (theme-name (slim-configuration-theme-name config))
+          (sessreg (slim-configuration-sessreg config)))
       (mixed-text-file "slim.cfg"  "
 default_path /run/current-system/profile/bin
 default_xserver " startx "
@@ -467,6 +470,8 @@ authfile /var/run/slim.auth
 login_cmd  exec " xinitrc " %session
 sessiondir /run/current-system/profile/share/xsessions
 session_msg session (F1 to change):
+sessionstart_cmd " sessreg "/bin/sessreg -a -l $DISPLAY %user
+sessionstop_cmd " sessreg "/bin/sessreg -d -l $DISPLAY %user
 
 halt_cmd " shepherd "/sbin/halt
 reboot_cmd " shepherd "/sbin/reboot\n"
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index d2568e6a7d..67da6fc3bf 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
+;;; Copyright © 2014, 2015, 2018 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -142,6 +142,8 @@ COMMAND or an interactive shell in that environment.\n"))
   -l, --load=FILE        create environment for the package that the code within
                          FILE evaluates to"))
   (display (G_ "
+  -m, --manifest=FILE    create environment with the manifest from FILE"))
+  (display (G_ "
       --ad-hoc           include all specified packages in the environment instead
                          of only their inputs"))
   (display (G_ "
@@ -220,6 +222,11 @@ COMMAND or an interactive shell in that environment.\n"))
                    (alist-cons 'expression
                                (tag-package-arg result arg)
                                result)))
+         (option '(#\m "manifest") #t #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'manifest
+                               arg
+                               result)))
          (option '("ad-hoc") #f #f
                  (lambda (opt name arg result)
                    (alist-cons 'ad-hoc? #t result)))
@@ -286,6 +293,16 @@ packages."
       (((? package-or-package+output?) ...) ; many packages
        (map (cut package->output <> mode) packages))))
 
+  (define (manifest->outputs manifest)
+    (map (lambda (entry)
+           (cons 'ad-hoc-package ; manifests are implicitly ad-hoc
+                 (if (package? (manifest-entry-item entry))
+                     (list (manifest-entry-item entry)
+                           (manifest-entry-output entry))
+                     ;; Direct store paths have no output.
+                     (list (manifest-entry-item entry)))))
+         (manifest-entries manifest)))
+
   (compact
    (append-map (match-lambda
                  (('package mode (? string? spec))
@@ -299,6 +316,9 @@ packages."
                   ;; Add all the outputs of the package defined in FILE.
                   (let ((module (make-user-module '())))
                     (packages->outputs (load* file module) mode)))
+                 (('manifest . file)
+                  (let ((module (make-user-module '())))
+                    (manifest->outputs (load* file module))))
                  (_ '(#f)))
                opts)))
 
diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh
index bf5ca17fa5..b44aca099d 100644
--- a/tests/guix-environment.sh
+++ b/tests/guix-environment.sh
@@ -62,6 +62,15 @@ fi
 guix environment --bootstrap --ad-hoc guile-bootstrap --pure \
      -- "$SHELL" -c 'test -f "$GUIX_ENVIRONMENT/bin/guile"'
 
+# Make sure 'GUIX_ENVIRONMENT' points to the profile when building from a
+# manifest.
+echo "(use-modules (guix profiles) (gnu packages bootstrap))
+
+(packages->manifest (list %bootstrap-guile))
+" > $tmpdir/manifest.scm
+guix environment --bootstrap --manifest=$tmpdir/manifest.scm --pure \
+     -- "$SHELL" -c 'test -f "$GUIX_ENVIRONMENT/bin/guile"'
+
 # Make sure '-r' works as expected.
 rm -f "$gcroot"
 expected="`guix environment --bootstrap --ad-hoc guile-bootstrap \