summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--doc/guix.texi19
-rw-r--r--etc/guix-daemon.service.in2
-rw-r--r--etc/guix-publish.service.in2
-rw-r--r--gnu/build/linux-boot.scm4
-rw-r--r--gnu/installer/parted.scm3
-rw-r--r--gnu/local.mk7
-rw-r--r--gnu/packages/aspell.scm70
-rw-r--r--gnu/packages/audio.scm6
-rw-r--r--gnu/packages/backup.scm19
-rw-r--r--gnu/packages/crypto.scm4
-rw-r--r--gnu/packages/debian.scm11
-rw-r--r--gnu/packages/django.scm4
-rw-r--r--gnu/packages/emacs-xyz.scm144
-rw-r--r--gnu/packages/game-development.scm13
-rw-r--r--gnu/packages/gl.scm4
-rw-r--r--gnu/packages/gnome.scm9
-rw-r--r--gnu/packages/gnupg.scm4
-rw-r--r--gnu/packages/gnuzilla.scm67
-rw-r--r--gnu/packages/golang.scm6
-rw-r--r--gnu/packages/guile-xyz.scm8
-rw-r--r--gnu/packages/haskell.scm5
-rw-r--r--gnu/packages/libevent.scm23
-rw-r--r--gnu/packages/linux.scm12
-rw-r--r--gnu/packages/mail.scm4
-rw-r--r--gnu/packages/maths.scm20
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/networking.scm8
-rw-r--r--gnu/packages/password-utils.scm9
-rw-r--r--gnu/packages/patches/borg-fix-hard-link-preloading.patch157
-rw-r--r--gnu/packages/patches/icecat-makeicecat.patch56
-rw-r--r--gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch41
-rw-r--r--gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch41
-rw-r--r--gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch39
-rw-r--r--gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch38
-rw-r--r--gnu/packages/patches/libevent-dns-tests.patch16
-rw-r--r--gnu/packages/patches/polkit-CVE-2018-19788.patch197
-rw-r--r--gnu/packages/photo.scm8
-rw-r--r--gnu/packages/polkit.scm10
-rw-r--r--gnu/packages/python-crypto.scm8
-rw-r--r--gnu/packages/python-xyz.scm17
-rw-r--r--gnu/packages/regex.scm4
-rw-r--r--gnu/packages/sdl.scm11
-rw-r--r--gnu/packages/syncthing.scm12
-rw-r--r--gnu/packages/tls.scm4
-rw-r--r--gnu/packages/vim.scm4
-rw-r--r--gnu/packages/xorg.scm15
-rw-r--r--gnu/services/base.scm109
-rw-r--r--gnu/services/cups.scm2
-rw-r--r--guix/channels.scm4
-rw-r--r--guix/deprecation.scm35
-rw-r--r--guix/diagnostics.scm173
-rw-r--r--guix/import/utils.scm87
-rw-r--r--guix/ui.scm152
54 files changed, 692 insertions, 1040 deletions
diff --git a/Makefile.am b/Makefile.am
index ba4528ce87..80be73e4bf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -144,6 +144,7 @@ MODULES =					\
   guix/svn-download.scm				\
   guix/colors.scm				\
   guix/i18n.scm					\
+  guix/diagnostics.scm				\
   guix/ui.scm					\
   guix/status.scm				\
   guix/build/android-ndk-build-system.scm	\
diff --git a/doc/guix.texi b/doc/guix.texi
index c01eb3a656..996255d9dc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -4219,7 +4219,7 @@ to another like this:
 
 @example
 guix archive --export -r $(readlink -f ~/.guix-profile) | \
-  ssh the-machine guix-archive --import
+  ssh the-machine guix archive --import
 @end example
 
 @noindent
@@ -12232,10 +12232,19 @@ The TCP port to listen for connections.
 The host (and thus, network interface) to listen to.  Use
 @code{"0.0.0.0"} to listen on all the network interfaces.
 
