summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/bootloader.scm127
-rw-r--r--gnu/bootloader/extlinux.scm120
-rw-r--r--gnu/bootloader/grub.scm (renamed from gnu/system/grub.scm)184
-rw-r--r--gnu/build/activation.scm9
-rw-r--r--gnu/build/install.scm36
-rw-r--r--gnu/build/vm.scm127
-rw-r--r--gnu/local.mk21
-rw-r--r--gnu/packages/admin.scm60
-rw-r--r--gnu/packages/aspell.scm18
-rw-r--r--gnu/packages/aux-files/linux-libre/4.11-i686.conf3
-rw-r--r--gnu/packages/aux-files/linux-libre/4.11-x86_64.conf3
-rw-r--r--gnu/packages/backup.scm15
-rw-r--r--gnu/packages/base.scm121
-rw-r--r--gnu/packages/benchmark.scm8
-rw-r--r--gnu/packages/bioinformatics.scm102
-rw-r--r--gnu/packages/dns.scm4
-rw-r--r--gnu/packages/ebook.scm72
-rw-r--r--gnu/packages/emacs.scm113
-rw-r--r--gnu/packages/engineering.scm3
-rw-r--r--gnu/packages/games.scm26
-rw-r--r--gnu/packages/ghostscript.scm1
-rw-r--r--gnu/packages/gnome.scm54
-rw-r--r--gnu/packages/gnupg.scm12
-rw-r--r--gnu/packages/icu4c.scm29
-rw-r--r--gnu/packages/image-processing.scm130
-rw-r--r--gnu/packages/image.scm5
-rw-r--r--gnu/packages/imagemagick.scm4
-rw-r--r--gnu/packages/java.scm1250
-rw-r--r--gnu/packages/kde-frameworks.scm302
-rw-r--r--gnu/packages/libusb.scm100
-rw-r--r--gnu/packages/linux.scm27
-rw-r--r--gnu/packages/lisp.scm159
-rw-r--r--gnu/packages/logging.scm15
-rw-r--r--gnu/packages/mail.scm4
-rw-r--r--gnu/packages/mc.scm8
-rw-r--r--gnu/packages/mes.scm27
-rw-r--r--gnu/packages/music.scm51
-rw-r--r--gnu/packages/nano.scm4
-rw-r--r--gnu/packages/package-management.scm19
-rw-r--r--gnu/packages/patches/aspell-default-dict-dir.patch20
-rw-r--r--gnu/packages/patches/calibre-dont-load-remote-icons.patch45
-rw-r--r--gnu/packages/patches/calibre-drop-unrar.patch48
-rw-r--r--gnu/packages/patches/calibre-use-packaged-feedparser.patch51
-rw-r--r--gnu/packages/patches/gspell-dash-test.patch16
-rw-r--r--gnu/packages/patches/guile-ssh-double-free.patch37
-rw-r--r--gnu/packages/patches/guile-ssh-rexec-bug.patch16
-rw-r--r--gnu/packages/patches/jbig2dec-CVE-2017-7885.patch38
-rw-r--r--gnu/packages/patches/jbig2dec-CVE-2017-7975.patch40
-rw-r--r--gnu/packages/patches/jbig2dec-CVE-2017-7976.patch122
-rw-r--r--gnu/packages/patches/networkmanager-qt-activeconnection-test-1.patch60
-rw-r--r--gnu/packages/patches/networkmanager-qt-activeconnection-test-2.patch57
-rw-r--r--gnu/packages/patches/qemu-CVE-2017-7493.patch182
-rw-r--r--gnu/packages/patches/qtscript-disable-tests.patch64
-rw-r--r--gnu/packages/patches/ruby-concurrent-test-arm.patch26
-rw-r--r--gnu/packages/patches/shadow-4.4-su-snprintf-fix.patch31
-rw-r--r--gnu/packages/patches/shadow-CVE-2017-2616.patch72
-rw-r--r--gnu/packages/php.scm10
-rw-r--r--gnu/packages/python.scm4
-rw-r--r--gnu/packages/qemu.scm1
-rw-r--r--gnu/packages/qt.scm162
-rw-r--r--gnu/packages/ruby.scm12
-rw-r--r--gnu/packages/security-token.scm12
-rw-r--r--gnu/packages/shells.scm37
-rw-r--r--gnu/packages/ssh.scm8
-rw-r--r--gnu/packages/sssd.scm173
-rw-r--r--gnu/packages/textutils.scm76
-rw-r--r--gnu/packages/tls.scm7
-rw-r--r--gnu/packages/tor.scm6
-rw-r--r--gnu/packages/video.scm27
-rw-r--r--gnu/packages/vim.scm8
-rw-r--r--gnu/packages/web.scm32
-rw-r--r--gnu/packages/xml.scm31
-rw-r--r--gnu/services/base.scm3
-rw-r--r--gnu/services/pm.scm41
-rw-r--r--gnu/services/ssh.scm2
-rw-r--r--gnu/system.scm28
-rw-r--r--gnu/system/examples/lightweight-desktop.tmpl30
-rw-r--r--gnu/system/examples/vm-image.tmpl53
-rw-r--r--gnu/system/install.scm12
-rw-r--r--gnu/system/linux-initrd.scm4
-rw-r--r--gnu/system/vm.scm60
-rw-r--r--gnu/tests.scm3
-rw-r--r--gnu/tests/base.scm22
-rw-r--r--gnu/tests/nfs.scm3
84 files changed, 4173 insertions, 992 deletions
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
new file mode 100644
index 0000000000..4e77974d31
--- /dev/null
+++ b/gnu/bootloader.scm
@@ -0,0 +1,127 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 David Craven <david@craven.ch>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu bootloader)
+  #:use-module (guix discovery)
+  #:use-module (guix records)
+  #:use-module (guix ui)
+  #:use-module (srfi srfi-1)
+  #:export (bootloader
+            bootloader?
+            bootloader-name
+            bootloader-package
+            bootloader-installer
+            bootloader-configuration-file
+            bootloader-configuration-file-generator
+
+            bootloader-configuration
+            bootloader-configuration?
+            bootloader-configuration-bootloader
+            bootloader-configuration-device
+            bootloader-configuration-menu-entries
+            bootloader-configuration-default-entry
+            bootloader-configuration-timeout
+            bootloader-configuration-theme
+            bootloader-configuration-terminal-outputs
+            bootloader-configuration-terminal-inputs
+            bootloader-configuration-serial-unit
+            bootloader-configuration-serial-speed
+            bootloader-configuration-additional-configuration
+
+            %bootloaders
+            lookup-bootloader-by-name))
+
+
+;;;
+;;; Bootloader record.
+;;;
+
+;; The <bootloader> record contains fields expressing how the bootloader
+;; should be installed. Every bootloader in gnu/bootloader/ directory
+;; has to be described by this record.
+
+(define-record-type* <bootloader>
+  bootloader make-bootloader
+  bootloader?
+  (name                            bootloader-name)
+  (package                         bootloader-package)
+  (installer                       bootloader-installer)
+  (configuration-file              bootloader-configuration-file)
+  (configuration-file-generator    bootloader-configuration-file-generator))
+
+
+;;;
+;;; Bootloader configuration record.
+;;;
+
+;; The <bootloader-configuration> record contains bootloader independant
+;; configuration used to fill bootloader configuration file.
+
+(define-record-type* <bootloader-configuration>
+  bootloader-configuration make-bootloader-configuration
+  bootloader-configuration?
+  (bootloader                      bootloader-configuration-bootloader)    ; <bootloader>
+  (device                          bootloader-configuration-device         ; string
+                                   (default #f))
+  (menu-entries                    bootloader-configuration-menu-entries   ; list of <boot-parameters>
+                                   (default '()))
+  (default-entry                   bootloader-configuration-default-entry  ; integer
+                                   (default 0))
+  (timeout                         bootloader-configuration-timeout        ; seconds as integer
+                                   (default 5))
+  (theme                           bootloader-configuration-theme          ; bootloader-specific theme
+                                   (default #f))
+  (terminal-outputs                bootloader-configuration-terminal-outputs ; list of symbols
+                                   (default '(gfxterm)))
+  (terminal-inputs                 bootloader-configuration-terminal-inputs  ; list of symbols
+                                   (default '()))
+  (serial-unit                     bootloader-configuration-serial-unit      ; integer | #f
+                                   (default #f))
+  (serial-speed                    bootloader-configuration-serial-speed     ; integer | #f
+                                   (default #f))
+  (additional-configuration        bootloader-configuration-additional-configuration ; record
+                                   (default #f)))
+
+
+;;;
+;;; Bootloaders.
+;;;
+
+(define (bootloader-modules)
+  "Return the list of bootloader modules."
+  (all-modules (map (lambda (entry)
+                      `(,entry . "gnu/bootloader"))
+                    %load-path)))
+
+(define %bootloaders
+  ;; The list of publically-known bootloaders.
+  (delay (fold-module-public-variables (lambda (obj result)
+                                         (if (bootloader? obj)
+                                             (cons obj result)
+                                             result))
+                                       '()
+                                       (bootloader-modules))))
+
+(define (lookup-bootloader-by-name name)
+  "Return the bootloader called NAME."
+  (or (find (lambda (bootloader)
+              (eq? name (bootloader-name bootloader)))
+            (force %bootloaders))
+      (leave (G_ "~a: no such bootloader~%") name)))
diff --git a/gnu/bootloader/extlinux.scm b/gnu/bootloader/extlinux.scm
new file mode 100644
index 0000000000..67b8815d40
--- /dev/null
+++ b/gnu/bootloader/extlinux.scm
@@ -0,0 +1,120 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 David Craven <david@craven.ch>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu bootloader extlinux)
+  #:use-module (gnu bootloader)
+  #:use-module (gnu system)
+  #:use-module (gnu packages bootloaders)
+  #:use-module (guix gexp)
+  #:use-module (guix monads)
+  #:use-module (guix records)
+  #:use-module (guix utils)
+  #:export (extlinux-bootloader))
+
+(define* (extlinux-configuration-file config entries
+                                      #:key
+                                      (system (%current-system))
+                                      (old-entries '()))
+  "Return the U-Boot configuration file corresponding to CONFIG, a
+<u-boot-configuration> object, and where the store is available at STORE-FS, a
+<file-system> object.  OLD-ENTRIES is taken to be a list of menu entries
+corresponding to old generations of the system."
+
+  (define all-entries
+    (append entries (bootloader-configuration-menu-entries config)))
+
+  (define (boot-parameters->gexp params)
+    (let ((label (boot-parameters-label params))
+          (kernel (boot-parameters-kernel params))
+          (kernel-arguments (boot-parameters-kernel-arguments params))
+          (initrd (boot-parameters-initrd params)))
+      #~(format port "LABEL ~a
+  MENU LABEL ~a
+  KERNEL ~a
+  FDTDIR ~a/lib/dtbs
+  INITRD ~a
+  APPEND ~a
+~%"
+                #$label #$label
+                #$kernel #$kernel #$initrd
+                (string-join (list #$@kernel-arguments)))))
+
+  (define builder
+    #~(call-with-output-file #$output
+        (lambda (port)
+          (let ((timeout #$(bootloader-configuration-timeout config)))
+            (format port "# This file was generated from your GuixSD configuration.  Any changes
+# will be lost upon reconfiguration.
+UI menu.c32
+PROMPT ~a
+TIMEOUT ~a~%"
+                    (if (> timeout 0) 1 0)
+                    ;; timeout is expressed in 1/10s of seconds.
+                    (* 10 timeout))
+            #$@(map boot-parameters->gexp all-entries)
+
+            #$@(if (pair? old-entries)
+                   #~((format port "~%")
+                      #$@(map boot-parameters->gexp old-entries)
+                      (format port "~%"))
+                   #~())))))
+
+  (gexp->derivation "extlinux.conf" builder))
+
+
+
+
+;;;
+;;; Install procedures.
+;;;
+
+(define dd
+  #~(lambda (bs count if of)
+      (zero? (system* "dd"
+                      (string-append "bs=" (number->string bs))
+                      (string-append "count=" (number->string count))
+                      (string-append "if=" if)
+                      (string-append "of=" of)))))
+
+(define install-extlinux
+  #~(lambda (bootloader device mount-point)
+      (let ((extlinux (string-append bootloader "/sbin/extlinux"))
+            (install-dir (string-append mount-point "/boot/extlinux"))
+            (syslinux-dir (string-append bootloader "/share/syslinux")))
+        (for-each (lambda (file)
+                    (install-file file install-dir))
+                  (find-files syslinux-dir "\\.c32$"))
+
+        (unless (and (zero? (system* extlinux "--install" install-dir))
+                     (#$dd 440 1 (string-append syslinux-dir "/mbr.bin") device))
+          (error "failed to install SYSLINUX")))))
+
+
+
+;;;
+;;; Bootloader definitions.
+;;;
+
+(define extlinux-bootloader
+  (bootloader
+   (name 'extlinux)
+   (package syslinux)
+   (installer install-extlinux)
+   (configuration-file "/boot/extlinux/extlinux.conf")
+   (configuration-file-generator extlinux-configuration-file)))
diff --git a/gnu/system/grub.scm b/gnu/bootloader/grub.scm
index 58096429fe..49616b7164 100644
--- a/gnu/system/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,7 +19,7 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-(define-module (gnu system grub)
+(define-module (gnu bootloader grub)
   #:use-module (guix store)
   #:use-module (guix packages)
   #:use-module (guix derivations)
@@ -27,6 +29,7 @@
   #:use-module (guix download)
   #:use-module (gnu artwork)
   #:use-module (gnu system)
+  #:use-module (gnu bootloader)
   #:use-module (gnu system file-systems)
   #:autoload   (gnu packages bootloaders) (grub)
   #:autoload   (gnu packages compression) (gzip)
@@ -49,15 +52,10 @@
             %background-image
             %default-theme
 
-            grub-configuration
-            grub-configuration?
-            grub-configuration-device
-            grub-configuration-grub
+            grub-bootloader
+            grub-efi-bootloader
 
-            menu-entry
-            menu-entry?
-
-            grub-configuration-file))
+            grub-configuration))
 
 ;;; Commentary:
 ;;;
@@ -105,21 +103,6 @@ denoting a file name."
    (color-highlight '((fg . yellow) (bg . black)))
    (color-normal    '((fg . light-gray) (bg . black))))) ;XXX: #x303030
 
-(define-record-type* <grub-configuration>
-  grub-configuration make-grub-configuration
-  grub-configuration?
-  (grub            grub-configuration-grub           ; package
-                   (default (@ (gnu packages bootloaders) grub)))
-  (device          grub-configuration-device)        ; string
-  (menu-entries    grub-configuration-menu-entries   ; list
-                   (default '()))
-  (default-entry   grub-configuration-default-entry  ; integer
-                   (default 0))
-  (timeout         grub-configuration-timeout        ; integer
-                   (default 5))
-  (theme           grub-configuration-theme          ; <grub-theme>
-                   (default %default-theme)))
-
 (define-record-type* <menu-entry>
   menu-entry make-menu-entry
   menu-entry?
@@ -138,6 +121,11 @@ denoting a file name."
 ;;; Background image & themes.
 ;;;
 
+(define (bootloader-theme config)
+  "Return user defined theme in CONFIG if defined or %default-theme
+otherwise."
+  (or (bootloader-configuration-theme config) %default-theme))
+
 (define* (svg->png svg #:key width height)
   "Build a PNG of HEIGHT x WIDTH from SVG."
   (gexp->derivation "grub-image.png"
@@ -162,7 +150,8 @@ WIDTH/HEIGHT, or #f if none was found."
   (let* ((ratio (/ width height))
          (image (find (lambda (image)
                         (= (grub-image-aspect-ratio image) ratio))
-                      (grub-theme-images (grub-configuration-theme config)))))
+                      (grub-theme-images
+                       (bootloader-theme config)))))
     (if image
         (svg->png (grub-image-file image)
                   #:width width #:height height)
@@ -199,13 +188,18 @@ system string---e.g., \"x86_64-linux\"."
     insmod vbe
     insmod vga
   fi
-
-  terminal_output gfxterm
 "
         ""))
 
+  (define (setup-gfxterm config font-file)
+    (if (memq 'gfxterm (bootloader-configuration-terminal-outputs config))
+        #~(format #f "if loadfont ~a; then
+  setup_gfxterm
+fi~%" #$font-file)
+        ""))
+
   (define (theme-colors type)
-    (let* ((theme  (grub-configuration-theme config))
+    (let* ((theme  (bootloader-theme config))
            (colors (type theme)))
       (string-append (symbol->string (assoc-ref colors 'fg)) "/"
                      (symbol->string (assoc-ref colors 'bg)))))
@@ -222,9 +216,8 @@ function setup_gfxterm {~a}
 # Set 'root' to the partition that contains /gnu/store.
 ~a
 
-if loadfont ~a; then
-  setup_gfxterm
-fi
+~a
+~a
 
 insmod png
 if background_image ~a; then
@@ -236,7 +229,8 @@ else
 fi~%"
                            #$setup-gfxterm-body
                            #$(grub-root-search store-device font-file)
-                           #$font-file
+                           #$(setup-gfxterm config font-file)
+                           #$(grub-setup-io config)
 
                            #$(strip-mount-point store-mount-point image)
                            #$(theme-colors grub-theme-color-normal)
@@ -247,6 +241,57 @@ fi~%"
 ;;; Configuration file.
 ;;;
 
+(define (grub-setup-io config)
+  "Return GRUB commands to configure the input / output interfaces.  The result
+is a string that can be inserted in grub.cfg."
+  (let* ((symbols->string (lambda (list)
+                           (string-join (map symbol->string list) " ")))
+         (outputs (bootloader-configuration-terminal-outputs config))
+         (inputs (bootloader-configuration-terminal-inputs config))
+         (unit (bootloader-configuration-serial-unit config))
+         (speed (bootloader-configuration-serial-speed config))
+
+         ;; Respectively, GRUB_TERMINAL_OUTPUT and GRUB_TERMINAL_INPUT,
+         ;; as documented in GRUB manual section "Simple Configuration
+         ;; Handling".
+         (valid-outputs '(console serial serial_0 serial_1 serial_2 serial_3
+                          gfxterm vga_text mda_text morse spkmodem))
+         (valid-inputs '(console serial serial_0 serial_1 serial_2 serial_3
+                         at_keyboard usb_keyboard))
+
+         (io (string-append
+               "terminal_output "
+               (symbols->string
+                 (map
+                   (lambda (output)
+                     (if (memq output valid-outputs) output #f)) outputs)) "\n"
+               (if (null? inputs)
+                 ""
+                 (string-append
+                   "terminal_input "
+                   (symbols->string
+                     (map
+                       (lambda (input)
+                         (if (memq input valid-inputs) input #f)) inputs)) "\n"))
+               ;; UNIT and SPEED are arguments to the same GRUB command
+               ;; ("serial"), so we process them together.
+               (if (or unit speed)
+                 (string-append
+                   "serial"
+                   (if unit
+                     ;; COM ports 1 through 4
+                     (if (and (exact-integer? unit) (<= unit 3) (>= unit 0))
+                       (string-append " --unit=" (number->string unit))
+                       #f)
+                     "")
+                   (if speed
+                     (if (exact-integer? speed)
+                       (string-append " --speed=" (number->string speed))
+                       #f)
+                     ""))
+                 ""))))
+    (format #f "~a" io)))
+
 (define (grub-root-search device file)
   "Return the GRUB 'search' command to look for DEVICE, which contains FILE,
 a gexp.  The result is a gexp that can be inserted in the grub.cfg-generation
@@ -282,12 +327,13 @@ code."
                                   (system (%current-system))
                                   (old-entries '()))
   "Return the GRUB configuration file corresponding to CONFIG, a
-<grub-configuration> object, and where the store is available at STORE-FS, a
-<file-system> object.  OLD-ENTRIES is taken to be a list of menu entries
-corresponding to old generations of the system."
+<bootloader-configuration> object, and where the store is available at
+STORE-FS, a <file-system> object.  OLD-ENTRIES is taken to be a list of menu
+entries corresponding to old generations of the system."
   (define all-entries
-    (append (map boot-parameters->menu-entry entries)
-            (grub-configuration-menu-entries config)))
+    (map boot-parameters->menu-entry
+         (append entries
+                 (bootloader-configuration-menu-entries config))))
 
   (define entry->gexp
     (match-lambda
@@ -326,8 +372,8 @@ corresponding to old generations of the system."
             (format port "
 set default=~a
 set timeout=~a~%"
-                    #$(grub-configuration-default-entry config)
-                    #$(grub-configuration-timeout config))
+                    #$(bootloader-configuration-default-entry config)
+                    #$(bootloader-configuration-timeout config))
             #$@(map entry->gexp all-entries)
 
             #$@(if (pair? old-entries)
@@ -339,4 +385,64 @@ submenu \"GNU system, old configurations...\" {~%")
 
     (gexp->derivation "grub.cfg" builder)))
 
+
+
+;;;
+;;; Install procedures.
+;;;
+
+(define install-grub
+  #~(lambda (bootloader device mount-point)
+      ;; Install GRUB on DEVICE which is mounted at MOUNT-POINT.
+      (let ((grub (string-append bootloader "/sbin/grub-install"))
+            (install-dir (string-append mount-point "/boot")))
+        ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or
+        ;; root partition.
+        (setenv "GRUB_ENABLE_CRYPTODISK" "y")
+
+        (unless (zero? (system* grub "--no-floppy"
+                                "--boot-directory" install-dir
+                                device))
+          (error "failed to install GRUB")))))
+
+
+
+;;;
+;;; Bootloader definitions.
+;;;
+
+(define grub-bootloader
+  (bootloader
+   (name 'grub)
+   (package grub)
+   (installer install-grub)
+   (configuration-file "/boot/grub/grub.cfg")
+   (configuration-file-generator grub-configuration-file)))
+
+(define* grub-efi-bootloader
+  (bootloader
+   (inherit grub-bootloader)
+   (name 'grub-efi)
+   (package grub-efi)))
+
+
+;;;
+;;; Compatibility macros.
+;;;
+
+(define-syntax grub-configuration
+  (syntax-rules (grub)
+                ((_ (grub package) fields ...)
+                 (if (eq? package grub)
+                     (bootloader-configuration
+                      (bootloader grub-bootloader)
+                      fields ...)
+                   (bootloader-configuration
+                    (bootloader grub-efi-bootloader)
+                    fields ...)))
+                ((_ fields ...)
+                 (bootloader-configuration
+                  (bootloader grub-bootloader)
+                  fields ...))))
+
 ;;; grub.scm ends here
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index beee56d437..a1d2a9cc7d 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -227,7 +227,11 @@ numeric gid or #f."
                      #:supplementary-groups supplementary-groups
                      #:comment comment
                      #:home home
+
+                     ;; Home directories of non-system accounts are created by
+                     ;; 'activate-user-home'.
                      #:create-home? (and create-home? system?)
+
                      #:shell shell
                      #:password password)
 
@@ -282,7 +286,10 @@ they already exist."
     (match-lambda
       ((name uid group supplementary-groups comment home create-home?
              shell password system?)
-       (unless (or (not home) (directory-exists? home))
+       ;; The home directories of system accounts are created during
+       ;; activation, not here.
+       (unless (or (not home) (not create-home?) system?
+                   (directory-exists? home))
          (let* ((pw  (getpwnam name))
                 (uid (passwd:uid pw))
                 (gid (passwd:gid pw)))
diff --git a/gnu/build/install.scm b/gnu/build/install.scm
index 5cb6055a0c..9e30c0d23e 100644
--- a/gnu/build/install.scm
+++ b/gnu/build/install.scm
@@ -22,8 +22,7 @@
   #:use-module (guix build store-copy)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
-  #:export (install-grub
-            install-grub-config
+  #:export (install-boot-config
             evaluate-populate-directive
             populate-root-file-system
             reset-timestamps
@@ -39,36 +38,17 @@
 ;;;
 ;;; Code:
 
-(define (install-grub grub.cfg device mount-point)
-  "Install GRUB with GRUB.CFG on DEVICE, which is assumed to be mounted on
-MOUNT-POINT.
-
-Note that the caller must make sure that GRUB.CFG is registered as a GC root
-so that the fonts, background images, etc. referred to by GRUB.CFG are not
-GC'd."
-  (install-grub-config grub.cfg mount-point)
-
-  ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or root
-  ;; partition.
-  (setenv "GRUB_ENABLE_CRYPTODISK" "y")
-
-  (unless (zero? (system* "grub-install" "--no-floppy"
-                          "--boot-directory"
-                          (string-append mount-point "/boot")
-                          device))
-    (error "failed to install GRUB")))
-
-(define (install-grub-config grub.cfg mount-point)
-  "Atomically copy GRUB.CFG into boot/grub/grub.cfg on the MOUNT-POINT.  Note
-that the caller must make sure that GRUB.CFG is registered as a GC root so
-that the fonts, background images, etc. referred to by GRUB.CFG are not GC'd."
-  (let* ((target (string-append mount-point "/boot/grub/grub.cfg"))
+(define (install-boot-config bootcfg bootcfg-location mount-point)
+  "Atomically copy BOOTCFG into BOOTCFG-LOCATION on the MOUNT-POINT.  Note
+that the caller must make sure that BOOTCFG is registered as a GC root so
+that the fonts, background images, etc. referred to by BOOTCFG are not GC'd."
+  (let* ((target (string-append mount-point bootcfg-location))
          (pivot  (string-append target ".new")))
     (mkdir-p (dirname target))
 
-    ;; Copy GRUB.CFG instead of just symlinking it, because symlinks won't
+    ;; Copy BOOTCFG instead of just symlinking it, because symlinks won't
     ;; work when /boot is on a separate partition.  Do that atomically.
-    (copy-file grub.cfg pivot)
+    (copy-file bootcfg pivot)
     (rename-file pivot target)))
 
 (define (evaluate-populate-directive directive target)
diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm
index 1eb9a4c45e..57619764ce 100644
--- a/gnu/build/vm.scm
+++ b/gnu/build/vm.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
   #:use-module (gnu build linux-boot)
   #:use-module (gnu build install)
   #:use-module (guix records)
+  #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
   #:use-module (srfi srfi-1)
@@ -41,7 +43,7 @@
             partition-size
             partition-file-system
             partition-label
-            partition-bootable?
+            partition-flags
             partition-initializer
 
             root-partition-initializer
@@ -141,7 +143,7 @@ the #:references-graphs parameter of 'derivation'."
   (size        partition-size)
   (file-system partition-file-system (default "ext4"))
   (label       partition-label (default #f))
-  (bootable?   partition-bootable? (default #f))
+  (flags       partition-flags (default '()))
   (initializer partition-initializer (default (const #t))))
 
 (define (fold2 proc seed1 seed2 lst)              ;TODO: factorize
@@ -168,9 +170,10 @@ actual /dev name based on DEVICE."
     (cons* "mkpart" "primary" "ext2"
            (format #f "~aB" offset)
            (format #f "~aB" (+ offset (partition-size part)))
-           (if (partition-bootable? part)
-               `("set" ,(number->string index) "boot" "on")
-               '())))
+           (append-map (lambda (flag)
+                         (list "set" (number->string index)
+                               (symbol->string flag) "on"))
+                       (partition-flags part))))
 
   (define (options partitions offset)
     (let loop ((partitions partitions)
@@ -211,10 +214,10 @@ actual /dev name based on DEVICE."
 
 (define MS_BIND 4096)                             ; <sys/mounts.h> again!
 
-(define* (format-partition partition type
-                           #:key label)
-  "Create a file system TYPE on PARTITION.  If LABEL is true, use that as the
-volume name."
+(define* (create-ext-file-system partition type
+                                 #:key label)
+  "Create an ext-family filesystem of TYPE on PARTITION.  If LABEL is true,
+use that as the volume name."
   (format #t "creating ~a partition...\n" type)
   (unless (zero? (apply system* (string-append "mkfs." type)
                         "-F" partition
@@ -223,6 +226,28 @@ volume name."
                             '())))
     (error "failed to create partition")))
 
+(define* (create-fat-file-system partition
+                                 #:key label)
+  "Create a FAT filesystem on PARTITION.  The number of File Allocation Tables
+will be determined based on filesystem size.  If LABEL is true, use that as the
+volume name."
+  (format #t "creating FAT partition...\n")
+  (unless (zero? (apply system* "mkfs.fat" partition
+                        (if label
+                            `("-n" ,label)
+                            '())))
+    (error "failed to create FAT partition")))
+
+(define* (format-partition partition type
+                           #:key label)
+  "Create a file system TYPE on PARTITION.  If LABEL is true, use that as the
+volume name."
+  (cond ((string-prefix? "ext" type)
+         (create-ext-file-system partition type #:label label))
+        ((or (string-prefix? "fat" type) (string= "vfat" type))
+         (create-fat-file-system partition #:label label))
+        (else (error "Unsupported file system."))))
+
 (define (initialize-partition partition)
   "Format PARTITION, a <partition> object with a non-#f 'device' field, mount
 it, run its initializer, and unmount it."
@@ -285,23 +310,65 @@ SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation."
     (unless register-closures?
       (reset-timestamps target))))
 
-(define (register-grub.cfg-root target bootcfg)
+(define (register-bootcfg-root target bootcfg)
   "On file system TARGET, register BOOTCFG as a GC root."
   (let ((directory (string-append target "/var/guix/gcroots")))
     (mkdir-p directory)
-    (symlink bootcfg (string-append directory "/grub.cfg"))))
+    (symlink bootcfg (string-append directory "/bootcfg"))))
+
+(define (install-efi grub esp config-file)
+  "Write a self-contained GRUB EFI loader to the mounted ESP using CONFIG-FILE."
+  (let* ((system %host-type)
+         ;; Hard code the output location to a well-known path recognized by
+         ;; compliant firmware. See "3.5.1.1 Removable Media Boot Behaviour":
+         ;; http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_6.pdf
+         (grub-mkstandalone (string-append grub "/bin/grub-mkstandalone"))
+         (efi-directory (string-append esp "/EFI/BOOT"))
+         ;; Map grub target names to boot file names.
+         (efi-targets (cond ((string-prefix? "x86_64" system)
+                             '("x86_64-efi" . "BOOTX64.EFI"))
+                            ((string-prefix? "i686" system)
+                             '("i386-efi" . "BOOTIA32.EFI"))
+                            ((string-prefix? "armhf" system)
+                             '("arm-efi" . "BOOTARM.EFI"))
+                            ((string-prefix? "aarch64" system)
+                             '("arm64-efi" . "BOOTAA64.EFI")))))
+    ;; grub-mkstandalone requires a TMPDIR to prepare the firmware image.
+    (setenv "TMPDIR" esp)
+
+    (mkdir-p efi-directory)
+    (unless (zero? (system* grub-mkstandalone "-O" (car efi-targets)
+                            "-o" (string-append efi-directory "/"
+                                                (cdr efi-targets))
+                            ;; Graft the configuration file onto the image.
+                            (string-append "boot/grub/grub.cfg=" config-file)))
+      (error "failed to create GRUB EFI image"))))
 
 (define* (initialize-hard-disk device
                                #:key
-                               grub.cfg
+                               bootloader-package
+                               bootcfg
+                               bootcfg-location
+                               bootloader-installer
+                               (grub-efi #f)
                                (partitions '()))
   "Initialize DEVICE as a disk containing all the <partition> objects listed
 in PARTITIONS, and using BOOTCFG as its bootloader configuration file.
 
 Each partition is initialized by calling its 'initializer' procedure,
 passing it a directory name where it is mounted."
+
+  (define (partition-bootable? partition)
+    "Return the first partition found with the boot flag set."
+    (member 'boot (partition-flags partition)))
+
+  (define (partition-esp? partition)
+    "Return the first EFI System Partition."
+    (member 'esp (partition-flags partition)))
+
   (let* ((partitions (initialize-partition-table device partitions))
          (root       (find partition-bootable? partitions))
+         (esp        (find partition-esp? partitions))
          (target     "/fs"))
     (unless root
       (error "no bootable partition specified" partitions))
@@ -311,10 +378,38 @@ passing it a directory name where it is mounted."
     (display "mounting root partition...\n")
     (mkdir-p target)
     (mount (partition-device root) target (partition-file-system root))
-    (install-grub grub.cfg device target)
-
-    ;; Register GRUB.CFG as a GC root.
-    (register-grub.cfg-root target grub.cfg)
+    (install-boot-config bootcfg bootcfg-location target)
+    (when bootloader-installer
+      (display "installing bootloader...\n")
+      (bootloader-installer bootloader-package device target))
+
+    (when esp
+      ;; Mount the ESP somewhere and install GRUB UEFI image.
+      (let ((mount-point (string-append target "/boot/efi"))
+            (grub-config (string-append target "/tmp/grub-standalone.cfg")))
+        (display "mounting EFI system partition...\n")
+        (mkdir-p mount-point)
+        (mount (partition-device esp) mount-point
+               (partition-file-system esp))
+
+        ;; Create a tiny configuration file telling the embedded grub
+        ;; where to load the real thing.
+        (call-with-output-file grub-config
+          (lambda (port)
+            (format port
+                    "insmod part_msdos~@
+                    search --set=root --label gnu-disk-image~@
+                    configfile /boot/grub/grub.cfg~%")))
+
+        (display "creating EFI firmware image...")
+        (install-efi grub-efi mount-point grub-config)
+        (display "done.\n")
+
+        (delete-file grub-config)
+        (umount mount-point)))
+
+    ;; Register BOOTCFG as a GC root.
+    (register-bootcfg-root target bootcfg)
 
     (umount target)))
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 28a283ab70..3ca546913c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -36,6 +36,9 @@
 GNU_SYSTEM_MODULES =				\
   gnu.scm					\
   %D%/artwork.scm				\
+  %D%/bootloader.scm				\
+  %D%/bootloader/grub.scm                       \
+  %D%/bootloader/extlinux.scm                   \
   %D%/packages.scm				\
   %D%/packages/abduco.scm			\
   %D%/packages/abiword.scm			\
@@ -194,6 +197,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/idris.scm			\
   %D%/packages/idutils.scm			\
   %D%/packages/image.scm			\
+  %D%/packages/image-processing.scm	\
   %D%/packages/image-viewers.scm	\
   %D%/packages/imagemagick.scm			\
   %D%/packages/indent.scm			\
@@ -356,6 +360,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/speech.scm			\
   %D%/packages/spice.scm			\
   %D%/packages/ssh.scm				\
+  %D%/packages/sssd.scm				\
   %D%/packages/stalonetray.scm			\
   %D%/packages/statistics.scm			\
   %D%/packages/storage.scm			\
@@ -441,7 +446,6 @@ GNU_SYSTEM_MODULES =				\
 						\
   %D%/system.scm				\
   %D%/system/file-systems.scm			\
-  %D%/system/grub.scm				\
   %D%/system/install.scm			\
   %D%/system/linux-container.scm		\
   %D%/system/linux-initrd.scm			\
@@ -497,6 +501,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/antiword-CVE-2014-8123.patch			\
   %D%/packages/patches/apr-skip-getservbyname-test.patch	\
   %D%/packages/patches/artanis-fix-Makefile.in.patch		\
+  %D%/packages/patches/aspell-default-dict-dir.patch		\
   %D%/packages/patches/ath9k-htc-firmware-binutils.patch	\
   %D%/packages/patches/ath9k-htc-firmware-gcc.patch		\
   %D%/packages/patches/ath9k-htc-firmware-objcopy.patch		\
@@ -515,7 +520,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/cairo-CVE-2016-9082.patch			\
   %D%/packages/patches/calibre-drop-unrar.patch			\
+  %D%/packages/patches/calibre-dont-load-remote-icons.patch	\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
+  %D%/packages/patches/calibre-use-packaged-feedparser.patch	\
   %D%/packages/patches/cdparanoia-fpic.patch			\
   %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch 	\
   %D%/packages/patches/ceph-disable-cpu-optimizations.patch	\
@@ -641,12 +648,15 @@ dist_patch_DATA =						\
   %D%/packages/patches/graphite2-non-linear-classes-even-number.patch \
   %D%/packages/patches/grep-timing-sensitive-test.patch		\
   %D%/packages/patches/gsl-test-i686.patch			\
+  %D%/packages/patches/gspell-dash-test.patch			\
   %D%/packages/patches/guile-1.8-cpp-4.5.patch			\
   %D%/packages/patches/guile-default-utf8.patch			\
   %D%/packages/patches/guile-linux-syscalls.patch		\
   %D%/packages/patches/guile-present-coding.patch		\
   %D%/packages/patches/guile-relocatable.patch			\
   %D%/packages/patches/guile-rsvg-pkgconfig.patch		\
+  %D%/packages/patches/guile-ssh-rexec-bug.patch		\
+  %D%/packages/patches/guile-ssh-double-free.patch		\
   %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch	\
   %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
   %D%/packages/patches/gtk2-theme-paths.patch			\
@@ -679,6 +689,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/jasper-CVE-2017-6850.patch		\
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/jbig2dec-CVE-2016-9601.patch		\
+  %D%/packages/patches/jbig2dec-CVE-2017-7885.patch		\
+  %D%/packages/patches/jbig2dec-CVE-2017-7975.patch		\
+  %D%/packages/patches/jbig2dec-CVE-2017-7976.patch		\
   %D%/packages/patches/jq-CVE-2015-8863.patch			\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/khmer-use-libraries.patch                \
@@ -834,8 +847,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/netsurf-system-utf8proc.patch		\
   %D%/packages/patches/netsurf-y2038-tests.patch		\
   %D%/packages/patches/netsurf-longer-test-timeout.patch	\
-  %D%/packages/patches/networkmanager-qt-activeconnection-test-1.patch \
-  %D%/packages/patches/networkmanager-qt-activeconnection-test-2.patch \
   %D%/packages/patches/ngircd-handle-zombies.patch		\
   %D%/packages/patches/ninja-zero-mtime.patch			\
   %D%/packages/patches/node-9077.patch				\
@@ -938,7 +949,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
   %D%/packages/patches/python-pygpgme-fix-pinentry-tests.patch	\
   %D%/packages/patches/python2-subprocess32-disable-input-test.patch	\
+  %D%/packages/patches/qemu-CVE-2017-7493.patch			\
   %D%/packages/patches/qt4-ldflags.patch			\
+  %D%/packages/patches/qtscript-disable-tests.patch		\
   %D%/packages/patches/quickswitch-fix-dmenu-check.patch	\
   %D%/packages/patches/rapicorn-isnan.patch			\
   %D%/packages/patches/ratpoison-shell.patch			\
@@ -961,8 +974,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/screen-fix-info-syntax-error.patch	\
   %D%/packages/patches/sdl-libx11-1.6.patch			\
   %D%/packages/patches/seq24-rename-mutex.patch			\
-  %D%/packages/patches/shadow-4.4-su-snprintf-fix.patch         \
-  %D%/packages/patches/shadow-CVE-2017-2616.patch		\
   %D%/packages/patches/slim-session.patch			\
   %D%/packages/patches/slim-config.patch			\
   %D%/packages/patches/slim-sigusr1.patch			\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index ef7bff10f3..aa6ccc0a73 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
 ;;; Copyright © 2017 Ethan R. Jones <doubleplusgood23@gmail.com>
+;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -80,7 +81,8 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages kerberos)
-  #:use-module (gnu packages gtk))
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages xml))
 
 (define-public aide
   (package
@@ -279,17 +281,15 @@ client and server, a telnet client and server, and an rsh client and server.")
 (define-public shadow
   (package
     (name "shadow")
-    (version "4.4")
+    (version "4.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://github.com/shadow-maint/shadow/releases/"
                     "download/" version "/shadow-" version ".tar.xz"))
-              (patches (search-patches "shadow-4.4-su-snprintf-fix.patch"
-                                       "shadow-CVE-2017-2616.patch"))
               (sha256
                (base32
-                "0g7hf55ar2pafg5g3ldx0fwzjk36wf4xb21p4ndanbjm3c2a9ab1"))))
+                "0hdpai78n63l3v3fgr3kkiqzhd0awrpfnnzz4mf7lmxdh61qb37w"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Assume System V `setpgrp (void)', which is the default on GNU
@@ -2180,3 +2180,53 @@ navigation, opening files and running tasks.  There is no config file and
 mime associations are hard-coded.  The incredible user-friendliness and speed
 make it a perfect utility on modern distros.")
     (license license:bsd-2)))
+
+(define-public thermald
+  (package
+    (name "thermald")
+    (version "1.6")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "https://github.com/01org/thermal_daemon/archive/v"
+                          version ".tar.gz"))
+      (sha256 (base32
+               "14klz9fnvi9jdlaqwrp61xa5nh051n8ykrs1fh1wxd7j66qf2fn6"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after
+                   'unpack 'autogen.sh-and-fix-paths
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     (let ((out (assoc-ref outputs "out")))
+                       ;; upstartconfir is hardcoded to /etc/init and the build
+                       ;; system tries to mkdir that.  We don't even need upstart
+                       ;; files at all; this is a fast and kludgy workaround
+                       (substitute* "data/Makefile.am"
+                         (("upstartconfdir = /etc/init")
+                          (string-append "upstartconfdir = "
+                                         out "/etc/init")))
+                       ;; Now run autogen
+                       (zero? (system* "sh" "autogen.sh"))))))
+       #:configure-flags
+       (let ((out      (assoc-ref %outputs "out")))
+         (list (string-append "--sysconfdir="
+                              out "/etc")
+               (string-append "--with-udev-dir="
+                              out "/lib/udev")
+               (string-append "--with-dbus-sys-dir="
+                              out "/etc/dbus-1/system.d")
+               "--localstatedir=/var"))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("glib" ,glib "bin")             ; for glib-genmarshal, etc.
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("dbus-glib" ,dbus-glib)
+       ("libxml2" ,libxml2)))
+    (home-page "https://01.org/linux-thermal-daemon/")
+    (synopsis "CPU scaling for thermal management")
+    (description "The Linux Thermal Daemon helps monitor and control temperature
+on systems running the Linux kernel.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index 06ba2ce472..509d428f64 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
@@ -26,6 +26,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix licenses)
+  #:use-module (gnu packages)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages base))
 
@@ -40,7 +41,8 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "1qgn5psfyhbrnap275xjfrzppf5a83fb67gpql0kfqv37al869gm"))))
+        "1qgn5psfyhbrnap275xjfrzppf5a83fb67gpql0kfqv37al869gm"))
+      (patches (search-patches "aspell-default-dict-dir.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -53,6 +55,15 @@
                  '("ASPELL_CONF" "" =
                    ("${ASPELL_CONF:-\"dict-dir ${GUIX_PROFILE:-$HOME/.guix-profile}/lib/aspell\"}")))))))))
     (inputs `(("perl" ,perl)))
+
+    (native-search-paths
+     ;; This is a Guix-specific environment variable that takes a single
+     ;; entry, not an actual search path.
+     (list (search-path-specification
+            (variable "ASPELL_DICT_DIR")
+            (separator #f)
+            (files '("lib/aspell")))))
+
     (home-page "http://aspell.net/")
     (synopsis "Spell checker")
     (description
@@ -66,7 +77,8 @@ dictionaries, including personal ones.")
 ;;; Dictionaries.
 ;;;
 ;;; Use 'export ASPELL_CONF="dict-dir $HOME/.guix-profile/lib/aspell"' to use
-;;; them.
+;;; them, or set the Guix-specific 'ASPELL_DICT_DIR', or just do nothing (as
+;;; long as 'HOME' is set, that's fine!).
 ;;;
 
 (define* (aspell-dictionary dict-name full-name
diff --git a/gnu/packages/aux-files/linux-libre/4.11-i686.conf b/gnu/packages/aux-files/linux-libre/4.11-i686.conf
index 6234a980ae..93c1f1747b 100644
--- a/gnu/packages/aux-files/linux-libre/4.11-i686.conf
+++ b/gnu/packages/aux-files/linux-libre/4.11-i686.conf
@@ -935,8 +935,7 @@ CONFIG_XFRM_STATISTICS=y
 CONFIG_XFRM_IPCOMP=m
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_SMC=m
-CONFIG_SMC_DIAG=m
+# CONFIG_SMC is not set
 CONFIG_INET=y
 CONFIG_IP_MULTICAST=y
 CONFIG_IP_ADVANCED_ROUTER=y
diff --git a/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf b/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf
index d47a5d1226..ea6e5cc899 100644
--- a/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf
+++ b/gnu/packages/aux-files/linux-libre/4.11-x86_64.conf
@@ -919,8 +919,7 @@ CONFIG_XFRM_STATISTICS=y
 CONFIG_XFRM_IPCOMP=m
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_SMC=m
-CONFIG_SMC_DIAG=m
+# CONFIG_SMC is not set
 CONFIG_INET=y
 CONFIG_IP_MULTICAST=y
 CONFIG_IP_ADVANCED_ROUTER=y
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index d5cb5783ab..5f0e84beed 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -118,7 +118,7 @@ spying and/or modification by the server.")
 (define-public par2cmdline
   (package
     (name "par2cmdline")
-    (version "0.6.14")
+    (version "0.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/Parchive/par2cmdline/archive/v"
@@ -126,21 +126,14 @@ spying and/or modification by the server.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0ykfb7ar0x0flfdgf6i8xphyv5b93dalbjj2jb6hx7sdjax33n1g"))
-              ;; This test merely needs a file to test recovery on, but
-              ;; /dev/random is essentially /dev/urandom plus minimum entropy
-              ;; locking, making the test hang indefinitely. This change is
-              ;; already upstream: remove on upgrade to future 0.6.15.
-              ;; https://github.com/Parchive/par2cmdline/commit/27723a678f780da82c79b98592592009c779a4fb
-              (modules '((guix build utils)))
-              (snippet
-               '(substitute* "tests/test20" (("if=/dev/random") "if=/dev/urandom")))))
+                "1m9vnv3pg0nds47raq2rd2kfpaad1sc10hv40hll5byksqlbfxyq"))))
     (native-inputs
      `(("automake" ,automake)
        ("autoconf" ,autoconf)))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:parallel-tests? #f
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'autoreconf
            (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 59a9acd67e..d135a18bf8 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -778,35 +778,98 @@ with the Linux kernel.")
        ((#:phases original-phases)
         ;; Add libmachuser.so and libhurduser.so to libc.so's search path.
         ;; See <http://lists.gnu.org/archive/html/bug-hurd/2015-07/msg00051.html>.
-        `(alist-cons-after
-          'install 'augment-libc.so
-          (lambda* (#:key outputs #:allow-other-keys)
-            (let* ((out (assoc-ref outputs "out")))
-              (substitute* (string-append out "/lib/libc.so")
-                (("/[^ ]+/lib/libc.so.0.3")
-                 (string-append out "/lib/libc.so.0.3" " libmachuser.so" " libhurduser.so"))))
-            #t)
-          (alist-cons-after
-           'pre-configure 'pre-configure-set-pwd
-           (lambda _
-             ;; Use the right 'pwd'.
-             (substitute* "configure"
-               (("/bin/pwd") "pwd")))
-           (alist-replace
-            'build
-            (lambda _
-              ;; Force mach/hurd/libpthread subdirs to build first in order to avoid
-              ;; linking errors.
-              ;; See <https://lists.gnu.org/archive/html/bug-hurd/2016-11/msg00045.html>
-              (let ((-j (list "-j" (number->string (parallel-job-count)))))
-                (let-syntax ((make (syntax-rules ()
-                                     ((_ target)
-                                      (zero? (apply system* "make" target -j))))))
-                  (and (make "mach/subdir_lib")
-                       (make "hurd/subdir_lib")
-                       (make "libpthread/subdir_lib")
-                       (zero? (apply system* "make" -j))))))
-            ,original-phases))))
+        `(modify-phases ,original-phases
+           ;; TODO: This is almost an exact copy of the phase of the same name
+           ;; in glibc/linux.  The only difference is that the i686 patch is
+           ;; not applied here.  In the next update cycle the patch moves to
+           ;; the patches field and this overwritten phase won't be needed any
+           ;; more.
+           (replace 'pre-configure
+             (lambda* (#:key inputs native-inputs outputs
+                       #:allow-other-keys)
+               (let* ((out  (assoc-ref outputs "out"))
+                      (bin  (string-append out "/bin"))
+                      ;; FIXME: Normally we would look it up only in INPUTS
+                      ;; but cross-base uses it as a native input.
+                      (bash (or (assoc-ref inputs "static-bash")
+                                (assoc-ref native-inputs "static-bash"))))
+                 ;; Install the rpc data base file under `$out/etc/rpc'.
+                 ;; FIXME: Use installFlags = [ "sysconfdir=$(out)/etc" ];
+                 (substitute* "sunrpc/Makefile"
+                   (("^\\$\\(inst_sysconfdir\\)/rpc(.*)$" _ suffix)
+                    (string-append out "/etc/rpc" suffix "\n"))
+                   (("^install-others =.*$")
+                    (string-append "install-others = " out "/etc/rpc\n")))
+
+                 (substitute* "Makeconfig"
+                   ;; According to
+                   ;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/glibc.html>,
+                   ;; linking against libgcc_s is not needed with GCC
+                   ;; 4.7.1.
+                   ((" -lgcc_s") ""))
+
+                 ;; Have `system' use that Bash.
+                 (substitute* "sysdeps/posix/system.c"
+                   (("#define[[:blank:]]+SHELL_PATH.*$")
+                    (format #f "#define SHELL_PATH \"~a/bin/bash\"\n"
+                            bash)))
+
+                 ;; Same for `popen'.
+                 (substitute* "libio/iopopen.c"
+                   (("/bin/sh")
+                    (string-append bash "/bin/sh")))
+
+                 ;; Same for the shell used by the 'exec' functions for
+                 ;; scripts that lack a shebang.
+                 (substitute* (find-files "." "^paths\\.h$")
+                   (("#define[[:blank:]]+_PATH_BSHELL[[:blank:]].*$")
+                    (string-append "#define _PATH_BSHELL \""
+                                   bash "/bin/sh\"\n")))
+
+                 ;; Nscd uses __DATE__ and __TIME__ to create a string to
+                 ;; make sure the client and server come from the same
+                 ;; libc.  Use something deterministic instead.
+                 (substitute* "nscd/nscd_stat.c"
+                   (("static const char compilation\\[21\\] =.*$")
+                    (string-append
+                     "static const char compilation[21] = \""
+                     (string-take (basename out) 20) "\";\n")))
+
+                 ;; Make sure we don't retain a reference to the
+                 ;; bootstrap Perl.
+                 (substitute* "malloc/mtrace.pl"
+                   (("^#!.*")
+                    ;; The shebang can be omitted, because there's the
+                    ;; "bilingual" eval/exec magic at the top of the file.
+                    "")
+                   (("exec @PERL@")
+                    "exec perl")))))
+           (add-after 'install 'augment-libc.so
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")))
+                 (substitute* (string-append out "/lib/libc.so")
+                   (("/[^ ]+/lib/libc.so.0.3")
+                    (string-append out "/lib/libc.so.0.3" " libmachuser.so" " libhurduser.so"))))
+               #t))
+           (add-after 'pre-configure 'pre-configure-set-pwd
+             (lambda _
+               ;; Use the right 'pwd'.
+               (substitute* "configure"
+                 (("/bin/pwd") "pwd"))
+               #t))
+           (replace 'build
+             (lambda _
+               ;; Force mach/hurd/libpthread subdirs to build first in order to avoid
+               ;; linking errors.
+               ;; See <https://lists.gnu.org/archive/html/bug-hurd/2016-11/msg00045.html>
+               (let ((-j (list "-j" (number->string (parallel-job-count)))))
+                 (let-syntax ((make (syntax-rules ()
+                                      ((_ target)
+                                       (zero? (apply system* "make" target -j))))))
+                   (and (make "mach/subdir_lib")
+                        (make "hurd/subdir_lib")
+                        (make "libpthread/subdir_lib")
+                        (zero? (apply system* "make" -j)))))))))
         ((#:configure-flags original-configure-flags)
         `(append (list "--host=i586-pc-gnu"
 
diff --git a/gnu/packages/benchmark.scm b/gnu/packages/benchmark.scm
index ab5da5ffc5..136f141d8b 100644
--- a/gnu/packages/benchmark.scm
+++ b/gnu/packages/benchmark.scm
@@ -30,7 +30,7 @@
 (define-public fio
   (package
     (name "fio")
-    (version "2.19")
+    (version "2.20")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -38,7 +38,7 @@
                        "fio-" version ".tar.bz2"))
               (sha256
                (base32
-                "0dwx2dpbsg3xyd8jzm64gazy6ij4zirlfdrbgcxr1a0z5smcmcw1"))))
+                "15vgbzlcjd21bi9ahlbs8h9ca4raw5qgi711n802qmagjdjbmlxw"))))
     (build-system gnu-build-system)
     (arguments
      '(#:test-target "test"
@@ -78,8 +78,8 @@
                                  (dst (string-append newbin "/" file)))
                              (link src dst)
                              (delete-file src)))
-                         '("fio2gnuplot" "fio_latency2csv.py"
-                           "fiologparser_hist.py" "fiologparser.py"))
+                         '("fio2gnuplot"  "fiologparser_hist.py"
+                           "fiologparser.py"))
                ;; Make sure numpy et.al is found.
                (wrap-program (string-append newbin "/fiologparser_hist.py")
                  `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 9f5d8141d8..9b4afbfcfb 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -614,7 +614,7 @@ Python.")
 (define-public python-biom-format
   (package
    (name "python-biom-format")
-   (version "2.1.5")
+   (version "2.1.6")
    (source
     (origin
      (method url-fetch)
@@ -625,14 +625,15 @@ Python.")
      (file-name (string-append name "-" version ".tar.gz"))
      (sha256
       (base32
-       "1n25w3p1rixbpac8iysmzcja6m4ip5r6sz19l8y6wlwi49hxn278"))))
+       "08cr7wpahk6zb31h4bs7jmzpvxcqv9s13xz40h6y2h656jvdvnpj"))))
    (build-system python-build-system)
    (propagated-inputs
     `(("python-numpy" ,python-numpy)
       ("python-scipy" ,python-scipy)
       ("python-future" ,python-future)
       ("python-click" ,python-click)
-      ("python-h5py" ,python-h5py)))
+      ("python-h5py" ,python-h5py)
+      ("python-pandas" ,python-pandas)))
    (native-inputs
     `(("python-nose" ,python-nose)))
    (home-page "http://www.biom-format.org")
@@ -2092,7 +2093,7 @@ identify enrichments with functional annotations of the genome.")
 (define-public diamond
   (package
     (name "diamond")
-    (version "0.8.38")
+    (version "0.9.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2101,7 +2102,7 @@ identify enrichments with functional annotations of the genome.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0q2z6z5f7c0kbbzpjamkcyqg0rc6h5rxfp97qbmb0wxaycr7jajq"))))
+                "19lvz661mmgikbry0nvnsjc01fdxqbw9rl2868dvjfraxbcx9ras"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no "check" target
@@ -2121,8 +2122,7 @@ translated DNA query sequences against a protein reference database (BLASTP
 and BLASTX alignment mode).  The speedup over BLAST is up to 20,000 on short
 reads at a typical sensitivity of 90-99% relative to BLAST depending on the
 data and settings.")
-    (license (license:non-copyleft "file://src/COPYING"
-                                   "See src/COPYING in the distribution."))))
+    (license license:agpl3+)))
 
 (define-public discrover
   (package
@@ -2417,7 +2417,7 @@ similarity of community members.")
 (define-public fasttree
   (package
    (name "fasttree")
-   (version "2.1.9")
+   (version "2.1.10")
    (source (origin
              (method url-fetch)
              (uri (string-append
@@ -2425,7 +2425,7 @@ similarity of community members.")
                    version ".c"))
              (sha256
               (base32
-               "0ljvvw8i1als1wbfzvrf15c3ii2vw9db20a259g6pzg34xyyb97k"))))
+               "0vcjdvy1j4m702vmak4svbfkrpcw63k7wymfksjp9a982zy8kjsl"))))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f ; no "check" target
@@ -2551,7 +2551,7 @@ Illumina, Roche 454, and the SOLiD platform.")
 (define-public fraggenescan
   (package
     (name "fraggenescan")
-    (version "1.20")
+    (version "1.30")
     (source
      (origin
        (method url-fetch)
@@ -2559,7 +2559,7 @@ Illumina, Roche 454, and the SOLiD platform.")
         (string-append "mirror://sourceforge/fraggenescan/"
                        "FragGeneScan" version ".tar.gz"))
        (sha256
-        (base32 "1zzigqmvqvjyqv4945kv6nc5ah2xxm1nxgrlsnbzav3f5c0n0pyj"))))
+        (base32 "158dcnwczgcyhwm4qlx19sanrwgdpzf6bn2y57mbpx55lkgz1mzj"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -2574,6 +2574,7 @@ Illumina, Roche 454, and the SOLiD platform.")
                   (string-append "system(\"" (which "rm")))
                  (("system\\(\"mv")
                   (string-append "system(\"" (which "mv")))
+                 (("\\\"awk") (string-append "\"" (which "awk")))
                  ;; This script and other programs expect the training files
                  ;; to be in the non-standard location bin/train/XXX. Change
                  ;; this to be share/fraggenescan/train/XXX instead.
@@ -2583,10 +2584,7 @@ Illumina, Roche 454, and the SOLiD platform.")
                                  "train/\".$FGS_train_file;")))
                (substitute* "run_hmm.c"
                  (("^  strcat\\(train_dir, \\\"train/\\\"\\);")
-                  (string-append "  strcpy(train_dir, \"" share "/train/\");")))
-               (substitute* "post_process.pl"
-                 (("^my \\$dir = substr.*")
-                  (string-append "my $dir = \"" share "\";"))))
+                  (string-append "  strcpy(train_dir, \"" share "/train/\");"))))
              #t))
          (replace 'build
            (lambda _ (and (zero? (system* "make" "clean"))
@@ -2598,8 +2596,6 @@ Illumina, Roche 454, and the SOLiD platform.")
                     (share (string-append out "/share/fraggenescan/train")))
                (install-file "run_FragGeneScan.pl" bin)
                (install-file "FragGeneScan" bin)
-               (install-file "FGS_gff.py" bin)
-               (install-file "post_process.pl" bin)
                (copy-recursively "train" share))))
          (delete 'check)
          (add-after 'install 'post-install-check
@@ -2607,8 +2603,9 @@ Illumina, Roche 454, and the SOLiD platform.")
            ;; output files gets created.
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (string-append (assoc-ref outputs "out")))
-                    (bin (string-append out "/bin/")))
-               (and (zero? (system* (string-append bin "run_FragGeneScan.pl")
+                    (bin (string-append out "/bin/"))
+                    (frag (string-append bin "run_FragGeneScan.pl")))
+               (and (zero? (system* frag ; Test complete genome.
                              "-genome=./example/NC_000913.fna"
                              "-out=./test2"
                              "-complete=1"
@@ -2616,7 +2613,13 @@ Illumina, Roche 454, and the SOLiD platform.")
                     (file-exists? "test2.faa")
                     (file-exists? "test2.ffn")
                     (file-exists? "test2.gff")
-                    (file-exists? "test2.out"))))))))
+                    (file-exists? "test2.out")
+                    (zero? (system* ; Test incomplete sequences.
+                            frag
+                            "-genome=./example/NC_000913-fgs.ffn"
+                            "-out=out"
+                            "-complete=0"
+                            "-train=454_30")))))))))
     (inputs
      `(("perl" ,perl)
        ("python" ,python-2))) ;not compatible with python 3.
@@ -2696,6 +2699,46 @@ comment or quality sections.")
       (supported-systems '("x86_64-linux"))
       (license license:expat))))
 
+(define-public gemma
+  (package
+    (name "gemma")
+    (version "0.96")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/xiangzhou/GEMMA/archive/v"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "055ynn16gd12pf78n4vr2a9jlwsbwzajpdnf2y2yilg1krfff222"))))
+    (inputs
+     `(("gsl" ,gsl)
+       ("lapack" ,lapack)
+       ("zlib" ,zlib)))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("FORCE_DYNAMIC=1") ; use shared libs
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'bin-mkdir
+                     (lambda _
+                       (mkdir-p "bin")))
+         (replace 'install
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (let ((out (assoc-ref outputs "out")))
+                      (install-file "bin/gemma"
+                                    (string-append
+                                     out "/bin"))))))
+       #:tests? #f)) ; no tests included yet
+    (home-page "https://github.com/xiangzhou/GEMMA")
+    (synopsis "Tool for genome-wide efficient mixed model association")
+    (description
+     "Genome-wide Efficient Mixed Model Association (GEMMA) provides a
+standard linear mixed model resolver with application in genome-wide
+association studies (GWAS).")
+    (license license:gpl3)))
+
 (define-public grit
   (package
     (name "grit")
@@ -4054,7 +4097,7 @@ partial genes, and identifies translation initiation sites.")
 (define-public roary
   (package
     (name "roary")
-    (version "3.7.0")
+    (version "3.8.2")
     (source
      (origin
        (method url-fetch)
@@ -4063,7 +4106,7 @@ partial genes, and identifies translation initiation sites.")
              version ".tar.gz"))
        (sha256
         (base32
-         "0x2hpb3nfsc6x2nq1788w0fhqfzc7cn2dp4xwyva9m3k6xlz0m43"))))
+         "03dfr2cd5fp80bcr65923zpdzrasvcxl7c2vgh8373v25a1yfap7"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -5396,18 +5439,13 @@ Cuffdiff or Ballgown programs.")
 (define-public taxtastic
   (package
     (name "taxtastic")
-    (version "0.5.7")
-    ;; Versions after 0.5.4 do not appear to be distributed on PyPI so we
-    ;; download the package from GitHub.
+    (version "0.6.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://github.com/fhcrc/taxtastic/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (uri (pypi-uri "taxtastic" version))
               (sha256
                (base32
-                "1s0h5y1lds1c40jhir5585ffm6yjyn8h5aqimpgv64rhqhfv56xx"))))
+                "0s79z8kfl853x7l4h8ms05k31q87aw62nrchlk20w9n227j35929"))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2
@@ -7904,14 +7942,14 @@ library implementing most of the pipeline's features.")
 (define-public r-mutationalpatterns
   (package
     (name "r-mutationalpatterns")
-    (version "1.2.0")
+    (version "1.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MutationalPatterns" version))
        (sha256
         (base32
-         "00jh1qklj8jb9j7mwvkfybq368h2wg9yc2cwkgb7yb9vsw72r61d"))))
+         "1s50diwh1j6vg3mgahh6bczvq74mfdbmwjrad4d5lh723gnc5pjg"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-biocgenerics" ,r-biocgenerics)
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 1fb552de15..7937c67781 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -88,7 +88,9 @@ and BOOTP/TFTP for network booting of diskless machines.")
     ;; Source files only say GPL2 and GPL3 are allowed.
     (license (list license:gpl2 license:gpl3))))
 
-(define-public bind
+;; 'bind' is the name of a built-in Guile procedure, which is why we choose a
+;; different name here.
+(define-public isc-bind
   (package
     (name "bind")
     (version "9.11.1")
diff --git a/gnu/packages/ebook.scm b/gnu/packages/ebook.scm
index 0a53e6ca99..1d64e9b69f 100644
--- a/gnu/packages/ebook.scm
+++ b/gnu/packages/ebook.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,7 +20,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages ebook)
-  #:use-module ((guix licenses) #:select (gpl3 lgpl2.1+))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
@@ -27,8 +28,10 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
@@ -38,6 +41,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages web)
   #:use-module (gnu packages xorg))
 
 (define-public chmlib
@@ -56,12 +60,12 @@
     (home-page "http://www.jedrea.com/chmlib/")
     (synopsis "Library for CHM files")
     (description "CHMLIB is a library for dealing with ITSS/CHM format files.")
-    (license lgpl2.1+)))
+    (license license:lgpl2.1+)))
 
 (define-public calibre
   (package
     (name "calibre")
-    (version "2.76.0")
+    (version "2.85.1")
     (source
       (origin
         (method url-fetch)
@@ -70,33 +74,35 @@
                             version ".tar.xz"))
         (sha256
          (base32
-          "1xfm586n6gm44mkyn25mbiyhj6w9ji9yl6fvmnr4zk1q6qcga3v8"))
+          "1g8s0kp1gj05yysfgqpp2lgrxvzc0fsny1hwzx5jh9hvqn0b53cc"))
         ;; Remove non-free or doubtful code, see
         ;; https://lists.gnu.org/archive/html/guix-devel/2015-02/msg00478.html
         (modules '((guix build utils)))
         (snippet
           '(begin
+            (delete-file-recursively "src/calibre/ebooks/markdown")
             (delete-file-recursively "src/unrar")
-            (delete-file "src/odf/thumbnail.py")))
+            (delete-file "src/odf/thumbnail.py")
+            (delete-file-recursively "resources/fonts/liberation")
+            (delete-file-recursively "src/chardet")
+            (substitute* (find-files "." "\\.py")
+              (("calibre\\.ebooks\\.markdown") "markdown"))
+            #t))
         (patches (search-patches "calibre-drop-unrar.patch"
+                                 "calibre-use-packaged-feedparser.patch"
+                                 "calibre-dont-load-remote-icons.patch"
                                  "calibre-no-updates-dialog.patch"))))
     (build-system python-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
+       ("font-liberation" ,font-liberation)
        ("qtbase" ,qtbase) ; for qmake
        ;; xdg-utils is supposed to be used for desktop integration, but it
        ;; also creates lots of messages
        ;; mkdir: cannot create directory '/homeless-shelter': Permission denied
+       ("python2-flake8" ,python2-flake8)
        ("xdg-utils" ,xdg-utils)))
-    ;; FIXME: The following are missing inputs according to the documentation,
-    ;; but the package can apparently be used without them,
-    ;; They may need to be added if a deficiency is detected.
-    ;; BeautifulSoup >= 3.0.5
-    ;; dnspython >= 1.6.0
-    ;; poppler >= 0.20.2
-    ;; libwmf >= 0.2.8
-    ;; psutil >= 0.6.1
-    ;; python-pygments >= 2.0.1 ; used for ebook editing
+    ;; Beautifulsoup3 is bundled but obsolete and not packaged, so just leave it bundled.
     (inputs
      `(("chmlib" ,chmlib)
        ("fontconfig" ,fontconfig)
@@ -108,16 +114,22 @@
        ("libxrender" ,libxrender)
        ("openssl" ,openssl)
        ("podofo" ,podofo)
+       ("poppler" ,poppler)
        ("python" ,python-2)
        ("python2-apsw" ,python2-apsw)
+       ("python2-chardet" ,python2-chardet)
        ("python2-cssselect" ,python2-cssselect)
        ("python2-cssutils" ,python2-cssutils)
        ("python2-dateutil" ,python2-dateutil)
        ("python2-dbus" ,python2-dbus)
+       ("python2-dnspython" ,python2-dnspython)
+       ("python2-feedparser" ,python2-feedparser)
        ("python2-lxml" ,python2-lxml)
+       ("python2-markdown" ,python2-markdown)
        ("python2-mechanize" ,python2-mechanize)
        ("python2-netifaces" ,python2-netifaces)
        ("python2-pillow" ,python2-pillow)
+       ("python2-pygments" ,python2-pygments)
        ("python2-pyqt" ,python2-pyqt)
        ("python2-sip" ,python2-sip)
        ("sqlite" ,sqlite)))
@@ -130,6 +142,12 @@
        #:use-setuptools? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda _
+             (substitute* "src/calibre/linux.py"
+               ;; We can't use the uninstaller in Guix. Don't build it.
+               (("self\\.create_uninstaller()") ""))
+             #t))
          (add-before 'build 'configure
           (lambda* (#:key inputs #:allow-other-keys)
             (let ((podofo (assoc-ref inputs "podofo"))
@@ -137,7 +155,17 @@
               (substitute* "setup/build_environment.py"
                 (("sys.prefix") (string-append "'" pyqt "'")))
               (setenv "PODOFO_INC_DIR" (string-append podofo "/include/podofo"))
-              (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib"))))))))
+              (setenv "PODOFO_LIB_DIR" (string-append podofo "/lib")))))
+         (add-after 'install 'install-font-liberation
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (for-each (lambda (file)
+                         (install-file file (string-append
+                                             (assoc-ref outputs "out")
+                                             "/share/calibre/fonts/liberation")))
+                       (find-files (string-append
+                                    (assoc-ref inputs "font-liberation")
+                                    "/share/fonts/truetype")))
+             #t)))))
     (home-page "http://calibre-ebook.com/")
     (synopsis "E-book library management software")
     (description "Calibre is an ebook library manager.  It can view, convert
@@ -145,4 +173,16 @@ and catalog ebooks in most of the major ebook formats.  It can also talk
 to many ebook reader devices.  It can go out to the Internet and fetch
 metadata for books.  It can download newspapers and convert them into
 ebooks for convenient reading.")
-    (license gpl3))) ; some files are under various other licenses, see COPYRIGHT
+    ;; Calibre is largely GPL3+, but includes a number of components covered
+    ;; by other licenses. See COPYRIGHT for more details.
+    (license (list license:gpl3+
+                   license:gpl2+
+                   license:lgpl2.1+
+                   license:lgpl2.1
+                   license:bsd-3
+                   license:expat
+                   license:zpl2.1
+                   license:asl2.0
+                   license:public-domain
+                   license:silofl1.1
+                   license:cc-by-sa3.0))))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 3d9e83713e..4a0d20c9f1 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -1156,14 +1156,14 @@ rather than the contents of files.")
 (define-public emacs-async
   (package
     (name "emacs-async")
-    (version "1.9")
+    (version "1.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.gnu.org/packages/async-"
                                   version ".tar"))
               (sha256
                (base32
-                "1ip5nc8xyln5szvqwp6wqva9xr84pn8ssn3nnphrszr19y4js2bm"))))
+                "17fnvrj7jww29sav6a6jpizclg4w2962m6h37akpii71gf0vrffw"))))
     (build-system emacs-build-system)
     (home-page "https://elpa.gnu.org/packages/async.html")
     (synopsis "Asynchronous processing in Emacs")
@@ -3361,7 +3361,7 @@ Dust.js, React/JSX, Angularjs, ejs, etc.")
 (define-public emacs-helm
   (package
     (name "emacs-helm")
-    (version "1.9.8")
+    (version "2.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3370,7 +3370,7 @@ Dust.js, React/JSX, Angularjs, ejs, etc.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "019dpzr6l83k1fgxn40aqxjvrpz4dl5d9vi7fc5wjnifmxaqxia6"))))
+                "1scdirpclgq3pi1j2c90gqaaqg1pgvasp98f4jqw8c5xbqcr7jdw"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)
@@ -3387,6 +3387,55 @@ considered to be its successor.  Helm sets out to clean up the legacy code in
 not tied in the trap of backward compatibility.")
     (license license:gpl3+)))
 
+(define-public emacs-helm-swoop
+  (package
+    (name "emacs-helm-swoop")
+    (version "1.7.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/ShingoFukuyama/helm-swoop/archive/"
+                    version
+                    ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1z34pfi0gsk054pxr906ilaalaw0xz3s536163gf9ykkwmc2356d"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-helm" ,emacs-helm)))
+    (home-page "https://github.com/ShingoFukuyama/helm-swoop")
+    (synopsis "Filter and jump to lines in an Emacs buffer using Helm")
+    (description
+     "This package builds on the Helm interface to provide several commands
+for search-based navigation of buffers.")
+    (license license:gpl2+)))
+
+(define-public emacs-helm-projectile
+  (package
+    (name "emacs-helm-projectile")
+    (version "0.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/bbatsov/helm-projectile/archive/v"
+                    version
+                    ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "19cfmilqh8kbab3b2hmx6lyrj73q6vfmn3p730x95g23iz16mnd5"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-helm" ,emacs-helm)
+       ("emacs-projectile" ,emacs-projectile)))
+    (home-page "https://github.com/bbatsov/helm-projectile")
+    (synopsis "Helm integration for Projectile")
+    (description
+     "This Emacs library provides a Helm interface for Projectile.")
+    (license license:gpl3+)))
+
 (define-public emacs-cider
   (package
     (name "emacs-cider")
@@ -3579,14 +3628,14 @@ passive voice.")
 (define-public emacs-org
   (package
     (name "emacs-org")
-    (version "20170502")
+    (version "20170515")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://elpa.gnu.org/packages/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "12inz804j55ycprb2m3ay54d1bhwhjssmn5nrfm7cfklyhfsy27s"))))
+                "0lfapcxil69x1a63cszgq72lqks1z3gpyxw7vcllqlgi7n7a4y6f"))))
     (build-system emacs-build-system)
     (home-page "http://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
@@ -4145,7 +4194,7 @@ jQuery and Bootstrap resources included via osscdn.")
 (define-public emacspeak
   (package
     (name "emacspeak")
-    (version "45.0")
+    (version "46.0")
     (source
      (origin
        (method url-fetch)
@@ -4154,7 +4203,11 @@ jQuery and Bootstrap resources included via osscdn.")
              version "/emacspeak-" version ".tar.bz2"))
        (sha256
         (base32
-         "0npcr867xbbhwa0i7v26hnk4z2d51522jwcfwc594j74kbv3g6ka"))))
+         "15x4yfp3wl2fxm1nkx6pz3clw6zyw3argcsqxgcx6pa28sivlg2n"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Delete the bundled byte-compiled elisp files.
+        '(for-each delete-file (find-files "lisp" "\\.elc$")))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list (string-append "prefix="
@@ -4162,25 +4215,35 @@ jQuery and Bootstrap resources included via osscdn.")
        #:phases
        (modify-phases %standard-phases
          (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* "Makefile"
-               (("\\$\\(INSTALL\\) -d \\$\\(libdir\\)/servers/linux-outloud")
-                "")
-               (("\\$\\(INSTALL\\)  -m 755 \\$\\{OUTLOUD\\}.*$") "")
-               (("\\*info\\*") "*"))
-             (substitute* "etc/emacspeak.sh.def"
-               (("<emacspeak-dir>")
-                (string-append (assoc-ref outputs "out")
-                               "/share/emacs/site-lisp/emacspeak/lisp")))
+           (lambda _
+             ;; Configure Emacspeak according to etc/install.org.
              (zero? (system* "make" "config"))))
-         (add-after 'install 'install-espeak-server
+         (add-after 'build 'build-espeak
+           (lambda _
+             (zero? (system* "make" "espeak"))))
+         (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               (with-directory-excursion "servers/linux-espeak"
-                 (and (zero? (system* "make"))
-                      (zero? (system* "make" "install"
-                                      (string-append "PREFIX=" out))))))))
-         (add-after 'install-espeak-server 'wrap-program
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lisp (string-append out "/share/emacs/site-lisp/emacspeak"))
+                    (info (string-append out "/share/info")))
+               ;; According to etc/install.org, the Emacspeak directory should
+               ;; be copied to its installation destination.
+               (for-each
+                (lambda (file)
+                  (copy-recursively file (string-append lisp "/" file)))
+                '("etc" "info" "lisp" "media" "servers" "sounds" "stumpwm"
+                  "xsl"))
+               ;; Make sure emacspeak is loaded from the correct directory.
+               (substitute* "etc/emacspeak.sh"
+                 (("exec emacs.*$")
+                  (string-append "exec emacs -l " lisp
+                                 "/lisp/emacspeak-setup.el $CL_ALL")))
+               ;; Install the convenient startup script.
+               (mkdir-p bin)
+               (copy-file "etc/emacspeak.sh" (string-append bin "/emacspeak")))
+             #t))
+         (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (emacspeak (string-append out "/bin/emacspeak"))
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 362860e17d..7ad93653e9 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -108,7 +108,8 @@
      `(("boost" ,boost)
        ("muparser" ,muparser)
        ("freetype" ,freetype)
-       ("qt" ,qt)))
+       ("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("which" ,which)))
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 3517f06acf..fc1e3dcf37 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -1059,14 +1059,14 @@ reference interpreter, using the Glk API.")
 (define-public fizmo
   (package
     (name "fizmo")
-    (version "0.7.9")
+    (version "0.8.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://christoph-ender.de/fizmo/source/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1w7cgyjrhgkadjrazijzhq7zh0pl5bfc6wl7mdpgh020y4kp46d7"))))
+                "1sd988db2302r7cbfcfghbmg8ck43c6hvnlnlpb0rqxb7pm9cwyy"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -1079,12 +1079,13 @@ reference interpreter, using the Glk API.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("libjpeg" ,libjpeg)
+     `(("freetype" ,freetype)
+       ("libjpeg" ,libjpeg)
        ("libpng" ,libpng)
        ("libsndfile" ,libsndfile)
        ("libxml2" ,libxml2)
        ("ncurses" ,ncurses)
-       ("sdl" ,sdl)))
+       ("sdl2" ,sdl2)))
     (home-page "https://christoph-ender.de/fizmo/")
     (synopsis "Z-machine interpreter")
     (description
@@ -1410,14 +1411,14 @@ older games.")
 (define-public gamine
   (package
     (name "gamine")
-    (version "1.4")
+    (version "1.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gamine-game/"
                                   "gamine-" version ".tar.gz"))
               (sha256
                (base32
-                "1iny959i1kl2ab6z5xi4s66mrvrwcarxyvjfp2k1sx532s8knk8h"))))
+                "08wnk7w84c2413hwny89j2cn89cvfdf67bfc6wl0bf475if0mf4h"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -1490,7 +1491,7 @@ is programmed in Haskell.")
 (define-public manaplus
   (package
     (name "manaplus")
-    (version "1.7.3.4")
+    (version "1.7.5.14")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1498,7 +1499,7 @@ is programmed in Haskell.")
                     version "/manaplus-" version ".tar.xz"))
               (sha256
                (base32
-                "0mbxzsgjg16pqa3jnxkd7wwvw1lrx455r7fvwjfhzp0yv7acrn10"))))
+                "1b5q79jkdrck5lq8lvhnpq2mly257r8lylp7b8sp8xn4365f86ch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -1512,7 +1513,6 @@ is programmed in Haskell.")
        ("curl" ,curl)
        ("libxml2" ,libxml2)
        ("mesa" ,mesa)
