summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--build-aux/compile-all.scm59
-rw-r--r--doc/guix.texi34
-rw-r--r--gnu/build/accounts.scm14
-rw-r--r--gnu/build/linux-container.scm16
-rw-r--r--gnu/local.mk10
-rw-r--r--gnu/packages.scm8
-rw-r--r--gnu/packages/admin.scm4
-rw-r--r--gnu/packages/algebra.scm47
-rw-r--r--gnu/packages/android.scm12
-rw-r--r--gnu/packages/apl.scm8
-rw-r--r--gnu/packages/astronomy.scm99
-rw-r--r--gnu/packages/bash.scm8
-rw-r--r--gnu/packages/bioconductor.scm24
-rw-r--r--gnu/packages/bioinformatics.scm12
-rw-r--r--gnu/packages/calcurse.scm4
-rw-r--r--gnu/packages/check.scm11
-rw-r--r--gnu/packages/chromium.scm5
-rw-r--r--gnu/packages/databases.scm22
-rw-r--r--gnu/packages/disk.scm13
-rw-r--r--gnu/packages/emacs-xyz.scm541
-rw-r--r--gnu/packages/emulators.scm4
-rw-r--r--gnu/packages/enchant.scm5
-rw-r--r--gnu/packages/finance.scm4
-rw-r--r--gnu/packages/freedesktop.scm4
-rw-r--r--gnu/packages/game-development.scm34
-rw-r--r--gnu/packages/games.scm73
-rw-r--r--gnu/packages/genealogy.scm112
-rw-r--r--gnu/packages/geo.scm33
-rw-r--r--gnu/packages/gl.scm25
-rw-r--r--gnu/packages/gnome.scm15
-rw-r--r--gnu/packages/gnupg.scm18
-rw-r--r--gnu/packages/gnuzilla.scm4
-rw-r--r--gnu/packages/gtk.scm37
-rw-r--r--gnu/packages/guile-xyz.scm66
-rw-r--r--gnu/packages/image.scm28
-rw-r--r--gnu/packages/java.scm44
-rw-r--r--gnu/packages/linux.scm20
-rw-r--r--gnu/packages/lisp.scm627
-rw-r--r--gnu/packages/llvm.scm41
-rw-r--r--gnu/packages/mail.scm8
-rw-r--r--gnu/packages/mastodon.scm6
-rw-r--r--gnu/packages/mate.scm11
-rw-r--r--gnu/packages/maths.scm4
-rw-r--r--gnu/packages/mc.scm4
-rw-r--r--gnu/packages/messaging.scm62
-rw-r--r--gnu/packages/mpi.scm4
-rw-r--r--gnu/packages/music.scm43
-rw-r--r--gnu/packages/patches/emacs-zones-called-interactively.patch18
-rw-r--r--gnu/packages/patches/khmer-use-libraries.patch16
-rw-r--r--gnu/packages/patches/lcalc-default-parameters-1.patch26
-rw-r--r--gnu/packages/patches/lcalc-default-parameters-2.patch58
-rw-r--r--gnu/packages/patches/lcalc-lcommon-h.patch13
-rw-r--r--gnu/packages/patches/lcalc-using-namespace-std.patch43
-rw-r--r--gnu/packages/patches/leela-zero-gtest.patch40
-rw-r--r--gnu/packages/patches/lrcalc-includes.patch92
-rw-r--r--gnu/packages/patches/python-pyatspi-python-37.patch82
-rw-r--r--gnu/packages/pdf.scm4
-rw-r--r--gnu/packages/perl.scm60
-rw-r--r--gnu/packages/python-check.scm135
-rw-r--r--gnu/packages/python-compression.scm33
-rw-r--r--gnu/packages/python-crypto.scm5
-rw-r--r--gnu/packages/python-xyz.scm299
-rw-r--r--gnu/packages/sagemath.scm123
-rw-r--r--gnu/packages/sawfish.scm34
-rw-r--r--gnu/packages/sync.scm18
-rw-r--r--gnu/packages/tcl.scm42
-rw-r--r--gnu/packages/text-editors.scm49
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/virtualization.scm48
-rw-r--r--gnu/packages/web.scm10
-rw-r--r--gnu/packages/wine.scm6
-rw-r--r--gnu/packages/xdisorg.scm7
-rw-r--r--gnu/packages/xfce.scm4
-rw-r--r--gnu/packages/xorg.scm21
-rw-r--r--gnu/services/networking.scm18
-rw-r--r--gnu/system/linux-initrd.scm7
-rw-r--r--gnu/tests/base.scm4
-rw-r--r--gnu/tests/install.scm1
-rw-r--r--guix/build/compile.scm3
-rw-r--r--guix/build/syscalls.scm37
-rw-r--r--guix/derivations.scm277
-rw-r--r--guix/progress.scm4
-rw-r--r--guix/scripts/build.scm11
-rw-r--r--guix/scripts/graph.scm3
-rw-r--r--guix/scripts/package.scm41
-rw-r--r--guix/scripts/publish.scm26
-rw-r--r--guix/scripts/system/search.scm44
-rw-r--r--guix/ui.scm142
-rw-r--r--tests/derivations.scm80
-rw-r--r--tests/grafts.scm14
-rw-r--r--tests/guix-daemon.sh2
-rw-r--r--tests/packages.scm32
-rw-r--r--tests/syscalls.scm5
-rw-r--r--tests/ui.scm27
94 files changed, 3454 insertions, 901 deletions
diff --git a/build-aux/compile-all.scm b/build-aux/compile-all.scm
index 4259ea523c..e9f3e957d9 100644
--- a/build-aux/compile-all.scm
+++ b/build-aux/compile-all.scm
@@ -91,20 +91,45 @@ to 'make'."
 
 (match (command-line)
   ((_ . files)
-   (compile-files srcdir (getcwd)
-                  (filter file-needs-compilation? files)
-                  #:workers (parallel-job-count)
-                  #:host host
-                  #:report-load (lambda (file total completed)
-                                  (when file
-                                    (format #t "[~3d%] LOAD     ~a~%"
-                                            (% (+ 1 completed) (* 2 total))
-                                            file)
-                                    (force-output)))
-                  #:report-compilation (lambda (file total completed)
-                                         (when file
-                                           (format #t "[~3d%] GUILEC   ~a~%"
-                                                   (% (+ total completed 1)
-                                                      (* 2 total))
-                                                   (scm->go file))
-                                           (force-output))))))
+   (catch #t
+     (lambda ()
+       (compile-files srcdir (getcwd)
+                      (filter file-needs-compilation? files)
+                      #:workers (parallel-job-count)
+                      #:host host
+                      #:report-load (lambda (file total completed)
+                                      (when file
+                                        (format #t "[~3d%] LOAD     ~a~%"
+                                                (% (+ 1 completed) (* 2 total))
+                                                file)
+                                        (force-output)))
+                      #:report-compilation (lambda (file total completed)
+                                             (when file
+                                               (format #t "[~3d%] GUILEC   ~a~%"
+                                                       (% (+ total completed 1)
+                                                          (* 2 total))
+                                                       (scm->go file))
+                                               (force-output)))))
+     (lambda _
+       (primitive-exit 1))
+     (lambda args
+       ;; Try to report the error in an intelligible way.
+       (let* ((stack   (make-stack #t))
+              (frame   (if (> (stack-length stack) 1)
+                           (stack-ref stack 1)    ;skip the 'throw' frame
+                           (stack-ref stack 0)))
+              (ui      (false-if-exception
+                        (resolve-module '(guix ui))))
+              (report  (and ui
+                            (false-if-exception
+                             (module-ref ui 'report-load-error)))))
+         (if report
+             ;; In Guile <= 2.2.5, 'current-load-port' was not exported.
+             (let ((load-port ((module-ref (resolve-module '(ice-9 ports))
+                                           'current-load-port))))
+               (report (or (and=> load-port port-filename) "?.scm")
+                       args frame))
+             (begin
+               (print-exception (current-error-port) frame
+                                (car args) (cdr args))
+               (display-backtrace stack (current-error-port)))))))))
diff --git a/doc/guix.texi b/doc/guix.texi
index 1d57546ac5..888be1521f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2430,13 +2430,14 @@ The resulting file will be much smaller than 50 GB (typically less than
 Boot the USB installation image in an VM:
 
 @example
-qemu-system-x86_64 -m 1024 -smp 1 \
+qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm \
   -net user -net nic,model=virtio -boot menu=on \
   -drive file=guix-system-install-@value{VERSION}.@var{system}.iso \
   -drive file=guixsd.img
 @end example
 
-The ordering of the drives matters.
+The ordering of the drives matters.  @code{-enable-kvm} is optional, but
+significantly improves performance, @pxref{Running Guix in a VM}.
 
 In the VM console, quickly press the @kbd{F12} key to enter the boot
 menu.  Then press the @kbd{2} key and the @kbd{RET} key to validate your
@@ -12735,10 +12736,35 @@ NetworkManager will update @code{resolv.conf} to reflect the nameservers
 provided by currently active connections.
 
 @item dnsmasq
-NetworkManager will run @code{dnsmasq} as a local caching nameserver,
-using a "split DNS" configuration if you are connected to a VPN, and
+NetworkManager will run @code{dnsmasq} as a local caching nameserver, using a
+@dfn{conditional forwarding} configuration if you are connected to a VPN, and
 then update @code{resolv.conf} to point to the local nameserver.
 
+With this setting, you can share your network connection.  For example when
+you want to share your network connection to another laptop @i{via} an
+Ethernet cable, you can open @command{nm-connection-editor} and configure the
+Wired connection's method for IPv4 and IPv6 to be ``Shared to other computers''
+and reestablish the connection (or reboot).
+
+You can also set up a @dfn{host-to-guest connection} to QEMU VMs
+(@pxref{Installing Guix in a VM}).  With a host-to-guest connection, you can
+e.g.@: access a Web server running on the VM (@pxref{Web Services}) from a Web
+browser on your host system, or connect to the VM @i{via} SSH
+(@pxref{Networking Services, @code{openssh-service-type}}).  To set up a
+host-to-guest connection, run this command once:
+
+@example
+nmcli connection add type tun \
+ connection.interface-name tap0 \
+ tun.mode tap tun.owner $(id -u) \
+ ipv4.method shared \
+ ipv4.addresses 172.28.112.1/24
+@end example
+
+Then each time you launch your QEMU VM (@pxref{Running Guix in a VM}), pass
+@option{-nic tap,ifname=tap0,script=no,downscript=no} to
+@command{qemu-system-...}.
+
 @item none
 NetworkManager will not modify @code{resolv.conf}.
 @end table
diff --git a/gnu/build/accounts.scm b/gnu/build/accounts.scm
index b90149565f..5094456ab1 100644
--- a/gnu/build/accounts.scm
+++ b/gnu/build/accounts.scm
@@ -19,7 +19,6 @@
 (define-module (gnu build accounts)
   #:use-module (guix records)
   #:use-module (guix combinators)
-  #:use-module ((guix build syscalls) #:select (fdatasync))
   #:use-module (gnu system accounts)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
@@ -231,14 +230,6 @@ each field."
   ;; grab this lock with 'with-file-lock' when they access the databases.
   "/etc/.pwd.lock")
 
-(define-syntax-rule (catch-ENOSYS exp)
-  (catch 'system-error
-    (lambda () exp)
-    (lambda args
-      (if (= ENOSYS (system-error-errno args))
-          #f
-          (apply throw args)))))
-
 (define (database-writer file mode entry->string)
   (lambda* (entries #:optional (file-or-port file))
     "Write ENTRIES to FILE-OR-PORT.  When FILE-OR-PORT is a file name, write
@@ -259,10 +250,7 @@ to it atomically and set the appropriate permissions."
               (chmod port mode)
               (write-entries port)
 
-              ;; XXX: When booting with the statically-linked Guile,
-              ;; 'fdatasync' is unavailable.
-              (catch-ENOSYS (fdatasync port))
-
+              (fsync port)
               (close-port port)
               (rename-file template file-or-port))
             (lambda ()
diff --git a/gnu/build/linux-container.scm b/gnu/build/linux-container.scm
index 3d7b52f098..e86ac606c0 100644
--- a/gnu/build/linux-container.scm
+++ b/gnu/build/linux-container.scm
@@ -22,7 +22,6 @@
   #:use-module (ice-9 match)
   #:use-module (ice-9 rdelim)
   #:use-module (srfi srfi-98)
-  #:use-module (guix utils)
   #:use-module (guix build utils)
   #:use-module (guix build syscalls)
   #:use-module (gnu system file-systems)          ;<file-system>
@@ -279,6 +278,21 @@ that host UIDs (respectively GIDs) map to in the namespace."
               (_                                  ;unexpected termination
                #f)))))))))
 
+;; FIXME: This is copied from (guix utils), which we cannot use because it
+;; would pull (guix config) and all.
+(define (call-with-temporary-directory proc)
+  "Call PROC with a name of a temporary directory; close the directory and
+delete it when leaving the dynamic extent of this call."
+  (let* ((directory (or (getenv "TMPDIR") "/tmp"))
+         (template  (string-append directory "/guix-directory.XXXXXX"))
+         (tmp-dir   (mkdtemp! template)))
+    (dynamic-wind
+      (const #t)
+      (lambda ()
+        (proc tmp-dir))
+      (lambda ()
+        (false-if-exception (delete-file-recursively tmp-dir))))))
+
 (define* (call-with-container mounts thunk #:key (namespaces %namespaces)
                               (host-uids 1) (guest-uid 0) (guest-gid 0))
   "Run THUNK in a new container process and return its exit status.
diff --git a/gnu/local.mk b/gnu/local.mk
index d375b8cd1d..f90d0cf402 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -20,6 +20,7 @@
 # Copyright © 2018, 2019 Oleg Pykhalov <go.wigust@gmail.com>
 # Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com>
 # Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+# Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 #
 # This file is part of GNU Guix.
 #
@@ -195,6 +196,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/gcc.scm				\
   %D%/packages/gd.scm				\
   %D%/packages/gdb.scm				\
+  %D%/packages/genealogy.scm			\
   %D%/packages/genimage.scm			\
   %D%/packages/geo.scm				\
   %D%/packages/gettext.scm			\
@@ -956,7 +958,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
-  %D%/packages/patches/khmer-use-libraries.patch                \
   %D%/packages/patches/libziparchive-add-includes.patch		\
   %D%/packages/patches/localed-xorg-keyboard.patch		\
   %D%/packages/patches/kiki-level-selection-crash.patch		\
@@ -978,9 +979,14 @@ dist_patch_DATA =						\
   %D%/packages/patches/kodi-set-libcurl-ssl-parameters.patch		\
   %D%/packages/patches/kodi-skip-test-449.patch		\
   %D%/packages/patches/laby-make-install.patch			\
+  %D%/packages/patches/lcalc-default-parameters-1.patch		\
+  %D%/packages/patches/lcalc-default-parameters-2.patch		\
+  %D%/packages/patches/lcalc-lcommon-h.patch    		\
+  %D%/packages/patches/lcalc-using-namespace-std.patch 		\
   %D%/packages/patches/lcms-CVE-2018-16435.patch		\
   %D%/packages/patches/ldc-bootstrap-disable-tests.patch	\
   %D%/packages/patches/ldc-disable-phobos-tests.patch		\
+  %D%/packages/patches/leela-zero-gtest.patch			\
   %D%/packages/patches/liba52-enable-pic.patch			\
   %D%/packages/patches/liba52-link-with-libm.patch		\
   %D%/packages/patches/liba52-set-soname.patch			\
@@ -1040,6 +1046,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch	\
   %D%/packages/patches/llvm-for-extempore.patch			\
   %D%/packages/patches/lm-sensors-hwmon-attrs.patch		\
+  %D%/packages/patches/lrcalc-includes.patch    		\
   %D%/packages/patches/lrzip-CVE-2017-8842.patch		\
   %D%/packages/patches/lua-CVE-2014-5461.patch                      \
   %D%/packages/patches/lua-pkgconfig.patch                      \
@@ -1208,6 +1215,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-mox3-python3.6-compat.patch	\
   %D%/packages/patches/python-testtools.patch			\
   %D%/packages/patches/python-paste-remove-timing-test.patch	\
+  %D%/packages/patches/python-pyatspi-python-37.patch	\
   %D%/packages/patches/python-pycrypto-CVE-2013-7459.patch	\
   %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
   %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch	\
diff --git a/gnu/packages.scm b/gnu/packages.scm
index 2d7622d397..47e4f473b5 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -515,14 +515,18 @@ optionally contain a version number and an output name, as in these examples:
   guile@2.0.9:debug
 
 If SPEC does not specify a version number, return the preferred newest
-version; if SPEC does not specify an output, return OUTPUT."
+version; if SPEC does not specify an output, return OUTPUT.
+
+When OUTPUT is false and SPEC does not specify any output, return #f as the
+output."
   (let-values (((name version sub-drv)
                 (package-specification->name+version+output spec output)))
     (match (%find-package spec name version)
       (#f
        (values #f #f))
       (package
-       (if (member sub-drv (package-outputs package))
+       (if (or (and (not output) (not sub-drv))
+               (member sub-drv (package-outputs package)))
            (values package sub-drv)
            (leave (G_ "package `~a' lacks output `~a'~%")
                   (package-full-name package)
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index c6ed4c6d4a..3d8c247f57 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -2251,7 +2251,7 @@ produce uniform output across heterogeneous networks.")
 (define-public cbatticon
   (package
     (name "cbatticon")
-    (version "1.6.8")
+    (version "1.6.9")
     (source
      (origin
        (method git-fetch)
@@ -2259,7 +2259,7 @@ produce uniform output across heterogeneous networks.")
              (url "https://github.com/valr/cbatticon.git")
              (commit version)))
        (sha256
-        (base32 "16g26vin1693dbdr9qsnw36fdchx394lp79gvp7gcbw0w1ny9av6"))
+        (base32 "0kw09d678sd3m18fmi4380sl4a2m5lkfmq0kps16cdmq7z80rvaf"))
        (file-name (git-file-name name version))))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 561347ad98..95189401f7 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -1333,47 +1333,6 @@ multiplication algorithm.")
     (license license:gpl2+)
     (home-page "https://bitbucket.org/malb/m4ri/")))
 
-(define-public ratpoints
-  (package
-    (name "ratpoints")
-    (version "2.1.3")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://www.mathe2.uni-bayreuth.de/stoll/programs/"
-                    "ratpoints-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0zhad84sfds7izyksbqjmwpfw4rvyqk63yzdjd3ysd32zss5bgf4"))
-              (patches
-               ;; Taken from
-               ;; <https://git.sagemath.org/sage.git/plain/build/pkgs/ratpoints/patches/>
-               (search-patches "ratpoints-sturm_and_rp_private.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:test-target "test"
-       #:make-flags
-       (list (string-append "INSTALL_DIR=" (assoc-ref %outputs "out")))
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)            ;no configure script
-         (add-before 'install 'create-install-directories
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (mkdir-p out)
-               (with-directory-excursion out
-                 (for-each (lambda (d) (mkdir-p d))
-                           '("bin" "include" "lib"))))
-             #t)))))
-    (inputs
-     `(("gmp" ,gmp)))
-    (home-page "http://www.mathe2.uni-bayreuth.de/stoll/programs/")
-    (synopsis "Find rational points on hyperelliptic curves")
-    (description "Ratpoints tries to find all rational points within
-a given height bound on a hyperelliptic curve in a very efficient way,
-by using an optimized quadratic sieve algorithm.")
-    (license license:gpl2+)))
-
 (define-public symmetrica
   (package
     (name "symmetrica")
@@ -1400,7 +1359,7 @@ by using an optimized quadratic sieve algorithm.")
          (add-after 'unpack 'fix-makefile
            (lambda _
              (substitute* "makefile"
-               (("cc -c") "gcc -c"))
+               (("cc -c") "gcc -c -fPIC"))
              #t))
          (add-after 'fix-makefile 'turn-off-banner
            (lambda _
@@ -1503,7 +1462,8 @@ John Cremona to compute his elliptic curve database.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1c12d04jdyxkkav4ak8d1aqrv594gzihwhpxvc6p9js0ry1fahss"))))
+                "1c12d04jdyxkkav4ak8d1aqrv594gzihwhpxvc6p9js0ry1fahss"))
+              (patches (search-patches "lrcalc-includes.patch"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -1547,6 +1507,7 @@ structure constants of Schubert polynomials.")
     (arguments
      `(#:configure-flags
        (list
+        "--enable-shared"
         (string-append "--with-gmp-include="
                        (assoc-ref %build-inputs "gmp") "/include")
         (string-append "--with-gmp-lib="
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index 8ab5377537..3c7ef447f3 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -90,6 +91,17 @@ use their packages mostly unmodified in our Android NDK build system.")
 (define-public android-googletest
   (package (inherit googletest)
     (name "android-googletest")
+    (version "1.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+              (url "https://github.com/google/googletest.git")
+              (commit (string-append "release-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0bjlljmbf8glnd9qjabx73w6pd7ibv43yiyngqvmvgxsabzr8399"))))
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
        #:phases
diff --git a/gnu/packages/apl.scm b/gnu/packages/apl.scm
index 88150dc4d0..badec04333 100644
--- a/gnu/packages/apl.scm
+++ b/gnu/packages/apl.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,25 +25,27 @@
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sqlite))
 
 (define-public apl
   (package
     (name "apl")
-    (version "1.7")
+    (version "1.8")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/apl/apl-" version ".tar.gz"))
       (sha256
        (base32
-        "07xq8ddlmz8psvsmwr23gar108ri0lwmw0n6kpxcv8ypas1f5xlg"))))
+        "1jxvv2h3y1am1fw6r5sn3say1n0dj8shmscbybl0qhqdia2lqkql"))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/apl/")
     (inputs
      `(("gettext" ,gettext-minimal)
        ("lapack" ,lapack)
+       ("pcre" ,pcre2)
        ("sqlite" ,sqlite)
        ("readline" ,readline)))
     (arguments
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 9ddb9e1d52..81c7481e0b 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019 by Amar Singh <nly@disroot.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,17 +23,27 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages image)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages xiph)
+  #:use-module (gnu packages pretty-print)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages lua)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages maths)
   #:use-module (guix build-system cmake)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (srfi srfi-1))
 
 (define-public cfitsio
   (package
@@ -133,15 +144,15 @@ programs for the manipulation and analysis of astronomical data.")
 (define-public stellarium
   (package
     (name "stellarium")
-    (version "0.19.0")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "https://github.com/Stellarium/" name
-                                 "/releases/download/v" version
-                                 "/" name "-" version ".tar.gz"))
-             (sha256
-              (base32
-               "1mjjqcpgm5a1022x0mpqj3v6qkvpm9wqm1hqyg0mlypc5681va8a"))))
+    (version "0.19.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/Stellarium/stellarium"
+                           "/releases/download/v" version
+                           "/stellarium-" version ".tar.gz"))
+       (sha256
+        (base32 "0s7v5iyhah258k83kvy2a91a3mdf34r150lcar4mmdsrrcmas98g"))))
     (build-system cmake-build-system)
     (inputs
      `(("qtbase" ,qtbase)
@@ -151,9 +162,9 @@ programs for the manipulation and analysis of astronomical data.")
        ("qtserialport" ,qtserialport)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("gettext" ,gettext-minimal) ; xgettext is used at compile time
-       ("perl" ,perl) ; For pod2man
-       ("qtbase" ,qtbase) ; Qt MOC is needed at compile time
+     `(("gettext" ,gettext-minimal)     ; xgettext is used at compile time
+       ("perl" ,perl)                   ; For pod2man
+       ("qtbase" ,qtbase)               ; Qt MOC is needed at compile time
        ("qttools" ,qttools)))
     (arguments
      `(#:test-target "test"
@@ -176,3 +187,65 @@ programs for the manipulation and analysis of astronomical data.")
 can be used to control telescopes over a serial port for tracking celestial
 objects.")
     (license license:gpl2+)))
+
+(define-public celestia
+  (let ((commit "9dbdf29c4ac3d20afb2d9a80d3dff241ecf81dce"))
+    (package
+      (name "celestia")
+      (version (git-version "1.6.1" "815" commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/celestiaproject/celestia")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "00xibg87l1arzifakgj7s828x9pszcgx7x7ij88a561ig49ryh78"))))
+      (build-system cmake-build-system)
+      (native-inputs
+       `(("perl" ,perl)
+         ("libgit2" ,libgit2)
+         ("pkg-config" ,pkg-config)
+         ("libtool" ,libtool)
+         ("gettext" ,gettext-minimal)))
+      (inputs
+       `(("glu" ,glu)
+         ("glew" ,glew)
+         ("libtheora" ,libtheora)
+         ("libjpeg" ,libjpeg)
+         ("libpng" ,libpng)
+         ;; maybe required?
+         ("mesa" ,mesa)
+         ;; optional: fmtlib, Eigen3;
+         ("fmt" ,fmt)
+         ("eigen" ,eigen)
+         ;; glut: for glut interface
+         ("freeglut" ,freeglut)))
+      (propagated-inputs
+       `(("lua" ,lua)))
+      (arguments
+       `(#:configure-flags '("-DENABLE_GLUT=ON" "-DENABLE_QT=OFF")
+         #:tests? #f))                            ;no tests
+      (home-page "https://celestia.space/")
+      (synopsis "Real-time 3D visualization of space")
+      (description
+       "This simulation program lets you explore our universe in three
+dimensions.  Celestia simulates many different types of celestial objects.
+From planets and moons to star clusters and galaxies, you can visit every
+object in the expandable database and view it from any point in space and
+time.  The position and movement of solar system objects is calculated
+accurately in real time at any rate desired.")
+      (license license:gpl2+))))
+
+(define-public celestia-gtk
+  (package
+    (inherit celestia)
+    (name "celestia-gtk")
+    (inputs
+     (append (alist-delete "freeglut" (package-inputs celestia))
+             `(("gtk2" ,gtk+-2)
+               ("gtkglext" ,gtkglext))))
+    (arguments
+     `(#:configure-flags '("-DENABLE_GTK=ON" "-DENABLE_QT=OFF")
+       #:tests? #f))))
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index 31c9a8b0cf..d3abeec6e6 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -274,13 +275,16 @@ without modification.")
      `(#:phases (modify-phases %standard-phases
                   (add-after
                    'install 'remove-redundant-completions
-                   (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (lambda* (#:key
+                             inputs native-inputs
+                             outputs #:allow-other-keys)
                      ;; Util-linux comes with a bunch of completion files for
                      ;; its own commands which are more sophisticated and
                      ;; up-to-date than those of bash-completion.  Remove those
                      ;; from bash-completion.
                      (let* ((out         (assoc-ref outputs "out"))
-                            (util-linux  (assoc-ref inputs "util-linux"))
+                            (util-linux  (assoc-ref (or native-inputs inputs)
+                                                    "util-linux"))
                             (completions (string-append out
                                                         "/share/bash-completion"
                                                         "/completions"))
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index a1f7b2d2a8..92f2e4f3ab 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -4745,3 +4745,27 @@ enhancers.  The annotatr package provides an easy way to summarize and
 visualize the intersection of genomic sites/regions with genomic
 annotations.")
     (license license:gpl3)))
+
+(define-public r-rsubread
+  (package
+    (name "r-rsubread")
+    (version "1.34.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "Rsubread" version))
+       (sha256
+        (base32
+         "0bsrw61wcav0q22c5m6gr0vn1f3c3ld8gxj730wcab6dj196z6q3"))))
+    (properties `((upstream-name . "Rsubread")))
+    (build-system r-build-system)
+    (inputs `(("zlib" ,zlib)))
+    (home-page "https://bioconductor.org/packages/Rsubread/")
+    (synopsis "Subread sequence alignment and counting for R")
+    (description
+     "This package provides tools for alignment, quantification and analysis
+of second and third generation sequencing data.  It includes functionality for
+read mapping, read counting, SNP calling, structural variant detection and
+gene fusion discovery.  It can be applied to all major sequencing techologies
+and to both short and long sequence reads.")
+    (license license:gpl3)))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index f1a73bca7e..4f4d3d9839 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -4168,7 +4168,7 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
 (define-public khmer
   (package
     (name "khmer")
-    (version "2.1.2")
+    (version "3.0.0a3")
     (source
      (origin
        (method git-fetch)
@@ -4178,8 +4178,7 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "02x38d9jw2r58y8dmnj4hffy9wxv1yc1jwbvdbhby9dxndv94r9m"))
-       (patches (search-patches "khmer-use-libraries.patch"))
+         "01l4jczglkl7yfhgvzx8j0df7k54bk1r8sli9ll16i1mis0d8f37"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -4192,6 +4191,12 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
            ;; https://lists.gnu.org/archive/html/guix-devel/2016-06/msg00977.html
            (delete-file-recursively "third-party/zlib")
            (delete-file-recursively "third-party/bzip2")
+           (delete-file-recursively "third-party/seqan")
+           (substitute* "setup.cfg"
+             (("# libraries = z,bz2")
+              "libraries = z,bz2")
+             (("include:third-party/zlib:third-party/bzip2")
+              "include:"))
            #t))))
     (build-system python-build-system)
     (arguments
@@ -4208,6 +4213,7 @@ command, or queried for specific k-mers with @code{jellyfish query}.")
     (inputs
      `(("zlib" ,zlib)
        ("bzip2" ,bzip2)
+       ("seqan" ,seqan-1)
        ("python-screed" ,python-screed)
        ("python-bz2file" ,python-bz2file)))
     (home-page "https://khmer.readthedocs.org/")
diff --git a/gnu/packages/calcurse.scm b/gnu/packages/calcurse.scm
index 559688470e..c28f1f5554 100644
--- a/gnu/packages/calcurse.scm
+++ b/gnu/packages/calcurse.scm
@@ -30,14 +30,14 @@
 (define-public calcurse
   (package
     (name "calcurse")
-    (version "4.4.0")
+    (version "4.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://calcurse.org/files/calcurse-"
                            version ".tar.gz"))
        (sha256
-        (base32 "0vw2xi6a2lrhrb8n55zq9lv4mzxhby4xdf3hmi1vlfpyrpdwkjzd"))))
+        (base32 "1vjwcmp51h7dsvwn0qx93w9chp3wp970v7d9mjhk7jyamcbfywn3"))))
     (build-system gnu-build-system)
     (inputs `(("ncurses" ,ncurses)))
     (native-inputs `(("tzdata" ,tzdata-for-tests)))
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 284670af6b..2991916431 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -461,22 +461,19 @@ test coverage and has a web user interface that will refresh automatically.")
     (home-page "https://github.com/smartystreets/goconvey")
     (license license:expat)))
 
-;; XXX When updating, check whether ZNC's GOOGLETEST-SOURCES can be
-;; switched back to simply using (PACKAGE-SOURCE ...).
 (define-public googletest
   (package
     (name "googletest")
-    (version "1.8.0")
+    (version "1.8.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-              (url "https://github.com/google/googletest.git")
-              (commit (string-append "release-" version))))
+             (url "https://github.com/google/googletest.git")
+             (commit (string-append "release-" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0bjlljmbf8glnd9qjabx73w6pd7ibv43yiyngqvmvgxsabzr8399"))))
+        (base32 "0270msj6n7mggh4xqqjp54kswbl7mkcc8px1p5dqdpmw5ngh9fzk"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm
index a1e40b9ba0..e357556956 100644
--- a/gnu/packages/chromium.scm
+++ b/gnu/packages/chromium.scm
@@ -755,6 +755,11 @@ from forcing GEXP-PROMISE."
        ("udev" ,eudev)
        ("valgrind" ,valgrind)
        ("vulkan-headers" ,vulkan-headers)))
+
+    ;; Building Chromium with a single core takes around 6 hours on an x86_64
+    ;; system.  Give some leeway for slower or busy machines.
+    (properties '((timeout . 64800)))   ;18 hours
+
     (home-page "https://github.com/Eloston/ungoogled-chromium")
     (description
      "Ungoogled-Chromium is the Chromium web browser, with some functionality
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index f4966276a0..db27110645 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -35,6 +35,7 @@
 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
 ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2019 Gábor Boskovits <boskovits@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -272,14 +273,14 @@ mapping from string keys to string values.")
 (define-public memcached
   (package
     (name "memcached")
-    (version "1.5.14")
+    (version "1.5.16")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://memcached.org/files/memcached-" version ".tar.gz"))
        (sha256
-        (base32 "1agj198rm5kc64z8qxck65kdzvw30pdfxalygipnryw0lwlxynww"))))
+        (base32 "0nnccb697jhdn5gqrh3phibzs6xr4nf4ryv7nmyv5vf11n4jr8j5"))))
     (build-system gnu-build-system)
     (inputs
      `(("libevent" ,libevent)
@@ -846,6 +847,19 @@ TIMESTAMP.  It also supports storage of binary large objects, including
 pictures, sounds, or video.")
     (license (license:x11-style "file://COPYRIGHT"))))
 
+(define-public postgresql-11
+  (package
+    (inherit postgresql)
+    (name "postgresql")
+    (version "11.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://ftp.postgresql.org/pub/source/v"
+                                  version "/postgresql-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "12ycjlqncijgmd5z078ybwda8ilas96lc7nxxmdq140mzpgjv002"))))))
+
 (define-public postgresql-9.6
   (package
     (inherit postgresql)
@@ -2150,13 +2164,13 @@ etc., and an SQL engine for performing simple SQL queries.")
 (define-public python-lmdb
   (package
     (name "python-lmdb")
-    (version "0.94")
+    (version "0.95")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "lmdb" version))
               (sha256
                (base32
-                "1zh38gvkqw1jm5105if6rr7ccbgyxr7k2rm5ygb9ab3bq82pyaww"))
+                "0nx9f193gzl33r1lbqhb96h1igya7pz8wmahr8m9x5zgc05hal91"))
               (modules '((guix build utils)))
               (snippet
                ;; Delete bundled lmdb source files.
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 778529436b..06f4430b2d 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -439,15 +439,16 @@ a card with a smaller capacity than stated.")
 (define-public python-parted
   (package
     (name "python-parted")
-    (version "3.11.1")
+    (version "3.11.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/dcantrell/pyparted/archive/v"
-                           version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/dcantrell/pyparted.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "0r1nyjj40nacnfnv17x2mnsj6ga1qplyxyza82v2809dfhim2fwq"))))
+        (base32 "0r6916n3w4vldxrq30a3z2iagvxgly4vfmlidjm65vwqnyv17bvn"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 176aa90eab..34f56d8340 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -236,7 +236,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
 (define-public emacs-with-editor
   (package
     (name "emacs-with-editor")
-    (version "2.8.0")
+    (version "2.8.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -245,7 +245,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1bbzvxnjpxqyvi808isld025b3pcidn4r2xf8hnk9bmzcfdvdr6q"))))
+                "1z2h9casyw1b93ikq2mf9xixyvbl90zddf0s66lqfiyj2y376pq3"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-dash" ,emacs-dash)))
@@ -3151,7 +3151,7 @@ build jobs.")
 (define-public emacs-company
   (package
     (name "emacs-company")
-    (version "0.9.7")
+    (version "0.9.10")
     (source
      (origin
        (method git-fetch)
@@ -3160,7 +3160,7 @@ build jobs.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1gpapjxs4l6fmmj22q0q1pyhj1yd9j5iqfqnjf1abskkj69lqkpj"))))
+        (base32 "0shmv48bq9l5xm60dwx9lqyq6b39y3d7qjxdlah7dpipv5vhra42"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -4180,7 +4180,7 @@ them easier to distinguish from other, less important buffers.")
 (define-public emacs-prescient
   (package
     (name "emacs-prescient")
-    (version "2.2.2")
+    (version "3.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -4189,7 +4189,7 @@ them easier to distinguish from other, less important buffers.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1ncplx5p3cffyzg9ygzqqxj0vpvwrz9rp2n4z6c375a78fyydrk0"))))
+                "1cdjvlwlvxxazz7hlxgvdp0pznvj1gzqa2r6k4im0cpdrnnng6j6"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-company" ,emacs-company)
@@ -4615,29 +4615,34 @@ use it, call @code{M-x ivy-yasnippet} (but make sure you have enabled
       (license license:gpl3+))))
 
 (define-public emacs-ivy-rich
-  (package
-    (name "emacs-ivy-rich")
-    (version "0.1.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/Yevgnen/ivy-rich.git")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "0ayf3dwfhafcbqnckm65zy8nc1rv9ji939qfn53wbhxkrgqdicgz"))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-ivy" ,emacs-ivy)))
-    (home-page "https://github.com/Yevgnen/ivy-rich")
-    (synopsis "More friendly interface for @code{ivy}")
-    (description
-     "This package extends @code{ivy} by showing more information in the
+  ;; The latest release version has a small mistake that has since been fixed,
+  ;; so we use a more recent commit.
+  (let ((commit "f6bfa293c6df0b43cc411876b665816ec3f03d08")
+        (version "0.1.4")
+        (revision "1"))
+    (package
+      (name "emacs-ivy-rich")
+      (version (git-version version revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Yevgnen/ivy-rich.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1s8nwwb1z6lkc58g02pi8w99qms948k8d02lw8k8cq47dw87i219"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-ivy" ,emacs-ivy)))
+      (home-page "https://github.com/Yevgnen/ivy-rich")
+      (synopsis "More friendly interface for @code{ivy}")
+      (description
+       "This package extends @code{ivy} by showing more information in the
 minibuffer for each candidate.  It adds columns showing buffer modes, file
 sizes, docstrings, etc.  If @code{emacs-all-the-icons} is installed, it can
 show icons as well.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-avy
   (package
@@ -5105,15 +5110,16 @@ strings, and code folding.")
 (define-public emacs-nodejs-repl
   (package
     (name "emacs-nodejs-repl")
-    (version "0.2.0")
+    (version "0.2.1")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/abicky/nodejs-repl.el"
-                                  "/archive/" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/abicky/nodejs-repl.el")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0hq2cqdq2668yf48g7qnkci90nhih1gnhacsgz355jnib56lhmkz"))
-              (file-name (string-append name "-" version ".tar.gz"))))
+                "05ccv87rnw7fss3lib8m9sywjrj6n92fnd7mmhmjh27g2klqc83z"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/abicky/nodejs-repl.el")
     (synopsis "Node.js REPL inside Emacs")
@@ -5133,14 +5139,14 @@ features:
     (name "emacs-typescript-mode")
     (version "0.3")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/ananthakumaran/typescript.el"
-                    "/archive/v" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ananthakumaran/typescript.el")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1gqjirm8scf0wysm7x97zdfbs4qa5nqdl64jfbkd18iskv5mg3rj"))
-              (file-name (string-append name "-" version ".tar.gz"))))
+                "002f1xfhq43fjaqliwrgxspryfahpa82va5dw3p8kwil2xwvc6mh"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/ananthakumaran/typescript.el")
     (synopsis "Emacs major mode for editing Typescript code")
@@ -5160,13 +5166,14 @@ indentation and filling of comments and C preprocessor fontification.")
     (name "emacs-tide")
     (version "3.2.3")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/ananthakumaran/tide"
-                                  "/archive/v" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/ananthakumaran/tide")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1c600myr2yqbkmy9lify38lz0zzjdqk1733db5n7vsay16vn6fzi"))
-              (file-name (string-append name "-" version ".tar.gz"))))
+                "19kjq4kr2j853p5qp1s79zxmrfprli82lsnphbrlp9vbnib28xyd"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-dash" ,emacs-dash)
@@ -5761,14 +5768,14 @@ Dust.js, React/JSX, Angularjs, ejs, etc.")
     (name "emacs-wgrep")
     (version "2.3.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/mhayashi1120/Emacs-wgrep/archive/"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/mhayashi1120/Emacs-wgrep")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1cssqbg03fjb6xwf7idv1l3jjsh9r5r232ryi11czqlxfiv658bj"))))
+                "0pgyf9vfcahb495q01hi1mvkmv846w4rj6zyf52is8x7sjj7x44s"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/mhayashi1120/Emacs-wgrep")
     (synopsis "Edit a grep buffer and apply those changes to the files")
@@ -6760,7 +6767,7 @@ notifications.")
 (define-public emacs-alert
   (package
     (name "emacs-alert")
-    (version "1.2")
+    (version "1.3")
     (source
      (origin
        (method git-fetch)
@@ -6769,7 +6776,7 @@ notifications.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1vpc3q40m6dcrslki4bg725j4kv6c6xfxwjjl1ilg7la49fwwf26"))))
+        (base32 "0lc0p5cl4hfrzw1z2ghb11k1lvljn5m08jw5fmgwgxv667kwh49r"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-gntp" ,emacs-gntp)
@@ -6783,8 +6790,8 @@ customizable by the user.")
     (license license:gpl2+)))
 
 (define-public emacs-zones
-  (let ((commit "353fc38a6544eb59887bee045e373406f1d038a5")
-        (revision "1"))
+  (let ((commit "3169815c323966ff8e252b44e3558d6d045243fe")
+        (revision "2"))
     (package
       (name "emacs-zones")
       (version (git-version "0" revision commit))
@@ -6797,7 +6804,7 @@ customizable by the user.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0gwnw2giii2a14nlh62xp45f47cw6ikqphhzpmcw6c7mn9x5z2ar"))
+           "039msns5596rz0my7fxpanpxwg1lkhpiibm9ppnlzaajx1hszbzl"))
          (patches
           (search-patches
            "emacs-zones-called-interactively.patch"))))
@@ -7589,15 +7596,17 @@ and cangjie.")
 (define-public emacs-posframe
   (package
     (name "emacs-posframe")
-    (version "0.4.2")
+    (version "0.5.0")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://elpa.gnu.org/packages/posframe-" version ".el"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/tumashu/posframe")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "1h8vvxvsg41vc1nnglqjs2q0k1yzfsn72skga9s76qa3zxmx6kds"))))
+         "1fhjxj7gi2pj5rdnmf0gddiwd8iifgjgjp01c01npz1gwwixyqh3"))))
     (build-system emacs-build-system)
     ;; emacs-minimal does not include the function font-info
     (arguments `(#:emacs ,emacs))
@@ -7878,6 +7887,37 @@ other operations.")
 on mouse-control.")
     (license license:gpl3+)))
 
+(define-public emacs-gnugo
+  (package
+    (name "emacs-gnugo")
+    (version "3.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/gnugo-"
+                           version ".tar"))
+       (sha256
+        (base32
+         "0xpjvs250gg71qwapdsb1hlc61gs0gpkjds01srf784fvyxx2gf1"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'configure-default-gnugo-xpms-variable
+                    (lambda _
+                      (substitute* "gnugo.el"
+                        (("defvar gnugo-xpms nil")
+                         "defvar gnugo-xpms #'gnugo-imgen-create-xpms"))
+                      #t)))))
+    (propagated-inputs
+     `(("emacs-ascii-art-to-unicode" ,emacs-ascii-art-to-unicode)
+       ("emacs-xpm" ,emacs-xpm)))
+    (home-page "https://elpa.gnu.org/packages/gnugo.html")
+    (synopsis "Emacs major mode for playing GNU Go")
+    (description "This package provides an Emacs based interface for GNU Go.
+It has a graphical mode where the board and stones are drawn using XPM images
+and supports the use of a mouse.")
+    (license license:gpl3+)))
+
 (define-public emacs-gnuplot
   (package
     (name "emacs-gnuplot")
@@ -7962,20 +8002,20 @@ pressed simultaneously or a single key quickly pressed twice.")
 (define-public emacs-evil-surround
   (package
     (name "emacs-evil-surround")
-    (version "1.0.0")
+    (version "1.0.4")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/timcharper/evil-surround.git")
-             (commit (string-append "v" version))))
+             (url "https://github.com/emacs-evil/evil-surround")
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1smv7sqhm1l2bi9fmispnlmjssidblwkmiiycj1n3ag54q27z031"))))
+        (base32 "1ajsi6xn8mliwzl24h6pp9rd91z7f20yvkphr9q7k6zpjrd7fb9q"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-evil" ,emacs-evil)))
-    (home-page "https://github.com/timcharper/evil-surround")
+    (home-page "https://github.com/emacs-evil/evil-surround")
     (synopsis "Easily modify surrounding parentheses and quotes")
     (description "@code{emacs-evil-surround} allows easy deletion, change and
 addition of surrounding pairs, such as parentheses and quotes, in evil mode.")
@@ -8636,13 +8676,13 @@ created by @code{git format-patch}, from @code{magit}, @code{dired} and
     (version "1.3.3")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/leathekd/erc-hl-nicks"
-                           "/archive/" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/leathekd/erc-hl-nicks")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1a1r2kc3688g8c2ybkpwh88kgmnqhg3h3032g2yn4zr9m0n3vpkr"))))
+        (base32 "0c82rxpl5v7bbxirf1ksg06xv5xcddh8nkrpj7i6nvfarwdfnk4f"))))
     (build-system emacs-build-system)
     (synopsis "Nickname highlighting for Emacs ERC")
     (description "@code{erc-hl-nicks} highlights nicknames in ERC, an IRC
@@ -8792,27 +8832,20 @@ an elisp expression.")
 (define-public emacs-emojify
   (package
     (name "emacs-emojify")
-    (version "0.4")
+    (version "1.2")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/iqbalansari/emacs-emojify/"
-                           "releases/download/v" version "/emojify-"
-                           version ".tar"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/iqbalansari/emacs-emojify")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
        (sha256
         (base32
-         "0k84v2d2bkiwcky9fi1yyprgkj46g7wh6pyl9gzmcd7sqv051d5n"))))
+         "1fqnj5x7ivjkm5y927dqqnm85q5hzczlb0hrfpjalrhasa6ijsrm"))))
     (build-system emacs-build-system)
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-data
-           (lambda* (#:key  outputs #:allow-other-keys)
-             (copy-recursively "data"
-                               (string-append (assoc-ref outputs "out")
-                                              "/share/emacs/site-lisp/guix.d/"
-                                              "emojify-" ,version "/data"))
-             #t)))))
+     `(#:include (cons "^data/" %default-include)))
     (propagated-inputs
      `(("emacs-ht" ,emacs-ht)))
     (home-page "https://github.com/iqbalansari/emacs-emojify")
@@ -8823,6 +8856,36 @@ well as Github-style emojis like @code{:smile:}.  It provides a minor mode
 @code{emojify-mode} to enable the display of emojis in a buffer.")
     (license license:gpl3+)))
 
+(define-public emacs-make-it-so
+  (let ((commit "bc3b01d6b9ed6ff66ebbd524234f9d6df60dd4be")
+        (version "0.1.0")
+        (revision "1"))
+    (package
+      (name "emacs-make-it-so")
+      (version (git-version version revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/abo-abo/make-it-so")
+               (commit commit)))
+         (sha256
+          (base32
+           "0833bzlscpnkvjnrg3g54yr246afbjwri8n5wxk8drnsq6acvd8z"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:include (cons "^recipes/" %default-include)))
+      (propagated-inputs
+       `(("emacs-ivy" ,emacs-ivy)))
+      (home-page "https://github.com/abo-abo/make-it-so")
+      (synopsis "Transform files with Makefile recipes")
+      (description "This package provides an interface for selecting from
+different conversion recipes, often including tools like @code{ffmpeg} or
+@code{convert}.  The conversion command need only be written once, and
+subsequent invocations can be readily customized.  Several recipes are
+included by default, and more can be readily added.")
+      (license license:gpl3+))))
+
 (define-public emacs-websocket
   (package
     (name "emacs-websocket")
@@ -9186,7 +9249,7 @@ Feautures:
 (define-public emacs-evil-matchit
   (package
     (name "emacs-evil-matchit")
-    (version "2.2.9")
+    (version "2.3.0")
     (source
      (origin
        (method git-fetch)
@@ -9195,7 +9258,7 @@ Feautures:
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "12if45pxfndy3d7r4gd3zx4d3jk4d64fdmwkhc3y5zhqq9h9iy4c"))))
+        (base32 "0y6q42hml7jgf060d83m7hf270h01858g5kxw12na9n4r4jjpdg1"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-evil" ,emacs-evil)))
@@ -9646,6 +9709,27 @@ matches\" in the mode line in various search modes.  This is an Emacs port of
 Anzu.zim.")
     (license license:gpl3+)))
 
+(define-public emacs-ascii-art-to-unicode
+  (package
+    (name "emacs-ascii-art-to-unicode")
+    (version "1.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/ascii-art-to-unicode-"
+                           version ".el"))
+       (sha256
+        (base32
+         "1w9h2lyriafxj71r79774gh822cz8mry3gdfzyj6ym6v9mvqypna"))))
+    (build-system emacs-build-system)
+    (home-page "https://elpa.gnu.org/packages/ascii-art-to-unicode.html")
+    (synopsis "ASCII to Unicode art converter for Emacs")
+    (description "This Emacs package provides the commands @command{aa2u} and
+@command{aa2u-rectangle}.  Both of these commands can be used to convert
+simple ASCII art line drawings to Unicode; the former works on the active
+region of the buffer, while the latter works on rectangular selections.")
+    (license license:gpl3+)))
+
 (define-public emacs-emmet-mode
   (package
     (name "emacs-emmet-mode")
@@ -9758,12 +9842,13 @@ and can be consulted and modified.")
     (version "0.03")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/syohex/emacs-evil-anzu"
-                           "/archive/" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/syohex/emacs-evil-anzu")
+             (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "032hh2946z529cizqsg8pm6cpn5qdj8lfk3qskmx6xv3g2ra56ns"))))
+        (base32 "0lw7fg4gqwj30r0l6k2ni36sxqkf65zf0d0z3rxnpwbxlf8dlkrr"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-evil" ,emacs-evil)
@@ -10106,29 +10191,153 @@ text-mode (i.e. Org-mode).")
       (license license:gpl3+))))
 
 (define-public emacs-outshine
-  (let ((commit "5f1a6b70231d2811c522e4e5e8c89ff461b311d6"))
+  (package
+    (name "emacs-outshine")
+    (version "3.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/alphapapa/outshine.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1lh9f5dgdbwfyzxk6nsg1xwdjs8gc6p9mbyyhp6f8fnk3h0y88cg"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-outorg" ,emacs-outorg)))
+    (home-page "https://github.com/alphapapa/outshine")
+    (synopsis "Emacs outline with outshine")
+    (description "Outshine attempts to bring the look and feel of
+@code{org-mode} to an Emacs outside of the Org major-mode.  It is an extension
+of @code{outline-minor-mode} (@code{org-mode} itself derives from
+outline-mode), so there is no such thing like an outshine mode, only
+@code{outline-minor-mode} with outshine extensions loaded.")
+    (license license:gpl3+)))
+
+(define-public emacs-frecency
+  (let ((commit "31ef9ff4af1a4fed3dcc24ea74037feea8795c87")
+        (version "0.1-pre")
+        (revision "1"))
     (package
-      (name "emacs-outshine")
-      (version (git-version "2.0" "1" commit))
+      (name "emacs-frecency")
+      (version (git-version version revision commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
-                      (url "https://github.com/alphapapa/outshine.git")
+                      (url "https://github.com/alphapapa/frecency.el")
                       (commit commit)))
-                (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1l9v1dfhgg7il11ifbhvcvrg3acfjk9sdxlc3lja1k54d7dp60jv"))))
+                  "051aihjdg3x22svaxhwylpi8i6s2x9j8syvsj1jgilgjjdy15l6j"))
+                (file-name (git-file-name name version))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-outorg" ,emacs-outorg)))
-      (home-page "https://github.com/alphapapa/outshine")
-      (synopsis "Emacs outline with outshine")
-      (description "Outshine attempts to bring the look and feel of
-@code{org-mode} to an Emacs outside of the Org major-mode.  It is an extension
-of @code{outline-minor-mode} (@code{org-mode} itself derives from
-outline-mode), so there is no such thing like an outshine mode, only
-@code{outline-minor-mode} with outshine extensions loaded.")
+       `(("emacs-a" ,emacs-a)
+         ("emacs-dash" ,emacs-dash)))
+      (home-page "https://github.com/alphapapa/frecency.el")
+      (synopsis "Sort items by frequency and recency of access")
+      (description "This package provides a way of sorting items via
+a heuristic based on frequency and recency.")
+      (license license:gpl3+))))
+
+(define-public emacs-org-recent-headings
+  (package
+    (name "emacs-org-recent-headings")
+    (version "0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/alphapapa/org-recent-headings.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0gsrzmg3mssh9s28yjm9m866fnhm1pcligssz1q6brga6dm6f2yy"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-org" ,emacs-org)
+       ("emacs-dash" ,emacs-dash)
+       ("emacs-frecency" ,emacs-frecency)))
+    (home-page "https://github.com/alphapapa/org-recent-headings")
+    (synopsis "Navigate to recently used Org headings and lists")
+    (description "This package maintains a list of recently used Org headings,
+as well as functions for navigating between these headings.")
+    (license license:gpl3+)))
+
+(define-public emacs-org-super-agenda
+  (package
+   (name "emacs-org-super-agenda")
+   (version "1.1")
+   (source (origin
+            (method git-fetch)
+            (uri (git-reference
+                  (url "https://github.com/alphapapa/org-super-agenda")
+                  (commit version)))
+            (file-name (git-file-name name version))
+            (sha256
+             (base32
+              "0vzf91lsxnhwf52kvm8ycpf0wb9c8l91689vyhwgv4wz8q6cvjwp"))))
+   (build-system emacs-build-system)
+   (propagated-inputs
+    `(("emacs-org" ,emacs-org)
+      ("emacs-dash" ,emacs-dash)
+      ("emacs-ht" ,emacs-ht)
+      ("emacs-s" ,emacs-s)))
+   (home-page "https://github.com/alphapapa/org-super-agenda")
+   (synopsis "Supercharged Org agenda")
+   (description "This package allows items in the Org agenda to be grouped
+into sections while preserving the structure imposed by any timestamps.")
+   (license license:gpl3+)))
+
+(define-public emacs-org-make-toc
+  (package
+    (name "emacs-org-make-toc")
+    (version "0.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/alphapapa/org-make-toc")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0syhj8q4pv33xgl5qa6x27yhwqvfhffw5xqp819hj4qs1ddlc7j5"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-org" ,emacs-org)
+       ("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)))
+    (home-page "https://github.com/alphapapa/org-make-toc")
+    (synopsis "Maintain a table of contents for an Org file")
+    (description "This package facilitates the creation and maintenance of
+tables of contents.")
+    (license license:gpl3+)))
+
+(define-public emacs-org-ql
+  (let ((commit "0aec8ec60395197b2ef2b885c216cf84286efed9")
+        (version "0.1-pre")
+        (revision "1"))
+    (package
+      (name "emacs-org-ql")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/alphapapa/org-ql")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0bj85hxhym7rvkaddcxybxdm7g7w439wij9f2w5ljz1hmvp55991"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-s" ,emacs-s)
+         ("emacs-dash" ,emacs-dash)))
+      (home-page "https://github.com/alphapapa/org-ql")
+      (synopsis "Query language for Org buffers")
+      (description "This package provides a Lispy query language for Org
+files, allowing for actions to be performed based on search criteria.")
       (license license:gpl3+))))
 
 (define-public emacs-parsebib
@@ -11206,10 +11415,10 @@ You should really read org-ref.org in this package for details.")
 
 ;; This project is unmaintained.  Please use emacs-org-re-reveal instead.
 (define-public emacs-org-reveal
-  (let ((commit "1cdd088ec5fab631c564dca7f9f74fd3e9b7d4d4"))
+  (let ((commit "9210413202a360a559a51e8275faa42be68cf44b"))
     (package
       (name "emacs-org-reveal")
-      (version (git-version "0.1" "2" commit))
+      (version (git-version "0.1" "3" commit))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -11218,7 +11427,7 @@ You should really read org-ref.org in this package for details.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "1vjxjadq2i74p96y9jxnqj1yb86fsgxzmn7bjgnb88ay6nvc1l72"))))
+                  "1wlfk823d3vrn480m38j7ncaqm193lvh6y22b92fx4b3yhdbndza"))))
       (build-system emacs-build-system)
       (home-page "https://github.com/yjwen/org-reveal")
       (synopsis "Org and Reveal.js powered HTML presentation tool")
@@ -11382,7 +11591,7 @@ downloading manager for Emacs.")
 (define-public emacs-helpful
   (package
     (name "emacs-helpful")
-    (version "0.15")
+    (version "0.16")
     (source
      (origin
        (method git-fetch)
@@ -11391,10 +11600,14 @@ downloading manager for Emacs.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1rqnx7672175288yqaslw0d9vw04j6psw7mys8j9zcp2i72hlvkn"))))
+        (base32 "1pzlx3galyryd3hd84hnd7r5s6yl9sdrfhy1s6dgz40glw41wmpr"))))
     (build-system emacs-build-system)
     (propagated-inputs
-     `(("emacs-elisp-refs" ,emacs-elisp-refs)))
+     `(("emacs-elisp-refs" ,emacs-elisp-refs)
+       ("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)
+       ("emacs-f" ,emacs-f)
+       ("emacs-shut-up" ,emacs-shut-up)))
     (home-page "https://github.com/Wilfred/helpful")
     (synopsis "More contextual information in Emacs help")
     (description "@code{helpful} is an alternative to the built-in Emacs help
@@ -12780,10 +12993,30 @@ datastructures as needed, both for method parameters and return values, making
 using XML-RPC methods fairly transparent to the Lisp code.")
       (license license:gpl3+))))
 
+(define-public emacs-xpm
+  (package
+    (name "emacs-xpm")
+    (version "1.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/xpm-"
+                           version ".tar"))
+       (sha256
+        (base32
+         "075miyashh9cm3b0gk6ngld3rm8bfgnh4qxnhxmmvjgzf6a64grh"))))
+    (build-system emacs-build-system)
+    (home-page "https://elpa.gnu.org/packages/xpm.html")
+    (synopsis "XPM image editing mode for Emacs")
+    (description "This Emacs package makes editing XPM images easy (and maybe
+fun).  Editing is done directly on the (textual) image format, for maximal
+cohesion with the Emacs Way.")
+    (license license:gpl3+)))
+
 (define-public emacs-fish-completion
   (package
     (name "emacs-fish-completion")
-    (version "1.0")
+    (version "1.1")
     (source
      (origin
        (method url-fetch)
@@ -12793,7 +13026,7 @@ using XML-RPC methods fairly transparent to the Lisp code.")
              version))
        (sha256
         (base32
-         "1hpma1c5j50ja03ibr7h1xmyv7k8j3rbvqivad47kwqhlsgw0jk0"))))
+         "0bpvifv6c2a65nks6kvarw0hhm37fnyy74wikwf9qq1i20va0fpv"))))
     (build-system emacs-build-system)
     (inputs `(("fish" ,fish)))
     (arguments
@@ -13593,7 +13826,7 @@ buffers – other modes on the TODO list).
 (define-public emacs-magit-todos
   (package
     (name "emacs-magit-todos")
-    (version "1.1.7")
+    (version "1.2")
     (source
      (origin
        (method git-fetch)
@@ -13603,7 +13836,7 @@ buffers – other modes on the TODO list).
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0qagdxpik64n4rw9scy451ws5sw00v64ri9g2dcw7b66bx2c6c6w"))))
+         "17a18gszbypz82bj36xbfyykc4s9rz83vwmpxvlf65svhd51c0nh"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -14456,7 +14689,7 @@ to open SQLite databases.")
 (define-public emacs-nix-mode
   (package
     (name "emacs-nix-mode")
-    (version "1.2.2")
+    (version "1.4.1")
     (source
      (origin
        (method git-fetch)
@@ -14465,10 +14698,11 @@ to open SQLite databases.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "1vz3s2jx14nzy53f04d821n4f2s22ys5h9s7af6cnpynkwawyhhq"))))
+        (base32 "04xpgg9nba5m1bl7ci5l456whcb8nfhsbvgxyx89bp0zqgr005q7"))))
     (build-system emacs-build-system)
     (inputs
      `(("emacs-company" ,emacs-company)
+       ("emacs-json-mode" ,emacs-json-mode)
        ("emacs-mmm-mode" ,emacs-mmm-mode)))
     (home-page "https://github.com/NixOS/nix-mode")
     (synopsis "Emacs major mode for editing Nix expressions")
@@ -14665,31 +14899,30 @@ recursively.  The results are cached for speed.")
     (license license:gpl3+)))
 
 (define-public emacs-orgit
-  (let ((commit "2456436a7e64d26bcf455b3890a586acaa3e7f93"))
-    (package
-      (name "emacs-orgit")
-      (version (git-version "1.5.1" "2" commit))
-      (home-page "https://github.com/magit/orgit")
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url home-page)
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "1i52dq2ynddb1irgigr5mdwfbfd3bvm1f29jnzd7nlc0nk186nvh"))))
-      (build-system emacs-build-system)
-      (propagated-inputs
-       `(("emacs-dash" ,emacs-dash)
-         ("emacs-magit" ,emacs-magit)))
-      (synopsis "Support for Org links to Magit buffers")
-      (description "This package defines several Org link types, which can be
+  (package
+    (name "emacs-orgit")
+    (version "1.5.3")
+    (home-page "https://github.com/magit/orgit")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url home-page)
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1ywavzki510rslsgfm0cnn3mlh644p61ha2nfb715xhkg7cd3j9g"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-magit" ,emacs-magit)))
+    (synopsis "Support for Org links to Magit buffers")
+    (description "This package defines several Org link types, which can be
 used to link to certain Magit buffers.  Use the command
 @command{org-store-link} while such a buffer is current to store a link.
 Later you can insert it into an Org buffer using the command
 @code{org-insert-link}.")
-      (license license:gpl3+))))
+    (license license:gpl3+)))
 
 (define-public emacs-amx
   (package
@@ -15616,7 +15849,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
 (define-public emacs-counsel-etags
   (package
     (name "emacs-counsel-etags")
-    (version "1.8.3")
+    (version "1.8.4")
     (source
      (origin
        (method git-fetch)
@@ -15626,7 +15859,7 @@ previewed by scrolling up and down within a @code{dired} buffer.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1d8nlrbsyza6q7yqm9248bxxsf49qf6hchg3zwv0l11acn3w8np5"))))
+         "14my9jvxl26a5yn381h5pi5481y9d9gyk7wnxxd0s4sjc964c5h5"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-ivy" ,emacs-ivy)))
@@ -15636,6 +15869,32 @@ previewed by scrolling up and down within a @code{dired} buffer.")
 and searching through @code{Ctags} files.")
     (license license:gpl3+)))
 
+(define-public emacs-org-download
+  (let ((commit "ac72bf8fce3e855da60687027b6b8601cf1de480")
+        (version "0.1.0")
+        (revision "1"))
+    (package
+      (name "emacs-org-download")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/abo-abo/org-download")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0ax5wd44765wnwabkam1g2r62gq8crx2qq733s2mg1z72cfvwxqb"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-org" ,emacs-org)
+         ("emacs-async" ,emacs-async)))
+      (home-page "https://github.com/abo-abo/org-download")
+      (synopsis "Facilitate moving images")
+      (description "This package provides utilities for managing image files
+copied into @code{org-mode} buffers.")
+      (license license:gpl3+))))
+
 (define-public emacs-helm-dash
   (let ((commit "192b862185df661439a06de644791171e899348a")
         (version "1.3.0")
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index c32569dd1b..c1ae14bc42 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -233,7 +233,7 @@ turbo speed, networked multiplayer, and graphical enhancements.")
 (define-public dosbox
   (package
     (name "dosbox")
-    (version "0.74-2")
+    (version "0.74-3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://sourceforge.net/projects/dosbox"
@@ -242,7 +242,7 @@ turbo speed, networked multiplayer, and graphical enhancements.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1ksp1b5szi0vy4x55rm3j1y9wq5mlslpy8llpg87rpdyjlsk0xvh"))))
+                "02i648i50dwicv1vaql15rccv4g8h5blf5g6inv67lrfxpbkvlf0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/enchant.scm b/gnu/packages/enchant.scm
index 0392a709e2..ce148b47a5 100644
--- a/gnu/packages/enchant.scm
+++ b/gnu/packages/enchant.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Marek Benc <merkur32@gmail.com>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +33,7 @@
 (define-public enchant
   (package
     (name "enchant")
-    (version "2.2.3")
+    (version "2.2.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/AbiWord/enchant/releases"
@@ -40,7 +41,7 @@
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0v87p1ls0gym95qirijpclk650sjbkcjjl6ssk059zswcwaykn5b"))))
+                "1p6a3qmrh8bjzds6x7rg9da0ir44gg804jzkf634h39wsa4vdmpm"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--disable-static"
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 5b95bcb704..cd5d3b7d9a 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -399,7 +399,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
   (package
     (inherit electrum)
     (name "electron-cash")
-    (version "4.0.1")
+    (version "4.0.7")
     (source
      (origin
        (method url-fetch)
@@ -410,7 +410,7 @@ other machines/servers.  Electrum does not download the Bitcoin blockchain.")
                            ".tar.gz"))
        (sha256
         (base32
-         "16fi03f23yb5r9s64x1a9wrxnvivlbawvrbq4d486yclzl1r7y48"))
+         "0xswmr68cm1c77lzisi3z812jzqczm9dfrshfhdq42zz5kaz4gnn"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index b9527659db..4b37ffdf3c 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -631,7 +631,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
 (define-public weston
   (package
     (name "weston")
-    (version "6.0.0")
+    (version "6.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -639,7 +639,7 @@ applications, X servers (rootless or fullscreen) or other display servers.")
                     "weston-" version ".tar.xz"))
               (sha256
                (base32
-                "04p6hal5kalmdp5dxwh2h5qhkkb4dvbsk7l091zvvcq70slj6qsl"))))
+                "1d2m658ll8x7prlsfk71qgw89c7dz6y7d6nndfxwl49fmrd6sbxz"))))
     (build-system meson-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 63ccd20470..05a68b717a 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -153,15 +153,15 @@ is used in some video games and movies.")
 (define-public deutex
   (package
    (name "deutex")
-   (version "5.1.2")
+   (version "5.2.0")
    (source (origin
             (method url-fetch)
-            (uri (string-append "https://github.com/Doom-Utils/" name
+            (uri (string-append "https://github.com/Doom-Utils/deutex"
                                 "/releases/download/v" version "/"
-                                name "-" version ".tar.xz"))
+                                "deutex-" version ".tar.xz"))
             (sha256
              (base32
-              "1rj3w4xa0n4jixy4j7p6gbclylbgxvhdnji7xnkydrqii9rxnbp4"))))
+              "1d536d3i78k4ch8mjg7lqnamnyfpp2x5x7mzx5smqi9ad8lb6hqz"))))
    (build-system gnu-build-system)
    (native-inputs `(("asciidoc" ,asciidoc)))
    (home-page "https://github.com/Doom-Utils/deutex")
@@ -1511,3 +1511,29 @@ added.  The permanent goal is to create the open source Quake 3 distribution
 upon which people base their games, ports to new platforms, and other
 projects.")
       (license license:gpl2))))
+
+(define-public openvr
+  (package
+    (name "openvr")
+    (version "1.4.18")
+    (home-page "https://github.com/ValveSoftware/openvr/")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0m92634j6g0f2xybbzklm79cnq20vidbk1jc62pnz12aabwixvyh"))))
+    (build-system cmake-build-system)
+    (arguments
+     ;; No tests.
+     '(#:tests? #f
+       #:configure-flags (list "-DBUILD_SHARED=1")))
+    (synopsis "Virtual reality software development kit")
+    (description "OpenVR is an API and runtime that allows access to VR
+hardware from multiple vendors without requiring that applications have
+specific knowledge of the hardware they are targeting.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 8e8c6c8058..a102dc962f 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -42,6 +42,7 @@
 ;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2019 Jesse Gibbons <jgibbons2357+guix@gmail.com>
 ;;; Copyright © 2019 Dan Frumin <dfrumin@cs.ru.nl>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -130,6 +131,7 @@
   #:use-module (gnu packages netpbm)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ocaml)
+  #:use-module (gnu packages opencl)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages perl-check)
@@ -3542,7 +3544,7 @@ with the \"Stamp\" tool within Tux Paint.")
    (description "SuperTux is a free classic 2D jump'n run sidescroller game
 in a style similar to the original Super Mario games covered under
 the GNU GPL.")
-   (home-page "https://supertuxproject.org/")
+   (home-page "https://supertux.org/")
    (license license:gpl3+)))
 
 (define-public tintin++
@@ -7250,6 +7252,26 @@ the game avoids complex inventory management and character building, relying
 on items and player adaptability for character progression.")
     (license license:isc)))
 
+(define-public harmonist-tk
+  (package
+    (inherit harmonist)
+    (name "harmonist-tk")
+    (arguments
+      (append
+        (package-arguments harmonist)
+        `(#:phases
+          (modify-phases %standard-phases
+            (replace 'build
+              (lambda _
+                (invoke "go" "install" "-v" "-x" "--tags" "tk"
+                        "git.tuxfamily.org/harmonist/harmonist")))
+            (replace 'check
+              (lambda _
+                (invoke "go" "test" "--tags" "tk"
+                        "git.tuxfamily.org/harmonist/harmonist")))))))
+    (inputs
+     `(("go-github.com-nsf-gothic" ,go-github.com-nsf-gothic)))))
+
 (define-public drascula
   (package
     (name "drascula")
@@ -7556,3 +7578,52 @@ remake of that series or any other game.")
     ;; released under both gpl2 and cc-by-sa3.0.  Bundled Gigi library is
     ;; released under lgpl2.1+.
     (license (list license:gpl2 license:cc-by-sa3.0 license:lgpl2.1+))))
+
+(define-public leela-zero
+  (package
+   (name "leela-zero")
+   (version "0.17")
+   (source
+    (origin
+     (method git-fetch)
+     (uri (git-reference
+           (url "https://github.com/leela-zero/leela-zero.git")
+           (commit (string-append "v" version))))
+     (file-name (git-file-name name version))
+     (sha256
+      (base32
+       "17px5iny8mql5c01bymcli7zfssswkzvb2i8gnsmjcck6i2n8srl"))
+     (patches (search-patches "leela-zero-gtest.patch"))))
+   (build-system cmake-build-system)
+   (native-inputs
+    `(("googletest" ,googletest)))
+   (inputs
+    `(("boost" ,boost)
+      ("ocl-icd" ,ocl-icd)
+      ("openblas" ,openblas)
+      ("opencl-headers" ,opencl-headers)
+      ("qtbase" ,qtbase)
+      ("zlib" ,zlib)))
+   (arguments
+    '(#:configure-flags '("-DUSE_BLAS=YES")
+      #:phases (modify-phases %standard-phases
+                 (add-before 'configure 'fix-tests
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let ((home (getcwd)))
+                       (setenv "HOME" home)
+                       (substitute* "src/tests/gtests.cpp"
+                         (("\\.\\./src/tests/0k\\.txt")
+                          (string-append home "/src/tests/0k.txt"))
+                         (("cfg_gtp_mode = true;")
+                          "cfg_gtp_mode = true; cfg_cpu_only = true;")))
+                     #t))
+                 (replace 'check
+                   (lambda _
+                     (invoke "./tests"))))))
+   (home-page "https://github.com/leela-zero/leela-zero")
+   (synopsis "Program playing the game of Go")
+   (description
+    "Leela-zero is a Go engine with no human-provided knowledge, modeled after
+the AlphaGo Zero paper.  The current best network weights file for the engine
+can be downloaded from @url{https://zero.sjeng.org/best-network}.")
+   (license license:gpl3+)))
diff --git a/gnu/packages/genealogy.scm b/gnu/packages/genealogy.scm
new file mode 100644
index 0000000000..2db3fdb918
--- /dev/null
+++ b/gnu/packages/genealogy.scm
@@ -0,0 +1,112 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages genealogy)
+  #:use-module (guix build-system python)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (gnu packages fonts)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages geo)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages version-control))
+
+(define-public gramps
+  (package
+    (name "gramps")
+    (version "5.0.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/gramps-project/gramps.git")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1jz1fbjj6byndvir7qxzhd2ryirrd5h2kwndxpp53xdc05z1i8g7"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("intltool" ,intltool)))
+    (inputs
+     `(("font-gnu-freefont-ttf" ,font-gnu-freefont-ttf)
+       ("geocode-glib" ,geocode-glib)
+       ("gexiv2" ,gexiv2)
+       ("ghostscript" ,ghostscript)
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+" ,gtk+)
+       ("gtkspell3" ,gtkspell3)
+       ("graphviz" ,graphviz)
+       ("librsvg" ,librsvg)
+       ("osm-gps-map" ,osm-gps-map)
+       ("pango" ,pango)
+       ("python-bsddb3" ,python-bsddb3)
+       ("python-pillow" ,python-pillow)
+       ("python-pycairo" ,python-pycairo)
+       ("python-pygobject" ,python-pygobject)
+       ("python-pyicu" ,python-pyicu)
+       ("rcs" ,rcs)
+       ("sqlite" ,sqlite)
+       ("xdg-utils" ,xdg-utils)))
+    (arguments
+     `(#:imported-modules ((guix build glib-or-gtk-build-system)
+                           ,@%python-build-system-modules)
+       #:modules ((ice-9 match)
+                  (guix build python-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
+                  (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-home-for-tests
+           (lambda _
+             (setenv "HOME" (getenv "TMPDIR"))
+             #t))
+         (add-before 'wrap 'wrap-with-GI_TYPELIB_PATH
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (paths (map (match-lambda
+                                 ((output . directory)
+                                  (let ((girepodir (string-append
+                                                    directory
+                                                    "/lib/girepository-1.0")))
+                                    (if (file-exists? girepodir)
+                                        girepodir
+                                        #f))))
+                               inputs)))
+               (wrap-program (string-append out "/bin/gramps")
+                 `("GI_TYPELIB_PATH" ":" prefix ,(filter identity paths))))
+             #t))
+         (add-after 'wrap 'glib-or-gtk-wrap
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
+    (home-page "https://gramps-project.org")
+    (synopsis "Genealogical research software")
+    (description
+     "Gramps is a free software project and community striving to produce
+a genealogy program that is both intuitive for hobbyists and feature-complete
+for professional genealogists.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 2c511c7193..2ee74794d8 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -872,3 +872,36 @@ dropping features at lower levels.")
 OpenStreetMap project.  They can be used to convert, filter and update
 OpenStreetMap data files.")
     (license license:agpl3)))
+
+(define-public osm-gps-map
+  (package
+    (name "osm-gps-map")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/nzjrs/osm-gps-map/releases/download/"
+             version "/osm-gps-map-" version ".tar.gz"))
+       (sha256
+        (base32
+         "11imsf4cz1dpxdjh178k2s29axmq86rkfg1pqmn7incyxmjzhbwg"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("gnome-common" ,gnome-common)
+       ("gtk-doc" ,gtk-doc)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("cairo" ,cairo)
+       ("glib" ,glib)
+       ("gobject-introspection" ,gobject-introspection)
+       ("gtk+" ,gtk+)
+       ("libsoup" ,libsoup)))
+    (home-page "https://nzjrs.github.io/osm-gps-map/")
+    (synopsis "GTK+ widget for displaying OpenStreetMap tiles")
+    (description
+     "This package provides a GTK+ widget (and Python bindings) that when
+given GPS coordinates,draws a GPS track, and points of interest on a moving
+map display.  Downloads map data from a number of websites, including
+@url{https://www.openstreetmap.org}.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 96e7fc7165..99d2ec6cdb 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -399,6 +399,31 @@ device drivers allows Mesa to be used in many different environments ranging
 from software emulation to complete hardware acceleration for modern GPUs.")
     (license license:x11)))
 
+(define-public mesa-opencl
+  (package
+    (inherit mesa)
+    (name "mesa-opencl")
+    (arguments
+     (substitute-keyword-arguments (package-arguments mesa)
+       ((#:configure-flags flags)
+        `(cons "-Dgallium-opencl=standalone" ,flags))))
+    (inputs
+     `(("libclc" ,libclc)
+       ,@(package-inputs mesa)))
+    (native-inputs
+     `(("clang" ,clang)
+       ,@(package-native-inputs mesa)))))
+
+(define-public mesa-opencl-icd
+  (package
+    (inherit mesa-opencl)
+    (name "mesa-opencl-icd")
+    (arguments
+     (substitute-keyword-arguments (package-arguments mesa)
+       ((#:configure-flags flags)
+        `(cons "-Dgallium-opencl=icd"
+               ,(delete "-Dgallium-opencl=standalone" flags)))))))
+
 (define-public mesa-headers
   (package
     (inherit mesa)
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index f8a6a774da..b7152a3aff 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -7392,8 +7392,21 @@ kill/reinice processes.")
                     "/pyatspi-" version ".tar.xz"))
               (sha256
                (base32
-                "0xdnix7gxzgf75xy9ris4dd6b05mqwicw190b98xqmypydyf95n6"))))
+                "0xdnix7gxzgf75xy9ris4dd6b05mqwicw190b98xqmypydyf95n6"))
+              ;; Patch from upstream, fixed in newer versions.
+              (patches (search-patches "python-pyatspi-python-37.patch"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-atk-load
+           (lambda _
+             (substitute* "pyatspi/__init__.py"
+               (("from gi.repository import Atspi")
+                "gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+from gi.repository import Atspi"))
+             #t)))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index ab75925a9d..00608c2c8b 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -377,15 +377,13 @@ libskba (working with X.509 certificates and CMS data).")
 (define-public gpgme
   (package
     (name "gpgme")
-    (version "1.13.0")
+    (version "1.13.1")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "mirror://gnupg/gpgme/gpgme-" version
-                          ".tar.bz2"))
+      (uri (string-append "mirror://gnupg/gpgme/gpgme-" version ".tar.bz2"))
       (sha256
-       (base32
-        "0c6676g0yhfsmy32i1dgwh5cx0ja8vhcqf4k08zad177m53kxcnl"))))
+       (base32 "0imyjfryvvjdbai454p70zcr95m94j9xnzywrlilqdw2fqi0pqy4"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gnupg" ,gnupg)))
@@ -669,17 +667,17 @@ PGP keysigning parties.")
 (define-public signing-party
   (package
     (name "signing-party")
-    (version "2.7")
-    (home-page "https://salsa.debian.org/debian/signing-party")
+    (version "2.10")
+    (home-page "https://salsa.debian.org/signing-party-team/signing-party")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url home-page)
-                    (commit (string-append "release-" version))))
+                    (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1gx9017wag4bgc0h7kca9n3jwwdm7z77yv3viayhg62flbwkvbgb"))))
+                "0lq8nmwjmysry0n4jg6vb7bh0lagbyb9pa11ii3s41p1mhzchf2r"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf-wrapper)
@@ -691,7 +689,7 @@ PGP keysigning parties.")
               ("perl-net-idn-encode" ,perl-net-idn-encode)
               ("libmd" ,libmd)))
     (arguments
-     `(#:tests? #f
+     `(#:tests? #f ; no test suite
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index c2356f2a44..a874878fea 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -426,7 +426,7 @@ from forcing GEXP-PROMISE."
                       #:system system
                       #:guile-for-build guile)))
 
-(define %icecat-version "60.7.0-guix2")
+(define %icecat-version "60.7.2-guix1")
 
 ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
 ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -448,7 +448,7 @@ from forcing GEXP-PROMISE."
                   "firefox-" upstream-firefox-version ".source.tar.xz"))
             (sha256
              (base32
-              "08x0nijh0ja5jza95a8y030ibk756bn7zlw3a3c4750yilfhqpqa"))))
+              "1hkaq8mavmn2wphfbrlq3v56jvmvfi2nyvrkjgr28rc01jkqx4ca"))))
 
          (upstream-icecat-base-version "60.7.0") ; maybe older than base-version
          (upstream-icecat-gnu-version "1")
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 43888ab23f..e4d6af51c5 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -68,6 +68,7 @@
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -1687,12 +1688,12 @@ input.")
      (origin
        (method url-fetch)
        (uri (string-append "https://alpha.gnu.org/gnu/ssw/"
-                           name "-" version ".tar.gz"))
+                           "spread-sheet-widget-" version ".tar.gz"))
        (sha256
         (base32 "1h93yyh2by6yrmkwqg38nd5knids05k5nqzcihc1hdwgzg3c4b8y"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("glib" ,glib "bin") ; for glib-genmarshal, etc.
+     `(("glib" ,glib "bin")             ; for glib-genmarshal, etc.
        ("pkg-config" ,pkg-config)))
     ;; In 'Requires' of spread-sheet-widget.pc.
     (propagated-inputs
@@ -1706,6 +1707,38 @@ viewing and manipulating 2 dimensional tabular data in a manner similar to many
 popular spread sheet programs.")
     (license license:gpl3+)))
 
+(define-public volumeicon
+  (package
+    (name "volumeicon")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://nullwise.com/files/volumeicon/volumeicon-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "182xl2w8syv6ky2h2bc9imc6ap8pzh0p7rp63hh8nw0xm38c3f14"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--enable-notify")))       ; optional libnotify support
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("gtk+" ,gtk+)
+       ("libnotify" ,libnotify)))
+    (home-page "http://nullwise.com/volumeicon.html")
+    (synopsis "System tray volume applet")
+    (description
+     "Volume Icon is a volume indicator and control applet for @acronym{the
+Advanced Linux Sound Architecture, ALSA}.  It sits in the system tray,
+independent of your desktop environment, and supports global key bindings.")
+    (license (list license:expat        ; src/{bind.c,keybinder.h}
+                   license:isc          ; src/alsa_volume_mapping.c
+                   license:gpl3))))     ; the rest & combined work
+
 (define-public yad
   (package
     (name "yad")
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index c02606f919..a8352380f7 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -2123,7 +2123,14 @@ chunks can be expressions as well as simple tokens.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0z5nf377wh8yj6n3sx2ddn4bdx1qrqnw899dlqjhg0q69qzil522"))))
+                  "0z5nf377wh8yj6n3sx2ddn4bdx1qrqnw899dlqjhg0q69qzil522"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Install .go files in the right place.
+                    (substitute* "Makefile.am"
+                      (("/ccache") "/site-ccache"))
+                    #t))))
       (build-system gnu-build-system)
       (arguments
        `(#:phases
@@ -2163,8 +2170,8 @@ serializing continuations or delimited continuations.")
       (license license:lgpl2.0+))))
 
 (define-public python-on-guile
-  (let ((commit "058c596cd3886447da31171e1026d4d19f5f5313")
-        (revision "2"))
+  (let ((commit "00a51a23247f1edc4ae8eda72b30df5cd7d0015f")
+        (revision "3"))
     (package
       (name "python-on-guile")
       (version (git-version "0.1.0" revision commit))
@@ -2176,16 +2183,27 @@ serializing continuations or delimited continuations.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "0ppyh5kkhsph5kc091p2b5a3alnj3wnlx8jr5xpyhrsj0vx9cqph"))))
+                  "03rpnqr08rqr3gay128g564rwk8w4jbj28ss6b46z1d4vjs4nk68"))))
       (build-system gnu-build-system)
       (arguments
        `(#:parallel-build? #f ; not supported
-         #:make-flags
-         '("GUILE_AUTO_COMPILE=0")        ; to prevent guild errors
+         #:make-flags '("GUILE_AUTO_COMPILE=0")   ;to prevent guild warnings
+
          #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'chdir
-             (lambda _ (chdir "modules") #t)))))
+             (lambda _ (chdir "modules") #t))
+           (add-after 'install 'wrap
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Wrap the 'python' executable so it can find its
+               ;; dependencies.
+               (let ((out  (assoc-ref outputs "out")))
+                 (wrap-program (string-append out "/bin/python")
+                   `("GUILE_LOAD_PATH" ":" prefix
+                     (,(getenv "GUILE_LOAD_PATH")))
+                   `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                     (,(getenv "GUILE_LOAD_COMPILED_PATH"))))
+                 #t))))))
       (inputs
        `(("guile" ,guile-2.2)))
       (propagated-inputs
@@ -2384,3 +2402,37 @@ and minor modes, etc., and can also be used as a pure Guile library.  It
 comes with a simple counter example using GLUT and browser examples in C
 using gtk+-3 and webkitgtk.")
       (license license:gpl3+))))
+
+(define-public guile-jpeg
+  (let ((commit "6a1673578b297c2c1b28e44a76bd5c49e76a5046")
+        (revision "0"))
+    (package
+      (name "guile-jpeg")
+      (version (git-version "0.0" revision commit))
+      (home-page "https://gitlab.com/wingo/guile-jpeg")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference (url home-page)
+                                    (commit commit)))
+                (sha256
+                 (base32
+                  "05z9m408w3h6aqb5k3r3qa7khir0k10rxwvsrzhkcq1hr5vbmr4m"))
+                (file-name (git-file-name name version))
+                (modules '((guix build utils)))
+                (snippet
+                 '(begin
+                    ;; Install .go files in the right place.
+                    (substitute* "Makefile.am"
+                      (("/ccache") "/site-ccache"))
+                    #t))))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("pkg-config" ,pkg-config)
+         ("guile" ,guile-2.2)))
+      (synopsis "JPEG file parsing library for Guile")
+      (description
+       "Guile-JPEG is a Scheme library to parse JPEG image files and to
+perform geometrical transforms on JPEG images.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 390b74c333..0e5631bbe3 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -1006,27 +1006,19 @@ channels.")
 (define-public exiv2
   (package
     (name "exiv2")
-    (version "0.26")
-    (source (origin
-             (method url-fetch)
-             (uri (list (string-append "https://www.exiv2.org/builds/exiv2-"
-                                       version "-trunk.tar.gz")
-                        (string-append "https://www.exiv2.org/exiv2-"
-                                       version ".tar.gz")
-                        (string-append "https://fossies.org/linux/misc/exiv2-"
-                                       version ".tar.gz")))
-             (patches (search-patches "exiv2-CVE-2017-14860.patch"
-                                      "exiv2-CVE-2017-14859-14862-14864.patch"))
-             (sha256
-              (base32
-               "1yza317qxd8yshvqnay164imm0ks7cvij8y8j86p1gqi1153qpn7"))))
-    (build-system gnu-build-system)
-    (arguments '(#:tests? #f))                    ; no `check' target
+    (version "0.27.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.exiv2.org/builds/exiv2-" version
+                           "-Source.tar.gz"))
+       (sha256
+        (base32 "109hbfk63dh14fz20ivq20gcclb9jj9jmh48w4lcn6zxh1ljh9gi"))))
+    (build-system cmake-build-system)
+    (arguments '(#:tests? #f))          ; no test suite
     (propagated-inputs
      `(("expat" ,expat)
        ("zlib" ,zlib)))
-    (native-inputs
-     `(("intltool" ,intltool)))
     (home-page "https://www.exiv2.org/")
     (synopsis "Library and command-line utility to manage image metadata")
     (description
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 2dad131c00..403c446a82 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2096,6 +2096,50 @@ new Date();"))
      "This package provides the Java development kit OpenJDK.")
     (license license:gpl2+)))
 
+(define-public openjdk12
+  (package
+    (inherit openjdk11)
+    (name "openjdk")
+    (version "12.33")
+    (source (origin
+              (method url-fetch)
+              (uri "http://hg.openjdk.java.net/jdk/jdk/archive/0276cba45aac.tar.bz2")
+              (file-name (string-append name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0mbhdrk12b6878kby0flnbak7444dlpm0ihlmf92vk59y1c02bc2"))
+              (modules '((guix build utils)))
+              (snippet
+               `(begin
+                  (for-each delete-file (find-files "." ".*.bin$"))
+                  (for-each delete-file (find-files "." ".*.exe$"))
+                  (for-each delete-file (find-files "." ".*.jar$"))
+                  #t))))
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("cups" ,cups)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("giflib" ,giflib)
+       ("lcms" ,lcms)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxrandr" ,libxrandr)
+       ("libxrender" ,libxrender)
+       ("libxt" ,libxt)
+       ("libxtst" ,libxtst)))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("openjdk11" ,openjdk11)
+       ("openjdk11:jdk" ,openjdk11 "jdk")
+       ("pkg-config" ,pkg-config)
+       ("unzip" ,unzip)
+       ("which" ,which)
+       ("zip" ,zip)))
+    (home-page "https://openjdk.java.net/projects/jdk/12")))
+
 (define-public icedtea icedtea-8)
 
 
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index f0fa6bba92..f1fdcba311 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -421,8 +421,8 @@ for ARCH and optionally VARIANT, or #f if there is no such configuration."
 It has been modified to remove all non-free binary blobs.")
     (license license:gpl2)))
 
-(define %linux-libre-version "5.1.11")
-(define %linux-libre-hash "15hmqycsggqd9bwrf229b7f0pfznzs03kpzcwrd9j867pvgwyl8c")
+(define %linux-libre-version "5.1.15")
+(define %linux-libre-hash "1f0hhyjsm4bl7k7w88aifvhmqmjkvkvlpd2b69y7s6csr22fk6v4")
 
 (define %linux-libre-5.1-patches
   (list %boot-logo-patch
@@ -439,8 +439,8 @@ It has been modified to remove all non-free binary blobs.")
   (make-linux-libre-headers %linux-libre-version
                             %linux-libre-hash))
 
-(define %linux-libre-4.19-version "4.19.52")
-(define %linux-libre-4.19-hash "1wsrgrskmvipm7j4kzir93p9dp3iy49522163ghfxx71b1b2v4dg")
+(define %linux-libre-4.19-version "4.19.56")
+(define %linux-libre-4.19-hash "1zqiic55viy065lhnkmhn33sz3bbbr2ykbm5f92yzd8lpc9zl7yx")
 
 (define %linux-libre-4.19-patches
   (list %boot-logo-patch
@@ -457,8 +457,8 @@ It has been modified to remove all non-free binary blobs.")
   (make-linux-libre-headers %linux-libre-4.19-version
                             %linux-libre-4.19-hash))
 
-(define %linux-libre-4.14-version "4.14.127")
-(define %linux-libre-4.14-hash "0dkzgxfzzc6n3k2x8nzzx98c6y3fhsr695rm46ahvg7fdg3vgcmi")
+(define %linux-libre-4.14-version "4.14.130")
+(define %linux-libre-4.14-hash "1fk6ds0q2rykr6byvfass8f5a9k6qq9sk261wjcfp1gn8b9wmxws")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -471,14 +471,14 @@ It has been modified to remove all non-free binary blobs.")
                             %linux-libre-4.14-hash))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.182"
-                    "1615v8ywwdm204bimq2cf6qv0zas14yagpr8lk9a5zqxas4p4rns"
+  (make-linux-libre "4.9.183"
+                    "1w3syih3fggwkpcl6zkmm9f6577r2jvack4br5ffccgcddkz52ia"
                     '("x86_64-linux" "i686-linux")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.182"
-                    "0ggs5pyjr7a9mldskfbsybzxlb3lmfbhxg5q2qpzxnh1c8wcn53h"
+  (make-linux-libre "4.4.183"
+                    "1v21n5kwnv9n18gfp2dz9hsdkwmfwigalr82xsnwbzhs0x561bxx"
                     '("x86_64-linux" "i686-linux")
                     #:configuration-file kernel-config
                     #:extra-options
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index dfc58d469f..58813c2d84 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -47,6 +47,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages c)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages ed)
   #:use-module (gnu packages flex)
@@ -65,6 +66,8 @@
   #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages sqlite)
@@ -5369,3 +5372,627 @@ command line, to data scanning and extracting scripts, to full application
 development in a wide-range of areas.")
     (home-page "https://nongnu.org/txr/")
     (license license:bsd-2)))
+
+(define-public sbcl-clunit
+  (let ((commit "6f6d72873f0e1207f037470105969384f8380628")
+        (revision "1"))
+    (package
+      (name "sbcl-clunit")
+      (version (git-version "0.2.3" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/tgutu/clunit.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1idf2xnqzlhi8rbrqmzpmb3i1l6pbdzhhajkmhwbp6qjkmxa4h85"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "CLUnit is a Common Lisp unit testing framework")
+      (description
+       "CLUnit is a Common Lisp unit testing framework.  It is designed
+to be easy to use so that you can quickly start testing.  CLUnit
+provides a rich set of features aimed at improving your unit testing
+experience.")
+      (home-page "http://tgutu.github.io/clunit/")
+      ;; MIT License
+      (license license:expat))))
+
+(define-public cl-clunit
+  (sbcl-package->cl-source-package sbcl-clunit))
+
+(define-public ecl-clunit
+  (sbcl-package->ecl-package sbcl-clunit))
+
+(define-public sbcl-py4cl
+  (let ((commit "4c8a2b0814fd311f978964f825ce012290f60136")
+        (revision "1"))
+    (package
+      (name "sbcl-py4cl")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/bendudson/py4cl.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "15mk7qdqjkj56gdnbyrdyz6r7m1h26ldvn6ch96pmvg5vmr1m45r"))
+         (modules '((guix build utils)))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("sbcl-clunit" ,sbcl-clunit)))
+      (inputs
+       `(("sbcl-trivial-garbage" ,sbcl-trivial-garbage)))
+      (propagated-inputs
+       ;; This package doesn't do anything without python available
+       `(("python" ,python)
+         ;; For multi-dimensional array support
+         ("python-numpy" ,python-numpy)))
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'replace-*base-directory*-var
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; In the ASD, the author makes an attempt to
+               ;; programatically determine the location of the
+               ;; source-code so lisp can call into "py4cl.py". We can
+               ;; hard-code this since we know where this file will
+               ;; reside.
+               (substitute* "src/callpython.lisp"
+                 (("py4cl/config:\\*base-directory\\*")
+                  (string-append
+                   "\""
+                   (assoc-ref outputs "out")
+                   "/share/common-lisp/sbcl-source/py4cl/"
+                   "\""))))))))
+      (synopsis "Call python from Common Lisp")
+      (description
+       "Py4CL is a bridge between Common Lisp and Python, which enables Common
+Lisp to interact with Python code.  It uses streams to communicate with a
+separate python process, the approach taken by cl4py.  This is different to
+the CFFI approach used by burgled-batteries, but has the same goal.")
+      (home-page "https://github.com/bendudson/py4cl")
+      ;; MIT License
+      (license license:expat))))
+
+(define-public cl-py4cl
+  (sbcl-package->cl-source-package sbcl-py4cl))
+
+(define-public ecl-py4cl
+  (sbcl-package->ecl-package sbcl-py4cl))
+
+(define-public sbcl-parse-declarations
+  (package
+    (name "sbcl-parse-declarations")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://beta.quicklisp.org/archive/parse-declarations/"
+             "2010-10-06/parse-declarations-20101006-darcs.tgz"))
+       (sha256
+        (base32
+         "0r85b0jfacd28kr65kw9c13dx4i6id1dpmby68zjy63mqbnyawrd"))))
+    (build-system asdf-build-system/sbcl)
+    (arguments
+     `(#:asd-file "parse-declarations-1.0.asd"
+       #:asd-system-name "parse-declarations-1.0"))
+    (home-page "https://common-lisp.net/project/parse-declarations/")
+    (synopsis "Parse, filter, and build declarations")
+    (description
+     "Parse-Declarations is a Common Lisp library to help writing
+macros which establish bindings.  To be semantically correct, such
+macros must take user declarations into account, as these may affect
+the bindings they establish.  Yet the ANSI standard of Common Lisp does
+not provide any operators to work with declarations in a convenient,
+high-level way.  This library provides such operators.")
+    ;; MIT License
+    (license license:expat)))
+
+(define-public cl-parse-declarations
+  (sbcl-package->cl-source-package sbcl-parse-declarations))
+
+(define-public ecl-parse-declarations
+  (sbcl-package->ecl-package sbcl-parse-declarations))
+
+(define-public sbcl-cl-quickcheck
+  (let ((commit "807b2792a30c883a2fbecea8e7db355b50ba662f")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-quickcheck")
+      (version (git-version "0.0.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/mcandre/cl-quickcheck.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "165lhypq5xkcys6hvzb3jq7ywnmqvzaflda29qk2cbs3ggas4767"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis
+       "Common Lisp port of the QuickCheck unit test framework")
+      (description
+       "Common Lisp port of the QuickCheck unit test framework")
+      (home-page "https://github.com/mcandre/cl-quickcheck")
+      ;; MIT
+      (license license:expat))))
+
+(define-public cl-cl-quickcheck
+  (sbcl-package->cl-source-package sbcl-cl-quickcheck))
+
+(define-public ecl-cl-quickcheck
+  (sbcl-package->ecl-package sbcl-cl-quickcheck))
+
+(define-public sbcl-burgled-batteries3
+  (let ((commit "9c0f6667e1a71ddf77e21793a0bea524710fef6e")
+        (revision "1"))
+    (package
+      (name "sbcl-burgled-batteries3")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/snmsts/burgled-batteries3.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0b726kz2xxcg5l930gz035rsdvhxrzmp05iwfwympnb4z4ammicb"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:tests? #f
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'set-*cpython-include-dir*-var
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "grovel-include-dir.lisp"
+                 (("\\(defparameter \\*cpython-include-dir\\* \\(detect-python\\)\\)")
+                  (string-append
+                   "(defparameter *cpython-include-dir* \""
+                   (assoc-ref inputs "python")
+                   "/include/python3.7m"
+                   "\")")))
+               (substitute* "ffi-interface.lisp"
+                 (("\\*cpython-lib\\*")
+                  (format #f "'(\"~a/lib/libpython3.so\")"
+                          (assoc-ref inputs "python"))))
+               #t)))))
+      (native-inputs
+       `(("python" ,python)
+         ("sbcl-cl-fad" ,sbcl-cl-fad)
+         ("sbcl-lift" ,sbcl-lift)
+         ("sbcl-cl-quickcheck" ,sbcl-cl-quickcheck)))
+      (inputs
+       `(("sbcl-cffi" ,sbcl-cffi)
+         ("sbcl-cffi-grovel" ,sbcl-cffi-grovel)
+         ("sbcl-alexandria" , sbcl-alexandria)
+         ("sbcl-parse-declarations-1.0" ,sbcl-parse-declarations)
+         ("sbcl-trivial-garbage" ,sbcl-trivial-garbage)))
+      (synopsis "Bridge between Python and Lisp (FFI bindings, etc.)")
+      (description
+       "This package provides a shim between Python3 (specifically, the
+CPython implementation of Python) and Common Lisp.")
+      (home-page "https://github.com/snmsts/burgled-batteries3")
+      ;; MIT
+      (license license:expat))))
+
+(define-public cl-burgled-batteries3
+  (sbcl-package->cl-source-package sbcl-burgled-batteries3))
+
+(define-public ecl-burgled-batteries3
+  (sbcl-package->ecl-package sbcl-burgled-batteries3))
+
+(define-public sbcl-metabang-bind
+  (let ((commit "c93b7f7e1c18c954c2283efd6a7fdab36746ab5e")
+        (revision "1"))
+    (package
+      (name "sbcl-metabang-bind")
+      (version (git-version "0.8.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/gwkkwg/metabang-bind.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0hd0kr91795v77akpbcyqiss9p0p7ypa9dznrllincnmgvsxlmf0"))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs
+       `(("sbcl-lift" ,sbcl-lift)))
+      (synopsis "Macro that generalizes @code{multiple-value-bind} etc.")
+      (description
+       "Bind extends the idea of of let and destructing to provide a uniform
+syntax for all your accessor needs.  It combines @code{let},
+@code{destructuring-bind}, @code{with-slots}, @code{with-accessors}, structure
+editing, property or association-lists, and @code{multiple-value-bind} and a
+whole lot more into a single form.")
+      (home-page "https://common-lisp.net/project/metabang-bind/")
+      ;; MIT License
+      (license license:expat))))
+
+(define-public cl-metabang-bind
+  (sbcl-package->cl-source-package sbcl-metabang-bind))
+
+(define-public ecl-metabang-bind
+  (sbcl-package->ecl-package sbcl-metabang-bind))
+
+(define-public sbcl-fare-utils
+  (let ((commit "66e9c6f1499140bc00ccc22febf2aa528cbb5724")
+        (revision "1"))
+    (package
+      (name "sbcl-fare-utils")
+      (version (git-version "1.0.0.5" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url
+            "https://gitlab.common-lisp.net/frideau/fare-utils.git")
+           (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "01wsr1aap3jdzhn4hrqjbhsjx6qci9dbd3gh4gayv1p49rbg8aqr"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:test-asd-file "test/fare-utils-test.asd"))
+      (native-inputs
+       `(("sbcl-hu.dwim.stefil" ,sbcl-hu.dwim.stefil)))
+      (synopsis "Collection of utilities and data structures")
+      (description
+       "fare-utils is a small collection of utilities.  It contains a lot of
+basic everyday functions and macros.")
+      (home-page "https://gitlab.common-lisp.net/frideau/fare-utils")
+      ;; MIT License
+      (license license:expat))))
+
+(define-public cl-fare-utils
+  (sbcl-package->cl-source-package sbcl-fare-utils))
+
+(define-public ecl-fare-utils
+  (sbcl-package->ecl-package sbcl-fare-utils))
+
+(define-public sbcl-idna
+  (package
+    (name "sbcl-idna")
+    (build-system asdf-build-system/sbcl)
+    (version "0.2.2")
+    (home-page "https://github.com/antifuchs/idna")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "00nbr3mffxhlq14gg9d16pa6691s4qh35inyw76v906s77khm5a2"))))
+    (inputs
+     `(("split-sequence" ,sbcl-split-sequence)))
+    (synopsis "IDNA string encoding and decoding routines for Common Lisp")
+    (description "This Common Lisp library provides string encoding and
+decoding routines for IDNA, the International Domain Names in Applications.")
+    (license license:expat)))
+
+(define-public cl-idna
+  (sbcl-package->cl-source-package sbcl-idna))
+
+(define-public ecl-idna
+  (sbcl-package->ecl-package sbcl-idna))
+
+(define-public sbcl-swap-bytes
+  (package
+    (name "sbcl-swap-bytes")
+    (build-system asdf-build-system/sbcl)
+    (version "1.1")
+    (home-page "https://github.com/sionescu/swap-bytes")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url home-page)
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1qysbv0jngdfkv53y874qjhcxc4qi8ixaqq6j8bzxh5z0931wv55"))))
+    (inputs
+     `(("trivial-features" ,sbcl-trivial-features)))
+    (native-inputs
+     `(("fiveam" ,sbcl-fiveam)))
+    (arguments
+     ;; TODO: Tests fail, why?
+     `(#:tests? #f))
+    (synopsis "Efficient endianness conversion for Common Lisp")
+    (description "This Common Lisp library provides optimized byte-swapping
+primitives.  The library can change endianness of unsigned integers of length
+1/2/4/8.  Very useful in implementing various network protocols and file
+formats.")
+    (license license:expat)))
+
+(define-public cl-swap-bytes
+  (sbcl-package->cl-source-package sbcl-swap-bytes))
+
+(define-public ecl-swap-bytes
+  (sbcl-package->ecl-package sbcl-swap-bytes))
+
+(define-public sbcl-iolib.asdf
+  ;; Latest release is from June 2017.
+  (let ((commit "81e20614c0d27f9605bf9766214e236fd31b99b4")
+        (revision "1"))
+    (package
+      (name "sbcl-iolib.asdf")
+      (build-system asdf-build-system/sbcl)
+      (version "0.8.3")
+      (home-page "https://github.com/sionescu/iolib")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1j81r0wm7nfbwl991f26s4npcy7kybzybd3m47rbxy31h0cfcmdm"))))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)))
+      (arguments
+       '(#:asd-file "iolib.asdf.asd"))
+      (synopsis "ASDF component classes for IOLib, a Common Lisp I/O library")
+      (description "IOlib is to be a better and more modern I/O library than
+the standard Common Lisp library.  It contains a socket library, a DNS
+resolver, an I/O multiplexer(which supports @code{select(2)}, @code{epoll(4)}
+and @code{kqueue(2)}), a pathname library and file-system utilities.")
+      (license license:expat))))
+
+(define-public sbcl-iolib.conf
+  (package
+    (inherit sbcl-iolib.asdf)
+    (name "sbcl-iolib.conf")
+    (inputs
+     `(("iolib.asdf" ,sbcl-iolib.asdf)))
+    (arguments
+     '(#:asd-file "iolib.conf.asd"))
+    (synopsis "Compile-time configuration for IOLib, a Common Lisp I/O library")))
+
+(define-public sbcl-iolib.common-lisp
+  (package
+    (inherit sbcl-iolib.asdf)
+    (name "sbcl-iolib.common-lisp")
+    (inputs
+     `(("iolib.asdf" ,sbcl-iolib.asdf)
+       ("iolib.conf" ,sbcl-iolib.conf)))
+    (arguments
+     '(#:asd-file "iolib.common-lisp.asd"))
+    (synopsis "Slightly modified Common Lisp for IOLib, a Common Lisp I/O library")))
+
+(define-public sbcl-iolib.base
+  (package
+    (inherit sbcl-iolib.asdf)
+    (name "sbcl-iolib.base")
+    (inputs
+     `(("iolib.asdf" ,sbcl-iolib.asdf)
+       ("iolib.conf" ,sbcl-iolib.conf)
+       ("iolib.common-lisp" ,sbcl-iolib.common-lisp)
+       ("split-sequence" ,sbcl-split-sequence)))
+    (arguments
+     '(#:asd-file "iolib.base.asd"))
+    (synopsis "Base package for IOLib, a Common Lisp I/O library")))
+
+(define-public sbcl-iolib.grovel
+  (package
+    (inherit sbcl-iolib.asdf)
+    (name "sbcl-iolib.grovel")
+    (inputs
+     `(("iolib.asdf" ,sbcl-iolib.asdf)
+       ("iolib.conf" ,sbcl-iolib.conf)
+       ("iolib.base", sbcl-iolib.base)
+       ("cffi", sbcl-cffi)))
+    (arguments
+     '(#:asd-file "iolib.grovel.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-header
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; This header is required by sbcl-iolib.
+             (install-file "src/grovel/grovel-common.h"
+                           (string-append (assoc-ref outputs "out")
+                                          "/lib/sbcl"))
+             #t)))))
+    (synopsis "CFFI Groveller for IOLib, a Common Lisp I/O library")))
+
+(define-public sbcl-iolib
+  (package
+    (inherit sbcl-iolib.asdf)
+    (name "sbcl-iolib")
+    (inputs
+     `(("iolib.asdf" ,sbcl-iolib.asdf)
+       ("iolib.conf" ,sbcl-iolib.conf)
+       ("iolib.grovel" ,sbcl-iolib.grovel)
+       ("iolib.base", sbcl-iolib.base)
+       ("bordeaux-threads", sbcl-bordeaux-threads)
+       ("idna", sbcl-idna)
+       ("swap-bytes", sbcl-swap-bytes)
+       ("libfixposix", libfixposix)))
+    (native-inputs
+     `(("fiveam" ,sbcl-fiveam)))
+    (arguments
+     '(#:asd-file "iolib.asd"
+       #:asd-system-name "iolib"
+       #:test-asd-file "iolib.tests.asd"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/syscalls/ffi-functions-unix.lisp"
+               (("\\(:default \"libfixposix\"\\)")
+                (string-append
+                 "(:default \""
+                 (assoc-ref inputs "libfixposix") "/lib/libfixposix\")")))
+             ;; Socket tests need Internet access, disable them.
+             (substitute* "iolib.tests.asd"
+               (("\\(:file \"sockets\" :depends-on \\(\"pkgdcl\" \"defsuites\"\\)\\)")
+                "")))))))
+    (synopsis "Common Lisp I/O library")))
+
+(define sbcl-iolib+multiplex
+  (package
+    (inherit sbcl-iolib)
+    (name "sbcl-iolib+multiplex")
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-iolib)
+       ((#:asd-system-name _) "iolib/multiplex")))))
+
+(define sbcl-iolib+syscalls
+  (package
+    (inherit sbcl-iolib)
+    (name "sbcl-iolib+syscalls")
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-iolib)
+       ((#:asd-system-name _) "iolib/syscalls")))))
+
+(define sbcl-iolib+streams
+  (package
+    (inherit sbcl-iolib)
+    (name "sbcl-iolib+streams")
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-iolib)
+       ((#:asd-system-name _) "iolib/streams")))))
+
+(define sbcl-iolib+sockets
+  (package
+    (inherit sbcl-iolib)
+    (name "sbcl-iolib+sockets")
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-iolib)
+       ((#:asd-system-name _) "iolib/sockets")))))
+
+(define-public sbcl-ieee-floats
+  (let ((commit "566b51a005e81ff618554b9b2f0b795d3b29398d")
+        (revision "1"))
+    (package
+      (name "sbcl-ieee-floats")
+      (build-system asdf-build-system/sbcl)
+      (version (git-version "20170924" revision commit))
+      (home-page "https://github.com/marijnh/ieee-floats/")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1xyj49j9x3lc84cv3dhbf9ja34ywjk1c46dklx425fxw9mkwm83m"))))
+      (native-inputs
+       `(("fiveam" ,sbcl-fiveam)))
+      (synopsis "IEEE 754 binary representation for floats in Common Lisp")
+      (description "This is a Common Lisp library that allows to convert
+floating point values to IEEE 754 binary representation.")
+      (license license:bsd-3))))
+
+(define sbcl-closure-common
+  (let ((commit "e3c5f5f454b72b01b89115e581c3c52a7e201e5c")
+        (revision "1"))
+    (package
+      (name "sbcl-closure-common")
+      (build-system asdf-build-system/sbcl)
+      (version (git-version "20101006" revision commit))
+      (home-page "https://github.com/sharplispers/closure-common")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0k5r2qxn122pxi301ijir3nayi9sg4d7yiy276l36qmzwhp4mg5n"))))
+      (inputs
+       `(("trivial-gray-streams" ,sbcl-trivial-gray-streams)
+         ("babel" ,sbcl-babel)))
+      (synopsis "Support Common Lisp library for CXML")
+      (description "Closure-common is an internal helper library.  The name
+Closure is a reference to the web browser it was originally written for.")
+      ;; TODO: License?
+      (license #f))))
+
+(define-public sbcl-cl-reexport
+  (let ((commit "312f3661bbe187b5f28536cd7ec2956e91366c3b")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-reexport")
+      (build-system asdf-build-system/sbcl)
+      (version (git-version "0.1" revision commit))
+      (home-page "https://github.com/takagi/cl-reexport")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1cwpn1m3wrl0fl9plznn7p464db646gnfc8zkyk97dyxski2aq0x"))))
+      (inputs
+       `(("alexandria" ,sbcl-alexandria)))
+      (arguments
+       ;; TODO: Tests fail because cl-test-more is missing, but I can't find it online.
+       `(#:tests? #f))
+      (synopsis "HTTP cookie manager for Common Lisp")
+      (description "cl-cookie is a Common Lisp library featuring parsing of
+cookie headers, cookie creation, cookie jar creation and more.")
+      (license license:llgpl))))
+
+(define-public sbcl-cl-cookie
+  (let ((commit "cea55aed8b9ad25fafd13defbcb9fe8f41b29546")
+        (revision "1"))
+    (package
+      (name "sbcl-cl-cookie")
+      (build-system asdf-build-system/sbcl)
+      (version (git-version "0.9.10" revision commit))
+      (home-page "https://github.com/fukamachi/cl-cookie")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "090g7z75h98zvc1ldx0vh4jn4086dhjm2w30jcwkq553qmyxwl8h"))))
+      (inputs
+       `(("proc-parse" ,sbcl-proc-parse)
+         ("alexandria" ,sbcl-alexandria)
+         ("quri" ,sbcl-quri)
+         ("cl-ppcre" ,sbcl-cl-ppcre)
+         ("local-time" ,sbcl-local-time)))
+      (native-inputs
+       `(("prove-asdf" ,sbcl-prove-asdf)
+         ("prove" ,sbcl-prove)))
+      (arguments
+       ;; TODO: Tests fail because cl-cookie depends on cl-cookie-test.
+       `(#:tests? #f))
+      (synopsis "HTTP cookie manager for Common Lisp")
+      (description "cl-cookie is a Common Lisp library featuring parsing of
+cookie headers, cookie creation, cookie jar creation and more.")
+      (license license:bsd-2))))
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 8cb05a6cad..732ffc0823 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -31,6 +31,7 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
@@ -273,7 +274,7 @@ code analysis tools.")
                            version "/libcxx-" version ".src.tar.xz"))
        (sha256
         (base32
-         "1wdrxg365ig0kngx52pd0n820sncp24blb0zpalc579iidhh4002"))))
+         "1qlx3wlxrnc5cwc1fcfc2vhfsl7j4294hi8y5kxj8hy8wxsjd462"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("clang" ,clang)
@@ -285,6 +286,44 @@ code analysis tools.")
 use with Clang, targeting C++11, C++14 and above.")
     (license license:expat)))
 
+(define-public libclc
+  (package
+    (name "libclc")
+    (version (package-version llvm))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/llvm/llvm-project.git")
+             (commit (string-append "llvmorg-" version))))
+       (sha256
+        (base32
+         "052h16wjcnqginzp7ki4il2xmm25v9nyk0wcz7cg03gbryhl7aqa"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "-DLLVM_CLANG="
+                            (assoc-ref %build-inputs "clang")
+                            "/bin/clang")
+             (string-append "-DPYTHON="
+                            (assoc-ref %build-inputs "python")
+                            "/bin/python3"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "libclc") #t)))))
+    (native-inputs
+     `(("clang" ,clang)
+       ("llvm" ,llvm)
+       ("python" ,python)))
+    (home-page "https://libclc.llvm.org")
+    (synopsis "Libraries for the OpenCL programming language")
+    (description
+     "This package provides an implementation of the OpenCL library
+requirements according to version 1.1 of the OpenCL specification.")
+    ;; Apache license 2.0 with LLVM exception
+    (license license:asl2.0)))
+
 (define-public libomp
   (package
     (name "libomp")
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index bf35d943ce..1694b7c6b1 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -351,14 +351,14 @@ aliasing facilities to work just as they would on normal mail.")
 (define-public mutt
   (package
     (name "mutt")
-    (version "1.12.0")
+    (version "1.12.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://bitbucket.org/mutt/mutt/downloads/"
                                  "mutt-" version ".tar.gz"))
              (sha256
               (base32
-               "13zr2fpql33sdbsjsiaa952js5bvphc1x4lqsj36qyzdhj3l84na"))
+               "0311sip2q90aqaxn7h3cck1zl98b4vifqi8bp5fsizy4dr06bi81"))
              (patches (search-patches "mutt-store-references.patch"))))
     (build-system gnu-build-system)
     (inputs
@@ -1433,14 +1433,14 @@ hashing schemes plugin for @code{Dovecot}.")
 (define-public isync
   (package
     (name "isync")
-    (version "1.3.0")
+    (version "1.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/isync/isync/"
                            version "/isync-" version ".tar.gz"))
        (sha256 (base32
-                "173wd7x8y5sp94slzwlnb7zhgs32r57zl9xspl2rf4g3fqwmhpwd"))))
+                "1sphd30jplii58y2zmw365bckm6pszmapcy905zhjll1sm1ldjv8"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)))
diff --git a/gnu/packages/mastodon.scm b/gnu/packages/mastodon.scm
index 028745f681..cd12f5a7fd 100644
--- a/gnu/packages/mastodon.scm
+++ b/gnu/packages/mastodon.scm
@@ -42,6 +42,12 @@
      '(#:phases
        (modify-phases %standard-phases
          (delete 'check)
+         ;; see https://github.com/ihabunek/toot/issues/91
+         (add-after 'unpack 'dont-install-Makefile
+           (lambda _
+             (substitute* "setup.py"
+               (("data_files.*" all) ""))
+             #t))
          (add-after 'install 'check
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (add-installed-pythonpath inputs outputs)
diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm
index c2a6aaf011..9e9fda0929 100644
--- a/gnu/packages/mate.scm
+++ b/gnu/packages/mate.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 ng0 <ng0@n0.is>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2019 Guy Fleury Iteriteka <hoonandon@gmail.com>
 ;;;
@@ -195,20 +195,19 @@ from Mint-X-F and Faenza-Fresh icon packs.")
 (define-public mate-themes
   (package
     (name "mate-themes")
-    (version "3.22.19")
+    (version "3.22.20")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://mate/themes/" (version-major+minor version)
                            "/mate-themes-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1ycb8b8r0s8d1h1477135mynr53s5781gdb2ap8xlvj2g58492wq"))))
+       (sha256
+        (base32 "0c3dhf8p9nc2maky4g9xr04iil9wwbdkmhpzynlc6lfg4ksqq2bx"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
-       ("gdk-pixbuf" ,gdk-pixbuf) ; gdk-pixbuf+svg isn't needed
+       ("gdk-pixbuf" ,gdk-pixbuf)       ; gdk-pixbuf+svg isn't needed
        ("gtk" ,gtk+-2)))
     (home-page "https://mate-desktop.org/")
     (synopsis
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index d7ca43c5d7..c595103ac5 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -613,14 +613,14 @@ singular value problems.")
 (define-public gnuplot
   (package
     (name "gnuplot")
-    (version "5.2.6")
+    (version "5.2.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gnuplot/gnuplot/"
                                   version "/gnuplot-"
                                   version ".tar.gz"))
        (sha256
-        (base32 "1vllgap08nhvdmc03idmkdnk9cfl2bp81hps50q1pqrr640qzp9m"))))
+        (base32 "1vglp4la40f5dpj0zdj63zprrkyjgzy068p35bz5dqxjyczm1zlp"))))
     (build-system gnu-build-system)
     (inputs `(("readline" ,readline)
               ("cairo" ,cairo)
diff --git a/gnu/packages/mc.scm b/gnu/packages/mc.scm
index 3d6185ca78..76bf77d1c8 100644
--- a/gnu/packages/mc.scm
+++ b/gnu/packages/mc.scm
@@ -37,14 +37,14 @@
 (define-public mc
   (package
     (name "mc")
-    (version "4.8.22")
+    (version "4.8.23")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "http://ftp.midnight-commander.org/mc-"
                           version ".tar.xz"))
       (sha256
-       (base32 "060kh3dmk8fmmsibn1l815qjazzfxzbhgqggrhncz604pbbnhy7f"))))
+       (base32 "077z7phzq3m1sxyz7li77lyzv4rjmmh3wp2vy86pnc4387kpqzyx"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("perl" ,perl)))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 7d036ad473..503781a9eb 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -42,6 +42,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
@@ -490,56 +491,43 @@ compromised.")
 (define-public znc
   (package
     (name "znc")
-    (version "1.7.3")
+    (version "1.7.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://znc.in/releases/archive/znc-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0g8i5hsl4kinpz1wp0a2zniidv3w2sd6awq8676fds516wcc6k0y"))))
-    ;; TODO: autotools support has been deprecated, and new features like i18n
-    ;; are only supported when building with cmake.
-    (build-system gnu-build-system)
+                "0wcvqkpin8w4i72alnn0nxnrc9ih543qs34hqpk9xmz6m0hjk8xi"))))
+    (build-system cmake-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags
+       (list "-DWANT_CYRUS=ON"
+             "-DWANT_I18N=ON"
+             "-DWANT_PERL=ON"
+             "-DWANT_PYTHON=ON")
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'unpack-googletest
+           ;; Copy the googletest sources to where the CMake build expects them.
            (lambda* (#:key inputs #:allow-other-keys)
-             (mkdir-p "googletest")
-             (copy-recursively (assoc-ref inputs "googletest-source")
-                               "googletest")
-             #t)))
-       #:configure-flags '("--enable-python"
-                           "--enable-perl"
-                           "--enable-cyrus"
-                           "--with-gmock=googletest/googlemock"
-                           "--with-gtest=googletest/googletest")
-       #:test-target "test"))
+             (let ((source (assoc-ref inputs "googletest-source"))
+                   (target "third_party/googletest"))
+               (mkdir-p target)
+               (copy-recursively source target)
+               #t))))))
     (native-inputs
-     `(("googletest-source"
-        ;; ZNC 1.7 needs a newer, unreleased googletest (a release is planned
-        ;; <https://github.com/google/googletest/issues/1583>, so don't update
-        ;; the public GOOGLETEST to an unstable version).  The commit is taken
-        ;; from ‘third_party/googletest’ in the ZNC git repository.
-        ,(let ((commit "9737e63c69e94ac5777caa0bc77c77d5206467f3"))
-           (origin
-             (method git-fetch)
-             (uri (git-reference
-                   (url "https://github.com/google/googletest")
-                   (commit commit)))
-             (file-name (git-file-name "googletest-for-znc" commit))
-             (sha256
-              (base32
-               "0ya36n8d62zbxk6p22yffgx43mqhx2fz41gqqwbpdshjryf3wvxj")))))
-       ("pkg-config" ,pkg-config)
-       ("perl" ,perl)
-       ("python" ,python)))
+     `(("boost" ,boost)
+       ("gettext" ,gettext-minimal)
+       ("googletest-source" ,(package-source googletest))
+       ("pkg-config" ,pkg-config)))
     (inputs
-     `(("openssl" ,openssl)
-       ("zlib" ,zlib)
+     `(("cyrus-sasl" ,cyrus-sasl)
        ("icu4c" ,icu4c)
-       ("cyrus-sasl" ,cyrus-sasl)))
+       ("openssl" ,openssl)
+       ("perl" ,perl)
+       ("python" ,python)
+       ("zlib" ,zlib)))
     (home-page "https://znc.in")
     (synopsis "IRC network bouncer")
     (description "ZNC is an @dfn{IRC network bouncer} or @dfn{BNC}.  It can
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 461296f66b..c9cd7b1382 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -339,14 +339,14 @@ only provides @code{MPI_THREAD_FUNNELED}.")))
 (define-public python-mpi4py
   (package
     (name "python-mpi4py")
-    (version "3.0.1")
+    (version "3.0.2")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "mpi4py" version))
         (sha256
           (base32
-            "0ld8rjmsjr0dklvj2g1gr3ax32sdq0xjxyh0cspknc1i36waajb5"))))
+            "1q28xl36difma1wq0acq111cqxjya32kn3lxp6fbidz3wg8jkmpq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 1c0a4f3982..ca9cbd3343 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -20,6 +20,7 @@
 ;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Gabriel Hondet <gabrielhondet@gmail.com>
+;;; Copyright © 2019 Timotej Lazar <timotej.lazar@araneo.si>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -314,7 +315,7 @@ playing your music.")
 (define-public cmus
   (package
     (name "cmus")
-    (version "2.7.1")
+    (version "2.8.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -323,7 +324,7 @@ playing your music.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0xd96py21bl869qlv1353zw7xsgq6v5s8szr0ldr63zj5fgc2ps5"))))
+                "1ydnvq13ay8b8mfmmgwi5qsgyf220yi1d01acbnxqn775dghmwar"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; cmus does not include tests
@@ -1362,7 +1363,7 @@ users to select LV2 plugins and run them with jalv.")
 (define-public synthv1
   (package
     (name "synthv1")
-    (version "0.9.7")
+    (version "0.9.8")
     (source (origin
               (method url-fetch)
               (uri
@@ -1370,12 +1371,10 @@ users to select LV2 plugins and run them with jalv.")
                               "/synthv1-" version ".tar.gz"))
               (sha256
                (base32
-                "0i70wm430fvksi3g985farrkhgb7mwhi7j06dl66cdj1n12jzzk7"))))
+                "15kabmxp38wqvavs5hr1dqasjjf1j977kzqggxfmzyi3y5fan3hj"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; there are no tests
-       #:configure-flags
-       '("CXXFLAGS=-std=gnu++11")))
+     `(#:tests? #f))                    ; there are no tests
     (inputs
      `(("jack" ,jack-1)
        ("lv2" ,lv2)
@@ -1396,7 +1395,7 @@ oscillators and stereo effects.")
 (define-public drumkv1
   (package
     (name "drumkv1")
-    (version "0.9.7")
+    (version "0.9.8")
     (source (origin
               (method url-fetch)
               (uri
@@ -1404,12 +1403,10 @@ oscillators and stereo effects.")
                               "/drumkv1-" version ".tar.gz"))
               (sha256
                (base32
-                "1361dqdasrc98q9hcjdwsjx6agfimwnay430887fryi3pslkyd81"))))
+                "010p8nwnmqgj5mw324psig3hxi1g2gylxrigd6sj6sgcpy3kdm23"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; there are no tests
-       #:configure-flags
-       '("CXXFLAGS=-std=gnu++11")))
+     `(#:tests? #f))                    ; there are no tests
     (inputs
      `(("jack" ,jack-1)
        ("lv2" ,lv2)
@@ -1431,7 +1428,7 @@ effects.")
 (define-public samplv1
   (package
     (name "samplv1")
-    (version "0.9.7")
+    (version "0.9.8")
     (source (origin
               (method url-fetch)
               (uri
@@ -1439,12 +1436,10 @@ effects.")
                               "/samplv1-" version ".tar.gz"))
               (sha256
                (base32
-                "1vgmcjccpgqqlmmwfg6m91nph81p2xaxydjx82n4l1yrr9lidn9h"))))
+                "138kd9szgn3b97s7crhsyj8pgwb0bn4l9knd4zliqjgj2f1bs9x0"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; there are no tests
-       #:configure-flags
-       '("CXXFLAGS=-std=gnu++11")))
+     `(#:tests? #f))                    ; there are no tests
     (inputs
      `(("jack" ,jack-1)
        ("lv2" ,lv2)
@@ -1466,7 +1461,7 @@ effects.")
 (define-public padthv1
   (package
     (name "padthv1")
-    (version "0.9.7")
+    (version "0.9.8")
     (source (origin
               (method url-fetch)
               (uri
@@ -1474,12 +1469,10 @@ effects.")
                               "/padthv1-" version ".tar.gz"))
               (sha256
                (base32
-                "1jd4bf6a1ipvg4yhb3xf3maqg68bx97ic9l57djmkirlrkh2a3wp"))))
+                "1k4p2ir12qjcs62knvw2s6qyvb46203yx22fnwp341cjk171cxji"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; there are no tests
-       #:configure-flags
-       '("CXXFLAGS=-std=gnu++11")))
+     `(#:tests? #f))                    ; there are no tests
     (inputs
      `(("jack" ,jack-1)
        ("lv2" ,lv2)
@@ -2871,7 +2864,7 @@ for improved Amiga ProTracker 2/3 compatibility.")
 (define-public schismtracker
   (package
     (name "schismtracker")
-    (version "20181223")
+    (version "20190614")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2880,7 +2873,7 @@ for improved Amiga ProTracker 2/3 compatibility.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "18k5j10zq39y2q294avdmar87x93k57wqmq8bpz562hdqki2mz1l"))
+                "0cg0q5bkn8a06v03vmj69xyhi4xxpl729k4008q4hiakh9gy2x49"))
               (modules '((guix build utils)))
               (snippet
                ;; Remove use of __DATE__ and __TIME__ for reproducibility.
@@ -2900,7 +2893,7 @@ for improved Amiga ProTracker 2/3 compatibility.")
        ("automake" ,automake)
        ("python" ,python)))
     (inputs
-     `(("alsa-lib" ,alsa-lib) ; for asound dependency
+     `(("alsa-lib" ,alsa-lib)           ; for asound dependency
        ("libx11" ,libx11)
        ("libxext" ,libxext)
        ("sdl" ,sdl)))
diff --git a/gnu/packages/patches/emacs-zones-called-interactively.patch b/gnu/packages/patches/emacs-zones-called-interactively.patch
index b60f390a7e..eefcfdd12e 100644
--- a/gnu/packages/patches/emacs-zones-called-interactively.patch
+++ b/gnu/packages/patches/emacs-zones-called-interactively.patch
@@ -1,4 +1,4 @@
-From fb56fbb706804215ef9af0cc575db97c373046c6 Mon Sep 17 00:00:00 2001
+From 81603e53ebaae0f0b23c4c52c7dab83e808964ec Mon Sep 17 00:00:00 2001
 From: Brian Leung <bkleung89@gmail.com>
 Date: Sun, 17 Mar 2019 01:32:04 +0100
 Subject: [PATCH] This patch silences the byte-compiler.
@@ -8,36 +8,36 @@ Subject: [PATCH] This patch silences the byte-compiler.
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/zones.el b/zones.el
-index 1bf94f0..94fa9a6 100644
+index ca88d48..594ea36 100644
 --- a/zones.el
 +++ b/zones.el
-@@ -1031,7 +1031,7 @@ You can use `C-x n x' to widen to a previous buffer restriction.
+@@ -1075,7 +1075,7 @@ You can use `C-x n x' to widen to a previous buffer restriction.
  
  This is a destructive operation. The list structure of the variable
  value can be modified."
 -  (zz-narrow-advice (interactive-p)))
-+  (zz-narrow-advice (called-interactively-p)))
++  (zz-narrow-advice (called-interactively-p 'interactive)))
  
  (defadvice narrow-to-defun (after zz-add-zone--defun activate)
    "Push the defun limits to the current `zz-izones-var'.
-@@ -1039,7 +1039,7 @@ You can use `C-x n x' to widen to a previous buffer restriction.
+@@ -1083,7 +1083,7 @@ You can use `C-x n x' to widen to a previous buffer restriction.
  
  This is a destructive operation. The list structure of the variable
  value can be modified."
 -  (zz-narrow-advice (interactive-p)))
-+  (zz-narrow-advice (called-interactively-p)))
++  (zz-narrow-advice (called-interactively-p 'interactive)))
  
  ;; Call `zz-add-zone' if interactive or `zz-add-zone-anyway-p'.
  ;;
-@@ -1049,7 +1049,7 @@ You can use `C-x n x' to widen to a previous buffer restriction.
+@@ -1093,7 +1093,7 @@ You can use `C-x n x' to widen to a previous buffer restriction.
  
  This is a destructive operation. The list structure of the variable
  value can be modified."
 -  (zz-narrow-advice (interactive-p)))
-+  (zz-narrow-advice (called-interactively-p)))
++  (zz-narrow-advice (called-interactively-p 'interactive)))
  
  ;;(@* "General Commands")
  
 -- 
-2.21.0
+2.22.0
 
diff --git a/gnu/packages/patches/khmer-use-libraries.patch b/gnu/packages/patches/khmer-use-libraries.patch
deleted file mode 100644
index 47d163a99a..0000000000
--- a/gnu/packages/patches/khmer-use-libraries.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Change setup.cfg so that the bundled zlib and bzip2 are not used.  This cannot
-currently be achieved using "--library z,bz2" as instructed in the setup.py.
-
-diff --git a/setup.cfg b/setup.cfg
-index c054092..080992e 100644
---- a/setup.cfg
-+++ b/setup.cfg
-@@ -1,7 +1,7 @@
- [build_ext]
- define = SEQAN_HAS_BZIP2,SEQAN_HAS_ZLIB
- undef = NO_UNIQUE_RC
--# libraries = z,bz2
-+libraries = z,bz2
- ## if using system libraries
- include-dirs = lib:third-party/zlib:third-party/bzip2:third-party/seqan/core/include:third-party/smhasher
- # include-dirs = lib
diff --git a/gnu/packages/patches/lcalc-default-parameters-1.patch b/gnu/packages/patches/lcalc-default-parameters-1.patch
new file mode 100644
index 0000000000..19b0776320
--- /dev/null
+++ b/gnu/packages/patches/lcalc-default-parameters-1.patch
@@ -0,0 +1,26 @@
+Patch taken from the Sage packaging system.
+
+diff -Naur lcalc-1.23-vanilla/include/Ldirichlet_series.h lcalc-1.23-fixed-gcc.4.9/include/Ldirichlet_series.h
+--- lcalc-1.23-vanilla/include/Ldirichlet_series.h	2012-08-08 23:21:55.000000000 +0200
++++ lcalc-1.23-fixed-gcc.4.9/include/Ldirichlet_series.h	2014-04-21 14:37:59.027464849 +0200
+@@ -43,7 +43,7 @@
+  //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ template <class ttype>
+ Complex L_function <ttype>::
+-dirichlet_series(Complex s, long long N=-1)
++dirichlet_series(Complex s, long long N)
+ {
+     Complex z=0.;
+     long long m,n;
+diff -Naur lcalc-1.23-vanilla/include/L.h lcalc-1.23-fixed-gcc.4.9/include/L.h
+--- lcalc-1.23-vanilla/include/L.h	2012-08-08 23:21:55.000000000 +0200
++++ lcalc-1.23-fixed-gcc.4.9/include/L.h	2014-04-21 14:32:04.003467348 +0200
+@@ -491,7 +491,7 @@
+ 
+     //#include "Ldirichlet_series.h" //for computing Dirichlet series
+     Complex partial_dirichlet_series(Complex s, long long N1, long long N2);
+-    Complex dirichlet_series(Complex s, long long N);
++    Complex dirichlet_series(Complex s, long long N=-1LL);
+ 
+     //#include "Ltaylor_series.h" //for computing taylor series for Dirichlet series
+     //void compute_taylor_series(int N, int K, Complex s_0, Complex *series);
diff --git a/gnu/packages/patches/lcalc-default-parameters-2.patch b/gnu/packages/patches/lcalc-default-parameters-2.patch
new file mode 100644
index 0000000000..1d881ee0c4
--- /dev/null
+++ b/gnu/packages/patches/lcalc-default-parameters-2.patch
@@ -0,0 +1,58 @@
+Patch taken from the Sage packaging system.
+
+--- lcalc-1.23/include/Lgamma.h	2012-08-08 23:21:55.000000000 +0200
++++ lcalc-1.23/include/Lgamma.h	2014-05-18 21:15:27.786889718 +0200
+@@ -77,7 +77,7 @@
+ //n=0 should just give log_GAMMA(z)... thus making log_GAMMA
+ //code obsolete. But leave log_GAMMA intact anyways.
+ template <class ttype>
+-precise(ttype) log_GAMMA (ttype z,int n=0)
++precise(ttype) log_GAMMA (ttype z,int n)
+ {
+     int M;
+     precise(ttype) log_G,r,r2,y;
+@@ -230,7 +230,7 @@
+ //value exp_w which holds exp(-w)
+ //computes G(z,w), so there's an extra w^(-z) factor.
+ template <class ttype>
+-Complex inc_GAMMA (ttype z,ttype w, const char *method="temme", ttype exp_w = 0, bool recycle=false)
++Complex inc_GAMMA (ttype z,ttype w, const char *method, ttype exp_w, bool recycle)
+ {
+ 
+     Complex G;
+@@ -334,7 +334,7 @@
+ 
+ 
+ template <class ttype>
+-ttype cfrac_GAMMA (ttype z,ttype w, ttype exp_w=0, bool recycle=false)  //computes G(z,w) via continued fraction
++ttype cfrac_GAMMA (ttype z,ttype w, ttype exp_w, bool recycle)  //computes G(z,w) via continued fraction
+ {
+ 
+         ttype G;
+@@ -424,7 +424,7 @@
+ }
+ 
+ template <class ttype>
+-ttype asympt_GAMMA (ttype z,ttype w, ttype exp_w = 0, bool recycle=false)  //computes G(z,w) via asymptotic series
++ttype asympt_GAMMA (ttype z,ttype w, ttype exp_w, bool recycle)  //computes G(z,w) via asymptotic series
+ {
+ 
+         if(my_verbose>3) cout << "called asympt_GAMMA("<<z<<","<<w<<")"<< endl;
+@@ -446,7 +446,7 @@
+ 
+ 
+ template <class ttype>
+-ttype comp_inc_GAMMA (ttype z,ttype w,ttype exp_w = 0, bool recycle=false)  //computes g(z,w)
++ttype comp_inc_GAMMA (ttype z,ttype w,ttype exp_w, bool recycle)  //computes g(z,w)
+ {
+ 
+     ttype g;
+@@ -604,7 +604,7 @@
+ }
+ 
+ template <class ttype>
+-Complex gamma_sum(Complex s, int what_type, ttype *coeff, int N, Double g, Complex l, Double Q, Long Period, Complex delta=1, const char *method="temme")
++Complex gamma_sum(Complex s, int what_type, ttype *coeff, int N, Double g, Complex l, Double Q, Long Period, Complex delta, const char *method)
+ {
+     Complex SUM=0;
+ 
diff --git a/gnu/packages/patches/lcalc-lcommon-h.patch b/gnu/packages/patches/lcalc-lcommon-h.patch
new file mode 100644
index 0000000000..897956de64
--- /dev/null
+++ b/gnu/packages/patches/lcalc-lcommon-h.patch
@@ -0,0 +1,13 @@
+Patch taken from the Sage packaging system.
+
+--- src/include/Lcommon.h	2010-01-31 15:16:45.000000000 +0000
++++ src/include/Lcommon.h	2011-03-08 21:19:11.849443238 +0000
+@@ -25,7 +25,7 @@
+ #ifdef USE_MPFR
+ inline double lcalc_to_double(const double& x) { return x; }
+ #endif
+-//inline double lcalc_to_double(const long double& x) { return x; }
++inline double lcalc_to_double(const long double& x) { return x; }
+ inline double lcalc_to_double(const int& x) { return x; }
+ inline double lcalc_to_double(const long long& x) { return x; }
+ inline double lcalc_to_double(const short& x) { return x; }
diff --git a/gnu/packages/patches/lcalc-using-namespace-std.patch b/gnu/packages/patches/lcalc-using-namespace-std.patch
new file mode 100644
index 0000000000..6e0075fdc8
--- /dev/null
+++ b/gnu/packages/patches/lcalc-using-namespace-std.patch
@@ -0,0 +1,43 @@
+Patch taken from the Sage packaging system.
+
+diff --git a/include/Lcommon.h b/include/Lcommon.h
+index 1b3be43..bf40532 100644
+--- a/include/Lcommon.h
++++ b/include/Lcommon.h
+@@ -48,7 +48,7 @@ const bool outputSeries=true;	  // Whether to output the coefficients or just th
+ 
+ // Loop i from m to n
+ // Useful in tidying up most for loops
+-#define loop(i,m,n) for(typeof(m) i=(m); i!=(n); i++)
++#define loop(i,m,n) for(auto i=(m); i!=(n); i++)
+ 
+ // A class for calculations involving polynomials of small degree
+ // Not efficient enough for huge polynomials
+diff --git a/include/Lcommon_ld.h b/include/Lcommon_ld.h
+index 86ae4df..33c560c 100644
+--- a/include/Lcommon_ld.h
++++ b/include/Lcommon_ld.h
+@@ -53,7 +53,7 @@ const bool outputSeries=true;	  // Whether to output the coefficients or just th
+ 
+ // Loop i from m to n
+ // Useful in tidying up most for loops
+-#define loop(i,m,n) for(typeof(m) i=(m); i!=(n); i++)
++#define loop(i,m,n) for(auto i=(m); i!=(n); i++)
+ 
+ // A class for calculations involving polynomials of small degree
+ // Not efficient enough for huge polynomials
+diff --git a/include/Lglobals.h b/include/Lglobals.h
+index 60002e4..ca2606c 100644
+--- a/include/Lglobals.h
++++ b/include/Lglobals.h
+@@ -24,9 +24,9 @@
+ #ifndef Lglobals_H
+ #define Lglobals_H
+ 
++#include <valarray>
+ using namespace std;
+ 
+-#include <valarray>
+ #ifdef USE_MPFR
+     #include "Lgmpfrxx.h"
+     typedef mpfr_class Double;
diff --git a/gnu/packages/patches/leela-zero-gtest.patch b/gnu/packages/patches/leela-zero-gtest.patch
new file mode 100644
index 0000000000..7291b4ab72
--- /dev/null
+++ b/gnu/packages/patches/leela-zero-gtest.patch
@@ -0,0 +1,40 @@
+Use shared gtest instead of submodule
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 617e4b2..2857875 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -18,7 +18,6 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+ include(GNUInstallDirs)
+ 
+ project(leelaz)
+-add_subdirectory(gtest EXCLUDE_FROM_ALL) # We don't want to install gtest, exclude it from `all`
+ 
+ # Required Packages
+ set(Boost_MIN_VERSION "1.58.0")
+@@ -27,6 +26,7 @@ find_package(Boost 1.58.0 REQUIRED program_options filesystem)
+ find_package(Threads REQUIRED)
+ find_package(ZLIB REQUIRED)
+ find_package(OpenCL REQUIRED)
++find_package(GTest REQUIRED)
+ # We need OpenBLAS for now, because we make some specific
+ # calls. Ideally we'd use OpenBLAS is possible and fall back to
+ # not doing those calls if it's not present.
+@@ -93,6 +93,7 @@ include_directories(${IncludePath})
+ include_directories(${Boost_INCLUDE_DIRS})
+ include_directories(${OpenCL_INCLUDE_DIRS})
+ include_directories(${ZLIB_INCLUDE_DIRS})
++include_directories(${GTEST_INCLUDE_DIRS})
+ 
+ if((UNIX AND NOT APPLE) OR WIN32)
+     include_directories(${BLAS_INCLUDE_DIRS})
+@@ -141,7 +142,8 @@ target_link_libraries(tests ${Boost_LIBRARIES})
+ target_link_libraries(tests ${BLAS_LIBRARIES})
+ target_link_libraries(tests ${OpenCL_LIBRARIES})
+ target_link_libraries(tests ${ZLIB_LIBRARIES})
+-target_link_libraries(tests gtest_main ${CMAKE_THREAD_LIBS_INIT})
++target_link_libraries(tests ${GTEST_BOTH_LIBRARIES})
++target_link_libraries(tests ${CMAKE_THREAD_LIBS_INIT})
+ 
+ include(GetGitRevisionDescription)
+ git_describe(VERSION --tags)
diff --git a/gnu/packages/patches/lrcalc-includes.patch b/gnu/packages/patches/lrcalc-includes.patch
new file mode 100644
index 0000000000..e15286905b
--- /dev/null
+++ b/gnu/packages/patches/lrcalc-includes.patch
@@ -0,0 +1,92 @@
+Patch taken from the Sage packaging system.
+
+From 4a5e1c8c3c11efdb1cbb4239825a6bf4bf1c52f8 Mon Sep 17 00:00:00 2001
+From: Anders Skovsted Buch <asbuch@math.rutgers.edu>
+Date: Sun, 29 Nov 2015 16:25:56 -0500
+Subject: [PATCH] Patch by Jeroen Demeyer to change include <vector.h> to
+ "vector.h", plus similar cases.
+
+---
+ src/lrcalc.c   | 2 +-
+ src/maple.c    | 4 ++--
+ src/schublib.h | 2 +-
+ src/symfcn.c   | 6 +++---
+ src/symfcn.h   | 4 ++--
+ 5 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/src/lrcalc.c b/src/lrcalc.c
+index aff3f75..60df49e 100644
+--- a/src/lrcalc.c
++++ b/src/lrcalc.c
+@@ -8,7 +8,7 @@
+ #include <stdlib.h>
+ extern char *optarg;
+ 
+-#include <vectarg.h>
++#include "vectarg.h"
+ 
+ #include "symfcn.h"
+ #include "maple.h"
+diff --git a/src/maple.c b/src/maple.c
+index fdc0768..a5f4d14 100644
+--- a/src/maple.c
++++ b/src/maple.c
+@@ -4,8 +4,8 @@
+  */
+ 
+ #include <stdio.h>
+-#include <vector.h>
+-#include <hashtab.h>
++#include "vector.h"
++#include "hashtab.h"
+ #include "maple.h"
+ 
+ 
+diff --git a/src/schublib.h b/src/schublib.h
+index a8e8511..864850c 100644
+--- a/src/schublib.h
++++ b/src/schublib.h
+@@ -1,7 +1,7 @@
+ #ifndef _SCHUBLIB_H
+ #define _SCHUBLIB_H
+ 
+-#include <hashtab.h>
++#include "hashtab.h"
+ 
+ hashtab *trans(vector *w, int vars, hashtab *res);
+ hashtab *monk(int i, hashtab *slc, int rank);
+diff --git a/src/symfcn.c b/src/symfcn.c
+index 4ffbe4b..fd5df5d 100644
+--- a/src/symfcn.c
++++ b/src/symfcn.c
+@@ -5,9 +5,9 @@
+ 
+ #include <stdio.h>
+ 
+-#include <alloc.h>
+-#include <vector.h>
+-#include <hashtab.h>
++#include "alloc.h"
++#include "vector.h"
++#include "hashtab.h"
+ 
+ #include "symfcn.h"
+ 
+diff --git a/src/symfcn.h b/src/symfcn.h
+index b8543b1..29bb00d 100644
+--- a/src/symfcn.h
++++ b/src/symfcn.h
+@@ -1,8 +1,8 @@
+ #ifndef _SYMFCN_H
+ #define _SYMFCN_H
+ 
+-#include <hashtab.h>
+-#include <vector.h>
++#include "hashtab.h"
++#include "vector.h"
+ 
+ int part_itr_sz(vector *part);
+ int part_itr_sub(vector *part, vector *outer);
+-- 
+2.1.1.1.g1fb337f
+
diff --git a/gnu/packages/patches/python-pyatspi-python-37.patch b/gnu/packages/patches/python-pyatspi-python-37.patch
new file mode 100644
index 0000000000..caa6aea39e
--- /dev/null
+++ b/gnu/packages/patches/python-pyatspi-python-37.patch
@@ -0,0 +1,82 @@
+From 29a7b929f7f1160b643dc5f5911533887173fcff Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
+Date: Thu, 28 Jun 2018 17:10:33 +0200
+Subject: [PATCH] Rename async to asynchronous, keep backwards comaptibility
+
+async is a keyword in Python 3.7 and keeping it results in SyntaxError.
+
+Fixes https://gitlab.gnome.org/GNOME/pyatspi2/issues/1
+---
+ pyatspi/registry.py | 35 +++++++++++++++++++++++++++--------
+ 1 file changed, 27 insertions(+), 8 deletions(-)
+
+diff --git a/pyatspi/registry.py b/pyatspi/registry.py
+index cb28395..f73ee16 100644
+--- a/pyatspi/registry.py
++++ b/pyatspi/registry.py
+@@ -50,9 +50,9 @@ class Registry(object):
+         reference to the Accessibility.Registry singleton. Doing so is harmless and
+         has no point.
+ 
+-        @@ivar async: Should event dispatch to local listeners be decoupled from event
+-                receiving from the registry?
+-        @@type async: boolean
++        @@ivar asynchronous: Should event dispatch to local listeners be decoupled
++                from event receiving from the registry?
++        @@type asynchronous: boolean
+         @@ivar reg: Reference to the real, wrapped registry object
+         @@type reg: Accessibility.Registry
+         @@ivar dev: Reference to the device controller
+@@ -111,25 +111,44 @@ class Registry(object):
+ 
+                 self.has_implementations = True
+ 
+-                self.async = False	# not fully supported yet
++                self.asynchronous = False	# not fully supported yet
+                 self.started = False
+                 self.event_listeners = dict()
+ 
++        def __getattr__(self, name):
++            """
++            For backwards compatibility with old API
++            """
++            if name == 'async':
++                return self.asynchronous
++            return object.__getattr__(self, name)
++
++        def __setattr__(self, name, value):
++            """
++            For backwards compatibility with old API
++            """
++            if name == 'async':
++                self.asynchronous = value
++            object.__setattr__(self, name, value)
++
+         def _set_default_registry (self):
+                 self._set_registry (MAIN_LOOP_GLIB)
+ 
+-        def start(self, async=False, gil=True):
++        def start(self, asynchronous=False, gil=True, **kwargs):
+                 """
+                 Enter the main loop to start receiving and dispatching events.
+ 
+-                @@param async: Should event dispatch be asynchronous (decoupled) from 
+-                        event receiving from the AT-SPI registry?
+-                @@type async: boolean
++                @@param asynchronous: Should event dispatch be asynchronous
++                        (decoupled) from event receiving from the AT-SPI registry?
++                @@type asynchronous: boolean
+                 @@param gil: Add an idle callback which releases the Python GIL for a few
+                         milliseconds to allow other threads to run? Necessary if other threads
+                         will be used in this process.
+                 @@type gil: boolean
+                 """
++                if 'async' in kwargs:
++                    # support previous API
++                    asynchronous = kwargs['async']
+                 if not self.has_implementations:
+                         self._set_default_registry ()
+                 self.started = True
+-- 
+2.22.0
+
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 3690050944..6318a4b309 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -1039,7 +1039,7 @@ multiple files.")
 (define-public pdfpc
   (package
     (name "pdfpc")
-    (version "4.3.2")
+    (version "4.3.4")
     (source
      (origin
        (method git-fetch)
@@ -1048,7 +1048,7 @@ multiple files.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "15y6g92fp6x6dwwhrhkfny5z20w7pq9c8w19fh2vzff9aa6m2h9z"))))
+        (base32 "07aafsm4jzdgpahz83p0ajv40hry7gviyadqi13ahr8xdhhwy2sd"))))
     (build-system cmake-build-system)
     (arguments '(#:tests? #f))          ; no test target
     (inputs
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 6a4dbe8ed0..52b2bc2630 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -383,24 +383,7 @@ error when it would have happened.")
     (license (package-license perl))))
 
 (define-public perl-base
-  (package
-    (name "perl-base")
-    (version "2.23")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
-                           "base-" version ".tar.gz"))
-       (sha256
-        (base32 "1pjxcbbcpwlgzm0fzsbqd58zn8cj9vwril1wn3xfd7ws550mixa0"))))
-    (build-system perl-build-system)
-    (home-page "https://metacpan.org/release/base")
-    (synopsis "Establish an ISA relationship with base classes at compile time")
-    (description "Allows you to both load one or more modules, while setting
-up inheritance from those modules at the same time.  Unless you are using the
-fields pragma, consider this module discouraged in favor of the lighter-weight
-parent.")
-    (license (package-license perl))))  ;See README
+  (deprecated-package "perl-base" perl))
 
 (define-public perl-browser-open
   (package
@@ -873,8 +856,6 @@ the Carp.pm module doesn't help.")
     (build-system perl-build-system)
     (native-inputs
      `(("perl-sub-name" ,perl-sub-name)))
-    (propagated-inputs
-     `(("perl-base" ,perl-base)))
     (home-page "https://metacpan.org/release/Class-Accessor")
     (synopsis "Automated accessor generation")
     (description "This module automagically generates accessors/mutators for
@@ -1605,14 +1586,14 @@ CPAN::Meta object are present.")
 (define-public perl-cpanel-json-xs
   (package
     (name "perl-cpanel-json-xs")
-    (version "4.10")
+    (version "4.12")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/R/RU/RURBAN/"
                            "Cpanel-JSON-XS-" version ".tar.gz"))
        (sha256
-        (base32 "1r92b03hkmqr0brp00cj67b1iklfd4yas481d6a5nx2941c03h3p"))))
+        (base32 "0n66da8s88srr591i7gm1d611z9jbcz488fhqxy604diiw8pnha9"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-common-sense" ,perl-common-sense)))
@@ -3764,14 +3745,14 @@ allows you to locate these files after installation.")
 (define-public perl-file-slurp
   (package
     (name "perl-file-slurp")
-    (version "9999.26")
+    (version "9999.27")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/C/CA/CAPOEIRAB/"
                            "File-Slurp-" version ".tar.gz"))
        (sha256
-        (base32 "0c09ivl50sg9j75si6cahfp1wgvhqawakb6h5j6hlca6vwjqs9qy"))))
+        (base32 "1x233kj1qifvii7j8d4wzarwhj5z11vnpxsqvdm98dsccr7qi79s"))))
     (build-system perl-build-system)
     (home-page "https://metacpan.org/release/File-Slurp")
     (synopsis "Reading/Writing/Modifying of complete files")
@@ -3835,8 +3816,6 @@ slurping and spewing.  All functions are optionally exported.")
        (sha256
         (base32 "0pr3wrxrk93wy7dz9gsb1sgl77icrs8rh2mah6wms5cdi2ll5ch1"))))
     (build-system perl-build-system)
-    (propagated-inputs
-     `(("perl-parent" ,perl-parent)))
     (home-page "https://metacpan.org/release/File-Temp")
     (synopsis "Return name and handle of a temporary file safely")
     (description "File::Temp can be used to create and open temporary files in
@@ -4969,7 +4948,7 @@ portions of this module couldn't be compiled on this machine.")
 (define-public perl-mailtools
   (package
     (name "perl-mailtools")
-    (version "2.20")
+    (version "2.21")
     (source
      (origin
        (method url-fetch)
@@ -4979,7 +4958,7 @@ portions of this module couldn't be compiled on this machine.")
              ".tar.gz"))
        (sha256
         (base32
-         "15iizg2x1w7ca0r8rn3wwhp7w160ljvf55prspljwd6cm7vhcmpm"))))
+         "1js43bp2dnd8n2rv8clsv749166jnyqnc91k4wkkmw5n4rlbvnaa"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-timedate" ,perl-timedate)))
@@ -5634,7 +5613,6 @@ Moose and is optimised for rapid startup.")
        ("perl-package-stash" ,perl-package-stash)
        ("perl-package-stash-xs" ,perl-package-stash-xs)
        ("perl-params-util" ,perl-params-util)
-       ("perl-parent" ,perl-parent)
        ("perl-scalar-list-utils" ,perl-scalar-list-utils)
        ("perl-sub-exporter" ,perl-sub-exporter)
        ("perl-sub-name" ,perl-sub-name)
@@ -6964,22 +6942,7 @@ distributions.")
     (license (package-license perl))))
 
 (define-public perl-parent
-  (package
-    (name "perl-parent")
-    (version "0.237")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/C/CO/CORION/"
-                           "parent-" version ".tar.gz"))
-       (sha256
-        (base32 "1bnaadzf51g6zrpq6pvvgds2cc9d4w1vck7sapkd3hb5hmjdk28h"))))
-    (build-system perl-build-system)
-    (home-page "https://metacpan.org/release/parent")
-    (synopsis "Establish an ISA relationship with base classes at compile time")
-    (description "Allows you to both load one or more modules, while setting
-up inheritance from those modules at the same time.")
-    (license (package-license perl))))
+  (deprecated-package "perl-parent" perl))
 
 (define-public perl-path-class
   (package
@@ -7951,14 +7914,14 @@ uplevel() are avoided.")
 (define-public perl-super
   (package
     (name "perl-super")
-    (version "1.20141117")
+    (version "1.20190531")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/C/CH/CHROMATIC/"
                            "SUPER-" version ".tar.gz"))
        (sha256
-        (base32 "1cn05kacg0xfbm1zzksm2yx2pnrzqja4d9163cxv3sdfc1yhwqhs"))))
+        (base32 "16nk2za9fwyg7mcifacr69qi075iz1yvy8r9jh3903kzdvkiwpb8"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-module-build" ,perl-module-build)))
@@ -9009,8 +8972,7 @@ simple n-ary tree.")
      `(("perl-module-build" ,perl-module-build)
        ("perl-test-exception" ,perl-test-exception)))
     (propagated-inputs
-     `(("perl-tree-simple" ,perl-tree-simple)
-       ("perl-base" ,perl-base)))
+     `(("perl-tree-simple" ,perl-tree-simple)))
     (home-page "https://metacpan.org/release/Tree-Simple-VisitorFactory")
     (synopsis "Factory object for dispensing Visitor objects")
     (description "This module is a factory for dispensing
diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm
index 58a1022bc2..676dae5430 100644
--- a/gnu/packages/python-check.scm
+++ b/gnu/packages/python-check.scm
@@ -105,3 +105,138 @@ is delete your existing cassette files, and run your tests again.  VCR.py will
 detect the absence of a cassette file and once again record all HTTP
 interactions, which will update them to correspond to the new API.")
     (license license:expat)))
+
+(define-public python-pytest-checkdocs
+  (package
+    (name "python-pytest-checkdocs")
+    (version "1.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-checkdocs" version))
+       (sha256
+        (base32
+         "07c27cdjcw6jph5kbgpxchrvwlps4ggwb2j6m7y64imnik0asrq8"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-importlib-metadata" ,python-importlib-metadata)))
+    (native-inputs
+     `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (home-page "https://github.com/jaraco/pytest-checkdocs")
+    (synopsis "Check the README when running tests")
+    (description
+     "This package provides a pytest plugin that checks the long description
+of the project to ensure it renders properly.")
+    (license license:expat)))
+
+(define-public python-pytest-flake8
+  (package
+    (name "python-pytest-flake8")
+    (version "1.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-flake8" version))
+       (sha256
+        (base32
+         "1h30gd21fjsafqxwclf25sdh89vrdz7rsh4lzw11aiw7ww9mq8jd"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-flake8" ,python-flake8)))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/tholo/pytest-flake8")
+    (synopsis "Pytest plugin to check FLAKE8 requirements")
+    (description
+     "This package provides a pytest plugin for efficiently checking PEP8
+compliance.")
+    (license license:bsd-3)))
+
+(define-public python-pytest-shutil
+  (package
+    (name "python-pytest-shutil")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-shutil" version))
+       (sha256
+        (base32
+         "0q8j0ayzmnvlraml6i977ybdq4xi096djhf30n2m1rvnvrhm45nq"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-tests
+           (lambda _
+             (mkdir "/tmp/bin")
+             (substitute* "tests/integration/test_cmdline_integration.py"
+               (("dirname = '/bin'")
+                "dirname = '/tmp/bin'")
+               (("bindir = os.path.realpath\\('/bin'\\)")
+                "bindir = os.path.realpath('/tmp/bin')"))
+             #t)))))
+    (propagated-inputs
+     `(("python-contextlib2" ,python-contextlib2)
+       ("python-execnet" ,python-execnet)
+       ("python-pathpy" ,python-pathpy)
+       ("python-termcolor" ,python-termcolor)))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)
+       ("python-setuptools-git" ,python-setuptools-git)))
+    (home-page "https://github.com/manahl/pytest-plugins")
+    (synopsis "Assorted shell and environment tools for py.test")
+    (description
+     "This package provides assorted shell and environment tools for the
+py.test testing framework.")
+    (license license:expat)))
+
+(define-public python-pytest-fixture-config
+  (package
+    (name "python-pytest-fixture-config")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-fixture-config" version))
+       (sha256
+        (base32
+         "13i1qpz22w3x4dmw8vih5jdnbqfqvl7jiqs0dg764s0zf8bp98a1"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-setuptools-git" ,python-setuptools-git)))
+    (home-page "https://github.com/manahl/pytest-plugins")
+    (synopsis "Fixture configuration utils for py.test")
+    (description
+     "This package provides fixture configuration utilities for the py.test
+testing framework.")
+    (license license:expat)))
+
+(define-public python-pytest-virtualenv
+  (package
+    (name "python-pytest-virtualenv")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-virtualenv" version))
+       (sha256
+        (base32
+         "03w2zz3crblj1p6i8nq17946hbn3zqp9z7cfnifw47hi4a4fww12"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f)) ; one test fails; can't find virtualenv
+    (propagated-inputs
+     `(("python-virtualenv" ,python-virtualenv)
+       ("python-pytest-shutil" ,python-pytest-shutil)
+       ("python-pytest-fixture-config" ,python-pytest-fixture-config)))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)
+       ("python-setuptools-git" ,python-setuptools-git)))
+    (home-page "https://github.com/manahl/pytest-plugins")
+    (synopsis "Virtualenv fixture for py.test")
+    (description "This package provides a virtualenv fixture for the py.test
+framework.")
+    (license license:expat)))
diff --git a/gnu/packages/python-compression.scm b/gnu/packages/python-compression.scm
index 88f62d1934..705a7ffa3b 100644
--- a/gnu/packages/python-compression.scm
+++ b/gnu/packages/python-compression.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 ng0 <ng0@n0.is>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
@@ -32,7 +32,8 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages python-xyz))
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages sphinx))
 
 (define-public python-lzo
   (package
@@ -205,3 +206,31 @@ install: libbitshuffle.so
                #t))))))
     (inputs '())
     (native-inputs '())))
+
+(define-public python-zipp
+  (package
+    (name "python-zipp")
+    (version "0.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "zipp" version))
+       (sha256
+        (base32
+         "1hsv4zwy1pwnbrr63wjjkpwrmnk36ngbkkqw01bj5hcwh1z3m56a"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-contextlib2" ,python-contextlib2)
+       ("python-pathlib2" ,python-pathlib2)
+       ("python-rst.linker" ,python-rst.linker)))
+    (native-inputs
+     `(("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-sphinx" ,python-sphinx)
+       ("python-unittest2" ,python-unittest2)))
+    (home-page "https://github.com/jaraco/zipp")
+    (synopsis
+     "Backport of pathlib-compatible object wrapper for zip files")
+    (description
+     "This package provides a @code{pathlib}-compatible @code{Zipfile} object
+wrapper.  It provides a backport of the @code{Path} object.")
+    (license license:expat)))
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index d9065e8b15..88a00070a8 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -77,14 +77,13 @@ with what is used by the Bitcoin network.")
 (define-public python-bcrypt
   (package
     (name "python-bcrypt")
-    (version "3.1.6")
+    (version "3.1.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "bcrypt" version))
        (sha256
-        (base32
-         "1sh2xh0iragdq8dhssc1cdd02nppjq7b5kmv0qladfi2s9cnfqs4"))))
+        (base32 "0hhywhxx301cxivgxrpslrangbfpccc8y83qbwn1f57cab3nj00b"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-pycparser" ,python-pycparser)
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 660e5e40a9..e3e2b5f0d7 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -29,7 +29,7 @@
 ;;; Copyright © 2016, 2017, 2018, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
-;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2016, 2017, 2019 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017, 2018 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -60,6 +60,7 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@posteo.net>
 ;;; Copyright © 2019 Sam <smbaines8@gmail.com>
 ;;; Copyright © 2019 Jack Hill <jackhill@jackhill.us>
+;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -88,6 +89,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages dbm)
   #:use-module (gnu packages file)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
@@ -118,6 +120,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-check)
+  #:use-module (gnu packages python-compression)
   #:use-module (gnu packages python-crypto)
   #:use-module (gnu packages python-web)
   #:use-module (gnu packages qt)
@@ -2692,7 +2695,7 @@ ecosystem, but can naturally be used also by other projects.")
 (define-public python-robotframework
   (package
     (name "python-robotframework")
-    (version "3.1.1")
+    (version "3.1.2")
     ;; There are no tests in the PyPI archive.
     (source
      (origin
@@ -2702,8 +2705,7 @@ ecosystem, but can naturally be used also by other projects.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "1aaiamc9l35m5sf7xl2qc5q9308v7sz3p1qgzcslsjxzddphyn4v"))
+        (base32 "16gnxy0qinh8fhs0qvhff5z2xh49c3cqgm0d7bfjw120df6x7fym"))
        (patches (search-patches
                  "python-robotframework-honor-source-date-epoch.patch"))))
     (build-system python-build-system)
@@ -4863,17 +4865,101 @@ them as the version argument or in a SCM managed file.")
 (define-public python2-setuptools-scm
   (package-with-python2 python-setuptools-scm))
 
+(define-public python-pathlib2
+  (package
+    (name "python-pathlib2")
+    (version "2.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pathlib2" version))
+       (sha256
+        (base32
+         "0hpp92vqqgcd8h92msm9slv161b1q160igjwnkf2ag6cx0c96695"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-scandir" ,python-scandir)
+       ("python-six" ,python-six)))
+    (home-page "https://pypi.python.org/pypi/pathlib2/")
+    (synopsis "Object-oriented filesystem paths")
+    (description "The goal of pathlib2 is to provide a backport of the
+standard @code{pathlib} module which tracks the standard library module, so
+all the newest features of the standard @code{pathlib} can be used also on
+older Python versions.")
+    (license license:expat)))
+
+(define-public python-importlib-metadata
+  (package
+    (name "python-importlib-metadata")
+    (version "0.18")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "importlib_metadata" version))
+       (sha256
+        (base32
+         "1nqj6vj2z4byi8flzf2lbldhqgicsz9mkpv4k69kjd8p8qxy4vnb"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-configparser" ,python-configparser)
+       ("python-contextlib2" ,python-contextlib2)
+       ("python-docutils" ,python-docutils)
+       ("python-pathlib2" ,python-pathlib2)
+       ("python-rst.linker" ,python-rst.linker)
+       ("python-zipp" ,python-zipp)))
+    (native-inputs
+     `(("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-sphinx" ,python-sphinx)))
+    (home-page "https://importlib-metadata.readthedocs.io/")
+    (synopsis "Read metadata from Python packages")
+    (description
+     "@code{importlib_metadata} is a library which provides an API for
+accessing an installed Python package's metadata, such as its entry points or
+its top-level name.  This functionality intends to replace most uses of
+@code{pkg_resources} entry point API and metadata API.  Along with
+@code{importlib.resources} in Python 3.7 and newer, this can eliminate the
+need to use the older and less efficient @code{pkg_resources} package.")
+    (license license:asl2.0)))
+
+(define-public python-jaraco-packaging
+  (package
+    (name "python-jaraco-packaging")
+    (version "6.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "jaraco.packaging" version))
+        (sha256
+          (base32
+            "0zimrnkh33b9g8ffw11mjh6kvs54cy5gcjw1h5cl1r7dc833dmkm"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-checkdocs" ,python-pytest-checkdocs)
+       ("python-pytest-flake8" ,python-pytest-flake8)
+       ("python-rst.linker" ,python-rst.linker)
+       ("python-setuptools" ,python-setuptools)
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-six" ,python-six)
+       ("python-sphinx" ,python-sphinx)))
+    (home-page "https://github.com/jaraco/jaraco.packaging")
+    (synopsis "Tools to supplement packaging Python releases")
+    (description
+     "This package provides various tools to supplement packaging Python
+releases.")
+    (license license:expat)))
+
 (define-public python-pathpy
   (package
     (name "python-pathpy")
-    (version "11.0.1")
+    (version "11.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "path.py" version))
        (sha256
-        (base32 "07x15v8c7ry9bvycw294c9yq6ky9v2b0dalvgi6rn38ilh69vsz7"))))
-    ;; (outputs '("out" "doc"))
+        (base32 "1jxkf91syzxlpiwgm83fjfz1m5xh3jrvv4iyl5wjsnkk599pls5n"))))
+    (outputs '("out" "doc"))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-appdirs" ,python-appdirs)))
@@ -4882,26 +4968,31 @@ them as the version argument or in a SCM managed file.")
        ("python-sphinx" ,python-sphinx)
        ("python-rst.linker" ,python-rst.linker)
        ("python-pytest" ,python-pytest)
-       ("python-pytest-runner" ,python-pytest-runner)))
+       ("python-pytest-runner" ,python-pytest-runner)
+       ("python-jaraco-packaging" ,python-jaraco-packaging)))
     (arguments
-     ;; FIXME: Documentation and tests require "jaraco.packaging".
-     `(#:tests? #f))
-    ;;    #:phases
-    ;;    (modify-phases %standard-phases
-    ;;      (add-after 'build 'build-doc
-    ;;        (lambda _
-    ;;          (setenv "LANG" "en_US.UTF-8")
-    ;;          (zero? (system* "python" "setup.py" "build_sphinx"))))
-    ;;      (add-after 'install 'install-doc
-    ;;        (lambda* (#:key outputs #:allow-other-keys)
-    ;;          (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
-    ;;                 (doc (string-append data "/doc/" ,name "-" ,version))
-    ;;                 (html (string-append doc "/html")))
-    ;;            (mkdir-p html)
-    ;;            (for-each (lambda (file)
-    ;;                        (copy-file file (string-append doc "/" file)))
-    ;;                      '("README.rst" "CHANGES.rst"))
-    ;;            (copy-recursively "build/sphinx/html" html)))))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'build-doc
+           (lambda _
+             (setenv "LANG" "en_US.UTF-8")
+             (invoke "python" "setup.py" "build_sphinx")))
+         (add-after 'install 'install-doc
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
+                    (doc (string-append data "/doc/" ,name "-" ,version))
+                    (html (string-append doc "/html")))
+               (mkdir-p html)
+               (for-each (lambda (file)
+                           (copy-file file (string-append doc "/" file)))
+                         '("README.rst" "CHANGES.rst"))
+               (copy-recursively "build/sphinx/html" html)
+               #t)))
+         (replace 'check
+           (lambda _
+             ;; The import time test aborts if an import takes longer than
+             ;; 100ms.  It may very well take a little longer than that.
+             (invoke "pytest" "-v" "-k" "not test_import_time"))))))
     (home-page "https://github.com/jaraco/path.py")
     (synopsis "Python module wrapper for built-in os.path")
     (description
@@ -7898,6 +7989,27 @@ be set via config files and/or environment variables.")
 @code{ArgumentParser} object.")
     (license license:asl2.0)))
 
+(define-public python-contextlib2
+  (package
+    (name "python-contextlib2")
+    (version "0.5.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "contextlib2" version))
+       (sha256
+        (base32
+         "0j6ad6lwwyc9kv71skj098v5l7x5biyj2hs4lc5x1kcixqcr97sh"))))
+    (build-system python-build-system)
+    (home-page "http://contextlib2.readthedocs.org/")
+    (synopsis "Tools for decorators and context managers")
+    (description "This module is primarily a backport of the Python
+3.2 contextlib to earlier Python versions.  Like contextlib, it
+provides utilities for common tasks involving decorators and context
+managers.  It also contains additional features that are not part of
+the standard library.")
+    (license license:psfl)))
+
 (define-public python2-contextlib2
   (package
     (name "python2-contextlib2")
@@ -9717,16 +9829,16 @@ format.")
 (define-public python-twisted
   (package
     (name "python-twisted")
-    (version "19.2.0")
+    (version "19.2.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Twisted" version ".tar.bz2"))
               (sha256
                (base32
-                "1gmb8d57s13d8znvqnxi47vqzqz141z443dbxg9wjkp8ia9f220p"))))
+                "0liymyd4pzphizjlpwkncxjpm9akyr3lkfkm77yfg6wasv108b7s"))))
     (build-system python-build-system)
     (arguments
-     '(#:tests? #f)) ; FIXME: Some tests are failing.
+     '(#:tests? #f))                    ; FIXME: some tests fail
     (propagated-inputs
      `(("python-zope-interface" ,python-zope-interface)
        ("python-pyhamcrest" ,python-pyhamcrest)
@@ -10349,14 +10461,14 @@ etc.")
 (define-public python-stem
   (package
     (name "python-stem")
-    (version "1.7.0")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "stem" version))
        (sha256
         (base32
-         "1awiglfiajnx2hva9aqpj3fmdvdb4qg7cwnlfyih827m68y3cq8v"))))
+         "18lc95pmc7i089nlsb06dsxyjl5wbhxfqgdxbjcia35ndh8z7sn9"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -13423,6 +13535,37 @@ belong to tagged versions.")
 (define-public python2-setuptools-scm-git-archive
   (package-with-python2 python-setuptools-scm-git-archive))
 
+(define-public python-setuptools-git
+  (package
+    (name "python-setuptools-git")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "setuptools-git" version))
+       (sha256
+        (base32
+         "0i84qjwp5m0l9qagdjww2frdh63r37km1c48mrvbmaqsl1ni6r7z"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; This is needed for tests.
+         (add-after 'unpack 'configure-git
+           (lambda _
+             (setenv "HOME" "/tmp")
+             (invoke "git" "config" "--global" "user.email" "guix")
+             (invoke "git" "config" "--global" "user.name" "guix")
+             #t)))))
+    (native-inputs
+     `(("git" ,git-minimal)))
+    (home-page "https://github.com/msabramo/setuptools-git")
+    (synopsis "Setuptools revision control system plugin for Git")
+    (description
+     "This package provides a plugin for Setuptools for revision control with
+Git.")
+    (license license:bsd-3)))
+
 (define-public python-pyclipper
   (package
     (name "python-pyclipper")
@@ -14026,6 +14169,51 @@ source bytes using the UTF-8 encoding and then rewrites Python 3.6 style
 @code{f} strings.")
     (license license:expat)))
 
+(define-public python-typed-ast
+  (package
+    (name "python-typed-ast")
+    (version "1.3.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "typed-ast" version))
+       (sha256
+        (base32
+         "1m7pr6qpana3cvqwiw7mlvrgvmw27ch5mx1592572xhlki8g85ak"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build python-build-system)
+                  (ice-9 ftw)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (let ((cwd (getcwd)))
+               (setenv "PYTHONPATH"
+                       (string-append cwd "/build/"
+                                      (find (cut string-prefix? "lib" <>)
+                                            (scandir (string-append cwd "/build")))
+                                      ":"
+                                      (getenv "PYTHONPATH"))))
+             (invoke "pytest")
+             #t)))))
+    (native-inputs `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/python/typed_ast")
+    (synopsis "Fork of Python @code{ast} modules with type comment support")
+    (description "This package provides a parser similar to the standard
+@code{ast} library.  Unlike @code{ast}, the parsers in @code{typed_ast}
+include PEP 484 type comments and are independent of the version of Python
+under which they are run.  The @code{typed_ast} parsers produce the standard
+Python AST (plus type comments), and are both fast and correct, as they are
+based on the CPython 2.7 and 3.7 parsers.")
+    ;; See the file "LICENSE" for the details.
+    (license (list license:psfl
+                   license:asl2.0
+                   license:expat))))    ;ast27/Parser/spark.py
+
 (define-public python-typing
   (package
     (name "python-typing")
@@ -15113,14 +15301,13 @@ append on old values.  Partd excels at shuffling operations.")
 (define-public python-dask
   (package
     (name "python-dask")
-    (version "1.2.0")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "dask" version))
        (sha256
-        (base32
-         "1y0dqcp72ixwblgway0jpvfirlxfcmwrjiivdq96firj1hw127sd"))))
+        (base32 "0b29gvf96gmp20wicly3v3mhyc93zbm3mdv935fka6x0wax7cy2y"))))
     (build-system python-build-system)
     ;; A single test out of 5000+ fails.  This test is marked as xfail when
     ;; pytest-xdist is used.
@@ -15331,16 +15518,15 @@ with the HTTP/2-based RPC framework gRPC.")
 (define-public python-astunparse
   (package
     (name "python-astunparse")
-    (version "1.6.1")
+    (version "1.6.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "astunparse" version))
        (sha256
-        (base32
-         "1jhidwyrqn17avqh9xnnm3wd7q7aahaq009cba67g86y6gxicyyj"))))
+        (base32 "0rzbc44xcvzjhhiy7wac96mgal5mcjz1mfq8rmvgswskf4kf9cys"))))
     (build-system python-build-system)
-    (arguments '(#:tests? #f)) ; there are none
+    (arguments '(#:tests? #f))          ; there are none
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-wheel" ,python-wheel)))
@@ -15568,3 +15754,40 @@ by Igor Pavlov.")
 
 (define-public python2-pylzma
   (package-with-python2 python-pylzma))
+
+(define-public python-bsddb3
+  (package
+    (name "python-bsddb3")
+    (version "6.2.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "bsddb3" version))
+       (sha256
+        (base32
+         "019db2y6bfmiqbrgg9x9f6h72qjmqh05czdn2v5sy9bl0gs23mj2"))))
+    (build-system python-build-system)
+    (inputs
+     `(("bdb" ,bdb)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'configure-locations
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "BERKELEYDB_DIR" (assoc-ref inputs "bdb"))
+             (setenv "YES_I_HAVE_THE_RIGHT_TO_USE_THIS_BERKELEY_DB_VERSION" "1")
+             #t))
+         (replace 'check
+           (lambda _
+             (invoke "python3" "test3.py" "-v"))))))
+    (home-page "https://www.jcea.es/programacion/pybsddb.htm")
+    (synopsis "Python bindings for Oracle Berkeley DB")
+    (description
+     "This module provides a nearly complete wrapping of the Oracle/Sleepycat
+C API for the Database Environment, Database, Cursor, Log Cursor, Sequence and
+Transaction objects, and each of these is exposed as a Python type in the
+bsddb3.db module.  The database objects can use various access methods: btree,
+hash, recno, and queue.  Complete support of Berkeley DB distributed
+transactions.  Complete support for Berkeley DB Replication Manager.
+Complete support for Berkeley DB Base Replication.  Support for RPC.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/sagemath.scm b/gnu/packages/sagemath.scm
index 63d1281668..43da5c636a 100644
--- a/gnu/packages/sagemath.scm
+++ b/gnu/packages/sagemath.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +25,7 @@
   #:use-module (guix git-download)
   #:use-module (guix packages)
   #:use-module (guix utils)
+  #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bdw-gc)
@@ -308,8 +310,19 @@ on numerical types, while GiNaC depends on CLN for this purpose.")
              (invoke "make" "libzn_poly.so")))
          (add-after 'install 'install-so
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
-               (install-file "libzn_poly.so" lib)))))))
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib"))
+                    (soname (string-append "libzn_poly-" ,version ".so"))
+                    (target (string-append lib "/" soname)))
+               (install-file "libzn_poly.a" lib)
+               (install-file soname lib)
+               (symlink target
+                        (string-append lib "/libzn_poly.so"))
+               (symlink target
+                        (string-append lib "/libzn_poly-"
+                                       ,(version-major+minor version)
+                                       ".so")))
+             #t)))))
     (synopsis "Arithmetic for polynomials over Z/NZ")
     (description "zn_poly implements the arithmetic of polynomials the
 coefficients of which are modular integers.")
@@ -353,3 +366,109 @@ Boolean variables.  As a unique approach, binary decision diagrams are
 used as internal storage type for polynomial structures.")
     (license license:gpl2+)
     (home-page "https://gitlab.com/sagemath/zn_poly")))
+
+(define-public lcalc
+  (package
+    (name "lcalc")
+    (version "1.23")
+    ;; The original home page of the project has disappeared, as well as
+    ;; code hosted by the original author on Google Code. The latter has
+    ;; been copied to gitlab.com/sagemath and purportedly contains patches
+    ;; for a never released version 1.3, that supposedly follows 1.23.
+    ;; We use the tarball as well as the patches hosted inside the sage
+    ;; package system distributed with the sage tarball.
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://ftp.fu-berlin.de/unix/misc/sage/spkg/"
+                           "upstream/lcalc/lcalc-1.23.tar.bz2"))
+       (sha256
+        (base32
+         "1c6dsdshgxhqppjxvxhp8yhpxaqvnz3d1mlh26r571gkq8z2bm43"))
+       (patches (search-patches "lcalc-lcommon-h.patch"
+                                "lcalc-default-parameters-1.patch"
+                                "lcalc-default-parameters-2.patch"
+                                "lcalc-using-namespace-std.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ;no tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'prepare-build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (chdir "src")
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "Makefile"
+                 (("^INSTALL_DIR= /usr/local")
+                  (string-append "INSTALL_DIR=" out))
+                 ;; Sage renames the include directory, so we do it also.
+                 (("include/Lfunction")
+                  "include/libLfunction")
+                 ;; Add --std=c++11 to be compatible with the "auto" keyword
+                 ;; introduced by lcalc-using-namespace-std.patch.
+                 (("^#EXTRA= -pg")
+                  "EXTRA=--std=c++11")))
+             #t))
+         (add-before 'install 'make-output-dirs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lib (string-append out "/lib"))
+                    (include (string-append out "/include")))
+               (mkdir-p bin)
+               (mkdir-p lib)
+               (mkdir-p include))
+             #t)))))
+    ;; FIXME:
+    ;; We need to add pari-gp and probably pari related patches from the
+    ;; sage project, as well as uncomment the line setting PARI_DEFINE in
+    ;; the Makefile to get the full functionality of this package.
+    ;; For the time being, we hope that sage can be compiled without.
+    (synopsis "C++ library for L-functions")
+    (description "Lcalc computes L-functions, in particular the Riemann
+zeta function and its twists by quadratic characters.")
+    (license license:gpl2+)
+    (home-page "https://gitlab.com/sagemath/sage")))
+
+(define-public ratpoints
+  (package
+    (name "ratpoints")
+    (version "2.1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://www.mathe2.uni-bayreuth.de/stoll/programs/"
+                    "ratpoints-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0zhad84sfds7izyksbqjmwpfw4rvyqk63yzdjd3ysd32zss5bgf4"))
+              (patches
+               ;; Taken from
+               ;; <https://git.sagemath.org/sage.git/plain/build/pkgs/ratpoints/patches/>
+               (search-patches "ratpoints-sturm_and_rp_private.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (list (string-append "INSTALL_DIR=" (assoc-ref %outputs "out"))
+             "CCFLAGS=-fPIC")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (add-before 'install 'create-install-directories
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (mkdir-p out)
+               (with-directory-excursion out
+                 (for-each (lambda (d) (mkdir-p d))
+                           '("bin" "include" "lib"))))
+             #t)))))
+    (inputs
+     `(("gmp" ,gmp)))
+    (home-page "http://www.mathe2.uni-bayreuth.de/stoll/programs/")
+    (synopsis "Find rational points on hyperelliptic curves")
+    (description "Ratpoints tries to find all rational points within
+a given height bound on a hyperelliptic curve in a very efficient way,
+by using an optimized quadratic sieve algorithm.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/sawfish.scm b/gnu/packages/sawfish.scm
index 1ac72f2baa..98b0cc7044 100644
--- a/gnu/packages/sawfish.scm
+++ b/gnu/packages/sawfish.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Benjamin Slade <slade@jnanam.net>
+;;; Copyright © 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -77,14 +79,14 @@ implementing both small and large scale systems.")
 (define-public rep-gtk
   (package
     (name "rep-gtk")
-    (version "0.90.8.2")
+    (version "0.90.8.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://download.tuxfamily.org/librep/"
+              (uri (string-append "https://download.tuxfamily.org/librep/"
                                   name "/" name "_" version ".tar.xz"))
               (sha256
                (base32
-                "0qslm2isyv22hffdpw0nh7xk8jw8cj3h5y7d40c9h5r833w7j6sz"))
+                "0hgkkywm8zczir3lqr727bn7ybgg71x9cwj1av8fykkr8pdpard9"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -94,14 +96,26 @@ implementing both small and large scale systems.")
                      "installdir=$(libdir)/rep"))
                   #t))))
     (build-system gnu-build-system)
-    (arguments '(#:tests? #f)) ; no tests
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'bootstrap 'remove-autogen
+           (lambda _
+             ;; Remove autogen.sh so that the bootstrap phase can run
+             ;; autoreconf.
+             (delete-file "autogen.sh")
+             #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
     (propagated-inputs
      ;; required by rep-gtk.pc.
      `(("gtk+"   ,gtk+-2)
        ("librep" ,librep)))
-    (home-page "http://sawfish.wikia.com/wiki/Rep-GTK")
+    (home-page "https://sawfish.fandom.com/wiki/Rep-GTK")
     (synopsis "GTK+ binding for librep")
     (description
      "Rep-GTK is a GTK+ (and GLib, GDK) binding to the librep, and one of the
@@ -111,14 +125,14 @@ backend of Sawfish.")
 (define-public sawfish
   (package
     (name "sawfish")
-    (version "1.11")
+    (version "1.12.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://download.tuxfamily.org/sawfish/"
+              (uri (string-append "https://download.tuxfamily.org/sawfish/"
                                   name "_" version ".tar.xz"))
               (sha256
                (base32
-                "0wp4m0p836a0rysbcdqb6z5hxlxqj3rgdbks3bs44rlssx0mcvyg"))
+                "1z7awzgw8d15aw17kpbj460pcxq8l2rhkaxk47w7yg9qrmg0xja4"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -172,7 +186,7 @@ backend of Sawfish.")
        ("libxrandr"   ,libxrandr)
        ("libxtst"     ,libxtst)
        ("rep-gtk"     ,rep-gtk)))
-    (home-page "http://sawfish.wikia.com/wiki/Main_Page")
+    (home-page "https://sawfish.tuxfamily.org")
     (synopsis "Configurable window manager")
     (description
      "Sawfish is an extensible window manager using a Lisp-based scripting
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index 51ed0317bc..faff25ddc1 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -252,16 +252,14 @@ over the Internet in an HTTP and CDN friendly way;
 (define-public rclone
   (package
     (name "rclone")
-    (version "1.47.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url "https://github.com/ncw/rclone.git")
-                    (commit (string-append "v" version))))
-              (file-name (git-file-name name version))
-              (sha256
-               (base32
-                "1nxwjr9jly6wh1ixr6a7zhlg4b3298v940040fsm0n3lcljd37zx"))))
+    (version "1.48.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/ncw/rclone/releases/download/v"
+                           version "/rclone-v" version ".tar.gz"))
+       (sha256
+        (base32 "1r03rlsk0qpya1fl8xfhj5inccjywf2cqgkd8r6wfhf3w2qd1zlc"))))
     ;; FIXME: Rclone bundles some libraries Guix already provides.  Need to
     ;; un-bundle them.
     (build-system go-build-system)
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index 69313b9bb6..21ca185066 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,8 +26,10 @@
 (define-module (gnu packages tcl)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system go)
   #:use-module (guix build-system perl)
   #:use-module (gnu packages)
   #:use-module (gnu packages image)
@@ -35,7 +38,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
-  #:use-module (guix licenses))
+  #:use-module ((guix licenses) #:prefix license:))
 
 (define-public tcl
   (package
@@ -81,7 +84,7 @@
     (home-page "http://www.tcl.tk/")
     (synopsis "The Tcl scripting language")
     (description "The Tcl (Tool Command Language) scripting language.")
-    (license tcl/tk)))
+    (license license:tcl/tk)))
 
 
 (define-public expect
@@ -130,7 +133,7 @@ telnet, ftp, passwd, fsck, rlogin, tip, etc.  Expect really makes this
 stuff trivial.  Expect is also useful for testing these same
 applications.  And by adding Tk, you can wrap interactive applications in
 X11 GUIs.")
-    (license public-domain)))            ; as written in `license.terms'
+    (license license:public-domain))) ; as written in `license.terms'
 
 (define-public tk
   (package
@@ -230,7 +233,7 @@ interfaces (GUIs) in the Tcl language.")
     ;; those of the orignal Tix4.1.3 or Tk8.4.* sources. See the files
     ;; pTk/license.terms, pTk/license.html_lib, and pTk/Tix.license for
     ;; details of this license."
-    (license perl-license)))
+    (license license:perl-license)))
 
 (define-public tcllib
   (package
@@ -344,7 +347,7 @@ modules for Tk, all written in high-level Tcl.  Examples of provided widgets:
 application may register callback scripts for certain document features, and
 when the parser encounters those features while parsing the document the
 callback is evaluated.")
-    (license (non-copyleft
+    (license (license:non-copyleft
               "file://LICENCE"
               "See LICENCE in the distribution."))))
 
@@ -378,4 +381,31 @@ callback is evaluated.")
 application development.  TclX provides additional interfaces to the operating
 system, and adds many new programming constructs, text manipulation tools, and
 debugging tools.")
-    (license tcl/tk)))
+    (license license:tcl/tk)))
+
+(define-public go-github.com-nsf-gothic
+  (let ((commit "97dfcc195b9de36c911a69a6ec2b5b2659c05652")
+        (revision "0"))
+    (package
+      (name "go-github.com-nsf-gothic")
+      (version (git-version "0.0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                       (url "https://github.com/nsf/gothic")
+                       (commit commit)))
+                (sha256
+                 (base32
+                  "1lrhbml6r4sh22rrn3m9bck70pv0g0c1diprg7cil90x0jidxczr"))
+                (file-name (git-file-name name version))))
+    (build-system go-build-system)
+    (arguments
+     `(#:import-path "github.com/nsf/gothic"))
+    (propagated-inputs
+     `(("tk" ,tk)
+       ("tcl" ,tcl)))
+    (home-page "https://github.com/nsf/gothic")
+    (synopsis "Tcl/Tk Go bindings")
+    (description "Gothic contains Go bindings for Tcl/Tk.  The package contains
+only one type and one function that can be used to create a Tk interpreter.")
+    (license license:expat))))
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 731bbc5d16..b35486ba59 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2014 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.org>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2019 Andreas Enge <andreas@enge.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,15 +37,19 @@
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
+  #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages regex)
   #:use-module (gnu packages ruby)
@@ -388,3 +393,47 @@ projects.  The EditorConfig project maintains a file format and plugins for
 various text editors which allow this file format to be read and used by those
 editors.")
     (license license:bsd-2)))
+
+(define-public texmacs
+  (package
+    (name "texmacs")
+    (version "1.99.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.texmacs.org/Download/ftp/tmftp/"
+                           "source/TeXmacs-" version "-src.tar.gz"))
+       (sha256
+        (base32
+         "0i95sf9y8qpgxd8f39cprbp3s200nm9lml0xdpyn46n838acvw19"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "3rdparty")
+           #t))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("freetype" ,freetype)
+       ("guile" ,guile-1.8)
+       ("perl" ,perl)
+       ("python" ,python-wrapper)
+       ("qt" ,qt-4)))
+    (arguments
+     `(#:tests? #f ;no check target
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'gzip-flags
+           (lambda _
+             (substitute* "Makefile.in"
+               (("^GZIP = gzip -f") "GZIP = gzip -f -n")))))))
+    (synopsis "Editing platform with special features for scientists")
+    (description
+     "GNU TeXmacs is a text editing platform which is specialized for
+scientists.  It is ideal for editing structured documents with different
+types of content.  It has robust support for mathematical formulas and plots.
+ It can also act as an interface to external mathematical programs such as R
+and Octave.  TeXmacs is completely extensible via Guile.")
+    (license license:gpl3+)
+    (home-page "https://www.texmacs.org/tmweb/home/welcome.en.html")))
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 9859c55f98..2b6d9f5b7e 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1446,7 +1446,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2019.05.20")
+    (version "2019.06.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rg3/youtube-dl/releases/"
@@ -1454,7 +1454,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "18xwdfvpkqrnj0kb8xj8hgwhgiqpv7x7x7zzr4x3vynb9grcv9m8"))))
+                "03a729198zzhixbn7xixi9bprmk3qqh5dsyh3dqhji6lmlijx1w5"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 303171e61d..a35f124f46 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -399,46 +399,48 @@ manage system or application containers.")
 (define-public libvirt
   (package
     (name "libvirt")
-    (version "4.10.0")
+    (version "5.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://libvirt.org/sources/libvirt-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0v17zzyyb25nn9l18v5244myg7590dp6ppwgi8xysipifc0q77bz"))))
+                "0ywf8m9yz2hxnic7fylzlmgy4m353r4vv5zsvp89zq5yh4h81yhw"))))
     (build-system gnu-build-system)
     (arguments
-     `(;; FAIL: virshtest
-       ;; FAIL: virfirewalltest
-       ;; FAIL: virkmodtest
-       ;; FAIL: virnetsockettest
-       ;; FAIL: networkxml2firewalltest
-       ;; FAIL: nwfilterebiptablestest
-       ;; FAIL: nwfilterxml2firewalltest
-       ;; Time-out while running commandtest.
-       #:tests? #f
-       #:configure-flags
+     `(#:configure-flags
        (list "--with-polkit"
+             (string-append "--docdir=" (assoc-ref %outputs "out") "/share/doc/"
+                            ,name "-" ,version)
              "--sysconfdir=/etc"
              "--localstatedir=/var")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-tests
+         (add-before 'configure 'fix-BOURNE_SHELL-definition
+           ;; BOURNE_SHELL is hard-#defined to ‘/bin/sh’, causing test failures.
            (lambda _
-             (substitute* '("tests/commandtest.c"
-                            "gnulib/tests/test-posix_spawn1.c"
-                            "gnulib/tests/test-posix_spawn2.c")
+             (substitute* "config.h.in"
                (("/bin/sh") (which "sh")))
              #t))
+         (add-before 'configure 'disable-broken-tests
+           (lambda _
+             (let ((tests (list "commandtest"      ; hangs idly
+                                "virnetsockettest" ; tries to network
+                                "virshtest")))     ; fails
+               (substitute* "tests/Makefile.in"
+                 (((format #f "(~a)\\$\\(EXEEXT\\)" (string-join tests "|")))
+                  ""))
+               #t)))
          (replace 'install
            ;; Since the sysconfdir and localstatedir should be /etc and /var
            ;; at runtime, we must prevent writing to them at installation
            ;; time.
-           (lambda _
-             (invoke "make" "install"
-                            "sysconfdir=/tmp/etc"
-                            "localstatedir=/tmp/var")))
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "install"
+                    "sysconfdir=/tmp/etc"
+                    "localstatedir=/tmp/var"
+                    make-flags)))
          (add-after 'install 'wrap-libvirtd
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -458,7 +460,7 @@ manage system or application containers.")
        ("libpcap" ,libpcap)
        ("libnl" ,libnl)
        ("libuuid" ,util-linux)
-       ("lvm2" ,lvm2) ; for libdevmapper
+       ("lvm2" ,lvm2)                   ; for libdevmapper
        ("curl" ,curl)
        ("openssl" ,openssl)
        ("cyrus-sasl" ,cyrus-sasl)
@@ -534,13 +536,13 @@ three libraries:
 (define-public python-libvirt
   (package
     (name "python-libvirt")
-    (version "4.10.0")
+    (version "5.3.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "libvirt-python" version))
               (sha256
                (base32
-                "11fipj9naihgc9afc8bz5hi05xa1shp4qcy170sa18p3sl4zljb9"))))
+                "1zrhkz68ka4f08wwm36y3zzwfn1r65h4nw1nm9qgg8jmrfazj4sj"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 3b0cbae7a7..6a820addca 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -3112,7 +3112,7 @@ select or poll.")
 (define-public perl-libwww
   (package
     (name "perl-libwww")
-    (version "6.37")
+    (version "6.39")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -3120,7 +3120,7 @@ select or poll.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "04a24cx9gs070rvlwf5kanz03y7nnq9k2nmpr01plnm059iprvf6"))))
+               "1mblfwz3g7vmyykmb0mcbmmad77rwx55fwaca9ymv9wajd3pg3cs"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-fatal" ,perl-test-fatal)
@@ -3662,14 +3662,14 @@ applications.")
 (define-public perl-uri
   (package
     (name "perl-uri")
-    (version "1.73")
+    (version "1.76")
     (source (origin
              (method url-fetch)
-             (uri (string-append "mirror://cpan/authors/id/E/ET/ETHER/"
+             (uri (string-append "mirror://cpan/authors/id/O/OA/OALDERS/"
                                  "URI-" version ".tar.gz"))
              (sha256
               (base32
-               "04z4xwiryrbxxi48bwbkgq9q9pwfgqry3wp0ramcrwv3dx5ap9yc"))))
+               "0gj1aj18k43kmzc3y1zhj5giinf8rksacf757r475xfna0fqxjdj"))))
     (build-system perl-build-system)
     (native-inputs
      ;; For tests.
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index 63916d1cc3..72f0e1fd55 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -310,7 +310,7 @@ integrate Windows applications into your desktop.")
 (define-public wine-staging-patchset-data
   (package
     (name "wine-staging-patchset-data")
-    (version "4.10")
+    (version "4.11")
     (source
      (origin
        (method git-fetch)
@@ -320,7 +320,7 @@ integrate Windows applications into your desktop.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0kl5718c4xk8d1va1jb5jaa2n0vw3l0hi6bpc7siaww1fp64hy98"))))
+         "0h8qldqr9w1kwn48qgg5m1cs2xqkv8xxg2c66cvfka91hy886jcf"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("bash" ,bash)
@@ -366,7 +366,7 @@ integrate Windows applications into your desktop.")
               (file-name (string-append name "-" version ".tar.xz"))
               (sha256
                (base32
-                "041d3km85iqbshspy9av1fxjwq18xldrb18j04xl2fmpv1hq3pas"))))
+                "1rmyfwlynzs2niz7l2lwjs2axm6in6gb43ldbzyzsflxsmk5fl9f"))))
     (inputs `(("autoconf" ,autoconf) ; for autoreconf
               ("faudio" ,faudio)
               ("ffmpeg" ,ffmpeg)
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index d59041f639..a9b96529cf 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -519,6 +519,7 @@ move windows, switch between desktops, etc.).")
         (git-reference
          (url "https://github.com/resurrecting-open-source-projects/scrot.git")
          (commit version)))
+       (file-name (git-file-name name version))
        (sha256
         (base32 "1dg0pnmk09p7zlbyxv7d40vf54amrv73y976ds5p7096x6lmlndy"))))
     (build-system gnu-build-system)
@@ -1178,7 +1179,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
 (define-public rofi
   (package
     (name "rofi")
-    (version "1.5.2")
+    (version "1.5.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/DaveDavenport/rofi/"
@@ -1186,7 +1187,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
                                   version "/rofi-" version ".tar.xz"))
               (sha256
                (base32
-                "17faa0rj8vqidrijwx9jrq0c29003n8v3izvc66yssfljgb8kcpj"))))
+                "0y78ya2va2lg3ww17n11y9awn8lhcp1px2d8gxaimxfqlxczs8la"))))
     (build-system gnu-build-system)
     (inputs
      `(("pango" ,pango)
@@ -1206,7 +1207,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
        ("glib:bin" ,glib "bin")
        ("pkg-config" ,pkg-config)))
     (arguments
-     `(#:parallel-tests? #f ; May fail in some circumstances.
+     `(#:parallel-tests? #f             ; fails in some circumstances
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'adjust-tests
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index c518508360..2b4feb1c2d 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -188,7 +188,7 @@ to share commonly used Xfce widgets among the Xfce applications.")
 (define-public exo
   (package
     (name "exo")
-    (version "0.12.5")
+    (version "0.12.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://archive.xfce.org/src/xfce/"
@@ -196,7 +196,7 @@ to share commonly used Xfce widgets among the Xfce applications.")
                                   "exo-" version ".tar.bz2"))
               (sha256
                (base32
-                "1s23prcgall6r5dpn0qlrdq3zj13p95a5s0l2vflgrka8gb39x78"))))
+                "00qh8ihrf09jvd26kilybihkgvv6rvi0l1bvlldxc99jb7ygy5ql"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index ee345742a5..bd84c1bf3e 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -1780,17 +1780,14 @@ features and to query screensaver info on specific windows.")
 (define-public sessreg
   (package
     (name "sessreg")
-    (version "1.1.1")
+    (version "1.1.2")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-               "mirror://xorg/individual/app/sessreg-"
-               version
-               ".tar.bz2"))
-        (sha256
-          (base32
-            "1qd66mg2bnppqz4xgdjzif2488zl82vx2c26ld3nb8pnyginm9vq"))))
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://xorg/individual/app/sessreg-" version ".tar.bz2"))
+       (sha256
+        (base32 "0crczl25zynkrslmm8sjaxszhrh4i33m7h5fg4wfdb3k8aarxjyz"))))
     (build-system gnu-build-system)
     (inputs
       `(("xorgproto" ,xorgproto)))
@@ -2076,14 +2073,14 @@ legacy X clients.")
 (define-public xcalc
   (package
     (name "xcalc")
-    (version "1.0.7")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://xorg/individual/app/"
                            "xcalc-" version ".tar.gz"))
        (sha256
-        (base32 "1xgih1iq9498m7vk22qrdsck1rb905sn395azjn4a6pmhfai401b"))))
+        (base32 "0c768lh0nh28ram9ldldhaf51024fngc589v4pjmf3lxmzcihr58"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 73acb3b17f..13cffd9feb 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -895,11 +895,17 @@ and @command{wicd-curses} user interfaces."
   (vpn-plugins network-manager-vpn-plugins        ;list of <package>
                (default '())))
 
-(define %network-manager-activation
-  ;; Activation gexp for NetworkManager.
-  #~(begin
-      (use-modules (guix build utils))
-      (mkdir-p "/etc/NetworkManager/system-connections")))
+(define network-manager-activation
+  ;; Activation gexp for NetworkManager
+  (match-lambda
+    (($ <network-manager-configuration> network-manager dns vpn-plugins)
+     #~(begin
+         (use-modules (guix build utils))
+         (mkdir-p "/etc/NetworkManager/system-connections")
+         #$@(if (equal? dns "dnsmasq")
+                ;; create directory to store dnsmasq lease file
+                '((mkdir-p "/var/lib/misc"))
+                '())))))
 
 (define (vpn-plugin-directory plugins)
   "Return a directory containing PLUGINS, the NM VPN plugins."
@@ -949,7 +955,7 @@ and @command{wicd-curses} user interfaces."
             (service-extension dbus-root-service-type config->package)
             (service-extension polkit-service-type config->package)
             (service-extension activation-service-type
-                               (const %network-manager-activation))
+                               network-manager-activation)
             (service-extension session-environment-service-type
                                network-manager-environment)
             ;; Add network-manager to the system profile.
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index 656afd1ddb..c90b87c023 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -273,7 +273,10 @@ FILE-SYSTEMS."
   (append-map (compose file-system-type-modules file-system-type)
               file-systems))
 
-(define* (default-initrd-modules #:optional (system (%current-system)))
+(define* (default-initrd-modules
+           #:optional
+           (system (or (%current-target-system)
+                       (%current-system))))
   "Return the list of modules included in the initrd by default."
   (define virtio-modules
     ;; Modules for Linux para-virtualized devices, for use in QEMU guests.
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 247f237622..a891711844 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -223,8 +223,8 @@ info --version")
                                   (operating-system-user-accounts os))))
               (marionette-eval
                `(begin
-                  (use-modules (srfi srfi-1) (ice-9 ftw)
-                               (ice-9 match))
+                  (use-modules (guix build utils) (srfi srfi-1)
+                               (ice-9 ftw) (ice-9 match))
 
                   (every (match-lambda
                            ((user home)
diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 7b5ee18505..9f6baa1a48 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -79,6 +79,7 @@
     (services (cons (service marionette-service-type
                              (marionette-configuration
                               (imported-modules '((gnu services herd)
+                                                  (guix build utils)
                                                   (guix combinators)))))
                     %base-services))))
 
diff --git a/guix/build/compile.scm b/guix/build/compile.scm
index 794f12379c..c8fe273f7e 100644
--- a/guix/build/compile.scm
+++ b/guix/build/compile.scm
@@ -63,7 +63,8 @@
   ;; strings" due to the fact that we use 'G_' instead of '_'.  We'll need
   ;; help from Guile to solve this.
   '(unsupported-warning unbound-variable arity-mismatch
-    macro-use-before-definition))                 ;new in 2.2
+    macro-use-before-definition                   ;new in 2.2
+    shadowed-toplevel))                           ;new in 2.2.5
 
 (define (optimization-options file)
   "Return the default set of optimizations options for FILE."
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 5c2eb3c14d..eb045cbd1c 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -146,6 +146,7 @@
             window-size-y-pixels
             terminal-window-size
             terminal-columns
+            terminal-rows
 
             utmpx?
             utmpx-login-type
@@ -1871,23 +1872,17 @@ corresponds to the TIOCGWINSZ ioctl."
                (list (strerror err))
                (list err)))))
 
-(define* (terminal-columns #:optional (port (current-output-port)))
-  "Return the best approximation of the number of columns of the terminal at
-PORT, trying to guess a reasonable value if all else fails.  The result is
-always a positive integer."
-  (define (fall-back)
-    (match (and=> (getenv "COLUMNS") string->number)
-      (#f 80)
-      ((? number? columns)
-       (if (> columns 0) columns 80))))
-
+(define (terminal-dimension window-dimension port fall-back)
+  "Return the terminal dimension defined by WINDOW-DIMENSION, one of
+'window-size-columns' or 'window-size-rows' for PORT.  If PORT does not
+correspond to a terminal, return the value returned by FALL-BACK."
   (catch 'system-error
     (lambda ()
       (if (file-port? port)
-          (match (window-size-columns (terminal-window-size port))
+          (match (window-dimension (terminal-window-size port))
             ;; Things like Emacs shell-mode return 0, which is unreasonable.
             (0 (fall-back))
-            ((? number? columns) columns))
+            ((? number? n) n))
           (fall-back)))
     (lambda args
       (let ((errno (system-error-errno args)))
@@ -1900,6 +1895,24 @@ always a positive integer."
             (fall-back)
             (apply throw args))))))
 
+(define* (terminal-columns #:optional (port (current-output-port)))
+  "Return the best approximation of the number of columns of the terminal at
+PORT, trying to guess a reasonable value if all else fails.  The result is
+always a positive integer."
+  (define (fall-back)
+    (match (and=> (getenv "COLUMNS") string->number)
+      (#f 80)
+      ((? number? columns)
+       (if (> columns 0) columns 80))))
+
+  (terminal-dimension window-size-columns port fall-back))
+
+(define* (terminal-rows #:optional (port (current-output-port)))
+  "Return the best approximation of the number of rows of the terminal at
+PORT, trying to guess a reasonable value if all else fails.  The result is
+always a positive integer."
+  (terminal-dimension window-size-rows port (const 25)))
+
 
 ;;;
 ;;; utmpx.
diff --git a/guix/derivations.scm b/guix/derivations.scm
index 8145d51143..433b4551a5 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -21,6 +21,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-9 gnu)
+  #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
@@ -34,6 +35,7 @@
   #:use-module (guix base16)
   #:use-module (guix memoization)
   #:use-module (guix combinators)
+  #:use-module (guix deprecation)
   #:use-module (guix monads)
   #:use-module (gcrypt hash)
   #:use-module (guix base32)
@@ -50,7 +52,8 @@
             derivation-builder-environment-vars
             derivation-file-name
             derivation-prerequisites
-            derivation-prerequisites-to-build
+            derivation-build-plan
+            derivation-prerequisites-to-build     ;deprecated
 
             <derivation-output>
             derivation-output?
@@ -61,6 +64,7 @@
 
             <derivation-input>
             derivation-input?
+            derivation-input
             derivation-input-path
             derivation-input-derivation
             derivation-input-sub-derivations
@@ -148,14 +152,28 @@
   (recursive? derivation-output-recursive?))      ; Boolean
 
 (define-immutable-record-type <derivation-input>
-  (make-derivation-input path sub-derivations)
+  (make-derivation-input drv sub-derivations)
   derivation-input?
-  (path            derivation-input-path)             ; store path
+  (drv             derivation-input-derivation)       ; <derivation>
   (sub-derivations derivation-input-sub-derivations)) ; list of strings
 
-(define (derivation-input-derivation input)
-  "Return the <derivation> object INPUT refers to."
-  (read-derivation-from-file (derivation-input-path input)))
+
+(define (derivation-input-path input)
+  "Return the file name of the derivation INPUT refers to."
+  (derivation-file-name (derivation-input-derivation input)))
+
+(define* (derivation-input drv #:optional
+                           (outputs (derivation-output-names drv)))
+  "Return a <derivation-input> for the OUTPUTS of DRV."
+  ;; This is a public interface meant to be more convenient than
+  ;; 'make-derivation-input' and giving us more control.
+  (make-derivation-input drv outputs))
+
+(define (derivation-input-key input)
+  "Return an object for which 'equal?' and 'hash' are constant-time, and which
+can thus be used as a key for INPUT in lookup tables."
+  (cons (derivation-input-path input)
+        (derivation-input-sub-derivations input)))
 
 (set-record-type-printer! <derivation>
                           (lambda (drv port)
@@ -197,8 +215,8 @@ download with a fixed hash (aka. `fetchurl')."
   "Return the list of output paths corresponding to INPUT, a
 <derivation-input>."
   (match input
-    (($ <derivation-input> path sub-drvs)
-     (map (cut derivation-path->output-path path <>)
+    (($ <derivation-input> drv sub-drvs)
+     (map (cut derivation->output-path drv <>)
           sub-drvs))))
 
 (define (valid-derivation-input? store input)
@@ -213,20 +231,20 @@ they are coalesced, with their sub-derivations merged.  This is needed because
 Nix itself keeps only one of them."
   (fold (lambda (input result)
           (match input
-            (($ <derivation-input> path sub-drvs)
+            (($ <derivation-input> (= derivation-file-name path) sub-drvs)
              ;; XXX: quadratic
              (match (find (match-lambda
-                            (($ <derivation-input> p s)
+                            (($ <derivation-input> (= derivation-file-name p)
+                                                   s)
                              (string=? p path)))
                           result)
                (#f
                 (cons input result))
-               ((and dup ($ <derivation-input> _ sub-drvs2))
+               ((and dup ($ <derivation-input> drv sub-drvs2))
                 ;; Merge DUP with INPUT.
                 (let ((sub-drvs (delete-duplicates
                                  (append sub-drvs sub-drvs2))))
-                  (cons (make-derivation-input path
-                                               (sort sub-drvs string<?))
+                  (cons (make-derivation-input drv (sort sub-drvs string<?))
                         (delq dup result))))))))
         '()
         inputs))
@@ -242,12 +260,14 @@ result is the set of prerequisites of DRV not already in valid."
              (result    '())
              (input-set (set)))
     (let ((inputs (remove (lambda (input)
-                            (or (set-contains? input-set input)
+                            (or (set-contains? input-set
+                                               (derivation-input-key input))
                                 (cut? input)))
                           (derivation-inputs drv))))
       (fold2 loop
              (append inputs result)
-             (fold set-insert input-set inputs)
+             (fold set-insert input-set
+                   (map derivation-input-key inputs))
              (map derivation-input-derivation inputs)))))
 
 (define (offloadable-derivation? drv)
@@ -333,87 +353,81 @@ substituter many times."
         (#f #f)
         ((key . value) value)))))
 
-(define* (derivation-prerequisites-to-build store drv
-                                            #:key
-                                            (mode (build-mode normal))
-                                            (outputs
-                                             (derivation-output-names drv))
-                                            (substitutable-info
-                                             (substitution-oracle store
-                                                                  (list drv)
-                                                                  #:mode mode)))
-  "Return two values: the list of derivation-inputs required to build the
-OUTPUTS of DRV and not already available in STORE, recursively, and the list
-of required store paths that can be substituted.  SUBSTITUTABLE-INFO must be a
-one-argument procedure similar to that returned by 'substitution-oracle'."
-  (define built?
-    (mlambda (item)
-      (valid-path? store item)))
-
-  (define input-built?
-    (compose (cut any built? <>) derivation-input-output-paths))
-
-  (define input-substitutable?
-    ;; Return true if and only if all of SUB-DRVS are subsitutable.  If at
-    ;; least one is missing, then everything must be rebuilt.
-    (compose (cut every substitutable-info <>) derivation-input-output-paths))
-
-  (define (derivation-built? drv* sub-drvs)
+(define* (derivation-build-plan store inputs
+                                #:key
+                                (mode (build-mode normal))
+                                (substitutable-info
+                                 (substitution-oracle
+                                  store
+                                  (map derivation-input-derivation
+                                       inputs)
+                                  #:mode mode)))
+  "Given INPUTS, a list of derivation-inputs, return two values: the list of
+derivation to build, and the list of substitutable items that, together,
+allows INPUTS to be realized.
+
+SUBSTITUTABLE-INFO must be a one-argument procedure similar to that returned
+by 'substitution-oracle'."
+  (define (built? item)
+    (valid-path? store item))
+
+  (define (input-built? input)
     ;; In 'check' mode, assume that DRV is not built.
     (and (not (and (eqv? mode (build-mode check))
-                   (eq? drv* drv)))
-         (every built? (derivation-output-paths drv* sub-drvs))))
-
-  (define (derivation-substitutable-info drv sub-drvs)
-    (and (substitutable-derivation? drv)
-         (let ((info (filter-map substitutable-info
-                                 (derivation-output-paths drv sub-drvs))))
-           (and (= (length info) (length sub-drvs))
+                   (member input inputs)))
+         (every built? (derivation-input-output-paths input))))
+
+  (define (input-substitutable-info input)
+    (and (substitutable-derivation? (derivation-input-derivation input))
+         (let* ((items (derivation-input-output-paths input))
+                (info  (filter-map substitutable-info items)))
+           (and (= (length info) (length items))
                 info))))
 
-  (let loop ((drv        drv)
-             (sub-drvs   outputs)
-             (build      '())                     ;list of <derivation-input>
-             (substitute '()))                    ;list of <substitutable>
-    (cond ((derivation-built? drv sub-drvs)
-           (values build substitute))
-          ((derivation-substitutable-info drv sub-drvs)
-           =>
-           (lambda (substitutables)
-             (values build
-                     (append substitutables substitute))))
-          (else
-           (let ((build  (if (substitutable-derivation? drv)
-                             build
-                             (cons (make-derivation-input
-                                    (derivation-file-name drv) sub-drvs)
-                                   build)))
-                 (inputs (remove (lambda (i)
-                                   (or (member i build) ; XXX: quadratic
-                                       (input-built? i)
-                                       (input-substitutable? i)))
-                                 (derivation-inputs drv))))
-             (fold2 loop
-                    (append inputs build)
-                    (append (append-map (lambda (input)
-                                          (if (and (not (input-built? input))
-                                                   (input-substitutable? input))
-                                              (map substitutable-info
-                                                   (derivation-input-output-paths
-                                                    input))
-                                              '()))
-                                        (derivation-inputs drv))
-                            substitute)
-                    (map (lambda (i)
-                           (read-derivation-from-file
-                            (derivation-input-path i)))
-                         inputs)
-                    (map derivation-input-sub-derivations inputs)))))))
-
-(define (read-derivation drv-port)
+  (let loop ((inputs     inputs)                  ;list of <derivation-input>
+             (build      '())                     ;list of <derivation>
+             (substitute '())                     ;list of <substitutable>
+             (visited    (set)))                  ;set of <derivation-input>
+    (match inputs
+      (()
+       (values build substitute))
+      ((input rest ...)
+       (let ((key (derivation-input-key input)))
+         (cond ((set-contains? visited key)
+                (loop rest build substitute visited))
+               ((input-built? input)
+                (loop rest build substitute
+                      (set-insert key visited)))
+               ((input-substitutable-info input)
+                =>
+                (lambda (substitutables)
+                  (loop rest build
+                        (append substitutables substitute)
+                        (set-insert key visited))))
+               (else
+                (let ((deps (derivation-inputs
+                             (derivation-input-derivation input))))
+                  (loop (append deps rest)
+                        (cons (derivation-input-derivation input) build)
+                        substitute
+                        (set-insert key visited))))))))))
+
+(define-deprecated (derivation-prerequisites-to-build store drv #:rest rest)
+  derivation-build-plan
+  (let-values (((build download)
+                (apply derivation-build-plan store
+                       (list (derivation-input drv)) rest)))
+    (values (map derivation-input build) download)))
+
+(define* (read-derivation drv-port
+                          #:optional (read-derivation-from-file
+                                      read-derivation-from-file))
   "Read the derivation from DRV-PORT and return the corresponding <derivation>
-object.  Most of the time you'll want to use 'read-derivation-from-file',
-which caches things as appropriate and is thus more efficient."
+object.  Call READ-DERIVATION-FROM-FILE to read derivations declared as inputs
+of the derivation being parsed.
+
+Most of the time you'll want to use 'read-derivation-from-file', which caches
+things as appropriate and is thus more efficient."
 
   (define comma (string->symbol ","))
 
@@ -449,8 +463,9 @@ which caches things as appropriate and is thus more efficient."
     (fold-right (lambda (input result)
                   (match input
                     ((path (sub-drvs ...))
-                     (cons (make-derivation-input path sub-drvs)
-                           result))))
+                     (let ((drv (read-derivation-from-file path)))
+                       (cons (make-derivation-input drv sub-drvs)
+                             result)))))
                 '()
                 x))
 
@@ -552,9 +567,15 @@ that form."
 
   (define (write-input input port)
     (match input
-      (($ <derivation-input> path sub-drvs)
+      (($ <derivation-input> obj sub-drvs)
        (display "(\"" port)
-       (display path port)
+
+       ;; 'derivation/masked-inputs' produces objects that contain a string
+       ;; instead of a <derivation>, so we need to account for that.
+       (display (if (derivation? obj)
+                    (derivation-file-name obj)
+                    obj)
+                port)
        (display "\"," port)
        (write-string-list sub-drvs)
        (display ")" port))))
@@ -645,13 +666,16 @@ name of each input with that input's hash."
     (($ <derivation> outputs inputs sources
                      system builder args env-vars)
      (let ((inputs (map (match-lambda
-                          (($ <derivation-input> path sub-drvs)
+                          (($ <derivation-input> (= derivation-file-name path)
+                                                 sub-drvs)
                            (let ((hash (derivation-path->base16-hash path)))
                              (make-derivation-input hash sub-drvs))))
                         inputs)))
        (make-derivation outputs
-                        (sort (coalesce-duplicate-inputs inputs)
-                              derivation-input<?)
+                        (sort inputs
+                              (lambda (drv1 drv2)
+                                (string<? (derivation-input-derivation drv1)
+                                          (derivation-input-derivation drv2))))
                         sources
                         system builder args env-vars
                         #f)))))
@@ -807,17 +831,19 @@ derivation.  It is kept as-is, uninterpreted, in the derivation."
   (define input->derivation-input
     (match-lambda
       (((? derivation? drv))
-       (make-derivation-input (derivation-file-name drv) '("out")))
+       (make-derivation-input drv '("out")))
       (((? derivation? drv) sub-drvs ...)
-       (make-derivation-input (derivation-file-name drv) sub-drvs))
-      (((? direct-store-path? input))
-       (make-derivation-input input '("out")))
-      (((? direct-store-path? input) sub-drvs ...)
-       (make-derivation-input input sub-drvs))
-      ((input . _)
-       (let ((path (add-to-store store (basename input)
-                                 #t "sha256" input)))
-         (make-derivation-input path '())))))
+       (make-derivation-input drv sub-drvs))
+      (_ #f)))
+
+  (define input->source
+    (match-lambda
+      (((? string? input) . _)
+       (if (direct-store-path? input)
+           input
+           (add-to-store store (basename input)
+                         #t "sha256" input)))
+      (_ #f)))
 
   ;; Note: lists are sorted alphabetically, to conform with the behavior of
   ;; C++ `std::map' in Nix itself.
@@ -828,32 +854,31 @@ derivation.  It is kept as-is, uninterpreted, in the derivation."
                                   (make-derivation-output "" hash-algo
                                                           hash recursive?)))
                           (sort outputs string<?)))
+         (sources    (sort (delete-duplicates
+                            (filter-map input->source inputs))
+                           string<?))
          (inputs     (sort (coalesce-duplicate-inputs
-                            (map input->derivation-input
-                                 (delete-duplicates inputs)))
+                            (filter-map input->derivation-input inputs))
                            derivation-input<?))
          (env-vars   (sort (env-vars-with-empty-outputs
                             (user+system-env-vars))
                            (lambda (e1 e2)
                              (string<? (car e1) (car e2)))))
-         (drv-masked (make-derivation outputs
-                                      (filter (compose derivation-path?
-                                                       derivation-input-path)
-                                              inputs)
-                                      (filter-map (lambda (i)
-                                                    (let ((p (derivation-input-path i)))
-                                                      (and (not (derivation-path? p))
-                                                           p)))
-                                                  inputs)
+         (drv-masked (make-derivation outputs inputs sources
                                       system builder args env-vars #f))
          (drv        (add-output-paths drv-masked)))
 
     (let* ((file (add-data-to-store store (string-append name ".drv")
                                     (derivation->bytevector drv)
-                                    (map derivation-input-path inputs)))
+                                    (append (map derivation-input-path inputs)
+                                            sources)))
            (drv* (set-field drv (derivation-file-name) file)))
-      (hash-set! %derivation-cache file drv*)
-      drv*)))
+      ;; Preserve pointer equality.  This improves the performance of
+      ;; 'eq?'-memoization on derivations.
+      (or (hash-ref %derivation-cache file)
+          (begin
+            (hash-set! %derivation-cache file drv*)
+            drv*)))))
 
 (define (invalidate-derivation-caches!)
   "Invalidate internal derivation caches.  This is mostly useful for
@@ -920,7 +945,8 @@ recursively."
       ;; in the format used in 'derivation' calls.
       (mlambda (input loop)
         (match input
-          (($ <derivation-input> path (sub-drvs ...))
+          (($ <derivation-input> (= derivation-file-name path)
+                                 (sub-drvs ...))
            (match (vhash-assoc path mapping)
              ((_ . (? derivation? replacement))
               (cons replacement sub-drvs))
@@ -990,6 +1016,11 @@ derivation/output pairs, using the specified MODE."
   (build-things store (map (match-lambda
                             ((? derivation? drv)
                              (derivation-file-name drv))
+                            ((? derivation-input? input)
+                             (cons (derivation-input-path input)
+                                   (string-join
+                                    (derivation-input-sub-derivations input)
+                                    ",")))
                             ((? string? file) file)
                             (((? derivation? drv) . output)
                              (cons (derivation-file-name drv)
diff --git a/guix/progress.scm b/guix/progress.scm
index f150b081d6..349637dbcf 100644
--- a/guix/progress.scm
+++ b/guix/progress.scm
@@ -197,7 +197,9 @@ object) and TRANSFERRED (a total number of bytes) to determine the
 throughput."
   (define elapsed
     (duration->seconds
-     (time-difference (current-time time-monotonic) start-time)))
+     (time-difference (current-time (time-type start-time))
+                      start-time)))
+
   (if (and (number? size) (not (zero? size)))
       (let* ((%  (* 100.0 (/ transferred size)))
              (throughput (/ transferred elapsed))
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index 61ca4dca9f..ec58ba871b 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -836,11 +836,9 @@ build."
            (#t
             (match (package-source p)
               (#f
-               (format (current-error-port)
-                       (G_ "~a: warning: \
-package '~a' has no source~%")
-                       (location->string (package-location p))
-                       (package-name p))
+               (warning (package-location p)
+                        (G_ "package '~a' has no source~%")
+                        (package-name p))
                '())
               (s
                (list (package-source-derivation store s)))))
@@ -918,7 +916,8 @@ needed."
                                    '())))
                    (items (filter-map (match-lambda
                                         (('argument . (? store-path? file))
-                                         file)
+                                         (and (not (derivation-path? file))
+                                              file))
                                         (_ #f))
                                       opts))
                    (roots (filter-map (match-lambda
diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm
index 8fe81ad64b..2e14857f1e 100644
--- a/guix/scripts/graph.scm
+++ b/guix/scripts/graph.scm
@@ -254,8 +254,7 @@ GNU-BUILD-SYSTEM have zero dependencies."
   "Return the <derivation> objects and store items corresponding to the
 dependencies of OBJ, a <derivation> or store item."
   (if (derivation? obj)
-      (append (map (compose read-derivation-from-file derivation-input-path)
-                   (derivation-inputs obj))
+      (append (map derivation-input-derivation (derivation-inputs obj))
               (derivation-sources obj))
       '()))
 
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 5751123525..7b277b63f1 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -26,6 +26,7 @@
 (define-module (guix scripts package)
   #:use-module (guix ui)
   #:use-module ((guix status) #:select (with-status-verbosity))
+  #:use-module ((guix build syscalls) #:select (terminal-rows))
   #:use-module (guix store)
   #:use-module (guix grafts)
   #:use-module (guix derivations)
@@ -178,9 +179,9 @@ hooks\" run when building the profile."
 ;;;
 
 (define (find-packages-by-description regexps)
-  "Return two values: the list of packages whose name, synopsis, description,
-or output matches at least one of REGEXPS sorted by relevance, and the list of
-relevance scores."
+  "Return a list of pairs: packages whose name, synopsis, description,
+or output matches at least one of REGEXPS sorted by relevance, and its
+non-zero relevance score."
   (let ((matches (fold-packages (lambda (package result)
                                   (if (package-superseded package)
                                       result
@@ -189,19 +190,19 @@ relevance scores."
                                         ((? zero?)
                                          result)
                                         (score
-                                         (cons (list package score)
+                                         (cons (cons package score)
                                                result)))))
                                 '())))
-    (unzip2 (sort matches
-                  (lambda (m1 m2)
-                    (match m1
-                      ((package1 score1)
-                       (match m2
-                         ((package2 score2)
-                          (if (= score1 score2)
-                              (string>? (package-full-name package1)
-                                        (package-full-name package2))
-                              (> score1 score2)))))))))))
+    (sort matches
+          (lambda (m1 m2)
+            (match m1
+              ((package1 . score1)
+               (match m2
+                 ((package2 . score2)
+                  (if (= score1 score2)
+                      (string>? (package-full-name package1)
+                                (package-full-name package2))
+                      (> score1 score2))))))))))
 
 (define (transaction-upgrade-entry entry transaction)
   "Return a variant of TRANSACTION that accounts for the upgrade of ENTRY, a
@@ -755,16 +756,10 @@ processed, #f otherwise."
                                       (('query 'search rx) rx)
                                       (_                   #f))
                                     opts))
-              (regexps  (map (cut make-regexp* <> regexp/icase) patterns)))
+              (regexps  (map (cut make-regexp* <> regexp/icase) patterns))
+              (matches  (find-packages-by-description regexps)))
          (leave-on-EPIPE
-          (let-values (((packages scores)
-                        (find-packages-by-description regexps)))
-            (for-each (lambda (package score)
-                        (package->recutils package (current-output-port)
-                                           #:extra-fields
-                                           `((relevance . ,score))))
-                      packages
-                      scores)))
+          (display-search-results matches (current-output-port)))
          #t))
 
       (('show requested-name)
diff --git a/guix/scripts/publish.scm b/guix/scripts/publish.scm
index b4334b3f16..c716998a5b 100644
--- a/guix/scripts/publish.scm
+++ b/guix/scripts/publish.scm
@@ -724,6 +724,32 @@ example: \"/foo/bar\" yields '(\"foo\" \"bar\")."
 (define %http-write
   (@@ (web server http) http-write))
 
+(match (list (major-version) (minor-version) (micro-version))
+  (("2" "2" "5")                                  ;Guile 2.2.5
+   (let ()
+     (define %read-line (@ (ice-9 rdelim) %read-line))
+     (define bad-header (@@ (web http) bad-header))
+
+     ;; XXX: Work around <https://bugs.gnu.org/36350> by reverting to the
+     ;; definition of 'read-header-line' as found in 2.2.4 and earlier.
+     (define (read-header-line port)
+       "Read an HTTP header line and return it without its final CRLF or LF.
+Raise a 'bad-header' exception if the line does not end in CRLF or LF,
+or if EOF is reached."
+       (match (%read-line port)
+         (((? string? line) . #\newline)
+          ;; '%read-line' does not consider #\return a delimiter; so if it's
+          ;; there, remove it.  We are more tolerant than the RFC in that we
+          ;; tolerate LF-only endings.
+          (if (string-suffix? "\r" line)
+              (string-drop-right line 1)
+              line))
+         ((line . _)                              ;EOF or missing delimiter
+          (bad-header 'read-header-line line))))
+
+     (set! (@@ (web http) read-header-line) read-header-line)))
+  (_ #t))
+
 (define (strip-headers response)
   "Return RESPONSE's headers minus 'Content-Length' and our internal headers."
   (fold alist-delete
diff --git a/guix/scripts/system/search.scm b/guix/scripts/system/search.scm
index 955cdd1e95..5278062edd 100644
--- a/guix/scripts/system/search.scm
+++ b/guix/scripts/system/search.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -139,9 +139,8 @@ columns."
      . 1)))
 
 (define (find-service-types regexps)
-  "Return two values: the list of service types whose name or description
-matches at least one of REGEXPS sorted by relevance, and the list of relevance
-scores."
+  "Return a list of service type/score pairs: service types whose name or
+description matches REGEXPS sorted by relevance, and their score."
   (let ((matches (fold-service-types
                   (lambda (type result)
                     (match (relevance type regexps
@@ -149,30 +148,25 @@ scores."
                       ((? zero?)
                        result)
                       (score
-                       (cons (list type score) result))))
+                       (cons (cons type score) result))))
                   '())))
-    (unzip2 (sort matches
-                  (lambda (m1 m2)
-                    (match m1
-                      ((type1 score1)
-                       (match m2
-                         ((type2 score2)
-                          (if (= score1 score2)
-                              (string>? (service-type-name* type1)
-                                        (service-type-name* type2))
-                              (> score1 score2)))))))))))
+    (sort matches
+          (lambda (m1 m2)
+            (match m1
+              ((type1 . score1)
+               (match m2
+                 ((type2 . score2)
+                  (if (= score1 score2)
+                      (string>? (service-type-name* type1)
+                                (service-type-name* type2))
+                      (> score1 score2))))))))))
 
 
 (define (guix-system-search . args)
   (with-error-handling
-    (let ((regexps (map (cut make-regexp* <> regexp/icase) args)))
+    (let* ((regexps (map (cut make-regexp* <> regexp/icase) args))
+           (matches (find-service-types regexps)))
       (leave-on-EPIPE
-       (let-values (((services scores)
-                     (find-service-types regexps)))
-         (for-each (lambda (service score)
-                     (service-type->recutils service
-                                             (current-output-port)
-                                             #:extra-fields
-                                             `((relevance . ,score))))
-                   services
-                   scores))))))
+       (display-search-results matches (current-output-port)
+                               #:print service-type->recutils
+                               #:command "guix system search")))))
diff --git a/guix/ui.scm b/guix/ui.scm
index 0b4fe144b6..6d243ef041 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -41,12 +41,12 @@
   #:use-module (guix packages)
   #:use-module (guix profiles)
   #:use-module (guix derivations)
-  #:use-module (guix combinators)
   #:use-module (guix build-system)
   #:use-module (guix serialization)
   #:use-module ((guix licenses) #:select (license? license-name))
   #:use-module ((guix build syscalls)
-                #:select (free-disk-space terminal-columns))
+                #:select (free-disk-space terminal-columns
+                                          terminal-rows))
   #:use-module ((guix build utils)
                 ;; XXX: All we need are the bindings related to
                 ;; '&invoke-error'.  However, to work around the bug described
@@ -106,8 +106,11 @@
             string->recutils
             package->recutils
             package-specification->name+version+output
+
             relevance
             package-relevance
+            display-search-results
+
             string->generations
             string->duration
             matching-generations
@@ -774,12 +777,19 @@ error."
             str))))
 
 (define (show-derivation-outputs derivation)
-  "Show the output file names of DERIVATION."
-  (format #t "~{~a~%~}"
-          (map (match-lambda
-                 ((out-name . out)
-                  (derivation->output-path derivation out-name)))
-               (derivation-outputs derivation))))
+  "Show the output file names of DERIVATION, which can be a derivation or a
+derivation input."
+  (define (show-outputs derivation outputs)
+    (format #t "~{~a~%~}"
+            (map (cut derivation->output-path derivation <>)
+                 outputs)))
+
+  (match derivation
+    ((? derivation?)
+     (show-outputs derivation (derivation-output-names derivation)))
+    ((? derivation-input? input)
+     (show-outputs (derivation-input-derivation input)
+                   (derivation-input-sub-derivations input)))))
 
 (define* (check-available-space need
                                 #:optional (directory (%store-prefix)))
@@ -809,40 +819,31 @@ warning."
                              #:key dry-run? (use-substitutes? #t)
                              (mode (build-mode normal)))
   "Show what will or would (depending on DRY-RUN?) be built in realizing the
-derivations listed in DRV using MODE, a 'build-mode' value.  Return #t if
-there's something to build, #f otherwise.  When USE-SUBSTITUTES?, check and
-report what is prerequisites are available for download."
+derivations listed in DRV using MODE, a 'build-mode' value.  The elements of
+DRV can be either derivations or derivation inputs.
+
+Return #t if there's something to build, #f otherwise.  When USE-SUBSTITUTES?,
+check and report what is prerequisites are available for download."
+  (define inputs
+    (map (match-lambda
+           ((? derivation? drv) (derivation-input drv))
+           ((? derivation-input? input) input))
+         drv))
+
   (define substitutable-info
     ;; Call 'substitutation-oracle' upfront so we don't end up launching the
     ;; substituter many times.  This makes a big difference, especially when
     ;; DRV is a long list as is the case with 'guix environment'.
     (if use-substitutes?
-        (substitution-oracle store drv #:mode mode)
+        (substitution-oracle store (map derivation-input-derivation inputs)
+                             #:mode mode)
         (const #f)))
 
-  (define (built-or-substitutable? drv)
-    (or (null? (derivation-outputs drv))
-        (let ((out (derivation->output-path drv))) ;XXX: assume "out" exists
-          (or (valid-path? store out)
-              (substitutable-info out)))))
-
   (let*-values (((build download)
-                 (fold2 (lambda (drv build download)
-                          (let-values (((b d)
-                                        (derivation-prerequisites-to-build
-                                         store drv
-                                         #:mode mode
-                                         #:substitutable-info
-                                         substitutable-info)))
-                            (values (append b build)
-                                    (append d download))))
-                        '() '()
-                        drv))
-                ((build)                          ; add the DRV themselves
-                 (delete-duplicates
-                  (append (map derivation-file-name
-                               (remove built-or-substitutable? drv))
-                          (map derivation-input-path build))))
+                 (derivation-build-plan store inputs
+                                        #:mode mode
+                                        #:substitutable-info
+                                        substitutable-info))
                 ((download)                   ; add the references of DOWNLOAD
                  (if use-substitutes?
                      (delete-duplicates
@@ -856,8 +857,8 @@ report what is prerequisites are available for download."
                                            download))))
                      download))
                 ((graft hook build)
-                 (match (fold (lambda (file acc)
-                                (let ((drv (read-derivation-from-file file)))
+                 (match (fold (lambda (drv acc)
+                                (let ((file (derivation-file-name drv)))
                                   (match acc
                                     ((#:graft graft #:hook hook #:build build)
                                      (cond
@@ -1246,6 +1247,11 @@ WIDTH columns.  EXTRA-FIELDS is a list of symbol/value pairs to emit."
             extra-fields)
   (newline port))
 
+
+;;;
+;;; Searching.
+;;;
+
 (define (relevance obj regexps metrics)
   "Compute a \"relevance score\" for OBJ as a function of its number of
 matches of REGEXPS and accordingly to METRICS.  METRICS is list of
@@ -1256,17 +1262,20 @@ weight of this field in the final score.
 A score of zero means that OBJ does not match any of REGEXPS.  The higher the
 score, the more relevant OBJ is to REGEXPS."
   (define (score str)
-    (let ((counts (map (lambda (regexp)
-                         (match (fold-matches regexp str '() cons)
-                           (()  0)
-                           ((m) (if (string=? (match:substring m) str)
-                                    5              ;exact match
-                                    1))
-                           (lst (length lst))))
-                       regexps)))
-      ;; Compute a score that's proportional to the number of regexps matched
-      ;; and to the number of matches for each regexp.
-      (* (length counts) (reduce + 0 counts))))
+    (define scores
+      (map (lambda (regexp)
+             (fold-matches regexp str 0
+                           (lambda (m score)
+                             (+ score
+                                (if (string=? (match:substring m) str)
+                                    5             ;exact match
+                                    1)))))
+           regexps))
+
+    ;; Return zero if one of REGEXPS doesn't match.
+    (if (any zero? scores)
+        0
+        (reduce + 0 scores)))
 
   (fold (lambda (metric relevance)
           (match metric
@@ -1312,6 +1321,45 @@ score, the more relevant OBJ is to REGEXPS."
 zero means that PACKAGE does not match any of REGEXPS."
   (relevance package regexps %package-metrics))
 
+(define* (display-search-results matches port
+                                 #:key
+                                 (command "guix search")
+                                 (print package->recutils))
+  "Display MATCHES, a list of object/score pairs, by calling PRINT on each of
+them.  If PORT is a terminal, print at most a full screen of results."
+  (define first-line
+    (port-line port))
+
+  (define max-rows
+    (and first-line (isatty? port)
+         (terminal-rows port)))
+
+  (define (line-count str)
+    (string-count str #\newline))
+
+  (let loop ((matches matches))
+    (match matches
+      (((package . score) rest ...)
+       (let ((text (call-with-output-string
+                     (lambda (port)
+                       (print package port
+                              #:extra-fields
+                              `((relevance . ,score)))))))
+         (if (and max-rows
+                  (> (port-line port) first-line) ;print at least one result
+                  (> (+ 4 (line-count text) (port-line port))
+                     max-rows))
+             (unless (null? rest)
+               (display-hint (format #f (G_ "Run @code{~a ... | less} \
+to view all the results.")
+                                     command)))
+             (begin
+               (display text port)
+               (loop rest)))))
+      (()
+       #t))))
+
+
 (define (string->generations str)
   "Return the list of generations matching a pattern in STR.  This function
 accepts the following patterns: \"1\", \"1,2,3\", \"1..9\", \"1..\", \"..9\"."
diff --git a/tests/derivations.scm b/tests/derivations.scm
index b0175d9fc5..98018a45e3 100644
--- a/tests/derivations.scm
+++ b/tests/derivations.scm
@@ -86,9 +86,11 @@
 (test-assert "parse & export"
   (let* ((f  (search-path %load-path "tests/test.drv"))
          (b1 (call-with-input-file f get-bytevector-all))
-         (d1 (read-derivation (open-bytevector-input-port b1)))
+         (d1 (read-derivation (open-bytevector-input-port b1)
+                              identity))
          (b2 (call-with-bytevector-output-port (cut write-derivation d1 <>)))
-         (d2 (read-derivation (open-bytevector-input-port b2))))
+         (d2 (read-derivation (open-bytevector-input-port b2)
+                              identity)))
     (and (equal? b1 b2)
          (equal? d1 d2))))
 
@@ -723,7 +725,7 @@
 (test-assert "build-expression->derivation and derivation-prerequisites"
   (let ((drv (build-expression->derivation %store "fail" #f)))
     (any (match-lambda
-          (($ <derivation-input> path)
+          (($ <derivation-input> (= derivation-file-name path))
            (string=? path (derivation-file-name (%guile-for-build)))))
          (derivation-prerequisites drv))))
 
@@ -740,7 +742,7 @@
     (match (derivation-prerequisites c
                                      (cut valid-derivation-input? %store
                                           <>))
-      ((($ <derivation-input> file ("out")))
+      ((($ <derivation-input> (= derivation-file-name file) ("out")))
        (string=? file (derivation-file-name b)))
       (x
        (pk 'fail x #f)))))
@@ -804,17 +806,20 @@
              ;; Ask for nothing but the "out" output of DRV.
              (build-derivations store `((,drv . "out")))
 
+             ;; Synonymous:
+             (build-derivations store (list (derivation-input drv '("out"))))
+
              (valid-path? store out)
-             (equal? (pk 'x content) (pk 'y (call-with-input-file out get-string-all)))
-             )))))
+             (equal? (pk 'x content)
+                     (pk 'y (call-with-input-file out get-string-all))))))))
 
-(test-assert "build-expression->derivation and derivation-prerequisites-to-build"
+(test-assert "build-expression->derivation and derivation-build-plan"
   (let ((drv (build-expression->derivation %store "fail" #f)))
     ;; The only direct dependency is (%guile-for-build) and it's already
     ;; built.
-    (null? (derivation-prerequisites-to-build %store drv))))
+    (null? (derivation-build-plan %store (derivation-inputs drv)))))
 
-(test-assert "derivation-prerequisites-to-build when outputs already present"
+(test-assert "derivation-build-plan when outputs already present"
   (let* ((builder    `(begin ,(random-text) (mkdir %output) #t))
          (input-drv  (build-expression->derivation %store "input" builder))
          (input-path (derivation->output-path input-drv))
@@ -827,9 +832,12 @@
               (valid-path? %store output))
       (error "things already built" input-drv))
 
-    (and (equal? (map derivation-input-path
-                      (derivation-prerequisites-to-build %store drv))
-                 (list (derivation-file-name input-drv)))
+    (and (lset= equal?
+                (map derivation-file-name
+                     (derivation-build-plan %store
+                                            (list (derivation-input drv))))
+                (list (derivation-file-name input-drv)
+                      (derivation-file-name drv)))
 
          ;; Build DRV and delete its input.
          (build-derivations %store (list drv))
@@ -838,9 +846,10 @@
 
          ;; Now INPUT-PATH is missing, yet it shouldn't be listed as a
          ;; prerequisite to build because DRV itself is already built.
-         (null? (derivation-prerequisites-to-build %store drv)))))
+         (null? (derivation-build-plan %store
+                                       (list (derivation-input drv)))))))
 
-(test-assert "derivation-prerequisites-to-build and substitutes"
+(test-assert "derivation-build-plan and substitutes"
   (let* ((store  (open-connection))
          (drv    (build-expression->derivation store "prereq-subst"
                                                (random 1000)))
@@ -852,17 +861,19 @@
 
     (with-derivation-narinfo drv
       (let-values (((build download)
-                    (derivation-prerequisites-to-build store drv))
+                    (derivation-build-plan store
+                                           (list (derivation-input drv))))
                    ((build* download*)
-                    (derivation-prerequisites-to-build store drv
-                                                       #:substitutable-info
-                                                       (const #f))))
+                    (derivation-build-plan store
+                                           (list (derivation-input drv))
+                                           #:substitutable-info
+                                           (const #f))))
         (and (null? build)
              (equal? (map substitutable-path download) (list output))
              (null? download*)
-             (null? build*))))))
+             (equal? (list drv) build*))))))
 
-(test-assert "derivation-prerequisites-to-build and substitutes, non-substitutable build"
+(test-assert "derivation-build-plan and substitutes, non-substitutable build"
   (let* ((store  (open-connection))
          (drv    (build-expression->derivation store "prereq-no-subst"
                                                (random 1000)
@@ -875,16 +886,16 @@
 
     (with-derivation-narinfo drv
       (let-values (((build download)
-                    (derivation-prerequisites-to-build store drv)))
+                    (derivation-build-plan store
+                                           (list (derivation-input drv)))))
         ;; Despite being available as a substitute, DRV will be built locally
         ;; due to #:substitutable? #f.
         (and (null? download)
              (match build
-               (((? derivation-input? input))
-                (string=? (derivation-input-path input)
-                          (derivation-file-name drv)))))))))
+               (((= derivation-file-name build))
+                (string=? build (derivation-file-name drv)))))))))
 
-(test-assert "derivation-prerequisites-to-build and substitutes, local build"
+(test-assert "derivation-build-plan and substitutes, local build"
   (with-store store
     (let* ((drv    (build-expression->derivation store "prereq-subst-local"
                                                  (random 1000)
@@ -897,7 +908,8 @@
 
       (with-derivation-narinfo drv
         (let-values (((build download)
-                      (derivation-prerequisites-to-build store drv)))
+                      (derivation-build-plan store
+                                             (list (derivation-input drv)))))
           ;; #:local-build? is *not* synonymous with #:substitutable?, so we
           ;; must be able to substitute DRV's output.
           ;; See <http://bugs.gnu.org/18747>.
@@ -906,7 +918,7 @@
                  (((= substitutable-path item))
                   (string=? item (derivation->output-path drv))))))))))
 
-(test-assert "derivation-prerequisites-to-build in 'check' mode"
+(test-assert "derivation-build-plan in 'check' mode"
   (with-store store
     (let* ((dep (build-expression->derivation store "dep"
                                               `(begin ,(random-text)
@@ -918,13 +930,13 @@
       (delete-paths store (list (derivation->output-path dep)))
 
       ;; In 'check' mode, DEP must be rebuilt.
-      (and (null? (derivation-prerequisites-to-build store drv))
-           (match (derivation-prerequisites-to-build store drv
-                                                     #:mode (build-mode
-                                                             check))
-             ((input)
-              (string=? (derivation-input-path input)
-                        (derivation-file-name dep))))))))
+      (and (null? (derivation-build-plan store
+                                         (list (derivation-input drv))))
+           (lset= equal?
+                  (derivation-build-plan store
+                                         (list (derivation-input drv))
+                                         #:mode (build-mode check))
+                  (list drv dep))))))
 
 (test-assert "substitution-oracle and #:substitute? #f"
   (with-store store
diff --git a/tests/grafts.scm b/tests/grafts.scm
index e5356decc5..a12c6a5911 100644
--- a/tests/grafts.scm
+++ b/tests/grafts.scm
@@ -44,9 +44,6 @@
 (define %mkdir
   (bootstrap-binary "mkdir"))
 
-(define make-derivation-input
-  (@@ (guix derivations) make-derivation-input))
-
 
 (test-begin "grafts")
 
@@ -355,16 +352,11 @@
                 (p1r-inputs  (filter (match-input p1r) inputs))
                 (p2-inputs   (filter (match-input p2) inputs)))
            (and (equal? p1-inputs
-                        (list (make-derivation-input (derivation-file-name p1)
-                                                     '("one"))))
+                        (list (derivation-input p1 '("one"))))
                 (equal? p1r-inputs
-                        (list
-                         (make-derivation-input (derivation-file-name p1r)
-                                                '("ONE"))))
+                        (list (derivation-input p1r '("ONE"))))
                 (equal? p2-inputs
-                        (list
-                         (make-derivation-input (derivation-file-name p2)
-                                                '("aaa"))))
+                        (list (derivation-input p2 '("aaa"))))
                 (derivation-output-names p2g))))))
 
 (test-assert "graft-derivation, renaming"         ;<http://bugs.gnu.org/23132>
diff --git a/tests/guix-daemon.sh b/tests/guix-daemon.sh
index ca46e34ce9..758f18cc36 100644
--- a/tests/guix-daemon.sh
+++ b/tests/guix-daemon.sh
@@ -196,7 +196,7 @@ done
 
 # Make sure garbage collection from a TCP connection does not work.
 
-tcp_socket="127.0.0.1:9999"
+tcp_socket="127.0.0.1:9998"
 guix-daemon --listen="$tcp_socket" &
 daemon_pid=$!
 
diff --git a/tests/packages.scm b/tests/packages.scm
index bd100bea5b..0478fff237 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -1244,6 +1244,38 @@
     (lambda (key . args)
       key)))
 
+(test-equal "specification->package+output"
+  `((,coreutils "out") (,coreutils "debug"))
+  (list (call-with-values (lambda ()
+                            (specification->package+output "coreutils"))
+          list)
+        (call-with-values (lambda ()
+                            (specification->package+output "coreutils:debug"))
+          list)))
+
+(test-equal "specification->package+output invalid output"
+  'error
+  (catch 'quit
+    (lambda ()
+      (specification->package+output "coreutils:does-not-exist"))
+    (lambda _
+      'error)))
+
+(test-equal "specification->package+output no default output"
+  `(,coreutils #f)
+  (call-with-values
+    (lambda ()
+      (specification->package+output "coreutils" #f))
+    list))
+
+(test-equal "specification->package+output invalid output, no default"
+  'error
+  (catch 'quit
+    (lambda ()
+      (specification->package+output "coreutils:does-not-exist" #f))
+    (lambda _
+      'error)))
+
 (test-equal "find-package-locations"
   (map (lambda (package)
          (cons (package-version package)
diff --git a/tests/syscalls.scm b/tests/syscalls.scm
index 3e267c9f01..eeb223b950 100644
--- a/tests/syscalls.scm
+++ b/tests/syscalls.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -538,6 +538,9 @@
   (> (terminal-columns (open-input-string "Join us now, share the software!"))
      0))
 
+(test-assert "terminal-rows"
+  (> (terminal-rows) 0))
+
 (test-assert "utmpx-entries"
   (match (utmpx-entries)
     (((? utmpx? entries) ...)
diff --git a/tests/ui.scm b/tests/ui.scm
index 1e98e3534b..2138e23369 100644
--- a/tests/ui.scm
+++ b/tests/ui.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,10 +22,12 @@
   #:use-module (guix profiles)
   #:use-module (guix store)
   #:use-module (guix derivations)
+  #:use-module ((gnu packages) #:select (specification->package))
   #:use-module (guix tests)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-19)
+  #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-64)
   #:use-module (ice-9 regex))
 
@@ -260,4 +262,27 @@ Second line" 24))
                                                  "ISO-8859-1")
                              (show-manifest-transaction store m t))))))))
 
+(test-assert "package-relevance"
+  (let ((guile  (specification->package "guile"))
+        (gcrypt (specification->package "guile-gcrypt"))
+        (go     (specification->package "go"))
+        (gnugo  (specification->package "gnugo"))
+        (rx     (cut make-regexp <> regexp/icase))
+        (>0     (cut > <> 0))
+        (=0     zero?))
+    (and (>0 (package-relevance guile
+                                (map rx '("scheme"))))
+         (>0 (package-relevance guile
+                                (map rx '("scheme" "implementation"))))
+         (>0 (package-relevance gcrypt
+                                (map rx '("guile" "crypto"))))
+         (=0 (package-relevance guile
+                                (map rx '("guile" "crypto"))))
+         (>0 (package-relevance go
+                                (map rx '("go"))))
+         (=0 (package-relevance go
+                                (map rx '("go" "game"))))
+         (>0 (package-relevance gnugo
+                                (map rx '("go" "game")))))))
+
 (test-end "ui")