summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/build.scm59
-rw-r--r--doc/guix.texi107
-rw-r--r--gnu/build/linux-boot.scm5
-rw-r--r--gnu/build/linux-initrd.scm4
-rw-r--r--gnu/build/shepherd.scm6
-rw-r--r--gnu/installer/newt/partition.scm9
-rw-r--r--gnu/installer/parted.scm48
-rw-r--r--gnu/local.mk19
-rw-r--r--gnu/packages/admin.scm98
-rw-r--r--gnu/packages/bootloaders.scm9
-rw-r--r--gnu/packages/cluster.scm10
-rw-r--r--gnu/packages/compression.scm50
-rw-r--r--gnu/packages/cran.scm27
-rw-r--r--gnu/packages/disk.scm5
-rw-r--r--gnu/packages/distributed.scm95
-rw-r--r--gnu/packages/emacs-xyz.scm616
-rw-r--r--gnu/packages/embedded.scm81
-rw-r--r--gnu/packages/game-development.scm2
-rw-r--r--gnu/packages/geo.scm4
-rw-r--r--gnu/packages/gl.scm80
-rw-r--r--gnu/packages/glib.scm35
-rw-r--r--gnu/packages/graphics.scm92
-rw-r--r--gnu/packages/gstreamer.scm5
-rw-r--r--gnu/packages/guile-xyz.scm6
-rw-r--r--gnu/packages/haskell-xyz.scm37
-rw-r--r--gnu/packages/idris.scm9
-rw-r--r--gnu/packages/image-processing.scm4
-rw-r--r--gnu/packages/image.scm111
-rw-r--r--gnu/packages/license.scm10
-rw-r--r--gnu/packages/linux.scm39
-rw-r--r--gnu/packages/maths.scm6
-rw-r--r--gnu/packages/music.scm17
-rw-r--r--gnu/packages/networking.scm8
-rw-r--r--gnu/packages/patches/beets-python-3.7-fix.patch57
-rw-r--r--gnu/packages/patches/debops-constants-for-external-program-names.patch276
-rw-r--r--gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch45
-rw-r--r--gnu/packages/patches/freeimage-CVE-2015-0852.patch129
-rw-r--r--gnu/packages/patches/freeimage-CVE-2016-5684.patch34
-rw-r--r--gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch1453
-rw-r--r--gnu/packages/patches/freeimage-unbundle.patch167
-rw-r--r--gnu/packages/patches/glm-restore-install-target.patch574
-rw-r--r--gnu/packages/patches/idris-test-no-node.patch61
-rw-r--r--gnu/packages/patches/ilmbase-fix-tests.patch12
-rw-r--r--gnu/packages/patches/ilmbase-openexr-pkg-config.patch40
-rw-r--r--gnu/packages/patches/p11-kit-jks-timestamps.patch42
-rw-r--r--gnu/packages/plotutils.scm6
-rw-r--r--gnu/packages/pretty-print.scm4
-rw-r--r--gnu/packages/python-xyz.scm29
-rw-r--r--gnu/packages/regex.scm4
-rw-r--r--gnu/packages/tbb.scm11
-rw-r--r--gnu/packages/texinfo.scm14
-rw-r--r--gnu/packages/tls.scm13
-rw-r--r--gnu/packages/video.scm69
-rw-r--r--gnu/packages/virtualization.scm4
-rw-r--r--gnu/packages/vulkan.scm7
-rw-r--r--gnu/packages/web-browsers.scm7
-rw-r--r--gnu/packages/web.scm110
-rw-r--r--gnu/packages/webkit.scm73
-rw-r--r--gnu/packages/wm.scm8
-rw-r--r--gnu/packages/xdisorg.scm12
-rw-r--r--gnu/packages/xml.scm4
-rw-r--r--gnu/packages/xorg.scm21
-rw-r--r--gnu/services/guix.scm212
-rw-r--r--gnu/tests/guix.scm173
-rw-r--r--guix/colors.scm18
-rw-r--r--guix/scripts/download.scm15
-rw-r--r--guix/scripts/package.scm21
-rw-r--r--guix/scripts/pull.scm2
-rw-r--r--guix/self.scm6
-rw-r--r--tests/guix-package.sh6
70 files changed, 3083 insertions, 2369 deletions
diff --git a/doc/build.scm b/doc/build.scm
index 5bc95d2517..b6a921c421 100644
--- a/doc/build.scm
+++ b/doc/build.scm
@@ -215,6 +215,58 @@ its <pre class=\"lisp\"> blocks (as produced by 'makeinfo --html')."
                          (ice-9 match)
                          (ice-9 threads))
 
+            (define (pair-open/close lst)
+              ;; Pair 'open' and 'close' tags produced by 'highlights' and
+              ;; produce nested 'paren' tags instead.
+              (let loop ((lst lst)
+                         (level 0)
+                         (result '()))
+                (match lst
+                  ((('open open) rest ...)
+                   (call-with-values
+                       (lambda ()
+                         (loop rest (+ 1 level) '()))
+                     (lambda (inner close rest)
+                       (loop rest level
+                             (cons `(paren ,level ,open ,inner ,close)
+                                   result)))))
+                  ((('close str) rest ...)
+                   (if (> level 0)
+                       (values (reverse result) str rest)
+                       (begin
+                         (format (current-error-port)
+                                 "warning: extra closing paren; context:~% ~y~%"
+                                 (reverse result))
+                         (loop rest 0 (cons `(close ,str) result)))))
+                  ((item rest ...)
+                   (loop rest level (cons item result)))
+                  (()
+                   (when (> level 0)
+                     (format (current-error-port)
+                             "warning: missing ~a closing parens; context:~% ~y%"
+                             level (reverse result)))
+                   (values (reverse result) "" '())))))
+
+            (define (highlights->sxml* highlights)
+              ;; Like 'highlights->sxml', but handle nested 'paren tags.  This
+              ;; allows for paren matching highlights via appropriate CSS
+              ;; "hover" properties.
+              (define (tag->class tag)
+                (string-append "syntax-" (symbol->string tag)))
+
+              (map (match-lambda
+                     ((? string? str) str)
+                     (('paren level open (body ...) close)
+                      `(span (@ (class ,(string-append "syntax-paren"
+                                                       (number->string level))))
+                             ,open
+                             (span (@ (class "syntax-symbol"))
+                                   ,@(highlights->sxml* body))
+                             ,close))
+                     ((tag text)
+                      `(span (@ (class ,(tag->class tag))) ,text)))
+                   highlights))
+
             (define entity->string
               (match-lambda
                 ("rArr"   "⇒")
@@ -252,9 +304,10 @@ its <pre class=\"lisp\"> blocks (as produced by 'makeinfo --html')."
                                  (href #$syntax-css-url)))))
                 (('pre ('@ ('class "lisp")) code-snippet ...)
                  `(pre (@ (class "lisp"))
-                       ,(highlights->sxml
-                         (highlight lex-scheme
-                                    (concatenate-snippets code-snippet)))))
+                       ,@(highlights->sxml*
+                          (pair-open/close
+                           (highlight lex-scheme
+                                      (concatenate-snippets code-snippet))))))
                 ((tag ('@ attributes ...) body ...)
                  `(,tag (@ ,@attributes) ,@(map syntax-highlight body)))
                 ((tag body ...)
diff --git a/doc/guix.texi b/doc/guix.texi
index 843afcdd1a..6b637ddfe9 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2431,7 +2431,7 @@ Create a disk image that will hold the installed system.  To make a
 qcow2-formatted disk image, use the @command{qemu-img} command:
 
 @example
-qemu-img create -f qcow2 guixsd.img 50G
+qemu-img create -f qcow2 guix-system.img 50G
 @end example
 
 The resulting file will be much smaller than 50 GB (typically less than
@@ -2442,17 +2442,13 @@ Boot the USB installation image in an VM:
 
 @example
 qemu-system-x86_64 -m 1024 -smp 1 -enable-kvm \
-  -net user -net nic,model=virtio -boot menu=on \
-  -drive file=guix-system-install-@value{VERSION}.@var{system}.iso \
-  -drive file=guixsd.img
+  -net user -net nic,model=virtio -boot menu=on,order=d \
+  -drive file=guix-system.img \
+  -drive media=cdrom,file=guix-system-install-@value{VERSION}.@var{system}.iso
 @end example
 
-The ordering of the drives matters.  @code{-enable-kvm} is optional, but
-significantly improves performance, @pxref{Running Guix in a VM}.
-
-In the VM console, quickly press the @kbd{F12} key to enter the boot
-menu.  Then press the @kbd{2} key and the @kbd{RET} key to validate your
-selection.
+@code{-enable-kvm} is optional, but significantly improves performance,
+@pxref{Running Guix in a VM}.
 
 @item
 You're now root in the VM, proceed with the installation process.
@@ -2460,7 +2456,7 @@ You're now root in the VM, proceed with the installation process.
 @end enumerate
 
 Once installation is complete, you can boot the system that's on your
-@file{guixsd.img} image.  @xref{Running Guix in a VM}, for how to do
+@file{guix-system.img} image.  @xref{Running Guix in a VM}, for how to do
 that.
 
 @node Building the Installation Image
@@ -2759,7 +2755,7 @@ As an example, @var{file} might contain a definition like this
 (@pxref{Defining Packages}):
 
 @lisp
-@verbatiminclude package-hello.scm
+@include package-hello.scm
 @end lisp
 
 Developers may find it useful to include such a @file{guix.scm} file
@@ -2937,6 +2933,19 @@ siblings that point to specific generations:
 $ rm ~/code/my-profile ~/code/my-profile-*-link
 @end example
 
+@item --list-profiles
+List all the user's profiles:
+
+@example
+$ guix package --list-profiles
+/home/charlie/.guix-profile
+/home/charlie/code/my-profile
+/home/charlie/code/devel-profile
+/home/charlie/tmp/test
+@end example
+
+When running as root, list all the profiles of all the users.
+
 @cindex collisions, in a profile
 @cindex colliding packages in profiles
 @cindex profile collisions
@@ -8235,7 +8244,7 @@ As an example, @var{file} might contain a package definition like this
 (@pxref{Defining Packages}):
 
 @lisp
-@verbatiminclude package-hello.scm
+@include package-hello.scm
 @end lisp
 
 @item --expression=@var{expr}
@@ -9474,7 +9483,7 @@ that Guix uses, as in this example:
   ;; @dots{}
   ;; CPE calls this package "grub2".
   (properties '((cpe-name . "grub2")
-                (cpe-version . "2.3")))
+                (cpe-version . "2.3"))))
 @end lisp
 
 @c See <https://www.openwall.com/lists/oss-security/2017/03/15/3>.
@@ -11788,6 +11797,7 @@ declaration.
 * Virtualization Services::     Virtualization services.
 * Version Control Services::    Providing remote access to Git repositories.
 * Game Services::               Game servers.
+* Guix Services::               Services relating specifically to Guix.
 * Miscellaneous Services::      Other services.
 @end menu
 
@@ -12392,7 +12402,7 @@ The following example showcases how we can use an existing rule file.
 @lisp
 (use-modules (guix download)     ;for url-fetch
              (guix packages)     ;for origin
-             ;; @dots{})
+             @dots{})
 
 (define %android-udev-rules
   (file->udev-rule
@@ -12426,7 +12436,7 @@ well as in the @var{groups} field of the @var{operating-system} record.
 @lisp
 (use-modules (gnu packages android)  ;for android-udev-rules
              (gnu system shadow)     ;for user-group
-             ;; @dots{})
+             @dots{})
 
 (operating-system
   ;; @dots{}
@@ -12434,8 +12444,7 @@ well as in the @var{groups} field of the @var{operating-system} record.
                 ;; @dots{}
                 (supplementary-groups
                  '("adbusers"   ;for adb
-                   "wheel" "netdev" "audio" "video"))
-                ;; @dots{})))
+                   "wheel" "netdev" "audio" "video")))))
 
   (groups (cons (user-group (system? #t) (name "adbusers"))
                 %base-groups))
@@ -13352,7 +13361,7 @@ gateway @code{hostname}:
              (program (file-append openssh "/bin/ssh"))
              (arguments
               '("ssh" "-qT" "-i" "/path/to/ssh_key"
-                "-W" "smtp-server:25" "user@@hostname")))))
+                "-W" "smtp-server:25" "user@@hostname")))))))
 @end lisp
 
 See below for more details about @code{inetd-configuration}.
@@ -19822,13 +19831,12 @@ can do something along these lines:
 
 @lisp
 (define %gnu-mirror
-  (plain-file
-   "gnu.vcl"
-   "vcl 4.1;
-backend gnu @{ .host = "www.gnu.org"; @}"))
+  (plain-file "gnu.vcl"
+              "vcl 4.1;
+backend gnu @{ .host = \"www.gnu.org\"; @}"))
 
 (operating-system
-  ...
+  ;; @dots{}
   (services (cons (service varnish-service-type
                            (varnish-configuration
                             (listen '(":80"))
@@ -24327,6 +24335,57 @@ The port to bind the server to.
 @end table
 @end deftp
 
+
+@node Guix Services
+@subsection Guix Services
+
+@subsubheading Guix Data Service
+The @uref{http://data.guix.gnu.org,Guix Data Service} processes, stores
+and provides data about GNU Guix.  This includes information about
+packages, derivations and lint warnings.
+
+The data is stored in a PostgreSQL database, and available through a web
+interface.
+
+@defvar {Scheme Variable} guix-data-service-type
+Service type for the Guix Data Service.  Its value must be a
+@code{guix-data-service-configuration} object.  The service optionally
+extends the getmail service, as the guix-commits mailing list is used to
+find out about changes in the Guix git repository.
+@end defvar
+
+@deftp {Data Type} guix-data-service-configuration
+Data type representing the configuration of the Guix Data Service.
+
+@table @asis
+@item @code{package} (default: @code{guix-data-service})
+The Guix Data Service package to use.
+
+@item @code{user} (default: @code{"guix-data-service"})
+The system user to run the service as.
+
+@item @code{group} (default: @code{"guix-data-service"})
+The system group to run the service as.
+
+@item @code{port} (default: @code{8765})
+The port to bind the web service to.
+
+@item @code{host} (default: @code{"127.0.0.1"})
+The host to bind the web service to.
+
+@item @code{getmail-idle-mailboxes} (default: @code{#f})
+If set, this is the list of mailboxes that the getmail service will be
+configured to listen to.
+
+@item @code{commits-getmail-retriever-configuration} (default: @code{#f})
+If set, this is the @code{getmail-retriever-configuration} object with
+which to configure getmail to fetch mail from the guix-commits mailing
+list.
+
+@end table
+@end deftp
+
+
 @node Miscellaneous Services
 @subsection Miscellaneous Services
 
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index f273957d78..84a5447977 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -359,8 +359,9 @@ the last argument of `mknod'."
 (define* (mount-root-file-system root type
                                  #:key volatile-root?)
   "Mount the root file system of type TYPE at device ROOT.  If VOLATILE-ROOT?
-is true, mount ROOT read-only and make it a overlay with a writable tmpfs
-using the kernel build-in overlayfs."
+is true, mount ROOT read-only and make it an overlay with a writable tmpfs
+using the kernel built-in overlayfs."
+
   (if volatile-root?
       (begin
         (mkdir-p "/real-root")
diff --git a/gnu/build/linux-initrd.scm b/gnu/build/linux-initrd.scm
index 3aaa06d3a0..ea7de58553 100644
--- a/gnu/build/linux-initrd.scm
+++ b/gnu/build/linux-initrd.scm
@@ -71,8 +71,7 @@ COMPRESS? is true, compress it using GZIP.  On success, return OUTPUT."
       (cpio:write-cpio-archive files port
                                #:file->header cpio:file->cpio-header*)))
 
-  (or (not compress?)
-
+  (if compress?
       ;; Gzip insists on adding a '.gz' suffix and does nothing if the input
       ;; file already has that suffix.  Shuffle files around to placate it.
       (let* ((gz-suffix? (string-suffix? ".gz" output))
@@ -88,7 +87,6 @@ COMPRESS? is true, compress it using GZIP.  On success, return OUTPUT."
                (unless gz-suffix?
                  (rename-file (string-append output ".gz") output))
                output)))
-
       output))
 
 (define (cache-compiled-file-name file)
diff --git a/gnu/build/shepherd.scm b/gnu/build/shepherd.scm
index b32765ed5e..14bdf4edb8 100644
--- a/gnu/build/shepherd.scm
+++ b/gnu/build/shepherd.scm
@@ -150,14 +150,16 @@ namespace, in addition to essential bind-mounts such /proc."
     (when log-file
       ;; Create LOG-FILE so we can map it in the container.
       (unless (file-exists? log-file)
-        (call-with-output-file log-file (const #t))))
+        (call-with-output-file log-file (const #t))
+        (when user
+          (let ((pw (getpwnam user)))
+            (chown log-file (passwd:uid pw) (passwd:gid pw))))))
 
     (let ((pid (run-container container-directory
                               mounts namespaces 1
                               (lambda ()
                                 (mkdir-p "/var/run")
                                 (clean-up pid-file)
-                                (clean-up log-file)
 
                                 (exec-command command
                                               #:user user
diff --git a/gnu/installer/newt/partition.scm b/gnu/installer/newt/partition.scm
index 7a9f11a15e..74e9473171 100644
--- a/gnu/installer/newt/partition.scm
+++ b/gnu/installer/newt/partition.scm
@@ -587,7 +587,6 @@ edit it."
                                           disks))
                      (new-user-partitions
                       (remove-user-partition-by-disk user-partitions item)))
-                (disk-destroy item)
                 `((disks . ,(cons new-disk other-disks))
                   (user-partitions . ,new-user-partitions)))
               `((disks . ,disks)
@@ -625,7 +624,7 @@ edit it."
                                       info-text)))
           (case result
             ((1)
-             (disk-delete-all item)
+             (disk-remove-all-partitions item)
              `((disks . ,disks)
                (user-partitions
                 . ,(remove-user-partition-by-disk user-partitions item))))
@@ -649,7 +648,7 @@ edit it."
                  (let ((new-user-partitions
                         (remove-user-partition-by-partition user-partitions
                                                             item)))
-                   (disk-delete-partition disk item)
+                   (disk-remove-partition* disk item)
                    `((disks . ,disks)
                      (user-partitions . ,new-user-partitions))))
                 (else
@@ -696,9 +695,7 @@ by pressing the Exit button.~%~%")))
                        #f))
                  (check-user-partitions user-partitions))))
           (if user-partitions-ok?
-              (begin
-                (for-each (cut disk-destroy <>) disks)
-                user-partitions)
+              user-partitions
               (run-disk-page disks user-partitions
                              #:guided? guided?)))
         (let* ((result-disks (assoc-ref result 'disks))
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm
index 682e233d9f..3439f211e2 100644
--- a/gnu/installer/parted.scm
+++ b/gnu/installer/parted.scm
@@ -64,13 +64,7 @@
             user-partition-parted-object
 
             find-esp-partition
-            data-partition?
-            metadata-partition?
-            freespace-partition?
             small-freespace-partition?
-            normal-partition?
-            extended-partition?
-            logical-partition?
             esp-partition?
             boot-partition?
             default-esp-mount-point
@@ -172,24 +166,6 @@
   "Find and return the ESP partition among PARTITIONS."
   (find esp-partition? partitions))
 
-(define (data-partition? partition)
-  "Return #t if PARTITION is a partition dedicated to data (by opposition to
-freespace, metadata and protected partition types), return #f otherwise."
-  (let ((type (partition-type partition)))
-    (not (any (lambda (flag)
-                (member flag type))
-              '(free-space metadata protected)))))
-
-(define (metadata-partition? partition)
-  "Return #t if PARTITION is a metadata partition, #f otherwise."
-  (let ((type (partition-type partition)))
-    (member 'metadata type)))
-
-(define (freespace-partition? partition)
-  "Return #t if PARTITION is a free-space partition, #f otherwise."
-  (let ((type (partition-type partition)))
-    (member 'free-space type)))
-
 (define* (small-freespace-partition? device
                                      partition
                                      #:key (max-size MEBIBYTE-SIZE))
@@ -200,21 +176,6 @@ inferior to MAX-SIZE, #f otherwise."
                             (device-sector-size device))))
     (< size max-sector-size)))
 
-(define (normal-partition? partition)
-  "return #t if partition is a normal partition, #f otherwise."
-  (let ((type (partition-type partition)))
-    (member 'normal type)))
-
-(define (extended-partition? partition)
-  "return #t if partition is an extended partition, #f otherwise."
-  (let ((type (partition-type partition)))
-    (member 'extended type)))
-
-(define (logical-partition? partition)
-  "Return #t if PARTITION is a logical partition, #f otherwise."
-  (let ((type (partition-type partition)))
-    (member 'logical type)))
-
 (define (partition-user-type partition)
   "Return the type of PARTITION, to be stored in the TYPE field of
 <user-partition> record. It can be 'normal, 'extended or 'logical."
@@ -813,7 +774,7 @@ cause them to cross."
 (define (rmpart disk number)
   "Remove the partition with the given NUMBER on DISK."
   (let ((partition (disk-get-partition disk number)))
-    (disk-remove-partition disk partition)))
+    (disk-remove-partition* disk partition)))
 
 
 ;;
@@ -928,12 +889,12 @@ exists."
 
     (if has-extended?
         ;; msdos - remove everything.
-        (disk-delete-all disk)
+        (disk-remove-all-partitions disk)
         ;; gpt - remove everything but esp if it exists.
         (for-each
          (lambda (partition)
            (and (data-partition? partition)
-                (disk-remove-partition disk partition)))
+                (disk-remove-partition* disk partition)))
          non-boot-partitions))
 
     (let* ((start-partition
@@ -1348,7 +1309,7 @@ USER-PARTITIONS, or return nothing."
 
 (define (init-parted)
   "Initialize libparted support."
-  (probe-all-devices)
+  (probe-all-devices!)
   (exception-set-handler (lambda (exception)
                            EXCEPTION-OPTION-UNHANDLED)))
 
@@ -1364,7 +1325,6 @@ the devices not to be used before returning."
   ;; https://mail.gnome.org/archives/commits-list/2013-March/msg18423.html.
   (let ((device-file-names (map device-path devices)))
     (for-each force-device-sync devices)
-    (free-all-devices)
     (for-each (lambda (file-name)
                 (let ((in-use? (with-delay-device-in-use? file-name)))
                   (and in-use?
diff --git a/gnu/local.mk b/gnu/local.mk
index bee5b7024a..9bd1e8882b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -146,7 +146,8 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/diffoscope.scm			\
   %D%/packages/digest.scm			\
   %D%/packages/direct-connect.scm		\
-  %D%/packages/disk.scm				\
+  %D%/packages/disk.scm			\
+  %D%/packages/distributed.scm			\
   %D%/packages/display-managers.scm		\
   %D%/packages/django.scm			\
   %D%/packages/djvu.scm				\
@@ -534,6 +535,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/authentication.scm		\
   %D%/services/games.scm			\
   %D%/services/getmail.scm				\
+  %D%/services/guix.scm			\
   %D%/services/kerberos.scm			\
   %D%/services/lirc.scm				\
   %D%/services/virtualization.scm		\
@@ -598,6 +600,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/tests/desktop.scm				\
   %D%/tests/dict.scm				\
   %D%/tests/docker.scm				\
+  %D%/tests/guix.scm				\
   %D%/tests/monitoring.scm                      \
   %D%/tests/nfs.scm				\
   %D%/tests/install.scm				\
@@ -707,7 +710,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/bash-completion-directories.patch	\
   %D%/packages/patches/bastet-change-source-of-unordered_set.patch	\
   %D%/packages/patches/bazaar-CVE-2017-14176.patch		\
-  %D%/packages/patches/beets-python-3.7-fix.patch		\
   %D%/packages/patches/beignet-correct-file-names.patch		\
   %D%/packages/patches/benchmark-unbundle-googletest.patch	\
   %D%/packages/patches/biber-fix-encoding-write.patch		\
@@ -763,6 +765,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/dbus-c++-gcc-compat.patch		\
   %D%/packages/patches/dbus-c++-threading-mutex.patch		\
   %D%/packages/patches/dealii-mpi-deprecations.patch		\
+  %D%/packages/patches/debops-constants-for-external-program-names.patch \
+  %D%/packages/patches/debops-debops-defaults-fall-back-to-less.patch \
   %D%/packages/patches/deja-dup-use-ref-keyword-for-iter.patch	\
   %D%/packages/patches/dfu-programmer-fix-libusb.patch		\
   %D%/packages/patches/diffutils-gets-undeclared.patch		\
@@ -824,9 +828,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/flint-ldconfig.patch			\
   %D%/packages/patches/foomatic-filters-CVE-2015-8327.patch	\
   %D%/packages/patches/foomatic-filters-CVE-2015-8560.patch	\
-  %D%/packages/patches/freeimage-CVE-2015-0852.patch		\
-  %D%/packages/patches/freeimage-CVE-2016-5684.patch		\
-  %D%/packages/patches/freeimage-fix-build-with-gcc-5.patch	\
   %D%/packages/patches/freeimage-unbundle.patch		\
   %D%/packages/patches/fuse-overlapping-headers.patch				\
   %D%/packages/patches/gawk-shell.patch				\
@@ -901,10 +902,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-versioned-locpath.patch		\
   %D%/packages/patches/glibc-2.27-git-fixes.patch		\
   %D%/packages/patches/glibc-2.28-git-fixes.patch		\
-  %D%/packages/patches/glibc-2.28-supported-locales.patch     	\
   %D%/packages/patches/glibc-2.29-git-updates.patch     	\
-  %D%/packages/patches/glibc-supported-locales.patch     	\
   %D%/packages/patches/glibc-2.27-supported-locales.patch     	\
+  %D%/packages/patches/glibc-2.28-supported-locales.patch     	\
+  %D%/packages/patches/glibc-supported-locales.patch     	\
+  %D%/packages/patches/glm-restore-install-target.patch		\
   %D%/packages/patches/glusterfs-use-PATH-instead-of-hardcodes.patch		\
   %D%/packages/patches/gmp-arm-asm-nothumb.patch		\
   %D%/packages/patches/gmp-faulty-test.patch			\
@@ -972,8 +974,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/icedtea-6-hotspot-gcc-segfault-workaround.patch  \
   %D%/packages/patches/icedtea-7-hotspot-gcc-segfault-workaround.patch  \
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
-  %D%/packages/patches/idris-test-no-node.patch			\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
+  %D%/packages/patches/ilmbase-openexr-pkg-config.patch		\
   %D%/packages/patches/inkscape-poppler-0.76.patch		\
   %D%/packages/patches/intltool-perl-compatibility.patch	\
   %D%/packages/patches/irrlicht-use-system-libs.patch		\
@@ -1180,7 +1182,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/osip-CVE-2017-7853.patch			\
   %D%/packages/patches/ots-no-include-missing-file.patch	\
   %D%/packages/patches/owncloud-disable-updatecheck.patch	\
-  %D%/packages/patches/p11-kit-jks-timestamps.patch		\
   %D%/packages/patches/p7zip-CVE-2016-9296.patch		\
   %D%/packages/patches/p7zip-CVE-2017-17969.patch		\
   %D%/packages/patches/p7zip-remove-unused-code.patch		\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 327abe455a..6d5e4b9fcc 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -26,6 +26,7 @@
 ;;; Copyright © 2019 Brett Gilio <brettg@posteo.net>
 ;;; Copyright © 2019 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.lonestar.org>
+;;; Copyright © 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,6 +61,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages crypto)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages dns)
   #:use-module (gnu packages file)
@@ -112,6 +114,7 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages mpi)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages web))
 
 (define-public aide
@@ -1903,6 +1906,101 @@ ad hoc task execution, and multinode orchestration---including trivializing
 things like zero-downtime rolling updates with load balancers.")
     (license license:gpl3+)))
 
+(define-public debops
+  (package
+    (name "debops")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/debops/debops")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "052b2dykdn35pdpn9s4prawl6nl6yzih8nyf54hpvhpisvjrm1v5"))
+       (patches
+        (search-patches "debops-constants-for-external-program-names.patch"
+                        "debops-debops-defaults-fall-back-to-less.patch"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("git" ,git)))
+    (inputs
+     `(("ansible" ,ansible)
+       ("encfs" ,encfs)
+       ("fuse" ,fuse)
+       ("util-linux" ,util-linux)  ;; for umount
+       ("findutils" ,findutils)
+       ("gnupg" ,gnupg)
+       ("which" ,which)))
+    (propagated-inputs
+     `(("python-future" ,python-future)
+       ("python-distro" ,python-distro)))
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'nuke-debops-update
+           (lambda _
+             (chmod "bin/debops-update" #o755) ; FIXME work-around git-fetch issue
+             (with-output-to-file "bin/debops-update"
+               (lambda ()
+                 (format #t "#!/bin/sh
+echo 'debops is installed via guix. guix-update is useless in this case.
+Please use `guix package -u debops` instead.'")))
+             #t))
+         ;; patch shebangs only in actuall scripts, not in files included in
+         ;; roles (which are to be delivered to the targte systems)
+         (delete `patch-generated-file-shebangs)
+         (replace 'patch-source-shebangs
+           (lambda _
+             (for-each patch-shebang
+                       (find-files "bin"
+                                   (lambda (file stat)
+                                     ;; Filter out symlinks.
+                                     (eq? 'regular (stat:type stat)))
+                                   #:stat lstat))))
+         (add-after 'unpack 'fix-paths
+           (lambda _
+             (define (substitute-program-names file)
+               ;; e.g. ANSIBLE_PLAYBOOK = '/gnu/store/…/bin/ansible-playbook'
+               (for-each
+                (lambda (name)
+                  (let ((varname (string-upcase
+                                  (string-map
+                                   (lambda (c) (if (char=? c #\-) #\_ c))
+                                   name))))
+                    (substitute* file
+                      (((string-append "^(" varname " = )'.*'") line prefix)
+                       (string-append prefix "'" (which name) "'")))))
+                '("ansible-playbook" "encfs" "find" "fusermount"
+                  "umount" "gpg" "ansible" "which")))
+             (for-each substitute-program-names
+                       '("bin/debops"
+                         "bin/debops-padlock"
+                         "bin/debops-task"
+                         "debops/__init__.py"
+                         "debops/cmds/__init__.py"))
+             #t)))))
+    (home-page "https://www.debops.org/")
+    (synopsis "Collection of general-purpose Ansible roles")
+    (description "The Ansible roles provided by that can be used to manage
+Debian or Ubuntu hosts.  In addition, a default set of Ansible playbooks can
+be used to apply the provided roles in a controlled way, using Ansible
+inventory groups.
+
+The roles are written with a high customization in mind, which can be done
+using Ansible inventory.  This way the role and playbook code can be shared
+between multiple environments, with different configuration in to each one.
+
+Services can be managed on a single host, or spread between multiple hosts.
+DebOps provides support for different SQL and NoSQL databases, web servers,
+programming languages and specialized applications useful in a data center
+environment or in a cluster.  The project can also be used to deploy
+virtualization environments using KVM/libvirt, Docker or LXC technologies to
+manage virtual machines and/or containers.")
+    (license license:gpl3+)))
+
 (define-public emacs-ansible-doc
   (let ((commit "86083a7bb2ed0468ca64e52076b06441a2f8e9e0"))
     (package
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index b235e1bc78..520728b52c 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -357,7 +357,7 @@ menu to select one of the installed operating systems.")
 (define-public dtc
   (package
     (name "dtc")
-    (version "1.5.0")
+    (version "1.5.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -365,7 +365,7 @@ menu to select one of the installed operating systems.")
                     "dtc-" version ".tar.xz"))
               (sha256
                (base32
-                "0wh10p42hf5403ipvs0dsxddb6kzfyk2sq4fgid9zqzpr51y8wn6"))))
+                "07q3mdsvl4smbiakriq3hnsyyd0q344lsm306q0kgz4hjq1p82v6"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
@@ -379,6 +379,11 @@ menu to select one of the installed operating systems.")
     (arguments
      `(#:make-flags
        (list "CC=gcc"
+
+             ;; /bin/fdt{get,overlay,put} need help finding libfdt.so.1.
+             (string-append "LDFLAGS=-Wl,-rpath="
+                            (assoc-ref %outputs "out") "/lib")
+
              (string-append "PREFIX=" (assoc-ref %outputs "out"))
              (string-append "SETUP_PREFIX=" (assoc-ref %outputs "out"))
              "INSTALL=install")
diff --git a/gnu/packages/cluster.scm b/gnu/packages/cluster.scm
index 8b99a21356..9548352d12 100644
--- a/gnu/packages/cluster.scm
+++ b/gnu/packages/cluster.scm
@@ -35,7 +35,7 @@
 (define-public keepalived
   (package
     (name "keepalived")
-    (version "2.0.5")
+    (version "2.0.18")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -43,7 +43,7 @@
                     version ".tar.gz"))
               (sha256
                (base32
-                "021a7c1lq4aqx7dbwhlm5km6w039hapfzp5hf6wb5bfq79s25g38"))))
+                "1l2g0bzzbah9svfpwa0b9dgvwfv85r2y3qdr54822hg5p2qs48ql"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -52,7 +52,7 @@
            (lambda _
              (invoke "make" "-C" "doc" "texinfo")
              ;; Put images in a subdirectory as recommended by 'texinfo'.
-             (install-file "doc/build/texinfo/software_design.png"
+             (install-file "doc/source/images/software_design.png"
                            "doc/build/texinfo/keepalived-figures")
              (substitute* "doc/build/texinfo/keepalived.texi"
                (("@image\\{software_design,")
@@ -63,7 +63,7 @@
              (let* ((out (assoc-ref outputs "out"))
                     (infodir (string-append out "/share/info")))
                (install-file "doc/build/texinfo/keepalived.info" infodir)
-               (install-file "doc/build/texinfo/software_design.png"
+               (install-file "doc/source/images/software_design.png"
                              (string-append infodir "/keepalived-figures"))
                #t))))))
     (native-inputs
@@ -74,7 +74,7 @@
      `(("openssl" ,openssl)
        ("libnfnetlink" ,libnfnetlink)
        ("libnl" ,libnl)))
-    (home-page "http://www.keepalived.org/")
+    (home-page "https://www.keepalived.org/")
     (synopsis "Load balancing and high-availability frameworks")
     (description
      "Keepalived provides frameworks for both load balancing and high
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 64d995b8fd..c4298c1e95 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -22,7 +22,7 @@
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
-;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2018, 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -48,6 +48,7 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages assembly)
   #:use-module (gnu packages autotools)
@@ -2048,3 +2049,50 @@ external compressors: the compressor to be used for each format is configurable
 at run time, and must be installed separately.")
     (license (list license:bsd-2        ; arg_parser.{cc,h}
                    license:gpl2+))))    ; the rest
+
+(define-public makeself-safeextract
+  (let ((commit "1a95e121fa8e3c02d307ae37b9b7834e616c3683"))
+    (package
+      (name "makeself-safeextract")
+      (version (git-version "0.0.0" "1" commit))
+      (home-page "https://github.com/ssokolow/makeself_safeextract")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url home-page)
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1anlinaj9lvfi8bn00wp11vzqq0f9sig4fm9yrspisx31v0z4a2c"))))
+      (build-system trivial-build-system)
+      (inputs
+       `(("python" ,python-2)
+         ("p7zip" ,p7zip)
+         ("unzip" ,unzip)))
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils))
+           (let* ((name "makeself_safeextract")
+                  (source (string-append (assoc-ref %build-inputs "source")
+                                         "/" name ".py"))
+                  (bin (string-append (assoc-ref %outputs "out") "/bin"))
+                  (target (string-append bin "/" name))
+                  (python (string-append (assoc-ref %build-inputs "python") "/bin"))
+                  (7z (string-append (assoc-ref %build-inputs "p7zip") "/bin/7z"))
+                  (unzip (string-append (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+             (setenv "PATH" (string-append (getenv "PATH") ":" python))
+             (mkdir-p bin)
+             (copy-file source target)
+             (substitute* target
+               (("'7z'") (format #f "'~a'" 7z))
+               (("'unzip'") (format #f "'~a'" unzip)))
+             (patch-shebang target)))))
+      (synopsis "Extract makeself and mojo archives without running untrusted code")
+      (description "This package provides a script to unpack self-extracting
+archives generated by @command{makeself} or @command{mojo} without running the
+possibly untrusted extraction shell script.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index cb0be4aedd..89a581cb5e 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -15610,3 +15610,30 @@ deprecated, and defunct).  It makes it easy to insert badges corresponding to
 these stages in your documentation.  Usage of deprecated functions are
 signalled with increasing levels of non-invasive verbosity.")
     (license license:gpl3)))
+
+(define-public r-assertable
+  (package
+    (name "r-assertable")
+    (version "0.2.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "assertable" version))
+       (sha256
+        (base32
+         "0jjd6ylh26fykzzv1q2lbajzfj07lyxwb3b3xmr2zdg2fp5b2w4c"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-data-table" ,r-data-table)))
+    (home-page "https://cran.r-project.org/web/packages/assertable/")
+    (synopsis "Verbose assertions for tabular data (data.frames and data.tables)")
+    (description "This package provides simple, flexible assertions on
+data.frame or data.table objects with verbose output for vetting.  While other
+assertion packages apply towards more general use-cases, @code{assertable} is
+tailored towards tabular data.  It includes functions to check variable names
+and values, whether the dataset contains all combinations of a given set of
+unique identifiers, and whether it is a certain length.  In addition,
+@code{assertable} includes utility functions to check the existence of target
+files and to efficiently import multiple tabular data files into one
+data.table.")
+    (license license:gpl3)))
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index cf53142533..4de0745190 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -402,7 +402,7 @@ systems.  Output format is completely customizable.")
 (define-public f3
   (package
     (name "f3")
-    (version "7.1")
+    (version "7.2")
     (source
      (origin
       (method git-fetch)
@@ -411,8 +411,7 @@ systems.  Output format is completely customizable.")
             (commit (string-append "v" version))))
       (file-name (git-file-name name version))
       (sha256
-       (base32
-        "0zglsmz683jg7f9wc6vmgljyg9w87pbnjw5x4w6x02w8233zvjqf"))))
+       (base32 "1iwdg0r4wkgc8rynmw1qcqz62l0ldgc8lrazq33msxnk5a818jgy"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
diff --git a/gnu/packages/distributed.scm b/gnu/packages/distributed.scm
new file mode 100644
index 0000000000..0eaa1d8b83
--- /dev/null
+++ b/gnu/packages/distributed.scm
@@ -0,0 +1,95 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Brant Gardner <brantcgardner@brantware.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages distributed)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages wxwidgets)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages sqlite)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz))
+
+(define-public boinc-client
+  (package
+    (name "boinc-client")
+    (version "7.16.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/boinc/boinc.git")
+                    (commit (string-append "client_release/"
+                                           "7.16/"
+                                           version))))
+              (sha256
+               (base32
+                "0w2qimcwyjhapk3z7zyq7jkls23hsnmm35iw7m4s4if04fp70dx0"))))
+    (build-system gnu-build-system)
+    (arguments '(#:configure-flags '("--disable-server")))
+    (inputs `(("openssl" ,openssl)
+              ("curl" ,curl)
+              ("wxwidgets" ,wxwidgets)
+              ("gtk+" ,gtk+)
+              ("gdk-pixbuf" ,gdk-pixbuf)
+              ("libnotify" ,libnotify)
+              ("sqlite" ,sqlite)
+              ("python" ,python)
+              ("python-pyserial" ,python-pyserial)))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
+    (synopsis "BOINC lets you help cutting-edge science research using your computer")
+    (description "BOINC is a platform for high-throughput computing on a large
+scale (thousands or millions of computers).  It can be used for volunteer
+computing (using consumer devices) or grid computing (using organizational
+resources).  It supports virtualized, parallel, and GPU-based applications.
+
+BOINC is distributed under the LGPL open source license.  It can be used for
+commercial purposes, and applications need not be open source.")
+    (home-page "https://boinc.berkeley.edu/")
+    (license license:gpl3+)))
+
+(define-public boinc-server
+  (package (inherit boinc-client)
+    (name "boinc-server")
+    (arguments '(#:configure-flags '("--disable-client" "--disable-manager")
+                 #:parallel-build? #f
+                 #:tests? #f)) ; FIXME: Looks like bad test syntax in the
+                               ; source package, 2 tests fail.  Disable for
+                               ; now.
+    (inputs `(("openssl" ,openssl)
+              ("curl" ,curl)
+              ("mariadb" ,mariadb)
+              ("zlib" ,zlib)))
+    (propagated-inputs `(("python" ,python-wrapper)
+                         ("perl" ,perl)))))
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 488712bd48..2a9abaee36 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -89,6 +89,7 @@
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages code)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages dictionaries)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages gtk)
@@ -771,32 +772,45 @@ supports type hints, definition-jumping, completion, and more.")
       (license license:gpl3+))))
 
 (define-public emacs-flycheck
-  (package
-    (name "emacs-flycheck")
-    (version "31")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/flycheck/flycheck/releases/download/"
-                    version "/flycheck-" version ".tar"))
-              (sha256
-               (base32
-                "01rnwan16m7cyyrfca3c5c60mbj2r3knkpzbhji2fczsf0wns240"))
-              (modules '((guix build utils)))
-              (snippet `(begin
-                          ;; Change 'flycheck-version' so that it does not
-                          ;; attempt to get its version from pkg-info.el.
-                          (substitute* "flycheck.el"
-                            (("\\(pkg-info-version-info 'flycheck\\)")
-                             (string-append "\"" ,version "\"")))
-                          #t))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)))
-    (home-page "https://www.flycheck.org")
-    (synopsis "On-the-fly syntax checking")
-    (description
-     "This package provides on-the-fly syntax checking for GNU Emacs.  It is a
+  ;; last release version was more than 300 commits ago
+  (let ((commit "0006a59259ebd02c9199ddc87f0e3ce22793a2ea")
+        (revision "1"))
+    (package
+      (name "emacs-flycheck")
+      (version (git-version "31" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/flycheck/flycheck/")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "09q3h6ldpg528cfbmsbb1x2vf5hmzgm3fshqn6kdy144jxcdjlf1"))
+                (file-name (git-file-name name version))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)))
+      (native-inputs
+       `(("emacs-shut-up" ,emacs-shut-up)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'change-flycheck-version
+             (lambda _
+               (substitute* "flycheck.el"
+                 (("\\(pkg-info-version-info 'flycheck\\)")
+                  (string-append "\"" ,version "\"")))
+               #t)))
+         ;; TODO: many failing tests
+         #:tests? #f
+         #:test-command '("emacs" "-Q" "--batch" "-L" "."
+                          "--load" "test/flycheck-test"
+                          "--load" "test/run.el"
+                          "-f" "flycheck-run-tests-main")))
+      (home-page "https://www.flycheck.org")
+      (synopsis "On-the-fly syntax checking")
+      (description
+       "This package provides on-the-fly syntax checking for GNU Emacs.  It is a
 replacement for the older Flymake extension which is part of GNU Emacs, with
 many improvements and additional features.
 
@@ -804,7 +818,7 @@ Flycheck provides fully-automatic, fail-safe, on-the-fly background syntax
 checking for over 30 programming and markup languages with more than 70
 different tools.  It highlights errors and warnings inline in the buffer, and
 provides an optional IDE-like error list.")
-    (license license:gpl3+)))                     ;+GFDLv1.3+ for the manual
+      (license license:gpl3+))))                     ;+GFDLv1.3+ for the manual
 
 (define-public emacs-a
   (package
@@ -3079,6 +3093,60 @@ boundaries defined by syntax highlighting.")
 for Flow files.")
       (license license:gpl3+))))
 
+(define-public emacs-flycheck-grammalecte
+  (package
+    (name "emacs-flycheck-grammalecte")
+    (version "0.9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://git.deparis.io/"
+                                  "flycheck-grammalecte/snapshot/"
+                                  "flycheck-grammalecte-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0wjm9xyra870pci4bcrbnc9x66x18mi7iz08rkxa4clxv28xzryb"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:include '("\\.(el|py)$")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-python
+           ;; Hardcode python3 executable in the Emacs library.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((python3 (string-append (assoc-ref inputs "python")
+                                           "/bin/python3")))
+               (substitute* "flycheck-grammalecte.el"
+                 (("python3") python3))
+               #t)))
+         (add-after 'install 'link-to-grammalecte
+           ;; The package expects grammalecte to be in a sub-directory.
+           ;; Symlink it there from the store.
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((grammalecte (assoc-ref inputs "grammalecte"))
+                   (out (assoc-ref outputs "out"))
+                   (version ,(version-major+minor (package-version python))))
+               (with-directory-excursion
+                   (string-append out
+                                  "/share/emacs/site-lisp/guix.d/"
+                                  "flycheck-grammalecte-" ,version)
+                 (symlink (string-append grammalecte "/lib/"
+                                         "python" version "/site-packages/"
+                                         "grammalecte")
+                          "grammalecte"))
+               #t))))))
+    (inputs
+     `(("grammalecte" ,grammalecte)
+       ("python" ,python)))
+    (propagated-inputs
+     `(("emacs-flycheck" ,emacs-flycheck)))
+    (home-page "https://git.deparis.io/flycheck-grammalecte/")
+    (synopsis "Integrate Grammalecte with Flycheck")
+    (description "Integrate the French grammar and typography checker
+Grammalecte with Flycheck to automatically look for mistakes in your writings.
+It also provides an easy way to find synonyms and antonyms for a given
+word (to avoid repetitions for example).")
+    (license license:gpl3+)))
+
 (define-public emacs-elisp-demos
   (package
     (name "emacs-elisp-demos")
@@ -3484,27 +3552,31 @@ for the current function or variable in the minibuffer.")
     (license license:gpl3+)))
 
 (define-public emacs-company-quickhelp
-  (package
-    (name "emacs-company-quickhelp")
-    (version "2.3.0")
-    (source
-     (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/expez/company-quickhelp.git")
-             (commit version)))
-       (file-name (git-file-name name version))
-       (sha256
-        (base32 "08ccsfvwdpzpj0gai3xrdb2bv1nl6myjkxsc5774pbvlq9nkfdvr"))))
-    (build-system emacs-build-system)
-    (propagated-inputs
-     `(("emacs-pos-tip" ,emacs-pos-tip)
-       ("emacs-company" ,emacs-company)))
-    (home-page "https://github.com/expez/company-quickhelp")
-    (synopsis "Popup documentation for completion candidates")
-    (description "@code{company-quickhelp} shows documentation for the
+  ;; XXX: release version 2.3.0 is on an unmaintained branch for some reason,
+  ;; so we use the latest 2.2.0 commit instead
+  (let ((commit "479676cade80a9f03802ca3d956591820ed5c537")
+        (revision "1"))
+    (package
+      (name "emacs-company-quickhelp")
+      (version (git-version "2.2.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/expez/company-quickhelp.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0hbqpnaf4hnin3nmdzmfj3v22kk9a97b6zssqs96ns36d9h52xcp"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-pos-tip" ,emacs-pos-tip)
+         ("emacs-company" ,emacs-company)))
+      (home-page "https://github.com/expez/company-quickhelp")
+      (synopsis "Popup documentation for completion candidates")
+      (description "@code{company-quickhelp} shows documentation for the
 completion candidate when using the Company text completion framework.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
 (define-public emacs-math-symbol-lists
   (let ((commit "dc7531cff0c845d5470a50c24d5d7309b2ced7eb")
@@ -5822,14 +5894,14 @@ provides the following features:
     (name "emacs-markdown-mode")
     (version "2.3")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://raw.githubusercontent.com/jrblevin"
-                                  "/markdown-mode/v" version
-                                  "/markdown-mode.el"))
-              (file-name (string-append "markdown-mode-" version ".el"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/jrblevin/markdown-mode.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "152whyrq3dqlqy5wv4mdd94kmal19hs5kwaxjcp2gp2r97lsmdmi"))))
+                "1zm1j4w0f3h01bmmpsv4j4mh6i13nnl8fcqlj2hsa1ncy1lgi8q7"))))
     (build-system emacs-build-system)
     (home-page "http://jblevins.org/projects/markdown-mode/")
     (synopsis "Emacs Major mode for Markdown files")
@@ -6184,16 +6256,21 @@ completion, interactive development and more.")
     (name "emacs-rainbow-delimiters")
     (version "2.1.3")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://raw.githubusercontent.com/Fanael"
-                                  "/rainbow-delimiters/" version
-                                  "/rainbow-delimiters.el"))
-              (file-name (string-append "rainbow-delimiters-" version ".el"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/Fanael/rainbow-delimiters.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1b3kampwsjabhcqdp0khgff13wc5jqhy3rbvaa12vnv7qy22l9ck"))))
+                "0vs9pf8lqq5p5qz1770pxgw47ym4xj8axxmwamn66br59mykdhv0"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/Fanael/rainbow-delimiters")
+    (arguments
+     `(#:tests? #t
+       #:test-command '("emacs" "-Q" "-batch"
+                        "-l" "rainbow-delimiters-test.el"
+                        "-f" "ert-run-tests-batch-and-exit")))
     (synopsis "Highlight brackets according to their depth")
     (description
      "Rainbow-delimiters is a \"rainbow parentheses\"-like mode for Emacs which
@@ -6342,15 +6419,16 @@ that uses the standard completion function completing-read.")
 (define-public emacs-yaml-mode
   (package
     (name "emacs-yaml-mode")
-    (version "0.0.13")
+    (version "0.0.14")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://raw.githubusercontent.com/yoshiki"
-                                  "/yaml-mode/v" version "/yaml-mode.el"))
-              (file-name (string-append "yaml-mode-" version ".el"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/yoshiki/yaml-mode.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "0im88sk9dqw03x6d6zaspgvg9i0pfpgb8f2zygrmbifh2w4pwmvj"))))
+                "18g064ardqi1f3xz7j6rs1x9fvv9sn0iq9vgid8c6qvxq7gwj00r"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/yoshiki/yaml-mode")
     (synopsis "Major mode for editing YAML files")
@@ -6392,13 +6470,14 @@ via @code{gitlab-ci-lint}.")
     (name "emacs-web-mode")
     (version "16")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://raw.githubusercontent.com/fxbois"
-                                  "/web-mode/v" version "/web-mode.el"))
-              (file-name (string-append "web-mode-" version ".el"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/fxbois/web-mode.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1hs5w7kdvcyn4ihyw1kfjg48djn5p7lz4rlbhzzdqv1g56xqx3gw"))))
+                "17dw6a8d0p304f2sa4f9zwd8r48w2wbkc3fvbmxwlg4w12h7cwf0"))))
     (build-system emacs-build-system)
     (synopsis "Major mode for editing web templates")
     (description "Web-mode is an Emacs major mode for editing web templates
@@ -7094,6 +7173,9 @@ pasting into and from @code{tmux} paste buffers.")
          "1r8shfdddys9vqvrxf7s6z83ydqx9xhqs9sa7klbsajryqcp50b7"))))
     (build-system emacs-build-system)
     (propagated-inputs `(("emacs-evil" ,emacs-evil)))
+    (arguments
+     `(#:tests? #t
+       #:test-command '("make" "test")))
     (home-page "https://github.com/redguardtoo/evil-nerd-commenter")
     (synopsis "Comment and uncomment lines efficiently")
     (description
@@ -7449,42 +7531,75 @@ editing nginx config files.")
     (license license:gpl2+)))
 
 (define-public emacs-stream
-  (package
-    (name "emacs-stream")
-    (version "2.2.0")
-    (home-page "https://github.com/NicolasPetton/stream")
-    (source
-     (origin
-       (method url-fetch)
-       (file-name (string-append name "-" version ".tar.gz"))
-       (uri (string-append home-page "/archive/"version ".tar.gz"))
-       (sha256
-        (base32 "03ql4nqfz5pn55mjly6clhvc3g7x2d28kj7mrlqmigvjbql39xxc"))))
-    (build-system emacs-build-system)
-    (synopsis "Implementation of streams for Emacs")
-    (description "This library provides an implementation of streams for Emacs.
+  (let ((commit "a3f3da155a49c133e2692bd8789b35492bfdc4f7")
+        (revision "1"))
+    (package
+      (name "emacs-stream")
+      (version (git-version "2.2.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/Emacsmirror/stream.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0aig0yjb9z752ijh0mzildjmh44j051inchga8qll01dr8wf7332"))))
+      (build-system emacs-build-system)
+      (arguments
+       `(#:tests? #t
+         #:test-command '("emacs" "--batch"
+                          "-l" "tests/stream-tests.el"
+                          "-f" "ert-run-tests-batch-and-exit")))
+      (home-page "https://github.com/Emacsmirror/stream")
+      (synopsis "Implementation of streams for Emacs")
+      (description "This library provides an implementation of streams for Emacs.
 Streams are implemented as delayed evaluation of cons cells.")
-    (license license:gpl3+)))
+      (license license:gpl3+))))
 
-(define-public emacs-el-search
-  (let ((commit "f26277bfbb3fc3fc74beea6592f294c439796bd4")
+(define-public emacs-cl-print
+  (let ((commit "1a70c553dfb04352afb5b8696fe0cef8acc8f991")
         (revision "1"))
     (package
+      (name "emacs-cl-print")
+      (version (git-version "1.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/emacsmirror/cl-print.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "164zbnsi5mssvcpy0158fm7fw5cmd1r5nkpn29fmd2b2scy3gm79"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/emacsmirror/cl-print")
+      (synopsis "CL-style generic printing")
+      (description "This package provides a generic function,
+@code{cl-print-object}, to which the programmer can add any method they
+please.")
+      (license license:gpl3+))))
+
+(define-public emacs-el-search
+  (let ((commit "07bed84dd8ae9e4c6c648834224b1d33fdbd51e0")
+        (revision "2"))
+    (package
       (name "emacs-el-search")
-      ;; No ufficial release.
-      (version (string-append "0.0-" revision "." (string-take commit 7)))
-      (home-page "https://github.com/emacsmirror/el-search")
+      (version (git-version "1.12.6.1" revision commit))
       (source
        (origin
          (method git-fetch)
-         (file-name (string-append name "-" version ".tar.gz"))
          (uri (git-reference
-               (commit commit)
-               (url (string-append home-page ".git"))))
+               (url "https://github.com/emacsmirror/el-search.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
          (sha256
-          (base32 "12xf40h9sb7xxg2r97gsia94q02543mgiiiw46fzh1ac7b7993g6"))))
+          (base32 "10w1ldgijdhfsrazp0y3bm76jv5wvdn94k1yp0pmc2m1896b58ak"))))
       (build-system emacs-build-system)
-      (inputs `(("emacs-stream" ,emacs-stream)))
+      (inputs
+       `(("emacs-stream" ,emacs-stream)
+         ("emacs-cl-print" ,emacs-cl-print)))
+      (home-page "https://github.com/emacsmirror/el-search")
       (synopsis "Expression based interactive search for emacs-lisp-mode")
       (description "This package provides expression based interactive search
 procedures for emacs-lisp-mode.")
@@ -8604,14 +8719,14 @@ which code derived from Kelvin H's org-page.")
 (define-public emacs-xelb
   (package
     (name "emacs-xelb")
-    (version "0.17")
+    (version "0.18")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.gnu.org/packages/xelb-"
                                   version ".tar"))
               (sha256
                (base32
-                "0k98580vq253fjdgklgqlwl450saninfw39fbq8lv3xsnp3dcgml"))))
+                "1fp5mzl63sh0h3ws4l5p4qgvi7ny8a3fj6k4dhqa98xgw2bx03v7"))))
     (build-system emacs-build-system)
     ;; The following functions and variables needed by emacs-xelb are
     ;; not included in emacs-minimal:
@@ -8643,7 +8758,7 @@ It should enable you to implement low-level X11 applications.")
 (define-public emacs-exwm
   (package
     (name "emacs-exwm")
-    (version "0.22")
+    (version "0.23")
     (synopsis "Emacs X window manager")
     (source (origin
               (method url-fetch)
@@ -8651,7 +8766,7 @@ It should enable you to implement low-level X11 applications.")
                                   version ".tar"))
               (sha256
                (base32
-                "0lppm8ng37i5s4x7xdrxhjbdcnpl6pyvn4g7w52zbckjsn8qnqh0"))))
+                "05w1v3wrp1lzz20zd9lcvr5nhk809kgy6svvkbs15xhnr6x55ad5"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-xelb" ,emacs-xelb)))
@@ -8926,6 +9041,9 @@ pressed simultaneously or a single key quickly pressed twice.")
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-evil" ,emacs-evil)))
+    (arguments
+     `(#:tests? #t
+       #:test-command '("make" "test")))
     (home-page "https://github.com/emacs-evil/evil-surround")
     (synopsis "Easily modify surrounding parentheses and quotes")
     (description "@code{emacs-evil-surround} allows easy deletion, change and
@@ -9794,12 +9912,11 @@ well as Github-style emojis like @code{:smile:}.  It provides a minor mode
     (license license:gpl3+)))
 
 (define-public emacs-make-it-so
-  (let ((commit "bc3b01d6b9ed6ff66ebbd524234f9d6df60dd4be")
-        (version "0.1.0")
-        (revision "1"))
+  (let ((commit "b73dfb640588123c9eece230ad72b37604f5c126")
+        (revision "2"))
     (package
       (name "emacs-make-it-so")
-      (version (git-version version revision commit))
+      (version (git-version "0.1.0" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -9808,7 +9925,7 @@ well as Github-style emojis like @code{:smile:}.  It provides a minor mode
                (commit commit)))
          (sha256
           (base32
-           "0833bzlscpnkvjnrg3g54yr246afbjwri8n5wxk8drnsq6acvd8z"))))
+           "0p6xhyinzzkrwzbpxqfm8hlii0ikvmmylya240bwsa77w0g1k6xq"))))
       (build-system emacs-build-system)
       (arguments
        `(#:include (cons "^recipes/" %default-include)))
@@ -9907,6 +10024,12 @@ database of references on life sciences.")
         (base32
          "1dgrf7na6r6mmkknphzshlbd5fnzisg0qn0j7vfpa38wgsymaq52"))))
     (build-system emacs-build-system)
+    (arguments
+     `(#:tests? #t
+       ;; TODO: also enable websocket-functional-test.el
+       #:test-command '("emacs" "--batch"
+                        "-l" "websocket-test.el"
+                        "-f" "ert-run-tests-batch-and-exit")))
     (home-page "http://elpa.gnu.org/packages/websocket.html")
     (synopsis "Emacs WebSocket client and server")
     (description "This is an Elisp library for WebSocket clients to talk to
@@ -9944,7 +10067,7 @@ value of the access token.")
 (define-public emacs-circe
   (package
     (name "emacs-circe")
-    (version "2.10")
+    (version "2.11")
     (source
      (origin
        (method git-fetch)
@@ -9953,8 +10076,7 @@ value of the access token.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32
-         "10gi14kwxd81blddpvqh95lgmpbfgp0m955naxix3bs3r6a75n4s"))))
+        (base32 "0cr9flk310yn2jgvj4hbqw9nj5wlfi0fazdkqafzidgz6iq150wd"))))
     (build-system emacs-build-system)
     (arguments
      `(#:tests? #t
@@ -10531,7 +10653,7 @@ the format.")
 (define-public emacs-nov-el
   (package
     (name "emacs-nov-el")
-    (version "0.2.6")
+    (version "0.2.9")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -10540,7 +10662,7 @@ the format.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "188h5gzn1zf443g0b7q5bpmvvpr6ds5h8aci8vxc92py56rhyrvc"))))
+                "0v01l1p35mcigixs6j4c5bpc7n7bd51kxa0p3l1xl0gr92774yq3"))))
     (build-system emacs-build-system)
     (arguments
      `(#:phases
@@ -12625,16 +12747,16 @@ powerful Org contents.")
 (define-public emacs-org-re-reveal
   (package
     (name "emacs-org-re-reveal")
-    (version "1.0.3")
+    (version "2.5.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://gitlab.com/oer/org-re-reveal.git")
-                    (commit "50cc6574c77f12d423f6cd096d8f76feb3673abc")))
+                    (commit version)))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1v3z30gpimg4spf6zzqwp9b597zxk89h0vpq6xp58js4rjg4ixk8"))))
+                "1zbz6hbddxbb264ibmhc04cmnpk17kb50jpn5l8878q4hxw5wwy2"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-htmlize" ,emacs-htmlize)
@@ -14067,10 +14189,11 @@ Org-mode file, and citations of Zotero items in Pandoc Markdown files.")
   (deprecated-package "emacs-evil-ediff" emacs-evil-collection))
 
 (define-public emacs-evil-magit
-  (let ((commit "e2fec5877994c0c19f0c25fa01f3d22cb0ab38ba"))
+  (let ((commit "4b66a1db8285457147a5436f209391016a819ea1")
+        (revision "3"))
     (package
       (name "emacs-evil-magit")
-      (version (git-version "0.4.2" "2" commit))
+      (version (git-version "0.4.2" revision commit))
       (source
        (origin
          (method git-fetch)
@@ -14080,11 +14203,17 @@ Org-mode file, and citations of Zotero items in Pandoc Markdown files.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "134v7s03jvbhm70mavwab85r09i68g2a5bvriirh0chz1av2y16v"))))
+           "0kkmbswfh34k3amfl3v140vsnz1gq4n4mg9g4khjd9yjph3zms4h"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-evil" ,emacs-evil)
          ("magit" ,emacs-magit)))
+      (arguments
+       `(#:tests? #t
+         #:test-command '("emacs" "-Q" "-batch"
+                          "-L" "."
+                          "-l" "evil-magit-tests"
+                          "-f" "ert-run-tests-batch-and-exit")))
       (home-page
        "https://github.com/emacs-evil/evil-magit")
       (synopsis "Evil-based key bindings for Magit")
@@ -14727,21 +14856,21 @@ file.")
   (deprecated-package "emacs-wgrep-helm" emacs-wgrep))
 
 (define-public emacs-mu4e-conversation
-  (let ((commit "e7d4bfcb0d392b0aed1f705ccac2419a168d1f5e"))
+  (let ((commit "98110bb9c300fc9866dee8e0023355f9f79c9b96")
+        (revision "5"))
     (package
       (name "emacs-mu4e-conversation")
-      (version (git-version "20181126" "4" commit))
+      (version (git-version "0.0.1" revision commit))
       (source
        (origin
-         (method url-fetch)
-         (uri (string-append
-               "https://gitlab.com/Ambrevar/mu4e-conversation/"
-               "repository/archive.tar.gz?ref="
-               commit))
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.com/Ambrevar/mu4e-conversation.git")
+               (commit commit)))
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0b52hf9rm2afba9pvgink9bwqm705sk0y5qikp0ff5sk53wqvy29"))))
+           "080s96jkcw2p288sp1vgds91rgl693iz6hi2dv56p2ih0nnivwlg"))))
       (build-system emacs-build-system)
       (propagated-inputs
        `(("mu" ,mu)))
@@ -15066,37 +15195,31 @@ files.  It focuses on highlighting the document to improve readability.")
     (license license:gpl2+)))
 
 (define-public emacs-rust-mode
-  (let ((commit
-         ;; Last release is old (2016), use more recent commit to get bug
-         ;; fixes.
-         "64b4a2450e4d4c47f6307851c9b2598cd2254d68")
-        (revision "0"))
-    (package
-      (name "emacs-rust-mode")
-      (version (git-version "0.3.0" revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri
-                 (git-reference
-                  (url "https://github.com/rust-lang/rust-mode")
-                  (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0pbz36lljgb7bdgx3h3g0pq1nss1kvn8mhk1l3mknsmynd6w4nd8"))))
-      (build-system emacs-build-system)
-      (arguments
-       `(#:phases
-         (modify-phases %standard-phases
-           (replace 'check
-             (lambda _
-               (invoke "sh" "run_rust_emacs_tests.sh"))))))
-      (home-page "https://github.com/rust-lang/rust-mode")
-      (synopsis "Major Emacs mode for editing Rust source code")
-      (description "This package provides a major Emacs mode for editing Rust
+  (package
+    (name "emacs-rust-mode")
+    (version "0.4.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rust-lang/rust-mode")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0bcrklyicxh032rrp585rl5mxd26nb61dp6r5bl935rlcmxzsczh"))))
+    (build-system emacs-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "sh" "run_rust_emacs_tests.sh"))))))
+    (home-page "https://github.com/rust-lang/rust-mode")
+    (synopsis "Major Emacs mode for editing Rust source code")
+    (description "This package provides a major Emacs mode for editing Rust
 source code.")
-      (license (list license:expat
-                     license:asl2.0)))))
+    (license (list license:expat
+                   license:asl2.0))))
 
 (define-public emacs-ztree
   (let ((commit "c54425a094353ec40a8179f9eab3596f76c6cf94"))
@@ -15322,10 +15445,11 @@ News homepage.")
       (license license:gpl3))))
 
 (define-public emacs-youtube-dl
-  (let ((commit "7c9d7a7d05b72a7d1b1257a36c5e2b2567b185dd"))
+  (let ((commit "af877b5bc4f01c04fccfa7d47a2c328926f20ef4")
+        (revision "2"))
     (package
       (name "emacs-youtube-dl")
-      (version (git-version "1.0" "1" commit))
+      (version (git-version "1.0" "2" commit))
       (source
        (origin
          (method git-fetch)
@@ -15335,7 +15459,7 @@ News homepage.")
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "0mh4s089a4x8s380agzb2306kdp1hl204px1n5rrrrdcls7imnh6"))))
+           "0zkl9jkjbx0lmp9ylv4rqg1zwqibk053s4rp7s1h0i18nzk7vn8j"))))
       (build-system emacs-build-system)
       (inputs
        `(("youtube-dl" ,youtube-dl)))
@@ -15529,6 +15653,30 @@ as better scaling of and anti aliasing of the icons.")
     (license
      (list license:expat license:gpl3+ license:silofl1.1 license:asl2.0))))
 
+(define-public emacs-wttrin
+  (let ((commit "df5427ce2a5ad4dab652dbb1c4a1834d7ddc2abc")
+        (revision "1"))
+    (package
+      (name "emacs-wttrin")
+      (version (git-version "0.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/bcbcarl/emacs-wttrin.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1ai655f10iayb4vw0ass2j3x83f4vsv90326mnywkzfl3sxd432z"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-xterm-color" ,emacs-xterm-color)))
+      (home-page "https://github.com/bcbcarl/emacs-wttrin")
+      (synopsis "Frontend for weather web service @url{wttr.in}")
+      (description "This package provides local weather information from
+@url{wttr.in}.")
+      (license license:expat))))
+
 (define-public emacs-powerline
   (package
     (name "emacs-powerline")
@@ -16208,6 +16356,32 @@ mode for editing gnuplot scripts.  It provides syntax highlighting,
 indentation and a command to plot the file.")
     (license license:gpl3+)))
 
+(define-public emacs-cmake-font-lock
+  (let ((commit "e0ceaaae19c13b66f781512e3295bfc6707b56f4")
+        (revision "1"))
+    (package
+      (name "emacs-cmake-font-lock")
+      (version (git-version "0.1.5" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/Lindydancer/cmake-font-lock.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "03gsyn95dlmsn15bl353bphi3qy7ccn5bss3f7n97kf38bllh0yf"))))
+      (build-system emacs-build-system)
+      (native-inputs
+       `(("emacs-faceup" ,emacs-faceup)))
+      (arguments
+       `(#:include (cons "^admin\\/" %default-include)))
+      (home-page "https://github.com/Lindydancer/cmake-font-lock")
+      (synopsis "Advanced type-aware syntax-highlighting for CMake")
+      (description "This package highlights function arguments in CMake
+according to their use.")
+      (license license:gpl3+))))
+
 (define-public emacs-dtrt-indent
   (package
     (name "emacs-dtrt-indent")
@@ -16597,10 +16771,10 @@ and code peeking.")
          ("emacs-lsp-mode" ,emacs-lsp-mode)
          ("emacs-dash" ,emacs-dash)))
       (home-page "https://github.com/emacs-lsp/helm-lsp")
-      (synopsis "Convert keyboard macros to Emacs Lisp")
+      (synopsis "Provide LSP-enhanced completion for symbols")
       (description
-       "This package displays keyboard macros or latest interactive commands
-as Emacs Lisp.")
+       "This package provides completion for symbols from workspaces with a
+LSP-compliant server running.")
       (license license:gpl3+))))
 
 (define-public emacs-helm-notmuch
@@ -16997,16 +17171,15 @@ compatible with Emacs' shell modes.")
 
 (define-public emacs-vdiff
   (let ((commit "09e15fc932bfd2febe1d4a65780a532394562b07")
-        (version "0.2.3")
         (revision "1"))
     (package
       (name "emacs-vdiff")
-      (version (git-version version revision commit))
+      (version (git-version "0.2.3" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/justbur/emacs-vdiff/")
+               (url "https://github.com/justbur/emacs-vdiff.git")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
@@ -17015,6 +17188,11 @@ compatible with Emacs' shell modes.")
       (build-system emacs-build-system)
       (propagated-inputs
        `(("emacs-hydra" ,emacs-hydra)))
+      (arguments
+       `(#:tests? #t
+         #:test-command '("emacs" "-Q" "-batch" "-L" "."
+                          "-l" "vdiff-test.el"
+                          "-f" "ert-run-tests-batch-and-exit")))
       (home-page "https://github.com/justbur/emacs-vdiff/")
       (synopsis "Frontend for diffing based on vimdiff")
       (description "This package permits comparisons of two or three buffers
@@ -17404,26 +17582,73 @@ and searching through @code{Ctags} files.")
 copied into @code{org-mode} buffers.")
       (license license:gpl3+))))
 
+(define-public emacs-dash-docs
+  (let ((commit "111fd9b97001f1ad887b45e5308a14ddd68ce70a")
+        (revision "1"))
+    (package
+      (name "emacs-dash-docs")
+      (version (git-version "1.4.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/dash-docs-el/dash-docs.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0sckb7z0ylflva212bns7iq9mfnffgjghi0qspsbfwra35zb9xng"))))
+      (build-system emacs-build-system)
+      (propagated-inputs
+       `(("emacs-async" ,emacs-async)))
+      (native-inputs
+       `(("emacs-undercover" ,emacs-undercover)
+         ("emacs-ert-runner" ,emacs-ert-runner)))
+      (arguments
+       `(#:tests? #t
+         #:test-command '("ert-runner")
+         #:phases
+         ;; this test requires network access, so remove it
+         (modify-phases %standard-phases
+           (add-before 'check 'make-tests-writable
+             (lambda _
+               (make-file-writable "test/dash-docs-test.el")
+               #t))
+           (add-before 'check 'delete-test
+             (lambda _
+               (emacs-batch-edit-file "test/dash-docs-test.el"
+                 `(progn (progn
+                          (goto-char (point-min))
+                          (re-search-forward "ert-deftest dash-docs-official-docsets-test")
+                          (beginning-of-line)
+                          (kill-sexp))
+                         (basic-save-buffer)))
+               #t)))))
+      (home-page "https://github.com/dash-docs-el/dash-docs")
+      (synopsis "Offline documentation browser for APIs using Dash docsets")
+      (description "This package exposes functionality to work with Dash docsets.")
+      (license license:gpl3+))))
+
 (define-public emacs-helm-dash
-  (let ((commit "192b862185df661439a06de644791171e899348a")
-        (version "1.3.0")
-        (revision "18"))
+  (let ((commit "7f853bd34da666f0e9a883011c80f451b06f6c59")
+        (revision "2"))
     (package
       (name "emacs-helm-dash")
-      (version (git-version version revision commit))
+      (version (git-version "1.3.0" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/areina/helm-dash")
+               (url "https://github.com/areina/helm-dash.git")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "06am5vnr4hsxkvh2b8q8kb80y5x1h3qyv7gwggswwhfa7w2vba3w"))))
+           "0r192vzry1212ihabg9pgw9xar8zdgnbgy0vsgvfm8s5wj6ny7jp"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm" ,emacs-helm)))
+       `(("emacs-helm" ,emacs-helm)
+         ("emacs-dash-docs" ,emacs-dash-docs)))
       (home-page "https://github.com/areina/helm-dash")
       (synopsis "Offline documentation browser for APIs using Dash docsets")
       (description "This package uses Helm to install and navigate through
@@ -17431,28 +17656,26 @@ Dash docsets.")
       (license license:gpl3+))))
 
 (define-public emacs-counsel-dash
-  (let ((commit "07fa74a94ff4da5b6c8c4810f5e143e701b480d2")
-        (version "0.1.3")
-        (revision "3"))
+  (let ((commit "24d370be9e94e90d045c49967e19484b9903fce9")
+        (revision "2"))
     (package
       (name "emacs-counsel-dash")
-      (version (git-version version revision commit))
+      (version (git-version "0.1.3" revision commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
-               (url "https://github.com/nathankot/counsel-dash")
+               (url "https://github.com/dash-docs-el/counsel-dash.git")
                (commit commit)))
          (file-name (git-file-name name version))
          (sha256
           (base32
-           "17h2m9zsadq270mkq12kmdzmpbfjiwjbg8n1rg2apqnm1ndgcwf8"))))
+           "18gp7hhgng271c7bh06k9p24zqic0f64j5cicivljmyk9c3nh7an"))))
       (build-system emacs-build-system)
       (propagated-inputs
-       `(("emacs-helm-dash" ,emacs-helm-dash)
-         ("emacs-dash" ,emacs-dash)
+       `(("emacs-dash-docs" ,emacs-dash-docs)
          ("emacs-ivy" ,emacs-ivy)))
-      (home-page "https://github.com/nathankot/counsel-dash")
+      (home-page "https://github.com/dash-docs-el/counsel-dash")
       (synopsis "Offline documentation browser for APIs using Dash docsets")
       (description "This package uses @code{ivy-mode} to install and navigate
 through Dash docsets.")
@@ -17836,27 +18059,24 @@ commands in @code{evil-mode}.")
       (license license:gpl3+))))
 
 (define-public emacs-xterm-color
-  (let ((commit "a452ab38a7cfae97078062ff8885b5d74fd1e5a6")
-        (version "1.8")
-        (revision "1"))
-    (package
-      (name "emacs-xterm-color")
-      (version (git-version version revision commit))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://github.com/atomontage/xterm-color.git")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "02kpajb993yshhjhsizpfcbrcndyzkf4dqfipifhxxng50dhp95i"))
-                (file-name (git-file-name name version))))
-      (build-system emacs-build-system)
-      (home-page "https://github.com/atomontage/xterm-color")
-      (synopsis "ANSI & xterm-256 color text property translator for Emacs")
-      (description "@code{xterm-color.el} is an ANSI control sequence to
+  (package
+    (name "emacs-xterm-color")
+    (version "1.9")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/atomontage/xterm-color.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0i9ivc5xhl5y5v0l18kbhfg8s2abb9zaimyx951b8bc0f5as68xm"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/atomontage/xterm-color")
+    (synopsis "ANSI & xterm-256 color text property translator for Emacs")
+    (description "@code{xterm-color.el} is an ANSI control sequence to
 text-property translator.")
-      (license license:bsd-2))))
+    (license license:bsd-2)))
 
 (define-public emacs-org-noter
   (package
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 1e4c4a0da8..7678f85ddd 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -875,30 +875,31 @@ the Raspberry Pi chip.")
       (description "This package provides @code{gcc} for VideoCore IV,
 the Raspberry Pi chip."))))
 
-(define-public python2-libmpsse
+(define-public python-libmpsse
   (package
-    (name "python2-libmpsse")
-    (version "1.3")
+    (name "python-libmpsse")
+    (version "1.4")
     (source
       (origin
-        (method url-fetch)
-        (uri (string-append "https://storage.googleapis.com/"
-                            "google-code-archive-downloads/v2/"
-                            "code.google.com/libmpsse/"
-                            "libmpsse-" version ".tar.gz"))
+        (method git-fetch)
+        (uri (git-reference
+              (url "https://github.com/daym/libmpsse.git")
+              (commit (string-append "v" version))))
+        (file-name "libmpsse-checkout")
         (sha256
           (base32
-            "0jq7nhqq3na8675jnpfcar3pd3dp3adhhc4lw900swkla01a1wh8"))))
+            "14f1kiiia4kfd9mzwx4h63aa8bpz9aknbrrr7mychnsp3arw0z25"))))
     (build-system gnu-build-system)
     (inputs
      `(("libftdi" ,libftdi)
-       ("python" ,python-2)))
+       ("python" ,python)))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("swig" ,swig)
        ("which" ,base:which)))
     (arguments
      `(#:tests? #f ; No tests exist.
+       #:parallel-build? #f  ; Would be buggy.
        #:make-flags
        (list (string-append "CFLAGS=-Wall -fPIC -fno-strict-aliasing -g -O2 "
                             "$(shell pkg-config --cflags libftdi1)"))
@@ -906,28 +907,20 @@ the Raspberry Pi chip."))))
        (modify-phases %standard-phases
          (add-after 'unpack 'set-environment-up
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (chdir "src")
-             (setenv "PYDEV" (string-append (assoc-ref inputs "python")
-                             "/include/python2.7"))
-             #t))
-         (add-after 'unpack 'patch-global-variable
-           (lambda _
-             ;; fast_rw_buf was defined in a header file which was making
-             ;; the build not reproducible.
-             (substitute* "src/fast.c"
-               (("^int fast_build_block_buffer") "
-
-unsigned char fast_rw_buf[SPI_RW_SIZE + CMD_SIZE];
-int fast_build_block_buffer"))
-             (substitute* "src/mpsse.h"
-               (("unsigned char fast_rw_buf.*") "
-"))
-             #t))
+             (let ((python (assoc-ref inputs "python")))
+               (chdir "src")
+               (setenv "PYDEV" (string-append python
+                               "/include/python"
+                               ,(version-major+minor (package-version python))
+                               "m"))
+               #t)))
          (replace 'install
-           (lambda* (#:key outputs make-flags #:allow-other-keys #:rest args)
+           (lambda* (#:key inputs outputs make-flags #:allow-other-keys #:rest args)
              (let* ((out (assoc-ref outputs "out"))
                     (out-python (string-append out
-                                               "/lib/python2.7/site-packages"))
+                                               "/lib/python"
+                                               ,(version-major+minor (package-version python))
+                                               "/site-packages"))
                     (install (assoc-ref %standard-phases 'install)))
                (install #:make-flags (cons (string-append "PYLIB=" out-python)
                                            make-flags))))))))
@@ -938,6 +931,36 @@ MPSSE (Multi-Protocol Synchronous Serial Engine) adapter by FTDI that can do
 SPI, I2C, JTAG.")
     (license license:gpl2+)))
 
+(define-public python2-libmpsse
+  (package
+    (inherit python-libmpsse)
+    (name "python2-libmpsse")
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-libmpsse)
+      ((#:phases phases)
+       `(modify-phases ,phases
+         (replace 'set-environment-up
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((python (assoc-ref inputs "python")))
+               (chdir "src")
+               (setenv "PYDEV" (string-append python
+                               "/include/python"
+                               ,(version-major+minor (package-version python-2))))
+               #t)))
+         (replace 'install
+           (lambda* (#:key inputs outputs make-flags #:allow-other-keys #:rest args)
+             (let* ((out (assoc-ref outputs "out"))
+                    (out-python (string-append out
+                                               "/lib/python"
+                                               ,(version-major+minor (package-version python-2))
+                                               "/site-packages"))
+                    (install (assoc-ref %standard-phases 'install)))
+               (install #:make-flags (cons (string-append "PYLIB=" out-python)
+                                           make-flags)))))))))
+    (inputs
+     (alist-replace "python" (list python-2)
+                    (package-inputs python-libmpsse)))))
+
 (define-public picprog
   (package
     (name "picprog")
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index bb4c1d26bb..7fc0122faa 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -1137,7 +1137,7 @@ of use.")
        ("libxt" ,libxt)
        ("mygui" ,mygui-gl)              ; OpenMW does not need Ogre.
        ("openal" ,openal)
-       ("openscenegraph" ,openscenegraph)
+       ("openscenegraph" ,openmw-openscenegraph)
        ("qtbase" ,qtbase)
        ("sdl" ,sdl2)
        ("unshield" ,unshield)))
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 09ca77e69b..bb9f897e51 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -937,7 +937,7 @@ map display.  Downloads map data from a number of websites, including
 (define-public xygrib
   (package
     (name "xygrib")
-    (version "1.2.6")
+    (version "1.2.6.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -946,7 +946,7 @@ map display.  Downloads map data from a number of websites, including
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0qzaaavil2c7mkkai5mg54cv8r452i7psy7cg75qjja96d2d7rbd"))
+                "0xzsm8pr0zjk3f8j880fg5n82jyxn8xf1330qmmq1fqv7rsrg9ia"))
               (modules '((guix build utils)))
               (snippet
                '(begin (delete-file-recursively "data/fonts") #t))))
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 9aaeab6e2c..fe895d3840 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,6 +53,7 @@
   #:use-module (gnu packages xorg)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix hg-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system meson)
@@ -809,3 +811,81 @@ applications to 3D accelerator hardware in a dedicated server and displays the
 rendered output interactively to a thin client located elsewhere on the
 network.")
     (license license:wxwindows3.1+)))
+
+(define-public mojoshader
+  (let ((changeset "5887634ea695"))
+    (package
+      (name "mojoshader")
+      (version (string-append "20190825" "-" changeset))
+      (source
+       (origin
+         (method hg-fetch)
+         (uri (hg-reference
+               (url "https://hg.icculus.org/icculus/mojoshader/")
+               (changeset changeset)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0ibl4z1696jiifv9j5drir7jm0b5px0vwkwckbi7cfd46p7p6wcy"))))
+      (arguments
+       ;; Tests only for COMPILER_SUPPORT=ON.
+       `(#:tests? #f
+         #:configure-flags '("-DBUILD_SHARED=ON"
+                             "-DFLIP_VIEWPORT=ON"
+                             "-DDEPTH_CLIPPING=ON")
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (lib (string-append out "/lib"))
+                      (header (string-append out "/include")))
+                 (install-file "libmojoshader.so" lib)
+                 (for-each (lambda (f)
+                             (install-file f header))
+                           (find-files "../source" "mojoshader.*\\.h$"))
+                 (let ((profiles-header (string-append header "/profiles")))
+                   (mkdir-p profiles-header)
+                   (rename-file (string-append header "/mojoshader_profile.h")
+                                (string-append profiles-header "/mojoshader_profile.h"))))
+               #t)))))
+      (build-system cmake-build-system)
+      (home-page "https://www.icculus.org/mojoshader/")
+      (synopsis "Work with Direct3D shaders on alternate 3D APIs")
+      (description "MojoShader is a library to work with Direct3D shaders on
+alternate 3D APIs and non-Windows platforms.  The primary motivation is moving
+shaders to OpenGL languages on the fly.  The developer deals with \"profiles\"
+that represent various target languages, such as GLSL or ARB_*_program.
+
+This allows a developer to manage one set of shaders, presumably written in
+Direct3D HLSL, and use them across multiple rendering backends.  This also
+means that the developer only has to worry about one (offline) compiler to
+manage program complexity, while MojoShader itself deals with the reduced
+complexity of the bytecode at runtime.
+
+MojoShader provides both a simple API to convert bytecode to various profiles,
+and (optionally) basic glue to rendering APIs to abstract the management of
+the shaders at runtime.")
+      (license license:zlib))))
+
+(define-public mojoshader-with-viewport-flip
+  ;; Changeset c586d4590241 replaced glProgramViewportFlip with
+  ;; glProgramViewportInfo.
+  ;; https://hg.icculus.org/icculus/mojoshader/rev/c586d4590241
+  (let ((changeset "2e37299b13d8"))
+    (package
+      (inherit mojoshader)
+      (name "mojoshader-with-viewport-flip")
+      (version (string-append "20190725" "-" changeset))
+      (source
+       (origin
+         (method hg-fetch)
+         (uri (hg-reference
+               (url "https://hg.icculus.org/icculus/mojoshader/")
+               (changeset changeset)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0ffws7cqbskxwc3hjsnnzq4r2bbf008kdr3b11pa3kr7dsi50y6i"))))
+      (synopsis "Work with Direct3D shaders on alternate 3D APIs (with viewport flip)")
+      (description "This is the last version of the mojoshader library with
+the glProgramViewportFlip before it was replaced with glProgramViewportInfo.")
+      (license license:zlib))))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index a2f0f2fd8e..3c2f346837 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2019 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2019 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -974,3 +975,37 @@ safe to use from any GObject-Introspectable language.
 Template-GLib allows you to access properties on GObjects as well as call
 simple methods via GObject-Introspection.")
     (license license:lgpl2.1+)))
+
+(define-public xdg-dbus-proxy
+  (package
+    (name "xdg-dbus-proxy")
+    (version "0.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/flatpak/xdg-dbus-proxy"
+                                  "/releases/download/" version
+                                  "/xdg-dbus-proxy-" version ".tar.xz"))
+              (sha256
+               (base32
+                "03sj1h0c2l08xa8phw013fnxr4fgav7l2mkjhzf9xk3dykwxcj8p"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+
+       ;; For tests.
+       ("dbus" ,dbus)
+
+       ;; These are required to build the manual.
+       ("docbook-xml" ,docbook-xml-4.3)
+       ("docbook-xsl" ,docbook-xsl)
+       ("libxml2" ,libxml2)
+       ("xsltproc" ,libxslt)))
+    (inputs
+     `(("glib" ,glib)))
+    (home-page "https://github.com/flatpak/xdg-dbus-proxy")
+    (synopsis "D-Bus connection proxy")
+    (description
+     "xdg-dbus-proxy is a filtering proxy for D-Bus connections.  It can be
+used to create D-Bus sockets inside a Linux container that forwards requests
+to the host system, optionally with filters applied.")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 1b94b66b51..a4dddb9d34 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -15,6 +15,8 @@
 ;;; Copyright © 2019 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
+;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -326,18 +328,26 @@ many more.")
 (define-public ilmbase
   (package
     (name "ilmbase")
-    (version "2.3.0")
+    (version "2.4.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/openexr/openexr/releases"
-                                  "/download/v" version "/ilmbase-"
-                                  version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/openexr/openexr")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name "ilmbase" version))
               (sha256
                (base32
-                "0qiq5bqq9rxhqjiym2k36sx4vq8adgrz6xf6qwizi9bqm78phsa5"))
-              (patches (search-patches "ilmbase-fix-tests.patch"))))
-    (build-system gnu-build-system)
-    (home-page "http://www.openexr.com/")
+                "0g3rz11cvb7gnphp2np9z7bfl7v4dprq4w5hnsvx7yrasgsdyn8s"))
+              (patches (search-patches "ilmbase-fix-tests.patch"
+                                       "ilmbase-openexr-pkg-config.patch"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'change-directory
+                    (lambda _
+                      (chdir "IlmBase")
+                      #t)))))
+    (home-page "https://www.openexr.com/")
     (synopsis "Utility C++ libraries for threads, maths, and exceptions")
     (description
      "IlmBase provides several utility libraries for C++.  Half is a class
@@ -408,27 +418,26 @@ graphics.")
 (define-public openexr
   (package
     (name "openexr")
-    (version "2.3.0")
+    (version (package-version ilmbase))
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/openexr/openexr/releases"
-                                  "/download/v" version "/openexr-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "19jywbs9qjvsbkvlvzayzi81s976k53wg53vw4xj66lcgylb6v7x"))
+              (inherit (package-source ilmbase))
+              (file-name (git-file-name "openexr" version))
               (modules '((guix build utils)))
               (snippet
                '(begin
-                  (substitute* (find-files "." "tmpDir\\.h")
+                  (substitute* (find-files "OpenEXR" "tmpDir\\.h")
                     (("\"/var/tmp/\"")
                      "\"/tmp/\""))
                   #t))))
-    (build-system gnu-build-system)
+    (build-system cmake-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'disable-broken-test
+         (add-after 'unpack 'change-directory
+           (lambda _
+             (chdir "OpenEXR")
+             #t))
+         (add-after 'change-directory 'disable-broken-test
            ;; This test fails on i686. Upstream developers suggest that
            ;; this test is broken on i686 and can be safely disabled:
            ;; https://github.com/openexr/openexr/issues/67#issuecomment-21169748
@@ -444,7 +453,7 @@ graphics.")
     (propagated-inputs
      `(("ilmbase" ,ilmbase)                       ;used in public headers
        ("zlib" ,zlib)))                           ;OpenEXR.pc reads "-lz"
-    (home-page "http://www.openexr.com")
+    (home-page "https://www.openexr.com/")
     (synopsis "High-dynamic range file format library")
     (description
      "OpenEXR is a high dynamic-range (HDR) image file format developed for
@@ -511,7 +520,7 @@ visual effects work for film.")
 (define-public openscenegraph
   (package
     (name "openscenegraph")
-    (version "3.6.3")
+    (version "3.6.4")
     (source
      (origin
        (method git-fetch)
@@ -520,7 +529,7 @@ visual effects work for film.")
              (commit (string-append "OpenSceneGraph-" version))))
        (sha256
         (base32
-         "0h32z15sa8sbq276j0iib0n707m8bs4p5ji9z2ah411446paad9q"))
+         "0x8hdbzw0b71j91fzp9cwmy9a7ava8v8wwyj8nxijq942vdx1785"))
        (file-name (git-file-name name version))))
     (properties
      `((upstream-name . "OpenSceneGraph")))
@@ -539,6 +548,7 @@ visual effects work for film.")
        ("unzip" ,unzip)))
     (inputs
      `(("giflib" ,giflib)
+       ("libjpeg" ,libjpeg)             ; Required for the JPEG texture plugin.
        ("jasper" ,jasper)
        ("librsvg" ,librsvg)
        ("libxrandr" ,libxrandr)
@@ -580,6 +590,42 @@ virtual reality, scientific visualization and modeling.")
      `(("libjpeg" ,libjpeg)
        ,@(package-inputs openscenegraph)))))
 
+
+(define-public openmw-openscenegraph
+  ;; OpenMW prefers its own fork of openscenegraph:
+  ;; https://wiki.openmw.org/index.php?title=Development_Environment_Setup#OpenSceneGraph.
+  (let ((commit "36a962845a2c87a6671fd822157e0729d164e940"))
+    (hidden-package
+     (package
+       (inherit openscenegraph)
+       (version (git-version "3.6" "1" commit))
+       (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                (url "https://github.com/OpenMW/osg/")
+                (commit commit)))
+          (file-name (git-file-name (package-name openscenegraph) version))
+          (sha256
+           (base32
+            "05yhgq3qm5q277y32n5sf36vx5nv5qd3zlhz4csgd3a6190jrnia"))))
+       (arguments
+        (substitute-keyword-arguments (package-arguments openscenegraph)
+          ((#:configure-flags flags)
+           ;; As per the above wiki link, the following plugins are enough:
+           `(append
+             '("-DBUILD_OSG_PLUGINS_BY_DEFAULT=0"
+               "-DBUILD_OSG_PLUGIN_OSG=1"
+               "-DBUILD_OSG_PLUGIN_DDS=1"
+               "-DBUILD_OSG_PLUGIN_TGA=1"
+               "-DBUILD_OSG_PLUGIN_BMP=1"
+               "-DBUILD_OSG_PLUGIN_JPEG=1"
+               "-DBUILD_OSG_PLUGIN_PNG=1"
+               "-DBUILD_OSG_DEPRECATED_SERIALIZERS=0"
+               ;; The jpeg plugin requires conversion between integers and booleans
+               "-DCMAKE_CXX_FLAGS=-fpermissive")
+             ,flags))))))))
+
 (define-public povray
   (package
     (name "povray")
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 18c567e8b0..1ec161a599 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -286,6 +286,11 @@ developers consider to have good quality code and correct functionality.")
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; XXX: 13 of 53 tests fail
+
+       ;; FIXME: OpenEXR 2.4.0 requires C++ 11 or later.  Remove when the
+       ;; default compiler is >= GCC 5.
+       #:make-flags '("CXXFLAGS=-std=gnu++11")
+
        #:configure-flags
        (list (string-append "--with-html-dir="
                             (assoc-ref %outputs "doc")
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 2736b36a38..43a599b503 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2016, 2019 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2017 David Thompson <davet@gnu.org>
-;;; Copyright © 2017, 2018 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2018, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017 ng0 <ng0@n0.is>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -1024,7 +1024,7 @@ microblogging service.")
 (define-public guile-parted
   (package
     (name "guile-parted")
-    (version "0.0.1")
+    (version "0.0.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1033,7 +1033,7 @@ microblogging service.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1q7425gpjlwi2wvhzq7kw046yyx7v6j6jyzkd1cr861iz34mjwiq"))))
+                "01qmv6xnbbq3wih0dl9bscvca2d7zx7bjiqf35y6dkaqsp8nvdxf"))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags
diff --git a/gnu/packages/haskell-xyz.scm b/gnu/packages/haskell-xyz.scm
index a36451fa8c..2977398880 100644
--- a/gnu/packages/haskell-xyz.scm
+++ b/gnu/packages/haskell-xyz.scm
@@ -62,6 +62,7 @@
   #:use-module (guix build-system haskell)
   #:use-module (guix download)
   #:use-module (guix git-download)
+  #:use-module (guix utils)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages))
 
@@ -6070,6 +6071,24 @@ Megaparsec is a feature-rich package that strikes a nice balance between
 speed, flexibility, and quality of parse errors.")
     (license license:bsd-2)))
 
+;;; Idris 1.3.2 requires 'megaparse>=7.0.4' but we'd like to keep the public
+;;; package at the current Stackage LTS version:
+(define-public ghc-megaparsec-7
+  (hidden-package
+   (package
+     (inherit ghc-megaparsec)
+     (version "7.0.5")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://hackage.haskell.org/package/megaparsec/"
+                            "megaparsec-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0bqx1icbmk8s7wmbcdzsgnlh607c7kzg8l80cp02dxr5valjxp7j"))))
+     (arguments (strip-keyword-arguments (list #:cabal-revision)
+                                         (package-arguments ghc-megaparsec))))))
+
 (define-public ghc-memory
   (package
     (name "ghc-memory")
@@ -6740,6 +6759,24 @@ between 2 and 3 times faster than the Mersenne Twister.")
      "This package provides a low-level networking interface.")
     (license license:bsd-3)))
 
+;;; Until we update our default GHC to >=8.6 we cannot update our ghc-network
+;;; package, since the 'cabal-install' package that supports the current
+;;; 'Cabal' module requires 'network==2.6.*'.  Here we provide an updated
+;;; version to be used for our idris package.
+(define-public ghc-network-2.8
+  (hidden-package
+   (package
+     (inherit ghc-network)
+     (version "2.8.0.1")
+     (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://hackage.haskell.org/package/network/"
+                            "network-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0im8k51rw3ahmr23ny10pshwbz09jfg0fdpam0hzf2hgxnzmvxb1")))))))
+
 (define-public ghc-network-info
   (package
     (name "ghc-network-info")
diff --git a/gnu/packages/idris.scm b/gnu/packages/idris.scm
index 894a19f0aa..7e6ee302b0 100644
--- a/gnu/packages/idris.scm
+++ b/gnu/packages/idris.scm
@@ -38,7 +38,7 @@
 (define-public idris
   (package
     (name "idris")
-    (version "1.3.1")
+    (version "1.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -46,8 +46,7 @@
                     "idris-" version "/idris-" version ".tar.gz"))
               (sha256
                (base32
-                "0fn9h58l592j72njwma1ia48h8h87wi2rjqfxs7j2lfmvgfv18fi"))
-              (patches (search-patches "idris-test-no-node.patch"))))
+                "0wychzkg0yghd2pp8fqz78vp1ayzks191knfpl7mhh8igsmb6bc7"))))
     (build-system haskell-build-system)
     (native-inputs                      ;For tests
      `(("perl" ,perl)
@@ -71,8 +70,8 @@
        ("ghc-fsnotify" ,ghc-fsnotify)
        ("ghc-ieee754" ,ghc-ieee754)
        ("ghc-libffi" ,ghc-libffi)
-       ("ghc-megaparsec" ,ghc-megaparsec)
-       ("ghc-network" ,ghc-network)
+       ("ghc-megaparsec" ,ghc-megaparsec-7)
+       ("ghc-network" ,ghc-network-2.8)
        ("ghc-optparse-applicative" ,ghc-optparse-applicative)
        ("ghc-regex-tdfa" ,ghc-regex-tdfa)
        ("ghc-safe" ,ghc-safe)
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index b3972a2b76..460f35dbae 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -269,6 +269,10 @@ integrates with various databases on GUI toolkits such as Qt and Tk.")
              "-DWITH_CAROTENE=OFF" ; only visible on arm/aarch64
              "-DENABLE_PRECOMPILED_HEADERS=OFF"
 
+             ;; FIXME: OpenEXR requires C++11 or later.  Remove this when
+             ;; the default compiler is GCC 7.
+             "-DCMAKE_CXX_FLAGS=-std=gnu++11"
+
              ;; CPU-Features:
              ;; See cmake/OpenCVCompilerOptimizations.cmake
              ;; (CPU_ALL_OPTIMIZATIONS) for a list of all optimizations
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 7b6c8b3e0b..0026e99f59 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -419,36 +419,66 @@ lossless JPEG manipulations such as rotation, scaling or cropping:
               (patches (search-patches "libjxr-fix-function-signature.patch"
                                        "libjxr-fix-typos.patch"))))
     (build-system gnu-build-system)
-    (arguments '(#:make-flags '("CC=gcc")
-                 #:tests? #f ; no check target
-                 #:phases
-                 (modify-phases %standard-phases
-                   (delete 'configure) ; no configure script
-                   ;; The upstream makefile does not include an install phase.
-                   (replace 'install
-                     (lambda* (#:key outputs #:allow-other-keys)
-                       (let* ((out (assoc-ref outputs "out"))
-                              (bin (string-append out "/bin"))
-                              (lib (string-append out "/lib"))
-                              (include (string-append out "/include/jxrlib")))
-                         (for-each (lambda (file)
-                                     (install-file file include)
-                                     (delete-file file))
-                                   (append
-                                    '("jxrgluelib/JXRGlue.h"
-                                      "jxrgluelib/JXRMeta.h"
-                                      "jxrtestlib/JXRTest.h"
-                                      "image/sys/windowsmediaphoto.h")
-                                    (find-files "common/include" "\\.h$")))
-                         (for-each (lambda (file)
-                                     (install-file file lib)
-                                     (delete-file file))
-                                   (find-files "." "\\.a$"))
-                         (for-each (lambda (file)
-                                     (install-file file bin)
-                                     (delete-file file))
-                                   '("JxrDecApp" "JxrEncApp")))
-                       #t)))))
+    (arguments
+     '(#:make-flags
+       (list "CC=gcc"
+             ;; A substitute* procedure call would be enough to add the -fPIC
+             ;; flag if there was no file decoding error.
+             ;; The makefile is a "Non-ISO extended-ASCII text, with CRLF line
+             ;; terminators" according to the file(1) utility.
+             (string-append "CFLAGS=-I. -Icommon/include -Iimage/sys -fPIC "
+                            "-D__ANSI__ -DDISABLE_PERF_MEASUREMENT -w -O "))
+       #:tests? #f ; no check target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure) ; no configure script
+         (add-after 'build 'build-shared-library
+           (lambda _
+             ;; The Makefile uses optimization level 1, so the same
+             ;; level is used here for consistency.
+             (invoke "gcc" "-shared" "-fPIC" "-O"
+                     ;; Common files.
+                     "adapthuff.o" "image.o" "strcodec.o" "strPredQuant.o"
+                     "strTransform.o" "perfTimerANSI.o"
+                     ;; Decoding files.
+                     "decode.o" "postprocess.o" "segdec.o" "strdec.o"
+                     "strInvTransform.o" "strPredQuantDec.o" "JXRTranscode.o"
+                     ;; Encoding files.
+                     "encode.o" "segenc.o" "strenc.o" "strFwdTransform.o"
+                     "strPredQuantEnc.o"
+                     "-o" "libjpegxr.so")
+             (invoke "gcc" "-shared" "-fPIC" "-O"
+                     ;; Glue files.
+                     "JXRGlue.o" "JXRMeta.o" "JXRGluePFC.o" "JXRGlueJxr.o"
+                     ;; Test files.
+                     "JXRTest.o" "JXRTestBmp.o" "JXRTestHdr.o" "JXRTestPnm.o"
+                     "JXRTestTif.o" "JXRTestYUV.o"
+                     "-o" "libjxrglue.so")))
+         ;; The upstream makefile does not include an install phase.
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lib (string-append out "/lib"))
+                    (include (string-append out "/include/jxrlib")))
+               (for-each (lambda (file)
+                           (install-file file include)
+                           (delete-file file))
+                         (append
+                          '("jxrgluelib/JXRGlue.h"
+                            "jxrgluelib/JXRMeta.h"
+                            "jxrtestlib/JXRTest.h"
+                            "image/sys/windowsmediaphoto.h")
+                          (find-files "common/include" "\\.h$")))
+               (for-each (lambda (file)
+                           (install-file file lib)
+                           (delete-file file))
+                         (find-files "." "\\.(a|so)$"))
+               (for-each (lambda (file)
+                           (install-file file bin)
+                           (delete-file file))
+                         '("JxrDecApp" "JxrEncApp")))
+             #t)))))
     (synopsis "Implementation of the JPEG XR standard")
     (description "JPEG XR is an approved ISO/IEC International standard (its
 official designation is ISO/IEC 29199-2). This library is an implementation of that standard.")
@@ -893,7 +923,7 @@ supplies a generic doubly-linked list and some string functions.")
 (define-public freeimage
   (package
    (name "freeimage")
-   (version "3.17.0")
+   (version "3.18.0")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -903,7 +933,7 @@ supplies a generic doubly-linked list and some string functions.")
                   ".zip"))
             (sha256
              (base32
-              "12bz57asdcfsz3zr9i9nska0fb6h3z2aizy412qjqkixkginbz7v"))
+              "1z9qwi9mlq69d5jipr3v2jika2g0kszqdzilggm99nls5xl7j4zl"))
             (modules '((guix build utils)))
             (snippet
              '(begin
@@ -911,12 +941,8 @@ supplies a generic doubly-linked list and some string functions.")
                   (lambda (dir)
                     (delete-file-recursively (string-append "Source/" dir)))
                   '("LibJPEG" "LibOpenJPEG" "LibPNG" "LibRawLite"
-                    ;; "LibJXR"
-                    "LibWebP" "OpenEXR" "ZLib"))))
-            (patches (search-patches "freeimage-unbundle.patch"
-                                     "freeimage-CVE-2015-0852.patch"
-                                     "freeimage-CVE-2016-5684.patch"
-                                     "freeimage-fix-build-with-gcc-5.patch"))))
+                    "LibJXR" "LibWebP" "OpenEXR" "ZLib"))))
+            (patches (search-patches "freeimage-unbundle.patch"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases
@@ -947,15 +973,18 @@ supplies a generic doubly-linked list and some string functions.")
             ;; We need '-fpermissive' for Source/FreeImage.h.
             ;; libjxr doesn't have a pkg-config file.
             (string-append "CFLAGS+=-O2 -fPIC -fvisibility=hidden -fpermissive "
-                           ;"-I" (assoc-ref %build-inputs "libjxr") "/include/jxrlib"
-                           ))
+                           "-I" (assoc-ref %build-inputs "libjxr") "/include/jxrlib "
+
+                           ;; FIXME: OpenEXR 2.4.0 requires C++11 or later.
+                           ;; Remove when the default compiler is > GCC 5.
+                           "-std=gnu++11"))
       #:tests? #f)) ; no check target
    (native-inputs
     `(("pkg-config" ,pkg-config)
       ("unzip" ,unzip)))
    (inputs
     `(("libjpeg" ,libjpeg)
-      ;("libjxr" ,libjxr)
+      ("libjxr" ,libjxr)
       ("libpng" ,libpng)
       ("libraw" ,libraw)
       ("libtiff" ,libtiff)
diff --git a/gnu/packages/license.scm b/gnu/packages/license.scm
index 4003c18aca..82dbd2dba1 100644
--- a/gnu/packages/license.scm
+++ b/gnu/packages/license.scm
@@ -18,13 +18,13 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages license)
-  #:use-module (guix licenses)
   #:use-module (gnu packages)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system perl)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages perl-check))
+  #:use-module (gnu packages perl-check)
+  #:use-module (guix build-system perl)
+  #:use-module (guix download)
+  #:use-module (guix licenses)
+  #:use-module (guix packages))
 
 ;;;
 ;;; Please: Try to add new module packages in alphabetic order.
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index e13cd4a07e..f517197021 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -181,33 +181,33 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
 
 (define deblob-scripts-5.2
   (linux-libre-deblob-scripts
-   "5.2.10"
+   "5.2.17"
    (base32 "076fwxlm6jq6z4vg1xq3kr474zz7qk71r90sf9dnfia3rw2pb4fa")
    (base32 "0d3pp1bqchqc7vnxr1a56km5r0hzjiiipzz2xc3wgjwfi51k9kxc")))
 
 (define deblob-scripts-4.19
   (linux-libre-deblob-scripts
-   "4.19.68"
+   "4.19.75"
    (base32 "02zs405awaxydbapka4nz8h6lmnc0dahgczqsrs5s2bmzjyyqkcy")
    (base32 "1fyacg28aym6virxyn7wk99qil2fjbks3iwm7p3hxy51pccn34za")))
 
 (define deblob-scripts-4.14
   (linux-libre-deblob-scripts
-   "4.14.140"
+   "4.14.146"
    (base32 "091jk9jkn9jf39bxpc7395bhcb7p96nkg3a8047380ki06lnfxh6")
    (base32 "0x9nd3hnyrm753cbgdqmy92mbnyw86w64g4hvyibnkpq5n7s3z9n")))
 
 (define deblob-scripts-4.9
   (linux-libre-deblob-scripts
-   "4.9.190"
+   "4.9.194"
    (base32 "1wvldzlv7q2xdbadas87dh593nxr4a8p5n0f8zpm72lja6w18hmg")
    (base32 "0is8gn4qdd7h5l6lacvhqdch26lmrbgxfm8ab7fx8n85ha7y358w")))
 
 (define deblob-scripts-4.4
   (linux-libre-deblob-scripts
-   "4.4.190"
+   "4.4.194"
    (base32 "0x2j1i88am54ih2mk7gyl79g25l9zz4r08xhl482l3fvjj2irwbw")
-   (base32 "1x40lbiaizksy8z38ax7wpqr9ldgq7qvkxbb0ca98vd1axpklb10")))
+   (base32 "12ac4g3ky8yma8sylmxvvysqvd4hnaqjiwmxrxb6wlxggfd7zkbx")))
 
 (define* (computed-origin-method gexp-promise hash-algo hash
                                  #:optional (name "source")
@@ -349,42 +349,42 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
                         "linux-" version ".tar.xz"))
     (sha256 hash)))
 
-(define-public linux-libre-5.2-version "5.2.16")
+(define-public linux-libre-5.2-version "5.2.17")
 (define-public linux-libre-5.2-pristine-source
   (let ((version linux-libre-5.2-version)
-        (hash (base32 "0xg5jnkmc7b552jrhi200ck7q4hql3az2fpjfwxj3ay8xp4n280c")))
+        (hash (base32 "1y9d218w83qgd6wima6h6n4zbj1rxz15yb6hdlhv8dm9kv88lfvv")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.2)))
 
-(define-public linux-libre-4.19-version "4.19.71")
+(define-public linux-libre-4.19-version "4.19.75")
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "1bjwkb7k82l646ryyy0jbwsnygm2qsxgcwli8bdrj844skzynlqz")))
+        (hash (base32 "0y0vcmxyfg98mm63vaqq6n2bmxkbmrnvigm5zdh1al74w53p2pnx")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
 
-(define-public linux-libre-4.14-version "4.14.142")
+(define-public linux-libre-4.14-version "4.14.146")
 (define-public linux-libre-4.14-pristine-source
   (let ((version linux-libre-4.14-version)
-        (hash (base32 "1wwhnm1n1b6yzsd2zzzf9i3n4hlvgnph70p67cwahw0ik4ssayz6")))
+        (hash (base32 "1x9343pvlxdgx0zbsn12mcfhf6r8d9p57h6l5cw7krm3gs44pid3")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.14)))
 
-(define-public linux-libre-4.9-version "4.9.191")
+(define-public linux-libre-4.9-version "4.9.194")
 (define-public linux-libre-4.9-pristine-source
   (let ((version linux-libre-4.9-version)
-        (hash (base32 "1g5p736p8zx5rmxaj56yw93jp768npl868jsn8973dny0rsbim6y")))
+        (hash (base32 "1qy20vw5bhnsfbh95sdhjbk6y94js8m4ryd3m7xg2qg4hisvpx6m")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.9)))
 
-(define-public linux-libre-4.4-version "4.4.191")
+(define-public linux-libre-4.4-version "4.4.194")
 (define-public linux-libre-4.4-pristine-source
   (let ((version linux-libre-4.4-version)
-        (hash (base32 "0x3lnq4xyj5v6r1cz4jizm4vdspws1nb806f5qczwi3yil5nm6bh")))
+        (hash (base32 "0kvlp2v4nvkilaanhpgwf8dkyfj24msaw0m38rbc4y51y69yhqvz")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.4)))
@@ -1701,7 +1701,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
 (define-public iproute
   (package
     (name "iproute2")
-    (version "5.2.0")
+    (version "5.3.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1709,7 +1709,7 @@ that the Ethernet protocol is much simpler than the IP protocol.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "1a2dywa2kam24951byv9pl32mb9z6klh7d4vp8fwfgrm4vn5vfd5"))))
+                "0gvv269wjn4279hxr5zzwsk2c5qgswr47za3hm1x4frsk52iw76b"))))
     (build-system gnu-build-system)
     (arguments
      `( ;; There is a test suite, but it wants network namespaces and sudo.
@@ -1734,7 +1734,8 @@ that the Ethernet protocol is much simpler than the IP protocol.")
                       #t)))))
     (inputs
      `(("db4" ,bdb)
-       ("iptables" ,iptables)))
+       ("iptables" ,iptables)
+       ("libmnl" ,libmnl)))
     (native-inputs
      `(("bison" ,bison)
        ("flex" ,flex)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 811a25f380..ef50dfcded 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -3552,15 +3552,15 @@ Failure to do so will result in a library with poor performance.")
 (define-public glm
   (package
     (name "glm")
-    (version "0.9.9.5")
+    (version "0.9.9.6")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/g-truc/glm/releases/download/"
                            version  "/glm-" version ".zip"))
        (sha256
-        (base32
-         "1vmg7hb4xvsa77zpbwiw6lqc7pyaj56dihx6xriny5b9rrh4iqsg"))))
+        (base32 "1l0pi1qi37mk6s0yrkrw07lspv4gcqnr9ryg3521hrl77ff37dwx"))
+       (patches (search-patches "glm-restore-install-target.patch"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("unzip" ,unzip)))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 1f6835f66c..d141be75ea 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -2810,14 +2810,13 @@ Songs can be searched by artist, name or even by a part of the song text.")
 (define-public beets
   (package
     (name "beets")
-    (version "1.4.7")
+    (version "1.4.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "beets" version))
-              (patches (search-patches "beets-python-3.7-fix.patch"))
               (sha256
                (base32
-                "0w3gz69s9gf5ih69d4sddgh7ndj7658m621bp742zldvjakdncrs"))))
+                "0m40rjimvfgy1dv04p8f8d5dvi2855v4ix99a9xr900cmcn476yj"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2826,12 +2825,6 @@ Songs can be searched by artist, name or even by a part of the song text.")
            (lambda _
              (setenv "HOME" (string-append (getcwd) "/tmp"))
              #t))
-         (add-after 'unpack 'make-python3.7-compatible
-           (lambda _
-             ;; See <https://github.com/beetbox/beets/issues/2978>.
-             (substitute* "beets/autotag/hooks.py"
-              (("re\\._pattern_type") "re.Pattern"))
-             #t))
          (replace 'check
            (lambda _
              (invoke "nosetests" "-v"))))))
@@ -2855,7 +2848,7 @@ Songs can be searched by artist, name or even by a part of the song text.")
        ("python-mutagen" ,python-mutagen)
        ("python-pyyaml" ,python-pyyaml)
        ("python-unidecode" ,python-unidecode)))
-    (home-page "http://beets.io")
+    (home-page "https://beets.io")
     (synopsis "Music organizer")
     (description "The purpose of beets is to get your music collection right
 once and for all.  It catalogs your collection, automatically improving its
@@ -4531,7 +4524,7 @@ controller.")
 (define-public fmit
   (package
     (name "fmit")
-    (version "1.2.6")
+    (version "1.2.13")
     (source (origin
 	      (method git-fetch)
 	      (uri (git-reference
@@ -4540,7 +4533,7 @@ controller.")
               (file-name (git-file-name name version))
 	      (sha256
                (base32
-                "03nzkig5mw2rqwhwmg0qvc5cnk9bwh2wp13jh0mdrr935w0587mz"))))
+                "1qyskam053pvlap1av80rgp12pzhr92rs88vqs6s0ia3ypnixcc6"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index bfa901a84e..e49922a523 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -418,14 +418,14 @@ receiving NDP messages.")
 (define-public ethtool
   (package
     (name "ethtool")
-    (version "4.19")
+    (version "5.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/software/network/"
                                   "ethtool/ethtool-" version ".tar.xz"))
               (sha256
                (base32
-                "1j6hyr809af2m3gqm11hdfwks5kljqy1ikspq3d9rhj29qv6r2mi"))))
+                "1i14zrg4a84zjpwvqi8an0zx0hm06g614a79zc2syrkhrvdw1npk"))))
     (build-system gnu-build-system)
     (home-page "https://www.kernel.org/pub/software/network/ethtool/")
     (synopsis "Display or change Ethernet device settings")
@@ -1584,7 +1584,7 @@ procedure calls (RPCs).")
 (define-public openvswitch
   (package
     (name "openvswitch")
-    (version "2.11.1")
+    (version "2.12.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1592,7 +1592,7 @@ procedure calls (RPCs).")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1p5mv44jaslvrr1ym15smqna19y0gi4vqcsyj58625vv9bj6laf1"))))
+                "1y78ix5inhhcvicbvyy2ij38am1215nr55vydhab3d4065q45z8k"))))
     (build-system gnu-build-system)
     (arguments
      '(;; FIXME: many tests fail with:
diff --git a/gnu/packages/patches/beets-python-3.7-fix.patch b/gnu/packages/patches/beets-python-3.7-fix.patch
deleted file mode 100644
index 43707cd9d0..0000000000
--- a/gnu/packages/patches/beets-python-3.7-fix.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-Fix compatibility issue with Python 3.7:
-
-https://github.com/beetbox/beets/issues/2978
-
-Patch copied from upstream source repository:
-
-https://github.com/beetbox/beets/commit/15d44f02a391764da1ce1f239caef819f08beed8
-
-From 15d44f02a391764da1ce1f239caef819f08beed8 Mon Sep 17 00:00:00 2001
-From: Adrian Sampson <adrian@radbox.org>
-Date: Sun, 22 Jul 2018 12:34:19 -0400
-Subject: [PATCH] Fix Python 3.7 compatibility (#2978)
-
----
- beets/autotag/hooks.py | 8 +++++++-
- docs/changelog.rst     | 2 ++
- 2 files changed, 9 insertions(+), 1 deletion(-)
-
-diff --git a/beets/autotag/hooks.py b/beets/autotag/hooks.py
-index 3615a9333..1c62a54c5 100644
---- a/beets/autotag/hooks.py
-+++ b/beets/autotag/hooks.py
-@@ -31,6 +31,12 @@
- 
- log = logging.getLogger('beets')
- 
-+# The name of the type for patterns in re changed in Python 3.7.
-+try:
-+    Pattern = re._pattern_type
-+except AttributeError:
-+    Pattern = re.Pattern
-+
- 
- # Classes used to represent candidate options.
- 
-@@ -433,7 +439,7 @@ def _eq(self, value1, value2):
-         be a compiled regular expression, in which case it will be
-         matched against `value2`.
-         """
--        if isinstance(value1, re._pattern_type):
-+        if isinstance(value1, Pattern):
-             return bool(value1.match(value2))
-         return value1 == value2
- 
-#diff --git a/docs/changelog.rst b/docs/changelog.rst
-#index be6de2904..d487f31f5 100644
-#--- a/docs/changelog.rst
-#+++ b/docs/changelog.rst
-#@@ -19,6 +19,8 @@ New features:
-# 
-# Fixes:
-# 
-#+* Fix compatibility Python 3.7 and its change to a name in the ``re`` module.
-#+  :bug:`2978`
-# * R128 normalization tags are now properly deleted from files when the values
-#   are missing.
-#   Thanks to :user:`autrimpo`.
diff --git a/gnu/packages/patches/debops-constants-for-external-program-names.patch b/gnu/packages/patches/debops-constants-for-external-program-names.patch
new file mode 100644
index 0000000000..b3b34ed323
--- /dev/null
+++ b/gnu/packages/patches/debops-constants-for-external-program-names.patch
@@ -0,0 +1,276 @@
+From 78d5cddafebb28e2e54efeb781495b5607ddb356 Mon Sep 17 00:00:00 2001
+From: Hartmut Goebel <h.goebel@crazy-compilers.com>
+Date: Thu, 8 Aug 2019 15:19:48 +0200
+Subject: [PATCH] Scripts: Use constants for external program names.
+
+This makes it much, much easier to replace the program
+with one using an absolute path. This is necessary for
+e.g. Guix to keep references to these external programs.
+---
+ bin/debops              | 10 +++++++---
+ bin/debops-padlock      | 21 +++++++++++++++------
+ bin/debops-task         |  7 +++++--
+ bin/debops-update       | 18 +++++++++++-------
+ debops/__init__.py      | 17 ++++++++++++-----
+ debops/cmds/__init__.py |  6 +++++-
+ 6 files changed, 55 insertions(+), 24 deletions(-)
+
+diff --git a/bin/debops b/bin/debops
+index 2b7ad3f88..caaeb892f 100755
+--- a/bin/debops
++++ b/bin/debops
+@@ -59,6 +59,10 @@ ConfigFileHeader = """\
+ # You can manipulate the contents of this file via `.debops.cfg`.
+ """
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ANSIBLE_PLAYBOOK = 'ansible-playbook'
++
+ 
+ def write_config(filename, config):
+     cfgparser = configparser.ConfigParser()
+@@ -131,7 +135,7 @@ def gen_ansible_cfg(filename, config, project_root, playbooks_path,
+             os.path.join(playbooks_path, "roles"),
+             "/etc/ansible/roles")))
+ 
+-    ansible_version_out = subprocess.check_output(["ansible-playbook",
++    ansible_version_out = subprocess.check_output([ANSIBLE_PLAYBOOK,
+                                                    "--version"]).decode()
+ 
+     # Get first line and split by spaces to get second 'word'.
+@@ -197,7 +201,7 @@ def main(cmd_args):
+         playbooks_path = '/nonexistent'
+ 
+     # Make sure required commands are present
+-    require_commands('ansible-playbook')
++    require_commands(ANSIBLE_PLAYBOOK)
+ 
+     # Check if user specified a potential playbook name as the first
+     # argument. If yes, use it as the playbook name and remove it from
+@@ -256,7 +260,7 @@ def main(cmd_args):
+         print("Running Ansible playbooks:")
+         for element in play_list:
+             print(element)
+-        return subprocess.call(['ansible-playbook'] + play_list + arg_list)
++        return subprocess.call([ANSIBLE_PLAYBOOK] + play_list + arg_list)
+     finally:
+         if revert_unlock:
+             padlock_lock(encfs_encrypted)
+diff --git a/bin/debops-padlock b/bin/debops-padlock
+index bfdfb8e06..2a97716cd 100755
+--- a/bin/debops-padlock
++++ b/bin/debops-padlock
+@@ -67,6 +67,14 @@ devrandom = os.environ.get('DEVRANDOM', "/dev/urandom")
+ 
+ SCRIPT_FILENAME = 'padlock-script'
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ENCFS = 'encfs'
++FIND = 'find'
++FUSERMOUNT = 'fusermount'
++UMOUNT = 'umount'
++GPG = 'gpg'
++
+ # ---- DebOps environment setup ----
+ 
+ 
+@@ -80,9 +88,9 @@ def main(subcommand_func, **kwargs):
+     # Make sure required commands are present
+     # OS X compatibility
+     if sys.platform == 'darwin':
+-        require_commands('encfs', 'find', 'umount', 'gpg')
++        require_commands(ENCFS, FIND, UMOUNT, GPG)
+     else:
+-        require_commands('encfs', 'find', 'fusermount', 'gpg')
++        require_commands(ENCFS, FIND, FUSERMOUNT, GPG)
+ 
+     inventory_path = find_inventorypath(project_root, required=False)
+     # If inventory hasn't been found automatically, assume it's the default
+@@ -121,7 +129,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients):
+     # Generate a random password and encrypt it with GPG keys of recipients.
+     print("Generating a random", ENCFS_KEYFILE_LENGTH, "char password")
+     pwd = gen_pwd()
+-    gpg = subprocess.Popen(['gpg', '--encrypt', '--armor',
++    gpg = subprocess.Popen([GPG, '--encrypt', '--armor',
+                             '--output', encfs_keyfile] + recipients,
+                            stdin=subprocess.PIPE)
+     gpg.communicate(pwd.encode('utf-8'))
+@@ -133,9 +141,10 @@ def init(encfs_decrypted, encfs_encrypted, recipients):
+     # NB2: We can not use padlock_unlock here, because the config file
+     # does not yet exist.
+     encfs = subprocess.Popen([
+-        'encfs', encfs_encrypted, encfs_decrypted,
++        ENCFS, encfs_encrypted, encfs_decrypted,
+         '--extpass',
+-        'gpg --decrypt --no-mdc-warning --output - '+shquote(encfs_keyfile)],
++        GPG + ' --decrypt --no-mdc-warning --output - '
++        + shquote(encfs_keyfile)],
+         stdin=subprocess.PIPE)
+     encfs.communicate(('p\n'+pwd).encode('utf-8'))
+ 
+@@ -154,7 +163,7 @@ def init(encfs_decrypted, encfs_encrypted, recipients):
+ 
+     # Protect the EncFS configuration file by also encrypting it with
+     # the GPG keys of recipients.
+-    subprocess.call(['gpg', '--encrypt', '--armor',
++    subprocess.call([GPG, '--encrypt', '--armor',
+                      '--output', encfs_configfile+'.asc']
+                     + recipients + [encfs_configfile])
+     os.remove(encfs_configfile)
+diff --git a/bin/debops-task b/bin/debops-task
+index 223e5f834..dc31ad4e6 100755
+--- a/bin/debops-task
++++ b/bin/debops-task
+@@ -49,11 +49,14 @@ project_root = find_debops_project(required=True)
+ # todo: need to decide on semantics!
+ # config = read_config(project_root)
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ANSIBLE = 'ansible'
+ 
+ # ---- Main script ----
+ 
+ # Make sure required commands are present
+-require_commands('ansible')
++require_commands(ANSIBLE)
+ 
+ ansible_inventory = find_inventorypath(project_root)
+ 
+@@ -71,5 +74,5 @@ if INSECURE:
+     os.environ['ANSIBLE_HOST_KEY_CHECKING'] = 'False'
+ 
+ # Run ansible with custom environment
+-cmd = ['ansible'] + module + sys.argv[1:]
++cmd = [ANSIBLE] + module + sys.argv[1:]
+ subprocess.call(cmd)
+diff --git a/bin/debops-update b/bin/debops-update
+index 88c5e2c82..cc7e57cb0 100755
+--- a/bin/debops-update
++++ b/bin/debops-update
+@@ -90,6 +90,10 @@ GALAXY_REQUIREMENTS = "galaxy/requirements.txt"
+ # Default Ansible Galaxy user account name
+ GALAXY_ACCOUNT = "debops"
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++GIT = 'git'
++
+ 
+ # ---- Functions ----
+ 
+@@ -137,7 +141,7 @@ def clone_git_repository(repo_uri, branch, destination, dry_run=False):
+     if dry_run:
+         print("Cloning '%s' to %s..." % (repo_uri, destination))
+     else:
+-        subprocess.call(['git', 'clone', '--quiet', '--branch', branch,
++        subprocess.call([GIT, 'clone', '--quiet', '--branch', branch,
+                          repo_uri, destination])
+ 
+ 
+@@ -152,22 +156,22 @@ def update_git_repository(path, dry_run=False, remote_uri=False):
+     os.chdir(path)
+ 
+     if dry_run:
+-        subprocess.call(['git', 'fetch'])
+-        subprocess.call(['git', 'diff', 'HEAD', 'origin', '--stat'])
++        subprocess.call([GIT, 'fetch'])
++        subprocess.call([GIT, 'diff', 'HEAD', 'origin', '--stat'])
+     else:
+         # Get the current sha of the head branch
+         current_sha = subprocess.check_output(
+-                ['git', 'rev-parse', 'HEAD']).strip()
++                [GIT, 'rev-parse', 'HEAD']).strip()
+ 
+         # Fetch it silently and store the new sha
+-        subprocess.call(['git', 'fetch', '--quiet'])
++        subprocess.call([GIT, 'fetch', '--quiet'])
+         fetch_sha = subprocess.check_output(
+-                ['git', 'rev-parse', 'FETCH_HEAD']).strip()
++                [GIT, 'rev-parse', 'FETCH_HEAD']).strip()
+ 
+         if current_sha != fetch_sha:
+             print()
+             print('--')
+-            subprocess.call(['git', 'merge', fetch_sha])
++            subprocess.call([GIT, 'merge', fetch_sha])
+ 
+             if remote_uri:
+                 compare_uri = (remote_uri + '/compare/' + current_sha[:7]
+diff --git a/debops/__init__.py b/debops/__init__.py
+index 1c2cedcb0..da8430e41 100644
+--- a/debops/__init__.py
++++ b/debops/__init__.py
+@@ -93,6 +93,13 @@ ENCFS_KEYFILE = ".encfs6.keyfile"
+ # Length of the random EncFS password stored in encrypted keyfile
+ ENCFS_KEYFILE_LENGTH = 256
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++ENCFS = 'encfs'
++FUSERMOUNT = 'fusermount'
++UMOUNT = 'umount'
++GPG = 'gpg'
++
+ 
+ # ---- Functions ----
+ 
+@@ -180,9 +187,9 @@ def padlock_lock(encrypted_path):
+         return False
+     # OS X compatibility
+     if sys.platform == 'darwin':
+-        subprocess.call(['umount', decrypted_path])
++        subprocess.call([UMOUNT, decrypted_path])
+     else:
+-        subprocess.call(['fusermount', '-u', decrypted_path])
++        subprocess.call([FUSERMOUNT, '-u', decrypted_path])
+     return True
+ 
+ 
+@@ -237,14 +244,14 @@ def padlock_unlock(encrypted_path):
+     # Start encfs. It will wait for input on the `configfile` named
+     # pipe.
+     encfs = subprocess.Popen([
+-        'encfs', encrypted_path, decrypted_path,
++        ENCFS, encrypted_path, decrypted_path,
+         '--extpass',
+-        'gpg --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)])
++        GPG + ' --decrypt --no-mdc-warning --output - %s' % shquote(keyfile)])
+     # now decrypt the config and write it into the named pipe
+     with open(configfile, 'w') as fh:
+         # NB: gpg must write to stdout to avoid it is asking whether
+         # the file should be overwritten
+-        subprocess.Popen(['gpg',
++        subprocess.Popen([GPG,
+                           '--decrypt', '--no-mdc-warning', '--output', '-',
+                           crypted_configfile], stdout=fh).wait()
+     encfs.wait()
+diff --git a/debops/cmds/__init__.py b/debops/cmds/__init__.py
+index b221fa191..9fabf43a5 100644
+--- a/debops/cmds/__init__.py
++++ b/debops/cmds/__init__.py
+@@ -55,6 +55,10 @@ SCRIPT_NAME = os.path.basename(sys.argv[0])
+ # command line)
+ INSECURE = bool(os.environ.get('INSECURE', False))
+ 
++# External programms used. List here for easy substitution for
++# hard-coded paths.
++WHICH = 'which'
++
+ 
+ def error_msg(message, severity="Error"):
+     """
+@@ -70,7 +74,7 @@ def require_commands(*cmd_names):
+     Check if required commands exist.
+     """
+     def command_exists(cmd_name):
+-        which = "where" if platform.system() == "Windows" else "which"
++        which = "where" if platform.system() == "Windows" else WHICH
+         return not subprocess.call([which, cmd_name],
+                                    stdout=DEVNULL, stderr=subprocess.STDOUT)
+ 
+-- 
+2.21.0
+
diff --git a/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch b/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch
new file mode 100644
index 0000000000..bbb6b7c08e
--- /dev/null
+++ b/gnu/packages/patches/debops-debops-defaults-fall-back-to-less.patch
@@ -0,0 +1,45 @@
+From 5059daf8bd59a83f520c14731173ea76ce8b8661 Mon Sep 17 00:00:00 2001
+From: Hartmut Goebel <h.goebel@crazy-compilers.com>
+Date: Sun, 8 Sep 2019 13:09:15 +0200
+Subject: [PATCH] [debops-defaults] If `view` is not available, try less, etc.
+
+---
+ bin/debops-defaults | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+diff --git a/bin/debops-defaults b/bin/debops-defaults
+index 9dd87fe0a..3e3db4c41 100755
+--- a/bin/debops-defaults
++++ b/bin/debops-defaults
+@@ -96,13 +96,22 @@ def main(role_list):
+     config = read_config(project_root)
+     playbooks_path = find_playbookpath(config, project_root, required=True)
+ 
+-    # Make sure required commands are present
+-    require_commands('view')
+-
+-    if sys.stdout.isatty():
++    # Check if one of the output commands is present
++    sys.stdout = io.BytesIO()  # suppress error message, if any
++    for cmd_args in (('view', '+set ft=yaml', '-'),
++                     ('less', '-'),
++                     ('more', '-')):
++        try:
++            require_commands(cmd_args[0])
++            break
++        except SystemExit:
++            # this command was not found
++            cmd_args = None
++    sys.stdout = sys.__stdout__
++
++    if cmd_args and sys.stdout.isatty():
+         # if script is run as standalone, redirect to view
+-        view = subprocess.Popen(['view', '+set ft=yaml', '-'],
+-                                stdin=subprocess.PIPE)
++        view = subprocess.Popen(cmd_args, stdin=subprocess.PIPE)
+         try:
+             aggregate_defaults(playbooks_path, role_list, view.stdin)
+         except IOError as e:
+-- 
+2.21.0
+
diff --git a/gnu/packages/patches/freeimage-CVE-2015-0852.patch b/gnu/packages/patches/freeimage-CVE-2015-0852.patch
deleted file mode 100644
index 34d538e925..0000000000
--- a/gnu/packages/patches/freeimage-CVE-2015-0852.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-Copied from Debian.
-
-Description: fix integer overflow
-Origin: upstream
- http://freeimage.cvs.sourceforge.net/viewvc/freeimage/FreeImage/Source/FreeImage/PluginPCX.cpp?view=patch&r1=1.17&r2=1.18&pathrev=MAIN
- http://freeimage.cvs.sourceforge.net/viewvc/freeimage/FreeImage/Source/FreeImage/PluginPCX.cpp?view=patch&r1=1.18&r2=1.19&pathrev=MAIN
-Bug-Debian: https://bugs.debian.org/797165
-Last-Update: 2015-09-14
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
-Index: freeimage/Source/FreeImage/PluginPCX.cpp
-===================================================================
---- freeimage.orig/Source/FreeImage/PluginPCX.cpp
-+++ freeimage/Source/FreeImage/PluginPCX.cpp
-@@ -347,12 +347,14 @@ Load(FreeImageIO *io, fi_handle handle,
- 
- 	try {
- 		// check PCX identifier
--
--		long start_pos = io->tell_proc(handle);
--		BOOL validated = pcx_validate(io, handle);		
--		io->seek_proc(handle, start_pos, SEEK_SET);
--		if(!validated) {
--			throw FI_MSG_ERROR_MAGIC_NUMBER;
-+		// (note: should have been already validated using FreeImage_GetFileType but check again)
-+		{
-+			long start_pos = io->tell_proc(handle);
-+			BOOL validated = pcx_validate(io, handle);
-+			io->seek_proc(handle, start_pos, SEEK_SET);
-+			if(!validated) {
-+				throw FI_MSG_ERROR_MAGIC_NUMBER;
-+			}
- 		}
- 
- 		// process the header
-@@ -366,20 +368,38 @@ Load(FreeImageIO *io, fi_handle handle,
- 		SwapHeader(&header);
- #endif
- 
--		// allocate a new DIB
-+		// process the window
-+		const WORD *window = header.window;	// left, upper, right,lower pixel coord.
-+		const int left		= window[0];
-+		const int top		= window[1];
-+		const int right		= window[2];
-+		const int bottom	= window[3];
- 
--		unsigned width = header.window[2] - header.window[0] + 1;
--		unsigned height = header.window[3] - header.window[1] + 1;
--		unsigned bitcount = header.bpp * header.planes;
--
--		if (bitcount == 24) {
--			dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
--		} else {
--			dib = FreeImage_AllocateHeader(header_only, width, height, bitcount);			
-+		// check image size
-+		if((left >= right) || (top >= bottom)) {
-+			throw FI_MSG_ERROR_PARSING;
- 		}
- 
--		// if the dib couldn't be allocated, throw an error
-+		const unsigned width = right - left + 1;
-+		const unsigned height = bottom - top + 1;
-+		const unsigned bitcount = header.bpp * header.planes;
-+
-+		// allocate a new DIB
-+		switch(bitcount) {
-+			case 1:
-+			case 4:
-+			case 8:
-+				dib = FreeImage_AllocateHeader(header_only, width, height, bitcount);
-+				break;
-+			case 24:
-+				dib = FreeImage_AllocateHeader(header_only, width, height, bitcount, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
-+				break;
-+			default:
-+				throw FI_MSG_ERROR_DIB_MEMORY;
-+				break;
-+		}
- 
-+		// if the dib couldn't be allocated, throw an error
- 		if (!dib) {
- 			throw FI_MSG_ERROR_DIB_MEMORY;
- 		}
-@@ -426,19 +446,23 @@ Load(FreeImageIO *io, fi_handle handle,
- 
- 				if (palette_id == 0x0C) {
- 					BYTE *cmap = (BYTE*)malloc(768 * sizeof(BYTE));
--					io->read_proc(cmap, 768, 1, handle);
- 
--					pal = FreeImage_GetPalette(dib);
--					BYTE *pColormap = &cmap[0];
-+					if(cmap) {
-+						io->read_proc(cmap, 768, 1, handle);
- 
--					for(int i = 0; i < 256; i++) {
--						pal[i].rgbRed   = pColormap[0];
--						pal[i].rgbGreen = pColormap[1];
--						pal[i].rgbBlue  = pColormap[2];
--						pColormap += 3;
-+						pal = FreeImage_GetPalette(dib);
-+						BYTE *pColormap = &cmap[0];
-+
-+						for(int i = 0; i < 256; i++) {
-+							pal[i].rgbRed   = pColormap[0];
-+							pal[i].rgbGreen = pColormap[1];
-+							pal[i].rgbBlue  = pColormap[2];
-+							pColormap += 3;
-+						}
-+
-+						free(cmap);
- 					}
- 
--					free(cmap);
- 				}
- 
- 				// wrong palette ID, perhaps a gray scale is needed ?
-@@ -466,9 +490,9 @@ Load(FreeImageIO *io, fi_handle handle,
- 		// calculate the line length for the PCX and the DIB
- 
- 		// length of raster line in bytes
--		unsigned linelength = header.bytes_per_line * header.planes;
-+		const unsigned linelength = header.bytes_per_line * header.planes;
- 		// length of DIB line (rounded to DWORD) in bytes
--		unsigned pitch = FreeImage_GetPitch(dib);
-+		const unsigned pitch = FreeImage_GetPitch(dib);
- 
- 		// run-length encoding ?
- 
diff --git a/gnu/packages/patches/freeimage-CVE-2016-5684.patch b/gnu/packages/patches/freeimage-CVE-2016-5684.patch
deleted file mode 100644
index 2fc02d7b0d..0000000000
--- a/gnu/packages/patches/freeimage-CVE-2016-5684.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From: Debian Science Maintainers
- <debian-science-maintainers@lists.alioth.debian.org>
-Date: Mon, 10 Oct 2016 08:22:44 +0100
-Subject: CVE-2016-5684
-
----
- Source/FreeImage/PluginXPM.cpp | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/Source/FreeImage/PluginXPM.cpp b/Source/FreeImage/PluginXPM.cpp
-index a698321..cc7bd07 100644
---- a/Source/FreeImage/PluginXPM.cpp
-+++ b/Source/FreeImage/PluginXPM.cpp
-@@ -181,6 +181,11 @@ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
- 		}
- 		free(str);
- 
-+		// check info string
-+		if((width <= 0) || (height <= 0) || (colors <= 0) || (cpp <= 0)) {
-+			throw "Improperly formed info string";
-+		}
-+
-         if (colors > 256) {
- 			dib = FreeImage_AllocateHeader(header_only, width, height, 24, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
- 		} else {
-@@ -193,7 +198,7 @@ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
- 			FILE_RGBA rgba;
- 
- 			str = ReadString(io, handle);
--			if(!str)
-+			if(!str || (strlen(str) < (size_t)cpp))
- 				throw "Error reading color strings";
- 
- 			std::string chrs(str,cpp); //create a string for the color chars using the first cpp chars
diff --git a/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch b/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch
deleted file mode 100644
index 2c9f2c3357..0000000000
--- a/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch
+++ /dev/null
@@ -1,1453 +0,0 @@
-The original patch was downloaded from here:
-https://chromium-review.googlesource.com/c/297211
-
-The paths, file names, and line endings have been adapted.
-
-From eebaf97f5a1cb713d81d311308d8a48c124e5aef Mon Sep 17 00:00:00 2001
-From: James Zern <jzern@google.com>
-Date: Wed, 02 Sep 2015 23:21:13 -0700
-Subject: [PATCH] dsp/mips: add whitespace around stringizing operator
-
-fixes compile with gcc 5.1
-BUG=259
-
-Change-Id: Ideb39c6290ab8569b1b6cc835bea11c822d0286c
----
-
-diff --git a/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c
-index 6590f43..40e4d82 100644
---- a/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c
-@@ -548,10 +548,10 @@
- // TEMP3 = SRC[D + D1 * BPS]
- #define LOAD_4_BYTES(TEMP0, TEMP1, TEMP2, TEMP3,                               \

-                      A, A1, B, B1, C, C1, D, D1, SRC)                          \

--  "lbu          %["#TEMP0"],   "#A"+"#A1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

--  "lbu          %["#TEMP1"],   "#B"+"#B1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

--  "lbu          %["#TEMP2"],   "#C"+"#C1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

--  "lbu          %["#TEMP3"],   "#D"+"#D1"*"XSTR(BPS)"(%["#SRC"])     \n\t"     \

-+  "lbu      %[" #TEMP0 "],   " #A "+" #A1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

-+  "lbu      %[" #TEMP1 "],   " #B "+" #B1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

-+  "lbu      %[" #TEMP2 "],   " #C "+" #C1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

-+  "lbu      %[" #TEMP3 "],   " #D "+" #D1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t"     \

- 

- static void SimpleHFilter16(uint8_t* p, int stride, int thresh) {
-   int i;
-@@ -623,8 +623,8 @@
- // DST[A * BPS]     = TEMP0

- // DST[B + C * BPS] = TEMP1

- #define STORE_8_BYTES(TEMP0, TEMP1, A, B, C, DST)                              \

--  "usw          %["#TEMP0"],   "#A"*"XSTR(BPS)"(%["#DST"])         \n\t"       \

--  "usw          %["#TEMP1"],   "#B"+"#C"*"XSTR(BPS)"(%["#DST"])    \n\t"

-+  "usw    %[" #TEMP0 "],   " #A "*"XSTR(BPS)"(%[" #DST "])         \n\t"       \

-+  "usw    %[" #TEMP1 "],   " #B "+" #C "*"XSTR(BPS)"(%[" #DST "])  \n\t"

- 

- static void VE4(uint8_t* dst) {    // vertical

-   const uint8_t* top = dst - BPS;

-@@ -725,8 +725,8 @@
- // TEMP0 = SRC[A * BPS]

- // TEMP1 = SRC[B + C * BPS]

- #define LOAD_8_BYTES(TEMP0, TEMP1, A, B, C, SRC)                               \

--  "ulw          %["#TEMP0"],   "#A"*"XSTR(BPS)"(%["#SRC"])         \n\t"       \

--  "ulw          %["#TEMP1"],   "#B"+"#C"*"XSTR(BPS)"(%["#SRC"])    \n\t"

-+  "ulw    %[" #TEMP0 "],   " #A "*"XSTR(BPS)"(%[" #SRC "])         \n\t"       \

-+  "ulw    %[" #TEMP1 "],   " #B "+" #C "*"XSTR(BPS)"(%[" #SRC "])  \n\t"

- 

- static void LD4(uint8_t* dst) {   // Down-Left

-   int temp0, temp1, temp2, temp3, temp4;

-@@ -873,24 +873,24 @@
- #define CLIPPING(SIZE)                                                         \

-   "preceu.ph.qbl   %[temp2],   %[temp0]                  \n\t"                 \

-   "preceu.ph.qbr   %[temp0],   %[temp0]                  \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "preceu.ph.qbl   %[temp3],   %[temp1]                  \n\t"                 \

-   "preceu.ph.qbr   %[temp1],   %[temp1]                  \n\t"                 \

- ".endif                                                  \n\t"                 \

-   "addu.ph         %[temp2],   %[temp2],   %[dst_1]      \n\t"                 \

-   "addu.ph         %[temp0],   %[temp0],   %[dst_1]      \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "addu.ph         %[temp3],   %[temp3],   %[dst_1]      \n\t"                 \

-   "addu.ph         %[temp1],   %[temp1],   %[dst_1]      \n\t"                 \

- ".endif                                                  \n\t"                 \

-   "shll_s.ph       %[temp2],   %[temp2],   7             \n\t"                 \

-   "shll_s.ph       %[temp0],   %[temp0],   7             \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "shll_s.ph       %[temp3],   %[temp3],   7             \n\t"                 \

-   "shll_s.ph       %[temp1],   %[temp1],   7             \n\t"                 \

- ".endif                                                  \n\t"                 \

-   "precrqu_s.qb.ph %[temp0],   %[temp2],   %[temp0]      \n\t"                 \

--".if "#SIZE" == 8                                        \n\t"                 \

-+".if " #SIZE " == 8                                      \n\t"                 \

-   "precrqu_s.qb.ph %[temp1],   %[temp3],   %[temp1]      \n\t"                 \

- ".endif                                                  \n\t"

- 

-@@ -899,7 +899,7 @@
-   int dst_1 = ((int)(DST)[-1] << 16) + (DST)[-1];                              \

-   int temp0, temp1, temp2, temp3;                                              \

-   __asm__ volatile (                                                           \

--  ".if "#SIZE" < 8                                       \n\t"                 \

-+  ".if " #SIZE " < 8                                     \n\t"                 \

-     "ulw             %[temp0],   0(%[top])               \n\t"                 \

-     "subu.ph         %[dst_1],   %[dst_1],    %[top_1]   \n\t"                 \

-     CLIPPING(4)                                                                \

-@@ -911,7 +911,7 @@
-     CLIPPING(8)                                                                \

-     "usw             %[temp0],   0(%[dst])               \n\t"                 \

-     "usw             %[temp1],   4(%[dst])               \n\t"                 \

--  ".if "#SIZE" == 16                                     \n\t"                 \

-+  ".if " #SIZE " == 16                                   \n\t"                 \

-     "ulw             %[temp0],   8(%[top])               \n\t"                 \

-     "ulw             %[temp1],   12(%[top])              \n\t"                 \

-     CLIPPING(8)                                                                \

-diff --git a/Source/LibWebP/src/dsp/dsp.enc_mips32.c b/Source/LibWebP/src/dsp/dsp.enc_mips32.c
-index c5837f1..b50e08b 100644
---- a/Source/LibWebP/src/dsp/dsp.enc_mips32.c
-+++ b/Source/LibWebP/src/dsp/dsp.enc_mips32.c
-@@ -31,26 +31,26 @@
- // TEMP0..TEMP3 - registers for corresponding tmp elements

- // TEMP4..TEMP5 - temporary registers

- #define VERTICAL_PASS(A, B, C, D, TEMP4, TEMP0, TEMP1, TEMP2, TEMP3)        \

--  "lh      %[temp16],      "#A"(%[temp20])                 \n\t"            \

--  "lh      %[temp18],      "#B"(%[temp20])                 \n\t"            \

--  "lh      %[temp17],      "#C"(%[temp20])                 \n\t"            \

--  "lh      %[temp19],      "#D"(%[temp20])                 \n\t"            \

--  "addu    %["#TEMP4"],    %[temp16],      %[temp18]       \n\t"            \

--  "subu    %[temp16],      %[temp16],      %[temp18]       \n\t"            \

--  "mul     %["#TEMP0"],    %[temp17],      %[kC2]          \n\t"            \

--  "mul     %[temp18],      %[temp19],      %[kC1]          \n\t"            \

--  "mul     %[temp17],      %[temp17],      %[kC1]          \n\t"            \

--  "mul     %[temp19],      %[temp19],      %[kC2]          \n\t"            \

--  "sra     %["#TEMP0"],    %["#TEMP0"],    16              \n\n"            \

--  "sra     %[temp18],      %[temp18],      16              \n\n"            \

--  "sra     %[temp17],      %[temp17],      16              \n\n"            \

--  "sra     %[temp19],      %[temp19],      16              \n\n"            \

--  "subu    %["#TEMP2"],    %["#TEMP0"],    %[temp18]       \n\t"            \

--  "addu    %["#TEMP3"],    %[temp17],      %[temp19]       \n\t"            \

--  "addu    %["#TEMP0"],    %["#TEMP4"],    %["#TEMP3"]     \n\t"            \

--  "addu    %["#TEMP1"],    %[temp16],      %["#TEMP2"]     \n\t"            \

--  "subu    %["#TEMP2"],    %[temp16],      %["#TEMP2"]     \n\t"            \

--  "subu    %["#TEMP3"],    %["#TEMP4"],    %["#TEMP3"]     \n\t"

-+  "lh      %[temp16],      " #A "(%[temp20])                 \n\t"          \

-+  "lh      %[temp18],      " #B "(%[temp20])                 \n\t"          \

-+  "lh      %[temp17],      " #C "(%[temp20])                 \n\t"          \

-+  "lh      %[temp19],      " #D "(%[temp20])                 \n\t"          \

-+  "addu    %[" #TEMP4 "],    %[temp16],      %[temp18]       \n\t"          \

-+  "subu    %[temp16],      %[temp16],      %[temp18]         \n\t"          \

-+  "mul     %[" #TEMP0 "],    %[temp17],      %[kC2]          \n\t"          \

-+  "mul     %[temp18],      %[temp19],      %[kC1]            \n\t"          \

-+  "mul     %[temp17],      %[temp17],      %[kC1]            \n\t"          \

-+  "mul     %[temp19],      %[temp19],      %[kC2]            \n\t"          \

-+  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    16            \n\n"          \

-+  "sra     %[temp18],      %[temp18],      16                \n\n"          \

-+  "sra     %[temp17],      %[temp17],      16                \n\n"          \

-+  "sra     %[temp19],      %[temp19],      16                \n\n"          \

-+  "subu    %[" #TEMP2 "],    %[" #TEMP0 "],    %[temp18]     \n\t"          \

-+  "addu    %[" #TEMP3 "],    %[temp17],      %[temp19]       \n\t"          \

-+  "addu    %[" #TEMP0 "],    %[" #TEMP4 "],    %[" #TEMP3 "] \n\t"          \

-+  "addu    %[" #TEMP1 "],    %[temp16],      %[" #TEMP2 "]   \n\t"          \

-+  "subu    %[" #TEMP2 "],    %[temp16],      %[" #TEMP2 "]   \n\t"          \

-+  "subu    %[" #TEMP3 "],    %[" #TEMP4 "],    %[" #TEMP3 "] \n\t"

- 

- // macro for one horizontal pass in ITransformOne

- // MUL and STORE macros inlined

-@@ -58,59 +58,59 @@
- // temp0..temp15 holds tmp[0]..tmp[15]

- // A - offset in bytes to load from ref and store to dst buffer

- // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements

--#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12)                     \

--  "addiu   %["#TEMP0"],    %["#TEMP0"],    4               \n\t"            \

--  "addu    %[temp16],      %["#TEMP0"],    %["#TEMP8"]     \n\t"            \

--  "subu    %[temp17],      %["#TEMP0"],    %["#TEMP8"]     \n\t"            \

--  "mul     %["#TEMP0"],    %["#TEMP4"],    %[kC2]          \n\t"            \

--  "mul     %["#TEMP8"],    %["#TEMP12"],   %[kC1]          \n\t"            \

--  "mul     %["#TEMP4"],    %["#TEMP4"],    %[kC1]          \n\t"            \

--  "mul     %["#TEMP12"],   %["#TEMP12"],   %[kC2]          \n\t"            \

--  "sra     %["#TEMP0"],    %["#TEMP0"],    16              \n\t"            \

--  "sra     %["#TEMP8"],    %["#TEMP8"],    16              \n\t"            \

--  "sra     %["#TEMP4"],    %["#TEMP4"],    16              \n\t"            \

--  "sra     %["#TEMP12"],   %["#TEMP12"],   16              \n\t"            \

--  "subu    %[temp18],      %["#TEMP0"],    %["#TEMP8"]     \n\t"            \

--  "addu    %[temp19],      %["#TEMP4"],    %["#TEMP12"]    \n\t"            \

--  "addu    %["#TEMP0"],    %[temp16],      %[temp19]       \n\t"            \

--  "addu    %["#TEMP4"],    %[temp17],      %[temp18]       \n\t"            \

--  "subu    %["#TEMP8"],    %[temp17],      %[temp18]       \n\t"            \

--  "subu    %["#TEMP12"],   %[temp16],      %[temp19]       \n\t"            \

--  "lw      %[temp20],      0(%[args])                      \n\t"            \

--  "sra     %["#TEMP0"],    %["#TEMP0"],    3               \n\t"            \

--  "sra     %["#TEMP4"],    %["#TEMP4"],    3               \n\t"            \

--  "sra     %["#TEMP8"],    %["#TEMP8"],    3               \n\t"            \

--  "sra     %["#TEMP12"],   %["#TEMP12"],   3               \n\t"            \

--  "lbu     %[temp16],      0+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "lbu     %[temp17],      1+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "lbu     %[temp18],      2+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "lbu     %[temp19],      3+"XSTR(BPS)"*"#A"(%[temp20])   \n\t"            \

--  "addu    %["#TEMP0"],    %[temp16],      %["#TEMP0"]     \n\t"            \

--  "addu    %["#TEMP4"],    %[temp17],      %["#TEMP4"]     \n\t"            \

--  "addu    %["#TEMP8"],    %[temp18],      %["#TEMP8"]     \n\t"            \

--  "addu    %["#TEMP12"],   %[temp19],      %["#TEMP12"]    \n\t"            \

--  "slt     %[temp16],      %["#TEMP0"],    $zero           \n\t"            \

--  "slt     %[temp17],      %["#TEMP4"],    $zero           \n\t"            \

--  "slt     %[temp18],      %["#TEMP8"],    $zero           \n\t"            \

--  "slt     %[temp19],      %["#TEMP12"],   $zero           \n\t"            \

--  "movn    %["#TEMP0"],    $zero,          %[temp16]       \n\t"            \

--  "movn    %["#TEMP4"],    $zero,          %[temp17]       \n\t"            \

--  "movn    %["#TEMP8"],    $zero,          %[temp18]       \n\t"            \

--  "movn    %["#TEMP12"],   $zero,          %[temp19]       \n\t"            \

--  "addiu   %[temp20],      $zero,          255             \n\t"            \

--  "slt     %[temp16],      %["#TEMP0"],    %[temp20]       \n\t"            \

--  "slt     %[temp17],      %["#TEMP4"],    %[temp20]       \n\t"            \

--  "slt     %[temp18],      %["#TEMP8"],    %[temp20]       \n\t"            \

--  "slt     %[temp19],      %["#TEMP12"],   %[temp20]       \n\t"            \

--  "movz    %["#TEMP0"],    %[temp20],      %[temp16]       \n\t"            \

--  "movz    %["#TEMP4"],    %[temp20],      %[temp17]       \n\t"            \

--  "lw      %[temp16],      8(%[args])                      \n\t"            \

--  "movz    %["#TEMP8"],    %[temp20],      %[temp18]       \n\t"            \

--  "movz    %["#TEMP12"],   %[temp20],      %[temp19]       \n\t"            \

--  "sb      %["#TEMP0"],    0+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"            \

--  "sb      %["#TEMP4"],    1+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"            \

--  "sb      %["#TEMP8"],    2+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"            \

--  "sb      %["#TEMP12"],   3+"XSTR(BPS)"*"#A"(%[temp16])   \n\t"

-+#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12)                       \

-+  "addiu   %[" #TEMP0 "],    %[" #TEMP0 "],    4             \n\t"            \

-+  "addu    %[temp16],      %[" #TEMP0 "],    %[" #TEMP8 "]   \n\t"            \

-+  "subu    %[temp17],      %[" #TEMP0 "],    %[" #TEMP8 "]   \n\t"            \

-+  "mul     %[" #TEMP0 "],    %[" #TEMP4 "],    %[kC2]        \n\t"            \

-+  "mul     %[" #TEMP8 "],    %[" #TEMP12 "],   %[kC1]        \n\t"            \

-+  "mul     %[" #TEMP4 "],    %[" #TEMP4 "],    %[kC1]        \n\t"            \

-+  "mul     %[" #TEMP12 "],   %[" #TEMP12 "],   %[kC2]        \n\t"            \

-+  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    16            \n\t"            \

-+  "sra     %[" #TEMP8 "],    %[" #TEMP8 "],    16            \n\t"            \

-+  "sra     %[" #TEMP4 "],    %[" #TEMP4 "],    16            \n\t"            \

-+  "sra     %[" #TEMP12 "],   %[" #TEMP12 "],   16            \n\t"            \

-+  "subu    %[temp18],      %[" #TEMP0 "],    %[" #TEMP8 "]   \n\t"            \

-+  "addu    %[temp19],      %[" #TEMP4 "],    %[" #TEMP12 "]  \n\t"            \

-+  "addu    %[" #TEMP0 "],    %[temp16],      %[temp19]       \n\t"            \

-+  "addu    %[" #TEMP4 "],    %[temp17],      %[temp18]       \n\t"            \

-+  "subu    %[" #TEMP8 "],    %[temp17],      %[temp18]       \n\t"            \

-+  "subu    %[" #TEMP12 "],   %[temp16],      %[temp19]       \n\t"            \

-+  "lw      %[temp20],      0(%[args])                        \n\t"            \

-+  "sra     %[" #TEMP0 "],    %[" #TEMP0 "],    3             \n\t"            \

-+  "sra     %[" #TEMP4 "],    %[" #TEMP4 "],    3             \n\t"            \

-+  "sra     %[" #TEMP8 "],    %[" #TEMP8 "],    3             \n\t"            \

-+  "sra     %[" #TEMP12 "],   %[" #TEMP12 "],   3             \n\t"            \

-+  "lbu     %[temp16],      0+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "lbu     %[temp17],      1+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "lbu     %[temp18],      2+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "lbu     %[temp19],      3+"XSTR(BPS)"*" #A "(%[temp20])   \n\t"            \

-+  "addu    %[" #TEMP0 "],    %[temp16],      %[" #TEMP0 "]   \n\t"            \

-+  "addu    %[" #TEMP4 "],    %[temp17],      %[" #TEMP4 "]   \n\t"            \

-+  "addu    %[" #TEMP8 "],    %[temp18],      %[" #TEMP8 "]   \n\t"            \

-+  "addu    %[" #TEMP12 "],   %[temp19],      %[" #TEMP12 "]  \n\t"            \

-+  "slt     %[temp16],      %[" #TEMP0 "],    $zero           \n\t"            \

-+  "slt     %[temp17],      %[" #TEMP4 "],    $zero           \n\t"            \

-+  "slt     %[temp18],      %[" #TEMP8 "],    $zero           \n\t"            \

-+  "slt     %[temp19],      %[" #TEMP12 "],   $zero           \n\t"            \

-+  "movn    %[" #TEMP0 "],    $zero,          %[temp16]       \n\t"            \

-+  "movn    %[" #TEMP4 "],    $zero,          %[temp17]       \n\t"            \

-+  "movn    %[" #TEMP8 "],    $zero,          %[temp18]       \n\t"            \

-+  "movn    %[" #TEMP12 "],   $zero,          %[temp19]       \n\t"            \

-+  "addiu   %[temp20],      $zero,          255               \n\t"            \

-+  "slt     %[temp16],      %[" #TEMP0 "],    %[temp20]       \n\t"            \

-+  "slt     %[temp17],      %[" #TEMP4 "],    %[temp20]       \n\t"            \

-+  "slt     %[temp18],      %[" #TEMP8 "],    %[temp20]       \n\t"            \

-+  "slt     %[temp19],      %[" #TEMP12 "],   %[temp20]       \n\t"            \

-+  "movz    %[" #TEMP0 "],    %[temp20],      %[temp16]       \n\t"            \

-+  "movz    %[" #TEMP4 "],    %[temp20],      %[temp17]       \n\t"            \

-+  "lw      %[temp16],      8(%[args])                        \n\t"            \

-+  "movz    %[" #TEMP8 "],    %[temp20],      %[temp18]       \n\t"            \

-+  "movz    %[" #TEMP12 "],   %[temp20],      %[temp19]       \n\t"            \

-+  "sb      %[" #TEMP0 "],    0+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"            \

-+  "sb      %[" #TEMP4 "],    1+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"            \

-+  "sb      %[" #TEMP8 "],    2+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"            \

-+  "sb      %[" #TEMP12 "],   3+"XSTR(BPS)"*" #A "(%[temp16]) \n\t"

- 

- // Does one or two inverse transforms.

- static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in,

-@@ -161,9 +161,9 @@
- // K - offset in bytes (kZigzag[n] * 4)

- // N - offset in bytes (n * 2)

- #define QUANTIZE_ONE(J, K, N)                                               \

--  "lh           %[temp0],       "#J"(%[ppin])                       \n\t"   \

--  "lhu          %[temp1],       "#J"(%[ppsharpen])                  \n\t"   \

--  "lw           %[temp2],       "#K"(%[ppzthresh])                  \n\t"   \

-+  "lh           %[temp0],       " #J "(%[ppin])                     \n\t"   \

-+  "lhu          %[temp1],       " #J "(%[ppsharpen])                \n\t"   \

-+  "lw           %[temp2],       " #K "(%[ppzthresh])                \n\t"   \

-   "sra          %[sign],        %[temp0],           15              \n\t"   \

-   "xor          %[coeff],       %[temp0],           %[sign]         \n\t"   \

-   "subu         %[coeff],       %[coeff],           %[sign]         \n\t"   \

-@@ -172,9 +172,9 @@
-   "addiu        %[temp5],       $zero,              0               \n\t"   \

-   "addiu        %[level],       $zero,              0               \n\t"   \

-   "beqz         %[temp4],       2f                                  \n\t"   \

--  "lhu          %[temp1],       "#J"(%[ppiq])                       \n\t"   \

--  "lw           %[temp2],       "#K"(%[ppbias])                     \n\t"   \

--  "lhu          %[temp3],       "#J"(%[ppq])                        \n\t"   \

-+  "lhu          %[temp1],       " #J "(%[ppiq])                     \n\t"   \

-+  "lw           %[temp2],       " #K "(%[ppbias])                   \n\t"   \

-+  "lhu          %[temp3],       " #J "(%[ppq])                      \n\t"   \

-   "mul          %[level],       %[coeff],           %[temp1]        \n\t"   \

-   "addu         %[level],       %[level],           %[temp2]        \n\t"   \

-   "sra          %[level],       %[level],           17              \n\t"   \

-@@ -184,8 +184,8 @@
-   "subu         %[level],       %[level],           %[sign]         \n\t"   \

-   "mul          %[temp5],       %[level],           %[temp3]        \n\t"   \

- "2:                                                                 \n\t"   \

--  "sh           %[temp5],       "#J"(%[ppin])                       \n\t"   \

--  "sh           %[level],       "#N"(%[pout])                       \n\t"

-+  "sh           %[temp5],       " #J "(%[ppin])                     \n\t"   \

-+  "sh           %[level],       " #N "(%[pout])                     \n\t"

- 

- static int QuantizeBlock(int16_t in[16], int16_t out[16],

-                          const VP8Matrix* const mtx) {

-@@ -253,39 +253,39 @@
- // A - offset in bytes to load from a and b buffers

- // E..H - offsets in bytes to store first results to tmp buffer

- // E1..H1 - offsets in bytes to store second results to tmp buffer

--#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1)              \

--  "lbu    %[temp0],  0+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp1],  1+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp2],  2+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp3],  3+"XSTR(BPS)"*"#A"(%[a])  \n\t"                \

--  "lbu    %[temp4],  0+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "lbu    %[temp5],  1+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "lbu    %[temp6],  2+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "lbu    %[temp7],  3+"XSTR(BPS)"*"#A"(%[b])  \n\t"                \

--  "addu   %[temp8],  %[temp0],    %[temp2]     \n\t"                \

--  "subu   %[temp0],  %[temp0],    %[temp2]     \n\t"                \

--  "addu   %[temp2],  %[temp1],    %[temp3]     \n\t"                \

--  "subu   %[temp1],  %[temp1],    %[temp3]     \n\t"                \

--  "addu   %[temp3],  %[temp4],    %[temp6]     \n\t"                \

--  "subu   %[temp4],  %[temp4],    %[temp6]     \n\t"                \

--  "addu   %[temp6],  %[temp5],    %[temp7]     \n\t"                \

--  "subu   %[temp5],  %[temp5],    %[temp7]     \n\t"                \

--  "addu   %[temp7],  %[temp8],    %[temp2]     \n\t"                \

--  "subu   %[temp2],  %[temp8],    %[temp2]     \n\t"                \

--  "addu   %[temp8],  %[temp0],    %[temp1]     \n\t"                \

--  "subu   %[temp0],  %[temp0],    %[temp1]     \n\t"                \

--  "addu   %[temp1],  %[temp3],    %[temp6]     \n\t"                \

--  "subu   %[temp3],  %[temp3],    %[temp6]     \n\t"                \

--  "addu   %[temp6],  %[temp4],    %[temp5]     \n\t"                \

--  "subu   %[temp4],  %[temp4],    %[temp5]     \n\t"                \

--  "sw     %[temp7],  "#E"(%[tmp])              \n\t"                \

--  "sw     %[temp2],  "#H"(%[tmp])              \n\t"                \

--  "sw     %[temp8],  "#F"(%[tmp])              \n\t"                \

--  "sw     %[temp0],  "#G"(%[tmp])              \n\t"                \

--  "sw     %[temp1],  "#E1"(%[tmp])             \n\t"                \

--  "sw     %[temp3],  "#H1"(%[tmp])             \n\t"                \

--  "sw     %[temp6],  "#F1"(%[tmp])             \n\t"                \

--  "sw     %[temp4],  "#G1"(%[tmp])             \n\t"

-+#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1)                \

-+  "lbu    %[temp0],  0+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp1],  1+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp2],  2+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp3],  3+"XSTR(BPS)"*" #A "(%[a])  \n\t"                \

-+  "lbu    %[temp4],  0+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "lbu    %[temp5],  1+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "lbu    %[temp6],  2+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "lbu    %[temp7],  3+"XSTR(BPS)"*" #A "(%[b])  \n\t"                \

-+  "addu   %[temp8],  %[temp0],    %[temp2]       \n\t"                \

-+  "subu   %[temp0],  %[temp0],    %[temp2]       \n\t"                \

-+  "addu   %[temp2],  %[temp1],    %[temp3]       \n\t"                \

-+  "subu   %[temp1],  %[temp1],    %[temp3]       \n\t"                \

-+  "addu   %[temp3],  %[temp4],    %[temp6]       \n\t"                \

-+  "subu   %[temp4],  %[temp4],    %[temp6]       \n\t"                \

-+  "addu   %[temp6],  %[temp5],    %[temp7]       \n\t"                \

-+  "subu   %[temp5],  %[temp5],    %[temp7]       \n\t"                \

-+  "addu   %[temp7],  %[temp8],    %[temp2]       \n\t"                \

-+  "subu   %[temp2],  %[temp8],    %[temp2]       \n\t"                \

-+  "addu   %[temp8],  %[temp0],    %[temp1]       \n\t"                \

-+  "subu   %[temp0],  %[temp0],    %[temp1]       \n\t"                \

-+  "addu   %[temp1],  %[temp3],    %[temp6]       \n\t"                \

-+  "subu   %[temp3],  %[temp3],    %[temp6]       \n\t"                \

-+  "addu   %[temp6],  %[temp4],    %[temp5]       \n\t"                \

-+  "subu   %[temp4],  %[temp4],    %[temp5]       \n\t"                \

-+  "sw     %[temp7],  " #E "(%[tmp])              \n\t"                \

-+  "sw     %[temp2],  " #H "(%[tmp])              \n\t"                \

-+  "sw     %[temp8],  " #F "(%[tmp])              \n\t"                \

-+  "sw     %[temp0],  " #G "(%[tmp])              \n\t"                \

-+  "sw     %[temp1],  " #E1 "(%[tmp])             \n\t"                \

-+  "sw     %[temp3],  " #H1 "(%[tmp])             \n\t"                \

-+  "sw     %[temp6],  " #F1 "(%[tmp])             \n\t"                \

-+  "sw     %[temp4],  " #G1 "(%[tmp])             \n\t"

- 

- // macro for one vertical pass in Disto4x4 (TTransform)

- // two calls of function TTransform are merged into single one

-@@ -300,10 +300,10 @@
- // A1..D1 - offsets in bytes to load second results from tmp buffer

- // E..H - offsets in bytes to load from w buffer

- #define VERTICAL_PASS(A, B, C, D, A1, B1, C1, D1, E, F, G, H)     \

--  "lw     %[temp0],  "#A1"(%[tmp])           \n\t"                \

--  "lw     %[temp1],  "#C1"(%[tmp])           \n\t"                \

--  "lw     %[temp2],  "#B1"(%[tmp])           \n\t"                \

--  "lw     %[temp3],  "#D1"(%[tmp])           \n\t"                \

-+  "lw     %[temp0],  " #A1 "(%[tmp])         \n\t"                \

-+  "lw     %[temp1],  " #C1 "(%[tmp])         \n\t"                \

-+  "lw     %[temp2],  " #B1 "(%[tmp])         \n\t"                \

-+  "lw     %[temp3],  " #D1 "(%[tmp])         \n\t"                \

-   "addu   %[temp8],  %[temp0],    %[temp1]   \n\t"                \

-   "subu   %[temp0],  %[temp0],    %[temp1]   \n\t"                \

-   "addu   %[temp1],  %[temp2],    %[temp3]   \n\t"                \

-@@ -324,18 +324,18 @@
-   "subu   %[temp1],  %[temp1],    %[temp5]   \n\t"                \

-   "subu   %[temp0],  %[temp0],    %[temp6]   \n\t"                \

-   "subu   %[temp8],  %[temp8],    %[temp7]   \n\t"                \

--  "lhu    %[temp4],  "#E"(%[w])              \n\t"                \

--  "lhu    %[temp5],  "#F"(%[w])              \n\t"                \

--  "lhu    %[temp6],  "#G"(%[w])              \n\t"                \

--  "lhu    %[temp7],  "#H"(%[w])              \n\t"                \

-+  "lhu    %[temp4],  " #E "(%[w])            \n\t"                \

-+  "lhu    %[temp5],  " #F "(%[w])            \n\t"                \

-+  "lhu    %[temp6],  " #G "(%[w])            \n\t"                \

-+  "lhu    %[temp7],  " #H "(%[w])            \n\t"                \

-   "madd   %[temp4],  %[temp3]                \n\t"                \

-   "madd   %[temp5],  %[temp1]                \n\t"                \

-   "madd   %[temp6],  %[temp0]                \n\t"                \

-   "madd   %[temp7],  %[temp8]                \n\t"                \

--  "lw     %[temp0],  "#A"(%[tmp])            \n\t"                \

--  "lw     %[temp1],  "#C"(%[tmp])            \n\t"                \

--  "lw     %[temp2],  "#B"(%[tmp])            \n\t"                \

--  "lw     %[temp3],  "#D"(%[tmp])            \n\t"                \

-+  "lw     %[temp0],  " #A "(%[tmp])          \n\t"                \

-+  "lw     %[temp1],  " #C "(%[tmp])          \n\t"                \

-+  "lw     %[temp2],  " #B "(%[tmp])          \n\t"                \

-+  "lw     %[temp3],  " #D "(%[tmp])          \n\t"                \

-   "addu   %[temp8],  %[temp0],    %[temp1]   \n\t"                \

-   "subu   %[temp0],  %[temp0],    %[temp1]   \n\t"                \

-   "addu   %[temp1],  %[temp2],    %[temp3]   \n\t"                \

-@@ -412,71 +412,71 @@
- // temp0..temp15 holds tmp[0]..tmp[15]

- // A - offset in bytes to load from src and ref buffers

- // TEMP0..TEMP3 - registers for corresponding tmp elements

--#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)            \

--  "lw     %["#TEMP1"],  0(%[args])                       \n\t"    \

--  "lw     %["#TEMP2"],  4(%[args])                       \n\t"    \

--  "lbu    %[temp16],    0+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp17],    0+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "lbu    %[temp18],    1+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp19],    1+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "subu   %[temp20],    %[temp16],    %[temp17]          \n\t"    \

--  "lbu    %[temp16],    2+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp17],    2+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "subu   %["#TEMP0"],  %[temp18],    %[temp19]          \n\t"    \

--  "lbu    %[temp18],    3+"XSTR(BPS)"*"#A"(%["#TEMP1"])  \n\t"    \

--  "lbu    %[temp19],    3+"XSTR(BPS)"*"#A"(%["#TEMP2"])  \n\t"    \

--  "subu   %["#TEMP1"],  %[temp16],    %[temp17]          \n\t"    \

--  "subu   %["#TEMP2"],  %[temp18],    %[temp19]          \n\t"    \

--  "addu   %["#TEMP3"],  %[temp20],    %["#TEMP2"]        \n\t"    \

--  "subu   %["#TEMP2"],  %[temp20],    %["#TEMP2"]        \n\t"    \

--  "addu   %[temp20],    %["#TEMP0"],  %["#TEMP1"]        \n\t"    \

--  "subu   %["#TEMP0"],  %["#TEMP0"],  %["#TEMP1"]        \n\t"    \

--  "mul    %[temp16],    %["#TEMP2"],  %[c5352]           \n\t"    \

--  "mul    %[temp17],    %["#TEMP2"],  %[c2217]           \n\t"    \

--  "mul    %[temp18],    %["#TEMP0"],  %[c5352]           \n\t"    \

--  "mul    %[temp19],    %["#TEMP0"],  %[c2217]           \n\t"    \

--  "addu   %["#TEMP1"],  %["#TEMP3"],  %[temp20]          \n\t"    \

--  "subu   %[temp20],    %["#TEMP3"],  %[temp20]          \n\t"    \

--  "sll    %["#TEMP0"],  %["#TEMP1"],  3                  \n\t"    \

--  "sll    %["#TEMP2"],  %[temp20],    3                  \n\t"    \

--  "addiu  %[temp16],    %[temp16],    1812               \n\t"    \

--  "addiu  %[temp17],    %[temp17],    937                \n\t"    \

--  "addu   %[temp16],    %[temp16],    %[temp19]          \n\t"    \

--  "subu   %[temp17],    %[temp17],    %[temp18]          \n\t"    \

--  "sra    %["#TEMP1"],  %[temp16],    9                  \n\t"    \

--  "sra    %["#TEMP3"],  %[temp17],    9                  \n\t"

-+#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)                \

-+  "lw     %[" #TEMP1 "],  0(%[args])                         \n\t"    \

-+  "lw     %[" #TEMP2 "],  4(%[args])                         \n\t"    \

-+  "lbu    %[temp16],    0+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp17],    0+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "lbu    %[temp18],    1+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp19],    1+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "subu   %[temp20],    %[temp16],    %[temp17]              \n\t"    \

-+  "lbu    %[temp16],    2+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp17],    2+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "subu   %[" #TEMP0 "],  %[temp18],    %[temp19]            \n\t"    \

-+  "lbu    %[temp18],    3+"XSTR(BPS)"*" #A "(%[" #TEMP1 "])  \n\t"    \

-+  "lbu    %[temp19],    3+"XSTR(BPS)"*" #A "(%[" #TEMP2 "])  \n\t"    \

-+  "subu   %[" #TEMP1 "],  %[temp16],    %[temp17]            \n\t"    \

-+  "subu   %[" #TEMP2 "],  %[temp18],    %[temp19]            \n\t"    \

-+  "addu   %[" #TEMP3 "],  %[temp20],    %[" #TEMP2 "]        \n\t"    \

-+  "subu   %[" #TEMP2 "],  %[temp20],    %[" #TEMP2 "]        \n\t"    \

-+  "addu   %[temp20],    %[" #TEMP0 "],  %[" #TEMP1 "]        \n\t"    \

-+  "subu   %[" #TEMP0 "],  %[" #TEMP0 "],  %[" #TEMP1 "]      \n\t"    \

-+  "mul    %[temp16],    %[" #TEMP2 "],  %[c5352]             \n\t"    \

-+  "mul    %[temp17],    %[" #TEMP2 "],  %[c2217]             \n\t"    \

-+  "mul    %[temp18],    %[" #TEMP0 "],  %[c5352]             \n\t"    \

-+  "mul    %[temp19],    %[" #TEMP0 "],  %[c2217]             \n\t"    \

-+  "addu   %[" #TEMP1 "],  %[" #TEMP3 "],  %[temp20]          \n\t"    \

-+  "subu   %[temp20],    %[" #TEMP3 "],  %[temp20]            \n\t"    \

-+  "sll    %[" #TEMP0 "],  %[" #TEMP1 "],  3                  \n\t"    \

-+  "sll    %[" #TEMP2 "],  %[temp20],    3                    \n\t"    \

-+  "addiu  %[temp16],    %[temp16],    1812                   \n\t"    \

-+  "addiu  %[temp17],    %[temp17],    937                    \n\t"    \

-+  "addu   %[temp16],    %[temp16],    %[temp19]              \n\t"    \

-+  "subu   %[temp17],    %[temp17],    %[temp18]              \n\t"    \

-+  "sra    %[" #TEMP1 "],  %[temp16],    9                    \n\t"    \

-+  "sra    %[" #TEMP3 "],  %[temp17],    9                    \n\t"

- 

- // macro for one vertical pass in FTransform

- // temp0..temp15 holds tmp[0]..tmp[15]

- // A..D - offsets in bytes to store to out buffer

- // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements

--#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)  \

--  "addu   %[temp16],    %["#TEMP0"],  %["#TEMP12"]     \n\t"    \

--  "subu   %[temp19],    %["#TEMP0"],  %["#TEMP12"]     \n\t"    \

--  "addu   %[temp17],    %["#TEMP4"],  %["#TEMP8"]      \n\t"    \

--  "subu   %[temp18],    %["#TEMP4"],  %["#TEMP8"]      \n\t"    \

--  "mul    %["#TEMP8"],  %[temp19],    %[c2217]         \n\t"    \

--  "mul    %["#TEMP12"], %[temp18],    %[c2217]         \n\t"    \

--  "mul    %["#TEMP4"],  %[temp19],    %[c5352]         \n\t"    \

--  "mul    %[temp18],    %[temp18],    %[c5352]         \n\t"    \

--  "addiu  %[temp16],    %[temp16],    7                \n\t"    \

--  "addu   %["#TEMP0"],  %[temp16],    %[temp17]        \n\t"    \

--  "sra    %["#TEMP0"],  %["#TEMP0"],  4                \n\t"    \

--  "addu   %["#TEMP12"], %["#TEMP12"], %["#TEMP4"]      \n\t"    \

--  "subu   %["#TEMP4"],  %[temp16],    %[temp17]        \n\t"    \

--  "sra    %["#TEMP4"],  %["#TEMP4"],  4                \n\t"    \

--  "addiu  %["#TEMP8"],  %["#TEMP8"],  30000            \n\t"    \

--  "addiu  %["#TEMP12"], %["#TEMP12"], 12000            \n\t"    \

--  "addiu  %["#TEMP8"],  %["#TEMP8"],  21000            \n\t"    \

--  "subu   %["#TEMP8"],  %["#TEMP8"],  %[temp18]        \n\t"    \

--  "sra    %["#TEMP12"], %["#TEMP12"], 16               \n\t"    \

--  "sra    %["#TEMP8"],  %["#TEMP8"],  16               \n\t"    \

--  "addiu  %[temp16],    %["#TEMP12"], 1                \n\t"    \

--  "movn   %["#TEMP12"], %[temp16],    %[temp19]        \n\t"    \

--  "sh     %["#TEMP0"],  "#A"(%[temp20])                \n\t"    \

--  "sh     %["#TEMP4"],  "#C"(%[temp20])                \n\t"    \

--  "sh     %["#TEMP8"],  "#D"(%[temp20])                \n\t"    \

--  "sh     %["#TEMP12"], "#B"(%[temp20])                \n\t"

-+#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)    \

-+  "addu   %[temp16],    %[" #TEMP0 "],  %[" #TEMP12 "]   \n\t"    \

-+  "subu   %[temp19],    %[" #TEMP0 "],  %[" #TEMP12 "]   \n\t"    \

-+  "addu   %[temp17],    %[" #TEMP4 "],  %[" #TEMP8 "]    \n\t"    \

-+  "subu   %[temp18],    %[" #TEMP4 "],  %[" #TEMP8 "]    \n\t"    \

-+  "mul    %[" #TEMP8 "],  %[temp19],    %[c2217]         \n\t"    \

-+  "mul    %[" #TEMP12 "], %[temp18],    %[c2217]         \n\t"    \

-+  "mul    %[" #TEMP4 "],  %[temp19],    %[c5352]         \n\t"    \

-+  "mul    %[temp18],    %[temp18],    %[c5352]           \n\t"    \

-+  "addiu  %[temp16],    %[temp16],    7                  \n\t"    \

-+  "addu   %[" #TEMP0 "],  %[temp16],    %[temp17]        \n\t"    \

-+  "sra    %[" #TEMP0 "],  %[" #TEMP0 "],  4              \n\t"    \

-+  "addu   %[" #TEMP12 "], %[" #TEMP12 "], %[" #TEMP4 "]  \n\t"    \

-+  "subu   %[" #TEMP4 "],  %[temp16],    %[temp17]        \n\t"    \

-+  "sra    %[" #TEMP4 "],  %[" #TEMP4 "],  4              \n\t"    \

-+  "addiu  %[" #TEMP8 "],  %[" #TEMP8 "],  30000          \n\t"    \

-+  "addiu  %[" #TEMP12 "], %[" #TEMP12 "], 12000          \n\t"    \

-+  "addiu  %[" #TEMP8 "],  %[" #TEMP8 "],  21000          \n\t"    \

-+  "subu   %[" #TEMP8 "],  %[" #TEMP8 "],  %[temp18]      \n\t"    \

-+  "sra    %[" #TEMP12 "], %[" #TEMP12 "], 16             \n\t"    \

-+  "sra    %[" #TEMP8 "],  %[" #TEMP8 "],  16             \n\t"    \

-+  "addiu  %[temp16],    %[" #TEMP12 "], 1                \n\t"    \

-+  "movn   %[" #TEMP12 "], %[temp16],    %[temp19]        \n\t"    \

-+  "sh     %[" #TEMP0 "],  " #A "(%[temp20])              \n\t"    \

-+  "sh     %[" #TEMP4 "],  " #C "(%[temp20])              \n\t"    \

-+  "sh     %[" #TEMP8 "],  " #D "(%[temp20])              \n\t"    \

-+  "sh     %[" #TEMP12 "], " #B "(%[temp20])              \n\t"

- 

- static void FTransform(const uint8_t* src, const uint8_t* ref, int16_t* out) {

-   int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8;

-@@ -516,14 +516,14 @@
- #if !defined(WORK_AROUND_GCC)

- 

- #define GET_SSE_INNER(A, B, C, D)                               \

--  "lbu     %[temp0],    "#A"(%[a])                   \n\t"      \

--  "lbu     %[temp1],    "#A"(%[b])                   \n\t"      \

--  "lbu     %[temp2],    "#B"(%[a])                   \n\t"      \

--  "lbu     %[temp3],    "#B"(%[b])                   \n\t"      \

--  "lbu     %[temp4],    "#C"(%[a])                   \n\t"      \

--  "lbu     %[temp5],    "#C"(%[b])                   \n\t"      \

--  "lbu     %[temp6],    "#D"(%[a])                   \n\t"      \

--  "lbu     %[temp7],    "#D"(%[b])                   \n\t"      \

-+  "lbu     %[temp0],    " #A "(%[a])                 \n\t"      \

-+  "lbu     %[temp1],    " #A "(%[b])                 \n\t"      \

-+  "lbu     %[temp2],    " #B "(%[a])                 \n\t"      \

-+  "lbu     %[temp3],    " #B "(%[b])                 \n\t"      \

-+  "lbu     %[temp4],    " #C "(%[a])                 \n\t"      \

-+  "lbu     %[temp5],    " #C "(%[b])                 \n\t"      \

-+  "lbu     %[temp6],    " #D "(%[a])                 \n\t"      \

-+  "lbu     %[temp7],    " #D "(%[b])                 \n\t"      \

-   "subu    %[temp0],    %[temp0],     %[temp1]       \n\t"      \

-   "subu    %[temp2],    %[temp2],     %[temp3]       \n\t"      \

-   "subu    %[temp4],    %[temp4],     %[temp5]       \n\t"      \

-diff --git a/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c
-index 56db07c..44f6fd2 100644
---- a/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c
-@@ -27,25 +27,25 @@
- // I - input (macro doesn't change it)

- #define ADD_SUB_HALVES_X4(O0, O1, O2, O3, O4, O5, O6, O7,                      \

-                           I0, I1, I2, I3, I4, I5, I6, I7)                      \

--  "addq.ph          %["#O0"],   %["#I0"],  %["#I1"]           \n\t"            \

--  "subq.ph          %["#O1"],   %["#I0"],  %["#I1"]           \n\t"            \

--  "addq.ph          %["#O2"],   %["#I2"],  %["#I3"]           \n\t"            \

--  "subq.ph          %["#O3"],   %["#I2"],  %["#I3"]           \n\t"            \

--  "addq.ph          %["#O4"],   %["#I4"],  %["#I5"]           \n\t"            \

--  "subq.ph          %["#O5"],   %["#I4"],  %["#I5"]           \n\t"            \

--  "addq.ph          %["#O6"],   %["#I6"],  %["#I7"]           \n\t"            \

--  "subq.ph          %["#O7"],   %["#I6"],  %["#I7"]           \n\t"

-+  "addq.ph          %[" #O0 "],   %[" #I0 "],  %[" #I1 "]     \n\t"            \

-+  "subq.ph          %[" #O1 "],   %[" #I0 "],  %[" #I1 "]     \n\t"            \

-+  "addq.ph          %[" #O2 "],   %[" #I2 "],  %[" #I3 "]     \n\t"            \

-+  "subq.ph          %[" #O3 "],   %[" #I2 "],  %[" #I3 "]     \n\t"            \

-+  "addq.ph          %[" #O4 "],   %[" #I4 "],  %[" #I5 "]     \n\t"            \

-+  "subq.ph          %[" #O5 "],   %[" #I4 "],  %[" #I5 "]     \n\t"            \

-+  "addq.ph          %[" #O6 "],   %[" #I6 "],  %[" #I7 "]     \n\t"            \

-+  "subq.ph          %[" #O7 "],   %[" #I6 "],  %[" #I7 "]     \n\t"

- 

- // IO - input/output

- #define ABS_X8(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7)                         \

--  "absq_s.ph        %["#IO0"],   %["#IO0"]                    \n\t"            \

--  "absq_s.ph        %["#IO1"],   %["#IO1"]                    \n\t"            \

--  "absq_s.ph        %["#IO2"],   %["#IO2"]                    \n\t"            \

--  "absq_s.ph        %["#IO3"],   %["#IO3"]                    \n\t"            \

--  "absq_s.ph        %["#IO4"],   %["#IO4"]                    \n\t"            \

--  "absq_s.ph        %["#IO5"],   %["#IO5"]                    \n\t"            \

--  "absq_s.ph        %["#IO6"],   %["#IO6"]                    \n\t"            \

--  "absq_s.ph        %["#IO7"],   %["#IO7"]                    \n\t"

-+  "absq_s.ph        %[" #IO0 "],   %[" #IO0 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO1 "],   %[" #IO1 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO2 "],   %[" #IO2 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO3 "],   %[" #IO3 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO4 "],   %[" #IO4 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO5 "],   %[" #IO5 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO6 "],   %[" #IO6 "]                \n\t"            \

-+  "absq_s.ph        %[" #IO7 "],   %[" #IO7 "]                \n\t"

- 

- // dpa.w.ph $ac0 temp0 ,temp1

- //  $ac += temp0[31..16] * temp1[31..16] + temp0[15..0] * temp1[15..0]

-@@ -56,15 +56,15 @@
- #define MUL_HALF(O0, I0, I1, I2, I3, I4, I5, I6, I7,                           \

-                  I8, I9, I10, I11, I12, I13, I14, I15)                         \

-     "mult            $ac0,      $zero,     $zero              \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I2"],  %["#I0"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I5"],  %["#I6"]           \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I8"],  %["#I9"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I11"], %["#I4"]           \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I12"], %["#I7"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I13"], %["#I1"]           \n\t"            \

--    "dpa.w.ph        $ac0,      %["#I14"], %["#I3"]           \n\t"            \

--    "dpax.w.ph       $ac0,      %["#I15"], %["#I10"]          \n\t"            \

--    "mflo            %["#O0"],  $ac0                          \n\t"

-+    "dpa.w.ph        $ac0,      %[" #I2 "],  %[" #I0 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I5 "],  %[" #I6 "]       \n\t"            \

-+    "dpa.w.ph        $ac0,      %[" #I8 "],  %[" #I9 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I11 "], %[" #I4 "]       \n\t"            \

-+    "dpa.w.ph        $ac0,      %[" #I12 "], %[" #I7 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I13 "], %[" #I1 "]       \n\t"            \

-+    "dpa.w.ph        $ac0,      %[" #I14 "], %[" #I3 "]       \n\t"            \

-+    "dpax.w.ph       $ac0,      %[" #I15 "], %[" #I10 "]      \n\t"            \

-+    "mflo            %[" #O0 "],  $ac0                        \n\t"

- 

- #define OUTPUT_EARLY_CLOBBER_REGS_17()                                         \

-   OUTPUT_EARLY_CLOBBER_REGS_10(),                                              \

-@@ -77,69 +77,69 @@
- // A - offset in bytes to load from src and ref buffers

- // TEMP0..TEMP3 - registers for corresponding tmp elements

- #define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3)                         \

--  "lw              %["#TEMP0"],   0(%[args])                        \n\t"      \

--  "lw              %["#TEMP1"],   4(%[args])                        \n\t"      \

--  "lw              %["#TEMP2"],   "XSTR(BPS)"*"#A"(%["#TEMP0"])     \n\t"      \

--  "lw              %["#TEMP3"],   "XSTR(BPS)"*"#A"(%["#TEMP1"])     \n\t"      \

--  "preceu.ph.qbl   %["#TEMP0"],   %["#TEMP2"]                       \n\t"      \

--  "preceu.ph.qbl   %["#TEMP1"],   %["#TEMP3"]                       \n\t"      \

--  "preceu.ph.qbr   %["#TEMP2"],   %["#TEMP2"]                       \n\t"      \

--  "preceu.ph.qbr   %["#TEMP3"],   %["#TEMP3"]                       \n\t"      \

--  "subq.ph         %["#TEMP0"],   %["#TEMP0"],   %["#TEMP1"]        \n\t"      \

--  "subq.ph         %["#TEMP2"],   %["#TEMP2"],   %["#TEMP3"]        \n\t"      \

--  "rotr            %["#TEMP0"],   %["#TEMP0"],   16                 \n\t"      \

--  "addq.ph         %["#TEMP1"],   %["#TEMP2"],   %["#TEMP0"]        \n\t"      \

--  "subq.ph         %["#TEMP3"],   %["#TEMP2"],   %["#TEMP0"]        \n\t"      \

--  "seh             %["#TEMP0"],   %["#TEMP1"]                       \n\t"      \

--  "sra             %[temp16],     %["#TEMP1"],   16                 \n\t"      \

--  "seh             %[temp19],     %["#TEMP3"]                       \n\t"      \

--  "sra             %["#TEMP3"],   %["#TEMP3"],   16                 \n\t"      \

--  "subu            %["#TEMP2"],   %["#TEMP0"],   %[temp16]          \n\t"      \

--  "addu            %["#TEMP0"],   %["#TEMP0"],   %[temp16]          \n\t"      \

--  "mul             %[temp17],     %[temp19],     %[c2217]           \n\t"      \

--  "mul             %[temp18],     %["#TEMP3"],   %[c5352]           \n\t"      \

--  "mul             %["#TEMP1"],   %[temp19],     %[c5352]           \n\t"      \

--  "mul             %[temp16],     %["#TEMP3"],   %[c2217]           \n\t"      \

--  "sll             %["#TEMP2"],   %["#TEMP2"],   3                  \n\t"      \

--  "sll             %["#TEMP0"],   %["#TEMP0"],   3                  \n\t"      \

--  "subu            %["#TEMP3"],   %[temp17],     %[temp18]          \n\t"      \

--  "addu            %["#TEMP1"],   %[temp16],     %["#TEMP1"]        \n\t"      \

--  "addiu           %["#TEMP3"],   %["#TEMP3"],   937                \n\t"      \

--  "addiu           %["#TEMP1"],   %["#TEMP1"],   1812               \n\t"      \

--  "sra             %["#TEMP3"],   %["#TEMP3"],   9                  \n\t"      \

--  "sra             %["#TEMP1"],   %["#TEMP1"],   9                  \n\t"

-+  "lw              %[" #TEMP0 "],   0(%[args])                          \n\t"  \

-+  "lw              %[" #TEMP1 "],   4(%[args])                          \n\t"  \

-+  "lw              %[" #TEMP2 "],   "XSTR(BPS)"*" #A "(%[" #TEMP0 "])   \n\t"  \

-+  "lw              %[" #TEMP3 "],   "XSTR(BPS)"*" #A "(%[" #TEMP1 "])   \n\t"  \

-+  "preceu.ph.qbl   %[" #TEMP0 "],   %[" #TEMP2 "]                       \n\t"  \

-+  "preceu.ph.qbl   %[" #TEMP1 "],   %[" #TEMP3 "]                       \n\t"  \

-+  "preceu.ph.qbr   %[" #TEMP2 "],   %[" #TEMP2 "]                       \n\t"  \

-+  "preceu.ph.qbr   %[" #TEMP3 "],   %[" #TEMP3 "]                       \n\t"  \

-+  "subq.ph         %[" #TEMP0 "],   %[" #TEMP0 "],   %[" #TEMP1 "]      \n\t"  \

-+  "subq.ph         %[" #TEMP2 "],   %[" #TEMP2 "],   %[" #TEMP3 "]      \n\t"  \

-+  "rotr            %[" #TEMP0 "],   %[" #TEMP0 "],   16                 \n\t"  \

-+  "addq.ph         %[" #TEMP1 "],   %[" #TEMP2 "],   %[" #TEMP0 "]      \n\t"  \

-+  "subq.ph         %[" #TEMP3 "],   %[" #TEMP2 "],   %[" #TEMP0 "]      \n\t"  \

-+  "seh             %[" #TEMP0 "],   %[" #TEMP1 "]                       \n\t"  \

-+  "sra             %[temp16],     %[" #TEMP1 "],   16                   \n\t"  \

-+  "seh             %[temp19],     %[" #TEMP3 "]                         \n\t"  \

-+  "sra             %[" #TEMP3 "],   %[" #TEMP3 "],   16                 \n\t"  \

-+  "subu            %[" #TEMP2 "],   %[" #TEMP0 "],   %[temp16]          \n\t"  \

-+  "addu            %[" #TEMP0 "],   %[" #TEMP0 "],   %[temp16]          \n\t"  \

-+  "mul             %[temp17],     %[temp19],     %[c2217]               \n\t"  \

-+  "mul             %[temp18],     %[" #TEMP3 "],   %[c5352]             \n\t"  \

-+  "mul             %[" #TEMP1 "],   %[temp19],     %[c5352]             \n\t"  \

-+  "mul             %[temp16],     %[" #TEMP3 "],   %[c2217]             \n\t"  \

-+  "sll             %[" #TEMP2 "],   %[" #TEMP2 "],   3                  \n\t"  \

-+  "sll             %[" #TEMP0 "],   %[" #TEMP0 "],   3                  \n\t"  \

-+  "subu            %[" #TEMP3 "],   %[temp17],     %[temp18]            \n\t"  \

-+  "addu            %[" #TEMP1 "],   %[temp16],     %[" #TEMP1 "]        \n\t"  \

-+  "addiu           %[" #TEMP3 "],   %[" #TEMP3 "],   937                \n\t"  \

-+  "addiu           %[" #TEMP1 "],   %[" #TEMP1 "],   1812               \n\t"  \

-+  "sra             %[" #TEMP3 "],   %[" #TEMP3 "],   9                  \n\t"  \

-+  "sra             %[" #TEMP1 "],   %[" #TEMP1 "],   9                  \n\t"

- 

- // macro for one vertical pass in FTransform

- // temp0..temp15 holds tmp[0]..tmp[15]

- // A..D - offsets in bytes to store to out buffer

- // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements

- #define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12)                 \

--  "addu            %[temp16],     %["#TEMP0"],   %["#TEMP12"] \n\t"            \

--  "subu            %[temp19],     %["#TEMP0"],   %["#TEMP12"] \n\t"            \

--  "addu            %[temp17],     %["#TEMP4"],   %["#TEMP8"]  \n\t"            \

--  "subu            %[temp18],     %["#TEMP4"],   %["#TEMP8"]  \n\t"            \

--  "mul             %["#TEMP8"],   %[temp19],     %[c2217]     \n\t"            \

--  "mul             %["#TEMP12"],  %[temp18],     %[c2217]     \n\t"            \

--  "mul             %["#TEMP4"],   %[temp19],     %[c5352]     \n\t"            \

--  "mul             %[temp18],     %[temp18],     %[c5352]     \n\t"            \

--  "addiu           %[temp16],     %[temp16],     7            \n\t"            \

--  "addu            %["#TEMP0"],   %[temp16],     %[temp17]    \n\t"            \

--  "sra             %["#TEMP0"],   %["#TEMP0"],   4            \n\t"            \

--  "addu            %["#TEMP12"],  %["#TEMP12"],  %["#TEMP4"]  \n\t"            \

--  "subu            %["#TEMP4"],   %[temp16],     %[temp17]    \n\t"            \

--  "sra             %["#TEMP4"],   %["#TEMP4"],   4            \n\t"            \

--  "addiu           %["#TEMP8"],   %["#TEMP8"],   30000        \n\t"            \

--  "addiu           %["#TEMP12"],  %["#TEMP12"],  12000        \n\t"            \

--  "addiu           %["#TEMP8"],   %["#TEMP8"],   21000        \n\t"            \

--  "subu            %["#TEMP8"],   %["#TEMP8"],   %[temp18]    \n\t"            \

--  "sra             %["#TEMP12"],  %["#TEMP12"],  16           \n\t"            \

--  "sra             %["#TEMP8"],   %["#TEMP8"],   16           \n\t"            \

--  "addiu           %[temp16],     %["#TEMP12"],  1            \n\t"            \

--  "movn            %["#TEMP12"],  %[temp16],     %[temp19]    \n\t"            \

--  "sh              %["#TEMP0"],   "#A"(%[temp20])             \n\t"            \

--  "sh              %["#TEMP4"],   "#C"(%[temp20])             \n\t"            \

--  "sh              %["#TEMP8"],   "#D"(%[temp20])             \n\t"            \

--  "sh              %["#TEMP12"],  "#B"(%[temp20])             \n\t"

-+  "addu            %[temp16],     %[" #TEMP0 "],   %[" #TEMP12 "]   \n\t"      \

-+  "subu            %[temp19],     %[" #TEMP0 "],   %[" #TEMP12 "]   \n\t"      \

-+  "addu            %[temp17],     %[" #TEMP4 "],   %[" #TEMP8 "]    \n\t"      \

-+  "subu            %[temp18],     %[" #TEMP4 "],   %[" #TEMP8 "]    \n\t"      \

-+  "mul             %[" #TEMP8 "],   %[temp19],     %[c2217]         \n\t"      \

-+  "mul             %[" #TEMP12 "],  %[temp18],     %[c2217]         \n\t"      \

-+  "mul             %[" #TEMP4 "],   %[temp19],     %[c5352]         \n\t"      \

-+  "mul             %[temp18],     %[temp18],     %[c5352]           \n\t"      \

-+  "addiu           %[temp16],     %[temp16],     7                  \n\t"      \

-+  "addu            %[" #TEMP0 "],   %[temp16],     %[temp17]        \n\t"      \

-+  "sra             %[" #TEMP0 "],   %[" #TEMP0 "],   4              \n\t"      \

-+  "addu            %[" #TEMP12 "],  %[" #TEMP12 "],  %[" #TEMP4 "]  \n\t"      \

-+  "subu            %[" #TEMP4 "],   %[temp16],     %[temp17]        \n\t"      \

-+  "sra             %[" #TEMP4 "],   %[" #TEMP4 "],   4              \n\t"      \

-+  "addiu           %[" #TEMP8 "],   %[" #TEMP8 "],   30000          \n\t"      \

-+  "addiu           %[" #TEMP12 "],  %[" #TEMP12 "],  12000          \n\t"      \

-+  "addiu           %[" #TEMP8 "],   %[" #TEMP8 "],   21000          \n\t"      \

-+  "subu            %[" #TEMP8 "],   %[" #TEMP8 "],   %[temp18]      \n\t"      \

-+  "sra             %[" #TEMP12 "],  %[" #TEMP12 "],  16             \n\t"      \

-+  "sra             %[" #TEMP8 "],   %[" #TEMP8 "],   16             \n\t"      \

-+  "addiu           %[temp16],     %[" #TEMP12 "],  1                \n\t"      \

-+  "movn            %[" #TEMP12 "],  %[temp16],     %[temp19]        \n\t"      \

-+  "sh              %[" #TEMP0 "],   " #A "(%[temp20])               \n\t"      \

-+  "sh              %[" #TEMP4 "],   " #C "(%[temp20])               \n\t"      \

-+  "sh              %[" #TEMP8 "],   " #D "(%[temp20])               \n\t"      \

-+  "sh              %[" #TEMP12 "],  " #B "(%[temp20])               \n\t"

- 

- static void FTransform(const uint8_t* src, const uint8_t* ref, int16_t* out) {

-   const int c2217 = 2217;

-@@ -329,11 +329,11 @@
- // Intra predictions

- 

- #define FILL_PART(J, SIZE)                                          \

--    "usw        %[value],  0+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

--    "usw        %[value],  4+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

--  ".if "#SIZE" == 16                                     \n\t"      \

--    "usw        %[value],  8+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

--    "usw        %[value], 12+"#J"*"XSTR(BPS)"(%[dst])    \n\t"      \

-+    "usw        %[value],  0+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-+    "usw        %[value],  4+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-+  ".if " #SIZE " == 16                                   \n\t"      \

-+    "usw        %[value],  8+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-+    "usw        %[value], 12+" #J "*"XSTR(BPS)"(%[dst])  \n\t"      \

-   ".endif                                                \n\t"

- 

- #define FILL_8_OR_16(DST, VALUE, SIZE) do {                         \

-@@ -348,7 +348,7 @@
-     FILL_PART( 5, SIZE)                                             \

-     FILL_PART( 6, SIZE)                                             \

-     FILL_PART( 7, SIZE)                                             \

--  ".if "#SIZE" == 16                                     \n\t"      \

-+  ".if " #SIZE " == 16                                   \n\t"      \

-     FILL_PART( 8, 16)                                               \

-     FILL_PART( 9, 16)                                               \

-     FILL_PART(10, 16)                                               \

-@@ -425,7 +425,7 @@
-     CLIPPING()                                                                 \

-     "usw             %[temp0],   0(%[dst])               \n\t"                 \

-     "usw             %[temp1],   4(%[dst])               \n\t"                 \

--  ".if "#SIZE" == 16                                     \n\t"                 \

-+  ".if " #SIZE " == 16                                   \n\t"                 \

-     "ulw             %[temp0],   8(%[top])               \n\t"                 \

-     "ulw             %[temp1],   12(%[top])              \n\t"                 \

-     CLIPPING()                                                                 \

-@@ -1060,8 +1060,8 @@
- #if !defined(WORK_AROUND_GCC)

- 

- #define GET_SSE_INNER(A)                                                  \

--  "lw               %[temp0],    "#A"(%[a])                    \n\t"      \

--  "lw               %[temp1],    "#A"(%[b])                    \n\t"      \

-+  "lw               %[temp0],    " #A "(%[a])                  \n\t"      \

-+  "lw               %[temp1],    " #A "(%[b])                  \n\t"      \

-   "preceu.ph.qbr    %[temp2],    %[temp0]                      \n\t"      \

-   "preceu.ph.qbl    %[temp0],    %[temp0]                      \n\t"      \

-   "preceu.ph.qbr    %[temp3],    %[temp1]                      \n\t"      \

-@@ -1185,28 +1185,28 @@
- // N - offset in bytes (n * 2)

- // N1 - offset in bytes ((n + 1) * 2)

- #define QUANTIZE_ONE(J, K, N, N1)                                         \

--  "ulw         %[temp1],     "#J"(%[ppin])                   \n\t"        \

--  "ulw         %[temp2],     "#J"(%[ppsharpen])              \n\t"        \

--  "lhu         %[temp3],     "#K"(%[ppzthresh])              \n\t"        \

--  "lhu         %[temp6],     "#K"+4(%[ppzthresh])            \n\t"        \

-+  "ulw         %[temp1],     " #J "(%[ppin])                 \n\t"        \

-+  "ulw         %[temp2],     " #J "(%[ppsharpen])            \n\t"        \

-+  "lhu         %[temp3],     " #K "(%[ppzthresh])            \n\t"        \

-+  "lhu         %[temp6],     " #K "+4(%[ppzthresh])          \n\t"        \

-   "absq_s.ph   %[temp4],     %[temp1]                        \n\t"        \

-   "ins         %[temp3],     %[temp6],         16,       16  \n\t"        \

-   "addu.ph     %[coeff],     %[temp4],         %[temp2]      \n\t"        \

-   "shra.ph     %[sign],      %[temp1],         15            \n\t"        \

-   "li          %[level],     0x10001                         \n\t"        \

-   "cmp.lt.ph   %[temp3],     %[coeff]                        \n\t"        \

--  "lhu         %[temp1],     "#J"(%[ppiq])                   \n\t"        \

-+  "lhu         %[temp1],     " #J "(%[ppiq])                 \n\t"        \

-   "pick.ph     %[temp5],     %[level],         $0            \n\t"        \

--  "lw          %[temp2],     "#K"(%[ppbias])                 \n\t"        \

-+  "lw          %[temp2],     " #K "(%[ppbias])               \n\t"        \

-   "beqz        %[temp5],     0f                              \n\t"        \

--  "lhu         %[temp3],     "#J"(%[ppq])                    \n\t"        \

-+  "lhu         %[temp3],     " #J "(%[ppq])                  \n\t"        \

-   "beq         %[temp5],     %[level],         1f            \n\t"        \

-   "andi        %[temp5],     %[temp5],         0x1           \n\t"        \

-   "andi        %[temp4],     %[coeff],         0xffff        \n\t"        \

-   "beqz        %[temp5],     2f                              \n\t"        \

-   "mul         %[level],     %[temp4],         %[temp1]      \n\t"        \

--  "sh          $0,           "#J"+2(%[ppin])                 \n\t"        \

--  "sh          $0,           "#N1"(%[pout])                  \n\t"        \

-+  "sh          $0,           " #J "+2(%[ppin])               \n\t"        \

-+  "sh          $0,           " #N1 "(%[pout])                \n\t"        \

-   "addu        %[level],     %[level],         %[temp2]      \n\t"        \

-   "sra         %[level],     %[level],         17            \n\t"        \

-   "slt         %[temp4],     %[max_level],     %[level]      \n\t"        \

-@@ -1216,15 +1216,15 @@
-   "subu        %[level],     %[level],         %[temp6]      \n\t"        \

-   "mul         %[temp5],     %[level],         %[temp3]      \n\t"        \

-   "or          %[ret],       %[ret],           %[level]      \n\t"        \

--  "sh          %[level],     "#N"(%[pout])                   \n\t"        \

--  "sh          %[temp5],     "#J"(%[ppin])                   \n\t"        \

-+  "sh          %[level],     " #N "(%[pout])                 \n\t"        \

-+  "sh          %[temp5],     " #J "(%[ppin])                 \n\t"        \

-   "j           3f                                            \n\t"        \

- "2:                                                          \n\t"        \

--  "lhu         %[temp1],     "#J"+2(%[ppiq])                 \n\t"        \

-+  "lhu         %[temp1],     " #J "+2(%[ppiq])               \n\t"        \

-   "srl         %[temp5],     %[coeff],         16            \n\t"        \

-   "mul         %[level],     %[temp5],         %[temp1]      \n\t"        \

--  "lw          %[temp2],     "#K"+4(%[ppbias])               \n\t"        \

--  "lhu         %[temp3],     "#J"+2(%[ppq])                  \n\t"        \

-+  "lw          %[temp2],     " #K "+4(%[ppbias])             \n\t"        \

-+  "lhu         %[temp3],     " #J "+2(%[ppq])                \n\t"        \

-   "addu        %[level],     %[level],         %[temp2]      \n\t"        \

-   "sra         %[level],     %[level],         17            \n\t"        \

-   "srl         %[temp6],     %[sign],          16            \n\t"        \

-@@ -1233,20 +1233,20 @@
-   "xor         %[level],     %[level],         %[temp6]      \n\t"        \

-   "subu        %[level],     %[level],         %[temp6]      \n\t"        \

-   "mul         %[temp5],     %[level],         %[temp3]      \n\t"        \

--  "sh          $0,           "#J"(%[ppin])                   \n\t"        \

--  "sh          $0,           "#N"(%[pout])                   \n\t"        \

-+  "sh          $0,           " #J "(%[ppin])                 \n\t"        \

-+  "sh          $0,           " #N "(%[pout])                 \n\t"        \

-   "or          %[ret],       %[ret],           %[level]      \n\t"        \

--  "sh          %[temp5],     "#J"+2(%[ppin])                 \n\t"        \

--  "sh          %[level],     "#N1"(%[pout])                  \n\t"        \

-+  "sh          %[temp5],     " #J "+2(%[ppin])               \n\t"        \

-+  "sh          %[level],     " #N1 "(%[pout])                \n\t"        \

-   "j           3f                                            \n\t"        \

- "1:                                                          \n\t"        \

--  "lhu         %[temp1],     "#J"(%[ppiq])                   \n\t"        \

--  "lw          %[temp2],     "#K"(%[ppbias])                 \n\t"        \

--  "ulw         %[temp3],     "#J"(%[ppq])                    \n\t"        \

-+  "lhu         %[temp1],     " #J "(%[ppiq])                 \n\t"        \

-+  "lw          %[temp2],     " #K "(%[ppbias])               \n\t"        \

-+  "ulw         %[temp3],     " #J "(%[ppq])                  \n\t"        \

-   "andi        %[temp5],     %[coeff],         0xffff        \n\t"        \

-   "srl         %[temp0],     %[coeff],         16            \n\t"        \

--  "lhu         %[temp6],     "#J"+2(%[ppiq])                 \n\t"        \

--  "lw          %[coeff],     "#K"+4(%[ppbias])               \n\t"        \

-+  "lhu         %[temp6],     " #J "+2(%[ppiq])               \n\t"        \

-+  "lw          %[coeff],     " #K "+4(%[ppbias])             \n\t"        \

-   "mul         %[level],     %[temp5],         %[temp1]      \n\t"        \

-   "mul         %[temp4],     %[temp0],         %[temp6]      \n\t"        \

-   "addu        %[level],     %[level],         %[temp2]      \n\t"        \

-@@ -1259,15 +1259,15 @@
-   "subu.ph     %[level],     %[level],         %[sign]       \n\t"        \

-   "mul.ph      %[temp3],     %[level],         %[temp3]      \n\t"        \

-   "or          %[ret],       %[ret],           %[level]      \n\t"        \

--  "sh          %[level],     "#N"(%[pout])                   \n\t"        \

-+  "sh          %[level],     " #N "(%[pout])                 \n\t"        \

-   "srl         %[level],     %[level],         16            \n\t"        \

--  "sh          %[level],     "#N1"(%[pout])                  \n\t"        \

--  "usw         %[temp3],     "#J"(%[ppin])                   \n\t"        \

-+  "sh          %[level],     " #N1 "(%[pout])                \n\t"        \

-+  "usw         %[temp3],     " #J "(%[ppin])                 \n\t"        \

-   "j           3f                                            \n\t"        \

- "0:                                                          \n\t"        \

--  "sh          $0,           "#N"(%[pout])                   \n\t"        \

--  "sh          $0,           "#N1"(%[pout])                  \n\t"        \

--  "usw         $0,           "#J"(%[ppin])                   \n\t"        \

-+  "sh          $0,           " #N "(%[pout])                 \n\t"        \

-+  "sh          $0,           " #N1 "(%[pout])                \n\t"        \

-+  "usw         $0,           " #J "(%[ppin])                 \n\t"        \

- "3:                                                          \n\t"

- 

- static int QuantizeBlock(int16_t in[16], int16_t out[16],

-@@ -1326,37 +1326,37 @@
- // A, B, C, D - offset in bytes to load from in buffer

- // TEMP0, TEMP1 - registers for corresponding tmp elements

- #define HORIZONTAL_PASS_WHT(A, B, C, D, TEMP0, TEMP1)                          \

--  "lh              %["#TEMP0"],  "#A"(%[in])                \n\t"              \

--  "lh              %["#TEMP1"],  "#B"(%[in])                \n\t"              \

--  "lh              %[temp8],     "#C"(%[in])                \n\t"              \

--  "lh              %[temp9],     "#D"(%[in])                \n\t"              \

--  "ins             %["#TEMP1"],  %["#TEMP0"],  16,  16      \n\t"              \

-+  "lh              %[" #TEMP0 "],  " #A "(%[in])            \n\t"              \

-+  "lh              %[" #TEMP1 "],  " #B "(%[in])            \n\t"              \

-+  "lh              %[temp8],     " #C "(%[in])              \n\t"              \

-+  "lh              %[temp9],     " #D "(%[in])              \n\t"              \

-+  "ins             %[" #TEMP1 "],  %[" #TEMP0 "],  16,  16  \n\t"              \

-   "ins             %[temp9],     %[temp8],     16,  16      \n\t"              \

--  "subq.ph         %[temp8],     %["#TEMP1"],  %[temp9]     \n\t"              \

--  "addq.ph         %[temp9],     %["#TEMP1"],  %[temp9]     \n\t"              \

--  "precrq.ph.w     %["#TEMP0"],  %[temp8],     %[temp9]     \n\t"              \

-+  "subq.ph         %[temp8],     %[" #TEMP1 "],  %[temp9]   \n\t"              \

-+  "addq.ph         %[temp9],     %[" #TEMP1 "],  %[temp9]   \n\t"              \

-+  "precrq.ph.w     %[" #TEMP0 "],  %[temp8],     %[temp9]   \n\t"              \

-   "append          %[temp8],     %[temp9],     16           \n\t"              \

--  "subq.ph         %["#TEMP1"],  %["#TEMP0"],  %[temp8]     \n\t"              \

--  "addq.ph         %["#TEMP0"],  %["#TEMP0"],  %[temp8]     \n\t"              \

--  "rotr            %["#TEMP1"],  %["#TEMP1"],  16           \n\t"

-+  "subq.ph         %[" #TEMP1 "],  %[" #TEMP0 "],  %[temp8] \n\t"              \

-+  "addq.ph         %[" #TEMP0 "],  %[" #TEMP0 "],  %[temp8] \n\t"              \

-+  "rotr            %[" #TEMP1 "],  %[" #TEMP1 "],  16       \n\t"

- 

- // macro for one vertical pass in FTransformWHT

- // temp0..temp7 holds tmp[0]..tmp[15]

- // A, B, C, D - offsets in bytes to store to out buffer

- // TEMP0, TEMP2, TEMP4 and TEMP6 - registers for corresponding tmp elements

- #define VERTICAL_PASS_WHT(A, B, C, D, TEMP0, TEMP2, TEMP4, TEMP6)              \

--  "addq.ph         %[temp8],     %["#TEMP0"],  %["#TEMP4"]  \n\t"              \

--  "addq.ph         %[temp9],     %["#TEMP2"],  %["#TEMP6"]  \n\t"              \

--  "subq.ph         %["#TEMP2"],  %["#TEMP2"],  %["#TEMP6"]  \n\t"              \

--  "subq.ph         %["#TEMP6"],  %["#TEMP0"],  %["#TEMP4"]  \n\t"              \

--  "addqh.ph        %["#TEMP0"],  %[temp8],     %[temp9]     \n\t"              \

--  "subqh.ph        %["#TEMP4"],  %["#TEMP6"],  %["#TEMP2"]  \n\t"              \

--  "addqh.ph        %["#TEMP2"],  %["#TEMP2"],  %["#TEMP6"]  \n\t"              \

--  "subqh.ph        %["#TEMP6"],  %[temp8],     %[temp9]     \n\t"              \

--  "usw             %["#TEMP0"],  "#A"(%[out])               \n\t"              \

--  "usw             %["#TEMP2"],  "#B"(%[out])               \n\t"              \

--  "usw             %["#TEMP4"],  "#C"(%[out])               \n\t"              \

--  "usw             %["#TEMP6"],  "#D"(%[out])               \n\t"

-+  "addq.ph         %[temp8],     %[" #TEMP0 "],  %[" #TEMP4 "]    \n\t"        \

-+  "addq.ph         %[temp9],     %[" #TEMP2 "],  %[" #TEMP6 "]    \n\t"        \

-+  "subq.ph         %[" #TEMP2 "],  %[" #TEMP2 "],  %[" #TEMP6 "]  \n\t"        \

-+  "subq.ph         %[" #TEMP6 "],  %[" #TEMP0 "],  %[" #TEMP4 "]  \n\t"        \

-+  "addqh.ph        %[" #TEMP0 "],  %[temp8],     %[temp9]         \n\t"        \

-+  "subqh.ph        %[" #TEMP4 "],  %[" #TEMP6 "],  %[" #TEMP2 "]  \n\t"        \

-+  "addqh.ph        %[" #TEMP2 "],  %[" #TEMP2 "],  %[" #TEMP6 "]  \n\t"        \

-+  "subqh.ph        %[" #TEMP6 "],  %[temp8],     %[temp9]         \n\t"        \

-+  "usw             %[" #TEMP0 "],  " #A "(%[out])                 \n\t"        \

-+  "usw             %[" #TEMP2 "],  " #B "(%[out])                 \n\t"        \

-+  "usw             %[" #TEMP4 "],  " #C "(%[out])                 \n\t"        \

-+  "usw             %[" #TEMP6 "],  " #D "(%[out])                 \n\t"

- 

- static void FTransformWHT(const int16_t* in, int16_t* out) {

-   int temp0, temp1, temp2, temp3, temp4;

-@@ -1385,10 +1385,10 @@
- // convert 8 coeffs at time

- // A, B, C, D - offsets in bytes to load from out buffer

- #define CONVERT_COEFFS_TO_BIN(A, B, C, D)                                      \

--  "ulw        %[temp0],  "#A"(%[out])                  \n\t"                   \

--  "ulw        %[temp1],  "#B"(%[out])                  \n\t"                   \

--  "ulw        %[temp2],  "#C"(%[out])                  \n\t"                   \

--  "ulw        %[temp3],  "#D"(%[out])                  \n\t"                   \

-+  "ulw        %[temp0],  " #A "(%[out])                \n\t"                   \

-+  "ulw        %[temp1],  " #B "(%[out])                \n\t"                   \

-+  "ulw        %[temp2],  " #C "(%[out])                \n\t"                   \

-+  "ulw        %[temp3],  " #D "(%[out])                \n\t"                   \

-   "absq_s.ph  %[temp0],  %[temp0]                      \n\t"                   \

-   "absq_s.ph  %[temp1],  %[temp1]                      \n\t"                   \

-   "absq_s.ph  %[temp2],  %[temp2]                      \n\t"                   \

-diff --git a/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c
-index 66f807d..8134af5 100644
---- a/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c
-@@ -48,7 +48,7 @@
-       "srl       %[temp0],    %[length],    0x2         \n\t"                  \

-       "beqz      %[temp0],    4f                        \n\t"                  \

-       " andi     %[temp6],    %[length],    0x3         \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "lbu       %[temp1],    -1(%[src])                \n\t"                  \

-     "1:                                                 \n\t"                  \

-       "lbu       %[temp2],    0(%[src])                 \n\t"                  \

-@@ -84,7 +84,7 @@
-       "lbu       %[temp1],    -1(%[src])                \n\t"                  \

-       "lbu       %[temp2],    0(%[src])                 \n\t"                  \

-       "addiu     %[src],      %[src],       1           \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "addu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \

-       "sb        %[temp3],    -1(%[src])                \n\t"                  \

-     ".else                                              \n\t"                  \

-@@ -131,7 +131,7 @@
-       "ulw       %[temp3],    4(%[src])                 \n\t"                  \

-       "ulw       %[temp4],    4(%[pred])                \n\t"                  \

-       "addiu     %[src],      %[src],       8           \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "addu.qb   %[temp5],    %[temp1],     %[temp2]    \n\t"                  \

-       "addu.qb   %[temp6],    %[temp3],     %[temp4]    \n\t"                  \

-     ".else                                              \n\t"                  \

-@@ -152,7 +152,7 @@
-       "lbu       %[temp2],    0(%[pred])                \n\t"                  \

-       "addiu     %[src],      %[src],       1           \n\t"                  \

-       "addiu     %[pred],     %[pred],      1           \n\t"                  \

--    ".if "#INVERSE"                                     \n\t"                  \

-+    ".if " #INVERSE "                                   \n\t"                  \

-       "addu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \

-     ".else                                              \n\t"                  \

-       "subu      %[temp3],    %[temp1],     %[temp2]    \n\t"                  \

-@@ -177,7 +177,7 @@
-     __asm__ volatile (                                                         \

-       "lbu       %[temp1],   0(%[src])               \n\t"                     \

-       "lbu       %[temp2],   0(%[pred])              \n\t"                     \

--    ".if "#INVERSE"                                  \n\t"                     \

-+    ".if " #INVERSE "                                \n\t"                     \

-       "addu      %[temp3],   %[temp1],   %[temp2]    \n\t"                     \

-     ".else                                           \n\t"                     \

-       "subu      %[temp3],   %[temp1],   %[temp2]    \n\t"                     \

-diff --git a/Source/LibWebP/src/dsp/dsp.lossless_mips32.c b/Source/LibWebP/src/dsp/dsp.lossless_mips32.c
-index 8ae5958..cdf0e26 100644
---- a/Source/LibWebP/src/dsp/dsp.lossless_mips32.c
-+++ b/Source/LibWebP/src/dsp/dsp.lossless_mips32.c
-
-@@ -278,28 +278,28 @@
- // literal_ and successive histograms could be unaligned

- // so we must use ulw and usw

- #define ADD_TO_OUT(A, B, C, D, E, P0, P1, P2)           \

--    "ulw    %[temp0], "#A"(%["#P0"])        \n\t"       \

--    "ulw    %[temp1], "#B"(%["#P0"])        \n\t"       \

--    "ulw    %[temp2], "#C"(%["#P0"])        \n\t"       \

--    "ulw    %[temp3], "#D"(%["#P0"])        \n\t"       \

--    "ulw    %[temp4], "#A"(%["#P1"])        \n\t"       \

--    "ulw    %[temp5], "#B"(%["#P1"])        \n\t"       \

--    "ulw    %[temp6], "#C"(%["#P1"])        \n\t"       \

--    "ulw    %[temp7], "#D"(%["#P1"])        \n\t"       \

-+    "ulw    %[temp0], " #A "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp1], " #B "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp2], " #C "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp3], " #D "(%[" #P0 "])    \n\t"       \

-+    "ulw    %[temp4], " #A "(%[" #P1 "])    \n\t"       \

-+    "ulw    %[temp5], " #B "(%[" #P1 "])    \n\t"       \

-+    "ulw    %[temp6], " #C "(%[" #P1 "])    \n\t"       \

-+    "ulw    %[temp7], " #D "(%[" #P1 "])    \n\t"       \

-     "addu   %[temp4], %[temp4],   %[temp0]  \n\t"       \

-     "addu   %[temp5], %[temp5],   %[temp1]  \n\t"       \

-     "addu   %[temp6], %[temp6],   %[temp2]  \n\t"       \

-     "addu   %[temp7], %[temp7],   %[temp3]  \n\t"       \

--    "addiu  %["#P0"],  %["#P0"],  16        \n\t"       \

--  ".if "#E" == 1                            \n\t"       \

--    "addiu  %["#P1"],  %["#P1"],  16        \n\t"       \

-+    "addiu  %[" #P0 "],  %[" #P0 "],  16    \n\t"       \

-+  ".if " #E " == 1                          \n\t"       \

-+    "addiu  %[" #P1 "],  %[" #P1 "],  16    \n\t"       \

-   ".endif                                   \n\t"       \

--    "usw    %[temp4], "#A"(%["#P2"])        \n\t"       \

--    "usw    %[temp5], "#B"(%["#P2"])        \n\t"       \

--    "usw    %[temp6], "#C"(%["#P2"])        \n\t"       \

--    "usw    %[temp7], "#D"(%["#P2"])        \n\t"       \

--    "addiu  %["#P2"], %["#P2"],   16        \n\t"       \

--    "bne    %["#P0"], %[LoopEnd], 1b        \n\t"       \

-+    "usw    %[temp4], " #A "(%[" #P2 "])    \n\t"       \

-+    "usw    %[temp5], " #B "(%[" #P2 "])    \n\t"       \

-+    "usw    %[temp6], " #C "(%[" #P2 "])    \n\t"       \

-+    "usw    %[temp7], " #D "(%[" #P2 "])    \n\t"       \

-+    "addiu  %[" #P2 "], %[" #P2 "],   16    \n\t"       \

-+    "bne    %[" #P0 "], %[LoopEnd], 1b      \n\t"       \

-     ".set   pop                             \n\t"       \

- 

- #define ASM_END_COMMON_0                                \

-diff --git a/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c
-index ad55f2c..90aed7f 100644
---- a/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c
-@@ -29,14 +29,14 @@
-     for (x = 0; x < (width >> 2); ++x) {                                       \

-       int tmp1, tmp2, tmp3, tmp4;                                              \

-       __asm__ volatile (                                                       \

--      ".ifc        "#TYPE",  uint8_t                    \n\t"                  \

-+      ".ifc        " #TYPE ",  uint8_t                  \n\t"                  \

-         "lbu       %[tmp1],  0(%[src])                  \n\t"                  \

-         "lbu       %[tmp2],  1(%[src])                  \n\t"                  \

-         "lbu       %[tmp3],  2(%[src])                  \n\t"                  \

-         "lbu       %[tmp4],  3(%[src])                  \n\t"                  \

-         "addiu     %[src],   %[src],      4             \n\t"                  \

-       ".endif                                           \n\t"                  \

--      ".ifc        "#TYPE",  uint32_t                   \n\t"                  \

-+      ".ifc        " #TYPE ",  uint32_t                 \n\t"                  \

-         "lw        %[tmp1],  0(%[src])                  \n\t"                  \

-         "lw        %[tmp2],  4(%[src])                  \n\t"                  \

-         "lw        %[tmp3],  8(%[src])                  \n\t"                  \

-@@ -55,7 +55,7 @@
-         "lwx       %[tmp2],  %[tmp2](%[color_map])      \n\t"                  \

-         "lwx       %[tmp3],  %[tmp3](%[color_map])      \n\t"                  \

-         "lwx       %[tmp4],  %[tmp4](%[color_map])      \n\t"                  \

--      ".ifc        "#TYPE",  uint8_t                    \n\t"                  \

-+      ".ifc        " #TYPE ",  uint8_t                  \n\t"                  \

-         "ext       %[tmp1],  %[tmp1],     8,        8   \n\t"                  \

-         "ext       %[tmp2],  %[tmp2],     8,        8   \n\t"                  \

-         "ext       %[tmp3],  %[tmp3],     8,        8   \n\t"                  \

-@@ -66,7 +66,7 @@
-         "sb        %[tmp4],  3(%[dst])                  \n\t"                  \

-         "addiu     %[dst],   %[dst],      4             \n\t"                  \

-       ".endif                                           \n\t"                  \

--      ".ifc        "#TYPE",  uint32_t                   \n\t"                  \

-+      ".ifc        " #TYPE ",  uint32_t                 \n\t"                  \

-         "sw        %[tmp1],  0(%[dst])                  \n\t"                  \

-         "sw        %[tmp2],  4(%[dst])                  \n\t"                  \

-         "sw        %[tmp3],  8(%[dst])                  \n\t"                  \

-diff --git a/Source/LibWebP/src/dsp/mips_macro.h b/Source/LibWebP/src/dsp/mips_macro.h
-index 4cfb23c..e09d2c4 100644
---- a/Source/LibWebP/src/dsp/mips_macro.h
-+++ b/Source/LibWebP/src/dsp/mips_macro.h
-@@ -25,25 +25,25 @@
- // I - input (macro doesn't change it)

- #define ADD_SUB_HALVES(O0, O1,                                                 \

-                        I0, I1)                                                 \

--  "addq.ph          %["#O0"],   %["#I0"],  %["#I1"]           \n\t"            \

--  "subq.ph          %["#O1"],   %["#I0"],  %["#I1"]           \n\t"

-+  "addq.ph          %[" #O0 "],   %[" #I0 "],  %[" #I1 "]           \n\t"      \

-+  "subq.ph          %[" #O1 "],   %[" #I0 "],  %[" #I1 "]           \n\t"

- 

- // O - output

- // I - input (macro doesn't change it)

- // I[0/1] - offset in bytes

- #define LOAD_IN_X2(O0, O1,                                                     \

-                    I0, I1)                                                     \

--  "lh               %["#O0"],   "#I0"(%[in])                  \n\t"            \

--  "lh               %["#O1"],   "#I1"(%[in])                  \n\t"

-+  "lh               %[" #O0 "],   " #I0 "(%[in])                  \n\t"        \

-+  "lh               %[" #O1 "],   " #I1 "(%[in])                  \n\t"

- 

- // I0 - location

- // I1..I9 - offsets in bytes

- #define LOAD_WITH_OFFSET_X4(O0, O1, O2, O3,                                    \

-                             I0, I1, I2, I3, I4, I5, I6, I7, I8, I9)            \

--  "ulw    %["#O0"],    "#I1"+"XSTR(I9)"*"#I5"(%["#I0"])       \n\t"            \

--  "ulw    %["#O1"],    "#I2"+"XSTR(I9)"*"#I6"(%["#I0"])       \n\t"            \

--  "ulw    %["#O2"],    "#I3"+"XSTR(I9)"*"#I7"(%["#I0"])       \n\t"            \

--  "ulw    %["#O3"],    "#I4"+"XSTR(I9)"*"#I8"(%["#I0"])       \n\t"

-+  "ulw    %[" #O0 "],    " #I1 "+"XSTR(I9)"*" #I5 "(%[" #I0 "])       \n\t"    \

-+  "ulw    %[" #O1 "],    " #I2 "+"XSTR(I9)"*" #I6 "(%[" #I0 "])       \n\t"    \

-+  "ulw    %[" #O2 "],    " #I3 "+"XSTR(I9)"*" #I7 "(%[" #I0 "])       \n\t"    \

-+  "ulw    %[" #O3 "],    " #I4 "+"XSTR(I9)"*" #I8 "(%[" #I0 "])       \n\t"

- 

- // O - output

- // IO - input/output

-@@ -51,42 +51,42 @@
- #define MUL_SHIFT_SUM(O0, O1, O2, O3, O4, O5, O6, O7,                          \

-                       IO0, IO1, IO2, IO3,                                      \

-                       I0, I1, I2, I3, I4, I5, I6, I7)                          \

--  "mul              %["#O0"],   %["#I0"],   %[kC2]            \n\t"            \

--  "mul              %["#O1"],   %["#I0"],   %[kC1]            \n\t"            \

--  "mul              %["#O2"],   %["#I1"],   %[kC2]            \n\t"            \

--  "mul              %["#O3"],   %["#I1"],   %[kC1]            \n\t"            \

--  "mul              %["#O4"],   %["#I2"],   %[kC2]            \n\t"            \

--  "mul              %["#O5"],   %["#I2"],   %[kC1]            \n\t"            \

--  "mul              %["#O6"],   %["#I3"],   %[kC2]            \n\t"            \

--  "mul              %["#O7"],   %["#I3"],   %[kC1]            \n\t"            \

--  "sra              %["#O0"],   %["#O0"],   16                \n\t"            \

--  "sra              %["#O1"],   %["#O1"],   16                \n\t"            \

--  "sra              %["#O2"],   %["#O2"],   16                \n\t"            \

--  "sra              %["#O3"],   %["#O3"],   16                \n\t"            \

--  "sra              %["#O4"],   %["#O4"],   16                \n\t"            \

--  "sra              %["#O5"],   %["#O5"],   16                \n\t"            \

--  "sra              %["#O6"],   %["#O6"],   16                \n\t"            \

--  "sra              %["#O7"],   %["#O7"],   16                \n\t"            \

--  "addu             %["#IO0"],  %["#IO0"],  %["#I4"]          \n\t"            \

--  "addu             %["#IO1"],  %["#IO1"],  %["#I5"]          \n\t"            \

--  "subu             %["#IO2"],  %["#IO2"],  %["#I6"]          \n\t"            \

--  "subu             %["#IO3"],  %["#IO3"],  %["#I7"]          \n\t"

-+  "mul              %[" #O0 "],   %[" #I0 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O1 "],   %[" #I0 "],   %[kC1]        \n\t"            \

-+  "mul              %[" #O2 "],   %[" #I1 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O3 "],   %[" #I1 "],   %[kC1]        \n\t"            \

-+  "mul              %[" #O4 "],   %[" #I2 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O5 "],   %[" #I2 "],   %[kC1]        \n\t"            \

-+  "mul              %[" #O6 "],   %[" #I3 "],   %[kC2]        \n\t"            \

-+  "mul              %[" #O7 "],   %[" #I3 "],   %[kC1]        \n\t"            \

-+  "sra              %[" #O0 "],   %[" #O0 "],   16            \n\t"            \

-+  "sra              %[" #O1 "],   %[" #O1 "],   16            \n\t"            \

-+  "sra              %[" #O2 "],   %[" #O2 "],   16            \n\t"            \

-+  "sra              %[" #O3 "],   %[" #O3 "],   16            \n\t"            \

-+  "sra              %[" #O4 "],   %[" #O4 "],   16            \n\t"            \

-+  "sra              %[" #O5 "],   %[" #O5 "],   16            \n\t"            \

-+  "sra              %[" #O6 "],   %[" #O6 "],   16            \n\t"            \

-+  "sra              %[" #O7 "],   %[" #O7 "],   16            \n\t"            \

-+  "addu             %[" #IO0 "],  %[" #IO0 "],  %[" #I4 "]    \n\t"            \

-+  "addu             %[" #IO1 "],  %[" #IO1 "],  %[" #I5 "]    \n\t"            \

-+  "subu             %[" #IO2 "],  %[" #IO2 "],  %[" #I6 "]    \n\t"            \

-+  "subu             %[" #IO3 "],  %[" #IO3 "],  %[" #I7 "]    \n\t"

- 

- // O - output

- // I - input (macro doesn't change it)

- #define INSERT_HALF_X2(O0, O1,                                                 \

-                        I0, I1)                                                 \

--  "ins              %["#O0"],   %["#I0"], 16,    16           \n\t"            \

--  "ins              %["#O1"],   %["#I1"], 16,    16           \n\t"

-+  "ins              %[" #O0 "],   %[" #I0 "], 16,    16           \n\t"        \

-+  "ins              %[" #O1 "],   %[" #I1 "], 16,    16           \n\t"

- 

- // O - output

- // I - input (macro doesn't change it)

- #define SRA_16(O0, O1, O2, O3,                                                 \

-                I0, I1, I2, I3)                                                 \

--  "sra              %["#O0"],  %["#I0"],  16                  \n\t"            \

--  "sra              %["#O1"],  %["#I1"],  16                  \n\t"            \

--  "sra              %["#O2"],  %["#I2"],  16                  \n\t"            \

--  "sra              %["#O3"],  %["#I3"],  16                  \n\t"

-+  "sra              %[" #O0 "],  %[" #I0 "],  16                  \n\t"        \

-+  "sra              %[" #O1 "],  %[" #I1 "],  16                  \n\t"        \

-+  "sra              %[" #O2 "],  %[" #I2 "],  16                  \n\t"        \

-+  "sra              %[" #O3 "],  %[" #I3 "],  16                  \n\t"

- 

- // temp0[31..16 | 15..0] = temp8[31..16 | 15..0] + temp12[31..16 | 15..0]

- // temp1[31..16 | 15..0] = temp8[31..16 | 15..0] - temp12[31..16 | 15..0]

-@@ -96,22 +96,22 @@
- // I - input (macro doesn't change it)

- #define SHIFT_R_SUM_X2(O0, O1, O2, O3, O4, O5, O6, O7,                         \

-                        I0, I1, I2, I3, I4, I5, I6, I7)                         \

--  "addq.ph          %["#O0"],   %["#I0"],   %["#I4"]          \n\t"            \

--  "subq.ph          %["#O1"],   %["#I0"],   %["#I4"]          \n\t"            \

--  "addq.ph          %["#O2"],   %["#I1"],   %["#I5"]          \n\t"            \

--  "subq.ph          %["#O3"],   %["#I1"],   %["#I5"]          \n\t"            \

--  "addq.ph          %["#O4"],   %["#I2"],   %["#I6"]          \n\t"            \

--  "subq.ph          %["#O5"],   %["#I2"],   %["#I6"]          \n\t"            \

--  "addq.ph          %["#O6"],   %["#I3"],   %["#I7"]          \n\t"            \

--  "subq.ph          %["#O7"],   %["#I3"],   %["#I7"]          \n\t"            \

--  "shra.ph          %["#O0"],   %["#O0"],   3                 \n\t"            \

--  "shra.ph          %["#O1"],   %["#O1"],   3                 \n\t"            \

--  "shra.ph          %["#O2"],   %["#O2"],   3                 \n\t"            \

--  "shra.ph          %["#O3"],   %["#O3"],   3                 \n\t"            \

--  "shra.ph          %["#O4"],   %["#O4"],   3                 \n\t"            \

--  "shra.ph          %["#O5"],   %["#O5"],   3                 \n\t"            \

--  "shra.ph          %["#O6"],   %["#O6"],   3                 \n\t"            \

--  "shra.ph          %["#O7"],   %["#O7"],   3                 \n\t"

-+  "addq.ph          %[" #O0 "],   %[" #I0 "],   %[" #I4 "]    \n\t"            \

-+  "subq.ph          %[" #O1 "],   %[" #I0 "],   %[" #I4 "]    \n\t"            \

-+  "addq.ph          %[" #O2 "],   %[" #I1 "],   %[" #I5 "]    \n\t"            \

-+  "subq.ph          %[" #O3 "],   %[" #I1 "],   %[" #I5 "]    \n\t"            \

-+  "addq.ph          %[" #O4 "],   %[" #I2 "],   %[" #I6 "]    \n\t"            \

-+  "subq.ph          %[" #O5 "],   %[" #I2 "],   %[" #I6 "]    \n\t"            \

-+  "addq.ph          %[" #O6 "],   %[" #I3 "],   %[" #I7 "]    \n\t"            \

-+  "subq.ph          %[" #O7 "],   %[" #I3 "],   %[" #I7 "]    \n\t"            \

-+  "shra.ph          %[" #O0 "],   %[" #O0 "],   3             \n\t"            \

-+  "shra.ph          %[" #O1 "],   %[" #O1 "],   3             \n\t"            \

-+  "shra.ph          %[" #O2 "],   %[" #O2 "],   3             \n\t"            \

-+  "shra.ph          %[" #O3 "],   %[" #O3 "],   3             \n\t"            \

-+  "shra.ph          %[" #O4 "],   %[" #O4 "],   3             \n\t"            \

-+  "shra.ph          %[" #O5 "],   %[" #O5 "],   3             \n\t"            \

-+  "shra.ph          %[" #O6 "],   %[" #O6 "],   3             \n\t"            \

-+  "shra.ph          %[" #O7 "],   %[" #O7 "],   3             \n\t"

- 

- // precrq.ph.w temp0, temp8, temp2

- //   temp0 = temp8[31..16] | temp2[31..16]

-@@ -123,14 +123,14 @@
- #define PACK_2_HALVES_TO_WORD(O0, O1, O2, O3,                                  \

-                               IO0, IO1, IO2, IO3,                              \

-                               I0, I1, I2, I3)                                  \

--  "precrq.ph.w      %["#O0"],    %["#I0"],  %["#IO0"]         \n\t"            \

--  "precrq.ph.w      %["#O1"],    %["#I1"],  %["#IO1"]         \n\t"            \

--  "ins              %["#IO0"],   %["#I0"],  16,    16         \n\t"            \

--  "ins              %["#IO1"],   %["#I1"],  16,    16         \n\t"            \

--  "precrq.ph.w      %["#O2"],    %["#I2"],  %["#IO2"]         \n\t"            \

--  "precrq.ph.w      %["#O3"],    %["#I3"],  %["#IO3"]         \n\t"            \

--  "ins              %["#IO2"],   %["#I2"],  16,    16         \n\t"            \

--  "ins              %["#IO3"],   %["#I3"],  16,    16         \n\t"

-+  "precrq.ph.w      %[" #O0 "],    %[" #I0 "],  %[" #IO0 "]       \n\t"        \

-+  "precrq.ph.w      %[" #O1 "],    %[" #I1 "],  %[" #IO1 "]       \n\t"        \

-+  "ins              %[" #IO0 "],   %[" #I0 "],  16,    16         \n\t"        \

-+  "ins              %[" #IO1 "],   %[" #I1 "],  16,    16         \n\t"        \

-+  "precrq.ph.w      %[" #O2 "],    %[" #I2 "],  %[" #IO2 "]       \n\t"        \

-+  "precrq.ph.w      %[" #O3 "],    %[" #I3 "],  %[" #IO3 "]       \n\t"        \

-+  "ins              %[" #IO2 "],   %[" #I2 "],  16,    16         \n\t"        \

-+  "ins              %[" #IO3 "],   %[" #I3 "],  16,    16         \n\t"

- 

- // preceu.ph.qbr temp0, temp8

- //   temp0 = 0 | 0 | temp8[23..16] | temp8[7..0]

-@@ -140,14 +140,14 @@
- // I - input (macro doesn't change it)

- #define CONVERT_2_BYTES_TO_HALF(O0, O1, O2, O3, O4, O5, O6, O7,                \

-                                 I0, I1, I2, I3)                                \

--  "preceu.ph.qbr    %["#O0"],   %["#I0"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O1"],   %["#I0"]                      \n\t"            \

--  "preceu.ph.qbr    %["#O2"],   %["#I1"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O3"],   %["#I1"]                      \n\t"            \

--  "preceu.ph.qbr    %["#O4"],   %["#I2"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O5"],   %["#I2"]                      \n\t"            \

--  "preceu.ph.qbr    %["#O6"],   %["#I3"]                      \n\t"            \

--  "preceu.ph.qbl    %["#O7"],   %["#I3"]                      \n\t"

-+  "preceu.ph.qbr    %[" #O0 "],   %[" #I0 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O1 "],   %[" #I0 "]                      \n\t"        \

-+  "preceu.ph.qbr    %[" #O2 "],   %[" #I1 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O3 "],   %[" #I1 "]                      \n\t"        \

-+  "preceu.ph.qbr    %[" #O4 "],   %[" #I2 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O5 "],   %[" #I2 "]                      \n\t"        \

-+  "preceu.ph.qbr    %[" #O6 "],   %[" #I3 "]                      \n\t"        \

-+  "preceu.ph.qbl    %[" #O7 "],   %[" #I3 "]                      \n\t"

- 

- // temp0[31..16 | 15..0] = temp0[31..16 | 15..0] + temp8[31..16 | 15..0]

- // temp0[31..16 | 15..0] = temp0[31..16 <<(s) 7 | 15..0 <<(s) 7]

-@@ -160,30 +160,30 @@
- #define STORE_SAT_SUM_X2(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7,               \

-                          I0, I1, I2, I3, I4, I5, I6, I7,                       \

-                          I8, I9, I10, I11, I12, I13)                           \

--  "addq.ph          %["#IO0"],  %["#IO0"],  %["#I0"]          \n\t"            \

--  "addq.ph          %["#IO1"],  %["#IO1"],  %["#I1"]          \n\t"            \

--  "addq.ph          %["#IO2"],  %["#IO2"],  %["#I2"]          \n\t"            \

--  "addq.ph          %["#IO3"],  %["#IO3"],  %["#I3"]          \n\t"            \

--  "addq.ph          %["#IO4"],  %["#IO4"],  %["#I4"]          \n\t"            \

--  "addq.ph          %["#IO5"],  %["#IO5"],  %["#I5"]          \n\t"            \

--  "addq.ph          %["#IO6"],  %["#IO6"],  %["#I6"]          \n\t"            \

--  "addq.ph          %["#IO7"],  %["#IO7"],  %["#I7"]          \n\t"            \

--  "shll_s.ph        %["#IO0"],  %["#IO0"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO1"],  %["#IO1"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO2"],  %["#IO2"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO3"],  %["#IO3"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO4"],  %["#IO4"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO5"],  %["#IO5"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO6"],  %["#IO6"],  7                 \n\t"            \

--  "shll_s.ph        %["#IO7"],  %["#IO7"],  7                 \n\t"            \

--  "precrqu_s.qb.ph  %["#IO0"],  %["#IO1"],  %["#IO0"]         \n\t"            \

--  "precrqu_s.qb.ph  %["#IO2"],  %["#IO3"],  %["#IO2"]         \n\t"            \

--  "precrqu_s.qb.ph  %["#IO4"],  %["#IO5"],  %["#IO4"]         \n\t"            \

--  "precrqu_s.qb.ph  %["#IO6"],  %["#IO7"],  %["#IO6"]         \n\t"            \

--  "usw              %["#IO0"],  "XSTR(I13)"*"#I9"(%["#I8"])   \n\t"            \

--  "usw              %["#IO2"],  "XSTR(I13)"*"#I10"(%["#I8"])  \n\t"            \

--  "usw              %["#IO4"],  "XSTR(I13)"*"#I11"(%["#I8"])  \n\t"            \

--  "usw              %["#IO6"],  "XSTR(I13)"*"#I12"(%["#I8"])  \n\t"

-+  "addq.ph          %[" #IO0 "],  %[" #IO0 "],  %[" #I0 "]          \n\t"      \

-+  "addq.ph          %[" #IO1 "],  %[" #IO1 "],  %[" #I1 "]          \n\t"      \

-+  "addq.ph          %[" #IO2 "],  %[" #IO2 "],  %[" #I2 "]          \n\t"      \

-+  "addq.ph          %[" #IO3 "],  %[" #IO3 "],  %[" #I3 "]          \n\t"      \

-+  "addq.ph          %[" #IO4 "],  %[" #IO4 "],  %[" #I4 "]          \n\t"      \

-+  "addq.ph          %[" #IO5 "],  %[" #IO5 "],  %[" #I5 "]          \n\t"      \

-+  "addq.ph          %[" #IO6 "],  %[" #IO6 "],  %[" #I6 "]          \n\t"      \

-+  "addq.ph          %[" #IO7 "],  %[" #IO7 "],  %[" #I7 "]          \n\t"      \

-+  "shll_s.ph        %[" #IO0 "],  %[" #IO0 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO1 "],  %[" #IO1 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO2 "],  %[" #IO2 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO3 "],  %[" #IO3 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO4 "],  %[" #IO4 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO5 "],  %[" #IO5 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO6 "],  %[" #IO6 "],  7                   \n\t"      \

-+  "shll_s.ph        %[" #IO7 "],  %[" #IO7 "],  7                   \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO0 "],  %[" #IO1 "],  %[" #IO0 "]         \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO2 "],  %[" #IO3 "],  %[" #IO2 "]         \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO4 "],  %[" #IO5 "],  %[" #IO4 "]         \n\t"      \

-+  "precrqu_s.qb.ph  %[" #IO6 "],  %[" #IO7 "],  %[" #IO6 "]         \n\t"      \

-+  "usw              %[" #IO0 "],  "XSTR(I13)"*" #I9 "(%[" #I8 "])   \n\t"      \

-+  "usw              %[" #IO2 "],  "XSTR(I13)"*" #I10 "(%[" #I8 "])  \n\t"      \

-+  "usw              %[" #IO4 "],  "XSTR(I13)"*" #I11 "(%[" #I8 "])  \n\t"      \

-+  "usw              %[" #IO6 "],  "XSTR(I13)"*" #I12 "(%[" #I8 "])  \n\t"

- 

- #define OUTPUT_EARLY_CLOBBER_REGS_10()                                         \

-   : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3),             \

-diff --git a/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c
-index 9c9665f..46f207b 100644
---- a/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c
-@@ -34,15 +34,15 @@
-     G = G - t2 + kGCst;                                                        \

-     B = B + kBCst;                                                             \

-     __asm__ volatile (                                                         \

--      "shll_s.w         %["#R"],      %["#R"],        9              \n\t"     \

--      "shll_s.w         %["#G"],      %["#G"],        9              \n\t"     \

--      "shll_s.w         %["#B"],      %["#B"],        9              \n\t"     \

--      "precrqu_s.qb.ph  %["#R"],      %["#R"],        $zero          \n\t"     \

--      "precrqu_s.qb.ph  %["#G"],      %["#G"],        $zero          \n\t"     \

--      "precrqu_s.qb.ph  %["#B"],      %["#B"],        $zero          \n\t"     \

--      "srl              %["#R"],      %["#R"],        24             \n\t"     \

--      "srl              %["#G"],      %["#G"],        24             \n\t"     \

--      "srl              %["#B"],      %["#B"],        24             \n\t"     \

-+      "shll_s.w         %[" #R "],      %[" #R "],        9          \n\t"     \

-+      "shll_s.w         %[" #G "],      %[" #G "],        9          \n\t"     \

-+      "shll_s.w         %[" #B "],      %[" #B "],        9          \n\t"     \

-+      "precrqu_s.qb.ph  %[" #R "],      %[" #R "],        $zero      \n\t"     \

-+      "precrqu_s.qb.ph  %[" #G "],      %[" #G "],        $zero      \n\t"     \

-+      "precrqu_s.qb.ph  %[" #B "],      %[" #B "],        $zero      \n\t"     \

-+      "srl              %[" #R "],      %[" #R "],        24         \n\t"     \

-+      "srl              %[" #G "],      %[" #G "],        24         \n\t"     \

-+      "srl              %[" #B "],      %[" #B "],        24         \n\t"     \

-       : [R]"+r"(R), [G]"+r"(G), [B]"+r"(B)                                     \

-       :                                                                        \

-     );                                                                         \

-diff --git a/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c
-index 43f02cc..45a2200 100644
---- a/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c
-+++ b/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c
-@@ -39,12 +39,12 @@
-   "addu             %[temp5],   %[temp0],       %[temp1]        \n\t"          \

-   "subu             %[temp6],   %[temp0],       %[temp2]        \n\t"          \

-   "addu             %[temp7],   %[temp0],       %[temp4]        \n\t"          \

--".if "#K"                                                       \n\t"          \

-+".if " #K "                                                     \n\t"          \

-   "lbu              %[temp0],   1(%[y])                         \n\t"          \

- ".endif                                                         \n\t"          \

-   "shll_s.w         %[temp5],   %[temp5],       9               \n\t"          \

-   "shll_s.w         %[temp6],   %[temp6],       9               \n\t"          \

--".if "#K"                                                       \n\t"          \

-+".if " #K "                                                     \n\t"          \

-   "mul              %[temp0],   %[t_con_5],     %[temp0]        \n\t"          \

- ".endif                                                         \n\t"          \

-   "shll_s.w         %[temp7],   %[temp7],       9               \n\t"          \

-@@ -54,9 +54,9 @@
-   "srl              %[temp5],   %[temp5],       24              \n\t"          \

-   "srl              %[temp6],   %[temp6],       24              \n\t"          \

-   "srl              %[temp7],   %[temp7],       24              \n\t"          \

--  "sb               %[temp5],   "#R"(%[dst])                    \n\t"          \

--  "sb               %[temp6],   "#G"(%[dst])                    \n\t"          \

--  "sb               %[temp7],   "#B"(%[dst])                    \n\t"          \

-+  "sb               %[temp5],   " #R "(%[dst])                  \n\t"          \

-+  "sb               %[temp6],   " #G "(%[dst])                  \n\t"          \

-+  "sb               %[temp7],   " #B "(%[dst])                  \n\t"          \

- 

- #define ASM_CLOBBER_LIST()                                                     \

-   : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2),             \

diff --git a/gnu/packages/patches/freeimage-unbundle.patch b/gnu/packages/patches/freeimage-unbundle.patch
index ca907d3276..4d9b8e25c9 100644
--- a/gnu/packages/patches/freeimage-unbundle.patch
+++ b/gnu/packages/patches/freeimage-unbundle.patch
@@ -1,4 +1,4 @@
-https://src.fedoraproject.org/cgit/rpms/freeimage.git/tree/FreeImage-3.17.0_unbundle.patch
+https://src.fedoraproject.org/cgit/rpms/freeimage.git/tree/FreeImage_unbundle.patch
 
 diff -rupN FreeImage/genfipsrclist.sh FreeImage-new/genfipsrclist.sh
 --- FreeImage/genfipsrclist.sh	2015-02-20 10:52:16.000000000 +0100
@@ -25,10 +25,10 @@ diff -rupN FreeImage/gensrclist.sh FreeImage-new/gensrclist.sh
  #!/bin/sh
  
 -DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJPEG Source/LibPNG Source/LibTIFF4 Source/ZLib Source/LibOpenJPEG Source/OpenEXR Source/OpenEXR/Half Source/OpenEXR/Iex Source/OpenEXR/IlmImf Source/OpenEXR/IlmThread Source/OpenEXR/Imath Source/OpenEXR/IexMath Source/LibRawLite Source/LibRawLite/dcraw Source/LibRawLite/internal Source/LibRawLite/libraw Source/LibRawLite/src Source/LibWebP Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib"
-+DIRLIST=". Source Source/Metadata Source/FreeImageToolkit Source/LibJXR Source/LibJXR/common/include Source/LibJXR/image/sys Source/LibJXR/jxrgluelib"
++DIRLIST=". Source Source/Metadata Source/FreeImageToolkit"
  
  echo "VER_MAJOR = 3" > Makefile.srcs
- echo "VER_MINOR = 17.0" >> Makefile.srcs
+ echo "VER_MINOR = 18.0" >> Makefile.srcs
 diff -rupN FreeImage/Makefile.fip FreeImage-new/Makefile.fip
 --- FreeImage/Makefile.fip	2015-03-08 18:03:56.000000000 +0100
 +++ FreeImage-new/Makefile.fip	2015-09-05 02:14:09.212684028 +0200
@@ -90,8 +90,8 @@ diff -rupN FreeImage/Makefile.gnu FreeImage-new/Makefile.gnu
 -# LibJXR
 -CXXFLAGS += -D__ANSI__
 -CXXFLAGS += $(INCLUDE)
-+override CFLAGS += $(INCLUDE) -D__ANSI__ $(shell pkg-config --cflags OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
-+override LDFLAGS += -ljpeg $(shell pkg-config --libs OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
++override CFLAGS += $(INCLUDE) -D__ANSI__ -I/usr/include/jxrlib $(shell pkg-config --cflags OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
++override LDFLAGS += -ljpeg -ljpegxr -ljxrglue $(shell pkg-config --libs OpenEXR libopenjp2 libraw libpng libtiff-4 libwebp libwebpmux zlib)
  
  ifeq ($(shell sh -c 'uname -m 2>/dev/null || echo not'),x86_64)
 -	CFLAGS += -fPIC
@@ -215,6 +215,18 @@ diff -rupN FreeImage/Source/FreeImage/PluginJPEG.cpp FreeImage-new/Source/FreeIm
  }
  
  #include "FreeImage.h"
+diff -rupN FreeImage/Source/FreeImage/PluginJXR.cpp FreeImage-new/Source/FreeImage/PluginJXR.cpp
+--- FreeImage/Source/FreeImage/PluginJXR.cpp	2015-03-03 23:07:08.000000000 +0100
++++ FreeImage-new/Source/FreeImage/PluginJXR.cpp	2018-07-31 23:37:58.561953201 +0200
+@@ -23,7 +23,7 @@
+ #include "Utilities.h"
+ #include "../Metadata/FreeImageTag.h"
+ 
+-#include "../LibJXR/jxrgluelib/JXRGlue.h"
++#include <JXRGlue.h>
+ 
+ // ==========================================================
+ // Plugin Interface
 diff -rupN FreeImage/Source/FreeImage/PluginPNG.cpp FreeImage-new/Source/FreeImage/PluginPNG.cpp
 --- FreeImage/Source/FreeImage/PluginPNG.cpp	2015-03-10 20:16:12.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/PluginPNG.cpp	2015-09-05 02:13:52.044353363 +0200
@@ -241,38 +253,39 @@ diff -rupN FreeImage/Source/FreeImage/PluginRAW.cpp FreeImage-new/Source/FreeIma
  
  #include "FreeImage.h"
  #include "Utilities.h"
+
 diff -rupN FreeImage/Source/FreeImage/PluginTIFF.cpp FreeImage-new/Source/FreeImage/PluginTIFF.cpp
 --- FreeImage/Source/FreeImage/PluginTIFF.cpp	2015-03-02 02:07:08.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/PluginTIFF.cpp	2015-09-05 02:13:52.044353363 +0200
 @@ -37,9 +37,9 @@
- 
- #include "FreeImage.h"
- #include "Utilities.h"
--#include "../LibTIFF4/tiffiop.h"
-+#include <tiffio.h>
- #include "../Metadata/FreeImageTag.h"
--#include "../OpenEXR/Half/half.h"
-+#include <OpenEXR/half.h>
- 
- #include "FreeImageIO.h"
- #include "PSDParser.h"
-@@ -194,16 +194,6 @@ TIFFFdOpen(thandle_t handle, const char
- 	return tif;
- }
- 
--/**
--Open a TIFF file for reading or writing
--@param name
--@param mode
--*/
--TIFF*
--TIFFOpen(const char* name, const char* mode) {
--	return 0;
--}
--
- // ----------------------------------------------------------
- //   TIFF library FreeImage-specific routines.
- // ----------------------------------------------------------
+ 

+ #include "FreeImage.h"

+ #include "Utilities.h"

+-#include "../LibTIFF4/tiffiop.h"

++#include <tiffio.h>

+ #include "../Metadata/FreeImageTag.h"

+-#include "../OpenEXR/Half/half.h"

++#include <OpenEXR/half.h>

+ 

+ #include "FreeImageIO.h"

+ #include "PSDParser.h"

+@@ -194,16 +194,6 @@ TIFFFdOpen(thandle_t handle, const char *name, const char *mode) {
+ 	return tif;

+ }

+ 

+-/**

+-Open a TIFF file for reading or writing

+-@param name

+-@param mode

+-*/

+-TIFF*

+-TIFFOpen(const char* name, const char* mode) {

+-	return 0;

+-}

+-

+ // ----------------------------------------------------------

+ //   TIFF library FreeImage-specific routines.

+ // ----------------------------------------------------------

 diff -rupN FreeImage/Source/FreeImage/PluginWebP.cpp FreeImage-new/Source/FreeImage/PluginWebP.cpp
 --- FreeImage/Source/FreeImage/PluginWebP.cpp	2015-03-02 02:07:08.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/PluginWebP.cpp	2015-09-05 02:13:52.044353363 +0200
@@ -282,15 +295,81 @@ diff -rupN FreeImage/Source/FreeImage/PluginWebP.cpp FreeImage-new/Source/FreeIm
  
 -#include "../LibWebP/src/webp/decode.h"
 -#include "../LibWebP/src/webp/encode.h"
--#include "../LibWebP/src/enc/vp8enci.h"
 -#include "../LibWebP/src/webp/mux.h"
 +#include <webp/decode.h>
 +#include <webp/encode.h>
-+// #include "../LibWebP/src/enc/vp8enci.h"
 +#include <webp/mux.h>
  
  // ==========================================================
  // Plugin Interface
+ diff -rupN FreeImage/Source/FreeImage/PSDParser.cpp FreeImage-new/Source/FreeImage/PSDParser.cpp
+--- FreeImage/Source/FreeImage/PSDParser.cpp	2016-02-11 03:18:02.000000000 +0100
++++ FreeImage-new/Source/FreeImage/PSDParser.cpp	2018-08-01 00:17:18.323822675 +0200
+@@ -133,8 +133,8 @@ public:
+ template <>
+ class PSDGetValue<8> {
+ public:
+-	static inline UINT64 get(const BYTE * iprBuffer) {
+-		UINT64 v = ((const UINT64*)iprBuffer)[0];
++	static inline uint64_t get(const BYTE * iprBuffer) {
++		uint64_t v = ((const uint64_t*)iprBuffer)[0];
+ #ifndef FREEIMAGE_BIGENDIAN
+ 		SwapInt64(&v);
+ #endif
+@@ -147,7 +147,7 @@ public:
+ 
+ // --------------------------------------------------------------------------
+ 
+-static UINT64
++static uint64_t
+ psdReadSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header) {
+ 	if(header._Version == 1) {
+ 		BYTE Length[4];
+@@ -199,11 +199,11 @@ public:
+ template <>
+ class PSDSetValue<8> {
+ public:
+-	static inline void set(const BYTE * iprBuffer, UINT64 v) {
++	static inline void set(const BYTE * iprBuffer, uint64_t v) {
+ #ifndef FREEIMAGE_BIGENDIAN
+ 		SwapInt64(&v);
+ #endif
+-		((UINT64*)iprBuffer)[0] = v;
++		((uint64_t*)iprBuffer)[0] = v;
+ 	}
+ };
+ 
+@@ -213,7 +213,7 @@ public:
+ // --------------------------------------------------------------------------
+ 
+ static inline bool
+-psdWriteSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header, UINT64 v) {
++psdWriteSize(FreeImageIO *io, fi_handle handle, const psdHeaderInfo& header, uint64_t v) {
+ 	if(header._Version == 1) {
+ 		BYTE Length[4];
+ 		psdSetLongValue(Length, sizeof(Length), (DWORD)v);
+@@ -1063,10 +1063,10 @@ unsigned psdParser::GetChannelOffset(FIB
+ bool psdParser::ReadLayerAndMaskInfoSection(FreeImageIO *io, fi_handle handle)	{
+ 	bool bSuccess = true;
+ 
+-	UINT64 nTotalBytes = psdReadSize(io, handle, _headerInfo);
++	uint64_t nTotalBytes = psdReadSize(io, handle, _headerInfo);
+ 
+ 	// Hack to handle large PSB files without using fseeko().
+-	if (sizeof(long) < sizeof(UINT64)) {
++	if (sizeof(long) < sizeof(uint64_t)) {
+ 		const long offset = 0x10000000;
+ 		while (nTotalBytes > offset) {
+ 			if (io->seek_proc(handle, offset, SEEK_CUR) != 0) {
+@@ -1672,7 +1672,7 @@ bool psdParser::WriteLayerAndMaskInfoSec
+ 	// Short section with no layers.
+ 	BYTE IntValue[4];
+ 
+-	UINT64 size;
++	uint64_t size;
+ 	if(_headerInfo._Version == 1) {
+ 		size = 8;
+ 	} else {
 diff -rupN FreeImage/Source/FreeImage/ZLibInterface.cpp FreeImage-new/Source/FreeImage/ZLibInterface.cpp
 --- FreeImage/Source/FreeImage/ZLibInterface.cpp	2015-03-02 02:07:10.000000000 +0100
 +++ FreeImage-new/Source/FreeImage/ZLibInterface.cpp	2015-09-05 02:13:52.044353363 +0200
@@ -536,3 +615,21 @@ diff -rupN FreeImage/Source/Metadata/XTIFF.cpp FreeImage-new/Source/Metadata/XTI
  
  		if(skip_write_field(tif, tag_id)) {
  			// skip tags that are already handled by the LibTIFF writing process
+diff -rupN FreeImage/Source/Utilities.h FreeImage-new/Source/Utilities.h
+--- FreeImage/Source/Utilities.h	2016-04-11 15:15:32.000000000 +0200
++++ FreeImage-new/Source/Utilities.h	2018-08-01 00:16:29.826825358 +0200
+@@ -446,12 +446,12 @@ SwapLong(DWORD *lp) {
+ }
+  
+ inline void
+-SwapInt64(UINT64 *arg) {
++SwapInt64(uint64_t *arg) {
+ #if defined(_MSC_VER) && _MSC_VER >= 1310
+ 	*arg = _byteswap_uint64(*arg);
+ #else
+ 	union Swap {
+-		UINT64 sv;
++		uint64_t sv;
+ 		DWORD ul[2];
+ 	} tmp, result;
+ 	tmp.sv = *arg;
diff --git a/gnu/packages/patches/glm-restore-install-target.patch b/gnu/packages/patches/glm-restore-install-target.patch
new file mode 100644
index 0000000000..a628030f6f
--- /dev/null
+++ b/gnu/packages/patches/glm-restore-install-target.patch
@@ -0,0 +1,574 @@
+From: Tobias Geerinckx-Rice <me@tobias.gr>
+Date: Mon, 23 Sep 2019 22:01:17 +0200
+Subject: [PATCH] gnu: glm: Restore ‘install’ target.
+
+It was removed in 0.9.9.6, making installation a tedious manual process
+for no clear reason[0].  Restore it for now.
+
+[0]: https://github.com/g-truc/glm/issues/947
+
+diff -Naur glm/cmake/CMakePackageConfigHelpers.cmake glmn/cmake/CMakePackageConfigHelpers.cmake
+--- glm/cmake/CMakePackageConfigHelpers.cmake	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/CMakePackageConfigHelpers.cmake	2019-09-23 00:11:21.418152249 +0200
+@@ -0,0 +1,227 @@
++# - CONFIGURE_PACKAGE_CONFIG_FILE(), WRITE_BASIC_PACKAGE_VERSION_FILE()

++#

++#    CONFIGURE_PACKAGE_CONFIG_FILE(<input> <output> INSTALL_DESTINATION <path>

++#                                                   [PATH_VARS <var1> <var2> ... <varN>]

++#                                                   [NO_SET_AND_CHECK_MACRO]

++#                                                   [NO_CHECK_REQUIRED_COMPONENTS_MACRO])

++#

++# CONFIGURE_PACKAGE_CONFIG_FILE() should be used instead of the plain

++# CONFIGURE_FILE() command when creating the <Name>Config.cmake or <Name>-config.cmake

++# file for installing a project or library. It helps making the resulting package

++# relocatable by avoiding hardcoded paths in the installed Config.cmake file.

++#

++# In a FooConfig.cmake file there may be code like this to make the

++# install destinations know to the using project:

++#   set(FOO_INCLUDE_DIR   "@CMAKE_INSTALL_FULL_INCLUDEDIR@" )

++#   set(FOO_DATA_DIR   "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" )

++#   set(FOO_ICONS_DIR   "@CMAKE_INSTALL_PREFIX@/share/icons" )

++#   ...logic to determine installedPrefix from the own location...

++#   set(FOO_CONFIG_DIR  "${installedPrefix}/@CONFIG_INSTALL_DIR@" )

++# All 4 options shown above are not sufficient, since the first 3 hardcode

++# the absolute directory locations, and the 4th case works only if the logic

++# to determine the installedPrefix is correct, and if CONFIG_INSTALL_DIR contains

++# a relative path, which in general cannot be guaranteed.

++# This has the effect that the resulting FooConfig.cmake file would work poorly

++# under Windows and OSX, where users are used to choose the install location

++# of a binary package at install time, independent from how CMAKE_INSTALL_PREFIX

++# was set at build/cmake time.

++#

++# Using CONFIGURE_PACKAGE_CONFIG_FILE() helps. If used correctly, it makes the

++# resulting FooConfig.cmake file relocatable.

++# Usage:

++#   1. write a FooConfig.cmake.in file as you are used to

++#   2. insert a line containing only the string "@PACKAGE_INIT@"

++#   3. instead of SET(FOO_DIR "@SOME_INSTALL_DIR@"), use SET(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")

++#      (this must be after the @PACKAGE_INIT@ line)

++#   4. instead of using the normal CONFIGURE_FILE(), use CONFIGURE_PACKAGE_CONFIG_FILE()

++#

++# The <input> and <output> arguments are the input and output file, the same way

++# as in CONFIGURE_FILE().

++#

++# The <path> given to INSTALL_DESTINATION must be the destination where the FooConfig.cmake

++# file will be installed to. This can either be a relative or absolute path, both work.

++#

++# The variables <var1> to <varN> given as PATH_VARS are the variables which contain

++# install destinations. For each of them the macro will create a helper variable

++# PACKAGE_<var...>. These helper variables must be used

++# in the FooConfig.cmake.in file for setting the installed location. They are calculated

++# by CONFIGURE_PACKAGE_CONFIG_FILE() so that they are always relative to the

++# installed location of the package. This works both for relative and also for absolute locations.

++# For absolute locations it works only if the absolute location is a subdirectory

++# of CMAKE_INSTALL_PREFIX.

++#

++# By default configure_package_config_file() also generates two helper macros,

++# set_and_check() and check_required_components() into the FooConfig.cmake file.

++#

++# set_and_check() should be used instead of the normal set()

++# command for setting directories and file locations. Additionally to setting the

++# variable it also checks that the referenced file or directory actually exists

++# and fails with a FATAL_ERROR otherwise. This makes sure that the created

++# FooConfig.cmake file does not contain wrong references.

++# When using the NO_SET_AND_CHECK_MACRO, this macro is not generated into the

++# FooConfig.cmake file.

++#

++# check_required_components(<package_name>) should be called at the end of the

++# FooConfig.cmake file if the package supports components.

++# This macro checks whether all requested, non-optional components have been found,

++# and if this is not the case, sets the Foo_FOUND variable to FALSE, so that the package

++# is considered to be not found.

++# It does that by testing the Foo_<Component>_FOUND variables for all requested

++# required components.

++# When using the NO_CHECK_REQUIRED_COMPONENTS option, this macro is not generated

++# into the FooConfig.cmake file.

++#

++# For an example see below the documentation for WRITE_BASIC_PACKAGE_VERSION_FILE().

++#

++#

++#  WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )

++#

++# Writes a file for use as <package>ConfigVersion.cmake file to <filename>.

++# See the documentation of FIND_PACKAGE() for details on this.

++#    filename is the output filename, it should be in the build tree.

++#    major.minor.patch is the version number of the project to be installed

++# The COMPATIBILITY mode AnyNewerVersion means that the installed package version

++# will be considered compatible if it is newer or exactly the same as the requested version.

++# This mode should be used for packages which are fully backward compatible,

++# also across major versions.

++# If SameMajorVersion is used instead, then the behaviour differs from AnyNewerVersion

++# in that the major version number must be the same as requested, e.g. version 2.0 will

++# not be considered compatible if 1.0 is requested.

++# This mode should be used for packages which guarantee backward compatibility within the

++# same major version.

++# If ExactVersion is used, then the package is only considered compatible if the requested

++# version matches exactly its own version number (not considering the tweak version).

++# For example, version 1.2.3 of a package is only considered compatible to requested version 1.2.3.

++# This mode is for packages without compatibility guarantees.

++# If your project has more elaborated version matching rules, you will need to write your

++# own custom ConfigVersion.cmake file instead of using this macro.

++#

++# Internally, this macro executes configure_file() to create the resulting

++# version file. Depending on the COMPATIBILITY, either the file

++# BasicConfigVersion-SameMajorVersion.cmake.in or BasicConfigVersion-AnyNewerVersion.cmake.in

++# is used. Please note that these two files are internal to CMake and you should

++# not call configure_file() on them yourself, but they can be used as starting

++# point to create more sophisticted custom ConfigVersion.cmake files.

++#

++#

++# Example using both configure_package_config_file() and write_basic_package_version_file():

++# CMakeLists.txt:

++#   set(INCLUDE_INSTALL_DIR include/ ... CACHE )

++#   set(LIB_INSTALL_DIR lib/ ... CACHE )

++#   set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE )

++#   ...

++#   include(CMakePackageConfigHelpers)

++#   configure_package_config_file(FooConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake

++#                                 INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake

++#                                 PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)

++#   write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake

++#                                    VERSION 1.2.3

++#                                    COMPATIBILITY SameMajorVersion )

++#   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake

++#           DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )

++#

++# With a FooConfig.cmake.in:

++#   set(FOO_VERSION x.y.z)

++#   ...

++#   @PACKAGE_INIT@

++#   ...

++#   set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")

++#   set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")

++#

++#   check_required_components(Foo)

++

++

++#=============================================================================

++# Copyright 2012 Alexander Neundorf <neundorf@kde.org>

++#

++# Distributed under the OSI-approved BSD License (the "License");

++# see accompanying file Copyright.txt for details.

++#

++# This software is distributed WITHOUT ANY WARRANTY; without even the

++# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

++# See the License for more information.

++#=============================================================================

++# (To distribute this file outside of CMake, substitute the full

++#  License text for the above reference.)

++

++include(CMakeParseArguments)

++

++include(WriteBasicConfigVersionFile)

++

++macro(WRITE_BASIC_PACKAGE_VERSION_FILE)

++  write_basic_config_version_file(${ARGN})

++endmacro()

++

++

++function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile)

++  set(options NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)

++  set(oneValueArgs INSTALL_DESTINATION )

++  set(multiValueArgs PATH_VARS )

++

++  cmake_parse_arguments(CCF "${options}" "${oneValueArgs}" "${multiValueArgs}"  ${ARGN})

++

++  if(CCF_UNPARSED_ARGUMENTS)

++    message(FATAL_ERROR "Unknown keywords given to CONFIGURE_PACKAGE_CONFIG_FILE(): \"${CCF_UNPARSED_ARGUMENTS}\"")

++  endif()

++

++  if(NOT CCF_INSTALL_DESTINATION)

++    message(FATAL_ERROR "No INSTALL_DESTINATION given to CONFIGURE_PACKAGE_CONFIG_FILE()")

++  endif()

++

++  if(IS_ABSOLUTE "${CCF_INSTALL_DESTINATION}")

++    set(absInstallDir "${CCF_INSTALL_DESTINATION}")

++  else()

++    set(absInstallDir "${CMAKE_INSTALL_PREFIX}/${CCF_INSTALL_DESTINATION}")

++  endif()

++  file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${absInstallDir}" "${CMAKE_INSTALL_PREFIX}" )

++

++  foreach(var ${CCF_PATH_VARS})

++    if(NOT DEFINED ${var})

++      message(FATAL_ERROR "Variable ${var} does not exist")

++    else()

++      if(IS_ABSOLUTE "${${var}}")

++        string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${PACKAGE_PREFIX_DIR}"

++                        PACKAGE_${var} "${${var}}")

++      else()

++        set(PACKAGE_${var} "\${PACKAGE_PREFIX_DIR}/${${var}}")

++      endif()

++    endif()

++  endforeach()

++

++  set(PACKAGE_INIT "

++####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######

++get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${PACKAGE_RELATIVE_PATH}\" ABSOLUTE)

++")

++

++  if(NOT CCF_NO_SET_AND_CHECK_MACRO)

++    set(PACKAGE_INIT "${PACKAGE_INIT}

++macro(set_and_check _var _file)

++  set(\${_var} \"\${_file}\")

++  if(NOT EXISTS \"\${_file}\")

++    message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")

++  endif()

++endmacro()

++")

++  endif()

++

++

++  if(NOT CCF_NO_CHECK_REQUIRED_COMPONENTS_MACRO)

++    set(PACKAGE_INIT "${PACKAGE_INIT}

++macro(check_required_components _NAME)

++  foreach(comp \${\${_NAME}_FIND_COMPONENTS})

++    if(NOT \${_NAME}_\${comp}_FOUND)

++      if(\${_NAME}_FIND_REQUIRED_\${comp})

++        set(\${_NAME}_FOUND FALSE)

++      endif()

++    endif()

++  endforeach(comp)

++endmacro()

++")

++  endif()

++

++  set(PACKAGE_INIT "${PACKAGE_INIT}

++####################################################################################")

++

++  configure_file("${_inputFile}" "${_outputFile}" @ONLY)

++

++endfunction()

+diff -Naur glm/cmake/glmBuildConfig.cmake.in glmn/cmake/glmBuildConfig.cmake.in
+--- glm/cmake/glmBuildConfig.cmake.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/glmBuildConfig.cmake.in	2019-09-23 00:12:08.090955650 +0200
+@@ -0,0 +1,6 @@
++set(GLM_VERSION "@GLM_VERSION@")

++set(GLM_INCLUDE_DIRS "@CMAKE_CURRENT_SOURCE_DIR@")

++

++if (NOT CMAKE_VERSION VERSION_LESS "3.0")

++    include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")

++endif()

+diff -Naur glm/cmake/glmConfig.cmake.in glmn/cmake/glmConfig.cmake.in
+--- glm/cmake/glmConfig.cmake.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/glmConfig.cmake.in	2019-09-23 00:12:14.566373412 +0200
+@@ -0,0 +1,9 @@
++set(GLM_VERSION "@GLM_VERSION@")

++

++@PACKAGE_INIT@

++

++set_and_check(GLM_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@")

++

++if (NOT CMAKE_VERSION VERSION_LESS "3.0")

++    include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")

++endif()

+diff -Naur glm/cmake/glm.pc.in glmn/cmake/glm.pc.in
+--- glm/cmake/glm.pc.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/glm.pc.in	2019-09-23 00:11:59.695710511 +0200
+@@ -0,0 +1,7 @@
++prefix=@CMAKE_INSTALL_PREFIX@

++includedir=${prefix}/include

++

++Name: GLM

++Description: OpenGL Mathematics

++Version: @GLM_VERSION@

++Cflags: -I${includedir}

+diff -Naur glm/cmake/GNUInstallDirs.cmake glmn/cmake/GNUInstallDirs.cmake
+--- glm/cmake/GNUInstallDirs.cmake	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake/GNUInstallDirs.cmake	2019-09-23 00:11:47.363819337 +0200
+@@ -0,0 +1,188 @@
++# - Define GNU standard installation directories

++# Provides install directory variables as defined for GNU software:

++#  http://www.gnu.org/prep/standards/html_node/Directory-Variables.html

++# Inclusion of this module defines the following variables:

++#  CMAKE_INSTALL_<dir>      - destination for files of a given type

++#  CMAKE_INSTALL_FULL_<dir> - corresponding absolute path

++# where <dir> is one of:

++#  BINDIR           - user executables (bin)

++#  SBINDIR          - system admin executables (sbin)

++#  LIBEXECDIR       - program executables (libexec)

++#  SYSCONFDIR       - read-only single-machine data (etc)

++#  SHAREDSTATEDIR   - modifiable architecture-independent data (com)

++#  LOCALSTATEDIR    - modifiable single-machine data (var)

++#  LIBDIR           - object code libraries (lib or lib64 or lib/<multiarch-tuple> on Debian)

++#  INCLUDEDIR       - C header files (include)

++#  OLDINCLUDEDIR    - C header files for non-gcc (/usr/include)

++#  DATAROOTDIR      - read-only architecture-independent data root (share)

++#  DATADIR          - read-only architecture-independent data (DATAROOTDIR)

++#  INFODIR          - info documentation (DATAROOTDIR/info)

++#  LOCALEDIR        - locale-dependent data (DATAROOTDIR/locale)

++#  MANDIR           - man documentation (DATAROOTDIR/man)

++#  DOCDIR           - documentation root (DATAROOTDIR/doc/PROJECT_NAME)

++# Each CMAKE_INSTALL_<dir> value may be passed to the DESTINATION options of

++# install() commands for the corresponding file type.  If the includer does

++# not define a value the above-shown default will be used and the value will

++# appear in the cache for editing by the user.

++# Each CMAKE_INSTALL_FULL_<dir> value contains an absolute path constructed

++# from the corresponding destination by prepending (if necessary) the value

++# of CMAKE_INSTALL_PREFIX.

++

++#=============================================================================

++# Copyright 2011 Nikita Krupen'ko <krnekit@gmail.com>

++# Copyright 2011 Kitware, Inc.

++#

++# Distributed under the OSI-approved BSD License (the "License");

++# see accompanying file Copyright.txt for details.

++#

++# This software is distributed WITHOUT ANY WARRANTY; without even the

++# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

++# See the License for more information.

++#=============================================================================

++# (To distribute this file outside of CMake, substitute the full

++#  License text for the above reference.)

++

++# Installation directories

++#

++if(NOT DEFINED CMAKE_INSTALL_BINDIR)

++  set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_SBINDIR)

++  set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR)

++  set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR)

++  set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR)

++  set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR)

++  set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_LIBDIR)

++  set(_LIBDIR_DEFAULT "lib")

++  # Override this default 'lib' with 'lib64' iff:

++  #  - we are on Linux system but NOT cross-compiling

++  #  - we are NOT on debian

++  #  - we are on a 64 bits system

++  # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf

++  # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if

++  # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu"

++  # See http://wiki.debian.org/Multiarch

++  if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU")

++      AND NOT CMAKE_CROSSCOMPILING)

++    if (EXISTS "/etc/debian_version") # is this a debian system ?

++       if(CMAKE_LIBRARY_ARCHITECTURE)

++         set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}")

++       endif()

++    else() # not debian, rely on CMAKE_SIZEOF_VOID_P:

++      if(NOT DEFINED CMAKE_SIZEOF_VOID_P)

++        message(AUTHOR_WARNING

++          "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. "

++          "Please enable at least one language before including GNUInstallDirs.")

++      else()

++        if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")

++          set(_LIBDIR_DEFAULT "lib64")

++        endif()

++      endif()

++    endif()

++  endif()

++  set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR)

++  set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR)

++  set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)")

++endif()

++

++if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)

++  set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")

++endif()

++

++#-----------------------------------------------------------------------------

++# Values whose defaults are relative to DATAROOTDIR.  Store empty values in

++# the cache and store the defaults in local variables if the cache values are

++# not set explicitly.  This auto-updates the defaults as DATAROOTDIR changes.

++

++if(NOT CMAKE_INSTALL_DATADIR)

++  set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)")

++  set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}")

++endif()

++

++if(NOT CMAKE_INSTALL_INFODIR)

++  set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")

++  set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")

++endif()

++

++if(NOT CMAKE_INSTALL_LOCALEDIR)

++  set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)")

++  set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")

++endif()

++

++if(NOT CMAKE_INSTALL_MANDIR)

++  set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")

++  set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")

++endif()

++

++if(NOT CMAKE_INSTALL_DOCDIR)

++  set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)")

++  set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}")

++endif()

++

++#-----------------------------------------------------------------------------

++

++mark_as_advanced(

++  CMAKE_INSTALL_BINDIR

++  CMAKE_INSTALL_SBINDIR

++  CMAKE_INSTALL_LIBEXECDIR

++  CMAKE_INSTALL_SYSCONFDIR

++  CMAKE_INSTALL_SHAREDSTATEDIR

++  CMAKE_INSTALL_LOCALSTATEDIR

++  CMAKE_INSTALL_LIBDIR

++  CMAKE_INSTALL_INCLUDEDIR

++  CMAKE_INSTALL_OLDINCLUDEDIR

++  CMAKE_INSTALL_DATAROOTDIR

++  CMAKE_INSTALL_DATADIR

++  CMAKE_INSTALL_INFODIR

++  CMAKE_INSTALL_LOCALEDIR

++  CMAKE_INSTALL_MANDIR

++  CMAKE_INSTALL_DOCDIR

++  )

++

++# Result directories

++#

++foreach(dir

++    BINDIR

++    SBINDIR

++    LIBEXECDIR

++    SYSCONFDIR

++    SHAREDSTATEDIR

++    LOCALSTATEDIR

++    LIBDIR

++    INCLUDEDIR

++    OLDINCLUDEDIR

++    DATAROOTDIR

++    DATADIR

++    INFODIR

++    LOCALEDIR

++    MANDIR

++    DOCDIR

++    )

++  if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}})

++    set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}")

++  else()

++    set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}")

++  endif()

++endforeach()

+diff -Naur glm/CMakeLists.txt glmn/CMakeLists.txt
+--- glm/CMakeLists.txt	2019-09-07 14:10:16.000000000 +0200
++++ glmn/CMakeLists.txt	2019-09-23 00:10:29.559815104 +0200
+@@ -4,6 +4,11 @@
+ set(GLM_VERSION "0.9.9")

+ project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)

+ 

++list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

++

++include(GNUInstallDirs)

++include(CMakePackageConfigHelpers)

++

+ enable_testing()

+ 

+ option(GLM_QUIET "No CMake Message" OFF)

+@@ -237,3 +242,62 @@
+ add_subdirectory(glm)

+ add_subdirectory(test)

+ 

++set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")

++install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

++

++

++# CMake automatically adds an architecture compatibility check to make sure

++# 32 and 64 bit code is not accidentally mixed. For a header-only library this

++# is not required. The check can be disabled by temporarily unsetting

++# CMAKE_SIZEOF_VOID_P. In CMake 3.14 and later this can be achieved more cleanly

++# with write_basic_package_version_file(ARCH_INDEPENDENT).

++# TODO: Use this once a newer CMake can be required.

++set(GLM_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})

++unset(CMAKE_SIZEOF_VOID_P)

++write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)

++set(CMAKE_SIZEOF_VOID_P ${GLM_SIZEOF_VOID_P})

++

++# build tree package config

++configure_file(cmake/glmBuildConfig.cmake.in glmConfig.cmake @ONLY)

++

++# install tree package config

++configure_package_config_file(

++	cmake/glmConfig.cmake.in

++	${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake

++	INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}

++	PATH_VARS CMAKE_INSTALL_INCLUDEDIR

++	NO_CHECK_REQUIRED_COMPONENTS_MACRO)

++

++install(FILES

++	"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"

++	"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"

++	DESTINATION ${GLM_INSTALL_CONFIGDIR})

++

++add_library(glm INTERFACE)

++target_include_directories(glm INTERFACE

++	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>

++	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

++install(TARGETS glm EXPORT glmTargets)

++

++export(EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake")

++

++install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})

++

++# build pkg-config file

++configure_file("./cmake/glm.pc.in" "glm.pc" @ONLY)

++

++# install pkg-config file

++install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")

++

++export(PACKAGE glm)

++

++if(NOT TARGET uninstall)

++	configure_file(

++		${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in

++		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake

++		IMMEDIATE @ONLY)

++

++	add_custom_target(uninstall

++		COMMAND ${CMAKE_COMMAND} -P

++		${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)

++endif()

+diff -Naur glm/cmake_uninstall.cmake.in glmn/cmake_uninstall.cmake.in
+--- glm/cmake_uninstall.cmake.in	1970-01-01 01:00:00.000000000 +0100
++++ glmn/cmake_uninstall.cmake.in	2019-09-23 00:12:22.495660449 +0200
+@@ -0,0 +1,26 @@
++if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

++  message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

++endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")

++

++if (NOT DEFINED CMAKE_INSTALL_PREFIX)

++  set (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")

++endif ()

++ message(${CMAKE_INSTALL_PREFIX})

++

++file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)

++string(REGEX REPLACE "\n" ";" files "${files}")

++foreach(file ${files})

++  message(STATUS "Uninstalling $ENV{DESTDIR}${file}")

++  if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")

++    exec_program(

++      "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""

++      OUTPUT_VARIABLE rm_out

++      RETURN_VALUE rm_retval

++      )

++    if(NOT "${rm_retval}" STREQUAL 0)

++      message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")

++    endif(NOT "${rm_retval}" STREQUAL 0)

++  else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")

++    message(STATUS "File $ENV{DESTDIR}${file} does not exist.")

++  endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")

++endforeach(file)

diff --git a/gnu/packages/patches/idris-test-no-node.patch b/gnu/packages/patches/idris-test-no-node.patch
deleted file mode 100644
index c04ad41a8e..0000000000
--- a/gnu/packages/patches/idris-test-no-node.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 6c52e1b902b869c25e2fe39cff6364143a04da61 Mon Sep 17 00:00:00 2001
-From: Niklas Larsson <niklas@mm.st>
-Date: Tue, 11 Dec 2018 19:56:22 +0100
-Subject: [PATCH] Only check for Node when required
-
----
- test/TestRun.hs | 34 ++++++++++++++++++++--------------
- 1 file changed, 20 insertions(+), 14 deletions(-)
-
-diff --git a/test/TestRun.hs b/test/TestRun.hs
-index c7db9fdcd..4809911f3 100644
---- a/test/TestRun.hs
-+++ b/test/TestRun.hs
-@@ -11,6 +11,7 @@ import Data.Proxy
- import Data.Typeable
- import Options.Applicative
- import System.Directory
-+import System.Environment
- import System.Exit
- import System.FilePath ((</>))
- import System.Info
-@@ -103,20 +104,25 @@ runTest path flags = do
-       normalise (x : xs) = x : normalise xs
-       normalise [] = []
- 
-+checkNode :: IO  ()
-+checkNode = do
-+    nodePath   <- findExecutable "node"
-+    nodejsPath <- findExecutable "nodejs"
-+    let node = nodePath <|> nodejsPath
-+    case node of
-+      Nothing -> do
-+        putStrLn "For running the test suite against Node, node must be installed."
-+        exitFailure
-+      Just _  -> return ()
-+
- main :: IO ()
- main = do
--  nodePath   <- findExecutable "node"
--  nodejsPath <- findExecutable "nodejs"
--  let node = nodePath <|> nodejsPath
--  case node of
--    Nothing -> do
--      putStrLn "For running the test suite against Node, node must be installed."
--      exitFailure
--    Just _  -> do
--      defaultMainWithIngredients ingredients $
-+    args <- getArgs
-+    when ("--node" `elem` args) checkNode
-+    defaultMainWithIngredients ingredients $
-         askOption $ \(NodeOpt node) ->
--          let (codegen, flags) = if node then (JS, ["--codegen", "node"])
--                                         else (C , [])
--           in
--            mkGoldenTests (testFamiliesForCodegen codegen)
--                        (flags ++ idrisFlags)
-+            let (codegen, flags) = if node then (JS, ["--codegen", "node"])
-+                                           else (C , [])
-+            in
-+                mkGoldenTests (testFamiliesForCodegen codegen) (flags ++ idrisFlags)
-+
diff --git a/gnu/packages/patches/ilmbase-fix-tests.patch b/gnu/packages/patches/ilmbase-fix-tests.patch
index fcaa37d201..34d3a180c4 100644
--- a/gnu/packages/patches/ilmbase-fix-tests.patch
+++ b/gnu/packages/patches/ilmbase-fix-tests.patch
@@ -22,10 +22,8 @@ Date: Wed, 24 Feb 2016 01:04:11 +0000
 
 Also fix a pre-existing typo.
 
-Index: ilmbase/ImathTest/testBoxAlgo.cpp
-===================================================================
---- ilmbase.orig/ImathTest/testBoxAlgo.cpp
-+++ ilmbase/ImathTest/testBoxAlgo.cpp
+--- a/IlmBase/ImathTest/testBoxAlgo.cpp
++++ b/IlmBase/ImathTest/testBoxAlgo.cpp
 @@ -886,10 +886,11 @@ boxMatrixTransform ()
  
      assert (approximatelyEqual (b2.min, b4.min, e));
@@ -54,10 +52,8 @@ On 32-bit x86, allow even greater discrepency at double
 precision, due to possible double-rounding.  See
 https://lists.nongnu.org/archive/html/openexr-devel/2015-12/msg00001.html
 
-Index: ilmbase/ImathTest/testBox.cpp
-===================================================================
---- ilmbase.orig/ImathTest/testBox.cpp
-+++ ilmbase/ImathTest/testBox.cpp
+--- a/IlmBase/ImathTest/testBox.cpp
++++ b/IlmBase/ImathTest/testBox.cpp
 @@ -47,6 +47,58 @@ using namespace IMATH_INTERNAL_NAMESPACE
  
  namespace {
diff --git a/gnu/packages/patches/ilmbase-openexr-pkg-config.patch b/gnu/packages/patches/ilmbase-openexr-pkg-config.patch
new file mode 100644
index 0000000000..99613080d8
--- /dev/null
+++ b/gnu/packages/patches/ilmbase-openexr-pkg-config.patch
@@ -0,0 +1,40 @@
+Fix pkg-config files when using the CMake build system.
+
+Upstream bug report:
+https://github.com/openexr/openexr/issues/567
+
+diff --git a/IlmBase/config/CMakeLists.txt b/IlmBase/config/CMakeLists.txt
+index 508176a..9e6ab91 100644
+--- a/IlmBase/config/CMakeLists.txt
++++ b/IlmBase/config/CMakeLists.txt
+@@ -71,9 +71,9 @@ if(ILMBASE_INSTALL_PKG_CONFIG)
+   # use a helper function to avoid variable pollution, but pretty simple
+   function(ilmbase_pkg_config_help pcinfile)
+     set(prefix ${CMAKE_INSTALL_PREFIX})
+-    set(exec_prefix ${CMAKE_INSTALL_BINDIR})
+-    set(libdir ${CMAKE_INSTALL_LIBDIR})
+-    set(includedir ${CMAKE_INSTALL_INCLUDEDIR})
++    set(exec_prefix ${CMAKE_INSTALL_FULL_BINDIR})
++    set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
++    set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+     set(LIB_SUFFIX_DASH ${ILMBASE_LIB_SUFFIX})
+     if(TARGET Threads::Threads)
+       # hrm, can't use properties as they end up as generator expressions
+diff --git a/OpenEXR/config/CMakeLists.txt b/OpenEXR/config/CMakeLists.txt
+index 1ef829a..b8dc141 100644
+--- a/OpenEXR/config/CMakeLists.txt
++++ b/OpenEXR/config/CMakeLists.txt
+@@ -72,9 +72,9 @@ if(OPENEXR_INSTALL_PKG_CONFIG)
+   # use a helper function to avoid variable pollution, but pretty simple
+   function(openexr_pkg_config_help pcinfile)
+     set(prefix ${CMAKE_INSTALL_PREFIX})
+-    set(exec_prefix ${CMAKE_INSTALL_BINDIR})
+-    set(libdir ${CMAKE_INSTALL_LIBDIR})
+-    set(includedir ${CMAKE_INSTALL_INCLUDEDIR})
++    set(exec_prefix ${CMAKE_INSTALL_FULL_BINDIR})
++    set(libdir ${CMAKE_INSTALL_FULL_LIBDIR})
++    set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+     set(LIB_SUFFIX_DASH ${OPENEXR_LIB_SUFFIX})
+     if(TARGET Threads::Threads)
+       # hrm, can't use properties as they end up as generator expressions
+
diff --git a/gnu/packages/patches/p11-kit-jks-timestamps.patch b/gnu/packages/patches/p11-kit-jks-timestamps.patch
deleted file mode 100644
index 8cb8ed8684..0000000000
--- a/gnu/packages/patches/p11-kit-jks-timestamps.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Fix test failures induced by setting the SOURCE_DATE_EPOCH variable.
-
-Taken from upstream: <https://github.com/p11-glue/p11-kit/pull/213>.
-
-From 2a474e1fe8f4bd8b4ed7622e5cf3b2718a202562 Mon Sep 17 00:00:00 2001
-From: Daiki Ueno <dueno@redhat.com>
-Date: Mon, 28 Jan 2019 13:03:15 +0100
-Subject: [PATCH] extract-jks: Prefer _p11_extract_jks_timestamp to
- SOURCE_DATE_EPOCH
-
-Give _p11_extract_jks_timestamp precedence over SOURCE_DATE_EPOCH so
-that the test results are not affected by the envvar settings.
----
- trust/extract-jks.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/trust/extract-jks.c b/trust/extract-jks.c
-index ad8dc35..a6f855f 100644
---- a/trust/extract-jks.c
-+++ b/trust/extract-jks.c
-@@ -250,7 +250,9 @@ prepare_jks_buffer (p11_enumerate *ex,
- 	 * when this was this certificate was added to the keystore, however
- 	 * we don't have that information. Java uses time in milliseconds
- 	 */
--	{
-+	if (_p11_extract_jks_timestamp)
-+		now = _p11_extract_jks_timestamp;
-+	else {
- 		char *source_date_epoch;
- 		source_date_epoch = secure_getenv ("SOURCE_DATE_EPOCH");
- 		if (source_date_epoch) {
-@@ -276,9 +278,7 @@ prepare_jks_buffer (p11_enumerate *ex,
- 				return false;
- 			}
- 			now = epoch;
--		} else if (_p11_extract_jks_timestamp)
--			now = _p11_extract_jks_timestamp;
--		else
-+		} else
- 			now = time (NULL);
- 	}
- 
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 88bc6b3dc6..43bed8c315 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -180,14 +180,14 @@ colors, styles, options and details.")
 (define-public asymptote
   (package
     (name "asymptote")
-    (version "2.49")
+    (version "2.53")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/asymptote/"
                                   version "/asymptote-" version ".src.tgz"))
               (sha256
                (base32
-                "1vljhq68gyc2503l9fj76rk1q4a4db9a1sp3fdfagqqmirnmybp5"))))
+                "0ysj6b3ffifbraflkixh19hmdh3qjij26wyj4z66085qw17v7qkw"))))
     (build-system gnu-build-system)
     ;; Note: The 'asy' binary retains a reference to docdir for use with its
     ;; "help" command in interactive mode, so adding a "doc" output is not
@@ -199,6 +199,8 @@ colors, styles, options and details.")
        ("texinfo" ,texinfo)           ;For generating documentation
        ;; For the manual and the tests.
        ("texlive" ,(texlive-union (list texlive-amsfonts
+                                        texlive-epsf
+                                        texlive-latex-base
                                         texlive-latex-geometry
                                         texlive-latex-graphics
                                         texlive-latex-oberdiek ; for ifluatex
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index 7a5b98c698..fe69af84c4 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -164,7 +164,7 @@ different programming languages.")
 (define-public fmt
   (package
     (name "fmt")
-    (version "5.3.0")
+    (version "6.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -172,7 +172,7 @@ different programming languages.")
                     version "/fmt-" version ".zip"))
               (sha256
                (base32
-                "0p51nhmvjniqlffmmb9djhprnclvm448f2vkdxymvxw307hl21sc"))))
+                "0h148anbaqgch6n69pxsvs1c9wmykgd052wmzgdia7qpz8w6p8dl"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("unzip" ,unzip)))
diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 35353bc6fc..b6ca9b9fc5 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2015, 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
-;;; Copyright © 2016, 2018 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2016, 2018-2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
@@ -16397,3 +16397,30 @@ because lxml.etree already has it's own implementation of XPath 1.0.")
     (synopsis "Python library to parse BibTeX files")
     (description "BibtexParser is a Python library to parse BibTeX files.")
     (license (list license:bsd-3 license:lgpl3))))
+
+(define-public python-distro
+  (package
+    (name "python-distro")
+    (version "1.4.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "distro" version))
+       (sha256
+        (base32
+         "0mrg75w4ap7mdzyga75yaid9n8bgb345ih5mwjp3plj6v1jxwb9n"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/nir0s/distro")
+    (synopsis
+     "OS platform information API")
+    (description
+     "@code{distro} provides information about the OS distribution it runs on,
+such as a reliable machine-readable ID, or version information.
+
+It is the recommended replacement for Python's original
+`platform.linux_distribution` function (which will be removed in Python 3.8).
+@code{distro} also provides a command-line interface to output the platform
+information in various formats.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/regex.scm b/gnu/packages/regex.scm
index ad01814318..7582502069 100644
--- a/gnu/packages/regex.scm
+++ b/gnu/packages/regex.scm
@@ -30,7 +30,7 @@
 (define-public re2
    (package
      (name "re2")
-     (version "2019-08-01")
+     (version "2019-09-01")
      (home-page "https://github.com/google/re2")
      (source (origin
                (method git-fetch)
@@ -38,7 +38,7 @@
                (file-name (git-file-name name version))
                (sha256
                 (base32
-                 "11w9x16y26nfgliis28ivrh9b1x6pxawdwxfwxfjh34h57c0dkzg"))))
+                 "1a0m3p0nx7vz2sgryrsjnbiwkjpj98swjb29r0w5lsv3f92dqyn4"))))
      (build-system gnu-build-system)
      (arguments
       `(#:modules ((guix build gnu-build-system)
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 5e427ffe63..f6d7e9b8b4 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -44,6 +44,17 @@
                   (substitute* "build/common.inc"
                     (("export tbb_build_prefix.+$")
                      "export tbb_build_prefix?=guix\n"))
+
+                  ;; Don't capture the build time and kernel version.
+                  (substitute* "build/version_info_linux.sh"
+                    (("uname -srv") "uname -s")
+                    (("`date -u`") "01 Jan 1970"))
+
+                  (substitute* "build/linux.inc"
+                    (("os_kernel_version:=.*")
+                     "os_kernel_version:=5\n")
+                    (("os_version:=.*")
+                     "os_version:=1\n"))
                   #t))))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index befdd78551..1edeea2425 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2015, 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
@@ -61,6 +61,18 @@ their source and the command-line Info reader.  The emphasis of the language
 is on expressing the content semantically, avoiding physical markup commands.")
     (license gpl3+)))
 
+(define-public texinfo-6.7
+  (package
+    (inherit texinfo)
+    (version "6.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/texinfo/texinfo-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "1aicn1v3czqii08wc91jw089n1x3gfchkf808q2as59dak0h714q"))))))
+
 (define-public texinfo-5
   (package (inherit texinfo)
     (version "5.2")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 6689375da6..4f7b67cf46 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -122,16 +122,15 @@ in intelligent transportation networks.")
 (define-public p11-kit
   (package
     (name "p11-kit")
-    (version "0.23.15")
+    (version "0.23.17")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://github.com/p11-glue/p11-kit/releases/"
                           "download/" version "/p11-kit-" version ".tar.gz"))
-      (patches (search-patches "p11-kit-jks-timestamps.patch"))
       (sha256
        (base32
-        "166pwj00cffv4qq4dvx0k53zka0b0r1fa0whc49007vsqyh3khgp"))))
+        "07kwdlw07jk9833k43kkhv0q9gkll3vmd25wwp68cpy0crfv4isl"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -828,7 +827,7 @@ then ported to the GNU / Linux environment.")
 (define-public mbedtls-apache
   (package
     (name "mbedtls-apache")
-    (version "2.16.2")
+    (version "2.16.3")
     (source
      (origin
        (method url-fetch)
@@ -838,7 +837,7 @@ then ported to the GNU / Linux environment.")
                            version "-apache.tgz"))
        (sha256
         (base32
-         "1906hbwlkq32075hca4vjad03dcc36aycvmaz8yvhr3ygg6lz0x6"))))
+         "0qd65lnr63vmx2gxla6lcmm5gawlnaj4wy4h4vmdc3h9h9nyw6zc"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
@@ -876,7 +875,7 @@ coding footprint.")
 (define-public dehydrated
   (package
     (name "dehydrated")
-    (version "0.6.2")
+    (version "0.6.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -884,7 +883,7 @@ coding footprint.")
                     "v" version "/dehydrated-" version ".tar.gz"))
               (sha256
                (base32
-                "03p80yj6bnzjc6dkp5hb9wpplmlrla8n5src71cnzw4rj53q8cqn"))))
+                "0dgskgbdd95p13jx6s13p77y15wngb5cm6p4305cf2s54w0bvahh"))))
     (build-system trivial-build-system)
     (arguments
      `(#:modules ((guix build utils))
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index eef481d52a..374de42600 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -204,6 +204,32 @@ In fact, there is no graphical output possible.  AA-lib replaces those
 old-fashioned output methods with powerful ascii-art renderer.")
     (license license:lgpl2.0+)))
 
+(define-public celluloid
+  (package
+    (name "celluloid")
+    (version "0.17")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/celluloid-player/celluloid/releases"
+                           "/download/v" version "/celluloid-" version ".tar.xz"))
+       (sha256
+        (base32 "0a3bhvs38gxjplygb0q9cx5djl5y0bmnxgaq0sd65j610a60f5h0"))))
+    (build-system glib-or-gtk-build-system)
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("libepoxy" ,libepoxy)
+       ("mpv" ,mpv)))
+    (home-page "https://github.com/celluloid-player/celluloid")
+    (synopsis "GTK+ frontend for the mpv media player")
+    (description "Celluloid is a simple GTK+ frontend for the mpv media player.
+It interacts with mpv via the client API exported by libmpv, allowing access to
+mpv's powerful playback capabilities.")
+    (license license:gpl3+)))
+
 (define-public liba52
   (package
     (name "liba52")
@@ -799,14 +825,14 @@ operate properly.")
 (define-public ffmpeg
   (package
     (name "ffmpeg")
-    (version "4.2")
+    (version "4.2.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1mgcxm7sqkajx35px05szsmn9mawwm03cfpmk3br7bcp3a1i0gq2"))))
+               "1m5nkc61ihgcf0b2wabm0zyqa8sj3c0w8fi6kr879lb0kdzciiyf"))))
     (build-system gnu-build-system)
     (inputs
      `(("dav1d" ,dav1d)
@@ -1404,32 +1430,7 @@ projects while introducing many more.")
     (license license:gpl2+)))
 
 (define-public gnome-mpv
-  (package
-    (name "gnome-mpv")
-    (version "0.16")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/gnome-mpv/gnome-mpv/releases"
-                           "/download/v" version "/gnome-mpv-" version
-                           ".tar.xz"))
-       (sha256
-        (base32
-         "0jzdzvhcqp5jp1inwk2466zf7r8iimk3x69066gl8mzaay98mk92"))))
-    (native-inputs
-     `(("intltool" ,intltool)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("gtk+" ,gtk+)
-       ("libepoxy" ,libepoxy)
-       ("mpv" ,mpv)))
-    (build-system glib-or-gtk-build-system)
-    (home-page "https://github.com/gnome-mpv/gnome-mpv")
-    (synopsis "GTK+ frontend for the mpv media player")
-    (description "GNOME MPV is a simple GTK+ frontend for the mpv media player.
-GNOME MPV interacts with mpv via the client API exported by libmpv, allowing
-access to mpv's powerful playback capabilities.")
-    (license license:gpl3+)))
+  (deprecated-package "gnome-mpv" celluloid))
 
 (define-public libvpx
   (package
@@ -1492,7 +1493,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2019.09.12")
+    (version "2019.09.12.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ytdl-org/youtube-dl/"
@@ -1500,7 +1501,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0wmc0rl4l08hnz3agh69ld1pcmjs7czg0d2k7mnnlxhwlwi38w56"))))
+                "0h7v81kcxcpy82wq9b1aiz2zg6hg7rnlcfmzd13j6k8yhr7ah9yf"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -1631,7 +1632,7 @@ other site that youtube-dl supports.")
 (define-public you-get
   (package
     (name "you-get")
-    (version "0.4.1328")
+    (version "0.4.1355")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1640,7 +1641,7 @@ other site that youtube-dl supports.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1r9qffwvxmp74byva12h2jsn3n33vyim052sx9lykv5dygibbp65"))))
+                "0xq7z04hvw3b3npiahlpzhbxsjvam9n9dynplyrkn84dx6k9ajbj"))))
     (build-system python-build-system)
     (inputs
      `(("ffmpeg" ,ffmpeg)))             ; for multi-part and >=1080p videos
@@ -2203,7 +2204,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
 (define-public mlt
   (package
     (name "mlt")
-    (version "6.12.0")
+    (version "6.16.0")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2212,7 +2213,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0pzm3mjbbdl2rkbswgyfkx552xlxh2qrwzsi2a4dicfr92rfgq6w"))))
+                "1362fv63p34kza9v4b71b6wakgvsa2vdx9y0g28x3yh4cp4k97kx"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index e1ac2189be..532f8ff95c 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -965,7 +965,7 @@ Open Container Initiative (OCI) image layout and its tagged images.")
 (define-public skopeo
   (package
     (name "skopeo")
-    (version "0.1.28")
+    (version "0.1.39")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -974,7 +974,7 @@ Open Container Initiative (OCI) image layout and its tagged images.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "068nwrr3nr27alravcq1sxyhdd5jjr24213vdgn1dqva3885gbi0"))))
+                "1jkxmvh079pd9j4aa39ilmclwafnjs0yqdiigwh8cj7yf97x4vsi"))))
     (build-system go-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/vulkan.scm b/gnu/packages/vulkan.scm
index 479ec9425d..a924bcc107 100644
--- a/gnu/packages/vulkan.scm
+++ b/gnu/packages/vulkan.scm
@@ -81,7 +81,7 @@ and for the GLSL.std.450 extended instruction set.
 (define-public spirv-tools
   (package
     (name "spirv-tools")
-    (version "2019.1")
+    (version "2019.2")
     (source
      (origin
       (method git-fetch)
@@ -89,9 +89,8 @@ and for the GLSL.std.450 extended instruction set.
             (url "https://github.com/KhronosGroup/SPIRV-Tools")
             (commit (string-append "v" version))))
       (sha256
-       (base32
-        "0vddjzhkrhrm3l3i57nxmq2smv3r1s0ka5ff2kziaahr4hqb479r"))
-      (file-name (string-append name "-" version "-checkout"))))
+       (base32 "0zwz6qg8g8165h7cw52agryjrdb29gbmsbziw3pwiddfkyma8vvg"))
+      (file-name (git-file-name name version))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; FIXME: Tests fail.
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index 6d9126dedc..f84320f116 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -331,7 +331,7 @@ GUI.  It is based on PyQt5 and QtWebKit.")
 (define-public vimb
   (package
     (name "vimb")
-    (version "3.3.0")
+    (version "3.5.0")
     (source
      (origin
        (method git-fetch)
@@ -339,12 +339,11 @@ GUI.  It is based on PyQt5 and QtWebKit.")
              (url "https://github.com/fanglingsu/vimb/")
              (commit version)))
        (sha256
-        (base32
-         "1qg18z2gnsli9qgrqfhqfrsi6g9mcgr90w8yab28nxrq4aha6brf"))
+        (base32 "13q7mk1hhjri0s30a98r8ncy0skf6m6lrnbqaf0jimf6sbwgiirf"))
        (file-name (git-file-name name version))))
     (build-system glib-or-gtk-build-system)
     (arguments
-     '(#:tests? #f ; no tests
+     '(#:tests? #f                      ; no tests
        #:make-flags (list "CC=gcc"
                           "DESTDIR="
                           (string-append "PREFIX=" %output))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index c9e46ef7e9..ea6f946011 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -56,6 +56,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix cvs-download)
   #:use-module (guix hg-download)
@@ -77,6 +78,8 @@
   #:use-module (gnu packages check)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages emacs)
+  #:use-module (gnu packages emacs-xyz)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
@@ -209,14 +212,14 @@ Interface} specification.")
     ;; ’stable’ and recommends that “in general you deploy the NGINX mainline
     ;; branch at all times” (https://www.nginx.com/blog/nginx-1-6-1-7-released/)
     ;; Consider updating the nginx-documentation package together with this one.
-    (version "1.17.3")
+    (version "1.17.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0g0g9prwjy0rnv6n5smny5yl5dhnmflqdr3hwgyj5jpr5hfgx11v"))))
+                "0mg521bxh8pysmy20x599m252ici9w97kk7qy7s0wrv6bqv4p1b2"))))
     (build-system gnu-build-system)
     (inputs `(("openssl" ,openssl)
               ("pcre" ,pcre)
@@ -864,7 +867,7 @@ for efficient socket-like bidirectional reliable communication channels.")
 (define-public wabt
   (package
     (name "wabt")
-    (version "1.0.11")
+    (version "1.0.12")
     (source
      (origin
        (method git-fetch)
@@ -873,7 +876,7 @@ for efficient socket-like bidirectional reliable communication channels.")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "0hn88vlqyclpk79v3wg3lrssd9vwhjdgvb41g03jqakygxxgnmp5"))))
+        (base32 "1zlv3740wkqj4mn6sr84h0x6wk2lcp4pwwmqsh5yyqp1j1glbsa0"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags '("-DBUILD_TESTS=OFF")
@@ -4017,6 +4020,98 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
 (define-public python2-feedparser
   (package-with-python2 python-feedparser))
 
+(define-public guix-data-service
+  (let ((commit "bb94f6dd05a33135fa661b86d35d203c0c099dba")
+        (revision "1"))
+    (package
+      (name "guix-data-service")
+      (version (string-append "0.0.1-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.savannah.gnu.org/git/guix/data-service.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1y6s4igjvi0293z4d4hbgwifs8avcam71qhis9z4f8mjz6w7vcpb"))))
+      (build-system gnu-build-system)
+      (arguments
+       '(#:tests? #f                    ; TODO Tests require PostgreSQL
+         #:modules ((guix build utils)
+                    (guix build gnu-build-system)
+                    (ice-9 rdelim)
+                    (ice-9 popen))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'set-paths 'set-GUIX_ENVIRONMENT
+             (lambda* (#:key inputs #:allow-other-keys)
+               ;; This means guix.el finds the Emacs modules
+               (setenv "GUIX_ENVIRONMENT"
+                       (assoc-ref inputs "emacs-with-modules"))
+               #t))
+           (add-before 'build 'set-GUILE_AUTO_COMPILE
+             (lambda _
+               ;; To avoid errors relating to guild
+               (setenv "GUILE_AUTO_COMPILE" "0")
+               #t))
+           (add-after 'install 'wrap-executable
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin"))
+                      (guile (assoc-ref inputs "guile"))
+                      (guile-effective-version
+                       (read-line
+                        (open-pipe* OPEN_READ
+                                    (string-append guile "/bin/guile")
+                                    "-c" "(display (effective-version))")))
+                      (scm (string-append out "/share/guile/site/"
+                                          guile-effective-version))
+                      (go  (string-append out "/lib/guile/"
+                                          guile-effective-version
+                                          "/site-ccache")))
+                 (for-each
+                  (lambda (file)
+                    (wrap-program (string-append bin "/" file)
+                      `("PATH" ":" prefix
+                        (,bin))
+                      `("GUILE_LOAD_PATH" ":" prefix
+                        (,scm ,(getenv "GUILE_LOAD_PATH")))
+                      `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                        (,go ,(getenv "GUILE_LOAD_COMPILED_PATH")))))
+                  '("guix-data-service"
+                    "guix-data-service-process-branch-updated-email"
+                    "guix-data-service-process-job"
+                    "guix-data-service-process-jobs"
+                    "guix-data-service-query-build-servers"))
+                 #t)))
+           (delete 'strip))))           ; As the .go files aren't compatible
+      (inputs
+       `(("guix" ,guix)
+         ("guile-fibers" ,guile-fibers)
+         ("guile-json" ,guile-json-3)
+         ("guile-email" ,guile-email)
+         ("guile-squee" ,guile-squee)
+         ("postgresql" ,postgresql)
+         ("sqitch" ,sqitch)))
+      (native-inputs
+       `(("guile" ,guile-2.2)
+         ("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("emacs-with-modules" ,(directory-union
+                                 "emacs-union"
+                                 (list emacs-no-x
+                                       emacs-htmlize)))
+         ("pkg-config" ,pkg-config)))
+      (synopsis "Store and provide data about GNU Guix")
+      (description
+       "The Guix Data Service stores data about GNU Guix, and provides this
+through a web interface.  It supports listening to the guix-commits mailing
+list to find out about new revisions, then loads the data from these in to a
+PostgreSQL database.")
+      (home-page "http://data.guix.gnu.org/")
+      (license license:agpl3+))))
+
 (define-public gumbo-parser
   (package
     (name "gumbo-parser")
@@ -4972,13 +5067,13 @@ deployments.")
   (package
     (name "varnish")
     (home-page "https://varnish-cache.org/")
-    (version "6.2.1")
+    (version "6.3.0")
     (source (origin
               (method url-fetch)
               (uri (string-append home-page "_downloads/varnish-" version ".tgz"))
               (sha256
                (base32
-                "15qfvw3fp05bgyspcm6gbsnxhs430p4z3fwz5kkd1z68jb90b3pj"))))
+                "0zwlffdd1m0ih33nq40xf2wwdyvr4czmns2fs90qpfnwy72xxk4m"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib")
@@ -4993,7 +5088,8 @@ deployments.")
            (lambda _
              (substitute* '("bin/varnishtest/vtc_varnish.c"
                             "bin/varnishtest/vtc_process.c"
-                            "bin/varnishd/mgt/mgt_vcc.c")
+                            "bin/varnishd/mgt/mgt_vcc.c"
+                            "bin/varnishtest/tests/u00014.vtc")
                (("/bin/sh") (which "sh")))
              (substitute* "bin/varnishd/mgt/mgt_shmem.c"
                (("rm -rf") (string-append (which "rm") " -rf")))
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index ea7cee54e3..3169c7d15a 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018, 2019 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
+;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +35,7 @@
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
@@ -46,6 +48,7 @@
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libreoffice)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -53,20 +56,79 @@
   #:use-module (gnu packages sqlite)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
+  #:use-module (gnu packages virtualization)
   #:use-module (gnu packages xml)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg))
 
+(define-public libwpe
+  (package
+    (name "libwpe")
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://wpewebkit.org/releases/libwpe-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "1221vs72zs87anrzhbm6pf8jnii7s6ms7mkzj6nlds9zqd7lklz2"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ;no tests
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("mesa" ,mesa)))
+    (propagated-inputs
+     `(;; In Requires of wpe-1.0.pc.
+       ("libxkbcommon" ,libxkbcommon)))
+    (home-page "https://wpewebkit.org/")
+    (synopsis "Platform agnostic WebKit interfaces")
+    (description
+     "@code{libwpe} is a small library that defines programming interfaces
+for use by WebKit, and provides a mechanism for loading a platform-specific
+backend which implements them.")
+    (license license:bsd-2)))
+
+(define-public wpebackend-fdo
+  (package
+    (name "wpebackend-fdo")
+    (version "1.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://wpewebkit.org/releases/"
+                                  "wpebackend-fdo-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1bwbs47v4nlzhsqrw9fpyny5m3n9ry0kfzsvk90zjif4bd5cl6d9"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))                    ;no tests
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("glib" ,glib)
+       ("libwpe" ,libwpe)
+       ("mesa" ,mesa)
+       ("wayland" ,wayland)))
+    (home-page "https://wpewebkit.org/")
+    (synopsis "Wayland WPE backend")
+    (description
+     "This package provides a backend implementation for the WPE WebKit
+engine that uses Wayland for graphics output.")
+    (license license:bsd-2)))
+
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.24.4")
+    (version "2.26.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1n3x5g1z6rg9n1ssna7wi0z6zlprjm4wzk544v14wqi6q0lv2s46"))))
+                "0mfikjfjhwcnrxbzdyh3fl9bbs2azgbdnx8h5910h41b3n022jvb"))))
     (build-system cmake-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -128,6 +190,7 @@
        ("libsoup" ,libsoup)))
     (inputs
      `(("at-spi2-core" ,at-spi2-core)
+       ("bubblewrap" ,bubblewrap)
        ("enchant" ,enchant)
        ("geoclue" ,geoclue)
        ("gst-plugins-base" ,gst-plugins-base)
@@ -139,16 +202,20 @@
        ("libjpeg" ,libjpeg)
        ("libnotify" ,libnotify)
        ("libpng" ,libpng)
+       ("libseccomp" ,libseccomp)
        ("libsecret" ,libsecret)
        ("libtasn1" ,libtasn1)
        ("libwebp" ,libwebp)
+       ("libwpe" ,libwpe)
        ("libxcomposite" ,libxcomposite)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
        ("libxt" ,libxt)
        ("mesa" ,mesa)
        ("openjpeg" ,openjpeg)
-       ("sqlite" ,sqlite)))
+       ("sqlite" ,sqlite)
+       ("wpebackend-fdo" ,wpebackend-fdo)
+       ("xdg-dbus-proxy" ,xdg-dbus-proxy)))
     (home-page "https://www.webkitgtk.org/")
     (synopsis "Web content engine for GTK+")
     (description
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 275a766531..48ddf55e3c 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -96,7 +96,7 @@
 (define-public bspwm
   (package
     (name "bspwm")
-    (version "0.9.5")
+    (version "0.9.9")
     (source
      (origin
        (method git-fetch)
@@ -105,7 +105,7 @@
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "09h3g1rxxjyw861mk32lj774nmwkx8cwxq4wfgmf4dpbizymvhhr"))))
+        (base32 "1i7crmljk1vra1r6alxvj6lqqailjjcv0llyg7a0gm23rbv4a42g"))))
     (build-system gnu-build-system)
     (inputs
      `(("libxcb" ,libxcb)
@@ -1422,7 +1422,7 @@ Wlroots based compositors.")
 (define-public mako
   (package
     (name "mako")
-    (version "1.3")
+    (version "1.4")
     (source
      (origin
        (method git-fetch)
@@ -1431,7 +1431,7 @@ Wlroots based compositors.")
              (commit (string-append "v" version))))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "17azdc37xsbmx13fkfp23vg9lznrv9fh6nhagn64wdq3nhsxm3b6"))))
+        (base32 "11ymiq6cr2ma0iva1mqybn3j6k73bsc6lv6pcbdq7hkhd4f9b7j9"))))
     (build-system meson-build-system)
     (inputs `(("cairo" ,cairo)
               ("elogind" ,elogind)
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 70213a617e..619c9b102a 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -810,15 +810,16 @@ Guile will work for XBindKeys.")
 (define-public sxhkd
   (package
     (name "sxhkd")
-    (version "0.6.0")
+    (version "0.6.1")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
              (url "https://github.com/baskerville/sxhkd")
              (commit version)))
+       (file-name (git-file-name name version))
        (sha256
-        (base32 "1cz4vkm7fqd51ly9qjkf5q76kdqdzfhaajgvrs4anz5dyzrdpw68"))))
+        (base32 "0j7bl2l06r0arrjzpz7al9j6cwzc730knbsijp7ixzz96pq7xa2h"))))
     (build-system gnu-build-system)
     (inputs
      `(("asciidoc" ,asciidoc)
@@ -998,7 +999,8 @@ Wacom tablet applet.")
        (method url-fetch)
        (uri (string-append
              "https://github.com/linuxwacom/xf86-input-wacom/releases/download/"
-             name "-" version "/" name "-" version ".tar.bz2"))
+             "xf86-input-wacom-" version "/"
+             "xf86-input-wacom-" version ".tar.bz2"))
        (sha256
         (base32
          "029y8varbricba2dzhzhy0ndd7lbfif411ca8c3wxzni9qmbj1ij"))))
@@ -1177,7 +1179,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
 (define-public rofi
   (package
     (name "rofi")
-    (version "1.5.3")
+    (version "1.5.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/DaveDavenport/rofi/"
@@ -1185,7 +1187,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
                                   version "/rofi-" version ".tar.xz"))
               (sha256
                (base32
-                "0y78ya2va2lg3ww17n11y9awn8lhcp1px2d8gxaimxfqlxczs8la"))))
+                "1nslmyqyzhfr4hxd4llqkkkb8ap8apkdna32rllvar7r576059ci"))))
     (build-system gnu-build-system)
     (inputs
      `(("pango" ,pango)
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 3a853ea661..6b927f700e 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -1764,7 +1764,7 @@ package is in maintenance mode.")
 (define-public java-dom4j
   (package
     (name "java-dom4j")
-    (version "2.1.0")
+    (version "2.1.1")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1773,7 +1773,7 @@ package is in maintenance mode.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1827jljs8mps489fm7xw63cakdqwc5grilrr5n9spr2rlk76jpx3"))
+                "0q907srj9v4hwicpcrn4slyld5npf2jv7hzchsgrg29q2xmbwkdl"))
               (modules '((guix build utils)))
               (snippet
                 '(begin ;; Delete bundled jar archives.
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index b3d9fd3cb7..273788f615 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -215,7 +215,7 @@ which can be read by any architecture.")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://xorg/individual/proto/"
-                                  name "-" version ".tar.bz2"))
+                                  "xorgproto-" version ".tar.bz2"))
               (sha256
                (base32
                 "16yll1kaffnslik5sizlw3qrigj1gpsgfgyq6903g3mwdixamnm6"))))
@@ -423,7 +423,7 @@ Resources file.")
 (define-public encodings
   (package
     (name "encodings")
-    (version "1.0.4")
+    (version "1.0.5")
     (source
       (origin
         (method url-fetch)
@@ -432,8 +432,7 @@ Resources file.")
                version
                ".tar.bz2"))
         (sha256
-          (base32
-            "0ffmaw80vmfwdgvdkp6495xgsqszb6s0iira5j0j6pd4i0lk3mnf"))))
+          (base32 "0caafx0yqqnqyvbalxhh3mb0r9v36xmcy5zjhygb2i508dhy35mx"))))
     (build-system gnu-build-system)
     (inputs
       `(("mkfontscale" ,mkfontscale)))
@@ -2017,7 +2016,7 @@ information used in connecting to the X server.")
 (define-public xbacklight
   (package
     (name "xbacklight")
-    (version "1.2.2")
+    (version "1.2.3")
     (source
       (origin
         (method url-fetch)
@@ -2027,7 +2026,7 @@ information used in connecting to the X server.")
                ".tar.bz2"))
         (sha256
           (base32
-            "0pmzaz4kp38qv2lqiw5rnqhwzmwrq65m1x5j001mmv99wh9isnk1"))))
+            "1plssg0s3pbslg6rfzxp9sx8ryvn8l32zyvc8zp9zsbsfwjg69rs"))))
     (build-system gnu-build-system)
     (inputs
      `(("libxcb" ,libxcb)
@@ -5034,7 +5033,7 @@ protocol.")
       (origin
         (method url-fetch)
         (uri (string-append "https://xcb.freedesktop.org/dist/"
-                            name "-" version ".tar.bz2"))
+                            "libxcb-" version ".tar.bz2"))
         (sha256
           (base32
            "1ahxhmdqp4bhb90zmc275rmf5wixqra4bnw9pqnzyl1w3598g30q"))))
@@ -5800,17 +5799,17 @@ to answer a question.  Xmessage can also exit after a specified time.")
 (define-public xterm
   (package
     (name "xterm")
-    (version "335")
+    (version "349")
     (source (origin
               (method url-fetch)
               (uri (list
                     (string-append "http://invisible-mirror.net/archives/xterm/"
-                                   name "-" version ".tgz")
+                                   "xterm-" version ".tgz")
                     (string-append "ftp://ftp.invisible-island.net/xterm/"
-                                   name "-" version ".tgz")))
+                                   "xterm-" version ".tgz")))
               (sha256
                (base32
-                "15nbgys4s2idhx6jzzc24g9bb1s6yps5fyg2bafvs0gkkcm1ggz0"))))
+                "0ps7b2b2kbrkv5q49cmb8c51z0w21jmm7hwciw30m6jgfb9s79ir"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-wide-chars" "--enable-load-vt-fonts"
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
new file mode 100644
index 0000000000..0f0fad39b0
--- /dev/null
+++ b/gnu/services/guix.scm
@@ -0,0 +1,212 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Christopher Baines <mail@cbaines.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 services guix)
+  #:use-module (ice-9 match)
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:use-module ((gnu packages base)
+                #:select (glibc-utf8-locales))
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages web)
+  #:use-module (gnu services)
+  #:use-module (gnu services base)
+  #:use-module (gnu services admin)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services getmail)
+  #:use-module (gnu system shadow)
+  #:export (<guix-data-service-configuration>
+            guix-data-service-configuration
+            guix-data-service-configuration?
+            guix-data-service-package
+            guix-data-service-user
+            guix-data-service-group
+            guix-data-service-port
+            guix-data-service-host
+            guix-data-service-getmail-idle-mailboxes
+            guix-data-service-commits-getmail-retriever-configuration
+
+            guix-data-service-type))
+
+;;;; Commentary:
+;;;
+;;; This module implements a service that to run instances of the Guix Data
+;;; Service, which provides data about Guix over time.
+;;;
+;;;; Code:
+
+(define-record-type* <guix-data-service-configuration>
+  guix-data-service-configuration make-guix-data-service-configuration
+  guix-data-service-configuration?
+  (package          guix-data-service-package
+                    (default guix-data-service))
+  (user             guix-data-service-configuration-user
+                    (default "guix-data-service"))
+  (group            guix-data-service-configuration-group
+                    (default "guix-data-service"))
+  (port             guix-data-service-port
+                    (default 8765))
+  (host             guix-data-service-host
+                    (default "127.0.0.1"))
+  (getmail-idle-mailboxes
+   guix-data-service-getmail-idle-mailboxes
+   (default #f))
+  (commits-getmail-retriever-configuration
+   guix-data-service-commits-getmail-retriever-configuration
+   (default #f)))
+
+(define (guix-data-service-profile-packages config)
+  "Return the guix-data-service package, this will populate the
+ca-certificates.crt file in the system profile."
+  (list
+   (guix-data-service-package config)))
+
+(define (guix-data-service-shepherd-services config)
+  (match-record config <guix-data-service-configuration>
+    (package user group port host)
+    (list
+     (shepherd-service
+      (documentation "Guix Data Service web server")
+      (provision '(guix-data-service))
+      (requirement '(postgres networking))
+      (start #~(make-forkexec-constructor
+                (list #$(file-append package
+                                     "/bin/guix-data-service")
+                      "--pid-file=/var/run/guix-data-service/pid"
+                      #$(string-append "--port=" (number->string port))
+                      #$(string-append "--host=" host)
+                      ;; Perform any database migrations when the
+                      ;; service is started
+                      "--update-database")
+
+                #:user #$user
+                #:group #$group
+                #:pid-file "/var/run/guix-data-service/pid"
+                ;; Allow time for migrations to run
+                #:pid-file-timeout 60
+                #:environment-variables
+                `(,(string-append
+                    "GUIX_LOCPATH=" #$glibc-utf8-locales "/lib/locale")
+                  "LC_ALL=en_US.utf8")
+                #:log-file "/var/log/guix-data-service/web.log"))
+      (stop #~(make-kill-destructor)))
+
+     (shepherd-service
+      (documentation "Guix Data Service process jobs")
+      (provision '(guix-data-service-process-jobs))
+      (requirement '(postgres
+                     networking
+                     ;; Require guix-data-service, as that the database
+                     ;; migrations are handled through this service
+                     guix-data-service))
+      (start #~(make-forkexec-constructor
+                (list
+                 #$(file-append package
+                                "/bin/guix-data-service-process-jobs"))
+                #:user #$user
+                #:group #$group
+                #:environment-variables
+                `("HOME=/var/lib/guix-data-service"
+                  "GIT_SSL_CAINFO=/etc/ssl/certs/ca-certificates.crt"
+                  ,(string-append
+                    "GUIX_LOCPATH=" #$glibc-utf8-locales "/lib/locale")
+                  "LC_ALL=en_US.utf8")
+                #:log-file "/var/log/guix-data-service/process-jobs.log"))
+      (stop #~(make-kill-destructor))))))
+
+(define (guix-data-service-activation config)
+  #~(begin
+      (use-modules (guix build utils))
+
+      (define %user (getpw "guix-data-service"))
+
+      (chmod "/var/lib/guix-data-service" #o755)
+
+      (mkdir-p "/var/log/guix-data-service")
+
+      ;; Allow writing the PID file
+      (mkdir-p "/var/run/guix-data-service")
+      (chown "/var/run/guix-data-service"
+             (passwd:uid %user)
+             (passwd:gid %user))))
+
+(define (guix-data-service-account config)
+  (match-record config <guix-data-service-configuration>
+    (user group)
+    (list (user-group
+           (name group)
+           (system? #t))
+          (user-account
+           (name user)
+           (group group)
+           (system? #t)
+           (comment "Guix Data Service user")
+           (home-directory "/var/lib/guix-data-service")
+           (shell (file-append shadow "/sbin/nologin"))))))
+
+(define (guix-data-service-getmail-configuration config)
+  (match config
+    (($ <guix-data-service-configuration> package user group
+                                          port host
+                                          #f #f)
+     '())
+    (($ <guix-data-service-configuration> package user group
+                                          port host
+                                          getmail-idle-mailboxes
+                                          commits-getmail-retriever-configuration)
+     (list
+      (getmail-configuration
+       (name 'guix-data-service)
+       (user user)
+       (group group)
+       (directory "/var/lib/getmail/guix-data-service")
+       (rcfile
+        (getmail-configuration-file
+         (retriever commits-getmail-retriever-configuration)
+         (destination
+          (getmail-destination-configuration
+           (type "MDA_external")
+           (path (file-append
+                  package
+                  "/bin/guix-data-service-process-branch-updated-email"))))
+         (options
+          (getmail-options-configuration
+           (read-all #f)
+           (delivered-to #f)
+           (received #f)))))
+       (idle getmail-idle-mailboxes))))))
+
+(define guix-data-service-type
+  (service-type
+   (name 'guix-data-service)
+   (extensions
+    (list
+     (service-extension profile-service-type
+                        guix-data-service-profile-packages)
+     (service-extension shepherd-root-service-type
+                        guix-data-service-shepherd-services)
+     (service-extension activation-service-type
+                        guix-data-service-activation)
+     (service-extension account-service-type
+                        guix-data-service-account)
+     (service-extension getmail-service-type
+                        guix-data-service-getmail-configuration)))
+   (default-value
+     (guix-data-service-configuration))
+   (description
+    "Run an instance of the Guix Data Service.")))
diff --git a/gnu/tests/guix.scm b/gnu/tests/guix.scm
new file mode 100644
index 0000000000..6139e31cf0
--- /dev/null
+++ b/gnu/tests/guix.scm
@@ -0,0 +1,173 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Christopher Baines <mail@cbaines.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 tests guix)
+  #:use-module (gnu tests)
+  #:use-module (gnu system)
+  #:use-module (gnu system file-systems)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu system vm)
+  #:use-module (gnu services)
+  #:use-module (gnu services guix)
+  #:use-module (gnu services databases)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services networking)
+  #:use-module (gnu packages databases)
+  #:use-module (guix packages)
+  #:use-module (guix modules)
+  #:use-module (guix records)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (ice-9 match)
+  #:export (%test-guix-data-service))
+
+
+;;;
+;;; Guix Data Service
+;;;
+
+(define guix-data-service-initial-database-setup-service
+  (let ((user "guix_data_service")
+        (name "guix_data_service"))
+    (define start-gexp
+      #~(lambda ()
+          (let ((pid (primitive-fork))
+                (postgres (getpwnam "postgres")))
+            (if (eq? pid 0)
+                (dynamic-wind
+                  (const #t)
+                  (lambda ()
+                    (setgid (passwd:gid postgres))
+                    (setuid (passwd:uid postgres))
+                    (primitive-exit
+                     (if (and
+                          (zero?
+                           (system* #$(file-append postgresql "/bin/createuser")
+                                    #$user))
+                          (zero?
+                           (system* #$(file-append postgresql "/bin/createdb")
+                                    "-O" #$user #$name)))
+                         0
+                         1)))
+                  (lambda ()
+                    (primitive-exit 1)))
+                (zero? (cdr (waitpid pid)))))))
+
+    (shepherd-service
+     (requirement '(postgres))
+     (provision '(guix-data-service-initial-database-setup))
+     (start start-gexp)
+     (stop #~(const #f))
+     (respawn? #f)
+     (one-shot? #t)
+     (documentation "Setup Guix Data Service database."))))
+
+(define %guix-data-service-os
+  (simple-operating-system
+   (service dhcp-client-service-type)
+   (service postgresql-service-type
+            (postgresql-configuration
+             (config-file
+              (postgresql-config-file
+               (hba-file
+                (plain-file "pg_hba.conf"
+                            "
+local	all	all			trust
+host	all	all	127.0.0.1/32 	trust
+host	all	all	::1/128 	trust"))))))
+   (service guix-data-service-type
+            (guix-data-service-configuration
+             (host "0.0.0.0")))
+   (simple-service 'guix-data-service-database-setup
+                   shepherd-root-service-type
+                   (list guix-data-service-initial-database-setup-service))))
+
+(define (run-guix-data-service-test)
+  (define os
+    (marionette-operating-system
+     %guix-data-service-os
+     #:imported-modules '((gnu services herd)
+                          (guix combinators))))
+
+  (define forwarded-port 8080)
+
+  (define vm
+    (virtual-machine
+     (operating-system os)
+     (memory-size 1024)
+     (port-forwardings `((,forwarded-port . 8765)))))
+
+  (define test
+    (with-imported-modules '((gnu build marionette))
+      #~(begin
+          (use-modules (srfi srfi-11) (srfi srfi-64)
+                       (gnu build marionette)
+                       (web uri)
+                       (web client)
+                       (web response))
+
+          (define marionette
+            (make-marionette (list #$vm)))
+
+          (mkdir #$output)
+          (chdir #$output)
+
+          (test-begin "guix-data-service")
+
+          (test-assert "service running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (match (start-service 'guix-data-service)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((pid) (number? pid))))))
+             marionette))
+
+          (test-assert "process jobs service running"
+            (marionette-eval
+             '(begin
+                (use-modules (gnu services herd))
+                (match (start-service 'guix-data-service-process-jobs)
+                  (#f #f)
+                  (('service response-parts ...)
+                   (match (assq-ref response-parts 'running)
+                     ((pid) (number? pid))))))
+             marionette))
+
+          (test-equal "http-get"
+            200
+            (let-values
+                (((response text)
+                  (http-get #$(simple-format
+                               #f "http://localhost:~A/healthcheck" forwarded-port)
+                            #:decode-body? #t)))
+              (response-code response)))
+
+          (test-end)
+          (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
+
+  (gexp->derivation "guix-data-service-test" test))
+
+(define %test-guix-data-service
+  (system-test
+   (name "guix-data-service")
+   (description "Connect to a running Guix Data Service.")
+   (value (run-guix-data-service-test))))
diff --git a/guix/colors.scm b/guix/colors.scm
index 7949cf5763..b63ac37027 100644
--- a/guix/colors.scm
+++ b/guix/colors.scm
@@ -31,6 +31,8 @@
 
             colorize-string
             highlight
+            dim
+
             color-rules
             color-output?
             isatty?*))
@@ -133,14 +135,16 @@ that subsequent output will not have any colors in effect."
        (not (getenv "NO_COLOR"))
        (isatty?* port)))
 
-(define %highlight-color (color BOLD))
+(define (coloring-procedure color)
+  "Return a procedure that applies COLOR to the given string."
+  (lambda* (str #:optional (port (current-output-port)))
+    "Return STR with extra ANSI color attributes if PORT supports it."
+    (if (color-output? port)
+        (colorize-string str color)
+        str)))
 
-(define* (highlight str #:optional (port (current-output-port)))
-  "Return STR with extra ANSI color attributes to highlight it if PORT
-supports it."
-  (if (color-output? port)
-      (colorize-string str %highlight-color)
-      str))
+(define highlight (coloring-procedure (color BOLD)))
+(define dim (coloring-procedure (color DARK)))
 
 (define (colorize-matches rules)
   "Return a procedure that, when passed a string, returns that string
diff --git a/guix/scripts/download.scm b/guix/scripts/download.scm
index d8fe71ce12..22cd75ea0b 100644
--- a/guix/scripts/download.scm
+++ b/guix/scripts/download.scm
@@ -33,6 +33,7 @@
   #:use-module (web uri)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-14)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-37)
   #:use-module (rnrs bytevectors)
@@ -54,9 +55,23 @@
        (url-fetch url file #:mirrors %mirrors)))
     file))
 
+(define (ensure-valid-store-file-name name)
+  "Replace any character not allowed in a stror name by an underscore."
+
+  (define valid
+    ;; according to nix/libstore/store-api.cc
+    (string->char-set (string-append "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+                                     "abcdefghijklmnopqrstuvwxyz"
+                                     "0123456789" "+-._?=")))
+  (string-map (lambda (c)
+                (if (char-set-contains? valid c) c #\_))
+              name))
+
+
 (define* (download-to-store* url #:key (verify-certificate? #t))
   (with-store store
     (download-to-store store url
+                       (ensure-valid-store-file-name (basename url))
                        #:verify-certificate? verify-certificate?)))
 
 (define %default-options
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index f03741aa9e..1a58d43e5c 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -39,6 +39,7 @@
   #:use-module (guix scripts)
   #:use-module (guix scripts build)
   #:autoload   (guix describe) (package-provenance)
+  #:autoload   (guix store roots) (gc-roots)
   #:use-module ((guix build utils)
                 #:select (directory-exists? mkdir-p))
   #:use-module (ice-9 format)
@@ -359,6 +360,8 @@ Install, remove, or upgrade packages in a single transaction.\n"))
                          switch to a generation matching PATTERN"))
   (display (G_ "
   -p, --profile=PROFILE  use PROFILE instead of the user's default profile"))
+  (display (G_ "
+      --list-profiles    list the user's profiles"))
   (newline)
   (display (G_ "
       --allow-collisions do not treat collisions in the profile as an error"))
@@ -458,6 +461,11 @@ command-line option~%")
                    (values (cons `(query list-generations ,arg)
                                  result)
                            #f)))
+         (option '("list-profiles") #f #f
+                 (lambda (opt name arg result arg-handler)
+                   (values (cons `(query list-profiles #t)
+                                 result)
+                           #f)))
          (option '(#\d "delete-generations") #f #t
                  (lambda (opt name arg result arg-handler)
                    (values (alist-cons 'delete-generations arg
@@ -750,6 +758,19 @@ processed, #f otherwise."
                              (string<? name1 name2))))))
          #t))
 
+      (('list-profiles _)
+       (let ((profiles (delete-duplicates
+                        (filter-map (lambda (root)
+                                      (and (or (zero? (getuid))
+                                               (user-owned? root))
+                                           (generation-profile root)))
+                                    (gc-roots)))))
+         (leave-on-EPIPE
+          (for-each (lambda (profile)
+                      (display (user-friendly-profile profile))
+                      (newline))
+                    (sort profiles string<?)))))
+
       (('search _)
        (let* ((patterns (filter-map (match-lambda
                                       (('query 'search rx) rx)
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index 2b7b991b50..0372278705 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -249,7 +249,7 @@ PORT."
     (channel-news-entry-body entry))
 
   (display-news-entry-title entry language port)
-  (format port (G_ "    commit ~a~%")
+  (format port (dim (G_ "    commit ~a~%"))
           (channel-news-entry-commit entry))
   (newline port)
   (format port "    ~a~%"
diff --git a/guix/self.scm b/guix/self.scm
index 7b0634e8b6..207e80d842 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -124,7 +124,11 @@ NODE's modules, under their FHS directories: share/guile/site and lib/guile."
           (symlink #$(node-compiled node) object))))
 
   (computed-file (string-append (node-name node) "-modules")
-                 build))
+                 build
+                 #:options '(#:local-build? #t
+
+                             ;; "Building" it locally is faster.
+                             #:substitutable? #f)))
 
 (define (node-fold proc init nodes)
   (let loop ((nodes nodes)
diff --git a/tests/guix-package.sh b/tests/guix-package.sh
index 79e89286f1..0de30bf6c1 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -438,7 +438,7 @@ cat > "$module_dir/foo.scm"<<EOF
     (version "dummy-version")
     (outputs '("out" "dummy-output"))
     (source #f)
-    ;; Without a real build system, the "guix pacakge -s" command will fail.
+    ;; Without a real build system, the "guix package -s" command will fail.
     (build-system trivial-build-system)
     (synopsis "dummy-synopsis")
     (description "dummy-description")
@@ -448,3 +448,7 @@ EOF
 guix package -L "$module_dir" -s dummy-output > /tmp/out
 test "`guix package -L "$module_dir" -s dummy-output | grep ^name:`" = "name: dummy-package"
 rm -rf "$module_dir"
+
+# Make sure we can see user profiles.
+guix package --list-profiles | grep "$profile"
+guix package --list-profiles | grep '\.guix-profile'