-       ("physfs" ,physfs)
        ("sdl-union" ,(sdl-union))))
     (home-page "http://manaplus.org")
     (synopsis "Client for 'The Mana World' and similar games")
@@ -2160,14 +2160,14 @@ and a game metadata scraper.")
 (define openttd-engine
   (package
     (name "openttd-engine")
-    (version "1.6.1")
+    (version "1.7.0")
     (source
      (origin (method url-fetch)
              (uri (string-append "http://binaries.openttd.org/releases/"
                                  version "/openttd-" version "-source.tar.xz"))
              (sha256
               (base32
-               "1ak32fj5xkk2fvmm3g8i7wzmk4bh2ijsp8fzvvw5wj6365p9j24v"))
+               "1q4r5860dpkkw4fpfz3f8mvdd8xjpnwwzr9zybgmgb255bs0g4yz"))
              (modules '((guix build utils)))
              (snippet
               ;; The DOS port contains proprietary software.
@@ -2207,8 +2207,8 @@ and a game metadata scraper.")
 passengers by land, water and air.  It is a re-implementation of Transport
 Tycoon Deluxe with many enhancements including multiplayer mode,
 internationalization support, conditional orders and the ability to clone,
-autoreplace and autoupdate vehicles.  This package only includes the game engine.  When you start
-it you will be prompted to download a graphics set.")
+autoreplace and autoupdate vehicles.  This package only includes the game
+engine.  When you start it you will be prompted to download a graphics set.")
     (home-page "http://openttd.org/")
     ;; This package is GPLv2, except for a few files located in
     ;; "src/3rdparty/" which are under the 3-clause BSD, LGPLv2.1+ and Zlib
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 4e8736cd71..1cb651c96b 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -132,6 +132,7 @@ printing, and psresize, for adjusting page sizes.")
    (name "ghostscript")
    (replacement ghostscript/fixed)
    (version "9.14.0")
+   ;; XXX Try removing the bundled copy of jbig2dec.
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/ghostscript/gnu-ghostscript-"
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 81c747ce14..d53d15894f 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -51,6 +51,7 @@
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
+  #:use-module (gnu packages aspell)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages base)
@@ -6130,3 +6131,56 @@ accessibility infrastructure.")
 via speech and refreshable braille.  Orca works with applications and toolkits
 that support the Assistive Technology Service Provider Interface (AT-SPI).")
     (license license:lgpl2.1+)))
+
+(define-public gspell
+  (package
+    (name "gspell")
+    (version "1.3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1n4kd5i11l79h8bpvx3cz79ww0b4z89y99h4czvyg80qlarn585w"))
+              (patches (search-patches "gspell-dash-test.patch"))))
+    (build-system glib-or-gtk-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; Tests require a running X server.
+             (system "Xvfb :1 &")
+             (setenv "DISPLAY" ":1")
+
+             ;; For the missing /etc/machine-id.
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+
+             ;; Allow Enchant and its Aspell backend to find the en_US
+             ;; dictionary.
+             (setenv "ASPELL_DICT_DIR"
+                     (string-append (assoc-ref inputs "aspell-dict-en")
+                                    "/lib/aspell"))
+             #t)))))
+    (inputs
+     `(("enchant" ,enchant)
+       ("iso-codes" ,iso-codes)
+       ("gtk+" ,gtk+)
+       ("glib" ,glib)))
+    (native-inputs
+     `(("glib" ,glib "bin")
+       ("pkg-config" ,pkg-config)
+       ("xmllint" ,libxml2)
+
+       ;; For tests.
+       ("xorg-server" ,xorg-server)
+       ("aspell-dict-en" ,aspell-dict-en)))
+    (home-page "https://wiki.gnome.org/Projects/gspell")
+    (synopsis "GNOME's alternative spell checker")
+    (description
+     "gspell provides a flexible API to add spell-checking to a GTK+
+application.  It provides a GObject API, spell-checking to text entries and
+text views, and buttons to choose the language.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 3edb157704..440e7d550f 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -192,16 +192,14 @@ specifications are building blocks of S/MIME and TLS.")
 (define-public npth
   (package
     (name "npth")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append
-            "mirror://gnupg/npth/npth-"
-            version ".tar.bz2"))
+      (uri (string-append "mirror://gnupg/npth/npth-" version ".tar.bz2"))
       (sha256
        (base32
-        "0am86vblapwz84254qpmhz0chk70g6qzh3wdxcs0gvba8d01ka5w"))))
+        "1wpijvxg5svj893q9vp5r83d9ipwhpbyphb55m89l5m36qc185c9"))))
     (build-system gnu-build-system)
     (home-page "https://www.gnupg.org")
     (synopsis "Non-preemptive thread library")