-@item @code{compression-level} (default: @code{3})
-The gzip compression level at which substitutes are compressed.  Use
-@code{0} to disable compression altogether, and @code{9} to get the best
-compression ratio at the expense of increased CPU usage.
+@item @code{compression} (default: @code{'(("gzip" 3))})
+This is a list of compression method/level tuple used when compressing
+substitutes.  For example, to compress all substitutes with @emph{both} lzip
+at level 7 and gzip at level 9, write:
+
+@example
+'(("lzip" 7) ("gzip" 9))
+@end example
+
+Level 9 achieves the best compression ratio at the expense of increased CPU
+usage, whereas level 1 achieves fast compression.
+
+An empty list disables compression altogether.
 
 @item @code{nar-path} (default: @code{"nar"})
 The URL path at which ``nars'' can be fetched.  @xref{Invoking guix
diff --git a/etc/guix-daemon.service.in b/etc/guix-daemon.service.in
index 7b20a91931..407cdd199c 100644
--- a/etc/guix-daemon.service.in
+++ b/etc/guix-daemon.service.in
@@ -7,7 +7,7 @@ Description=Build daemon for GNU Guix
 
 [Service]
 ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild
-Environment=GUIX_LOCPATH='@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
+Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
 RemainAfterExit=yes
 StandardOutput=syslog
 StandardError=syslog
diff --git a/etc/guix-publish.service.in b/etc/guix-publish.service.in
index e61a0314ce..2dc89ef600 100644
--- a/etc/guix-publish.service.in
+++ b/etc/guix-publish.service.in
@@ -7,7 +7,7 @@ Description=Publish the GNU Guix store
 
 [Service]
 ExecStart=@localstatedir@/guix/profiles/per-user/root/current-guix/bin/guix publish --user=nobody --port=8181
-Environment=GUIX_LOCPATH='@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
+Environment='GUIX_LOCPATH=@localstatedir@/guix/profiles/per-user/root/guix-profile/lib/locale' LC_ALL=en_US.utf8
 RemainAfterExit=yes
 StandardOutput=syslog
 StandardError=syslog
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index a35d18ad7c..03f2ea245c 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -517,6 +517,8 @@ upon error."
          (unless (pre-mount)
            (error "pre-mount actions failed")))
 
+       (setenv "EXT2FS_NO_MTAB_OK" "1")
+
        (if root
            ;; The "--root=SPEC" kernel command-line option always provides a
            ;; string, but the string can represent a device, a UUID, or a
@@ -533,6 +535,8 @@ upon error."
        (for-each mount-file-system
                  (remove root-mount-point? mounts))
 
+       (setenv "EXT2FS_NO_MTAB_OK" #f)
+
        (if to-load
            (begin
              (switch-root "/root")
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm
index bd2640d1ad..682e233d9f 100644
--- a/gnu/installer/parted.scm
+++ b/gnu/installer/parted.scm
@@ -1318,7 +1318,8 @@ USER-PARTITIONS, or return nothing."
     (()
      '())
     ((modules ...)
-     `((initrd-modules ',modules)))))
+     `((initrd-modules (append ',modules
+                               %base-initrd-modules))))))
 
 (define (user-partitions->configuration user-partitions)
   "Return the configuration field for USER-PARTITIONS."
diff --git a/gnu/local.mk b/gnu/local.mk
index d6ad896f93..0fb6a22953 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -689,7 +689,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/blender-2.79-newer-ffmpeg.patch		\
   %D%/packages/patches/blender-2.79-python-3.7-fix.patch	\
   %D%/packages/patches/boost-fix-icu-build.patch		\
-  %D%/packages/patches/borg-fix-hard-link-preloading.patch	\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
   %D%/packages/patches/calibre-remove-test-bs4.patch		\
@@ -983,11 +982,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/libcroco-CVE-2017-7960.patch		\
   %D%/packages/patches/libcroco-CVE-2017-7961.patch		\
   %D%/packages/patches/libdrm-symbol-check.patch		\
-  %D%/packages/patches/libevent-dns-tests.patch			\
-  %D%/packages/patches/libevent-2.0-CVE-2016-10195.patch	\
-  %D%/packages/patches/libevent-2.0-CVE-2016-10196.patch	\
-  %D%/packages/patches/libevent-2.0-CVE-2016-10197.patch	\
-  %D%/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch	\
   %D%/packages/patches/libexif-CVE-2016-6328.patch		\
   %D%/packages/patches/libexif-CVE-2017-7544.patch		\
   %D%/packages/patches/libgcrypt-make-yat2m-reproducible.patch	\
@@ -1167,7 +1161,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/plink-endian-detection.patch		\
   %D%/packages/patches/plotutils-libpng-jmpbuf.patch		\
   %D%/packages/patches/podofo-cmake-3.12.patch			\
-  %D%/packages/patches/polkit-CVE-2018-19788.patch		\
   %D%/packages/patches/portaudio-audacity-compat.patch		\
   %D%/packages/patches/portmidi-modular-build.patch		\
   %D%/packages/patches/postgresql-disable-resolve_symlinks.patch	\
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index dd006e8184..1bbe57a4ef 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2016 Christopher Andersson <christopher@8bits.nu>
 ;;; Copyright © 2016 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2016, 2017, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -131,6 +132,22 @@ dictionaries, including personal ones.")
     (home-page "http://aspell.net/")))
 
 
+(define-public aspell-dict-ar
+  (aspell-dictionary "ar" "Arabic"
+                     #:version "1.2-0"
+		     #:prefix "aspell6-"
+                     #:sha256
+                     (base32
+                      "1avw40bp8yi5bnkq64ihm2rldgw34lk89yz281q9bmndh95a47h4")))
+
+(define-public aspell-dict-be
+  (aspell-dictionary "be" "Belarusian"
+                     #:version "0.01"
+                     #:prefix "aspell5-"
+                     #:sha256
+                     (base32
+                      "1svls9p7rsfi3hs0afh0cssj006qb4v1ik2yzqgj8hm10c6as2sm")))
+
 (define-public aspell-dict-ca
   (aspell-dictionary "ca" "Catalan"
                      #:version "2.1.5-1"
@@ -145,6 +162,14 @@ dictionaries, including personal ones.")
                      (base32
                       "01p92qj66cqb346gk7hjfynaap5sbcn85xz07kjfdq623ghr8v5s")))
 
+(define-public aspell-dict-da
+  (aspell-dictionary "da" "Danish"
+                     #:version "1.4.42-1"
+                     #:prefix "aspell5-"
+                     #:sha256
+                     (base32
+                      "1hfkmiyhgrx5lgrb2mffjbdn1hivrm73wcg7x0iid74p2yb0fjpp")))
+
 (define-public aspell-dict-el
   (aspell-dictionary "el" "Greek"
                      #:version "0.08-0"
@@ -174,6 +199,14 @@ dictionaries, including personal ones.")
                      (base32
                       "1k5g328ac1hdpp6fsg57d8md6i0aqcwlszp3gbmp5706wyhpydmd")))
 
+(define-public aspell-dict-fi
+  (aspell-dictionary "fi" "Finnish"
+                     #:version "0.7-0"
+                     #:prefix "aspell6-"
+                     #:sha256
+                     (base32
+                      "07d5s08ba4dd89cmwy9icc01i6fjdykxlb9ravmhdrhi8mxz1mzq")))
+
 (define-public aspell-dict-fr
   (aspell-dictionary "fr" "French"
                      #:version "0.50-3"
@@ -196,6 +229,14 @@ dictionaries, including personal ones.")
                      (base32
                       "13bhbghx5b8g0119g3wxd4n8mlf707y41vlf59irxjj0kynankfn")))
 
+(define-public aspell-dict-hi
+  (aspell-dictionary "hi" "Hindi"
+                     #:version "0.02-0"
+                     #:prefix "aspell6-"
+                     #:sha256
+                     (base32
+                      "0drs374qz4419zx1lf2k281ydxf2750jk5ailafj1x0ncz27h1ys")))
+
 (define-public aspell-dict-it
   (let ((version "2.4-20070901-0")
         (sha256
@@ -217,6 +258,13 @@ dictionaries, including personal ones.")
        (home-page
         "http://linguistico.sourceforge.net/pages/dizionario_italiano.html"))))
 
+(define-public aspell-dict-mi
+  (aspell-dictionary "mi" "Maori"
+                     #:version "0.50-0"
+                     #:sha256
+                     (base32
+                      "12bxplpd348yx8d2q8qvahi9dlp7qf28qmanzhziwc7np8rixvmy")))
+
 (define-public aspell-dict-nl
   (aspell-dictionary "nl" "Dutch"
                      #:version "0.50-2"
@@ -225,6 +273,13 @@ dictionaries, including personal ones.")
                      (base32
                       "0ffb87yjsh211hllpc4b9khqqrblial4pzi1h9r3v465z1yhn3j4")))
 
+(define-public aspell-dict-nn
+  (aspell-dictionary "nn" "Norwegian Nynorsk"
+                     #:version "0.50.1-1"
+                     #:sha256
+                     (base32
+                      "0w2k5l5rbqpliripgqwiqixz5ghnjf7i9ggbrc4ly4vy1ia10rmc")))
+
 (define-public aspell-dict-pt-br
   (aspell-dictionary "pt-br" "Brazilian Portuguese"
                      #:version "20090702-0"
@@ -233,6 +288,14 @@ dictionaries, including personal ones.")
                      (base32
                       "1y09lx9zf2rnp55r16b2vgj953l3538z1vaqgflg9mdvm555bz3p")))
 
+(define-public aspell-dict-pt-pt
+  (aspell-dictionary "pt-pt" "Portuguese"
+                     #:version "20070510-0"
+                     #:prefix "aspell6-"
+                     #:sha256
+                     (base32
+                      "1mnr994cwlag6shy8865ky99lymysiln07mbldcncahg90dagdxq")))
+
 (define-public aspell-dict-ru
   (aspell-dictionary "ru" "Russian"
                      #:version "0.99f7-1"
@@ -248,6 +311,13 @@ dictionaries, including personal ones.")
                      (base32
                       "02jwkjhr32kvyibnyzgx3smbnm576jwdzg3avdf6zxwckhy5fw4v")))
 
+(define-public aspell-dict-uk
+  (aspell-dictionary "uk" "Ukrainian"
+                     #:version "1.4.0-0"
+                     #:sha256
+                     (base32
+                      "137i4njvnslab6l4s291s11xijr5jsy75lbdph32f9y183lagy9m")))
+
 
 ;;;
 ;;; Hunspell packages made from the Aspell word lists.
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 592a1ba94c..4a8548c25b 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -174,14 +174,14 @@ Filter) modules follow the convention of 1V / Octave.")
         "--enable-jack"
         "--enable-sndfile"
         "--enable-samplerate"
-        ;; TODO: enable compilation with avcodec once available.
-        "--disable-avcodec")
+        "--enable-avcodec")
        #:python ,python-2))
     (inputs
      `(("jack" ,jack-1)
        ("libsndfile" ,libsndfile)
        ("libsamplerate" ,libsamplerate)
-       ("fftwf" ,fftwf)))
+       ("fftwf" ,fftwf)
+       ("ffmpeg" ,ffmpeg))) ; for libavcodec
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (home-page "https://aubio.org/")
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 70cc06c736..0bd894f958 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -511,15 +511,13 @@ detection, and lossless compression.")
 (define-public borg
   (package
     (name "borg")
-    (version "1.1.9")
+    (version "1.1.10")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "borgbackup" version))
        (sha256
-        (base32
-         "0x95nhv4h34m8cxycbwc4xdz350saaxlgh727b23bgn4ci7gh3vx"))
-       (patches (search-patches "borg-fix-hard-link-preloading.patch"))
+        (base32 "1pp70p4n5kamvcbl4d8021ggrxhyykmg9isjg4yd3wags8b19d7g"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -541,7 +539,12 @@ detection, and lossless compression.")
            ;; Remove bundled shared libraries.
            (with-directory-excursion "src/borg/algorithms"
              (for-each delete-file-recursively
-                       (list "blake2" "lz4" "zstd")))
+                       (list "blake2" "lz4" "msgpack" "zstd")))
+           ;; Purge some msgpack references from setup.py or the resulting
+           ;; sources will be unbuildable.
+           (substitute* "setup.py"
+             ((".*Extension\\('borg\\.algorithms\\.msgpack\\..*") "")
+             (("msgpack_packer_source, msgpack_unpacker_source") ""))
            #t))))
     (build-system python-build-system)
     (arguments
@@ -565,6 +568,12 @@ detection, and lossless compression.")
                ;; HOME=/homeless-shelter.
                (setenv "HOME" "/tmp")
                #t)))
+         (add-after 'unpack 'use-system-msgpack
+           (lambda _
+             (substitute* "src/borg/helpers.py"
+               (("prefer_system_msgpack = False")
+                "prefer_system_msgpack = True"))
+             #t))
          ;; The tests need to be run after Borg is installed.
          (delete 'check)
          (add-after 'install 'check
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 1d145ef4c7..53137e90e9 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -75,7 +75,7 @@
 (define-public libsodium
   (package
     (name "libsodium")
-    (version "1.0.17")
+    (version "1.0.18")
     (source (origin
             (method url-fetch)
             (uri (list (string-append
@@ -86,7 +86,7 @@
                         "releases/old/libsodium-" version ".tar.gz")))
             (sha256
              (base32
-              "1cf2d9v1gylz1qcy2zappbf526qfmph6gd6fnn3w2b347vixmhqc"))))
+              "1h9ncvj23qbbni958knzsli8dvybcswcjbx0qjjgi922nf848l3g"))))
     (build-system gnu-build-system)
     (synopsis "Portable NaCl-based crypto library")
     (description
diff --git a/gnu/packages/debian.scm b/gnu/packages/debian.scm
index 1b401bc946..f94f49c51b 100644
--- a/gnu/packages/debian.scm
+++ b/gnu/packages/debian.scm
@@ -154,6 +154,11 @@ contains the archive keys used for that.")
                  (("/usr") ubuntu))
                (substitute* "debootstrap"
                  (("=/usr") (string-append "=" out)))
+               ;; Ensure PATH works both in guix and within the debian chroot
+               ;; workaround for: https://bugs.debian.org/929889
+               (substitute* "functions"
+                 (("PATH=/sbin:/usr/sbin:/bin:/usr/bin")
+                  "PATH=$PATH:/sbin:/usr/sbin:/bin:/usr/bin"))
                (substitute* (find-files "scripts" ".")
                  (("/usr/share/zoneinfo") (string-append tzdata "/share/zoneinfo")))
                #t)))
@@ -184,9 +189,5 @@ contains the archive keys used for that.")
     (description "Debootstrap is used to create a Debian base system from
 scratch, without requiring the availability of @code{dpkg} or @code{apt}.
 It does this by downloading .deb files from a mirror site, and carefully
-unpacking them into a directory which can eventually be chrooted into.
-
-It is recommended to run @code{debootstrap --foreign --arch=...} and then
-@code{chroot} into the directory, set the PATH and run @code{debootstrap
---second-stage} after.")
+unpacking them into a directory which can eventually be chrooted into.")
     (license license:gpl2)))
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index 2ef50bd0f7..dcef7370bd 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -41,13 +41,13 @@
 (define-public python-django
   (package
     (name "python-django")
-    (version "1.11.20")
+    (version "1.11.21")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Django" version))
               (sha256
                (base32
-                "0h90kdq8r4y8wa73hdxmyy5psnwlg61dcq3qsa098cpfiyh9vaa3"))))
+                "0adhcw8sx2mgwk9y2j760y96pqbip1ni3sf2v2ls5zxc9x93wwms"))))
     (build-system python-build-system)
     (arguments
      '(#:modules ((srfi srfi-1)
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index c2b3bfddcb..e5b11e5422 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -667,6 +667,37 @@ programs.")
 (define-public haskell-mode
   (deprecated-package "haskell-mode" emacs-haskell-mode))
 
+(define-public emacs-dante
+  (let ((commit "149dded24ca9cdff09a3d859e4b62638db4aadda")
+        (revision "1"))
+    (package
+      (name "emacs-dante")
+      (version (git-version "1.5" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jyp/dante")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0i7kj3d6pfys6si9va5f36qzifyac9mahdl0qh40rya9m0syrkla"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)
+         ("emacs-f" ,emacs-f)
+         ("emacs-flycheck" ,emacs-flycheck)
+         ("emacs-haskell-mode" ,emacs-haskell-mode)
+         ("emacs-s" ,emacs-s)
+         ("emacs-company" ,emacs-company)
+         ("emacs-lcr" ,emacs-lcr)))
+      (home-page "https://github.com/jyp/dante")
+      (synopsis "Minor mode for interactive Haskell")
+      (description
+       "This package provides a minor mode for Haskell development that
+supports type hints, definition-jumping, completion, and more.")
+      (license license:gpl3+))))
+
 (define-public emacs-flycheck
   (package
     (name "emacs-flycheck")
@@ -2523,6 +2554,28 @@ evaluated in the browser, just like Emacs does with an inferior Lisp process
 in Lisp modes.")
     (license license:unlicense)))
 
+(define-public emacs-litable
+  (let ((commit "b0278f3f8dcff424bfbdfdefb545b1fbff33206f"))
+    (package
+      (name "emacs-litable")
+      (version (git-version "0.1" "0" commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/Fuco1/litable.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0bny40hv9a024n01clxns351cs4j4ifhgcc7m4743xncqf612p7g"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)))
+      (home-page "https://github.com/Fuco1/litable/")
+      (synopsis "Dynamic evaluation replacement with Emacs")
+      (description "This packages provides dynamic evaluation in Emacs.")
+      (license license:gpl3+))))
+
 (define-public emacs-string-inflection
   (package
     (name "emacs-string-inflection")
@@ -6969,7 +7022,7 @@ highlights quasi-quoted expressions.")
 (define-public emacspeak
   (package
     (name "emacspeak")
-    (version "49.0")
+    (version "50.0")
     (source
      (origin
        (method url-fetch)
@@ -6978,7 +7031,7 @@ highlights quasi-quoted expressions.")
              version "/emacspeak-" version ".tar.bz2"))
        (sha256
         (base32
-         "1smf26m7201z0bk49lzbw9zhbjfi6wylidfjixb8ylp6g0wnh8dx"))))
+         "0rsj7rzfyqmyidfsjrhjnxi2d43axx6r3gac1fhv5xkkbiiqzqkb"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list (string-append "prefix="
@@ -6986,13 +7039,10 @@ highlights quasi-quoted expressions.")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lisp (string-append out
-                                         "/share/emacs/site-lisp/emacspeak")))
-               (setenv "SHELL" (which "sh"))
-               ;; Configure Emacspeak according to etc/install.org.
-               (invoke "make" "config"))))
+           (lambda _
+             (setenv "SHELL" (which "sh"))
+             ;; Configure Emacspeak according to etc/install.org.
+             (invoke "make" "config")))
          (add-after 'build 'build-espeak
            (lambda _
              (invoke "make" "espeak")))
@@ -7009,7 +7059,7 @@ highlights quasi-quoted expressions.")
                (for-each
                 (lambda (file)
                   (copy-recursively file (string-append lisp "/" file)))
-                '("etc" "info" "js" "lisp" "media" "scapes" "servers" "sounds"
+                '("etc" "info" "js" "lisp" "media" "servers" "sounds"
                   "stumpwm" "xsl"))
                ;; Make sure emacspeak is loaded from the correct directory.
                (substitute* "etc/emacspeak.sh"
@@ -8049,6 +8099,30 @@ from within Emacs.  Restclient runs queries from a plan-text query sheet,
 displays results pretty-printed in XML or JSON with @code{restclient-mode}")
       (license license:public-domain))))
 
+(define-public emacs-whitespace-cleanup-mode
+  (let ((commit "72427144b054b0238a86e1348c45d986b8830d9d")
+        (revision "1"))
+    (package
+      (name "emacs-whitespace-cleanup-mode")
+      (version (git-version "0.10" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/purcell/whitespace-cleanup-mode")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1zlk534jbwrsabcg3kqlzk4h4hwya60lh6q2n1v4yn4rpf5ghsag"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/purcell/whitespace-cleanup-mode")
+      (synopsis "Intelligently call @code{whitespace-cleanup} on save")
+      (description
+       "This package provides a minor mode that calls
+@code{whitespace-cleanup} before saving the current buffer only if the
+whitespace in the buffer was initially clean.")
+      (license license:gpl3+))))
+
 (define-public emacs-eimp
   (let ((version "1.4.0")
         (commit "2e7536fe6d8f7faf1bad7a8ae37faba0162c3b4f")
@@ -8280,6 +8354,56 @@ multiplexer.")
 editing RPM spec files.")
     (license license:gpl2+)))
 
+(define-public emacs-lcr
+  (package
+    (name "emacs-lcr")
+    (version "1.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jyp/lcr")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "0mc55icihxqpf8b05990q1lc2nj2792wcgyr73xsiqx0963sjaj8"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)))
+    (home-page "https://github.com/jyp/lcr")
+    (synopsis "Lightweight coroutines in Emacs Lisp")
+    (description "This package provides macros that can translate code into
+equivalent continuation-passing code, as well as miscellaneous utility
+functions written in continuation-passing style.")
+    (license license:gpl3+)))
+
+(define-public emacs-attrap
+  (let ((commit "3b092bb8f6755a97e6ecb7623b9d2dde58beba4a")
+        (revision "1"))
+    (package
+      (name "emacs-attrap")
+      (version (git-version "1.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/jyp/attrap")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "05d32980saji8ja1pcv65l0s3dq7w0n5hpikbf246hciy1x067pp"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)
+         ("emacs-f" ,emacs-f)
+         ("emacs-flycheck" ,emacs-flycheck)
+         ("emacs-s" ,emacs-s)))
+      (home-page "https://github.com/jyp/attrap")
+      (synopsis "Fix coding error at point")
+      (description "This package provides a command to fix the Flycheck error
+at point.")
+      (license license:gpl3+))))
+
 (define-public emacs-git-messenger
   (package
     (name "emacs-git-messenger")
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index c3177a0b1c..e6b713465c 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1321,24 +1321,15 @@ a 2D editor view.")
 (define-public guile-chickadee
   (package
     (name "guile-chickadee")
-    (version "0.3.0")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://files.dthompson.us/chickadee/"
                                   "chickadee-" version ".tar.gz"))
               (sha256
                (base32
-                "0jl223dybsj5gvs7z4q60gnafj1b7kgi5mx0kj58m5knrp8qwg5h"))))
+                "1fdicsgls5cp0yffcm5vjmav67gv9bxhz1s3jvdvinspxb485x7l"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:make-flags '("GUILE_AUTO_COMPILE=0")
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'patch-godir
-           (lambda _
-             ;; Install compiled '.go' files into the site directory.
-             (substitute* "Makefile.in"
-               (("/ccache") "/site-ccache")))))))
     (propagated-inputs
      `(("guile-opengl" ,guile-opengl)
        ("guile-sdl2" ,guile-sdl2)))
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index bac5f9d008..cfa392191a 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -447,7 +447,7 @@ from software emulation to complete hardware acceleration for modern GPUs.")
                '("src/xdemos/glxdemo" "src/xdemos/glxgears"
                  "src/xdemos/glxinfo" "src/xdemos/glxheads"))
               #t))))))
-    (home-page "http://mesa3d.org/")
+    (home-page "https://mesa3d.org/")
     (synopsis "Utility tools for Mesa")
     (description
      "The mesa-utils package contains several utility tools for Mesa: glxdemo,
@@ -619,7 +619,7 @@ OpenGL graphics API.")
      `(("unzip" ,unzip)))
     (inputs
      `(("mesa" ,mesa)))
