summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeo Famulari <leo@famulari.name>2018-09-13 13:32:39 -0400
committerLeo Famulari <leo@famulari.name>2018-09-13 13:32:39 -0400
commitd7639407110a584c18bb362c942eeb0933188c66 (patch)
tree8068d0737e2a65f8f9f7080b7f9fb36a74e58e2c
parent36e8185667c41740786d9b2eb3672a0f8b902ed8 (diff)
parent7d1cc612938565d935c53bd7a429f41d1f048dae (diff)
downloadguix-d7639407110a584c18bb362c942eeb0933188c66.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--build-aux/build-self.scm20
-rw-r--r--build-aux/hydra/gnu-system.scm35
-rw-r--r--doc/guix.texi56
-rw-r--r--gnu/local.mk13
-rw-r--r--gnu/packages/audio.scm7
-rw-r--r--gnu/packages/backup.scm15
-rw-r--r--gnu/packages/bioinformatics.scm197
-rw-r--r--gnu/packages/bootloaders.scm6
-rw-r--r--gnu/packages/code.scm2
-rw-r--r--gnu/packages/cran.scm233
-rw-r--r--gnu/packages/crypto.scm38
-rw-r--r--gnu/packages/databases.scm22
-rw-r--r--gnu/packages/dlang.scm (renamed from gnu/packages/ldc.scm)28
-rw-r--r--gnu/packages/dns.scm4
-rw-r--r--gnu/packages/elf.scm72
-rw-r--r--gnu/packages/emacs.scm558
-rw-r--r--gnu/packages/emulators.scm19
-rw-r--r--gnu/packages/fonts.scm36
-rw-r--r--gnu/packages/ftp.scm4
-rw-r--r--gnu/packages/gnunet.scm4
-rw-r--r--gnu/packages/gtk.scm43
-rw-r--r--gnu/packages/guile.scm47
-rw-r--r--gnu/packages/libreoffice.scm54
-rw-r--r--gnu/packages/linux.scm16
-rw-r--r--gnu/packages/machine-learning.scm49
-rw-r--r--gnu/packages/maths.scm100
-rw-r--r--gnu/packages/mes.scm2
-rw-r--r--gnu/packages/mpi.scm14
-rw-r--r--gnu/packages/music.scm17
-rw-r--r--gnu/packages/nano.scm4
-rw-r--r--gnu/packages/patches/ldc-1.7.0-disable-phobos-tests.patch88
-rw-r--r--gnu/packages/patches/ldc-disable-phobos-tests.patch22
-rw-r--r--gnu/packages/patches/python-genshi-add-support-for-python-3.4-AST.patch151
-rw-r--r--gnu/packages/patches/python-genshi-buildable-on-python-2.7.patch25
-rw-r--r--gnu/packages/patches/python-genshi-disable-speedups-on-python-3.3.patch32
-rw-r--r--gnu/packages/patches/python-genshi-fix-tests-on-python-3.5.patch112
-rw-r--r--gnu/packages/patches/python-genshi-isstring-helper.patch37
-rw-r--r--gnu/packages/patches/python-genshi-stripping-of-unsafe-script-tags.patch51
-rw-r--r--gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch94
-rw-r--r--gnu/packages/perl-check.scm21
-rw-r--r--gnu/packages/perl.scm9
-rw-r--r--gnu/packages/python-crypto.scm8
-rw-r--r--gnu/packages/python-web.scm41
-rw-r--r--gnu/packages/python.scm389
-rw-r--r--gnu/packages/rust.scm245
-rw-r--r--gnu/packages/scheme.scm7
-rw-r--r--gnu/packages/scsi.scm16
-rw-r--r--gnu/packages/shells.scm23
-rw-r--r--gnu/packages/shellutils.scm47
-rw-r--r--gnu/packages/spice.scm96
-rw-r--r--gnu/packages/ssh.scm41
-rw-r--r--gnu/packages/suckless.scm8
-rw-r--r--gnu/packages/syncthing.scm10
-rw-r--r--gnu/packages/text-editors.scm6
-rw-r--r--gnu/packages/tor.scm6
-rw-r--r--gnu/packages/version-control.scm15
-rw-r--r--gnu/packages/video.scm12
-rw-r--r--gnu/packages/web.scm13
-rw-r--r--gnu/packages/wm.scm14
-rw-r--r--gnu/services/admin.scm174
-rw-r--r--gnu/services/web.scm188
-rw-r--r--gnu/tests/admin.scm127
-rw-r--r--gnu/tests/web.scm99
-rw-r--r--guix/build-system/dub.scm4
-rw-r--r--guix/build/profiles.scm15
-rw-r--r--guix/build/syscalls.scm4
-rw-r--r--guix/git-download.scm119
-rw-r--r--guix/scripts/build.scm8
-rw-r--r--guix/scripts/package.scm3
-rwxr-xr-xguix/scripts/substitute.scm5
-rw-r--r--guix/ui.scm26
-rw-r--r--tests/profiles.scm36
72 files changed, 2675 insertions, 1487 deletions
diff --git a/build-aux/build-self.scm b/build-aux/build-self.scm
index 9e8cc90067..5b281c3bc9 100644
--- a/build-aux/build-self.scm
+++ b/build-aux/build-self.scm
@@ -25,6 +25,8 @@
   #:use-module (guix build-system gnu)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (rnrs io ports)
   #:use-module (ice-9 match)
   #:use-module (ice-9 popen)
@@ -263,6 +265,9 @@ interface (FFI) of Guile.")
                  #~(define-module (gcrypt hash)
                      #:export (sha1 sha256))))
 
+  (define fake-git
+    (scheme-file "git.scm" #~(define-module (git))))
+
   (with-imported-modules `(((guix config)
                             => ,(make-config.scm))
 
@@ -272,6 +277,11 @@ interface (FFI) of Guile.")
                            ;; adjust %LOAD-PATH later on.
                            ((gcrypt hash) => ,fake-gcrypt-hash)
 
+                           ;; (guix git-download) depends on (git) but only
+                           ;; for peripheral functionality.  Provide a dummy
+                           ;; (git) to placate it.
+                           ((git) => ,fake-git)
+
                            ,@(source-module-closure `((guix store)
                                                       (guix self)
                                                       (guix derivations)
@@ -417,7 +427,15 @@ files."
            ;; Unsupported PULL-VERSION.
            (return #f))
           ((? string? str)
-           (error "invalid build result" (list build str))))))))
+           (raise (condition
+                   (&message
+                    (message (format #f "You found a bug: the program '~a'
+failed to compute the derivation for Guix (version: ~s; system: ~s;
+host version: ~s; pull-version: ~s).
+Please report it by email to <~a>.~%"
+                                     (derivation->output-path build)
+                                     version system %guix-version pull-version
+                                     %guix-bug-report-address)))))))))))
 
 ;; This file is loaded by 'guix pull'; return it the build procedure.
 build
diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm
index b1554ced4c..7234e2d0e8 100644
--- a/build-aux/hydra/gnu-system.scm
+++ b/build-aux/hydra/gnu-system.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -56,6 +57,7 @@
              (guix packages)
              (guix derivations)
              (guix monads)
+             (guix ui)
              ((guix licenses) #:select (gpl3+))
              ((guix utils) #:select (%current-system))
              ((guix scripts system) #:select (read-operating-system))
@@ -311,6 +313,30 @@ valid."
                           packages)))
                  #:select? (const #t)))           ;include hidden packages
 