@@ -217,14 +215,14 @@ compatible to GNU Pth.")
 (define-public gnupg
   (package
     (name "gnupg")
-    (version "2.1.20")
+    (version "2.1.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "03cnd6gz8f4lf69inskssw57idrswcdimhccdyglmrlv6rlrmkr4"))))
+                "1p97limv29p01y79mgnzpwixa50lv53wgdl3ymk9idkmpaldisks"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
index 9f465b1022..3e96520054 100644
--- a/gnu/packages/icu4c.scm
+++ b/gnu/packages/icu4c.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,7 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu))
 
 (define-public icu4c
@@ -75,3 +77,30 @@ C/C++ part.")
               (patches
                (search-patches "icu4c-CVE-2017-7867-CVE-2017-7868.patch"
                                "icu4c-reset-keyword-list-iterator.patch"))))))
+
+(define-public java-icu4j
+  (package
+    (name "java-icu4j")
+    (version "59.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://download.icu-project.org/files/icu4j/"
+                                  version "/icu4j-"
+                                  (string-map (lambda (x)
+                                                (if (char=? x #\.) #\_ x))
+                                              version)
+                                  "-src.jar"))
+              (sha256
+               (base32
+                "0bgxsvgi0qcwj60pvcxrf7a3fbk7aksyxnfwpbzavyfrfzixqh0c"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f                      ; no tests included
+       #:jar-name "icu4j.jar"))
+    (home-page "http://site.icu-project.org/")
+    (synopsis "International Components for Unicode")
+    (description
+     "ICU is a set of C/C++ and Java libraries providing Unicode and
+globalisation support for software applications.  This package contains the
+Java part.")
+    (license x11)))
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
new file mode 100644
index 0000000000..1753b926c6
--- /dev/null
+++ b/gnu/packages/image-processing.scm
@@ -0,0 +1,130 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 John Darrington <jmd@gnu.org>
+;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages image-processing)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (guix download)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages documentation)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages graphics)
+  #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages vtk))
+
+;; We use the latest snapshot of this package because the latest release is
+;; from 2011 and has known vulnerabilities that cannot easily be fixed by
+;; applying patches.
+(define-public dcmtk
+  (package
+    (name "dcmtk")
+    (version "3.6.1_20170228")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "ftp://dicom.offis.de/pub/dicom/offis/"
+                                  "software/dcmtk/snapshot/dcmtk-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "04cwfx8yrscqcd59mxk2fh6314ckayi9cp68iql5a57pf2pg5qld"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libtiff" ,libtiff)
+       ("libpng" ,libpng)
+       ("doxygen" ,doxygen)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("perl" ,perl)))
+    (home-page "http://dcmtk.org")
+    (synopsis "Libraries and programs implementing parts of the DICOM standard")
+    (description "DCMTK is a collection of libraries and applications
+implementing large parts the DICOM standard.  It includes software for
+examining, constructing and converting DICOM image files, handling offline
+media, sending and receiving images over a network connection, as well as
+demonstrative image storage and worklist servers.")
+    (license (license:fsf-free
+              "file://COPYRIGHT"
+              "A union of the Apache 2.0 licence and various non-copyleft
+licences similar to the Modified BSD licence."))))
+
+(define-public mia
+  (package
+    (name "mia")
+    (version "2.4.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/mia/mia/"
+                                  (version-major+minor version)
+                                  "/mia-" version ".tar.xz"))
+              (sha256
+               (base32
+                "124gvf8nkls59mlnx8ynq00n9zrah7a54gsywafx7qmfr0y95ra7"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "-DMIA_CREATE_NIPYPE_INTERFACES=0"
+             (string-append "-DCMAKE_INSTALL_LIBDIR="
+                            (assoc-ref %outputs "out") "/lib")
+             "-DCMAKE_CXX_FLAGS=-fpermissive")))
+    (inputs
+     `(("boost" ,boost)
+       ("dcmtk" ,dcmtk)
+       ("doxygen" ,doxygen)
+       ("eigen" ,eigen)
+       ("fftw" ,fftw)
+       ("fftwf" ,fftwf)
+       ("gsl" ,gsl)
+       ("gts" ,gts)
+       ("hdf5" ,hdf5)
+       ("itpp" ,itpp)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("libxml" ,libxml2)
+       ("libxml++" ,libxml++)
+       ("maxflow" ,maxflow)
+       ("niftilib" ,niftilib)
+       ("nlopt" ,nlopt)
+       ("openexr" ,openexr)
+       ("python-lxml" ,python2-lxml)
+       ("vtk" ,vtk)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("python" ,python-2)))
+    (home-page "http://mia.sourceforge.net")
+    (synopsis "Toolkit for gray scale medical image analysis")
+    (description "MIA provides a combination of command line tools, plug-ins,
+and libraries that make it possible run image processing tasks interactively
+in a command shell and to prototype using the shell's scripting language.  It
+is built around a plug-in structure that makes it easy to add functionality
+without compromising the original code base and it makes use of a wide variety
+of external libraries that provide additional functionality.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index de8043d236..86902d5680 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -509,7 +509,10 @@ arithmetic ops.")
         (sha256
           (base32 "04akiwab8iy5iy34razcvh9mcja9wy737civ3sbjxk4j143s1b2s"))
         (patches (search-patches "jbig2dec-ignore-testtest.patch"
-                                 "jbig2dec-CVE-2016-9601.patch"))))
+                                 "jbig2dec-CVE-2016-9601.patch"
+                                 "jbig2dec-CVE-2017-7885.patch"
+                                 "jbig2dec-CVE-2017-7975.patch"
+                                 "jbig2dec-CVE-2017-7976.patch"))))
 
     (build-system gnu-build-system)
     (synopsis "Decoder of the JBIG2 image compression format")
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 48902bbfd0..bde3ebe402 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -46,14 +46,14 @@
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.8-4")
+    (version "6.9.8-6")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "04fb0x8zc9z11127wsnxlzg0jcgs4xwlx8fxy4jac2y3mmmlzhm6"))))
+               "1sxg2wx3nrzbymh5wcqiv1x401nrz95xkrqgk3x446vx8lq7ln6w"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 13e261438d..e86c904e71 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -45,6 +45,7 @@
   #:use-module (gnu packages ghostscript) ;lcms
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux) ;alsa
   #:use-module (gnu packages wget)
@@ -340,12 +341,12 @@ build process and its dependencies, whereas Make uses Makefile format.")
     (license license:asl2.0)))
 
 (define-public icedtea-7
-  (let* ((version "2.6.9")
+  (let* ((version "2.6.10")
          (drop (lambda (name hash)
                  (origin
                    (method url-fetch)
                    (uri (string-append
-                         "http://icedtea.classpath.org/download/drops/"
+                         "http://icedtea.classpath.org/download/drops"
                          "/icedtea7/" version "/" name ".tar.bz2"))
                    (sha256 (base32 hash))))))
     (package
@@ -358,7 +359,7 @@ build process and its dependencies, whereas Make uses Makefile format.")
                       version ".tar.xz"))
                 (sha256
                  (base32
-                  "1slmajiakq7sk137vgqq9c93r5s620a46lw2jwbnzxhysjw3wkwf"))
+                  "0am945k2zqrka2xn7lb5grmkad4lwncnhnwk8iq6f269birzsj8w"))
                 (modules '((guix build utils)))
                 (snippet
                  '(substitute* "Makefile.in"
@@ -769,25 +770,25 @@ build process and its dependencies, whereas Make uses Makefile format.")
       (native-inputs
        `(("openjdk-src"
           ,(drop "openjdk"
-                 "08a4d1sg5m9l99lc7gafc7dmzmf4d8jvij5pffxv8rf6pk7psk24"))
+                 "02klsxp9hlf5sial6mxpiq53hmrhlrg6x774j7bjjfhb7hpdvadh"))
          ("corba-drop"
           ,(drop "corba"
-                 "12br49cfrqgvms0bnaij7fvnakvb6q8dlpqja64rg5q5r3x4gps8"))
+                 "1vbly6khri241xda05gnwkpf2fk41d96ls96ximi084mx0a3w5rd"))
          ("jaxp-drop"
           ,(drop "jaxp"
-                 "07v2y3pll6z2wma94qilgffwyn2n4jna01mrhqwkb27whfpjfkmz"))
+                 "0s8zln64vdwdxwlw1vpfzm8xbpyhgsv3nqjmnv7y36qpsszg27a5"))
          ("jaxws-drop"
           ,(drop "jaxws"
-                 "18rw64jjpq14v56d0q1xvz8knl0kf02rcday7fvlaxrbbj19km55"))
+                 "0myd66bv8ib8krzgqv754bc564rd8xwpwabvf7my1apyb86vap3n"))
          ("jdk-drop"
           ,(drop "jdk"
-                 "1ig7xipi3vzm6cphy5fdraxi72p27xsg2qb51yqx9qwsmlrv1zj4"))
+                 "10b4lfv10vba07zblw0wii7mhrfhf32pf7410x5nz2q0smgszl2h"))
          ("langtools-drop"
           ,(drop "langtools"
-                 "0sn9qv9nnhaan2smbhrv54lfhwsjhgd3b3h736p5d2hzpw8kicry"))
+                 "0lvncxb5qzrlqkflrnd0l8vwy155cwj1jb07rkq10z2vx0bq7lq2"))
          ("hotspot-drop"
           ,(drop "hotspot"
-                 "16ijxy8br8dla339m4i90wr9xpf7s8z3nrhfyxm7jahr8injpzyl"))
+                 "0q6mdgbbd3681y3n0z1v783irdjhhi73z6sn5csczpyhjm318axb"))
          ("ant" ,ant)
          ("attr" ,attr)
          ("autoconf" ,autoconf)