-    (home-page "http://www.lonesock.net/soil.html")
+    (home-page "https://www.lonesock.net/soil.html")
     (synopsis "OpenGL texture loading library")
     (description
      "SOIL is a tiny C library used primarily for uploading textures into
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index f1952be840..43b8934fb2 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -4320,15 +4320,15 @@ work and the interface is well tested.")
 (define-public eolie
   (package
     (name "eolie")
-    (version "0.9.60")
+    (version "0.9.62")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gitlab.gnome.org/World/eolie/"
-                                  "uploads/3b2ceb7eb15860587db6886bfdd8a91e/"
+                                  "uploads/bb4aad19272cc636bd17f2f6602127fe/"
                                   "eolie-" version ".tar.xz"))
               (sha256
                (base32
-                "1s9gkzxa6457v6bh0q8n1ijq1chd2jwgvhk5kppsnya7kxvsx8qh"))))
+                "06v76hg87fnhw45dil5vvl20myvaa38n1jqsl0lmkkq6af4mk8wx"))))
     (build-system meson-build-system)
     (arguments
      `(#:glib-or-gtk? #t
@@ -5881,6 +5881,9 @@ devices using the GNOME desktop.")
                  (("\"nm-connection-editor")
                   (string-append "\"" nm-applet
                                  "/bin/nm-connection-editor")))
+               (substitute* '("panels/user-accounts/run-passwd.c")
+                 (("/usr/bin/passwd")
+                  "/run/setuid-programs/passwd"))
                #t))))))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 2ee65015a6..ba8d31eb25 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -224,14 +224,14 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.2.15")
+    (version "2.2.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "0m6lyphbb20i84isdxzfhcbzyc682hdrdv4aqkzmhrdksycf536b"))))
+                "1jqlzp9b3kpfp1dkjqskm67jjrhvf9nh3lzf45321p7m9d2qvgkc"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 825678bfc6..c2356f2a44 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-guix1")
+(define %icecat-version "60.7.0-guix2")
 
 ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball
 ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat'
@@ -450,7 +450,7 @@ from forcing GEXP-PROMISE."
              (base32
               "08x0nijh0ja5jza95a8y030ibk756bn7zlw3a3c4750yilfhqpqa"))))
 
-         (upstream-icecat-base-version "60.3.0") ; maybe older than base-version
+         (upstream-icecat-base-version "60.7.0") ; maybe older than base-version
          (upstream-icecat-gnu-version "1")
          (upstream-icecat-version (string-append upstream-icecat-base-version
                                                  "-gnu"
@@ -463,7 +463,7 @@ from forcing GEXP-PROMISE."
                   "/icecat-" upstream-icecat-version ".tar.bz2"))
             (sha256
              (base32
-              "0icnl64nxcyf7dprpdpygxhabsvyhps8c3ixysj9bcdlj9q34ib1"))))
+              "09xqdfd8rwbn2n6m7n059qf1psbrj5v5kfzm7gg5xng22ddxawv8"))))
 
          (gnuzilla-commit (string-append "v" upstream-icecat-base-version))
          (gnuzilla-source
@@ -475,7 +475,7 @@ from forcing GEXP-PROMISE."
             (file-name (git-file-name "gnuzilla" upstream-icecat-base-version))
             (sha256
              (base32
-              "19wal7hkbb4wvk40hs6d7a5paal2bfday08hwssm02srcbv48fj0"))))
+              "1vqhb0py28hnwcynbaad304ziciz1kn5bv1qg2q4f7g13js3b1hf"))))
 
          (makeicecat-patch
           (local-file (search-patch "icecat-makeicecat.patch"))))
@@ -545,10 +545,6 @@ from forcing GEXP-PROMISE."
                                     #$upstream-icecat-gnu-version "\n"))
                     (("^DATA=.*")
                      "DATA=/tmp/gnuzilla/data\n")
-                    (("^sed .* debian/" all)
-                     (string-append "echo warning: skipped: " all))
-                    (("^debian/rules " all)
-                     (string-append "echo warning: skipped: " all))
                     (("^find extensions/gnu/ ")
                      "find extensions/gnu/ | sort ")
                     (("/bin/sed")
@@ -560,21 +556,19 @@ from forcing GEXP-PROMISE."
                 (rename-file firefox-dir icecat-dir)
 
                 (with-directory-excursion icecat-dir
-                  (for-each mkdir-p '("l10n" "debian/config"))
-                  (call-with-output-file "debian/control" (const #t))
+                  (mkdir "l10n")
                   (format #t "Running makeicecat script...~%")
                   (force-output)
                   (invoke "bash" "/tmp/gnuzilla/makeicecat")
-                  (for-each delete-file-recursively '("l10n" "debian")))
+                  (delete-file-recursively "l10n"))
 
-                (format #t (string-append "Unpacking l10n/* and debian/* from"
+                (format #t (string-append "Unpacking l10n/* from"
                                           " upstream IceCat tarball...~%"))
                 (force-output)
                 (unless (string=? icecat-dir old-icecat-dir)
                   (symlink icecat-dir old-icecat-dir))
                 (invoke "tar" "xf" #+upstream-icecat-source
-                        (string-append old-icecat-dir "/l10n")
-                        (string-append old-icecat-dir "/debian"))
+                        (string-append old-icecat-dir "/l10n"))
 
                 (format #t "Packing new IceCat tarball...~%")
                 (force-output)
@@ -899,43 +893,16 @@ from forcing GEXP-PROMISE."
          (add-before 'configure 'install-desktop-entry
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the '.desktop' file.
-             (define (swallow-%%-directives input output)
-               ;; Interpret '%%ifdef' directives found in the '.desktop' file.
-               (let loop ((state 'top))
-                 (match (read-line input 'concat)
-                   ((? eof-object?)
-                    #t)
-                   ((? string? line)
-                    (cond ((string-prefix? "%%ifdef" line)
-                           (loop 'ifdef))
-                          ((string-prefix? "%%else" line)
-                           (loop 'else))
-                          ((string-prefix? "%%endif" line)
-                           (loop 'top))
-                          (else
-                           (case state
-                             ((top else)
-                              (display line output)
-                              (loop state))
-                             (else
-                              (loop state)))))))))
-
-             (let* ((out (assoc-ref outputs "out"))
+             (let* ((desktop-file "taskcluster/docker/icecat-snap/icecat.desktop")
+                    (out          (assoc-ref outputs "out"))
                     (applications (string-append out "/share/applications")))
-               (call-with-input-file "debian/icecat.desktop.in"
-                 (lambda (input)
-                   (call-with-output-file "debian/icecat.desktop"
-                     (lambda (output)
-                       (swallow-%%-directives input output)))))
-
-               (substitute* "debian/icecat.desktop"
-                 (("@MOZ_DISPLAY_NAME@")
-                  "GNU IceCat")
-                 (("^Exec=@MOZ_APP_NAME@")
-                  (string-append "Exec=" out "/bin/icecat"))
-                 (("@MOZ_APP_NAME@")
-                  "icecat"))
-               (install-file "debian/icecat.desktop" applications)
+               (substitute* desktop-file
+                 (("^Exec=icecat")     (string-append "Exec=" out "/bin/icecat"))
+                 (("IceCat")           "GNU IceCat")
+                 (("Icon=.*")          "Icon=icecat\n")
+                 (("NewWindow")        "new-window")
+                 (("NewPrivateWindow") "new-private-window"))
+               (install-file desktop-file applications)
                #t)))
          (add-after 'install-desktop-entry 'install-icons
            (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 18013a4450..2f5396dd1e 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -1914,7 +1914,7 @@ values.")
 (define-public go-github-com-mattn-go-isatty
   (package
     (name "go-github-com-mattn-go-isatty")
-    (version "0.0.4")
+    (version "0.0.7")
     (source
      (origin
        (method git-fetch)
@@ -1924,8 +1924,10 @@ values.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "0zs92j2cqaw9j8qx1sdxpv3ap0rgbs0vrvi72m40mg8aa36gd39w"))))
+         "1i77aq4gf9as03m8fpfh8fq49n4z9j7548blrcsidm1xhslzk5xd"))))
     (build-system go-build-system)
+    (propagated-inputs
+     `(("go-golang-org-x-sys-unix" ,go-golang-org-x-sys-unix)))
     (arguments
      '(#:import-path "github.com/mattn/go-isatty"))
     (home-page "https://github.com/mattn/go-isatty")
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 43bdcab263..aee908a6f5 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -2238,20 +2238,20 @@ list of components.  This module takes care of that for you.")
     (license license:lgpl3+)))
 
 (define-public guile-gi
-  (let ((commit "91753258892c4a1fbf7ed43ff793a00ac0f77cf6")
-        (revision "0"))
+  (let ((commit "26e885219ae6b31a83766564a2ecfe8c4532346f")
+        (revision "1"))
     (package
       (name "guile-gi")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
-                      (url "https://gitlab.com/janneke/guile-gi.git")
+                      (url "https://github.com/spk121/guile-gi.git")
                       (commit commit)))
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "1i76jfs90p8pbx0bfrjd4sias9380pmjb9x387rx7hav4kvnsd1b"))))
+                  "1prbzhr4sqqihb34l6yfrz6sd8nghwd3q9wvbm36jnl2n3z2nxj8"))))
       (build-system gnu-build-system)
       (native-inputs `(("autoconf" ,autoconf)
                        ("automake" ,automake)
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 822b0499b6..06e255fdcf 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2018, 2019 Timothy Sample <samplet@ngyro.com>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018, 2019 Gabriel Hondet <gabrielhondet@gmail.com>
+;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -6951,7 +6952,7 @@ upon it.")
 (define-public ghc-conduit-extra
   (package
     (name "ghc-conduit-extra")
-    (version "1.3.0")
+    (version "1.3.1.1")
     (source
      (origin
        (method url-fetch)
@@ -6960,7 +6961,7 @@ upon it.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1bi2b6kdzy5f9glq46jzsk02has95jkxqz0cchpbmnakzhjwjh9c"))))
+         "0jaj350vv6mbb26gdwcqz4gwzfzrjydv5pis2da49wz1npbakcfw"))))
     (build-system haskell-build-system)
     (inputs
      `(("ghc-conduit" ,ghc-conduit)
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index bb96fd6abf..7982a12dfd 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -58,7 +58,7 @@
      `(("python" ,python-2)))           ; for 'event_rpcgen.py'
     (native-inputs
      `(("which" ,which)))
-    (home-page "http://libevent.org/")
+    (home-page "https://libevent.org/")
     (synopsis "Event notification library")
     (description
      "The libevent API provides a mechanism to execute a callback
@@ -72,27 +72,6 @@ then add or remove events dynamically without having to change the event
 loop.")
     (license bsd-3)))
 