+(define (arguments->manifests arguments)
+  "Return the list of manifests extracted from ARGUMENTS."
+  (map (match-lambda
+         ((input-name . relative-path)
+          (let* ((checkout (assq-ref arguments (string->symbol input-name)))
+                 (base (assq-ref checkout 'file-name)))
+            (in-vicinity base relative-path))))
+       (assq-ref arguments 'manifests)))
+
+(define (manifests->packages store manifests)
+  "Return the list of packages found in MANIFESTS."
+  (define (load-manifest manifest)
+    (save-module-excursion
+     (lambda ()
+       (set-current-module (make-user-module '((guix profiles) (gnu))))
+       (primitive-load manifest))))
+
+  (parameterize ((%graft? #f))
+    (delete-duplicates!
+     (map manifest-entry-item
+          (append-map (compose manifest-entries
+                               load-manifest)
+                      manifests)))))
+
 
 ;;;
 ;;; Hydra entry point.
@@ -323,6 +349,7 @@ valid."
       ("core" 'core)                              ; only build core packages
       ("hello" 'hello)                            ; only build hello
       (((? string?) (? string?) ...) 'list)       ; only build selected list of packages
+      ("manifests" 'manifests)                    ; only build packages in the list of manifests
       (_ 'all)))                                  ; build everything
 
   (define systems
@@ -419,6 +446,14 @@ valid."
                                                  package system))
                                   packages))
                          '()))
+                    ((manifests)
+                     ;; Build packages in the list of manifests.
+                     (let* ((manifests (arguments->manifests arguments))
+                            (packages (manifests->packages store manifests)))
+                       (map (lambda (package)
+                              (package-job store (job-name package)
+                                           package system))
+                            packages)))
                     (else
                      (error "unknown subset" subset))))
                 systems)))
diff --git a/doc/guix.texi b/doc/guix.texi
index 19a497c746..cccf166d03 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -18165,23 +18165,43 @@ The type of the Cuirass service.  Its value must be a
 @code{cuirass-configuration} object, as described below.
 @end defvr
 
-To add build jobs, you have to set the @code{specifications} field of
-the configuration.  Here is an example of a service defining a build job
-based on a specification that can be found in Cuirass source tree.  This
-service polls the Guix repository and builds a subset of the Guix
-packages, as prescribed in the @file{gnu-system.scm} example spec:
-
-@example
-(let ((spec #~((#:name . "guix")
-               (#:url . "git://git.savannah.gnu.org/guix.git")
-               (#:load-path . ".")
-               (#:file . "build-aux/cuirass/gnu-system.scm")
-               (#:proc . cuirass-jobs)
-               (#:arguments (subset . "hello"))
-               (#:branch . "master"))))
-  (service cuirass-service-type
-           (cuirass-configuration
-            (specifications #~(list '#$spec)))))
+To add build jobs, you have to set the @code{specifications} field of the
+configuration.  Here is an example of a service that polls the Guix repository
+and builds the packages from a manifest.  Some of the packages are defined in
+the @code{"custom-packages"} input, which is the equivalent of
+@code{GUIX_PACKAGE_PATH}.
+
+@example
+(define %cuirass-specs
+  #~(list
+     '((#:name . "my-manifest")
+       (#:load-path-inputs . ("guix"))
+       (#:package-path-inputs . ("custom-packages"))
+       (#:proc-input . "guix")
+       (#:proc-file . "build-aux/cuirass/gnu-system.scm")
+       (#:proc . cuirass-jobs)
+       (#:proc-args . ((subset . "manifests")
+                       (systems . ("x86_64-linux"))
+                       (manifests . (("config" . "guix/manifest.scm")))))
+       (#:inputs . (((#:name . "guix")
+                     (#:url . "git://git.savannah.gnu.org/guix.git")
+                     (#:load-path . ".")
+                     (#:branch . "master")
+                     (#:no-compile? . #t))
+                    ((#:name . "config")
+                     (#:url . "git://git.example.org/config.git")
+                     (#:load-path . ".")
+                     (#:branch . "master")
+                     (#:no-compile? . #t))
+                    ((#:name . "custom-packages")
+                     (#:url . "git://git.example.org/custom-packages.git")
+                     (#:load-path . ".")
+                     (#:branch . "master")
+                     (#:no-compile? . #t)))))))
+
+(service cuirass-service-type
+         (cuirass-configuration
+          (specifications %cuirass-specs)))
 @end example
 
 While information related to build jobs is located directly in the
@@ -18208,7 +18228,7 @@ Owner's group of the @code{cuirass} process.
 Number of seconds between the poll of the repositories followed by the
 Cuirass jobs.
 
-@item @code{database} (default: @code{"/var/run/cuirass/cuirass.db"})
+@item @code{database} (default: @code{"/var/lib/cuirass/cuirass.db"})
 Location of sqlite database which contains the build results and previously
 added specifications.
 
diff --git a/gnu/local.mk b/gnu/local.mk
index b3bd208212..6a48782e4b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -135,6 +135,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/display-managers.scm		\
   %D%/packages/django.scm			\
   %D%/packages/djvu.scm				\
+  %D%/packages/dlang.scm			\
   %D%/packages/dns.scm				\
   %D%/packages/docbook.scm			\
   %D%/packages/docker.scm			\
@@ -245,7 +246,6 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/key-mon.scm			\
   %D%/packages/kodi.scm				\
   %D%/packages/language.scm			\
-  %D%/packages/ldc.scm				\
   %D%/packages/lego.scm				\
   %D%/packages/less.scm				\
   %D%/packages/lesstif.scm			\
@@ -529,7 +529,6 @@ GNU_SYSTEM_MODULES =				\
   %D%/build/vm.scm				\
 						\
   %D%/tests.scm					\
-  %D%/tests/admin.scm				\
   %D%/tests/audio.scm				\
   %D%/tests/base.scm				\
   %D%/tests/databases.scm			\
@@ -855,7 +854,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/kobodeluxe-graphics-window-signed-char.patch	\
   %D%/packages/patches/laby-make-install.patch			\
   %D%/packages/patches/ldc-bootstrap-disable-tests.patch	\
-  %D%/packages/patches/ldc-1.7.0-disable-phobos-tests.patch	\
+  %D%/packages/patches/ldc-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			\
@@ -983,6 +982,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/net-tools-bitrot.patch			\
   %D%/packages/patches/netcdf-date-time.patch			\
   %D%/packages/patches/netcdf-tst_h_par.patch			\
+  %D%/packages/patches/netsurf-message-timestamp.patch		\
   %D%/packages/patches/netsurf-system-utf8proc.patch		\
   %D%/packages/patches/netsurf-y2038-tests.patch		\
   %D%/packages/patches/netsurf-longer-test-timeout.patch	\
@@ -1078,12 +1078,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-axolotl-AES-fix.patch		\
   %D%/packages/patches/python-cairocffi-dlopen-path.patch	\
   %D%/packages/patches/python-fix-tests.patch			\
-  %D%/packages/patches/python-genshi-add-support-for-python-3.4-AST.patch	\
-  %D%/packages/patches/python-genshi-buildable-on-python-2.7.patch	\
-  %D%/packages/patches/python-genshi-disable-speedups-on-python-3.3.patch	\
-  %D%/packages/patches/python-genshi-fix-tests-on-python-3.5.patch	\
-  %D%/packages/patches/python-genshi-isstring-helper.patch	\
-  %D%/packages/patches/python-genshi-stripping-of-unsafe-script-tags.patch	\
   %D%/packages/patches/python2-larch-coverage-4.0a6-compatibility.patch \
   %D%/packages/patches/python-networkx2-reproducible-build.patch	\
   %D%/packages/patches/python2-rdflib-drop-sparqlwrapper.patch	\
@@ -1129,6 +1123,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ruby-rack-ignore-failing-test.patch      \
   %D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\
   %D%/packages/patches/rust-1.19-mrustc.patch			\
+  %D%/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch \
   %D%/packages/patches/rust-bootstrap-stage0-test.patch		\
   %D%/packages/patches/rust-coresimd-doctest.patch		\
   %D%/packages/patches/rxvt-unicode-escape-sequences.patch	\
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 8ce9af6af1..42ba2d3a7e 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1231,7 +1231,7 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
 (define-public guitarix
   (package
     (name "guitarix")
-    (version "0.37.1")
+    (version "0.37.3")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1239,7 +1239,7 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
                    version ".tar.xz"))
              (sha256
               (base32
-               "064k0jzxqgx9gwf8za6jziansabzrwzjaim3qx1743ify5g3gaai"))))
+               "1wfm8wrwrnqpb4ihy75n7l9i6vml536jlq9pdx2pblbc4ba3paac"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
@@ -1252,6 +1252,7 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
     (inputs
      `(("libsndfile" ,libsndfile)
        ("boost" ,boost)
+       ("curl" ,curl)
        ("avahi" ,avahi)
        ("eigen" ,eigen)
        ("lv2" ,lv2)
@@ -1291,7 +1292,7 @@ auto-wah.")
     (arguments
      (substitute-keyword-arguments (package-arguments guitarix)
        ((#:configure-flags flags)
-        `(cons "--lv2-only" ,flags))))))
+        `(cons "--no-standalone" ,flags))))))
 
 (define-public rakarrack
   (package
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index bd4a177ecd..ea5bc8e398 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -740,12 +740,15 @@ NTFS volumes using @code{ntfs-3g}, preserving NTFS-specific attributes.")
        ("python2-pep8" ,python2-pep8)
        ("python2-pylint" ,python2-pylint)))
     (home-page "https://obnam.org/")
-    (synopsis "Easy and secure backup program")
-    (description "Obnam is an easy, secure backup program.  Features
-include snapshot backups, data de-duplication and encrypted backups
-using GnuPG.  Backups can be stored on local hard disks, or online via
-the SSH SFTP protocol.  The backup server, if used, does not require
-any special software, on top of SSH.")
+    (synopsis "Retired backup program")
+    (description
+     "Warning: @uref{https://blog.liw.fi/posts/2017/08/13/retiring_obnam/,
+the Obnam project is retired}.  You should use another backup solution instead.
+
+Obnam was an easy, secure backup program.  Features included snapshot backups,
+data de-duplication and encrypted backups using GnuPG.  Backups can be stored on
+local hard disks, or online via the SSH SFTP protocol.  The backup server, if
+used, does not require any special software, on top of SSH.")
     (license license:gpl3+)))
 
 (define-public dirvish
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 6580cac531..f6410c3ca4 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -76,7 +76,7 @@
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
   #:use-module (gnu packages jemalloc)
-  #:use-module (gnu packages ldc)
+  #:use-module (gnu packages dlang)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
   #:use-module (gnu packages machine-learning)
@@ -13504,3 +13504,198 @@ reference transcripts provided in a annotation file (also in GTF/GFF3 format).
        (list
         license:expat                   ;license for gffcompare
         license:artistic2.0)))))        ;license for gclib
+
+(define-public python-intervaltree
+  (package
+    (name "python-intervaltree")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "intervaltree" version))
+       (sha256
+        (base32
+         "02w191m9zxkcjqr1kv2slxvhymwhj3jnsyy3a28b837pi15q19dc"))))
+    (build-system python-build-system)
+    ;; FIXME: error when collecting tests
+    (arguments '(#:tests? #f))
+    (propagated-inputs
+     `(("python-sortedcontainers" ,python-sortedcontainers)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/chaimleib/intervaltree")
+    (synopsis "Editable interval tree data structure")
+    (description
+     "This package provides a mutable, self-balancing interval tree
+implementation for Python.  Queries may be by point, by range overlap, or by
+range envelopment.  This library was designed to allow tagging text and time
+intervals, where the intervals include the lower bound but not the upper
+bound.")
+    (license license:asl2.0)))
+
+(define-public python-pypairix
+  (package
+    (name "python-pypairix")
+    (version "0.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pypairix" version))
+       (sha256
+        (base32
+         "0zs92b74s5v4xy2h16s15f3z6l4nnbw8x8zyif7xx5xpafjn0xss"))))
+    (build-system python-build-system)
+    ;; FIXME: the tests fail because test.support cannot be loaded:
+    ;; ImportError: cannot import name 'support'
+    (arguments '(#:tests? #f))
+    (inputs
+     `(("zlib" ,zlib)))
+    (home-page "https://github.com/4dn-dcic/pairix")
+    (synopsis "Support for querying pairix-indexed bgzipped text files")
+    (description
+     "Pypairix is a Python module for fast querying on a pairix-indexed
+bgzipped text file that contains a pair of genomic coordinates per line.")
+    (license license:expat)))
+
+(define-public python-pyfaidx
+  (package
+    (name "python-pyfaidx")
+    (version "0.5.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyfaidx" version))
+       (sha256
+        (base32
+         "0y5zyjksj1rdglj601xd2bbni5abhdh622y3ck76chyzxz9z4rx8"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-six" ,python-six)))
+    (home-page "http://mattshirley.com")
+    (synopsis "Random access to fasta subsequences")
+    (description
+     "This package provides procedures for efficient pythonic random access to
+fasta subsequences.")
+    (license license:bsd-3)))
+
+(define-public python-cooler
+  (package
+    (name "python-cooler")
+    (version "0.7.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cooler" version))
+       (sha256
+        (base32
+         "08k5nxnxa6qsbk15z5z0q01n28042k87wi4905hh95rzqib15mhx"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-biopython" ,python-biopython)
+       ("python-click" ,python-click)
+       ("python-cytoolz" ,python-cytoolz)
+       ("python-dask" ,python-dask)
+       ("python-h5py" ,python-h5py)
+       ("python-multiprocess" ,python-multiprocess)
+       ("python-pandas" ,python-pandas)
+       ("python-pyfaidx" ,python-pyfaidx)
+       ("python-pypairix" ,python-pypairix)
+       ("python-pysam" ,python-pysam)
+       ("python-scipy" ,python-scipy)))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-nose" ,python-nose)
+       ("python-numpydoc" ,python-numpydoc)
+       ("python-sphinx" ,python-sphinx)))
+    (home-page "https://github.com/mirnylab/cooler")
+    (synopsis "Sparse binary format for genomic interaction matrices")
+    (description
+     "Cooler is a support library for a sparse, compressed, binary persistent
+storage format, called @code{cool}, used to store genomic interaction data,
+such as Hi-C contact matrices.")
+    (license license:bsd-3)))
+
+(define-public python-hicexplorer
+  (package
+    (name "python-hicexplorer")
+    (version "2.1.4")
+    (source
+     (origin
+       ;; The latest version is not available on Pypi.
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/deeptools/HiCExplorer.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0q5gpbzmrkvygqgw524q36b4nrivcmyi5v194vsx0qw7b3gcmq08"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-up-requirements
+           (lambda _
+             (substitute* "setup.py"
+               (("==") ">="))
+             #t)))))
+    (propagated-inputs
+     `(("python-biopython" ,python-biopython)
+       ("python-configparser" ,python-configparser)
+       ("python-cooler" ,python-cooler)
+       ("python-future" ,python-future)
+       ("python-intervaltree" ,python-intervaltree)
+       ("python-jinja2" ,python-jinja2)
+       ("python-matplotlib" ,python-matplotlib)
+       ("python-numpy" ,python-numpy)
+       ("python-pandas" ,python-pandas)
+       ("python-pybigwig" ,python-pybigwig)
+       ("python-pysam" ,python-pysam)
+       ("python-scipy" ,python-scipy)
+       ("python-six" ,python-six)
+       ("python-tables" ,python-tables)
+       ("python-unidecode" ,python-unidecode)))
+    (home-page "http://hicexplorer.readthedocs.io")
+    (synopsis "Process, analyze and visualize Hi-C data")
+    (description
+     "HiCExplorer is a powerful and easy to use set of tools to process,
+normalize and visualize Hi-C data.  HiCExplorer facilitates the creation of
+contact matrices, correction of contacts, TAD detection, A/B compartments,
+merging, reordering or chromosomes, conversion from different formats
+including cooler and detection of long-range contacts.  Moreover, it allows
+the visualization of multiple contact matrices along with other types of data
+like genes, compartments, ChIP-seq coverage tracks (and in general any type of
+genomic scores), long range contacts and the visualization of viewpoints.")
+    (license license:gpl3)))
+
+(define-public python-pygenometracks
+  (package
+    (name "python-pygenometracks")
+    (version "2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pyGenomeTracks" version))
+       (sha256
+        (base32
+         "1fws6bqsyy9kj3qiabhkqx4wd4i775gsxnhszqd3zg7w67sc1ic5"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-configparser" ,python-configparser)
+       ("python-future" ,python-future)
+       ("python-hicexplorer" ,python-hicexplorer)
+       ("python-intervaltree" ,python-intervaltree)
+       ("python-matplotlib" ,python-matplotlib)
+       ("python-numpy" ,python-numpy)
+       ("python-pybigwig" ,python-pybigwig)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://pygenometracks.readthedocs.io")
+    (synopsis "Program and library to plot beautiful genome browser tracks")
+    (description
+     "This package aims to produce high-quality genome browser tracks that
+are highly customizable.  Currently, it is possible to plot: bigwig, bed (many
+options), bedgraph, links (represented as arcs), and Hi-C matrices.
+pyGenomeTracks can make plots with or without Hi-C data.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index c99d5d5895..e99dc8455f 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -305,15 +305,15 @@ menu to select one of the installed operating systems.")
            (delete 'configure)
            (add-before 'build 'set-permissions
              (lambda _
-               (zero? (system* "chmod" "a+w" "utils/isohybrid.in"))))
+               (invoke "chmod" "a+w" "utils/isohybrid.in")))
            (replace 'check
              (lambda _
                (setenv "CC" "gcc")
                (substitute* "tests/unittest/include/unittest/unittest.h"
                  ;; Don't look up headers under /usr.
                  (("/usr/include/") ""))
-               (zero? (system* "make" "unittest")))))))
-      (home-page "http://www.syslinux.org")
+               (invoke "make" "unittest"))))))
+      (home-page "https://www.syslinux.org")
       (synopsis "Lightweight Linux bootloader")
       (description "Syslinux is a lightweight Linux bootloader.")
       (license (list license:gpl2+
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index b3fbea0b38..4264e292bd 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -220,7 +220,7 @@ COCOMO model or user-provided parameters.")
              "/cloc-" version ".tar.gz"))
        (sha256
         (base32
-         "176xklr2qsgxh9zdb565gib6pp4gsm585rz5fvyphgjy4i679wkv"))))
+         "1j9lwy9xf43kpv1csqdxzch6y1hnsv881ddqd357f8v58dhr4s68"))))
     (build-system gnu-build-system)
     (inputs
      `(("coreutils" ,coreutils)
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 8144391729..f8177da013 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -33,6 +33,8 @@
   #:use-module (guix build-system r)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages machine-learning)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpi)
@@ -5564,3 +5566,234 @@ gf_density(), and so on, bring the formula interface to ggplot().  This captures
 and extends the excellent simplicity of the lattice-graphics formula interface,
 while providing the intuitive capabilities of @code{r-ggplot2}.")
     (license license:expat)))
+
+(define-public r-mosaicdata
+  (package
+    (name "r-mosaicdata")
+    (version "0.17.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "mosaicData" version))
+       (sha256
+        (base32 "04z0mdm52mykqsxsinhmsihn181zf6cw321gayk2rjp7lj7mwdq9"))))
+    (properties `((upstream-name . "mosaicData")))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/mosaicData/")
+    (synopsis "Data sets for project Mosaic")
+    (description
+     "This package provides data sets from project Mosaic @url{http://mosaic-web.org}
+used to teach mathematics, statistics, computation and modeling.")
+    (license license:gpl2+)))
+
+(define-public r-mosaic
+  (package
+   (name "r-mosaic")
+   (version "1.4.0")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (cran-uri "mosaic" version))
+     (sha256
+      (base32 "10jbrg8kli00kfgbh2f67bymm5cnlancc9dplb1j7fl552yjddn2"))))
+   (build-system r-build-system)
+   (propagated-inputs
+    `(("r-broom" ,r-broom)
+      ("r-dplyr" ,r-dplyr)
+      ("r-ggdendro" ,r-ggdendro)
+      ("r-ggformula" ,r-ggformula)
+      ("r-ggplot2" ,r-ggplot2)
+      ("r-ggrepel" ,r-ggrepel)
+      ("r-glue" ,r-glue)
+      ("r-gridextra" ,r-gridextra)
+      ("r-lattice" ,r-lattice)
+      ("r-latticeextra" ,r-latticeextra)
+      ("r-lazyeval" ,r-lazyeval)
+      ("r-mass" ,r-mass)
+      ("r-matrix" ,r-matrix)
+      ("r-mosaiccore" ,r-mosaiccore)
+      ("r-mosaicdata" ,r-mosaicdata)
+      ("r-readr" ,r-readr)
+      ("r-tidyr" ,r-tidyr)))
+   (home-page "https://github.com/ProjectMOSAIC/mosaic/")
+   (synopsis "Mathematics, statistics, and computation teaching utilities")
+   (description
+    "This package contain data sets and utilities from
+@url{http://mosaic-web.org, Project MOSAIC} used to teach mathematics,
+statistics, computation and modeling.  Project MOSAIC is a community of
+educators working to tie together aspects of quantitative work that students
+in science, technology, engineering and mathematics will need in their
+professional lives, but which are usually taught in isolation, if at all.")
+   (license license:gpl2+)))
+
+(define-public r-abd
+  (package
+    (name "r-abd")
+    (version "0.2-8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "abd" version))
+       (sha256
+        (base32 "191gspqzdv573vaw624ri0f5cm6v4j524bjs74d4a1hn3kn6r9b7"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-lattice" ,r-lattice)
+       ("r-mosaic" ,r-mosaic)
+       ("r-nlme" ,r-nlme)))
+    (home-page "https://cran.r-project.org/web/packages/abd/")
+    (synopsis "Analysis of biological data")
+    (description
+     "The @code{r-abd} package contains data sets and sample code for the Analysis of
+biological data by Michael Whitlock and Dolph Schluter.")
+    (license license:gpl2)))
+
+(define-public r-svgui
+  (package
+    (name "r-svgui")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "svGUI" version))
+       (sha256
+        (base32 "1r7ab0p4yr8q03gj02hmj7k1ghksgkg4nx750c0ajfs2q9y1dxfc"))))
+    (properties `((upstream-name . "svGUI")))
+    (build-system r-build-system)
+    (home-page "https://github.com/SciViews/svGUI/")
+    (synopsis "Functions for managing GUI clients in R")
+    (description
+     "The SciViews @code{svGUI} package eases the management of Graphical User
+Interfaces (GUI) in R.  It is independent from any particular GUI widgets.  It
+centralizes info about GUI elements currently used, and it dispatches GUI
+calls to the particular toolkits in use in function of the context.")
+    (license license:gpl2)))
+
+(define-public r-svdialogs
+  (package
+    (name "r-svdialogs")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "svDialogs" version))
+       (sha256
+        (base32 "0xqppydfawnwk84kb5qiybwbcmv38vn4imgz01mz2pnq4xb80p97"))))
+    (properties `((upstream-name . "svDialogs")))
+    (build-system r-build-system)
+    (inputs
+     `(("yad" ,yad)
+       ("zenity" ,zenity)))
+    (propagated-inputs
+     `(("r-rstudioapi" ,r-rstudioapi)
+       ("r-svgui" ,r-svgui)))
+    (home-page "https://github.com/SciViews/svDialogs/")
+    (synopsis "Portable dialog boxes")
+    (description
+     "This package helps to construct standard dialog boxes for your GUI, including
+message boxes, input boxes, list, file or directory selection, and others.  In
+case R cannot display GUI dialog boxes, a simpler command line version of these
+interactive elements is also provided as a fallback solution.")
+    (license license:gpl2)))
+
+(define-public r-abe
+  (package
+    (name "r-abe")
+    (version "3.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "abe" version))
+       (sha256
+        (base32
+         "1f19h3xzzmjhvwc1rrb8z0rai3ip03y4gdi2gg9bfr5sg2nfklk6"))))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/abe/")
+    (synopsis "Augmented backward elimination")
+    (description
+     "This package performs augmented backward elimination and checks the
+stability of the obtained model.  Augmented backward elimination combines
+significance or information based criteria with the change in estimate to
+either select the optimal model for prediction purposes or to serve as a tool
+to obtain a practically sound, highly interpretable model.")
+    (license license:gpl2+)))
+
+(define-public r-abf2
+  (package
+    (name "r-abf2")
+    (version "0.7-1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "abf2" version))
+       (sha256
+        (base32 "0d65mc1w4pbiv7xaqzdlw1bfsxf25587rv597hh41vs0j0zlfpxx"))))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/abf2/")
+    (synopsis "Load gap-free axon @code{r-abf2} files")
+    (description
+     "This package loads electrophysiology data from ABF2 files, as created by
+Axon Instruments/Molecular Devices software.  Only files recorded in gap-free
+mode are currently supported.")
+    (license license:artistic2.0)))
+
+(define-public r-abhgenotyper
+  (package
+    (name "r-abhgenotyper")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "ABHgenotypeR" version))
+       (sha256
+        (base32 "08cpmnaaxsm5c5bjifnfxdlvg5inrf13biqpcl2yq5zpqjmiki0l"))))
+    (properties `((upstream-name . "ABHgenotypeR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-ggplot2" ,r-ggplot2)
+       ("r-reshape2" ,r-reshape2)))
+    (home-page "https://github.com/StefanReuscher/ABHgenotypeR/")
+    (synopsis "Visualize and manipulate ABH genotypes")
+    (description
+     "The @code{r-abhgenotyper} package provides simple imputation,
+error-correction and plotting capacities for genotype data.  The package is
+supposed to serve as an intermediate but independent analysis tool between the
+TASSEL GBS pipeline and the @code{r-qtl} package.  It provides functionalities
+not found in either TASSEL or @code{r-qtl} in addition to visualization of
+genotypes as \"graphical genotypes\".")
+    (license license:gpl3)))
+
+(define-public r-abjutils
+  (package
+    (name "r-abjutils")
+    (version "0.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "abjutils" version))
+       (sha256
+        (base32 "0qrsc4if7aif73qp95lw6b5986c2r0jn7m39123zij8k15vc935b"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-devtools" ,r-devtools)
+       ("r-dplyr" ,r-dplyr)
+       ("r-glue" ,r-glue)
+       ("r-httr" ,r-httr)
+       ("r-magrittr" ,r-magrittr)
+       ("r-plyr" ,r-plyr)
+       ("r-progress" ,r-progress)
+       ("r-purrr" ,r-purrr)
+       ("r-rstudioapi" ,r-rstudioapi)
+       ("r-scales" ,r-scales)
+       ("r-stringi" ,r-stringi)
+       ("r-stringr" ,r-stringr)
+       ("r-tibble" ,r-tibble)
+       ("r-tidyr" ,r-tidyr)))
+    (home-page "https://github.com/abjur/abjutils/")
+    (synopsis "Collection of tools for jurimetrical analysis")
+    (description
+     "This package implements general purpose tools, such as functions for
+sampling and basic manipulation of Brazilian lawsuits identification number.
+It also implements functions for text cleaning, such as accentuation
+removal.")
+    (license license:expat)))
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index d9111135e8..33f4abb5ae 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -816,3 +816,41 @@ which is also used in the Advanced Encryption Standard (AES, see
 @url{http://www.nist.gov/aes}).  This cipher is believed to provide very strong
 security.")
     (license license:gpl2)))
+
+(define-public asignify
+  (let ((commit "f58e7977a599f040797975d649ed318e25cbd2d5")
+        (revision "0"))
+    (package
+      (name "asignify")
+      (version (git-version "1.1" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/vstakhov/asignify.git")
+                       (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1zl68qq6js6fdahxzyhvhrpyrwlv8c2zhdplycnfxyr1ckkhq8dw"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:configure-flags
+         (list "--enable-openssl"
+               (string-append "--with-openssl="
+                              (assoc-ref %build-inputs "openssl")))))
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("libtool" ,libtool)))
+      (inputs
+       `(("openssl" ,openssl-next)))
+      (home-page "https://github.com/vstakhov/asignify")
+      (synopsis "Cryptographic authentication and encryption tool and library")
+      (description "Asignify offers public cryptographic signatures and
+encryption with a library or a command-line tool.  The tool is heavily inspired
+by signify as used in OpenBSD.  The main goal of this project is to define a
+high level API for signing files, validating signatures and encrypting using
+public-key cryptography.  Asignify is designed to be portable and self-contained
+with zero external dependencies.  Asignify can verify OpenBSD signatures, but it
+cannot sign messages in OpenBSD format yet.")
+      (license license:bsd-2))))
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index ff33088cb4..4a7aaf7519 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -1457,7 +1457,7 @@ columns, primary keys, unique constraints and relationships.")
 (define-public perl-dbd-mysql
   (package
     (name "perl-dbd-mysql")
-    (version "4.046")
+    (version "4.047")
     (source
      (origin
        (method url-fetch)
@@ -1465,10 +1465,24 @@ columns, primary keys, unique constraints and relationships.")
                            "DBD-mysql-" version ".tar.gz"))
        (sha256
         (base32
-         "1xziv9w87cl3fbl1mqkdrx28mdqly3gs6gs1ynbmpl2rr4p6arb1"))))
+         "0idizgr0hr7sj92fbdlb3gv6cva15jkpaq28wrdw4j4p7awx2mls"))))
     (build-system perl-build-system)
-    ;; Tests require running MySQL server
-    (arguments `(#:tests? #f))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'skip-library-detection
+           ;; Avoid depencies on perl-devel-checklib, openssl, and zlib.  They
+           ;; are really only needed for the test suite; their absence does not
+           ;; affect the build or the end result.
+           (lambda _
+             (substitute* "Makefile.PL"
+               (("use Devel::CheckLib;" match)
+                (string-append "# " match))
+               (("assert_lib")
+                "print"))
+             #t)))
+       ;; Tests require running MySQL server.
+       #:tests? #f))
     (propagated-inputs
      `(("perl-dbi" ,perl-dbi)
        ("mysql" ,mysql)))
diff --git a/gnu/packages/ldc.scm b/gnu/packages/dlang.scm
index 2613db0abd..76988b2dbf 100644
--- a/gnu/packages/ldc.scm
+++ b/gnu/packages/dlang.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2015 Pjotr Prins <pjotr.guix@thebird.nl>
+;;; Copyright © 2015, 2018 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2017 Frederick Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -20,7 +20,7 @@
 ;;; 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 ldc)
+(define-module (gnu packages dlang)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -172,9 +172,9 @@ and freshness without requiring additional information from the user.")
               (base32
                "0z6ch930wjkg2vlnqkbliwxxxifad6ydsdpwdxwnajkb2kaxsjx4"))))))
       (home-page "http://wiki.dlang.org/LDC")
-      (synopsis "LLVM compiler for the D programming language")
+      (synopsis "LLVM-based compiler for the D programming language")
       (description
-       "LDC is a compiler for the D programming language.  It is based on
+       "LDC is an LLVM 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
@@ -188,11 +188,11 @@ bootstrapping more recent compilers written in D.")
   ;; 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"))
+  (let ((older-version "1.10.0")) ;; retain this because sometimes the libs are older
     (package
       (inherit ldc-bootstrap)
       (name "ldc")
-      (version "1.7.0")
+      (version "1.10.0")
       (source (origin
                 (method url-fetch)
                 (uri (string-append
@@ -201,7 +201,7 @@ bootstrapping more recent compilers written in D.")
                 (file-name (string-append name "-" version ".tar.gz"))
                 (sha256
                  (base32
-                  "0rqchmlbhz1pd8ksl1vfhfd5s3cp9h9pqi4k4w2np9sq0zr7abwn"))))
+                  "16b1h9kwfggjw6ykc6sfs26ak6vypylsx9wmvp5m6x3cvi6g70yi"))))
       (arguments
        `(#:phases
          (modify-phases %standard-phases
@@ -235,6 +235,8 @@ bootstrapping more recent compilers written in D.")
                (delete-file "tests/compilable/ctfe_math.d")
                (delete-file "tests/debuginfo/nested_gdb.d")
                (delete-file "tests/debuginfo/classtypes_gdb.d")
+               ;; the following tests plugins we don't have.
+               (delete-file "tests/plugins/addFuncEntryCall/testPlugin.d")
                ;; the following tests requires AVX instruction set in the CPU.
                (substitute* "tests/d2/dmd-testsuite/runnable/test_cdvecfill.d"
                 (("^// DISABLED: ") "^// DISABLED: linux64 "))
@@ -246,8 +248,8 @@ bootstrapping more recent compilers written in D.")
                       (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
                       (invoke "make" "test" "-j" (number->string (parallel-job-count))))))))
       (native-inputs
-       `(("llvm" ,llvm-3.8)
-         ("clang" ,clang-3.8)
+       `(("llvm" ,llvm)
+         ("clang" ,clang)
          ("ldc" ,ldc-bootstrap)
          ("python-lit" ,python-lit)
          ("python-wrapper" ,python-wrapper)
@@ -261,7 +263,7 @@ bootstrapping more recent compilers written in D.")
                    older-version ".tar.gz"))
              (sha256
               (base32
-               "042hn3v0zk353r0h6yclq56z86hi437y969bckyb2qsnv00h60hi"))
+               "0cpmrww00xf1qx38bcc22rr05qw41p00p45yb5fbwnfaccfwdn0s"))
              ;; This patch deactivates some tests that depend on network access
              ;; to pass.  It also deactivates some tests that have some reliance
              ;; on timezone.
@@ -271,7 +273,7 @@ bootstrapping more recent compilers written in D.")
              ;; 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.7.0-disable-phobos-tests.patch"))))
+             (patches (search-patches "ldc-disable-phobos-tests.patch"))))
          ("druntime-src"
           ,(origin
              (method url-fetch)
@@ -280,7 +282,7 @@ bootstrapping more recent compilers written in D.")
                    older-version ".tar.gz"))
              (sha256
               (base32
-               "0pvabk70zw8c1gbmvy2i486bg22bn0l5nbacjz0qwmhf0w9y9ylh"))))
+               "1akh2vdi98jih8642yjbvv2vavxzrmq24kz8i3kfidg5ndqyv222"))))
          ("dmd-testsuite-src"
           ,(origin
              (method url-fetch)
@@ -289,7 +291,7 @@ bootstrapping more recent compilers written in D.")
                    older-version ".tar.gz"))
              (sha256
               (base32
-               "1i8j1raah7b26bprwkdick443ivdsihgi1l14sn9rh4a95rnrpd9")))))))))
+               "0z5x07qrbkpksshaymp11ir6jlmg9wjicxn6zhp8cya6i1ha9p99")))))))))
 
 (define-public dub
   (package
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 29c3d9b923..00135294be 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -292,7 +292,7 @@ asynchronous fashion.")
 (define-public unbound
   (package
     (name "unbound")
-    (version "1.7.3")
+    (version "1.8.0")
     (source
      (origin
        (method url-fetch)
@@ -300,7 +300,7 @@ asynchronous fashion.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0bb0p8nbda77ghx20yfl7hqxm9x709223q35465v99i8v4ay27f1"))))
+         "0gxqc4ynd2g1a5dwaazqh9n8injh49a7dz0l9bbxqgv47dnrvxvq"))))
     (build-system gnu-build-system)
     (outputs '("out" "python"))
     (native-inputs
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index 82af1f233d..d8d7546e3c 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,8 +29,13 @@
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:select (gpl3+ lgpl3+ lgpl2.0+))
   #:use-module (gnu packages)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages m4)
-  #:use-module (gnu packages compression))
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages texinfo)
+  #:use-module (gnu packages xml))
 
 (define-public elfutils
   (package
@@ -85,6 +91,70 @@ Executable and Linkable Format (@dfn{ELF}).  This includes @command{ld},
     ;; Libraries are dual-licensed LGPLv3.0+ | GPLv2, and programs are GPLv3+.
     (license lgpl3+)))
 
+(define-public libabigail
+  (package
+    (name "libabigail")
+    (home-page "https://sourceware.org/libabigail/")
+    (version "1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://sourceware.org/pub/" name
+                                  "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "17r8i60lxykvdd9pdidmnvkzgf9k8zman0c1czl3zbx0znhlx497"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--disable-static"
+                           "--enable-bash-completion"
+                           "--enable-manual")
+       #:make-flags '("V=1")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'patch-source
+                    (lambda _
+                      (substitute* "build-aux/ltmain.sh"
+                        ;; Don't add -specs=/usr/lib/rpm/redhat/redhat-hardened-ld
+                        ;; to the GCC command line.
+                        (("compiler_flags=\"-specs=.*")
+                         "compiler_flags=\n"))
+                      #t))
+                  (add-after 'build 'build-documentation
+                    (lambda _
+                      (invoke "make" "-C" "doc/manuals" "html-doc" "man" "info")))
+                  (add-before 'check 'set-test-environment
+                    (lambda _
+                      (setenv "XDG_CACHE_HOME" "/tmp")
+                      #t))
+                  (add-after 'install 'install-documentation
+                    (lambda _
+                      (invoke "make" "-C" "doc/manuals"
+                              "install-man-and-info-doc")))
+                  (add-after 'install-documentation 'install-bash-completion
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (for-each (lambda (file)
+                                  (install-file
+                                   file (string-append (assoc-ref outputs "out")
+                                                       "/share/bash-completion"
+                                                       "/completions")))
+                                (find-files "bash-completion" ".*abi.*"))
+                      #t)))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("makeinfo" ,texinfo)
+       ("python-sphinx" ,python-sphinx)
+       ("python" ,python)))             ;for tests
+    (propagated-inputs
+     `(("elfutils" ,elfutils)           ;libabigail.la says -lelf
+       ("libxml2" ,libxml2)))           ;in Requires.private of libabigail.pc
+    (synopsis "Analyze application binary interfaces (ABIs)")
+    (description
+     "@dfn{ABIGAIL} stands for the Application Binary Interface Generic
+Analysis and Instrumentation Library.  It is a framework which aims at
+helping developers and software distributors to spot ABI-related issues
+like interface incompatibility in ELF shared libraries by performing a
+static analysis of the ELF binaries at hand.")
+    (license lgpl3+)))
+
 (define-public libelf
   (package
     (name "libelf")
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 1f64a5e84a..770ca3c496 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -64,6 +64,7 @@
   #:use-module (guix monads)
   #:use-module (guix store)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system emacs)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system trivial)
@@ -85,6 +86,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages lesstif)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages version-control)
@@ -114,6 +116,8 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages shells)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages haskell)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match))
@@ -1635,20 +1639,20 @@ and stored in memory.")
 (define-public emacs-bui
   (package
     (name "emacs-bui")
-    (version "1.1.0")
+    (version "1.2.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/alezost/bui.el/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://notabug.org/alezost/emacs-bui.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "112k0mq6xpy0r47vk66miw7rxbkv3d06pv3pd0vcmrhcnhnnk486"))))
+                "0ixia5s41f2nbal3wsixacbhbc0mk9yb75ir1amqakip30sq4apv"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("dash" ,emacs-dash)))
-    (home-page "https://github.com/alezost/bui.el")
+    (home-page "https://notabug.org/alezost/emacs-bui")
     (synopsis "Buffer interface library for Emacs")
     (description
      "BUI (Buffer User Interface) is a library for making @code{list} and
@@ -1659,38 +1663,42 @@ type, for example: packages, buffers, files, etc.")
 (define-public emacs-guix
   (package
     (name "emacs-guix")
-    (version "0.4.1.1")
+    (version "0.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://emacs-guix.gitlab.io/website/"
                                   "releases/emacs-guix-" version ".tar.gz"))
               (sha256
                (base32
-                "0jbnrcazbks7h50rngpw5l40a6vn2794kb53cpva3yzdjmrc1955"))))
+                "09zxd8x674vrpigmcx8l00ifhaxh35xwkwjb8dw9kydnhv9hyyi1"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (let ((guix        (assoc-ref %build-inputs "guix"))
+             (gcrypt      (assoc-ref %build-inputs "guile-gcrypt"))
              (geiser      (assoc-ref %build-inputs "geiser"))
              (dash        (assoc-ref %build-inputs "dash"))
              (bui         (assoc-ref %build-inputs "bui"))
              (magit-popup (assoc-ref %build-inputs "magit-popup"))
              (edit-indirect (assoc-ref %build-inputs "edit-indirect"))
-             (site-lisp   "/share/emacs/site-lisp"))
+             (site-lisp   "/share/emacs/site-lisp")
+             (site-scm    "/share/guile/site")
+             (site-go     "/lib/guile")
+             (guile-dir (lambda (dir)
+                          (car (find-files dir
+                                           (lambda (file stat)
+                                             (string-prefix?
+                                              "2." (basename file)))
+                                           #:directories? #t)))))
          (list (string-append "--with-guix-site-dir="
-                              (car (find-files (string-append guix
-                                                           "/share/guile/site")
-                                               (lambda (file stat)
-                                                 (string-prefix?
-                                                  "2."
-                                                  (basename file)))
-                                               #:directories? #t)))
+                              (guile-dir (string-append guix site-scm)))
                (string-append "--with-guix-site-ccache-dir="
-                              (car (find-files (string-append guix "/lib/guile")
-                                               (lambda (file stat)
-                                                 (string-prefix?
-                                                  "2." (basename file)))
-                                               #:directories? #t))
+                              (guile-dir (string-append guix site-go))
+                              "/site-ccache")
+               (string-append "--with-guile-gcrypt-site-dir="
+                              (guile-dir (string-append gcrypt site-scm)))
+               (string-append "--with-guile-gcrypt-site-ccache-dir="
+                              (guile-dir (string-append gcrypt site-go))
                               "/site-ccache")
                (string-append "--with-geiser-lispdir=" geiser site-lisp)
                (string-append "--with-dash-lispdir="
@@ -1713,6 +1721,7 @@ type, for example: packages, buffers, files, etc.")
        ("guix" ,guix)))
     (propagated-inputs
      `(("geiser" ,geiser)
+       ("guile-gcrypt" ,guile-gcrypt)
        ("dash" ,emacs-dash)
        ("bui" ,emacs-bui)
        ("edit-indirect" ,emacs-edit-indirect)
@@ -1729,21 +1738,21 @@ management tasks from Emacs.  To begin with, run @code{M-x guix-about} or
 (define-public emacs-build-farm
   (package
     (name "emacs-build-farm")
-    (version "0.2")
+    (version "0.2.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://gitlab.com/alezost-emacs/build-farm")
-                    (commit "fa7fa54901416fc5c216a5014394cbd73a61efc6")))
+                    (url "https://notabug.org/alezost/emacs-build-farm.git")
+                    (commit (string-append "v" version))))
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "1zw3pivma6cv9j7k7qm02jd6wnxmsc1v2mjcssd50im99zzrqflh"))))
+                "1a4ky0hca26p7f3i2c2s5517ygkyaaz52vs0vxy6f5q95rhlgdhd"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("bui" ,emacs-bui)
        ("magit-popup" ,emacs-magit-popup)))
-    (home-page "https://gitlab.com/alezost-emacs/build-farm")
+    (home-page "https://notabug.org/alezost/emacs-build-farm")
     (synopsis "Emacs interface for Hydra and Cuirass build farms")
     (description
      "This Emacs package provides an interface for Hydra and
@@ -2725,6 +2734,49 @@ front-ends.  Company comes with many back-ends, e.g. @code{company-elisp}.
 These are distributed in separate files and can be used individually.")
     (license license:gpl3+)))
 