@@ -839,16 +840,16 @@ IcedTea build harness.")
       (license license:gpl2+))))
 
 (define-public icedtea-8
-  (let* ((version "3.3.0")
+  (let* ((version "3.4.0")
          (drop (lambda (name hash)
                  (origin
                    (method url-fetch)
                    (uri (string-append
-                         "http://icedtea.classpath.org/download/drops/"
+                         "http://icedtea.classpath.org/download/drops"
                          "/icedtea8/" version "/" name ".tar.xz"))
                    (sha256 (base32 hash))))))
     (package (inherit icedtea-7)
-      (version "3.3.0")
+      (version "3.4.0")
       (source (origin
                 (method url-fetch)
                 (uri (string-append
@@ -856,7 +857,7 @@ IcedTea build harness.")
                       version ".tar.xz"))
                 (sha256
                  (base32
-                  "02vmxa6gc6gizcri1fy797qmmm9y77vgi7gy9pwkk4agcw4zyr5p"))
+                  "16if055973y6yw7n5gczp8iksvc31cy4p5by9lkbniadqj4z665m"))
                 (modules '((guix build utils)))
                 (snippet
                  '(begin
@@ -928,31 +929,34 @@ IcedTea build harness.")
        `(("jdk" ,icedtea-7 "jdk")
          ("openjdk-src"
           ,(drop "openjdk"
-                 "0889n19w6rvpzxgmmk9hlgzdh9ya95qkc2ajgpnzr3h69g15nz48"))
+                 "0va5i3zr8y8ncv914rz914jda9d88gq0viww3smdqnln8n78rszi"))
+         ("aarch32-drop"
+          ,(drop "aarch32"
+                 "0cway5a5hcfyh4pzl9zz5xr7lil4gsliy6r5iqbaasd2d9alvqiq"))
          ("corba-drop"
           ,(drop "corba"
-                 "0qcb72hhlsjgp6h9wd048qgyc88b7lfnxyc51xfyav0nhpfjnj8r"))
+                 "1l9zr97a3kq00bj4i8wcdsjlz3xlfldxd8zhkcxikinwd5n0n8a7"))
          ("jaxp-drop"
           ,(drop "jaxp"
-                 "1vyc7dw10x5k45jmi348y8min6sg651ns12zzn30fjzhpfi36nds"))
+                 "0lqxrsr3xlpwm2na6f2rpl7znrz34dkb9dg3zjmympyjy4kqljn7"))
          ("jaxws-drop"
           ,(drop "jaxws"
-                 "1dki6p39z1ms94cjvj5hd9q75q75g244c0xib82pma3q74jg6hx4"))
+                 "1b3chckk10dzrpa7cswmcf1jvryaiwkj8lihfqjr5j7l668jwr4h"))
          ("jdk-drop"
           ,(drop "jdk"
-                 "17czby3nylcglp7l3d90a4pz1izc1sslifv8hrmynm9hn4m9d3k8"))
+                 "15lq0k2jv2x26x6vqkbljdcxk35i3b60pcsw3j1sdfmlk1xy6wgc"))
          ("langtools-drop"
           ,(drop "langtools"
-                 "1h4azc21k58g9gn2y686wrvn9ahgac0ii7jhrrrmb5c1kjs0y2qv"))
+                 "17xkb8ahkg04ri0bp5wblcp1a2lp8j7c83ic5zdbggvgm339k5s8"))
          ("hotspot-drop"
           ,(drop "hotspot"
-                 "12bfgwhrjfhgj6a2dsysdwhirg0jx88pi44y7s8a1bdan1mp03r8"))
+                 "0xpx8ykaq0ki6r0dl3dzca2xgp1p82z8mvsxcs2931ib667ncgcp"))
          ("nashorn-drop"
           ,(drop "nashorn"
-                 "0bg9r16jffc64fhyczn4jpx7bkfw7w62prw65mh66vshqk4lbh0f"))
+                 "1bnn4731lhlvg8axy4mjxgvh646yl22hp52wipx8cfca4vkn2f1z"))
          ("shenandoah-drop"
           ,(drop "shenandoah"
-                 "0abjlsvz669i06mlks28wnh11mm55y5613990pn5j7hfbw8a34q5"))
+                 "0fpxl8zlii1hpm777r875ys2cr5ih3gb6p1nm9jfa6krjrccrxv1"))
          ,@(fold alist-delete (package-native-inputs icedtea-7)
                  '("gcj" "openjdk-src" "corba-drop" "jaxp-drop" "jaxws-drop"
                    "jdk-drop" "langtools-drop" "hotspot-drop")))))))
@@ -1975,6 +1979,1010 @@ logging implementations.  A library that uses the commons-logging API can be
 used with any logging implementation at runtime.")
     (license license:asl2.0)))
 
+;; This is the last release of the 1.x series.
+(define-public java-mockito-1
+  (package
+    (name "java-mockito")
+    (version "1.10.19")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://repo1.maven.org/maven2/"
+                                  "org/mockito/mockito-core/" version
+                                  "/mockito-core-" version "-sources.jar"))
+              (sha256
+               (base32
+                "0vmiwnwpf83g2q7kj1rislmja8fpvqkixjhawh7nxnygx6pq11kc"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "mockito.jar"
+       #:tests? #f ; no tests included
+       ;; FIXME: patch-and-repack does not support jars, so we have to apply
+       ;; patches in build phases.
+       #:phases
+       (modify-phases %standard-phases
+         ;; Mockito was developed against a different version of hamcrest,
+         ;; which does not require matcher implementations to provide an
+         ;; implementation of the "describeMismatch" method.  We add this
+         ;; simple definition to pass the build with our version of hamcrest.
+         (add-after 'unpack 'fix-hamcrest-build-error
+           (lambda _
+             (substitute* "src/org/mockito/internal/matchers/LocalizedMatcher.java"
+               (("public Matcher getActualMatcher\\(\\) .*" line)
+                (string-append "
+    public void describeMismatch(Object item, Description description) {
+        actualMatcher.describeMismatch(item, description);
+    }"
+                               line)))
+             #t))
+         ;; Mockito bundles cglib.  We have a cglib package, so let's use
+         ;; that instead.
+         (add-after 'unpack 'use-system-libraries
+           (lambda _
+             (with-directory-excursion "src/org/mockito/internal/creation/cglib"
+               (substitute* '("CGLIBHacker.java"
+                              "CglibMockMaker.java"
+                              "ClassImposterizer.java"
+                              "DelegatingMockitoMethodProxy.java"
+                              "MethodInterceptorFilter.java"
+                              "MockitoNamingPolicy.java"
+                              "SerializableMockitoMethodProxy.java"
+                              "SerializableNoOp.java")
+                 (("import org.mockito.cglib") "import net.sf.cglib")))
+             #t)))))
+    (inputs
+     `(("java-junit" ,java-junit)
+       ("java-objenesis" ,java-objenesis)
+       ("java-cglib" ,java-cglib)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://mockito.org")
+    (synopsis "Mockito is a mock library for Java")
+    (description "Mockito is a mocking library for Java which lets you write
+tests with a clean and simple API.  It generates mocks using reflection, and
+it records all mock invocations, including methods arguments.")
+    (license license:asl2.0)))
+
+(define-public java-httpcomponents-httpcore
+  (package
+    (name "java-httpcomponents-httpcore")
+    (version "4.4.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache//httpcomponents/httpcore/"
+                                  "source/httpcomponents-core-"
+                                  version "-src.tar.gz"))
+              (sha256
+               (base32
+                "02bwcf38y4vgwq7kj2s6q7qrmma641r5lacivm16kgxvb2j6h1vy"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "httpcomponents-httpcore.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "httpcore") #t)))))
+    (inputs
+     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ("java-commons-lang3" ,java-commons-lang3)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-mockito" ,java-mockito-1)))
+    (home-page "https://hc.apache.org/httpcomponents-core-4.4.x/index.html")
+    (synopsis "Low level HTTP transport components")
+    (description "HttpCore is a set of low level HTTP transport components
+that can be used to build custom client and server side HTTP services with a
+minimal footprint.  HttpCore supports two I/O models: blocking I/O model based
+on the classic Java I/O and non-blocking, event driven I/O model based on Java
+NIO.
+
+This package provides the blocking I/O model library.")
+    (license license:asl2.0)))
+
+(define-public java-httpcomponents-httpcore-nio
+  (package (inherit java-httpcomponents-httpcore)
+    (name "java-httpcomponents-httpcore-nio")
+    (arguments
+     `(#:jar-name "httpcomponents-httpcore-nio.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "httpcore-nio") #t)))))
+    (inputs
+     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ,@(package-inputs java-httpcomponents-httpcore)))
+    (description "HttpCore is a set of low level HTTP transport components
+that can be used to build custom client and server side HTTP services with a
+minimal footprint.  HttpCore supports two I/O models: blocking I/O model based
+on the classic Java I/O and non-blocking, event driven I/O model based on Java
+NIO.
+
+This package provides the non-blocking I/O model library based on Java
+NIO.")))
+
+(define-public java-httpcomponents-httpcore-ab
+  (package (inherit java-httpcomponents-httpcore)
+    (name "java-httpcomponents-httpcore-ab")
+    (arguments
+     `(#:jar-name "httpcomponents-httpcore-ab.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "httpcore-ab") #t)))))
+    (inputs
+     `(("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
+       ("java-commons-cli" ,java-commons-cli)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ,@(package-inputs java-httpcomponents-httpcore)))
+    (synopsis "Apache HttpCore benchmarking tool")
+    (description "This package provides the HttpCore benchmarking tool.  It is
+an Apache AB clone based on HttpCore.")))
+
+(define-public java-httpcomponents-httpclient
+  (package
+    (name "java-httpcomponents-httpclient")
+    (version "4.5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/httpcomponents/httpclient/"
+                                  "source/httpcomponents-client-"
+                                  version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1428399s7qy3cim5wc6f3ks4gl9nf9vkjpfmnlap3jflif7g2pj1"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "httpcomponents-httpclient.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "httpclient") #t)))))
+    (inputs
+     `(("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ("java-commons-codec" ,java-commons-codec)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
+       ("java-mockito" ,java-mockito-1)
+       ("java-junit" ,java-junit)))
+    (home-page "https://hc.apache.org/httpcomponents-client-ga/")
+    (synopsis "HTTP client library for Java")
+    (description "Although the @code{java.net} package provides basic
+functionality for accessing resources via HTTP, it doesn't provide the full
+flexibility or functionality needed by many applications.  @code{HttpClient}
+seeks to fill this void by providing an efficient, up-to-date, and
+feature-rich package implementing the client side of the most recent HTTP
+standards and recommendations.")
+    (license license:asl2.0)))
+
+(define-public java-httpcomponents-httpmime
+  (package (inherit java-httpcomponents-httpclient)
+    (name "java-httpcomponents-httpmime")
+    (arguments
+     `(#:jar-name "httpcomponents-httpmime.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "httpmime") #t)))))
+    (inputs
+     `(("java-httpcomponents-httpclient" ,java-httpcomponents-httpclient)
+       ("java-httpcomponents-httpcore" ,java-httpcomponents-httpcore)
+       ("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))))
+
+(define-public java-commons-net
+  (package
+    (name "java-commons-net")
+    (version "3.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/net/source/"
+                                  "commons-net-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0n0cmnddk9qdqhjvka8pc6hd9mn2qi3166f1s6xk32h7rfy1adxr"))))
+    (build-system ant-build-system)
+    (arguments
+     `(;; FIXME: MainTest.java tries to read "examples.properties" (which
+       ;; should be "resources/examples/examples.properties"), but gets "null"
+       ;; instead.
+       #:tests? #f
+       #:jar-name "commons-net.jar"))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://commons.apache.org/net/")
+    (synopsis "Client library for many basic Internet protocols")
+    (description "The Apache Commons Net library implements the client side of
+many basic Internet protocols.  The purpose of the library is to provide
+fundamental protocol access, not higher-level abstractions.")
+    (license license:asl2.0)))
+
+(define-public java-jsch
+  (package
+    (name "java-jsch")
+    (version "0.1.54")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/jsch/jsch/"
+                                  version "/jsch-" version ".zip"))
+              (sha256
+               (base32
+                "029rdddyq1mh3ghryh3ki99kba1xkf1d1swjv2vi6lk6zzjy2wdb"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "dist"
+       #:tests? #f ; no tests included
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install (install-jars "dist")))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "http://www.jcraft.com/jsch/")
+    (synopsis "Pure Java implementation of SSH2")
+    (description "JSch is a pure Java implementation of SSH2.  JSch allows you
+to connect to an SSH server and use port forwarding, X11 forwarding, file
+transfer, etc., and you can integrate its functionality into your own Java
+programs.")
+    (license license:bsd-3)))
+
+(define-public java-commons-compress
+  (package
+    (name "java-commons-compress")
+    (version "1.13")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/compress/source/"
+                                  "commons-compress-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1vjqvavrn0babffn1kciz6v52ibwq2vwhzlb95hazis3lgllnxc8"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "commons-compress.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-bad-tests
+           (lambda _
+             (with-directory-excursion "src/test/java/org/apache/commons/compress/"
+               ;; FIXME: These tests really should not fail.  Maybe they are
+               ;; indicative of problems with our Java packaging work.
+
+               ;; This test fails with a null pointer exception.
+               (delete-file "archivers/sevenz/SevenZOutputFileTest.java")
+               ;; This test fails to open test resources.
+               (delete-file "archivers/zip/ExplodeSupportTest.java")
+
+               ;; FIXME: This test adds a dependency on powermock, which is hard to
+               ;; package at this point.
+               ;; https://github.com/powermock/powermock
+               (delete-file "archivers/sevenz/SevenZNativeHeapTest.java"))
+             #t)))))
+    (inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-mockito" ,java-mockito-1)
+       ("java-xz" ,java-xz)))
+    (home-page "https://commons.apache.org/proper/commons-compress/")
+    (synopsis "Java library for working with compressed files")
+    (description "The Apache Commons Compress library defines an API for
+working with compressed files such as ar, cpio, Unix dump, tar, zip, gzip, XZ,
+Pack200, bzip2, 7z, arj, lzma, snappy, DEFLATE, lz4 and Z files.")
+    (license license:asl2.0)))
+
+(define-public java-commons-net
+  (package
+    (name "java-commons-net")
+    (version "3.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/net/source/"
+                                  "commons-net-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0n0cmnddk9qdqhjvka8pc6hd9mn2qi3166f1s6xk32h7rfy1adxr"))))
+    (build-system ant-build-system)
+    (arguments
+     `(;; FIXME: MainTest.java tries to read "examples.properties" (which
+       ;; should be "resources/examples/examples.properties"), but gets "null"
+       ;; instead.
+       #:tests? #f
+       #:jar-name "commons-net.jar"))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://commons.apache.org/net/")
+    (synopsis "Client library for many basic Internet protocols")
+    (description "The Apache Commons Net library implements the client side of
+many basic Internet protocols.  The purpose of the library is to provide
+fundamental protocol access, not higher-level abstractions.")
+    (license license:asl2.0)))
+
+(define-public java-osgi-annotation
+  (package
+    (name "java-osgi-annotation")
+    (version "6.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/osgi/org.osgi.annotation/" version "/"
+                                  "org.osgi.annotation-" version "-sources.jar"))
+              (sha256
+               (base32
+                "1q718mb7gqg726rh6pc2hcisn8v50nv35abbir0jypmffhiii85w"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "osgi-annotation.jar"))
+    (home-page "http://www.osgi.org")
+    (synopsis "Annotation module of OSGi framework")
+    (description
+     "OSGi, for Open Services Gateway initiative framework, is a module system
+and service platform for the Java programming language.  This package contains
+the OSGi annotation module, providing additional services to help dynamic
+components.")
+    (license license:asl2.0)))
+
+(define-public java-osgi-core
+  (package
+    (name "java-osgi-core")
+    (version "6.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/osgi/org.osgi.core/" version "/"
+                                  "org.osgi.core-" version "-sources.jar"))
+              (sha256
+               (base32
+                "19bpf5jx32jq9789gyhin35q5v7flmw0p9mk7wbgqpxqfmxyiabv"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "osgi-core.jar"))
+    (inputs
+     `(("java-osgi-annotation" ,java-osgi-annotation)))
+    (home-page "http://www.osgi.org")
+    (synopsis "Core module of OSGi framework")
+    (description
+     "OSGi, for Open Services Gateway initiative framework, is a module system
+and service platform for the Java programming language.  This package contains
+the OSGi Core module.")
+    (license license:asl2.0)))
+
+(define-public java-osgi-service-event
+  (package
+    (name "java-osgi-service-event")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/osgi/org.osgi.service.event/"
+                                  version "/org.osgi.service.event-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1nyhlgagwym75bycnjczwbnpymv2iw84zbhvvzk84g9q736i6qxm"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "osgi-service-event.jar"))
+    (inputs
+     `(("java-osgi-annotation" ,java-osgi-annotation)
+       ("java-osgi-core" ,java-osgi-core)))
+    (home-page "http://www.osgi.org")
+    (synopsis "OSGi service event module")
+    (description
+     "OSGi, for Open Services Gateway initiative framework, is a module system
+and service platform for the Java programming language.  This package contains
+the OSGi @code{org.osgi.service.event} module.")
+    (license license:asl2.0)))
+
+(define-public java-eclipse-osgi
+  (package
+    (name "java-eclipse-osgi")
+    (version "3.11.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.osgi/"
+                                  version "/org.eclipse.osgi-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "00cqc6lb29n0zv68b4l842vzkwawvbr7gshfdygsk8sicvcq2c7b"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-equinox-osgi.jar"))
+    (inputs
+     `(("java-osgi-annotation" ,java-osgi-annotation)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Eclipse Equinox OSGi framework")
+    (description "This package provides an implementation of the OSGi Core
+specification.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-common
+  (package
+    (name "java-eclipse-equinox-common")
+    (version "3.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.common/"
+                                  version "/org.eclipse.equinox.common-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "12aazpkgw46r1qj0pr421jzwhbmsizd97r37krd7njnbrdgfzksc"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-equinox-common.jar"))
+    (inputs
+     `(("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Common Eclipse runtime")
+    (description "This package provides the common Eclipse runtime.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-jobs
+  (package
+    (name "java-eclipse-core-jobs")
+    (version "3.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.jobs/"
+                                  version "/org.eclipse.core.jobs-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0395b8lh0km8vhzjnchvs1rii1qz48hyvb2wqfaq4yhklbwihq4b"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-jobs.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Eclipse jobs mechanism")
+    (description "This package provides the Eclipse jobs mechanism.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-registry
+  (package
+    (name "java-eclipse-equinox-registry")
+    (version "3.6.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.registry/"
+                                  version "/org.eclipse.equinox.registry-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1i9sgymh2fy5vdgk5y7s3qvrlbgh4l93ddqi3v4zmca7hwrlhf9k"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-equinox-registry.jar"))
+    (inputs
+     `(("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
+       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Eclipse extension registry support")
+    (description "This package provides support for the Eclipse extension
+registry.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-app
+  (package
+    (name "java-eclipse-equinox-app")
+    (version "1.3.400")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.app/"
+                                  version "/org.eclipse.equinox.app-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0nhvbp93y203ar7y59gb0mz3w2d3jlqhr0c9hii9bcfpmr7imdab"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-equinox-app.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)
+       ("java-osgi-service-event" ,java-osgi-service-event)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Equinox application container")
+    (description "This package provides the Equinox application container for
+Eclipse.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-equinox-preferences
+  (package
+    (name "java-eclipse-equinox-preferences")
+    (version "3.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.equinox.preferences/"
+                                  version "/org.eclipse.equinox.preferences-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0k7w6c141sqym4fy3af0qkwpy4pdh2vsjpjba6rp5fxyqa24v0a2"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-equinox-preferences.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "http://www.eclipse.org/equinox/")
+    (synopsis "Eclipse preferences mechanism")
+    (description "This package provides the Eclipse preferences mechanism with
+the module @code{org.eclipse.equinox.preferences}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-contenttype
+  (package
+    (name "java-eclipse-core-contenttype")
+    (version "3.5.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.contenttype/"
+                                  version "/org.eclipse.core.contenttype-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1wcqcv7ijwv5rh748vz3x9pkmjl9w1r0k0026k56n8yjl4rrmspi"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-contenttype.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "http://www.eclipse.org/")
+    (synopsis "Eclipse content mechanism")
+    (description "This package provides the Eclipse content mechanism in the
+@code{org.eclipse.core.contenttype} module.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-runtime
+  (package
+    (name "java-eclipse-core-runtime")
+    (version "3.12.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.runtime/"
+                                  version "/org.eclipse.core.runtime-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "16mkf8jgj35pgzms7w1gyfq0gfm4ixw6c5xbbxzdj1la56c758ya"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-runtime.jar"))
+    (inputs
+     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
+       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
+       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
+       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core runtime")
+    (description "This package provides the Eclipse core runtime with the
+module @code{org.eclipse.core.runtime}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-filesystem
+  (package
+    (name "java-eclipse-core-filesystem")
+    (version "1.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.filesystem/"
+                                  version "/org.eclipse.core.filesystem-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0km1bhwjim4rfy3pkvjhvy31kgsyf2ncx0mlkmbf5n6g57pphdyj"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-filesystem.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core file system")
+    (description "This package provides the Eclipse core file system with the
+module @code{org.eclipse.core.filesystem}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-expressions
+  (package
+    (name "java-eclipse-core-expressions")
+    (version "3.5.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.expressions/"
+                                  version "/org.eclipse.core.expressions-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "18bw2l875gmygvpagpgk9l24qzbdjia4ag12nw6fi8v8yaq4987f"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-expressions.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core expression language")
+    (description "This package provides the Eclipse core expression language
+with the @code{org.eclipse.core.expressions} module.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-variables
+  (package
+    (name "java-eclipse-core-variables")
+    (version "3.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.variables/"
+                                  version "/org.eclipse.core.variables-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "12dirh03zi4n5x5cj07vzrhkmnqy6h9q10h9j605pagmpmifyxmy"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-variables.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "https://www.eclipse.org/platform")
+    (synopsis "Eclipse core variables")
+    (description "This package provides the Eclipse core variables module
+@code{org.eclipse.core.variables}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-ant-core
+  (package
+    (name "java-eclipse-ant-core")
+    (version "3.4.100")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.ant.core/"
+                                  version "/org.eclipse.ant.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "11g3if794qjlk98mz9zch22rr56sd7z63vn4i7k2icr8cq5bfqg7"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-ant-core.jar"))
+    (inputs
+     `(("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
+       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
+       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
+       ("java-eclipse-core-variables" ,java-eclipse-core-variables)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "https://www.eclipse.org/platform")
+    (synopsis "Ant build tool core libraries")
+    (description "This package provides the ant build tool core libraries with
+the module @code{org.eclipse.ant.core}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-resources
+  (package
+    (name "java-eclipse-core-resources")
+    (version "3.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.resources/"
+                                  version "/org.eclipse.core.resources-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1hrfxrll6cpcagfksk2na1ypvkcnsp0fk6n3vcsrn97qayf9mx9l"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-resources.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
+       ("java-eclipse-core-expressions" ,java-eclipse-core-expressions)
+       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
+       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
+       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
+       ("java-eclipse-ant-core" ,java-eclipse-ant-core)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core resource management")
+    (description "This package provides the Eclipse core resource management
+module @code{org.eclipse.core.resources}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-compare-core
+  (package
+    (name "java-eclipse-compare-core")
+    (version "3.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.compare.core/"
+                                  version "/org.eclipse.compare.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "10g37r0pbiffyv2wk35c6g5lwzkdipkl0kkjp41v84dln46xm4dg"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-compare-core.jar"))
+    (inputs
+     `(("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
+       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)
+       ("java-icu4j" ,java-icu4j)))
+    (home-page "https://www.eclipse.org/")
+    (synopsis "Eclipse core compare support")
+    (description "This package provides the Eclipse core compare support
+module @code{org.eclipse.compare.core}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-team-core
+  (package
+    (name "java-eclipse-team-core")
+    (version "3.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.team.core/"
+                                  version "/org.eclipse.team.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "02j2jzqgb26zx2d5ahxmvijw6j4r0la90zl5c3i65x6z19ciyam7"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-team-core.jar"))
+    (inputs
+     `(("java-eclipse-compare-core" ,java-eclipse-compare-core)
+       ("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
+       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
+       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
+       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
+       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
+       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)))
+    (home-page "https://www.eclipse.org/platform")
+    (synopsis "Eclipse team support core")
+    (description "This package provides the Eclipse team support core module
+@code{org.eclipse.team.core}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-core-commands
+  (package
+    (name "java-eclipse-core-commands")
+    (version "3.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.core.commands/"
+                                  version "/org.eclipse.core.commands-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0yjn482qndcfrsq3jd6vnhcylp16420f5aqkrwr8spsprjigjcr9"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-core-commands.jar"))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)))
+    (home-page "https://www.eclipse.org/platform")
+    (synopsis "Eclipse core commands")
+    (description "This package provides Eclipse core commands in the module
+@code{org.eclipse.core.commands}.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-text
+  (package
+    (name "java-eclipse-text")
+    (version "3.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/platform/org.eclipse.text/"
+                                  version "/org.eclipse.text-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0scz70vzz5qs5caji9f5q01vkqnvip7dpri1q07l8wbbdcxn4cq1"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-text.jar"
+       #:phases
+       (modify-phases %standard-phases
+         ;; When creating a new category we must make sure that the new list
+         ;; matches List<Position>.  By default it seems to be too generic
+         ;; (ArrayList<Object>), so we specialize it to ArrayList<Position>.
+         ;; Without this we get this error:
+         ;;
+         ;; [javac] .../src/org/eclipse/jface/text/AbstractDocument.java:376:
+         ;;      error: method put in interface Map<K,V> cannot be applied to given types;
+         ;; [javac] 			fPositions.put(category, new ArrayList<>());
+         ;; [javac] 			          ^
+         ;; [javac]   required: String,List<Position>
+         ;; [javac]   found: String,ArrayList<Object>
+         ;; [javac]   reason: actual argument ArrayList<Object> cannot be converted
+         ;;              to List<Position> by method invocation conversion
+         ;; [javac]   where K,V are type-variables:
+         ;; [javac]     K extends Object declared in interface Map
+         ;; [javac]     V extends Object declared in interface Map
+         ;;
+         ;; I don't know if this is a good fix.  I suspect it is not, but it
+         ;; seems to work.
+         (add-after 'unpack 'fix-compilation-error
+           (lambda _
+             (substitute* "src/org/eclipse/jface/text/AbstractDocument.java"
+               (("Positions.put\\(category, new ArrayList<>\\(\\)\\);")
+                "Positions.put(category, new ArrayList<Position>());"))
+             #t)))))
+    (inputs
+     `(("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-core-commands" ,java-eclipse-core-commands)
+       ("java-icu4j" ,java-icu4j)))
+    (home-page "http://www.eclipse.org/platform")
+    (synopsis "Eclipse text library")
+    (description "Platform Text is part of the Platform UI project and
+provides the basic building blocks for text and text editors within Eclipse
+and contributes the Eclipse default text editor.")
+    (license license:epl1.0)))
+
+(define-public java-eclipse-jdt-core
+  (package
+    (name "java-eclipse-jdt-core")
+    (version "3.12.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "org/eclipse/jdt/org.eclipse.jdt.core/"
+                                  version "/org.eclipse.jdt.core-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "191xw4lc7mjjkprh4ji5vnpjvr5r4zvbpwkriy4bvsjqrz35vh1j"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "eclipse-jdt-core.jar"))
+    (inputs
+     `(("java-eclipse-core-contenttype" ,java-eclipse-core-contenttype)
+       ("java-eclipse-core-filesystem" ,java-eclipse-core-filesystem)
+       ("java-eclipse-core-jobs" ,java-eclipse-core-jobs)
+       ("java-eclipse-core-resources" ,java-eclipse-core-resources)
+       ("java-eclipse-core-runtime" ,java-eclipse-core-runtime)
+       ("java-eclipse-equinox-app" ,java-eclipse-equinox-app)
+       ("java-eclipse-equinox-common" ,java-eclipse-equinox-common)
+       ("java-eclipse-equinox-preferences" ,java-eclipse-equinox-preferences)
+       ("java-eclipse-equinox-registry" ,java-eclipse-equinox-registry)
+       ("java-eclipse-osgi" ,java-eclipse-osgi)
+       ("java-eclipse-text" ,java-eclipse-text)))
+    (home-page "https://www.eclipse.org/jdt")
+    (synopsis "Java development tools core libraries")
+    (description "This package provides the core libraries of the Eclipse Java
+development tools.")
+    (license license:epl1.0)))
+
+(define-public java-javax-mail
+  (package
+    (name "java-javax-mail")
+    (version "1.5.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "com/sun/mail/javax.mail/"
+                                  version "/javax.mail-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "0sdlfgsc2b5s89xv1261y8i0jijcja019k2x1c8ngfn582w4jly9"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:jar-name "javax-mail.jar"))
+    (home-page "https://javamail.java.net")
+    (synopsis "Reference implementation of the JavaMail API")
+    (description
+     "This package provides versions of the JavaMail API implementation, IMAP,
+SMTP, and POP3 service providers, some examples, and documentation for the
+JavaMail API.")
+    ;; GPLv2 only with "classpath exception".
+    (license license:gpl2)))
+
+(define-public java-log4j-api
+  (package
+    (name "java-log4j-api")
+    (version "2.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/logging/log4j/" version
+                                  "/apache-log4j-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0j5p9gik0jysh37nlrckqbky12isy95cpwg2gv5fas1rcdqbraxd"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; tests require unpackaged software
+       #:jar-name "log4j-api.jar"
+       #:make-flags
+       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
+                            "/share/java"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-dir
+           (lambda _ (chdir "log4j-api") #t))
+         ;; FIXME: The tests require additional software that has not been
+         ;; packaged yet, such as
+         ;; * org.apache.maven
+         ;; * org.apache.felix
+         (add-after 'enter-dir 'delete-tests
+           (lambda _ (delete-file-recursively "src/test") #t)))))
+    (inputs
+     `(("java-osgi-core" ,java-osgi-core)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-junit" ,java-junit)))
+    (home-page "http://logging.apache.org/log4j/2.x/")
+    (synopsis "API module of the Log4j logging framework for Java")
+    (description
+     "This package provides the API module of the Log4j logging framework for
+Java.")
+    (license license:asl2.0)))
+
 (define-public java-commons-cli
   (package
     (name "java-commons-cli")
@@ -2105,49 +3113,30 @@ This is a part of the Apache Commons Project.")
                   (substitute* "lib/cpp/antlr/CharScanner.hpp"
                     (("#include <map>")
                      (string-append
-                       "#include <map>\n"
-                       "#define EOF (-1)\n"
-                       "#include <strings.h>")))
+                      "#include <map>\n"
+                      "#define EOF (-1)\n"
+                      "#include <strings.h>")))
                   (substitute* "configure"
-                    (("/bin/sh") "sh"))))))
+                    (("/bin/sh") "sh"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f
+     `(#:tests? #f ; no test target
+       #:imported-modules ((guix build ant-build-system)
+                           (guix build syscalls)
+                           ,@%gnu-build-system-modules)
+       #:modules (((guix build ant-build-system) #:prefix ant:)
+                  (guix build gnu-build-system)
+                  (guix build utils))
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'strip-jar-timestamps
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (jar1 (string-append out "/lib/antlr.jar"))
-                    (jar2 (string-append out "/share/antlr-2.7.7/antlr.jar")))
-               ;; XXX: copied from (guix build ant-build-system)
-               (define (strip-jar jar dir)
-                 (let ((manifest (string-append dir "/META-INF/MANIFEST.MF")))
-                   (mkdir-p dir)
-                   (and (with-directory-excursion dir
-                          (zero? (system* "jar" "xf" jar)))
-                        (delete-file jar)
-                        (for-each (lambda (file)
-                                    (let ((s (lstat file)))
-                                      (unless (eq? (stat:type s) 'symlink)
-                                                 (utime file 0 0 0 0))))
-                                  (find-files dir #:directories? #t))
-                        (with-directory-excursion dir
-                          (let* ((files (find-files "." ".*" #:directories? #t)))
-                            (unless (zero? (apply system*
-                                                  `("zip" "-X" ,jar ,manifest
-                                                    ,@files)))
-                              (error "'zip' failed"))))
-                        (utime jar 0 0)
-                        #t)))
-                (strip-jar jar1 "temp1")
-                (strip-jar jar2 "temp2"))))
+           (assoc-ref ant:%standard-phases 'strip-jar-timestamps))
          (add-after 'configure 'fix-bin-ls
            (lambda _
-             (for-each (lambda (file)
-                         (substitute* file
-                          (("/bin/ls") "ls")))
-               (find-files "." "Makefile")))))))
+             (substitute* (find-files "." "Makefile")
+               (("/bin/ls") "ls"))
+             #t)))))
     (native-inputs
      `(("which" ,which)
        ("zip" ,zip)
@@ -2163,9 +3152,9 @@ C++, or Python actions.  ANTLR provides excellent support for tree construction,
 tree walking, and translation.")
     (license license:public-domain)))
 
-(define-public stringtemplate3
+(define-public java-stringtemplate-3
   (package
-    (name "stringtemplate3")
+    (name "java-stringtemplate")
     (version "3.2.1")
     (source (origin
               (method url-fetch)
@@ -2177,21 +3166,30 @@ tree walking, and translation.")
                 "086yj68np1vqhkj7483diz3km6s6y4gmwqswa7524a0ca6vxn2is"))))
     (build-system ant-build-system)
     (arguments
-     `(#:jar-name "stringtemplate-3.2.1.jar"
-       #:tests? #f
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:test-dir "test"
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
+         (add-before 'check 'fix-tests
+           (lambda _
+             (substitute* "build.xml"
+               (("\\$\\{test.home\\}/java")
+                "${test.home}/org"))
+             #t))
          (add-before 'build 'generate-grammar
            (lambda _
-             (let ((dir "src/org/antlr/stringtemplate/language/"))
-               (for-each (lambda (file)
-                           (display file)
-                           (newline)
-                           (system* "antlr" "-o" dir (string-append dir file)))
-                         '("template.g" "angle.bracket.template.g" "action.g"
-                           "eval.g" "group.g" "interface.g"))))))))
+             (with-directory-excursion "src/org/antlr/stringtemplate/language/"
+               (every (lambda (file)
+                        (format #t "~a\n" file)
+                        (zero? (system* "antlr" file)))
+                      '("template.g" "angle.bracket.template.g" "action.g"
+                        "eval.g" "group.g" "interface.g"))))))))
     (native-inputs
-     `(("antlr" ,antlr2)))
+     `(("antlr" ,antlr2)
+       ("java-junit" ,java-junit)))
     (home-page "http://www.stringtemplate.org")
     (synopsis "Template engine to generate formatted text output")
     (description "StringTemplate is a java template engine (with ports for C#,
@@ -2215,9 +3213,9 @@ StringTemplate also powers ANTLR.")
 ;; only grammar files with the antlr2 syntax.
 ;; So we build antlr3.1 -> antlr3.3 -> ST4.0.6 -> antlr3-bootstrap -> ST4 -> antlr3.
 
-(define-public stringtemplate4
-  (package
-    (name "stringtemplate4")
+(define-public java-stringtemplate
+  (package (inherit java-stringtemplate-3)
+    (name "java-stringtemplate")
     (version "4.0.8")
     (source (origin
               (method url-fetch)
@@ -2229,36 +3227,36 @@ StringTemplate also powers ANTLR.")
                 "1pri8hqa95rfdkjy55icl5q1m09zwp5k67ib14abas39s4v3w087"))))
     (build-system ant-build-system)
     (arguments
-     `(#:tests? #f
-       #:jar-name (string-append ,name "-" ,version ".jar")
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:tests? #f ; FIXME: tests fail for unknown reasons
+       #:test-dir "test"
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
+         (add-before 'check 'fix-test-target
+           (lambda _
+             (substitute* "build.xml"
+               (("\\$\\{test.home\\}/java") "${test.home}/")
+               (("\\*Test.java") "Test*.java"))
+             #t))
          (add-before 'build 'generate-grammar
-           (lambda* (#:key inputs #:allow-other-keys)
-             (chdir "src/org/stringtemplate/v4/compiler/")
-             (for-each (lambda (file)
-                         (display file)
-                         (newline)
-                         (system* "antlr3" file))
-                       '("STParser.g" "Group.g" "CodeGenerator.g"))
-             (chdir "../../../../.."))))))
+           (lambda _
+             (with-directory-excursion "src/org/stringtemplate/v4/compiler/"
+               (every (lambda (file)
+                        (format #t "~a\n" file)
+                        (zero? (system* "antlr3" file)))
+                      '("STParser.g" "Group.g" "CodeGenerator.g"))))))))
     (inputs
      `(("antlr3" ,antlr3-bootstrap)
        ("antlr2" ,antlr2)
-       ("stringtemplate" ,stringtemplate3)))
-    (home-page "http://www.stringtemplate.org")
-    (synopsis "Template engine to generate formatted text output")
-    (description "StringTemplate is a java template engine (with ports for C#,
-Objective-C, JavaScript, Scala) for generating source code, web pages, emails,
-or any other formatted text output.  StringTemplate is particularly good at
-code generators, multiple site skins, and internationalization / localization.
-StringTemplate also powers ANTLR.")
-    (license license:bsd-3)))
+       ("java-stringtemplate" ,java-stringtemplate-3)
+       ("java-junit" ,java-junit)))))
 
-(define stringtemplate4-4.0.6
-  (package
-    (inherit stringtemplate4)
-    (name "stringtemplate4")
+(define java-stringtemplate-4.0.6
+  (package (inherit java-stringtemplate)
+    (name "java-stringtemplate")
     (version "4.0.6")
     (source (origin
               (method url-fetch)
@@ -2271,7 +3269,7 @@ StringTemplate also powers ANTLR.")
     (inputs
      `(("antlr3" ,antlr3-3.3)
        ("antlr2" ,antlr2)
-       ("stringtemplate" ,stringtemplate3)))))
+       ("java-stringtemplate" ,java-stringtemplate-3)))))
 
 (define-public antlr3
   (package
@@ -2358,12 +3356,12 @@ import org.antlr.grammar.v3.ANTLRTreePrinter;"))
        ("antlr3" ,antlr3-bootstrap)))
     (inputs
      `(("junit" ,java-junit)
-       ("stringtemplate" ,stringtemplate3)
-       ("stringtemplate4" ,stringtemplate4)))
+       ("stringtemplate" ,java-stringtemplate-3)
+       ("stringtemplate4" ,java-stringtemplate)))
     (propagated-inputs
-     `(("stringtemplate" ,stringtemplate3)
+     `(("stringtemplate" ,java-stringtemplate-3)
        ("antlr" ,antlr2)
-       ("stringtemplate4" ,stringtemplate4-4.0.6)))
+       ("stringtemplate4" ,java-stringtemplate-4.0.6)))
     (home-page "http://www.antlr3.org")
     (synopsis "Framework for constructing recognizers, compilers, and translators")
     (description "ANTLR, ANother Tool for Language Recognition, (formerly PCCTS)
@@ -2414,7 +3412,7 @@ tree walking, and translation.")
                      (string-append "#!" (which "sh") "\n"
                                     "java -cp " jar "/antlr3-3.3.jar:"
                                     (string-concatenate
-                                      (find-files (assoc-ref inputs "stringtemplate")
+                                      (find-files (assoc-ref inputs "java-stringtemplate")
                                                   ".*\\.jar"))
                                     ":"
                                     (string-concatenate
@@ -2464,7 +3462,7 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
     (inputs
      `(("junit" ,java-junit)))
     (propagated-inputs
-     `(("stringtemplate" ,stringtemplate3)
+     `(("java-stringtemplate" ,java-stringtemplate-3)
        ("antlr" ,antlr2)
        ("antlr3" ,antlr3-3.1)))))
 
@@ -2536,4 +3534,48 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
     (inputs
      `(("junit" ,java-junit)))
     (propagated-inputs
-     `(("stringtemplate" ,stringtemplate3)))))
+     `(("stringtemplate" ,java-stringtemplate-3)))))
+
+(define-public java-asm
+  (package
+    (name "java-asm")
+    (version "5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://download.forge.ow2.org/asm/"
+                                  "asm-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0kxvmv5275rnjl7jv0442k3wjnq03ngkb7sghs78avf45pzm4qgr"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "compile"
+       #:test-target "test"
+       ;; The tests require an old version of Janino, which no longer compiles
+       ;; with the JDK7.
+       #:tests? #f
+       ;; We don't need these extra ant tasks, but the build system asks us to
+       ;; provide a path anyway.
+       #:make-flags (list (string-append "-Dobjectweb.ant.tasks.path=foo"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'build-jars
+           (lambda* (#:key make-flags #:allow-other-keys)
+             ;; We cannot use the "jar" target because it depends on a couple
+             ;; of unpackaged, complicated tools.
+             (mkdir "dist")
+             (zero? (system* "jar"
+                             "-cf" (string-append "dist/asm-" ,version ".jar")
+                             "-C" "output/build/tmp" "."))))
+         (replace 'install
+           (install-jars "dist")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://asm.ow2.org/")
+    (synopsis "Very small and fast Java bytecode manipulation framework")
+    (description "ASM is an all purpose Java bytecode manipulation and
+analysis framework.  It can be used to modify existing classes or dynamically
+generate classes, directly in binary form.  The provided common
+transformations and analysis algorithms allow to easily assemble custom
+complex transformations and code analysis tools.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index 2ec176422c..07943e1e5e 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -44,13 +44,18 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gstreamer)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages mp3)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages polkit)
   #:use-module (gnu packages python)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages textutils)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -59,7 +64,7 @@
 (define-public extra-cmake-modules
   (package
     (name "extra-cmake-modules")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -68,7 +73,7 @@
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1iqakxzr6bcs9wgyi8if1smpq6px0bvlcyddyk0hxhindzl7pn5i"))))
+                "1r3dyvrv77xrpjlzpa6yazwkknirvx1ccvdyj9x0mlk4vfi05nh5"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("qtbase" ,qtbase))) ; For tests (needs qmake)
@@ -240,7 +245,7 @@ Phonon-GStreamer is a backend based on the GStreamer multimedia library.")
 (define-public attica
   (package
     (name "attica")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -249,7 +254,7 @@ Phonon-GStreamer is a backend based on the GStreamer multimedia library.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "16vl3gpwqcvfms82grv1bvqlxj085bqssv5ixjx007826pd8qhp5"))))
+                "0l8gmsmpwzg6nzwwlnsdl6r6qkhnhirpmrkag9xpd2sbmy734x53"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -272,7 +277,7 @@ http://freedesktop.org/wiki/Specifications/open-collaboration-services/")
 (define-public bluez-qt
   (package
     (name "bluez-qt")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -281,7 +286,7 @@ http://freedesktop.org/wiki/Specifications/open-collaboration-services/")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0pl6cp0rgjkh7d06ik35rw7qd96j5sh2flgjx4vi21zl5vf3vgyh"))))
+                "040gs2a1fx996gqdx2pwxh00szb1vb85055z946nqvqfn01921df"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("dbus" ,dbus)
@@ -306,7 +311,7 @@ Bluetooth stack.  It is used by the KDE Bluetooth stack, BlueDevil.")
 (define-public breeze-icons
   (package
     (name "breeze-icons")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -315,7 +320,7 @@ Bluetooth stack.  It is used by the KDE Bluetooth stack, BlueDevil.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1n51kahzk09v52yhi7k4kqgavqlz3ghqv5cx2ssz2djpyavs18r3"))))
+                "1znzlggb6yrkw5rr2n75g7cfv9x5p9d55hss09c4i79lxrh1bk4a"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -335,7 +340,7 @@ It is the default icon theme for the KDE Plasma 5 desktop.")
 (define-public kapidox
   (package
     (name "kapidox")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -344,7 +349,7 @@ It is the default icon theme for the KDE Plasma 5 desktop.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1z6hdsppwrmqkcanrppxhqcrjvblg9i02rh3bz5m3pn66wwz0sdw"))))
+                "190d5z6i71jrvfna6vnlim2p9rgc33s1fxl0zarn276683i1rwvg"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ; has no test target
@@ -377,7 +382,7 @@ documentation.")
 (define-public karchive
   (package
     (name "karchive")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -386,7 +391,7 @@ documentation.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1dzvphqnc09mmaydqggpxg6zwwyr56p6l4jdf1rf6ns90fzxy0m4"))))
+                "0g8jskdar2znviwh9bs3kia093wgfnhl04x4jcg2rvh78ylkpvxw"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -411,7 +416,7 @@ GZip format, via a subclass of QIODevice.")
 (define-public kcodecs
   (package
     (name "kcodecs")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -420,7 +425,7 @@ GZip format, via a subclass of QIODevice.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0yybkp52i8nm4qjady6jqswn6v70cqbvjqwgrghjnc88b2cly253"))))
+                "0k51s4qlf0kq6i8f3wrsz5lrkzjqb1j26hrmlmg57vn91r58iash"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -446,7 +451,7 @@ Internet).")
 (define-public kconfig
   (package
     (name "kconfig")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -455,7 +460,7 @@ Internet).")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1pajh1l08b995shp6l75ri9z4vr6wjapvrkmrmv8hksnxvfi97dp"))))
+                "0blbx6b3fk6p8cv2iywk2avn9w1411bb0g5wwv456a9ggi01988x"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -513,7 +518,7 @@ propagate their changes to their respective configuration files.")
 (define-public kcoreaddons
   (package
     (name "kcoreaddons")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -522,7 +527,7 @@ propagate their changes to their respective configuration files.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1n1xzvwwji9pwyxrvwp4rmpc7qzp9nlis26xmn81k607jn587ksx"))))
+                "1ybr4bv8rhp4cxpf8mfsc4dk0klzrfh1z8g2cw6zasmksxmmwi90"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -551,7 +556,7 @@ many more.")
 (define-public kdbusaddons
   (package
     (name "kdbusaddons")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -560,7 +565,7 @@ many more.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1a15jjsrkza0ll2viyk834pgdxsdgdacm0982xxwl5z937f75609"))
+                "1skblxfnjhbyiwavsfhksc2ybc2sikw3xr0js6mlfbpmvqzghn6h"))
               (patches (search-patches "kdbusaddons-kinit-file-name.patch"))))
     (build-system cmake-build-system)
     (native-inputs
@@ -596,7 +601,7 @@ as well as an API to create KDED modules.")
 (define-public kdnssd
   (package
     (name "kdnssd")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -605,7 +610,7 @@ as well as an API to create KDED modules.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1xakbs2wm627zn01ni8fyrz64xl5jw4by0pdrb70aad7w37dijrw"))))
+                "082mdim9wykdap4fmjfayk443rbarsk1p8cn3mspx2nw047yja80"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -623,7 +628,7 @@ infrastructure.")
 (define-public kguiaddons
   (package
     (name "kguiaddons")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -632,7 +637,7 @@ infrastructure.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0rbfd0rykmwl9hs1q22pqg2by8vi9y1pgs2ishgnan4sc4w87wjb"))))
+                "1nmlwvy2jdmh0m6bmahvk68vl2rs9s28c10dkncpi6gvhsdkigqx"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -656,7 +661,7 @@ interfaces in the areas of colors, fonts, text, images, keyboard input.")
 (define-public ki18n
   (package
     (name "ki18n")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -665,7 +670,7 @@ interfaces in the areas of colors, fonts, text, images, keyboard input.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "068xvw2hy4hlpj85wgjjdj0nc37fygpd8wb1dnpqcvzzy8rc1rsf"))))
+                "0glvmmy01mp6hnix79aichgwjq842kgf5q5zynkg6mch85y4ary7"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("gettext" ,gettext-minimal)
@@ -699,7 +704,7 @@ translation scripting.")
 (define-public kidletime
   (package
     (name "kidletime")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -708,7 +713,7 @@ translation scripting.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0rkxx3bnspjwm4vcy4rdfahk6vcfpkh8fldww0zfdn7s7pigqwch"))))
+                "0z8x6iz52y2m8llsp2q4qayxswkzay7ksimzy47crfag442bw24g"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -726,7 +731,7 @@ or user activity.")
 (define-public kitemmodels
   (package
     (name "kitemmodels")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -735,7 +740,7 @@ or user activity.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0lxld7jdixpq23sycv8n4ckzmdr34aycrsf2zffziw6r59f0mzki"))))
+                "1liq1ppa7xb1dcncv25c2a0xy3l9bvb2a56cff90c0b0vwr239q5"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -787,7 +792,7 @@ model to observers
 (define-public kitemviews
   (package
     (name "kitemviews")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -796,7 +801,7 @@ model to observers
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1h1zgawdi4vbgymdl5215lx7hpcx9jqxy7vjf5hwgs6b2cls1sws"))))
+                "054accbis471zj1gbfxbc99062r2hvpb04i6w3r8fa4ml8s6brqk"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -828,7 +833,7 @@ to flat and hierarchical lists.")
 (define-public kplotting
   (package
     (name "kplotting")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -837,7 +842,7 @@ to flat and hierarchical lists.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0a0pfmdlx84526lb2jvx94i2pf85km57fm2ygis4z5mjgbzsmb6v"))))
+                "1ffy9b08128ym024wlfgnzk52vpy0mbaa91dhndpr40qcz0i67sh"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -866,7 +871,7 @@ pixel units.")
 (define-public ksyntaxhighlighting
   (package
     (name "ksyntaxhighlighting")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -875,7 +880,7 @@ pixel units.")
                     "syntax-highlighting-" version ".tar.xz"))
               (sha256
                (base32
-                "1d9m7x53mwggwmhhba1c7b8v4f8qjql889y674ldpzs2nrk5y7x3"))))
+                "0ryfwblvzj9rd5jj7l8scmbb49ygzk77ng05hrznsipczin2cjw8"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -914,7 +919,7 @@ integration with a custom editor as well as a ready-to-use
 (define-public kwayland
   (package
     (name "kwayland")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -923,7 +928,7 @@ integration with a custom editor as well as a ready-to-use
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1kzvq7qx102rfdv975x5sd37lsl6wn0mzm2m1f9fnnn2rvii3h5d"))))
+                "1zxb9ram47vbiik8h0czyvacrdiijhnslkpcm61l4r1rb0ybb0ib"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -953,7 +958,7 @@ represented by a QPoint or a QSize.")
 (define-public kwidgetsaddons
   (package
     (name "kwidgetsaddons")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -962,7 +967,7 @@ represented by a QPoint or a QSize.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1aksy326ppdfcx20zl9hxsd8j0br32j6dlx4i1xxbd976csys9b2"))))
+                "0hw87iig75mfgl5p3ph6zkwap31h357bm7rlyv5d9nnp10bq0hfg"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1001,7 +1006,7 @@ configuration pages, message boxes, and password requests.")
 (define-public kwindowsystem
   (package
     (name "kwindowsystem")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1010,7 +1015,7 @@ configuration pages, message boxes, and password requests.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1c3kd23c4wwzdhfcyhv41czw3y2kk1492xn6ah9n3r98akrhgar1"))))
+                "1sp2x7afhw19vmhdp2qyrmljz8h0875xjk95n8c5gzypk7sr0l83"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1041,7 +1046,7 @@ lower level classes for interaction with the X Windowing System.")
 (define-public modemmanager-qt
   (package
     (name "modemmanager-qt")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1050,7 +1055,7 @@ lower level classes for interaction with the X Windowing System.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0ywyiq1kj4ya5knn0r12j9m1ig9mlyfypnrzihlvipddjrqs7jyd"))))
+                "1cf5nsc8h7djvr19fm5dphzplh1wm3asvn0a7r71spg0i7lzi89h"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1079,7 +1084,7 @@ messages.")
 (define-public networkmanager-qt
   (package
     (name "networkmanager-qt")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1088,12 +1093,7 @@ messages.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0bcy7nzfvx2xah3kxklmrjn08qbjddiny7wf7nkxsbc3kkhrxqyd"))
-              ;; TODO: Remove these patches when updating to 5.33.
-              (patches
-               (search-patches
-                "networkmanager-qt-activeconnection-test-1.patch"
-                "networkmanager-qt-activeconnection-test-2.patch"))))
+                "05s0irvkg0g57acriablyha2wb9c7w3xhq223vdddjqpcdx0pnkl"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1123,7 +1123,7 @@ which are used in DBus communication.")
 (define-public oxygen-icons
   (package
     (name "oxygen-icons")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1132,7 +1132,7 @@ which are used in DBus communication.")
                     name "5" "-" version ".tar.xz"))
               (sha256
                (base32
-                "05v3blgs4qbjl8s6470baahy9a98cfi3mplzp462axcgkqdj1nwf"))))
+                "0cmxxssir5zbp5nlxq81h2xfd6wrxbbkydyw93dby7r56isl7ga5"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1148,7 +1148,7 @@ which are used in DBus communication.")
 (define-public solid
   (package
     (name "solid")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1157,10 +1157,18 @@ which are used in DBus communication.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1jhymivravgix0sa0szkax50j09l5fl55xi3fbyjxlb4cil114v5"))))
+                "02kz21p3p1s1rg7gf34fr6ynhji6x97yvsfdpvbfxbhijabbh4ib"))))
     (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             (zero? (system* "dbus-launch" "ctest" ".")))))))
     (native-inputs
      `(("bison" ,bison)
+       ("dbus" ,dbus)
        ("extra-cmake-modules" ,extra-cmake-modules)
        ("flex" ,flex)
        ("qttools" ,qttools)))
@@ -1177,7 +1185,7 @@ system.")
 (define-public sonnet
   (package
     (name "sonnet")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1186,7 +1194,7 @@ system.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "17sjv48b3z5fgplsy16ilcw6p7mlqjs61ib6jqd1mqzv4xrr27yi"))))
+                "06gxrh8rb75ydkqxk5dhlmwndnczp264jx588ryfwlf3vlnk99vs"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1203,7 +1211,7 @@ ASpell and HUNSPELL.")
 (define-public threadweaver
   (package
     (name "threadweaver")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1212,7 +1220,7 @@ ASpell and HUNSPELL.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1qpy2rzqyd4ap5fibkfk87z66ijh2h79cd7f0h506jh2dbx20g0h"))))
+                "1gylpl283qf1jcfyib4q5xwnpdq13hnd2cp2i7xjazdw2jp40zhr"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -1233,7 +1241,7 @@ uses a job-based interface to queue tasks and execute them in an efficient way."
 (define-public kauth
   (package
     (name "kauth")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1242,7 +1250,7 @@ uses a job-based interface to queue tasks and execute them in an efficient way."
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "00kdq16n9w6nf1bpwzl5lp5c2xq74g8nn6081kvnjcd4ld66ncmq"))))
+                "06cw1bsp7inh5wglajm8aahy17p35ixgnijb7d74gjqzbj4cv93d"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("dbus" ,dbus)
@@ -1280,7 +1288,7 @@ utilities.")
 (define-public kcompletion
   (package
     (name "kcompletion")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1289,7 +1297,7 @@ utilities.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0fn8imr3m219r38a0rafbnylcpjq4rqhz1w66mx80sc7l10mhcni"))))
+                "18hvdk5b1nkh6b3vx0jajri57rl266b0qjsiwirh5wmjc81xbpcw"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1317,7 +1325,7 @@ integrated it into your application's other widgets.")
 (define-public kcrash
   (package
     (name "kcrash")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1326,7 +1334,7 @@ integrated it into your application's other widgets.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1zrkjrpj88ymdy5vbn9db73vxppswvmbn2gkn4gpx773dsmflhz3"))))
+                "1cshay7dhbqgh62nq85vd9sm20gq9s9f70mdnzjjh1q7cajybkp3"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1355,7 +1363,7 @@ application crashes.")
 (define-public kdoctools
   (package
     (name "kdoctools")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1364,7 +1372,7 @@ application crashes.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0i7zgg7iw6w0sdr6cv3yf4blcr61i8zczgmyqa964ka6p3ywwjs9"))))
+                "145jjhsd0whmcj91zbjz2b1jyj4wasw60hbwyd4xvqds8cp0l02h"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -1403,7 +1411,7 @@ from DocBook files.")
 (define-public kfilemetadata
   (package
     (name "kfilemetadata")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1412,8 +1420,23 @@ from DocBook files.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "01d91gmrxlax0g13ib841vc4qwmv6r4qdr10wfs77rrxsvw7z08f"))))
+                "1rvlg6by8daiq5ff3qlxcw9k2iq4qicsj0c8a00xfy3w4h9ip9h5"))))
     (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Need to check after install and to set QT_PLUGIN_PATH for the test
+         ;; suite to finds the plugins.
+         (delete 'check)
+         (add-after 'install 'check
+           (assoc-ref %standard-phases 'check))
+         (add-before 'check 'check-setup
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (setenv "QT_PLUGIN_PATH"
+                       (string-append out "/lib/plugins:"
+                                    (getenv "QT_PLUGIN_PATH"))))
+             #t)))))
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
        ("python-2" ,python-2)))
@@ -1421,7 +1444,14 @@ from DocBook files.")
      `(("attr" ,attr)
        ("karchive" ,karchive)
        ("ki18n" ,ki18n)
-       ("qtbase" ,qtbase)))
+       ("qtbase" ,qtbase)
+       ;; Required run-time packages
+       ("catdoc" ,catdoc)
+       ;; Optional run-time packages
+       ("exiv2" ,exiv2)
+       ("ffmpeg" ,ffmpeg)
+       ("poppler" ,poppler)
+       ("taglib" ,taglib)))
     (home-page "https://community.kde.org/Frameworks")
     (synopsis "Extract metadata from different fileformats")
     (description "KFileMetaData provides a simple library for extracting the
@@ -1433,7 +1463,7 @@ by applications to write metadata.")
 (define-public kimageformats
   (package
     (name "kimageformats")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1442,7 +1472,7 @@ by applications to write metadata.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "05hn8n4sc3rj5c30ki068f76k1gfgvq19zcw5jlqpnn1l5db5fvz"))))
+                "0q9ng4clqk2dqw43nk1pmq1d61rahc3qr4dmg4y3kjvz3ahnnijw"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1470,7 +1500,7 @@ formats.")
 (define-public kjobwidgets
   (package
     (name "kjobwidgets")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1479,7 +1509,7 @@ formats.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0lhv3mg2liija0g8x14jpv1mdhb0zjh868p1cs24bs9xrw1l8984"))))
+                "0lrx761vf947mb2q1l2jgi0wgwj8cz2nn1xg0j38bh99sgddmzpf"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1498,7 +1528,7 @@ asynchronous jobs.")
 (define-public knotifications
   (package
     (name "knotifications")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1507,7 +1537,7 @@ asynchronous jobs.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "06ap7m8c2py49pqrnhadbyl69y3nsyamzahbpwipqgh9k62sy34y"))))
+                "12z5hza0n5zr6mv3gkwhzb8zkrmk6dvgq8hrzwm8rzkgphjr6pi9"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -1541,7 +1571,7 @@ covers feedback and persistent events.")
 (define-public kpackage
   (package
     (name "kpackage")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1550,7 +1580,7 @@ covers feedback and persistent events.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "070zasl5c58n01fk18mjgccfizymc9griwicxizqjgzzbgvkns3r"))))
+                "0wdymhcrjggxb7andz36cfk9f240vvbq5yahlxyhfp9z69lriw5q"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -1578,7 +1608,7 @@ were traditional plugins.")
 (define-public kpty
   (package
     (name "kpty")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1587,7 +1617,7 @@ were traditional plugins.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0h4318rc9902cvqj69capb8lh7s84y44jd59d11fyhq21jhy152s"))))
+                "00k5hhz7nf3nf47xb003ni1chi03imyrfajap6ay4zp90l8fr950"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -1614,7 +1644,7 @@ and communicating with them using a pty.")
 (define-public kunitconversion
   (package
     (name "kunitconversion")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1623,7 +1653,7 @@ and communicating with them using a pty.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0crc8riwafcx6fwhgrc8vfbwmdygd6vlz1fbbgni09gamm8mbcin"))))
+                "0v4x0flbfavrzfiqh71mdkqgp1fzk4f52msvq6w60i2s3sz7hcsm"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -1657,7 +1687,7 @@ gallons).")
 (define-public baloo
   (package
     (name "baloo")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1666,7 +1696,7 @@ gallons).")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0a4qwinkp4gmcbx4j0qxbj5qb40h7594s39za7sc7bymadicasy1"))))
+                "0z53lnniq9xdk09d73z0p1xs1qmaf71m4znm4hmq956yg4yqa1ya"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kcoreaddons" ,kcoreaddons)
@@ -1715,7 +1745,7 @@ maintaining an index of the contents of your files.")
 (define-public kactivities
   (package
     (name "kactivities")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1724,7 +1754,7 @@ maintaining an index of the contents of your files.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0xin4shaj0zsfsww84mwk5n4ldaqy730jhc369px2j2nq57sg9g7"))))
+                "0dg6bkdxf4sicij4szmi55npn6chp0sfmw27qi1s582ymqzjgf5m"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -1762,7 +1792,7 @@ with other frameworks.")
 (define-public kactivities-stats
   (package
     (name "kactivities-stats")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1771,7 +1801,7 @@ with other frameworks.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1b3z7bcap3vjc0155y0a9xkbd477fklmpj8dr3rs0ccyc6qxxbvw"))))
+                "1dfaq4hsd9wm1ka45dkxbl9wwr7s5ixbnnghqwxhl7a60imc680r"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -1792,7 +1822,7 @@ by which applications, and what documents have been linked to which activity.")
 (define-public kbookmarks
   (package
     (name "kbookmarks")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1801,7 +1831,7 @@ by which applications, and what documents have been linked to which activity.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "03a024phcjv46afbp5lbmj2p8hb6srfzyaslc6ln6ms473bf5k4w"))))
+                "0ggn4rz8ch82ph64q6yik9fb1mp6kmsd7n33p769zl1lw7fldn0v"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kwidgetsaddons" ,kwidgetsaddons)))
@@ -1835,7 +1865,7 @@ using the XBEL format.")
 (define-public kcmutils
   (package
     (name "kcmutils")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1844,7 +1874,7 @@ using the XBEL format.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1mr9h7wc22bfrbm92ajsjfcs16c5xpkrxbxzcma3a0s7jhy6qrm9"))))
+                "1b52lwn7qjqrn06va7j1jswlzs6bx0drs90myf3607k52ffbf4hy"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kconfigwidgets" ,kconfigwidgets)
@@ -1874,7 +1904,7 @@ KCModules can be created with the KConfigWidgets framework.")
 (define-public kconfigwidgets
   (package
     (name "kconfigwidgets")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1883,7 +1913,7 @@ KCModules can be created with the KConfigWidgets framework.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1cq0a3k6pvl9f098ssqqk2rddxh0xn1kk4p5kfyd7w0m3c604zw3"))))
+                "0h4kappsffrp2qgg8wza1ybgah2dlcgpz591llfvaz31ldsml9hk"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kauth" ,kauth)
@@ -1916,7 +1946,7 @@ their settings.")
 (define-public kdeclarative
   (package
     (name "kdeclarative")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1925,7 +1955,7 @@ their settings.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1y5g3yi1l0g1mkqhhakg265r25zm23qc2fqg55rq0g7l9ss7w7g9"))))
+                "1mfj32p631zvwz9ldk8536ifb4n825zxbhx69bfllhw2vn1am7z2"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kconfig" ,kconfig)
@@ -1976,7 +2006,7 @@ that offer bindings to some of the Frameworks.")
 (define-public kded
   (package
     (name "kded")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1985,7 +2015,7 @@ that offer bindings to some of the Frameworks.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0pmmsvqwkw86yvxxf9i6lg13vg80m0kmhjjs88lbm60cgvr5jhq6"))))
+                "0qy4w7bcg60gyf6y6c11kqcshnld55a8w4fzglpwgqfbliyi5yzq"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -2009,7 +2039,7 @@ started on demand.")
 (define-public kdesignerplugin
   (package
     (name "kdesignerplugin")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2018,7 +2048,7 @@ started on demand.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1hapj8x8nky3m6lx2ianmxwprf00jqyjsknjz3pi4vk3i714vhnf"))))
+                "1jnarg7wrhdjfq73q4wplazxsz927mpf0l6m0i4akq4dlp1b7aah"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -2047,7 +2077,7 @@ ini-style description files.")
 (define-public kdesu
   (package
     (name "kdesu")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2056,7 +2086,7 @@ ini-style description files.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0zsy1hivy5bbczrpkpgj72mlx0km2nm53kpgrj2hfdy3ss0vn3hl"))))
+                "04mx0d6kf8slgkkgbna3cyv4c491jvlwcwqxc7zikz0i03l341id"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kpty" ,kpty)))
@@ -2078,7 +2108,7 @@ with su and ssh respectively.")
 (define-public kemoticons
   (package
     (name "kemoticons")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2087,7 +2117,7 @@ with su and ssh respectively.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1ncjs9iy6z6rhk83ff7fj1b68rkylnry0h698rh4jvs98gpw8sgj"))))
+                "02h12qy0w6mcgkczi3md1znnvp7r47l8h416nd080ljpsydalgx8"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kservice" ,kservice)))
@@ -2119,7 +2149,7 @@ emoticons coming from different providers.")
 (define-public kglobalaccel
   (package
     (name "kglobalaccel")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2128,7 +2158,7 @@ emoticons coming from different providers.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0dxwjznnqlgnvn15pl34rxlzk3i21cvzn8xbgqmxakny8qiib9ry"))))
+                "1i32dq70qxjbfvlw0wqxvqvl6ysydmpg3zbiflff4z1qrmvmpw6a"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -2162,7 +2192,7 @@ window does not need focus for them to be activated.")
 (define-public kiconthemes
   (package
     (name "kiconthemes")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2171,7 +2201,7 @@ window does not need focus for them to be activated.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "00azbyk5y3jgdqv03a2nd0627kdkhq1bkghvw7w62kcnih9k8lq5"))))
+                "0hbl82r6qc8dh9v9n9xjkx966czkq5yjxx2rx7sbilj2p9v3saii"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
@@ -2210,7 +2240,7 @@ in applications using the KDE Frameworks.")
 (define-public kinit
   (package
     (name "kinit")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2219,7 +2249,7 @@ in applications using the KDE Frameworks.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0103lflppdw55l9xiqs68lzaq9897m5qnkmy6fp7dm9wfh9aplqn"))))
+                "08429kjihpaip73wszr3rsii8sdlwgm3kxx7g0hpjhkj9d2jq3m1"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -2254,7 +2284,7 @@ makes starting KDE applications faster and reduces memory consumption.")
 (define-public kio
   (package
     (name "kio")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2263,7 +2293,7 @@ makes starting KDE applications faster and reduces memory consumption.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "19da02l0aj0l07x9bbklhvx9slci3v1d8q80jvam4vyzs4qdyjin"))))
+                "1i23ld5b9gafh2x3lv79jbggbd92xyhk7rg3n765w3bsfpg2ijva"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kbookmarks" ,kbookmarks)
@@ -2327,7 +2357,7 @@ KIO enabled infrastructure.")
 (define-public knewstuff
   (package
     (name "knewstuff")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2336,7 +2366,7 @@ KIO enabled infrastructure.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1i3ldy9wwnjhpgdd2d0bg4304k88riin89zqzdl52lpqa6hjl3fp"))))
+                "19d53ylwr92dzl9agk4j765zvb897rcm55z7pr6841aj58jk9b82"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("attica" ,attica)
@@ -2384,7 +2414,7 @@ specification.")
 (define-public knotifyconfig
   (package
     (name "knotifyconfig")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2393,7 +2423,7 @@ specification.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "14qc6wj4j5i45vzqsvl2wlc07c6x30hb2680gwfqsvwgiaszkzv4"))))
+                "0lwl22vq770jyp45j32s0ss8yiqdwbink6cdhkbapg3pzbiwklyk"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -2426,7 +2456,7 @@ notifications which can be embedded in your application.")
 (define-public kparts
   (package
     (name "kparts")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2435,7 +2465,7 @@ notifications which can be embedded in your application.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0hrx0mdvw301nbdyw5fkvgkw60ya6kmfw6hfzmj48bws8mi33rs5"))))
+                "1a5n0f7ljdc2bm6vggzwbvpblyxjqn9m9pam70iab964pqqalgp7"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kio" ,kio)
@@ -2477,7 +2507,7 @@ widgets with a user-interface defined in terms of actions.")
 (define-public kpeople
   (package
     (name "kpeople")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2486,7 +2516,7 @@ widgets with a user-interface defined in terms of actions.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1xqi8zr76hajgyv016iaqlmnr5b84s71fbx412q153g92jglp4mk"))))
+                "0krm74dl80s48nhiygga4dvkvqqimxdx4nczbk4qvj7j1g9p2rsh"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -2520,7 +2550,7 @@ to easily extend the contacts collection.")
 (define-public krunner
   (package
     (name "krunner")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2529,7 +2559,7 @@ to easily extend the contacts collection.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1k4rg9vqr6h5aj7v51fx3i5z9kxlfpacahs81hkwksi6if8ik4kr"))))
+                "0n527p708k719zgmvvbmp20xmg72f85cll05q05p4h317g7wz6i5"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("plasma-framework" ,plasma-framework)))
@@ -2575,7 +2605,7 @@ typed.")
 (define-public kservice
   (package
     (name "kservice")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2584,7 +2614,7 @@ typed.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "02xk3ajspprmx964zhwh2l3axm4gns9h0m0pvcb1v5j8pfh9v70q"))))
+                "0sikwn49s2iq1nj518q55m2p0hvdvwm98cpf0dkjb1z1v6fgjc37"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kconfig" ,kconfig)
@@ -2620,7 +2650,7 @@ types or handled by application specific code.")
 (define-public ktexteditor
   (package
     (name "ktexteditor")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2629,7 +2659,7 @@ types or handled by application specific code.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1sybw8k3f36mcs5qh3b51v7ynbqn4pbiiabkyxfmyi82i09m2jgw"))))
+                "182a0swfgdqr0faq3ksk6hlfvdi1afd0hpys5vayjjf263m19xxw"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kparts" ,kparts)))
@@ -2688,7 +2718,7 @@ library.")
 (define-public ktextwidgets
   (package
     (name "ktextwidgets")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2697,7 +2727,7 @@ library.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1s2fd4n4hfkzscxv0cdfjynjzi1f57pfi9a3fp6rrm5c5645zk7r"))))
+                "1hri34b373bww5gv14qli2nm77k05pk170nbb2vv2zvzv93g25gw"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("ki18n" ,ki18n)
@@ -2734,7 +2764,7 @@ It supports rich text as well as plain text.")
 (define-public kwallet
   (package
     (name "kwallet")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2743,7 +2773,7 @@ It supports rich text as well as plain text.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0psc4n6lck9gbx2nn7mgv33x4z2r0xp1mx1xcsgy8smvalrfv5xa"))))
+                "08z3ddsam5n5qn2svscp4hgksf6qd1h8lqw1v382p01nnmhxadz5"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)))
@@ -2775,7 +2805,7 @@ the passwords on KDE work spaces.")
 (define-public kxmlgui
   (package
     (name "kxmlgui")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2784,7 +2814,7 @@ the passwords on KDE work spaces.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1pxi4z7z3bzwcnfwq0pvjsmds401fkisyr353lyxf4rvcpwj3a65"))))
+                "1v8m6qzjqg3ic14a5ki37bf13kifzcbhly68zcxgs5b92hr953iy"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kconfig" ,kconfig)
@@ -2827,7 +2857,7 @@ descriptions for integrating actions from plugins.")
 (define-public kxmlrpcclient
   (package
     (name "kxmlrpcclient")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2836,7 +2866,7 @@ descriptions for integrating actions from plugins.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1kaczibdfdph5mpg1dldsmqb1six57w7ch3v0v7av5h6j6sx0xaq"))))
+                "0kp3ab50m5jl2jgw883ip67s6gs0l3saprzrqa9r3hydn2c4s3md"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kio" ,kio)))
@@ -2870,7 +2900,7 @@ setUrl, setUserAgent and call.")
 (define-public plasma-framework
   (package
     (name "plasma-framework")
-    (version "5.32.0")
+    (version "5.34.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2879,7 +2909,7 @@ setUrl, setUserAgent and call.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1hrnmilc30d1kh20cky329i5ji3qyy7m4f8jzax5cgl7nrjca31h"))))
+                "0waicqskfwc8xpmrym165hwlfv6nzbwc783sac5vrhbyk4bwk8x9"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("kpackage" ,kpackage)
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index 4c80de2369..ffbe5b1a88 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
-;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Theodoros Foradis <theodoros.for@openmailbox.org>
 ;;;
@@ -27,12 +27,16 @@
   #:use-module (guix packages)
   #:use-module (guix utils)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system ant)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system python)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages java)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages pkg-config)
@@ -91,6 +95,100 @@ devices on various operating systems.")
 version of libusb to run with newer libusb.")
     (license lgpl2.1+)))
 
+(define-public libusb4java
+  ;; There is no public release so we take the latest version from git.
+  (let ((commit "396d642a57678a0d9663b062c980fe100cc0ea1e")
+        (revision "1"))
+    (package
+      (name "libusb4java")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/usb4java/libusb4java.git")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0wqgapalhfh9v38ycbl6i2f5lh1wpr6fzwn5dwd0rdacypkd1gml"))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:tests? #f                    ; there are no tests
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'configure 'set-JAVA_HOME
+             (lambda* (#:key inputs #:allow-other-keys)
+               (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
+               #t)))))
+      (inputs
+       `(("libusb" ,libusb)))
+      (native-inputs
+       `(("jdk" ,icedtea "jdk")))
+      (home-page "https://github.com/usb4java/libusb4java/")
+      (synopsis "JNI bindings to libusb")
+      (description
+       "This package provides Java JNI bindings to the libusb library for use
+with usb4java.")
+      (license expat))))
+
+(define-public java-usb4java
+  (package
+    (name "java-usb4java")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/usb4java/usb4java/"
+                                  "archive/usb4java-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0gzpsnzwgsdyra3smq288yvxnwrgvdwxr6g8jbknnsk56kv6wc34"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "usb4java.jar"
+       #:phases
+       (modify-phases %standard-phases
+         ;; Usually, native libusb4java libraries for all supported systems
+         ;; would be included in the jar and extracted at runtime.  Since we
+         ;; build everything from source we cannot just bundle pre-built
+         ;; binaries for other systems.  Instead, we patch the loader to
+         ;; directly return the appropriate library for this system.  The
+         ;; downside is that the jar will only work on the same architecture
+         ;; that it was built on.
+         (add-after 'unpack 'copy-libusb4java
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/main/java/org/usb4java/Loader.java"
+               (("private static String extractLibrary" line)
+                (string-append
+                 line "(final String a, final String b) {"
+                 "return \""
+                 (assoc-ref inputs "libusb4java") "/lib/libusb4java.so"
+                 "\"; }\n"
+                 "private static String _extractLibrary")))
+             #t))
+         (add-after 'unpack 'disable-broken-tests
+           (lambda _
+             (with-directory-excursion "src/test/java/org/usb4java"
+               ;; These tests should only be run when USB devices are present.
+               (substitute* '("LibUsbGlobalTest.java"
+                              "TransferTest.java")
+                 (("this.context = new Context\\(\\);")
+                  "this.context = null;")
+                 (("LibUsb.init") "//"))
+               (substitute* "DeviceListIteratorTest.java"
+                 (("this.iterator.remove" line)
+                  (string-append "assumeUsbTestsEnabled();" line))))
+             #t)))))
+    (inputs
+     `(("libusb4java" ,libusb4java)
+       ("java-commons-lang3" ,java-commons-lang3)
+       ("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://usb4java.org/")
+    (synopsis "USB library for Java")
+    (description
+     "This package provides a USB library for Java based on libusb and
+implementing @code{javax.usb} (JSR-80).")
+    (license expat)))
+
 (define-public python-pyusb
   (package
     (name "python-pyusb")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 75da0d420f..9db748ebee 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -354,8 +354,8 @@ It has been modified to remove all non-free binary blobs.")
 
 (define %intel-compatible-systems '("x86_64-linux" "i686-linux"))
 
-(define %linux-libre-version "4.11")
-(define %linux-libre-hash "0j1bzzq9iq5i1zm7gnig8v0clr8wq303kvcdsaifc0r0ggz1mx1n")
+(define %linux-libre-version "4.11.2")
+(define %linux-libre-hash "0vp6hjc7cb6q6bhbg6jcf08r27xbf293cdib2vfng15ygvxpyfij")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -364,14 +364,14 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.27"
-                    "1b39zijjkv21kya359y4g88w5ff110v95pvc4wfvc83dvik9hny5"
+  (make-linux-libre "4.9.29"
+                    "0yj4gajdzilxnh9lhb2zl0hs654lagdfx8cp7bv2w4q41bnmc3l9"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.67"
-                    "1nadmrd26llc17ipig7bx7rf2gwns94g86a3ilcvgdk17hq5riss"
+  (make-linux-libre "4.4.69"
+                    "14q5lqsfmwyiilbhffr3bwsm6i3z1jv6y09rg8x3faibcg766wny"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -1568,7 +1568,12 @@ UnionFS-FUSE additionally supports copy-on-write.")
                           (exe (string-append out "/bin/unionfs")))
                      ;; By default, 'unionfs' keeps references to
                      ;; $glibc/share/locale and similar stuff.  Remove them.
-                     (remove-store-references exe)))
+                     (remove-store-references exe)
+
+                     ;; 'unionfsctl' has references to glibc as well.  Since
+                     ;; we don't need it, remove it.
+                     (delete-file (string-append out "/bin/unionfsctl"))
+                     #t))
                  %standard-phases)))
     (inputs `(("fuse" ,fuse-static)))))
 
@@ -2859,7 +2864,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "4.10.2")
+    (version "4.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -2867,7 +2872,7 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "02p63nz78lrr156cmbb759z76cn95hv6mmz7v592lmiq0dkxy2gd"))))
+                "03mzv89f08gdsqv4ima793g44kdavcfyjialf5dr0zd2ab66hyp1"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of binaries in "out" (~16MiB!)
@@ -3320,14 +3325,14 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
 (define-public mcelog
   (package
     (name "mcelog")
-    (version "149")
+    (version "150")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://git.kernel.org/cgit/utils/cpu/mce/"
                                   "mcelog.git/snapshot/v" version ".tar.gz"))
               (sha256
                (base32
-                "08hd8bl9rgss990icb69srarrfwcg8k7py979ak753j92ybbkhdm"))
+                "1skfiracl3a1afmml8mvnccr4rym4ibv33c342rkyxn0j3088h24"))
               (file-name (string-append name "-" version ".tar.gz"))
               (modules '((guix build utils)))
               (snippet
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 57d0191b70..64acc75e59 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
-;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
+;;; Copyright © 2016, 2017 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;;
@@ -659,7 +659,7 @@ portable between implementations.")
        (sha256
         (base32 "0f48pcbhqs3wwwzjl5nk57d4hcbib4l9xblxc66b8c2fhvhmhxnv"))
        (file-name (string-append "fiveam-" version ".tar.gz"))))
-    (inputs `(("sbcl-alexandria" ,sbcl-alexandria)))
+    (inputs `(("alexandria" ,sbcl-alexandria)))
     (build-system asdf-build-system/sbcl)
     (synopsis "Common Lisp testing framework")
     (description "FiveAM is a simple (as far as writing and running tests
@@ -687,8 +687,8 @@ interactive development model in mind.")
                (base32 "10ryrcx832fwqdawb6jmknymi7wpdzhi30qzx7cbrk0cpnka71w2"))
               (file-name
                (string-append "bordeaux-threads-" version ".tar.gz"))))
-    (inputs `(("sbcl-alexandria" ,sbcl-alexandria)))
-    (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam)))
+    (inputs `(("alexandria" ,sbcl-alexandria)))
+    (native-inputs `(("fiveam" ,sbcl-fiveam)))
     (build-system asdf-build-system/sbcl)
     (synopsis "Portable shared-state concurrency library for Common Lisp")
     (description "BORDEAUX-THREADS is a proposed standard for a minimal
@@ -749,7 +749,7 @@ thin compatibility layer for gray streams.")
         (base32 "16grnxvs7vqm5s6myf8a5s7vwblzq1kgwj8i7ahz8vwvihm9gzfi"))
        (file-name (string-append "flexi-streams-" version ".tar.gz"))))
     (build-system asdf-build-system/sbcl)
-    (inputs `(("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+    (inputs `(("trivial-gray-streams" ,sbcl-trivial-gray-streams)))
     (synopsis "Implementation of virtual bivalent streams for Common Lisp")
     (description "Flexi-streams is an implementation of \"virtual\" bivalent
 streams that can be layered atop real binary or bivalent streams and that can
@@ -779,7 +779,7 @@ streams which are similar to string streams.")
         (base32 "1i7daxf0wnydb0pgwiym7qh2wy70n14lxd6dyv28sy0naa8p31gd"))
        (file-name (string-append "cl-ppcre-" version ".tar.gz"))))
     (build-system asdf-build-system/sbcl)
-    (native-inputs `(("tests:cl-flexi-streams" ,sbcl-flexi-streams)))
+    (native-inputs `(("flexi-streams" ,sbcl-flexi-streams)))
     (synopsis "Portable regular expression library for Common Lisp")
     (description "CL-PPCRE is a portable regular expression library for Common
 Lisp, which is compatible with perl.  It is pretty fast, thread-safe, and
@@ -793,6 +793,51 @@ compatible with ANSI-compliant Common Lisp implementations.")
 (define-public ecl-cl-ppcre
   (sbcl-package->ecl-package sbcl-cl-ppcre))
 
+(define sbcl-cl-unicode-base
+  (let ((revision "1")
+        (commit "9fcd06fba1ddc9e66aed2f2d6c32dc9b764f03ea"))
+    (package
+      (name "sbcl-cl-unicode-base")
+      (version (string-append "0.1.5-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/edicl/cl-unicode.git")
+                      (commit commit)))
+                (file-name (string-append "cl-unicode-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1jicprb5b3bv57dy1kg03572gxkcaqdjhak00426s76g0plmx5ki"))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:asd-file "cl-unicode.asd"
+         #:asd-system-name "cl-unicode/base"))
+      (inputs
+       `(("cl-ppcre" ,sbcl-cl-ppcre)))
+      (home-page "http://weitz.de/cl-unicode/")
+      (synopsis "Portable Unicode library for Common Lisp")
+      (description "CL-UNICODE is a portable Unicode library Common Lisp, which
+is compatible with perl.  It is pretty fast, thread-safe, and compatible with
+ANSI-compliant Common Lisp implementations.")
+      (license license:bsd-2))))
+
+(define-public sbcl-cl-unicode
+  (package
+    (inherit sbcl-cl-unicode-base)
+    (name "sbcl-cl-unicode")
+    (inputs
+     `(("cl-unicode/base" ,sbcl-cl-unicode-base)
+       ,@(package-inputs sbcl-cl-unicode-base)))
+    (native-inputs
+     `(("flexi-streams" ,sbcl-flexi-streams)))
+    (arguments '())))
+
+(define-public ecl-cl-unicode
+  (sbcl-package->ecl-package sbcl-cl-unicode))
+
+(define-public cl-unicode
+  (sbcl-package->cl-source-package sbcl-cl-unicode))
+
 (define-public sbcl-clx
   (let ((revision "1")
         (commit "1c62774b03c1cf3fe6e5cb532df8b14b44c96b95"))
@@ -822,8 +867,6 @@ compatible with ANSI-compliant Common Lisp implementations.")
              (substitute* "clx.asd"
                (("\\(:file \"trapezoid\"\\)") ""))))))
       (build-system asdf-build-system/sbcl)
-      (arguments
-       '(#:special-dependencies '("sb-bsd-sockets")))
       (home-page "http://www.cliki.net/portable-clx")
       (synopsis "X11 client library for Common Lisp")
       (description "CLX is an X11 client library for Common Lisp.  The code was
@@ -851,31 +894,27 @@ from other CLXes around the net.")
                (base32 "1maxp98gh64az3d9vz9br6zdd6rc9fmj2imvax4by85g6kxvdz1i"))
               (file-name (string-append "stumpwm-" version ".tar.gz"))))
     (build-system asdf-build-system/sbcl)
-    (inputs `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
-              ("sbcl-clx" ,sbcl-clx)))
-    (outputs '("out" "bin"))
+    (inputs `(("cl-ppcre" ,sbcl-cl-ppcre)
+              ("clx" ,sbcl-clx)))
+    (outputs '("out" "lib"))
     (arguments
-     '(#:special-dependencies '("sb-posix")
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
          (add-after 'create-symlinks 'build-program
-           (lambda* (#:key lisp outputs inputs #:allow-other-keys)
+           (lambda* (#:key outputs #:allow-other-keys)
              (build-program
-              lisp
-              (string-append (assoc-ref outputs "bin") "/bin/stumpwm")
-              #:inputs inputs
+              (string-append (assoc-ref outputs "out") "/bin/stumpwm")
+              outputs
               #:entry-program '((stumpwm:stumpwm) 0))))
          (add-after 'build-program 'create-desktop-file
-           (lambda* (#:key outputs lisp binary? #:allow-other-keys)
-             (let ((output (or (assoc-ref outputs "bin")
-                               (assoc-ref outputs "out")))
-                   (xsessions "/share/xsessions"))
-               (mkdir-p (string-append output xsessions))
-               (with-output-to-file
-                   (string-append output xsessions
-                                  "/stumpwm.desktop")
-                 (lambda _
-                   (format #t
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (xsessions (string-append out "/share/xsessions")))
+               (mkdir-p xsessions)
+               (call-with-output-file
+                   (string-append xsessions "/stumpwm.desktop")
+                 (lambda (file)
+                   (format file
                     "[Desktop Entry]~@
                      Name=stumpwm~@
                      Comment=The Stump Window Manager~@
@@ -883,7 +922,7 @@ from other CLXes around the net.")
                      TryExec=~@*~a/bin/stumpwm~@
                      Icon=~@
                      Type=Application~%"
-                    output)))
+                    out)))
                #t))))))
     (synopsis "Window manager written in Common Lisp")
     (description "Stumpwm is a window manager written entirely in Common Lisp.
@@ -904,11 +943,15 @@ productive, customizable lisp based systems.")
       (outputs '("out"))
       (arguments '()))))
 
+;; The slynk that users expect to install includes all of slynk's contrib
+;; modules.  Therefore, we build the base module and all contribs first; then
+;; we expose the union of these as `sbcl-slynk'.  The following variable
+;; describes the base module.
 (define sbcl-slynk-boot0
   (let ((revision "1")
         (commit "5706cd45d484a4f25795abe8e643509d31968aa2"))
     (package
-      (name "sbcl-slynk")
+      (name "sbcl-slynk-boot0")
       (version (string-append "1.0.0-beta-" revision "." (string-take commit 7)))
       (source
        (origin
@@ -948,19 +991,22 @@ productive, customizable lisp based systems.")
               (scandir "slynk"))))))
       (build-system asdf-build-system/sbcl)
       (arguments
-       `(#:tests? #f)) ; No test suite
+       `(#:tests? #f ; No test suite
+         #:asd-system-name "slynk"))
       (synopsis "Common Lisp IDE for Emacs")
-      (description "SLY is a fork of SLIME.  It also features a completely
-redesigned REPL based on Emacs's own full-featured comint.el, live code
-annotations, and a consistent interactive button interface.  Everything can be
-copied to the REPL.  One can create multiple inspectors with independent
-history.")
+      (description "SLY is a fork of SLIME, an IDE backend for Common Lisp.
+It also features a completely redesigned REPL based on Emacs's own
+full-featured comint.el, live code annotations, and a consistent interactive
+button interface.  Everything can be copied to the REPL.  One can create
+multiple inspectors with independent history.")
       (home-page "https://github.com/joaotavora/sly")
       (license license:public-domain)
       (properties `((cl-source-variant . ,(delay cl-slynk)))))))
 
 (define-public cl-slynk
-  (sbcl-package->cl-source-package sbcl-slynk-boot0))
+  (package
+    (inherit (sbcl-package->cl-source-package sbcl-slynk-boot0))
+    (name "cl-slynk")))
 
 (define ecl-slynk-boot0
   (sbcl-package->ecl-package sbcl-slynk-boot0))
@@ -969,10 +1015,11 @@ history.")
   (package
     (inherit sbcl-slynk-boot0)
     (name "sbcl-slynk-arglists")
-    (inputs `(("sbcl-slynk" ,sbcl-slynk-boot0)))
+    (inputs `(("slynk" ,sbcl-slynk-boot0)))
     (arguments
-     `(#:asd-file "slynk.asd"
-       ,@(package-arguments sbcl-slynk-boot0)))))
+     (substitute-keyword-arguments (package-arguments sbcl-slynk-boot0)
+       ((#:asd-file _ "") "slynk.asd")
+       ((#:asd-system-name _ #f) #f)))))
 
 (define ecl-slynk-arglists
   (sbcl-package->ecl-package sbcl-slynk-arglists))
@@ -989,7 +1036,7 @@ history.")
   (package
     (inherit sbcl-slynk-arglists)
     (name "sbcl-slynk-fancy-inspector")
-    (inputs `(("sbcl-slynk-util" ,sbcl-slynk-util)
+    (inputs `(("slynk-util" ,sbcl-slynk-util)
               ,@(package-inputs sbcl-slynk-arglists)))))
 
 (define ecl-slynk-fancy-inspector
@@ -1067,6 +1114,7 @@ history.")
 (define-public sbcl-slynk
   (package
     (inherit sbcl-slynk-boot0)
+    (name "sbcl-slynk")
     (inputs
      `(("slynk" ,sbcl-slynk-boot0)
        ("slynk-util" ,sbcl-slynk-util)
@@ -1104,12 +1152,15 @@ history.")
 
          (prepend-to-source-registry
           (string-append (assoc-ref %outputs "out") "//"))
-         (build-image "sbcl"
-                      (string-append
-                       (assoc-ref %outputs "image")
-                       "/bin/slynk")
-                      #:inputs %build-inputs
-                      #:dependencies ',slynk-systems))))))
+
+         (parameterize ((%lisp-type "sbcl")
+                        (%lisp (string-append (assoc-ref %build-inputs "sbcl")
+                                              "/bin/sbcl")))
+           (build-image (string-append
+                         (assoc-ref %outputs "image")
+                         "/bin/slynk")
+                        %outputs
+                        #:dependencies ',slynk-systems)))))))
 
 (define-public ecl-slynk
   (package
@@ -1138,28 +1189,30 @@ history.")
     (inherit sbcl-stumpwm)
     (name "sbcl-stumpwm-with-slynk")
     (outputs '("out"))
-    (native-inputs
-     `(("stumpwm" ,sbcl-stumpwm)
+    (inputs
+     `(("stumpwm" ,sbcl-stumpwm "lib")
        ("slynk" ,sbcl-slynk)))
     (arguments
      (substitute-keyword-arguments (package-arguments sbcl-stumpwm)
        ((#:phases phases)
         `(modify-phases ,phases
            (replace 'build-program
-             (lambda* (#:key lisp inputs outputs #:allow-other-keys)
+             (lambda* (#:key inputs outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (program (string-append out "/bin/stumpwm")))
-                 (build-program lisp program
-                                #:inputs inputs
+                 (build-program program outputs
                                 #:entry-program '((stumpwm:stumpwm) 0)
                                 #:dependencies '("stumpwm"
-                                                 ,@slynk-systems))
+                                                 ,@slynk-systems)
+                                #:dependency-prefixes
+                                (map (lambda (input) (assoc-ref inputs input))
+                                     '("stumpwm" "slynk")))
                  ;; Remove unneeded file.
                  (delete-file (string-append out "/bin/stumpwm-exec.fasl"))
                  #t)))
            (delete 'copy-source)
            (delete 'build)
            (delete 'check)
-           (delete 'link-dependencies)
+           (delete 'create-asd-file)
            (delete 'cleanup)
            (delete 'create-symlinks)))))))
diff --git a/gnu/packages/logging.scm b/gnu/packages/logging.scm
index 2523d65f61..7501f1e5db 100644
--- a/gnu/packages/logging.scm
+++ b/gnu/packages/logging.scm
@@ -109,6 +109,21 @@ command line.")
      `(("python-pyyaml" ,python-pyyaml)
        ("python-sockjs-tornado" ,python-sockjs-tornado)
        ("python-tornado" ,python-tornado)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-commands.py
+                     (lambda args
+                       (substitute* "tailon/commands.py"
+                         (("self\\.first_in_path\\('grep'\\)")
+                          (string-append"'" (which "grep") "'"))
+                         (("self\\.first_in_path\\('gawk', 'awk'\\)")
+                          (string-append"'" (which "gawk") "'"))
+                         (("self\\.first_in_path\\('gsed', 'sed'\\)")
+                          (string-append"'" (which "sed") "'"))
+                         (("self\\.first_in_path\\('gtail', 'tail'\\)")
+                          (string-append"'" (which "tail") "'")))
+                       #t)))))
     (home-page "https://tailon.readthedocs.io/")
     (synopsis
      "Webapp for looking at and searching through log files")
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 39d394140b..b4dfef6ec0 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1608,13 +1608,13 @@ maintained.")
 (define-public khard
   (package
     (name "khard")
-    (version "0.11.3")
+    (version "0.11.4")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "1v66khq5w17xdbkpb00pf9xbl84dlzx4lq286fvzskb949b3y4yn"))))
+                "1shhlq6ljbd8095hd82v4mw56rjcfxf1ymmgknbgh8gix02nsxw1"))))
     (build-system python-build-system)
     (arguments
       `(#:phases
diff --git a/gnu/packages/mc.scm b/gnu/packages/mc.scm
index 3cdc542157..bae12439f1 100644
--- a/gnu/packages/mc.scm
+++ b/gnu/packages/mc.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016 ng0 <ng0@libertad.pw>
+;;; Copyright © 2016, 2017 ng0 <ng0@no-reply.pragmatique.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,7 +30,8 @@
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages perl))
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages zip))
 
 (define-public mc
   (package
@@ -51,7 +52,8 @@
               ("ncurses" ,ncurses)
               ("libssh2" ,libssh2)
               ("glib" ,glib)
-              ("check" ,check)))
+              ("check" ,check)
+              ("unzip" ,unzip)))
     (arguments
      `(#:configure-flags
        '("--with-screen=ncurses" "--enable-aspell")
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
index 84d6f8ff78..1e233a852d 100644
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@ -54,30 +54,35 @@ extensive examples, including parsers for the Javascript and C99 languages.")
     (license (list gpl3+ lgpl3+))))
 
 (define-public mes
-  (let ((commit   "a437c173b9da1949ad966fd50dd4f26e522a910a")
+  (let ((commit "d4420bbcc9f994e2cce430cf156f383dc4092bca")
         (revision "0")
-        (triplet  "i686-unknown-linux-gnu"))
+        (triplet "i686-unknown-linux-gnu")
+        (version "0.6"))
     (package
       (name "mes")
-      (version (string-append "0.5-" revision "." (string-take commit 7)))
+      (version (string-append version "-" revision "." (string-take commit 7)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
                       (url "https://gitlab.com/janneke/mes")
                       (commit commit)))
                 (file-name (string-append name "-" version))
-                ;; TODO: Unbundle nyacc.
                 (sha256
-                 (base32 "1ynr0hc0k15307sgzv09k3y5rvy46h0wbh7zcblx1f9v7y8k90zv"))))
+                 (base32 "0qqywk3siyhf08v7xac08lqldklrqfndlp495wgy6ii9fn93197k"))))
       (build-system gnu-build-system)
-      (supported-systems '("x86_64-linux"))
+      (supported-systems '("i686-linux" "x86_64-linux"))
+      (propagated-inputs
+       `(("nyacc" ,nyacc)))
       (native-inputs
        `(("guile" ,guile-2.2)
-         ;; Use cross-compiler rather than #:system "i686-linux" to get
-         ;; MesCC 64 bit .go files installed ready for use with Guile.
-         ("i686-linux-binutils" ,(cross-binutils triplet))
-         ("i686-linux-gcc" ,(let ((triplet triplet)) (cross-gcc triplet)))
-         ("perl" ,perl)))                       ;build-aux/gitlog-to-changelog
+         ,@(if (string-prefix? "x86_64-linux" (or (%current-target-system)
+                                                  (%current-system)))
+               ;; Use cross-compiler rather than #:system "i686-linux" to get
+               ;; MesCC 64 bit .go files installed ready for use with Guile.
+               `(("i686-linux-binutils" ,(cross-binutils triplet))
+                 ("i686-linux-gcc" ,(cross-gcc triplet)))
+               '())
+         ("perl" ,perl)))               ;build-aux/gitlog-to-changelog
       (arguments
        `(#:phases
          (modify-phases %standard-phases
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 3002d27a6e..d4a72df1d8 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -786,6 +786,57 @@ session management.  NSM clients use a well-specified OSC protocol to
 communicate with the session management daemon.")
     (license license:gpl2+)))
 
+(define-public non-mixer
+  (package (inherit non-sequencer)
+    (name "non-mixer")
+    (arguments
+     (substitute-keyword-arguments (package-arguments non-sequencer)
+       ((#:configure-flags flags)
+        `(cons "--project=mixer"
+               (delete "--project=sequencer" ,flags)))))
+    (inputs
+     `(("jack" ,jack-1)
+       ("liblo" ,liblo)
+       ("ladspa" ,ladspa)
+       ("lrdf" ,lrdf)
+       ("ntk" ,ntk)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://non.tuxfamily.org/wiki/Non%20Mixer")
+    (synopsis "Modular digital audio mixer")
+    (description
+     "The Non Mixer is a powerful, reliable and fast modular digital audio
+mixer.  It utilizes JACK for inter-application audio I/O and the NTK GUI
+toolkit for a fast and lightweight user interface.  Non Mixer can be used
+alone or in concert with Non Timeline and Non Sequencer to form a complete
+studio.")
+    (license license:gpl2+)))
+
+(define-public non-timeline
+  (package (inherit non-sequencer)
+    (name "non-timeline")
+    (arguments
+     (substitute-keyword-arguments (package-arguments non-sequencer)
+       ((#:configure-flags flags)
+        `(cons "--project=timeline"
+               (delete "--project=sequencer" ,flags)))))
+    (inputs
+     `(("jack" ,jack-1)
+       ("liblo" ,liblo)
+       ("libsndfile" ,libsndfile)
+       ("ntk" ,ntk)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://non.tuxfamily.org/wiki/Non%20Timeline")
+    (synopsis "Modular digital audio timeline arranger")
+    (description
+     "The Non Timeline is a powerful, reliable and fast modular digital audio
+timeline arranger.  It utilizes JACK for inter-application audio I/O and the
+NTK GUI toolkit for a fast and lightweight user interface.  Non Timeline can
+be used alone or in concert with Non Mixer and Non Sequencer to form a
+complete studio.")
+    (license license:gpl2+)))
+
 (define-public solfege
   (package
     (name "solfege")
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index f0344d7481..61ff3ced06 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -29,7 +29,7 @@
 (define-public nano
   (package
     (name "nano")
-    (version "2.8.2")
+    (version "2.8.4")
     (source
      (origin
       (method url-fetch)
@@ -37,7 +37,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1q5rxkvsv974085xrd2k11ffazadabcb9cnpfra0shmj71xqlgh2"))))
+        "04bvmimrw40cbcnm3xm5l5lir0qy7cncfkmwrlzg8jiy1x7jdky7"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 8ebf6b0578..3438d370e0 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -52,6 +52,7 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages vim)
+  #:use-module (srfi srfi-1)
   #:use-module (ice-9 match))
 
 (define (boot-guile-uri arch)
@@ -73,8 +74,8 @@
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "0.12.0")
-        (commit "ba2260dbbc5a3c915e2cbd54d93f2f3af2a864c3")
-        (revision 10))
+        (commit "ce92d269fea0a2bfac0ac20414f77127d2f07500")
+        (revision 11))
     (package
       (name "guix")
 
@@ -90,7 +91,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "0nkwbblsnl7kv2n8jf8c6rl3a7dynaqxizhhni18vbnmvza35c79"))
+                  "17l9r2mdzzv8vfxb3bc5zkdqkl472q979iwsarp7lcqss1jxys7w"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
@@ -265,6 +266,18 @@ the Nix package manager.")
 ;; Alias for backward compatibility.
 (define-public guix-devel guix)
 
+(define-public guile2.0-guix
+  (package
+    (inherit guix)
+    (name "guile2.0-guix")
+    (inputs
+     `(("guile" ,guile-2.0)
+       ,@(alist-delete "guile" (package-inputs guix))))
+    (propagated-inputs
+     `(("gnutls" ,gnutls)
+       ("guile-json" ,guile2.0-json)
+       ("guile-ssh" ,guile2.0-ssh)))))
+
 (define (source-file? file stat)
   "Return true if FILE is likely a source file, false if it is a typical
 generated file."
diff --git a/gnu/packages/patches/aspell-default-dict-dir.patch b/gnu/packages/patches/aspell-default-dict-dir.patch
new file mode 100644
index 0000000000..17a6ff606f
--- /dev/null
+++ b/gnu/packages/patches/aspell-default-dict-dir.patch
@@ -0,0 +1,20 @@
+This patch changes the default value of 'dict-dir' to correspond
+to ~/.guix-profile/lib/aspell rather than $prefix/lib/aspell-X.Y.
+
+This is not strictly necessary for the 'aspell' program itself since
+one can simply set "ASPELL_CONF=dict-dir $HOME/.guix-profile/lib/aspell".
+However it is necessary for applications that use libaspell since
+'ASPELL_CONF' is not honored in this case.  See <https://bugs.gnu.org/25836>.
+
+--- a/common/config.cpp
++++ b/common/config.cpp
+@@ -1349,6 +1349,9 @@ namespace acommon {
+ #  define REPL     ".aspell.<lang>.prepl"
+ #endif
+ 
++#undef DICT_DIR
++#define DICT_DIR "<$ASPELL_DICT_DIR|home-dir/.guix-profile/lib/aspell>"
++
+   static const KeyInfo config_keys[] = {
+     // the description should be under 50 chars
+     {"actual-dict-dir", KeyInfoString, "<dict-dir^master>", 0}
diff --git a/gnu/packages/patches/calibre-dont-load-remote-icons.patch b/gnu/packages/patches/calibre-dont-load-remote-icons.patch
new file mode 100644
index 0000000000..2168263072
--- /dev/null
+++ b/gnu/packages/patches/calibre-dont-load-remote-icons.patch
@@ -0,0 +1,45 @@
+From: Martin Pitt <mpitt@debian.org>
+Date: Mon, 14 Nov 2016 22:41:24 +0100
+Subject: content-server: Don't load external URLs for privacy
+
+Spotted by lintian.
+---
+ resources/content_server/browse/browse.html | 4 +---
+ resources/content_server/index.html         | 2 +-
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/resources/content_server/browse/browse.html b/resources/content_server/browse/browse.html
+index 36f7199..e615707 100644
+--- a/resources/content_server/browse/browse.html
++++ b/resources/content_server/browse/browse.html
+@@ -7,7 +7,7 @@
+     <title>..:: calibre {library} ::.. {title}</title>
+     <meta http-equiv="X-UA-Compatible" content="IE=100" />
+     <meta name="robots" content="noindex" />
+-    <link rel="icon" type="image/x-icon" href="//calibre-ebook.com/favicon.ico" />
++    <link rel="icon" type="image/x-icon" href="favicon.ico" />
+ 
+     <link rel="stylesheet" type="text/css" href="{prefix}/static/browse/browse.css" />
+     <link type="text/css" href="{prefix}/static/jquery_ui/css/humanity-custom/jquery-ui-1.8.5.custom.css" rel="stylesheet" />
+@@ -63,8 +63,6 @@
+                     <input type="image"
+                     src="{prefix}/static/button-donate.png"
+                         name="submit"></input>
+-                    <img alt="" src="https://www.paypal.com/en_US/i/scr/pixel.gif"
+-                        width="1" height="1"></img>
+                 </div>
+             </form>
+             <div id="calibre-home-link" title="Go to the calibre website"></div>
+diff --git a/resources/content_server/index.html b/resources/content_server/index.html
+index 51cc33a..e71d0e8 100644
+--- a/resources/content_server/index.html
++++ b/resources/content_server/index.html
+@@ -9,7 +9,7 @@
+         <script type="text/javascript" src="{prefix}/static/date.js" charset="utf-8"></script>
+         <script type="text/javascript" src="{prefix}/static/jquery.js" charset="utf-8"></script>
+         <script type="text/javascript" src="{prefix}/static/gui.js" charset="utf-8"></script>
+-		<link rel="icon" href="//calibre-ebook.com/favicon.ico" type="image/x-icon" />
++		<link rel="icon" href="favicon.ico" type="image/x-icon" />
+ 	</head>
+ 	<body>
+ 	    <div id="banner">
diff --git a/gnu/packages/patches/calibre-drop-unrar.patch b/gnu/packages/patches/calibre-drop-unrar.patch
index 4eb64404f6..adf977b183 100644
--- a/gnu/packages/patches/calibre-drop-unrar.patch
+++ b/gnu/packages/patches/calibre-drop-unrar.patch
@@ -1,15 +1,20 @@
-Taken from Debian. Updated by Alex Griffin.
+Recreated old debian patch on the latest calibre version
 
-Author: Dmitry Shachnev <mitya57@gmail.com>
-Description: do not build unrar extension as we strip unrar from the tarball
-Forwarded: not-needed
-Last-Update: 2013-04-04
+From 6764e4c211e50d4f4633dbabfba7cbc3089c51dc Mon Sep 17 00:00:00 2001
+From: Brendan Tildesley <brendan.tildesley@openmailbox.org>
+Date: Sat, 13 May 2017 21:12:12 +1000
+Subject: [PATCH] Remove unrar extension
 
-Index: calibre/setup/extensions.py
-===================================================================
---- calibre.orig/setup/extensions.json	2016-07-21 21:21:05.000000000 -0500
-+++ calibre/setup/extensions.json	2016-07-27 11:22:17.167710112 -0500
-@@ -211,14 +211,5 @@
+---
+ setup/extensions.json                  | 11 -----------
+ src/calibre/ebooks/metadata/archive.py |  2 +-
+ 2 files changed, 1 insertion(+), 12 deletions(-)
+
+diff --git a/setup/extensions.json b/setup/extensions.json
+index 1f6d1fb5fd..127390450f 100644
+--- a/setup/extensions.json
++++ b/setup/extensions.json
+@@ -211,16 +211,5 @@
          "sources": "calibre/devices/mtp/unix/devices.c calibre/devices/mtp/unix/libmtp.c",
          "headers": "calibre/devices/mtp/unix/devices.h calibre/devices/mtp/unix/upstream/music-players.h calibre/devices/mtp/unix/upstream/device-flags.h",
          "libraries": "mtp"
@@ -20,22 +25,25 @@ Index: calibre/setup/extensions.py
 -        "inc_dirs": "unrar",
 -        "defines": "SILENT RARDLL UNRAR _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE",
 -        "windows_defines": "SILENT RARDLL UNRAR",
+-        "haiku_defines": "LITTLE_ENDIAN SILENT RARDLL UNRAR _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE _BSD_SOURCE",
+-        "haiku_libraries": "bsd",
 -        "optimize_level": 2,
 -        "windows_libraries": "User32 Advapi32 kernel32 Shell32"
      }
  ]
- 
- 
-Index: calibre/src/calibre/ebooks/metadata/archive.py
-===================================================================
---- calibre.orig/src/calibre/ebooks/metadata/archive.py	2016-07-21 21:21:05.000000000 -0500
-+++ calibre/src/calibre/ebooks/metadata/archive.py	2016-07-27 11:21:07.793616039 -0500
-@@ -42,7 +42,7 @@
-     description = _('Extract common e-book formats from archives '
-         '(zip/rar) files. Also try to autodetect if they are actually '
-         'cbz/cbr files.')
+diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py
+index f5c0b7bed3..32257dcdae 100644
+--- a/src/calibre/ebooks/metadata/archive.py
++++ b/src/calibre/ebooks/metadata/archive.py
+@@ -44,7 +44,7 @@ class ArchiveExtract(FileTypePlugin):
+     description = _('Extract common e-book formats from archive files '
+         '(ZIP/RAR). Also try to autodetect if they are actually '
+         'CBZ/CBR files.')
 -    file_types = set(['zip', 'rar'])
 +    file_types = set(['zip'])
      supported_platforms = ['windows', 'osx', 'linux']
      on_import = True
  
+-- 
+2.12.2
+
diff --git a/gnu/packages/patches/calibre-use-packaged-feedparser.patch b/gnu/packages/patches/calibre-use-packaged-feedparser.patch
new file mode 100644
index 0000000000..8f4bbc8248
--- /dev/null
+++ b/gnu/packages/patches/calibre-use-packaged-feedparser.patch
@@ -0,0 +1,51 @@
+From: Martin Pitt <mpitt@debian.org>
+Date: Mon, 14 Nov 2016 22:41:23 +0100
+Subject: Use packaged instead of bundled feedparser Python module
+
+---
+ recipes/lenta_ru.recipe           | 4 +++-
+ src/calibre/web/feeds/__init__.py | 4 +++-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/recipes/lenta_ru.recipe b/recipes/lenta_ru.recipe
+index aa4dac4..4b6710c 100644
+--- a/recipes/lenta_ru.recipe
++++ b/recipes/lenta_ru.recipe
+@@ -4,11 +4,13 @@
+ Lenta.ru
+ '''
+ 
+-from calibre.web.feeds.feedparser import parse
+ from calibre.ebooks.BeautifulSoup import Tag
+ from calibre.web.feeds.news import BasicNewsRecipe
++from feedparser import parse
++from functools import partial
+ import re
+ 
++parse = partial(parse, agent='Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11')
+ 
+ class LentaRURecipe(BasicNewsRecipe):
+     title = u'Lenta.ru: \u041d\u043e\u0432\u043e\u0441\u0442\u0438'
+diff --git a/src/calibre/web/feeds/__init__.py b/src/calibre/web/feeds/__init__.py
+index 8c9d748..f262604 100644
+--- a/src/calibre/web/feeds/__init__.py
++++ b/src/calibre/web/feeds/__init__.py
+@@ -11,7 +11,10 @@ from calibre.utils.logging import default_log
+ from calibre import entity_to_unicode, strftime, force_unicode
+ from calibre.utils.date import dt_factory, utcnow, local_tz
+ from calibre.utils.cleantext import clean_ascii_chars, clean_xml_chars
++from feedparser import parse
++from functools import partial
+ 
++parse = partial(parse, agent='Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.11) Gecko/20101012 Firefox/3.6.11')
+ 
+ class Article(object):
+ 
+@@ -334,7 +337,6 @@ def feed_from_xml(raw_xml, title=None, oldest_article=7,
+                   max_articles_per_feed=100,
+                   get_article_url=lambda item: item.get('link', None),
+                   log=default_log):
+-    from calibre.web.feeds.feedparser import parse
+     # Handle unclosed escaped entities. They trip up feedparser and HBR for one
+     # generates them
+     raw_xml = re.sub(r'(&amp;#\d+)([^0-9;])', r'\1;\2', raw_xml)
diff --git a/gnu/packages/patches/gspell-dash-test.patch b/gnu/packages/patches/gspell-dash-test.patch
new file mode 100644
index 0000000000..e737921c4b
--- /dev/null
+++ b/gnu/packages/patches/gspell-dash-test.patch
@@ -0,0 +1,16 @@
+Somehow, Aspell 0.60.6.1 and aspell-dict-en-2016.11.20-0 don't consider
+this a valid spelling.  Skip it.
+
+--- gspell-1.3.2/testsuite/test-checker.c	2017-05-17 16:02:40.832415940 +0200
++++ gspell-1.3.2/testsuite/test-checker.c	2017-05-17 16:02:50.768351895 +0200
+@@ -101,9 +101,6 @@ test_dashes (void)
+ 
+ 	checker = gspell_checker_new (lang);
+ 
+-	correctly_spelled = gspell_checker_check_word (checker, "spell-checking", -1, &error);
+-	g_assert_no_error (error);
+-	g_assert (correctly_spelled);
+ 
+ 	correctly_spelled = gspell_checker_check_word (checker, "nrst-auie", -1, &error);
+ 	g_assert_no_error (error);
+
diff --git a/gnu/packages/patches/guile-ssh-double-free.patch b/gnu/packages/patches/guile-ssh-double-free.patch
new file mode 100644
index 0000000000..9692b81d39
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-double-free.patch
@@ -0,0 +1,37 @@
+Fix a double-free or use-after-free issue with Guile-SSH used
+with Guile 2.2.  See <https://bugs.gnu.org/26976>.
+
+diff --git a/libguile-ssh/channel-type.c b/libguile-ssh/channel-type.c
+index 3dd641f..0839854 100644
+--- a/libguile-ssh/channel-type.c
++++ b/libguile-ssh/channel-type.c
+@@ -229,10 +229,11 @@ ptob_close (SCM channel)
+       ssh_channel_free (ch->ssh_channel);
+     }
+ 
++  SCM_SETSTREAM (channel, NULL);
++
+ #if USING_GUILE_BEFORE_2_2
+   scm_gc_free (pt->write_buf, pt->write_buf_size, "port write buffer");
+   scm_gc_free (pt->read_buf,  pt->read_buf_size, "port read buffer");
+-  SCM_SETSTREAM (channel, NULL);
+ 
+   return 0;
+ #endif
+diff --git a/libguile-ssh/sftp-file-type.c b/libguile-ssh/sftp-file-type.c
+index 8879924..f87cf03 100644
+--- a/libguile-ssh/sftp-file-type.c
++++ b/libguile-ssh/sftp-file-type.c
+@@ -224,10 +224,11 @@ ptob_close (SCM sftp_file)
+       sftp_close (fd->file);
+     }
+ 
++  SCM_SETSTREAM (sftp_file, NULL);
++
+ #if USING_GUILE_BEFORE_2_2
+   scm_gc_free (pt->write_buf, pt->write_buf_size, "port write buffer");
+   scm_gc_free (pt->read_buf,  pt->read_buf_size, "port read buffer");
+-  SCM_SETSTREAM (sftp_file, NULL);
+ 
+   return 1;
+ #endif
diff --git a/gnu/packages/patches/guile-ssh-rexec-bug.patch b/gnu/packages/patches/guile-ssh-rexec-bug.patch
new file mode 100644
index 0000000000..363fea38c9
--- /dev/null
+++ b/gnu/packages/patches/guile-ssh-rexec-bug.patch
@@ -0,0 +1,16 @@
+Fix a bug whereby 'node-guile-version' would pass a node instead of
+a session to 'rexec'.
+
+diff --git a/modules/ssh/dist/node.scm b/modules/ssh/dist/node.scm
+index 9c065c7..29a3906 100644
+--- a/modules/ssh/dist/node.scm
++++ b/modules/ssh/dist/node.scm
+@@ -411,7 +411,8 @@ procedure returns the 1st evaluated value if multiple values were returned."
+   "Get Guile version installed on a NODE, return the version string.  Return
+ #f if Guile is not installed."
+   (receive (result rc)
+-      (rexec node "which guile > /dev/null && guile --version")
++      (rexec (node-session node)
++             "which guile > /dev/null && guile --version")
+     (and (zero? rc)
+          (car result))))
diff --git a/gnu/packages/patches/jbig2dec-CVE-2017-7885.patch b/gnu/packages/patches/jbig2dec-CVE-2017-7885.patch
new file mode 100644
index 0000000000..a598392765
--- /dev/null
+++ b/gnu/packages/patches/jbig2dec-CVE-2017-7885.patch
@@ -0,0 +1,38 @@
+Fix CVE-2017-7885:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7885
+https://bugs.ghostscript.com/show_bug.cgi?id=697703
+
+Patch copied from upstream source repository:
+
+https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=258290340bb657c9efb44457f717b0d8b49f4aa3
+
+From 258290340bb657c9efb44457f717b0d8b49f4aa3 Mon Sep 17 00:00:00 2001
+From: Shailesh Mistry <shailesh.mistry@hotmail.co.uk>
+Date: Wed, 3 May 2017 22:06:01 +0100
+Subject: [PATCH] Bug 697703: Prevent integer overflow vulnerability.
+
+Add extra check for the offset being greater than the size
+of the image and hence reading off the end of the buffer.
+
+Thank you to Dai Ge for finding this issue and suggesting a patch.
+---
+ jbig2_symbol_dict.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/jbig2_symbol_dict.c b/jbig2_symbol_dict.c
+index 4acaba9..36225cb 100644
+--- a/jbig2_symbol_dict.c
++++ b/jbig2_symbol_dict.c
+@@ -629,7 +629,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
+                 byte *dst = image->data;
+ 
+                 /* SumatraPDF: prevent read access violation */
+-                if (size - jbig2_huffman_offset(hs) < image->height * stride) {
++                if ((size - jbig2_huffman_offset(hs) < image->height * stride) || (size < jbig2_huffman_offset(hs))) {
+                     jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "not enough data for decoding (%d/%d)", image->height * stride,
+                                 size - jbig2_huffman_offset(hs));
+                     jbig2_image_release(ctx, image);
+-- 
+2.13.0
+
diff --git a/gnu/packages/patches/jbig2dec-CVE-2017-7975.patch b/gnu/packages/patches/jbig2dec-CVE-2017-7975.patch
new file mode 100644
index 0000000000..c83fe9d9f2
--- /dev/null
+++ b/gnu/packages/patches/jbig2dec-CVE-2017-7975.patch
@@ -0,0 +1,40 @@
+Fix CVE-2017-7975:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7975
+https://bugs.ghostscript.com/show_bug.cgi?id=697693
+
+Patch copied from upstream source repository:
+
+https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=f8992b8fe65c170c8624226f127c5c4bfed42c66
+
+From f8992b8fe65c170c8624226f127c5c4bfed42c66 Mon Sep 17 00:00:00 2001
+From: Shailesh Mistry <shailesh.mistry@hotmail.co.uk>
+Date: Wed, 26 Apr 2017 22:12:14 +0100
+Subject: [PATCH] Bug 697693: Prevent SEGV due to integer overflow.
+
+While building a Huffman table, the start and end points were susceptible
+to integer overflow.
+
+Thank you to Jiaqi for finding this issue and suggesting a patch.
+---
+ jbig2_huffman.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/jbig2_huffman.c b/jbig2_huffman.c
+index 511e461..b4189a1 100644
+--- a/jbig2_huffman.c
++++ b/jbig2_huffman.c
+@@ -421,8 +421,8 @@ jbig2_build_huffman_table(Jbig2Ctx *ctx, const Jbig2HuffmanParams *params)
+ 
+             if (PREFLEN == CURLEN) {
+                 int RANGELEN = lines[CURTEMP].RANGELEN;
+-                int start_j = CURCODE << shift;
+-                int end_j = (CURCODE + 1) << shift;
++                uint32_t start_j = CURCODE << shift;
++                uint32_t end_j = (CURCODE + 1) << shift;
+                 byte eflags = 0;
+ 
+                 if (end_j > max_j) {
+-- 
+2.13.0
+
diff --git a/gnu/packages/patches/jbig2dec-CVE-2017-7976.patch b/gnu/packages/patches/jbig2dec-CVE-2017-7976.patch
new file mode 100644
index 0000000000..2fe02358b8
--- /dev/null
+++ b/gnu/packages/patches/jbig2dec-CVE-2017-7976.patch
@@ -0,0 +1,122 @@
+Fix CVE-2017-7976:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7976
+https://bugs.ghostscript.com/show_bug.cgi?id=697683
+
+In order to make the bug-fix patch apply, we also include an earlier commit
+that it depends on.
+
+Patches copied from upstream source repository:
+
+Earlier commit, creating context for the CVE fix:
+https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=9d2c4f3bdb0bd003deae788e7187c0f86e624544
+
+CVE-2017-7976 bug fix:
+https://git.ghostscript.com/?p=jbig2dec.git;a=commit;h=cfa054925de49675ac5445515ebf036fa9379ac6
+
+From 9d2c4f3bdb0bd003deae788e7187c0f86e624544 Mon Sep 17 00:00:00 2001
+From: Tor Andersson <tor.andersson@artifex.com>
+Date: Wed, 14 Dec 2016 15:56:31 +0100
+Subject: [PATCH] Fix warnings: remove unsigned < 0 tests that are always
+ false.
+
+---
+ jbig2_image.c       | 2 +-
+ jbig2_mmr.c         | 2 +-
+ jbig2_symbol_dict.c | 9 ++-------
+ 3 files changed, 4 insertions(+), 9 deletions(-)
+
+diff --git a/jbig2_image.c b/jbig2_image.c
+index 94e5a4c..00f966b 100644
+--- a/jbig2_image.c
++++ b/jbig2_image.c
+@@ -256,7 +256,7 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int
+     /* general OR case */
+     s = ss;
+     d = dd = dst->data + y * dst->stride + leftbyte;
+-    if (d < dst->data || leftbyte > dst->stride || h * dst->stride < 0 || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride) {
++    if (d < dst->data || leftbyte > dst->stride || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride) {
+         return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "preventing heap overflow in jbig2_image_compose");
+     }
+     if (leftbyte == rightbyte) {
+diff --git a/jbig2_mmr.c b/jbig2_mmr.c
+index 390e27c..da54934 100644
+--- a/jbig2_mmr.c
++++ b/jbig2_mmr.c
+@@ -977,7 +977,7 @@ jbig2_decode_mmr_line(Jbig2MmrCtx *mmr, const byte *ref, byte *dst)
+             if (b1 < 2)
+                 break;
+             if (c) {
+-                if (b1 - 2 < a0 || a0 < 0)
++                if (a0 == MINUS1 || b1 - 2 < a0)
+                     return -1;
+                 jbig2_set_bits(dst, a0, b1 - 2);
+             }
+diff --git a/jbig2_symbol_dict.c b/jbig2_symbol_dict.c
+index 11a2252..4acaba9 100644
+--- a/jbig2_symbol_dict.c
++++ b/jbig2_symbol_dict.c
+@@ -92,11 +92,6 @@ jbig2_sd_new(Jbig2Ctx *ctx, uint32_t n_symbols)
+ {
+     Jbig2SymbolDict *new_dict = NULL;
+ 
+-    if (n_symbols < 0) {
+-        jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "Negative number of symbols in symbol dict: %d", n_symbols);
+-        return NULL;
+-    }
+-
+     new_dict = jbig2_new(ctx, Jbig2SymbolDict, 1);
+     if (new_dict != NULL) {
+         new_dict->glyphs = jbig2_new(ctx, Jbig2Image *, n_symbols);
+@@ -613,7 +608,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
+             uint32_t j;
+             int x;
+ 
+-            if (code || (BMSIZE < 0)) {
++            if (code) {
+                 jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "error decoding size of collective bitmap!");
+                 goto cleanup4;
+             }
+@@ -716,7 +711,7 @@ jbig2_decode_symbol_dict(Jbig2Ctx *ctx,
+                 code = jbig2_arith_int_decode(IAEX, as, (int32_t *)&exrunlength);
+             /* prevent infinite loop */
+             zerolength = exrunlength > 0 ? 0 : zerolength + 1;
+-            if (code || (exrunlength > limit - i) || (exrunlength < 0) || (zerolength > 4) || (exflag && (exrunlength + j > params->SDNUMEXSYMS))) {
++            if (code || (exrunlength > limit - i) || (zerolength > 4) || (exflag && (exrunlength + j > params->SDNUMEXSYMS))) {
+                 if (code)
+                     jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "failed to decode exrunlength for exported symbols");
+                 else if (exrunlength <= 0)
+-- 
+2.13.0
+
+From cfa054925de49675ac5445515ebf036fa9379ac6 Mon Sep 17 00:00:00 2001
+From: Shailesh Mistry <shailesh.mistry@hotmail.co.uk>
+Date: Wed, 10 May 2017 17:50:39 +0100
+Subject: [PATCH] Bug 697683: Bounds check before reading from image source
+ data.
+
+Add extra check to prevent reading off the end of the image source
+data buffer.
+
+Thank you to Dai Ge for finding this issue and suggesting a patch.
+---
+ jbig2_image.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/jbig2_image.c b/jbig2_image.c
+index 661d0a5..ae161b9 100644
+--- a/jbig2_image.c
++++ b/jbig2_image.c
+@@ -263,7 +263,8 @@ jbig2_image_compose(Jbig2Ctx *ctx, Jbig2Image *dst, Jbig2Image *src, int x, int
+     /* general OR case */
+     s = ss;
+     d = dd = dst->data + y * dst->stride + leftbyte;
+-    if (d < dst->data || leftbyte > dst->stride || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride) {
++    if (d < dst->data || leftbyte > dst->stride || d - leftbyte + h * dst->stride > dst->data + dst->height * dst->stride ||
++        s - leftbyte + (h - 1) * src->stride + rightbyte > src->data + src->height * src->stride) {
+         return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "preventing heap overflow in jbig2_image_compose");
+     }
+     if (leftbyte == rightbyte) {
+-- 
+2.13.0
+
diff --git a/gnu/packages/patches/networkmanager-qt-activeconnection-test-1.patch b/gnu/packages/patches/networkmanager-qt-activeconnection-test-1.patch
deleted file mode 100644
index 2dd39294ea..0000000000
--- a/gnu/packages/patches/networkmanager-qt-activeconnection-test-1.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From 61337983ba74361938b7d5323de5d2819a235fdc Mon Sep 17 00:00:00 2001
-From: Jan Grulich <jgrulich@redhat.com>
-Date: Mon, 3 Apr 2017 12:53:12 +0200
-Subject: Fix unit test for active connections
-
-Instead of sending PropertiesChanged signal for an active connection we
-added recently we should set all properties initially and just advertise
-that we have a new active connection once everything is set
----
- src/fakenetwork/fakenetwork.cpp | 26 +++++++-------------------
- 1 file changed, 7 insertions(+), 19 deletions(-)
-
-diff --git a/src/fakenetwork/fakenetwork.cpp b/src/fakenetwork/fakenetwork.cpp
-index bc1144e..261fe8e 100644
---- a/src/fakenetwork/fakenetwork.cpp
-+++ b/src/fakenetwork/fakenetwork.cpp
-@@ -215,8 +215,14 @@ void FakeNetwork::unregisterService()
- 
- QDBusObjectPath FakeNetwork::ActivateConnection(const QDBusObjectPath &connection, const QDBusObjectPath &device, const QDBusObjectPath &specific_object)
- {
--    ActiveConnection *newActiveConnection = new ActiveConnection(this);
-     QString newActiveConnectionPath = QString("/org/kde/fakenetwork/ActiveConnection/") + QString::number(m_activeConnectionsCounter++);
-+    ActiveConnection *newActiveConnection = new ActiveConnection(this);
-+    newActiveConnection->addDevice(device);
-+    newActiveConnection->setActiveConnectionPath(newActiveConnectionPath);
-+    newActiveConnection->setConnection(connection);
-+    newActiveConnection->setSpecificObject(specific_object);
-+    newActiveConnection->setState(NetworkManager::ActiveConnection::Activating);
-+
-     m_activeConnections.insert(QDBusObjectPath(newActiveConnectionPath), newActiveConnection);
-     QDBusConnection::sessionBus().registerObject(newActiveConnectionPath, newActiveConnection, QDBusConnection::ExportScriptableContents);
- 
-@@ -227,24 +233,6 @@ QDBusObjectPath FakeNetwork::ActivateConnection(const QDBusObjectPath &connectio
-     map.insert(QLatin1Literal("ActivatingConnection"), QVariant::fromValue(QDBusObjectPath(newActiveConnectionPath)));
-     Q_EMIT PropertiesChanged(map);
- 
--    newActiveConnection->addDevice(device);
--    newActiveConnection->setActiveConnectionPath(newActiveConnectionPath);
--    newActiveConnection->setConnection(connection);
--    newActiveConnection->setSpecificObject(specific_object);
--    newActiveConnection->setState(NetworkManager::ActiveConnection::Activating);
--
--    map.clear();
--    const QList<QDBusObjectPath> deviceList { device };
--    map.insert(QLatin1Literal("Devices"), QVariant::fromValue<QList<QDBusObjectPath> >(deviceList));
--    map.insert(QLatin1Literal("Connection"), QVariant::fromValue<QDBusObjectPath>(connection));
--    if (!specific_object.path().isEmpty()) {
--        map.insert(QLatin1Literal("SpecificObject"), QVariant::fromValue<QDBusObjectPath>(connection));
--    }
--    map.insert(QLatin1Literal("State"), NetworkManager::ActiveConnection::Activating);
--    QDBusMessage message = QDBusMessage::createSignal(newActiveConnectionPath, QLatin1Literal("org.kde.fakenetwork.Connection.Active"), QLatin1Literal("PropertiesChanged"));
--    message << map;
--    QDBusConnection::sessionBus().send(message);
--
-     Device *usedDevice = static_cast<Device *>(QDBusConnection::sessionBus().objectRegisteredAt(device.path()));
-     if (usedDevice) {
-         m_activatedDevice = usedDevice->devicePath();
--- 
-cgit v0.11.2
-
diff --git a/gnu/packages/patches/networkmanager-qt-activeconnection-test-2.patch b/gnu/packages/patches/networkmanager-qt-activeconnection-test-2.patch
deleted file mode 100644
index af3cdff729..0000000000
--- a/gnu/packages/patches/networkmanager-qt-activeconnection-test-2.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-From 3f6155389abc8e2b3dafc5eefa1ce0c929b007fa Mon Sep 17 00:00:00 2001
-From: Jan Grulich <jgrulich@redhat.com>
-Date: Mon, 3 Apr 2017 14:13:54 +0200
-Subject: One more attempt to fix unit test for active connections
-
----
- src/activeconnection.cpp | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/src/activeconnection.cpp b/src/activeconnection.cpp
-index 05582fa..3a8e6b2 100644
---- a/src/activeconnection.cpp
-+++ b/src/activeconnection.cpp
-@@ -79,11 +79,13 @@ NetworkManager::ActiveConnection::ActiveConnection(const QString &path, QObject
-     connect(&d->iface, &OrgFreedesktopNetworkManagerConnectionActiveInterface::PropertiesChanged, d, &ActiveConnectionPrivate::propertiesChanged);
- #endif
- 
-+#ifndef NMQT_STATIC
-     /*
-      * Workaround: Re-check connection state before we watch changes in case it gets changed too quickly
-      * BUG:352326
-      */
-     d->recheckProperties();
-+#endif
- }
- 
- NetworkManager::ActiveConnection::ActiveConnection(ActiveConnectionPrivate &dd, QObject *parent)
-@@ -91,18 +93,26 @@ NetworkManager::ActiveConnection::ActiveConnection(ActiveConnectionPrivate &dd,
- {
-     Q_D(ActiveConnection);
- 
-+#ifndef NMQT_STATIC
- #if NM_CHECK_VERSION(1, 4, 0)
-     QDBusConnection::systemBus().connect(NetworkManagerPrivate::DBUS_SERVICE, d->path, NetworkManagerPrivate::FDO_DBUS_PROPERTIES,
-                                          QLatin1String("PropertiesChanged"), d, SLOT(dbusPropertiesChanged(QString,QVariantMap,QStringList)));
- #else
-     connect(&d->iface, &OrgFreedesktopNetworkManagerConnectionActiveInterface::PropertiesChanged, d, &ActiveConnectionPrivate::propertiesChanged);
- #endif
-+#endif
-+
-+#ifdef NMQT_STATIC
-+    connect(&d->iface, &OrgFreedesktopNetworkManagerConnectionActiveInterface::PropertiesChanged, d, &ActiveConnectionPrivate::propertiesChanged);
-+#endif
- 
-+#ifndef NMQT_STATIC
-     /*
-      * Workaround: Re-check connection state before we watch changes in case it gets changed too quickly
-      * BUG:352326
-      */
-     d->recheckProperties();
-+#endif
- }
- 
- NetworkManager::ActiveConnection::~ActiveConnection()
--- 
-cgit v0.11.2
-
diff --git a/gnu/packages/patches/qemu-CVE-2017-7493.patch b/gnu/packages/patches/qemu-CVE-2017-7493.patch
new file mode 100644
index 0000000000..67b26fad81
--- /dev/null
+++ b/gnu/packages/patches/qemu-CVE-2017-7493.patch
@@ -0,0 +1,182 @@
+Fix CVE-2017-7493:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7493
+
+Patch copied from upstream source repository:
+
+http://git.qemu.org/?p=qemu.git;a=commit;h=7a95434e0ca8a037fd8aa1a2e2461f92585eb77b
+
+From 7a95434e0ca8a037fd8aa1a2e2461f92585eb77b Mon Sep 17 00:00:00 2001
+From: Greg Kurz <groug@kaod.org>
+Date: Fri, 5 May 2017 14:48:08 +0200
+Subject: [PATCH] 9pfs: local: forbid client access to metadata (CVE-2017-7493)
+
+When using the mapped-file security mode, we shouldn't let the client mess
+with the metadata. The current code already tries to hide the metadata dir
+from the client by skipping it in local_readdir(). But the client can still
+access or modify it through several other operations. This can be used to
+escalate privileges in the guest.
+
+Affected backend operations are:
+- local_mknod()
+- local_mkdir()
+- local_open2()
+- local_symlink()
+- local_link()
+- local_unlinkat()
+- local_renameat()
+- local_rename()
+- local_name_to_path()
+
+Other operations are safe because they are only passed a fid path, which
+is computed internally in local_name_to_path().
+
+This patch converts all the functions listed above to fail and return
+EINVAL when being passed the name of the metadata dir. This may look
+like a poor choice for errno, but there's no such thing as an illegal
+path name on Linux and I could not think of anything better.
+
+This fixes CVE-2017-7493.
+
+Reported-by: Leo Gaspard <leo@gaspard.io>
+Signed-off-by: Greg Kurz <groug@kaod.org>
+Reviewed-by: Eric Blake <eblake@redhat.com>
+---
+ hw/9pfs/9p-local.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 56 insertions(+), 2 deletions(-)
+
+diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
+index f3ebca4f7a..a2486566af 100644
+--- a/hw/9pfs/9p-local.c
++++ b/hw/9pfs/9p-local.c
+@@ -452,6 +452,11 @@ static off_t local_telldir(FsContext *ctx, V9fsFidOpenState *fs)
+     return telldir(fs->dir.stream);
+ }
+ 
++static bool local_is_mapped_file_metadata(FsContext *fs_ctx, const char *name)
++{
++    return !strcmp(name, VIRTFS_META_DIR);
++}
++
+ static struct dirent *local_readdir(FsContext *ctx, V9fsFidOpenState *fs)
+ {
+     struct dirent *entry;
+@@ -465,8 +470,8 @@ again:
+     if (ctx->export_flags & V9FS_SM_MAPPED) {
+         entry->d_type = DT_UNKNOWN;
+     } else if (ctx->export_flags & V9FS_SM_MAPPED_FILE) {
+-        if (!strcmp(entry->d_name, VIRTFS_META_DIR)) {
+-            /* skp the meta data directory */
++        if (local_is_mapped_file_metadata(ctx, entry->d_name)) {
++            /* skip the meta data directory */
+             goto again;
+         }
+         entry->d_type = DT_UNKNOWN;
+@@ -559,6 +564,12 @@ static int local_mknod(FsContext *fs_ctx, V9fsPath *dir_path,
+     int err = -1;
+     int dirfd;
+ 
++    if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        local_is_mapped_file_metadata(fs_ctx, name)) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     dirfd = local_opendir_nofollow(fs_ctx, dir_path->data);
+     if (dirfd == -1) {
+         return -1;
+@@ -605,6 +616,12 @@ static int local_mkdir(FsContext *fs_ctx, V9fsPath *dir_path,
+     int err = -1;
+     int dirfd;
+ 
++    if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        local_is_mapped_file_metadata(fs_ctx, name)) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     dirfd = local_opendir_nofollow(fs_ctx, dir_path->data);
+     if (dirfd == -1) {
+         return -1;
+@@ -694,6 +711,12 @@ static int local_open2(FsContext *fs_ctx, V9fsPath *dir_path, const char *name,
+     int err = -1;
+     int dirfd;
+ 
++    if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        local_is_mapped_file_metadata(fs_ctx, name)) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     /*
+      * Mark all the open to not follow symlinks
+      */
+@@ -752,6 +775,12 @@ static int local_symlink(FsContext *fs_ctx, const char *oldpath,
+     int err = -1;
+     int dirfd;
+ 
++    if (fs_ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        local_is_mapped_file_metadata(fs_ctx, name)) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     dirfd = local_opendir_nofollow(fs_ctx, dir_path->data);
+     if (dirfd == -1) {
+         return -1;
+@@ -826,6 +855,12 @@ static int local_link(FsContext *ctx, V9fsPath *oldpath,
+     int ret = -1;
+     int odirfd, ndirfd;
+ 
++    if (ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        local_is_mapped_file_metadata(ctx, name)) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     odirfd = local_opendir_nofollow(ctx, odirpath);
+     if (odirfd == -1) {
+         goto out;
+@@ -1096,6 +1131,12 @@ static int local_lremovexattr(FsContext *ctx, V9fsPath *fs_path,
+ static int local_name_to_path(FsContext *ctx, V9fsPath *dir_path,
+                               const char *name, V9fsPath *target)
+ {
++    if (ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        local_is_mapped_file_metadata(ctx, name)) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     if (dir_path) {
+         v9fs_path_sprintf(target, "%s/%s", dir_path->data, name);
+     } else if (strcmp(name, "/")) {
+@@ -1116,6 +1157,13 @@ static int local_renameat(FsContext *ctx, V9fsPath *olddir,
+     int ret;
+     int odirfd, ndirfd;
+ 
++    if (ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        (local_is_mapped_file_metadata(ctx, old_name) ||
++         local_is_mapped_file_metadata(ctx, new_name))) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     odirfd = local_opendir_nofollow(ctx, olddir->data);
+     if (odirfd == -1) {
+         return -1;
+@@ -1206,6 +1254,12 @@ static int local_unlinkat(FsContext *ctx, V9fsPath *dir,
+     int ret;
+     int dirfd;
+ 
++    if (ctx->export_flags & V9FS_SM_MAPPED_FILE &&
++        local_is_mapped_file_metadata(ctx, name)) {
++        errno = EINVAL;
++        return -1;
++    }
++
+     dirfd = local_opendir_nofollow(ctx, dir->data);
+     if (dirfd == -1) {
+         return -1;
+-- 
+2.13.0
+
diff --git a/gnu/packages/patches/qtscript-disable-tests.patch b/gnu/packages/patches/qtscript-disable-tests.patch
new file mode 100644
index 0000000000..41a017d864
--- /dev/null
+++ b/gnu/packages/patches/qtscript-disable-tests.patch
@@ -0,0 +1,64 @@
+In all of these tests the result wraps around and comes out the negative of the exptected value.
+
+---
+ tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js  | 2 +-
+ tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js | 5 ++++-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js b/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js
+index 43bd923..103f251 100644
+--- a/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js
++++ b/tests/auto/qscriptjstestsuite/tests/ecma/Expressions/11.4.7-02.js
+@@ -74,7 +74,7 @@ test_negation(-1073741823, 1073741823);
+ 
+ //2147483648 == (1 << 31)
+ test_negation(2147483648, -2147483648);
+-test_negation(-2147483648, 2147483648);
++//test_negation(-2147483648, 2147483648);
+ 
+ //2147483648 == (1 << 31) - 1
+ test_negation(2147483647, -2147483647);
+diff --git a/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js b/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js
+index dc56427..c1a4bf3 100644
+--- a/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js
++++ b/tests/auto/qscriptjstestsuite/tests/ecma/TypeConversion/9.3.1-3.js
+@@ -86,11 +86,12 @@ new TestCase(
+ // test cases from bug http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122882
+ 
+ 
+-
++/*
+ new TestCase( SECTION,
+ 	      '- -"0x80000000"',
+ 	      2147483648,
+ 	      - -"0x80000000" );
++*/
+ 
+ new TestCase( SECTION,
+ 	      '- -"0x100000000"',
+@@ -280,10 +281,12 @@ new TestCase( SECTION,
+ 	      305419896,
+ 	      0x12345678 );
+ 
++/*
+ new TestCase( SECTION,
+ 	      "0x80000000",
+ 	      2147483648,
+ 	      0x80000000 );
++*/
+ 
+ new TestCase( SECTION,
+ 	      "0xffffffff",
+@@ -681,10 +681,12 @@ new TestCase( SECTION,
+          NaN,
+          -"+Infiniti" );
+
++/*
+ new TestCase( SECTION,
+ 	      "- -\"0x80000000\"",
+ 	      2147483648,
+ 	      - -"0x80000000" );
++*/
+
+ new TestCase( SECTION,
+          "- -\"0x100000000\"",
diff --git a/gnu/packages/patches/ruby-concurrent-test-arm.patch b/gnu/packages/patches/ruby-concurrent-test-arm.patch
index 75e6365565..06d5657814 100644
--- a/gnu/packages/patches/ruby-concurrent-test-arm.patch
+++ b/gnu/packages/patches/ruby-concurrent-test-arm.patch
@@ -5,27 +5,27 @@ Work around two test suite failures on ARM:
 The regexps here assume addresses like "0x1234" but on ARM (32-bit)
 we get something like "0x-7db1e810" (notice the dash).
 
-diff --git a/spec/concurrent/edge/future_spec.rb b/spec/concurrent/edge/future_spec.rb
-index a48fd29..4344d7e 100644
---- b/spec/concurrent/edge/future_spec.rb
-+++ a/spec/concurrent/edge/future_spec.rb
-@@ -322,9 +322,9 @@
+diff --git a/spec/concurrent/edge/promises_spec.rb b/spec/concurrent/edge/promises_spec.rb
+index 727210f..149f7cd 100644
+--- a/spec/concurrent/edge/promises_spec.rb
++++ b/spec/concurrent/edge/promises_spec.rb
+@@ -371,9 +371,9 @@ describe 'Concurrent::Promises' do
        four  = three.delay.then(&:succ)
  
        # meaningful to_s and inspect defined for Future and Promise
--      expect(head.to_s).to match /<#Concurrent::Edge::Future:0x[\da-f]+ pending>/
-+      expect(head.to_s).to match /<#Concurrent::Edge::Future:0x-?[\da-f]+ pending>/
+-      expect(head.to_s).to match /<#Concurrent::Promises::Future:0x[\da-f]+ pending>/
++      expect(head.to_s).to match /<#Concurrent::Promises::Future:0x-?[\da-f]+ pending>/
        expect(head.inspect).to(
--          match(/<#Concurrent::Edge::Future:0x[\da-f]+ pending blocks:\[<#Concurrent::Edge::ThenPromise:0x[\da-f]+ pending>\]>/))
-+          match(/<#Concurrent::Edge::Future:0x-?[\da-f]+ pending blocks:\[<#Concurrent::Edge::ThenPromise:0x-?[\da-f]+ pending>\]>/))
+-          match(/<#Concurrent::Promises::Future:0x[\da-f]+ pending>/))
++          match(/<#Concurrent::Promises::Future:0x-?[\da-f]+ pending>/))
  
        # evaluates only up to three, four is left unevaluated
        expect(three.value!).to eq 3
 diff --git a/spec/concurrent/map_spec.rb b/spec/concurrent/map_spec.rb
-index 13fd5b7..1c82ebe 100644
---- b/spec/concurrent/map_spec.rb
-+++ a/spec/concurrent/map_spec.rb
-@@ -827,7 +827,7 @@
+index c4050be..0a9095d 100644
+--- a/spec/concurrent/map_spec.rb
++++ b/spec/concurrent/map_spec.rb
+@@ -794,7 +794,7 @@ module Concurrent
      end
  
      it '#inspect' do
diff --git a/gnu/packages/patches/shadow-4.4-su-snprintf-fix.patch b/gnu/packages/patches/shadow-4.4-su-snprintf-fix.patch
deleted file mode 100644
index 3f357c4924..0000000000
--- a/gnu/packages/patches/shadow-4.4-su-snprintf-fix.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Patch copied from upstream source repository:
-
-https://github.com/shadow-maint/shadow/commit/67d2bb6e0a5ac124ce1f026dd5723217b1493194
-
-From 67d2bb6e0a5ac124ce1f026dd5723217b1493194 Mon Sep 17 00:00:00 2001
-From: Serge Hallyn <serge@hallyn.com>
-Date: Sun, 18 Sep 2016 21:31:18 -0500
-Subject: [PATCH] su.c: fix missing length argument to snprintf
-
----
- src/su.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/su.c b/src/su.c
-index 0c50a9456afd..93ffd2fbe2b4 100644
---- a/src/su.c
-+++ b/src/su.c
-@@ -373,8 +373,8 @@ static void prepare_pam_close_session (void)
- 		              stderr);
- 		(void) kill (-pid_child, caught);
- 
--		snprintf (kill_msg, _(" ...killed.\n"));
--		snprintf (wait_msg, _(" ...waiting for child to terminate.\n"));
-+		snprintf (kill_msg, 256, _(" ...killed.\n"));
-+		snprintf (wait_msg, 256, _(" ...waiting for child to terminate.\n"));
- 
- 		(void) signal (SIGALRM, kill_child);
- 		(void) alarm (2);
--- 
-2.11.0.rc2
-
diff --git a/gnu/packages/patches/shadow-CVE-2017-2616.patch b/gnu/packages/patches/shadow-CVE-2017-2616.patch
deleted file mode 100644
index f88aac40bc..0000000000
--- a/gnu/packages/patches/shadow-CVE-2017-2616.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-Fix CVE-2017-2616:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-2616
-http://seclists.org/oss-sec/2017/q1/490
-http://seclists.org/oss-sec/2017/q1/474
-
-Patch copied from upstream source repository:
-
-https://github.com/shadow-maint/shadow/commit/08fd4b69e84364677a10e519ccb25b71710ee686
-
-From 08fd4b69e84364677a10e519ccb25b71710ee686 Mon Sep 17 00:00:00 2001
-From: Tobias Stoeckmann <tobias@stoeckmann.org>
-Date: Thu, 23 Feb 2017 09:47:29 -0600
-Subject: [PATCH] su: properly clear child PID
-
-If su is compiled with PAM support, it is possible for any local user
-to send SIGKILL to other processes with root privileges. There are
-only two conditions. First, the user must be able to perform su with
-a successful login. This does NOT have to be the root user, even using
-su with the same id is enough, e.g. "su $(whoami)". Second, SIGKILL
-can only be sent to processes which were executed after the su process.
-It is not possible to send SIGKILL to processes which were already
-running. I consider this as a security vulnerability, because I was
-able to write a proof of concept which unlocked a screen saver of
-another user this way.
----
- src/su.c | 19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
-
-diff --git a/src/su.c b/src/su.c
-index f20d230..d86aa86 100644
---- a/src/su.c
-+++ b/src/su.c
-@@ -379,11 +379,13 @@ static void prepare_pam_close_session (void)
- 				/* wake child when resumed */
- 				kill (pid, SIGCONT);
- 				stop = false;
-+			} else {
-+				pid_child = 0;
- 			}
- 		} while (!stop);
- 	}
- 
--	if (0 != caught) {
-+	if (0 != caught && 0 != pid_child) {
- 		(void) fputs ("\n", stderr);
- 		(void) fputs (_("Session terminated, terminating shell..."),
- 		              stderr);
-@@ -393,9 +395,22 @@ static void prepare_pam_close_session (void)
- 		snprintf (wait_msg, sizeof wait_msg, _(" ...waiting for child to terminate.\n"));
- 
- 		(void) signal (SIGALRM, kill_child);
-+		(void) signal (SIGCHLD, catch_signals);
- 		(void) alarm (2);
- 
--		(void) wait (&status);
-+		sigemptyset (&ourset);
-+		if ((sigaddset (&ourset, SIGALRM) != 0)
-+		    || (sigprocmask (SIG_BLOCK, &ourset, NULL) != 0)) {
-+			fprintf (stderr, _("%s: signal masking malfunction\n"), Prog);
-+			kill_child (0);
-+		} else {
-+			while (0 == waitpid (pid_child, &status, WNOHANG)) {
-+				sigsuspend (&ourset);
-+			}
-+			pid_child = 0;
-+			(void) sigprocmask (SIG_UNBLOCK, &ourset, NULL);
-+		}
-+
- 		(void) fputs (_(" ...terminated.\n"), stderr);
- 	}
- 
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index ab277ed973..1b55cd4eb9 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -53,7 +53,7 @@
 (define-public php
   (package
     (name "php")
-    (version "7.1.4")
+    (version "7.1.5")
     (home-page "https://secure.php.net/")
     (source (origin
               (method url-fetch)
@@ -61,7 +61,7 @@
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "02rh1lcfj2hakyls73gwn6w00yblnfh4883w13gn7sgkmn346lbi"))
+                "1b7njiqgy66ga5c8wsm78mqqjr7lj3hlpwbbvksi2mn4jv1s6jfi"))
               (modules '((guix build utils)))
               (snippet
                '(with-directory-excursion "ext"
@@ -169,12 +169,6 @@
                             "ext/standard/tests/general_functions/proc_open.phpt")
                (("/bin/cat") (which "cat")))
 
-             ;; These tests fail because they include a file whose modification
-             ;; time is 0. Touch them to make the test pass. The issue is reported
-             ;; upstream as #74137.
-             (utime "sapi/phpdbg/tests/include.inc" 1 1)
-             (utime "sapi/phpdbg/tests/phpdbg_get_executable_stream_wrapper.inc" 1 1)
-
              ;; The encoding of this file is not recognized, so we simply drop it.
              (delete-file "ext/mbstring/tests/mb_send_mail07.phpt")
 
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 57a67de416..54dc493904 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -10717,14 +10717,14 @@ development version of CPython that are not available in older releases.")
 (define-public python-future
   (package
     (name "python-future")
-    (version "0.15.2")
+    (version "0.16.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "future" version))
        (sha256
         (base32
-         "15wvcfzssc68xqnqi1dq4fhd0848hwi9jn42hxyvlqna40zijfrx"))))
+         "1nzy1k4m9966sikp0qka7lirh8sqrsyainyf8rk97db7nwdfv773"))))
     (build-system python-build-system)
     ;; Many tests connect to the network or are otherwise flawed.
     ;; https://github.com/PythonCharmers/python-future/issues/210
diff --git a/gnu/packages/qemu.scm b/gnu/packages/qemu.scm
index 30b9908aa0..0734b6d0f7 100644
--- a/gnu/packages/qemu.scm
+++ b/gnu/packages/qemu.scm
@@ -74,6 +74,7 @@
              (method url-fetch)
              (uri (string-append "http://wiki.qemu-project.org/download/qemu-"
                                  version ".tar.xz"))
+             (patches (search-patches "qemu-CVE-2017-7493.patch"))
              (sha256
               (base32
                "08mhfs0ndbkyqgw7fjaa9vjxf4dinrly656f6hjzvmaz7hzc677h"))))
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 074ef0b466..d94c652ab2 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -47,7 +47,7 @@
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
-  #:use-module (gnu packages databases)
+  #:use-module (gnu packages maths)
   #:use-module (gnu packages pciutils)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
@@ -349,7 +349,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtbase
   (package
     (name "qtbase")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -358,7 +358,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0zjmcrmnnmaz1lr9wc5i6y565hsvl8ycn790ivqaz62dv54zbkgd"))
+               "01f07yjly7y24njl2h4hyknmi7pf8yd9gky23szcfkd40ap12wf1"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -375,6 +375,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
      `(("alsa-lib" ,alsa-lib)
        ("cups" ,cups)
        ("dbus" ,dbus)
+       ("double-conversion" ,double-conversion)
        ("eudev" ,eudev)
        ("expat" ,expat)
        ("fontconfig" ,fontconfig)
@@ -467,19 +468,15 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                        "-openssl-linked"
                        ;; explicitly link with dbus instead of dlopening it
                        "-dbus-linked"
-                       ;; drop special machine instructions not supported
-                       ;; on all instances of the target
+                       ;; don't use the precompiled headers
+                       "-no-pch"
+                       ;; drop special machine instructions that do not have
+                       ;; runtime detection
                        ,@(if (string-prefix? "x86_64"
                                              (or (%current-target-system)
                                                  (%current-system)))
                              '()
                              '("-no-sse2"))
-                       "-no-sse3"
-                       "-no-ssse3"
-                       "-no-sse4.1"
-                       "-no-sse4.2"
-                       "-no-avx"
-                       "-no-avx2"
                        "-no-mips_dsp"
                        "-no-mips_dspr2")))))
          (add-after 'install 'patch-qt_config.prf
@@ -532,7 +529,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtsvg
   (package (inherit qtbase)
     (name "qtsvg")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -541,7 +538,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0irr9h566hl9nx8p919rz276zbfvvd6vqdb6i9g6b3piikdigw5h"))))
+               "12fwzbp28szqw1sk3flb8i6xnxgl94siwyy41ffdmd0s44f1jwwq"))))
     (propagated-inputs `())
     (native-inputs `(("perl" ,perl)))
     (inputs
@@ -575,7 +572,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtimageformats
   (package (inherit qtsvg)
     (name "qtimageformats")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -584,11 +581,10 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1x3p1xmw7spxa4bwriyrwsfrq31jabsdjsi5fras9y39naia55sg"))
+               "0vv0wh5q5sih294x661djzwvgdwy7r6xpnxsc111k5hwq7m5w13m"))
              (modules '((guix build utils)))
              (snippet
-              '(begin
-                 (delete-file-recursively "src/3rdparty")))))
+              '(delete-file-recursively "src/3rdparty"))))
     (native-inputs `())
     (inputs
      `(("jasper" ,jasper)
@@ -602,7 +598,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtx11extras
   (package (inherit qtsvg)
     (name "qtx11extras")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -611,7 +607,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "09z49jm70f5i0gcdz9a16z00pg96x8pz7vri5wpirh3fqqn0qnjz"))))
+               "03i8lk9qcdf8h2k4f3rkqqkzbrlnyaspv9mgjkn4k61s2asz5mxy"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -623,7 +619,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtxmlpatterns
   (package (inherit qtsvg)
     (name "qtxmlpatterns")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -632,7 +628,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1rgqnpg64gn5agmvjwy0am8hp5fpxl3cdkixr1yrsdxi5a6961d8"))))
+               "016s75j2cml7kc8scdm9a6pmxm8jhs424lml2h9znm1flmgadzvv"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:phases phases)
@@ -640,7 +636,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
            (add-after 'unpack 'disable-network-tests
              (lambda _ (substitute* "tests/auto/auto.pro"
                          (("qxmlquery") "# qxmlquery")
-                         (("xmlpatterns") "# xmlpatterns"))
+                         (("xmlpatterns ") "# xmlpatterns"))
                #t))))))
     (native-inputs `(("perl" ,perl)))
     (inputs `(("qtbase" ,qtbase)))))
@@ -648,7 +644,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtdeclarative
   (package (inherit qtsvg)
     (name "qtdeclarative")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -657,7 +653,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0mjxfwnplpx60jc6y94krg00isddl9bfwc7dayl981njb4qds4zx"))))
+               "0ilaf2sprpk9fg2j3905hxnhm0xbnm88ppk4zifp7n0jmnwix51j"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -674,7 +670,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtconnectivity
   (package (inherit qtsvg)
     (name "qtconnectivity")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -683,7 +679,18 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0rmr7bd4skby7bax9hpj2sid2bq3098nkw7xm02mdp04hc3bks5k"))))
+               "1w97na5s420y08dcydqinbqb0rd9h4pfdnjbwslr0qvzsvlh2bbv"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments qtsvg)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'disable-failing-tests
+             ;; this test fails on armhf and aarch64
+             (lambda _
+               (substitute* "tests/auto/qndefnfcsmartposterrecord/tst_qndefnfcsmartposterrecord.cpp"
+                 (("QCOMPARE\\(record.action\\(\\), QNdefNfcSmartPosterRecord::UnspecifiedAction")
+                 "//QCOMPARE(record.action(), QNdefNfcSmartPosterRecord::UnspecifiedAction"))
+               #t))))))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
@@ -695,7 +702,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtwebsockets
   (package (inherit qtsvg)
     (name "qtwebsockets")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -704,7 +711,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1laj0slwibs0bg69kgrdhc9k1s6yisq3pcsr0r9rhbkzisv7aajw"))))
+               "1xa5p36grqxz3fa08amn7r3dy6k28g6y0gkc6jgj7lyhjzr0l4da"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -716,7 +723,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtsensors
   (package (inherit qtsvg)
     (name "qtsensors")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -725,7 +732,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "041v1x8pwfzpyk6y0sy5zgm915pi15xdhiy18fd5wqayvcp99cyc"))))
+               "15p7bp21yj4cdl5yfc9qnn4lhhiwiwx3b71lrb431kgqxhwhcp9s"))))
     (native-inputs
      `(("perl" ,perl)
        ("qtdeclarative" ,qtdeclarative)))
@@ -734,7 +741,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtmultimedia
   (package (inherit qtsvg)
     (name "qtmultimedia")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -743,7 +750,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1vvxmgmvjnz9w1h2ph1j2fy77ij141ycx5fric60lq02pxzifax5"))
+               "01sakngvsqr90qhrxyghfqdpddpxwbjyzzhm34k0hlpr6i409g58"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -769,7 +776,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtwayland
   (package (inherit qtsvg)
     (name "qtwayland")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -778,7 +785,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1iq1c89y4ggq0dxjlf62jyhh8a9l3x7y914x84w5pby8h3hwagzj"))))
+               "06ilh55vaxbkyv7irw0n11gxgc34ypx2qhqawxzy7kllzg9zcl7z"))))
     (native-inputs
      `(("glib" ,glib)
        ("perl" ,perl)
@@ -800,7 +807,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtserialport
   (package (inherit qtsvg)
     (name "qtserialport")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -809,7 +816,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "09jsryc0z49cz9783kq48rkn42f10c6krzivp812ddwjsfdy3mbn"))))
+               "1b86al3zn1pxyk0n59vh8bqxrpz2m0j33ygclaqbxl1sszg7ycaj"))))
     (native-inputs `(("perl" ,perl)))
     (inputs
      `(("qtbase" ,qtbase)
@@ -818,7 +825,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtserialbus
   (package (inherit qtsvg)
     (name "qtserialbus")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -827,7 +834,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0mxi43l2inpbar8rmg21qjg33bv3f1ycxjgvzjf12ncnybhdnzkj"))))
+               "02n1b1wrvfg6c7z15c5c5gv9r5gd4pp58jrd1a8d8fg3ybcksd2q"))))
     (inputs
      `(("qtbase" ,qtbase)
        ("qtserialport" ,qtserialport)))))
@@ -835,7 +842,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtwebchannel
   (package (inherit qtsvg)
     (name "qtwebchannel")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -844,7 +851,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "16rij92dxy4k5231l3dpmhy7cnz0cjkn50cpzaf014zrdz3kmav3"))))
+               "0jhbgp9rdp5lpwjrykxmg4lb60wk7gm3dldz5kp3b8ms2dab3xav"))))
     (native-inputs
      `(("perl" ,perl)
        ("qtdeclarative" ,qtdeclarative)
@@ -854,7 +861,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtlocation
   (package (inherit qtsvg)
     (name "qtlocation")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -863,7 +870,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "17zkzffzwbg6aqhsggs23cmwzq4y45m938842lsc423hfm7fdsgr"))))
+               "1fqssa8rhq83lnxjcdh4ijqck3lmqglpk8yax8x17w49v6gf78a8"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -877,7 +884,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qttools
   (package (inherit qtsvg)
     (name "qttools")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -886,7 +893,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1b6zqa5690b8lqms7rrhb8rcq0xg5hp117v3m08qngbcd0i706b4"))))
+               "10wx4vydj91yag30457c7azx4ihrwky42l7zzwkbmdlksdv8xv4m"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -900,7 +907,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtscript
   (package (inherit qtsvg)
     (name "qtscript")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -909,7 +916,8 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "09m41n95448pszr7inlg03ycb66s1a9hzfylaka92382acf1myav"))))
+               "1lssbsjf2p2ag02fjq6k6vk7vywhj4jsl286r2fqi78q5lfvjfi9"))
+             (patches (search-patches "qtscript-disable-tests.patch"))))
     (native-inputs
      `(("perl" ,perl)
        ("qttools" ,qttools)))
@@ -919,7 +927,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtquickcontrols
   (package (inherit qtsvg)
     (name "qtquickcontrols")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -928,7 +936,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "17cyfyqzjbm9dhq9pjscz36y84y16rmxwk6h826gjfprddrimsvg"))))
+               "09mkswxw7wa2l8xz9fbblxr1pbi86hggis55j4k8ifnrrw60vrq4"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -939,7 +947,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtquickcontrols2
   (package (inherit qtsvg)
     (name "qtquickcontrols2")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -948,7 +956,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1v77ydy4k15lksp3bi2kgha2h7m79g4n7c2qhbr09xnvpb8ars7j"))))
+               "06yy98x4vic2yrlpp83gf4kvl7kd93q62k178w0cy4sgqxp8d6dh"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -959,7 +967,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtgraphicaleffects
   (package (inherit qtsvg)
     (name "qtgraphicaleffects")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -968,7 +976,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1j2drnx7zp3w6cgvy7bn00fyk5v7vw1j1hidaqcg78lzb6zgls1c"))))
+               "06frknb7m8bgg55rs7jjm61iziisy2ykzrrc5dy3vj0aad89najz"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -977,6 +985,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
        ("qtdeclarative" ,qtdeclarative)))))
 
 (define-public qtdeclarative-render2d
+  ;; As of Qt-5.8.0 this module has been merged into qtdeclarative
   (package (inherit qtsvg)
     (name "qtdeclarative-render2d")
     (version "5.7.1")
@@ -995,12 +1004,13 @@ developers using C++ or QML, a CSS & JavaScript like language.")
     (native-inputs `())
     (inputs
      `(("qtbase" ,qtbase)
-       ("qtdeclarative" ,qtdeclarative)))))
+       ("qtdeclarative" ,qtdeclarative)))
+    (properties `((superseded . ,qtdeclarative)))))
 
 (define-public qtgamepad
   (package (inherit qtsvg)
     (name "qtgamepad")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -1009,7 +1019,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "10lijbsg9xx5ddbbjymdgl41nxz99yn1qgiww2kkggxwwdjj2axv"))))
+               "0dwcrq60h802z694h4108figlr3yvp8fpzhwjzbjm503v8yaxw5j"))))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)))
@@ -1024,7 +1034,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtscxml
   (package (inherit qtsvg)
     (name "qtscxml")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -1033,7 +1043,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "135kknqdmib2cjryfmvfgv7a2qx9pyba3m7i7nkbc5d742r4mbcx"))
+               "1i4xl24q4i32mbhyndrwaz0xj79d9n84s320gmkf5rwnfcwrvfxn"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -1048,7 +1058,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtpurchasing
   (package (inherit qtsvg)
     (name "qtpurchasing")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -1057,7 +1067,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0hkvrgafz1hx9q4yc3nskv3pd3fszghvvd5a7mj33ynf55wpb57n"))))
+               "0mdkw73yx1csz9mf3wl0w1x1b8cv9j5px4nvakrknkjzaa9qgzdk"))))
     (inputs
      `(("qtbase" ,qtbase)
        ("qtdeclarative" ,qtdeclarative)))))
@@ -1065,7 +1075,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtcanvas3d
   (package (inherit qtsvg)
     (name "qtcanvas3d")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -1074,7 +1084,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1d5xpq3mhjg4ipxzap7s2vnlfcd02d3yq720npv10xxp2ww0i1x8"))
+               "18yaikbwk4d7sh09psi3kjn1mxjp4d2f3qchfzgq5x96yn8gfijl"))
              (modules '((guix build utils)))
              (snippet
               '(delete-file-recursively "examples/canvas3d/3rdparty"))))
@@ -1099,7 +1109,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtcharts
   (package (inherit qtsvg)
     (name "qtcharts")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -1108,7 +1118,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1qrzcddwff2hxsbxrraff16j4abah2zkra2756s1mvydj9lyxzl5"))))
+               "11m5g1fxip6z2xk1z6g6h4rq7v282qbkxflan8hs87hadnzars03"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -1119,7 +1129,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public qtdatavis3d
   (package (inherit qtsvg)
     (name "qtdatavis3d")
-    (version "5.7.1")
+    (version "5.8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://download.qt.io/official_releases/qt/"
@@ -1128,7 +1138,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1y00p0wyj5cw9c2925y537vpmmg9q3kpf7qr1s7sv67dvvf8bzqv"))))
+               "1n2vdf6n7pr9xrjwbvbar899q74shx6cy19x32adxfn2iilygwbp"))))
     (arguments
      (substitute-keyword-arguments (package-arguments qtsvg)
        ((#:tests? _ #f) #f))) ; TODO: Enable the tests
@@ -1139,7 +1149,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
 (define-public python-sip
   (package
     (name "python-sip")
-    (version "4.18.1")
+    (version "4.19.2")
     (source
       (origin
         (method url-fetch)
@@ -1148,7 +1158,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
                          "sip-" version "/sip-" version ".tar.gz"))
         (sha256
          (base32
-          "1452zy3g0qv4fpd9c0y4gq437kn0xf7bbfniibv5n43zpwnpmklv"))))
+          "0cq5r21fmjyw5v7a6l4sfbaj3zgm7k5b2cryj6bnjki54nnllas3"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-wrapper)))
@@ -1202,7 +1212,7 @@ module provides support functions to the automatically generated code.")
 (define-public python-pyqt
   (package
     (name "python-pyqt")
-    (version "5.7")
+    (version "5.8.2")
     (source
       (origin
         (method url-fetch)
@@ -1212,7 +1222,7 @@ module provides support functions to the automatically generated code.")
                          version ".tar.gz"))
         (sha256
          (base32
-          "01avscn1bir0h8zzfh1jvpljgwg6qkax5nk142xrm63rbyx969l9"))
+          "1s1nalcspam9dc7f63jkqn1i2sv9lrqn57p2zsc61g8bncahbmzb"))
        (patches (search-patches "pyqt-configure.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -1292,17 +1302,17 @@ contain over 620 classes.")
 (define-public python-pyqt-4
   (package (inherit python-pyqt)
     (name "python-pyqt")
-    (version "4.11.4")
+    (version "4.12")
     (source
       (origin
         (method url-fetch)
         (uri
           (string-append "mirror://sourceforge/pyqt/PyQt4/"
-                         "PyQt-" version "/PyQt-x11-gpl-"
+                         "PyQt-" version "/PyQt4_gpl_x11-"
                          version ".tar.gz"))
         (sha256
          (base32
-          "01zlviy5lq8g6db84wnvvpsrfnip9lbcpxagsyqa6as3jmsff7zw"))))
+          "1nw8r88a5g2d550yvklawlvns8gd5slw53yy688kxnsa65aln79w"))))
     (native-inputs
      `(("python-sip" ,python-sip)
        ("qt" ,qt-4)))
@@ -1431,19 +1441,19 @@ different kinds of sliders, and much more.")
 (define-public qtwebkit
   (package
     (name "qtwebkit")
-    (version "5.7.1")
+    (version "5.8.0")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "http://download.qt.io/community_releases/"
                             (version-major+minor version)
-                            "/" version "/qtwebkit-opensource-src-" version
-                            ".tar.xz"))
+                            "/" version "-final/qtwebkit-opensource-src-"
+                            version ".tar.xz"))
         ;; Note: since Qt 5.6, Qt no longer officially supports qtwebkit:
         ;; <http://lists.qt-project.org/pipermail/development/2016-May/025923.html>.
         (sha256
          (base32
-          "00szgcra6pf2myfjrdbsr1gmrxycpbjqlzkplna5yr1rjg4gfv54"))))
+          "1v0vj6slyh19mjrrpbqdzb47fr0f4xk7bc8803xjzybb11h8dbkr"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 4977337517..1df7d60a36 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -446,13 +446,13 @@ expectations and mocks frameworks.")
 (define-public bundler
   (package
     (name "bundler")
-    (version "1.14.5")
+    (version "1.14.6")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "bundler" version))
               (sha256
                (base32
-                "0635s6naz9hn4iqbvkhnm1by4j4spvv13mb7nzwwimnpbqgx663i"))))
+                "0h3x2csvlz99v2ryj1w72vn6kixf7rl35lhdryvh7s49brnj0cgl"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -2910,7 +2910,7 @@ differences (added or removed nodes) between two XML/HTML documents.")
 (define-public ruby-rack
   (package
     (name "ruby-rack")
-    (version "2.0.1")
+    (version "2.0.3")
     (source
      (origin
        (method url-fetch)
@@ -2922,7 +2922,7 @@ differences (added or removed nodes) between two XML/HTML documents.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "00k62v8lpyjzghkn0h0awrnqj1jmlcs2wp57py27m43y65v89cp3"))
+         "12bnqrcg43x9hsswjqg31qqwk8cwj2fh0d2m179y20bjghhn54kx"))
        ;; Ignore test which fails inside the build environment but works
        ;; outside.
        (patches (search-patches "ruby-rack-ignore-failing-test.patch"))))
@@ -4106,7 +4106,7 @@ call.")
 (define-public ruby-concurrent
   (package
     (name "ruby-concurrent")
-    (version "1.0.2")
+    (version "1.0.5")
     (source
      (origin
        (method url-fetch)
@@ -4119,7 +4119,7 @@ call.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1x3g2admp14ykwfxidsicqbhlfsnxh9wyc806np4i15hws4if1d8"))
+         "0qhv0qzsby4iijgwa4s9r88zj8123pmyz1dwaqzdk57xgqll9pny"))
        ;; Exclude failing test reported at
        ;; https://github.com/ruby-concurrency/concurrent-ruby/issues/534
        (patches (search-patches "ruby-concurrent-ignore-broken-test.patch"
diff --git a/gnu/packages/security-token.scm b/gnu/packages/security-token.scm
index 7bce8c5aa7..5873d85b55 100644
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@ -35,15 +35,15 @@
 (define-public ccid
   (package
     (name "ccid")
-    (version "1.4.26")
+    (version "1.4.27")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "https://alioth.debian.org/frs/download.php/file/4205/"
+                    "https://alioth.debian.org/frs/download.php/file/4218/"
                     "ccid-" version ".tar.bz2"))
               (sha256
                (base32
-                "0bxy835c133ajalpj4gx60nqkjvpf9y1n97n04pw105pi9qbyrrj"))))
+                "0dyikpmhsph36ndgd61bs4yx437v5y0bmm8ahjacp1k9c1ly4q56"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "--enable-usbdropdir=" %output
@@ -93,15 +93,15 @@ the low-level development kit for the Yubico YubiKey authentication device.")
 (define-public pcsc-lite
   (package
     (name "pcsc-lite")
-    (version "1.8.20")
+    (version "1.8.21")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "https://alioth.debian.org/frs/download.php/file/4203/"
+                    "https://alioth.debian.org/frs/download.php/file/4216/"
                     "pcsc-lite-" version ".tar.bz2"))
               (sha256
                (base32
-                "1ckb0jf4n585a4j26va3jm2nrv3c1y38974514f8qy3c04a02zgc"))))
+                "1b8kwl81f6s3y7qh68ahr8sp8a0w6m464v9b3s4zxq2cgpmnaczy"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-usbdropdir=/var/lib/pcsc/drivers")))
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 4e684e8c81..47d3a46148 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -32,6 +32,7 @@
   #:use-module (gnu packages bison)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages groff)
+  #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
@@ -457,3 +458,39 @@ components: a process notation for running programs and setting up pipelines
 and redirections, and a complete syscall library for low-level access to the
 operating system.")
       (license bsd-3))))
+
+(define-public loksh
+  (package
+    (name "loksh")
+    (version "6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/dimkr/loksh/archive/"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1wg7ds56yr8fgg1m149bi53bvrwccwiashmwknggza1sqgj9m2lq"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libbsd" ,libbsd)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     `(#:tests? #f ;No tests included
+       #:make-flags (list "CC=gcc" "HAVE_LIBBSD=1"
+                          (string-append "DESTDIR="
+                                         (assoc-ref %outputs "out"))
+                          "PREFIX=")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)))) ;No configure script
+    (home-page "https://github.com/dimkr/loksh")
+    (synopsis "Korn Shell from OpenBSD")
+    (description
+     "loksh is a Linux port of OpenBSD's @command{ksh}.  It is a small,
+interactive POSIX shell targeted at resource-constrained systems.")
+    ;; The file 'LEGAL' says it is the public domain, and the 2
+    ;; exceptions which are listed are not included in this port.
+    (license public-domain)))
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 1fd395049a..c96ed0a72b 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -68,6 +68,7 @@
                (base32
                 "03bcp9ksqp0s1pmwfmzhcknvkxay5k0mjzzxp3rjlifbng1vxq9r"))))
     (build-system cmake-build-system)
+    (outputs '("out" "debug"))
     (arguments
      '(#:configure-flags '("-DWITH_GCRYPT=ON")
 
@@ -226,6 +227,8 @@ Additionally, various channel-specific options can be negotiated.")
               (sha256
                (base32
                 "0r261i8kc3avbmbwgyzak2vnqwssjlgz37g2y2fwm80w9bmn2m7j"))
+              (patches (search-patches "guile-ssh-rexec-bug.patch"
+                                       "guile-ssh-double-free.patch"))
               (modules '((guix build utils)))
               (snippet
                ;; 'configure.ac' mistakenly tries to link files from examples/
@@ -236,6 +239,7 @@ Additionally, various channel-specific options can be negotiated.")
                                   "], [chmod +x examples/"
                                   file "])\n"))))))
     (build-system gnu-build-system)
+    (outputs '("out" "debug"))
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'autoreconf
@@ -378,7 +382,7 @@ especially over Wi-Fi, cellular, and long-distance links.")
 (define-public dropbear
   (package
     (name "dropbear")
-    (version "2016.74")
+    (version "2017.75")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -386,7 +390,7 @@ especially over Wi-Fi, cellular, and long-distance links.")
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "14c8f4gzixf0j9fkx68jgl85q7b05852kk0vf09gi6h0xmafl817"))))
+                "1309cm2aw62n9m3h38prvgsqr8bj85hfasgnvwkd42cp3k5ivg3c"))))
     (build-system gnu-build-system)
     (arguments  `(#:tests? #f)) ; There is no "make check" or anything similar
     (inputs `(("zlib" ,zlib)))
diff --git a/gnu/packages/sssd.scm b/gnu/packages/sssd.scm
new file mode 100644
index 0000000000..2afef03055
--- /dev/null
+++ b/gnu/packages/sssd.scm
@@ -0,0 +1,173 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages sssd)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages adns)
+  #:use-module (gnu packages augeas)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages cyrus-sasl)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages dns)
+  #:use-module (gnu packages docbook)
+  #:use-module (gnu packages documentation)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages libunistring)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages kerberos)
+  #:use-module (gnu packages openldap)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages popt)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages samba)
+  #:use-module (gnu packages selinux)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml))
+
+(define-public ding-libs
+  (package
+    (name "ding-libs")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://releases.pagure.org/SSSD/ding-libs/"
+                                  "ding-libs-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1bczkvq7cblp75kqn6r2d7j5x7brfw6wxirzc6d2rkyb80gj2jkn"))))
+    (build-system gnu-build-system)
+    (home-page "https://pagure.io/SSSD/ding-libs/")
+    (synopsis "Libraries for SSSD")
+    (description
+     "DING-LIBS (DING Is Not Glib) are a set of small, useful libraries that
+the @dfn{System Security Services Daemon} (SSSD) uses and makes available to
+other projects.  They include: libdhash, an implementation of a dynamic hash
+table which will dynamically resize to achieve optimal storage and access time
+properties; ini_config, a library for parsing and managing @code{INI} files;
+path_utils, a library to manage UNIX paths and subsets of paths; collection, a
+generic, hierarchical grouping mechanism for complex data sets; ref_array, a
+dynamically-growing, reference-counted array; libbasicobjects, a set of
+fundamental object types for C.")
+    (license license:lgpl3+)))
+
+;; Note: This package installs modules for ldb and nss.  For the former we
+;; need to set LDB_MODULES_PATH.  For the latter LD_PRELOAD or LD_LIBRARY_PATH
+;; is needed.
+(define-public sssd
+  (package
+    (name "sssd")
+    (version "1.15.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://releases.pagure.org/SSSD/sssd/"
+                                  "sssd-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0r6j28f7vjb1aw65gkw4nz2l3jy605h7wsr1k815hynp2jrzrmac"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "DOCBOOK_XSLT="
+                            (assoc-ref %build-inputs "docbook-xsl")
+                            "/xml/xsl/docbook-xsl-"
+                            ,(package-version docbook-xsl)
+                            "/manpages/docbook.xsl")
+             ;; Remove "--postvalid" option, because that requires access to
+             ;; online DTDs.
+             "XMLLINT_FLAGS = --catalogs --nonet --noent --xinclude --noout")
+       #:configure-flags
+       (list "--disable-cifs-idmap-plugin"
+             "--without-nfsv4-idmapd-plugin"
+             "--without-python2-bindings"
+             "--without-python3-bindings"
+             (string-append "--with-plugin-path="
+                            (assoc-ref %outputs "out")
+                            "/lib/sssd")
+             (string-append "--with-krb5-plugin-path="
+                            (assoc-ref %outputs "out")
+                            "/lib/krb5/plugins/libkrb5")
+             (string-append "--with-cifs-plugin-path="
+                            (assoc-ref %outputs "out")
+                            "/lib/cifs-utils")
+             (string-append "--with-init-dir="
+                            (assoc-ref %outputs "out")
+                            "/etc/init.d")
+             (string-append "--with-ldb-lib-dir="
+                            (assoc-ref %outputs "out")
+                            "/lib/ldb/modules/ldb")
+             (string-append "--with-xml-catalog-path="
+                            (assoc-ref %build-inputs "docbook-xml")
+                            "/xml/dtd/docbook/catalog.xml"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-failing-test
+           (lambda _
+             (substitute* "src/tests/responder_socket_access-tests.c"
+               (("tcase_add_test\\(tc_utils, resp_str_to_array_test\\);") ""))
+             #t)))))
+    (inputs
+     `(("augeas" ,augeas)
+       ("bind" ,isc-bind "utils")
+       ("c-ares" ,c-ares)
+       ("curl" ,curl)
+       ("cyrus-sasl" ,cyrus-sasl)
+       ("dbus" ,dbus)
+       ("ding-libs" ,ding-libs)
+       ("glib" ,glib)
+       ("gnutls" ,gnutls)
+       ("http-parser" ,http-parser)
+       ("jansson" ,jansson)
+       ("ldb" ,ldb)
+       ("libselinux" ,libselinux)
+       ("libsemanage" ,libsemanage)
+       ("libunistring" ,libunistring)
+       ("linux-pam" ,linux-pam)
+       ("mit-krb5" ,mit-krb5)
+       ("nss" ,nss)
+       ("openldap" ,openldap)
+       ("openssl" ,openssl)
+       ("pcre" ,pcre)
+       ("popt" ,popt)
+       ("samba" ,samba)
+       ("talloc" ,talloc)
+       ("tdb" ,tdb)
+       ("tevent" ,tevent)))
+    (native-inputs
+     `(("check" ,check)
+       ("docbook-xsl" ,docbook-xsl)
+       ("docbook-xml" ,docbook-xml)
+       ("libxslt" ,libxslt)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://pagure.io/SSSD/sssd/")
+    (synopsis "System security services daemon")
+    (description "SSSD is a system daemon.  Its primary function is to provide
+access to identity and authentication remote resource through a common
+framework that can provide caching and offline support to the system.  It
+provides PAM and NSS modules, and in the future will D-BUS based interfaces
+for extended user information.  It also provides a better database to store
+local users as well as extended user data.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index dbd71c2e8f..7bc2fc47fa 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
@@ -10,6 +10,7 @@
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
+;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,11 +32,13 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages java)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -368,6 +371,45 @@ to everybody, because they believe that everybody runs Windows and therefore
 runs Word\".")
     (license license:gpl2+)))
 
+(define-public catdoc
+  (package
+    (name "catdoc")
+    (version "0.95")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://ftp.wagner.pp.ru/pub/catdoc/"
+                                  "catdoc-" version ".tar.gz"))
+              (sha256
+               (base32
+                "15h7v3bmwfk4z8r78xs5ih6vd0pskn0rj90xghvbzdjj0cc88jji"))))
+    (build-system gnu-build-system)
+    ;; TODO: Also build `wordview` which requires `tk` – make a separate
+    ;; package for this.
+    (arguments
+     '(#:tests? #f ; There are no tests
+       #:configure-flags '("--disable-wordview")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'fix-install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (mkdir-p (string-append out "/share/man/man1"))))))))
+    (home-page "http://www.wagner.pp.ru/~vitus/software/catdoc/")
+    (synopsis "MS-Word to TeX or plain text converter")
+    (description "@command{catdoc} extracts text from MS-Word files, trying to
+preserve as many special printable characters as possible.  It supports
+everything up to Word-97. Also supported are MS Write documents and RTF files.
+
+@command{catdoc} does not preserve complex word formatting, but it can
+translate some non-ASCII characters into TeX escape codes.  It's goal is to
+extract plain text and allow you to read it and, probably, reformat with TeX,
+according to TeXnical rules.
+
+This package also provides @command{xls2csv}, which extracts data from Excel
+spreadsheets and outputs it in comma-separated-value format, and
+@command{catppt}, which extracts data from PowerPoint presentations.")
+    (license license:gpl2+)))
+
 (define-public utfcpp
   (package
     (name "utfcpp")
@@ -518,3 +560,35 @@ categories.")
      "C library for creating and parsing configuration files.")
     (license (list license:lgpl2.1         ; Main distribution.
                    license:asl1.1))))      ; src/readdir.{c,h}
+
+(define-public java-rsyntaxtextarea
+  (package
+    (name "java-rsyntaxtextarea")
+    (version "2.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/bobbylight/"
+                                  "RSyntaxTextArea/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0c5mqg2klj5rvf8fhycrli8rf6s37l9p7a8knw9gpp65r1c120q2"))))
+    (build-system ant-build-system)
+    (arguments
+     `(;; FIXME: some tests fail because locale resources cannot be found.
+       ;; Even when I add them to the class path,
+       ;; RSyntaxTextAreaEditorKitDumbCompleteWordActionTest fails.
+       #:tests? #f
+       #:jar-name "rsyntaxtextarea.jar"))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "https://bobbylight.github.io/RSyntaxTextArea/")
+    (synopsis "Syntax highlighting text component for Java Swing")
+    (description "RSyntaxTextArea is a syntax highlighting, code folding text
+component for Java Swing.  It extends @code{JTextComponent} so it integrates
+completely with the standard @code{javax.swing.text} package.  It is fast and
+efficient, and can be used in any application that needs to edit or view
+source code.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 1516fb8527..ebf9a47302 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -474,15 +474,14 @@ security, and applying best practice development processes.")
   (package
     (name "python-acme")
     ;; Remember to update the hash of certbot when updating python-acme.
-    (version "0.14.0")
+    (version "0.14.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "acme" version))
       (sha256
        (base32
-        "0hrmh28rrc0fsiw6nqfwbkwb1s4nkl54x50c0g0xlnp86752nzff"))))
+        "0asmkfkzbswnkrvbj5m01xgy4f6g1fjbj2nir1hhrn3ipcdrsv8f"))))
     (build-system python-build-system)
-
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -540,7 +539,7 @@ security, and applying best practice development processes.")
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "0hbp3njss01a0d3brvcfzja0w0j9plwrv6l70jsfvnhy3rrd7bcq"))))
+                "0rdby57hw35qdrbl7kigscphnz4kqb608bqzrcb73nb99092i6si"))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 83e49a1536..b31b58a26f 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
@@ -43,14 +43,14 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.3.0.6")
+    (version "0.3.0.7")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://dist.torproject.org/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "057vq8wagppmrlg85dgbsrk1v67yqpbi9n87s8gn0mdm7kli5rd3"))))
+               "00kxa83bn0axh7479fynp6r8znq5wy26kvb8ghixgjpkir2c8h4n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-expensive-hardening"
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index dde4041449..b7c26a0424 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -273,7 +273,7 @@ H.264 (MPEG-4 AVC) video streams.")
 (define-public x265
   (package
     (name "x265")
-    (version "2.3")
+    (version "2.4")
     (source
       (origin
         (method url-fetch)
@@ -281,7 +281,7 @@ H.264 (MPEG-4 AVC) video streams.")
                             "x265_" version ".tar.gz"))
         (sha256
          (base32
-          "07z4ydxg0lk6j43h0wlh2xddb91cy4y4mny2ln71d4278b1hllj7"))
+          "0afp0xlk0fb4q6j4sh3hyvjnjccdp61sn21zg3fyqvwgswcafalw"))
         (modules '((guix build utils)))
         (snippet
          '(delete-file-recursively "source/compat/getopt"))))
@@ -458,14 +458,14 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
 (define-public ffmpeg
   (package
     (name "ffmpeg")
-    (version "3.3")
+    (version "3.3.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "17anx7rnbi63if1ndr61836lf76dpn47n0y424hc48bj05y7z7jr"))))
+               "0bwgm6z6k3khb91qh9xv15inykkfchpkm0lcdckkxhkacpyaf0mp"))))
     (build-system gnu-build-system)
     (inputs
      `(("fontconfig" ,fontconfig)
@@ -646,7 +646,7 @@ audio/video codec library.")
 (define-public vlc
   (package
     (name "vlc")
-    (version "2.2.4")
+    (version "2.2.5.1")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -654,14 +654,7 @@ audio/video codec library.")
                    version "/vlc-" version ".tar.xz"))
              (sha256
               (base32
-               "1gjkrwlg8ab3skzl67cxb9qzg4187ifckd1z9kpy11q058fyjchn"))
-             (modules '((guix build utils)))
-             (snippet
-              ;; There are two occurrences where __DATE__ and __TIME__ are
-              ;; used to capture the build time and show it to the user.
-              '(substitute* (find-files "." "help\\.c(pp)?$")
-                 (("__DATE__") "\"2016\"")
-                 (("__TIME__") "\"00:00\"")))))
+               "1k51vm6piqlrnld7sxyg0s4kdkd3lan97lmy3v5wdh3qyll8m2xj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("git" ,git) ; needed for a test
@@ -1599,14 +1592,14 @@ tools, XML authoring components, and an extensible plug-in based API.")
 (define-public v4l-utils
   (package
     (name "v4l-utils")
-    (version "1.12.3")
+    (version "1.12.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://linuxtv.org/downloads/v4l-utils"
                                   "/v4l-utils-" version ".tar.bz2"))
               (sha256
                (base32
-                "0vpl3jl0x441y7b5cn7zhdsyi954hp9h2p30jhnr1zkx1rpxsiss"))))
+                "03g2b4rivrilimcp57mwrlsa3qvrxmk4sza08mygwmqbvcnic606"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -1816,14 +1809,14 @@ specifications.")
 (define-public libaacs
   (package
     (name "libaacs")
-    (version "0.8.1")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "ftp://ftp.videolan.org/pub/videolan/libaacs/"
                            version "/" name "-" version ".tar.bz2"))
        (sha256
-        (base32 "1s5v075hnbs57995r6lljm79wgrip3gnyf55a0y7bja75jh49hwm"))))
+        (base32 "1kms92i0c7i1yl659kqjf19lm8172pnpik5lsxp19xphr74vvq27"))))
     (inputs
      `(("libgcrypt" ,libgcrypt)))
     (native-inputs
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index 697c7dedc7..27c0b0da9c 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -60,7 +60,7 @@
 (define-public vim
   (package
     (name "vim")
-    (version "8.0.0566")
+    (version "8.0.0600")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/vim/vim/archive/v"
@@ -68,7 +68,7 @@
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
-               "0qq9pj8391sikzaahlqi289l5wdkbvsdhz8qb6np268yqizpg4p2"))))
+               "1ifaj0lfzqn06snkcd83l58m9r6lg7lk3wspx71k5ycvypyfi67s"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -138,6 +138,10 @@ configuration files.")
                    ;; https://github.com/vim/vim/issues/1460
                    (substitute* "src/testdir/test_cmdline.vim"
                      (("call assert_equal\\(.+getcmd.+\\(\\)\\)") ""))
+                   ;; FIXME: This test broke after GCC-5 core-updates merge.
+                   ;; "Test_system_exmode line 7: Expected '0' but got '/'"
+                   (substitute* "src/testdir/test_system.vim"
+                     (("call assert_equal\\('0', a\\[0\\]\\)") ""))
                    #t))
                (add-before 'check 'start-xserver
                  (lambda* (#:key inputs #:allow-other-keys)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index efaa1b5742..bcc20bfdde 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -4552,3 +4552,35 @@ into your tests.  It automatically starts up a HTTP server in a separate thread
 
 (define-public python2-pytest-httpbin
   (package-with-python2 python-pytest-httpbin))
+
+(define-public http-parser
+  (package
+    (name "http-parser")
+    (version "2.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/nodejs/http-parser/"
+                                  "archive/v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1cw6nf8xy4jhib1w0jd2y0gpqjbdasg8b7pkl2k2vpp54k9rlh3h"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (list (string-append "PREFIX="
+                            (assoc-ref %outputs "out"))
+             "CC=gcc" "library")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (home-page "https://github.com/nodejs/http-parser")
+    (synopsis "HTTP request/response parser for C")
+    (description "This is a parser for HTTP messages written in C.  It parses
+both requests and responses.  The parser is designed to be used in
+high-performance HTTP applications.  It does not make any syscalls nor
+allocations, it does not buffer data, it can be interrupted at anytime.
+Depending on your architecture, it only requires about 40 bytes of data per
+message stream (in a web server that is per connection).")
+    (license l:expat)))
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 79210d44d0..9635413b8f 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -44,6 +44,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
@@ -1175,3 +1176,33 @@ to read and write XML data.  A shared library is provided for parsing,
 generating, manipulating, and validating XML documents using the DOM, SAX, and
 SAX2 APIs.")
     (license license:asl2.0)))
+
+(define-public java-simple-xml
+  (package
+    (name "java-simple-xml")
+    (version "2.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/simple/simple-xml-"
+                                  version ".zip"))
+              (sha256
+               (base32
+                "0w19k1awslmihpwsxwjbg89hv0vjhk4k3i0vrfchy3mqknd988y5"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "build"
+       #:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install (install-jars "jar")))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "http://simple.sourceforge.net/")
+    (synopsis "XML serialization framework for Java")
+    (description "Simple is a high performance XML serialization and
+configuration framework for Java.  Its goal is to provide an XML framework
+that enables rapid development of XML configuration and communication systems.
+This framework aids the development of XML systems with minimal effort and
+reduced errors.  It offers full object serialization and deserialization,
+maintaining each reference encountered.")
+    (license license:asl2.0)))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index c244174fd3..7cd9a34ca2 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1332,7 +1332,8 @@ failed to register hydra.gnu.org public key: ~a~%" status))))))))
 
 (define %default-authorized-guix-keys
   ;; List of authorized substitute keys.
-  (list (file-append guix "/share/guix/hydra.gnu.org.pub")))
+  (list (file-append guix "/share/guix/hydra.gnu.org.pub")
+        (file-append guix "/share/guix/bayfront.guixsd.org.pub")))
 
 (define-record-type* <guix-configuration>
   guix-configuration make-guix-configuration
diff --git a/gnu/services/pm.scm b/gnu/services/pm.scm
index 3cefe1874a..d40cb993e2 100644
--- a/gnu/services/pm.scm
+++ b/gnu/services/pm.scm
@@ -20,6 +20,7 @@
   #:use-module (guix gexp)
   #:use-module (guix packages)
   #:use-module (guix records)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages linux)
   #:use-module (gnu services)
   #:use-module (gnu services base)
@@ -27,7 +28,10 @@
   #:use-module (gnu services shepherd)
   #:use-module (gnu system shadow)
   #:export (tlp-service-type
-            tlp-configuration))
+            tlp-configuration
+
+            thermald-configuration
+            thermald-service-type))
 
 (define (uglify-field-name field-name)
   (let ((str (symbol->string field-name)))
@@ -403,3 +407,38 @@ shutdown on system startup."))
   (generate-documentation
    `((tlp-configuration ,tlp-configuration-fields))
    'tlp-configuration))
+
+
+
+;;;
+;;; thermald
+;;;
+;;; This service implements cpu scaling.  Helps prevent overheating!
+
+(define-record-type* <thermald-configuration>
+  thermald-configuration make-thermald-configuration
+  thermald-configuration?
+  (ignore-cpuid-check? thermald-ignore-cpuid-check?    ;boolean
+                       (default #f))
+  (thermald            thermald-thermald               ;package
+                       (default thermald)))
+
+(define (thermald-shepherd-service config)
+  (list
+   (shepherd-service
+    (provision '(thermald))
+    (documentation "Run thermald cpu frequency scaling.")
+    (start #~(make-forkexec-constructor
+              '(#$(file-append (thermald-thermald config) "/sbin/thermald")
+                "--no-daemon"
+                #$@(if (thermald-ignore-cpuid-check? config)
+                       '("--ignore-cpuid-check")
+                       '()))))
+    (stop #~(make-kill-destructor)))))
+
+(define thermald-service-type
+  (service-type
+   (name 'thermald)
+   (extensions (list (service-extension shepherd-root-service-type
+                                        thermald-shepherd-service)))
+   (default-value (thermald-configuration))))
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 9917c311c7..2a6c8d45c2 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -385,7 +385,7 @@ The other options should be self-descriptive."
 
   (list (shepherd-service
          (documentation "OpenSSH server.")
-         (requirement '(networking syslogd))
+         (requirement '(syslogd))
          (provision '(ssh-daemon))
          (start #~(make-forkexec-constructor #$openssh-command
                                              #:pid-file #$pid-file))
diff --git a/gnu/system.scm b/gnu/system.scm
index f9a0da9a75..0076f2fcb1 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -48,6 +48,7 @@
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
   #:use-module (gnu services base)
+  #:use-module (gnu bootloader)
   #:use-module (gnu system shadow)
   #:use-module (gnu system nss)
   #:use-module (gnu system locale)
@@ -103,6 +104,7 @@
             boot-parameters?
             boot-parameters-label
             boot-parameters-root-device
+            boot-parameters-boot-name
             boot-parameters-store-device
             boot-parameters-store-mount-point
             boot-parameters-kernel
@@ -139,7 +141,7 @@ booted from ROOT-DEVICE"
           (default linux-libre))
   (kernel-arguments operating-system-user-kernel-arguments
                     (default '()))                ; list of gexps/strings
-  (bootloader operating-system-bootloader)        ; <grub-configuration>
+  (bootloader operating-system-bootloader)        ; <bootloader-configuration>
 
   (initrd operating-system-initrd                 ; (list fs) -> M derivation
           (default base-initrd))
@@ -213,6 +215,7 @@ directly by the user."
   ;; exactly to the device field of the <file-system> object representing the
   ;; OS's root file system, so it might be a device path like "/dev/sda3".
   (root-device      boot-parameters-root-device)
+  (boot-name        boot-parameters-boot-name)
   (store-device     boot-parameters-store-device)
   (store-mount-point boot-parameters-store-mount-point)
   (kernel           boot-parameters-kernel)
@@ -231,6 +234,11 @@ directly by the user."
       (label label)
       (root-device root)
 
+      (boot-name
+       (match (assq 'boot-name rest)
+         ((_ args) args)
+         (#f       'grub))) ; for compatibility reasons.
+
       ;; In the past, we would store the directory name of the kernel instead
       ;; of the absolute file name of its image.  Detect that and correct it.
       (kernel (if (string=? linux (direct-store-path linux))
@@ -494,7 +502,7 @@ explicitly appear in OS."
          ;; The packages below are also in %FINAL-INPUTS, so take them from
          ;; there to avoid duplication.
          (map canonical-package
-              (list guile-2.0 bash coreutils-8.27 findutils grep sed
+              (list guile-2.2 bash coreutils-8.27 findutils grep sed
                     diffutils patch gawk tar gzip bzip2 xz lzip))))
 
 (define %default-issue
@@ -847,12 +855,11 @@ populate the \"old entries\" menu."
        (root-device -> (if (eq? 'uuid (file-system-title root-fs))
                            (uuid->string (file-system-device root-fs))
                            (file-system-device root-fs)))
-       (entry (operating-system-boot-parameters os system root-device)))
-    ((module-ref (resolve-interface '(gnu system grub))
-                 'grub-configuration-file)
-     (operating-system-bootloader os)
-     (list entry)
-     #:old-entries old-entries)))
+       (entry (operating-system-boot-parameters os system root-device))
+       (bootloader-conf -> (operating-system-bootloader os)))
+    ((bootloader-configuration-file-generator
+      (bootloader-configuration-bootloader bootloader-conf))
+     bootloader-conf (list entry) #:old-entries old-entries)))
 
 (define (fs->boot-device fs)
   "Given FS, a <file-system> object, return a value suitable for use as the
@@ -869,6 +876,9 @@ kernel arguments for that derivation to <boot-parameters>."
   (mlet* %store-monad
       ((initrd (operating-system-initrd-file os))
        (store -> (operating-system-store-file-system os))
+       (bootloader  -> (bootloader-configuration-bootloader
+                        (operating-system-bootloader os)))
+       (boot-name   -> (bootloader-name bootloader))
        (label -> (kernel->boot-label (operating-system-kernel os))))
     (return (boot-parameters
              (label label)
@@ -879,6 +889,7 @@ kernel arguments for that derivation to <boot-parameters>."
                 (operating-system-kernel-arguments os system.drv root-device)
                 (operating-system-user-kernel-arguments os)))
              (initrd initrd)
+             (boot-name boot-name)
              (store-device (fs->boot-device store))
              (store-mount-point (file-system-mount-point store))))))
 
@@ -904,6 +915,7 @@ being stored into the \"parameters\" file)."
                     (kernel-arguments
                      #$(boot-parameters-kernel-arguments params))
                     (initrd #$(boot-parameters-initrd params))
+                    (boot-name #$(boot-parameters-boot-name params))
                     (store
                      (device #$(boot-parameters-store-device params))
                      (mount-point #$(boot-parameters-store-mount-point params))))
diff --git a/gnu/system/examples/lightweight-desktop.tmpl b/gnu/system/examples/lightweight-desktop.tmpl
index 389ec8574b..6fb6283d29 100644
--- a/gnu/system/examples/lightweight-desktop.tmpl
+++ b/gnu/system/examples/lightweight-desktop.tmpl
@@ -4,23 +4,31 @@
 
 (use-modules (gnu) (gnu system nss))
 (use-service-modules desktop)
-(use-package-modules wm ratpoison certs suckless)
+(use-package-modules bootloaders certs ratpoison suckless wm)
 
 (operating-system
   (host-name "antelope")
   (timezone "Europe/Paris")
   (locale "en_US.utf8")
 
-  ;; Assuming /dev/sdX is the target hard disk, and "my-root"
-  ;; is the label of the target root file system.
-  (bootloader (grub-configuration (device "/dev/sdX")))
-
-  (file-systems (cons (file-system
-                        (device "my-root")
-                        (title 'label)
-                        (mount-point "/")
-                        (type "ext4"))
-                      %base-file-systems))
+  ;; Use the UEFI variant of GRUB with the EFI System
+  ;; Partition on /dev/sda1.
+  (bootloader (grub-configuration (grub grub-efi)
+                                  (device "/dev/sda1")))
+
+  ;; Assume the target root file system is labelled "my-root".
+  (file-systems (cons* (file-system
+                         (device "my-root")
+                         (title 'label)
+                         (mount-point "/")
+                         (type "ext4"))
+                       (file-system
+                         ;; Specify partition here since FAT
+                         ;; labels are currently unsupported.
+                         (device "/dev/sda1")
+                         (mount-point "/boot/efi")
+                         (type "vfat"))
+                       %base-file-systems))
 
   (users (cons (user-account
                 (name "alice")
diff --git a/gnu/system/examples/vm-image.tmpl b/gnu/system/examples/vm-image.tmpl
new file mode 100644
index 0000000000..57ac71c535
--- /dev/null
+++ b/gnu/system/examples/vm-image.tmpl
@@ -0,0 +1,53 @@
+;;; This is an operating system configuration template for a "bare-bones" setup,
+;;; suitable for booting in a virtualized environment, including virtual private
+;;; servers (VPS).
+
+(use-modules (gnu))
+(use-package-modules bootloaders disk nvi)
+
+(define vm-image-motd (plain-file "motd" "
+This is the GNU system.  Welcome!
+
+This instance of GuixSD is a bare-bones template for virtualized environments.
+
+You will probably want to do these things first if you booted in a virtual
+private server (VPS):
+
+* Set a password for 'root'.
+* Set up networking.
+* Expand the root partition to fill the space available by 0) deleting and
+recreating the partition with fdisk, 1) reloading the partition table with
+partprobe, and then 2) resizing the filesystem with resize2fs.\n"))
+
+(operating-system
+  (host-name "gnu")
+  (timezone "Etc/UTC")
+  (locale "en_US.utf8")
+
+  ;; Assuming /dev/sdX is the target hard disk, and "my-root" is
+  ;; the label of the target root file system.
+  (bootloader (grub-configuration (device "/dev/sda")
+                                  (terminal-outputs '(console))))
+  (file-systems (cons (file-system
+                        (device "my-root")
+                        (title 'label)
+                        (mount-point "/")
+                        (type "ext4"))
+                      %base-file-systems))
+
+  ;; This is where user accounts are specified.  The "root"
+  ;; account is implicit, and is initially created with the
+  ;; empty password.
+  (users %base-user-accounts)
+
+  ;; Globally-installed packages.
+  (packages (cons* nvi fdisk
+                   grub   ; mostly so xrefs to its manual work
+                   parted ; partprobe
+                   %base-packages))
+
+  (services (modify-services %base-services
+              (login-service-type config =>
+                                  (login-configuration
+                                    (inherit config)
+                                    (motd vm-image-motd))))))
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 191ccf1680..9a6febfeba 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +26,7 @@
   #:use-module (guix monads)
   #:use-module ((guix store) #:select (%store-prefix))
   #:use-module (gnu services shepherd)
+  #:use-module (gnu services ssh)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bootloaders)
@@ -262,6 +264,16 @@ You have been warned.  Thanks for being so brave.
           ;; To facilitate copy/paste.
           (gpm-service)
 
+          ;; Add an SSH server to facilitate remote installs.
+          (service openssh-service-type
+                   (openssh-configuration
+                    (port-number 22)
+                    (permit-root-login #t)
+                    ;; The root account is passwordless, so make sure
+                    ;; a password is set before allowing logins.
+                    (allow-empty-passwords? #f)
+                    (password-authentication? #t)))
+
           ;; Since this is running on a USB stick with a unionfs as the root
           ;; file system, use an appropriate cache configuration.
           (nscd-service (nscd-configuration
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index dfe198e43e..3a5e76034a 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -268,6 +268,7 @@ loaded at boot time in the order in which they appear."
       "usbhid" "hid-generic" "hid-apple"      ;keyboards during early boot
       "dm-crypt" "xts" "serpent_generic" "wp512" ;for encrypted root partitions
       "nvme"                                     ;for new SSD NVMe devices
+      "nls_iso8859-1"                            ;for `mkfs.fat`, et.al
       ,@(if (string-match "^(x86_64|i[3-6]86)-" (%current-system))
             '("pata_acpi" "pata_atiixp"    ;for ATA controllers
               "isci")                      ;for SAS controllers like Intel C602
@@ -281,9 +282,6 @@ loaded at boot time in the order in which they appear."
       ,@(if (find (file-system-type-predicate "9p") file-systems)
             virtio-9p-modules
             '())
-      ,@(if (find (file-system-type-predicate "vfat") file-systems)
-            '("nls_iso8859-1")
-            '())
       ,@(if (find (file-system-type-predicate "btrfs") file-systems)
             '("btrfs")
             '())
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 2c8b954c80..ad5e6b75bb 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -46,10 +47,11 @@
                 #:select (%guile-static-stripped))
   #:use-module (gnu packages admin)
 
+  #:use-module (gnu bootloader)
   #:use-module (gnu system shadow)
   #:use-module (gnu system pam)
   #:use-module (gnu system linux-initrd)
-  #:use-module (gnu system grub)
+  #:use-module (gnu bootloader)
   #:use-module (gnu system file-systems)
   #:use-module (gnu system)
   #:use-module (gnu services)
@@ -176,8 +178,9 @@ made available under the /xchg CIFS share."
                      (disk-image-format "qcow2")
                      (file-system-type "ext4")
                      file-system-label
-                     os-derivation
-                     grub-configuration
+                     os-drv
+                     bootcfg-drv
+                     bootloader
                      (register-closures? #t)
                      (inputs '())
                      copy-inputs?)
@@ -201,7 +204,7 @@ the image."
                       (guix build utils))
 
          (let ((inputs
-                '#$(append (list qemu parted grub e2fsprogs)
+                '#$(append (list qemu parted e2fsprogs dosfstools)
                            (map canonical-package
                                 (list sed grep coreutils findutils gawk))
                            (if register-closures? (list guix) '())))
@@ -223,17 +226,36 @@ the image."
                                #:closures graphs
                                #:copy-closures? #$copy-inputs?
                                #:register-closures? #$register-closures?
-                               #:system-directory #$os-derivation))
+                               #:system-directory #$os-drv))
                   (partitions (list (partition
                                      (size #$(- disk-image-size
-                                                (* 10 (expt 2 20))))
+                                                (* 50 (expt 2 20))))
                                      (label #$file-system-label)
                                      (file-system #$file-system-type)
-                                     (bootable? #t)
-                                     (initializer initialize)))))
+                                     (flags '(boot))
+                                     (initializer initialize))
+                                    ;; Append a small EFI System Partition for
+                                    ;; use with UEFI bootloaders.
+                                    (partition
+                                     ;; The standalone grub image is about 10MiB, but
+                                     ;; leave some room for custom or multiple images.
+                                     (size (* 40 (expt 2 20)))
+                                     (label "GNU-ESP")             ;cosmetic only
+                                     ;; Use "vfat" here since this property is used
+                                     ;; when mounting. The actual FAT-ness is based
+                                     ;; on filesystem size (16 in this case).
+                                     (file-system "vfat")
+                                     (flags '(esp))))))
              (initialize-hard-disk "/dev/vda"
                                    #:partitions partitions
-                                   #:grub.cfg #$grub-configuration)
+                                   #:grub-efi #$grub-efi
+                                   #:bootloader-package
+                                   #$(bootloader-package bootloader)
+                                   #:bootcfg #$bootcfg-drv
+                                   #:bootcfg-location
+                                   #$(bootloader-configuration-file bootloader)
+                                   #:bootloader-installer
+                                   #$(bootloader-installer bootloader))
              (reboot)))))
    #:system system
    #:make-disk-image? #t
@@ -287,8 +309,10 @@ to USB sticks meant to be read-only."
     (mlet* %store-monad ((os-drv   (operating-system-derivation os))
                          (bootcfg  (operating-system-bootcfg os)))
       (qemu-image #:name name
-                  #:os-derivation os-drv
-                  #:grub-configuration bootcfg
+                  #:os-drv os-drv
+                  #:bootcfg-drv bootcfg
+                  #:bootloader (bootloader-configuration-bootloader
+                                (operating-system-bootloader os))
                   #:disk-image-size disk-image-size
                   #:disk-image-format "raw"
                   #:file-system-type file-system-type
@@ -330,8 +354,10 @@ of the GNU system as described by OS."
     (mlet* %store-monad
         ((os-drv      (operating-system-derivation os))
          (bootcfg     (operating-system-bootcfg os)))
-      (qemu-image  #:os-derivation os-drv
-                   #:grub-configuration bootcfg
+      (qemu-image  #:os-drv os-drv
+                   #:bootcfg-drv bootcfg
+                   #:bootloader (bootloader-configuration-bootloader
+                                 (operating-system-bootloader os))
                    #:disk-image-size disk-image-size
                    #:file-system-type file-system-type
                    #:inputs `(("system" ,os-drv)
@@ -429,8 +455,10 @@ bootloader refers to: OS kernel, initrd, bootloader data, etc."
     ;; BOOTCFG and all its dependencies, including the output of OS-DRV.
     ;; This is more than needed (we only need the kernel, initrd, GRUB for its
     ;; font, and the background image), but it's hard to filter that.
-    (qemu-image #:os-derivation os-drv
-                #:grub-configuration bootcfg
+    (qemu-image #:os-drv os-drv
+                #:bootcfg-drv bootcfg
+                #:bootloader (bootloader-configuration-bootloader
+                              (operating-system-bootloader os))
                 #:disk-image-size disk-image-size
                 #:inputs (if full-boot?
                              `(("bootcfg" ,bootcfg))
@@ -471,7 +499,7 @@ with '-virtfs' options for the host file systems listed in SHARED-FS."
                                                 (mappings '())
                                                 full-boot?
                                                 (disk-image-size
-                                                 (* (if full-boot? 500 30)
+                                                 (* (if full-boot? 500 70)
                                                     (expt 2 20))))
   "Return a derivation that builds a script to run a virtual machine image of
 OS that shares its store with the host.
diff --git a/gnu/tests.scm b/gnu/tests.scm
index 810711ab91..2886a982f4 100644
--- a/gnu/tests.scm
+++ b/gnu/tests.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,8 +21,8 @@
   #:use-module (guix gexp)
   #:use-module (guix utils)
   #:use-module (guix records)
+  #:use-module (gnu bootloader grub)
   #:use-module (gnu system)
-  #:use-module (gnu system grub)
   #:use-module (gnu system file-systems)
   #:use-module (gnu system shadow)
   #:use-module (gnu services)
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 37aab8ef67..e5ac320b74 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -199,6 +199,28 @@ info --version")
                          ',users+homes))
                marionette)))
 
+          (test-equal "no extra home directories"
+            '()
+
+            ;; Make sure the home directories that are not supposed to be
+            ;; created are indeed not created.
+            (let ((nonexistent
+                   '#$(filter-map (lambda (user)
+                                    (and (not
+                                          (user-account-create-home-directory?
+                                           user))
+                                         (user-account-home-directory user)))
+                                  (operating-system-user-accounts os))))
+              (marionette-eval
+               `(begin
+                  (use-modules (srfi srfi-1))
+
+                  ;; Note: Do not flag "/var/empty".
+                  (filter file-exists?
+                          ',(remove (cut string-prefix? "/var/" <>)
+                                    nonexistent)))
+               marionette)))
+
           (test-equal "login on tty1"
             "root\n"
             (begin
diff --git a/gnu/tests/nfs.scm b/gnu/tests/nfs.scm
index 1f28f5a5b8..9e1ac1d55a 100644
--- a/gnu/tests/nfs.scm
+++ b/gnu/tests/nfs.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,8 +20,8 @@
 
 (define-module (gnu tests nfs)
   #:use-module (gnu tests)
+  #:use-module (gnu bootloader grub)
   #:use-module (gnu system)
-  #:use-module (gnu system grub)
   #:use-module (gnu system file-systems)
   #:use-module (gnu system shadow)
   #:use-module (gnu system vm)