-(define-public libevent-2.0
-  (package
-    (inherit libevent)
-    (version "2.0.22")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/libevent/libevent/releases/download/release-"
-                    version "-stable/libevent-" version "-stable.tar.gz"))
-              (sha256
-               (base32
-                "18qz9qfwrkakmazdlwxvjmw8p76g70n3faikwvdwznns1agw9hki"))
-              (patches
-               (search-patches
-                "libevent-dns-tests.patch"
-                "libevent-2.0-CVE-2016-10195.patch"
-                "libevent-2.0-CVE-2016-10196.patch"
-                "libevent-2.0-CVE-2016-10197.patch"
-                "libevent-2.0-evbuffer-add-use-last-with-datap.patch"))))
-    (arguments '())))
-
 (define-public libev
   (package
     (name "libev")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 62f9b12ae5..6368359969 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -430,8 +430,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.6")
-(define %linux-libre-hash "0m7yi23wlgrh16z5z9dxb7dd64i2irrkdwxi71i88mradn55iq42")
+(define %linux-libre-version "5.1.7")
+(define %linux-libre-hash "0hr4sbapdpgdkb6xg1f7bpc31242yiqdvy5sfpymsrzfslr8vwy1")
 
 (define %linux-libre-5.1-patches
   (list %boot-logo-patch
@@ -448,8 +448,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.47")
-(define %linux-libre-4.19-hash "155rn6f555d2r1bqzi74zdif44ay7gk25xxjgw36s9n26dml8wf7")
+(define %linux-libre-4.19-version "4.19.48")
+(define %linux-libre-4.19-hash "04jwwzc9wbhx33i4bhm3vbs52vxlb8kjdmfjpfild94xbk8m2wy4")
 
 (define %linux-libre-4.19-patches
   (list %boot-logo-patch
@@ -957,7 +957,7 @@ slabtop, and skill.")
 (define-public e2fsprogs
   (package
     (name "e2fsprogs")
-    (version "1.44.5")
+    (version "1.45.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -966,7 +966,7 @@ slabtop, and skill.")
                    name "-" version ".tar.xz"))
              (sha256
               (base32
-               "1ff56h6h1h17sj2zvlddv5c88nmbx46p1fcbh6b0s5k9kl3b6pms"))))
+               "02g0cm72sgz709s9pkg4mvj56m7bgs7rwnyc2cp7cvg3j6pcjlj9"))))
     (build-system gnu-build-system)
     (inputs `(("util-linux" ,util-linux)))
     (native-inputs `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 114ef32a9d..4edc62ed1d 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.11.4")
+    (version "1.12.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://bitbucket.org/mutt/mutt/downloads/"
                                  "mutt-" version ".tar.gz"))
              (sha256
               (base32
-               "0098pr4anmq2a0id8wfi2vci3cgcfwf9k4q411w22xn8lrz3aldn"))
+               "13zr2fpql33sdbsjsiaa952js5bvphc1x4lqsj36qyzdhj3l84na"))
              (patches (search-patches "mutt-store-references.patch"))))
     (build-system gnu-build-system)
     (inputs
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 4741a0d5ec..a0a077cf99 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -2760,7 +2760,7 @@ to BMP, JPEG or PNG image formats.")
 (define-public maxima
   (package
     (name "maxima")
-    (version "5.42.2")
+    (version "5.43.0")
     (source
      (origin
        (method url-fetch)
@@ -2768,7 +2768,7 @@ to BMP, JPEG or PNG image formats.")
                            version "-source/" name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0kdncy6137sg3rradirxzj10mkcvafxd892zlclwhr9sa7b12zhn"))
+         "0xyahp4c6509haxh4n1swiqm3421gplkdisa0zypclh3252sbzfw"))
        (patches (search-patches "maxima-defsystem-mkdir.patch"))))
     (build-system gnu-build-system)
     (inputs
@@ -2802,11 +2802,18 @@ to BMP, JPEG or PNG image formats.")
              (let* ((sed (string-append (assoc-ref inputs "sed") "/bin/sed"))
                     (coreutils (assoc-ref inputs "coreutils"))
                     (dirname (string-append coreutils "/bin/dirname"))
-                    (head (string-append coreutils "/bin/head")))
+                    (head (string-append coreutils "/bin/head"))
+                    (perl (string-append (assoc-ref inputs "perl") "/bin/perl"))
+                    (python (string-append (assoc-ref inputs "python")
+                                           "/bin/python3")))
                (substitute* "src/maxima.in"
                  (("sed ") (string-append sed " "))
                  (("dirname") dirname)
                  (("head") head))
+               (substitute* "doc/info/Makefile.in"
+                 (("/usr/bin/env perl") perl))
+               (substitute* "doc/info/build_html.sh.in"
+                 (("python") python))
                #t)))
          (add-before 'check 'pre-check
            (lambda _
@@ -2838,9 +2845,6 @@ to BMP, JPEG or PNG image formats.")
                  (mkdir-p "share/emacs")
                  (mkdir-p "share/doc")
                  (symlink
-                  (string-append datadir "/emacs/")
-                  (string-append out "/share/emacs/site-lisp"))
-                 (symlink
                   (string-append datadir "/doc/")
                   (string-append out "/share/doc/maxima"))
                  (with-atomic-file-replacement
@@ -2871,7 +2875,7 @@ point numbers.")
 (define-public wxmaxima
   (package
     (name "wxmaxima")
-    (version "19.03.1")
+    (version "19.05.7")
     (source
      (origin
        (method git-fetch)
@@ -2881,7 +2885,7 @@ point numbers.")
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1qkf4jg86xnn3wk3782ffmfz12axb92dkjagcz3ffzw2wi1rclml"))))
+         "0zaz71fh156b9inrxf86scnix247al5pl9v18cxhjxcm0lanqxdp"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)))
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index f631dbd7c6..1d75592795 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -91,7 +91,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.21.8")
+    (version "0.21.9")
     (source (origin
               (method url-fetch)
               (uri
@@ -100,7 +100,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "0mwpkbjsljj1khlnnjanvw3pgxbhsdl0bh2k9bxnpijn2gqq7q13"))))
+                "0ghda8g9q0bi6nrvl6n756d8f45spqpblkh77mnb4k9gmiv57qir"))))
     (build-system meson-build-system)
     (arguments
      `(#:configure-flags '("-Ddocumentation=true") ; The default is 'false'...
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index bb11154978..2ea65f270c 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1485,15 +1485,15 @@ procedure calls (RPCs).")
 (define-public openvswitch
   (package
     (name "openvswitch")
-    (version "2.10.1")
+    (version "2.11.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://openvswitch.org/releases/openvswitch-"
+                    "https://www.openvswitch.org/releases/openvswitch-"
                     version ".tar.gz"))
               (sha256
                (base32
-                "103wi6k8xal0z1pyy680gms56skagh6jawa2ja588ljr55jcg4sg"))))
+                "1p5mv44jaslvrr1ym15smqna19y0gi4vqcsyj58625vv9bj6laf1"))))
     (build-system gnu-build-system)
     (arguments
      '(;; FIXME: many tests fail with:
@@ -1529,7 +1529,7 @@ procedure calls (RPCs).")
      `(("libcap-ng" ,libcap-ng)
        ("openssl" ,openssl)))
     (synopsis "Virtual network switch")
-    (home-page "http://www.openvswitch.org/")
+    (home-page "https://www.openvswitch.org/")
     (description
      "Open vSwitch is a multilayer virtual switch.  It is designed to enable
 massive network automation through programmatic extension, while still
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 19595a2a62..ed890f73c3 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -310,6 +310,15 @@ and vice versa.")
        (sha256
         (base32 "1rimpjsdnmw8f5b7k558cic41p2qy2n2yrlqp5vh7mp4162hk0py"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-dict
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (begin
+               (chmod (string-append "util/cracklib-format") #o755)
+               (apply invoke "make" "dict" make-flags)
+               #t))))))
     (synopsis "Password checking library")
     (home-page "https://github.com/cracklib/cracklib")
     (description
diff --git a/gnu/packages/patches/borg-fix-hard-link-preloading.patch b/gnu/packages/patches/borg-fix-hard-link-preloading.patch
deleted file mode 100644
index 92a4e22674..0000000000
--- a/gnu/packages/patches/borg-fix-hard-link-preloading.patch
+++ /dev/null
@@ -1,157 +0,0 @@
-Fix a bug that would cause the test suite to hang:
-
-https://github.com/borgbackup/borg/issues/4350
-
-Patch copied from upstream source repository:
-
-https://github.com/borgbackup/borg/commit/18242ab9e2f26c450b8507aa1d5eceadab8ad027
-
-From 18242ab9e2f26c450b8507aa1d5eceadab8ad027 Mon Sep 17 00:00:00 2001
-From: Thomas Waldmann <tw@waldmann-edv.de>
-Date: Thu, 2 May 2019 21:02:26 +0200
-Subject: [PATCH] preload chunks for hardlink slaves w/o preloaded master,
- fixes #4350
-
-also split the hardlink extraction test into 2 tests.
-
-(cherry picked from commit f33f318d816505161d1449a02ddfdeb97d6fe80a)
----
- src/borg/archive.py            | 42 +++++++++++++++++++++++++++++-----
- src/borg/archiver.py           |  5 ++--
- src/borg/testsuite/archiver.py | 20 +++++++++-------
- 3 files changed, 51 insertions(+), 16 deletions(-)
-
-diff --git a/src/borg/archive.py b/src/borg/archive.py
-index adc1f42c..0793672a 100644
---- a/src/borg/archive.py
-+++ b/src/borg/archive.py
-@@ -192,7 +192,7 @@ def __init__(self, repository, key):
-         self.repository = repository
-         self.key = key
- 
--    def unpack_many(self, ids, filter=None, preload=False):
-+    def unpack_many(self, ids, filter=None, partial_extract=False, preload=False, hardlink_masters=None):
-         """
-         Return iterator of items.
- 
-@@ -209,12 +209,40 @@ def unpack_many(self, ids, filter=None, preload=False):
-             for item in items:
-                 if 'chunks' in item:
-                     item.chunks = [ChunkListEntry(*e) for e in item.chunks]
-+
-+            def preload(chunks):
-+                self.repository.preload([c.id for c in chunks])
-+
-             if filter:
-                 items = [item for item in items if filter(item)]
-+
-             if preload:
--                for item in items:
--                    if 'chunks' in item:
--                        self.repository.preload([c.id for c in item.chunks])
-+                if filter and partial_extract:
-+                    # if we do only a partial extraction, it gets a bit
-+                    # complicated with computing the preload items: if a hardlink master item is not
-+                    # selected (== not extracted), we will still need to preload its chunks if a
-+                    # corresponding hardlink slave is selected (== is extracted).
-+                    # due to a side effect of the filter() call, we now have hardlink_masters dict populated.
-+                    masters_preloaded = set()
-+                    for item in items:
-+                        if 'chunks' in item:  # regular file, maybe a hardlink master
-+                            preload(item.chunks)
-+                            # if this is a hardlink master, remember that we already preloaded it:
-+                            if 'source' not in item and hardlinkable(item.mode) and item.get('hardlink_master', True):
-+                                masters_preloaded.add(item.path)
-+                        elif 'source' in item and hardlinkable(item.mode):  # hardlink slave
-+                            source = item.source
-+                            if source not in masters_preloaded:
-+                                # we only need to preload *once* (for the 1st selected slave)
-+                                chunks, _ = hardlink_masters[source]
-+                                preload(chunks)
-+                                masters_preloaded.add(source)
-+                else:
-+                    # easy: we do not have a filter, thus all items are selected, thus we need to preload all chunks.
-+                    for item in items:
-+                        if 'chunks' in item:
-+                            preload(item.chunks)
-+
-             for item in items:
-                 yield item
- 
-@@ -433,8 +461,10 @@ def item_filter(self, item, filter=None):
-             return False
-         return filter(item) if filter else True
- 
--    def iter_items(self, filter=None, preload=False):
--        for item in self.pipeline.unpack_many(self.metadata.items, preload=preload,
-+    def iter_items(self, filter=None, partial_extract=False, preload=False, hardlink_masters=None):
-+        assert not (filter and partial_extract and preload) or hardlink_masters is not None
-+        for item in self.pipeline.unpack_many(self.metadata.items, partial_extract=partial_extract,
-+                                              preload=preload, hardlink_masters=hardlink_masters,
-                                               filter=lambda item: self.item_filter(item, filter)):
-             yield item
- 
-diff --git a/src/borg/archiver.py b/src/borg/archiver.py
-index 957959d6..dcc20455 100644
---- a/src/borg/archiver.py
-+++ b/src/borg/archiver.py
-@@ -755,7 +755,8 @@ def peek_and_store_hardlink_masters(item, matched):
-         else:
-             pi = None
- 
--        for item in archive.iter_items(filter, preload=True):
-+        for item in archive.iter_items(filter, partial_extract=partial_extract,
-+                                       preload=True, hardlink_masters=hardlink_masters):
-             orig_path = item.path
-             if strip_components:
-                 item.path = os.sep.join(orig_path.split(os.sep)[strip_components:])
-@@ -997,7 +998,7 @@ def item_to_tarinfo(item, original_path):
-                 return None, stream
-             return tarinfo, stream
- 
--        for item in archive.iter_items(filter, preload=True):
-+        for item in archive.iter_items(filter, preload=True, hardlink_masters=hardlink_masters):
-             orig_path = item.path
-             if strip_components:
-                 item.path = os.sep.join(orig_path.split(os.sep)[strip_components:])
-diff --git a/src/borg/testsuite/archiver.py b/src/borg/testsuite/archiver.py
-index c35ad800..935b3d79 100644
---- a/src/borg/testsuite/archiver.py
-+++ b/src/borg/testsuite/archiver.py
-@@ -823,7 +823,18 @@ def test_mount_hardlinks(self):
-             assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
- 
-     @requires_hardlinks
--    def test_extract_hardlinks(self):
-+    def test_extract_hardlinks1(self):
-+        self._extract_hardlinks_setup()
-+        with changedir('output'):
-+            self.cmd('extract', self.repository_location + '::test')
-+            assert os.stat('input/source').st_nlink == 4
-+            assert os.stat('input/abba').st_nlink == 4
-+            assert os.stat('input/dir1/hardlink').st_nlink == 4
-+            assert os.stat('input/dir1/subdir/hardlink').st_nlink == 4
-+            assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
-+
-+    @requires_hardlinks
-+    def test_extract_hardlinks2(self):
-         self._extract_hardlinks_setup()
-         with changedir('output'):
-             self.cmd('extract', self.repository_location + '::test', '--strip-components', '2')
-@@ -839,13 +850,6 @@ def test_extract_hardlinks(self):
-             assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
-             assert os.stat('input/dir1/aaaa').st_nlink == 2
-             assert os.stat('input/dir1/source2').st_nlink == 2
--        with changedir('output'):
--            self.cmd('extract', self.repository_location + '::test')
--            assert os.stat('input/source').st_nlink == 4
--            assert os.stat('input/abba').st_nlink == 4
--            assert os.stat('input/dir1/hardlink').st_nlink == 4
--            assert os.stat('input/dir1/subdir/hardlink').st_nlink == 4
--            assert open('input/dir1/subdir/hardlink', 'rb').read() == b'123456'
- 
-     def test_extract_include_exclude(self):
-         self.cmd('init', '--encryption=repokey', self.repository_location)
--- 
-2.21.0
-
diff --git a/gnu/packages/patches/icecat-makeicecat.patch b/gnu/packages/patches/icecat-makeicecat.patch
index 2a11bf0b70..7d4f774c83 100644
--- a/gnu/packages/patches/icecat-makeicecat.patch
+++ b/gnu/packages/patches/icecat-makeicecat.patch
@@ -3,10 +3,10 @@ in a snippet without network access.  After this patch is applied, some
 additional changes will be made using 'substitute*'.
 
 diff --git a/makeicecat b/makeicecat
-index aa46b94..db27a86 100644
+index 5a4390b..fcfa143 100644
 --- a/makeicecat
 +++ b/makeicecat
-@@ -36,75 +36,75 @@ export DEBFULLNAME="Ruben Rodriguez"
+@@ -29,55 +29,55 @@ SOURCEDIR=icecat-$FFVERSION
  
  DATA="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"/data
  
@@ -25,6 +25,7 @@ index aa46b94..db27a86 100644
 -wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
 -gpg --recv-keys --keyserver keyserver.ubuntu.com 24C6F355
 -gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
+-echo -n 0a5f0c1d8d1e9443d85083d37fec32e5cc15c1001ea992d49745490065b4a023 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
 -
 -echo Extracting Firefox tarball
 -tar -xf firefox-${FFVERSION}esr.source.tar.xz
@@ -36,6 +37,7 @@ index aa46b94..db27a86 100644
 +# wget -N https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${FFVERSION}esr/source/firefox-${FFVERSION}esr.source.tar.xz.asc
 +# gpg --recv-keys --keyserver keyserver.ubuntu.com 24C6F355
 +# gpg --verify firefox-${FFVERSION}esr.source.tar.xz.asc
++# echo -n 0a5f0c1d8d1e9443d85083d37fec32e5cc15c1001ea992d49745490065b4a023 firefox-${FFVERSION}esr.source.tar.xz |sha256sum -c -
 +# 
 +# echo Extracting Firefox tarball
 +# tar -xf firefox-${FFVERSION}esr.source.tar.xz
@@ -43,43 +45,6 @@ index aa46b94..db27a86 100644
 +# mv firefox-${FFVERSION} $SOURCEDIR
  
  ###############################################################################
- # Retrieve /debian from Ubuntu
- ###############################################################################
- 
--rm -rf firefox.$CODENAME
--bzr branch https://code.launchpad.net/~mozillateam/firefox/firefox.$CODENAME
--cd firefox.$CODENAME
--bzr revert -r$REVISION
--echo '3.0 (native)' > debian/source/format
--
--for PATCH in ubuntu-bookmarks.patch ubuntu-ua-string-changes.patch unity-menubar.patch ubuntu-search-defaults.patch fix-make-package-tests-without-webrtc.patch revert-upstream-search-engine-changes.patch
--do
--  rm debian/patches/$PATCH
--  sed "/$PATCH/d" -i debian/patches/series
--done
--sed "/test-/d" -i debian/patches/series
--cd ..
--
--mv firefox.$CODENAME/debian $SOURCEDIR
--rm -rf firefox.$CODENAME
-+# rm -rf firefox.$CODENAME
-+# bzr branch https://code.launchpad.net/~mozillateam/firefox/firefox.$CODENAME
-+# cd firefox.$CODENAME
-+# bzr revert -r$REVISION
-+# echo '3.0 (native)' > debian/source/format
-+# 
-+# for PATCH in ubuntu-bookmarks.patch ubuntu-ua-string-changes.patch unity-menubar.patch ubuntu-search-defaults.patch fix-make-package-tests-without-webrtc.patch revert-upstream-search-engine-changes.patch
-+# do
-+#   rm debian/patches/$PATCH
-+#   sed "/$PATCH/d" -i debian/patches/series
-+# done
-+# sed "/test-/d" -i debian/patches/series
-+# cd ..
-+# 
-+# mv firefox.$CODENAME/debian $SOURCEDIR
-+# rm -rf firefox.$CODENAME
- 
- ###############################################################################
  # Retrieve l10n
  ###############################################################################
  
@@ -133,19 +98,10 @@ index aa46b94..db27a86 100644
  
  #for patch in $DATA/patches/*; do
  #    echo Patching with file: $patch
-@@ -720,7 +720,7 @@ debian/rules debian/control
- touch -d "yesterday" debian/control
- debian/rules debian/control
- 
--echo | dch -b -D stable -v "$ICECATVERSION"  "Converted into IceCat (http://www.gnu.org/software/gnuzilla/)"
-+# echo | dch -b -D stable -v "$ICECATVERSION"  "Converted into IceCat (http://www.gnu.org/software/gnuzilla/)"
- sed "1s/firefox/icecat/" -i debian/changelog
- 
- touch configure js/src/configure
-@@ -734,6 +734,6 @@ sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
+@@ -590,6 +590,6 @@ sed 's/777/755/;' -i toolkit/crashreporter/google-breakpad/Makefile.in
+ # Fix CVE-2012-3386
  /bin/sed 's/chmod a+w/chmod u+w/' -i ./js/src/ctypes/libffi/Makefile.in ./toolkit/crashreporter/google-breakpad/Makefile.in ./toolkit/crashreporter/google-breakpad/src/third_party/glog/Makefile.in || true
  
- 
 -cd ..
 -echo Packaging tarball
 -tar cfj icecat-$ICECATVERSION.tar.bz2 $SOURCEDIR
diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch
deleted file mode 100644
index bffe2c454c..0000000000
--- a/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-Fix CVE-2016-10195 (buffer overread in libevent's DNS code):
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10195
-https://github.com/libevent/libevent/issues/317
-
-Patch copied from upstream source repository:
-
-https://github.com/libevent/libevent/commit/96f64a022014a208105ead6c8a7066018449d86d
-
-From 3c570970516f48da35f42fef98276531fcc0abaa Mon Sep 17 00:00:00 2001
-From: Azat Khuzhin <a3at.mail@gmail.com>
-Date: Mon, 1 Feb 2016 17:32:09 +0300
-Subject: [PATCH] evdns: name_parse(): fix remote stack overread
-
----
- evdns.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/evdns.c b/evdns.c
-index 60b10485..137c24ea 100644
---- a/evdns.c
-+++ b/evdns.c
-@@ -960,7 +960,6 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) {
- 
- 	for (;;) {
- 		u8 label_len;
--		if (j >= length) return -1;
- 		GET8(label_len);
- 		if (!label_len) break;
- 		if (label_len & 0xc0) {
-@@ -981,6 +980,7 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) {
- 			*cp++ = '.';
- 		}
- 		if (cp + label_len >= end) return -1;
-+		if (j + label_len > length) return -1;
- 		memcpy(cp, packet + j, label_len);
- 		cp += label_len;
- 		j += label_len;
--- 
-2.11.0
-
diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch
deleted file mode 100644
index 03f96e938b..0000000000
--- a/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-Fix CVE-2016-10196 (buffer overflow in evutil):
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10196
-https://github.com/libevent/libevent/issues/318
-
-Patch copied from upstream source repository:
-
-https://github.com/libevent/libevent/commit/329acc18a0768c21ba22522f01a5c7f46cacc4d5
-
-From 28bdc2f3f62259d21ccaf7be2b60ef0a53e6f342 Mon Sep 17 00:00:00 2001
-From: Azat Khuzhin <a3at.mail@gmail.com>
-Date: Sun, 31 Jan 2016 00:57:16 +0300
-Subject: [PATCH] evutil_parse_sockaddr_port(): fix buffer overflow
-
----
- evutil.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/evutil.c b/evutil.c
-index 33445170..e2dfe6e4 100644
---- a/evutil.c
-+++ b/evutil.c
-@@ -1808,12 +1808,12 @@ evutil_parse_sockaddr_port(const char *ip_as_string, struct sockaddr *out, int *
- 
- 	cp = strchr(ip_as_string, ':');
- 	if (*ip_as_string == '[') {
--		int len;
-+		size_t len;
- 		if (!(cp = strchr(ip_as_string, ']'))) {
- 			return -1;
- 		}
--		len = (int) ( cp-(ip_as_string + 1) );
--		if (len > (int)sizeof(buf)-1) {
-+		len = ( cp-(ip_as_string + 1) );
-+		if (len > sizeof(buf)-1) {
- 			return -1;
- 		}
- 		memcpy(buf, ip_as_string+1, len);
--- 
-2.11.0
-
diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch
deleted file mode 100644
index c62a328627..0000000000
--- a/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-Fix CVE-2016-10197 (out of bounds read on empty hostnames in evdns):
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10197
-https://github.com/libevent/libevent/issues/332
-
-Patch copied from upstream source repository:
-
-https://github.com/libevent/libevent/commit/ec65c42052d95d2c23d1d837136d1cf1d9ecef9e
-
-From a0305cec166a5bc89f1eb362510cc4cd25ecc0bc Mon Sep 17 00:00:00 2001
-From: Azat Khuzhin <a3at.mail@gmail.com>
-Date: Fri, 25 Mar 2016 00:33:47 +0300
-Subject: [PATCH] evdns: fix searching empty hostnames
-
----
- evdns.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/evdns.c b/evdns.c
-index 137c24ea..6191c677 100644
---- a/evdns.c
-+++ b/evdns.c
-@@ -3122,9 +3122,12 @@ search_set_from_hostname(struct evdns_base *base) {
- static char *
- search_make_new(const struct search_state *const state, int n, const char *const base_name) {
- 	const size_t base_len = strlen(base_name);
--	const char need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1;
-+	char need_to_append_dot;
- 	struct search_domain *dom;
- 
-+	if (!base_len) return NULL;
-+	need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1;
-+
- 	for (dom = state->head; dom; dom = dom->next) {
- 		if (!n--) {
- 			/* this is the postfix we want */
--- 
-2.11.0
-
diff --git a/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch b/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch
deleted file mode 100644
index 0253700bf6..0000000000
--- a/gnu/packages/patches/libevent-2.0-evbuffer-add-use-last-with-datap.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From a8769ef12d7e223e33fc47bed03fba2bfa2f3536 Mon Sep 17 00:00:00 2001
-From: Marcus Sundberg <marcus@marcussundberg.com>
-Date: Sat, 26 Mar 2016 20:11:43 +0100
-Subject: [PATCH] evbuffer_add: Use last_with_datap if set, not last.
-
-evbuffer_add() would always put data in the last chain, even if there
-was available space in a previous chain, and in doing so it also
-failed to update last_with_datap, causing subsequent calls to other
-functions that do look at last_with_datap to add data in the middle
-of the evbuffer instead of at the end.
-
-Fixes the evbuffer_add() part of issue #335, and the evbuffer/add2 and
-evbuffer/add3 tests, and also prevents wasting space available in the
-chain pointed to by last_with_datap.
----
- buffer.c | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/buffer.c b/buffer.c
-index 7cca0e8a..f378b731 100644
---- a/buffer.c
-+++ b/buffer.c
-@@ -1732,7 +1732,11 @@ evbuffer_add(struct evbuffer *buf, const void *data_in, size_t datlen)
- 		goto done;
- 	}
- 
--	chain = buf->last;
-+	if (*buf->last_with_datap == NULL) {
-+		chain = buf->last;
-+	} else {
-+		chain = *buf->last_with_datap;
-+	}
- 
- 	/* If there are no chains allocated for this buffer, allocate one
- 	 * big enough to hold all the data. */
--- 
-2.12.0
-
diff --git a/gnu/packages/patches/libevent-dns-tests.patch b/gnu/packages/patches/libevent-dns-tests.patch
deleted file mode 100644
index 6ff8aaaa7b..0000000000
--- a/gnu/packages/patches/libevent-dns-tests.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Disable tests that rely on usable DNS lookups, which aren't available
-in build chroots.
-
---- libevent-2.0.21-stable/test/regress_dns.c	2013-01-20 22:32:09.000000000 +0100
-+++ libevent-2.0.21-stable/test/regress_dns.c	2013-01-20 22:32:30.000000000 +0100
-@@ -1827,10 +1827,6 @@ end:
- 
- struct testcase_t dns_testcases[] = {
- 	DNS_LEGACY(server, TT_FORK|TT_NEED_BASE),
--	DNS_LEGACY(gethostbyname, TT_FORK|TT_NEED_BASE|TT_NEED_DNS),
--	DNS_LEGACY(gethostbyname6, TT_FORK|TT_NEED_BASE|TT_NEED_DNS),
--	DNS_LEGACY(gethostbyaddr, TT_FORK|TT_NEED_BASE|TT_NEED_DNS),
--	{ "resolve_reverse", dns_resolve_reverse, TT_FORK, NULL, NULL },
- 	{ "search", dns_search_test, TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
- 	{ "search_cancel", dns_search_cancel_test,
- 	  TT_FORK|TT_NEED_BASE, &basic_setup, NULL },
diff --git a/gnu/packages/patches/polkit-CVE-2018-19788.patch b/gnu/packages/patches/polkit-CVE-2018-19788.patch
deleted file mode 100644
index 58cde6c5dc..0000000000
--- a/gnu/packages/patches/polkit-CVE-2018-19788.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-Fix CVE-2018-19788:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19788
-https://gitlab.freedesktop.org/polkit/polkit/issues/74
-
-Patch copied from upstream source repository:
-
-https://gitlab.freedesktop.org/polkit/polkit/commit/2cb40c4d5feeaa09325522bd7d97910f1b59e379
-
-From 2cb40c4d5feeaa09325522bd7d97910f1b59e379 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
-Date: Mon, 3 Dec 2018 10:28:58 +0100
-Subject: [PATCH] Allow negative uids/gids in PolkitUnixUser and Group objects
-
-(uid_t) -1 is still used as placeholder to mean "unset". This is OK, since
-there should be no users with such number, see
-https://systemd.io/UIDS-GIDS#special-linux-uids.
-
-(uid_t) -1 is used as the default value in class initialization.
-
-When a user or group above INT32_MAX is created, the numeric uid or
-gid wraps around to negative when the value is assigned to gint, and
-polkit gets confused. Let's accept such gids, except for -1.
-
-A nicer fix would be to change the underlying type to e.g. uint32 to
-not have negative values. But this cannot be done without breaking the
-API, so likely new functions will have to be added (a
-polkit_unix_user_new variant that takes a unsigned, and the same for
-_group_new, _set_uid, _get_uid, _set_gid, _get_gid, etc.). This will
-require a bigger patch.
-
-Fixes https://gitlab.freedesktop.org/polkit/polkit/issues/74.
----
- src/polkit/polkitunixgroup.c   | 15 +++++++++++----
- src/polkit/polkitunixprocess.c | 12 ++++++++----
- src/polkit/polkitunixuser.c    | 13 ++++++++++---
- 3 files changed, 29 insertions(+), 11 deletions(-)
-
-diff --git a/src/polkit/polkitunixgroup.c b/src/polkit/polkitunixgroup.c
-index c57a1aa..309f689 100644
---- a/src/polkit/polkitunixgroup.c
-+++ b/src/polkit/polkitunixgroup.c
-@@ -71,6 +71,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixGroup, polkit_unix_group, G_TYPE_OBJECT,
- static void
- polkit_unix_group_init (PolkitUnixGroup *unix_group)
- {
-+  unix_group->gid = -1; /* (git_t) -1 is not a valid GID under Linux */
- }
- 
- static void
-@@ -100,11 +101,14 @@ polkit_unix_group_set_property (GObject      *object,
-                                GParamSpec   *pspec)
- {
-   PolkitUnixGroup *unix_group = POLKIT_UNIX_GROUP (object);
-+  gint val;
- 
-   switch (prop_id)
-     {
-     case PROP_GID:
--      unix_group->gid = g_value_get_int (value);
-+      val = g_value_get_int (value);
-+      g_return_if_fail (val != -1);
-+      unix_group->gid = val;
-       break;
- 
-     default:
-@@ -131,9 +135,9 @@ polkit_unix_group_class_init (PolkitUnixGroupClass *klass)
-                                    g_param_spec_int ("gid",
-                                                      "Group ID",
-                                                      "The UNIX group ID",
--                                                     0,
-+                                                     G_MININT,
-                                                      G_MAXINT,
--                                                     0,
-+                                                     -1,
-                                                      G_PARAM_CONSTRUCT |
-                                                      G_PARAM_READWRITE |
-                                                      G_PARAM_STATIC_NAME |
-@@ -166,9 +170,10 @@ polkit_unix_group_get_gid (PolkitUnixGroup *group)
-  */
- void
- polkit_unix_group_set_gid (PolkitUnixGroup *group,
--                          gint gid)
-+                           gint gid)
- {
-   g_return_if_fail (POLKIT_IS_UNIX_GROUP (group));
-+  g_return_if_fail (gid != -1);
-   group->gid = gid;
- }
- 
-@@ -183,6 +188,8 @@ polkit_unix_group_set_gid (PolkitUnixGroup *group,
- PolkitIdentity *
- polkit_unix_group_new (gint gid)
- {
-+  g_return_val_if_fail (gid != -1, NULL);
-+
-   return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_GROUP,
-                                        "gid", gid,
-                                        NULL));
-diff --git a/src/polkit/polkitunixprocess.c b/src/polkit/polkitunixprocess.c
-index 972b777..b02b258 100644
---- a/src/polkit/polkitunixprocess.c
-+++ b/src/polkit/polkitunixprocess.c
-@@ -159,9 +159,14 @@ polkit_unix_process_set_property (GObject      *object,
-       polkit_unix_process_set_pid (unix_process, g_value_get_int (value));
-       break;
- 
--    case PROP_UID:
--      polkit_unix_process_set_uid (unix_process, g_value_get_int (value));
-+    case PROP_UID: {
-+      gint val;
-+
-+      val = g_value_get_int (value);
-+      g_return_if_fail (val != -1);
-+      polkit_unix_process_set_uid (unix_process, val);
-       break;
-+    }
- 
-     case PROP_START_TIME:
-       polkit_unix_process_set_start_time (unix_process, g_value_get_uint64 (value));
-@@ -239,7 +244,7 @@ polkit_unix_process_class_init (PolkitUnixProcessClass *klass)
-                                    g_param_spec_int ("uid",
-                                                      "User ID",
-                                                      "The UNIX user ID",
--                                                     -1,
-+                                                     G_MININT,
-                                                      G_MAXINT,
-                                                      -1,
-                                                      G_PARAM_CONSTRUCT |
-@@ -303,7 +308,6 @@ polkit_unix_process_set_uid (PolkitUnixProcess *process,
-                              gint               uid)
- {
-   g_return_if_fail (POLKIT_IS_UNIX_PROCESS (process));
--  g_return_if_fail (uid >= -1);
-   process->uid = uid;
- }
- 
-diff --git a/src/polkit/polkitunixuser.c b/src/polkit/polkitunixuser.c
-index 8bfd3a1..234a697 100644
---- a/src/polkit/polkitunixuser.c
-+++ b/src/polkit/polkitunixuser.c
-@@ -72,6 +72,7 @@ G_DEFINE_TYPE_WITH_CODE (PolkitUnixUser, polkit_unix_user, G_TYPE_OBJECT,
- static void
- polkit_unix_user_init (PolkitUnixUser *unix_user)
- {
-+  unix_user->uid = -1;  /* (uid_t) -1 is not a valid UID under Linux */
-   unix_user->name = NULL;
- }
- 
-@@ -112,11 +113,14 @@ polkit_unix_user_set_property (GObject      *object,
-                                GParamSpec   *pspec)
- {
-   PolkitUnixUser *unix_user = POLKIT_UNIX_USER (object);
-+  gint val;
- 
-   switch (prop_id)
-     {
-     case PROP_UID:
--      unix_user->uid = g_value_get_int (value);
-+      val = g_value_get_int (value);
-+      g_return_if_fail (val != -1);
-+      unix_user->uid = val;
-       break;
- 
-     default:
-@@ -144,9 +148,9 @@ polkit_unix_user_class_init (PolkitUnixUserClass *klass)
-                                    g_param_spec_int ("uid",
-                                                      "User ID",
-                                                      "The UNIX user ID",
--                                                     0,
-+                                                     G_MININT,
-                                                      G_MAXINT,
--                                                     0,
-+                                                     -1,
-                                                      G_PARAM_CONSTRUCT |
-                                                      G_PARAM_READWRITE |
-                                                      G_PARAM_STATIC_NAME |
-@@ -182,6 +186,7 @@ polkit_unix_user_set_uid (PolkitUnixUser *user,
-                           gint uid)
- {
-   g_return_if_fail (POLKIT_IS_UNIX_USER (user));
-+  g_return_if_fail (uid != -1);
-   user->uid = uid;
- }
- 
-@@ -196,6 +201,8 @@ polkit_unix_user_set_uid (PolkitUnixUser *user,
- PolkitIdentity *
- polkit_unix_user_new (gint uid)
- {
-+  g_return_val_if_fail (uid != -1, NULL);
-+
-   return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_USER,
-                                         "uid", uid,
-                                         NULL));
--- 
-2.18.1
-
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 2bf53d1c1e..b2e3edca18 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -132,14 +132,14 @@ data as produced by digital cameras.")
 (define-public libgphoto2
   (package
     (name "libgphoto2")
-    (version "2.5.22")
+    (version "2.5.23")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/libgphoto/"
                                   version "/libgphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "0n6f6nagys775ib483nka1sbclhkm1dz3n5z3lgaz1m9m5x35mqm"))))
+                "0bc5x2bkqbfi4hbkz8ab5xc0bkks9vvks1vygxhdh3x498v27byq"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
@@ -163,14 +163,14 @@ from digital cameras.")
 (define-public gphoto2
   (package
     (name "gphoto2")
-    (version "2.5.20")
+    (version "2.5.23")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gphoto/gphoto/" version
                                   "/gphoto2-" version ".tar.bz2"))
               (sha256
                (base32
-                "1xj80abkzvqrd6g1j1q946lhbp03gyapyxdwbhc0y14g1ash6vx3"))))
+                "1laqwhxr0xhbykmp0dhd3j4rr2lhj5y228s31afnqxp700hhk1yz"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm
index ccb8ebf8f8..ac24adef43 100644
--- a/gnu/packages/polkit.scm
+++ b/gnu/packages/polkit.scm
@@ -43,16 +43,15 @@
 (define-public polkit
   (package
     (name "polkit")
-    (version "0.115")
+    (version "0.116")
     (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://www.freedesktop.org/software/polkit/releases/"
                    name "-" version ".tar.gz"))
-             (patches (search-patches "polkit-CVE-2018-19788.patch"))
              (sha256
               (base32
-               "0c91y61y4gy6p91cwbzg32dhavw4b7fflg370rimqhdxpzdfr1rg"))
+               "1c9lbpndh5zis22f154vjrhnqw65z8s85nrgl42v738yf6g0q5w8"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -90,7 +89,7 @@
      `(("expat" ,expat)
        ("linux-pam" ,linux-pam)
        ("elogind" ,elogind)
-       ("mozjs" ,mozjs-52)
+       ("mozjs" ,mozjs-60)
        ("nspr" ,nspr)))
     (propagated-inputs
      `(("glib" ,glib))) ; required by polkit-gobject-1.pc
@@ -101,6 +100,9 @@
        ("gobject-introspection" ,gobject-introspection)))
     (arguments
      `(#:configure-flags '("--sysconfdir=/etc"
+                           ;; XXX: MozJS 60 requires the C++11 ABI or higher.
+                           ;; Remove when the default compiler is >= GCC 6.
+                           "CXXFLAGS=-std=gnu++11"
                            "--enable-man-pages")
        #:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 6248be0c9b..d9065e8b15 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -357,14 +357,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography-vectors
   (package
     (name "python-cryptography-vectors")
-    (version "2.6.1")
+    (version "2.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography_vectors" version))
        (sha256
         (base32
-         "1bsqcv3h49dzqnyn29ijq8r7k1ra8ikl1y9qcpcns9nbvhaq3wq3"))))
+         "1g38zw90510azyfrj6mxbslx2gp9yrnv5dac0w2819k9ssdznbgi"))))
     (build-system python-build-system)
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Test vectors for the cryptography package")
@@ -379,14 +379,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography
   (package
     (name "python-cryptography")
-    (version "2.6.1")
+    (version "2.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography" version))
        (sha256
         (base32
-         "19iwz5avym5zl6jrrrkym1rdaa9h61j20ph4cswsqgv8xg5j3j16"))))
+         "1inlnr36kl36551c9rcad99jmhk81v33by3glkadwdcgmi17fd76"))))
     (build-system python-build-system)
     (inputs
      `(("openssl" ,openssl)))
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 3a022c66ce..a7c88e9187 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -3163,7 +3163,7 @@ provides additional functionality on the produced Mallard documents.")
          (replace 'check
            (lambda _
              (invoke "python" "runtests.py" "-vv"))))))
-    (home-page "http://cython.org/")
+    (home-page "https://cython.org/")
     (synopsis "C extensions for Python")
     (description "Cython is an optimising static compiler for both the Python
 programming language and the extended Cython programming language.  It makes
@@ -5381,14 +5381,14 @@ libxml2 and libxslt.")
 (define-public python-beautifulsoup4
   (package
     (name "python-beautifulsoup4")
-    (version "4.6.3")
+    (version "4.7.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "beautifulsoup4" version))
        (sha256
         (base32
-         "041dhalzjciw6qyzzq7a2k4h1yvyk76xigp35hv5ibnn448ydy4h"))))
+         "0j2kycz2dxgx68xzjm7rxg5xn6v61gq5ifvxyg99slmqkybnal4l"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -5400,6 +5400,8 @@ libxml2 and libxslt.")
          ;; distribution.
          (replace 'check
            (lambda _ (invoke "./convert-py3k"))))))
+    (propagated-inputs
+     `(("python-soupsieve" ,python-soupsieve)))
     (home-page
      "https://www.crummy.com/software/BeautifulSoup/bs4/")
     (synopsis
@@ -5443,14 +5445,17 @@ Soup 4.  It aims to provide selecting, matching, and filtering using modern
 CSS selectors.  Soup Sieve currently provides selectors from the CSS level 1
 specifications up through the latest CSS level 4 drafts and beyond (though
 some are not yet implemented).")
+    (properties `((python2-variant . ,(delay python2-soupsieve))))
     (license license:expat)))
 
 (define-public python2-soupsieve
-  (let ((base (package-with-python2 python-soupsieve)))
+  (let ((base (package-with-python2 (strip-python2-variant python-soupsieve))))
     (package
       (inherit base)
       (propagated-inputs
-       `(("python2-backports-functools-lru-cache" ,python2-backports-functools-lru-cache))))))
+       `(("python2-backports-functools-lru-cache"
+          ,python2-backports-functools-lru-cache)
+         ,@(package-propagated-inputs base))))))
 
 (define-public python-netifaces
   (package
@@ -12180,7 +12185,7 @@ current test, while only declaring the test-specific fields")
      ;; 'parse_funcs'
      ;; during test setup.
      `(#:tests? #f))
-    (home-page "http://toolkit.translatehouse.org")
+    (home-page "https://toolkit.translatehouse.org")
     (synopsis "Tools and API for translation and localization engineering")
     (description
      "Tools and API for translation and localization engineering.  It contains
diff --git a/gnu/packages/regex.scm b/gnu/packages/regex.scm
index f37fb064a2..a64944080b 100644
--- a/gnu/packages/regex.scm
+++ b/gnu/packages/regex.scm
@@ -30,7 +30,7 @@
 (define-public re2
    (package
      (name "re2")
-     (version "2019-04-01")
+     (version "2019-06-01")
      (home-page "https://github.com/google/re2")
      (source (origin
                (method git-fetch)
@@ -38,7 +38,7 @@
                (file-name (git-file-name name version))
                (sha256
                 (base32
-                 "018b8z3fgcr02rmhxdz80r363k40938cbgmk1c9b46k6xkc4q0hd"))))
+                 "01613z66wgiffdngbq3031rwd92jf87j93h7y5mn8hlx19gg5k4j"))))
      (build-system gnu-build-system)
      (arguments
       `(#:modules ((guix build gnu-build-system)
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 2e8cec8ffb..b6b28b7d06 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
-;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
@@ -523,15 +523,14 @@ sound and device input (keyboards, joysticks, mice, etc.).")
 (define-public guile-sdl2
   (package
     (name "guile-sdl2")
-    (version "0.3.1")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://files.dthompson.us/guile-sdl2/guile-sdl2-"
-                    version ".tar.gz"))
+              (uri (string-append "https://files.dthompson.us/guile-sdl2/"
+                                  "guile-sdl2-" version ".tar.gz"))
               (sha256
                (base32
-                "0bw7x2lx90k4banc5k7yfkn3as93y25gr1xdr225ll7lmij21k64"))))
+                "0zcxwgyadwpbhq6h5mv2569c3kalgra26zc186y9fqiyyzmh1v9s"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags '("GUILE_AUTO_COMPILE=0")
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index acc9eda152..cd3dd0de54 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -30,7 +30,7 @@
 (define-public syncthing
   (package
     (name "syncthing")
-    (version "1.1.2")
+    (version "1.1.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/syncthing/syncthing"
@@ -38,7 +38,7 @@
                                   "/syncthing-source-v" version ".tar.gz"))
               (sha256
                (base32
-                "0x2203xa4fxadj7ra7l2ac285j3gi1qgghpkssl4hkcq0kjmxqrk"))
+                "0pkb9vdb10lnlk6sgg6hxgkdjnvxx90cfdf8vgrc5sljzm5qhr6l"))
               (modules '((guix build utils)))
               ;; Delete bundled ("vendored") free software source code.
               (snippet '(begin
@@ -418,7 +418,7 @@ address of the default LAN gateway.")
 (define-public go-github-com-lib-pq
   (package
     (name "go-github-com-lib-pq")
-    (version "1.0.0")
+    (version "1.1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -427,7 +427,7 @@ address of the default LAN gateway.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1zqnnyczaf00xi6xh53vq758v5bdlf0iz7kf22l02cal4i6px47i"))))
+                "0g64wlg1l1ybq4x44idksl4pgm055s58jxc6r6x4qhqm5q76h0km"))))
     (build-system go-build-system)
     (arguments
      `(#:import-path "github.com/lib/pq"
@@ -443,7 +443,7 @@ database/sql package.")
 (define-public go-github-com-oschwald-geoip2-golang
   (package
     (name "go-github-com-oschwald-geoip2-golang")
-    (version "1.1.0")
+    (version "1.3.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -452,7 +452,7 @@ database/sql package.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0v698bzs8lb59cqpsa9cf4sl8rdsvnnmaravhbfn6g6i511ppclr"))))
+                "0jivzl15jb8n16rm1b2w97kf7vna5dd3kcz865wfi233qay075j2"))))
     (build-system go-build-system)
     (propagated-inputs
      `(("go-github-com-oschwald-maxminddb-golang"
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index bb82efba5d..8e20101e51 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -410,7 +410,7 @@ required structures.")
   (package
     (inherit openssl)
     (name "openssl")
-    (version "1.1.1b")
+    (version "1.1.1c")
     (source (origin
              (method url-fetch)
              (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -423,7 +423,7 @@ required structures.")
               (patches (search-patches "openssl-1.1-c-rehash-in.patch"))
               (sha256
                (base32
-                "0jza8cmznnyiia43056dij1jdmz62dx17wsn0zxksh9h6817nmaw"))))
+                "142c7zdlz06hjrrvinb9f276czc78bnkyhd9xma621qmmmwk1yzn"))))
     (outputs '("out"
                "doc"        ; 6.8 MiB of man3 pages and full HTML documentation
                "static"))   ; 6.4 MiB of .a files
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index 8789060b3c..aa543b68d0 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -730,7 +730,7 @@ are detected, the user is notified.")))
 (define-public neovim
   (package
     (name "neovim")
-    (version "0.3.5")
+    (version "0.3.7")
     (source
      (origin
        (method git-fetch)
@@ -740,7 +740,7 @@ are detected, the user is notified.")))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "113lrr9gwimvvzlkwlishm4cjqcf30xq9jfxn7vh41ckgnbiwf3w"))))
+         "1j6w5jvq5v7kf7diad91qs1acr427nidnk9s24yyrz0hwdd1c2lh"))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((srfi srfi-26)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index ae28e38adb..27966f038a 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -5067,7 +5067,7 @@ over Xlib, including:
 (define-public xorg-server
   (package
     (name "xorg-server")
-    (version "1.20.4")
+    (version "1.20.5")
     (source
       (origin
         (method url-fetch)
@@ -5076,7 +5076,7 @@ over Xlib, including:
               "xorg-server-" version ".tar.bz2"))
         (sha256
          (base32
-          "1vk6j7hmigfill9x8m7a6vvgb3s50ji2yf6yprbgqfz9xf9x83zy"))
+          "17dc3g8cc55nbkx3np64dsz04n621dnzjmcc9wys0xbyyd1q47d8"))
         (patches
          (list
           ;; See:
@@ -5198,7 +5198,16 @@ draggable titlebars and borders.")
 (define-public xorg-server-for-tests
   (hidden-package
    (package
-     (inherit xorg-server))))
+     (inherit xorg-server)
+     (version "1.20.4")
+     (source (origin
+               (inherit (package-source xorg-server))
+               (uri (string-append
+                     "mirror://xorg/individual/xserver/"
+                     "xorg-server-" version ".tar.bz2"))
+               (sha256
+                (base32
+                 "1vk6j7hmigfill9x8m7a6vvgb3s50ji2yf6yprbgqfz9xf9x83zy")))))))
 
 (define-public xorg-server-xwayland
   (package
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index f709ca5519..c88a6ddec6 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -142,7 +142,8 @@
             guix-publish-configuration-guix
             guix-publish-configuration-port
             guix-publish-configuration-host
-            guix-publish-configuration-compression-level
+            guix-publish-configuration-compression
+            guix-publish-configuration-compression-level ;deprecated
             guix-publish-configuration-nar-path
             guix-publish-configuration-cache
             guix-publish-configuration-ttl
@@ -1748,8 +1749,12 @@ archive' public keys, with GUIX."
            (default 80))
   (host    guix-publish-configuration-host        ;string
            (default "localhost"))
-  (compression-level guix-publish-configuration-compression-level ;integer
-                     (default 3))
+  (compression       guix-publish-configuration-compression
+                     (thunked)
+                     (default (default-compression this-record
+                                (current-source-location))))
+  (compression-level %guix-publish-configuration-compression-level ;deprecated
+                     (default #f))
   (nar-path    guix-publish-configuration-nar-path ;string
                (default "nar"))
   (cache       guix-publish-configuration-cache   ;#f | string
@@ -1759,42 +1764,68 @@ archive' public keys, with GUIX."
   (ttl         guix-publish-configuration-ttl     ;#f | integer
                (default #f)))
 
-(define guix-publish-shepherd-service
-  (match-lambda
-    (($ <guix-publish-configuration> guix port host compression
-                                     nar-path cache workers ttl)
-     (list (shepherd-service
-            (provision '(guix-publish))
-            (requirement '(guix-daemon))
-            (start #~(make-forkexec-constructor
-                      (list #$(file-append guix "/bin/guix")
-                            "publish" "-u" "guix-publish"
-                            "-p" #$(number->string port)
-                            "-C" #$(number->string compression)
-                            (string-append "--nar-path=" #$nar-path)
-                            (string-append "--listen=" #$host)
-                            #$@(if workers
-                                   #~((string-append "--workers="
-                                                     #$(number->string
-                                                        workers)))
-                                   #~())
-                            #$@(if ttl
-                                   #~((string-append "--ttl="
-                                                     #$(number->string ttl)
-                                                     "s"))
-                                   #~())
-                            #$@(if cache
-                                   #~((string-append "--cache=" #$cache))
-                                   #~()))
-
-                      ;; Make sure we run in a UTF-8 locale so we can produce
-                      ;; nars for packages that contain UTF-8 file names such
-                      ;; as 'nss-certs'.  See <https://bugs.gnu.org/26948>.
-                      #:environment-variables
-                      (list (string-append "GUIX_LOCPATH="
-                                           #$glibc-utf8-locales "/lib/locale")
-                            "LC_ALL=en_US.utf8")))
-            (stop #~(make-kill-destructor)))))))
+(define-deprecated (guix-publish-configuration-compression-level config)
+  "Return a compression level, the old way."
+  (match (guix-publish-configuration-compression config)
+    (((_ level) _ ...) level)))
+
+(define (default-compression config properties)
+  "Return the default 'guix publish' compression according to CONFIG, and
+raise a deprecation warning if the 'compression-level' field was used."
+  (match (%guix-publish-configuration-compression-level config)
+    (#f
+     '(("gzip" 3)))
+    (level
+     (warn-about-deprecation 'compression-level properties
+                             #:replacement 'compression)
+     `(("gzip" ,level)))))
+
+(define (guix-publish-shepherd-service config)
+  (define (config->compression-options config)
+    (match (guix-publish-configuration-compression config)
+      (()                                   ;empty list means "no compression"
+       '("-C0"))
+      (lst
+       (append-map (match-lambda
+                     ((type level)
+                      `("-C" ,(string-append type ":"
+                                             (number->string level)))))
+                   lst))))
+
+  (match-record config <guix-publish-configuration>
+    (guix port host nar-path cache workers ttl)
+    (list (shepherd-service
+           (provision '(guix-publish))
+           (requirement '(guix-daemon))
+           (start #~(make-forkexec-constructor
+                     (list #$(file-append guix "/bin/guix")
+                           "publish" "-u" "guix-publish"
+                           "-p" #$(number->string port)
+                           #$@(config->compression-options config)
+                           (string-append "--nar-path=" #$nar-path)
+                           (string-append "--listen=" #$host)
+                           #$@(if workers
+                                  #~((string-append "--workers="
+                                                    #$(number->string
+                                                       workers)))
+                                  #~())
+                           #$@(if ttl
+                                  #~((string-append "--ttl="
+                                                    #$(number->string ttl)
+                                                    "s"))
+                                  #~())
+                           #$@(if cache
+                                  #~((string-append "--cache=" #$cache))
+                                  #~()))
+
+                     ;; Make sure we run in a UTF-8 locale so we can produce
+                     ;; nars for packages that contain UTF-8 file names such
+                     ;; as 'nss-certs'.  See <https://bugs.gnu.org/26948>.
+                     #:environment-variables
+                     (list (string-append "GUIX_LOCPATH="
+                                          #$glibc-utf8-locales "/lib/locale")
+                           "LC_ALL=en_US.utf8")))
+           (stop #~(make-kill-destructor))))))
 
 (define %guix-publish-accounts
   (list (user-group (name "guix-publish") (system? #t))
diff --git a/gnu/services/cups.scm b/gnu/services/cups.scm
index 9125139ef3..9d21b6e70c 100644
--- a/gnu/services/cups.scm
+++ b/gnu/services/cups.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2016 Andy Wingo <wingo@pobox.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2019 Alex Griffin <a@ajgrf.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -895,6 +896,7 @@ IPP specifications.")
           (mkdir-p/perms "/var/spool/cups" user #o755)
           (mkdir-p/perms "/var/spool/cups/tmp" user #o755)
           (mkdir-p/perms "/var/log/cups" user #o755)
+          (mkdir-p/perms "/var/cache/cups" user #o770)
           (mkdir-p/perms "/etc/cups" user #o755)
           (mkdir-p/perms "/etc/cups/ssl" user #o700)
           ;; This certificate is used for HTTPS connections to the CUPS web
diff --git a/guix/channels.scm b/guix/channels.scm
index e93879e1b4..e7278c6060 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -27,7 +27,7 @@
   #:use-module (guix profiles)
   #:use-module (guix derivations)
   #:use-module (guix combinators)
-  #:use-module (guix deprecation)
+  #:use-module (guix diagnostics)
   #:use-module (guix store)
   #:use-module (guix i18n)
   #:use-module ((guix utils)
@@ -280,7 +280,7 @@ package modules under SOURCE using CORE, an instance of Guix."
                       ;; Disable deprecation warnings; it's OK for SCRIPT to
                       ;; use deprecated APIs and the user doesn't have to know
                       ;; about it.
-                      (parameterize ((deprecation-warning-port
+                      (parameterize ((guix-warning-port
                                       (%make-void-port "w")))
                         (primitive-load script))))))
         ;; BUILD must be a monadic procedure of at least one argument: the
diff --git a/guix/deprecation.scm b/guix/deprecation.scm
index 2f7c058940..468b2e9b7b 100644
--- a/guix/deprecation.scm
+++ b/guix/deprecation.scm
@@ -18,39 +18,26 @@
 
 (define-module (guix deprecation)
   #:use-module (guix i18n)
-  #:use-module (ice-9 format)
+  #:use-module (guix diagnostics)
+  #:autoload   (guix utils) (source-properties->location)
   #:export (define-deprecated
             define-deprecated/alias
-            deprecation-warning-port))
+            warn-about-deprecation))
 
 ;;; Commentary:
 ;;;
 ;;; Provide a mechanism to mark bindings as deprecated.
 ;;;
-;;; We don't reuse (guix ui) mostly to avoid pulling in too many things.
-;;;
 ;;; Code:
 
-(define deprecation-warning-port
-  ;; Port where deprecation warnings go.
-  (make-parameter (current-error-port)))
-
-(define (source-properties->location-string properties)
-  "Return a human-friendly, GNU-standard representation of PROPERTIES, a
-source property alist."
-  (let ((file   (assq-ref properties 'filename))
-        (line   (assq-ref properties 'line))
-        (column (assq-ref properties 'column)))
-    (if (and file line column)
-        (format #f "~a:~a:~a" file (+ 1 line) column)
-        (G_ "<unknown location>"))))
-
 (define* (warn-about-deprecation variable properties
                                  #:key replacement)
-  (format (deprecation-warning-port)
-          (G_ "~a: warning: '~a' is deprecated~@[, use '~a' instead~]~%")
-          (source-properties->location-string properties)
-          variable replacement))
+  (let ((location (and properties (source-properties->location properties))))
+    (if replacement
+        (warning location (G_ "'~a' is deprecated, use '~a' instead~%")
+                 variable replacement)
+        (warning location (G_ "'~a' is deprecated~%")
+                 variable))))
 
 (define-syntax define-deprecated
   (lambda (s)
@@ -59,7 +46,7 @@ source property alist."
   (define-deprecated foo bar 42)
   (define-deprecated (baz x y) qux (qux y x))
 
-This will write a deprecation warning to DEPRECATION-WARNING-PORT."
+This will write a deprecation warning to GUIX-WARNING-PORT."
     (syntax-case s ()
       ((_ (proc formals ...) replacement body ...)
        #'(define-deprecated proc replacement
@@ -96,7 +83,7 @@ these lines:
 
 where 'nix-server?' is the deprecated name for 'store-connection?'.
 
-This will write a deprecation warning to DEPRECATION-WARNING-PORT."
+This will write a deprecation warning to GUIX-WARNING-PORT."
   (define-syntax deprecated
     (lambda (s)
       (warn-about-deprecation 'deprecated (syntax-source s)
diff --git a/guix/diagnostics.scm b/guix/diagnostics.scm
new file mode 100644
index 0000000000..380cfbb613
--- /dev/null
+++ b/guix/diagnostics.scm
@@ -0,0 +1,173 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix diagnostics)
+  #:use-module (guix colors)
+  #:use-module (guix i18n)
+  #:autoload   (guix utils) (<location>)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 format)
+  #:use-module (ice-9 match)
+  #:export (warning
+            info
+            report-error
+            leave
+
+            location->string
+
+            guix-warning-port
+            program-name))
+
+;;; Commentary:
+;;;
+;;; This module provides the tools to report diagnostics to the user in a
+;;; consistent way: errors, warnings, and notes.
+;;;
+;;; Code:
+
+(define-syntax highlight-argument
+  (lambda (s)
+    "Given FMT and ARG, expand ARG to a call that highlights it, provided FMT
+is a trivial format string."
+    (define (trivial-format-string? fmt)
+      (define len
+        (string-length fmt))
+
+      (let loop ((start 0))
+        (or (>= (+ 1 start) len)
+            (let ((tilde (string-index fmt #\~ start)))
+              (or (not tilde)
+                  (case (string-ref fmt (+ tilde 1))
+                    ((#\a #\A #\%) (loop (+ tilde 2)))
+                    (else          #f)))))))
+
+    ;; Be conservative: limit format argument highlighting to cases where the
+    ;; format string contains nothing but ~a escapes.  If it contained ~s
+    ;; escapes, this strategy wouldn't work.
+    (syntax-case s ()
+      ((_ "~a~%" arg)                          ;don't highlight whole messages
+       #'arg)
+      ((_ fmt arg)
+       (trivial-format-string? (syntax->datum #'fmt))
+       #'(%highlight-argument arg))
+      ((_ fmt arg)
+       #'arg))))
+
+(define* (%highlight-argument arg #:optional (port (guix-warning-port)))
+  "Highlight ARG, a format string argument, if PORT supports colors."
+  (cond ((string? arg)
+         (highlight arg port))
+        ((symbol? arg)
+         (highlight (symbol->string arg) port))
+        (else arg)))
+
+(define-syntax define-diagnostic
+  (syntax-rules ()
+    "Create a diagnostic macro (i.e., NAME), which will prepend PREFIX to all
+messages."
+    ((_ name (G_ prefix) colors)
+     (define-syntax name
+       (lambda (x)
+         (syntax-case x ()
+           ((name location (underscore fmt) args (... ...))
+            (and (string? (syntax->datum #'fmt))
+                 (free-identifier=? #'underscore #'G_))
+            #'(begin
+                (print-diagnostic-prefix prefix location
+                                         #:colors colors)
+                (format (guix-warning-port) (gettext fmt %gettext-domain)
+                        (highlight-argument fmt args) (... ...))))
+           ((name location (N-underscore singular plural n)
+                  args (... ...))
+            (and (string? (syntax->datum #'singular))
+                 (string? (syntax->datum #'plural))
+                 (free-identifier=? #'N-underscore #'N_))
+            #'(begin
+                (print-diagnostic-prefix prefix location
+                                         #:colors colors)
+                (format (guix-warning-port)
+                        (ngettext singular plural n %gettext-domain)
+                        (highlight-argument singular args) (... ...))))
+           ((name (underscore fmt) args (... ...))
+            (free-identifier=? #'underscore #'G_)
+            #'(name #f (underscore fmt) args (... ...)))
+           ((name (N-underscore singular plural n)
+                  args (... ...))
+            (free-identifier=? #'N-underscore #'N_)
+            #'(name #f (N-underscore singular plural n)
+                    args (... ...)))))))))
+
+;; XXX: This doesn't work well for right-to-left languages.
+;; TRANSLATORS: The goal is to emit "warning:" followed by a short phrase;
+;; "~a" is a placeholder for that phrase.
+(define-diagnostic warning (G_ "warning: ") %warning-color) ;emit a warning
+(define-diagnostic info (G_ "") %info-color)
+(define-diagnostic report-error (G_ "error: ") %error-color)
+
+(define-syntax-rule (leave args ...)
+  "Emit an error message and exit."
+  (begin
+    (report-error args ...)
+    (exit 1)))
+
+(define %warning-color (color BOLD MAGENTA))
+(define %info-color (color BOLD))
+(define %error-color (color BOLD RED))
+
+(define* (print-diagnostic-prefix prefix #:optional location
+                                  #:key (colors (color)))
+  "Print PREFIX as a diagnostic line prefix."
+  (define color?
+    (color-output? (guix-warning-port)))
+
+  (define location-color
+    (if color?
+        (cut colorize-string <> (color BOLD))
+        identity))
+
+  (define prefix-color
+    (if color?
+        (lambda (prefix)
+          (colorize-string prefix colors))
+        identity))
+
+  (let ((prefix (if (string-null? prefix)
+                    prefix
+                    (gettext prefix %gettext-domain))))
+    (if location
+        (format (guix-warning-port) "~a: ~a"
+                (location-color (location->string location))
+                (prefix-color prefix))
+        (format (guix-warning-port) "~:[~*~;guix ~a: ~]~a"
+                (program-name) (program-name)
+                (prefix-color prefix)))))
+
+(define (location->string loc)
+  "Return a human-friendly, GNU-standard representation of LOC."
+  (match loc
+    (#f (G_ "<unknown location>"))
+    (($ <location> file line column)
+     (format #f "~a:~a:~a" file line column))))
+
+
+(define guix-warning-port
+  (make-parameter (current-warning-port)))
+
+(define program-name
+  ;; Name of the command-line program currently executing, or #f.
+  (make-parameter #f))
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 516c0cfaa2..d0dffe9b04 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -378,57 +379,35 @@ separated by PRED."
                            #:allow-other-keys)
   "Generate a stream of package expressions for PACKAGE-NAME and all its
 dependencies."
-  (receive (package . dependencies)
-      (repo->guix-package package-name repo)
-    (if (not package)
-        stream-null
-
-        ;; Generate a lazy stream of package expressions for all unknown
-        ;; dependencies in the graph.
-        (let* ((make-state (lambda (queue done)
-                             (cons queue done)))
-               (next       (match-lambda
-                             (((next . rest) . done) next)))
-               (imported   (match-lambda
-                             ((queue . done) done)))
-               (done?      (match-lambda
-                             ((queue . done)
-                              (zero? (length queue)))))
-               (unknown?   (lambda* (dependency #:optional (done '()))
-                             (and (not (member dependency
-                                               done))
-                                  (null? (find-packages-by-name
-                                          (guix-name dependency))))))
-               (update     (lambda (state new-queue)
-                             (match state
-                               (((head . tail) . done)
-                                (make-state (lset-difference
-                                             equal?
-                                             (lset-union equal? new-queue tail)
-                                             done)
-                                            (cons head done)))))))
-          (stream-cons
-           package
-           (stream-unfold
-            ;; map: produce a stream element
-            (lambda (state)
-              (repo->guix-package (next state) repo))
-
-            ;; predicate
-            (negate done?)
-
-            ;; generator: update the queue
-            (lambda (state)
-              (receive (package . dependencies)
-                  (repo->guix-package (next state) repo)
-                (if package
-                    (update state (filter (cut unknown? <>
-                                               (cons (next state)
-                                                     (imported state)))
-                                          (car dependencies)))
-                    ;; TODO: Try the other archives before giving up
-                    (update state (imported state)))))
-
-            ;; initial state
-            (make-state (filter unknown? (car dependencies))
-                        (list package-name))))))))
+  (define (exists? dependency)
+    (not (null? (find-packages-by-name (guix-name dependency)))))
+  (define initial-state (list #f (list package-name) (list)))
+  (define (step state)
+    (match state
+      ((prev (next . rest) done)
+       (define (handle? dep)
+         (and
+           (not (equal? dep next))
+           (not (member dep done))
+           (not (exists? dep))))
+       (receive (package . dependencies) (repo->guix-package next repo)
+         (list
+           (if package package '()) ;; default #f on failure would interrupt
+           (if package
+             (lset-union equal? rest (filter handle? (car dependencies)))
+             rest)
+           (cons next done))))
+      ((prev '() done)
+       (list #f '() done))))
+
+  ;; Generate a lazy stream of package expressions for all unknown
+  ;; dependencies in the graph.
+  (stream-unfold
+    ;; map: produce a stream element
+    (match-lambda ((latest queue done) latest))
+    ;; predicate
+    (match-lambda ((latest queue done) latest))
+    ;; generator: update the queue
+    step
+    ;; initial state
+    (step initial-state)))
diff --git a/guix/ui.scm b/guix/ui.scm
index 529401eea8..0b4fe144b6 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -32,6 +32,7 @@
 (define-module (guix ui)
   #:use-module (guix i18n)
   #:use-module (guix colors)
+  #:use-module (guix diagnostics)
   #:use-module (guix gexp)
   #:use-module (guix sets)
   #:use-module (guix utils)
@@ -70,10 +71,14 @@
   #:use-module (texinfo)
   #:use-module (texinfo plain-text)
   #:use-module (texinfo string-utils)
-  #:re-export (G_ N_ P_)                          ;backward compatibility
-  #:export (report-error
-            display-hint
-            leave
+
+  ;; Re-exports for backward compatibility.
+  #:re-export (G_ N_ P_                           ;now in (guix i18n)
+
+               warning info report-error leave    ;now in (guix diagnostics)
+               location->string
+               guix-warning-port program-name)
+  #:export (display-hint
             make-user-module
             load*
             warn-about-load-error
@@ -93,7 +98,6 @@
             read/eval
             read/eval-package-expression
             check-available-space
-            location->string
             fill-paragraph
             %text-width
             texi->plain-text
@@ -115,10 +119,6 @@
             delete-generation*
             run-guix-command
             run-guix
-            program-name
-            guix-warning-port
-            warning
-            info
             guix-main))
 
 ;;; Commentary:
@@ -127,124 +127,6 @@
 ;;;
 ;;; Code:
 
-(define-syntax highlight-argument
-  (lambda (s)
-    "Given FMT and ARG, expand ARG to a call that highlights it, provided FMT
-is a trivial format string."
-    (define (trivial-format-string? fmt)
-      (define len
-        (string-length fmt))
-
-      (let loop ((start 0))
-        (or (>= (+ 1 start) len)
-            (let ((tilde (string-index fmt #\~ start)))
-              (or (not tilde)
-                  (case (string-ref fmt (+ tilde 1))
-                    ((#\a #\A #\%) (loop (+ tilde 2)))
-                    (else          #f)))))))
-
-    ;; Be conservative: limit format argument highlighting to cases where the
-    ;; format string contains nothing but ~a escapes.  If it contained ~s
-    ;; escapes, this strategy wouldn't work.
-    (syntax-case s ()
-      ((_ "~a~%" arg)                          ;don't highlight whole messages
-       #'arg)
-      ((_ fmt arg)
-       (trivial-format-string? (syntax->datum #'fmt))
-       #'(%highlight-argument arg))
-      ((_ fmt arg)
-       #'arg))))
-
-(define* (%highlight-argument arg #:optional (port (guix-warning-port)))
-  "Highlight ARG, a format string argument, if PORT supports colors."
-  (cond ((string? arg)
-         (highlight arg port))
-        ((symbol? arg)
-         (highlight (symbol->string arg) port))
-        (else arg)))
-
-(define-syntax define-diagnostic
-  (syntax-rules ()
-    "Create a diagnostic macro (i.e., NAME), which will prepend PREFIX to all
-messages."
-    ((_ name (G_ prefix) colors)
-     (define-syntax name
-       (lambda (x)
-         (syntax-case x ()
-           ((name location (underscore fmt) args (... ...))
-            (and (string? (syntax->datum #'fmt))
-                 (free-identifier=? #'underscore #'G_))
-            #'(begin
-                (print-diagnostic-prefix prefix location
-                                         #:colors colors)
-                (format (guix-warning-port) (gettext fmt %gettext-domain)
-                        (highlight-argument fmt args) (... ...))))
-           ((name location (N-underscore singular plural n)
-                  args (... ...))
-            (and (string? (syntax->datum #'singular))
-                 (string? (syntax->datum #'plural))
-                 (free-identifier=? #'N-underscore #'N_))
-            #'(begin
-                (print-diagnostic-prefix prefix location
-                                         #:colors colors)
-                (format (guix-warning-port)
-                        (ngettext singular plural n %gettext-domain)
-                        (highlight-argument singular args) (... ...))))
-           ((name (underscore fmt) args (... ...))
-            (free-identifier=? #'underscore #'G_)
-            #'(name #f (underscore fmt) args (... ...)))
-           ((name (N-underscore singular plural n)
-                  args (... ...))
-            (free-identifier=? #'N-underscore #'N_)
-            #'(name #f (N-underscore singular plural n)
-                    args (... ...)))))))))
-
-;; XXX: This doesn't work well for right-to-left languages.
-;; TRANSLATORS: The goal is to emit "warning:" followed by a short phrase;
-;; "~a" is a placeholder for that phrase.
-(define-diagnostic warning (G_ "warning: ") %warning-color) ;emit a warning
-(define-diagnostic info (G_ "") %info-color)
-(define-diagnostic report-error (G_ "error: ") %error-color)
-
-(define-syntax-rule (leave args ...)
-  "Emit an error message and exit."
-  (begin
-    (report-error args ...)
-    (exit 1)))
-
-(define %warning-color (color BOLD MAGENTA))
-(define %info-color (color BOLD))
-(define %error-color (color BOLD RED))
-(define %hint-color (color BOLD CYAN))
-
-(define* (print-diagnostic-prefix prefix #:optional location
-                                  #:key (colors (color)))
-  "Print PREFIX as a diagnostic line prefix."
-  (define color?
-    (color-output? (guix-warning-port)))
-
-  (define location-color
-    (if color?
-        (cut colorize-string <> (color BOLD))
-        identity))
-
-  (define prefix-color
-    (if color?
-        (lambda (prefix)
-          (colorize-string prefix colors))
-        identity))
-
-  (let ((prefix (if (string-null? prefix)
-                    prefix
-                    (gettext prefix %gettext-domain))))
-    (if location
-        (format (guix-warning-port) "~a: ~a"
-                (location-color (location->string location))
-                (prefix-color prefix))
-        (format (guix-warning-port) "~:[~*~;guix ~a: ~]~a"
-                (program-name) (program-name)
-                (prefix-color prefix)))))
-
 (define (print-unbound-variable-error port key args default-printer)
   ;; Print unbound variable errors more nicely, and in the right language.
   (match args
@@ -393,6 +275,8 @@ VARIABLE and return it, or #f if none was found."
                   (('gnu _ ...) head)             ;must be that one
                   (_ (loop next (cons head suggestions) visited)))))))))))
 
+(define %hint-color (color BOLD CYAN))
+
 (define* (display-hint message #:optional (port (current-error-port)))
   "Display MESSAGE, a l10n message possibly containing Texinfo markup, to
 PORT."
@@ -1192,13 +1076,6 @@ replacement if PORT is not Unicode-capable."
       (lambda ()
         body ...)))))
 
-(define (location->string loc)
-  "Return a human-friendly, GNU-standard representation of LOC."
-  (match loc
-    (#f (G_ "<unknown location>"))
-    (($ <location> file line column)
-     (format #f "~a:~a:~a" file line column))))
-
 (define* (fill-paragraph str width #:optional (column 0))
   "Fill STR such that each line contains at most WIDTH characters, assuming
 that the first character is at COLUMN.
@@ -1720,10 +1597,6 @@ Run COMMAND with ARGS.\n"))
                                  string<?))
   (show-bug-report-information))
 
-(define program-name
-  ;; Name of the command-line program currently executing, or #f.
-  (make-parameter #f))
-
 (define (run-guix-command command . args)
   "Run COMMAND with the given ARGS.  Report an error when COMMAND is not
 found."
@@ -1783,9 +1656,6 @@ and signal handling has already been set up."
             (string->symbol command)
             args))))
 
-(define guix-warning-port
-  (make-parameter (current-warning-port)))
-
 (define (guix-main arg0 . args)
   (initialize-guix)
   (apply run-guix args))