+(define-public emacs-irony-mode
+  (package
+    (name "emacs-irony-mode")
+    (version "1.2.0")
+    (home-page "https://github.com/Sarcasm/irony-mode")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append home-page "/archive/v" version ".tar.gz"))
+              (sha256
+               (base32
+                "1f68zi0glkg2aly66s07rx3w0b0hdi1znxan02h6dbabaadylk99"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system emacs-build-system)
+    (arguments '())
+    (propagated-inputs
+     `(("emacs-irony-mode-server" ,emacs-irony-mode-server)))
+    (synopsis "C/C++/ObjC Code completion and syntax checks for Emacs")
+    (description "Irony-mode provides Clang-assisted syntax checking and
+completion for C, C++, and ObjC in GNU Emacs.  Using @code{libclang} it can
+provide syntax checking and autocompletion on compiler level which is very
+resistent against false positives.  It also integrates well with other
+packages like @code{eldoc-mode} and especially @code{company-mode} as
+described on the homepage.")
+    (license license:gpl3+)))
+
+(define-public emacs-irony-mode-server
+  (package (inherit emacs-irony-mode)
+    (name "emacs-irony-mode-server")
+    (inputs
+     `(("clang" ,clang)))
+    (propagated-inputs '())
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (invoke "cmake"
+                       "server"
+                       (string-append "-DCMAKE_INSTALL_PREFIX=" out)) #t))))))
+    (build-system cmake-build-system)
+    (synopsis "Server for the Emacs @dfn{irony mode}")))
+
 (define-public emacs-company-quickhelp
   (package
     (name "emacs-company-quickhelp")
@@ -3436,7 +3488,7 @@ regardless of @code{highlight-symbol-idle-delay}.
 (define-public emacs-hl-todo
   (package
     (name "emacs-hl-todo")
-    (version "1.8.0")
+    (version "1.9.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3445,7 +3497,7 @@ regardless of @code{highlight-symbol-idle-delay}.
               (file-name (string-append "hl-todo-" version ".el"))
               (sha256
                (base32
-                "0g0h9v4572p7mcird8wsj1c41haf60krslm6mlpi4mdbh248kv6z"))))
+                "0728givzh7xv5i88ac9if8byj1p8bilrj1fnizca10s0rv100hdr"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/tarsius/hl-todo")
     (synopsis "Emacs mode to highlight TODO and similar keywords")
@@ -4415,6 +4467,227 @@ If you want to mark a folder manually as a project just create an empty
 and RSS, with a user interface inspired by notmuch.")
     (license license:gpl3+)))
 
+(define-public emacs-el-x
+  (package
+    (name "emacs-el-x")
+    (version "0.3.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/sigma/el-x.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1i6j44ssxm1xdg0mf91nh1lnprwsaxsx8vsrf720nan7mfr283h5"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Move the source files to the top level, which is included in
+         ;; the EMACSLOADPATH.
+         (add-after 'unpack 'move-source-files
+           (lambda _
+             (let ((el-files (find-files "./lisp" ".*\\.el$")))
+               (for-each (lambda (f)
+                           (rename-file f (basename f)))
+                         el-files))
+             #t)))))
+    (home-page "https://github.com/sigma/el-x")
+    (synopsis "Emacs Lisp extensions")
+    (description "command@{emacs-el-x} defines the @code{dflet} macro to
+provide the historic behavior of @code{flet}, as well as
+@code{declare-function} stub for older Emacs.")
+    (license license:gpl2+)))
+
+(define-public emacs-mocker
+  (package
+    (name "emacs-mocker")
+    (version "0.3.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/sigma/mocker.el.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1lav7am41v63xgavq8pr88y828jmd1cxd4prjq7jlbxm6nvrwxh2"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:tests? #t
+       #:test-command '("ert-runner")))
+    (native-inputs
+     `(("ert-runner" ,ert-runner)))
+    (propagated-inputs
+     `(("emacs-el-x" ,emacs-el-x)))
+    (home-page "https://github.com/sigma/mocker.el")
+    (synopsis "Mocking framework for Emacs Lisp")
+    (description "Mocker.el is a framework for writing tests in Emacs Lisp.
+It uses regular Lisp rather than a domain specific language (DSL), which
+maximizes flexibility (at the expense of conciseness).")
+    (license license:gpl2+)))
+
+(define-public emacs-find-file-in-project
+  (package
+    (name "emacs-find-file-in-project")
+    (version "5.4.7")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/technomancy/find-file-in-project.git")
+                    (commit version)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1sdnyqv69mipbgs9yax88m9b6crsa59rjhwrih197pifl4089awr"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-shell
+           ;; Otherwise Emacs shell-file-name is set to "/bin/sh", which doesn't
+           ;; work.
+           (lambda _
+             (setenv "SHELL" (which "sh"))
+             #t)))
+       #:tests? #t
+       #:test-command '("./tests/test.sh")))
+    (home-page "https://github.com/technomancy/find-file-in-project")
+    (synopsis "File/directory finder for Emacs")
+    (description "@code{find-file-in-project} allows to find files or
+directories quickly in the current project.  The project root is detected
+automatically when Git, Subversion or Mercurial are used.  It also provides
+functions to assist in reviewing changes on files.")
+    (license license:gpl3+)))
+
+(define-public emacs-pyvenv
+  (package
+    (name "emacs-pyvenv")
+    (version "1.11")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/jorgenschaefer/pyvenv.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1a346qdimr1dvj53q033aqnahwd2dhyn9jadrs019nm0bzgw7g63"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; This phase incorrectly attempts to substitute "activate" and fails
+         ;; doing so.
+         (delete 'patch-el-files))
+       #:tests? #t
+       #:test-command '("ert-runner")))
+    (native-inputs
+     `(("ert-runner" ,ert-runner)
+       ("emacs-mocker" ,emacs-mocker)))
+    (home-page "https://github.com/jorgenschaefer/pyvenv")
+    (synopsis "Virtualenv minor mode for Emacs")
+    (description "pyvenv.el is a minor mode to support using Python virtual
+environments (virtualenv) inside Emacs.")
+    (license license:gpl3+)))
+
+(define-public emacs-highlight-indentation
+  (package
+    (name "emacs-highlight-indentation")
+    (version "0.7.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/antonj/Highlight-Indentation-for-Emacs.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "00l54k75qk24a0znzl4ij3s3nrnr2wy9ha3za8apphzlm98m907k"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/antonj/Highlight-Indentation-for-Emacs/")
+    (synopsis "Highlighting indentation for Emacs")
+    (description "Provides two minor modes to highlight indentation guides in Emacs:
+@enumerate
+@item @code{highlight-indentation-mode}, which displays guidelines
+indentation (space indentation only).
+@item @code{highlight-indentation-current-column-mode}, which displays guidelines for the current-point indentation (space indentation only).
+@end enumerate")
+    (license license:gpl2+)))
+
+(define-public emacs-elpy
+  (package
+    (name "emacs-elpy")
+    (version "1.24.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/jorgenschaefer/elpy.git")
+                    (commit version)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "0rsg8a9nwqfkv0xcs11jzfp10ij7jm0v2ikx19zv2v7awqy0q5wf"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:include (cons* "^elpy/[^/]+\\.py$" "^snippets\\/" %default-include)
+       #:phases
+       ;; TODO: Make `elpy-config' display Guix commands :)
+       (modify-phases %standard-phases
+         ;; One elpy test depends on being run inside a Python virtual
+         ;; environment to pass. We have nothing to gain from doing so here,
+         ;; so we just trick Elpy into thinking we are (see:
+         ;; https://github.com/jorgenschaefer/elpy/pull/1293).
+         (add-before 'check 'fake-virtualenv
+           (lambda _
+             (setenv "VIRTUAL_ENV" "/tmp")
+             #t))
+         (add-before 'check 'build-doc
+           (lambda _
+             (with-directory-excursion "docs"
+               (invoke "make" "info" "man"))
+             ;; Move .info file at the root so that it can installed by the
+             ;; 'move-doc phase.
+             (rename-file "docs/_build/texinfo/Elpy.info" "Elpy.info")
+              #t))
+         (add-after 'build-doc 'install-manpage
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out  (assoc-ref outputs "out"))
+                    (man1 (string-append out "/share/man/man1")))
+               (mkdir-p man1)
+               (copy-file "docs/_build/man/elpy.1"
+                          (string-append man1 "/elpy.1")))
+             #t)))
+       #:tests? #t
+       #:test-command '("ert-runner")))
+    (propagated-inputs
+     `(("emacs-company" ,emacs-company)
+       ("emacs-find-file-in-project" ,emacs-find-file-in-project)
+       ("emacs-highlight-indentation" ,emacs-highlight-indentation)
+       ("emacs-yasnippet" ,emacs-yasnippet)
+       ("pyvenv" ,emacs-pyvenv)
+       ("s" ,emacs-s)))
+    (native-inputs
+     `(("ert-runner" ,ert-runner)
+       ("emacs-f" ,emacs-f)
+       ("python" ,python-wrapper)
+       ("python-autopep8" ,python-autopep8)
+       ("python-black" ,python-black)
+       ("python-flake8" ,python-flake8)
+       ("python-jedi" ,python-jedi)
+       ("python-yapf" ,python-yapf)
+       ;; For documentation.
+       ("python-sphinx" ,python-sphinx)
+       ("texinfo" ,texinfo)))
+    (home-page "https://github.com/jorgenschaefer/elpy")
+    (synopsis "Python development environment for Emacs")
+    (description "Elpy brings powerful Python editing to Emacs.  It combines
+and configures a number of other packages written in Emacs Lisp as well as
+Python, together offering features such as navigation, documentation,
+completion, interactive development and more.")
+    (license license:gpl3+)))
+
 (define-public emacs-rainbow-delimiters
   (package
     (name "emacs-rainbow-delimiters")
@@ -4648,7 +4921,7 @@ ack, ag, helm and pt.")
 (define-public emacs-helm
   (package
     (name "emacs-helm")
-    (version "2.9.6")
+    (version "3.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -4657,7 +4930,7 @@ ack, ag, helm and pt.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1f7m09i8gr0gk5nw5dn7rpdz20dg3hl4p77dpygkhl82yhk9q2ql"))))
+                "0k2r0ccppaqfjvyszaxa16vf7g2qzj1clhfr6v646ncsy17laciw"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -4907,11 +5180,11 @@ extensions.")
       (license license:gpl3+))))
 
 (define-public emacs-evil-collection
-  (let ((commit "5d739f58118a5a316c4fe25adb4e13ccea3fdc10")
-        (revision "2"))
+  (let ((commit "b55ae90f367e103e6568ae00779a8a51c68a0104")
+        (revision "3"))
     (package
       (name "emacs-evil-collection")
-      (version (git-version "20180721" revision commit))
+      (version (git-version "20180911" revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -4920,7 +5193,7 @@ extensions.")
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "05p612qncd0cp5q61hq2ag1k558vhb10049xrc88n9l6qwz9bpk3"))))
+                  "0n7bzi5s7rqi78l1424sxvsk2g46z7ksq02xx5jrmqymnij90jml"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-evil" ,emacs-evil)))
@@ -5623,7 +5896,7 @@ Yasnippet.")
 (define-public emacs-helm-system-packages
   (package
     (name "emacs-helm-system-packages")
-    (version "1.10.0")
+    (version "1.10.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -5632,7 +5905,7 @@ Yasnippet.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0y5wzvfycb1bvgdk782xyl744fih43vz14wmq6gcqjarw6xfniz5"))))
+                "01by0c4lqi2cw8xmbxkjw7m9x78zssm31sx4hdpw5j35s2951j0f"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-helm" ,emacs-helm)))
@@ -9539,6 +9812,29 @@ The default setup uses helm-bibtex.
 You should really read org-ref.org in this package for details.")
       (license license:gpl3+))))
 
+(define-public emacs-org-reveal
+  (package
+    (name "emacs-org-reveal")
+    ;; There are no proper tag, so we use the latest commit of the stable
+    ;; branch, as does MELPA.
+    (version "20161027.926")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/yjwen/org-reveal.git")
+                    (commit "001567cc12d50ba07612edd1718b86a12e8c2547")))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "18rma8smjrskbjyna076zhvx79zs5r5vinb537h8mw13pfxd6cm8"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/yjwen/org-reveal")
+    (synopsis "Org and Reveal.js powered HTML presentation tool")
+    (description "Org-Reveal is a command@{org-mode} extension that allows to
+create beautiful presentations (slides) with 3D effects from simple but
+powerful Org contents.")
+    (license license:gpl3+)))
+
 (define-public emacs-add-hooks
   (package
     (name "emacs-add-hooks")
@@ -11691,37 +11987,35 @@ buffers – other modes on the TODO list).
       (license license:gpl3))))
 
 (define-public emacs-magit-todos
-  ;; TODO: <1.1 is broken with Guix.  Switch to 1.1 when out.
-  (let ((commit "966642762788d335dc2d3667d230a36ede65972e"))
-    (package
-      (name "emacs-magit-todos")
-      (version (git-version "1.0.4" "1" commit))
-      (source
-       (origin
-         (method git-fetch)
-         (uri (git-reference
-               (url "https://github.com/alphapapa/magit-todos")
-               (commit commit)))
-         (file-name (git-file-name name version))
-         (sha256
-          (base32
-           "0nxarip8sf0446xfgrcfsjm4vbsg50klxjbr4i6h09a3lri03gyp"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-async" ,emacs-async)
-         ("emacs-dash" ,emacs-dash)
-         ("emacs-f" ,emacs-f)
-         ("emacs-hl-todo" ,emacs-hl-todo)
-         ("magit" ,magit)
-         ("emacs-pcre2el" ,emacs-pcre2el)
-         ("emacs-s" ,emacs-s)))
-      (home-page "https://github.com/alphapapa/magit-todos")
-      (synopsis "Show source files' TODOs (and FIXMEs, etc) in Magit status buffer")
-      (description "This package displays keyword entries from source code
+  (package
+    (name "emacs-magit-todos")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alphapapa/magit-todos")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1mvzbxshr6zjdim3jd368ar1hy5l7n22i03cpvzdmrw83kkwdyhd"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-async" ,emacs-async)
+       ("emacs-dash" ,emacs-dash)
+       ("emacs-f" ,emacs-f)
+       ("emacs-hl-todo" ,emacs-hl-todo)
+       ("magit" ,magit)
+       ("emacs-pcre2el" ,emacs-pcre2el)
+       ("emacs-s" ,emacs-s)))
+    (home-page "https://github.com/alphapapa/magit-todos")
+    (synopsis "Show source files' TODOs (and FIXMEs, etc) in Magit status buffer")
+    (description "This package displays keyword entries from source code
 comments and Org files in the Magit status buffer.  Activating an item jumps
 to it in its file.  By default, it uses keywords from @code{hl-todo}, minus a
 few (like NOTE).")
-      (license license:gpl3))))
+    (license license:gpl3)))
 
 (define-public emacs-git-annex
   ;; Unreleased version has a fontification fix.
@@ -11749,3 +12043,135 @@ hiding the symbolic links and fontified based on whether content is present.
 Commands for performing some common operations (e.g., unlocking and adding
 files) are provided.")
       (license license:gpl2+))))
+
+(define-public emacs-hackernews
+  (let ((commit "d8c450bbc76d6bb65ec5cdb6c3b888a23f3769e9"))
+    (package
+      (name "emacs-hackernews")
+      (version (git-version "0.4.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/clarete/hackernews.el")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "06mp4n6c300jv5lhwf50ircfjckzr2p1zd38s4mqnxxjlf1maim7"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/clarete/hackernews.el")
+      (synopsis "Hacker News client for Emacs")
+      (description "The @command{hackernews} package is able to fetch stories
+from six different Hacker News feeds, namely top, new, best, ask, show and job
+stories.  The default feed is top stories, which corresponds to the Hacker
+News homepage.")
+      (license license:gpl3))))
+
+(define-public emacs-youtube-dl
+  (let ((commit "7c9d7a7d05b72a7d1b1257a36c5e2b2567b185dd"))
+    (package
+      (name "emacs-youtube-dl")
+      (version (git-version "1.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/skeeto/youtube-dl-emacs/")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0mh4s089a4x8s380agzb2306kdp1hl204px1n5rrrrdcls7imnh6"))))
+      (build-system emacs-build-system)
+      (inputs
+       `(("youtube-dl" ,youtube-dl)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'configure
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((youtube-dl (assoc-ref inputs "youtube-dl")))
+                 ;; .el is read-only in git.
+                 (chmod "youtube-dl.el" #o644)
+                 ;; Specify the absolute file names of the various
+                 ;; programs so that everything works out-of-the-box.
+                 (emacs-substitute-variables
+                     "youtube-dl.el"
+                   ("youtube-dl-program"
+                    (string-append youtube-dl "/bin/youtube-dl")))))))))
+      (home-page "https://github.com/skeeto/youtube-dl-emacs/")
+      (synopsis "Emacs youtube-dl download manager")
+      (description "This package manages a video download queue for
+@command{youtube-dl}, which serves as the back end.  It manages a single
+@command{youtube-dl} subprocess, downloading one video at a time.  New videos
+can be queued at any time.")
+      (license license:unlicense))))
+
+(define-public emacs-org-web-tools
+  (package
+    (name "emacs-org-web-tools")
+    (version "1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/alphapapa/org-web-tools")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0kak9h5ny00d39gnwspv53nadnag01brw2fq9zk5wpfc91h9bjng"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-esxml" ,emacs-esxml)
+       ("emacs-s" ,emacs-s)))
+    (inputs
+     `(("pandoc" ,ghc-pandoc)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-exec-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((pandoc (assoc-ref inputs "pandoc")))
+               (substitute* "org-web-tools.el"
+                 (("\"pandoc\"") (string-append "\"" pandoc "/bin/pandoc\"")))
+               #t))))))
+    (home-page "https://github.com/alphapapa/org-web-tools")
+    (synopsis "Display/Process web page as Org-mode content")
+    (description "This package contains library functions and commands useful
+for retrieving web page content and processing it into Org-mode content.
+
+For example, you can copy a URL to the clipboard or kill-ring, then run a
+command that downloads the page, isolates the “readable” content with
+@command{eww-readable}, converts it to Org-mode content with Pandoc, and
+displays it in an Org-mode buffer.  Another command does all of that but
+inserts it as an Org entry instead of displaying it in a new buffer.")
+    (license license:gpl3+)))
+
+(define-public emacs-blimp
+  (let ((commit "e420763d6d18b5d1be552cdbc47f91418343db03"))
+    (package
+      (name "emacs-blimp")
+      (version (git-version "0.0.0" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/walseb/blimp")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "09wmhpym516b81dfq8smdmysh1fn610dzlyvyl2rkx8600f0fizd"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-eimp" ,emacs-eimp)))
+      (home-page "https://github.com/walseb/blimp")
+      (synopsis "Emacs wrapper around all Imagemagick commands")
+      (description "Blimp (Bustling Image Manipulation Package) is a complete
+wrapper around all Imagemagick commands with descriptions, autocompletion (for
+some commands) and hints displayed in prompt using @command{eimp.el} to
+execute its commands and resize images.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index e02339af62..782bff5b18 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -1066,7 +1066,7 @@ emulation community.  It provides highly accurate emulation.")
         (base32 "0h6y2hpjg4b470jvn9ghwp0k3a527sbb6xhia17frlm9w9v5028w"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f                      ; no tests
+     `(#:tests? #f                      ; no tests
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
@@ -1079,12 +1079,21 @@ emulation community.  It provides highly accurate emulation.")
                  (("libvulkan.so") (string-append vulkan "/lib/libvulkan.so")))
                (substitute* "qb/qb.libs.sh"
                  (("/bin/true") (which "true")))
+               ;; Use shared zlib.
+               (substitute* '("libretro-common/file/archive_file_zlib.c"
+                              "libretro-common/streams/trans_stream_zlib.c"
+                              "network/httpserver/httpserver.c")
+                 (("<compat/zlib.h>") "<zlib.h>"))
                ;; 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)))))))))
+               (invoke
+                 "./configure"
+                 ,@(if (string-prefix? "armhf" (or (%current-target-system)
+                                                  (%current-system)))
+                       '("--enable-neon" "--enable-floathard")
+                       '())
+                 (string-append "--prefix=" out)
+                 (string-append "--global-config-dir=" etc))))))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("ffmpeg" ,ffmpeg)
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index ce07d3ad4c..218b04baa1 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -753,41 +753,51 @@ It contains the following fonts and styles:
 (define-public font-fantasque-sans
   (package
     (name "font-fantasque-sans")
-    (version "1.7.1")
+    (version "1.7.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/belluzj/fantasque-sans/"
-                           "archive/v" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/belluzj/fantasque-sans.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "07fpy53k2x2nz5q61swkab6cfk9gw2kc4x4brsj6zjgbm16fap85"))))
+         "1gjranq7qf20rfxnpxsckv1hl35nzsal0rjs475nhfbpqy5wmly6"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("ttfautohint" ,ttfautohint)
        ("woff-tools" ,woff-tools)
        ("fontforge" ,fontforge)
        ("woff2" ,woff2)
-       ("ttf2eot" ,ttf2eot)))
+       ("ttf2eot" ,ttf2eot)
+       ("zip" ,zip)))
     (arguments
      `(#:tests? #f                 ;test target intended for visual inspection
        #:phases (modify-phases %standard-phases
                   (delete 'configure)   ;no configuration
+                  (add-before 'build 'xrange->range
+                    ;; Rather than use a python2 fontforge, just replace the
+                    ;; offending function.
+                    (lambda _
+                      (substitute* "Scripts/fontbuilder.py"
+                        (("xrange") "range"))
+                      #t))
                   (replace 'install
                     ;; 'make install' wants to install to ~/.fonts, install to
-                    ;; output instead.
+                    ;; output instead.  Install only the "Normal" variant.
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((out (assoc-ref outputs "out"))
                              (font-dir (string-append out "/share/fonts"))
                              (truetype-dir (string-append font-dir "/truetype"))
                              (opentype-dir (string-append font-dir "/opentype"))
                              (webfonts-dir (string-append font-dir "/webfonts")))
-                        (copy-recursively "OTF" opentype-dir)
-                        (for-each (lambda (f) (install-file f truetype-dir))
-                                  (find-files "." "\\.ttf$"))
-                        (copy-recursively "Webfonts" webfonts-dir)
-                        #t))))))
+                        (with-directory-excursion "Variants/Normal"
+                          (copy-recursively "OTF" opentype-dir)
+                          (for-each (lambda (f) (install-file f truetype-dir))
+                                    (find-files "." "\\.ttf$"))
+                          (copy-recursively "Webfonts" webfonts-dir)
+                          #t)))))))
     (synopsis "Font family with a monospaced variant for programmers")
     (description
      "Fantasque Sans Mono is a programming font designed with functionality in
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index f687b9814d..d3f3ef711c 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -170,7 +170,7 @@ as required.")
 (define-public libfilezilla
   (package
     (name "libfilezilla")
-    (version "0.12.3")
+    (version "0.13.1")
     (source
      (origin
        (method url-fetch)
@@ -178,7 +178,7 @@ as required.")
                            name "/" name "-" version ".tar.bz2"))
        (sha256
         (base32
-         "1v606kcz2rdmmlwxrv3xvwh7ia1nh6jfc9bhjw2r4ai3rm16gch5"))))
+         "0347zkapp0wrhfm1yzw7wa1v3lww65ch176scifxn8f9068f1ixb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("cppunit" ,cppunit)
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index eb17b96492..b4c9c463f7 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -186,13 +186,13 @@ authentication and support for SSL3 and TLS.")
 (define-public gnurl
   (package
    (name "gnurl")
-   (version "7.61.0")
+   (version "7.61.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gnunet/" name "-" version ".tar.Z"))
             (sha256
              (base32
-              "1h03zkd9mp4xb5icirl3bfd64r5x8j9ka1hw9qd0n1ql1w0ilz23"))))
+              "0amnhhmlxaliz2rzp3zf1x6ixjqvgmiq7in0q14gd21rjlk9kvir"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                             ; 1.5 MiB of man3 pages
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index b1a65a14c7..5eb03a0186 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -1655,3 +1655,46 @@ Parcellite and adds bugfixes and features.")
 it does not deal with windowing system surfaces, drawing, scene graphs, or
 input.")
     (license license:expat)))
+
+(define-public yad
+  (package
+    (name "yad")
+    (version "0.40.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/v1cont/yad.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1vpgbjbkkbk5plicyklzpf65j1vlig4n4bi3qpvrz5bb09ic5alw"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       '("--with-gtk=gtk3"
+         "--enable-html"
+         "--enable-gio"
+         "--enable-spell"
+         "--enable-icon-browser")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'bootstrap
+           (lambda _
+             (invoke "autoreconf" "-vif")
+             (invoke "intltoolize" "--force" "--automake")
+             #t)))))
+    (inputs
+     `(("gtk+" ,gtk+)))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://sourceforge.net/projects/yad-dialog/")
+    (synopsis "GTK+ dialog boxes for shell scripts")
+    (description
+     "This program allows you to display GTK+ dialog boxes from command line or
+shell scripts.  Example of how to use @code{yad} can be consulted at
+@url{https://sourceforge.net/p/yad-dialog/wiki/browse_pages/}.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 7c88454300..cd49921493 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -2025,8 +2025,8 @@ convenient nested tree operations.")
     (license license:gpl3+)))
 
 (define-public guile-simple-zmq
-  (let ((commit "1f3b7c0b9b249c6fde8e8a632b252d8a1b794424")
-        (revision "1"))
+  (let ((commit "5bb66a0499f94006cfd18b58e80ad6623f911c31")
+        (revision "2"))
     (package
       (name "guile-simple-zmq")
       (version (git-version "0.0.0" revision commit))
@@ -2038,7 +2038,7 @@ convenient nested tree operations.")
                (commit commit)))
          (sha256
           (base32
-           "0nj2pd5bsmmgd3c54wh4sixfhmsv1arsq7yam2d7487h3n9q57r7"))
+           "0dj1brjqa7m4k71sf94aq26ca0la3nr894kfmjnqkpawqfp4dyaz"))
          (file-name (git-file-name name version))))
       (build-system guile-build-system)
       (arguments
@@ -2063,8 +2063,8 @@ messaging library.")
       (license license:gpl3+))))
 
 (define-public jupyter-guile-kernel
-  (let ((commit "a5c5f3ea3215b65e770bcb62f71117b0ec4575ed")
-        (revision "0"))
+  (let ((commit "a7db9245a886e104138474df46c3e88b95cff629")
+        (revision "1"))
     (package
       (name "jupyter-guile-kernel")
       (version (git-version "0.0.0" revision commit))
@@ -2076,7 +2076,7 @@ messaging library.")
                (commit commit)))
          (sha256
           (base32
-           "0y5jr0f0dyskvsawqbf6n0bpg8jirw4mhqbarf2a6p9lxhqha9s9"))))
+           "0aj04853bqm47ivfcmrgpb7w3wkis847kc7qrwsa5zcn9h38qh2f"))))
       (build-system guile-build-system)
       (arguments
        '(#:phases (modify-phases %standard-phases
@@ -2099,9 +2099,13 @@ messaging library.")
 
                     (add-after 'install 'install-kernel
                       (lambda* (#:key inputs outputs #:allow-other-keys)
-                        (let* ((out (assoc-ref outputs "out"))
-                               (dir (string-append
-                                     out "/share/jupyter/kernels/guile")))
+                        (let* ((out   (assoc-ref outputs "out"))
+                               (json  (assoc-ref inputs "guile-json"))
+                               (zmq   (assoc-ref inputs "guile-simple-zmq"))
+                               (deps  (list json zmq))
+                               (dir   (string-append
+                                       out "/share/jupyter/kernels/guile"))
+                               (effective (target-guile-effective-version)))
                           ;; Install kernel.
                           (install-file "src/kernel.json" dir)
 
@@ -2115,13 +2119,30 @@ messaging library.")
                              (string-append "\"" (assoc-ref inputs "guile")
                                             "/bin/guile\""))
                             (("-s")
-                             (string-append "--no-auto-compile\", \"-s")))
+                             ;; Add '-L' and '-C' flags so that the kernel
+                             ;; finds its dependencies.
+                             (let ((-L (map (lambda (item)
+                                              (string-append "\"" item
+                                                             "/share/guile/site/"
+                                                             effective "\""))
+                                            deps))
+                                   (-C (map (lambda (item)
+                                              (string-append "\"" item
+                                                             "/lib/guile/"
+                                                             effective
+                                                             "/site-ccache\""))
+                                            deps)))
+                              (string-append "--no-auto-compile\""
+                                             (string-join -L ", \"-L\", "
+                                                          'prefix)
+                                             (string-join -C ", \"-C\", "
+                                                          'prefix)
+                                             ", \"-s"))))
                           #t))))))
       (inputs
        `(("openssl" ,openssl)
-         ("guile" ,guile-2.2)))
-      (propagated-inputs
-       `(("guile-json" ,guile-json)
+         ("guile" ,guile-2.2)
+         ("guile-json" ,guile-json)
          ("guile-simple-zmq" ,guile-simple-zmq)))
       (synopsis "Guile kernel for the Jupyter Notebook")
       (description
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 690fa80512..1dbedf34d0 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Jonathan Brielmaier <jonathan.brielmaier@web.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +33,7 @@
   #:use-module (guix download)
   #:use-module ((guix licenses)
                 #:select (gpl2+ lgpl2.1+ lgpl3+ mpl1.1 mpl2.0
-                          non-copyleft x11-style))
+                          non-copyleft x11-style bsd-3))
   #:use-module (guix packages)
   #:use-module (guix utils)
   #:use-module (ice-9 match)
@@ -533,6 +534,35 @@ Aldus/Macromedia/Adobe FreeHand documents.")
 Microsoft Publisher documents of all versions.")
     (license mpl2.0)))
 
+(define-public libnumbertext
+  (package
+    (name "libnumbertext")
+    (version "1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/numbertext/" name
+                           "/archive/" version ".tar.gz"))
+       (sha256
+        (base32
+         "0wnsn4911fdd2na8jxkcvmk04a6xw6qlviic9w4qwg9fcym6866v"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--disable-static")))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/Numbertext/libnumbertext")
+    (synopsis "Language-neutral @code{NUMBERTEXT} and @code{MONEYTEXT} functions")
+    (description
+     "The libnumbertext library provides language-neutral @code{NUMBERTEXT}
+and @code{MONEYTEXT} functions for LibreOffice Calc, available for C++ and
+Java.")
+    (license (list lgpl3+ bsd-3))))
+
 (define-public libpagemaker
   (package
     (name "libpagemaker")
@@ -905,19 +935,19 @@ converting QuarkXPress file format.  It supports versions 3.1 to 4.1.")
 (define-public libreoffice
   (package
     (name "libreoffice")
-    (version "6.0.6.2")
+    (version "6.1.0.3")
     (source
      (origin
-      (method url-fetch)
-      (uri
+       (method url-fetch)
+       (uri
         (string-append
-          "https://download.documentfoundation.org/libreoffice/src/"
-          (version-prefix version 3) "/libreoffice-" version ".tar.xz"))
-      (sha256
-       (base32
-        "13kaikaz65xw9a3hxbh245cnydjpy58np22c7s0s65pnmcq68rpi"))
-      (patches (search-patches "libreoffice-icu.patch"
-                               "libreoffice-glm.patch"))))
+         "https://download.documentfoundation.org/libreoffice/src/"
+         (version-prefix version 3) "/libreoffice-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1n7b6abc0bp9x8lddx60w5br444wf62mdlkqmfk2zmkmiwkcvv2l"))
+       (patches (search-patches "libreoffice-icu.patch"
+                                "libreoffice-glm.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
@@ -958,6 +988,7 @@ converting QuarkXPress file format.  It supports versions 3.1 to 4.1.")
        ("libltdl" ,libltdl)
        ("libmspub" ,libmspub)
        ("libmwaw" ,libmwaw)
+       ("libnumbertext" ,libnumbertext)
        ("libodfgen" ,libodfgen)
        ("libpagemaker" ,libpagemaker)
        ("libqxp" ,libqxp)
@@ -984,6 +1015,7 @@ converting QuarkXPress file format.  It supports versions 3.1 to 4.1.")
        ("poppler" ,poppler)
        ("postgresql" ,postgresql)
        ("python" ,python)
+       ("python-lxml" ,python-lxml)
        ("redland" ,redland)
        ("sane-backends" ,sane-backends)
        ("unixodbc" ,unixodbc)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index dad5ba97b6..ffc68d9db5 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -399,8 +399,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.18.6")
-(define %linux-libre-hash "1l5caid77vbfb54zrfxkk7qj7lrf9ck9kpn96kr45spkwl51wm8m")
+(define %linux-libre-version "4.18.7")
+(define %linux-libre-hash "1gn3ip2blczfr5hl20x6c93z8v7h528kl423pzkcn22hin6717wd")
 
 (define %linux-libre-4.18-patches
   (list %boot-logo-patch
@@ -430,8 +430,8 @@ It has been modified to remove all non-free binary blobs.")
                     #:patches %linux-libre-4.18-patches
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.14-version "4.14.68")
-(define %linux-libre-4.14-hash "05l5y0vbbl60jxdbqglqr9c99a8g8lfsp4mcqfpcx1pkh5br7i3l")
+(define %linux-libre-4.14-version "4.14.69")
+(define %linux-libre-4.14-hash "08pw5hywlx3rsavj74qa17fm9hmhaw2rb1d3ahaqmd1zzsddb3qf")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -440,14 +440,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.125"
-                    "1saihk61l1kk42jf8yfsfkm77zalq31f0bdlam3c1g7yw702wj9g"
+  (make-linux-libre "4.9.126"
+                    "0qa9zxa7isn20b9sbjcyrqfynd00phddv3yindp5dmvsng1kwxj8"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.154"
-                    "08i9fvrmswkydj538wg6c7ggxmhll0ff0bjkw8rnyslqwilfwr1i"
+  (make-linux-libre "4.4.155"
+                    "1gcnwrgv0xghr550lcl6dmxdl59drzbi02mwp78g8vjql6ihdfys"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 7790e78779..9aa61bd8f8 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -703,40 +703,41 @@ computing environments.")
 (define-public python-scikit-learn
   (package
     (name "python-scikit-learn")
-    (version "0.19.1")
+    (version "0.19.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://github.com/scikit-learn/scikit-learn/archive/"
-             version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/scikit-learn/scikit-learn.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "18n8775kyfwbvcjjjzda9c5sqy4737c0hrmj6qj1ps2jmlqzair9"))
+         "1dk9hdj01c0bny4ps78b7869fjw9gr6qklxf6wyql8h6nh4k19xm"))
        (patches (search-patches
-                "python-scikit-learn-fix-test-non-determinism.patch"))))
+                 "python-scikit-learn-fix-test-non-determinism.patch"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (delete 'check)
-         (add-after 'install 'check
-           ;; Running tests from the source directory requires
-           ;; an "inplace" build with paths relative to CWD.
-           ;; http://scikit-learn.org/stable/developers/advanced_installation.html#testing
-           ;; Use the installed version instead.
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (add-installed-pythonpath inputs outputs)
-             ;; some tests require access to "$HOME"
-             (setenv "HOME" "/tmp")
-             ;; Step out of the source directory just to be sure.
-             (chdir "..")
-             (invoke "nosetests" "-v" "sklearn"))))))
+         (add-after 'build 'build-ext
+           (lambda _ (invoke "python" "setup.py" "build_ext" "--inplace") #t))
+         (replace 'check
+           (lambda _
+             ;; Restrict OpenBLAS threads to prevent segfaults while testing!
+             (setenv "OPENBLAS_NUM_THREADS" "1")
+             ;; Disable tests that require network access
+             (delete-file "sklearn/datasets/tests/test_mldata.py")
+             (delete-file "sklearn/datasets/tests/test_rcv1.py")
+             (invoke "pytest" "sklearn")
+             #t))
+         ;; FIXME: This fails with permission denied
+         (delete 'reset-gzip-timestamps))))
     (inputs
      `(("openblas" ,openblas)))
     (native-inputs
-     `(("python-nose" ,python-nose)
+     `(("python-pytest" ,python-pytest)
+       ("python-pandas" ,python-pandas) ;for tests
        ("python-cython" ,python-cython)))
     (propagated-inputs
      `(("python-numpy" ,python-numpy)
@@ -744,8 +745,8 @@ computing environments.")
     (home-page "http://scikit-learn.org/")
     (synopsis "Machine Learning in Python")
     (description
-     "Scikit-learn provides simple and efficient tools for data
-mining and data analysis.")
+     "Scikit-learn provides simple and efficient tools for data mining and
+data analysis.")
     (license license:bsd-3)))
 
 (define-public python2-scikit-learn
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 4ac07dd98c..59622dc01c 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -508,7 +508,11 @@ large scale eigenvalue problems.")
     (arguments
      (substitute-keyword-arguments (package-arguments arpack-ng)
        ((#:configure-flags _ '())
-        ''("--enable-mpi"))))
+        ''("--enable-mpi"))
+       ((#:phases phases '%standard-phases)
+        `(modify-phases ,phases
+           (add-before 'check 'mpi-setup
+             ,%openmpi-setup)))))
     (synopsis "Fortran subroutines for solving eigenvalue problems with MPI")))
 
 (define-public lapack
@@ -569,14 +573,8 @@ problems in numerical linear algebra.")
     (arguments
      `(#:configure-flags `("-DBUILD_SHARED_LIBS:BOOL=YES")
        #:phases (modify-phases %standard-phases
-                  (add-before 'check 'set-test-environment
-                    (lambda _
-                      ;; By default, running the test suite would fail because
-                      ;; 'ssh' could not be found in $PATH.  Define this
-                      ;; variable to placate Open MPI without adding a
-                      ;; dependency on OpenSSH (the agent isn't used anyway.)
-                      (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-                      #t)))))
+                  (add-before 'check 'mpi-setup
+		    ,%openmpi-setup))))
     (home-page "http://www.netlib.org/scalapack/")
     (synopsis "Library for scalable numerical linear algebra")
     (description
@@ -1707,14 +1705,8 @@ scientific applications modeled by partial differential equations.")
            ,@(delete "--with-mpi=0" ,cf)))
        ((#:phases phases)
         `(modify-phases ,phases
-           (add-before 'check 'set-test-environment
-             (lambda _
-               ;; By default, running the test suite would fail because 'ssh'
-               ;; could not be found in $PATH.  Define this variable to
-               ;; placate Open MPI without adding a dependency on OpenSSH (the
-               ;; agent isn't used anyway.)
-               (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-               #t))))))
+           (add-before 'check 'mpi-setup
+             ,%openmpi-setup)))))
     (synopsis "Library to solve PDEs (with MPI support)")))
 
 (define-public petsc-complex-openmpi
@@ -1845,14 +1837,8 @@ arising after the discretization of partial differential equations.")
      (substitute-keyword-arguments (package-arguments slepc)
        ((#:phases phases '%standard-phases)
         `(modify-phases ,phases
-           (add-before 'check 'set-test-environment
-             (lambda _
-               ;; By default, running the test suite would fail because 'ssh'
-               ;; could not be found in $PATH.  Define this variable to
-               ;; placate Open MPI without adding a dependency on OpenSSH (the
-               ;; agent isn't used anyway.)
-               (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-               #t))))))
+           (add-before 'check 'mpi-setup
+	     ,%openmpi-setup)))))
     (inputs
      `(("mpi" ,openmpi)
        ("arpack" ,arpack-ng-openmpi)
@@ -2022,14 +2008,8 @@ sparse system of linear equations A x = b using Guassian elimination.")
      (substitute-keyword-arguments (package-arguments mumps)
        ((#:phases phases)
         `(modify-phases ,phases
-           (add-before 'check 'set-test-environment
-             (lambda _
-               ;; By default, running the test suite would fail because 'ssh'
-               ;; could not be found in $PATH.  Define this variable to
-               ;; placate Open MPI without adding a dependency on OpenSSH (the
-               ;; agent isn't used anyway.)
-               (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-               #t))
+           (add-before 'check 'mpi-setup
+	     ,%openmpi-setup)
            (replace 'check
              (lambda _
                ((assoc-ref ,phases 'check)
@@ -2275,13 +2255,10 @@ CDEFS       = -DAdd_"
                                         "/" dir)))
               '("lib" "include"))
              #t))
+	 (add-before 'check 'mpi-setup
+	   ,%openmpi-setup)
          (replace 'check
            (lambda _
-             ;; By default, running the test suite would fail because 'ssh'
-             ;; could not be found in $PATH.  Define this variable to placate
-             ;; Open MPI without adding a dependency on OpenSSH (the agent
-             ;; isn't used anyway.)
-             (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
              (with-directory-excursion "EXAMPLE"
                (invoke "mpirun" "-n" "2"
                        "./pddrive" "-r" "1" "-c" "2" "g20.rua")
@@ -2374,15 +2351,8 @@ YACC = bison -pscotchyy -y -b y
                           ;; "SCOTCH_PTHREAD_NUMBER=2"
                           "restrict=__restrict"))))
             #t))
-         (add-after
-          'build 'build-esmumps
+         (add-after 'build 'build-esmumps
           (lambda _
-            ;; By default, running the test suite would fail because 'ssh'
-            ;; could not be found in $PATH.  Define this variable to placate
-            ;; Open MPI without adding a dependency on OpenSSH (the agent
-            ;; isn't used anyway.)
-            (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-
             (invoke "make"
                     (format #f "-j~a" (parallel-job-count))
                     "esmumps")))
@@ -2565,14 +2535,8 @@ schemes.")
                                            (assoc-ref %build-inputs "lapack")
                                            " -llapack"))
        #:phases (modify-phases %standard-phases
-                  (add-before 'check 'set-test-environment
-                    (lambda _
-                      ;; By default, running the test suite would fail because
-                      ;; 'ssh' could not be found in $PATH.  Define this
-                      ;; variable to placate Open MPI without adding a
-                      ;; dependency on OpenSSH (the agent isn't used anyway.)
-                      (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-                      #t)))))
+                  (add-before 'check 'mpi-setup
+		    ,%openmpi-setup))))
     (home-page "http://www.p4est.org")
     (synopsis "Adaptive mesh refinement on forests of octrees")
     (description
@@ -3639,14 +3603,8 @@ problems.")
            ,@(delete "--without-MPI" ,flags)))
        ((#:phases phases)
         `(modify-phases ,phases
-           (add-before 'check 'set-test-environment
-             (lambda _
-               ;; By default, running the test suite would fail because 'ssh'
-               ;; could not be found in $PATH.  Define this variable to
-               ;; placate Open MPI without adding a dependency on OpenSSH (the
-               ;; agent isn't used anyway.)
-               (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-               #t))))))
+           (add-before 'check 'mpi-setup
+	     ,%openmpi-setup)))))
     (synopsis "Parallel solvers and preconditioners for linear equations")
     (description
      "HYPRE is a software library of high performance preconditioners and
@@ -3929,6 +3887,8 @@ exclusion algorithms are typical examples of such systems.")
                            "-DCMAKE_INSTALL_LIBDIR=lib"
                            "-DGFORTRAN_LIB=gfortran")
        #:phases (modify-phases %standard-phases
+		  (add-before 'check 'mpi-setup
+		    ,%openmpi-setup)
                   (add-before 'check 'setup-tests
                     (lambda _
                       ;; Parallelism is done at the MPI layer.
@@ -3975,7 +3935,7 @@ toolset supports analysis and automatic verification, linearisation, simulation,
 state-space exploration and generation, and tools to optimise and analyse
 specifications.  Also, state spaces can be manipulated, visualised and
 analysed.")
-    (home-page "http://mcrl2.org")
+    (home-page "https://mcrl2.org")
     (license license:boost1.0)))
 
 (define-public r-subplex
@@ -4113,16 +4073,6 @@ easily be incorporated into existing simulation codes.")
                 ,flags))
        ((#:phases phases '%standard-phases)
         `(modify-phases ,phases
-           (add-before 'check 'set-test-environment
-             (lambda _
-               ;; By default, running the test suite would fail because 'ssh'
-               ;; could not be found in $PATH.  Define this variable to
-               ;; placate Open MPI without adding a dependency on OpenSSH (the
-               ;; agent isn't used anyway.)
-               (setenv "OMPI_MCA_plm_rsh_agent" (which "cat"))
-               ;; Allow oversubscription in case there are less
-               ;; physical cores available in the build environment
-               ;; than SUNDIALS wants while testing.
-               (setenv "OMPI_MCA_rmaps_base_oversubscribe" "yes")
-               #t))))))
+           (add-before 'check 'mpi-setup
+	     ,%openmpi-setup)))))
     (synopsis "SUNDIALS with OpenMPI support")))
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index 63a8db449a..880e140b80 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -66,7 +66,7 @@ extensive examples, including parsers for the Javascript and C99 languages.")
       (version "0.17.1")
       (source (origin
                 (method url-fetch)
-                (uri (string-append "http://alpha.gnu.org/gnu/mes/"
+                (uri (string-append "mirror://gnu/mes/"
                                     "mes-" version ".tar.gz"))
                 (patches (search-patches "mes-nyacc-0.86.0.patch"))
                 (sha256
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index f34b08e4ca..7dfec16fc7 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014, 2015, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
@@ -250,3 +250,15 @@ software vendors, application developers and computer science researchers.")
 work correctly with all transports (such as @code{openib}), and the
 performance is generally worse than the vanilla @code{openmpi} package, which
 only provides @code{MPI_THREAD_FUNNELED}.")))
+
+;;; Build phase to be used for packages that execute MPI code.
+(define-public %openmpi-setup
+  '(lambda _
+     ;; By default, running the test suite would fail because 'ssh' could not
+     ;; be found in $PATH.  Define this variable to placate Open MPI without
+     ;; adding a dependency on OpenSSH (the agent isn't used anyway.)
+     (setenv "OMPI_MCA_plm_rsh_agent" (which "false"))
+     ;; Allow oversubscription in case there are less physical cores available
+     ;; in the build environment than the package wants while testing.
+     (setenv "OMPI_MCA_rmaps_base_oversubscribe" "yes")
+     #t))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index e39478e794..e563062018 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -2198,28 +2198,17 @@ from the command line.")
 (define-public qtractor
   (package
     (name "qtractor")
-    (version "0.9.1")
+    (version "0.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://downloads.sourceforge.net/qtractor/"
                                   "qtractor-" version ".tar.gz"))
               (sha256
                (base32
-                "07csbqr7q4m1j0pqg89kn7jdw0snd5lwna5rha0986s4plq4z1qb"))))
+                "1j3rpvdkw9rw48j4zyfn6rprp01csy4rl6zckcjyx0vh7vaycchr"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f  ; no "check" target
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-build-with-qt-5.11
-           (lambda _
-             (substitute* "src/qtractorMeter.h"
-               (("#include <QFrame>" m)
-                (string-append "#include <QAction>\n" m)))
-             (substitute* "src/qtractorTrackButton.h"
-               (("#include <QPushButton>" m)
-                (string-append "#include <QAction>\n" m)))
-             #t)))))
+     `(#:tests? #f))                    ; no "check" target
     (inputs
      `(("qt" ,qtbase)
        ("qtx11extras" ,qtx11extras)
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index a7adfcd5d5..9396588fc8 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -30,7 +30,7 @@
 (define-public nano
   (package
     (name "nano")
-    (version "2.9.8")
+    (version "3.0")
     (source
      (origin
       (method url-fetch)
@@ -38,7 +38,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "122lm0z97wk3mgnbn8m4d769d4j9rxyc9z7s89xd4gsdp8qsrpn2"))))
+        "1868hg9s584fwjrh0fzdrixmxc2qhw520z4q5iv68kjiajivr9g0"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
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
deleted file mode 100644
index ccc136cc76..0000000000
--- a/gnu/packages/patches/ldc-1.7.0-disable-phobos-tests.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-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-phobos-tests.patch b/gnu/packages/patches/ldc-disable-phobos-tests.patch
new file mode 100644
index 0000000000..f8a9743d59
--- /dev/null
+++ b/gnu/packages/patches/ldc-disable-phobos-tests.patch
@@ -0,0 +1,22 @@
+diff --git a/std/socket.d b/std/socket.d
+index 111cd17..6d23da9 100644
+--- a/std/socket.d
++++ b/std/socket.d
+@@ -448,7 +448,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
+ {
+     // import std.stdio : writefln;
+     softUnittest({
+@@ -770,7 +770,7 @@ class InternetHost
+ }
+ 
+ ///
+-@safe unittest
++@safe version(hasNetwork) unittest
+ {
+     InternetHost ih = new InternetHost;
+ 
diff --git a/gnu/packages/patches/python-genshi-add-support-for-python-3.4-AST.patch b/gnu/packages/patches/python-genshi-add-support-for-python-3.4-AST.patch
deleted file mode 100644
index 4e40c1daa1..0000000000
--- a/gnu/packages/patches/python-genshi-add-support-for-python-3.4-AST.patch
+++ /dev/null
@@ -1,151 +0,0 @@
-From 86b98a11559da7d1b21dc9b4c6b10511b9095bc4 Mon Sep 17 00:00:00 2001
-From: Simon Cross <hodgestar@gmail.com>
-Date: Sun, 16 Feb 2014 18:46:15 +0000
-Subject: [PATCH 05/16] Add support for Python 3.4 AST (support for
- NameConstants and changes to existing to arguments node attributes).
-
----
- genshi/template/astutil.py | 31 ++++++++++++++++++++++++++++---
- genshi/template/eval.py    | 34 +++++++++++++++++++---------------
- 2 files changed, 47 insertions(+), 18 deletions(-)
-
-diff --git a/genshi/template/astutil.py b/genshi/template/astutil.py
-index a4c21c8..a3946b4 100644
---- a/genshi/template/astutil.py
-+++ b/genshi/template/astutil.py
-@@ -21,7 +21,7 @@ else:
-     def parse(source, mode):
-         return compile(source, '', mode, _ast.PyCF_ONLY_AST)
- 
--from genshi.compat import IS_PYTHON2
-+from genshi.compat import IS_PYTHON2, isstring
- 
- __docformat__ = 'restructuredtext en'
- 
-@@ -103,8 +103,13 @@ class ASTCodeGenerator(object):
-         self._new_line()
-         return self.visit(node.body)
- 
-+    # Python < 3.4
-     # arguments = (expr* args, identifier? vararg,
-     #              identifier? kwarg, expr* defaults)
-+    #
-+    # Python >= 3.4
-+    # arguments = (arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults,
-+    #              arg? kwarg, expr* defaults)
-     def visit_arguments(self, node):
-         first = True
-         no_default_count = len(node.args) - len(node.defaults)
-@@ -122,13 +127,21 @@ class ASTCodeGenerator(object):
-                 self._write(', ')
-             else:
-                 first = False
--            self._write('*' + node.vararg)
-+            self._write('*')
-+            if isstring(node.vararg):
-+                self._write(node.vararg)
-+            else:
-+                self.visit(node.vararg)
-         if getattr(node, 'kwarg', None):
-             if not first:
-                 self._write(', ')
-             else:
-                 first = False
--            self._write('**' + node.kwarg)
-+            self._write('**')
-+            if isstring(node.kwarg):
-+                self._write(node.kwarg)
-+            else:
-+                self.visit(node.kwarg)
- 
-     if not IS_PYTHON2:
-         # In Python 3 arguments get a special node
-@@ -724,6 +737,17 @@ class ASTCodeGenerator(object):
-     def visit_Name(self, node):
-         self._write(node.id)
- 
-+    # NameConstant(singleton value)
-+    def visit_NameConstant(self, node):
-+        if node.value is None:
-+            self._write('None')
-+        elif node.value is True:
-+            self._write('True')
-+        elif node.value is False:
-+            self._write('False')
-+        else:
-+            raise Exception("Unknown NameConstant %r" % (node.value,))
-+
-     # List(expr* elts, expr_context ctx)
-     def visit_List(self, node):
-         self._write('[')
-@@ -829,6 +853,7 @@ class ASTTransformer(object):
-     visit_Attribute = _clone
-     visit_Subscript = _clone
-     visit_Name = _clone
-+    visit_NameConstant = _clone
-     visit_List = _clone
-     visit_Tuple = _clone
- 
-diff --git a/genshi/template/eval.py b/genshi/template/eval.py
-index 89aec49..de4bc86 100644
---- a/genshi/template/eval.py
-+++ b/genshi/template/eval.py
-@@ -24,7 +24,8 @@ from genshi.template.astutil import ASTTransformer, ASTCodeGenerator, \
- from genshi.template.base import TemplateRuntimeError
- from genshi.util import flatten
- 
--from genshi.compat import get_code_params, build_code_chunk, IS_PYTHON2
-+from genshi.compat import get_code_params, build_code_chunk, isstring, \
-+                          IS_PYTHON2
- 
- __all__ = ['Code', 'Expression', 'Suite', 'LenientLookup', 'StrictLookup',
-            'Undefined', 'UndefinedError']
-@@ -495,28 +496,31 @@ class TemplateASTTransformer(ASTTransformer):
-     def __init__(self):
-         self.locals = [CONSTANTS]
- 
-+    def _process(self, names, node):
-+        if not IS_PYTHON2 and isinstance(node, _ast.arg):
-+            names.add(node.arg)
-+        elif isstring(node):
-+            names.add(node)
-+        elif isinstance(node, _ast.Name):
-+            names.add(node.id)
-+        elif isinstance(node, _ast.alias):
-+            names.add(node.asname or node.name)
-+        elif isinstance(node, _ast.Tuple):
-+            for elt in node.elts:
-+                self._process(names, elt)
-+
-     def _extract_names(self, node):
-         names = set()
--        def _process(node):
--            if not IS_PYTHON2 and isinstance(node, _ast.arg):
--                names.add(node.arg)
--            if isinstance(node, _ast.Name):
--                names.add(node.id)
--            elif isinstance(node, _ast.alias):
--                names.add(node.asname or node.name)
--            elif isinstance(node, _ast.Tuple):
--                for elt in node.elts:
--                    _process(elt)
-         if hasattr(node, 'args'):
-             for arg in node.args:
--                _process(arg)
-+                self._process(names, arg)
-             if hasattr(node, 'vararg'):
--                names.add(node.vararg)
-+                self._process(names, node.vararg)
-             if hasattr(node, 'kwarg'):
--                names.add(node.kwarg)
-+                self._process(names, node.kwarg)
-         elif hasattr(node, 'names'):
-             for elt in node.names:
--                _process(elt)
-+                self._process(names, elt)
-         return names
- 
-     def visit_Str(self, node):
--- 
-2.12.0
-
diff --git a/gnu/packages/patches/python-genshi-buildable-on-python-2.7.patch b/gnu/packages/patches/python-genshi-buildable-on-python-2.7.patch
deleted file mode 100644
index 2bc516c697..0000000000
--- a/gnu/packages/patches/python-genshi-buildable-on-python-2.7.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From 32bfaa7cc1c736fd62fcbb6414de9498dc20ed07 Mon Sep 17 00:00:00 2001
-From: Adriano Peluso <catonano@gmail.com>
-Date: Wed, 5 Apr 2017 15:13:06 +0200
-Subject: [PATCH 2/2] buildable on python27 too
-
----
- genshi/template/directives.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/genshi/template/directives.py b/genshi/template/directives.py
-index 6fd0f28..1f70ef6 100644
---- a/genshi/template/directives.py
-+++ b/genshi/template/directives.py
-@@ -266,7 +266,7 @@ class DefDirective(Directive):
-         if isinstance(ast, _ast.Call):
-             self.name = ast.func.id
-             for arg in ast.args:
--                if isinstance(arg, _ast.Starred):
-+                if hasattr(_ast, 'Starred') and isinstance(arg, _ast.Starred):
-                     # Python 3.5+
-                     self.star_args = arg.value.id
-                 else:
--- 
-2.12.0
-
diff --git a/gnu/packages/patches/python-genshi-disable-speedups-on-python-3.3.patch b/gnu/packages/patches/python-genshi-disable-speedups-on-python-3.3.patch
deleted file mode 100644
index c25c3bd7a9..0000000000
--- a/gnu/packages/patches/python-genshi-disable-speedups-on-python-3.3.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From cef2c8df44166195e1705638f9f17033a4943bb7 Mon Sep 17 00:00:00 2001
-From: Simon Cross <hodgestar@gmail.com>
-Date: Sun, 16 Feb 2014 18:32:21 +0000
-Subject: [PATCH 02/15] Disable the speedups C extension on CPython >= 3.3
- since Genshi doesn't support the new Unicode C API yet.
-
----
- setup.py | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index 123a2cb..a3d748c 100755
---- a/setup.py
-+++ b/setup.py
-@@ -65,9 +65,13 @@ available.""")
- 
- 
- if Feature:
-+    # Optional C extension module for speeding up Genshi:
-+    # Not activated by default on:
-+    # - PyPy (where it harms performance)
-+    # - CPython >= 3.3 (the new Unicode C API is not supported yet)
-     speedups = Feature(
-         "optional C speed-enhancements",
--        standard = not is_pypy,
-+        standard = not is_pypy and sys.version_info < (3, 3),
-         ext_modules = [
-             Extension('genshi._speedups', ['genshi/_speedups.c']),
-         ],
--- 
-2.12.0
-
diff --git a/gnu/packages/patches/python-genshi-fix-tests-on-python-3.5.patch b/gnu/packages/patches/python-genshi-fix-tests-on-python-3.5.patch
deleted file mode 100644
index 05be080cdf..0000000000
--- a/gnu/packages/patches/python-genshi-fix-tests-on-python-3.5.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From ce796ad4bae5c47011876778674ad036357febdf Mon Sep 17 00:00:00 2001
-From: Adriano Peluso <catonano@gmail.com>
-Date: Wed, 5 Apr 2017 15:10:06 +0200
-Subject: [PATCH 1/2] fixing the tests on python35
-
----
- genshi/filters/i18n.py        |  6 ++++--
- genshi/template/astutil.py    | 14 +++++++++++---
- genshi/template/directives.py | 20 ++++++++++++++------
- genshi/template/eval.py       |  5 +++++
- 4 files changed, 34 insertions(+), 11 deletions(-)
-
-diff --git a/genshi/filters/i18n.py b/genshi/filters/i18n.py
-index 526fda4..5387fcf 100644
---- a/genshi/filters/i18n.py
-+++ b/genshi/filters/i18n.py
-@@ -1194,8 +1194,10 @@ def extract_from_code(code, gettext_functions):
-                 elif arg:
-                     strings.append(None)
-             [_add(arg) for arg in node.args]
--            _add(node.starargs)
--            _add(node.kwargs)
-+            if hasattr(node, 'starargs'):
-+                _add(node.starargs)
-+            if hasattr(node, 'kwargs'):
-+                _add(node.kwargs)
-             if len(strings) == 1:
-                 strings = strings[0]
-             else:
-diff --git a/genshi/template/astutil.py b/genshi/template/astutil.py
-index f4e1edd..e561846 100644
---- a/genshi/template/astutil.py
-+++ b/genshi/template/astutil.py
-@@ -151,6 +151,10 @@ class ASTCodeGenerator(object):
-         def visit_arg(self, node):
-             self._write(node.arg)
- 
-+    def visit_Starred(self, node):
-+        self._write('*')
-+        self.visit(node.value)
-+
-     # FunctionDef(identifier name, arguments args,
-     #                           stmt* body, expr* decorator_list)
-     def visit_FunctionDef(self, node):
-@@ -664,9 +668,13 @@ class ASTCodeGenerator(object):
-             if not first:
-                 self._write(', ')
-             first = False
--            # keyword = (identifier arg, expr value)
--            self._write(keyword.arg)
--            self._write('=')
-+            if not keyword.arg:
-+                # Python 3.5+ star-star args
-+                self._write('**')
-+            else:
-+                # keyword = (identifier arg, expr value)
-+                self._write(keyword.arg)
-+                self._write('=')
-             self.visit(keyword.value)
-         if getattr(node, 'starargs', None):
-             if not first:
-diff --git a/genshi/template/directives.py b/genshi/template/directives.py
-index 7301c2d..6fd0f28 100644
---- a/genshi/template/directives.py
-+++ b/genshi/template/directives.py
-@@ -266,13 +266,21 @@ class DefDirective(Directive):
-         if isinstance(ast, _ast.Call):
-             self.name = ast.func.id
-             for arg in ast.args:
--                # only names
--                self.args.append(arg.id)
-+                if isinstance(arg, _ast.Starred):
-+                    # Python 3.5+
-+                    self.star_args = arg.value.id
-+                else:
-+                    # only names
-+                    self.args.append(arg.id)
-             for kwd in ast.keywords:
--                self.args.append(kwd.arg)
--                exp = Expression(kwd.value, template.filepath,
--                                 lineno, lookup=template.lookup)
--                self.defaults[kwd.arg] = exp
-+                if kwd.arg is None:
-+                    # Python 3.5+
-+                    self.dstar_args = kwd.value.id
-+                else:
-+                    self.args.append(kwd.arg)
-+                    exp = Expression(kwd.value, template.filepath,
-+                                     lineno, lookup=template.lookup)
-+                    self.defaults[kwd.arg] = exp
-             if getattr(ast, 'starargs', None):
-                 self.star_args = ast.starargs.id
-             if getattr(ast, 'kwargs', None):
-diff --git a/genshi/template/eval.py b/genshi/template/eval.py
-index d378419..81644a7 100644
---- a/genshi/template/eval.py
-+++ b/genshi/template/eval.py
-@@ -600,6 +600,11 @@ class TemplateASTTransformer(ASTTransformer):
-         finally:
-             self.locals.pop()
- 
-+    # Only used in Python 3.5+
-+    def visit_Starred(self, node):
-+        node.value = self.visit(node.value)
-+        return node
-+
-     def visit_Name(self, node):
-         # If the name refers to a local inside a lambda, list comprehension, or
-         # generator expression, leave it alone
--- 
-2.12.0
-
diff --git a/gnu/packages/patches/python-genshi-isstring-helper.patch b/gnu/packages/patches/python-genshi-isstring-helper.patch
deleted file mode 100644
index 4f6c19bba9..0000000000
--- a/gnu/packages/patches/python-genshi-isstring-helper.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From cc5e07284f44cdd9beec178c69070a53f55d1323 Mon Sep 17 00:00:00 2001
-From: Simon Cross <hodgestar@gmail.com>
-Date: Sun, 16 Feb 2014 18:43:20 +0000
-Subject: [PATCH 03/15] Add isstring helper.
-
----
- genshi/compat.py | 10 +++++++++-
- 1 file changed, 9 insertions(+), 1 deletion(-)
-
-diff --git a/genshi/compat.py b/genshi/compat.py
-index 9787325..6574e39 100644
---- a/genshi/compat.py
-+++ b/genshi/compat.py
-@@ -35,6 +35,15 @@ else:
-                 'Python 2 compatibility function. Not usable in Python 3.')
- 
- 
-+# We need to test if an object is an instance of a string type in places
-+
-+if IS_PYTHON2:
-+    def isstring(obj):
-+        return isinstance(obj, basestring)
-+else:
-+    def isstring(obj):
-+        return isinstance(obj, str)
-+
- # We need to differentiate between StringIO and BytesIO in places
- 
- if IS_PYTHON2:
-@@ -112,4 +121,3 @@ except NameError:
-             if not x:
-                 return False
-         return True
--
--- 
-2.12.0
-
diff --git a/gnu/packages/patches/python-genshi-stripping-of-unsafe-script-tags.patch b/gnu/packages/patches/python-genshi-stripping-of-unsafe-script-tags.patch
deleted file mode 100644
index 29951a6149..0000000000
--- a/gnu/packages/patches/python-genshi-stripping-of-unsafe-script-tags.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 0769be04c3891ae5c724c6779ba13d1d0f53b4ae Mon Sep 17 00:00:00 2001
-From: Simon Cross <hodgestar@gmail.com>
-Date: Sun, 16 Feb 2014 18:25:17 +0000
-Subject: [PATCH 01/15] Also allow stripping of unsafe script tags (Python 3.4
- parses the second example as a tag whose name is script&xyz).
-
----
- genshi/filters/tests/test_html.py | 14 ++++++++++----
- 1 file changed, 10 insertions(+), 4 deletions(-)
-
-diff --git a/genshi/filters/tests/test_html.py b/genshi/filters/tests/test_html.py
-index 0c6cfe1..45ec0da 100644
---- a/genshi/filters/tests/test_html.py
-+++ b/genshi/filters/tests/test_html.py
-@@ -368,12 +368,16 @@ def StyleSanitizer():
- 
- class HTMLSanitizerTestCase(unittest.TestCase):
- 
--    def assert_parse_error_or_equal(self, expected, exploit):
-+    def assert_parse_error_or_equal(self, expected, exploit,
-+                                    allow_strip=False):
-         try:
-             html = HTML(exploit)
-         except ParseError:
-             return
--        self.assertEquals(expected, (html | HTMLSanitizer()).render())
-+        sanitized_html = (html | HTMLSanitizer()).render()
-+        if not sanitized_html and allow_strip:
-+            return
-+        self.assertEquals(expected, sanitized_html)
- 
-     def test_sanitize_unchanged(self):
-         html = HTML(u'<a href="#">fo<br />o</a>')
-@@ -416,10 +420,12 @@ class HTMLSanitizerTestCase(unittest.TestCase):
-         html = HTML(u'<SCRIPT SRC="http://example.com/"></SCRIPT>')
-         self.assertEquals('', (html | HTMLSanitizer()).render())
-         src = u'<SCR\0IPT>alert("foo")</SCR\0IPT>'
--        self.assert_parse_error_or_equal('&lt;SCR\x00IPT&gt;alert("foo")', src)
-+        self.assert_parse_error_or_equal('&lt;SCR\x00IPT&gt;alert("foo")', src,
-+                                         allow_strip=True)
-         src = u'<SCRIPT&XYZ SRC="http://example.com/"></SCRIPT>'
-         self.assert_parse_error_or_equal('&lt;SCRIPT&amp;XYZ; '
--                                         'SRC="http://example.com/"&gt;', src)
-+                                         'SRC="http://example.com/"&gt;', src,
-+                                         allow_strip=True)
- 
-     def test_sanitize_remove_onclick_attr(self):
-         html = HTML(u'<div onclick=\'alert("foo")\' />')
--- 
-2.12.0
-
diff --git a/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch b/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
new file mode 100644
index 0000000000..6ffc897297
--- /dev/null
+++ b/gnu/packages/patches/rust-1.25-accept-more-detailed-gdb-lines.patch
@@ -0,0 +1,94 @@
+GDB responds with some overly detailed lines - which makes the tests fail.
+Patch rust to accept those instead.
+diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs
+--- orig/rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:24:33.775565159 +0200
++++ rustc-1.25.0-src/src/test/debuginfo/generic-enum-with-different-disr-sizes.rs	2018-09-13 10:25:56.322513658 +0200
+@@ -19,36 +19,36 @@
+ 
+ // gdb-command:print eight_bytes1
+ // gdbg-check:$1 = {{RUST$ENUM$DISR = Variant1, __0 = 100}, {RUST$ENUM$DISR = Variant1, __0 = 100}}
+-// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum::Variant1(100)
++// gdbr-check:$1 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant1(100)
+ 
+ // gdb-command:print four_bytes1
+ // gdbg-check:$2 = {{RUST$ENUM$DISR = Variant1, __0 = 101}, {RUST$ENUM$DISR = Variant1, __0 = 101}}
+-// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum::Variant1(101)
++// gdbr-check:$2 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant1(101)
+ 
+ // gdb-command:print two_bytes1
+ // gdbg-check:$3 = {{RUST$ENUM$DISR = Variant1, __0 = 102}, {RUST$ENUM$DISR = Variant1, __0 = 102}}
+-// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum::Variant1(102)
++// gdbr-check:$3 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant1(102)
+ 
+ // gdb-command:print one_byte1
+ // gdbg-check:$4 = {{RUST$ENUM$DISR = Variant1, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant1, __0 = 65 'A'}}
+-// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum::Variant1(65)
++// gdbr-check:$4 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant1(65)
+ 
+ 
+ // gdb-command:print eight_bytes2
+ // gdbg-check:$5 = {{RUST$ENUM$DISR = Variant2, __0 = 100}, {RUST$ENUM$DISR = Variant2, __0 = 100}}
+-// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum::Variant2(100)
++// gdbr-check:$5 = generic_enum_with_different_disr_sizes::Enum<f64>::Variant2(100)
+ 
+ // gdb-command:print four_bytes2
+ // gdbg-check:$6 = {{RUST$ENUM$DISR = Variant2, __0 = 101}, {RUST$ENUM$DISR = Variant2, __0 = 101}}
+-// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum::Variant2(101)
++// gdbr-check:$6 = generic_enum_with_different_disr_sizes::Enum<i32>::Variant2(101)
+ 
+ // gdb-command:print two_bytes2
+ // gdbg-check:$7 = {{RUST$ENUM$DISR = Variant2, __0 = 102}, {RUST$ENUM$DISR = Variant2, __0 = 102}}
+-// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum::Variant2(102)
++// gdbr-check:$7 = generic_enum_with_different_disr_sizes::Enum<i16>::Variant2(102)
+ 
+ // gdb-command:print one_byte2
+ // gdbg-check:$8 = {{RUST$ENUM$DISR = Variant2, __0 = 65 'A'}, {RUST$ENUM$DISR = Variant2, __0 = 65 'A'}}
+-// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum::Variant2(65)
++// gdbr-check:$8 = generic_enum_with_different_disr_sizes::Enum<u8>::Variant2(65)
+ 
+ // gdb-command:continue
+ 
+diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs
+--- orig/rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
++++ rustc-1.25.0-src/src/test/debuginfo/generic-struct-style-enum.rs	2018-09-13 10:27:43.353108111 +0200
+@@ -19,15 +19,15 @@
+ 
+ // gdb-command:print case1
+ // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, a = 0, b = 31868, c = 31868, d = 31868, e = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
+-// gdbr-check:$1 = generic_struct_style_enum::Regular::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
++// gdbr-check:$1 = generic_struct_style_enum::Regular<u16, u32, i64>::Case1{a: 0, b: 31868, c: 31868, d: 31868, e: 31868}
+ 
+ // gdb-command:print case2
+ // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, a = 0, b = 286331153, c = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
+-// gdbr-check:$2 = generic_struct_style_enum::Regular::Case2{a: 0, b: 286331153, c: 286331153}
++// gdbr-check:$2 = generic_struct_style_enum::Regular<i16, u32, i64>::Case2{a: 0, b: 286331153, c: 286331153}
+ 
+ // gdb-command:print case3
+ // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, a = 0, b = 6438275382588823897}}
+-// gdbr-check:$3 = generic_struct_style_enum::Regular::Case3{a: 0, b: 6438275382588823897}
++// gdbr-check:$3 = generic_struct_style_enum::Regular<u16, i32, u64>::Case3{a: 0, b: 6438275382588823897}
+ 
+ // gdb-command:print univariant
+ // gdbg-check:$4 = {{a = -1}}
+diff -ur orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs
+--- orig/rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:24:33.775565159 +0200
++++ rustc-1.25.0-src/src/test/debuginfo/generic-tuple-style-enum.rs	2018-09-13 10:28:26.328546298 +0200
+@@ -21,15 +21,15 @@
+ 
+ // gdb-command:print case1
+ // gdbg-check:$1 = {{RUST$ENUM$DISR = Case1, __0 = 0, __1 = 31868, __2 = 31868, __3 = 31868, __4 = 31868}, {RUST$ENUM$DISR = Case1, [...]}, {RUST$ENUM$DISR = Case1, [...]}}
+-// gdbr-check:$1 = generic_tuple_style_enum::Regular::Case1(0, 31868, 31868, 31868, 31868)
++// gdbr-check:$1 = generic_tuple_style_enum::Regular<u16, u32, u64>::Case1(0, 31868, 31868, 31868, 31868)
+ 
+ // gdb-command:print case2
+ // gdbg-check:$2 = {{RUST$ENUM$DISR = Case2, [...]}, {RUST$ENUM$DISR = Case2, __0 = 0, __1 = 286331153, __2 = 286331153}, {RUST$ENUM$DISR = Case2, [...]}}
+-// gdbr-check:$2 = generic_tuple_style_enum::Regular::Case2(0, 286331153, 286331153)
++// gdbr-check:$2 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case2(0, 286331153, 286331153)
+ 
+ // gdb-command:print case3
+ // gdbg-check:$3 = {{RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, [...]}, {RUST$ENUM$DISR = Case3, __0 = 0, __1 = 6438275382588823897}}
+-// gdbr-check:$3 = generic_tuple_style_enum::Regular::Case3(0, 6438275382588823897)
++// gdbr-check:$3 = generic_tuple_style_enum::Regular<i16, i32, i64>::Case3(0, 6438275382588823897)
+ 
+ // gdb-command:print univariant
+ // gdbg-check:$4 = {{__0 = -1}}
diff --git a/gnu/packages/perl-check.scm b/gnu/packages/perl-check.scm
index 16010b441f..98b4e392c7 100644
--- a/gnu/packages/perl-check.scm
+++ b/gnu/packages/perl-check.scm
@@ -44,6 +44,27 @@
 ;;;
 
 
+(define-public perl-mock-config
+  (package
+    (name "perl-mock-config")
+    (version "0.03")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/R/RU/RURBAN/Mock-Config-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "06q0xkg5cwdwafzmb9rkaa305ddv7vli9gpm6n9jnkyaaxbk9f55"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/Mock-Config")
+    (synopsis "Temporarily set Config or XSConfig values")
+    (description
+     "The @code{Mock::Config} Perl module allows temporarily setting and
+overriding @code{Config} values, even for the readonly @code{XSConfig}
+implementation as used in cperl.  It does not store the mocked overrides
+lexically, just dynamically.")
+    (license artistic2.0)))
+
 (define-public perl-test2-bundle-extended
   (package
     (name "perl-test2-bundle-extended")
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 46c1ce8010..7d21fa7c6a 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
 ;;; Copyright © 2016, 2018 Roel Janssen <roel@gnu.org>
@@ -5483,7 +5483,7 @@ private methods are not.")
 (define-public perl-moosex-getopt
   (package
     (name "perl-moosex-getopt")
-    (version "0.71")
+    (version "0.73")
     (source
      (origin
        (method url-fetch)
@@ -5491,12 +5491,15 @@ private methods are not.")
                            "MooseX-Getopt-" version ".tar.gz"))
        (sha256
         (base32
-         "0nf2094qgir0irxjycwqavy53ygm530g9f7cxfywnl2n1bmgh66y"))))
+         "19zm8brf930p0ymqn3w1y0ix29kb74m8nvhrhjvrg8cgz6vc5fyz"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-module-build" ,perl-module-build)
+       ("perl-module-build-tiny" ,perl-module-build-tiny)
+       ("perl-path-tiny" ,perl-path-tiny)
        ("perl-test-deep" ,perl-test-deep)
        ("perl-test-fatal" ,perl-test-fatal)
+       ("perl-test-needs" ,perl-test-needs)
        ("perl-test-requires" ,perl-test-requires)
        ("perl-test-trap" ,perl-test-trap)
        ("perl-test-warnings" ,perl-test-warnings)))
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 176f044df1..b0f0e3c970 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -361,14 +361,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography-vectors
   (package
     (name "python-cryptography-vectors")
-    (version "2.2.2")
+    (version "2.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography_vectors" version))
        (sha256
         (base32
-         "122na0c6r24ch2ifyr4ccjyih0inpqy7bc5za77699g3pa22rd98"))))
+         "0ijdck30p7jv8a0zwv8b7d30ciqrmmps62lm63l4k776vihrnkdz"))))
     (build-system python-build-system)
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Test vectors for the cryptography package")
@@ -383,14 +383,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography
   (package
     (name "python-cryptography")
-    (version "2.2.2")
+    (version "2.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography" version))
        (sha256
         (base32
-         "0qrgip8vgcpk7v1jwf67mg50np5iprxrv8qrg8p382hkd6zrbhlz"))))
+         "1mnzf168vlxirq7fw9dm9zbvma7z8phc9cl5bffw5916m0y1244d"))))
     (build-system python-build-system)
     (inputs
      `(("openssl" ,openssl)))
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 1230f70572..46ba322ee3 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -45,6 +45,7 @@
 (define-module (gnu packages python-web)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system python)
   #:use-module (guix utils)
   #:use-module (gnu packages)
@@ -177,14 +178,14 @@ other HTTP libraries.")
 (define-public python-sockjs-tornado
   (package
     (name "python-sockjs-tornado")
-    (version "1.0.3")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "sockjs-tornado" version))
        (sha256
         (base32
-         "16cff40nniqsyvda1pb2j3b4zwmrw7y2g1vqq78lp20xpmhnwwkd"))))
+         "0zhq8wnnhkfbvdnsggqrc3pp97pqpilsf7fh6ymvnf52r0rwyjsc"))))
     (build-system python-build-system)
     (arguments
      `(;; There are no tests, and running the test phase requires missing
@@ -194,12 +195,12 @@ other HTTP libraries.")
      `(("python-tornado" ,python-tornado)))
     (home-page "https://github.com/mrjoes/sockjs-tornado/")
     (synopsis
-     "SockJS python server implementation on top of Tornado framework")
+     "SockJS Python server implementation on top of the Tornado framework")
     (description
-     "SockJS-tornado provides the server side counterpart to a SockJS client
+     "SockJS-tornado provides the server-side counterpart to a SockJS client
 library, through the Tornado framework.
 
-SockJS provides a low latency, full duplex, cross-domain communication channel
+SockJS provides a low-latency, full-duplex, cross-domain communication channel
 between a web browser and web server.")
     (license license:expat)))
 
@@ -2248,29 +2249,16 @@ for Flask programs that are using @code{python-alembic}.")
 (define-public python-genshi
   (package
     (name "python-genshi")
-    (version "0.7")
+    (version "0.7.1")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://ftp.edgewall.org/pub/genshi/Genshi-"
-             version ".tar.gz"))
-       (patches
-        (search-patches
-         ;; The first 4 patches are in the master branch upstream.
-         ;; See this as a reference https://genshi.edgewall.org/ticket/582
-         ;; The last 2 are NOT in any branch.
-         ;; They were sent as attachments to a ticket opened at
-         ;; https://genshi.edgewall.org/ticket/602#no1
-         "python-genshi-stripping-of-unsafe-script-tags.patch"
-         "python-genshi-disable-speedups-on-python-3.3.patch"
-         "python-genshi-isstring-helper.patch"
-         "python-genshi-add-support-for-python-3.4-AST.patch"
-         "python-genshi-fix-tests-on-python-3.5.patch"
-         "python-genshi-buildable-on-python-2.7.patch"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/edgewall/genshi.git")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x"))))
+        (base32 "01fx8fnpay5w048ppyjivg2dgfpp5rybn07y3pfsgj2knram3nhl"))))
     (build-system python-build-system)
     (home-page "https://genshi.edgewall.org/")
     (synopsis "Toolkit for generation of output for the web")
@@ -2279,9 +2267,6 @@ of components for parsing, generating, and processing HTML, XML or other
 textual content for output generation on the web.")
     (license license:bsd-3)))
 
-;; The linter here claims that patch file names should start with the package
-;; name. But, in this case the patches are inherited from python-genshi with
-;; the "python-genshi-" prefix instead of "python2-genshi-".
 (define-public python2-genshi
   (package-with-python2 python-genshi))
 
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 5a1f3ed229..96a0e81a2c 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -54,6 +54,7 @@
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1519,14 +1520,14 @@ backported for previous versions of Python from 2.4 to 3.3.")
 (define-public python-parse
   (package
     (name "python-parse")
-    (version "1.8.2")
+    (version "1.8.4")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "parse" version))
       (sha256
        (base32
-        "1lj9v1q4imszyhvipb6drsm3xdl35nan011mqxxas1yaypixsj40"))))
+        "0f8997xr8nq2nq35iiviq8ningd1zvy59fg503xfpbi2dwhgdkf3"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1536,7 +1537,7 @@ backported for previous versions of Python from 2.4 to 3.3.")
     (home-page "https://github.com/r1chardj0n3s/parse")
     (synopsis "Parse strings")
     (description
-     "Parse strings using a specification based on the Python format()
+     "Parse strings using a specification based on the Python @code{format()}
 syntax.")
     (license license:x11)))
 
@@ -2627,6 +2628,62 @@ which can produce feeds in RSS 2.0, RSS 0.91, and Atom formats.")
 (define-public python2-feedgenerator
   (package-with-python2 python-feedgenerator))
 
+(define-public python-toml
+  (package
+    (name "python-toml")
+    (version "0.9.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "toml" version))
+       (sha256
+        (base32
+         "0bdbpbip67wdm6c7xwc6mmbmskyradj4cdxn1iibj4fcx1nbv1lf"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                     ;no tests suite in release
+    (home-page "https://github.com/uiri/toml")
+    (synopsis "Library for TOML")
+    (description
+     "@code{toml} is a library for parsing and creating Tom's Obvious, Minimal
+Language (TOML) configuration files.")
+    (license license:expat)))
+
+(define-public python-black
+  (package
+    (name "python-black")
+    (version "18.6b4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "black" version))
+       (sha256
+        (base32
+         "0i4sfqgz6w15vd50kbhi7g7rifgqlf8yfr8y78rypd56q64qn592"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-source-shebangs 'patch-extra-shebangs
+           (lambda _
+             (let ((python3 (which "python3")))
+               (substitute* '("tests/data/fmtonoff.py"
+                              "tests/data/string_prefixes.py"
+                              "tests/data/function.py")
+                 (("#!/usr/bin/env python3(\\.[0-9]+)?" _ minor-version)
+                  (string-append "#!" python3 (if (string? minor-version)
+                                                  minor-version
+                                                  ""))))))))))
+    (propagated-inputs
+     `(("python-click" ,python-click)
+       ("python-attrs" ,python-attrs)
+       ("python-appdirs" ,python-appdirs)
+       ("python-toml" ,python-toml)))
+    (home-page "https://github.com/ambv/black")
+    (synopsis "The uncompromising code formatter")
+    (description "Black is the uncompromising Python code formatter.")
+    (license license:expat)))
+
 (define-public python-blinker
   (package
     (name "python-blinker")
@@ -5061,13 +5118,13 @@ Python.")
 (define-public snakemake
   (package
     (name "snakemake")
-    (version "5.2.0")
+    (version "5.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "snakemake" version))
        (sha256
-        (base32 "0a1i5v5qxbmmpznp7my9nva8y7pxp8pjrwk2gxgisdskg35sq8s1"))))
+        (base32 "18x36n78ph5v1fxk54gvdbc3d8nfncha78phifg3lqaa9gifgzxd"))))
     (build-system python-build-system)
     (arguments
      ;; TODO: Package missing test dependencies.
@@ -5096,7 +5153,7 @@ Python.")
        ("python-networkx" ,python-networkx)
        ("python-pyyaml" ,python-pyyaml)
        ("python-ratelimiter" ,python-ratelimiter)))
-    (home-page "https://bitbucket.org/snakemake/snakemake/wiki/Home")
+    (home-page "https://snakemake.readthedocs.io")
     (synopsis "Python-based execution environment for make-like workflows")
     (description
       "Snakemake aims to reduce the complexity of creating workflows by
@@ -6455,7 +6512,7 @@ Python Package Index (PyPI).")
 (define-public python-tlsh
   (package
     (name "python-tlsh")
-    (version "3.4.4")
+    (version "3.4.5")
     (home-page "https://github.com/trendmicro/tlsh")
     (source (origin
               (method url-fetch)
@@ -6463,7 +6520,7 @@ Python Package Index (PyPI).")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "00bhzjqrlh7v538kbkbn8lgx976j1138al3sdhklaizqjvpwyk4r"))
+                "1x1vahd4zg5kpyr9h9hs3fvh460p25rjy4cclwdnbbw8x3vc30q3"))
               (file-name (string-append name "-" version ".tar.gz"))))
     (build-system cmake-build-system)
     (arguments
@@ -6524,13 +6581,13 @@ a hash value.")
 (define-public python-libarchive-c
   (package
     (name "python-libarchive-c")
-    (version "2.2")
+    (version "2.8")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "libarchive-c" version))
               (sha256
                (base32
-                "0z4r7v3dhd6b3120mav05ff08srih176r2rg5k8kn7mjd9pslm2x"))))
+                "0qg0v1s9c1xdk9philhnv8k6c6nicvnvfwlc0j9srg90jmdlvm06"))))
     (build-system python-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -6542,7 +6599,12 @@ a hash value.")
                        (substitute* "libarchive/ffi.py"
                          (("find_library\\('archive'\\)")
                           (string-append "'" libarchive
-                                         "/lib/libarchive.so'")))))))))
+                                         "/lib/libarchive.so'"))))))
+                  (replace 'check
+                    (lambda _ (invoke "pytest" "-vv"))))))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)))
     (inputs
      `(("libarchive" ,libarchive)))
     (home-page "https://github.com/Changaco/python-libarchive-c")
@@ -6589,6 +6651,7 @@ serve the same purpose: provide Python bindings for libmagic.")))
 (define-public python-debian
   (package
     (name "python-debian")
+    (home-page "https://salsa.debian.org/python-debian-team/python-debian")
     (version "0.1.28")
     (source
      (origin
@@ -6600,7 +6663,6 @@ serve the same purpose: provide Python bindings for libmagic.")))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-six" ,python-six)))
-    (home-page "http://packages.debian.org/sid/python-debian")
     (synopsis "Debian package related modules")
     (description
      ;; XXX: Use @enumerate instead of @itemize to work around
@@ -9543,14 +9605,14 @@ characters, mouse support, and auto suggestions.")
 (define-public python-jedi
   (package
     (name "python-jedi")
-    (version "0.12.0")
+    (version "0.12.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "jedi" version))
        (sha256
         (base32
-         "1bcr7csx4xil1iwmk03d79jis0bkmgi9k0kir3xa4rmwqsagcwhr"))))
+         "1h8ypnjisn57kiv1zqrkj1im6sbfnhxllqaa8znh39qkd47ys2dl"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -9559,14 +9621,18 @@ characters, mouse support, and auto suggestions.")
                            (invoke "py.test" "-vv"))))))
     (native-inputs
      `(("python-pytest" ,python-pytest)
-       ("python-parso" ,python-parso)
        ("python-docopt" ,python-docopt)))
+    (propagated-inputs
+     `(("python-parso" ,python-parso)))
     (home-page "https://github.com/davidhalter/jedi")
-    (synopsis
-     "Autocompletion for Python that can be used for text editors")
+    (synopsis "Autocompletion and static analysis library for Python")
     (description
-     "Jedi is an autocompletion tool for Python that can be used for text
- editors.")
+     "Jedi is a static analysis tool for Python that can be used in Integrated
+Development Environments (@dfn{IDE}s) and text editors.  It understands Python
+on a deeper level than many other static analysis frameworks for Python.
+
+Jedi understands docstrings and you can use Jedi autocompletion in your REPL as
+well.")
     (license license:expat)))
 
 (define-public python2-jedi
@@ -9745,13 +9811,13 @@ hardware-accelerated multitouch applications.")
 (define-public python-binaryornot
   (package
     (name "python-binaryornot")
-    (version "0.4.0")
+    (version "0.4.4")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "binaryornot" version))
               (sha256
                (base32
-                "1j4f51dxic39mdwf6alj7gd769wy6mhk916v031wjali51xkh3xb"))))
+                "0qc006986rb6bcbmiymwgcl1mns2jphr1j7sr7nk41nlr7gh359m"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-chardet" ,python-chardet)
@@ -13169,14 +13235,14 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
 (define-public python-typing
   (package
     (name "python-typing")
-    (version "3.6.4")
+    (version "3.6.6")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "typing" version))
        (sha256
         (base32
-         "1wmk9nkh30n37cbrqwkbggmj2390lhrlagjkd0ikm02l88saj06l"))))
+         "0ba9acs4awx15bf9v3nrs781msbd2nx826906nj6fqks2bvca9s0"))))
     (build-system python-build-system)
     (home-page "https://docs.python.org/3/library/typing.html")
     (synopsis "Type hints for Python")
@@ -13449,14 +13515,14 @@ time-based (TOTP) passwords.")
 (define-public python-parso
   (package
     (name "python-parso")
-    (version "0.2.1")
+    (version "0.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "parso" version))
        (sha256
         (base32
-         "0zvh4rdhv2wkglkgh0h9kn9ndpsw5p639wcwv47jn1kfp504lq7h"))))
+         "18p89iwcm8mnf380f92g9w0bhx5km8wxp392vvjcq4y1ld1llw1m"))))
     (native-inputs
      `(("python-pytest" ,python-pytest)))
     (build-system python-build-system)
@@ -13953,3 +14019,276 @@ scalable way of keeping track of data together with learned annotations and
 reduces the code overhead typically encountered when using a mostly
 object-oriented library such as @code{scikit-learn}.")
     (license license:bsd-3)))
+
+(define-public python-dill
+  (package
+    (name "python-dill")
+    (version "0.2.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "dill" version))
+       (sha256
+        (base32
+         "1cymzn9fxwdy33h21zkk4gqgzvd25110hh3zdqnvnwa3p52c4kb2"))))
+    (build-system python-build-system)
+    ;; FIXME: The check phase fails with "don't know how to make test".
+    (arguments '(#:tests? #f))
+    (home-page "https://pypi.org/project/dill")
+    (synopsis "Serialize all of Python")
+    (description "Dill extends Python's @code{pickle} module for serializing
+and de-serializing Python objects to the majority of the built-in Python
+types.  Dill provides the user the same interface as the @code{pickle} module,
+and also includes some additional features.  In addition to pickling Python
+objects, @code{dill} provides the ability to save the state of an interpreter
+session in a single command.  Hence, it would be feasable to save a
+interpreter session, close the interpreter, ship the pickled file to another
+computer, open a new interpreter, unpickle the session and thus continue from
+the saved state of the original interpreter session.")
+    (license license:bsd-3)))
+
+(define-public python-multiprocess
+  (package
+    (name "python-multiprocess")
+    (version "0.70.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "multiprocess" version))
+       (sha256
+        (base32
+         "1ip5caz67b3q0553mr8gm8xwsb8x500jn8ml0gihgyfy52m2ypcq"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-dill" ,python-dill)))
+    (home-page "https://pypi.org/project/multiprocess")
+    (synopsis "Multiprocessing and multithreading in Python")
+    (description
+     "This package is a fork of the multiprocessing Python package, a package
+which supports the spawning of processes using the API of the standard
+library's @code{threading} module.")
+    (license license:bsd-3)))
+
+(define-public python-toolz
+  (package
+    (name "python-toolz")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "toolz" version))
+       (sha256
+        (base32
+         "1j9i7fdjnx9dz35fdj5gvgxx6585ja9sxgaiv65if77nlxz0m7wj"))))
+    (build-system python-build-system)
+    ;; FIXME: tests cannot be computed: "Can't perform this operation for
+    ;; unregistered loader type"
+    (arguments '(#:tests? #f))
+    (home-page "https://github.com/pytoolz/toolz/")
+    (synopsis "List processing tools and functional utilities")
+    (description
+     "This package provides a set of utility functions for iterators,
+functions, and dictionaries.")
+    (license license:bsd-3)))
+
+(define-public python-cytoolz
+  (package
+    (name "python-cytoolz")
+    (version "0.9.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cytoolz" version))
+       (sha256
+        (base32
+         "1r80p88hm3f3r4zpixzr047y5hw4bzy41m4xywnhycda83x0dk44"))))
+    (build-system python-build-system)
+    ;; FIXME: tests fail with "module 'cytoolz.curried' has no attribute
+    ;; 'exceptions'"
+    (arguments '(#:tests? #f))
+    (propagated-inputs
+     `(("python-toolz" ,python-toolz)))
+    (native-inputs
+     `(("python-cython" ,python-cython)))
+    (home-page "https://github.com/pytoolz/cytoolz")
+    (synopsis "High performance functional utilities")
+    (description
+     "The cytoolz package implements the same API as provided by toolz.  The
+main differences are that @code{cytoolz} is faster and cytoolz offers a C API
+that is accessible to other projects developed in Cython.")
+    (license license:bsd-3)))
+
+(define-public python-sortedcontainers
+  (package
+    (name "python-sortedcontainers")
+    (version "2.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sortedcontainers" version))
+       (sha256
+        (base32
+         "10hrk2k0hbf9x78vd3f0lj277m1yzfhzzxr0hja718liwb398wk0"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-tox" ,python-tox)))
+    (home-page "http://www.grantjenks.com/docs/sortedcontainers/")
+    (synopsis "Sorted List, Sorted Dict, Sorted Set")
+    (description
+     "This package provides a sorted collections library, written in
+pure-Python.")
+    (license license:asl2.0)))
+
+(define-public python-cloudpickle
+  (package
+    (name "python-cloudpickle")
+    (version "0.5.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "cloudpickle" version))
+       (sha256
+        (base32
+         "0gdg5n025v4wqmdg65rm0n6fvp6731ip30ji0rmn2kqsyr4bb93f"))))
+    (build-system python-build-system)
+    ;; FIXME: there are 5 errors in 122 tests:
+    ;; ERROR: test_function_pickle_compat_0_4_0 (tests.cloudpickle_test.CloudPickleTest)
+    ;; ERROR: test_function_pickle_compat_0_4_1 (tests.cloudpickle_test.CloudPickleTest)
+    ;; ERROR: test_function_pickle_compat_0_4_0 (tests.cloudpickle_test.Protocol2CloudPickleTest)
+    ;; ERROR: test_function_pickle_compat_0_4_1 (tests.cloudpickle_test.Protocol2CloudPickleTest)
+    ;; ERROR: test_temp_file (tests.cloudpickle_file_test.CloudPickleFileTests)
+    ;; TypeError: cannot serialize '_io.BufferedRandom' object
+    (arguments '(#:tests? #f))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-mock" ,python-mock)
+       ("python-tornado" ,python-tornado)))
+    (home-page "https://github.com/cloudpipe/cloudpickle")
+    (synopsis "Extended pickling support for Python objects")
+    (description
+     "Cloudpickle makes it possible to serialize Python constructs not
+supported by the default pickle module from the Python standard library.  It
+is especially useful for cluster computing where Python expressions are
+shipped over the network to execute on remote hosts, possibly close to the
+data.")
+    (license license:bsd-3)))
+
+(define-public python-locket
+  (package
+    (name "python-locket")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "locket" version))
+       (sha256
+        (base32
+         "1d4z2zngrpqkrfhnd4yhysh66kjn4mblys2l06sh5dix2p0n7vhz"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/mwilliamson/locket.py")
+    (synopsis "File-based locks for Python")
+    (description
+     "Locket implements a lock that can be used by multiple processes provided
+they use the same path.")
+    (license license:bsd-2)))
+
+(define-public python-blosc
+  (package
+    (name "python-blosc")
+    (version "1.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "blosc" version))
+       (sha256
+        (base32
+         "1cm91c6r431yla2mbs4895bgiianjf30dfz14vvv99dslygd65jw"))))
+    (build-system python-build-system)
+    ;; FIXME: all tests pass, but then this error is printed:
+    ;; TypeError: calling <function run at 0x7ffff2568d90> returned None, not a test
+    (arguments '(#:tests? #f))
+    (propagated-inputs
+     `(("python-numpy" ,python-numpy)))
+    (home-page "https://github.com/blosc/python-blosc")
+    (synopsis "Python wrapper for the Blosc data compressor library")
+    (description "Blosc is a high performance compressor optimized for binary
+data.  It has been designed to transmit data to the processor cache faster
+than the traditional, non-compressed, direct memory fetch approach via a
+@code{memcpy()} system call.
+
+Blosc works well for compressing numerical arrays that contains data with
+relatively low entropy, like sparse data, time series, grids with
+regular-spaced values, etc.
+
+This Python package wraps the Blosc library.")
+    (license license:bsd-3)))
+
+(define-public python-partd
+  (package
+    (name "python-partd")
+    (version "0.3.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "partd" version))
+       (sha256
+        (base32
+         "03s0i5qfgkx6y24bmfgyd5hnsjznkbbfafwb2khf7k9790f1yab7"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-blosc" ,python-blosc)
+       ("python-locket" ,python-locket)
+       ("python-numpy" ,python-numpy)
+       ("python-pandas" ,python-pandas)
+       ("python-pyzmq" ,python-pyzmq)
+       ("python-toolz" ,python-toolz)))
+    (home-page "https://github.com/dask/partd/")
+    (synopsis "Appendable key-value storage")
+    (description "Partd stores key-value pairs.  Values are raw bytes.  We
+append on old values.  Partd excels at shuffling operations.")
+    (license license:bsd-3)))
+
+(define-public python-dask
+  (package
+    (name "python-dask")
+    (version "0.19.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "dask" version))
+       (sha256
+        (base32
+         "1pm1163qb6s22p8fnvj0zlfazihvs7hxjn8l2n52bzs7shw6kdz3"))))
+    (build-system python-build-system)
+    ;; A single test out of 5000+ fails.  This test is marked as xfail when
+    ;; pytest-xdist is used.
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-broken-test
+           (lambda _
+             (substitute* "dask/tests/test_threaded.py"
+               (("def test_interrupt\\(\\)" m)
+                (string-append "@pytest.mark.skip(reason=\"Disabled by Guix\")\n"
+                               m)))
+             #t)))))
+    (propagated-inputs
+     `(("python-cloudpickle" ,python-cloudpickle)
+       ("python-numpy" ,python-numpy)
+       ("python-pandas" ,python-pandas)
+       ("python-partd" ,python-partd)
+       ("python-toolz" ,python-toolz)
+       ("python-pyyaml" ,python-pyyaml)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (home-page "https://github.com/dask/dask/")
+    (synopsis "Parallel computing with task scheduling")
+    (description
+     "Dask is a flexible parallel computing library for analytics.  It
+consists of two components: dynamic task scheduling optimized for computation,
+and large data collections like parallel arrays, dataframes, and lists that
+extend common interfaces like NumPy, Pandas, or Python iterators to
+larger-than-memory or distributed environments.  These parallel collections
+run on top of the dynamic task schedulers. ")
+    (license license:bsd-3)))
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 631dcfd67c..b053bdce62 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -126,13 +126,13 @@
                     (rustdoc (string-append out "/bin/rustdoc"))
                     (cargo (string-append cargo-out "/bin/cargo"))
                     (gcc (assoc-ref inputs "gcc")))
-               ;; Install rustc/rustdoc
+               ;; Install rustc/rustdoc.
                (invoke "bash" "install.sh"
                         (string-append "--prefix=" out)
                         (string-append "--components=rustc,"
                                        "rust-std-"
                                        ,(nix-system->gnu-triplet-for-rust)))
-               ;; Instal cargo
+               ;; Install cargo.
                (invoke "bash" "install.sh"
                         (string-append "--prefix=" cargo-out)
                         (string-append "--components=cargo"))
@@ -143,11 +143,6 @@
                (for-each (lambda (file)
                            (invoke "patchelf" "--set-interpreter" ld-so file))
                          (list rustc rustdoc cargo))
-               ;; Rust requires a C toolchain for linking. The prebuilt
-               ;; binaries expect a compiler called cc. Thus symlink gcc
-               ;; to cc.
-               (symlink (string-append gcc "/bin/gcc")
-                        (string-append out "/bin/cc"))
                #t))))))
     (home-page "https://www.rust-lang.org")
     (synopsis "Prebuilt rust compiler and cargo package manager")
@@ -387,7 +382,6 @@ test = { path = \"../libtest\" }
                        "--output-dir" "output/rustc-build"
                        "-L" (string-append rustc-bootstrap "/lib/mrust")
                        "-j" "1")
-               (install-file "output/rustc-build/rustc" "output") ; FIXME: Remove?
                (setenv "CFG_COMPILER_HOST_TRIPLE" #f)
                (setenv "CFG_RELEASE" #f)
                (setenv "CFG_RELEASE_CHANNEL" #f)
@@ -408,7 +402,7 @@ test = { path = \"../libtest\" }
                ;; but right now, Cargo has problems with libstd's circular
                ;; dependencies.
                (mkdir-p "output/target-libs")
-               (for-each ((@ (ice-9 match) match-lambda)
+               (for-each (match-lambda
                           ((name . flags)
                             (write name)
                             (newline)
@@ -454,6 +448,8 @@ test = { path = \"../libtest\" }
                (copy-recursively "output/target-libs" out-libs)
                (install-file "output/rustc-build/rustc"
                              (string-append out "/bin"))
+               (install-file "output/rustc-build/rustdoc"
+                             (string-append out "/bin"))
                (install-file "output/cargo-build/cargo"
                              (string-append (assoc-ref outputs "cargo")
                                             "/bin")))
@@ -498,13 +494,132 @@ safety and thread safety guarantees.")
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
 
+(define-public rust-1.20
+  (let ((base-rust
+         (rust-bootstrapped-package rust-1.19 "1.20.0"
+          "0542y4rnzlsrricai130mqyxl8r6rd991frb4qsnwb27yigqg91a")))
+    (package
+      (inherit base-rust)
+      (outputs '("out" "doc" "cargo"))
+      (arguments
+       (substitute-keyword-arguments (package-arguments rust-1.19)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (replace 'configure
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let* ((out (assoc-ref outputs "out"))
+                        (doc (assoc-ref outputs "doc"))
+                        (gcc (assoc-ref inputs "gcc"))
+                        (gdb (assoc-ref inputs "gdb"))
+                        (binutils (assoc-ref inputs "binutils"))
+                        (python (assoc-ref inputs "python-2"))
+                        (rustc (assoc-ref inputs "rustc-bootstrap"))
+                        (cargo (assoc-ref inputs "cargo-bootstrap"))
+                        (llvm (assoc-ref inputs "llvm"))
+                        (jemalloc (assoc-ref inputs "jemalloc")))
+                   (call-with-output-file "config.toml"
+                     (lambda (port)
+                       (display (string-append "
+[llvm]
+[build]
+cargo = \"" cargo "/bin/cargo" "\"
+rustc = \"" rustc "/bin/rustc" "\"
+docs = true
+python = \"" python "/bin/python2" "\"
+gdb = \"" gdb "/bin/gdb" "\"
+vendor = true
+submodules = false
+[install]
+prefix = \"" out "\"
+docdir = \"" doc "/share/doc/rust" "\"
+sysconfdir = \"etc\"
+localstatedir = \"var/lib\"
+[rust]
+default-linker = \"" gcc "/bin/gcc" "\"
+channel = \"stable\"
+rpath = true
+" ;; There are 2 failed codegen tests:
+;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs
+;; These tests require a patched LLVM
+"codegen-tests = false
+[target." ,(nix-system->gnu-triplet-for-rust) "]
+llvm-config = \"" llvm "/bin/llvm-config" "\"
+cc = \"" gcc "/bin/gcc" "\"
+cxx = \"" gcc "/bin/g++" "\"
+ar = \"" binutils "/bin/ar" "\"
+jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
+[dist]
+") port)))
+                   #t)))
+             (add-after 'configure 'provide-cc
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (symlink (string-append (assoc-ref inputs "gcc") "/bin/gcc")
+                          "/tmp/cc")
+                 (setenv "PATH" (string-append "/tmp:" (getenv "PATH")))
+                 #t))
+             (add-after 'provide-cc 'configure-archiver
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (substitute* "src/build_helper/lib.rs"
+                  ;; Make sure "ar" is always used as the archiver.
+                  (("\"musl\"") "\"\"")
+                  ;; Then substitute "ar" by our name.
+                  (("\"ar\"") (string-append "\""
+                               (assoc-ref inputs "binutils")
+                               "/bin/ar\"")))
+                 #t))
+             (delete 'patch-cargo-tomls)
+             (add-before 'build 'reset-timestamps-after-changes
+               (lambda* _
+                 (define ref (stat "README.md"))
+                 (for-each
+                  (lambda (filename)
+                    (set-file-time filename ref))
+                  (find-files "." #:directories? #t))
+                 #t))
+             (replace 'build
+               (lambda* _
+                 (invoke "./x.py" "build")
+                 (invoke "./x.py" "build" "src/tools/cargo")))
+             (replace 'check
+               (lambda* _
+                 ;; Disable parallel execution to prevent EAGAIN errors when
+                 ;; running tests.
+                 (invoke "./x.py" "-j1" "test" "-vv")
+                 (invoke "./x.py" "-j1" "test" "src/tools/cargo")
+                 #t))
+             (replace 'install
+               (lambda* (#:key outputs #:allow-other-keys)
+                 (invoke "./x.py" "install")
+                 (substitute* "config.toml"
+                   ;; replace prefix to specific output
+                   (("prefix = \"[^\"]*\"")
+                    (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
+                 (invoke "./x.py" "install" "cargo")))
+             (add-after 'install 'wrap-rustc
+               (lambda* (#:key inputs outputs #:allow-other-keys)
+                 (let ((out (assoc-ref outputs "out"))
+                       (libc (assoc-ref inputs "libc"))
+                       (ld-wrapper (assoc-ref inputs "ld-wrapper")))
+                   ;; Let gcc find ld and libc startup files.
+                   (wrap-program (string-append out "/bin/rustc")
+                     `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
+                     `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib"))))
+                   #t))))))))))
+
+(define-public rust-1.21
+  (rust-bootstrapped-package rust-1.20 "1.21.0"
+                             "1yj8lnxybjrybp00fqhxw8fpr641dh8wcn9mk44xjnsb4i1c21qp"))
+
+(define-public rust-1.22
+  (rust-bootstrapped-package rust-1.21 "1.22.1"
+                             "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb"))
+
 (define-public rust-1.23
   (package
-    (inherit rust-1.19)
+    (inherit rust-1.20)
     (name "rust")
     (version "1.23.0")
     (source (rust-source version "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l"))
-    (outputs '("out" "doc" "cargo"))
     (native-inputs
      `(("bison" ,bison) ; For the tests
        ("cmake" ,cmake)
@@ -518,17 +633,16 @@ safety and thread safety guarantees.")
        ("pkg-config" ,pkg-config) ; For "cargo"
        ("which" ,which)))
     (arguments
-     (substitute-keyword-arguments (package-arguments rust-1.19)
+     (substitute-keyword-arguments (package-arguments rust-1.20)
        ((#:phases phases)
         `(modify-phases ,phases
+           (delete 'configure-archiver)
            (add-after 'unpack 'dont-build-native
              (lambda _
                ;; XXX: Revisit this when we use gcc 6.
                (substitute* "src/binaryen/CMakeLists.txt"
                  (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
                #t))
-           ;; TODO: Revisit this and find out whether that's needed after all.
-           (delete 'patch-cargo-tomls)
            (add-after 'patch-tests 'patch-cargo-tests
              (lambda _
                (substitute* "src/tools/cargo/tests/build.rs"
@@ -556,90 +670,7 @@ safety and thread safety guarantees.")
                  ;; is 0, but in same time "src" have 0 mtime in guix build!
                  (("let threshold = mtime\\(dst\\);")
                   "if !dst.exists() {\nreturn false\n}\n let threshold = mtime(dst);"))
-               #t))
-           (replace 'configure
-             (lambda* (#:key inputs outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (doc (assoc-ref outputs "doc"))
-                      (gcc (assoc-ref inputs "gcc"))
-                      (gdb (assoc-ref inputs "gdb"))
-                      (binutils (assoc-ref inputs "binutils"))
-                      (python (assoc-ref inputs "python-2"))
-                      (rustc (assoc-ref inputs "rustc-bootstrap"))
-                      (cargo (assoc-ref inputs "cargo-bootstrap"))
-                      (llvm (assoc-ref inputs "llvm"))
-                      (jemalloc (assoc-ref inputs "jemalloc")))
-                 (call-with-output-file "config.toml"
-                   (lambda (port)
-                     (display (string-append "
-[llvm]
-[build]
-cargo = \"" cargo "/bin/cargo" "\"
-rustc = \"" rustc "/bin/rustc" "\"
-docs = true
-python = \"" python "/bin/python2" "\"
-gdb = \"" gdb "/bin/gdb" "\"
-vendor = true
-submodules = false
-[install]
-prefix = \"" out "\"
-docdir = \"" doc "/share/doc/rust" "\"
-sysconfdir = \"etc\"
-localstatedir = \"var/lib\"
-[rust]
-default-linker = \"" gcc "/bin/gcc" "\"
-channel = \"stable\"
-rpath = true
-" ;; There are 2 failed codegen tests:
-  ;; codegen/mainsubprogram.rs and codegen/mainsubprogramstart.rs
-  ;; These tests require a patched LLVM
-"codegen-tests = false
-[target." ,(nix-system->gnu-triplet-for-rust) "]
-llvm-config = \"" llvm "/bin/llvm-config" "\"
-cc = \"" gcc "/bin/gcc" "\"
-cxx = \"" gcc "/bin/g++" "\"
-ar = \"" binutils "/bin/ar" "\"
-jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
-[dist]
-") port)))
-               #t)))
-         (add-before 'build 'reset-timestamps-after-changes
-           (lambda* _
-             (define ref (stat "README.md"))
-             (for-each
-              (lambda (filename)
-                (set-file-time filename ref))
-              (find-files "." #:directories? #t))
-             #t))
-         (replace 'build
-           (lambda* _
-             (invoke "./x.py" "build")
-             (invoke "./x.py" "build" "src/tools/cargo")))
-         (replace 'check
-           (lambda* _
-             ;; Disable parallel execution to prevent EAGAIN errors when
-             ;; running tests.
-             (invoke "./x.py" "-j1" "test")
-             (invoke "./x.py" "-j1" "test" "src/tools/cargo")))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (invoke "./x.py" "install")
-             (substitute* "config.toml"
-               ;; replace prefix to specific output
-               (("prefix = \"[^\"]*\"")
-                (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
-             (invoke "./x.py" "install" "cargo")
-             #t))
-         (add-after 'install 'wrap-rustc
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out"))
-                   (libc (assoc-ref inputs "libc"))
-                   (ld-wrapper (assoc-ref inputs "ld-wrapper")))
-               ;; Let gcc find ld and libc startup files.
-               (wrap-program (string-append out "/bin/rustc")
-                 `("PATH" ":" prefix (,(string-append ld-wrapper "/bin")))
-                 `("LIBRARY_PATH" ":" suffix (,(string-append libc "/lib"))))
-               #t)))))))))
+               #t))))))))
 
 (define-public rust-1.24
   (let ((base-rust
@@ -664,7 +695,8 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 (define-public rust-1.25
   (let ((base-rust
          (rust-bootstrapped-package rust-1.24 "1.25.0"
-                                    "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf")))
+          "0baxjr99311lvwdq0s38bipbnj72pn6fgbk6lcq7j555xq53mxpf"
+          #:patches '("rust-1.25-accept-more-detailed-gdb-lines.patch"))))
     (package
       (inherit base-rust)
       (inputs
@@ -686,6 +718,13 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                  (substitute* "config.toml"
                    (("codegen-tests = false") ""))
                  #t))
+             ;; FIXME: Re-enable this test if it's indeed supposed to work.
+             ;; See <https://github.com/rust-lang/rust/issues/54178>.
+             (add-after 'enable-codegen-tests 'disable-nil-enum-test
+               (lambda _
+                 (substitute* "src/test/debuginfo/nil-enum.rs"
+                   (("ignore-lldb") "ignore-gdb"))
+                 #t))
              (replace 'patch-aarch64-test
                (lambda _
                  (substitute* "src/librustc_metadata/dynamic_lib.rs"
@@ -703,8 +742,9 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 (define-public rust-1.26
   (let ((base-rust
          (rust-bootstrapped-package rust-1.25 "1.26.2"
-                                    "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv"
-                                    #:patches '("rust-coresimd-doctest.patch"))))
+          "0047ais0fvmqvngqkdsxgrzhb0kljg8wy85b01kbbjc88hqcz7pv"
+          #:patches '("rust-coresimd-doctest.patch"
+                      "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
     (package
       (inherit base-rust)
       (arguments
@@ -754,7 +794,8 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
                                     "089d7rhw55zpvnw71dj8vil6qrylvl4xjr4m8bywjj83d4zq1f9c"
                                     #:patches
                                     '("rust-coresimd-doctest.patch"
-                                      "rust-bootstrap-stage0-test.patch"))))
+                                      "rust-bootstrap-stage0-test.patch"
+                                      "rust-1.25-accept-more-detailed-gdb-lines.patch"))))
     (package
       (inherit base-rust)
       (arguments
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index 926169ce18..2e46a8453f 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -460,6 +460,9 @@ implementation techniques and as an expository tool.")
                (substitute* "share/pkgs/math-lib/math/private/bigfloat/mpfr.rkt"
                  (("ffi-lib libmpfr-so")
                   (format #f "ffi-lib \"~a\"" (find-so "libmpfr"))))
+               (substitute* "share/pkgs/readline-lib/readline/rktrl.rkt"
+                 (("\\(getenv \"PLT_READLINE_LIB\"\\)")
+                  (format #f "\"~a\"" (find-so "libedit"))))
                (for-each
                 (lambda (x) (apply patch-ffi-libs x))
                 '(("share/pkgs/draw-lib/racket/draw/unsafe/cairo-lib.rkt"
@@ -487,9 +490,7 @@ implementation techniques and as an expository tool.")
                   ("share/pkgs/gui-lib/mred/private/wx/gtk/gl-context.rkt"
                    ("libGL"))
                   ("share/pkgs/sgl/gl.rkt"
-                   ("libGL" "libGLU"))
-                  ("share/pkgs/readline-lib/readline/rktrl.rkt"
-                   ("libedit")))))
+                   ("libGL" "libGLU")))))
              (chdir "src")
              #t))
          (add-after 'unpack 'patch-/bin/sh
diff --git a/gnu/packages/scsi.scm b/gnu/packages/scsi.scm
index 92e2d7af4c..2bb863cad9 100644
--- a/gnu/packages/scsi.scm
+++ b/gnu/packages/scsi.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,7 +19,7 @@
 
 (define-module (gnu packages scsi)
   #:use-module ((guix licenses)
-                #:select (gpl2+ bsd-3))
+                #:select (gpl2+ bsd-2 bsd-3))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
@@ -26,14 +27,14 @@
 (define-public sg3-utils
   (package
     (name "sg3-utils")
-    (version "1.42")
+    (version "1.43")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://sg.danny.cz/sg/p/sg3_utils-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1fg71rj0f1gdjmkj0z8wlv46cf9lryjdyjkbi7fjmssgi5jyvblp"))))
+                "04l58wvncqk6lfh4lashsl3ccsa1114hkd6vwi1h1cbmq2fw9c8v"))))
     (build-system gnu-build-system)
     (home-page "http://sg.danny.cz/sg/sg3_utils.html")
     (synopsis "SCSI device utilities")
@@ -49,6 +50,9 @@ up and down disks (@code{sg_start}), do self tests (@code{sg_senddiag}), parse
 sense data (@code{sg_decode_sense}), and perform various other functions.  In
 addition, this package includes a library, called libsgutils, which can be
 used in C and C++ programs to interact with SCSI devices.")
-    ;; The libsgutils library itself is licensed under bsd-3.  Some tools are
-    ;; licensed under bsd-3, also.  Some tools are licensed under gpl2+.
-    (license (list gpl2+ bsd-3))))
+    ;; See README: "All utilities and libraries have either a "2 clause" BSD
+    ;;   license or are "GPL-2ed". [...] That BSD license was updated from the
+    ;;   "3 clause" to the newer "2 clause" version on 20180119. To save space
+    ;;   various source code files refer to a file called "BSD_LICENSE" [...]."
+    ;; Some files (like sg_compare_and_write.c) retain their 3-clause headers!
+    (license (list gpl2+ bsd-2 bsd-3))))
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 900c8ec686..c0f1c479ef 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -292,18 +292,18 @@ history mechanism, job control and a C-like syntax.")
 (define-public zsh
   (package
     (name "zsh")
-    (version "5.6")
+    (version "5.6.1")
     (source (origin
               (method url-fetch)
               (uri (list (string-append
-                           "http://www.zsh.org/pub/zsh-" version
+                           "https://www.zsh.org/pub/zsh-" version
                            ".tar.xz")
                          (string-append
-                           "http://www.zsh.org/pub/old/zsh-" version
+                           "https://www.zsh.org/pub/old/zsh-" version
                            ".tar.xz")))
               (sha256
                (base32
-                "1mp6h2452z2029n12mxipjv4b0cc8i8sb72g8p8jklg8275iysvl"))))
+                "1s5kzfbfvixibb1sbzmmlrrx898zqwi5cfmnnq4bhcbx64zparlm"))))
     (build-system gnu-build-system)
     (arguments `(#:configure-flags '("--with-tcsetpgrp" "--enable-pcre")
                  #:phases
@@ -336,19 +336,6 @@ history mechanism, job control and a C-like syntax.")
                          (("command -pv") "command -v")
                          (("command -p") "command ")
                          (("'command' -p") "'command' "))
-                       ;; This file is ISO-8859-1 encoded.
-                       (with-fluids ((%default-port-encoding #f))
-                         (substitute* "Test/A05execution.ztst"
-                           ;; Help it find `sh`
-                           (("PATH=/bin:\\$\\{ZTST_testdir\\}/command.tmp/ tstcmd-slashless")
-                            (string-append "PATH=/bin:"
-                                           (assoc-ref %build-inputs "bash") "/bin:"
-                                           "${ZTST_testdir}/command.tmp/ tstcmd-slashless"))
-                           ;; Help it find `echo`
-                           (("PATH=/bin:\\$\\{ZTST_testdir\\}/command.tmp tstcmd-arg")
-                            (string-append "PATH=/bin:"
-                                           (assoc-ref %build-inputs "coreutils") "/bin:"
-                                           "PATH=/bin:${ZTST_testdir}/command.tmp tstcmd-arg"))))
                        #t)))))
     (native-inputs `(("autoconf" ,autoconf)))
     (inputs `(("ncurses" ,ncurses)
@@ -360,7 +347,7 @@ as an interactive login shell and as a powerful command interpreter
 for shell scripting.  Zsh can be thought of as an extended Bourne shell
 with a large number of improvements, including some features of bash,
 ksh, and tcsh.")
-    (home-page "http://www.zsh.org/")
+    (home-page "https://www.zsh.org/")
 
     ;; The whole thing is under an MIT/X11-style license, but there's one
     ;; command, 'Completion/Unix/Command/_darcs', which is under GPLv2+.
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index 650fe98ef3..425713a91f 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,10 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages pkg-config)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python))
@@ -158,3 +163,45 @@ fzy is designed to be used both as an editor plugin and on the command
 line.  Rather than clearing the screen, fzy displays its interface directly
 below the current cursor position, scrolling the screen if necessary.")
     (license expat)))
+
+(define-public hstr
+  (package
+    (name "hstr")
+    (version "2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/dvorka/" name "/archive/"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0yk2008bl48hv0v3c90ngq4y45h3nxif2ik6s3l7kag1zs5yv4wd"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'adjust-ncurses-includes
+           (lambda* (#:key make-flags outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "src/include/hstr_curses.h"
+                 (("ncursesw\\/curses.h") "ncurses.h"))
+               (substitute* "src/include/hstr.h"
+                 (("ncursesw\\/curses.h") "ncurses.h")))
+             #t)))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("ncurses" ,ncurses)
+       ("readline" ,readline)))
+    (synopsis "Navigate and search command history with shell history suggest box")
+    (description "HSTR (HiSToRy) is a command-line utility that brings
+improved Bash and Zsh command completion from the history.  It aims to make
+completion easier and more efficient than with @kbd{Ctrl-R}.  It allows you to
+easily view, navigate, and search your command history with suggestion boxes.
+HSTR can also manage your command history (for instance you can remove
+commands that are obsolete or contain a piece of sensitive information) or
+bookmark your favourite commands.")
+    (home-page "http://me.mindforger.com/projects/hh.html")
+    (license asl2.0)))
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index 69bc2b82cb..e708d726bb 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -19,7 +19,6 @@
 
 (define-module (gnu packages spice)
   #:use-module (gnu packages)
-  #:use-module (gnu packages autotools) ; remove after updating usbredir to 0.7.1+
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages gl)
@@ -40,64 +39,33 @@
   #:use-module (gnu packages xml)
   #:use-module (guix build-system gnu)
   #:use-module (guix download)
-  #:use-module (guix git-download) ; remove after updating usbredir to 0.7.1+
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils))
 
 (define-public usbredir
-  (let ((commit "ac80a5971c6318d73d5fba4b5f13d3a9389558c9")
-        (revision "1"))          ;Guix package revision
-    (package
-      (name "usbredir")
-      (version (string-append "0.7.1-" revision "."
-                              (string-take commit 7)))
-      ;(version "0.7.1")
-      ;(source (origin
-      ;          (method url-fetch)
-      ;          (uri (string-append
-      ;            "http://spice-space.org/download/usbredir/"
-      ;            "usbredir-" version ".tar.bz2"))
-      ;          (sha256
-      ;           (base32
-      ;            "1wsnmk4wjpdhbn1zaxg6bmyxspcki2zgy0am9lk037rnl4krwzj0"))))
-      ; FIXME: usbredir 0.7.1 release doesn't build on 32 bit systems.
-      ;        issue is fixed in HEAD
-      ;        remove 'autogen phase and autoconf, automake, libtool inputs
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                        (url "https://anongit.freedesktop.org/git/spice/usbredir.git")
-                        (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "052fywgi72j68dr5ybldncg4vk8iqfrh58la7iazyxxpph9aag1g"))))
-      (build-system gnu-build-system)
-      (propagated-inputs
-        `(("libusb" ,libusb)))
-      (native-inputs
-        `(("pkg-config" ,pkg-config)
-          ("autoconf" ,autoconf)
-          ("automake" ,automake)
-          ("libtool" ,libtool)))
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'autogen
-             (lambda _
-               ;; Build without '-Werror', in particular to avoid errors due
-               ;; to the use of the deprecated 'libusb_set_debug' function.
-               (substitute* "configure.ac"
-                 (("-Werror") ""))
-               (zero? (system* "autoreconf" "-vfi")))))))
-      (synopsis "Tools for sending USB device traffic over a network")
-      (description "Usbredir is a network protocol for sending USB device traffic
-  over a network connection.  It can be used to redirect traffic from a USB device
-  to a different (virtual) machine than the one to which the USB device is
-  attached.")
-      (home-page "https://www.spice-space.org")
-      (license (list license:gpl2+ license:lgpl2.0+ license:lgpl2.1+)))))
+  (package
+    (name "usbredir")
+    (home-page "https://spice-space.org")
+    (version "0.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append home-page "/download/" name "/" name "-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "002yik1x7kn0427xahvnhjby2np14a6xqw7c3dx530n9h5d9rg47"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     `(("libusb" ,libusb)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (synopsis "Tools for sending USB device traffic over a network")
+    (description
+     "Usbredir is a network protocol for sending USB device traffic over a
+network connection.  It can be used to redirect traffic from a USB device to a
+different (virtual) machine than the one to which the USB device is attached.")
+    (license (list license:gpl2+ license:lgpl2.0+ license:lgpl2.1+))))
 
 (define-public virglrenderer
   (package
@@ -209,15 +177,15 @@ which allows users to view a desktop computing environment.")
 (define-public spice
   (package
     (name "spice")
-    (version "0.14.0")
+    (version "0.14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
                 "https://www.spice-space.org/download/releases/"
-                "spice-" version ".tar.bz2"))
+                "spice-server/spice-" version ".tar.bz2"))
               (sha256
                (base32
-                "0j5q7cp5p95jk8fp48gz76rz96lifimdsx1wnpmfal0nnnar9nrs"))))
+                "068mb9l7wzk4k4c65bzvpw5fyyzh81rb6z81skgdxvh67pk5vb8y"))))
     (build-system gnu-build-system)
     (propagated-inputs
       `(("openssl" ,openssl)
@@ -234,12 +202,18 @@ which allows users to view a desktop computing environment.")
     (native-inputs
       `(("pkg-config" ,pkg-config)
         ("python" ,python)
-        ("spice-gtk" ,spice-gtk)))
+        ("spice-gtk" ,spice-gtk)
+
+        ;; These are needed for the server listen tests.
+        ("glib-networking" ,glib-networking)
+        ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)))
     (arguments
       `(#:configure-flags
-        '("--disable-celt051" ; Disable support for unpackaged audio codec
-          "--enable-lz4"
-          "--enable-automated-tests")))
+        '("--enable-lz4"
+          "--enable-automated-tests")
+        #:phases (modify-phases %standard-phases
+                   (add-before 'check 'use-empty-ssl-cert-file
+                     (lambda _ (setenv "SSL_CERT_FILE" "/dev/null") #t)))))
     (synopsis "Server implementation of the SPICE protocol")
     (description "SPICE is a remote display system built for virtual
 environments which allows you to view a computing 'desktop' environment
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index ebb99e84f0..089e4f63f9 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
+;;; Copyright © 2018 Manuel Graf <graf@init.at>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,12 +50,14 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
   #:autoload   (gnu packages protobuf) (protobuf)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
@@ -682,3 +685,41 @@ which executes commands on multiple remote hosts in parallel.  Pdsh implements
 dynamically loadable modules for extended functionality such as new remote
 shell services and remote host selection.")
     (license license:gpl2+)))
+
+(define-public clustershell
+  (package
+    (name "clustershell")
+    (version "1.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/cea-hpc/clustershell/archive/v"
+                           version
+                           ".tar.gz"))
+       (sha256
+        (base32 "1qyf6zp5ikk8rk7zvx5ssbgr9si2bqv3a3415590kd07s7i16nmd"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system python-build-system)
+    (inputs `(("openssh" ,openssh)))
+    (propagated-inputs `(("python-pyyaml" ,python-pyyaml)))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-before 'build 'record-openssh-file-name
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((ssh (assoc-ref inputs "openssh")))
+                        (substitute* "lib/ClusterShell/Worker/Ssh.py"
+                          (("info\\(\"ssh_path\"\\) or \"ssh\"")
+                           (string-append "info(\"ssh_path\") or \""
+                                          ssh "/bin/ssh\"")))
+                        #t))))))
+    (home-page "https://cea-hpc.github.io/clustershell/")
+    (synopsis "Scalable event-driven Python framework for cluster administration")
+    (description
+     "ClusterShell is an event-driven Python framework, designed to run local
+or distant commands in parallel on server farms or on large GNU/Linux
+clusters.  It will take care of common issues encountered on HPC clusters,
+such as operating on groups of nodes, running distributed commands using
+optimized execution algorithms, as well as gathering results and merging
+identical outputs, or retrieving return codes.  ClusterShell takes advantage
+of existing remote shell facilities such as SSH.")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index dbfaa29127..a5e02ce948 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -561,7 +561,7 @@ environment variable.")
 (define-public fortify-headers
   (package
     (name "fortify-headers")
-    (version "0.9")
+    (version "1.0")
     (source
      (origin
        (method url-fetch)
@@ -569,15 +569,15 @@ environment variable.")
                            name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1z517ajy34l2k5lz2gvhbmia9xjgagffi4s22azqxnlmgb1g2xfg"))))
+         "0nvplfg4y4a10x2j12qwmxzlk2q4j6287j0v5f9bfsdayb04qvh2"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; No tests
+     `(#:tests? #f                      ; no tests
        #:make-flags (list "CC=gcc"
                           (string-append "PREFIX=" %output))
        #:phases
        (modify-phases %standard-phases
-         (delete 'configure)))) ; No configure script
+         (delete 'configure))))         ; no configure script
     (home-page "https://git.2f30.org/fortify-headers/")
     (synopsis "Standalone fortify-source implementation")
     (description
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index 6577955496..29caaaf02e 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -30,7 +30,7 @@
 (define-public syncthing
   (package
     (name "syncthing")
-    (version "0.14.49")
+    (version "0.14.50")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/syncthing/syncthing"
@@ -38,7 +38,7 @@
                                   "/syncthing-source-v" version ".tar.gz"))
               (sha256
                (base32
-                "06mzzj5iwgqw3yva7azrsqs9zpl84srbamza4gm03grp7v9gf3sj"))
+                "0yjj6zzivzw289bhwqjb4xcv8p39n5mcwwr5w6xf5ykzljc5pk55"))
               (modules '((guix build utils)))
               ;; Delete bundled ("vendored") free software source code.
               (snippet '(begin
@@ -1063,8 +1063,8 @@ using sh's word-splitting rules.")
       (license expat))))
 
 (define-public go-github-com-syncthing-notify
-  (let ((commit "cdf89c4039d13726e227d0a472053ea19de021b4")
-        (revision "1"))
+  (let ((commit "b76b45868a77e7800dd06cce61101af9c4274bcc")
+        (revision "2"))
     (package
       (name "go-github-com-syncthing-notify")
       (version (git-version "0.0.0" revision commit))
@@ -1076,7 +1076,7 @@ using sh's word-splitting rules.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1ra1id9r06i4q8vhrrv1zpybhjxs3361rg35758dxglkyk4pzk6j"))))
+                  "1xxkzaxygxxr51i2kdxsdaqb5i95hqpkw4kcr75wmsp914slw2q9"))))
       (build-system go-build-system)
       (arguments
        '(#:import-path "github.com/syncthing/notify"))
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 2536754eb7..0c60d202a3 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -102,7 +102,7 @@ based command language.")
 (define-public kakoune
   (package
     (name "kakoune")
-    (version "2018.04.13")
+    (version "2018.09.04")
     (source
      (origin
        (method url-fetch)
@@ -111,7 +111,7 @@ based command language.")
                            name "-" version ".tar.bz2"))
        (sha256
         (base32
-         "1kkzs5nrjxzd1jq7a4k7qfb5kg05871z0r3d9c0yhz9shf6wz36d"))))
+         "1qbj2hmcfs6pr5lc78z9ni5zxdyp3mr64dvms4l52716ikqcjcbs"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -147,7 +147,7 @@ commands are similar to Vi's ones, and it shares Vi's \"keystrokes as a text
 editing language\" model.  Kakoune has a strong focus on interactivity, most
 commands provide immediate and incremental results, while still being
 competitive (as in keystroke count) with Vim.")
-    (home-page "http://kakoune.org/")
+    (home-page "https://kakoune.org/")
     (license license:unlicense)))
 
 (define-public joe
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index e897dff639..7d46191c12 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -47,21 +47,21 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.3.3.9")
+    (version "0.3.4.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://dist.torproject.org/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0vyf5z0dn5jghp2qjp076aq62lsz9g32qv9jiqf08skf096nnd45"))))
+               "08qhzcmzxp5xr2l5721vagksqnnbrzzzy5hmz5y9r8lrq2r4qsl2"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-gcc-hardening"
                                "--enable-linker-hardening")))
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("python" ,python-2)))  ; for tests
+       ("python" ,python-2)))           ; for tests
     (inputs
      `(("zlib" ,zlib)
        ("openssl" ,openssl)
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 5e0b497ace..3774961786 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -146,14 +146,14 @@ as well as the classic centralized workflow.")
    (name "git")
    ;; XXX When updating Git, check if the special 'git-source' input to cgit
    ;; needs to be updated as well.
-   (version "2.18.0")
+   (version "2.19.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "14hfwfkrci829a9316hnvkglnqqw1p03cw9k56p4fcb078wbwh4b"))))
+              "1x1y5z3awabmfg7hk6zb331jxngad4nal4507v96bnf0izsyy3qq"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -166,7 +166,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "15k04s9pcc5wkmlfa8x99nbgczjbx0c91767ciqmjy9kwsavxqws"))))))
+            "1jvxiqvp9q4is3np063ny7rnmk5hm36d34bhi3cgv89njqdh8laf"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
@@ -642,7 +642,14 @@ collaboration using typical untrusted file hosts or services.")
        ("xz" ,xz)))
     (inputs
      `(;; Building cgit requires a Git source tree.
-       ("git-source" ,(package-source git))
+       ("git-source"
+        ,(origin
+           (method url-fetch)
+           ;; XXX CGit is currently incompatible with Git > 2.18.
+           (uri "mirror://kernel.org/software/scm/git/git-2.18.0.tar.xz")
+           (sha256
+            (base32
+             "14hfwfkrci829a9316hnvkglnqqw1p03cw9k56p4fcb078wbwh4b"))))
        ("openssl" ,openssl)
        ("groff" ,groff)
        ("python" ,python)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 3e074e6c3f..aa2b4467fc 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -864,7 +864,7 @@ videoformats depend on the configuration flags of ffmpeg.")
 (define-public vlc
   (package
     (name "vlc")
-    (version "3.0.3-1")
+    (version "3.0.4")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -874,7 +874,7 @@ videoformats depend on the configuration flags of ffmpeg.")
              (patches (list %vlc-libx264-compat.patch))
              (sha256
               (base32
-               "1p7qvdvg9w4lz8vckzhn6bswfkq3qw7fqkgvwjcskdgc266xx7dw"))))
+               "17jsq0zqpqyxw4ckvjba0hf6zk8ywc4wf8sy3z03hh3ij0vxpwq1"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("flex" ,flex)
@@ -1203,7 +1203,7 @@ projects while introducing many more.")
 (define-public gnome-mpv
   (package
     (name "gnome-mpv")
-    (version "0.14")
+    (version "0.15")
     (source
      (origin
        (method url-fetch)
@@ -1212,7 +1212,7 @@ projects while introducing many more.")
                            ".tar.xz"))
        (sha256
         (base32
-         "03kjwd5jq0i5ajnvhjwf5019bjjaa16xkdrhdkiz1k58ipjvvj93"))))
+         "1y47abkidxh1il0bvq8r3dglwn3ggsy41x2n7ic3x23wvvcqmq74"))))
     (native-inputs
      `(("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
@@ -1270,7 +1270,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2018.08.04")
+    (version "2018.09.08")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://yt-dl.org/downloads/"
@@ -1278,7 +1278,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1hcx99qbbyigc8k98c8bcc6a2wnhq6493fmrkl7rysc8krlxr0pm"))))
+                "0vwc4faqdddrb3nm4fzmkr60n5rc2zwyy8jwrrjad60kcp8isf05"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 53d886cf0d..ac8e48eb10 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -889,7 +889,7 @@ used to validate and fix HTML data.")
 (define-public tinyproxy
   (package
     (name "tinyproxy")
-    (version "1.8.4")
+    (version "1.10.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/tinyproxy/tinyproxy/"
@@ -897,7 +897,7 @@ used to validate and fix HTML data.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "002hi97687czhfkwsjkr174yvlp10224qi6gd5s53z230bgls7x4"))))
+                "10jnk6y2swld25mm47mjc0nkffyzsfysnsxwr7cs0ns1kil8ggjr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -912,9 +912,6 @@ used to validate and fix HTML data.")
              ;; (substitute* "docs/man5/Makefile" (("a2x") "a2x -v"))
              ;; (setenv "XML_DEBUG_CATALOG" "1")
              #t)))))
-    ;; All of the below are used to generate the documentation
-    ;; (Should they be propagated inputs of asciidoc ??)
-    (native-inputs `(("asciidoc" ,asciidoc)))
     (home-page "https://tinyproxy.github.io/")
     (synopsis "Light-weight HTTP/HTTPS proxy daemon")
     (description "Tinyproxy is a light-weight HTTP/HTTPS proxy
@@ -6708,8 +6705,8 @@ compressed JSON header blocks.
     (license l:expat)))
 
 (define-public hpcguix-web
-  (let ((commit "9ff40fcc77f248901d861756dbbddc80270c380c")
-        (revision "2"))
+  (let ((commit "53e09ea59ec0380b41a4cbda32df8bdb9a10004d")
+        (revision "3"))
     (package
       (name "hpcguix-web")
       (version (git-version "0.0.1" revision commit))
@@ -6721,7 +6718,7 @@ compressed JSON header blocks.
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0lxcj9s3wxrv1l7lrxxx374jwzx7h60gxwkbgr46lzcbgvb3k26s"))))
+                  "1ah4pn9697vazhbvd45n4b1rrkx2nbhnw384cr0b941q3sz1dfyc"))))
       (build-system gnu-build-system)
       (arguments
        `(#:modules ((guix build gnu-build-system)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 1a78b2ac94..08f82ba2d2 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -848,7 +848,7 @@ Keybinder works with GTK-based applications using the X Window System.")
 (define-public spectrwm
   (package
     (name "spectrwm")
-    (version "3.1.0")
+    (version "3.2.0")
     (source
      (origin
        (method url-fetch)
@@ -859,7 +859,7 @@ Keybinder works with GTK-based applications using the X Window System.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "16lxcharxslf9rc39wxa3mr2nx5d8kzm9ls7p7dal8yrwr7y59dp"))))
+         "0z7gjmp1x6y8q3dnw6swvbv8x2wd4ykzjvi3ibk2sxhgc910907v"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (let ((pkg-config (lambda (flag)
@@ -871,7 +871,7 @@ Keybinder works with GTK-based applications using the X Window System.")
                        (string-append "PREFIX=" %output)
                        (string-append "INCS=-I. " (pkg-config "--cflags"))
                        (string-append "LIBS=" (pkg-config "--libs") " -lm")))
-       #:tests? #f ;No test suite
+       #:tests? #f                      ;no test suite
        #:phases
        (modify-phases %standard-phases
          (add-before 'build 'change-dir
@@ -881,13 +881,7 @@ Keybinder works with GTK-based applications using the X Window System.")
            (lambda _
              (substitute* "Makefile"
                (("-g") ""))))
-         (add-after 'change-dir 'fix-freetype-include
-           (lambda _
-             (substitute* "Makefile"
-               (("/usr/include/freetype2")
-                (string-append (assoc-ref %build-inputs "freetype")
-                               "/include/freetype2")))))
-         (delete 'configure))))                   ;no 'configure' exists
+         (delete 'configure))))         ;no 'configure' exists
     (inputs
      `(("freetype" ,freetype)
        ("fontconfig" ,fontconfig)
diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm
index aaf0b904fd..f08c896334 100644
--- a/gnu/services/admin.scm
+++ b/gnu/services/admin.scm
@@ -20,19 +20,14 @@
 (define-module (gnu services admin)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages base)
-  #:use-module (gnu packages logging)
   #:use-module (gnu services)
   #:use-module (gnu services mcron)
   #:use-module (gnu services shepherd)
-  #:use-module (gnu services web)
-  #:use-module (gnu system shadow)
   #:use-module (guix gexp)
-  #:use-module (guix store)
   #:use-module (guix packages)
   #:use-module (guix records)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 vlist)
-  #:use-module (ice-9 match)
   #:export (%default-rotations
             %rotated-files
 
@@ -46,29 +41,7 @@
             rottlog-configuration
             rottlog-configuration?
             rottlog-service
-            rottlog-service-type
-
-            <tailon-configuration-file>
-            tailon-configuration-file
-            tailon-configuration-file?
-            tailon-configuration-file-files
-            tailon-configuration-file-bind
-            tailon-configuration-file-relative-root
-            tailon-configuration-file-allow-transfers?
-            tailon-configuration-file-follow-names?
-            tailon-configuration-file-tail-lines
-            tailon-configuration-file-allowed-commands
-            tailon-configuration-file-debug?
-            tailon-configuration-file-http-auth
-            tailon-configuration-file-users
-
-            <tailon-configuration>
-            tailon-configuration
-            tailon-configuration?
-            tailon-configuration-config-file
-            tailon-configuration-package
-
-            tailon-service-type))
+            rottlog-service-type))
 
 ;;; Commentary:
 ;;;
@@ -203,149 +176,4 @@ Old log files are removed or compressed according to the configuration.")
                                  rotations)))))
    (default-value (rottlog-configuration))))
 
-
-;;;
-;;; Tailon
-;;;
-
-(define-record-type* <tailon-configuration-file>
-  tailon-configuration-file make-tailon-configuration-file
-  tailon-configuration-file?
-  (files                   tailon-configuration-file-files
-                           (default '("/var/log")))
-  (bind                    tailon-configuration-file-bind
-                           (default "localhost:8080"))
-  (relative-root           tailon-configuration-file-relative-root
-                           (default #f))
-  (allow-transfers?        tailon-configuration-file-allow-transfers?
-                           (default #t))
-  (follow-names?           tailon-configuration-file-follow-names?
-                           (default #t))
-  (tail-lines              tailon-configuration-file-tail-lines
-                           (default 200))
-  (allowed-commands        tailon-configuration-file-allowed-commands
-                           (default '("tail" "grep" "awk")))
-  (debug?                  tailon-configuration-file-debug?
-                           (default #f))
-  (wrap-lines              tailon-configuration-file-wrap-lines
-                           (default #t))
-  (http-auth               tailon-configuration-file-http-auth
-                           (default #f))
-  (users                   tailon-configuration-file-users
-                           (default #f)))
-
-(define (tailon-configuration-files-string files)
-  (string-append
-   "\n"
-   (string-join
-    (map
-     (lambda (x)
-       (string-append
-        "  - "
-        (cond
-         ((string? x)
-          (simple-format #f "'~A'" x))
-         ((list? x)
-          (string-join
-           (cons (simple-format #f "'~A':" (car x))
-                 (map
-                  (lambda (x) (simple-format #f "      - '~A'" x))
-                  (cdr x)))
-           "\n"))
-         (else (error x)))))
-     files)
-    "\n")))
-
-(define-gexp-compiler (tailon-configuration-file-compiler
-                       (file <tailon-configuration-file>) system target)
-  (match file
-    (($ <tailon-configuration-file> files bind relative-root
-                                    allow-transfers? follow-names?
-                                    tail-lines allowed-commands debug?
-                                    wrap-lines http-auth users)
-     (text-file
-      "tailon-config.yaml"
-      (string-concatenate
-       (filter-map
-        (match-lambda
-         ((key . #f) #f)
-         ((key . value) (string-append key ": " value "\n")))
-
-        `(("files" . ,(tailon-configuration-files-string files))
-          ("bind" . ,bind)
-          ("relative-root" . ,relative-root)
-          ("allow-transfers" . ,(if allow-transfers? "true" "false"))
-          ("follow-names" . ,(if follow-names? "true" "false"))
-          ("tail-lines" . ,(number->string tail-lines))
-          ("commands" . ,(string-append "["
-                                        (string-join allowed-commands ", ")
-                                        "]"))
-          ("debug" . ,(if debug? "true" #f))
-          ("wrap-lines" . ,(if wrap-lines "true" "false"))
-          ("http-auth" . ,http-auth)
-          ("users" . ,(if users
-                          (string-concatenate
-                           (cons "\n"
-                                 (map (match-lambda
-                                       ((user . pass)
-                                        (string-append
-                                         "  " user ":" pass)))
-                                      users)))
-                          #f)))))))))
-
-(define-record-type* <tailon-configuration>
-  tailon-configuration make-tailon-configuration
-  tailon-configuration?
-  (config-file tailon-configuration-config-file
-               (default (tailon-configuration-file)))
-  (package tailon-configuration-package
-           (default tailon)))
-
-(define tailon-shepherd-service
-  (match-lambda
-    (($ <tailon-configuration> config-file package)
-     (list (shepherd-service
-            (provision '(tailon))
-            (documentation "Run the tailon daemon.")
-            (start #~(make-forkexec-constructor
-                      `(,(string-append #$package "/bin/tailon")
-                        "-c" ,#$config-file)
-                      #:user "tailon"
-                      #:group "tailon"))
-            (stop #~(make-kill-destructor)))))))
-
-(define %tailon-accounts
-  (list (user-group (name "tailon") (system? #t))
-        (user-account
-         (name "tailon")
-         (group "tailon")
-         (system? #t)
-         (comment "tailon")
-         (home-directory "/var/empty")
-         (shell (file-append shadow "/sbin/nologin")))))
-
-(define tailon-service-type
-  (service-type
-   (name 'tailon)
-   (description
-    "Run Tailon, a Web application for monitoring, viewing, and searching log
-files.")
-   (extensions
-    (list (service-extension shepherd-root-service-type
-                             tailon-shepherd-service)
-          (service-extension account-service-type
-                             (const %tailon-accounts))))
-   (compose concatenate)
-   (extend (lambda (parameter files)
-             (tailon-configuration
-              (inherit parameter)
-              (config-file
-               (let ((old-config-file
-                      (tailon-configuration-config-file parameter)))
-                 (tailon-configuration-file
-                  (inherit old-config-file)
-                  (files (append (tailon-configuration-file-files old-config-file)
-                                 files))))))))
-   (default-value (tailon-configuration))))
-
 ;;; admin.scm ends here
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index df82a6de61..1c38e7d8d3 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -1,12 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
+;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,15 +27,18 @@
 (define-module (gnu services web)
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
+  #:use-module (gnu services admin)
   #:use-module (gnu system pam)
   #:use-module (gnu system shadow)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages web)
   #:use-module (gnu packages php)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages logging)
   #:use-module (guix records)
   #:use-module (guix modules)
   #:use-module (guix gexp)
+  #:use-module ((guix store) #:select (text-file))
   #:use-module ((guix utils) #:select (version-major))
   #:use-module ((guix packages) #:select (package-version))
   #:use-module (srfi srfi-1)
@@ -164,7 +168,29 @@
 
             hpcguix-web-configuration
             hpcguix-web-configuration?
-            hpcguix-web-service-type))
+            hpcguix-web-service-type
+
+            <tailon-configuration-file>
+            tailon-configuration-file
+            tailon-configuration-file?
+            tailon-configuration-file-files
+            tailon-configuration-file-bind
+            tailon-configuration-file-relative-root
+            tailon-configuration-file-allow-transfers?
+            tailon-configuration-file-follow-names?
+            tailon-configuration-file-tail-lines
+            tailon-configuration-file-allowed-commands
+            tailon-configuration-file-debug?
+            tailon-configuration-file-http-auth
+            tailon-configuration-file-users
+
+            <tailon-configuration>
+            tailon-configuration
+            tailon-configuration?
+            tailon-configuration-config-file
+            tailon-configuration-package
+
+            tailon-service-type))
 
 ;;; Commentary:
 ;;;
@@ -949,6 +975,14 @@ a webserver.")
         (chown home-dir (passwd:uid user) (passwd:gid user))
         (chmod home-dir #o755))))
 
+(define %hpcguix-web-log-file
+  "/var/log/hpcguix-web.log")
+
+(define %hpcguix-web-log-rotations
+  (list (log-rotation
+         (files (list %hpcguix-web-log-file))
+         (frequency 'weekly))))
+
 (define (hpcguix-web-shepherd-service config)
   (let ((specs       (hpcguix-web-configuration-specs config))
         (hpcguix-web (hpcguix-web-package config)))
@@ -966,7 +1000,8 @@ a webserver.")
                  #:group "hpcguix-web"
                  #:environment-variables
                  (list "XDG_CACHE_HOME=/var/cache"
-                       "SSL_CERT_DIR=/etc/ssl/certs")))
+                       "SSL_CERT_DIR=/etc/ssl/certs")
+                 #:log-file #$%hpcguix-web-log-file))
        (stop #~(make-kill-destructor))))))
 
 (define hpcguix-web-service-type
@@ -978,5 +1013,152 @@ a webserver.")
                              (const %hpcguix-web-accounts))
           (service-extension activation-service-type
                              (const %hpcguix-web-activation))
+          (service-extension rottlog-service-type
+                             (const %hpcguix-web-log-rotations))
           (service-extension shepherd-root-service-type
                              (compose list hpcguix-web-shepherd-service))))))
+
+
+;;;
+;;; Tailon
+;;;
+
+(define-record-type* <tailon-configuration-file>
+  tailon-configuration-file make-tailon-configuration-file
+  tailon-configuration-file?
+  (files                   tailon-configuration-file-files
+                           (default '("/var/log")))
+  (bind                    tailon-configuration-file-bind
+                           (default "localhost:8080"))
+  (relative-root           tailon-configuration-file-relative-root
+                           (default #f))
+  (allow-transfers?        tailon-configuration-file-allow-transfers?
+                           (default #t))
+  (follow-names?           tailon-configuration-file-follow-names?
+                           (default #t))
+  (tail-lines              tailon-configuration-file-tail-lines
+                           (default 200))
+  (allowed-commands        tailon-configuration-file-allowed-commands
+                           (default '("tail" "grep" "awk")))
+  (debug?                  tailon-configuration-file-debug?
+                           (default #f))
+  (wrap-lines              tailon-configuration-file-wrap-lines
+                           (default #t))
+  (http-auth               tailon-configuration-file-http-auth
+                           (default #f))
+  (users                   tailon-configuration-file-users
+                           (default #f)))
+
+(define (tailon-configuration-files-string files)
+  (string-append
+   "\n"
+   (string-join
+    (map
+     (lambda (x)
+       (string-append
+        "  - "
+        (cond
+         ((string? x)
+          (simple-format #f "'~A'" x))
+         ((list? x)
+          (string-join
+           (cons (simple-format #f "'~A':" (car x))
+                 (map
+                  (lambda (x) (simple-format #f "      - '~A'" x))
+                  (cdr x)))
+           "\n"))
+         (else (error x)))))
+     files)
+    "\n")))
+
+(define-gexp-compiler (tailon-configuration-file-compiler
+                       (file <tailon-configuration-file>) system target)
+  (match file
+    (($ <tailon-configuration-file> files bind relative-root
+                                    allow-transfers? follow-names?
+                                    tail-lines allowed-commands debug?
+                                    wrap-lines http-auth users)
+     (text-file
+      "tailon-config.yaml"
+      (string-concatenate
+       (filter-map
+        (match-lambda
+         ((key . #f) #f)
+         ((key . value) (string-append key ": " value "\n")))
+
+        `(("files" . ,(tailon-configuration-files-string files))
+          ("bind" . ,bind)
+          ("relative-root" . ,relative-root)
+          ("allow-transfers" . ,(if allow-transfers? "true" "false"))
+          ("follow-names" . ,(if follow-names? "true" "false"))
+          ("tail-lines" . ,(number->string tail-lines))
+          ("commands" . ,(string-append "["
+                                        (string-join allowed-commands ", ")
+                                        "]"))
+          ("debug" . ,(if debug? "true" #f))
+          ("wrap-lines" . ,(if wrap-lines "true" "false"))
+          ("http-auth" . ,http-auth)
+          ("users" . ,(if users
+                          (string-concatenate
+                           (cons "\n"
+                                 (map (match-lambda
+                                       ((user . pass)
+                                        (string-append
+                                         "  " user ":" pass)))
+                                      users)))
+                          #f)))))))))
+
+(define-record-type* <tailon-configuration>
+  tailon-configuration make-tailon-configuration
+  tailon-configuration?
+  (config-file tailon-configuration-config-file
+               (default (tailon-configuration-file)))
+  (package tailon-configuration-package
+           (default tailon)))
+
+(define tailon-shepherd-service
+  (match-lambda
+    (($ <tailon-configuration> config-file package)
+     (list (shepherd-service
+            (provision '(tailon))
+            (documentation "Run the tailon daemon.")
+            (start #~(make-forkexec-constructor
+                      `(,(string-append #$package "/bin/tailon")
+                        "-c" ,#$config-file)
+                      #:user "tailon"
+                      #:group "tailon"))
+            (stop #~(make-kill-destructor)))))))
+
+(define %tailon-accounts
+  (list (user-group (name "tailon") (system? #t))
+        (user-account
+         (name "tailon")
+         (group "tailon")
+         (system? #t)
+         (comment "tailon")
+         (home-directory "/var/empty")
+         (shell (file-append shadow "/sbin/nologin")))))
+
+(define tailon-service-type
+  (service-type
+   (name 'tailon)
+   (description
+    "Run Tailon, a Web application for monitoring, viewing, and searching log
+files.")
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             tailon-shepherd-service)
+          (service-extension account-service-type
+                             (const %tailon-accounts))))
+   (compose concatenate)
+   (extend (lambda (parameter files)
+             (tailon-configuration
+              (inherit parameter)
+              (config-file
+               (let ((old-config-file
+                      (tailon-configuration-config-file parameter)))
+                 (tailon-configuration-file
+                  (inherit old-config-file)
+                  (files (append (tailon-configuration-file-files old-config-file)
+                                 files))))))))
+   (default-value (tailon-configuration))))
diff --git a/gnu/tests/admin.scm b/gnu/tests/admin.scm
deleted file mode 100644
index a5abbe9ad4..0000000000
--- a/gnu/tests/admin.scm
+++ /dev/null
@@ -1,127 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu tests admin)
-  #:use-module (gnu tests)
-  #:use-module (gnu system)
-  #:use-module (gnu system file-systems)
-  #:use-module (gnu system shadow)
-  #:use-module (gnu system vm)
-  #:use-module (gnu services)
-  #:use-module (gnu services admin)
-  #:use-module (gnu services networking)
-  #:use-module (guix gexp)
-  #:use-module (guix store)
-  #:use-module (guix monads)
-  #:export (%test-tailon))
-
-(define %tailon-os
-  ;; Operating system under test.
-  (simple-operating-system
-   (dhcp-client-service)
-   (service tailon-service-type
-            (tailon-configuration
-             (config-file
-              (tailon-configuration-file
-               (bind "0.0.0.0:8080")))))))
-
-(define* (run-tailon-test #:optional (http-port 8081))
-  "Run tests in %TAILON-OS, which has tailon running and listening on
-HTTP-PORT."
-  (define os
-    (marionette-operating-system
-     %tailon-os
-     #:imported-modules '((gnu services herd)
-                          (guix combinators))))
-
-  (define vm
-    (virtual-machine
-     (operating-system os)
-     (port-forwardings `((,http-port . 8080)))))
-
-  (define test
-    (with-imported-modules '((gnu build marionette))
-      #~(begin
-          (use-modules (srfi srfi-11) (srfi srfi-64)
-                       (ice-9 match)
-                       (gnu build marionette)
-                       (web uri)
-                       (web client)
-                       (web response))
-
-          (define marionette
-            ;; Forward the guest's HTTP-PORT, where tailon is listening, to
-            ;; port 8080 in the host.
-            (make-marionette (list #$vm)))
-
-          (mkdir #$output)
-          (chdir #$output)
-
-          (test-begin "tailon")
-
-          (test-assert "service running"
-            (marionette-eval
-             '(begin
-                (use-modules (gnu services herd))
-                (start-service 'tailon))
-             marionette))
-
-          (define* (retry-on-error f #:key times delay)
-            (let loop ((attempt 1))
-              (match (catch
-                      #t
-                      (lambda ()
-                        (cons #t
-                              (f)))
-                      (lambda args
-                        (cons #f
-                              args)))
-                ((#t . return-value)
-                 return-value)
-                ((#f . error-args)
-                 (if (>= attempt times)
-                     error-args
-                     (begin
-                       (sleep delay)
-                       (loop (+ 1 attempt))))))))
-
-          (test-equal "http-get"
-            200
-            (retry-on-error
-             (lambda ()
-               (let-values (((response text)
-                             (http-get #$(format
-                                          #f
-                                          "http://localhost:~A/"
-                                          http-port)
-                                       #:decode-body? #t)))
-                 (response-code response)))
-             #:times 10
-             #:delay 5))
-
-          (test-end)
-          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
-
-  (gexp->derivation "tailon-test" test))
-
-(define %test-tailon
-  (system-test
-   (name "tailon")
-   (description "Connect to a running Tailon server.")
-   (value (run-tailon-test))))
diff --git a/gnu/tests/web.scm b/gnu/tests/web.scm
index 73d502dd0e..45fcb668fb 100644
--- a/gnu/tests/web.scm
+++ b/gnu/tests/web.scm
@@ -33,7 +33,8 @@
   #:export (%test-httpd
             %test-nginx
             %test-php-fpm
-            %test-hpcguix-web))
+            %test-hpcguix-web
+            %test-tailon))
 
 (define %index.html-contents
   ;; Contents of the /index.html file.
@@ -359,3 +360,99 @@ HTTP-PORT, along with php-fpm."
    (name "hpcguix-web")
    (description "Connect to a running hpcguix-web server.")
    (value (run-hpcguix-web-server-test name %hpcguix-web-os))))
+
+
+(define %tailon-os
+  ;; Operating system under test.
+  (simple-operating-system
+   (dhcp-client-service)
+   (service tailon-service-type
+            (tailon-configuration
+             (config-file
+              (tailon-configuration-file
+               (bind "0.0.0.0:8080")))))))
+
+(define* (run-tailon-test #:optional (http-port 8081))
+  "Run tests in %TAILON-OS, which has tailon running and listening on
+HTTP-PORT."
+  (define os
+    (marionette-operating-system
+     %tailon-os
+     #:imported-modules '((gnu services herd)
+                          (guix combinators))))
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (port-forwardings `((,http-port . 8080)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-11) (srfi srfi-64)
+                       (ice-9 match)
+                       (gnu build marionette)
+                       (web uri)
+                       (web client)
+                       (web response))
+
+          (define marionette
+            ;; Forward the guest's HTTP-PORT, where tailon is listening, to
+            ;; port 8080 in the host.
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "tailon")
+
+          (test-assert "service running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (start-service 'tailon))
+             marionette))
+
+          (define* (retry-on-error f #:key times delay)
+            (let loop ((attempt 1))
+              (match (catch
+                      #t
+                      (lambda ()
+                        (cons #t
+                              (f)))
+                      (lambda args
+                        (cons #f
+                              args)))
+                ((#t . return-value)
+                 return-value)
+                ((#f . error-args)
+                 (if (>= attempt times)
+                     error-args
+                     (begin
+                       (sleep delay)
+                       (loop (+ 1 attempt))))))))
+
+          (test-equal "http-get"
+            200
+            (retry-on-error
+             (lambda ()
+               (let-values (((response text)
+                             (http-get #$(format
+                                          #f
+                                          "http://localhost:~A/"
+                                          http-port)
+                                       #:decode-body? #t)))
+                 (response-code response)))
+             #:times 10
+             #:delay 5))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "tailon-test" test))
+
+(define %test-tailon
+  (system-test
+   (name "tailon")
+   (description "Connect to a running Tailon server.")
+   (value (run-tailon-test))))
diff --git a/guix/build-system/dub.scm b/guix/build-system/dub.scm
index 13c89e8648..5a31a2f51a 100644
--- a/guix/build-system/dub.scm
+++ b/guix/build-system/dub.scm
@@ -35,13 +35,13 @@
 (define (default-ldc)
   "Return the default ldc package."
   ;; Lazily resolve the binding to avoid a circular dependency.
-  (let ((ldc (resolve-interface '(gnu packages ldc))))
+  (let ((ldc (resolve-interface '(gnu packages dlang))))
     (module-ref ldc 'ldc)))
 
 (define (default-dub)
   "Return the default dub package."
   ;; Lazily resolve the binding to avoid a circular dependency.
-  (let ((ldc (resolve-interface '(gnu packages ldc))))
+  (let ((ldc (resolve-interface '(gnu packages dlang))))
     (module-ref ldc 'dub)))
 
 (define (default-pkg-config)
diff --git a/guix/build/profiles.scm b/guix/build/profiles.scm
index df785c85a7..0c23cd300e 100644
--- a/guix/build/profiles.scm
+++ b/guix/build/profiles.scm
@@ -94,12 +94,20 @@ definitions for all the SEARCH-PATHS."
         (for-each (write-environment-variable-definition port)
                   (map (abstract-profile output) variables))))))
 
-(define (ensure-writable-directory directory)
+(define* (ensure-writable-directory directory
+                                    #:key (symlink symlink))
   "Ensure DIRECTORY exists and is writable.  If DIRECTORY is currently a
 symlink (to a read-only directory in the store), then delete the symlink and
 instead make DIRECTORY a \"real\" directory containing symlinks."
+  (define (absolute? file)
+    (string-prefix? "/" file))
+
   (define (unsymlink link)
-    (let* ((target (readlink link))
+    (let* ((target (match (readlink link)
+                     ((? absolute? target)
+                      target)
+                     ((? string? relative)
+                      (string-append (dirname link) "/" relative))))
            ;; TARGET might itself be a symlink, so append "/" to make sure
            ;; 'scandir' enters it.
            (files  (scandir (string-append target "/")
@@ -149,7 +157,8 @@ SEARCH-PATHS."
   ;; Make sure we can write to 'OUTPUT/etc'.  'union-build' above could have
   ;; made 'etc' a symlink to a read-only sub-directory in the store so we need
   ;; to work around that.
-  (ensure-writable-directory (string-append output "/etc"))
+  (ensure-writable-directory (string-append output "/etc")
+                             #:symlink symlink)
 
   ;; Write 'OUTPUT/etc/profile'.
   (build-etc/profile output search-paths))
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 74cb675fcf..56a689f667 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -385,8 +385,8 @@ the returned procedure is called."
                             #:return-errno? #t)))
     (lambda args
       (lambda _
-        (error (format #f "~a: syscall->procedure failed: ~s"
-                       name args))))))
+        (throw 'system-error name  "~A" (list (strerror ENOSYS))
+               (list ENOSYS))))))
 
 (define-syntax define-as-needed
   (syntax-rules ()
diff --git a/guix/git-download.scm b/guix/git-download.scm
index 33f102bc6c..e6e0ec2ac5 100644
--- a/guix/git-download.scm
+++ b/guix/git-download.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
 ;;;
@@ -19,7 +19,6 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix git-download)
-  #:use-module (guix build utils)
   #:use-module (guix gexp)
   #:use-module (guix store)
   #:use-module (guix monads)
@@ -27,9 +26,8 @@
   #:use-module (guix packages)
   #:use-module (guix modules)
   #:autoload   (guix build-system gnu) (standard-packages)
+  #:use-module (git)
   #:use-module (ice-9 match)
-  #:use-module (ice-9 popen)
-  #:use-module (ice-9 rdelim)
   #:use-module (ice-9 vlist)
   #:use-module (srfi srfi-1)
   #:export (git-reference
@@ -153,41 +151,31 @@ HASH-ALGO (a symbol).  Use NAME as the file name, or a generic name if #f."
 ;;; 'git-predicate'.
 ;;;
 
-(define (files->directory-tree files)
-  "Return a tree of vhashes representing the directory listed in FILES, a list
-like '(\"a/b\" \"b/c/d\")."
-  (fold (lambda (file result)
-          (let loop ((file (string-split file #\/))
-                     (result result))
-            (match file
-              ((_)
-               result)
-              ((directory children ...)
-               (match (vhash-assoc directory result)
-                 (#f
-                  (vhash-cons directory (loop children vlist-null)
-                              result))
-                 ((_ . previous)
-                  ;; XXX: 'vhash-delete' is O(n).
-                  (vhash-cons directory (loop children previous)
-                              (vhash-delete directory result)))))
-              (()
-               result))))
-        vlist-null
-        files))
-
-(define (directory-in-tree? tree directory)
-  "Return true if DIRECTORY, a string like \"a/b\", denotes a directory listed
-in TREE."
-  (let loop ((directory (string-split directory #\/))
-             (tree       tree))
-    (match directory
-      (()
-       #t)
-      ((head . tail)
-       (match (vhash-assoc head tree)
-         ((_ . sub-tree) (loop tail sub-tree))
-         (#f #f))))))
+(define (git-file-list directory)
+  "Return the list of files checked in in the Git repository at DIRECTORY.
+The result is similar to that of the 'git ls-files' command, except that it
+also includes directories, not just regular files.  The returned file names
+are relative to DIRECTORY, which is not necessarily the root of the checkout."
+  (let* ((directory  (canonicalize-path directory))
+         (dot-git    (repository-discover directory))
+         (top        (dirname dot-git))
+         (repository (repository-open dot-git))
+         (head       (repository-head repository))
+         (oid        (reference-target head))
+         (commit     (commit-lookup repository oid))
+         (tree       (commit-tree commit))
+         (files      (tree-list tree)))
+    (repository-close! repository)
+    (if (string=? top directory)
+        files
+        (let ((relative (string-append
+                         (string-drop directory
+                                      (+ 1 (string-length top)))
+                         "/")))
+          (filter-map (lambda (file)
+                        (and (string-prefix? relative file)
+                             (string-drop file (string-length relative))))
+                      files)))))
 
 (define (git-predicate directory)
   "Return a predicate that returns true if a file is part of the Git checkout
@@ -195,43 +183,20 @@ living at DIRECTORY.  Upon Git failure, return #f instead of a predicate.
 
 The returned predicate takes two arguments FILE and STAT where FILE is an
 absolute file name and STAT is the result of 'lstat'."
-  (let* ((pipe           (with-directory-excursion directory
-                           (open-pipe* OPEN_READ "git" "ls-files")))
-         (files          (let loop ((lines '()))
-                           (match (read-line pipe)
-                             ((? eof-object?)
-                              (reverse lines))
-                             (line
-                              (loop (cons line lines))))))
-         (directory-tree (files->directory-tree files))
-         (inodes         (fold (lambda (file result)
-                                 (let ((stat
-                                        (lstat (string-append directory "/"
-                                                              file))))
-                                   (vhash-consv (stat:ino stat) (stat:dev stat)
-                                                result)))
-                               vlist-null
-                               files))
-
-         ;; Note: For this to work we must *not* call 'canonicalize-path' on
-         ;; DIRECTORY or we would get discrepancies of the returned lambda is
-         ;; called with a non-canonical file name.
-         (prefix-length  (+ 1 (string-length directory)))
-
-         (status         (close-pipe pipe)))
-    (and (zero? status)
-         (lambda (file stat)
-           (match (stat:type stat)
-             ('directory
-              (directory-in-tree? directory-tree
-                                  (string-drop file prefix-length)))
-             ((or 'regular 'symlink)
-              ;; Comparing file names is always tricky business so we rely on
-              ;; inode numbers instead
-              (match (vhash-assv (stat:ino stat) inodes)
-                ((_ . dev) (= dev (stat:dev stat)))
-                (#f        #f)))
-             (_
-              #f))))))
+  (let* ((files  (git-file-list directory))
+         (inodes (fold (lambda (file result)
+                         (let ((stat
+                                (lstat (string-append directory "/"
+                                                      file))))
+                           (vhash-consv (stat:ino stat) (stat:dev stat)
+                                        result)))
+                       vlist-null
+                       files)))
+    (lambda (file stat)
+      ;; Comparing file names is always tricky business so we rely on inode
+      ;; numbers instead.
+      (match (vhash-assv (stat:ino stat) inodes)
+        ((_ . dev) (= dev (stat:dev stat)))
+        (#f        #f)))))
 
 ;;; git-download.scm ends here
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index 3fa3c2c20f..9d38610633 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -733,9 +733,11 @@ needed."
         ;; Set the build options before we do anything else.
         (set-build-options-from-command-line store opts)
 
-        (parameterize ((current-build-output-port (if quiet?
-                                                      (%make-void-port "w")
-                                                      (build-output-port #:verbose? #t))))
+        (parameterize ((current-build-output-port
+                        (if quiet?
+                            (%make-void-port "w")
+                            (build-output-port #:verbose? #t
+                                               #:port (duplicate-port (current-error-port) "w")))))
           (let* ((mode  (assoc-ref opts 'build-mode))
                  (drv   (options->derivations store opts))
                  (urls  (map (cut string-append <> "/log")
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 73cbccba3b..c3ed2ac935 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -950,5 +950,6 @@ processed, #f otherwise."
                                %bootstrap-guile
                                (canonical-package guile-2.2))))
                          (current-build-output-port
-                          (build-output-port #:verbose? verbose?)))
+                          (build-output-port #:verbose? verbose?
+                                             #:port (duplicate-port (current-error-port) "w"))))
             (process-actions (%store) opts))))))
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index cd300195d8..6d31dfdaa4 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -1087,7 +1087,10 @@ default value."
     (#f     #f)
     (locale (false-if-exception (setlocale LC_ALL locale))))
 
-  (set-thread-name "guix substitute")
+  (catch 'system-error
+    (lambda ()
+      (set-thread-name "guix substitute"))
+    (const #t))                                   ;GNU/Hurd lacks 'prctl'
 
   (with-networking
    (with-error-handling                           ; for signature errors
diff --git a/guix/ui.scm b/guix/ui.scm
index 1bbd37c255..c55ae7e2f8 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -1708,12 +1708,26 @@ phase announcements and replaces any other output with a spinner."
                         (string-append
                          (proc "Building " 'BLUE 'BOLD)
                          (match:substring m 2) "\n")))
-                    ("^(@ build-failed) (.*) (.*)"
-                     #:transform
-                     ,(lambda (m)
-                        (string-append
-                         (proc "Build failed: " 'RED 'BOLD)
-                         (match:substring m 2) "\n")))
+                    ,(if verbose?
+                         ;; Err on the side of caution: show everything, even
+                         ;; if it might be redundant.
+                         `("^(@ build-failed)(.+)"
+                           #:transform
+                           ,(lambda (m)
+                              (string-append
+                               (proc "Build failed: " 'RED 'BOLD)
+                               (match:substring m 2))))
+                         ;; Show only that the build failed.
+                         `("^(@ build-failed)(.+) -.*"
+                           #:transform
+                           ,(lambda (m)
+                              (string-append
+                               (proc "Build failed: " 'RED 'BOLD)
+                               (match:substring m 2)
+                               "\n"))))
+                    ;; NOTE: this line contains "\n" characters.
+                    ("^(sha256 hash mismatch for output path)(.*)"
+                     RED BLACK)
                     ("^(@ build-succeeded) (.*) (.*)"
                      #:transform
                      ,(lambda (m)
diff --git a/tests/profiles.scm b/tests/profiles.scm
index 3a59a0cc4f..9f366a04ef 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -20,6 +20,7 @@
 (define-module (test-profiles)
   #:use-module (guix tests)
   #:use-module (guix profiles)
+  #:use-module (guix gexp)
   #:use-module (guix store)
   #:use-module (guix monads)
   #:use-module (guix grafts)
@@ -543,6 +544,41 @@
                                get-string-all)
                              "foo!"))))))
 
+(test-assertm "profile-derivation when etc/ is a relative symlink"
+  ;; See <https://bugs.gnu.org/32686>.
+  (mlet* %store-monad
+      ((etc        (gexp->derivation
+                    "etc"
+                    #~(begin
+                        (mkdir #$output)
+                        (call-with-output-file (string-append #$output "/foo")
+                          (lambda (port)
+                            (display "Heya!" port))))))
+       (thing ->   (dummy-package "dummy"
+                     (build-system trivial-build-system)
+                     (inputs
+                      `(("etc" ,etc)))
+                     (arguments
+                      `(#:guile ,%bootstrap-guile
+                        #:builder
+                        (let ((out (assoc-ref %outputs "out"))
+                              (etc (assoc-ref %build-inputs "etc")))
+                          (mkdir out)
+                          (symlink etc (string-append out "/etc"))
+                          #t)))))
+       (entry ->   (package->manifest-entry thing))
+       (drv        (profile-derivation (manifest (list entry))
+                                       #:relative-symlinks? #t
+                                       #:hooks '()
+                                       #:locales? #f))
+       (profile -> (derivation->output-path drv)))
+    (mbegin %store-monad
+      (built-derivations (list drv))
+      (return (string=? (call-with-input-file
+                            (string-append profile "/etc/foo")
+                          get-string-all)
+                        "Heya!")))))
+
 (test-equalm "union vs. dangling symlink"        ;<https://bugs.gnu.org/26949>
   "does-not-exist"
   (mlet* %store-monad