summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2018-03-29 17:34:41 +0200
committerMarius Bakke <mbakke@fastmail.com>2018-03-29 17:34:41 +0200
commit5576cfabf3485e0cf794cc3de085a3578151ee64 (patch)
tree8ca4093d05fda6b0064d0fca429353327ec491f9
parent12cb6c31df4b90d58658e88a256e36b6808e1064 (diff)
parente086d2f68b90a39bae07ae46572e5cc6b0fc4308 (diff)
downloadguix-5576cfabf3485e0cf794cc3de085a3578151ee64.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--Makefile.am6
-rw-r--r--build-aux/check-final-inputs-self-contained.scm36
-rw-r--r--doc/guix.texi508
-rwxr-xr-xetc/guix-install.sh19
-rw-r--r--gnu/build/activation.scm5
-rw-r--r--gnu/build/vm.scm20
-rw-r--r--gnu/local.mk10
-rw-r--r--gnu/packages/admin.scm14
-rw-r--r--gnu/packages/algebra.scm14
-rw-r--r--gnu/packages/audio.scm111
-rw-r--r--gnu/packages/bioinformatics.scm41
-rw-r--r--gnu/packages/boost.scm36
-rw-r--r--gnu/packages/bootloaders.scm24
-rw-r--r--gnu/packages/bootstrap.scm3
-rw-r--r--gnu/packages/ccache.scm6
-rw-r--r--gnu/packages/ci.scm6
-rw-r--r--gnu/packages/compression.scm4
-rw-r--r--gnu/packages/cran.scm383
-rw-r--r--gnu/packages/cups.scm4
-rw-r--r--gnu/packages/dictionaries.scm11
-rw-r--r--gnu/packages/disk.scm94
-rw-r--r--gnu/packages/django.scm6
-rw-r--r--gnu/packages/dunst.scm14
-rw-r--r--gnu/packages/emacs.scm97
-rw-r--r--gnu/packages/embedded.scm4
-rw-r--r--gnu/packages/firmware.scm97
-rw-r--r--gnu/packages/flashing-tools.scm11
-rw-r--r--gnu/packages/fonts.scm159
-rw-r--r--gnu/packages/fribidi.scm9
-rw-r--r--gnu/packages/ftp.scm4
-rw-r--r--gnu/packages/games.scm6
-rw-r--r--gnu/packages/gnome.scm33
-rw-r--r--gnu/packages/gnupg.scm8
-rw-r--r--gnu/packages/gnuzilla.scm3
-rw-r--r--gnu/packages/graph.scm5
-rw-r--r--gnu/packages/graphviz.scm4
-rw-r--r--gnu/packages/gtk.scm2
-rw-r--r--gnu/packages/guile.scm1
-rw-r--r--gnu/packages/haskell-crypto.scm7
-rw-r--r--gnu/packages/haskell.scm284
-rw-r--r--gnu/packages/image-viewers.scm17
-rw-r--r--gnu/packages/java.scm448
-rw-r--r--gnu/packages/kde.scm27
-rw-r--r--gnu/packages/lego.scm25
-rw-r--r--gnu/packages/libffi.scm4
-rw-r--r--gnu/packages/libreoffice.scm13
-rw-r--r--gnu/packages/libusb.scm15
-rw-r--r--gnu/packages/linux.scm22
-rw-r--r--gnu/packages/lisp.scm13
-rw-r--r--gnu/packages/mail.scm90
-rw-r--r--gnu/packages/mate.scm4
-rw-r--r--gnu/packages/maths.scm34
-rw-r--r--gnu/packages/messaging.scm4
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/mpi.scm9
-rw-r--r--gnu/packages/music.scm4
-rw-r--r--gnu/packages/nano.scm4
-rw-r--r--gnu/packages/networking.scm3
-rw-r--r--gnu/packages/node.scm4
-rw-r--r--gnu/packages/ntp.scm4
-rw-r--r--gnu/packages/ocaml.scm19
-rw-r--r--gnu/packages/package-management.scm2
-rw-r--r--gnu/packages/parallel.scm4
-rw-r--r--gnu/packages/patches/classpath-aarch64-support.patch29
-rw-r--r--gnu/packages/patches/hwloc-tests-without-sysfs.patch42
-rw-r--r--gnu/packages/patches/libusb-for-axoloti.patch14
-rw-r--r--gnu/packages/patches/links-CVE-2017-11114.patch99
-rw-r--r--gnu/packages/patches/lyx-2.2.3-fix-test.patch13
-rw-r--r--gnu/packages/patches/mupdf-CVE-2018-1000051.patch88
-rw-r--r--gnu/packages/patches/mupdf-CVE-2018-6544.patch109
-rw-r--r--gnu/packages/patches/shepherd-close-fds.patch36
-rw-r--r--gnu/packages/patches/shepherd-herd-status-sorted.patch79
-rw-r--r--gnu/packages/patches/translate-shell-fix-curl-tests.patch60
-rw-r--r--gnu/packages/pdf.scm4
-rw-r--r--gnu/packages/perl-web.scm24
-rw-r--r--gnu/packages/perl.scm4
-rw-r--r--gnu/packages/photo.scm12
-rw-r--r--gnu/packages/pure.scm68
-rw-r--r--gnu/packages/python-crypto.scm8
-rw-r--r--gnu/packages/python.scm61
-rw-r--r--gnu/packages/ruby.scm10
-rw-r--r--gnu/packages/samba.scm4
-rw-r--r--gnu/packages/scheme.scm67
-rw-r--r--gnu/packages/serialization.scm4
-rw-r--r--gnu/packages/spice.scm4
-rw-r--r--gnu/packages/ssh.scm4
-rw-r--r--gnu/packages/statistics.scm18
-rw-r--r--gnu/packages/syndication.scm9
-rw-r--r--gnu/packages/tex.scm94
-rw-r--r--gnu/packages/text-editors.scm6
-rw-r--r--gnu/packages/tls.scm16
-rw-r--r--gnu/packages/tv.scm5
-rw-r--r--gnu/packages/version-control.scm13
-rw-r--r--gnu/packages/video.scm43
-rw-r--r--gnu/packages/virtualization.scm5
-rw-r--r--gnu/packages/web-browsers.scm7
-rw-r--r--gnu/packages/web.scm25
-rw-r--r--gnu/packages/wm.scm1
-rw-r--r--gnu/packages/xdisorg.scm25
-rw-r--r--gnu/packages/xorg.scm8
-rw-r--r--gnu/services.scm4
-rw-r--r--gnu/services/admin.scm7
-rw-r--r--gnu/system.scm3
-rw-r--r--gnu/system/examples/docker-image.tmpl47
-rw-r--r--gnu/system/nss.scm10
-rw-r--r--gnu/system/vm.scm117
-rw-r--r--guix/ci.scm78
-rw-r--r--guix/docker.scm200
-rw-r--r--guix/gexp.scm51
-rw-r--r--guix/git.scm7
-rw-r--r--guix/modules.scm3
-rw-r--r--guix/scripts/build.scm16
-rw-r--r--guix/scripts/environment.scm2
-rw-r--r--guix/scripts/gc.scm10
-rw-r--r--guix/scripts/graph.scm38
-rw-r--r--guix/scripts/pack.scm73
-rw-r--r--guix/scripts/system.scm12
-rw-r--r--guix/scripts/weather.scm109
-rw-r--r--tests/gexp.scm61
-rw-r--r--tests/graph.scm20
-rw-r--r--tests/guix-gc.sh5
-rw-r--r--tests/guix-pack.sh83
-rw-r--r--tests/guix-system.sh17
-rw-r--r--tests/publish.scm10
124 files changed, 3349 insertions, 1634 deletions
diff --git a/Makefile.am b/Makefile.am
index 0c653b54e4..e647f270d3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -204,7 +204,6 @@ MODULES =					\
   guix/scripts/import/texlive.scm  		\
   guix/scripts/environment.scm			\
   guix/scripts/publish.scm			\
-  guix/scripts/weather.scm			\
   guix/scripts/edit.scm				\
   guix/scripts/size.scm				\
   guix/scripts/graph.scm			\
@@ -216,6 +215,7 @@ MODULES =					\
 if HAVE_GUILE_JSON
 
 MODULES +=					\
+  guix/ci.scm					\
   guix/docker.scm	   			\
   guix/import/cpan.scm				\
   guix/import/crate.scm				\
@@ -229,7 +229,8 @@ MODULES +=					\
   guix/scripts/import/gem.scm			\
   guix/scripts/import/json.scm  		\
   guix/scripts/import/pypi.scm			\
-  guix/scripts/import/stackage.scm
+  guix/scripts/import/stackage.scm		\
+  guix/scripts/weather.scm
 
 endif
 
@@ -374,6 +375,7 @@ SH_TESTS =					\
   tests/guix-download.sh			\
   tests/guix-gc.sh				\
   tests/guix-hash.sh				\
+  tests/guix-pack.sh				\
   tests/guix-package.sh				\
   tests/guix-package-net.sh			\
   tests/guix-system.sh				\
diff --git a/build-aux/check-final-inputs-self-contained.scm b/build-aux/check-final-inputs-self-contained.scm
index dfb6a72f24..37dc883d3c 100644
--- a/build-aux/check-final-inputs-self-contained.scm
+++ b/build-aux/check-final-inputs-self-contained.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,23 +33,23 @@
 (define (final-inputs store system)
   "Return the list of outputs directories of the final inputs for SYSTEM."
   (append-map (match-lambda
-               ((name package)
-                (let ((drv (package-derivation store package system)))
-                  ;; Libc's 'debug' output refers to gcc-cross-boot0, but it's
-                  ;; hard to avoid, so we tolerate it.  This should be the
-                  ;; only exception.  Likewise, 'bash:include' depends on
-                  ;; bootstrap-binaries via its 'Makefile.inc' (FIXME).
-                  (filter-map (match-lambda
-                               (("debug" . directory)
-                                (if (string=? "glibc" (package-name package))
-                                    #f
-                                    directory))
-                               (("include" . directory)
-                                (if (string=? "bash" (package-name package))
-                                    #f
-                                    directory))
-                               ((_ . directory) directory))
-                              (derivation->output-paths drv)))))
+                ((or (name package) (name package _))
+                 (let ((drv (package-derivation store package system)))
+                   ;; Libc's 'debug' output refers to gcc-cross-boot0, but it's
+                   ;; hard to avoid, so we tolerate it.  This should be the
+                   ;; only exception.  Likewise, 'bash:include' depends on
+                   ;; bootstrap-binaries via its 'Makefile.inc' (FIXME).
+                   (filter-map (match-lambda
+                                 (("debug" . directory)
+                                  (if (string=? "glibc" (package-name package))
+                                      #f
+                                      directory))
+                                 (("include" . directory)
+                                  (if (string=? "bash" (package-name package))
+                                      #f
+                                      directory))
+                                 ((_ . directory) directory))
+                               (derivation->output-paths drv)))))
               %final-inputs))
 
 (define (assert-valid-substitute substitute)
diff --git a/doc/guix.texi b/doc/guix.texi
index 7219ef4d0f..25c08b9f06 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -23,7 +23,7 @@ Copyright @copyright{} 2015 Taylan Ulrich Bayırlı/Kammer@*
 Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@*
 Copyright @copyright{} 2015, 2016, 2017, 2018 Ricardo Wurmus@*
 Copyright @copyright{} 2016 Ben Woodcroft@*
-Copyright @copyright{} 2016, 2017 Chris Marusich@*
+Copyright @copyright{} 2016, 2017, 2018 Chris Marusich@*
 Copyright @copyright{} 2016, 2017, 2018 Efraim Flashner@*
 Copyright @copyright{} 2016 John Darrington@*
 Copyright @copyright{} 2016, 2017 Nils Gillmann@*
@@ -471,7 +471,7 @@ archive content is independent of its creation time, thus making it
 reproducible.
 
 @item
-Make @code{root}'s profile available under @file{~/.guix-profile}:
+Make @code{root}'s profile available under @file{~root/.guix-profile}:
 
 @example
 # ln -sf /var/guix/profiles/per-user/root/guix-profile \
@@ -482,7 +482,7 @@ Source @file{etc/profile} to augment @code{PATH} and other relevant
 environment variables:
 
 @example
-# GUIX_PROFILE=$HOME/.guix-profile ; \
+# GUIX_PROFILE="`echo ~root`/.guix-profile" ; \
   source $GUIX_PROFILE/etc/profile
 @end example
 
@@ -2642,6 +2642,24 @@ of these, recursively.  In other words, the returned list is the
 of an element.  @xref{Invoking guix graph}, for a tool to visualize
 the graph of references.
 
+@item --derivers
+@cindex derivation
+Return the derivation(s) leading to the given store items
+(@pxref{Derivations}).
+
+For example, this command:
+
+@example
+guix gc --derivers `guix package -I ^emacs$ | cut -f4`
+@end example
+
+@noindent
+returns the @file{.drv} file(s) leading to the @code{emacs} package
+installed in your profile.
+
+Note that there may be zero matching @file{.drv} files, for instance
+because these files have been garbage-collected.  There can also be more
+than one matching @file{.drv} due to fixed-output derivations.
 @end table
 
 Lastly, the following options allow you to check the integrity of the
@@ -2899,6 +2917,10 @@ added to it or removed from it after extraction of the pack.
 
 One use case for this is the Guix self-contained binary tarball
 (@pxref{Binary Installation}).
+
+@item --bootstrap
+Use the bootstrap binaries to build the pack.  This option is only
+useful to Guix developers.
 @end table
 
 In addition, @command{guix pack} supports all the common build options
@@ -5150,9 +5172,11 @@ is a list of additional arguments to pass to @code{gexp->derivation}.
 This is the declarative counterpart of @code{gexp->derivation}.
 @end deffn
 
-@deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
+@deffn {Monadic Procedure} gexp->script @var{name} @var{exp} @
+  [#:guile (default-guile)] [#:module-path %load-path]
 Return an executable script @var{name} that runs @var{exp} using
 @var{guile}, with @var{exp}'s imported modules in its search path.
+Look up @var{exp}'s modules in @var{module-path}.
 
 The example below builds a script that simply invokes the @command{ls}
 command:
@@ -5177,20 +5201,22 @@ executable file @file{/gnu/store/@dots{}-list-files} along these lines:
 @end deffn
 
 @deffn {Scheme Procedure} program-file @var{name} @var{exp} @
-          [#:guile #f]
+          [#:guile #f] [#:module-path %load-path]
 Return an object representing the executable store item @var{name} that
 runs @var{gexp}.  @var{guile} is the Guile package used to execute that
-script.
+script.  Imported modules of @var{gexp} are looked up in @var{module-path}.
 
 This is the declarative counterpart of @code{gexp->script}.
 @end deffn
 
 @deffn {Monadic Procedure} gexp->file @var{name} @var{exp} @
-            [#:set-load-path? #t]
+            [#:set-load-path? #t] [#:module-path %load-path] @
+            [#:guile (default-guile)]
 Return a derivation that builds a file @var{name} containing @var{exp}.
 When @var{set-load-path?} is true, emit code in the resulting file to
 set @code{%load-path} and @code{%load-compiled-path} to honor
-@var{exp}'s imported modules.
+@var{exp}'s imported modules.  Look up @var{exp}'s modules in
+@var{module-path}.
 
 The resulting file holds references to all the dependencies of @var{exp}
 or a subset thereof.
@@ -6989,6 +7015,15 @@ name instead of a package name, as in:
 @example
 guix graph -t derivation `guix system build -d my-config.scm`
 @end example
+
+@item module
+This is the graph of @dfn{package modules} (@pxref{Package Modules}).
+For example, the following command shows the graph for the package
+module that defines the @code{guile} package:
+
+@example
+guix graph -t module guile | dot -Tpdf > module-graph.pdf
+@end example
 @end table
 
 All the types above correspond to @emph{build-time dependencies}.  The
@@ -7877,15 +7912,27 @@ https://guix.example.org
   19,824.2 MiB on disk (uncompressed)
   0.030 seconds per request (182.9 seconds in total)
   33.5 requests per second
+
+  9.8% (342 out of 3,470) of the missing items are queued
+  867 queued builds
+      x86_64-linux: 518 (59.7%)
+      i686-linux: 221 (25.5%)
+      aarch64-linux: 128 (14.8%)
+  build rate: 23.41 builds per hour
+      x86_64-linux: 11.16 builds per hour
+      i686-linux: 6.03 builds per hour
+      aarch64-linux: 6.41 builds per hour
 @end example
 
+@cindex continuous integration, statistics
 As you can see, it reports the fraction of all the packages for which
 substitutes are available on the server---regardless of whether
 substitutes are enabled, and regardless of whether this server's signing
 key is authorized.  It also reports the size of the compressed archives
 (``nars'') provided by the server, the size the corresponding store
 items occupy in the store (assuming deduplication is turned off), and
-the server's throughput.
+the server's throughput.  The second part gives continuous integration
+(CI) statistics, if the server supports it.
 
 To achieve that, @command{guix weather} queries over HTTP(S) meta-data
 (@dfn{narinfos}) for all the relevant store items.  Like @command{guix
@@ -10396,6 +10443,8 @@ to add @var{device} to the kernel's entropy pool.  The service will fail if
 @cindex session limits
 @cindex ulimit
 @cindex priority
+@cindex realtime
+@cindex jackd
 @deffn {Scheme Procedure} pam-limits-service [#:limits @code{'()}]
 
 Return a service that installs a configuration file for the
@@ -15730,7 +15779,7 @@ Must be either:
 @item @code{<php-fpm-on-demand-process-manager-configuration>}
 @end table
 @item @code{display-errors} (default @code{#f})
-Determines wether php errors and warning should be sent to clients
+Determines whether php errors and warning should be sent to clients
 and displayed in their browsers.
 This is useful for local php development, but a security risk for public sites,
 as error messages can reveal passwords and personal data.
@@ -18325,11 +18374,12 @@ Return the name of @var{platform}---a string such as @code{"arm"}.
 @subsubsection Version Control Services
 
 The @code{(gnu services version-control)} module provides a service to
-allow remote access to local Git repositories.  There are two options:
+allow remote access to local Git repositories.  There are three options:
 the @code{git-daemon-service}, which provides access to repositories via
-the @code{git://} unsecured TCP-based protocol, or extending the
+the @code{git://} unsecured TCP-based protocol, extending the
 @code{nginx} web server to proxy some requests to
-@code{git-http-backend}.
+@code{git-http-backend}, or providing a web interface with
+@code{cgit-service-type}.
 
 @deffn {Scheme Procedure} git-daemon-service [#:config (git-daemon-configuration)]
 
@@ -18462,199 +18512,6 @@ HTTPS.  You will also need to add an @code{fcgiwrap} proxy to your
 system services.  @xref{Web Services}.
 @end deffn
 
-@node Game Services
-@subsubsection Game Services
-
-@subsubheading The Battle for Wesnoth Service
-@cindex wesnothd
-@uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
-based tactical strategy game, with several single player campaigns, and
-multiplayer games (both networked and local).
-
-@defvar {Scheme Variable} wesnothd-service-type
-Service type for the wesnothd service.  Its value must be a
-@code{wesnothd-configuration} object.  To run wesnothd in the default
-configuration, instantiate it as:
-
-@example
-(service wesnothd-service-type)
-@end example
-@end defvar
-
-@deftp {Data Type} wesnothd-configuration
-Data type representing the configuration of @command{wesnothd}.
-
-@table @asis
-@item @code{package} (default: @code{wesnoth-server})
-The wesnoth server package to use.
-
-@item @code{port} (default: @code{15000})
-The port to bind the server to.
-@end table
-@end deftp
-
-@node Miscellaneous Services
-@subsubsection Miscellaneous Services
-
-@cindex sysctl
-@subsubheading System Control Service
-
-The @code{(gnu services sysctl)} provides a service to configure kernel
-parameters at boot.
-
-@defvr {Scheme Variable} sysctl-service-type
-The service type for @command{sysctl}, which modifies kernel parameters
-under @file{/proc/sys/}.  To enable IPv4 forwarding, it can be
-instantiated as:
-
-@example
-(service sysctl-service-type
-         (sysctl-configuration
-           (settings '(("net.ipv4.ip_forward" . "1")))))
-@end example
-@end defvr
-
-@deftp {Data Type} sysctl-configuration
-The data type representing the configuration of @command{sysctl}.
-
-@table @asis
-@item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
-The @command{sysctl} executable to use.
-
-@item @code{settings} (default: @code{'()})
-An association list specifies kernel parameters and their values.
-@end table
-@end deftp
-
-@cindex lirc
-@subsubheading Lirc Service
-
-The @code{(gnu services lirc)} module provides the following service.
-
-@deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
-       [#:device #f] [#:driver #f] [#:config-file #f] @
-       [#:extra-options '()]
-Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
-decodes infrared signals from remote controls.
-
-Optionally, @var{device}, @var{driver} and @var{config-file}
-(configuration file name) may be specified.  See @command{lircd} manual
-for details.
-
-Finally, @var{extra-options} is a list of additional command-line options
-passed to @command{lircd}.
-@end deffn
-
-@cindex spice
-@subsubheading Spice Service
-
-The @code{(gnu services spice)} module provides the following service.
-
-@deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
-Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
-that enables sharing the clipboard with a vm and setting the guest display
-resolution when the graphical console window resizes.
-@end deffn
-
-@subsubsection Dictionary Services
-@cindex dictionary
-The @code{(gnu services dict)} module provides the following service:
-
-@deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
-Return a service that runs the @command{dicod} daemon, an implementation
-of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
-
-The optional @var{config} argument specifies the configuration for
-@command{dicod}, which should be a @code{<dicod-configuration>} object, by
-default it serves the GNU Collaborative International Dictonary of English.
-
-You can add @command{open localhost} to your @file{~/.dico} file to make
-@code{localhost} the default server for @command{dico} client
-(@pxref{Initialization File,,, dico, GNU Dico Manual}).
-@end deffn
-
-@deftp {Data Type} dicod-configuration
-Data type representing the configuration of dicod.
-
-@table @asis
-@item @code{dico} (default: @var{dico})
-Package object of the GNU Dico dictionary server.
-
-@item @code{interfaces} (default: @var{'("localhost")})
-This is the list of IP addresses and ports and possibly socket file
-names to listen to (@pxref{Server Settings, @code{listen} directive,,
-dico, GNU Dico Manual}).
-
-@item @code{handlers} (default: @var{'()})
-List of @code{<dicod-handler>} objects denoting handlers (module instances).
-
-@item @code{databases} (default: @var{(list %dicod-database:gcide)})
-List of @code{<dicod-database>} objects denoting dictionaries to be served.
-@end table
-@end deftp
-
-@deftp {Data Type} dicod-handler
-Data type representing a dictionary handler (module instance).
-
-@table @asis
-@item @code{name}
-Name of the handler (module instance).
-
-@item @code{module} (default: @var{#f})
-Name of the dicod module of the handler (instance).  If it is @code{#f},
-the module has the same name as the handler.
-(@pxref{Modules,,, dico, GNU Dico Manual}).
-
-@item @code{options}
-List of strings or gexps representing the arguments for the module handler
-@end table
-@end deftp
-
-@deftp {Data Type} dicod-database
-Data type representing a dictionary database.
-
-@table @asis
-@item @code{name}
-Name of the database, will be used in DICT commands.
-
-@item @code{handler}
-Name of the dicod handler (module instance) used by this database
-(@pxref{Handlers,,, dico, GNU Dico Manual}).
-
-@item @code{complex?} (default: @var{#f})
-Whether the database configuration complex.  The complex configuration
-will need a corresponding @code{<dicod-handler>} object, otherwise not.
-
-@item @code{options}
-List of strings or gexps representing the arguments for the database
-(@pxref{Databases,,, dico, GNU Dico Manual}).
-@end table
-@end deftp
-
-@defvr {Scheme Variable} %dicod-database:gcide
-A @code{<dicod-database>} object serving the GNU Collaborative International
-Dictionary of English using the @code{gcide} package.
-@end defvr
-
-The following is an example @code{dicod-service} configuration.
-
-@example
-(dicod-service #:config
-  (dicod-configuration
-   (handlers (list (dicod-handler
-                    (name "wordnet")
-                    (module "dictorg")
-                    (options
-                     (list #~(string-append "dbdir=" #$wordnet))))))
-   (databases (list (dicod-database
-                     (name "wordnet")
-                     (complex? #t)
-                     (handler "wordnet")
-                     (options '("database=wn")))
-                    %dicod-database:gcide))))
-@end example
-
-
 @subsubheading Cgit Service
 
 @cindex Cgit service
@@ -19593,6 +19450,199 @@ could instantiate a cgit service like this:
           (cgitrc "")))
 @end example
 
+
+@node Game Services
+@subsubsection Game Services
+
+@subsubheading The Battle for Wesnoth Service
+@cindex wesnothd
+@uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
+based tactical strategy game, with several single player campaigns, and
+multiplayer games (both networked and local).
+
+@defvar {Scheme Variable} wesnothd-service-type
+Service type for the wesnothd service.  Its value must be a
+@code{wesnothd-configuration} object.  To run wesnothd in the default
+configuration, instantiate it as:
+
+@example
+(service wesnothd-service-type)
+@end example
+@end defvar
+
+@deftp {Data Type} wesnothd-configuration
+Data type representing the configuration of @command{wesnothd}.
+
+@table @asis
+@item @code{package} (default: @code{wesnoth-server})
+The wesnoth server package to use.
+
+@item @code{port} (default: @code{15000})
+The port to bind the server to.
+@end table
+@end deftp
+
+@node Miscellaneous Services
+@subsubsection Miscellaneous Services
+
+@cindex sysctl
+@subsubheading System Control Service
+
+The @code{(gnu services sysctl)} provides a service to configure kernel
+parameters at boot.
+
+@defvr {Scheme Variable} sysctl-service-type
+The service type for @command{sysctl}, which modifies kernel parameters
+under @file{/proc/sys/}.  To enable IPv4 forwarding, it can be
+instantiated as:
+
+@example
+(service sysctl-service-type
+         (sysctl-configuration
+           (settings '(("net.ipv4.ip_forward" . "1")))))
+@end example
+@end defvr
+
+@deftp {Data Type} sysctl-configuration
+The data type representing the configuration of @command{sysctl}.
+
+@table @asis
+@item @code{sysctl} (default: @code{(file-append procps "/sbin/sysctl"})
+The @command{sysctl} executable to use.
+
+@item @code{settings} (default: @code{'()})
+An association list specifies kernel parameters and their values.
+@end table
+@end deftp
+
+@cindex lirc
+@subsubheading Lirc Service
+
+The @code{(gnu services lirc)} module provides the following service.
+
+@deffn {Scheme Procedure} lirc-service [#:lirc lirc] @
+       [#:device #f] [#:driver #f] [#:config-file #f] @
+       [#:extra-options '()]
+Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
+decodes infrared signals from remote controls.
+
+Optionally, @var{device}, @var{driver} and @var{config-file}
+(configuration file name) may be specified.  See @command{lircd} manual
+for details.
+
+Finally, @var{extra-options} is a list of additional command-line options
+passed to @command{lircd}.
+@end deffn
+
+@cindex spice
+@subsubheading Spice Service
+
+The @code{(gnu services spice)} module provides the following service.
+
+@deffn {Scheme Procedure} spice-vdagent-service [#:spice-vdagent]
+Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a daemon
+that enables sharing the clipboard with a vm and setting the guest display
+resolution when the graphical console window resizes.
+@end deffn
+
+@subsubsection Dictionary Services
+@cindex dictionary
+The @code{(gnu services dict)} module provides the following service:
+
+@deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)]
+Return a service that runs the @command{dicod} daemon, an implementation
+of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}).
+
+The optional @var{config} argument specifies the configuration for
+@command{dicod}, which should be a @code{<dicod-configuration>} object, by
+default it serves the GNU Collaborative International Dictonary of English.
+
+You can add @command{open localhost} to your @file{~/.dico} file to make
+@code{localhost} the default server for @command{dico} client
+(@pxref{Initialization File,,, dico, GNU Dico Manual}).
+@end deffn
+
+@deftp {Data Type} dicod-configuration
+Data type representing the configuration of dicod.
+
+@table @asis
+@item @code{dico} (default: @var{dico})
+Package object of the GNU Dico dictionary server.
+
+@item @code{interfaces} (default: @var{'("localhost")})
+This is the list of IP addresses and ports and possibly socket file
+names to listen to (@pxref{Server Settings, @code{listen} directive,,
+dico, GNU Dico Manual}).
+
+@item @code{handlers} (default: @var{'()})
+List of @code{<dicod-handler>} objects denoting handlers (module instances).
+
+@item @code{databases} (default: @var{(list %dicod-database:gcide)})
+List of @code{<dicod-database>} objects denoting dictionaries to be served.
+@end table
+@end deftp
+
+@deftp {Data Type} dicod-handler
+Data type representing a dictionary handler (module instance).
+
+@table @asis
+@item @code{name}
+Name of the handler (module instance).
+
+@item @code{module} (default: @var{#f})
+Name of the dicod module of the handler (instance).  If it is @code{#f},
+the module has the same name as the handler.
+(@pxref{Modules,,, dico, GNU Dico Manual}).
+
+@item @code{options}
+List of strings or gexps representing the arguments for the module handler
+@end table
+@end deftp
+
+@deftp {Data Type} dicod-database
+Data type representing a dictionary database.
+
+@table @asis
+@item @code{name}
+Name of the database, will be used in DICT commands.
+
+@item @code{handler}
+Name of the dicod handler (module instance) used by this database
+(@pxref{Handlers,,, dico, GNU Dico Manual}).
+
+@item @code{complex?} (default: @var{#f})
+Whether the database configuration complex.  The complex configuration
+will need a corresponding @code{<dicod-handler>} object, otherwise not.
+
+@item @code{options}
+List of strings or gexps representing the arguments for the database
+(@pxref{Databases,,, dico, GNU Dico Manual}).
+@end table
+@end deftp
+
+@defvr {Scheme Variable} %dicod-database:gcide
+A @code{<dicod-database>} object serving the GNU Collaborative International
+Dictionary of English using the @code{gcide} package.
+@end defvr
+
+The following is an example @code{dicod-service} configuration.
+
+@example
+(dicod-service #:config
+  (dicod-configuration
+   (handlers (list (dicod-handler
+                    (name "wordnet")
+                    (module "dictorg")
+                    (options
+                     (list #~(string-append "dbdir=" #$wordnet))))))
+   (databases (list (dicod-database
+                     (name "wordnet")
+                     (complex? #t)
+                     (handler "wordnet")
+                     (options '("database=wn")))
+                    %dicod-database:gcide))))
+@end example
+
 @node Setuid Programs
 @subsection Setuid Programs
 
@@ -20374,12 +20424,18 @@ containing at least the kernel, initrd, and bootloader data files must
 be created.  The @code{--image-size} option can be used to specify the
 size of the image.
 
+@cindex System images, creation in various formats
+@cindex Creating system images in various formats
 @item vm-image
 @itemx disk-image
-Return a virtual machine or disk image of the operating system declared
-in @var{file} that stands alone.  By default, @command{guix system}
-estimates the size of the image needed to store the system, but you can
-use the @option{--image-size} option to specify a value.
+@itemx docker-image
+Return a virtual machine, disk image, or Docker image of the operating
+system declared in @var{file} that stands alone.  By default,
+@command{guix system} estimates the size of the image needed to store
+the system, but you can use the @option{--image-size} option to specify
+a value.  Docker images are built to contain exactly what they need, so
+the @option{--image-size} option is ignored in the case of
+@code{docker-image}.
 
 You can specify the root file system type by using the
 @option{--file-system-type} option.  It defaults to @code{ext4}.
@@ -20397,6 +20453,28 @@ using the following command:
 # dd if=$(guix system disk-image my-os.scm) of=/dev/sdc
 @end example
 
+When using @code{docker-image}, a Docker image is produced.  Guix builds
+the image from scratch, not from a pre-existing Docker base image.  As a
+result, it contains @emph{exactly} what you define in the operating
+system configuration file.  You can then load the image and launch a
+Docker container using commands like the following:
+
+@example
+image_id="$(docker load < guixsd-docker-image.tar.gz)"
+docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
+    --entrypoint /var/guix/profiles/system/profile/bin/guile \\
+    $image_id /var/guix/profiles/system/boot
+@end example
+
+This command starts a new Docker container from the specified image.  It
+will boot the GuixSD system in the usual manner, which means it will
+start any services you have defined in the operating system
+configuration.  Depending on what you run in the Docker container, it
+may be necessary to give the container additional permissions.  For
+example, if you intend to build software using Guix inside of the Docker
+container, you may need to pass the @option{--privileged} option to
+@code{docker run}.
+
 @item container
 Return a script to run the operating system declared in @var{file}
 within a container.  Containers are a set of lightweight isolation
@@ -21012,16 +21090,16 @@ services.
 
 Otherwise, it must be a one-argument procedure.  The procedure is called
 by @code{fold-services} and is passed a list of values collected from
-extensions.  It must return a value that is a valid parameter value for
-the service instance.
+extensions.  It may return any single value.
 
 @item @code{extend} (default: @code{#f})
 If this is @code{#f}, services of this type cannot be extended.
 
 Otherwise, it must be a two-argument procedure: @code{fold-services}
-calls it, passing it the initial value of the service as the first argument
-and the result of applying @code{compose} to the extension values as the
-second argument.
+calls it, passing it the initial value of the service as the first
+argument and the result of applying @code{compose} to the extension
+values as the second argument.  It must return a value that is a valid
+parameter value for the service instance.
 @end table
 
 @xref{Service Types and Services}, for examples.
diff --git a/etc/guix-install.sh b/etc/guix-install.sh
index 933492a338..78cd7580bb 100755
--- a/etc/guix-install.sh
+++ b/etc/guix-install.sh
@@ -50,6 +50,11 @@ DEBUG=0
 GNU_URL="https://alpha.gnu.org/gnu/guix/"
 OPENPGP_SIGNING_KEY_ID="3CE464558A84FDC69DB40CFB090B11993D9AEBB5"
 
+# This script needs to know where root's home directory is.  However, we
+# cannot simply use the HOME environment variable, since there is no guarantee
+# that it points to root's home directory.
+ROOT_HOME="$(echo ~root)"
+
 # ------------------------------------------------------------------------------
 #+UTILITIES
 
@@ -264,9 +269,9 @@ sys_create_store()
 
     _msg "${INF}Linking the root user's profile"
     ln -sf /var/guix/profiles/per-user/root/guix-profile \
-       ~root/.guix-profile
+       "${ROOT_HOME}/.guix-profile"
 
-    GUIX_PROFILE="${HOME}/.guix-profile"
+    GUIX_PROFILE="${ROOT_HOME}/.guix-profile"
     source "${GUIX_PROFILE}/etc/profile"
     _msg "${PAS}activated root profile at /root/.guix-profile"
 }
@@ -316,13 +321,13 @@ sys_enable_guix_daemon()
     case "$INIT_SYS" in
         upstart)
             { initctl reload-configuration;
-              cp ~root/.guix-profile/lib/upstart/system/guix-daemon.conf \
+              cp "${ROOT_HOME}/.guix-profile/lib/upstart/system/guix-daemon.conf" \
                  /etc/init/ &&
                   start guix-daemon; } &&
                 _msg "${PAS}enabled Guix daemon via upstart"
             ;;
         systemd)
-            { cp ~root/.guix-profile/lib/systemd/system/guix-daemon.service \
+            { cp "${ROOT_HOME}/.guix-profile/lib/systemd/system/guix-daemon.service" \
                  /etc/systemd/system/;
               chmod 664 /etc/systemd/system/guix-daemon.service;
               systemctl daemon-reload &&
@@ -332,7 +337,7 @@ sys_enable_guix_daemon()
             ;;
         NA|*)
             _msg "${ERR}unsupported init system; run the daemon manually:"
-            echo "  ~root/.guix-profile/bin/guix-daemon --build-users-group=guixbuild"
+            echo "  ${ROOT_HOME}/.guix-profile/bin/guix-daemon --build-users-group=guixbuild"
             ;;
     esac
 
@@ -352,9 +357,9 @@ sys_authorize_build_farms()
     while true; do
         read -p "Permit downloading pre-built package binaries from the project's build farms? (yes/no) " yn
         case $yn in
-            [Yy]*) guix archive --authorize < ~root/.guix-profile/share/guix/hydra.gnu.org.pub &&
+            [Yy]*) guix archive --authorize < "${ROOT_HOME}/.guix-profile/share/guix/hydra.gnu.org.pub" &&
                          _msg "${PAS}Authorized public key for hydra.gnu.org";
-                   guix archive --authorize < ~root/.guix-profile/share/guix/berlin.guixsd.org.pub &&
+                   guix archive --authorize < "${ROOT_HOME}/.guix-profile/share/guix/berlin.guixsd.org.pub" &&
                        _msg "${PAS}Authorized public key for berlin.guixsd.org";
                    break;;
             [Nn]*) _msg "${INF}Skipped authorizing build farm public keys"
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index 6c0d603ddf..68ecd6bc71 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -179,7 +179,8 @@ properties.  Return #t on success."
                       `("-G" ,(string-join supplementary-groups ","))
                       '())
                 ,@(if comment `("-c" ,comment) '())
-                ;; Don't use '--move-home', so ignore HOME.
+                ;; Don't use '--move-home'.
+                ,@(if home `("-d" ,home) '())
                 ,@(if shell `("-s" ,shell) '())
                 ,name)))
     (zero? (apply system* "usermod" args))))
diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm
index 7f6801b9dd..527b4c495d 100644
--- a/gnu/build/vm.scm
+++ b/gnu/build/vm.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -125,6 +126,7 @@ the #:references-graphs parameter of 'derivation'."
              (number->string disk-image-size)))
 
   (mkdir "xchg")
+  (mkdir "tmp")
 
   (match references-graphs
     ((graph-files ...)
@@ -145,6 +147,12 @@ the #:references-graphs parameter of 'derivation'."
          "-virtfs"
          (string-append "local,id=xchg_dev,path=xchg"
                         ",security_model=none,mount_tag=xchg")
+         "-virtfs"
+         ;; Some programs require more space in /tmp than is normally
+         ;; available in the guest.  Accommodate such programs by sharing a
+         ;; temporary directory.
+         (string-append "local,id=tmp_dev,path=tmp"
+                        ",security_model=none,mount_tag=tmp")
          "-kernel" linux
          "-initrd" initrd
          (append
@@ -307,11 +315,14 @@ it, run its initializer, and unmount it."
 (define* (root-partition-initializer #:key (closures '())
                                      copy-closures?
                                      (register-closures? #t)
-                                     system-directory)
+                                     system-directory
+                                     (deduplicate? #t))
   "Return a procedure to initialize a root partition.
 
-If REGISTER-CLOSURES? is true, register all of CLOSURES is the partition's
-store.  If COPY-CLOSURES? is true, copy all of CLOSURES to the partition.
+If REGISTER-CLOSURES? is true, register all of CLOSURES in the partition's
+store.  If DEDUPLICATE? is true, then also deduplicate files common to
+CLOSURES and the rest of the store when registering the closures.  If
+COPY-CLOSURES? is true, copy all of CLOSURES to the partition.
 SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation."
   (lambda (target)
     (define target-store
@@ -336,7 +347,8 @@ SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation."
       (display "registering closures...\n")
       (for-each (lambda (closure)
                   (register-closure target
-                                    (string-append "/xchg/" closure)))
+                                    (string-append "/xchg/" closure)
+                                    #:deduplicate? deduplicate?))
                 closures)
       (unless copy-closures?
         (umount target-store)))
diff --git a/gnu/local.mk b/gnu/local.mk
index 0ae2e4ee94..7bb09fc7a4 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -349,6 +349,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/pumpio.scm			\
   %D%/packages/pretty-print.scm			\
   %D%/packages/protobuf.scm			\
+  %D%/packages/pure.scm				\
   %D%/packages/pv.scm				\
   %D%/packages/python.scm			\
   %D%/packages/python-crypto.scm		\
@@ -592,6 +593,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/clang-3.8-libc-search-path.patch		\
   %D%/packages/patches/clang-runtime-asan-build-fixes.patch	\
   %D%/packages/patches/clang-runtime-esan-build-fixes.patch	\
+  %D%/packages/patches/classpath-aarch64-support.patch		\
   %D%/packages/patches/clementine-remove-crypto++-dependency.patch	\
   %D%/packages/patches/clementine-use-openssl.patch		\
   %D%/packages/patches/clisp-glibc-2.26.patch			\
@@ -778,7 +780,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/htop-fix-process-tree.patch		\
   %D%/packages/patches/hubbub-sort-entities.patch		\
   %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
-  %D%/packages/patches/hwloc-tests-without-sysfs.patch		\
   %D%/packages/patches/hydra-disable-darcs-test.patch		\
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
   %D%/packages/patches/icecat-use-system-graphite2.patch	\
@@ -877,7 +878,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/lierolibre-newer-libconfig.patch		\
   %D%/packages/patches/lierolibre-remove-arch-warning.patch	\
   %D%/packages/patches/lierolibre-try-building-other-arch.patch	\
-  %D%/packages/patches/links-CVE-2017-11114.patch		\
   %D%/packages/patches/linux-pam-no-setfsuid.patch		\
   %D%/packages/patches/lirc-localstatedir.patch			\
   %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch	\
@@ -894,6 +894,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/luminance-hdr-qt-printer.patch		\
   %D%/packages/patches/lvm2-static-link.patch			\
   %D%/packages/patches/lxsession-use-gapplication.patch         \
+  %D%/packages/patches/lyx-2.2.3-fix-test.patch			\
   %D%/packages/patches/mailutils-uninitialized-memory.patch	\
   %D%/packages/patches/make-glibc-compat.patch			\
   %D%/packages/patches/make-impure-dirs.patch			\
@@ -922,6 +923,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/mumps-build-parallelism.patch		\
   %D%/packages/patches/mupdf-build-with-latest-openjpeg.patch	\
   %D%/packages/patches/mupdf-CVE-2017-17858.patch		\
+  %D%/packages/patches/mupdf-CVE-2018-6544.patch		\
+  %D%/packages/patches/mupdf-CVE-2018-1000051.patch		\
   %D%/packages/patches/mupen64plus-ui-console-notice.patch	\
   %D%/packages/patches/mutt-store-references.patch		\
   %D%/packages/patches/net-tools-bitrot.patch			\
@@ -1079,8 +1082,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/sdl-libx11-1.6.patch			\
   %D%/packages/patches/seq24-rename-mutex.patch			\
   %D%/packages/patches/shadow-CVE-2018-7169.patch		\
-  %D%/packages/patches/shepherd-close-fds.patch			\
-  %D%/packages/patches/shepherd-herd-status-sorted.patch	\
   %D%/packages/patches/shishi-fix-libgcrypt-detection.patch	\
   %D%/packages/patches/slim-session.patch			\
   %D%/packages/patches/slim-config.patch			\
@@ -1111,6 +1112,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/tipp10-fix-compiling.patch		\
   %D%/packages/patches/tipp10-remove-license-code.patch		\
   %D%/packages/patches/tk-find-library.patch			\
+  %D%/packages/patches/translate-shell-fix-curl-tests.patch	\
   %D%/packages/patches/ttf2eot-cstddef.patch			\
   %D%/packages/patches/ttfautohint-source-date-epoch.patch	\
   %D%/packages/patches/tophat-build-with-later-seqan.patch	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 8749b24e77..d6deceff97 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -159,16 +159,14 @@ and provides a \"top-like\" mode (monitoring).")
 (define-public shepherd
   (package
     (name "shepherd")
-    (version "0.3.2")
+    (version "0.4.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "ftp://alpha.gnu.org/gnu/dmd/shepherd-"
+              (uri (string-append "https://alpha.gnu.org/gnu/shepherd/shepherd-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "174q1qg7yg6w1hfvlfv720hr6hid4h5xzw15y3ycfpspllzldhcb"))
-              (patches (search-patches "shepherd-close-fds.patch"
-                                       "shepherd-herd-status-sorted.patch"))))
+                "1lgmsbxn8i8xdasxzkdp2cml75n128pplw6icvmspl6s0n9xmw8n"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--localstatedir=/var")))
@@ -1745,14 +1743,14 @@ done with the @code{auditctl} utility.")
 (define-public nmap
   (package
     (name "nmap")
-    (version "7.60")
+    (version "7.70")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nmap.org/dist/nmap-" version
                                   ".tar.bz2"))
               (sha256
                (base32
-                "08bga42ipymmbxd7wy4x5sl26c0ir1fm3n9rc6nqmhx69z66wyd8"))
+                "063fg8adx23l4irrh5kn57hsmi1xvjkar4vm4k6g94ppan4hcyw4"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1771,6 +1769,8 @@ done with the @code{auditctl} utility.")
        ("libpcap" ,libpcap)
        ("pcre" ,pcre)
        ("lua" ,lua)
+       ("zlib" ,zlib)                   ;for NSE compression support
+
        ;; For 'ndiff'.
        ("python" ,python-2)))
 
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 0f3e4229d8..6494438e9f 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -438,14 +438,14 @@ geometry and singularity theory.")
 (define-public gmp-ecm
   (package
    (name "gmp-ecm")
-   (version "7.0")
+   (version "7.0.4")
    (source (origin
-            (method url-fetch)
-            (uri (string-append "https://gforge.inria.fr/frs/download.php/"
-                                "file/35642/ecm-"
-                                version ".tar.gz"))
-            (sha256 (base32
-                     "00jzzwqp49m01vwsr9z1w7bvm8lb69l3f62x7qr8sfz0xiczxnpm"))))
+             (method url-fetch)
+             ;; Use the ‘Latest version’ link for a stable URI across releases.
+             (uri (string-append "https://gforge.inria.fr/frs/download.php/"
+                                 "latestfile/160/ecm-" version ".tar.gz"))
+             (sha256 (base32
+                      "0hxs24c2m3mh0nq1zz63z3sb7dhy1rilg2s1igwwcb26x3pb7xqc"))))
    (build-system gnu-build-system)
    (inputs
     `(("gmp" ,gmp)))
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index b01b2a07ef..ad20e0e8fe 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2018 okapi <okapi@firemail.cc>
+;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,6 +63,7 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gnunet) ; libmicrohttpd
   #:use-module (gnu packages gperf)
+  #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages qt)
@@ -75,6 +77,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages rdf)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages telephony)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages video)
@@ -2057,6 +2060,114 @@ supporting silence processing for automatic pause, file splitting, and
 background file post-processing.")
     (license license:gpl2+)))
 
+(define-public supercollider
+  (package
+    (name "supercollider")
+    (version "3.9.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/supercollider/supercollider"
+                    "/releases/download/Version-" version
+                    "/SuperCollider-" version "-Source-linux.tar.bz2"))
+              (sha256
+               (base32
+                "0d3cb6dw8jz7ijriqn3rlwin24gffczp69hl17pzxj1d5w57yj44"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags '("-DSYSTEM_BOOST=on" "-DSYSTEM_YAMLCPP=on"
+                           "-DSC_EL=off") ;scel is packaged individually as
+                                          ;emacs-scel.
+       #:modules ((guix build utils)
+                  (guix build cmake-build-system)
+                  (ice-9 ftw))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'rm-bundled-libs
+           (lambda _
+             ;; The build system doesn't allow us to unbundle the following
+             ;; libraries.  hidapi is also heavily patched and upstream not
+             ;; actively maintained.
+             (let ((keep-dirs '("nova-simd" "nova-tt" "hidapi" "TLSF-2.4.6"
+                                "oscpack_1_1_0" "." "..")))
+               (with-directory-excursion "./external_libraries"
+                 (for-each
+                  delete-file-recursively
+                  (scandir "."
+                           (lambda (x)
+                             (and (eq? (stat:type (stat x)) 'directory)
+                                  (not (member (basename x) keep-dirs))))))))
+             #t))
+         ;; Some tests are broken (see:
+         ;; https://github.com/supercollider/supercollider/issues/3555 and
+         ;; https://github.com/supercollider/supercollider/issues/1736
+         (add-after 'rm-bundled-libs 'disable-broken-tests
+           (lambda _
+             (substitute* "testsuite/supernova/CMakeLists.txt"
+               (("server_test.cpp")
+                "")
+               (("perf_counter_test.cpp")
+                ""))
+             (delete-file "testsuite/supernova/server_test.cpp")
+             (delete-file "testsuite/supernova/perf_counter_test.cpp")
+             (substitute* "testsuite/CMakeLists.txt"
+               (("add_subdirectory\\(sclang\\)")
+                ""))
+             (delete-file "testsuite/sclang/CMakeLists.txt")
+             #t))
+         ;; TODO: Remove after version 3.9.2 is released
+         ;; (see: https://github.com/supercollider/supercollider/pull/3558).
+         (add-after 'disable-broken-tests 'apply-system-yaml-cpp-fix
+           (lambda _
+             ;; cmake: correctly include yaml-cpp (commit f82cec5ae).
+             (substitute* "editors/sc-ide/CMakeLists.txt"
+               (("external_libraries/boost\\)$")
+                "external_libraries/boost)
+include_directories(${YAMLCPP_INCLUDE_DIR})")
+               (("    yaml")
+                "    ${YAMLCPP_LIBRARY}"))
+             ;; set YAMLCPP_LIBRARY and YAMLCPP_INCLUDE_DIR if not using
+             ;; system (commit 031922987).
+             (substitute* "external_libraries/CMakeLists.txt"
+               (("set_property\\( TARGET yaml PROPERTY FOLDER 3rdparty \\)")
+                "set_property( TARGET yaml PROPERTY FOLDER 3rdparty )
+set(YAMLCPP_LIBRARY yaml)
+set(YAMLCPP_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/\
+external_libraries/yaml-cpp/include)"))
+             #t)))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)))
+    (inputs
+     `(("jack" ,jack-1)
+       ("libsndfile" ,libsndfile)
+       ("fftw" ,fftw)
+       ("libxt" ,libxt)
+       ("readline" ,readline)           ;readline support for sclang's CLI
+       ("alsa" ,alsa-lib)               ;for sclang's MIDI interface
+       ("eudev" ,eudev)                 ;for user interactions with devices
+       ("avahi" ,avahi)                 ;zeroconf service discovery support
+       ("icu4c" ,icu4c)
+       ("boost" ,boost)
+       ("boost-sync" ,boost-sync)
+       ("yaml-cpp" ,yaml-cpp)
+       ("qtbase" ,qtbase)               ;IDE support
+       ("qtwebkit" ,qtwebkit)
+       ("qtsensors" ,qtsensors)
+       ("qtdeclarative" ,qtdeclarative)
+       ("qtlocation" ,qtlocation)))
+    (home-page "https://github.com/supercollider/supercollider")
+    (synopsis "Synthesis engine and programming language")
+    (description "SuperCollider is a synthesis engine (@code{scsynth} or
+@code{supernova}) and programming language (@code{sclang}).  It can be used
+for experimenting with sound synthesis and algorithmic composition.
+
+SuperCollider requires jackd to be installed in your user profile and your
+user must be allowed to access the realtime features of the kernel.  Search
+for \"realtime\" in the index of the Guix manual to learn how to achieve this
+using GuixSD.")
+    (license license:gpl2+)))
+
 (define-public raul
   (package
     (name "raul")
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 32f9b72d99..d4380f86ac 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -3632,7 +3632,7 @@ data.")
 (define-public kaiju
   (package
     (name "kaiju")
-    (version "1.5.0")
+    (version "1.6.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3641,7 +3641,7 @@ data.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0afbfalfw9y39bkwnqjrh9bghs118ws1pzj5h8l0nblgn3mbjdks"))))
+                "1kdn4rxs0kr9ibmrgrfcci71aa6j6gr71dbc8pff7731rpab6kj7"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; There are no tests.
@@ -3659,7 +3659,8 @@ data.")
                (copy-recursively "util" bin))
              #t)))))
     (inputs
-     `(("perl" ,perl)))
+     `(("perl" ,perl)
+       ("zlib" ,zlib)))
     (home-page "http://kaiju.binf.ku.dk/")
     (synopsis "Fast and sensitive taxonomic classification for metagenomics")
     (description "Kaiju is a program for sensitive taxonomic classification
@@ -6077,14 +6078,14 @@ data types as well.")
 (define-public r-annotate
   (package
     (name "r-annotate")
-    (version "1.56.1")
+    (version "1.56.2")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "annotate" version))
        (sha256
         (base32
-         "14c5xd9kasvcwg5gbjys2c1vizxhlqlzxakqc2kml0kw97hmx0rq"))))
+         "0ybg9k1s289h15nj1kp9821i1rsk1gkn8i8blplmk7gsgpbw1f42"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-annotationdbi" ,r-annotationdbi)
@@ -6886,8 +6887,7 @@ also known as views, in a controlled vocabulary.")
        ("r-rmarkdown" ,r-rmarkdown)
        ("r-tinytex" ,r-tinytex)
        ("r-yaml" ,r-yaml)
-       ("r-xfun" ,r-xfun)
-       ("ghc-pandoc" ,ghc-pandoc)))
+       ("r-xfun" ,r-xfun)))
     (home-page "https://github.com/rstudio/bookdown")
     (synopsis "Authoring books and technical documents with R markdown")
     (description "This package provides output formats and utilities for
@@ -8526,14 +8526,14 @@ library implementing most of the pipeline's features.")
 (define-public r-mutationalpatterns
   (package
     (name "r-mutationalpatterns")
-    (version "1.4.2")
+    (version "1.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (bioconductor-uri "MutationalPatterns" version))
        (sha256
         (base32
-         "08ay9h5cqsi8ypb6r0g4rfa5l1g06jgfzl64wmhgz134yqbl7vfv"))))
+         "0ml4gsp5dfv23xqrknxh25q8q65hly1xb1215lcwyc8hj9z8f941"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-biocgenerics" ,r-biocgenerics)
@@ -8543,7 +8543,6 @@ library implementing most of the pipeline's features.")
        ("r-genomicranges" ,r-genomicranges)
        ("r-genomeinfodb" ,r-genomeinfodb)
        ("r-ggplot2" ,r-ggplot2)
-       ("r-gridextra" ,r-gridextra)
        ("r-iranges" ,r-iranges)
        ("r-nmf" ,r-nmf)
        ("r-plyr" ,r-plyr)
@@ -12757,7 +12756,7 @@ expression report comparing samples in an easily configurable manner.")
 (define-public pigx-chipseq
   (package
     (name "pigx-chipseq")
-    (version "0.0.8")
+    (version "0.0.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BIMSBbioinfo/pigx_chipseq/"
@@ -12765,7 +12764,7 @@ expression report comparing samples in an easily configurable manner.")
                                   "/pigx_chipseq-" version ".tar.gz"))
               (sha256
                (base32
-                "1plw0bz0b7flj0g9irbn8n520005lmajkiq5flpizzapsl0a0r9g"))))
+                "13w99bkr0w4j28ms0yzpl1x6fkpdqay0vh495q3x20bcilsjwnf1"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; parts of the tests rely on access to the network
@@ -12780,24 +12779,34 @@ expression report comparing samples in an easily configurable manner.")
                  `("PYTHONPATH"  ":" = (,(getenv "PYTHONPATH")))))
              #t)))))
     (inputs
-     `(("r-minimal" ,r-minimal)
+     `(("grep" ,grep)
+       ("coreutils" ,coreutils)
+       ("r-minimal" ,r-minimal)
        ("r-argparser" ,r-argparser)
+       ("r-biocparallel" ,r-biocparallel)
+       ("r-biostrings" ,r-biostrings)
        ("r-chipseq" ,r-chipseq)
        ("r-data-table" ,r-data-table)
+       ("r-dplyr" ,r-dplyr)
        ("r-genomation" ,r-genomation)
+       ("r-genomicalignments" ,r-genomicalignments)
        ("r-genomicranges" ,r-genomicranges)
+       ("r-rsamtools" ,r-rsamtools)
        ("r-rtracklayer" ,r-rtracklayer)
-       ("r-rcas" ,r-rcas)
+       ("r-s4vectors" ,r-s4vectors)
        ("r-stringr" ,r-stringr)
+       ("r-tibble" ,r-tibble)
+       ("r-tidyr" ,r-tidyr)
        ("r-jsonlite" ,r-jsonlite)
        ("r-heatmaply" ,r-heatmaply)
+       ("r-htmlwidgets" ,r-htmlwidgets)
        ("r-ggplot2" ,r-ggplot2)
        ("r-plotly" ,r-plotly)
+       ("r-rmarkdown" ,r-rmarkdown)
        ("python-wrapper" ,python-wrapper)
-       ("python-magic" ,python-magic)
        ("python-pyyaml" ,python-pyyaml)
+       ("python-magic" ,python-magic)
        ("python-xlrd" ,python-xlrd)
-       ("snakemake" ,snakemake)
        ("trim-galore" ,trim-galore)
        ("macs" ,macs)
        ("multiqc" ,multiqc)
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index f7e90b4a77..674877a887 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,7 +29,10 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build utils)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages icu4c)
@@ -110,6 +114,38 @@ across a broad spectrum of applications.")
     (license (license:x11-style "http://www.boost.org/LICENSE_1_0.txt"
                                 "Some components have other similar licences."))))
 
+(define-public boost-sync
+  (let ((commit "c72891d9b90e2ceb466ec859f640cd012b2d8709")
+        (version "1.55")
+        (revision "1"))
+    (package
+      (name "boost-sync")
+      (version (git-version version revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/boostorg/sync.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "197mp5z048vz5kv1m4v3jm447l2gqsyv0rbfz11dz0ns343ihbyx"))))
+      (build-system trivial-build-system)
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils))
+           (let ((source (assoc-ref %build-inputs "source")))
+             (copy-recursively (string-append source "/include")
+                               (string-append %output "/include"))))))
+      (home-page "https://github.com/boostorg/sync")
+      (synopsis "Boost.Sync library")
+      (description "The Boost.Sync library provides mutexes, semaphores, locks
+and events and other thread related facilities.  Boost.Sync originated from
+Boost.Thread.")
+      (license (license:x11-style "http://www.boost.org/LICENSE_1_0.txt")))))
+
 (define-public mdds
   (package
     (name "mdds")
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 582c71cc4a..2ea78c9bac 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -35,6 +35,7 @@
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages disk)
+  #:use-module (gnu packages firmware)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
@@ -422,7 +423,7 @@ also initializes the boards (RAM etc).")
                (let* ((out (assoc-ref outputs "out"))
                       (libexec (string-append out "/libexec"))
                       (uboot-files (append
-                                    (find-files "." ".*\\.(bin|efi|img|spl)$")
+                                    (find-files "." ".*\\.(bin|efi|img|spl|itb|dtb)$")
                                     (find-files "." "^MLO$"))))
                  (mkdir-p libexec)
                  (install-file ".config" libexec)
@@ -445,6 +446,27 @@ also initializes the boards (RAM etc).")
 (define-public u-boot-odroid-c2
   (make-u-boot-package "odroid-c2" "aarch64-linux-gnu"))
 
+(define-public u-boot-pine64-plus
+  (let ((base (make-u-boot-package "pine64_plus" "aarch64-linux-gnu")))
+    (package
+      (inherit base)
+      (arguments
+        (substitute-keyword-arguments (package-arguments base)
+          ((#:phases phases)
+           `(modify-phases ,phases
+              (add-after 'unpack 'set-environment
+                (lambda* (#:key inputs #:allow-other-keys)
+                  (let ((bl31 (string-append (assoc-ref inputs "firmware")
+                                             "/bl31.bin")))
+                    (setenv "BL31" bl31)
+                    ;; This is necessary while we're using the bundled dtc.
+                    (setenv "PATH" (string-append (getenv "PATH") ":"
+                                                  "scripts/dtc")))
+                  #t))))))
+      (native-inputs
+       `(("firmware" ,arm-trusted-firmware-pine64-plus)
+         ,@(package-native-inputs base))))))
+
 (define-public u-boot-banana-pi-m2-ultra
   (make-u-boot-package "Bananapi_M2_Ultra" "arm-linux-gnueabihf"))
 
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index f332018f19..936d6c1a2a 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;;
@@ -31,7 +31,6 @@
   #:use-module ((guix derivations)
                 #:select (derivation derivation->output-path))
   #:use-module ((guix utils) #:select (gnu-triplet->nix-system))
-  #:use-module ((guix build utils) #:select (elf-file?))
   #:use-module (guix memoization)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index bcd5c4d164..af06b741a7 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -30,7 +30,7 @@
 (define-public ccache
   (package
     (name "ccache")
-    (version "3.4.1")
+    (version "3.4.2")
     (source
      (origin
       (method url-fetch)
@@ -38,9 +38,9 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1pppi4jbkkj641cdynmc35jaj40jjicw7gj75ran5qs5886jcblc"))))
+        "1qpy6k9f06kpr6bxy26ncdxcszqv1skcncvczcvksgfncx1v3a0q"))))
     (build-system gnu-build-system)
-    (native-inputs `(("perl" ,perl)     ;for test.sh
+    (native-inputs `(("perl" ,perl)     ; for test.sh
                      ("which" ,(@ (gnu packages base) which))))
     (inputs `(("zlib" ,zlib)))
     (arguments
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 9e5d42952f..98632bd412 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -184,8 +184,8 @@ their dependencies.")
       (license l:gpl3+))))
 
 (define-public cuirass
-  (let ((commit "aa4c7784940581b5e271b9c7c4ac80b6ee1ee309")
-        (revision "13"))
+  (let ((commit "326264c8e9445cb94d7fb33aab5ef93dc99ffe57")
+        (revision "14"))
     (package
       (name "cuirass")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -197,7 +197,7 @@ their dependencies.")
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "1827vgk47rcgm2x0cxzvg79ni6vazjzr8hr9pljlvbd9awzr7hxp"))))
+                  "0l6433l63r1zyq9hg89q9l6zgydm7bm35xdvb0g22w1d6wvi48ls"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 77ab683127..7d0267c1a6 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1630,7 +1630,7 @@ or junctions, and always follows hard links.")
 (define-public zstd
   (package
     (name "zstd")
-    (version "1.3.3")
+    (version "1.3.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/facebook/zstd/archive/v"
@@ -1638,7 +1638,7 @@ or junctions, and always follows hard links.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0yr91gwi380632w9y7p6idl72svq0mq0jajvdii05pp77qalfz57"))))
+                "1a85sqk4z5b2jfp7fqkr38ibql8mdzca32lf4i3bssyjimp1pr4j"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 749eed8b57..10b191051d 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -1,10 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2017, 2018 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Raoul Bonnal <ilpuccio.febo@gmail.com>
 ;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
 ;;; Copyright © 2018 Sahithi Yarlagadda <sahi@swecha.net>
+;;; Copyright © 2018 Sandeep Subramanian <sandeepsubramanian94@gmail.com>
+;;; Copyright © 2018 Charlie Ritter <chewzeirta@posteo.net>
+;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,6 +38,252 @@
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages web))
 
+(define-public r-tidyverse
+  (package
+    (name "r-tidyverse")
+    (version "1.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "tidyverse" version))
+       (sha256
+        (base32
+         "0yy3fkjksgcn6wkbgsb0pbnmsyqs4m01mziqafhig578nixs4rxd"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-broom" ,r-broom)
+       ("r-cli" ,r-cli)
+       ("r-crayon" ,r-crayon)
+       ("r-dbplyr" ,r-dbplyr)
+       ("r-dplyr" ,r-dplyr)
+       ("r-forcats" ,r-forcats)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-haven" ,r-haven)
+       ("r-hms" ,r-hms)
+       ("r-httr" ,r-httr)
+       ("r-jsonlite" ,r-jsonlite)
+       ("r-lubridate" ,r-lubridate)
+       ("r-magrittr" ,r-magrittr)
+       ("r-modelr" ,r-modelr)
+       ("r-purrr" ,r-purrr)
+       ("r-readr" ,r-readr)
+       ("r-readxl" ,r-readxl)
+       ("r-reprex" ,r-reprex)
+       ("r-rlang" ,r-rlang)
+       ("r-rstudioapi" ,r-rstudioapi)
+       ("r-rvest" ,r-rvest)
+       ("r-stringr" ,r-stringr)
+       ("r-tibble" ,r-tibble)
+       ("r-tidyr" ,r-tidyr)
+       ("r-xml2" ,r-xml2)))
+    (home-page "https://tidyverse.tidyverse.org")
+    (synopsis "Install and load packages from the \"Tidyverse\"")
+    (description
+     "The @code{tidyverse} is a set of packages that work in harmony because
+they share common data representations and API design.  This package is
+designed to make it easy to install and load multiple tidyverse packages in a
+single step.")
+    (license license:gpl3)))
+
+(define-public r-rvest
+  (package
+    (name "r-rvest")
+    (version "0.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rvest" version))
+       (sha256
+        (base32
+         "04mv99z8dixywx96kfy4215g6ib23s7qvd77hcf9pxqxzcvqhvhd"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-httr" ,r-httr)
+       ("r-magrittr" ,r-magrittr)
+       ("r-selectr" ,r-selectr)
+       ("r-xml2" ,r-xml2)))
+    (home-page "https://github.com/hadley/rvest")
+    (synopsis "Simple web scraping for R")
+    (description
+     "@code{r-rvest} helps you scrape information from web pages.  It is
+designed to work with @code{magrittr} to make it easy to express common web
+scraping tasks, inspired by libraries like @code{BeautifulSoup}.")
+    (license license:gpl3)))
+
+(define-public r-selectr
+  (package
+    (name "r-selectr")
+    (version "0.3-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "selectr" version))
+       (sha256
+        (base32
+         "0kdrj64rqg4z6hg92y9r2h602a2i73r5rnlpg23ys33d5d32n8jy"))))
+    (build-system r-build-system)
+    (propagated-inputs `(("r-stringr" ,r-stringr)))
+    (home-page "https://sjp.co.nz/projects/selectr/")
+    (synopsis "Translate CSS selectors to XPath expressions")
+    (description
+     "@code{r-selectr} translates a CSS3 selector into an equivalent XPath
+expression.  This allows you to use CSS selectors when working with the XML
+package as it can only evaluate XPath expressions.  Also provided are
+convenience functions useful for using CSS selectors on XML nodes.  This
+package is a port of the Python package @code{cssselect}.")
+    (license license:bsd-3)))
+
+(define-public r-reprex
+  (package
+    (name "r-reprex")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "reprex" version))
+       (sha256
+        (base32
+         "105d9vsmqfilgpw8psfb2wyiz1hvcycvh4cqhb3ab37lm3rcavvs"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-callr" ,r-callr)
+       ("r-knitr" ,r-knitr)
+       ("r-rmarkdown" ,r-rmarkdown)
+       ("r-whisker" ,r-whisker)))
+    (home-page "https://github.com/tidyverse/reprex")
+    (synopsis "Prepare reproducible R code examples for sharing")
+    (description
+     "This package provides a convenience wrapper that uses the
+@code{rmarkdown} package to render small snippets of code to target formats
+that include both code and output.  The goal is to encourage the sharing of
+small, reproducible, and runnable examples on code-oriented websites or email.
+@code{reprex} also extracts clean, runnable R code from various common formats,
+such as copy/paste from an R session.")
+    (license license:expat)))
+
+(define-public r-callr
+  (package
+    (name "r-callr")
+    (version "2.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "callr" version))
+       (sha256
+        (base32
+         "0m51p39vfwldxv6h8x4y9w3laf8q9bldhfqhlcrlx3xhy3irb1bp"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-assertthat" ,r-assertthat)
+       ("r-crayon" ,r-crayon)
+       ("r-debugme" ,r-debugme)
+       ("r-r6" ,r-r6)
+       ("r-testthat" ,r-testthat)))
+    (home-page "https://github.com/r-lib/callr#readme")
+    (synopsis "Call R from R")
+    (description
+     "It is sometimes useful to perform a computation in a separate R process,
+without affecting the current R process at all.  This packages does exactly
+that.")
+    (license license:expat)))
+
+(define-public r-readxl
+  (package
+    (name "r-readxl")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "readxl" version))
+       (sha256
+        (base32
+         "1bf7gxw9r11m4llyymplxiaa4gzgyj4bwmwad5in756pzq3jzmpv"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-cellranger" ,r-cellranger)
+       ("r-rcpp" ,r-rcpp)
+       ("r-tibble" ,r-tibble)))
+    (home-page "https://readxl.tidyverse.org")
+    (synopsis "Read Excel files")
+    (description
+     "This package lets you import Excel files into R.  It supports
+@file{.xls} via the embedded @code{libxls} C library and @file{.xlsx} via
+the embedded @code{RapidXML} C++ library.")
+    ;; XXX: This package bundles a copy of 'libxsl' which is BSD-2 and
+    ;; 'rapidxml' which is Boost.
+    (license (list license:gpl3 license:bsd-2 license:boost1.0))))
+
+(define-public r-modelr
+  (package
+    (name "r-modelr")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "modelr" version))
+       (sha256
+        (base32
+         "1rqw0b583vp107zqp4h3wj51dvv4hb3wszfr1f5f48xassc53f95"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-broom" ,r-broom)
+       ("r-dplyr" ,r-dplyr)
+       ("r-lazyeval" ,r-lazyeval)
+       ("r-magrittr" ,r-magrittr)
+       ("r-purrr" ,r-purrr)
+       ("r-tibble" ,r-tibble)
+       ("r-tidyr" ,r-tidyr)))
+    (home-page "https://github.com/tidyverse/modelr")
+    (synopsis "Helper functions for modelling in pipelines")
+    (description
+     "Functions for modelling that help you seamlessly integrate modelling
+into a pipeline of data manipulation and visualisation.")
+    (license license:gpl3)))
+
+(define-public r-haven
+  (package
+    (name "r-haven")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "haven" version))
+       (sha256
+        (base32
+         "1fkcvsrnw8waqwggv0aydbvbi99x5kp9g78xfxj4w6s3xvdzcysz"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-forcats" ,r-forcats)
+       ("r-hms" ,r-hms)
+       ("r-rcpp" ,r-rcpp)
+       ("r-readr" ,r-readr)
+       ("r-tibble" ,r-tibble)))
+    (home-page "https://haven.tidyverse.org")
+    (synopsis "Import and Export 'SPSS', 'Stata' and 'SAS' Files")
+    (description
+     "This package lets you mport foreign statistical formats into R via the
+embedded @url{https://github.com/WizardMac/ReadStat,ReadStat} C library.")
+    (license license:expat)))
+
+(define-public r-amap
+  (package
+    (name "r-amap")
+    (version "0.8-14")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "amap" version))
+              (sha256
+               (base32
+                "1dz37z9v4zvyvqrs4xvpfv468jwvpxav60qn2w0049bw8llj6xdl"))))
+    (build-system r-build-system)
+    (inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "http://mulcyber.toulouse.inra.fr/projects/amap/")
+    (synopsis "Another multidimensional analysis package")
+    (description "This package provides tools for clustering and principal
+component analysis (with robust methods, and parallelized functions).")
+    (license license:gpl2+)))
+
 (define-public r-ape
   (package
     (name "r-ape")
@@ -131,6 +380,27 @@ inspired by Python's Literal String Interpolation (PEP-0498) and
 Docstrings (PEP-0257) and Julia's Triple-Quoted String Literals.")
     (license license:expat)))
 
+(define-public r-pastecs
+  (package
+   (name "r-pastecs")
+   (version "1.3.21")
+   (source (origin
+            (method url-fetch)
+            (uri (cran-uri "pastecs" version))
+            (sha256
+             (base32
+              "0z4dic94ar646w7zc2ggi5hgvf2qnznsani94c5pyql8zspz47lc"))))
+   (build-system r-build-system)
+   (propagated-inputs
+    `(("r-boot" ,r-boot)))
+   (home-page "http://www.sciviews.org/pastecs")
+   (synopsis "Analysis of space-time ecological series")
+   (description
+    "This package provides functions for regulation, decomposition and analysis
+of space-time series.  The @code{pastecs} library is a PNEC-Art4 and IFREMER
+initiative to bring PASSTEC 2000 functionalities to R.")
+   (license license:gpl2+)))
+
 (define-public r-plogr
   (package
     (name "r-plogr")
@@ -779,6 +1049,26 @@ tools for inference in parametric models are provided.")
     ;; Either version is okay
     (license (list license:gpl2 license:gpl3))))
 
+(define-public r-idr
+  (package
+    (name "r-idr")
+    (version "1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "idr" version))
+              (sha256
+               (base32
+                "05nvgw1xdg670bsjjrxkgd1mrdkciccpw4krn0zcgdf2r21dzgwb"))))
+    (build-system r-build-system)
+    (home-page "https://cran.r-project.org/web/packages/idr/")
+    (synopsis "Irreproducible discovery rate")
+    (description
+     "This is a package for estimating the copula mixture model and plotting
+correspondence curves in \"Measuring reproducibility of high-throughput
+experiments\" (2011), Annals of Applied Statistics, Vol. 5, No. 3, 1752-1779,
+by Li, Brown, Huang, and Bickel")
+    (license license:gpl2+)))
+
 (define-public r-inline
   (package
     (name "r-inline")
@@ -1625,6 +1915,29 @@ University Press.  It provides smoothing methods for nonparametric regression
 and density estimation")
     (license license:gpl2+)))
 
+(define-public r-venndiagram
+  (package
+    (name "r-venndiagram")
+    (version "1.6.20")
+    (source (origin
+              (method url-fetch)
+              (uri (cran-uri "VennDiagram" version))
+              (sha256
+               (base32
+                "1ic1jaxzw98si2p4n1fl4n3myhd7fpw0njb634cwhviwybzv6775"))))
+    (properties `((upstream-name . "VennDiagram")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-futile-logger" ,r-futile-logger)))
+    (home-page "https://cran.r-project.org/web/packages/VennDiagram/")
+    (synopsis "Generate High-Resolution Venn and Euler Plots")
+    (description
+     "This package provides a set of functions to generate high-resolution
+Venn and Euler plots.  It includes handling for several special cases,
+including two-case scaling, and extensive customization of plot shape and
+structure.")
+    (license license:gpl2+)))
+
 (define-public r-vioplot
   (package
     (name "r-vioplot")
@@ -3273,3 +3586,71 @@ those functions to be used with time series including specifications that may
 contain lags, diffs and missing values.")
     ;; Any GPL version.
     (license license:gpl2+)))
+
+(define-public r-catdap
+  (package
+    (name "r-catdap")
+    (version "1.3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "catdap" version))
+       (sha256
+        (base32
+         "0i877l61f6c75pczi235rzci67w29zv1d7z5zn5p5ymndclvlpl2"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "https://cran.r-project.org/web/packages/catdap/")
+    (synopsis "Tools for categorical data analysis")
+    (description
+     "This package provides functions for analyzing multivariate data.
+Dependencies of the distribution of the specified variable (response
+variable) to other variables (explanatory variables) are derived and
+evaluated by the @dfn{Akaike Information Criterion} (AIC).")
+    (license license:gpl2+)))
+
+(define-public r-arules
+  (package
+    (name "r-arules")
+    (version "1.6-0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "arules" version))
+       (sha256
+        (base32
+         "14gbq5k2zkx4wc7kkfazz313ngij89qp1xmyxfg3nq3v1s84c3sl"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-matrix" ,r-matrix)))
+    (home-page "https://github.com/mhahsler/arules")
+    (synopsis "Mining association rules and frequent itemsets")
+    (description
+     "This package provides an infrastructure for representing, manipulating
+and analyzing transaction data and patterns (frequent itemsets and association rules).
+It also provides C implementations of the association mining algorithms Apriori
+and Eclat.")
+    (license license:gpl3)))
+
+(define-public r-parsedate
+  (package
+    (name "r-parsedate")
+    (version "1.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "parsedate" version))
+       (sha256
+        (base32
+         "0mg7hbm3903iwvmpn51gjpaaq03rsp72hjb1g8h5g84r81iha002"))))
+    (build-system r-build-system)
+    (home-page "https://github.com/gaborcsardi/parsedate")
+    (synopsis
+     "Recognize and parse dates in various formats")
+    (description
+     "This package provides three functions for dealing with dates:
+@code{parse_iso_8601} recognizes and parses all valid ISO 8601 date and
+time formats, @code{parse_date} parses dates in unspecified formats,
+and @code{format_iso_8601} formats a date in ISO 8601 format.")
+    (license license:gpl2)))
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index 741f97adf3..d3246ab36f 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -379,14 +379,14 @@ device-specific programs to convert and print many types of files.")
 (define-public hplip
   (package
     (name "hplip")
-    (version "3.17.11")
+    (version "3.18.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/hplip/hplip/" version
                                   "/hplip-" version ".tar.gz"))
               (sha256
                (base32
-                "0xda7x7xxjvzn1l0adlvbwcw21crq1r3r79bkf94q3m5i6abx49g"))
+                "0x5xs86v18w46rxz5whc15bl4fb7p4km6xqjpwzclp83nl7rl01y"))
               (modules '((guix build utils)))
               (snippet
                ;; Fix type mismatch.
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index 8bf5c61ece..4334203f7b 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -27,6 +27,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
+  #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages emacs)
@@ -237,7 +238,7 @@ and a Python library.")
 (define-public translate-shell
   (package
     (name "translate-shell")
-    (version "0.9.6.4")
+    (version "0.9.6.7")
     (source
       (origin
         (method url-fetch)
@@ -245,7 +246,8 @@ and a Python library.")
                             version ".tar.gz"))
         (sha256
          (base32
-          "1fg6nf1plvgimc57fsdr9rcjbf7jvmk5jrlj5ya509vpdcdgvj2s"))
+          "0inv6r3qbihn2ff1sgcly89r04k4vgcbvvyl50ln0mxlapbhpy95"))
+        (patches (search-patches "translate-shell-fix-curl-tests.patch"))
         (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
     (arguments
@@ -259,7 +261,8 @@ and a Python library.")
                     (emacs (string-append (assoc-ref inputs "emacs") "/bin/emacs")))
                (install-file "google-translate-mode.el" dest)
                (emacs-generate-autoloads ,name dest)))))
-       #:make-flags (list (string-append "PREFIX=" %output))
+       #:make-flags (list (string-append "PREFIX=" %output)
+                          "NETWORK_ACCESS=no test")
        #:imported-modules (,@%gnu-build-system-modules (guix build emacs-utils))
        #:modules ((guix build gnu-build-system)
                   (guix build emacs-utils)
@@ -272,7 +275,7 @@ and a Python library.")
     (native-inputs
      `(("emacs" ,emacs-minimal)
        ("util-linux" ,util-linux))) ; hexdump, for the test
-    (home-page "https://www.soimort.org/translate-shell")
+    (home-page "https://www.soimort.org/translate-shell/")
     (synopsis "Translations from the command line")
     (description
      "Translate Shell (formerly Google Translate CLI) is a command-line
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index 20549c0cd8..595000bf88 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -2,13 +2,14 @@
 ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2018 Vasile Dumitrascu <va511e@yahoo.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +35,7 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
@@ -319,17 +321,17 @@ and can dramatically shorten the lifespan of the drive if left unchecked.")
 (define-public gparted
   (package
     (name "gparted")
-    (version "0.30.0")
+    (version "0.31.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/gparted/gparted/gparted-"
                            version "/gparted-" version ".tar.gz"))
        (sha256
-        (base32 "0jngbsbvg8k8vbpsphqbk8br2cbmxhabbm2c5bmxm2q5zvpr64fk"))))
+        (base32 "1fh7rpgb4xxdhgyjsirb83zvjfc5mfngb8a1pjbv7r6r6jj4jyrv"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; Tests require a network connection.
+     `(#:tests? #f                      ; tests require a network connection
        #:configure-flags '("--disable-scrollkeeper")))
     (inputs
      `(("util-linux" ,util-linux)
@@ -416,3 +418,87 @@ capacity of a flash card (flash drive, flash disk, pendrive).  F3 writes to
 the card and then checks if can read it.  It will assure you haven't been sold
 a card with a smaller capacity than stated.")
     (license license:gpl3+)))
+
+(define-public python-parted
+  (package
+    (name "python-parted")
+    (version "3.11.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/dcantrell/pyparted/archive/v"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0r1nyjj40nacnfnv17x2mnsj6ga1qplyxyza82v2809dfhim2fwq"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             ;; See <https://github.com/dcantrell/pyparted/issues/47>.
+             (substitute* "tests/test__ped_ped.py"
+               (("\"/tmp/temp-device-\"") "self.path"))
+             (invoke "python" "-m" "unittest" "discover" "-v")
+             #t)))))
+    (native-inputs
+     `(("e2fsprogs" ,e2fsprogs)
+       ("pkg-config" ,pkg-config)))
+    (propagated-inputs
+     `(("python-six" ,python-six)))
+    (inputs
+     `(("parted" ,parted)))
+    (home-page "https://github.com/dcantrell/pyparted")
+    (synopsis "Parted bindings for Python")
+    (description "This package provides @code{parted} bindings for Python.")
+    (license license:gpl2+)))
+
+(define-public python2-parted
+  (package-with-python2 python-parted))
+
+(define-public duperemove
+  (package
+    (name "duperemove")
+    (version "v0.11.beta4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/markfasheh/duperemove/archive/"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1h5nk03kflfnzihvn2rvfz1h623x1zpkn9hp29skd7n3f2bc5k7x"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("glib" ,glib)
+       ("sqlite" ,sqlite)))
+    (arguments
+     `(#:tests? #f                                ;no test suite
+       #:phases
+       (modify-phases %standard-phases
+         ;; no configure script
+         (delete 'configure))
+       #:make-flags (list (string-append "PREFIX=" %output)
+                          "CC=gcc")))
+    (home-page "https://github.com/markfasheh/duperemove")
+    (synopsis "Tools for de-duplicating file system data")
+    (description "Duperemove is a simple tool for finding duplicated extents
+and submitting them for deduplication.  When given a list of files it will
+hash their contents on a block by block basis and compare those hashes to each
+other, finding and categorizing blocks that match each other.  When given the
+@option{-d} option, duperemove will submit those extents for deduplication
+using the Linux kernel extent-same @code{ioctl}.
+
+Duperemove can store the hashes it computes in a @dfn{hash file}.  If given an
+existing hash file, duperemove will only compute hashes for those files which
+have changed since the last run.  Thus you can run duperemove repeatedly on
+your data as it changes, without having to re-checksum unchanged data.
+
+Duperemove can also take input from the @command{fdupes} program.")
+    (license license:gpl2)))
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index bb8aa3862a..4bb2e69049 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -788,14 +788,14 @@ provides features like a web browseable API and authentication policies.")
 (define-public python-django-crispy-forms
   (package
     (name "python-django-crispy-forms")
-    (version "1.7.0")
+    (version "1.7.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "django-crispy-forms" version))
        (sha256
         (base32
-         "16s05jx86jmimlvnwpq73kl0mqw1v9lryc8zi61a9qwl25krm6mj"))))
+         "0pv7y648i8iz7mf64gkjizpbx5d01ap2s4vqqa30n38if6wvlljr"))))
     (build-system python-build-system)
     (arguments
      '(;; No included tests
diff --git a/gnu/packages/dunst.scm b/gnu/packages/dunst.scm
index 68637ea6cd..6df37894da 100644
--- a/gnu/packages/dunst.scm
+++ b/gnu/packages/dunst.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2017 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015, 2017, 2018 Alex Kost <alezost@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +32,7 @@
 (define-public dunst
   (package
     (name "dunst")
-    (version "1.2.0")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -41,12 +41,16 @@
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1bf5fmmj79wlwi8wzir3rd8czyrxfx16w8q7c957123yz1g5ph53"))))
+                "1mkdp1vqc376z8clwm5s9070jq1g92j8hv2rr231jr2468fnwaga"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
        #:make-flags (list "CC=gcc"
-                          (string-append "PREFIX=" %output))
+                          (string-append "PREFIX=" %output)
+                          ;; Otherwise it tries to install service file
+                          ;; to "dbus" store directory.
+                          (string-append "SERVICEDIR_DBUS=" %output
+                                         "/share/dbus-1/services"))
        #:phases (modify-phases %standard-phases
                   (delete 'configure))))
     (native-inputs
@@ -55,8 +59,8 @@
        ("which" ,which)))
     (inputs
      `(("dbus" ,dbus)
+       ("gdk-pixbuf" ,gdk-pixbuf)
        ("glib" ,glib)
-       ("gtk" ,gtk+-2)
        ("cairo" ,cairo)
        ("pango" ,pango)
        ("libx11" ,libx11)
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index f7bf2dbdda..0011ee057b 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -491,7 +491,7 @@ operations.")
 (define-public magit-svn
   (package
     (name "magit-svn")
-    (version "2.1.1")
+    (version "2.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -500,12 +500,13 @@ operations.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "04y88j7q9h8xjbx5dbick6n5nr1522sn9i1znp0qwk3vjb4b5mzz"))))
+                "1c3n377v436zaxamlsz04y1ahdhp96x1vd43zaryv4y10m02ba47"))))
     (build-system trivial-build-system)
     (native-inputs `(("emacs" ,emacs-minimal)
                      ("tar" ,tar)
                      ("gzip" ,gzip)))
     (propagated-inputs `(("dash" ,emacs-dash)
+                         ("with-editor" ,emacs-with-editor)
                          ("magit" ,magit)))
     (arguments
      `(#:modules ((guix build utils)
@@ -527,6 +528,9 @@ operations.")
                 (dash     (string-append (assoc-ref %build-inputs "dash")
                                          "/share/emacs/site-lisp/guix.d/dash-"
                                          ,(package-version emacs-dash)))
+                (with-editor (string-append (assoc-ref %build-inputs "with-editor")
+                                            "/share/emacs/site-lisp/guix.d/with-editor-"
+                                            ,(package-version emacs-with-editor)))
                 (source   (assoc-ref %build-inputs "source"))
                 (lisp-dir (string-append %output "/share/emacs/site-lisp")))
            (setenv "PATH" PATH)
@@ -539,9 +543,8 @@ operations.")
              (parameterize ((%emacs emacs))
                (emacs-generate-autoloads ,name lisp-dir)
                (setenv "EMACSLOADPATH"
-                       (string-append ":" magit ":" dash))
+                       (string-append ":" magit ":" dash ":" with-editor))
                (emacs-batch-eval '(byte-compile-file "magit-svn.el"))))
-
            #t))))
     (home-page "https://github.com/magit/magit-svn")
     (synopsis "Git-SVN extension to Magit")
@@ -674,7 +677,7 @@ programs.")
 (define-public flycheck
   (package
     (name "emacs-flycheck")
-    (version "30")
+    (version "31")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -682,7 +685,7 @@ programs.")
                     version "/flycheck-" version ".tar"))
               (sha256
                (base32
-                "1rxzkaqsj48z3nska5wsgwafvwkam014dzqd32baycmxjl0jxvy7"))))
+                "01rnwan16m7cyyrfca3c5c60mbj2r3knkpzbhji2fczsf0wns240"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-dash" ,emacs-dash)))
@@ -1374,7 +1377,7 @@ diagrams.")
 (define-public emacs-mmm-mode
   (package
     (name "emacs-mmm-mode")
-    (version "0.5.4")
+    (version "0.5.5")
     (source
      (origin
        (method url-fetch)
@@ -1384,7 +1387,7 @@ diagrams.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "10kwslnflbjqm62wkrq420crqzdqalzfflp9pqk1i12zm6dm4mfv"))))
+         "0c5ing3hcr74k78hqhrfwiv6m3n8hqfrw89j2x34vf60f4iyqzqc"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1832,34 +1835,36 @@ of files under Git version control from within Emacs.")
     (license license:gpl3+)))
 
 (define-public emacs-minitest
-  (package
-    (name "emacs-minitest")
-    (version "0.8.0")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "https://github.com/arthurnn/minitest-emacs/archive/v"
-                   version ".tar.gz"))
-             (file-name (string-append name "-" version ".tar.gz"))
-             (sha256
-              (base32
-               "1dsb7kzvs1x6g4sgqmq73jqacb7wzm0wfkiq5m9dqdzq8mppgiqs"))))
-    (build-system emacs-build-system)
-    (arguments
-     '(#:include (cons "^snippets\\/minitest-mode\\/" %default-include)
-       #:exclude (delete "^[^/]*tests?\\.el$" %default-exclude)))
-    (propagated-inputs
-     `(("emacs-dash" ,emacs-dash)
-       ("emacs-f" ,emacs-f)))
-    (home-page "https://github.com/arthurnn/minitest-emacs")
-    (synopsis "Emacs minitest mode")
-    (description
-     "The minitest mode provides commands to run the tests for the current
+  (let ((commit "1aadb7865c1dc69c201cecee275751ecec33a182")
+        (revision "1"))
+    (package
+      (name "emacs-minitest")
+      (version (git-version "0.8.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/arthurnn/minitest-emacs")
+                      (commit commit)))
+                (file-name (git-file-name name commit))
+                (sha256
+                 (base32
+                  "1l18zqpdzbnqj2qawq8hj7z7pl8hr8z9d8ihy8jaiqma915hmhj1"))))
+      (build-system emacs-build-system)
+      (arguments
+       '(#:include (cons "^snippets\\/minitest-mode\\/" %default-include)
+         #:exclude (delete "^[^/]*tests?\\.el$" %default-exclude)))
+      (propagated-inputs
+       `(("emacs-dash" ,emacs-dash)
+         ("emacs-f" ,emacs-f)))
+      (home-page "https://github.com/arthurnn/minitest-emacs")
+      (synopsis "Emacs minitest mode")
+      (description
+       "The minitest mode provides commands to run the tests for the current
 file or line, as well as rerunning the previous tests, or all the tests for a
 project.
 
 This package also includes relevant snippets for yasnippet.")
-    (license license:expat)))
+      (license license:expat))))
 
 (define-public emacs-el-mock
   (package
@@ -2272,6 +2277,8 @@ mode-line.")
         (base32
          "1vp45y99fwj88z04ah4yppz4z568qcib646az6m9az5ar0f203br"))))
     (build-system emacs-build-system)
+    (arguments
+     '(#:include (cons "^lib\\/" %default-include)))
     (propagated-inputs
      `(("emacs-inf-ruby" ,emacs-inf-ruby)))
     (home-page "https://github.com/dgutov/robe")
@@ -2432,7 +2439,7 @@ Tracker as well as bug identifiers prepared for @code{bug-reference-mode}.")
 (define-public emacs-deferred
   (package
     (name "emacs-deferred")
-    (version "0.3.2")
+    (version "0.5.1")
     (home-page "https://github.com/kiwanami/emacs-deferred")
     (source (origin
               (method git-fetch)
@@ -2441,7 +2448,7 @@ Tracker as well as bug identifiers prepared for @code{bug-reference-mode}.")
                     (commit (string-append "v" version))))
               (sha256
                (base32
-                "0059jy01ni5irpgrj9fa81ayd9j25nvmjjm79ms3210ysx4pgqdr"))
+                "0xy9zb6wwkgwhcxdnslqk52bq3z24chgk6prqi4ks0qcf2bwyh5h"))
               (file-name (string-append name "-" version))))
     (build-system emacs-build-system)
     ;; FIXME: Would need 'el-expectations' to actually run tests.
@@ -3517,7 +3524,7 @@ S-expression.")
 (define-public emacs-clojure-mode
   (package
     (name "emacs-clojure-mode")
-    (version "5.4.0")
+    (version "5.6.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3526,7 +3533,7 @@ S-expression.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "117mvjqh4nm8mvmwmmvy4qmkdg23ldlzk08y91g8b8ac8kxwqg81"))))
+                "1f4k1hncy5ygh4izn7mqfp744nnisrp9ywn2njknbjxx34ai1q88"))))
     (build-system emacs-build-system)
     (native-inputs
      `(("emacs-dash" ,emacs-dash)
@@ -4504,14 +4511,14 @@ passive voice.")
     (name "emacs-org")
     ;; emacs-org-contrib inherits from this package.  Please update its sha256
     ;; checksum as well.
-    (version "20180226")
+    (version "20180327")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://orgmode.org/elpa/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "0jqvry6gah1bwnryha4asynj13jyds3qim0xcy7s01rxk99m2ziy"))))
+                "0xmlzlxf15996sd3gj3naiz383d17ngjd9963p4h9kssrkjlwljy"))))
     (build-system emacs-build-system)
     (home-page "https://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
@@ -4531,7 +4538,7 @@ reproducible research.")
                                   (package-version emacs-org) ".tar"))
               (sha256
                (base32
-                "034wp70hcqnpidji5k1k80mj35iyyy098nbvc2sl7i2aca4m03zc"))))
+                "1nqn7m1x9w5y356ylv5hia6v62pqfz9g3rzjbiffjxyyc34xvpfm"))))
     (arguments
      `(#:modules ((guix build emacs-build-system)
                   (guix build utils)
@@ -5715,14 +5722,14 @@ which code derived from Kelvin H's org-page.")
 (define-public emacs-xelb
   (package
     (name "emacs-xelb")
-    (version "0.12")
+    (version "0.14")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://elpa.gnu.org/packages/xelb-"
                                   version ".tar"))
               (sha256
                (base32
-                "0i9n0f3ibj4a5pwcsvwrah9m0fz32m0x6a9wsmjn3li20v8pcb81"))))
+                "09flnbjy9ck784kprz036rwg9qk45hpv0w5hz3pz3zhwyk57fv74"))))
     (build-system emacs-build-system)
     ;; The following functions and variables needed by emacs-xelb are
     ;; not included in emacs-minimal:
@@ -5754,7 +5761,7 @@ It should enable you to implement low-level X11 applications.")
 (define-public emacs-exwm
   (package
     (name "emacs-exwm")
-    (version "0.16")
+    (version "0.18")
     (synopsis "Emacs X window manager")
     (source (origin
               (method url-fetch)
@@ -5762,7 +5769,7 @@ It should enable you to implement low-level X11 applications.")
                                   version ".tar"))
               (sha256
                (base32
-                "0c4w5k9lzqj8yzhdqipdb4fs7ld2qklc6s137104jnfdvmrwcv2i"))))
+                "1shz5bf4v4gg3arjaaldics5qkg3aiiaf3ngys8lb6qyxhcpvh6q"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-xelb" ,emacs-xelb)))
@@ -5845,7 +5852,7 @@ other operations.")
 (define-public emacs-exwm-x
   (package
     (name "emacs-exwm-x")
-    (version "1.7.2")
+    (version "1.8.1")
     (synopsis "Derivative window manager based on EXWM")
     (source (origin
               (method url-fetch)
@@ -5855,7 +5862,7 @@ other operations.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1ny13i82fb72917jgl0ndwjg1x6l9f8gfhcx7cwlwhh5saq23mvy"))))
+                "0ali1100aacq4zbvcck80h51pvw204jlxhn4aikkqq4ngbx03kkr"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-exwm" ,emacs-exwm)
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 82edd2a98c..4caf29437f 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -980,14 +980,14 @@ SPI, I2C, JTAG.")
 (define-public fc-host-tools
   (package
     (name "fc-host-tools")
-    (version "7")
+    (version "8")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://ftp.freecalypso.org/pub/GSM/"
                                   "FreeCalypso/fc-host-tools-r" version ".tar.bz2"))
               (sha256
                (base32
-                "0j0qh5m2irgdf4v9n4yhfdfqz9k8q27k0rx9m0xqc0ckbrih8d9r"))))
+                "00kl9442maaxnsjvl5qc4c6fzjkgr3hac9ax1z2k6ry6byfknj6z"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; No tests exist.
diff --git a/gnu/packages/firmware.scm b/gnu/packages/firmware.scm
index 714af3df72..9e91ceca4e 100644
--- a/gnu/packages/firmware.scm
+++ b/gnu/packages/firmware.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 David Craven <david@craven.ch>
-;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -24,6 +24,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
@@ -33,6 +34,7 @@
   #:use-module (gnu packages cmake)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python))
@@ -309,3 +311,96 @@ coreboot.")
 Virtual Machines.  OVMF contains a sample UEFI firmware for QEMU and KVM.")
     (license (list license:expat
                    license:bsd-2 license:bsd-3 license:bsd-4))))
+
+(define* (make-arm-trusted-firmware platform #:optional (arch "aarch64"))
+  (package
+    (name (string-append "arm-trusted-firmware-" platform))
+    (version "1.5")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               ;; There are only GitHub generated release snapshots.
+               (url "https://github.com/ARM-software/arm-trusted-firmware.git")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name "arm-trusted-firmware" version))
+       (sha256
+        (base32
+         "1gm0bn2llzfzz9bfsz11fhwxj5lxvyrq7bc13fjj033nljzxn7k8"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure) ; no configure script
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bin (find-files "." ".*\\.bin$")))
+               (for-each
+                 (lambda (file)
+                   (install-file file out))
+                 bin))
+             #t)))
+       #:make-flags (list (string-append "PLAT=" ,platform)
+                          ,@(if (and (not (string-prefix? "aarch64"
+                                                          (%current-system)))
+                                     (string-prefix? "aarch64" arch))
+                              `("CROSS_COMPILE=aarch64-linux-gnu-")
+                              '())
+                          ,@(if (and (not (string-prefix? "armhf"
+                                                          (%current-system)))
+                                     (string-prefix? "armhf" arch))
+                              `("CROSS_COMPILE=arm-linux-gnueabihf-")
+                              '())
+                          "DEBUG=1")
+       #:tests? #f)) ; no tests
+    (native-inputs
+     `(,@(if (and (not (string-prefix? "aarch64" (%current-system)))
+                  (string-prefix? "aarch64" arch))
+           ;; gcc-7 since it is used for u-boot, which needs gcc-7.
+           `(("cross-gcc" ,(cross-gcc "aarch64-linux-gnu" #:xgcc gcc-7))
+             ("cross-binutils" ,(cross-binutils "aarch64-linux-gnu")))
+           '())
+       ,@(if (and (not (string-prefix? "armhf" (%current-system)))
+                  (string-prefix? "armhf" arch))
+           ;; gcc-7 since it is used for u-boot, which needs gcc-7.
+           `(("cross-gcc" ,(cross-gcc "arm-linux-gnueabihf" #:xgcc gcc-7))
+             ("cross-binutils" ,(cross-binutils "arm-linux-gnueabihf")))
+           '())
+        ))
+    (home-page "https://github.com/ARM-software/arm-trusted-firmware")
+    (synopsis "Implementation of \"secure world software\"")
+    (description
+     "ARM Trusted Firmware provides a reference implementation of secure world
+software for ARMv7A and ARMv8-A, including a Secure Monitor executing at
+@dfn{Exception Level 3} (EL3).  It implements various ARM interface standards,
+such as:
+@enumerate
+@item The Power State Coordination Interface (PSCI)
+@item Trusted Board Boot Requirements (TBBR, ARM DEN0006C-1)
+@item SMC Calling Convention
+@item System Control and Management Interface
+@item Software Delegated Exception Interface (SDEI)
+@end enumerate\n")
+    (license (list license:bsd-3
+                   license:bsd-2)))) ; libfdt
+
+(define-public arm-trusted-firmware-pine64-plus
+  (let ((base (make-arm-trusted-firmware "sun50iw1p1"))
+        ;; Vendor's arm trusted firmware branch hasn't been upstreamed yet.
+        (commit "ae78724247a01560164d607ed66db111c74d8df0")
+        (revision "1"))
+    (package
+      (inherit base)
+      (name "arm-trusted-firmware-pine64-plus")
+      (version (string-append "1.2-" revision "." (string-take commit 7)))
+      (source
+        (origin
+          (method git-fetch)
+          (uri (git-reference
+                 (url "https://github.com/apritzel/arm-trusted-firmware.git")
+                 (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32
+            "0r4xnlq7v9khjfcg6gqp7nmrmnw4z1r8bipwdr07png1dcbb8214")))))))
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index 36c8353ee0..dd0eaa5df8 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -48,6 +48,7 @@
 (define-public flashrom
   (package
     (name "flashrom")
+    ;; XXX: The CFLAGS=... line below can probably be removed when updating.
     (version "1.0")
     (source (origin
               (method url-fetch)
@@ -64,9 +65,13 @@
               ("libftdi" ,libftdi)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (arguments
-     '(#:make-flags (list "CC=gcc"
-                          (string-append "PREFIX=" %output)
-                          "CONFIG_ENABLE_LIBUSB0_PROGRAMMERS=no")
+     '(#:make-flags
+       (list "CC=gcc"
+             ;; The default includes ‘-Wall -Werror’, causing the build to fail
+             ;; with deprecation warnings against libusb versions >= 1.0.22.
+             "CFLAGS=-Os -Wshadow"
+             (string-append "PREFIX=" %output)
+             "CONFIG_ENABLE_LIBUSB0_PROGRAMMERS=no")
        #:tests? #f                      ; no 'check' target
        #:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index e0fcfe6e59..7e15537205 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
-;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Mohammed Sadiq <sadiq@sadiqpk.org>
 ;;; Copyright © 2018 Charlie Ritter <chewzerita@posteo.net>
 ;;;
@@ -198,33 +198,12 @@ sans-serif designed for on-screen reading.  It is used by GNOME@tie{}3.")
     (name "font-lato")
     (version "2.010")
     (source (origin
-              (method url-fetch)
+              (method url-fetch/zipbomb)
               (uri (string-append "http://www.latofonts.com/download/Lato2OFL.zip"))
               (sha256
                (base32
                 "1f5540g0ja1nx3ddd3ywn77xc81ssrxpq8n3gyb9sabyq2b4xda2"))))
-    (build-system trivial-build-system)
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder (begin
-                   (use-modules (guix build utils)
-                                (srfi srfi-26))
-
-                   (let ((PATH     (string-append (assoc-ref %build-inputs
-                                                             "unzip")
-                                                  "/bin"))
-                         (font-dir (string-append %output
-                                                  "/share/fonts/truetype")))
-                     (setenv "PATH" PATH)
-                     (invoke "unzip" (assoc-ref %build-inputs "source"))
-
-                     (mkdir-p font-dir)
-                     (for-each (lambda (ttf)
-                                 (install-file ttf font-dir))
-                               (find-files "." "\\.ttf$"))
-                     #t))))
-
-    (native-inputs `(("unzip" ,unzip)))
+    (build-system font-build-system)
     (home-page "http://www.latofonts.com/lato-free-fonts/")
     (synopsis "Lato sans-serif typeface")
     (description
@@ -327,37 +306,24 @@ The Liberation Fonts are sponsored by Red Hat.")
               (sha256
                (base32
                 "0x7cz6hvhpil1rh03rax9zsfzm54bh7r4bbrq8rz673gl9h47v0v"))))
-    (build-system gnu-build-system)
+    (build-system font-build-system)
     (arguments
-     `(#:tests? #f ; there are no tests
-       #:modules ((guix build utils)
-                  (guix build gnu-build-system)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
+         (add-before 'install 'build
            (lambda _
              (let ((compile
                     (lambda (name ext)
-                      (zero? (system*
-                              "fontforge" "-lang=ff"
-                              "-c" (string-append "Open('" name "');"
-                                                  "Generate('"
-                                                  (basename name "sfd") ext
-                                                  "')"))))))
-               (every (lambda (name)
-                        (and (compile name "ttf")
-                             (compile name "otf")))
-                      (find-files "." "\\.sfd$")))))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((font-dir (string-append (assoc-ref outputs "out")
-                                            "/share/fonts/truetype")))
-               (mkdir-p font-dir)
-               (for-each (cut install-file <> font-dir)
-                         (find-files "." "\\.(otf|ttf)$"))
+                      (invoke
+                       "fontforge" "-lang=ff"
+                       "-c" (string-append "Open('" name "');"
+                                           "Generate('"
+                                           (basename name "sfd") ext
+                                           "')")))))
+               (for-each (lambda (name)
+                           (and (compile name "ttf")
+                                (compile name "otf")))
+                         (find-files "." "\\.sfd$"))
                #t))))))
     (native-inputs
      `(("fontforge" ,fontforge)))
@@ -1226,62 +1192,40 @@ It comes in 7 incremental weights:
 ExtraLight, Light, Book, Medium, Semibold, Bold & ExtraBold")
     (license license:silofl1.1)))
 
-(define-public culmus
+(define-public font-culmus
   (package
-    (name "culmus")
+    (name "font-culmus")
     (version "0.132")
     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://sourceforge.net/projects/"
-                            "culmus/files/culmus/" version "/culmus-src-"
-                            version ".tar.gz"))
-        (sha256
-         (base32
-          "1djxalm26r7bcq33ckmfa15xfs6pmqzvcl64d5lqa1dl01bl4j4z"))))
-    (build-system gnu-build-system)
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://sourceforge.net/projects/"
+                           "culmus/files/culmus/" version "/culmus-src-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1djxalm26r7bcq33ckmfa15xfs6pmqzvcl64d5lqa1dl01bl4j4z"))))
+    (build-system font-build-system)
     (arguments
-     `(#:tests? #f ; no tests
-       #:modules ((guix build utils)
-                  (guix build gnu-build-system)
-                  (srfi srfi-1)
-                  (srfi srfi-26))
-       #:phases
+     `(#:phases
        (modify-phases %standard-phases
-         (delete 'configure)
-         (replace 'build
+         (add-before 'install 'build
            (lambda _
              (let ((compile
                     (lambda (name ext)
-                      (zero? (system*
-                              "fontforge" "-lang=ff"
-                              "-c" (string-append "Open('" name "');"
-                                                  "Generate('"
-                                                  (basename name "sfd") ext
-                                                  "')"))))))
+                      (invoke
+                       "fontforge" "-lang=ff"
+                       "-c" (string-append "Open('" name "');"
+                                           "Generate('"
+                                           (basename name "sfd") ext
+                                           "')")))))
                ;; This part based on the fonts shipped in the non-source package.
-               (every (lambda (name)
-                        (compile name "ttf"))
-                      (find-files "." "^[^Nachlieli].*\\.sfd$"))
-               (every (lambda (name)
-                        (compile name "otf"))
-                      (find-files "." "^Nachlieli.*\\.sfd$"))
-               #t)))
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out     (assoc-ref %outputs "out"))
-                    (ttf     (string-append out "/share/fonts/truetype"))
-                    (otf     (string-append out "/share/fonts/opentype"))
-                    (license (string-append out "/share/doc/" ,name)))
-               (for-each (lambda (file)
-                           (install-file file ttf))
-                         (find-files "." "\\.ttf$"))
-               (for-each (lambda (file)
-                           (install-file file otf))
-                         (find-files "." "\\.otf$"))
-               (for-each (lambda (file)
-                           (install-file file license))
-                         '("GNU-GPL" "LICENSE" "LICENSE-BITSTREAM"))
+               (for-each (lambda (name)
+                           (compile name "ttf"))
+                         (find-files "." "^[^Nachlieli].*\\.sfd$"))
+               (for-each (lambda (name)
+                           (compile name "otf"))
+                         (find-files "." "^Nachlieli.*\\.sfd$"))
                #t))))))
     (native-inputs
      `(("fontforge" ,fontforge)))
@@ -1293,3 +1237,24 @@ serif (Nachlieli) and monospaced (Miriam Mono) trivials.  Also included Miriam,
 Drugulin, Aharoni, David, Hadasim etc.  Cantillation marks support is
 available in Keter YG.")
     (license license:gpl2))) ; consult the LICENSE file included
+
+(define-public font-lohit
+  (package
+    (name "font-lohit")
+    (version "20140220")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://releases.pagure.org/lohit/lohit-ttf-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1rmgr445hw1n851ywy28csfvswz1i6hnc8mzp88qw2xk9j4dn32d"))))
+    (build-system font-build-system)
+    (home-page "https://pagure.io/lohit")
+    (synopsis "Lohit TrueType Indic fonts")
+    (description "Lohit is a font family designed to cover Indic scripts.
+Lohit supports the Assamese, Bengali, Devanagari (Hindi, Kashmiri, Konkani,
+Maithili, Marathi, Nepali, Sindhi, Santali, Bodo, Dogri languages), Gujarati,
+Kannada, Malayalam, Manipuri, Oriya, Punjabi, Tamil and Telugu scripts.")
+    (license license:silofl1.1)))
diff --git a/gnu/packages/fribidi.scm b/gnu/packages/fribidi.scm
index c8a91be4ef..0368779240 100644
--- a/gnu/packages/fribidi.scm
+++ b/gnu/packages/fribidi.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Marek Benc <merkur32@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,7 +27,7 @@
 (define-public fribidi
   (package
     (name "fribidi")
-    (version "1.0.1")
+    (version "1.0.2")
     (source
       (origin
         (method url-fetch)
@@ -35,9 +36,11 @@
                         "/download/v" version "/fribidi-" version
                          ".tar.bz2"))
         (sha256
-          (base32 "1r3ll7apx4b8bhvdkwi71y06df9kvr4q3asvajswvdlh0pbq5cf1"))))
-
+          (base32 "0aw3i1g96axbr96flw4543dvhb8zlgb0w8314ks6cq2g1i9invdx"))))
     (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "--disable-docs")))        ; TODO: enable; requires c2man
     (synopsis "Implementation of the Unicode bidirectional algorithm")
     (description
      "GNU FriBidi is an implementation of the Unicode Bidirectional
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index 22e5c918ee..58f707fc48 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -206,7 +206,7 @@ output.
 (define-public filezilla
   (package
     (name "filezilla")
-    (version "3.29.0")
+    (version "3.31.0")
     (source
      (origin
        (method url-fetch)
@@ -215,7 +215,7 @@ output.
                            "/FileZilla_" version "_src" ".tar.bz2"))
        (sha256
         (base32
-         "0najf2w6p5j4qc8jmglx6j63mph749s5p90lz2nkmwwwy5sfvlga"))))
+         "1rfysb8dil35a7bzj2kw0mzzkys39d7yn6ipsbk8l6rkwfvnii8l"))))
     (build-system gnu-build-system)
     (arguments
       ;; Don't let filezilla phone home to check for updates.
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 485f356495..5e4a179bd1 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -24,7 +24,7 @@
 ;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
 ;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
 ;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -4781,7 +4781,7 @@ You can save humanity and get programming skills!")
 (define-public gzdoom
   (package
     (name "gzdoom")
-    (version "3.2.5")
+    (version "3.3.0")
     (source (origin
               (method url-fetch)
               (uri
@@ -4789,7 +4789,7 @@ You can save humanity and get programming skills!")
                               version ".zip"))
               (sha256
                (base32
-                "1164d1zf5in98gp4j981ml3hwmks3q7vzfanlqpjlx2c09jmlv0q"))
+                "09a4kx3ry8pc9r578m7yprwa7zsdqxjpn10lyc92r5g9sx4l1m1a"))
               (patches (search-patches "gzdoom-search-in-installed-share.patch"))
               (modules '((guix build utils)))
               (snippet
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index b16e1f91b3..cb7d6c8c5b 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -725,7 +725,7 @@ forgotten when the session ends.")
 (define-public evince
   (package
     (name "evince")
-    (version "3.26.0")
+    (version "3.28.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/" name "/"
@@ -733,7 +733,7 @@ forgotten when the session ends.")
                                  name "-" version ".tar.xz"))
              (sha256
               (base32
-               "1n69lkiagx2x8lrdbvdlz6c051cvzhma73b3ggnw7w1wfkdpnmkr"))))
+               "1a3kcls18dcz1lj8hrx8skcli9xxfyi71c17xjwayh71cm5jc8zs"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:configure-flags '("--disable-nautilus")
@@ -772,6 +772,11 @@ forgotten when the session ends.")
        ("dconf" ,dconf)
        ("libcanberra" ,libcanberra)
        ("libsecret" ,libsecret)
+
+       ;; XXX: 'libarchive.pc' adds '-lnettle' so Nettle should really be
+       ;; propagated from there.
+       ("nettle" ,nettle)
+
        ;; For tests.
        ("dogtail" ,python2-dogtail)))
     (native-inputs
@@ -3127,7 +3132,7 @@ playlists in a variety of formats.")
 (define-public aisleriot
   (package
     (name "aisleriot")
-    (version "3.22.4")
+    (version "3.22.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3135,7 +3140,7 @@ playlists in a variety of formats.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1yrldsf73rd5p51dsxgbx1hmrakq0x0jc2kl6y6pgaviswxfx3gy"))))
+                "0rl39psr5xi584310pyrgw36ini4wn7yr2m1q5118w3a3v1dkhzh"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      '(#:configure-flags
@@ -3347,7 +3352,7 @@ presentations, kiosk style applications and so on.")
 (define-public clutter-gst
   (package
     (name "clutter-gst")
-    (version "3.0.24")
+    (version "3.0.26")
     (source
      (origin
        (method url-fetch)
@@ -3356,7 +3361,7 @@ presentations, kiosk style applications and so on.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0v6cg0syh4vx7y7ni47jsvr2r57q0j3h1f1gjlp0ciscixywiwg9"))))
+         "0fnblqm4igdx4rn3681bp1gm1y2i00if3iblhlm0zv6ck9nqlqfq"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("glib:bin" ,glib "bin")     ; for glib-mkenums
@@ -3482,7 +3487,7 @@ GNOME Games, but it may be used by others.")
 (define-public gnome-klotski
   (package
     (name "gnome-klotski")
-    (version "3.22.2")
+    (version "3.22.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3490,7 +3495,7 @@ GNOME Games, but it may be used by others.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "16hd6yk01rhb4pj8m01fyn72wykf41d72gsms81q0n4zm5bm1a4h"))))
+                "0prc0s28pdflgzyvk1g0yfx982q2grivmz3858nwpqmbkha81r7f"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("desktop-file-utils" ,desktop-file-utils)
@@ -4357,7 +4362,7 @@ wraps things up in a developer-friendly way.")
 (define-public libgee
   (package
     (name "libgee")
-    (version "0.20.0")
+    (version "0.20.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -4365,7 +4370,7 @@ wraps things up in a developer-friendly way.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1fy24dr8imrjlmsqj1syn0gi139gba6hwk3j5vd6sr3pxniqnc11"))))
+                "0c26x8gi3ivmhlbqcmiag4jwrkvcy28ld24j55nqr3jikb904a5v"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -4394,7 +4399,7 @@ classes for commonly used data structures.")
 (define-public gexiv2
   (package
     (name "gexiv2")
-    (version "0.10.7")
+    (version "0.10.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -4402,7 +4407,7 @@ classes for commonly used data structures.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1f7312zygw77ml37i5qilhfvmjm59dn753ax71rcb2jm1p76vgcb"))))
+                "0088m7p044n741ly1m6i7w25z513h9wpgyw0rmx5f0sy3vyjiic1"))))
     (build-system meson-build-system)
     (native-inputs
      `(("glib" ,glib "bin")
@@ -5659,7 +5664,7 @@ as SASL, TLS and VeNCrypt.  Additionally it supports encoding extensions.")
 (define-public gnome-autoar
   (package
     (name "gnome-autoar")
-    (version "0.2.2")
+    (version "0.2.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -5667,7 +5672,7 @@ as SASL, TLS and VeNCrypt.  Additionally it supports encoding extensions.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0qnafiwgajsaryh669lfclb4f6z5n1r9r4zhig1ha0ykxq32rzp1"))))
+                "02i4zgqqqj56h7bcys6dz7n78m4nj2x4dv1ggjmnrk98n06xpsax"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("gnome-common" ,gnome-common)
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 82e01eccad..94908a7248 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -569,7 +569,7 @@ signing, decryption, verification, and key-listing parsing.")
 (define-public pius
   (package
    (name "pius")
-   (version "2.2.4")
+   (version "2.2.6")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -577,7 +577,7 @@ signing, decryption, verification, and key-listing parsing.")
                   version "/pius-" version ".tar.bz2"))
             (sha256
              (base32
-              "0lgc0ipwdfqbq16zax8kn17wbv8xyw4ygc09fawl2yp459z0ql4n"))))
+              "1893hzpx3zv724drqv48csrn0cm98xw4ymb1zmhs2jvjj1778zfj"))))
    (build-system python-build-system)
    (inputs `(("perl" ,perl)                ;for 'pius-party-worksheet'
              ("gpg" ,gnupg)))
@@ -934,7 +934,7 @@ over.")
 (define-public jetring
   (package
     (name "jetring")
-    (version "0.25")
+    (version "0.27")
     (source
       (origin
         (method url-fetch)
@@ -942,7 +942,7 @@ over.")
                             name "_" version ".tar.xz"))
         (sha256
          (base32
-          "0shcnnw0h31b08vmnvf18ni33dg40w18wv9smb69vkklz3h4jhpw"))))
+          "0jy0x5zj7v87xgyldlsx1knzp0mv10wzamblrw1b61i2m1ii4pxz"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index b80e6e3eaf..b4789d687e 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -457,7 +457,8 @@ security standards.")
         (mozilla-patch "icecat-CVE-2018-5125-pt9.patch"  "8a16f439117c" "108iarql6z7h1r4rlzac6n6lrzs78x7kcdbfa0b5dbr5xc66jmgb")
         (mozilla-patch "icecat-bug-1426603.patch"        "ca0b92ecedee" "0dc3mdl4a3hrq4j384zjavf3splj6blv4masign710hk7svlgbhq")
         (mozilla-patch "icecat-CVE-2018-5146.patch"      "494e5d5278ba" "1yb4lxjw499ppwhk31vz0vzl0cfqvj9d4jwqag7ayj53ybwsqgjr")
-        (mozilla-patch "icecat-CVE-2018-5147.patch"      "5cd5586a2f48" "10s774pwvj6xfk3kk6ivnhp2acc8x9sqq6na8z47nkhgwl2712i5")))
+        (mozilla-patch "icecat-CVE-2018-5147.patch"      "5cd5586a2f48" "10s774pwvj6xfk3kk6ivnhp2acc8x9sqq6na8z47nkhgwl2712i5")
+        (mozilla-patch "icecat-CVE-2018-5148.patch"      "c3e447e07077" "0gmwy631f8ip4gr1mpbjk8bx1n1748wdls5zq4y8hpmpnq5g1wyx")))
       (modules '((guix build utils)))
       (snippet
        '(begin
diff --git a/gnu/packages/graph.scm b/gnu/packages/graph.scm
index 38924e42b2..74fbe9e84e 100644
--- a/gnu/packages/graph.scm
+++ b/gnu/packages/graph.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -207,14 +208,14 @@ lines.")
 (define-public python-plotly
   (package
     (name "python-plotly")
-    (version "2.4.0")
+    (version "2.4.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "plotly" version))
         (sha256
          (base32
-          "0n18116jz6bl5n9cq23vabv1gcbh1x3yficdnfq55v0z4cwy0zlf"))))
+          "0s9gk2fl53x8wwncs3fwii1vzfngr0sskv15v3mpshqmrqfrk27m"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; The tests are not distributed in the release
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index 5f236498b8..35ea129326 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -115,13 +115,13 @@ interfaces for other technical domains.")
 (define-public python-graphviz
   (package
     (name "python-graphviz")
-    (version "0.8.1")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "graphviz" version ".zip"))
               (sha256
                (base32
-                "00rzqsmq25b0say05vix5xivchdvsv83jl2i8pkryqd0nz4bxzvb"))))
+                "148h7ln8z65c1723w9vpx8khkvl9iigh8csv0qd4pidc53042rv0"))))
     (build-system python-build-system)
     (native-inputs
      `(("unzip" ,unzip)))
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 2fc667b805..145d343805 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -1572,6 +1572,8 @@ glass artworks done by Venicians glass blowers.")
        ("gobject-introspection" ,gobject-introspection)
        ("gtk+" ,gtk+)
        ("pango" ,pango)))
+    (propagated-inputs
+     `(("enchant" ,enchant))) ; gtkspell3-3.0.pc refers to it.
     (home-page "http://gtkspell.sourceforge.net")
     (synopsis "Spell-checking addon for GTK's TextView widget")
     (description
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 6244274d72..a9c0a21fce 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -36,7 +36,6 @@
 (define-module (gnu packages guile)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
-  #:use-module (gnu packages admin) ;;for tree
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bdw-gc)
diff --git a/gnu/packages/haskell-crypto.scm b/gnu/packages/haskell-crypto.scm
index ae69cfe3a1..e4d4e56388 100644
--- a/gnu/packages/haskell-crypto.scm
+++ b/gnu/packages/haskell-crypto.scm
@@ -257,7 +257,7 @@ the C implementation.")
 (define-public ghc-cryptonite
   (package
     (name "ghc-cryptonite")
-    (version "0.20")
+    (version "0.25")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -265,10 +265,11 @@ the C implementation.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0m63np0affci7ba9mrkvw2flzxn0s2mk930xldc4dwijw32gl6r6"))))
+                "131wbbdr5yavs5k1ah9sz6fqx1ffyvaxf66pwjzsfc47mwc1mgl9"))))
     (build-system haskell-build-system)
     (inputs
-     `(("ghc-memory" ,ghc-memory)
+     `(("ghc-basement" ,ghc-basement)
+       ("ghc-memory" ,ghc-memory)
        ("ghc-byteable" ,ghc-byteable)))
     (native-inputs
      `(("ghc-tasty" ,ghc-tasty)
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 1c8dab9633..b6f8addf8e 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -1082,7 +1082,7 @@ specify refactorings without depending on GHC.")
 (define-public hlint
   (package
     (name "hlint")
-    (version "2.1")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
@@ -1091,7 +1091,7 @@ specify refactorings without depending on GHC.")
              "/" name "-" version ".tar.gz"))
        (sha256
         (base32
-         "13chm0dhh1fn2iy3flnh7ahc3yzh8q0v10qxwd1739sywhykayg9"))))
+         "0mmfavd158l5ig5wb1b1zbhbraj8hhqvbk4mg85n6c8ndpr4grd4"))))
     (build-system haskell-build-system)
     (inputs
      `(("cpphs" ,cpphs)
@@ -5840,15 +5840,18 @@ Damerau-Levenshtein algorithms.")
 (define-public ghc-memory
   (package
     (name "ghc-memory")
-    (version "0.13")
+    (version "0.14.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "memory/memory-" version ".tar.gz"))
               (sha256
                (base32
-                "02l742qxjqy3jw1a347gb7sn7pn7a5qha1vzi2qqbvgafcjn0wyw"))))
+                "03rbszi5d4z9rlbfv8ydrl1xf84xsh8z57g07f7j9qccn9587c3v"))))
     (build-system haskell-build-system)
+    (inputs
+     `(("ghc-basement" ,ghc-basement)
+       ("ghc-foundation" ,ghc-foundation)))
     (native-inputs
      `(("ghc-tasty" ,ghc-tasty)
        ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
@@ -6457,39 +6460,6 @@ constant-time:
 data quickly and efficiently, using the ByteString type.")
     (license license:bsd-3)))
 
-(define-public ghc-binary
-  (package
-    (name "ghc-binary")
-    (version "0.8.5.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/binary/binary-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "15h5zqfw7xmcimvlq6bs8f20vxlfvz7g411fns5z7212crlimffy"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:configure-flags (list "--allow-newer=QuickCheck")))
-    (native-inputs
-     `(("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-hunit" ,ghc-hunit)))
-    (home-page "https://github.com/kolmodin/binary")
-    (synopsis
-     "Binary serialisation for Haskell values using lazy ByteStrings")
-    (description
-     "Efficient, pure binary serialisation using lazy ByteStrings.  Haskell values
-may be encoded to and from binary formats, written to disk as binary, or sent over
-the network.  The format used can be automatically generated, or you can choose to
-implement a custom format if needed.  Serialisation speeds of over 1 G\\/sec have
-been observed, so this library should be suitable for high performance scenarios.")
-    (license license:bsd-3)))
-
 (define-public ghc-data-ordlist
   (package
     (name "ghc-data-ordlist")
@@ -6510,34 +6480,6 @@ been observed, so this library should be suitable for high performance scenarios
      "This module provides set and multiset operations on ordered lists.")
     (license license:bsd-3)))
 
-(define-public ghc-haskeline
-  (package
-    (name "ghc-haskeline")
-    (version "0.7.4.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/haskeline/haskeline-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1sxhdhy9asinxn0gvd4zandbk6xkb04vy1y7lmh66f9jv66fqhsm"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:configure-flags (list "-fterminfo")))
-    (inputs
-     `(("ncurses" ,ncurses)
-       ("ghc-stm" ,ghc-stm)))
-    (home-page "https://github.com/judah/haskeline")
-    (synopsis "Command-line interface for user input")
-    (description
-     "Haskeline provides a user interface for line input in command-line
-programs.  This library is similar in purpose to readline, but since it
-is written in Haskell it is (hopefully) more easily used in other Haskell
-programs.")
-    (license license:bsd-3)))
-
 (define-public ghc-regex-applicative
   (package
     (name "ghc-regex-applicative")
@@ -6689,8 +6631,7 @@ this problem.")
      `(("ghc-bytestring-handle" ,ghc-bytestring-handle)
        ("ghc-quickcheck" ,ghc-quickcheck)
        ("ghc-tasty" ,ghc-tasty)
-       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
-       ("ghc-array" ,ghc-array)))
+       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)))
     (home-page "https://hackage.haskell.org/package/tar")
     (synopsis "Reading, writing and manipulating \".tar\" archive files")
     (description
@@ -6703,48 +6644,6 @@ preserved.  It also provides features for random access to archive content using
 an index.")
     (license license:bsd-3)))
 
-(define-public ghc-transformers
-  (package
-    (name "ghc-transformers")
-    (version "0.5.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/transformers/transformers-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "1qkhi8ssf8c4jnmrw9dzym3igqbzq7h48iisaykdfzdsm09qfh3c"))))
-    (build-system haskell-build-system)
-    (home-page "https://hackage.haskell.org/package/transformers")
-    (synopsis "Concrete functor and monad transformers")
-    (description
-     "A portable library of functor and monad transformers, inspired by the paper
-'Functional Programming with Overloading and Higher-Order Polymorphism',
-by Mark P Jones.  This package contains the monad transformer class and IO monad class,
-concrete functor and monad transformers, each with associated operations and functions
-to lift operations associated with other transformers.  The package can be used on
-its own in portable Haskell code, in which case operations need to be manually lifted
-through transformer stacks.  Alternatively, it can be used with the
-non-portable monad classes in the @code{mtl} or @code{monads-tf} packages,
-which automatically lift operations introduced by monad transformers through
-other transformers.")
-    (license license:bsd-3)))
-
-;; darcs-2.12.0 requires transformers-0.4.2.0
-(define-public ghc-transformers-0.4.2.0
-  (package
-    (inherit ghc-transformers)
-    (version "0.4.2.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://hackage.haskell.org/package/transformers/"
-                                  "transformers-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0a364zfcm17mhpy0c4ms2j88sys4yvgd6071qsgk93la2wjm8mkr"))))))
-
 (define-public ghc-stmonadtrans
   (package
     (name "ghc-stmonadtrans")
@@ -6836,44 +6735,6 @@ Polymorphism', by Mark P Jones.  This package is almost a compatible replacement
 the @code{mtl-tf} package.")
     (license license:bsd-3)))
 
-;; Do not use this.  Bytestring is a standard library and always included.
-(define-public ghc-bytestring
-  (package
-    (name "ghc-bytestring")
-    (version "0.10.8.2")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/bytestring/bytestring-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0fjc5ybxx67l0kh27l6vq4saf88hp1wnssj5ka90ii588y76cvys"))))
-    (build-system haskell-build-system)
-    (inputs
-     `(("ghc-dlist" ,ghc-dlist)
-       ("ghc-byteorder" ,ghc-byteorder)
-       ("ghc-hunit" ,ghc-hunit)
-       ("ghc-mtl" ,ghc-mtl)
-       ("ghc-quickcheck" ,ghc-quickcheck)
-       ("ghc-random" ,ghc-random)
-       ("ghc-test-framework" ,ghc-test-framework)
-       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
-       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)))
-    (arguments
-     `(#:tests? #f)) ; Test number two becomes non-responsive for 20+ minutes
-    (home-page "https://github.com/haskell/bytestring")
-    (synopsis "Fast, compact, strict and lazy byte strings with a list interface")
-    (description
-     "An efficient compact, immutable byte string type (both strict and lazy)
-suitable for binary or 8-bit character data.  The 'ByteString' type represents
-sequences of bytes or 8-bit characters.  It is suitable for high performance use,
-both in terms of large data quantities, or high speed requirements.  The 'ByteString'
-functions follow the same style as ordinary lists, so it is easy to convert code
-from using 'String' to 'ByteString'.")
-    (license license:bsd-3)))
-
 (define-public ghc-colour
 (package
   (name "ghc-colour")
@@ -6896,57 +6757,6 @@ Colours can be blended and composed.  Various colour spaces are
 supported.  A module of colour names (\"Data.Colour.Names\") is provided.")
   (license license:expat)))
 
-;; Do not use this as an input.  It is part of GHC.
-(define-public ghc-directory
-  (package
-    (name "ghc-directory")
-    (version "1.3.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/directory/directory-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0ffhanigxrx5wpin8l0wfp7d24lpgsjwj0hxrfp8bpy2wj1snxny"))))
-    (build-system haskell-build-system)
-    (home-page "https://hackage.haskell.org/package/directory")
-    (synopsis "Platform-agnostic library for file system operations")
-    (description
-     "This library provides a basic set of operations for manipulating
-files and directories in a portable way.")
-    (license license:bsd-3)))
-
-;; Do not use this as an input.  It is part of GHC.
-(define-public ghc-process
-  (package
-    (name "ghc-process")
-    (version "1.6.3.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/process/process-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0lxkl0gmyy2sn3r9c7dyz8vz1cm6nvygmgrizilliir5bp42m8cc"))))
-    (build-system haskell-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-reference-to-/bin/sh
-           (lambda _
-             (substitute* "System/Process/Posix.hs"
-               (("/bin/sh") (which "sh")))
-             #t)))))
-    (home-page "https://hackage.haskell.org/package/process")
-    (synopsis "System process libraries")
-    (description
-     "This package contains libraries for dealing with system processes.")
-    (license license:bsd-3)))
-
 (define-public ghc-wl-pprint-text
   (package
     (name "ghc-wl-pprint-text")
@@ -7042,29 +6852,6 @@ and edge labels with positional information, etc.
 @end enumerate\n")
     (license license:bsd-3)))
 
-(define-public ghc-array
-  (package
-    (name "ghc-array")
-    (version "0.5.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://hackage.haskell.org/package/array/array-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "12v83s2imxb3p2crnlzrpjh0nk6lpysw9bdk9yahs6f37csa5jaj"))))
-    (build-system haskell-build-system)
-    (home-page
-     "https://hackage.haskell.org/package/array")
-    (synopsis "Mutable and immutable arrays")
-    (description
-     "In addition to providing the @code{Data.Array} module, this package also defines
-the classes @code{IArray} of immutable arrays and @code{MArray} of arrays mutable
-within appropriate monads, as well as some instances of these classes.")
-    (license license:bsd-3)))
-
 (define-public ghc-constraints
   (package
     (name "ghc-constraints")
@@ -7896,7 +7683,6 @@ files in Haskell.")
     (inputs
      `(("ghc-mtl" ,ghc-mtl)
        ("ghc-network" ,ghc-network)
-       ("ghc-directory" ,ghc-directory)
        ("ghc-old-locale" ,ghc-old-locale)))
     (native-inputs
      `(("ghc-hunit" ,ghc-hunit)))
@@ -9025,4 +8811,58 @@ Haskell programmers.  The ultimate goal is to support all Amazon
 Web Services.")
     (license license:bsd-3)))
 
+(define-public ghc-basement
+  (package
+    (name "ghc-basement")
+    (version "0.0.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "basement/basement-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0w2g4k9bs2ph00p0fgrmcrng8ypdz6xis0r10g380nzkg2rvj0dm"))))
+    (build-system haskell-build-system)
+    (home-page "https://github.com/haskell-foundation/foundation")
+    (synopsis "Basic primitives for Foundation starter pack")
+    (description
+     "This package contains basic primitives for the Foundation set of
+packages.")
+    (license license:bsd-3)))
+
+(define-public ghc-foundation
+  (package
+    (name "ghc-foundation")
+    (version "0.0.20")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "foundation/foundation-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0bg4g0xf4pb2vmahnfp8c4f0a3v0av73lb5g8bwnp170khxfcsms"))))
+    (build-system haskell-build-system)
+    (inputs `(("ghc-basement" ,ghc-basement)))
+    (home-page "https://github.com/haskell-foundation/foundation")
+    (synopsis "Alternative prelude with batteries and no dependencies")
+    (description
+     "This package provides a custom prelude with no dependencies apart from
+the base package.
+
+Foundation has the following goals:
+
+@enumerate
+@item provide a base like sets of modules that provide a consistent set of
+   features and bugfixes across multiple versions of GHC (unlike base).
+@item provide a better and more efficient prelude than base's prelude.
+@item be self-sufficient: no external dependencies apart from base;
+@item provide better data-types: packed unicode string by default, arrays;
+@item Numerical classes that better represent mathematical things (no more
+   all-in-one @code{Num});
+@item I/O system with less lazy IO.
+@end enumerate\n")
+    (license license:bsd-3)))
+
 ;;; haskell.scm ends here
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 7e7e7e3812..ae7ae0f519 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
@@ -105,7 +105,7 @@ actions.")
 (define-public geeqie
   (package
     (name "geeqie")
-    (version "1.3")
+    (version "1.4")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/BestImageViewer/geeqie/"
@@ -113,7 +113,7 @@ actions.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0gzc82sy66pbsmq7lnmq4y37zqad1zfwfls3ik3dmfm8s5nmcvsb"))))
+               "0ciygvcxb78pqg59r6p061mkbpvkgv2rv3r79j3kgv3kalb3ln2w"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Enable support for a "map" pane using GPS data.
@@ -123,7 +123,18 @@ actions.")
        (modify-phases %standard-phases
          (add-after 'unpack 'autogen
            (lambda _
+             (define (write-dummy-changelog port)
+               (display "See Git history for a change log.\n" port))
+
              (setenv "NOCONFIGURE" "true")
+
+             ;; Create ChangeLog{,.html} to placate the makefile, which would
+             ;; otherwise require access to the Git repo.
+             (call-with-output-file "ChangeLog"
+               write-dummy-changelog)
+             (call-with-output-file "ChangeLog.html"
+               write-dummy-changelog)
+
              (zero? (system* "sh" "autogen.sh")))))))
     (inputs
      `(("clutter" ,clutter)
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index f94c384d7d..5249d3bb89 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -79,24 +79,25 @@
 ;;;
 
 ;; The Java bootstrap begins with Jikes, a Java compiler written in C++.  We
-;; use it to build the SableVM standard library and virtual machine, which are
-;; written in a simpler dialect of Java and C, respectively.  This is
-;; sufficient to build an older version of Ant, which is needed to build an
-;; older version of ECJ, an incremental Java compiler, both of which are
-;; written in Java.
+;; use it to build a simple version of GNU Classpath, the Java standard
+;; library.  We chose version 0.93 because it is the last version that can be
+;; built with Jikes.  With Jikes and this version of GNU Classpath we can
+;; build JamVM, a Java Virtual Machine.  We build version 1.5.1 because it is
+;; the last version of JamVM that works with a version of GNU classpath that
+;; does not require ECJ.  These three packages make up the bootstrap JDK.
+
+;; This is sufficient to build an older version of Ant, which is needed to
+;; build an older version of ECJ, an incremental Java compiler, both of which
+;; are written in Java.
 ;;
-;; ECJ is needed to build the latest release of GNU Classpath (0.99).
-;; Classpath (> 0.98) is a requirement for JamVM, a more modern implementation
-;; of the Java virtual machine.
-;;
-;; With JamVM we can build the latest development version of GNU Classpath,
-;; which has much more support for Java 1.6 than the latest release.  Since
-;; the previous build of JamVM is limited by the use of GNU Classpath 0.99 we
-;; rebuild it with the latest development version of GNU Classpath.
-;;
-;; Finally, we use the bootstrap toolchain to build the OpenJDK with the
-;; Icedtea 1.x build framework.  We then build the more recent JDKs Icedtea
-;; 2.x and Icedtea 3.x.
+;; ECJ is needed to build the latest release (0.99) and the development
+;; version of GNU Classpath.  The development version of GNU Classpath has
+;; much more support for Java 1.6 than the latest release, but we need to
+;; build 0.99 first to get a working version of javah.  ECJ, the development
+;; version of GNU Classpath, and the latest version of JamVM make up the
+;; second stage JDK with which we can build the OpenJDK with the Icedtea 1.x
+;; build framework.  We then build the more recent JDKs Icedtea 2.x and
+;; Icedtea 3.x.
 
 (define jikes
   (package
@@ -117,114 +118,88 @@ defined in The Java Language Specification into the bytecoded instruction set
 and binary format defined in The Java Virtual Machine Specification.")
     (license license:ibmpl1.0)))
 
-(define sablevm-classpath
+;; This is the last version of GNU Classpath that can be built without ECJ.
+(define classpath-bootstrap
   (package
-    (name "sablevm-classpath")
-    (version "1.13")
+    (name "classpath")
+    (version "0.93")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/sablevm/sablevm/"
-                                  version "/sablevm-classpath-" version ".tar.gz"))
+              (uri (string-append "mirror://gnu/classpath/classpath-"
+                                  version ".tar.gz"))
               (sha256
                (base32
-                "1qyhyfz8idghxdam16hdgpa24r2x4xbg9z8c8asa3chnd79h3zw2"))))
+                "0i99wf9xd3hw1sj2sazychb9prx8nadxh2clgvk3zlmb28v0jbfz"))
+              (patches (search-patches "classpath-aarch64-support.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       (list "--with-jikes"
+       (list (string-append "JAVAC="
+                            (assoc-ref %build-inputs "jikes")
+                            "/bin/jikes")
              "--disable-Werror"
              "--disable-gmp"
              "--disable-gtk-peer"
+             "--disable-gconf-peer"
              "--disable-plugin"
              "--disable-dssi"
              "--disable-alsa"
-             "--disable-gjdoc")))
-    (inputs
-     `(("gconf" ,gconf)
-       ("gtk+" ,gtk+-2)))
+             "--disable-gjdoc")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-data
+           (lambda _ (zero? (system* "make" "install-data")))))))
     (native-inputs
      `(("jikes" ,jikes)
        ("fastjar" ,fastjar)
+       ("libltdl" ,libltdl)
        ("pkg-config" ,pkg-config)))
-    (home-page "http://sablevm.org/")
-    (synopsis "Java Virtual Machine")
-    (description "SableVM is a clean-room, highly portable and efficient Java
-virtual machine.  Its goals are to be reasonably small, fast, and compliant
-with the various specifications (JVM specification, JNI, invocation interface,
-etc.).  SableVM is no longer maintained.
-
-This package provides the classpath library.")
-    (license license:lgpl2.1+)))
+    (home-page "https://www.gnu.org/software/classpath/")
+    (synopsis "Essential libraries for Java")
+    (description "GNU Classpath is a project to create core class libraries
+for use with runtimes, compilers and tools for the Java programming
+language.")
+    ;; GPLv2 or later, with special linking exception.
+    (license license:gpl2+)))
 
-(define sablevm
+;; This is the last version of JamVM that works with a version of GNU
+;; classpath that does not require ECJ.
+(define jamvm-1-bootstrap
   (package
-    (name "sablevm")
-    (version "1.13")
+    (name "jamvm")
+    (version "1.5.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/sablevm/sablevm/"
-                                  version "/sablevm-" version ".tar.gz"))
+              (uri (string-append "mirror://sourceforge/jamvm/jamvm/"
+                                  "JamVM%20" version "/jamvm-"
+                                  version ".tar.gz"))
               (sha256
                (base32
-                "1jyg4bsym6igz94wps5443c7wiwlzinqzkchcw972nz4kf1cql6g"))))
+                "06lhi03l3b0h48pc7x58bk9my2nrcf1flpmglvys3wyad6yraf36"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       (list "--with-threading=switch" ; slower but prevents segfault
-             "--with-internal-libffi=no"
-             "--with-internal-libpopt=no")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'remove-timestamp-for-reproducibility
-           (lambda _
-             (substitute* "src/sablevm/Makefile.in"
-               (("\\$\\(SVMCOMPILETIME\\)") "(unknown)"))
-             #t))
-         (add-after 'unpack 'link-with-popt
-           (lambda _
-             (substitute* "src/sablevm/Makefile.in"
-               (("\\$\\(SVMADD\\)" match)
-                (string-append match " -lpopt")))
-             #t))
-         (add-after 'unpack 'patch-path-to-classpath
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "Makefile.in"
-               (("@datadir@/sablevm-classpath")
-                (string-append (assoc-ref inputs "classpath")
-                               "/share/sablevm-classpath")))
-             (substitute* "src/libsablevm/Makefile.in"
-               (("\\$\\(libdir\\)/sablevm-classpath")
-                (string-append (assoc-ref inputs "classpath")
-                               "/lib/sablevm-classpath"))
-               (("\\$\\(datadir\\)/sablevm-classpath")
-                (string-append (assoc-ref inputs "classpath")
-                               "/share/sablevm-classpath")))
-             #t)))))
+       (list (string-append "--with-classpath-install-dir="
+                            (assoc-ref %build-inputs "classpath")))))
     (inputs
-     `(("classpath" ,sablevm-classpath)
+     `(("classpath" ,classpath-bootstrap)
        ("jikes" ,jikes)
-       ("zlib" ,zlib)
-       ("popt" ,popt)
-       ("libffi" ,libffi)))
-    (native-inputs
-     `(("libltdl" ,libltdl)))
-    (home-page "http://sablevm.org/")
-    (synopsis "Java Virtual Machine")
-    (description "SableVM is a clean-room, highly portable and efficient Java
-virtual machine.  Its goals are to be reasonably small, fast, and compliant
-with the various specifications (JVM specification, JNI, invocation interface,
-etc.).  SableVM is no longer maintained.
-
-This package provides the virtual machine.")
-    (license license:lgpl2.1+)))
+       ("zlib" ,zlib)))
+    (home-page "http://jamvm.sourceforge.net/")
+    (synopsis "Small Java Virtual Machine")
+    (description "JamVM is a Java Virtual Machine conforming to the JVM
+specification edition 2 (blue book).  It is extremely small.  However, unlike
+other small VMs it supports the full spec, including object finalisation and
+JNI.")
+    (license license:gpl2+)))
 
 (define ant-bootstrap
   (package
     (name "ant-bootstrap")
     ;; The 1.10.x series requires Java 8.  1.9.0 and later use generics, which
     ;; are not supported.  The 1.8.x series is the last to use only features
-    ;; supported by Jikes, but it cannot seem to be built with sablevm.
-    (version "1.7.1")
+    ;; supported by Jikes.
+    (version "1.8.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://archive.apache.org/dist/"
@@ -232,24 +207,31 @@ This package provides the virtual machine.")
                                   version "-src.tar.bz2"))
               (sha256
                (base32
-                "19pvqvgkxgpgsqm4lvbki5sm0z84kxmykdqicvfad47gc1r9mi2d"))))
+                "1cg0lga887qz5iizh6mlkxp01lciymrhmp7wzxpl6zpnldxmzrjx"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
        #:phases
        (modify-phases %standard-phases
+         (delete 'bootstrap)
          (delete 'configure)
          (replace 'build
            (lambda* (#:key inputs #:allow-other-keys)
-             (setenv "JAVA_HOME"
-                     (string-append (assoc-ref inputs "sablevm")
-                                    "/lib/sablevm"))
+             (setenv "JAVA_HOME" (assoc-ref inputs "jamvm"))
              (setenv "JAVACMD"
-                     (string-append (assoc-ref inputs "sablevm")
-                                    "/bin/java-sablevm"))
+                     (string-append (assoc-ref inputs "jamvm")
+                                    "/bin/jamvm"))
              (setenv "JAVAC"
-                     (string-append (assoc-ref inputs "sablevm")
-                                    "/bin/javac-sablevm"))
+                     (string-append (assoc-ref inputs "jikes")
+                                    "/bin/jikes"))
+             (setenv "CLASSPATH"
+                     (string-append (assoc-ref inputs "jamvm")
+                                    "/lib/rt.jar"))
+
+             ;; Ant complains if this file doesn't exist.
+             (setenv "HOME" "/tmp")
+             (with-output-to-file "/tmp/.ant.properties"
+               (lambda _ (display "")))
 
              ;; Use jikes instead of javac for <javac ...> tags in build.xml
              (setenv "ANT_OPTS" "-Dbuild.compiler=jikes")
@@ -258,6 +240,11 @@ This package provides the virtual machine.")
              ;; interesting, so we silence them.
              (setenv "$BOOTJAVAC_OPTS" "-nowarn")
 
+             ;; Without these JamVM options the build may freeze.
+             (substitute* "bootstrap.sh"
+               (("^\"\\$\\{JAVACMD\\}\" " m)
+                (string-append m "-Xnocompact -Xnoinlining ")))
+
              ;; Disable tests because we are bootstrapping and thus don't have
              ;; any of the dependencies required to build and run the tests.
              (substitute* "build.xml"
@@ -268,7 +255,7 @@ This package provides the virtual machine.")
          (delete 'install))))
     (native-inputs
      `(("jikes" ,jikes)
-       ("sablevm" ,sablevm)))
+       ("jamvm" ,jamvm-1-bootstrap)))
     (home-page "http://ant.apache.org")
     (synopsis "Build tool for Java")
     (description
@@ -307,9 +294,12 @@ build process and its dependencies, whereas Make uses Makefile format.")
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "CLASSPATH"
                      (string-join
-                      (find-files (string-append (assoc-ref inputs "ant-bootstrap")
-                                                 "/lib")
-                                  "\\.jar$")
+                      (cons (string-append (assoc-ref inputs "jamvm")
+                                           "/lib/rt.jar")
+                            (find-files (string-append
+                                         (assoc-ref inputs "ant-bootstrap")
+                                         "/lib")
+                                        "\\.jar$"))
                       ":"))
              #t))
          (replace 'build
@@ -324,7 +314,7 @@ build process and its dependencies, whereas Make uses Makefile format.")
 Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n")))
 
              ;; Compile it all!
-             (and (zero? (apply system* "javac-sablevm"
+             (and (zero? (apply system* "jikes"
                                 (find-files "." "\\.java$")))
                   (zero? (system* "fastjar" "cvfm"
                                   "ecj-bootstrap.jar" "manifest" ".")))))
@@ -338,7 +328,8 @@ Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n")))
     (native-inputs
      `(("ant-bootstrap" ,ant-bootstrap)
        ("unzip" ,unzip)
-       ("sablevm" ,sablevm)
+       ("jikes" ,jikes)
+       ("jamvm" ,jamvm-1-bootstrap)
        ("fastjar" ,fastjar)))
     (home-page "https://eclipse.org")
     (synopsis "Eclipse Java development tools core batch compiler")
@@ -355,7 +346,7 @@ requirement for all GNU Classpath releases after version 0.93.")
     (arguments
      `(#:modules ((guix build utils))
        #:builder
-       (let ((backend 'sablevm))
+       (begin
          (use-modules (guix build utils))
          (let* ((bin    (string-append (assoc-ref %outputs "out") "/bin"))
                 (target (string-append bin "/javac"))
@@ -363,24 +354,12 @@ requirement for all GNU Classpath releases after version 0.93.")
                                        "/bin/guile"))
                 (ecj    (string-append (assoc-ref %build-inputs "ecj-bootstrap")
                                        "/share/java/ecj-bootstrap.jar"))
-                (java   (case backend
-                          ((sablevm)
-                           (string-append (assoc-ref %build-inputs "sablevm")
-                                          "/lib/sablevm/bin/java"))
-                          ((jamvm)
-                           (string-append (assoc-ref %build-inputs "jamvm")
-                                          "/bin/jamvm"))))
-                (bootcp (case backend
-                          ((sablevm)
-                           (let ((jvmlib (string-append
-                                          (assoc-ref %build-inputs "sablevm-classpath")
-                                          "/lib/sablevm")))
-                             (string-append jvmlib "/jre/lib/rt.jar")))
-                          ((jamvm)
-                           (let ((jvmlib (string-append (assoc-ref %build-inputs "classpath")
-                                                        "/share/classpath")))
-                             (string-append jvmlib "/lib/glibj.zip:"
-                                            jvmlib "/lib/tools.zip"))))))
+                (java   (string-append (assoc-ref %build-inputs "jamvm")
+                                       "/bin/jamvm"))
+                (bootcp (let ((jvmlib (string-append (assoc-ref %build-inputs "classpath")
+                                                     "/share/classpath")))
+                          (string-append jvmlib "/glibj.zip:"
+                                         jvmlib "/tools.zip"))))
            (mkdir-p bin)
            (with-output-to-file target
              (lambda _
@@ -399,10 +378,11 @@ requirement for all GNU Classpath releases after version 0.93.")
                         (define (main args)
                           (let ((classpath (getenv "CLASSPATH")))
                             (setenv "CLASSPATH"
-                                    (string-append ,ecj
-                                                   (if classpath
-                                                       (string-append ":" classpath)
-                                                       ""))))
+                                    (string-join (list ,ecj
+                                                       ,(string-append (assoc-ref %build-inputs "jamvm")
+                                                                       "/lib/rt.jar")
+                                                       (or classpath ""))
+                                                 ":")))
                           (receive (vm-args other-args)
                               ;; Separate VM arguments from arguments to ECJ.
                               (partition (cut string-prefix? "-J" <>)
@@ -412,6 +392,7 @@ requirement for all GNU Classpath releases after version 0.93.")
                                                args defaults))
                             (apply system* ,java
                                    (append
+                                    (list "-Xnocompact" "-Xnoinlining")
                                     ;; Remove "-J" prefix
                                     (map (cut string-drop <> 2) vm-args)
                                     '("org.eclipse.jdt.internal.compiler.batch.Main")
@@ -426,20 +407,17 @@ requirement for all GNU Classpath releases after version 0.93.")
     (native-inputs
      `(("guile" ,guile-2.2)
        ("ecj-bootstrap" ,ecj-bootstrap)
-       ("sablevm" ,sablevm)
-       ("sablevm-classpath" ,sablevm-classpath)))
+       ("jamvm" ,jamvm-1-bootstrap)
+       ("classpath" ,classpath-bootstrap)))
     (description "This package provides a wrapper around the @dfn{Eclipse
 compiler for Java} (ecj) with a command line interface that is compatible with
 the standard javac executable.")))
 
-;; Note: All the tool wrappers (e.g. for javah, javac, etc) fail with
-;; java.lang.UnsupportedClassVersionError.  They simply won't run on the old
-;; sablevm.  We use Classpath 0.99 to build JamVM, on which the Classpath
-;; tools do run.  Using these Classpath tools on JamVM we can then build the
-;; development version of GNU Classpath.
-(define classpath-on-sablevm
-  (package
-    (name "classpath")
+;; The classpath-bootstrap was built without a virtual machine, so it does not
+;; provide a wrapper for javah.  We cannot build the development version of
+;; Classpath without javah.
+(define classpath-0.99
+  (package (inherit classpath-bootstrap)
     (version "0.99")
     (source (origin
               (method url-fetch)
@@ -447,8 +425,8 @@ the standard javac executable.")))
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1j7cby4k66f1nvckm48xcmh352b1d1b33qk7l6hi7dp9i9zjjagr"))))
-    (build-system gnu-build-system)
+                "1j7cby4k66f1nvckm48xcmh352b1d1b33qk7l6hi7dp9i9zjjagr"))
+              (patches (search-patches "classpath-aarch64-support.patch"))))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-ecj-jar="
@@ -458,8 +436,8 @@ the standard javac executable.")))
                             (assoc-ref %build-inputs "ecj-javac-wrapper")
                             "/bin/javac")
              (string-append "JAVA="
-                            (assoc-ref %build-inputs "sablevm")
-                            "/bin/java-sablevm")
+                            (assoc-ref %build-inputs "jamvm")
+                            "/bin/jamvm")
              "GCJ_JAVAC_TRUE=no"
              "ac_cv_prog_java_works=yes"  ; trust me
              "--disable-Werror"
@@ -478,51 +456,15 @@ the standard javac executable.")))
      `(("ecj-bootstrap" ,ecj-bootstrap)
        ("ecj-javac-wrapper" ,ecj-javac-wrapper)
        ("fastjar" ,fastjar)
-       ("sablevm" ,sablevm)
-       ("sablevm-classpath" ,sablevm-classpath)
+       ("jamvm" ,jamvm-1-bootstrap)
+       ("classpath" ,classpath-bootstrap)
        ("libltdl" ,libltdl)
-       ("pkg-config" ,pkg-config)))
-    (home-page "https://www.gnu.org/software/classpath/")
-    (synopsis "Essential libraries for Java")
-    (description "GNU Classpath is a project to create core class libraries
-for use with runtimes, compilers and tools for the Java programming
-language.")
-    ;; GPLv2 or later, with special linking exception.
-    (license license:gpl2+)))
-
-(define jamvm-bootstrap
-  (package
-    (name "jamvm")
-    (version "2.0.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://sourceforge/jamvm/jamvm/"
-                                  "JamVM%20" version "/jamvm-"
-                                  version ".tar.gz"))
-              (sha256
-               (base32
-                "1nl0zxz8y5x8gwsrm7n32bry4dx8x70p8z3s9jbdvs8avyb8whkn"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:configure-flags
-       (list (string-append "--with-classpath-install-dir="
-                            (assoc-ref %build-inputs "classpath")))))
-    (inputs
-     `(("classpath" ,classpath-on-sablevm)
-       ("ecj-javac-wrapper" ,ecj-javac-wrapper)
-       ("zlib" ,zlib)))
-    (home-page "http://jamvm.sourceforge.net/")
-    (synopsis "Small Java Virtual Machine")
-    (description "JamVM is a Java Virtual Machine conforming to the JVM
-specification edition 2 (blue book).  It is extremely small.  However, unlike
-other small VMs it supports the full spec, including object finalisation and
-JNI.")
-    (license license:gpl2+)))
+       ("pkg-config" ,pkg-config)))))
 
-;; We need this because the tools provided by the latest release of GNU
-;; Classpath don't actually work with sablevm.
+;; We need this because classpath-bootstrap does not provide all of the tools
+;; we need to build classpath-devel.
 (define classpath-jamvm-wrappers
-  (package (inherit classpath-on-sablevm)
+  (package (inherit classpath-0.99)
     (name "classpath-jamvm-wrappers")
     (source #f)
     (build-system trivial-build-system)
@@ -541,7 +483,7 @@ JNI.")
                        (with-output-to-file (string-append bin tool)
                          (lambda _
                            (format #t "#!~a/bin/sh
-~a/bin/jamvm -classpath ~a/share/classpath/tools.zip \
+~a/bin/jamvm -Xnocompact -Xnoinlining -classpath ~a/share/classpath/tools.zip \
 gnu.classpath.tools.~a.~a $@"
                                    bash jamvm classpath tool
                                    (if (string=? "native2ascii" tool)
@@ -556,106 +498,20 @@ gnu.classpath.tools.~a.~a $@"
            #t))))
     (native-inputs
      `(("bash" ,bash)
-       ("jamvm" ,jamvm-bootstrap)
-       ("classpath" ,classpath-on-sablevm)))
+       ("jamvm" ,jamvm-1-bootstrap)
+       ("classpath" ,classpath-0.99)))
     (inputs '())
     (synopsis "Executables from GNU Classpath")
     (description "This package provides wrappers around the tools provided by
 the GNU Classpath library.  They are executed by the JamVM virtual
 machine.")))
 
-(define ecj-javac-on-jamvm-wrapper
-  (package (inherit ecj-javac-wrapper)
-    (name "ecj-javac-on-jamvm-wrapper")
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       ;; TODO: This builder is exactly the same as in ecj-javac-wrapper,
-       ;; except that the backend is 'jamvm here.  Can we reuse the same
-       ;; builder somehow?
-       (let ((backend 'jamvm))
-         (use-modules (guix build utils))
-         (let* ((bin    (string-append (assoc-ref %outputs "out") "/bin"))
-                (target (string-append bin "/javac"))
-                (guile  (string-append (assoc-ref %build-inputs "guile")
-                                       "/bin/guile"))
-                (ecj    (string-append (assoc-ref %build-inputs "ecj-bootstrap")
-                                       "/share/java/ecj-bootstrap.jar"))
-                (java   (case backend
-                          ((sablevm)
-                           (string-append (assoc-ref %build-inputs "sablevm")
-                                          "/lib/sablevm/bin/java"))
-                          ((jamvm)
-                           (string-append (assoc-ref %build-inputs "jamvm")
-                                          "/bin/jamvm"))))
-                (bootcp (case backend
-                          ((sablevm)
-                           (let ((jvmlib (string-append
-                                          (assoc-ref %build-inputs "sablevm-classpath")
-                                          "/lib/sablevm")))
-                             (string-append jvmlib "/jre/lib/rt.jar")))
-                          ((jamvm)
-                           (let ((jvmlib (string-append (assoc-ref %build-inputs "classpath")
-                                                        "/share/classpath")))
-                             (string-append jvmlib "/lib/glibj.zip:"
-                                            jvmlib "/lib/tools.zip"))))))
-           (mkdir-p bin)
-           (with-output-to-file target
-             (lambda _
-               (format #t "#!~a --no-auto-compile\n!#\n" guile)
-               (write
-                `(begin (use-modules (ice-9 match)
-                                     (ice-9 receive)
-                                     (ice-9 hash-table)
-                                     (srfi srfi-1)
-                                     (srfi srfi-26))
-                        (define defaults
-                          '(("-bootclasspath" ,bootcp)
-                            ("-source" "1.5")
-                            ("-target" "1.5")
-                            ("-cp"     ".")))
-                        (define (main args)
-                          (let ((classpath (getenv "CLASSPATH")))
-                            (setenv "CLASSPATH"
-                                    (string-append ,ecj
-                                                   (if classpath
-                                                       (string-append ":" classpath)
-                                                       ""))))
-                          (receive (vm-args other-args)
-                              ;; Separate VM arguments from arguments to ECJ.
-                              (partition (cut string-prefix? "-J" <>)
-                                         (fold (lambda (default acc)
-                                                 (if (member (first default) acc)
-                                                     acc (append default acc)))
-                                               args defaults))
-                            (apply system* ,java
-                                   (append
-                                    ;; Remove "-J" prefix
-                                    (map (cut string-drop <> 2) vm-args)
-                                    '("org.eclipse.jdt.internal.compiler.batch.Main")
-                                    (cons "-nowarn" other-args)))))
-                        ;; Entry point
-                        (let ((args (cdr (command-line))))
-                          (if (null? args)
-                              (format (current-error-port) "javac: no arguments given!\n")
-                              (main args)))))))
-           (chmod target #o755)
-           #t))))
-    (native-inputs
-     `(("guile" ,guile-2.2)
-       ("ecj-bootstrap" ,ecj-bootstrap)
-       ("jamvm" ,jamvm-bootstrap)
-       ("classpath" ,classpath-on-sablevm)))
-    (description "This package provides a wrapper around the @dfn{Eclipse
-compiler for Java} (ecj) with a command line interface that is compatible with
-the standard javac executable.  The tool runs on JamVM instead of SableVM.")))
-
 ;; The last release of GNU Classpath is 0.99 and it happened in 2012.  Since
 ;; then Classpath has gained much more support for Java 1.6.
 (define-public classpath-devel
   (let ((commit "e7c13ee0cf2005206fbec0eca677f8cf66d5a103")
         (revision "1"))
-    (package (inherit classpath-on-sablevm)
+    (package (inherit classpath-bootstrap)
       (version (string-append "0.99-" revision "." (string-take commit 9)))
       (source (origin
                 (method git-fetch)
@@ -713,21 +569,35 @@ the standard javac executable.  The tool runs on JamVM instead of SableVM.")))
          ("texinfo" ,texinfo)
          ("classpath-jamvm-wrappers" ,classpath-jamvm-wrappers) ; for javah
          ("ecj-bootstrap" ,ecj-bootstrap)
-         ("ecj-javac-wrapper" ,ecj-javac-on-jamvm-wrapper)
+         ("ecj-javac-wrapper" ,ecj-javac-wrapper)
          ("fastjar" ,fastjar)
-         ("jamvm" ,jamvm-bootstrap)
+         ("jamvm" ,jamvm-1-bootstrap)
          ("libltdl" ,libltdl)
          ("pkg-config" ,pkg-config))))))
 
-(define-public jamvm
-  (package (inherit jamvm-bootstrap)
+(define jamvm
+  (package (inherit jamvm-1-bootstrap)
+    (version "2.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/jamvm/jamvm/"
+                                  "JamVM%20" version "/jamvm-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1nl0zxz8y5x8gwsrm7n32bry4dx8x70p8z3s9jbdvs8avyb8whkn"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--with-classpath-install-dir="
+                            (assoc-ref %build-inputs "classpath")))))
     (inputs
      `(("classpath" ,classpath-devel)
-       ("ecj-javac-wrapper" ,ecj-javac-on-jamvm-wrapper)
+       ("ecj-javac-wrapper" ,ecj-javac-wrapper)
        ("zlib" ,zlib)))))
 
-(define ecj-javac-on-jamvm-wrapper-final
-  (package (inherit ecj-javac-on-jamvm-wrapper)
+(define ecj-javac-wrapper-final
+  (package (inherit ecj-javac-wrapper)
     (native-inputs
      `(("guile" ,guile-2.2)
        ("ecj-bootstrap" ,ecj-bootstrap)
@@ -735,9 +605,9 @@ the standard javac executable.  The tool runs on JamVM instead of SableVM.")))
        ("classpath" ,classpath-devel)))))
 
 ;; The bootstrap JDK consisting of jamvm, classpath-devel,
-;; ecj-javac-on-jamvm-wrapper-final cannot build Icedtea 2.x directly, because
-;; it's written in Java 7.  It can, however, build the unmaintained Icedtea
-;; 1.x, which uses Java 6 only.
+;; ecj-javac-wrapper-final cannot build Icedtea 2.x directly, because it's
+;; written in Java 7.  It can, however, build the unmaintained Icedtea 1.x,
+;; which uses Java 6 only.
 (define-public icedtea-6
   (package
     (name "icedtea")
@@ -826,7 +696,8 @@ the standard javac executable.  The tool runs on JamVM instead of SableVM.")))
                     #t))))
          (add-after 'unpack 'use-classpath
            (lambda* (#:key inputs #:allow-other-keys)
-             (let ((jvmlib (assoc-ref inputs "classpath")))
+             (let ((jvmlib (assoc-ref inputs "classpath"))
+                   (jamvm  (assoc-ref inputs "jamvm")))
                ;; Classpath does not provide rt.jar.
                (substitute* "Makefile.in"
                  (("\\$\\(SYSTEM_JDK_DIR\\)/jre/lib/rt.jar")
@@ -834,7 +705,8 @@ the standard javac executable.  The tool runs on JamVM instead of SableVM.")))
                ;; Make sure we can find all classes.
                (setenv "CLASSPATH"
                        (string-append jvmlib "/share/classpath/glibj.zip:"
-                                      jvmlib "/share/classpath/tools.zip"))
+                                      jvmlib "/share/classpath/tools.zip:"
+                                      jamvm  "/lib/rt.jar"))
                (setenv "JAVACFLAGS"
                        (string-append "-cp "
                                       jvmlib "/share/classpath/glibj.zip:"
@@ -971,7 +843,7 @@ the standard javac executable.  The tool runs on JamVM instead of SableVM.")))
        ("cpio" ,cpio)
        ("cups" ,cups)
        ("ecj" ,ecj-bootstrap)
-       ("ecj-javac" ,ecj-javac-on-jamvm-wrapper-final)
+       ("ecj-javac" ,ecj-javac-wrapper-final)
        ("fastjar" ,fastjar)
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
@@ -6919,7 +6791,7 @@ package contains utilities for obtaining services via the Java SE 6
 (define-public java-aqute-bnd-annotation
   (package
     (name "java-aqute-bnd-annotation")
-    (version "3.4.0")
+    (version "3.5.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/bndtools/bnd/archive/"
@@ -6927,7 +6799,7 @@ package contains utilities for obtaining services via the Java SE 6
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "09vgb6axikbz66zi9falijbnzh1qnp9ysfns123dmzdb01cbza9q"))))
+                "1ggyiq0as0f6cz333a0dh98j72kmvv5pf2s47v9554yh905lfqdl"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "java-aqute-bnd-annotation.jar"
diff --git a/gnu/packages/kde.scm b/gnu/packages/kde.scm
index 812f63cb45..686a505821 100644
--- a/gnu/packages/kde.scm
+++ b/gnu/packages/kde.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -236,7 +236,7 @@ plugins, as well as code to create plugins, or complete applications.")
 (define-public krita
   (package
     (name "krita")
-    (version "3.3.3")
+    (version "4.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -245,7 +245,7 @@ plugins, as well as code to create plugins, or complete applications.")
                     "/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0pc6hnakkqy81x5b5ncivaps6hqv43i50sjwgi3i3cz9j8rlxh5y"))))
+                "0dh3bm90mxrbyvdp7x7hcf5li48j7ppkb44lls65lpn6c59r5waz"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f
@@ -329,6 +329,23 @@ illustrators, matte and texture artists, and the VFX industry.  Notable
 features include brush stabilizers, brush engines and wrap-around mode.")
     (license license:gpl2+)))
 
+;; Krita 3 and 4's file formats are incompatible, so we are keeping Krita 3
+;; for now.
+(define-public krita-3
+  (package
+    (inherit krita)
+    (name "krita")
+    (version "3.3.3")
+    (source (origin
+              (inherit (package-source krita))
+              (uri (string-append
+                    "mirror://kde/stable/krita/"
+                    (version-prefix version 3)
+                    "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0pc6hnakkqy81x5b5ncivaps6hqv43i50sjwgi3i3cz9j8rlxh5y"))))))
+
 (define-public kholidays
   (package
     (name "kholidays")
@@ -367,7 +384,7 @@ other special events for a geographical region.")
 (define-public libkomparediff2
   (package
     (name "libkomparediff2")
-    (version "17.12.1")
+    (version "17.12.3")
     (source
       (origin
         (method url-fetch)
@@ -376,7 +393,7 @@ other special events for a geographical region.")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "0jd700pjw51vyan5d22k6j60jgb95pfn2nvwz2nfs2f4xlsly1hz"))))
+          "0w6p8lvm2rn7y4qz0x3s87lwh1758xnyhwkkkng55n8v9rpjjw7l"))))
     (native-inputs
      `(("extra-cmake-modules" ,extra-cmake-modules)
        ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/lego.scm b/gnu/packages/lego.scm
index d5e5de1c1f..3203e1c9b4 100644
--- a/gnu/packages/lego.scm
+++ b/gnu/packages/lego.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -72,7 +73,7 @@ restrictions that stem from limitations of the standard RCX firmware.")
 (define-public leocad
   (package
     (name "leocad")
-    (version "17.07")
+    (version "18.02")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/leozide/leocad/"
@@ -80,10 +81,10 @@ restrictions that stem from limitations of the standard RCX firmware.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "02gm4950zlmsw4sxmdwypgkybn51b02qnmmk6rzjdr8si4k6gikq"))))
+                "189wj221fn08bnsfwy8050bxkjgjwinkn19qdcvb6c2ry2lnfra9"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("qttools" ,qttools)))           ;for lrelease
+     `(("qttools" ,qttools)))           ; for lrelease
     (inputs
      `(("mesa" ,mesa)
        ("qtbase" ,qtbase)
@@ -95,12 +96,13 @@ restrictions that stem from limitations of the standard RCX firmware.")
          (replace 'configure
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system* "qmake"
-                               (string-append "INSTALL_PREFIX=" out)
-                               ;; Otherwise looks for lrelease-qt4
-                               "QMAKE_LRELEASE=lrelease"
-                               ;; Don't pester users about updates
-                               "DISABLE_UPDATE_CHECK=1")))))
+               (invoke "qmake"
+                       (string-append "INSTALL_PREFIX=" out)
+                       ;; Otherwise looks for lrelease-qt4.
+                       "QMAKE_LRELEASE=lrelease"
+                       ;; Don't pester users about updates.
+                       "DISABLE_UPDATE_CHECK=1")
+               #t)))
          (add-after 'configure 'reset-resource-timestamps
            (lambda _
              ;; The contents of build/release/.qrc/qrc_leocad.cpp generated by
@@ -113,8 +115,9 @@ restrictions that stem from limitations of the standard RCX firmware.")
                                   (src (string-append base ".ts"))
                                   (st (stat src)))
                              (set-file-time file st)))
-                         (find-files "." "leocad_.*\\.qm"))))))))
-    (home-page "http://www.leocad.org")
+                         (find-files "." "leocad_.*\\.qm")))
+             #t)))))
+    (home-page "https://www.leocad.org")
     (synopsis "Create virtual Lego models")
     (description
      "LeoCAD is a program for creating virtual LEGO models.  It has an
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index 8515edf925..0d54c305b2 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -152,13 +152,13 @@ conversions for values passed between the two languages.")
 (define-public ruby-ffi
   (package
     (name "ruby-ffi")
-    (version "1.9.22")
+    (version "1.9.23")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "ffi" version))
               (sha256
                (base32
-                "17lvnpmllg4mlzf25lxbmfzk4l6rsddlxwwdkbs4d9v5gv154529"))))
+                "0zw6pbyvmj8wafdc7l5h7w20zkp1vbr2805ql5d941g2b20pk4zr"))))
     (build-system ruby-build-system)
     ;; FIXME: Before running tests the build system attempts to build libffi
     ;; from sources.
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 922c82bcde..50f44b5d65 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
@@ -689,14 +689,14 @@ Zoner Draw version 4 and 5.")
 (define-public hunspell
   (package
     (name "hunspell")
-    (version "1.6.1")
+    (version "1.6.2")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "https://github.com/hunspell/hunspell/archive/v"
                           version ".tar.gz"))
       (sha256 (base32
-               "0j9c20sj7bgd6f77193g1ihy8w905byk2gdhdc0r9dsh7irr7x9h"))
+               "1i7lsv2cm0713ia3j5wjkcrhpfp3lqpjpwp4d3v18n7ycaqcxn9w"))
       (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -838,7 +838,7 @@ and to return information on pronunciations, meanings and synonyms.")
 (define-public libreoffice
   (package
     (name "libreoffice")
-    (version "5.4.5.1")
+    (version "5.4.6.2")
     (source
      (origin
       (method url-fetch)
@@ -846,8 +846,9 @@ and to return information on pronunciations, meanings and synonyms.")
         (string-append
           "https://download.documentfoundation.org/libreoffice/src/"
           (version-prefix version 3) "/libreoffice-" version ".tar.xz"))
-      (sha256 (base32
-               "167bh6jgyhfcvn3g7xghkg4nb99h91diypdlry5df21xs8bis5gb"))))
+      (sha256
+       (base32
+        "0icd8h221gp2dsbn6d35flwhqhcfpx66cjc5dg8yifhhvrfam74i"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index 7981a4f5cc..62c936c191 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -48,7 +48,7 @@
 (define-public libusb
   (package
     (name "libusb")
-    (version "1.0.21")
+    (version "1.0.22")
     (source
      (origin
       (method url-fetch)
@@ -56,7 +56,7 @@
                           "libusb-" version "/libusb-" version ".tar.bz2"))
       (sha256
        (base32
-        "0jw2n5kdnrqvp7zh792fd6mypzzfap6jp4gfcmq4n6c1kb79rkkx"))))
+        "0mw1a5ss4alg37m6bd4k44v35xwrcwp5qm4s686q1nsgkbavkbkm"))))
     (build-system gnu-build-system)
 
     ;; XXX: Enabling udev is now recommended, but eudev indirectly depends on
@@ -133,6 +133,13 @@ version of libusb to run with newer libusb.")
        `(#:tests? #f                    ; there are no tests
          #:phases
          (modify-phases %standard-phases
+           ;; FIXME: libusb 1.0.22 deprecated libusb_set_debug, so the build
+           ;; fails because libusb4java uses a deprecated procedure.
+           (add-after 'unpack 'disable-Werror
+             (lambda _
+               (substitute* "CMakeLists.txt"
+                 (("-Werror") ""))
+               #t))
            (add-before 'configure 'set-JAVA_HOME
              (lambda* (#:key inputs #:allow-other-keys)
                (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
@@ -252,14 +259,14 @@ implementing @code{javax.usb} (JSR-80).")
 (define-public libmtp
   (package
     (name "libmtp")
-    (version "1.1.14")
+    (version "1.1.15")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/libmtp/libmtp/" version
                                  "/libmtp-" version ".tar.gz"))
              (sha256
               (base32
-               "1s0jyhypxmj0j8s003ba1n74x63h1rw8am9q4z2ip3xyjvid65rq"))))
+               "089h79nkz7wcr3lbqi7025l8p75hbp0aigxk3wdk2zkm8q5r0h6h"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 33c90251af..a702e85f79 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -19,7 +19,7 @@
 ;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
 ;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
-;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.com>
 ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -383,8 +383,8 @@ It has been modified to remove all non-free binary blobs.")
 ;; supports qemu "virt" machine and possibly a large number of ARM boards.
 ;; See : https://wiki.debian.org/DebianKernel/ARMMP.
 
-(define %linux-libre-version "4.15.11")
-(define %linux-libre-hash "0nrsmw7x5nsc3906dfvfakkibv8pv09r1sf5ckzbkcbkwpyq62h8")
+(define %linux-libre-version "4.15.13")
+(define %linux-libre-hash "1z9f3m44n5w9ayad08h6nvx4nihc28h2jplk4jvyaj0460v8d11f")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -392,8 +392,8 @@ It has been modified to remove all non-free binary blobs.")
                     %linux-compatible-systems
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.14-version "4.14.28")
-(define %linux-libre-4.14-hash "0xg3zsm1yjsvxir8sz7zliz8gcc8d45xh23qyiszl75cfqjl36l3")
+(define %linux-libre-4.14-version "4.14.30")
+(define %linux-libre-4.14-hash "1j1vnr4397y4js7i24jdpfq85mc50b7kjz7gz1bbbrmda6cflwig")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -402,14 +402,14 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.88"
-                    "0qlhd8xw3g00i7krpfndkwxzjszk067h26qsxxsszvxyx2s6gp4x"
+  (make-linux-libre "4.9.90"
+                    "0mzy6wcxp9m9icb8mvsbywp1lrbvbv6n8rs3xszqm43dxy9zj1jd"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.122"
-                    "1ayilv7474vsif3jpb723jbcy4kymv1fpdr96c1g743bad1wkqqq"
+  (make-linux-libre "4.4.124"
+                    "1368x0wki8zhk0hwz36hrkp2lr2kbm9i0fwzws201h3y85mldgh4"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -3761,7 +3761,7 @@ developers.")
 (define-public radeontop
   (package
     (name "radeontop")
-    (version "1.0")
+    (version "1.1")
     (home-page "https://github.com/clbr/radeontop/")
     (source (origin
               (method url-fetch)
@@ -3769,7 +3769,7 @@ developers.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1z38nibirqxrbsfyhfcrnzlcw16cqjp4ds6qnjfxalwayf9fm5x9"))))
+                "1fv06j5c99imvzkac3j40lgjhr5b2i77fnyffhlvj92bli1fm1c6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 1ceb78c83e..258e9827a5 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -290,14 +290,6 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
                (("/bin/sh") "sh"))
              (substitute* '("src/clisp-link.in")
                (("/bin/pwd") "pwd"))
-             #t))
-         (add-after 'unpack 'remove-timestamps
-           (lambda _
-             (substitute* "src/constobj.d"
-               (("__DATE__ __TIME__") "\"1\""))
-             (substitute* "src/genclisph.d"
-               (("__DATE__") "\"1\"")
-               (("__TIME__") "\"1\""))
              #t)))
        ;; Makefiles seem to have race conditions.
        #:parallel-build? #f))
@@ -307,10 +299,7 @@ supporting ASDF, Sockets, Gray streams, MOP, and other useful components.")
      "GNU CLISP is an implementation of ANSI Common Lisp.  Common Lisp is a
 high-level, object-oriented functional programming language.  CLISP includes
 an interpreter, a compiler, a debugger, and much more.")
-    ;; Website says gpl2+, COPYRIGHT file says gpl2; actual source files have
-    ;; a lot of gpl3+.  (Also some parts are under non-copyleft licenses, such
-    ;; as CLX by Texas Instruments.)  In that case gpl3+ wins out.
-    (license license:gpl3+)))
+    (license license:gpl2+)))
 
 (define-public sbcl
   (package
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 7769ebf05a..a2f7b183d5 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -108,7 +108,7 @@
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages docbook)
   #:use-module ((guix licenses)
-                #:select (gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
+                #:select (fdl1.1+ gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
                            non-copyleft (expat . license:expat) bsd-3
                            public-domain bsd-4 isc (openssl . license:openssl)
                            bsd-2 x11-style agpl3 asl2.0 perl-license))
@@ -298,7 +298,7 @@ operating systems.")
 (define-public neomutt
   (package
     (name "neomutt")
-    (version "20180223")
+    (version "20180323")
     (source
      (origin
        (method url-fetch)
@@ -306,7 +306,7 @@ operating systems.")
                            "/archive/" name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1fr7158xhrhasylyxp709g9mdbggdmni3qn3baxvczfg2w003fhh"))))
+         "12v7zkm809cvjxfz0n7jb4qa410ns1ydyf0gjin99vbdrlj88jac"))))
     (build-system gnu-build-system)
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
@@ -621,6 +621,14 @@ security functionality including PGP, S/MIME, SSH, and SSL.")
                             "guile/mu/Makefile.in")
                (("share/guile/site/2.0/") "share/guile/site/2.2/"))
              #t))
+         (add-after 'patch-configure 'fix-date-tests
+           ;; Loosen test tolerances to prevent failures caused by daylight
+           ;; saving time (DST).  See: https://github.com/djcb/mu/issues/1214.
+           (lambda _
+             (substitute* "lib/parser/test-utils.cc"
+               (("\\* 60 \\* 60, 1 },")
+                "* 60 * 60, 3600 + 1 },"))
+             #t))
          (add-before 'install 'fix-ffi
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* "guile/mu.scm"
@@ -1183,7 +1191,7 @@ facilities for checking incoming mail.")
 (define-public dovecot
   (package
     (name "dovecot")
-    (version "2.3.0.1")
+    (version "2.3.1")
     (source
      (origin
        (method url-fetch)
@@ -1191,7 +1199,7 @@ facilities for checking incoming mail.")
                            (version-major+minor version) "/"
                            name "-" version ".tar.gz"))
        (sha256 (base32
-                "0lzisrdgrj5qqwjb7bv99mf2aljm568r6g108yisp0s644z2nxxb"))))
+                "14zva4f8k64x86sm9n21cp2yvrpph6k6k52bm22a00pxjwdq50q8"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -1208,20 +1216,23 @@ facilities for checking incoming mail.")
                   (add-before
                    'configure 'pre-configure
                    (lambda _
-                     ;; Simple hack to avoid installing in /etc
+                     ;; Simple hack to avoid installing in /etc.
                      (substitute* '("doc/Makefile.in"
                                     "doc/example-config/Makefile.in")
                        (("pkgsysconfdir = .*")
                         "pkgsysconfdir = /tmp/etc"))
                      #t))
                   (add-after
-                   'unpack 'patch-other-shebangs
+                   'unpack 'patch-other-file-names
                    (lambda _
                      (substitute*
-                       "src/lib-program-client/test-program-client-local.c"
+                         "src/lib-program-client/test-program-client-local.c"
+                       (("(/bin/| )cat") (which "cat"))
                        (("/bin/echo") (which "echo"))
-                       (("/bin/cat") (which "cat"))
-                       (("/bin/false") (which "false")))
+                       (("/bin/false") (which "false"))
+                       (("/bin/sh") (which "bash"))
+                       (("head") (which "head"))
+                       (("sleep") (which "sleep")))
                      #t)))))
     (home-page "https://www.dovecot.org")
     (synopsis "Secure POP3/IMAP server")
@@ -2326,7 +2337,7 @@ operators and scripters.")
 (define-public alpine
   (package
     (name "alpine")
-    (version "2.21")
+    (version "2.21.999")
     (source
      (origin
        (method url-fetch)
@@ -2334,11 +2345,12 @@ operators and scripters.")
        ;; patches and the version which adds extra fixes. Every distro uses
        ;; the patched version, and so do we to not break expectations.
        ;; http://alpine.freeiz.com/alpine/readme/README.patches
-       (uri (string-append "http://alpine.freeiz.com/alpine/patches/alpine-"
-                           version "/alpine-" version ".tar.xz"))
+       (uri (string-append "http://repo.or.cz/alpine.git/snapshot/"
+                           "349642a84039a4b026513c32a3b4f8594acd50df.tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1k9hcfjywfk3mpsl71hjza3nk6icgf1b6xxzgx10kdzg5yci5x5m"))))
+         "1rkvlfk3q7h9jcvaj91pk7l087bq4b38j30060jaw21zz94b90np"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (list "CC=gcc")
@@ -2376,7 +2388,7 @@ operators and scripters.")
        ("aspell" ,aspell)
        ("tcl" ,tcl)
        ("linux-pam" ,linux-pam)))
-    (home-page "http://alpine.freeiz.com/alpine/")
+    (home-page "http://repo.or.cz/alpine.git")
     (synopsis "Alternatively Licensed Program for Internet News and Email")
     (description
      "Alpine is a text-based mail and news client.  Alpine includes several
@@ -2467,3 +2479,51 @@ provides automatic tagging each time new mail is registered with notmuch.  It
 can add tags based on email headers or Maildir folders and can handle spam and
 killed threads.")
     (license isc)))
+
+(define-public pan
+  (package
+    (name "pan")
+    (version "0.144")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://pan.rebelbase.com/download/releases/"
+                           version "/source/" name "-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "0l07y75z8jxhbmfv28slw81gjncs7i89x7fq44zif7xhq5vy7yli"))))
+    (arguments
+     `(#:configure-flags '("--with-gtk3" "--with-gtkspell" "--with-gnutls"
+                           "--enable-libnotify" "--enable-manual"
+                           "--enable-gkr")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'patch-gpg2
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "pan/usenet-utils/gpg.cc"
+               (("\"gpg2\"") (string-append "\""
+                                            (assoc-ref inputs "gnupg")
+                                            "/bin/gpg\"")))
+             #t)))))
+    (inputs
+     `(("gmime" ,gmime)
+       ("gnupg" ,gnupg)
+       ("gnutls" ,gnutls)
+       ("gtk+" ,gtk+)
+       ("gtkspell3" ,gtkspell3)
+       ("libnotify" ,libnotify)
+       ("libsecret" ,libsecret)
+       ("libxml2" ,libxml2)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("gettext-minimal" ,gettext-minimal)
+       ("itstool" ,itstool)
+       ("pkg-config" ,pkg-config)))
+    (build-system gnu-build-system)
+    (home-page "http://pan.rebelbase.com/")
+    (synopsis "Pan newsreader")
+    (description "@code{pan} is a Usenet newsreader that's good at both text
+and binaries. It supports offline reading, scoring and killfiles, yEnc, NZB,
+PGP handling, multiple servers, and secure connections.")
+    ;; License of the docs: fdl-1.1; Others: gpl2.
+    (license (list fdl1.1+ gpl2))))
diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm
index c8db27899b..52df4c6967 100644
--- a/gnu/packages/mate.scm
+++ b/gnu/packages/mate.scm
@@ -154,7 +154,7 @@ from Mint-X-F and Faenza-Fresh icon packs.")
 (define-public mate-themes
   (package
     (name "mate-themes")
-    (version "3.22.14")
+    (version "3.22.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://pub.mate-desktop.org/releases/themes/"
@@ -162,7 +162,7 @@ from Mint-X-F and Faenza-Fresh icon packs.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "09fqvlnmrvc73arl7jv9ygkxi46lw7c1q8qra6w3ap7x83f9zdak"))))
+                "0cmlbj6vlkavdirc5xnsgwmy0m11bj9yrbv1dkq46n1s23rvv6wg"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index df32de1c08..ab3cd17d52 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -24,6 +24,7 @@
 ;;; Copyright © 2017 Dave Love <me@fx@gnu.org>
 ;;; Copyright © 2018 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
+;;; Copyright © 2018 Nadya Voronova <voronovank@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1265,7 +1266,7 @@ interfaces.")
 (define-public ceres
   (package
     (name "ceres-solver")
-    (version "1.13.0")
+    (version "1.14.0")
     (home-page "http://ceres-solver.org/")
     (source (origin
               (method url-fetch)
@@ -1273,7 +1274,7 @@ interfaces.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1kbxgab3q1vgyq7hjqasr1lji4b2sgn7ss351amklkb3jyhr1x0x"))))
+                "13lfxy8x58w8vprr0nkbzziaijlh0vvqshgahvcgw0mrqdgh0i27"))))
     (build-system cmake-build-system)
     (arguments
      ;; TODO: Build HTML user documentation and install separately.
@@ -2179,8 +2180,8 @@ implemented in ANSI C, and MPI for communications.")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "https://gforge.inria.fr/frs/download.php/34618/"
-                          "scotch_" version ".tar.gz"))
+      (uri (string-append "https://gforge.inria.fr/frs/download.php/"
+                          "latestfile/298/scotch_" version ".tar.gz"))
       (sha256
        (base32 "1ir088mvrqggyqdkx9qfynmiaffqbyih5qfl5mga2nrlm1qlsgzm"))
       (patches (search-patches "scotch-test-threading.patch"
@@ -2841,7 +2842,7 @@ access to BLIS implementations via traditional BLAS routine calls.")
 (define-public openlibm
   (package
     (name "openlibm")
-    (version "0.5.1")
+    (version "0.5.5")
     (source
      (origin
        (method url-fetch)
@@ -2850,7 +2851,7 @@ access to BLIS implementations via traditional BLAS routine calls.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "11czx2z7nh6dfpz45s3xl7v38hw36jxzxfvny454bk3if14pfakq"))))
+         "1z8cj5q8ca8kmrakwkpjxf8svi81waw0c568cx8v8pv9kvswbp07"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -3855,3 +3856,24 @@ routines designed for solving ODEs resulting from 1-D, 2-D and 3-D partial
 differential equations (PDE) that have been converted to ODEs by numerical
 differencing.")
     (license license:gpl2+)))
+
+(define-public tcalc
+  (package
+  (name "tcalc")
+  (version "2.0")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (string-append "https://sites.google.com/site/mohammedisam2000/tcalc/tcalc-"
+                            version ".tar.gz"))
+      (sha256
+        (base32
+          "0jq806m4dqfia85nppfm75mml9w57g0cgv4cdw9bp3zymda83s0m"))))
+  (build-system gnu-build-system)
+  (synopsis "The terminal calculator")
+  (description
+    "The terminal calculator is a small program to help users of the GNU/Linux
+terminal do calculations simply and quickly.  The formula to be calculated can
+be fed to @command{tcalc} through the command line.")
+  (home-page "https://sites.google.com/site/mohammedisam2000/tcalc")
+  (license license:gpl3+)))
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index eb1ab34aff..db5407e01f 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -1395,7 +1395,7 @@ manual SSL certificate verification.")
 (define-public libstrophe
   (package
     (name "libstrophe")
-    (version "0.9.1")
+    (version "0.9.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/strophe/libstrophe/archive/"
@@ -1403,7 +1403,7 @@ manual SSL certificate verification.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1hzwdax4nsz0fncf5bjfza0cn0lc6xsf38y569ql1gg5hvwr6169"))))
+                "0vxfcyfnhnlaj6spm2b0ljw5i3knbphy6mvzpl5zv9b52ny4b08m"))))
     (build-system gnu-build-system)
     (inputs
      `(("expat" ,expat)
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index 1b06de2360..ba06c2afb2 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -88,7 +88,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.20.17")
+    (version "0.20.18")
     (source (origin
               (method url-fetch)
               (uri
@@ -97,7 +97,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "1hfssmvp4wmy7zh4bl4zv2zqwiddsy77v69w9fh61pqrwbqfgc1c"))))
+                "0d6lz8ykyvxkl0fwnd9c5vzbbhmjh1yzv7rzhprlzfchmv12sn3a"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/mpi.scm b/gnu/packages/mpi.scm
index 442f7c5371..e4c1a491c3 100644
--- a/gnu/packages/mpi.scm
+++ b/gnu/packages/mpi.scm
@@ -47,7 +47,7 @@
   ;; to migrate to 2.0.
   (package
     (name "hwloc")
-    (version "1.11.8")
+    (version "1.11.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.open-mpi.org/software/hwloc/v"
@@ -55,7 +55,7 @@
                                   "/downloads/hwloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "0karxv4r1r8sa7ki5aamlxdvyvz0bvzq4gdhq0yi5nc4a0k11vzc"))))
+                "1ryibcng40xcq22lsj85fn2vcvrksdx9rr3wwxpq8dw37lw0is1b"))))
     (build-system gnu-build-system)
     (outputs '("out"           ;'lstopo' & co., depends on Cairo, libx11, etc.
                "lib"           ;small closure
@@ -117,7 +117,7 @@ bind processes, and much more.")
   ;; Note: 2.0 isn't the default yet, see above.
   (package
     (inherit hwloc)
-    (version "2.0.0")
+    (version "2.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.open-mpi.org/software/hwloc/v"
@@ -125,8 +125,7 @@ bind processes, and much more.")
                                   "/downloads/hwloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "021765f9y6pxcxrvfpzzwaig16ypfbph5xjpkd29qkhzs9r6zrcr"))
-              (patches (search-patches "hwloc-tests-without-sysfs.patch"))))
+                "0jf0krj1h95flmb784ifv9vnkdnajjz00p4zbhmja7vm4v67axdr"))))
 
     ;; libnuma is no longer needed.
     (inputs (alist-delete "numactl" (package-inputs hwloc)))))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 227ca50b3a..0fe1145512 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -1954,7 +1954,7 @@ capabilities, custom envelopes, effects, etc.")
 (define-public yoshimi
   (package
     (name "yoshimi")
-    (version "1.5.6")
+    (version "1.5.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/yoshimi/"
@@ -1962,7 +1962,7 @@ capabilities, custom envelopes, effects, etc.")
                                   "/yoshimi-" version ".tar.bz2"))
               (sha256
                (base32
-                "0bjfhfslpa2hjrc9h38m7dlr62953w9n4cvkgvfy495cbym12dak"))))
+                "1w916mmi6hh547a7icrgx6qr2kwxlxwlm6ampql427rshcz9r61k"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; there are no tests
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index 07c7ed36cb..6bb8c3f3ad 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -30,7 +30,7 @@
 (define-public nano
   (package
     (name "nano")
-    (version "2.9.4")
+    (version "2.9.5")
     (source
      (origin
       (method url-fetch)
@@ -38,7 +38,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "0nm3zy4azr5rkxjq7jfybbj3cnddmvxc49rxyqm9cp2zfdp75y9c"))))
+        "06af9dzhgab53drpyq430fv5kf5sdba9mfw0lf3glhkznlf1i3bv"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 82832a7fad..364ae2f64c 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1320,6 +1320,9 @@ handling for most notations in use for IPv4 and IPv6 addresses and
 networks.")
     (license license:bsd-3)))
 
+(define-public python2-ipy
+  (package-with-python2 python-ipy))
+
 (define-public speedtest-cli
   (package
     (name "speedtest-cli")
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 8daaf6de89..848399a8a1 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -43,14 +43,14 @@
 (define-public node
   (package
     (name "node")
-    (version "9.8.0")
+    (version "9.10.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://nodejs.org/dist/v" version
                                   "/node-v" version ".tar.gz"))
               (sha256
                (base32
-                "1mjr1rm5w26c0yb4zq6z5yv3zbvqk18lwbswhwn1sha8hapinjp8"))
+                "0xld7jh3fx85az7s5zbbsbccnfjwp99xxfn5w0gh2zfc5dalwrg5"))
               (modules '((guix build utils)))
               (snippet
                `(begin
diff --git a/gnu/packages/ntp.scm b/gnu/packages/ntp.scm
index 1c3b8cd313..28aabab740 100644
--- a/gnu/packages/ntp.scm
+++ b/gnu/packages/ntp.scm
@@ -39,7 +39,7 @@
 (define-public ntp
   (package
    (name "ntp")
-   (version "4.2.8p10")
+   (version "4.2.8p11")
    (source
      (origin
        (method url-fetch)
@@ -53,7 +53,7 @@
                     "/ntp-" version ".tar.gz")))
        (sha256
         (base32
-         "17xrk7gxrl3hgg0i73n8qm53knyh01lf0f3l1zx9x6r1cip3dlnx"))
+         "13i7rp1va29ffjdk08fvsfl6n47zzwsp147zhgb550k8agvkjjpi"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 5f67aa62aa..0fdad6a34f 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -3875,8 +3875,9 @@ cross-platform SDL C library.")
     (version "2.6.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://gforge.inria.fr/frs/download.php/file"
-                                  "/37054/flocq-" version ".tar.gz"))
+              ;; Use the ‘Latest version’ link for a stable URI across releases.
+              (uri (string-append "https://gforge.inria.fr/frs/download.php/"
+                                  "latestfile/2228/flocq-" version ".tar.gz"))
               (sha256
                (base32
                 "13fv150dcwnjrk00d7zj2c5x9jwmxgrq0ay440gkr730l8mvk3l3"))))
@@ -3894,18 +3895,22 @@ cross-platform SDL C library.")
          (add-before 'configure 'fix-remake
            (lambda _
              (substitute* "remake.cpp"
-               (("/bin/sh") (which "sh")))))
+               (("/bin/sh") (which "sh")))
+             #t))
          (replace 'build
            (lambda _
-             (zero? (system* "./remake"))))
+             (invoke "./remake")
+             #t))
          (replace 'check
            (lambda _
-             (zero? (system* "./remake" "check"))))
+             (invoke "./remake" "check")
+             #t))
              ;; TODO: requires coq-gappa and coq-interval.
-             ;(zero? (system* "./remake" "check-more"))))
+             ;(invoke "./remake" "check-more")
          (replace 'install
            (lambda _
-             (zero? (system* "./remake" "install")))))))
+             (invoke "./remake" "install")
+             #t)))))
     (home-page "http://flocq.gforge.inria.fr/")
     (synopsis "Floating-point formalization for the Coq system")
     (description "Flocq (Floats for Coq) is a floating-point formalization for
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index a1e3431145..4a70e2cf8b 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -257,6 +257,8 @@
          ;; Many tests rely on the 'guile-bootstrap' package, which is why we
          ;; have it here.
          ("boot-guile" ,(bootstrap-guile-origin (%current-system)))
+         ;; Some of the tests use "unshare" when it is available.
+         ("util-linux" ,util-linux)
          ,@(if (and (not (%current-target-system))
                     (string=? (%current-system) "x86_64-linux"))
                `(("boot-guile/i686" ,(bootstrap-guile-origin "i686-linux")))
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index c110fab086..66d9e933e7 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -47,7 +47,7 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20180222")
+    (version "20180322")
     (source
      (origin
       (method url-fetch)
@@ -55,7 +55,7 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1bwx1rcrqz04d8fajlllhrfkjqxg0mfvsd86wf6p067gmgdrf6g8"))))
+        "15v46pv4z98xm3fkwy7335faw4r7pilrxp4xis5a4zi4319sv2b3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/patches/classpath-aarch64-support.patch b/gnu/packages/patches/classpath-aarch64-support.patch
new file mode 100644
index 0000000000..6fdac0c4fb
--- /dev/null
+++ b/gnu/packages/patches/classpath-aarch64-support.patch
@@ -0,0 +1,29 @@
+This is modeled after the ia64 support. Aarch64 can be either big endian
+or little endian, so we add the case for both.
+
+---
+ native/fdlibm/ieeefp.h | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/native/fdlibm/ieeefp.h b/native/fdlibm/ieeefp.h
+index 1a9740f..73455c0 100644
+--- a/native/fdlibm/ieeefp.h
++++ b/native/fdlibm/ieeefp.h
+@@ -27,6 +27,14 @@
+ #endif
+ #endif
+ 
++#ifdef __aarch64__
++#ifdef __BIG_ENDIAN__
++#define __IEEE_BIG_ENDIAN
++#else
++#define __IEEE_LITTLE_ENDIAN
++#endif
++#endif
++
+ #ifdef __hppa__
+ #define __IEEE_BIG_ENDIAN
+ #endif
+-- 
+2.16.3
+
diff --git a/gnu/packages/patches/hwloc-tests-without-sysfs.patch b/gnu/packages/patches/hwloc-tests-without-sysfs.patch
deleted file mode 100644
index ea6ec41616..0000000000
--- a/gnu/packages/patches/hwloc-tests-without-sysfs.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-Fix a test failure in the build environment, where /sys is missing.
-From <https://github.com/bgoglin/hwloc/commit/a2cc4f2e2bf4a8bbdd61b578a62e27e7482799cf.patch>.
-
-From a2cc4f2e2bf4a8bbdd61b578a62e27e7482799cf Mon Sep 17 00:00:00 2001
-From: Brice Goglin <Brice.Goglin@inria.fr>
-Date: Tue, 6 Feb 2018 17:13:26 +0100
-Subject: [PATCH] linux: honor the filtering cores and packages when reading
- topology from cpuinfo
-
-Caused a make check crash in lstopo --filter all:none in chroot without sysfs.
-
-Thanks to Ludovic Courtes for the report.
-
-Signed-off-by: Brice Goglin <Brice.Goglin@inria.fr>
----
- hwloc/topology-linux.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/hwloc/topology-linux.c b/hwloc/topology-linux.c
-index 290da0d72..e1bbf94e1 100644
---- a/hwloc/topology-linux.c
-+++ b/hwloc/topology-linux.c
-@@ -4101,7 +4101,8 @@ look_cpuinfo(struct hwloc_topology *topology,
-     }
-   /* create package objects */
-   hwloc_debug("%u pkgs%s\n", numpkgs, missingpkg ? ", but some missing package" : "");
--  if (!missingpkg && numpkgs>0) {
-+  if (!missingpkg && numpkgs>0
-+      && hwloc_filter_check_keep_object_type(topology, HWLOC_OBJ_PACKAGE)) {
-     for (i = 0; i < numpkgs; i++) {
-       struct hwloc_obj *obj = hwloc_alloc_setup_object(topology, HWLOC_OBJ_PACKAGE, Lpkg_to_Ppkg[i]);
-       int doneinfos = 0;
-@@ -4145,7 +4146,8 @@ look_cpuinfo(struct hwloc_topology *topology,
-     }
-   /* create Core objects */
-   hwloc_debug("%u cores%s\n", numcores, missingcore ? ", but some missing core" : "");
--  if (!missingcore && numcores>0) {
-+  if (!missingcore && numcores>0
-+      && hwloc_filter_check_keep_object_type(topology, HWLOC_OBJ_CORE)) {
-     for (i = 0; i < numcores; i++) {
-       struct hwloc_obj *obj = hwloc_alloc_setup_object(topology, HWLOC_OBJ_CORE, Lcore_to_Pcore[i]);
-       obj->cpuset = hwloc_bitmap_alloc();
diff --git a/gnu/packages/patches/libusb-for-axoloti.patch b/gnu/packages/patches/libusb-for-axoloti.patch
index 2c07d767d9..76a45e801d 100644
--- a/gnu/packages/patches/libusb-for-axoloti.patch
+++ b/gnu/packages/patches/libusb-for-axoloti.patch
@@ -1,14 +1,14 @@
-diff -rp -u4 libusb-1.0.19-orig/libusb/descriptor.c libusb-1.0.19/libusb/descriptor.c
---- libusb-1.0.19-orig/libusb/descriptor.c	2015-05-12 00:15:19 +0200
-+++ libusb-1.0.19/libusb/descriptor.c	2015-05-12 00:17:09 +0200
-@@ -1181,9 +1181,9 @@ int API_EXPORTED libusb_get_string_descr
+diff -rpu4 libusb-1.0.22.orig/libusb/descriptor.c libusb-1.0.22/libusb/descriptor.c
+--- libusb-1.0.22.orig/libusb/descriptor.c	2018-03-17 08:23:37.000000000 +0100
++++ libusb-1.0.22/libusb/descriptor.c	2018-03-29 10:36:09.968429473 +0200
+@@ -1173,9 +1173,9 @@ int API_EXPORTED libusb_get_string_descr
  	if (tbuf[1] != LIBUSB_DT_STRING)
  		return LIBUSB_ERROR_IO;
  
  	if (tbuf[0] > r)
 -		return LIBUSB_ERROR_IO;
-+            tbuf[0] = r;
++		tbuf[0] = r;
  
- 	for (di = 0, si = 2; si < tbuf[0]; si += 2) {
+ 	di = 0;
+ 	for (si = 2; si < tbuf[0]; si += 2) {
  		if (di >= (length - 1))
- 			break;
diff --git a/gnu/packages/patches/links-CVE-2017-11114.patch b/gnu/packages/patches/links-CVE-2017-11114.patch
deleted file mode 100644
index c5ac9884b5..0000000000
--- a/gnu/packages/patches/links-CVE-2017-11114.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-Fix CVE-2017-11114:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-11114
-http://seclists.org/fulldisclosure/2017/Jul/76
-
-Patch copied from Debian:
-
-https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870299#12
-
-Origin: upstream, commit: fee5dca79a93a37024e494b985386a5fe60bc1b7
-Origin: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870299#12
-Author: Mikulas Patocka <mikulas@twibright.com>
-Date:   Wed Aug 2 20:13:29 2017 +0200
-Subject: Fix read out of memory in case of corrupted UTF-8 data
-
----
- charsets.c |   37 +------------------------------------
- links.h    |    9 ++++-----
- 2 files changed, 5 insertions(+), 41 deletions(-)
-
-Index: links-2.14/charsets.c
-===================================================================
---- links-2.14.orig/charsets.c
-+++ links-2.14/charsets.c
-@@ -215,41 +215,6 @@ static struct conv_table *get_translatio
- 	return utf_table;
- }
- 
--unsigned short int utf8_2_uni_table[0x200] = {
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 128,	0, 0, 0, 192,	0,
--	0, 0, 256,	0, 0, 0, 320,	0, 0, 0, 384,	0, 0, 0, 448,	0,
--	0, 0, 512,	0, 0, 0, 576,	0, 0, 0, 640,	0, 0, 0, 704,	0,
--	0, 0, 768,	0, 0, 0, 832,	0, 0, 0, 896,	0, 0, 0, 960,	0,
--	0, 0, 1024,	0, 0, 0, 1088,	0, 0, 0, 1152,	0, 0, 0, 1216,	0,
--	0, 0, 1280,	0, 0, 0, 1344,	0, 0, 0, 1408,	0, 0, 0, 1472,	0,
--	0, 0, 1536,	0, 0, 0, 1600,	0, 0, 0, 1664,	0, 0, 0, 1728,	0,
--	0, 0, 1792,	0, 0, 0, 1856,	0, 0, 0, 1920,	0, 0, 0, 1984,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--	0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0, 0, 0, 0,	0,
--};
--
- unsigned char utf_8_1[256] = {
- 	6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 	7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-@@ -269,7 +234,7 @@ unsigned char utf_8_1[256] = {
- 	3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 6, 6,
- };
- 
--static_const unsigned min_utf_8[9] = {
-+static_const unsigned min_utf_8[8] = {
- 	0, 0x4000000, 0x200000, 0x10000, 0x800, 0x80, 0x100, 0x1,
- };
- 
-Index: links-2.14/links.h
-===================================================================
---- links-2.14.orig/links.h
-+++ links-2.14/links.h
-@@ -3906,15 +3906,14 @@ unsigned char *cp_strchr(int charset, un
- void init_charset(void);
- 
- unsigned get_utf_8(unsigned char **p);
--extern unsigned short int utf8_2_uni_table[0x200];
- #define GET_UTF_8(s, c)							\
- do {									\
- 	if ((unsigned char)(s)[0] < 0x80)				\
- 		(c) = (s)++[0];						\
--	else if (((c) = utf8_2_uni_table[((unsigned char)(s)[0] << 2) +	\
--				((unsigned char)(s)[1] >> 6) - 0x200]))	\
--		(c) += (unsigned char)(s)[1] & 0x3f, (s) += 2;		\
--	else								\
-+	else if ((unsigned char)(s)[0] >= 0xc2 && (unsigned char)(s)[0] < 0xe0 &&\
-+	         ((unsigned char)(s)[1] & 0xc0) == 0x80) {		\
-+		(c) = (unsigned char)(s)[0] * 0x40 + (unsigned char)(s)[1], (c) -= 0x3080, (s) += 2;\
-+	} else								\
- 		(c) = get_utf_8(&(s));					\
- } while (0)
- #define FWD_UTF_8(s)							\
diff --git a/gnu/packages/patches/lyx-2.2.3-fix-test.patch b/gnu/packages/patches/lyx-2.2.3-fix-test.patch
new file mode 100644
index 0000000000..10b7d2a3a9
--- /dev/null
+++ b/gnu/packages/patches/lyx-2.2.3-fix-test.patch
@@ -0,0 +1,13 @@
+See https://www.lyx.org/trac/ticket/10800#comment:17
+diff --git a/src/tex2lyx/test/test-structure.lyx.lyx b/src/tex2lyx/test/test-structure.lyx.lyx
+index feff755cd2..2c7f2ace5c 100644
+--- a/src/tex2lyx/test/test-structure.lyx.lyx
++++ b/src/tex2lyx/test/test-structure.lyx.lyx
+@@ -212,7 +212,7 @@ This causes the
+ \begin_inset Flex Flex:Strong
+ status collapsed
+ 
+-\begin_layout Standard
++\begin_layout Plain Layout
+ logikalmkup
+ \end_layout
diff --git a/gnu/packages/patches/mupdf-CVE-2018-1000051.patch b/gnu/packages/patches/mupdf-CVE-2018-1000051.patch
new file mode 100644
index 0000000000..bb78c46f80
--- /dev/null
+++ b/gnu/packages/patches/mupdf-CVE-2018-1000051.patch
@@ -0,0 +1,88 @@
+Fix CVE-2018-1000051:
+
+https://bugs.ghostscript.com/show_bug.cgi?id=698873
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1000051
+
+Patch copied from upstream source repository:
+
+https://git.ghostscript.com/?p=mupdf.git;a=commit;h=321ba1de287016b0036bf4a56ce774ad11763384
+
+From 321ba1de287016b0036bf4a56ce774ad11763384 Mon Sep 17 00:00:00 2001
+From: Sebastian Rasmussen <sebras@gmail.com>
+Date: Tue, 19 Dec 2017 23:47:47 +0100
+Subject: [PATCH] Bug 698825: Do not drop borrowed colorspaces.
+
+Previously the borrowed colorspace was dropped when updating annotation
+appearances, leading to use after free warnings from valgrind/ASAN.
+---
+ source/pdf/pdf-appearance.c | 8 ++------
+ 1 file changed, 2 insertions(+), 6 deletions(-)
+
+diff --git a/source/pdf/pdf-appearance.c b/source/pdf/pdf-appearance.c
+index 70f684f4..d7a1dddd 100644
+--- a/source/pdf/pdf-appearance.c
++++ b/source/pdf/pdf-appearance.c
+@@ -2170,7 +2170,6 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p
+ 	fz_device *dev = NULL;
+ 	font_info font_rec;
+ 	fz_text *text = NULL;
+-	fz_colorspace *cs = NULL;
+ 	fz_matrix page_ctm;
+ 
+ 	pdf_page_transform(ctx, annot->page, NULL, &page_ctm);
+@@ -2184,11 +2183,11 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p
+ 	fz_var(dlist);
+ 	fz_var(dev);
+ 	fz_var(text);
+-	fz_var(cs);
+ 	fz_try(ctx)
+ 	{
+ 		char *contents = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_Contents));
+ 		char *da = pdf_to_str_buf(ctx, pdf_dict_get(ctx, obj, PDF_NAME_DA));
++		fz_colorspace *cs;
+ 		fz_point pos;
+ 		fz_rect rect;
+ 
+@@ -2223,7 +2222,6 @@ void pdf_update_free_text_annot_appearance(fz_context *ctx, pdf_document *doc, p
+ 		fz_drop_display_list(ctx, dlist);
+ 		font_info_fin(ctx, &font_rec);
+ 		fz_drop_text(ctx, text);
+-		fz_drop_colorspace(ctx, cs);
+ 	}
+ 	fz_catch(ctx)
+ 	{
+@@ -2359,7 +2357,6 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot
+ 	fz_device *dev = NULL;
+ 	font_info font_rec;
+ 	fz_text *text = NULL;
+-	fz_colorspace *cs = NULL;
+ 	fz_path *path = NULL;
+ 	fz_buffer *fzbuf = NULL;
+ 	fz_matrix page_ctm;
+@@ -2375,7 +2372,6 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot
+ 	fz_var(dlist);
+ 	fz_var(dev);
+ 	fz_var(text);
+-	fz_var(cs);
+ 	fz_var(fzbuf);
+ 	fz_try(ctx)
+ 	{
+@@ -2384,6 +2380,7 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot
+ 		fz_rect logo_bounds;
+ 		fz_matrix logo_tm;
+ 		fz_rect rect;
++		fz_colorspace *cs = fz_device_rgb(ctx); /* Borrowed reference */
+ 
+ 		pdf_to_rect(ctx, pdf_dict_get(ctx, annot->obj, PDF_NAME_Rect), &annot_rect);
+ 		rect = annot_rect;
+@@ -2396,7 +2393,6 @@ void pdf_set_signature_appearance(fz_context *ctx, pdf_document *doc, pdf_annot
+ 		fz_bound_path(ctx, path, NULL, &fz_identity, &logo_bounds);
+ 		center_rect_within_rect(&logo_bounds, &rect, &logo_tm);
+ 		fz_concat(&logo_tm, &logo_tm, &page_ctm);
+-		cs = fz_device_rgb(ctx); /* Borrowed reference */
+ 		fz_fill_path(ctx, dev, path, 0, &logo_tm, cs, logo_color, 1.0f, NULL);
+ 
+ 		get_font_info(ctx, doc, dr, da, &font_rec);
+-- 
+2.16.3
+
diff --git a/gnu/packages/patches/mupdf-CVE-2018-6544.patch b/gnu/packages/patches/mupdf-CVE-2018-6544.patch
new file mode 100644
index 0000000000..b2c8f849f3
--- /dev/null
+++ b/gnu/packages/patches/mupdf-CVE-2018-6544.patch
@@ -0,0 +1,109 @@
+Fix CVE-2018-6544:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6544
+https://bugs.ghostscript.com/show_bug.cgi?id=698830
+https://bugs.ghostscript.com/show_bug.cgi?id=698965 
+
+Patches copied from upstream source repository:
+
+https://git.ghostscript.com/?p=mupdf.git;h=26527eef77b3e51c2258c8e40845bfbc015e405d
+https://git.ghostscript.com/?p=mupdf.git;h=b03def134988da8c800adac1a38a41a1f09a1d89
+
+From b03def134988da8c800adac1a38a41a1f09a1d89 Mon Sep 17 00:00:00 2001
+From: Sebastian Rasmussen <sebras@gmail.com>
+Date: Thu, 1 Feb 2018 16:36:14 +0100
+Subject: [PATCH] Bug 698830: Avoid recursion when loading object streams
+ objects.
+
+If there were indirect references in the object stream dictionary and
+one of those indirect references referred to an object inside the object
+stream itself, mupdf would previously enter recursion only bounded by the
+exception stack. After this commit the object stream is checked if it is
+marked immediately after being loaded. If it is marked then we terminate
+the recursion at this point, if it is not marked then mark it and
+attempt to load the desired object within. We also take care to unmark
+the stream object when done or upon exception.
+---
+ source/pdf/pdf-xref.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
+index 723b543c..ed09094c 100644
+--- a/source/pdf/pdf-xref.c
++++ b/source/pdf/pdf-xref.c
+@@ -1576,6 +1576,19 @@ pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, pdf_lexbuf *buf, i
+ 	{
+ 		objstm = pdf_load_object(ctx, doc, num);
+ 
++		if (pdf_obj_marked(ctx, objstm))
++			fz_throw(ctx, FZ_ERROR_GENERIC, "recursive object stream lookup");
++	}
++	fz_catch(ctx)
++	{
++		pdf_drop_obj(ctx, objstm);
++		fz_rethrow(ctx);
++	}
++
++	fz_try(ctx)
++	{
++		pdf_mark_obj(ctx, objstm);
++
+ 		count = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_N));
+ 		first = pdf_to_int(ctx, pdf_dict_get(ctx, objstm, PDF_NAME_First));
+ 
+@@ -1655,6 +1668,7 @@ pdf_load_obj_stm(fz_context *ctx, pdf_document *doc, int num, pdf_lexbuf *buf, i
+ 		fz_drop_stream(ctx, stm);
+ 		fz_free(ctx, ofsbuf);
+ 		fz_free(ctx, numbuf);
++		pdf_unmark_obj(ctx, objstm);
+ 		pdf_drop_obj(ctx, objstm);
+ 	}
+ 	fz_catch(ctx)
+-- 
+2.16.3
+
+From 26527eef77b3e51c2258c8e40845bfbc015e405d Mon Sep 17 00:00:00 2001
+From: Sebastian Rasmussen <sebras@gmail.com>
+Date: Mon, 29 Jan 2018 02:00:48 +0100
+Subject: [PATCH] Bug 698830: Don't drop unkept stream if running out of error
+ stack.
+
+Under normal conditions where fz_keep_stream() is called inside
+fz_try() we may call fz_drop_stream() in fz_catch() upon exceptions.
+The issue comes when fz_keep_stream() has not yet been called but is
+dropped in fz_catch(). This happens in the PDF from the bug when
+fz_try() runs out of exception stack, and next the code in fz_catch()
+runs, dropping the caller's reference to the filter chain stream!
+
+The simplest way of fixing this it to always keep the filter chain
+stream before fz_try() is called. That way fz_catch() may drop the
+stream whether an exception has occurred or if the fz_try() ran out of
+exception stack.
+---
+ source/pdf/pdf-stream.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/source/pdf/pdf-stream.c b/source/pdf/pdf-stream.c
+index c89da5c4..c6ba7ad3 100644
+--- a/source/pdf/pdf-stream.c
++++ b/source/pdf/pdf-stream.c
+@@ -303,14 +303,13 @@ pdf_open_raw_filter(fz_context *ctx, fz_stream *chain, pdf_document *doc, pdf_ob
+ 		*orig_gen = 0;
+ 	}
+ 
+-	fz_var(chain);
++	chain = fz_keep_stream(ctx, chain);
+ 
+ 	fz_try(ctx)
+ 	{
+ 		len = pdf_to_int(ctx, pdf_dict_get(ctx, stmobj, PDF_NAME_Length));
+ 
+-		/* don't close chain when we close this filter */
+-		chain2 = fz_keep_stream(ctx, chain);
++		chain2 = chain;
+ 		chain = NULL;
+ 		chain = fz_open_null(ctx, chain2, len, offset);
+ 
+-- 
+2.16.3
+
diff --git a/gnu/packages/patches/shepherd-close-fds.patch b/gnu/packages/patches/shepherd-close-fds.patch
deleted file mode 100644
index 2078b15265..0000000000
--- a/gnu/packages/patches/shepherd-close-fds.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-commit 3e346a2a84b099766ea8a3a4a4549f6172483062
-Author: Ludovic Courtès <ludo@gnu.org>
-Date:   Sun Dec 3 22:30:03 2017 +0100
-
-    service: In 'exec-command', close open ports before 'execl'.
-    
-    This gets rid of annoying "Bad file descriptor" warnings from shepherd.
-    
-    * modules/shepherd/service.scm (exec-command): In 'loop', invoke
-    'close-port' and the ports returned by (fdes->ports i).
-
-diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
-index b2d8bc5..0ad28a0 100644
---- a/modules/shepherd/service.scm
-+++ b/modules/shepherd/service.scm
-@@ -1,5 +1,5 @@
- ;; service.scm -- Representation of services.
--;; Copyright (C) 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
-+;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
- ;; Copyright (C) 2002, 2003 Wolfgang Järling <wolfgang@pro-linux.de>
- ;; Copyright (C) 2014 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
- ;; Copyright (C) 2016 Alex Kost <alezost@gmail.com>
-@@ -744,6 +744,14 @@ false."
- 
-        (let loop ((i 3))
-          (when (< i max-fd)
-+           ;; First try to close any ports associated with file descriptor I.
-+           ;; Otherwise the finalization thread might get around to closing
-+           ;; those ports eventually, which will raise an EBADF exception (on
-+           ;; 2.2), leading to messages like "error in the finalization
-+           ;; thread: Bad file descriptor".
-+           (for-each (lambda (port)
-+                       (catch-system-error (close-port port)))
-+                     (fdes->ports i))
-            (catch-system-error (close-fdes i))
-            (loop (+ i 1)))))
diff --git a/gnu/packages/patches/shepherd-herd-status-sorted.patch b/gnu/packages/patches/shepherd-herd-status-sorted.patch
deleted file mode 100644
index c6b9d870eb..0000000000
--- a/gnu/packages/patches/shepherd-herd-status-sorted.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-From cc9564586729a5bb90dd5d2722b543fdde9ab821 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
-Date: Sun, 4 Feb 2018 21:56:36 +0100
-Subject: [PATCH] herd: 'herd status' now sorts the result.
-
-Partly fixes <https://bugs.gnu.org/30299>.
-Reported by Mark H Weaver <mhw@netris.org>.
-
-Previously 'tests/basic.sh' could occasionally fail on:
-
-  test "`$herd status`" == "$pristine_status"
-
-because the order of stopped services were not always the same.  Indeed,
-those services come from 'service-list' on the shepherd side, which uses
-'hash-fold' to traverse the service hash table, and the traversal order
-of 'hash-fold' is undefined.
-
-* modules/shepherd/scripts/herd.scm (display-status-summary)[service<?]:
-New procedure.
-[display-services]: Call 'sort' and use the above.
----
- modules/shepherd/scripts/herd.scm | 8 ++++++--
- modules/shepherd/service.scm      | 5 +++--
- 2 files changed, 9 insertions(+), 4 deletions(-)
-
-diff --git a/modules/shepherd/scripts/herd.scm b/modules/shepherd/scripts/herd.scm
-index ebcd1e1..697446c 100644
---- a/modules/shepherd/scripts/herd.scm
-+++ b/modules/shepherd/scripts/herd.scm
-@@ -1,5 +1,5 @@
- ;; herd.scm -- The program to herd the Shepherd.
--;; Copyright (C) 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
-+;; Copyright (C) 2013, 2014, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
- ;; Copyright (C) 2002, 2003 Wolfgang Jährling <wolfgang@pro-linux.de>
- ;;
- ;; This file is part of the GNU Shepherd.
-@@ -46,13 +46,17 @@ of pairs."
- 
- (define (display-status-summary services)
-   "Display a summary of the status of all of SERVICES."
-+  (define (service<? service1 service2)
-+    (string<? (symbol->string (service-canonical-name service1))
-+              (symbol->string (service-canonical-name service2))))
-+
-   (define (display-services header bullet services)
-     (unless (null? services)
-       (display header)
-       (for-each (lambda (service)
-                   (format #t " ~a ~a~%" bullet
-                           (service-canonical-name service)))
--                services)))
-+                (sort services service<?))))      ;get deterministic output
-   (call-with-values
-       (lambda ()
-         (partition (match-lambda
-diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
-index 0ad28a0..83600e4 100644
---- a/modules/shepherd/service.scm
-+++ b/modules/shepherd/service.scm
-@@ -1,5 +1,5 @@
- ;; service.scm -- Representation of services.
--;; Copyright (C) 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-+;; Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
- ;; Copyright (C) 2002, 2003 Wolfgang Järling <wolfgang@pro-linux.de>
- ;; Copyright (C) 2014 Alex Sassmannshausen <alex.sassmannshausen@gmail.com>
- ;; Copyright (C) 2016 Alex Kost <alezost@gmail.com>
-@@ -949,7 +949,8 @@ Return #f if service is not found."
-                  %services))
- 
- (define (service-list)
--  "Return the list of services currently defined."
-+  "Return the list of services currently defined.  Note: The order of the list
-+returned in unspecified."
-   (hash-fold (lambda (name services result)
-                (let ((service (lookup-canonical-service name services)))
-                  (if service
--- 
-2.16.1
-
diff --git a/gnu/packages/patches/translate-shell-fix-curl-tests.patch b/gnu/packages/patches/translate-shell-fix-curl-tests.patch
new file mode 100644
index 0000000000..33731462b8
--- /dev/null
+++ b/gnu/packages/patches/translate-shell-fix-curl-tests.patch
@@ -0,0 +1,60 @@
+This patch fixes Curl related tests for 'translate-shell'.
+
+Upstream bug URL:
+
+https://github.com/soimort/translate-shell/issues/221
+
+From bb9f32d3145125ba664b6b05bf0a2fd34108e9d2 Mon Sep 17 00:00:00 2001
+From: Mort Yao <soi@mort.ninja>
+Date: Sun, 25 Mar 2018 03:14:33 +0200
+Subject: [PATCH] TestUtils: perform curl-related tests only if NETWORK_ACCESS
+ is set to yes (#221)
+
+---
+ test/TestUtils.awk | 32 +++++++++++++++++---------------
+ 1 file changed, 17 insertions(+), 15 deletions(-)
+
+diff --git a/test/TestUtils.awk b/test/TestUtils.awk
+index 08bb2e9..1c141e5 100644
+--- a/test/TestUtils.awk
++++ b/test/TestUtils.awk
+@@ -30,22 +30,24 @@ BEGIN {
+         assertTrue(newerVersion("2", "1.9.9999"))
+     }
+ 
+-    T("curl()", 1)
+-    {
+-        delete tokens; delete ast
+-        tokenize(tokens, curl("https://httpbin.org/get"))
+-        parseJson(ast, tokens)
+-        assertEqual(unparameterize(ast[0 SUBSEP "url"]),
+-                    "https://httpbin.org/get")
+-    }
++    if (yn(ENVIRON["NETWORK_ACCESS"])) { # if network access enabled
++        T("curl()", 1)
++        {
++            delete tokens; delete ast
++            tokenize(tokens, curl("https://httpbin.org/get"))
++            parseJson(ast, tokens)
++            assertEqual(unparameterize(ast[0 SUBSEP "url"]),
++                        "https://httpbin.org/get")
++        }
+ 
+-    T("curlPost()", 1)
+-    {
+-        delete tokens; delete ast
+-        tokenize(tokens, curlPost("https://httpbin.org/post", "fizz=buzz"))
+-        parseJson(ast, tokens)
+-        assertEqual(unparameterize(ast[0 SUBSEP "url"]),
+-                    "https://httpbin.org/post")
++        T("curlPost()", 1)
++        {
++            delete tokens; delete ast
++            tokenize(tokens, curlPost("https://httpbin.org/post", "fizz=buzz"))
++            parseJson(ast, tokens)
++            assertEqual(unparameterize(ast[0 SUBSEP "url"]),
++                        "https://httpbin.org/post")
++        }
+     }
+ 
+     T("dump()", 3)
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index b794cb80f7..c9a53698bd 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -574,7 +574,9 @@ extracting content or merging files.")
         (uri (string-append "https://mupdf.com/downloads/archive/"
                             name "-" version "-source.tar.xz"))
         (patches (search-patches "mupdf-build-with-latest-openjpeg.patch"
-                                 "mupdf-CVE-2017-17858.patch"))
+                                 "mupdf-CVE-2017-17858.patch"
+                                 "mupdf-CVE-2018-6544.patch"
+                                 "mupdf-CVE-2018-1000051.patch"))
         (sha256
          (base32
           "0b9j0gqbc3jhmx87r6idcsh8lnb30840c3hyx6dk2gdjqqh3hysp"))
diff --git a/gnu/packages/perl-web.scm b/gnu/packages/perl-web.scm
index 0500cee0dc..7a398675b2 100644
--- a/gnu/packages/perl-web.scm
+++ b/gnu/packages/perl-web.scm
@@ -21,6 +21,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
   #:use-module (guix packages)
+  #:use-module (gnu packages perl-check)
   #:use-module (guix download)
   #:use-module (guix build-system perl))
 
@@ -46,3 +47,26 @@ keep you going, learning by doing was much fun.  While most of the techniques
 used are outdated now, the idea behind it is not.  Mojolicious is a new
 endeavor to implement this idea using modern technologies.")
     (license license:artistic2.0)))
+
+(define-public perl-uri-escape
+  (package
+    (name "perl-uri-escape")
+    (version "1.73")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/E/ET/ETHER/URI-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "04z4xwiryrbxxi48bwbkgq9q9pwfgqry3wp0ramcrwv3dx5ap9yc"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-needs" ,perl-test-needs)))
+    (home-page "https://github.com/libwww-perl/URI")
+    (synopsis "Percent-encode and percent-decode unsafe characters")
+    (description "This module provides functions to percent-encode and
+percent-decode URI strings as defined by RFC 3986.  Percent-encoding URI's is
+informally called URI escaping.  This is the terminology used by this module,
+which predates the formalization of the terms by the RFC by several years.")
+    (license license:perl-license)))
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index bb20895558..46badf9d3e 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -7954,7 +7954,7 @@ algorism to indicate multiplication by 1000.")
 (define-public perl-text-simpletable
   (package
     (name "perl-text-simpletable")
-    (version "2.03")
+    (version "2.04")
     (source
      (origin
        (method url-fetch)
@@ -7962,7 +7962,7 @@ algorism to indicate multiplication by 1000.")
                            "Text-SimpleTable-" version ".tar.gz"))
        (sha256
         (base32
-         "15hpry9jwrf1vbjyk21s65rllxrdvp2fdzzv9gsvczggby2yyzfs"))))
+         "14sjmdcy7s73sk740g3ccmzmwhwd52x5ay3bjmibjlql1cag70ld"))))
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Text-SimpleTable/")
     (synopsis "Simple ASCII tables")
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 90bc365d05..e60af0bd36 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -184,7 +184,7 @@ MTP, and much more.")
 (define-public perl-image-exiftool
   (package
     (name "perl-image-exiftool")
-    (version "10.55")
+    (version "10.80")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -192,7 +192,7 @@ MTP, and much more.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0z8zwjjfvyllnhsafhddbybywpgqv0pl1dbn1g034cs27yj836q2"))))
+                "14rwr5wk2snqv4yva6fax1gfsdv88941n237m0wyzn3n0xh9dy5w"))))
     (build-system perl-build-system)
     (arguments
      '(#:phases
@@ -330,7 +330,7 @@ photographic equipment.")
 (define-public darktable
   (package
     (name "darktable")
-    (version "2.4.0")
+    (version "2.4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -339,7 +339,7 @@ photographic equipment.")
                     version "/darktable-" version ".tar.xz"))
               (sha256
                (base32
-                "0y0q7a7k09sbg05k5xl1lz8n2ak1v8yarfv222ksvmbrxs53hdwx"))))
+                "10asz918kv2248px3w9bn5k8cfrad5xrci58x9y61l0yf5hcpk0r"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; There are no tests.
@@ -470,14 +470,14 @@ a complete panorama and stitch any series of overlapping pictures.")
 (define-public rawtherapee
   (package
     (name "rawtherapee")
-    (version "5.3")
+    (version "5.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://rawtherapee.com/shared/source/"
                                   "rawtherapee-" version ".tar.xz"))
               (sha256
                (base32
-                "1y1ygxqmqfp4zg8rcgrlfdc1597cyr5zqgp5zjpldhvwdfa9r5cp"))))
+                "1229hxqq824hcqg1hy2cfglsp7kjbhhis9m33ss39pgmrb1w227d"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no test suite
diff --git a/gnu/packages/pure.scm b/gnu/packages/pure.scm
new file mode 100644
index 0000000000..b0fd93b39b
--- /dev/null
+++ b/gnu/packages/pure.scm
@@ -0,0 +1,68 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages pure)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix gexp)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages llvm)
+  #:use-module (gnu packages multiprecision))
+
+(define-public pure
+  (package
+    (name "pure")
+    (version "0.67")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/agraef/pure-lang/releases/"
+                           "download/pure-" version "/"
+                           "pure-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1hlx5dx6n70rbg668yc97yj4jbnrv0dpfw3l9b0ffmcgr76f6ba4"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
+                                         (assoc-ref %outputs "out")
+                                         "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-llvm-lookup
+           (lambda _
+             (substitute* "configure"
+               (("-lLLVM-[$][{]llvm_version[}]")
+                "`$LLVMCONF --libs`"))
+             #t)))))
+    (inputs
+     `(("gmp" ,gmp)
+       ("llvm" ,llvm-3.5)
+       ("mpfr" ,mpfr)))
+    (home-page "https://agraef.github.io/pure-lang/")
+    (synopsis "Pure programming Language")
+    (description "@code{pure} is a programming language based on term
+rewriting.  It offers equational definitions with pattern matching,
+full symbolic rewriting capabilities, dynamic typing, eager and lazy
+evaluation, lexical closures, built-in list and matrix support and
+a C interface.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 29f43533cf..aabeaa7604 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -281,14 +281,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography-vectors
   (package
     (name "python-cryptography-vectors")
-    (version "2.2")
+    (version "2.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography_vectors" version))
        (sha256
         (base32
-         "03cpmi5azvipphmva7dxv8k3w7ffblvn5452rs5r6smdhxyiqq6g"))))
+         "1zk2shzpa9kw8fgwpsbdm5cgvbjd05vh2q6r0x9jlzq5vvjg4z5y"))))
     (build-system python-build-system)
     (home-page "https://github.com/pyca/cryptography")
     (synopsis "Test vectors for the cryptography package")
@@ -303,14 +303,14 @@ is used by the Requests library to verify HTTPS requests.")
 (define-public python-cryptography
   (package
     (name "python-cryptography")
-    (version "2.2")
+    (version "2.2.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cryptography" version))
        (sha256
         (base32
-         "0j2gwr4qxvskip77z4n9nqvr4vi243n3bzij18ay4drc6sg2g87m"))))
+         "1lxj3kqp552c715p0hzixpdhnz4ggd3jb7zz15q8dw534b9xknnx"))))
     (build-system python-build-system)
     (inputs
      `(("openssl" ,openssl)))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 628f8d27c7..910e9e81d8 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -47,7 +47,8 @@
 ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
 ;;; Copyright © 2018 Ethan R. Jones <ethanrjones97@gmail.com
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
-;;;
+;;; Copyright © 2018 Vijayalakshmi Vedantham <vijimay12@gmail.com>
+
 ;;; This file is part of GNU Guix.
 ;;;
 ;;; GNU Guix is free software; you can redistribute it and/or modify it
@@ -468,6 +469,24 @@ data types.")
               ("openssl" ,openssl)
               ("zlib" ,zlib)))))
 
+(define-public python-debug
+  (package
+    (inherit python)
+    (name "python-debug")
+    (outputs '("out" "debug"))
+    (build-system gnu-build-system)
+    (arguments
+     (substitute-keyword-arguments (package-arguments python)
+       ((#:configure-flags flags '())
+        `(cons "--with-pydebug" ,flags))))
+    (synopsis
+     "High-level, dynamically-typed programming language (for debugging)")
+    (description
+     "This variant of Python provides an interpreter built with
+@code{--with-pydebug} to help develop and debug extensions.  See
+@url{https://pythonextensionpatterns.readthedocs.io/en/latest/debugging/debug.html},
+for more information.")))
+
 (define* (wrap-python3 python
                        #:optional
                        (name (string-append (package-name python) "-wrapper")))
@@ -592,6 +611,33 @@ pidof, tty, taskset, pmap.")
 planar geometric objects.  It is based on the @code{GEOS} library.")
     (license license:bsd-3)))
 
+(define-public python-logwrap
+  (package
+    (name "python-logwrap")
+    (version "3.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "logwrap" version ".zip"))
+       (sha256
+        (base32
+         "1d2k0hvpbi51vl410y8fbs5m0nxnlh2k7gr2nrh3k81ibhzscsra"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six)
+       ("python-typing" ,python-typing)))
+    (native-inputs
+     `(("unzip" ,unzip)
+       ("python-cython" ,python-cython)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (home-page "https://github.com/penguinolog/logwrap")
+    (synopsis "Decorator for logging function arguments")
+    (description "This package provides a decorator to log function arguments
+and function call return values in a human-readable way.")
+    (license license:asl2.0)))
+
 (define-public python2-shapely
   (package-with-python2 python-shapely))
 
@@ -1807,15 +1853,14 @@ files.")
 (define-public python-pyld
   (package
     (name "python-pyld")
-    (version "0.7.1")
+    (version "1.0.3")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "PyLD" version))
               (sha256
                (base32
-                "1m0fs6897vxfkf7awah5i66i7b7smm5fnywf1w50fpzyfbfhr156"))))
+                "12i2g6xdj30k7xxcibg3sc5y76snwq8l6n8fy9lyi577kgy0h2pm"))))
     (build-system python-build-system)
-    (arguments `(#:tests? #f)) ; no tests
     (home-page "https://github.com/digitalbazaar/pyld")
     (synopsis "Python implementation of the JSON-LD specification")
     (description
@@ -5687,9 +5732,7 @@ markdown_py is also provided to convert Markdown files to HTML.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/p/ptyprocess/ptyprocess-"
-             version ".tar.gz"))
+       (uri (pypi-uri "ptyprocess" version))
        (sha256
         (base32
          "0ra31k10v3629xq0kdn8lwmfbi97anmk48r03yvh7mks0kq96hg6"))))
@@ -5840,9 +5883,7 @@ from an XML-based format.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pypi.python.org/packages/57/4f/"
-                           "889579244947368f28eda66b782331b1e75f83fd72e63f9ece93cd7a18f9"
-                           "/python-ly-" version ".tar.gz"))
+       (uri (pypi-uri name version))
        (sha256
         (base32
          "0x98dv7p8mg26p4816yy8hz4f34zf6hpnnfmr56msgh9jnsm2qfl"))))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index ecb2d46aad..17fe7ae52c 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -669,14 +669,14 @@ line of code.")
 (define-public ruby-asciidoctor
   (package
   (name "ruby-asciidoctor")
-  (version "1.5.6.1")
+  (version "1.5.6.2")
   (source
     (origin
       (method url-fetch)
       (uri (rubygems-uri "asciidoctor" version))
       (sha256
         (base32
-          "1jnf9y8q5asfdzilp8vcqafrc2faj719df4yh1993mh6jd0iqdy4"))))
+          "0zq3az4836nxkc8g5wnnbzmarw7663s1ky6gf8pc04sfpa8n2l3f"))))
   (build-system ruby-build-system)
   (arguments
    `(#:test-target "test:all"
@@ -4964,14 +4964,14 @@ Markdown.")
 (define-public ruby-rake
   (package
     (name "ruby-rake")
-    (version "12.3.0")
+    (version "12.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "rake" version))
        (sha256
         (base32
-         "190p7cs8zdn07mjj6xwwsdna3g0r98zs4crz7jh2j2q5b0nbxgjf"))))
+         "1idi53jay34ba9j68c3mfr9wwkg3cd9qh0fn9cg42hv72c6q8dyg"))))
     (build-system ruby-build-system)
     (native-inputs
      `(("bundler" ,bundler)))
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 3b1c2d4885..e2e8c5e093 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -233,14 +233,14 @@ Desktops into Active Directory environments using the winbind daemon.")
 (define-public talloc
   (package
     (name "talloc")
-    (version "2.1.11")
+    (version "2.1.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/talloc/talloc-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1lzfxv2zjxap5snf9ydl1bqgjpz0kgkq7n644f8rkbx0arav77k3"))))
+                "0jv0ri9vj93fczzgl7rn7xvnfgl2kfx4x85cr8h8v52yh7v0qz4q"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index 65a2d5645a..4340237b29 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -954,3 +954,70 @@ implementation includes Hobbit, a Scheme-to-C compiler, which can
 generate C files whose binaries can be dynamically or statically
 linked with a SCM executable.")
     (license lgpl3+)))
+
+(define-public tinyscheme
+  (package
+    (name "tinyscheme")
+    (version "1.41")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/" name "/" name "/"
+                                  name "-" version "/" name "-" version ".zip"))
+              (sha256
+               (base32
+                "0yqma4jrjgj95f3hf30h542x97n8ah234n19yklbqq0phfsa08wf"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'unpack
+           (lambda* (#:key source #:allow-other-keys)
+             (invoke "unzip" source)
+             (chdir (string-append ,name "-" ,version))
+             #t))
+         (add-after 'unpack 'set-scm-directory
+           ;; Hard-code ‘our’ init.scm instead of looking in the current
+           ;; working directory, so invoking ‘scheme’ just works.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (scm (string-append out "/share/" ,name)))
+               (substitute* "scheme.c"
+                 (("init.scm" all)
+                  (string-append scm "/" all)))
+               #t)))
+         (delete 'configure)            ; no configure script
+         (replace 'install
+           ;; There's no ‘install’ target.  Install files manually.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out     (assoc-ref outputs "out"))
+                    (bin     (string-append out "/bin"))
+                    (doc     (string-append out "/share/doc/"
+                                            ,name "-" ,version))
+                    (include (string-append out "/include"))
+                    (lib     (string-append out "/lib"))
+                    (scm     (string-append out "/share/" ,name)))
+               (install-file "scheme" bin)
+               (install-file "Manual.txt" doc)
+               (install-file "scheme.h" include)
+               (install-file "libtinyscheme.so" lib)
+               (install-file "init.scm" scm)
+               #t))))
+       #:tests? #f))                    ; no tests
+    (home-page "http://tinyscheme.sourceforge.net/")
+    (synopsis "Light-weight interpreter for the Scheme programming language")
+    (description
+     "TinyScheme is a light-weight Scheme interpreter that implements as large a
+subset of R5RS as was possible without getting very large and complicated.
+
+It's meant to be used as an embedded scripting interpreter for other programs.
+As such, it does not offer an Integrated Development Environment (@dfn{IDE}) or
+extensive toolkits, although it does sport a small (and optional) top-level
+loop.
+
+As an embedded interpreter, it allows multiple interpreter states to coexist in
+the same program, without any interference between them.  Foreign functions in C
+can be added and values can be defined in the Scheme environment.  Being quite a
+small program, it is easy to comprehend, get to grips with, and use.")
+    (license bsd-3)))                   ; there are no licence headers
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 35f344142a..73dec67d15 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -248,7 +248,7 @@ that implements both the msgpack and msgpack-rpc specifications.")
 (define-public yaml-cpp
   (package
     (name "yaml-cpp")
-    (version "0.5.3")
+    (version "0.6.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -256,7 +256,7 @@ that implements both the msgpack and msgpack-rpc specifications.")
                     "yaml-cpp-" version ".tar.gz"))
               (sha256
                (base32
-                "1ck7jk0wjfigrf4cgcjqsir4yp1s6vamhhxhpsgfvs46pgm5pk6y"))))
+                "038ddf771d1zrdfiwqzq2lsjdis1fxbaasbdja2w9f1av3k3gv15"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index fb3b11ba2d..521be54c49 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -86,6 +86,10 @@
          (modify-phases %standard-phases
            (add-after 'unpack 'autogen
              (lambda _
+               ;; Build without '-Werror', in particular to avoid errors due
+               ;; to the use of the deprecated 'libusb_set_debug' function.
+               (substitute* "configure.ac"
+                 (("-Werror") ""))
                (zero? (system* "autoreconf" "-vfi")))))))
       (synopsis "Tools for sending USB device traffic over a network")
       (description "Usbredir is a network protocol for sending USB device traffic
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 79aff945f3..480b2d11c2 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -589,7 +589,7 @@ authentication}.")
 (define-public autossh
   (package
     (name "autossh")
-    (version "1.4e")
+    (version "1.4f")
     (source
      (origin
        (method url-fetch)
@@ -597,7 +597,7 @@ authentication}.")
              "http://www.harding.motd.ca/autossh/autossh-"
              version ".tgz"))
        (sha256
-        (base32 "0mlicw28vq2jxa0jf0dys5ja75v0fxpjavlq9dpif6bnknji13ly"))))
+        (base32 "1wpqwa2872nqgqbhnb6nnkrlzpdawd5k69gh1qp68354pvhyawh1"))))
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ; There is no "make check" or anything similar
     (inputs `(("openssh" ,openssh)))
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 4ef3db75ae..4c6404279a 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -2672,16 +2672,17 @@ that package, other packages are unaffected.")
 (define-public r-blob
   (package
     (name "r-blob")
-    (version "1.1.0")
+    (version "1.1.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "blob" version))
               (sha256
                (base32
-                "05pazzcyz3c3vd2l70zq9cf172cgjff4dnf419zigfnxycyn1mhn"))))
+                "0lsg91hk508dd95ivig2lwg62qafwnarjw68110kx63cfk4zkjxc"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-tibble" ,r-tibble)))
+     `(("r-prettyunits" ,r-prettyunits)
+       ("r-tibble" ,r-tibble)))
     (home-page "https://github.com/hadley/blob")
     (synopsis "Simple S3 Class for representing vectors of binary data")
     (description "Raw vectors in R are useful for storing a single binary
@@ -3837,8 +3838,9 @@ from within R.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://gforge.inria.fr/frs/download.php/36615/"
-                           "spams-R-v" version ".tar.gz"))
+       ;; Use the ‘Latest version’ link for a stable URI across releases.
+       (uri (string-append "https://gforge.inria.fr/frs/download.php/"
+                           "latestfile/4531/spams-R-v" version ".tar.gz"))
        (sha256
         (base32
          "13z2293jixf1r9g8dyy856xrhvpjr2ln2n9smn6644126r9hmhkx"))))
@@ -3848,7 +3850,7 @@ from within R.")
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
            (lambda _ (chdir "spams") #t))
-         ;; Don't tune for the building machine
+         ;; Don't tune for the building machine.
          (add-after 'chdir 'no-mtune
            (lambda _
              (substitute* "src/Makevars"
@@ -4525,14 +4527,14 @@ perform @dfn{independent component analysis} (ICA) and projection pursuit.")
 (define-public r-randomforest
   (package
     (name "r-randomforest")
-    (version "4.6-12")
+    (version "4.6-14")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "randomForest" version))
        (sha256
         (base32
-         "1i43idaihhl6nwqw42v9dqpl6f8z3ykcn2in32lh2755i27jylbf"))))
+         "0kbmm0l42fc2d1rdq0l7k09d34kd87q4lx651ffsic4y84h8kf7l"))))
     (properties `((upstream-name . "randomForest")))
     (build-system r-build-system)
     (home-page "https://www.stat.berkeley.edu/~breiman/RandomForests/")
diff --git a/gnu/packages/syndication.scm b/gnu/packages/syndication.scm
index 3e0cbe832a..1669f2c45c 100644
--- a/gnu/packages/syndication.scm
+++ b/gnu/packages/syndication.scm
@@ -32,7 +32,7 @@
 (define-public newsboat
   (package
     (name "newsboat")
-    (version "2.10.2")
+    (version "2.11")
     (source
      (origin
        (method url-fetch)
@@ -40,7 +40,7 @@
                            "/newsboat-" version ".tar.xz"))
        (sha256
         (base32
-         "1x4nxx1kvmrcm8jy73dvg56h4z15y3sach2vr13cw8rsbi7v99px"))))
+         "0yh1qdk15s9k4pffiw1155whfckpffq72dpyp9rck7yxgy5ya1hx"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -49,7 +49,7 @@
        ("asciidoc" ,asciidoc)))
     (inputs
      `(("curl" ,curl)
-       ("json-c" ,json-c-0.12)      ; check whether json-c-0.12 can be removed
+       ("json-c" ,json-c)
        ("libxml2" ,libxml2)
        ("ncurses" ,ncurses)
        ("stfl" ,stfl)
@@ -64,6 +64,9 @@
        #:make-flags
        (list (string-append "prefix=" (assoc-ref %outputs "out")))
        #:test-target "test"))
+    (native-search-paths
+     ;; Newsboat respects CURL_CA_BUNDLE.
+     (package-native-search-paths curl))
     (home-page "https://newsboat.org/")
     (synopsis "Text-mode RSS and Atom feed reader with podcast support")
     (description "Newsboat is a feed reader for @dfn{RSS} and @dfn{Atom}, XML
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index c48987ac53..64d21da6e9 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Danny Milosavljevic <dannym+a@scratchpost.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,6 +31,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system trivial)
@@ -38,8 +40,10 @@
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gd)
@@ -47,6 +51,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages libreoffice)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages pdf)
@@ -762,6 +767,8 @@ symbol fonts.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((mf (assoc-ref inputs "texlive-metafont-base"))
                    (cwd (getcwd)))
+               ;; Make METAFONT reproducible
+               (setenv "SOURCE_DATE_EPOCH" "1")
                ;; Tell mf where to find mf.base
                (setenv "MFBASES" (string-append mf "/share/texmf-dist/web2c"))
                ;; Tell mf where to look for source files
@@ -4266,3 +4273,90 @@ develop documents with LaTeX, in a single application.")
 plain TeX, and Eplain, originally written by Paul Abrahams, Kathryn Hargreaves,
 and Karl Berry.")
     (license license:fdl1.3+)))
+
+(define-public lyx
+  (package
+    (name "lyx")
+    (version "2.2.3")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "http://ftp.lyx.org/pub/lyx/stable/2.2.x/"
+                                 name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "0xvaz0i371nn2ndinc0d3ywj76ivb62649a4sdgwbivisiahd2fj"))
+             (patches (search-patches "lyx-2.2.3-fix-test.patch"))
+             (modules '((guix build utils)))
+             (snippet
+              '(begin
+                (delete-file-recursively "3rdparty")
+                #t))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags `("-DLYX_USE_QT=QT5"
+                           "-DLYX_EXTERNAL_BOOST=1"
+                           "-DLYX_INSTALL=1"
+                           "-DLYX_RELEASE=1"
+                           ,(string-append "-DLYX_INSTALL_PREFIX="
+                                           (assoc-ref %outputs "out")
+                                           ;; Exact name and level is necessary.
+                                           "/lyx2.2"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-python
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* '("src/support/os.cpp")
+              (("\"python ")
+               (string-append "\""
+                              (assoc-ref inputs "python-2")
+                              "/bin/python ")))
+             #t))
+         (add-after 'patch-python 'patch-installer
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+              (("/usr/local/man/man1")
+               (string-append (assoc-ref outputs "out")
+                              "/share/man/man1")))
+             #t))
+         (add-after 'patch-python 'patch-desktop-file
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "lib/lyx.desktop.in"
+              (("Exec=")
+               (string-append "Exec="
+                              (assoc-ref outputs "out")
+                              "/")))
+             #t))
+         (add-before 'check 'setenv-check
+           (lambda _
+             (setenv "LYX_DIR_22x" (string-append (getcwd) "/../lyx-"
+                                                  ,version "/lib"))
+             #t))
+         (add-after 'install 'install-symlinks
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (mkdir-p (string-append out "/bin"))
+               (symlink "../lyx2.2/bin/lyx2.2"
+                (string-append out "/bin/lyx2.2"))
+               #t))))))
+    (inputs
+     `(("boost" ,boost)
+       ("hunspell" ,hunspell) ; Note: Could also use aspell instead.
+       ("libx11" ,libx11)
+       ("python-2" ,python-2)
+       ("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)
+       ("zlib" ,zlib)))
+    (propagated-inputs
+     `(("texlive" ,texlive))) ; article.cls is in texmf-dist.
+    (native-inputs
+     `(("python-2" ,python-2)
+       ("pkg-config" ,pkg-config)
+       ("bc" ,bc)))
+    (home-page "https://www.lyx.org/")
+    (synopsis "Document preparation system with GUI")
+    (description "LyX is a document preparation system.  It excels at letting
+you create complex technical and scientific articles with mathematics,
+cross-references, bibliographies, indexes, etc.  It is very good for working
+with documents of any length in which the usual processing abilities are
+required: automatic sectioning and pagination, spell checking and so forth.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index 1e8a4d79fd..fbd2498b66 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2017 Feng Shu <tumashu@163.com>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2014 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.org>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,7 +49,7 @@
 (define-public vis
   (package
     (name "vis")
-    (version "0.4")
+    (version "0.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/martanne/"
@@ -57,7 +57,7 @@
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1iclfsc9vn40fqfiz56vrw6dmr4x8q9gvav0b53kkpc6zcfa86zi"))))
+                "1xbxb3q963s6sav63yw0x30lm0wvxsrzb7hr6a7dh4f8r7mp1skp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index d8ff5a1014..9143af31e0 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
+;;; Copyright © 2016, 2017, 2018 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
@@ -385,7 +385,7 @@ required structures.")
   (package
     (inherit openssl)
     (name "openssl")
-    (version "1.1.0g")
+    (version "1.1.0h")
     (source (origin
              (method url-fetch)
              (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -398,7 +398,7 @@ required structures.")
               (patches (search-patches "openssl-1.1.0-c-rehash-in.patch"))
               (sha256
                (base32
-                "1bvka2wf33w2vxv7yw578nnjqyhz2b3chvfb0l4k2ffscw950kfy"))))
+                "05x509lccqjscgyi935z809pwfm708islypwhmjnb6cyvrn64daq"))))
     (outputs '("out"
                "doc"        ;1.3MiB of man3 pages
                "static"))   ; 5.5MiB of .a files
@@ -449,14 +449,14 @@ required structures.")
 (define-public libressl
   (package
     (name "libressl")
-    (version "2.6.4")
+    (version "2.7.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://openbsd/LibreSSL/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "07yi37a2ghsgj2b4w30q1s4d2inqnix7ika1m21y57p9z71212k3"))))
+                "0w3hdgcr4cq84cv7wkkg2clz9s6l2m2l92d6mfn70wxs6vi0fxck"))))
     (build-system gnu-build-system)
     (arguments
      ;; Do as if 'getentropy' was missing since older Linux kernels lack it
@@ -493,13 +493,13 @@ netcat implementation that supports TLS.")
   (package
     (name "python-acme")
     ;; Remember to update the hash of certbot when updating python-acme.
-    (version "0.22.1")
+    (version "0.22.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "acme" version))
               (sha256
                (base32
-                "0cbw062xmaqhmdb5d04d2xs9aacmq1i7yvnd37gw1d71qgxlnmsz"))))
+                "1d5d4w88aj1i8fyrs44dapmiqbmgz4bjgryn8k3mnggmd6ihxk8f"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -548,7 +548,7 @@ netcat implementation that supports TLS.")
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "1d9abvlwi2d4d991dakds7jyrzxcsqkl13sd0clkriav9cdqwhv4"))))
+                "1vsb8qqghxrwxr3d2l0d5cgdk0pz7b3f76bx3zrrg0z7jf967qz6"))))
     (build-system python-build-system)
     (arguments
      `(,@(substitute-keyword-arguments (package-arguments python-acme)
diff --git a/gnu/packages/tv.scm b/gnu/packages/tv.scm
index cb82e5b847..ef67ad37f2 100644
--- a/gnu/packages/tv.scm
+++ b/gnu/packages/tv.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015, 2016, 2017, 2018 Alex Kost <alezost@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +26,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
@@ -55,6 +56,8 @@
        ("libxml2" ,libxml2)
        ("freetype" ,freetype)
        ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
     (home-page "http://tvtime.sourceforge.net")
     (synopsis "Television viewer")
     (description
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 4aac1fc2fb..22c124049e 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -139,14 +139,14 @@ as well as the classic centralized workflow.")
    (name "git")
    ;; XXX When updating Git, check if the special 'git:src' input to cgit needs
    ;; to be updated as well.
-   (version "2.16.2")
+   (version "2.16.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "05y7480f2p7fkncbhf08zz56jbykcp0ia5gl6y3djs0lsa5mfq2m"))))
+              "0j1dwvg5llnj3g0fp8hdgpms4hp90qw9f6509vqw30dhwplrjpfn"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -159,7 +159,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "01fbmfsqcv7jmyh80yg3fv5jwv78zvxys9b0fd6bdcy89h9ybvj2"))))))
+            "15ckcia3bdbn1dpwlh3fifd8fzk38l1pdgxsf2yl8l8xd1z8jqaz"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
@@ -698,13 +698,13 @@ allowing to handle large objects with a small memory footprint.")
 (define-public python-gitpython
   (package
     (name "python-gitpython")
-    (version "2.1.8")
+    (version "2.1.9")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "GitPython" version))
               (sha256
                (base32
-                "1sbn018mn3y2r58ix5z12na1s02ccprhckb88yq3bdddvqjvqqdd"))))
+                "0a9in1jfv9ssxhckl6sasw45bhm762y2r5ikgb2pk2g8yqdc6z64"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ;XXX: Tests can only be run within the GitPython repository.
@@ -1737,11 +1737,9 @@ be served with a HTTP file server of your choice.")
        ("ghc-quickcheck" ,ghc-quickcheck)
        ("ghc-findbin" ,ghc-findbin)
        ("ghc-hunit" ,ghc-hunit)
-       ("ghc-array" ,ghc-array)
        ("ghc-async" ,ghc-async)
        ("ghc-attoparsec" ,ghc-attoparsec)
        ("ghc-base16-bytestring" ,ghc-base16-bytestring)
-       ("ghc-binary" ,ghc-binary)
        ("ghc-bytestring-builder" ,ghc-bytestring-builder)
        ("ghc-cryptohash" ,ghc-cryptohash)
        ("ghc-data-ordlist" ,ghc-data-ordlist)
@@ -1749,7 +1747,6 @@ be served with a HTTP file server of your choice.")
        ("ghc-system-filepath" ,ghc-system-filepath)
        ("ghc-graphviz" ,ghc-graphviz)
        ("ghc-hashable" ,ghc-hashable)
-       ("ghc-haskeline" ,ghc-haskeline)
        ("ghc-html" ,ghc-html)
        ("ghc-mmap" ,ghc-mmap)
        ("ghc-mtl" ,ghc-mtl)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index fe0d7efe1e..6da712cc71 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1512,7 +1512,7 @@ encapsulated.")
 (define-public libdvdcss
   (package
     (name "libdvdcss")
-    (version "1.4.1")
+    (version "1.4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://download.videolan.org/pub/"
@@ -1520,7 +1520,7 @@ encapsulated.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1b7awvyahivglp7qmgx2g5005kc5npv257gw7wxdprjsnx93f1zb"))))
+                "0x957zzpf4w2cp8zlk29prj8i2q6hay3lzdzsyz8y3cwxivyvhkq"))))
     (build-system gnu-build-system)
     (home-page "https://www.videolan.org/developers/libdvdcss.html")
     (synopsis "Library for accessing DVDs as block devices")
@@ -1754,14 +1754,14 @@ and custom quantization matrices.")
 (define-public streamlink
   (package
     (name "streamlink")
-    (version "0.10.0")
+    (version "0.11.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "streamlink" version))
        (sha256
         (base32
-         "17299xnd9jzi7m1d2rr4xdlj47q64bzj2957nlsrhw0hskds1s6h"))))
+         "02h8b3k8l5zz4vjm0nhxvl1pm924jms8y7sjl40fbybrzvsa4mg2"))))
     (build-system python-build-system)
     (home-page "https://github.com/streamlink/streamlink")
     (native-inputs
@@ -1774,7 +1774,8 @@ and custom quantization matrices.")
        ("python-iso3166" ,python-iso3166)
        ("python-iso639" ,python-iso639)
        ("python-pycryptodome" ,python-pycryptodome)
-       ("python-requests" ,python-requests)))
+       ("python-requests" ,python-requests)
+       ("python-urllib3" ,python-urllib3)))
     (synopsis "Extract streams from various services")
     (description "Streamlink is command-line utility that extracts streams
 from sites like Twitch.tv and pipes them into a video player of choice.")
@@ -1783,6 +1784,38 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
 (define-public livestreamer
   (deprecated-package "livestreamer" streamlink))
 
+(define-public twitchy
+  (let ((commit "0c0f925b9c7ff2aed4a3b0046561cb794143c398")) ;Fixes tests.
+    (package
+      (name "twitchy")
+      (version (git-version "3.2" "1" commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/BasioMeusPuga/twitchy.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "02aizvsr744sh8bdqvwwsmp2qpczlzn8fy76h5dyd3517n9nlcz9"))))
+      (build-system python-build-system)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-before 'check 'check-setup
+             (lambda _
+               (setenv "HOME" (getcwd)) ;Needs to write to ‘$HOME’.
+               #t)))))
+      (inputs
+       `(("python-requests" ,python-requests)
+         ("streamlink" ,streamlink)))
+      (home-page "https://github.com/BasioMeusPuga/twitchy")
+      (synopsis "Command-line interface for Twitch.tv")
+      (description
+       "This package provides a command-line interface for Twitch.tv")
+      (license license:gpl3+))))
+
 (define-public mlt
   (package
     (name "mlt")
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 55a92eca0d..de01e01638 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2017 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Danny Milosavljevic <dannym@scratchpost.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -280,11 +281,11 @@ server and embedded PowerPC, and S390 guests.")
        ("usb.ids"
         ,(origin
            (method url-fetch)
-           (uri "http://linux-usb.cvs.sourceforge.net/viewvc/linux-usb/htdocs/usb.ids?revision=1.551")
+           (uri "https://svn.code.sf.net/p/linux-usb/repo/trunk/htdocs/usb.ids?r=2681")
            (file-name "usb.ids")
            (sha256
             (base32
-             "17rg5i0wbyk289gr8v4kgvnc9q5bidz7ldcvv9x58l083wn16hq3"))))))
+             "1m6yhvz5k8aqzxgk7xj3jkk8frl1hbv0h3vgj4wbnvnx79qnvz3r"))))))
     (home-page "https://libosinfo.org/")
     (synopsis "Operating system information database")
     (description "libosinfo is a GObject based library API for managing
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index ef39d71411..6c929d326d 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -79,15 +79,14 @@ older or slower computers and embedded systems.")
 (define-public links
   (package
     (name "links")
-    (version "2.14")
+    (version "2.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://links.twibright.com/download/"
                                   name "-" version ".tar.bz2"))
-              (patches (search-patches "links-CVE-2017-11114.patch"))
-              (sha256
+                (sha256
                (base32
-                "1f24y83wa1vzzjq5kp857gjqdpnmf8pb29yw7fam0m8wxxw0c3gp"))))
+                "1jp3xyvp87a188b4kg5ycqahrazj7928zncgsznzn54w8d5iqahy"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index bf7320cbf4..4413258e70 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -115,14 +115,14 @@
 (define-public httpd
   (package
     (name "httpd")
-    (version "2.4.29")
+    (version "2.4.33")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://apache/httpd/httpd-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "003z3yckkdihfv69rgqsik1w2jsnh14j3ci8fjia4s2mlajm6xvp"))))
+               "01bghiq4pbgjbgd6gic0nb8bbk6mfpwx3gcsbf21f3dhb4c520ny"))))
     (build-system gnu-build-system)
     (native-inputs `(("pcre" ,pcre "bin")))       ;for 'pcre-config'
     (inputs `(("apr" ,apr)
@@ -186,14 +186,14 @@ Interface} specification.")
     (name "nginx")
     ;; Consider updating the nginx-documentation package if the nginx package is
     ;; updated.
-    (version "1.13.9")
+    (version "1.13.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0hpsyxpxj89p5vrzv9p1hp7xjbnj5c1w6fdy626ycvsiay4a3bjz"))))
+                "11a8m4lhy6h8mmrsakn73pd5gcyvhxpz1xvlr103rglh9l884q9k"))))
     (build-system gnu-build-system)
     (inputs `(("openssl" ,openssl)
               ("pcre" ,pcre)
@@ -220,7 +220,7 @@ Interface} specification.")
                           ;; --crossbuild option to avoid customizing for the
                           ;; kernel version on the build machine.
                           ,(let ((system "Linux")    ; uname -s
-                                 (release "2.6.32")  ; uname -r
+                                 (release "3.2.0")   ; uname -r
                                  ;; uname -m
                                  (machine (match (or (%current-target-system)
                                                      (%current-system))
@@ -3661,7 +3661,7 @@ library.")
 (define-public perl-www-mechanize
   (package
     (name "perl-www-mechanize")
-    (version "1.87")
+    (version "1.88")
     (source
      (origin
        (method url-fetch)
@@ -3669,7 +3669,7 @@ library.")
                            "WWW-Mechanize-" version ".tar.gz"))
        (sha256
         (base32
-         "1kxrydhl7nxlyjv0xvyiyj4igdv4fwnggv0ihlp79bysbjjl54w1"))))
+         "0yd8a1zsfpbv5wr79x3iqmik9gvcd10iam9dfrdan4dri9vpxn9n"))))
     (build-system perl-build-system)
     (native-inputs                      ;only for tests
      `(("perl-cgi" ,perl-cgi)
@@ -3832,18 +3832,19 @@ in systems and applications.")
 (define-public r-servr
   (package
     (name "r-servr")
-    (version "0.8")
+    (version "0.9")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "servr" version))
               (sha256
                (base32
-                "05pz4ychqp4cqywcdavdi8jj3y09gmam097d2idjnlcg9x61h2s9"))))
+                "0bs0i5mjfzxfshqz8i30nhn7kvgwly4fqn5bfq6dqfdrn7biai2x"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-httpuv" ,r-httpuv)
        ("r-jsonlite" ,r-jsonlite)
-       ("r-mime" ,r-mime)))
+       ("r-mime" ,r-mime)
+       ("r-xfun" ,r-xfun)))
     (native-inputs
      `(("r-rcpp" ,r-rcpp)))
     (home-page "https://github.com/yihui/servr")
@@ -5120,7 +5121,7 @@ into your tests.  It automatically starts up a HTTP server in a separate thread
 (define-public http-parser
   (package
     (name "http-parser")
-    (version "2.7.1")
+    (version "2.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/nodejs/http-parser/"
@@ -5128,7 +5129,7 @@ into your tests.  It automatically starts up a HTTP server in a separate thread
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1cw6nf8xy4jhib1w0jd2y0gpqjbdasg8b7pkl2k2vpp54k9rlh3h"))))
+                "17a7k3nxv2p1sp2x5d89wr51vk770753vz6qnlp2gz7nkgwwcxvj"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 1b1497313c..179e46fac4 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -466,7 +466,6 @@ desktop environment.")
        ("ghc-quickcheck"            ,ghc-quickcheck)
        ("ghc-setlocale"             ,ghc-setlocale)
        ("ghc-utf8-string"           ,ghc-utf8-string)
-       ("ghc-directory"             ,ghc-directory)
        ("ghc-x11"                   ,ghc-x11)))
     (arguments
      `(#:phases
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 01cb99880c..eb7f48228d 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -1104,7 +1104,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
                                   version "/rofi-" version ".tar.xz"))
               (sha256
                (base32
-                "10r1jd3h5i22pdr619hmvxv6dhzf9i13j50c28g7yffdggx8ncjg"))))
+                "0wx118banbwfqdwc5y44fkp3hxg97gj3vma16528slhy408hkg7i"))))
     (build-system gnu-build-system)
     (inputs
      `(("pango" ,pango)
@@ -1133,28 +1133,7 @@ connectivity of the X server running on a particular @code{DISPLAY}.")
                (("~root") "/root")
                (("~") "")
                (("g_get_home_dir \\(\\)") "\"/\""))
-             #t))
-         (add-before 'check 'add-missing-configuration-files
-           (lambda _
-             ;; These files are missing in the 1.5.0 release, causing a test
-             ;; failure: <https://github.com/DaveDavenport/rofi/issues/782>.
-             (with-directory-excursion "subprojects/libnkutils/tests"
-               (mkdir "gtk-3.0")
-               (call-with-output-file "gtk-3.0/settings.ini"
-                 (lambda (port)
-                   (format port "[Settings]
-gtk-double-click-time = 300
-gtk-cursor-theme-name = gnome
-")))
-               (mkdir "gtk-4.0")
-               (call-with-output-file "gtk-4.0/settings.ini"
-                 (lambda (port)
-                   (format port "[Settings]
-gtk-double-click-time = 300
-gtk-icon-theme-name = nothing-like-this-theme
-gtk-enable-primary-paste = true
-")))
-               #t))))))
+             #t)))))
     (home-page "https://github.com/DaveDavenport/rofi")
     (synopsis "Application launcher")
     (description "Rofi is a minimalist application launcher.  It memorizes which
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 190b4cc98a..d6648508cc 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -2445,7 +2445,7 @@ including most mice, keyboards, tablets and touchscreens.")
 (define-public xf86-input-libinput
   (package
     (name "xf86-input-libinput")
-    (version "0.26.0")
+    (version "0.27.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2453,7 +2453,7 @@ including most mice, keyboards, tablets and touchscreens.")
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0yrqs88b7yn9nljwlxzn76jfmvf0sh939kzij5b2jvr2qa7mbjmb"))))
+                "18v8qry7493k37bcfbfwdr4xrygyjivpzvgsj7s1dxmzn1n53c3p"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -2673,7 +2673,7 @@ as USB mice.")
 (define-public xf86-video-ati
   (package
     (name "xf86-video-ati")
-    (version "7.10.0")
+    (version "18.0.1")
     (source
       (origin
         (method url-fetch)
@@ -2683,7 +2683,7 @@ as USB mice.")
                ".tar.bz2"))
         (sha256
           (base32
-            "0yafix56vkqglw243cwb94nv91vbjv12sqh29x1bap0hwd1dclgf"))))
+            "180l2yw8c63cbcs3zk729vx439aig1d7yicpyxj0nmfl4y0kpskj"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
               ("xorgproto" ,xorgproto)
diff --git a/gnu/services.scm b/gnu/services.scm
index b020d971fd..2fcacb9eb4 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -352,7 +352,7 @@ directory."
                 (extensions
                  (list (service-extension system-service-type
                                           boot-script-entry)))
-                (compose append)
+                (compose identity)
                 (extend compute-boot-script)))
 
 (define %boot-service
@@ -457,7 +457,7 @@ ACTIVATION-SCRIPT-TYPE."
                 (extensions
                  (list (service-extension boot-service-type
                                           gexps->activation-gexp)))
-                (compose append)
+                (compose identity)
                 (extend second-argument)))
 
 (define %activation-service
diff --git a/gnu/services/admin.scm b/gnu/services/admin.scm
index 64d7ae723c..aaf0b904fd 100644
--- a/gnu/services/admin.scm
+++ b/gnu/services/admin.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -92,7 +92,8 @@
 
 (define %rotated-files
   ;; Syslog files subject to rotation.
-  '("/var/log/messages" "/var/log/secure" "/var/log/maillog"))
+  '("/var/log/messages" "/var/log/secure" "/var/log/debug"
+    "/var/log/maillog"))
 
 (define %default-rotations
   (list (log-rotation                             ;syslog files
@@ -104,7 +105,7 @@
                                      read)))
                           (kill pid SIGHUP))))
         (log-rotation
-         (files '("/var/log/shepherd.log" "/var/log/guix-daemon.log")))))
+         (files '("/var/log/guix-daemon.log")))))
 
 (define (log-rotation->config rotation)
   "Return a string-valued gexp representing the rottlog configuration snippet
diff --git a/gnu/system.scm b/gnu/system.scm
index eb4b63c428..c35615abf6 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -515,7 +515,8 @@ explicitly appear in OS."
   ;; required for basic administrator tasks.
   (cons* procps psmisc which less zile nano
          pciutils usbutils
-         util-linux inetutils isc-dhcp
+         util-linux
+         inetutils isc-dhcp
          (@ (gnu packages admin) shadow)          ;for 'passwd'
 
          ;; wireless-tools is deprecated in favor of iw, but it's still what
diff --git a/gnu/system/examples/docker-image.tmpl b/gnu/system/examples/docker-image.tmpl
new file mode 100644
index 0000000000..d73187398f
--- /dev/null
+++ b/gnu/system/examples/docker-image.tmpl
@@ -0,0 +1,47 @@
+;; This is an operating system configuration template for a "Docker image"
+;; setup, so it has barely any services at all.
+
+(use-modules (gnu))
+
+(operating-system
+  (host-name "komputilo")
+  (timezone "Europe/Berlin")
+  (locale "en_US.utf8")
+
+  ;; This is where user accounts are specified.  The "root" account is
+  ;; implicit, and is initially created with the empty password.
+  (users (cons (user-account
+                (name "alice")
+                (comment "Bob's sister")
+                (group "users")
+                (supplementary-groups '("wheel"
+                                        "audio" "video"))
+                (home-directory "/home/alice"))
+               %base-user-accounts))
+
+  ;; Globally-installed packages.
+  (packages %base-packages)
+
+  ;; Because the system will run in a Docker container, we may omit many
+  ;; things that would normally be required in an operating system
+  ;; configuration file.  These things include:
+  ;;
+  ;;   * bootloader
+  ;;   * file-systems
+  ;;   * services such as mingetty, udevd, slim, networking, dhcp
+  ;;
+  ;; Either these things are simply not required, or Docker provides
+  ;; similar services for us.
+
+  ;; This will be ignored.
+  (bootloader (bootloader-configuration
+               (bootloader grub-bootloader)
+               (target "does-not-matter")))
+  ;; This will be ignored, too.
+  (file-systems (list (file-system
+                        (device "does-not-matter")
+                        (mount-point "/")
+                        (type "does-not-matter"))))
+
+  ;; Guix is all you need!
+  (services (list (guix-service))))
diff --git a/gnu/system/nss.scm b/gnu/system/nss.scm
index f4d2855289..673b96c713 100644
--- a/gnu/system/nss.scm
+++ b/gnu/system/nss.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -93,6 +93,8 @@
 ;;;
 
 (define %compat
+  ;; Note: Starting from version 2.26, libc no longer provides libnss_compat
+  ;; so this specification has become useless.
   (name-service
     (name "compat")
     (reaction (lookup-specification (not-found => return)))))
@@ -124,7 +126,7 @@
   (ethers     name-service-switch-ethers
               (default '()))
   (group      name-service-switch-group
-              (default (list %compat %files)))
+              (default (list %files)))
   (gshadow    name-service-switch-gshadow
               (default '()))
   (hosts      name-service-switch-hosts
@@ -136,7 +138,7 @@
   (networks   name-service-switch-networks
               (default (list %files %dns)))
   (password   name-service-switch-password
-              (default (list %compat %files)))
+              (default (list %files)))
   (public-key name-service-switch-public-key
               (default '()))
   (rpc        name-service-switch-rpc
@@ -144,7 +146,7 @@
   (services   name-service-switch-services
               (default '()))
   (shadow     name-service-switch-shadow
-              (default (list %compat %files))))
+              (default (list %files))))
 
 (define %default-nss
   ;; Default NSS configuration.
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 594ba66ff4..09a11af863 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +23,7 @@
 
 (define-module (gnu system vm)
   #:use-module (guix config)
+  #:use-module (guix docker)
   #:use-module (guix store)
   #:use-module (guix gexp)
   #:use-module (guix derivations)
@@ -29,6 +31,7 @@
   #:use-module (guix monads)
   #:use-module (guix records)
   #:use-module (guix modules)
+  #:use-module (guix scripts pack)
   #:use-module (guix utils)
   #:use-module (guix hash)
   #:use-module (guix base32)
@@ -38,7 +41,9 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bootloaders)
   #:use-module (gnu packages cdrom)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages guile)
+  #:autoload   (gnu packages gnupg) (libgcrypt)
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages less)
@@ -75,6 +80,7 @@
             system-qemu-image/shared-store
             system-qemu-image/shared-store-script
             system-disk-image
+            system-docker-image
 
             virtual-machine
             virtual-machine?))
@@ -87,8 +93,8 @@
 ;;; Code:
 
 (define %linux-vm-file-systems
-  ;; File systems mounted for 'derivation-in-linux-vm'.  The store and /xchg
-  ;; directory are shared with the host over 9p.
+  ;; File systems mounted for 'derivation-in-linux-vm'.  These are shared with
+  ;; the host over 9p.
   (list (file-system
           (mount-point (%store-prefix))
           (device "store")
@@ -102,6 +108,13 @@
           (type "9p")
           (needed-for-boot? #t)
           (options "trans=virtio")
+          (check? #f))
+        (file-system
+          (mount-point "/tmp")
+          (device "tmp")
+          (type "9p")
+          (needed-for-boot? #t)
+          (options "trans=virtio")
           (check? #f))))
 
 (define* (expression->derivation-in-linux-vm name exp
@@ -369,6 +382,106 @@ the image."
    #:disk-image-format disk-image-format
    #:references-graphs inputs))
 
+(define* (system-docker-image os
+                              #:key
+                              (name "guixsd-docker-image")
+                              register-closures?)
+  "Build a docker image.  OS is the desired <operating-system>.  NAME is the
+base name to use for the output file.  When REGISTER-CLOSURES? is not #f,
+register the closure of OS with Guix in the resulting Docker image.  This only
+makes sense when you want to build a GuixSD Docker image that has Guix
+installed inside of it.  If you don't need Guix (e.g., your GuixSD Docker
+image just contains a web server that is started by the Shepherd), then you
+should set REGISTER-CLOSURES? to #f."
+  (define not-config?
+    (match-lambda
+      (('guix 'config) #f)
+      (('guix rest ...) #t)
+      (('gnu rest ...) #t)
+      (rest #f)))
+
+  (define config
+    ;; (guix config) module for consumption by (guix gcrypt).
+    (scheme-file "gcrypt-config.scm"
+                 #~(begin
+                     (define-module (guix config)
+                       #:export (%libgcrypt))
+
+                     ;; XXX: Work around <http://bugs.gnu.org/15602>.
+                     (eval-when (expand load eval)
+                       (define %libgcrypt
+                         #+(file-append libgcrypt "/lib/libgcrypt"))))))
+  (mlet %store-monad ((os-drv (operating-system-derivation os #:container? #t))
+                      (name -> (string-append name ".tar.gz"))
+                      (graph -> "system-graph"))
+    (define build
+      (with-imported-modules `(,@(source-module-closure '((guix docker)
+                                                          (guix build utils)
+                                                          (gnu build vm))
+                                                        #:select? not-config?)
+                               (guix build store-copy)
+                               ((guix config) => ,config))
+        #~(begin
+            ;; Guile-JSON is required by (guix docker).
+            (add-to-load-path
+             (string-append #+guile-json "/share/guile/site/"
+                            (effective-version)))
+            (use-modules (guix docker)
+                         (guix build utils)
+                         (gnu build vm)
+                         (srfi srfi-19)
+                         (guix build store-copy))
+
+            (let* ((inputs '#$(append (list tar)
+                                      (if register-closures?
+                                          (list guix)
+                                          '())))
+                   ;; This initializer requires elevated privileges that are
+                   ;; not normally available in the build environment (e.g.,
+                   ;; it needs to create device nodes).  In order to obtain
+                   ;; such privileges, we run it as root in a VM.
+                   (initialize (root-partition-initializer
+                                #:closures '(#$graph)
+                                #:register-closures? #$register-closures?
+                                #:system-directory #$os-drv
+                                ;; De-duplication would fail due to
+                                ;; cross-device link errors, so don't do it.
+                                #:deduplicate? #f))
+                   ;; Even as root in a VM, the initializer would fail due to
+                   ;; lack of privileges if we use a root-directory that is on
+                   ;; a file system that is shared with the host (e.g., /tmp).
+                   (root-directory "/guixsd-system-root"))
+              (set-path-environment-variable "PATH" '("bin" "sbin") inputs)
+              (mkdir root-directory)
+              (initialize root-directory)
+              (build-docker-image
+               (string-append "/xchg/" #$name) ;; The output file.
+               (cons* root-directory
+                      (call-with-input-file (string-append "/xchg/" #$graph)
+                        read-reference-graph))
+               #$os-drv
+               #:compressor '(#+(file-append gzip "/bin/gzip") "-9n")
+               #:creation-time (make-time time-utc 0 1)
+               #:transformations `((,root-directory -> "")))))))
+    (expression->derivation-in-linux-vm
+     name
+     ;; The VM's initrd Guile doesn't support dlopen, but our "build" gexp
+     ;; needs to be run by a Guile that can dlopen libgcrypt.  The following
+     ;; hack works around that problem by putting the "build" gexp into an
+     ;; executable script (created by program-file) which, when executed, will
+     ;; run using a Guile that supports dlopen.  That way, the VM's initrd
+     ;; Guile can just execute it via invoke, without using dlopen.  See:
+     ;; https://lists.gnu.org/archive/html/guix-devel/2017-10/msg00233.html
+     (with-imported-modules `((guix build utils))
+       #~(begin
+           (use-modules (guix build utils))
+           ;; If we use execl instead of invoke here, the VM will crash with a
+           ;; kernel panic.
+           (invoke #$(program-file "build-docker-image" build))))
+     #:make-disk-image? #f
+     #:single-file-output? #t
+     #:references-graphs `((,graph ,os-drv)))))
+
 
 ;;;
 ;;; VM and disk images.
diff --git a/guix/ci.scm b/guix/ci.scm
new file mode 100644
index 0000000000..881f3d3927
--- /dev/null
+++ b/guix/ci.scm
@@ -0,0 +1,78 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix ci)
+  #:use-module (guix http-client)
+  #:autoload   (json parser) (json->scm)
+  #:use-module (srfi srfi-9)
+  #:export (build?
+            build-id
+            build-derivation
+            build-system
+            build-status
+            build-timestamp
+
+            %query-limit
+            queued-builds
+            latest-builds))
+
+;;; Commentary:
+;;;
+;;; This module provides a client to the HTTP interface of the Hydra and
+;;; Cuirass continuous integration (CI) tools.
+;;;
+;;; Code:
+
+(define-record-type <build>
+  (make-build id derivation system status timestamp)
+  build?
+  (id          build-id)                          ;integer
+  (derivation  build-derivation)                  ;string | #f
+  (system      build-system)                      ;string
+  (status      build-status)                      ;integer
+  (timestamp   build-timestamp))                  ;integer
+
+(define %query-limit
+  ;; Max number of builds requested in queries.
+  1000)
+
+(define (json-fetch url)
+  (let* ((port (http-fetch url))
+         (json (json->scm port)))
+    (close-port port)
+    json))
+
+(define (json->build json)
+  (make-build (hash-ref json "id")
+              (hash-ref json "derivation")
+              (hash-ref json "system")
+              (hash-ref json "buildstatus")
+              (hash-ref json "timestamp")))
+
+(define* (queued-builds url #:optional (limit %query-limit))
+  "Return the list of queued derivations on URL."
+  (let ((queue (json-fetch (string-append url "/api/queue?nr="
+                                          (number->string limit)))))
+    (map json->build queue)))
+
+(define* (latest-builds url #:optional (limit %query-limit))
+  (let ((latest (json-fetch (string-append url "/api/latestbuilds?nr="
+                                           (number->string limit)))))
+    ;; Note: Hydra does not provide a "derivation" field for entries in
+    ;; 'latestbuilds', but Cuirass does.
+    (map json->build latest)))
diff --git a/guix/docker.scm b/guix/docker.scm
index 060232148e..a75534c33b 100644
--- a/guix/docker.scm
+++ b/guix/docker.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,9 +24,12 @@
   #:use-module ((guix build utils)
                 #:select (mkdir-p
                           delete-file-recursively
-                          with-directory-excursion))
-  #:use-module (guix build store-copy)
+                          with-directory-excursion
+                          invoke))
   #:use-module (srfi srfi-19)
+  #:use-module (srfi srfi-26)
+  #:use-module ((texinfo string-utils)
+                #:select (escape-special-chars))
   #:use-module (rnrs bytevectors)
   #:use-module (ice-9 match)
   #:export (build-docker-image))
@@ -33,8 +37,7 @@
 ;; Load Guile-JSON at run time to simplify the job of 'imported-modules' & co.
 (module-use! (current-module) (resolve-interface '(json)))
 
-;; Generate a 256-bit identifier in hexadecimal encoding for the Docker image
-;; containing the closure at PATH.
+;; Generate a 256-bit identifier in hexadecimal encoding for the Docker image.
 (define docker-id
   (compose bytevector->base16-string sha256 string->utf8))
 
@@ -102,82 +105,123 @@ return \"a\"."
     ((first rest ...)
      first)))
 
-(define* (build-docker-image image path
-                             #:key closure compressor
+(define* (build-docker-image image paths prefix
+                             #:key
                              (symlinks '())
+                             (transformations '())
                              (system (utsname:machine (uname)))
+                             compressor
                              (creation-time (current-time time-utc)))
-  "Write to IMAGE a Docker image archive from the given store PATH.  The image
-contains the closure of PATH, as specified in CLOSURE (a file produced by
-#:references-graphs).  SYMLINKS must be a list of (SOURCE -> TARGET) tuples
-describing symlinks to be created in the image, where each TARGET is relative
-to PATH.  SYSTEM is a GNU triplet (or prefix thereof) of the system the
-binaries at PATH are for; it is used to produce metadata in the image.
-
-Use COMPRESSOR, a command such as '(\"gzip\" \"-9n\"), to compress IMAGE.  Use
-CREATION-TIME, a SRFI-19 time-utc object, as the creation time in metadata."
-  (let ((directory "/tmp/docker-image")           ;temporary working directory
-        (closure (canonicalize-path closure))
-        (id (docker-id path))
-        (time (date->string (time-utc->date creation-time) "~4"))
-        (arch (let-syntax ((cond* (syntax-rules ()
-                                    ((_ (pattern clause) ...)
-                                     (cond ((string-prefix? pattern system)
-                                            clause)
-                                           ...
-                                           (else
-                                            (error "unsupported system"
-                                                   system)))))))
-                (cond* ("x86_64" "amd64")
-                       ("i686"   "386")
-                       ("arm"    "arm")
-                       ("mips64" "mips64le")))))
+  "Write to IMAGE a Docker image archive containing the given PATHS.  PREFIX
+must be a store path that is a prefix of any store paths in PATHS.
+
+SYMLINKS must be a list of (SOURCE -> TARGET) tuples describing symlinks to be
+created in the image, where each TARGET is relative to PREFIX.
+TRANSFORMATIONS must be a list of (OLD -> NEW) tuples describing how to
+transform the PATHS.  Any path in PATHS that begins with OLD will be rewritten
+in the Docker image so that it begins with NEW instead.  If a path is a
+non-empty directory, then its contents will be recursively added, as well.
+
+SYSTEM is a GNU triplet (or prefix thereof) of the system the binaries in
+PATHS are for; it is used to produce metadata in the image.  Use COMPRESSOR, a
+command such as '(\"gzip\" \"-9n\"), to compress IMAGE.  Use CREATION-TIME, a
+SRFI-19 time-utc object, as the creation time in metadata."
+  (define (sanitize path-fragment)
+    (escape-special-chars
+     ;; GNU tar strips the leading slash off of absolute paths before applying
+     ;; the transformations, so we need to do the same, or else our
+     ;; replacements won't match any paths.
+     (string-trim path-fragment #\/)
+     ;; Escape the basic regexp special characters (see: "(sed) BRE syntax").
+     ;; We also need to escape "/" because we use it as a delimiter.
+     "/*.^$[]\\"
+     #\\))
+  (define transformation->replacement
+    (match-lambda
+      ((old '-> new)
+       ;; See "(tar) transform" for details on the expression syntax.
+       (string-append "s/^" (sanitize old) "/" (sanitize new) "/"))))
+  (define (transformations->expression transformations)
+    (let ((replacements (map transformation->replacement transformations)))
+      (string-append
+       ;; Avoid transforming link targets, since that would break some links
+       ;; (e.g., symlinks that point to an absolute store path).
+       "flags=rSH;"
+       (string-join replacements ";")
+       ;; Some paths might still have a leading path delimiter even after tar
+       ;; transforms them (e.g., "/a/b" might be transformed into "/b"), so
+       ;; strip any leading path delimiters that remain.
+       ";s,^//*,,")))
+  (define transformation-options
+    (if (eq? '() transformations)
+        '()
+        `("--transform" ,(transformations->expression transformations))))
+  (let* ((directory "/tmp/docker-image") ;temporary working directory
+         (id (docker-id prefix))
+         (time (date->string (time-utc->date creation-time) "~4"))
+         (arch (let-syntax ((cond* (syntax-rules ()
+                                     ((_ (pattern clause) ...)
+                                      (cond ((string-prefix? pattern system)
+                                             clause)
+                                            ...
+                                            (else
+                                             (error "unsupported system"
+                                                    system)))))))
+                 (cond* ("x86_64" "amd64")
+                        ("i686"   "386")
+                        ("arm"    "arm")
+                        ("mips64" "mips64le")))))
     ;; Make sure we start with a fresh, empty working directory.
     (mkdir directory)
-
-    (and (with-directory-excursion directory
-           (mkdir id)
-           (with-directory-excursion id
-             (with-output-to-file "VERSION"
-               (lambda () (display schema-version)))
-             (with-output-to-file "json"
-               (lambda () (scm->json (image-description id time))))
-
-             ;; Wrap it up.
-             (let ((items (call-with-input-file closure
-                            read-reference-graph)))
-               ;; Create SYMLINKS.
-               (for-each (match-lambda
-                           ((source '-> target)
-                            (let ((source (string-trim source #\/)))
-                              (mkdir-p (dirname source))
-                              (symlink (string-append path "/" target)
-                                       source))))
-                         symlinks)
-
-               (and (zero? (apply system* "tar" "-cf" "layer.tar"
-                                  (append %tar-determinism-options
-                                          items
-                                          (map symlink-source symlinks))))
-                    (for-each delete-file-recursively
-                              (map (compose topmost-component symlink-source)
-                                   symlinks)))))
-
-           (with-output-to-file "config.json"
-             (lambda ()
-               (scm->json (config (string-append id "/layer.tar")
-                                  time arch))))
-           (with-output-to-file "manifest.json"
-             (lambda ()
-               (scm->json (manifest path id))))
-           (with-output-to-file "repositories"
-             (lambda ()
-               (scm->json (repositories path id)))))
-
-         (and (zero? (apply system* "tar" "-C" directory "-cf" image
-                            `(,@%tar-determinism-options
-                              ,@(if compressor
-                                    (list "-I" (string-join compressor))
-                                    '())
-                              ".")))
-              (begin (delete-file-recursively directory) #t)))))
+    (with-directory-excursion directory
+      (mkdir id)
+      (with-directory-excursion id
+        (with-output-to-file "VERSION"
+          (lambda () (display schema-version)))
+        (with-output-to-file "json"
+          (lambda () (scm->json (image-description id time))))
+
+        ;; Create SYMLINKS.
+        (for-each (match-lambda
+                    ((source '-> target)
+                     (let ((source (string-trim source #\/)))
+                       (mkdir-p (dirname source))
+                       (symlink (string-append prefix "/" target)
+                                source))))
+                  symlinks)
+
+        (apply invoke "tar" "-cf" "layer.tar"
+               `(,@transformation-options
+                 ,@%tar-determinism-options
+                 ,@paths
+                 ,@(map symlink-source symlinks)))
+        ;; It is possible for "/" to show up in the archive, especially when
+        ;; applying transformations.  For example, the transformation
+        ;; "s,^/a,," will (perhaps surprisingly) cause GNU tar to transform
+        ;; the path "/a" into "/".  The presence of "/" in the archive is
+        ;; probably benign, but it is definitely safe to remove it, so let's
+        ;; do that.  This fails when "/" is not in the archive, so use system*
+        ;; instead of invoke to avoid an exception in that case.
+        (system* "tar" "--delete" "/" "-f" "layer.tar")
+        (for-each delete-file-recursively
+                  (map (compose topmost-component symlink-source)
+                       symlinks)))
+
+      (with-output-to-file "config.json"
+        (lambda ()
+          (scm->json (config (string-append id "/layer.tar")
+                             time arch))))
+      (with-output-to-file "manifest.json"
+        (lambda ()
+          (scm->json (manifest prefix id))))
+      (with-output-to-file "repositories"
+        (lambda ()
+          (scm->json (repositories prefix id)))))
+
+    (apply invoke "tar" "-cf" image "-C" directory
+           `(,@%tar-determinism-options
+             ,@(if compressor
+                   (list "-I" (string-join compressor))
+                   '())
+             "."))
+    (delete-file-recursively directory)))
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 8dea022e04..b47965d9eb 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -60,6 +60,7 @@
             program-file-name
             program-file-gexp
             program-file-guile
+            program-file-module-path
 
             scheme-file
             scheme-file?
@@ -380,25 +381,28 @@ This is the declarative counterpart of 'gexp->derivation'."
          (apply gexp->derivation name gexp options)))))
 
 (define-record-type <program-file>
-  (%program-file name gexp guile)
+  (%program-file name gexp guile path)
   program-file?
   (name       program-file-name)                  ;string
   (gexp       program-file-gexp)                  ;gexp
-  (guile      program-file-guile))                ;package
+  (guile      program-file-guile)                 ;package
+  (path       program-file-module-path))          ;list of strings
 
-(define* (program-file name gexp #:key (guile #f))
+(define* (program-file name gexp #:key (guile #f) (module-path %load-path))
   "Return an object representing the executable store item NAME that runs
-GEXP.  GUILE is the Guile package used to execute that script.
+GEXP.  GUILE is the Guile package used to execute that script.  Imported
+modules of GEXP are looked up in MODULE-PATH.
 
 This is the declarative counterpart of 'gexp->script'."
-  (%program-file name gexp guile))
+  (%program-file name gexp guile module-path))
 
 (define-gexp-compiler (program-file-compiler (file <program-file>)
                                              system target)
   ;; Compile FILE by returning a derivation that builds the script.
   (match file
-    (($ <program-file> name gexp guile)
+    (($ <program-file> name gexp guile module-path)
      (gexp->script name gexp
+                   #:module-path module-path
                    #:guile (or guile (default-guile))))))
 
 (define-record-type <scheme-file>
@@ -1116,11 +1120,14 @@ they can refer to each other."
   (module-ref (resolve-interface '(gnu packages guile))
               'guile-2.2))
 
-(define (load-path-expression modules)
+(define* (load-path-expression modules #:optional (path %load-path))
   "Return as a monadic value a gexp that sets '%load-path' and
-'%load-compiled-path' to point to MODULES, a list of module names."
-  (mlet %store-monad ((modules  (imported-modules modules))
-                      (compiled (compiled-modules modules)))
+'%load-compiled-path' to point to MODULES, a list of module names.  MODULES
+are searched for in PATH."
+  (mlet %store-monad ((modules  (imported-modules modules
+                                                  #:module-path path))
+                      (compiled (compiled-modules modules
+                                                  #:module-path path)))
     (return (gexp (eval-when (expand load eval)
                     (set! %load-path
                       (cons (ungexp modules) %load-path))
@@ -1129,11 +1136,13 @@ they can refer to each other."
                             %load-compiled-path)))))))
 
 (define* (gexp->script name exp
-                       #:key (guile (default-guile)))
+                       #:key (guile (default-guile))
+                       (module-path %load-path))
   "Return an executable script NAME that runs EXP using GUILE, with EXP's
-imported modules in its search path."
+imported modules in its search path.  Look up EXP's modules in MODULE-PATH."
   (mlet %store-monad ((set-load-path
-                       (load-path-expression (gexp-modules exp))))
+                       (load-path-expression (gexp-modules exp)
+                                             module-path)))
     (gexp->derivation name
                       (gexp
                        (call-with-output-file (ungexp output)
@@ -1148,12 +1157,16 @@ imported modules in its search path."
 
                            (write '(ungexp set-load-path) port)
                            (write '(ungexp exp) port)
-                           (chmod port #o555)))))))
+                           (chmod port #o555))))
+                      #:module-path module-path)))
 
-(define* (gexp->file name exp #:key (set-load-path? #t))
+(define* (gexp->file name exp #:key
+                     (set-load-path? #t)
+                     (module-path %load-path))
   "Return a derivation that builds a file NAME containing EXP.  When
 SET-LOAD-PATH? is true, emit code in the resulting file to set '%load-path'
-and '%load-compiled-path' to honor EXP's imported modules."
+and '%load-compiled-path' to honor EXP's imported modules.  Lookup EXP's
+modules in MODULE-PATH."
   (match (if set-load-path? (gexp-modules exp) '())
     (()                                           ;zero modules
      (gexp->derivation name
@@ -1164,13 +1177,15 @@ and '%load-compiled-path' to honor EXP's imported modules."
                        #:local-build? #t
                        #:substitutable? #f))
     ((modules ...)
-     (mlet %store-monad ((set-load-path (load-path-expression modules)))
+     (mlet %store-monad ((set-load-path (load-path-expression modules
+                                                              module-path)))
        (gexp->derivation name
                          (gexp
                           (call-with-output-file (ungexp output)
                             (lambda (port)
                               (write '(ungexp set-load-path) port)
                               (write '(ungexp exp) port))))
+                         #:module-path module-path
                          #:local-build? #t
                          #:substitutable? #f)))))
 
diff --git a/guix/git.scm b/guix/git.scm
index d31c35f64f..103749d0e2 100644
--- a/guix/git.scm
+++ b/guix/git.scm
@@ -147,6 +147,13 @@ Git repositories are kept in the cache directory specified by
      (when cache-exists?
        (remote-fetch (remote-lookup repository "origin")))
      (switch-to-ref repository ref)
+
+     ;; Reclaim file descriptors and memory mappings associated with
+     ;; REPOSITORY as soon as possible.
+     (when (module-defined? (resolve-interface '(git repository))
+                            'repository-close!)
+       (repository-close! repository))
+
      (copy-to-store store cache-dir
                     #:url url
                     #:repository repository))))
diff --git a/guix/modules.scm b/guix/modules.scm
index 6c602eda48..bf656bb241 100644
--- a/guix/modules.scm
+++ b/guix/modules.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +29,7 @@
             file-name->module-name
             module-name->file-name
 
+            source-module-dependencies
             source-module-closure
             live-module-closure
             guix-module-name?))
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index 57f2d82c5c..401087e830 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -69,13 +69,21 @@
 found.  Return #f if no build log was found."
   (define (valid-url? url)
     ;; Probe URL and return #t if it is accessible.
-    (catch 'getaddrinfo-error
+    (catch #t
       (lambda ()
         (guard (c ((http-get-error? c) #f))
           (close-port (http-fetch url #:buffered? #f))
           #t))
-      (lambda _
-        #f)))
+      (match-lambda*
+        (('getaddrinfo-error . _)
+         #f)
+        (('tls-certificate-error args ...)
+         (report-error (G_ "cannot access build log at '~a':~%") url)
+         (print-exception (current-error-port) #f
+                          'tls-certificate-error args)
+         (exit 1))
+        ((key . args)
+         (apply throw key args)))))
 
   (define (find-url file)
     (let ((base (basename file)))
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index 4f88c513c0..f8a9702b30 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -332,7 +332,7 @@ packages."
                   (let ((module (make-user-module '())))
                     (packages->outputs (load* file module) mode)))
                  (('manifest . file)
-                  (let ((module (make-user-module '())))
+                  (let ((module (make-user-module '((guix profiles) (gnu)))))
                     (manifest->outputs (load* file module))))
                  (_ '(#f)))
                opts)))
diff --git a/guix/scripts/gc.scm b/guix/scripts/gc.scm
index a31d2236b0..e4ed7227ff 100644
--- a/guix/scripts/gc.scm
+++ b/guix/scripts/gc.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, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -61,6 +61,8 @@ Invoke the garbage collector.\n"))
   -R, --requisites       list the requisites of PATHS"))
   (display (G_ "
       --referrers        list the referrers of PATHS"))
+  (display (G_ "
+      --derivers         list the derivers of PATHS"))
   (newline)
   (display (G_ "
       --verify[=OPTS]    verify the integrity of the store; OPTS is a
@@ -153,6 +155,10 @@ Invoke the garbage collector.\n"))
                 (lambda (opt name arg result)
                   (alist-cons 'action 'list-referrers
                               (alist-delete 'action result))))
+        (option '("derivers") #f #f
+                (lambda (opt name arg result)
+                  (alist-cons 'action 'list-derivers
+                              (alist-delete 'action result))))
         (option '("list-failures") #f #f
                 (lambda (opt name arg result)
                   (alist-cons 'action 'list-failures
@@ -241,6 +247,8 @@ Invoke the garbage collector.\n"))
                            (requisites store (list item)))))
         ((list-referrers)
          (list-relatives referrers))
+        ((list-derivers)
+         (list-relatives valid-derivers))
         ((optimize)
          (assert-no-extra-arguments)
          (optimize-store store))
diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm
index 78f09f181b..346ca4ea88 100644
--- a/guix/scripts/graph.scm
+++ b/guix/scripts/graph.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,9 +27,11 @@
   #:use-module (guix gexp)
   #:use-module (guix derivations)
   #:use-module (guix memoization)
+  #:use-module (guix modules)
   #:use-module ((guix build-system gnu) #:select (standard-packages))
   #:use-module (gnu packages)
   #:use-module (guix sets)
+  #:use-module ((guix utils) #:select (location-file))
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
@@ -44,6 +46,7 @@
             %derivation-node-type
             %reference-node-type
             %referrer-node-type
+            %module-node-type
             %node-types
 
             guix-graph))
@@ -332,6 +335,36 @@ substitutes."
 
 
 ;;;
+;;; Scheme modules.
+;;;
+
+(define (module-from-package package)
+  (file-name->module-name (location-file (package-location package))))
+
+(define (source-module-dependencies* module)
+  "Like 'source-module-dependencies' but filter out modules that are not
+package modules, while attempting to retain user package modules."
+  (remove (match-lambda
+            (('guix _ ...) #t)
+            (('system _ ...) #t)
+            (('language _ ...) #t)
+            (('ice-9 _ ...) #t)
+            (('srfi _ ...) #t)
+            (_ #f))
+          (source-module-dependencies module)))
+
+(define %module-node-type
+  ;; Show the graph of package modules.
+  (node-type
+   (name "module")
+   (description "the graph of package modules")
+   (convert (lift1 (compose list module-from-package) %store-monad))
+   (identifier (lift1 identity %store-monad))
+   (label object->string)
+   (edges (lift1 source-module-dependencies* %store-monad))))
+
+
+;;;
 ;;; List of node types.
 ;;;
 
@@ -344,7 +377,8 @@ substitutes."
         %bag-emerged-node-type
         %derivation-node-type
         %reference-node-type
-        %referrer-node-type))
+        %referrer-node-type
+        %module-node-type))
 
 (define (lookup-node-type name)
   "Return the node type called NAME.  Raise an error if it is not found."
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 59dd117edb..488638adc5 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net>
+;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,7 +34,9 @@
   #:use-module (guix derivations)
   #:use-module (guix scripts build)
   #:use-module (gnu packages)
+  #:use-module (gnu packages bootstrap)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages guile)
   #:autoload   (gnu packages base) (tar)
   #:autoload   (gnu packages package-management) (guix)
   #:autoload   (gnu packages gnupg) (libgcrypt)
@@ -67,6 +70,11 @@
                     #~(#+(file-append bzip2 "/bin/bzip2") "-9"))
         (compressor "none" "" #f)))
 
+;; This one is only for use in this module, so don't put it in %compressors.
+(define bootstrap-xz
+  (compressor "bootstrap-xz" ".xz"
+              #~(#+(file-append %bootstrap-coreutils&co "/bin/xz") "-e -T0")))
+
 (define (lookup-compressor name)
   "Return the compressor object called NAME.  Error out if it could not be
 found."
@@ -230,6 +238,7 @@ the image."
   (define build
     (with-imported-modules `(,@(source-module-closure '((guix docker))
                                                       #:select? not-config?)
+                             (guix build store-copy)
                              ((guix config) => ,config))
       #~(begin
           ;; Guile-JSON is required by (guix docker).
@@ -237,13 +246,15 @@ the image."
            (string-append #+json "/share/guile/site/"
                           (effective-version)))
 
-          (use-modules (guix docker) (srfi srfi-19))
+          (use-modules (guix docker) (srfi srfi-19) (guix build store-copy))
 
           (setenv "PATH" (string-append #$tar "/bin"))
 
-          (build-docker-image #$output #$profile
+          (build-docker-image #$output
+                              (call-with-input-file "profile"
+                                read-reference-graph)
+                              #$profile
                               #:system (or #$target (utsname:machine (uname)))
-                              #:closure "profile"
                               #:symlinks '#$symlinks
                               #:compressor '#$(compressor-command compressor)
                               #:creation-time (make-time time-utc 0 1)))))
@@ -325,6 +336,9 @@ the image."
          (option '("localstatedir") #f #f
                  (lambda (opt name arg result)
                    (alist-cons 'localstatedir? #t result)))
+         (option '("bootstrap") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'bootstrap? #t result)))
 
          (append %transformation-options
                  %standard-build-options)))
@@ -352,6 +366,8 @@ Create a bundle of PACKAGE.\n"))
   -m, --manifest=FILE    create a pack with the manifest from FILE"))
   (display (G_ "
       --localstatedir    include /var/guix in the resulting pack"))
+  (display (G_ "
+      --bootstrap        use the bootstrap binaries to build the pack"))
   (newline)
   (display (G_ "
   -h, --help             display this help and exit"))
@@ -393,28 +409,43 @@ Create a bundle of PACKAGE.\n"))
        (else (packages->manifest packages)))))
 
   (with-error-handling
-    (parameterize ((%graft? (assoc-ref opts 'graft?)))
-      (let* ((dry-run?    (assoc-ref opts 'dry-run?))
-             (manifest    (manifest-from-args opts))
-             (pack-format (assoc-ref opts 'format))
-             (name        (string-append (symbol->string pack-format)
-                                         "-pack"))
-             (target      (assoc-ref opts 'target))
-             (compressor  (assoc-ref opts 'compressor))
-             (symlinks    (assoc-ref opts 'symlinks))
-             (build-image (match (assq-ref %formats pack-format)
-                            ((? procedure? proc) proc)
-                            (#f
-                             (leave (G_ "~a: unknown pack format")
-                                    format))))
-             (localstatedir? (assoc-ref opts 'localstatedir?)))
-        (with-store store
+    (let* ((dry-run?    (assoc-ref opts 'dry-run?))
+           (manifest    (manifest-from-args opts))
+           (pack-format (assoc-ref opts 'format))
+           (name        (string-append (symbol->string pack-format)
+                                       "-pack"))
+           (target      (assoc-ref opts 'target))
+           (bootstrap?  (assoc-ref opts 'bootstrap?))
+           (compressor  (if bootstrap?
+                            bootstrap-xz
+                            (assoc-ref opts 'compressor)))
+           (tar         (if bootstrap?
+                            %bootstrap-coreutils&co
+                            tar))
+           (symlinks    (assoc-ref opts 'symlinks))
+           (build-image (match (assq-ref %formats pack-format)
+                          ((? procedure? proc) proc)
+                          (#f
+                           (leave (G_ "~a: unknown pack format")
+                                  format))))
+           (localstatedir? (assoc-ref opts 'localstatedir?)))
+      (with-store store
+        (parameterize ((%graft? (assoc-ref opts 'graft?))
+                       (%guile-for-build (package-derivation
+                                          store
+                                          (if (assoc-ref opts 'bootstrap?)
+                                              %bootstrap-guile
+                                              (canonical-package guile-2.2)))))
           ;; Set the build options before we do anything else.
           (set-build-options-from-command-line store opts)
 
           (run-with-store store
             (mlet* %store-monad ((profile (profile-derivation
                                            manifest
+                                           #:hooks (if bootstrap?
+                                                       '()
+                                                       %default-profile-hooks)
+                                           #:locales? (not bootstrap?)
                                            #:target target))
                                  (drv (build-image name profile
                                                    #:target
@@ -424,7 +455,9 @@ Create a bundle of PACKAGE.\n"))
                                                    #:symlinks
                                                    symlinks
                                                    #:localstatedir?
-                                                   localstatedir?)))
+                                                   localstatedir?
+                                                   #:tar
+                                                   tar)))
               (mbegin %store-monad
                 (show-what-to-build* (list drv)
                                      #:use-substitutes?
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index f0c4a2ba1b..b50cabcd1a 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2016, 2017 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2016, 2017, 2018 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -701,7 +701,9 @@ checking this by themselves in their 'check' procedure."
                                  ("iso9660" "image.iso")
                                  (_         "disk-image"))
                         #:disk-image-size image-size
-                        #:file-system-type file-system-type))))
+                        #:file-system-type file-system-type))
+    ((docker-image)
+     (system-docker-image os #:register-closures? #t))))
 
 (define (maybe-suggest-running-guix-pull)
   "Suggest running 'guix pull' if this has never been done before."
@@ -905,6 +907,8 @@ Some ACTIONS support additional ARGS.\n"))
   (display (G_ "\
    disk-image       build a disk image, suitable for a USB stick\n"))
   (display (G_ "\
+   docker-image     build a Docker image\n"))
+  (display (G_ "\
    init             initialize a root file system to run GNU\n"))
   (display (G_ "\
    extension-graph  emit the service extension graph in Dot format\n"))
@@ -1142,7 +1146,7 @@ argument list and OPTS is the option alist."
           (case action
             ((build container vm vm-image disk-image reconfigure init
               extension-graph shepherd-graph list-generations roll-back
-              switch-generation search)
+              switch-generation search docker-image)
              (alist-cons 'action action result))
             (else (leave (G_ "~a: unknown action~%") action))))))
 
@@ -1171,7 +1175,7 @@ argument list and OPTS is the option alist."
         (exit 1))
 
       (case action
-        ((build container vm vm-image disk-image reconfigure)
+        ((build container vm vm-image disk-image docker-image reconfigure)
          (unless (or (= count 1)
                      (and expr (= count 0)))
            (fail)))
diff --git a/guix/scripts/weather.scm b/guix/scripts/weather.scm
index 2e782e36ce..5c934abaef 100644
--- a/guix/scripts/weather.scm
+++ b/guix/scripts/weather.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -29,11 +29,14 @@
   #:use-module (guix grafts)
   #:use-module ((guix build syscalls) #:select (terminal-columns))
   #:use-module (guix scripts substitute)
+  #:use-module (guix http-client)
+  #:use-module (guix ci)
   #:use-module (gnu packages)
   #:use-module (web uri)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-37)
   #:use-module (ice-9 match)
   #:use-module (ice-9 format)
@@ -100,6 +103,57 @@ values."
 (define-syntax-rule (let/time ((time result exp)) body ...)
   (call-with-time (lambda () exp) (lambda (time result) body ...)))
 
+(define (histogram field proc seed lst)
+  "Return an alist giving a histogram of all the values of FIELD for elements
+of LST. FIELD must be a one element procedure that returns a field's value.
+For each FIELD value, call PROC with the previous field-specific result.
+Example:
+
+  (histogram car (lambda (x n) (+ 1 n)) 0 '((a . x)(b . y)(a . z)))
+  => ((a . 2) (b . 1))
+
+meaning that we have two a's and one b."
+  (let loop ((lst lst)
+             (result '()))
+    (match lst
+      (()
+       result)
+      ((head . tail)
+       (let ((value (field head)))
+         (loop tail
+               (match (assoc-ref result value)
+                 (#f
+                  `((,value . ,(proc head seed)) ,@result))
+                 (previous
+                  `((,value . ,(proc head previous))
+                    ,@(alist-delete value result))))))))))
+
+(define (throughput lst timestamp)
+  "Return the throughput, in items per second, given the elements of LST,
+calling TIMESTAMP to get the \"timestamp\" of each item."
+  (let ((oldest (reduce min +inf.0 (map build-timestamp lst)))
+        (now    (time-second (current-time time-utc))))
+    (/ (length lst) (- now oldest) 1.)))
+
+(define (queued-subset queue items)
+  "Return the subset of ITEMS, a list of store file names, that appears in
+QUEUE, a list of builds.  Return #f if elements in QUEUE lack information
+about the derivations queued, as is the case with Hydra."
+  (define queued
+    (append-map (lambda (build)
+                  (match (false-if-exception
+                          (read-derivation-from-file (build-derivation build)))
+                    (#f
+                     '())
+                    (drv
+                     (match (derivation->output-paths drv)
+                       (((names . items) ...) items)))))
+                queue))
+
+  (if (any (negate build-derivation) queue)
+      #f                                          ;no derivation information
+      (lset-intersection string=? queued items)))
+
 (define (report-server-coverage server items)
   "Report the subset of ITEMS available as substitutes on SERVER."
   (define MiB (* (expt 2 20) 1.))
@@ -111,6 +165,8 @@ values."
     (format #t "~a~%" server)
     (let ((obtained  (length narinfos))
           (requested (length items))
+          (missing   (lset-difference string=?
+                                      items (map narinfo-path narinfos)))
           (sizes     (filter-map narinfo-file-size narinfos))
           (time      (+ (time-second time)
                         (/ (time-nanosecond time) 1e9))))
@@ -131,7 +187,56 @@ values."
       (format #t (G_ "  ~,3h seconds per request (~,1h seconds in total)~%")
               (/ time requested 1.) time)
       (format #t (G_ "  ~,1h requests per second~%")
-              (/ requested time 1.)))))
+              (/ requested time 1.))
+
+      (guard (c ((http-get-error? c)
+                 (if (= 404 (http-get-error-code c))
+                     (format (current-error-port)
+                             (G_ "  (continuous integration information \
+unavailable)~%"))
+                     (format (current-error-port)
+                             (G_ "  '~a' returned ~a (~s)~%")
+                             (uri->string (http-get-error-uri c))
+                             (http-get-error-code c)
+                             (http-get-error-reason c)))))
+        (let* ((max    %query-limit)
+               (queue  (queued-builds server max))
+               (len    (length queue))
+               (histo  (histogram build-system
+                                  (lambda (build count)
+                                    (+ 1 count))
+                                  0 queue)))
+          (newline)
+          (unless (null? missing)
+            (let ((missing (length missing)))
+              (match (queued-subset queue missing)
+                (#f #f)
+                ((= length queued)
+                 (format #t (G_ "  ~,1f% (~h out of ~h) of the missing items \
+are queued~%")
+                         (* 100. (/ queued missing))
+                         queued missing)))))
+
+          (if (>= len max)
+              (format #t (G_ "  at least ~h queued builds~%") len)
+              (format #t (G_ "  ~h queued builds~%") len))
+          (for-each (match-lambda
+                      ((system . count)
+                       (format #t (G_ "      ~a: ~a (~0,1f%)~%")
+                               system count (* 100. (/ count len)))))
+                    histo))
+
+        (let* ((latest     (latest-builds server))
+               (builds/sec (throughput latest build-timestamp)))
+          (format #t (G_ "  build rate: ~1,2f builds per hour~%")
+                  (* builds/sec 3600.))
+          (for-each (match-lambda
+                      ((system . builds)
+                       (format #t (G_ "      ~a: ~,2f builds per hour~%")
+                               system
+                               (* (throughput builds build-timestamp)
+                                  3600.))))
+                    (histogram build-system cons '() latest)))))))
 
 
 ;;;
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 5873abdd41..2f8940e2c6 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -25,6 +25,7 @@
   #:use-module (guix packages)
   #:use-module (guix tests)
   #:use-module ((guix build utils) #:select (with-directory-excursion))
+  #:use-module ((guix utils) #:select (call-with-temporary-directory))
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bootstrap)
@@ -853,6 +854,37 @@
       (return (and (zero? (close-pipe pipe))
                    (= (expt n 2) (string->number str)))))))
 
+(test-assertm "gexp->script #:module-path"
+  (call-with-temporary-directory
+   (lambda (directory)
+     (define str
+       "Fake (guix base32) module!")
+
+     (mkdir (string-append directory "/guix"))
+     (call-with-output-file (string-append directory "/guix/base32.scm")
+       (lambda (port)
+         (write `(begin (define-module (guix base32))
+                        (define-public %fake! ,str))
+                port)))
+
+     (mlet* %store-monad ((exp -> (with-imported-modules '((guix base32))
+                                    (gexp (begin
+                                            (use-modules (guix base32))
+                                            (write (list %load-path
+                                                         %fake!))))))
+                          (drv    (gexp->script "guile-thing" exp
+                                                #:guile %bootstrap-guile
+                                                #:module-path (list directory)))
+                          (out -> (derivation->output-path drv))
+                          (done   (built-derivations (list drv))))
+       (let* ((pipe  (open-input-pipe out))
+              (data  (read pipe)))
+         (return (and (zero? (close-pipe pipe))
+                      (match data
+                        ((load-path str*)
+                         (and (string=? str* str)
+                              (not (member directory load-path))))))))))))
+
 (test-assertm "program-file"
   (let* ((n      (random (expt 2 50)))
          (exp    (with-imported-modules '((guix build utils))
@@ -870,6 +902,33 @@
           (return (and (zero? (close-pipe pipe))
                        (= n (string->number str)))))))))
 
+(test-assertm "program-file #:module-path"
+  (call-with-temporary-directory
+   (lambda (directory)
+     (define text (random-text))
+
+     (call-with-output-file (string-append directory "/stupid-module.scm")
+       (lambda (port)
+         (write `(begin (define-module (stupid-module))
+                        (define-public %stupid-thing ,text))
+                port)))
+
+     (let* ((exp    (with-imported-modules '((stupid-module))
+                      (gexp (begin
+                              (use-modules (stupid-module))
+                              (display %stupid-thing)))))
+            (file   (program-file "program" exp
+                                  #:guile %bootstrap-guile
+                                  #:module-path (list directory))))
+       (mlet* %store-monad ((drv (lower-object file))
+                            (out -> (derivation->output-path drv)))
+         (mbegin %store-monad
+           (built-derivations (list drv))
+           (let* ((pipe  (open-input-pipe out))
+                  (str   (get-string-all pipe)))
+             (return (and (zero? (close-pipe pipe))
+                          (string=? text str))))))))))
+
 (test-assertm "scheme-file"
   (let* ((text   (plain-file "foo" "Hello, world!"))
          (scheme (scheme-file "bar" #~(list "foo" #$text))))
diff --git a/tests/graph.scm b/tests/graph.scm
index 00fd37243c..5faa19298a 100644
--- a/tests/graph.scm
+++ b/tests/graph.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -271,6 +271,24 @@ edges."
                           (list txt out))
                   (equal? edges `((,txt ,out)))))))))))
 
+(test-assert "module graph"
+  (let-values (((backend nodes+edges) (make-recording-backend)))
+    (run-with-store %store
+      (export-graph '((gnu packages guile)) 'port
+                    #:node-type %module-node-type
+                    #:backend backend))
+
+    (let-values (((nodes edges) (nodes+edges)))
+      (and (member '(gnu packages guile)
+                   (match nodes
+                     (((ids labels) ...) ids)))
+           (->bool (and (member (list '(gnu packages guile)
+                                      '(gnu packages libunistring))
+                                edges)
+                        (member (list '(gnu packages guile)
+                                      '(gnu packages bdw-gc))
+                                edges)))))))
+
 (test-assert "node-edges"
   (run-with-store %store
     (let ((packages (fold-packages cons '())))
diff --git a/tests/guix-gc.sh b/tests/guix-gc.sh
index efbc7e759c..ef2d9543b7 100644
--- a/tests/guix-gc.sh
+++ b/tests/guix-gc.sh
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2013, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -54,6 +54,9 @@ guix gc --references "$out/bin/guile"
 if guix gc --references /dev/null;
 then false; else true; fi
 
+# Check derivers.
+guix gc --derivers "$out" | grep "$drv"
+
 # Add then reclaim a .drv file.
 drv="`guix build idutils -d`"
 test -f "$drv"
diff --git a/tests/guix-pack.sh b/tests/guix-pack.sh
new file mode 100644
index 0000000000..1b63b957be
--- /dev/null
+++ b/tests/guix-pack.sh
@@ -0,0 +1,83 @@
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
+#
+# This file is part of GNU Guix.
+#
+# GNU Guix is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or (at
+# your option) any later version.
+#
+# GNU Guix is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+#
+# Test the `guix pack' command-line utility.
+#
+
+# A network connection is required to build %bootstrap-coreutils&co,
+# which is required to run these tests with the --bootstrap option.
+if ! guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null; then
+    exit 77
+fi
+
+guix pack --version
+
+# Use --no-substitutes because we need to verify we can do this ourselves.
+GUIX_BUILD_OPTIONS="--no-substitutes"
+export GUIX_BUILD_OPTIONS
+
+# Build a tarball with no compression.
+guix pack --compression=none --bootstrap guile-bootstrap
+
+# Build a tarball (with compression).
+guix pack --bootstrap guile-bootstrap
+
+# Build a tarball with a symlink.
+the_pack="`guix pack --bootstrap -S /opt/gnu/bin=bin guile-bootstrap`"
+
+# Try to extract it.
+test_directory="`mktemp -d`"
+trap 'rm -rf "$test_directory"' EXIT
+cd "$test_directory"
+tar -xf "$the_pack"
+test -x opt/gnu/bin/guile
+
+is_available () {
+    # Use the "type" shell builtin to see if the program is on PATH.
+    type "$1" > /dev/null
+}
+
+if is_available chroot && is_available unshare; then
+    # Verify we can use what we built.
+    unshare -r chroot . /opt/gnu/bin/guile --version
+    cd -
+else
+    echo "warning: skipped some verification because chroot or unshare is unavailable" >&2
+fi
+
+# For the tests that build Docker images below, we currently have to use
+# --dry-run because if we don't, there are only two possible cases:
+#
+#     Case 1: We do not use --bootstrap, and the build takes hours to finish
+#             because it needs to build tar etc.
+#
+#     Case 2: We use --bootstrap, and the build fails because the bootstrap
+#             Guile cannot dlopen shared libraries.  Not to mention the fact
+#             that we would still have to build many non-bootstrap inputs
+#             (e.g., guile-json) in order to create the Docker image.
+
+# Build a Docker image.
+guix pack --dry-run --bootstrap -f docker guile-bootstrap
+
+# Build a Docker image with a symlink.
+guix pack --dry-run --bootstrap -f docker -S /opt/gnu=/ guile-bootstrap
+
+# Build a tarball pack of cross-compiled software.  Use coreutils because
+# guile-bootstrap is not intended to be cross-compiled.
+guix pack --dry-run --bootstrap --target=arm-unknown-linux-gnueabihf coreutils
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index ed8563c8aa..211c26f43d 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -1,6 +1,7 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 # Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+# Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
 #
 # This file is part of GNU Guix.
 #
@@ -267,3 +268,19 @@ guix system build "$tmpdir/config.scm" -n
 # Searching.
 guix system search tor | grep "^name: tor"
 guix system search anonym network | grep "^name: tor"
+
+# Below, use -n (--dry-run) for the tests because if we actually tried to
+# build these images, the commands would take hours to run in the worst case.
+
+# Verify that the examples can be built.
+for example in gnu/system/examples/*; do
+    guix system -n disk-image $example
+done
+
+# Verify that the disk image types can be built.
+guix system -n vm gnu/system/examples/vm-image.tmpl
+guix system -n vm-image gnu/system/examples/vm-image.tmpl
+# This invocation was taken care of in the loop above:
+# guix system -n disk-image gnu/system/examples/bare-bones.tmpl
+guix system -n disk-image --file-system-type=iso9660 gnu/system/examples/bare-bones.tmpl
+guix system -n docker-image gnu/system/examples/docker-image.tmpl
diff --git a/tests/publish.scm b/tests/publish.scm
index 8c88a8c93d..1ed8308076 100644
--- a/tests/publish.scm
+++ b/tests/publish.scm
@@ -464,7 +464,7 @@ FileSize: ~a~%"
                                      (lambda (port)
                                        (display "Hello, build log!"
                                                 (current-error-port))
-                                       (display "" port)))))))
+                                       (display #$(random-text) port)))))))
     (build-derivations %store (list drv))
     (let* ((response (http-get
                       (publish-uri (string-append "/log/"
@@ -483,4 +483,12 @@ FileSize: ~a~%"
   (let ((uri (publish-uri "/log/does-not-exist")))
     (response-code (http-get uri))))
 
+(test-equal "non-GET query"
+  '(200 404)
+  (let ((path (string-append "/" (store-path-hash-part %item)
+                             ".narinfo")))
+    (map response-code
+         (list (http-get (publish-uri path))
+               (http-post (publish-uri path))))))
+
 (test-end "publish")