summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am5
-rw-r--r--NEWS5
-rw-r--r--build-aux/hydra/gnu-system.scm3
-rw-r--r--build-aux/test-env.in1
-rw-r--r--doc/guix.texi124
-rw-r--r--gnu/bootloader/extlinux.scm1
-rw-r--r--gnu/bootloader/u-boot.scm34
-rw-r--r--gnu/local.mk16
-rw-r--r--gnu/packages.scm2
-rw-r--r--gnu/packages/android.scm613
-rw-r--r--gnu/packages/aux-files/run-in-namespace.c313
-rw-r--r--gnu/packages/bioconductor.scm32
-rw-r--r--gnu/packages/bioinformatics.scm82
-rw-r--r--gnu/packages/bootloaders.scm41
-rw-r--r--gnu/packages/commencement.scm2
-rw-r--r--gnu/packages/dunst.scm5
-rw-r--r--gnu/packages/education.scm73
-rw-r--r--gnu/packages/emacs.scm85
-rw-r--r--gnu/packages/emulators.scm12
-rw-r--r--gnu/packages/ftp.scm4
-rw-r--r--gnu/packages/games.scm5
-rw-r--r--gnu/packages/gnome.scm8
-rw-r--r--gnu/packages/gnuzilla.scm34
-rw-r--r--gnu/packages/golang.scm8
-rw-r--r--gnu/packages/graphviz.scm4
-rw-r--r--gnu/packages/groovy.scm1156
-rw-r--r--gnu/packages/gstreamer.scm1
-rw-r--r--gnu/packages/guile.scm111
-rw-r--r--gnu/packages/haskell-check.scm14
-rw-r--r--gnu/packages/haskell.scm55
-rw-r--r--gnu/packages/image-processing.scm205
-rw-r--r--gnu/packages/image-viewers.scm40
-rw-r--r--gnu/packages/imagemagick.scm8
-rw-r--r--gnu/packages/inkscape.scm9
-rw-r--r--gnu/packages/javascript.scm39
-rw-r--r--gnu/packages/kde-frameworks.scm4
-rw-r--r--gnu/packages/libreoffice.scm4
-rw-r--r--gnu/packages/linux.scm64
-rw-r--r--gnu/packages/lxde.scm4
-rw-r--r--gnu/packages/maths.scm10
-rw-r--r--gnu/packages/messaging.scm14
-rw-r--r--gnu/packages/mpd.scm3
-rw-r--r--gnu/packages/nano.scm4
-rw-r--r--gnu/packages/networking.scm4
-rw-r--r--gnu/packages/package-management.scm4
-rw-r--r--gnu/packages/password-utils.scm33
-rw-r--r--gnu/packages/patches/adb-add-libraries.patch30
-rw-r--r--gnu/packages/patches/groovy-add-exceptionutilsgenerator.patch98
-rw-r--r--gnu/packages/patches/icecat-CVE-2018-5157-and-CVE-2018-5158.patch (renamed from gnu/packages/patches/icecat-bug-1452075.patch)0
-rw-r--r--gnu/packages/patches/libutils-add-includes.patch11
-rw-r--r--gnu/packages/patches/libutils-remove-damaging-includes.patch21
-rw-r--r--gnu/packages/patches/libziparchive-add-includes.patch10
-rw-r--r--gnu/packages/patches/mupdf-CVE-2017-17858.patch111
-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/mupdf-build-with-latest-openjpeg.patch27
-rw-r--r--gnu/packages/patches/myrepos-CVE-2018-7032.patch69
-rw-r--r--gnu/packages/patches/python-statsmodels-fix-tests.patch28
-rw-r--r--gnu/packages/patches/wesnoth-fix-std-bad-cast.patch67
-rw-r--r--gnu/packages/pdf.scm10
-rw-r--r--gnu/packages/photo.scm4
-rw-r--r--gnu/packages/printers.scm69
-rw-r--r--gnu/packages/python-crypto.scm124
-rw-r--r--gnu/packages/python-web.scm109
-rw-r--r--gnu/packages/python.scm102
-rw-r--r--gnu/packages/rust.scm15
-rw-r--r--gnu/packages/shells.scm4
-rw-r--r--gnu/packages/statistics.scm46
-rw-r--r--gnu/packages/telephony.scm69
-rw-r--r--gnu/packages/tls.scm4
-rw-r--r--gnu/packages/version-control.scm3
-rw-r--r--gnu/packages/video.scm8
-rw-r--r--gnu/packages/web-browsers.scm8
-rw-r--r--gnu/packages/wine.scm10
-rw-r--r--gnu/packages/wm.scm4
-rw-r--r--gnu/packages/xdisorg.scm6
-rw-r--r--gnu/packages/xml.scm8
-rw-r--r--gnu/packages/xorg.scm10
-rw-r--r--gnu/services/desktop.scm3
-rw-r--r--gnu/services/games.scm2
-rw-r--r--gnu/services/messaging.scm13
-rw-r--r--gnu/system/install.scm20
-rw-r--r--guix/build-system/android-ndk.scm127
-rw-r--r--guix/build/android-ndk-build-system.scm88
-rw-r--r--guix/build/profiles.scm14
-rw-r--r--guix/build/union.scm48
-rw-r--r--guix/gexp.scm37
-rw-r--r--guix/packages.scm13
-rw-r--r--guix/profiles.scm19
-rw-r--r--guix/scripts/lint.scm2
-rw-r--r--guix/scripts/pack.scm218
-rw-r--r--guix/search-paths.scm15
-rw-r--r--guix/utils.scm24
-rw-r--r--tests/graph.scm2
-rw-r--r--tests/guix-pack.sh10
-rw-r--r--tests/profiles.scm57
-rw-r--r--tests/union.scm18
-rw-r--r--tests/utils.scm8
98 files changed, 4405 insertions, 913 deletions
diff --git a/Makefile.am b/Makefile.am
index 7ea9228881..38bd54cf4f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -96,6 +96,7 @@ MODULES =					\
   guix/workers.scm				\
   guix/zlib.scm					\
   guix/build-system.scm				\
+  guix/build-system/android-ndk.scm		\
   guix/build-system/ant.scm			\
   guix/build-system/cargo.scm			\
   guix/build-system/cmake.scm			\
@@ -128,6 +129,7 @@ MODULES =					\
   guix/svn-download.scm				\
   guix/i18n.scm					\
   guix/ui.scm					\
+  guix/build/android-ndk-build-system.scm	\
   guix/build/ant-build-system.scm		\
   guix/build/download.scm			\
   guix/build/download-nar.scm			\
@@ -272,7 +274,8 @@ AUX_FILES =						\
   gnu/packages/aux-files/linux-libre/4.4-i686.conf	\
   gnu/packages/aux-files/linux-libre/4.4-x86_64.conf	\
   gnu/packages/aux-files/linux-libre/4.1-i686.conf	\
-  gnu/packages/aux-files/linux-libre/4.1-x86_64.conf
+  gnu/packages/aux-files/linux-libre/4.1-x86_64.conf	\
+  gnu/packages/aux-files/run-in-namespace.c
 
 # Templates, examples.
 EXAMPLES =					\
diff --git a/NEWS b/NEWS
index 2c898e65f9..ca57f5d1fc 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,11 @@ Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 
 Please send Guix bug reports to bug-guix@gnu.org.
 
+* Changes in 0.15.0 (since 0.14.0)
+** Programming interfaces
+
+*** package-full-name (guix packages) now uses "@" as its delimiter.
+    (<https://bugs.gnu.org/31088>)
 * Changes in 0.14.0 (since 0.13.0)
 
 ** Package management
diff --git a/build-aux/hydra/gnu-system.scm b/build-aux/hydra/gnu-system.scm
index 62eb957f83..654f3ecf3e 100644
--- a/build-aux/hydra/gnu-system.scm
+++ b/build-aux/hydra/gnu-system.scm
@@ -264,7 +264,8 @@ all its dependencies, and ready to be installed on non-GuixSD distributions.")
 
 (define job-name
   ;; Return the name of a package's job.
-  (compose string->symbol package-full-name))
+  (compose string->symbol
+           (cut package-full-name <> "-")))
 
 (define package->job
   (let ((base-packages
diff --git a/build-aux/test-env.in b/build-aux/test-env.in
index 52082c650f..aaadcf205b 100644
--- a/build-aux/test-env.in
+++ b/build-aux/test-env.in
@@ -132,6 +132,7 @@ then
 
 	for file in "$bootstrap_directory"/guile-*
 	do
+	    [ -f "$file" ] &&					\
 	    "@abs_top_builddir@/pre-inst-env"			\
 		guix download "file://$file" > /dev/null
 	done
diff --git a/doc/guix.texi b/doc/guix.texi
index 4095bdb51b..a12210db8a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2834,6 +2834,15 @@ guix pack -S /opt/gnu/bin=bin guile emacs geiser
 @noindent
 That way, users can happily type @file{/opt/gnu/bin/guile} and enjoy.
 
+@cindex relocatable binaries, with @command{guix pack}
+What if the recipient of your pack does not have root privileges on
+their machine, and thus cannot unpack it in the root file system?  In
+that case, you will want to use the @code{--relocatable} option (see
+below).  This option produces @dfn{relocatable binaries}, meaning they
+they can be placed anywhere in the file system hierarchy: in the example
+above, users can unpack your tarball in their home directory and
+directly run @file{./opt/gnu/bin/guile}.
+
 Alternatively, you can produce a pack in the Docker image format using
 the following command:
 
@@ -2867,6 +2876,39 @@ This produces a tarball that follows the
 Docker Image Specification}.
 @end table
 
+@item --relocatable
+@itemx -R
+Produce @dfn{relocatable binaries}---i.e., binaries that can be placed
+anywhere in the file system hierarchy and run from there.  For example,
+if you create a pack containing Bash with:
+
+@example
+guix pack -R -S /mybin=bin bash
+@end example
+
+@noindent
+... you can copy that pack to a machine that lacks Guix, and from your
+home directory as a normal user, run:
+
+@example
+tar xf pack.tar.gz
+./mybin/sh
+@end example
+
+@noindent
+In that shell, if you type @code{ls /gnu/store}, you'll notice that
+@file{/gnu/store} shows up and contains all the dependencies of
+@code{bash}, even though the machine actually lacks @file{/gnu/store}
+altogether!  That is probably the simplest way to deploy Guix-built
+software on a non-Guix machine.
+
+There's a gotcha though: this technique relies on the @dfn{user
+namespace} feature of the kernel Linux, which allows unprivileged users
+to mount or change root.  Old versions of Linux did not support it, and
+some GNU/Linux distributions turn it off; on these systems, programs
+from the pack @emph{will fail to run}, unless they are unpacked in the
+root file system.
+
 @item --expression=@var{expr}
 @itemx -e @var{expr}
 Consider the package @var{expr} evaluates to.
@@ -3750,6 +3792,25 @@ that should be run during the @code{build} phase.  By default the
 
 @end defvr
 
+@defvr {Scheme Variable} android-ndk-build-system
+@cindex Android distribution
+@cindex Android NDK build system
+This variable is exported by @code{(guix build-system android-ndk)}.  It
+implements a build procedure for Android NDK (native development kit)
+packages using a Guix-specific build process.
+
+The build system assumes that packages install their public interface
+(header) files to the subdirectory "include" of the "out" output and
+their libraries to the subdirectory "lib" of the "out" output.
+
+It's also assumed that the union of all the dependencies of a package
+has no conflicting files.
+
+For the time being, cross-compilation is not supported - so right now
+the libraries and header files are assumed to be host tools.
+
+@end defvr
+
 @defvr {Scheme Variable} asdf-build-system/source
 @defvrx {Scheme Variable} asdf-build-system/sbcl
 @defvrx {Scheme Variable} asdf-build-system/ecl
@@ -6774,15 +6835,33 @@ where @code{CVE-YYYY-ABCD} is the CVE identifier---e.g.,
 
 Package developers can specify in package recipes the
 @uref{https://nvd.nist.gov/cpe.cfm,Common Platform Enumeration (CPE)}
-name and version of the package when they differ from the name that Guix
-uses, as in this example:
+name and version of the package when they differ from the name or version
+that Guix uses, as in this example:
 
 @example
 (package
   (name "grub")
   ;; @dots{}
   ;; CPE calls this package "grub2".
-  (properties '((cpe-name . "grub2"))))
+  (properties '((cpe-name . "grub2")
+                (cpe-version . "2.3")))
+@end example
+
+@c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
+Some entries in the CVE database do not specify which version of a
+package they apply to, and would thus ``stick around'' forever.  Package
+developers who found CVE alerts and verified they can be ignored can
+declare them as in this example:
+
+@example
+(package
+  (name "t1lib")
+  ;; @dots{}
+  ;; These CVEs no longer apply and can be safely ignored.
+  (properties `((lint-hidden-cve . ("CVE-2011-0433"
+                                    "CVE-2011-1553"
+                                    "CVE-2011-1554"
+                                    "CVE-2011-5244")))))
 @end example
 
 @item formatting
@@ -6826,19 +6905,23 @@ single output for a package that could easily be split (@pxref{Packages
 with Multiple Outputs}).  Such are the typical issues that
 @command{guix size} can highlight.
 
-The command can be passed a package specification such as @code{gcc@@4.8}
+The command can be passed one or more package specifications
+such as @code{gcc@@4.8}
 or @code{guile:debug}, or a file name in the store.  Consider this
 example:
 
 @example
 $ guix size coreutils
 store item                               total    self
-/gnu/store/@dots{}-coreutils-8.23          70.0    13.9  19.8%
-/gnu/store/@dots{}-gmp-6.0.0a              55.3     2.5   3.6%
-/gnu/store/@dots{}-acl-2.2.52              53.7     0.5   0.7%
-/gnu/store/@dots{}-attr-2.4.46             53.2     0.3   0.5%
-/gnu/store/@dots{}-gcc-4.8.4-lib           52.9    15.7  22.4%
-/gnu/store/@dots{}-glibc-2.21              37.2    37.2  53.1%
+/gnu/store/@dots{}-gcc-5.5.0-lib           60.4    30.1  38.1%
+/gnu/store/@dots{}-glibc-2.27              30.3    28.8  36.6%
+/gnu/store/@dots{}-coreutils-8.28          78.9    15.0  19.0%
+/gnu/store/@dots{}-gmp-6.1.2               63.1     2.7   3.4%
+/gnu/store/@dots{}-bash-static-4.4.12       1.5     1.5   1.9%
+/gnu/store/@dots{}-acl-2.2.52              61.1     0.4   0.5%
+/gnu/store/@dots{}-attr-2.4.47             60.6     0.2   0.3%
+/gnu/store/@dots{}-libcap-2.25             60.5     0.2   0.2%
+total: 78.9 MiB
 @end example
 
 @cindex closure
@@ -6858,17 +6941,21 @@ item itself.  The last column shows the ratio of the size of the item
 itself to the space occupied by all the items listed here.
 
 In this example, we see that the closure of Coreutils weighs in at
-70@tie{}MiB, half of which is taken by libc.  (That libc represents a
-large fraction of the closure is not a problem @i{per se} because it is
-always available on the system anyway.)
-
-When the package passed to @command{guix size} is available in the
-store, @command{guix size} queries the daemon to determine its
+79@tie{}MiB, most of which is taken by libc and GCC's run-time support
+libraries.  (That libc and GCC's libraries represent a large fraction of
+the closure is not a problem @i{per se} because they are always available
+on the system anyway.)
+
+When the package(s) passed to @command{guix size} are available in the
+store@footnote{More precisely, @command{guix size} looks for the
+@emph{ungrafted} variant of the given package(s), as returned by
+@code{guix build @var{package} --no-grafts}.  @xref{Security Updates},
+for information on grafts.}, @command{guix size} queries the daemon to determine its
 dependencies, and measures its size in the store, similar to @command{du
 -ms --apparent-size} (@pxref{du invocation,,, coreutils, GNU
 Coreutils}).
 
-When the given package is @emph{not} in the store, @command{guix size}
+When the given packages are @emph{not} in the store, @command{guix size}
 reports information based on the available substitutes
 (@pxref{Substitutes}).  This makes it possible it to profile disk usage of
 store items that are not even on disk, only available remotely.
@@ -14924,6 +15011,9 @@ networking interface.
 @item @code{package} (default: @code{bitlbee})
 The BitlBee package to use.
 
+@item @code{plugins} (default: @code{'()})
+List of plugin packages to use---e.g., @code{bitlbee-discord}.
+
 @item @code{extra-settings} (default: @code{""})
 Configuration snippet added as-is to the BitlBee configuration file.
 @end table
diff --git a/gnu/bootloader/extlinux.scm b/gnu/bootloader/extlinux.scm
index f7820a37a4..8b7a95a6fc 100644
--- a/gnu/bootloader/extlinux.scm
+++ b/gnu/bootloader/extlinux.scm
@@ -64,6 +64,7 @@ corresponding to old generations of the system."
             (format port "# This file was generated from your GuixSD configuration.  Any changes
 # will be lost upon reconfiguration.
 UI menu.c32
+MENU TITLE GuixSD Boot Options
 PROMPT ~a
 TIMEOUT ~a~%"
                     (if (> timeout 0) 1 0)
diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm
index 21d0aecce2..bc8f98f32f 100644
--- a/gnu/bootloader/u-boot.scm
+++ b/gnu/bootloader/u-boot.scm
@@ -33,7 +33,10 @@
             u-boot-a20-olinuxino-micro-bootloader
             u-boot-banana-pi-m2-ultra-bootloader
             u-boot-beaglebone-black-bootloader
-            u-boot-nintendo-nes-classic-edition-bootloader))
+            u-boot-mx6cuboxi-bootloader
+            u-boot-nintendo-nes-classic-edition-bootloader
+            u-boot-novena-bootloader
+            u-boot-wandboard-bootloader))
 
 (define install-u-boot
   #~(lambda (bootloader device mount-point)
@@ -62,6 +65,15 @@
         (write-file-on-device u-boot (stat:size (stat u-boot))
                               device (* 8 1024)))))
 
+(define install-imx-u-boot
+  #~(lambda (bootloader device mount-point)
+      (let ((spl (string-append bootloader "/libexec/SPL"))
+            (u-boot (string-append bootloader "/libexec/u-boot.img")))
+        (write-file-on-device spl (stat:size (stat spl))
+                              device (* 1 1024))
+        (write-file-on-device u-boot (stat:size (stat u-boot))
+                              device (* 69 1024)))))
+
 
 
 ;;;
@@ -86,6 +98,11 @@
    (inherit u-boot-bootloader)
    (installer install-allwinner-u-boot)))
 
+(define u-boot-imx-bootloader
+  (bootloader
+   (inherit u-boot-bootloader)
+   (installer install-imx-u-boot)))
+
 (define u-boot-nintendo-nes-classic-edition-bootloader
   (bootloader
     (inherit u-boot-allwinner-bootloader)
@@ -110,3 +127,18 @@
   (bootloader
    (inherit u-boot-allwinner-bootloader)
    (package u-boot-banana-pi-m2-ultra)))
+
+(define u-boot-mx6cuboxi-bootloader
+  (bootloader
+   (inherit u-boot-imx-bootloader)
+   (package u-boot-mx6cuboxi)))
+
+(define u-boot-wandboard-bootloader
+  (bootloader
+   (inherit u-boot-imx-bootloader)
+   (package u-boot-wandboard)))
+
+(define u-boot-novena-bootloader
+  (bootloader
+   (inherit u-boot-imx-bootloader)
+   (package u-boot-novena)))
diff --git a/gnu/local.mk b/gnu/local.mk
index d962613eda..a5458c1e39 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -202,6 +202,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/graphics.scm			\
   %D%/packages/graphviz.scm			\
   %D%/packages/groff.scm			\
+  %D%/packages/groovy.scm			\
   %D%/packages/gsasl.scm			\
   %D%/packages/gstreamer.scm			\
   %D%/packages/gtk.scm				\
@@ -343,6 +344,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/plotutils.scm			\
   %D%/packages/polkit.scm			\
   %D%/packages/popt.scm				\
+  %D%/packages/printers.scm			\
   %D%/packages/profiling.scm			\
   %D%/packages/pth.scm				\
   %D%/packages/pulseaudio.scm			\
@@ -552,6 +554,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/abiword-black-drawing-with-gtk322.patch	\
   %D%/packages/patches/acl-fix-perl-regex.patch		\
   %D%/packages/patches/acl-hurd-path-max.patch			\
+  %D%/packages/patches/adb-add-libraries.patch			\
   %D%/packages/patches/aegis-constness-error.patch         	\
   %D%/packages/patches/aegis-perl-tempdir1.patch           	\
   %D%/packages/patches/aegis-perl-tempdir2.patch           	\
@@ -746,6 +749,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gpsbabel-qstring.patch     		\
   %D%/packages/patches/grep-timing-sensitive-test.patch		\
   %D%/packages/patches/groff-source-date-epoch.patch		\
+  %D%/packages/patches/groovy-add-exceptionutilsgenerator.patch	\
   %D%/packages/patches/gsl-test-i686.patch			\
   %D%/packages/patches/gspell-dash-test.patch			\
   %D%/packages/patches/guile-1.8-cpp-4.5.patch			\
@@ -784,7 +788,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
   %D%/packages/patches/hydra-disable-darcs-test.patch		\
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
-  %D%/packages/patches/icecat-bug-1452075.patch			\
+  %D%/packages/patches/icecat-CVE-2018-5157-and-CVE-2018-5158.patch	\
   %D%/packages/patches/icecat-use-system-graphite2.patch	\
   %D%/packages/patches/icecat-use-system-harfbuzz.patch		\
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
@@ -805,6 +809,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/jq-CVE-2015-8863.patch			\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/khmer-use-libraries.patch                \
+  %D%/packages/patches/libziparchive-add-includes.patch		\
   %D%/packages/patches/kiki-level-selection-crash.patch		\
   %D%/packages/patches/kiki-makefile.patch			\
   %D%/packages/patches/kiki-missing-includes.patch		\
@@ -872,6 +877,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/libtool-skip-tests2.patch		\
   %D%/packages/patches/libusb-0.1-disable-tests.patch		\
   %D%/packages/patches/libusb-for-axoloti.patch			\
+  %D%/packages/patches/libutils-add-includes.patch		\
+  %D%/packages/patches/libutils-remove-damaging-includes.patch	\
   %D%/packages/patches/libvdpau-va-gl-unbundle.patch		\
   %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
   %D%/packages/patches/libxslt-generated-ids.patch		\
@@ -924,13 +931,10 @@ dist_patch_DATA =						\
   %D%/packages/patches/mozjs38-tracelogger.patch		\
   %D%/packages/patches/mozjs38-version-detection.patch		\
   %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/mupen64plus-video-z64-glew-correct-path.patch    \
   %D%/packages/patches/mutt-store-references.patch		\
+  %D%/packages/patches/myrepos-CVE-2018-7032.patch		\
   %D%/packages/patches/net-tools-bitrot.patch			\
   %D%/packages/patches/netcdf-date-time.patch			\
   %D%/packages/patches/netcdf-tst_h_par.patch			\
@@ -1037,7 +1041,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-nose-timer-drop-ordereddict.patch \
   %D%/packages/patches/python-pillow-fix-failing-tests.patch	\
   %D%/packages/patches/python2-rdflib-drop-sparqlwrapper.patch	\
-  %D%/packages/patches/python-statsmodels-fix-tests.patch	\
   %D%/packages/patches/python-scikit-learn-fix-test-non-determinism.patch	\
   %D%/packages/patches/python-configobj-setuptools.patch	\
   %D%/packages/patches/python-faker-fix-build-32bit.patch	\
@@ -1155,7 +1158,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/wavpack-CVE-2018-7253.patch		\
   %D%/packages/patches/wavpack-CVE-2018-7254.patch		\
   %D%/packages/patches/weechat-python.patch			\
-  %D%/packages/patches/wesnoth-fix-std-bad-cast.patch		\
   %D%/packages/patches/wicd-bitrate-none-fix.patch		\
   %D%/packages/patches/wicd-get-selected-profile-fix.patch	\
   %D%/packages/patches/wicd-urwid-1.3.patch			\
diff --git a/gnu/packages.scm b/gnu/packages.scm
index 1a37a17342..7b954769e9 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -188,7 +188,7 @@ decreasing version order."
                             version>?)))
         (if version
             (filter (lambda (package)
-                      (string-prefix? version (package-version package)))
+                      (version-prefix? version (package-version package)))
                     matching)
             matching)))))
 
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index 105e3d1775..7618c0e1f6 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -27,18 +27,73 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system android-ndk)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages selinux)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages linux))
 
+(define-public android-make-stub
+  (package
+    (name "android-make-stub")
+    (version "0.6.0")
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://github.com/daym/android-make-stub.git")
+            (commit (string-append "v" version))))
+      (file-name (string-append "android-make-stub-"
+                                version "-checkout"))
+      (sha256
+       (base32
+        "0y1b2x96d37n6f1bp6dcx08bn08zac0cylmbfsx6mf2nahc02fhc"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:tests? #f ; None exist.
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (delete 'build)
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")))
+                 (invoke "make" (string-append "prefix=" out) "install")
+                 #t))))))
+    (home-page "https://github.com/daym/android-make-stub")
+    (synopsis "Stubs for the @command{make} system of the Android platform")
+    (description "@code{android-make-stub} provides stubs for the
+@command{make} system of the Android platform.  This allows us to
+use their packages mostly unmodified in our Android NDK build system.")
+    (license license:asl2.0)))
+
+(define-public android-googletest
+  (package (inherit googletest)
+    (name "android-googletest")
+    (arguments
+     `(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-host-libraries
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib")))
+               (symlink "libgtest.so"
+                        (string-append lib "/libgtest_host.so"))
+               (symlink "libgmock.so"
+                        (string-append lib "/libgmock_host.so"))
+               #t))))))))
+
 ;; The Makefiles that we add are largely based on the Debian
 ;; packages.  They are licensed under GPL-2 and have copyright:
 ;; 2012, Stefan Handschuh <handschuh.stefan@googlemail.com>
@@ -58,52 +113,69 @@
                               version "-checkout"))
     (sha256
      (base32
-      "0xc2n7jxrf1iw9cc278pijdfjix2fkiig5ws27f6rwp40zg5mrgg"))))
+      "0xc2n7jxrf1iw9cc278pijdfjix2fkiig5ws27f6rwp40zg5mrgg"))
+    (patches
+     (search-patches "libbase-use-own-logging.patch"
+                     "libbase-fix-includes.patch"
+                     "libutils-remove-damaging-includes.patch"
+                     "libutils-add-includes.patch"
+                     "adb-add-libraries.patch"
+                     "libziparchive-add-includes.patch"))))
+
+(define (android-platform-system-extras version)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://android.googlesource.com/platform/system/extras")
+          (commit (string-append "android-" version))))
+    (file-name (string-append "android-platform-system-extras-"
+                              version "-checkout"))
+    (sha256
+     (base32
+      "18130c23ybqcpgjc5v6f8kdbv2xn39hyiaj17dzldjb9rlwzcyy9"))))
+
+(define (android-platform-bionic version)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url "https://android.googlesource.com/platform/bionic")
+          (commit (string-append "android-" version))))
+    (file-name (string-append "android-platform-bionic-"
+                              version "-checkout"))
+    (sha256
+     (base32
+      "0n9wkz3ynqw39if1ss9n32m66iga14nndf29hpm7g1aqn4wvvgzk"))))
+
+(define (android-platform-external version subdirectory checksum)
+  (origin
+    (method git-fetch)
+    (uri (git-reference
+          (url
+           (string-append "https://android.googlesource.com/platform/external/"
+                          subdirectory))
+          (commit (string-append "android-" version))))
+    (file-name (string-append "android-platform-system-external-" subdirectory "-"
+                              version "-checkout"))
+    (sha256
+     (base32
+      checksum))))
 
-(define liblog
+(define android-liblog
   (package
-    (name "liblog")
+    (name "android-liblog")
     (version (android-platform-version))
     (source (android-platform-system-core version))
-    (build-system gnu-build-system)
+    (build-system android-ndk-build-system)
     (arguments
-     `(#:tests? #f ; TODO.
-       #:make-flags '("CC=gcc")
+     `(#:make-flags '("LDLIBS=-lpthread")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source
            (lambda _ (chdir "liblog") #t))
-         (add-after 'enter-source 'create-Makefile
-           (lambda _
-             ;; No useful makefile is shipped, so we create one.
-             (with-output-to-file "Makefile"
-               (lambda _
-                 (display
-                  (string-append
-                   "NAME = liblog\n"
-                   "SOURCES = log_event_list.c log_event_write.c"
-                   " logger_write.c config_write.c logger_name.c"
-                   " logger_lock.c fake_log_device.c fake_writer.c"
-                   " event_tag_map.c\n"
-
-                   "CFLAGS += -fvisibility=hidden -fPIC\n"
-                   "CPPFLAGS += -I../include -DFAKE_LOG_DEVICE=1"
-                   ;; Keep these two in sync with "liblog/Android.bp".
-                   " -DLIBLOG_LOG_TAG=1005"
-                   " -DSNET_EVENT_LOG_TAG=1397638484\n"
-                   "LDFLAGS += -shared -Wl,-soname,$(NAME).so.0 -lpthread\n"
-
-                   "build: $(SOURCES)\n"
-                   "	$(CC) $^ -o $(NAME).so.0 $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)\n"))
-                 #t))))
-         (delete 'configure)
-         (replace 'install
+         (add-after 'install 'ldconfig
            (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib")))
-               (install-file "liblog.so.0" lib)
-               (with-directory-excursion lib
-                 (symlink "liblog.so.0" "liblog.so"))
+             (let ((out (assoc-ref outputs "out")))
+               (symlink "liblog.so.0" (string-append out "/lib/liblog.so"))
                #t))))))
     (home-page "https://developer.android.com/")
     (synopsis "Logging library from the Android platform.")
@@ -113,62 +185,29 @@ interfaces for either writing or reading logs.  The log buffers are divided up
 in Main, System, Radio and Events sub-logs.")
     (license license:asl2.0)))
 
-(define libbase
+(define android-libbase
   (package
-    (name "libbase")
+    (name "android-libbase")
     (version (android-platform-version))
-    (source (origin
-              (inherit (android-platform-system-core version))
-              (patches
-               (search-patches "libbase-use-own-logging.patch"
-                               "libbase-fix-includes.patch"))))
-    (build-system gnu-build-system)
+    (source (android-platform-system-core version))
+    (build-system android-ndk-build-system)
     (arguments
-     `(#:tests? #f ; TODO.
+     `(#:tests? #f ; Test failure: logging.UNIMPLEMENTED
+       #:make-flags '("CXXFLAGS=-std=gnu++11")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source
-           (lambda _ (chdir "base") #t))
-         (add-after 'enter-source 'create-Makefile
-           (lambda _
-             ;; No useful makefile is shipped, so we create one.
-             (with-output-to-file "Makefile"
-               (lambda _
-                 (display
-                  (string-append
-                   "NAME = libbase\n"
-                   "SOURCES = file.cpp logging.cpp parsenetaddress.cpp"
-                   " stringprintf.cpp strings.cpp errors_unix.cpp\n"
-
-                   "CXXFLAGS += -std=gnu++11 -fPIC\n"
-                   "CPPFLAGS += -Iinclude -I../include\n"
-                   "LDFLAGS += -shared -Wl,-soname,$(NAME).so.0"
-                   " -L.. -llog\n"
-
-                   "build: $(SOURCES)\n"
-                   "	$(CXX) $^ -o $(NAME).so.0 $(CXXFLAGS) $(CPPFLAGS)"
-                   " $(LDFLAGS)\n"))
-                 #t))))
-         (delete 'configure)
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib")))
-               (install-file "libbase.so.0" lib)
-               (with-directory-excursion lib
-                 (symlink "libbase.so.0" "libbase.so"))
-               (copy-recursively "include" out)
-               #t))))))
-    (inputs `(("liblog" ,liblog)))
+           (lambda _ (chdir "base") #t)))))
+    (inputs `(("android-liblog" ,android-liblog)))
     (home-page "https://developer.android.com/")
     (synopsis "Android platform base library")
     (description "@code{libbase} is a library in common use by the
 various Android core host applications.")
     (license license:asl2.0)))
 
-(define libcutils
+(define android-libcutils
   (package
-    (name "libcutils")
+    (name "android-libcutils")
     (version (android-platform-version))
     (source (android-platform-system-core version))
     (build-system gnu-build-system)
@@ -206,10 +245,13 @@ various Android core host applications.")
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib")))
+                    (lib (string-append out "/lib"))
+                    (include (string-append out "/include")))
                (install-file "libcutils.so.0" lib)
                (with-directory-excursion lib
                  (symlink "libcutils.so.0" "libcutils.so"))
+               (copy-recursively "../include/cutils"
+                                 (string-append include "/cutils"))
                #t))))))
     (home-page "https://developer.android.com/")
     (synopsis "Android platform c utils library")
@@ -217,90 +259,92 @@ various Android core host applications.")
 various Android core host applications.")
     (license license:asl2.0)))
 
+(define-public android-libsparse
+  (package
+    (name "android-libsparse")
+    (version (android-platform-version))
+    (source (android-platform-system-core version))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:make-flags '("CFLAGS=-Wno-error"
+                      "CXXFLAGS=-fpermissive -Wno-error")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "libsparse") #t)))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (home-page "https://developer.android.com/")
+    (synopsis "Android platform sparse library")
+    (description "@code{android-libsparse} is a library in common use by the
+various Android core host applications.")
+    (license license:asl2.0)))
+
+(define-public android-libziparchive
+  (package
+    (name "android-libziparchive")
+    (version (android-platform-version))
+    (source (android-platform-system-core version))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:make-flags '("CFLAGS=-Wno-error"
+                      "CXXFLAGS=-fpermissive -Wno-error -std=gnu++11")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "libziparchive") #t))
+         (add-before 'check 'setenv
+           (lambda _
+             (setenv "ziparchive_tests_host_PARAMS" "--test_data_dir=testdata")
+             #t))
+         (add-after 'install 'install-headers
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (copy-recursively "../include/ziparchive"
+                                 (string-append out "/include/ziparchive"))
+               #t))))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (native-inputs
+     `(("android-libbase" ,android-libbase)
+       ("android-libutils" ,android-libutils)
+       ("android-liblog" ,android-liblog)))
+    (home-page "https://developer.android.com/")
+    (synopsis "Android platform ZIP library")
+    (description "@code{android-libziparchive} is a library in common use by the
+various Android core host applications.")
+    (license license:asl2.0)))
+
 (define-public adb
   (package
     (name "adb")
     (version (android-platform-version))
-    (source (origin
-              (inherit (android-platform-system-core version))
-              (patches
-               (search-patches "libbase-use-own-logging.patch"
-                               "libbase-fix-includes.patch"))))
-    (build-system gnu-build-system)
+    (source (android-platform-system-core version))
+    (build-system android-ndk-build-system)
     (arguments
-     `(#:phases
+     `(#:tests? #f ; Test failure: sysdeps_poll.fd_count
+       #:make-flags
+       (list "CFLAGS=-Wno-error"
+             "CXXFLAGS=-fpermissive -Wno-error -std=gnu++14 -D_Nonnull= -D_Nullable= -I ."
+             (string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") "/lib "
+                            "-Wl,-rpath=" (assoc-ref %build-inputs "openssl") "/lib -L ."))
+       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source
            (lambda _ (chdir "adb") #t))
-         (add-before 'build 'fix-clang
-           (lambda _
-             ;; adb_client.h contains _Nonnull and _Nullable attributes, that
-             ;; are not understood by gcc.
-             (substitute* "adb_client.h"
-                   (("_Nonnull") "")
-                   (("_Nullable") ""))
-             #t))
-         (add-before 'build 'fix-main
-           (lambda _
-             ;; main.cpp used to be adb_main.cpp in the current directory
-             ;; rather than in its own subdirectory, but it was not fixed.
-             ;; This leads to some header files not being found anymore.
-             (copy-file "client/main.cpp" "adb_main.cpp")
+         (add-after 'enter-source 'make-libs-available
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (substitute* "Android.mk"
+              (("libcrypto_static") "libcrypto"))
              #t))
-         (add-after 'enter-source 'create-Makefile
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; No useful makefile is shipped, so we create one.
-             (with-output-to-file "Makefile"
-               (lambda _
-                 (display
-                  (string-append
-                   ;; Common for all components.
-                   "CXXFLAGS += -std=gnu++14 -fpermissive\n"
-                   "CPPFLAGS += -I../include -I../base/include -I. -DADB_HOST=1 "
-                   "-DADB_REVISION='\"" ,version "\"' -fPIC\n"
-                   "LDFLAGS += -lcrypto -lpthread -lbase -lcutils -L. -ladb\n"
-
-                   ;; Libadb specifics.
-                   "LIBADB_SOURCES = adb.cpp adb_auth.cpp adb_io.cpp "
-                   "adb_listeners.cpp adb_trace.cpp adb_utils.cpp fdevent.cpp "
-                   "sockets.cpp transport.cpp transport_local.cpp transport_usb.cpp "
-                   "get_my_path_linux.cpp sysdeps_unix.cpp usb_linux.cpp "
-                   "adb_auth_host.cpp diagnose_usb.cpp services.cpp "
-                   "shell_service_protocol.cpp bugreport.cpp line_printer.cpp\n"
-
-                   "LIBADB_LDFLAGS += -shared -Wl,-soname,libadb.so.0 "
-                   "-lcrypto -lpthread -lbase\n"
-
-                   ;; Adb specifics.
-                   "ADB_SOURCES = adb_main.cpp console.cpp commandline.cpp "
-                   "adb_client.cpp file_sync_client.cpp\n"
-                   "ADB_LDFLAGS += -Wl,-rpath=" (assoc-ref outputs "out") "/lib\n"
-
-                   "build: libadb $(ADB_SOURCES)\n"
-                   "	$(CXX) $(ADB_SOURCES) -o adb $(CXXFLAGS) $(CPPFLAGS) "
-                   "$(ADB_LDFLAGS) $(LDFLAGS)\n"
-
-                   "libadb: $(LIBADB_SOURCES)\n"
-                   "	$(CXX) $^ -o libadb.so.0 $(CXXFLAGS) $(CPPFLAGS) "
-                   "$(LIBADB_LDFLAGS)\n"
-                   "	ln -sv libadb.so.0 libadb.so\n"))
-                 #t))))
-         (delete 'configure)
-         (replace 'install
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (lib (string-append out "/lib"))
-                    (bin (string-append out "/bin")))
-               (install-file "libadb.so.0" lib)
-               (install-file "adb" bin)
-               (with-directory-excursion lib
-                 (symlink "libadb.so.0" "libadb.so"))
-               #t))))
-       ;; Test suite must be run with attached devices
-       #:tests? #f))
+         (add-after 'install 'install-headers
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (install-file "diagnose_usb.h" (string-append (assoc-ref outputs "out") "/include"))
+             #t)))))
     (inputs
-     `(("libbase" ,libbase)
-       ("libcutils" ,libcutils)
+     `(("android-libbase" ,android-libbase)
+       ("android-libcutils" ,android-libcutils)
+       ("android-liblog" ,android-liblog)
        ("openssl" ,openssl)))
     (home-page "https://developer.android.com/studio/command-line/adb.html")
     (synopsis "Android Debug Bridge")
@@ -329,8 +373,10 @@ to a Unix shell that can run commands on the connected device or emulator.")
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
-                    (bin (string-append out "/bin")))
+                    (bin (string-append out "/bin"))
+                    (include (string-append out "/include")))
                (install-file "mkbootimg" bin)
+               (install-file "bootimg.h" include)
                #t))))))
     (home-page "https://developer.android.com/studio/command-line/adb.html")
     (synopsis "Tool to create Android boot images")
@@ -338,6 +384,263 @@ to a Unix shell that can run commands on the connected device or emulator.")
 Images.")
     (license license:asl2.0)))
 
+(define-public android-safe-iop
+  (package
+    (name "android-safe-iop")
+    (version (android-platform-version))
+    (source (android-platform-external version "safe-iop"
+                                       "1nyyrs463advjhlq8xx1lm37m4g5afv7gy0csxrj7biwwl0v13qw"))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:make-flags '("CXXFLAGS=-fpermissive -Wno-error")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'patch-host
+           (lambda _
+             ;; TODO: Cross-compile.
+             (substitute* "Android.mk"
+              (("BUILD_STATIC_LIBRARY") "BUILD_HOST_STATIC_LIBRARY"))
+             #t)))))
+    (home-page "https://developer.android.com/")
+    (synopsis "Safe integers in C")
+    (description "@code{android-safe-iop} provides a set of functions for
+performing and checking safe integer operations.  Ensure that integer
+operations do not result in silent overflow.")
+    (license license:bsd-2)))
+
+(define-public android-bionic-uapi
+  (package
+    (name "android-bionic-uapi")
+    (version (android-platform-version))
+    (source (android-platform-bionic version))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+        (add-after 'unpack 'enter-source
+           (lambda _ (chdir "libc") #t))
+        (replace 'check
+          (const #t))
+        (replace 'build
+          (const #t))
+        (replace 'install
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let* ((out (assoc-ref outputs "out"))
+                   (out-sys (string-append out "/include/sys")))
+              (mkdir-p out-sys)
+              (install-file "include/sys/system_properties.h" out-sys)
+              (install-file "include/sys/_system_properties.h" out-sys)
+              (copy-recursively "kernel/uapi" (string-append out "/include"))
+              #t))))))
+    (home-page "https://developer.android.com/")
+    (synopsis "Android Linux API that is safe for user space")
+    (description "@code{android-bionic-uapi} provides the part of the Linux API
+that is safe to use for user space.  It also includes
+@code{system_properties.h} and @code{_system_properties.h}.")
+    (license license:asl2.0)))
+
+(define-public android-libselinux
+  (package
+    (name "android-libselinux")
+    (version (android-platform-version))
+    (source
+     (android-platform-external version "libselinux"
+                                "13m2q32gzdcs5d0zj1nwasjy1j8vsxsgbjg7m5sa9lfcjaj7nkm7"))
+    (build-system android-ndk-build-system)
+    (arguments
+     ;; See logd/Android.mk for the *_LOG_TAG values.
+     `(#:make-flags (list (string-append "CFLAGS=-Wno-error "
+                                         "-I core/include "
+                                         "-I core/libpackagelistparser/include "
+                                         "-DAUDITD_LOG_TAG=1003 "
+                                         "-DLOGD_LOG_TAG=1004 -D_GNU_SOURCE")
+                          "LDFLAGS=-L . -lpcre")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack-core 'patch-HOST
+           (lambda _
+             ;; gettid duplicates otherwise.
+             (substitute* "src/procattr.c"
+              (("#ifdef HOST") "#ifdef XXX"))
+             #t)))))
+    (inputs
+     `(("openssl" ,openssl)))
+    (native-inputs
+     `(("android-bionic-uapi" ,android-bionic-uapi)
+       ;; pcre is inlined by our package.
+       ("pcre" ,pcre)))
+    (home-page "https://developer.android.com/")
+    (synopsis (package-synopsis libselinux))
+    (description (package-description libselinux))
+    (license (package-license libselinux))))
+
+(define-public android-ext4-utils
+  (package
+    (name "android-ext4-utils")
+    (version (android-platform-version))
+    (source (android-platform-system-extras version))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "CPPFLAGS="
+                            ;"-Wno-error "
+                            "-I "
+                            (assoc-ref %build-inputs "android-libselinux")
+                            "/include "
+                            "-I " (assoc-ref %build-inputs "android-libsparse")
+                            "/include "
+                            "-I " (assoc-ref %build-inputs "android-libcutils")
+                            "/include "
+                            "-I " (assoc-ref %build-inputs "android-liblog") "/include "
+                            "-I ../core/include")
+             "CFLAGS=-Wno-error"
+             "install-libext4_utils_host.a"
+             (string-append "prefix=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-core
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir-p "core")
+             (with-directory-excursion "core"
+               (invoke "tar" "axf" (assoc-ref inputs "android-core")
+                             "--strip-components=1"))
+             #t))
+         (add-after 'unpack-core 'enter-source
+           (lambda _ (chdir "ext4_utils") #t))
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (copy-recursively "." (string-append out "/include")))
+             #t)))))
+    (inputs
+     `(("android-libcutils" ,android-libcutils)
+       ("android-liblog" ,android-liblog)
+       ("android-libselinux" ,android-libselinux)
+       ("android-libsparse" ,android-libsparse)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("android-core" ,(android-platform-system-core version))))
+    (home-page "https://developer.android.com/")
+    (synopsis "Android ext4 filesystem utils")
+    (description "@code{android-ext4-utils} is a library in common use by the
+Android core.")
+    (license license:asl2.0)))
+
+(define-public android-f2fs-utils
+  (package
+    (name "android-f2fs-utils")
+    (version (android-platform-version))
+    (source (android-platform-system-extras version))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "f2fs_utils") #t))
+         (add-after 'install 'install-headers
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (copy-recursively "." (string-append (assoc-ref outputs "out")
+                                                  "/include"))
+             #t))
+         (add-after 'install 'install-shell-scripts
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (patch-shebang "mkf2fsuserimg.sh")
+               (substitute* "mkf2fsuserimg.sh"
+                (("make_f2fs") (string-append bin "/make_f2fs")))
+               (install-file "mkf2fsuserimg.sh" bin)
+               #t))))))
+    (inputs
+     `(("f2fs-tools" ,f2fs-tools-1.7)
+       ("android-libselinux" ,android-libselinux)
+       ("android-libsparse" ,android-libsparse)
+       ("android-libcutils" ,android-libcutils)
+       ("zlib" ,zlib)))
+    (home-page "https://developer.android.com/")
+    (synopsis "Android f2fs utils")
+    (description "@code{android-f2fs-utils} is a library in common use by the
+Android core.  It allows the user to create images for the @code{f2fs} Flash
+file system.")
+    (license license:asl2.0)))
+
+(define-public android-libutils
+  (package
+    (name "android-libutils")
+    (version (android-platform-version))
+    (source (android-platform-system-core version))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:tests? #f ; TODO
+       #:make-flags '("CXXFLAGS=-std=gnu++11 -Wno-error")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "libutils") #t))
+
+         (add-after 'install 'install-headers
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (copy-recursively "../include/utils" (string-append (assoc-ref outputs "out") "/include/utils")))))))
+    (inputs
+     `(("android-safe-iop" ,android-safe-iop)
+       ("android-libcutils" ,android-libcutils)))
+    (native-inputs
+     `(("android-bionic-uapi" ,android-bionic-uapi)
+       ("android-liblog" ,android-liblog)))
+    (home-page "https://developer.android.com/")
+    (synopsis "Android utility library")
+    (description "@code{android-libutils} provides utilities for Android NDK developers.")
+    (license license:asl2.0)))
+
+(define-public fastboot
+  (package
+    (name "fastboot")
+    (version (android-platform-version))
+    (source (android-platform-system-core version))
+    (build-system android-ndk-build-system)
+    (arguments
+     `(#:make-flags (list "CXXFLAGS=-std=gnu++11")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _
+             (chdir "fastboot")
+             #t))
+         (add-after 'enter-source 'patch-source
+           (lambda _
+             (substitute* "Android.mk"
+              (("libext4_utils_host") "libext4_utils_host libselinux libpcre"))
+             #t))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib"))
+                    (bin (string-append out "/bin")))
+               (install-file "fastboot" bin)
+               #t))))))
+    (inputs
+     `(("adb" ,adb)
+       ("android-safe-iop" ,android-safe-iop)
+       ("android-ext4-utils" ,android-ext4-utils)
+       ("android-f2fs-utils" ,android-f2fs-utils)
+       ("android-libbase" ,android-libbase)
+       ("android-libcutils" ,android-libcutils)
+       ("android-liblog" ,android-liblog)
+       ("android-libutils" ,android-libutils)
+       ("android-libsparse" ,android-libsparse)
+       ("android-libziparchive" ,android-libziparchive)
+       ("android-libselinux" ,android-libselinux)
+       ("pcre" ,pcre)
+       ("mkbootimg" ,mkbootimg)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("xz" ,xz)))
+    (home-page "https://developer.android.com/studio/command-line/")
+    (synopsis "Android image flasher")
+    (description
+     "This package provides @command{fastboot}, a tool to upload file system images to Android devices.")
+    (license license:asl2.0)))
+
 (define-public android-udev-rules
   (package
     (name "android-udev-rules")
diff --git a/gnu/packages/aux-files/run-in-namespace.c b/gnu/packages/aux-files/run-in-namespace.c
new file mode 100644
index 0000000000..f0cff88552
--- /dev/null
+++ b/gnu/packages/aux-files/run-in-namespace.c
@@ -0,0 +1,313 @@
+/* GNU Guix --- Functional package management for GNU
+   Copyright (C) 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/>.  */
+
+/* Make the given @WRAPPED_PROGRAM@ relocatable by executing it in a separate
+   mount namespace where the store is mounted in its right place.
+
+   We would happily do that in Scheme using 'call-with-container'.  However,
+   this very program needs to be relocatable, so it needs to be statically
+   linked, which complicates things (Guile's modules can hardly be "linked"
+   into a single executable.)  */
+
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sched.h>
+#include <sys/mount.h>
+#include <errno.h>
+#include <libgen.h>
+#include <limits.h>
+#include <string.h>
+#include <assert.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <dirent.h>
+#include <sys/syscall.h>
+
+/* Concatenate DIRECTORY, a slash, and FILE.  Return the result, which the
+   caller must eventually free.  */
+static char *
+concat (const char *directory, const char *file)
+{
+  char *result = malloc (strlen (directory) + 2 + strlen (file));
+  assert (result != NULL);
+
+  strcpy (result, directory);
+  strcat (result, "/");
+  strcat (result, file);
+  return result;
+}
+
+static void
+mkdir_p (const char *directory)
+{
+  if (strcmp (directory, "/") != 0)
+    {
+      char *parent = dirname (strdupa (directory));
+      mkdir_p (parent);
+      int err = mkdir (directory, 0700);
+      if (err < 0 && errno != EEXIST)
+	assert_perror (errno);
+    }
+}
+
+static void
+rm_rf (const char *directory)
+{
+  DIR *stream = opendir (directory);
+
+  for (struct dirent *entry = readdir (stream);
+       entry != NULL;
+       entry = readdir (stream))
+    {
+      if (strcmp (entry->d_name, ".") == 0
+	  || strcmp (entry->d_name, "..") == 0)
+	continue;
+
+      char *full = concat (directory, entry->d_name);
+
+      int err = unlink (full);
+      if (err < 0)
+	{
+	  if (errno == EISDIR)
+	    /* Recurse (we expect a shallow directory structure so there's
+	       little risk of stack overflow.)  */
+	    rm_rf (full);
+	  else
+	    assert_perror (errno);
+	}
+
+      free (full);
+    }
+
+  closedir (stream);
+
+  int err = rmdir (directory);
+  if (err < 0 && errno != ENOENT)
+    assert_perror (errno);
+}
+
+/* Bind mount all the top-level entries in SOURCE to TARGET.  */
+static void
+bind_mount (const char *source, const char *target)
+{
+  DIR *stream = opendir (source);
+
+  for (struct dirent *entry = readdir (stream);
+       entry != NULL;
+       entry = readdir (stream))
+    {
+      /* XXX: Some file systems may not report a useful 'd_type'.  Ignore them
+	 for now.  */
+      assert (entry->d_type != DT_UNKNOWN);
+
+      if (strcmp (entry->d_name, ".") == 0
+	  || strcmp (entry->d_name, "..") == 0)
+	continue;
+
+      char *abs_source = concat (source, entry->d_name);
+      char *new_entry = concat (target, entry->d_name);
+
+      if (entry->d_type == DT_LNK)
+	{
+	  char target[PATH_MAX];
+
+	  ssize_t result = readlink (abs_source, target, sizeof target - 1);
+	  if (result > 0)
+	    {
+	      target[result] = '\0';
+	      int err = symlink (target, new_entry);
+	      if (err < 0)
+		assert_perror (errno);
+	    }
+	}
+      else
+	{
+	  /* Create the mount point.  */
+	  if (entry->d_type == DT_DIR)
+	    {
+	      int err = mkdir (new_entry, 0700);
+	      if (err != 0)
+		assert_perror (errno);
+	    }
+	  else
+	    close (open (new_entry, O_WRONLY | O_CREAT));
+
+	  int err = mount (abs_source, new_entry, "none",
+			   MS_BIND | MS_REC | MS_RDONLY, NULL);
+
+	  /* It used to be that only directories could be bind-mounted.  Thus,
+	     keep going if we fail to bind-mount a non-directory entry.
+	     That's OK because regular files in the root file system are
+	     usually uninteresting.  */
+	  if (err != 0 && entry->d_type != DT_DIR)
+	    assert_perror (errno);
+
+	  free (new_entry);
+	  free (abs_source);
+	}
+    }
+
+  closedir (stream);
+}
+
+/* Write the user/group ID map for PID to FILE, mapping ID to itself.  See
+   user_namespaces(7).  */
+static void
+write_id_map (pid_t pid, const char *file, int id)
+{
+  char id_map_file[100];
+  snprintf (id_map_file, sizeof id_map_file, "/proc/%d/%s", pid, file);
+
+  char id_map[100];
+
+  /* Map root and the current user.  */
+  int len = snprintf (id_map, sizeof id_map, "%d %d 1\n", id, id);
+  int fd = open (id_map_file, O_WRONLY);
+  if (fd < 0)
+    assert_perror (errno);
+
+  int n = write (fd, id_map, len);
+  if (n < 0)
+    assert_perror (errno);
+
+  close (fd);
+}
+
+/* Disallow setgroups(2) for PID.  */
+static void
+disallow_setgroups (pid_t pid)
+{
+  char file[100];
+
+  snprintf (file, sizeof file, "/proc/%d/setgroups", pid);
+
+  int fd = open (file, O_WRONLY);
+  if (fd < 0)
+    assert_perror (errno);
+
+  int err = write (fd, "deny", 5);
+  if (err < 0)
+    assert_perror (errno);
+
+  close (fd);
+}
+
+
+int
+main (int argc, char *argv[])
+{
+  ssize_t size;
+  char self[PATH_MAX];
+  size = readlink ("/proc/self/exe", self, sizeof self - 1);
+  assert (size > 0);
+
+  /* SELF is something like "/home/ludo/.local/gnu/store/…-foo/bin/ls" and we
+     want to extract "/home/ludo/.local/gnu/store".  */
+  size_t index = strlen (self)
+    - strlen ("@WRAPPED_PROGRAM@")
+    + strlen ("@STORE_DIRECTORY@");
+  char *store = strdup (self);
+  store[index] = '\0';
+
+  struct stat statbuf;
+
+  /* If STORE is already at the "right" place, we can execute
+     @WRAPPED_PROGRAM@ right away.  This is not just an optimization: it's
+     needed when running one of these wrappers from within an unshare'd
+     namespace, because 'unshare' fails with EPERM in that context.  */
+  if (strcmp (store, "@STORE_DIRECTORY@") != 0
+      && lstat ("@WRAPPED_PROGRAM@", &statbuf) != 0)
+    {
+      /* Spawn @WRAPPED_PROGRAM@ in a separate namespace where STORE is
+	 bind-mounted in the right place.  */
+      int err;
+      char *new_root = mkdtemp (strdup ("/tmp/guix-exec-XXXXXX"));
+      char *new_store = concat (new_root, "@STORE_DIRECTORY@");
+      char *cwd = get_current_dir_name ();
+
+      /* Create a child with separate namespaces and set up bind-mounts from
+	 there.  That way, bind-mounts automatically disappear when the child
+	 exits, which simplifies cleanup for the parent.  Note: clone is more
+	 convenient than fork + unshare since the parent can directly write
+	 the child uid_map/gid_map files.  */
+      pid_t child = syscall (SYS_clone, SIGCHLD | CLONE_NEWNS | CLONE_NEWUSER,
+			     NULL, NULL, NULL);
+      switch (child)
+	{
+	case 0:
+	  /* Note: Due to <https://bugzilla.kernel.org/show_bug.cgi?id=183461>
+	     we cannot make NEW_ROOT a tmpfs (which would have saved the need
+	     for 'rm_rf'.)  */
+	  bind_mount ("/", new_root);
+	  mkdir_p (new_store);
+	  err = mount (store, new_store, "none", MS_BIND | MS_REC | MS_RDONLY,
+		       NULL);
+	  if (err < 0)
+	    assert_perror (errno);
+
+	  chdir (new_root);
+	  err = chroot (new_root);
+	  if (err < 0)
+	    assert_perror (errno);
+
+	  /* Change back to where we were before chroot'ing.  */
+	  chdir (cwd);
+	  break;
+
+	case -1:
+	  fprintf (stderr, "%s: error: 'clone' failed: %m\n", argv[0]);
+	  fprintf (stderr, "\
+This may be because \"user namespaces\" are not supported on this system.\n\
+Consequently, we cannot run '@WRAPPED_PROGRAM@',\n\
+unless you move it to the '@STORE_DIRECTORY@' directory.\n\
+\n\
+Please refer to the 'guix pack' documentation for more information.\n");
+	  return EXIT_FAILURE;
+
+	default:
+	  {
+	    /* Map the current user/group ID in the child's namespace (the
+	       default is to get the "overflow UID", i.e., the UID of
+	       "nobody").  We must first disallow 'setgroups' for that
+	       process.  */
+	    disallow_setgroups (child);
+	    write_id_map (child, "uid_map", getuid ());
+	    write_id_map (child, "gid_map", getgid ());
+
+	    int status;
+	    waitpid (child, &status, 0);
+	    chdir ("/");			  /* avoid EBUSY */
+	    rm_rf (new_root);
+	    free (new_root);
+	    exit (status);
+	  }
+	}
+    }
+
+  /* The executable is available under @STORE_DIRECTORY@, so we can now
+     execute it.  */
+  int err = execv ("@WRAPPED_PROGRAM@", argv);
+  if (err < 0)
+    assert_perror (errno);
+
+  return EXIT_FAILURE;
+}
diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm
index 3e6df50653..788e1e7def 100644
--- a/gnu/packages/bioconductor.scm
+++ b/gnu/packages/bioconductor.scm
@@ -29,6 +29,38 @@
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages bioinformatics))
 
+(define-public r-bsgenome-dmelanogaster-ucsc-dm6
+  (package
+    (name "r-bsgenome-dmelanogaster-ucsc-dm6")
+    (version "1.4.1")
+    (source (origin
+              (method url-fetch)
+              ;; We cannot use bioconductor-uri here because this tarball is
+              ;; located under "data/annotation/" instead of "bioc/".
+              (uri (string-append "https://www.bioconductor.org/packages/"
+                                  "release/data/annotation/src/contrib/"
+                                  "BSgenome.Dmelanogaster.UCSC.dm6_"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1bhj0rdgf7lspw4xby9y9mf7v7jxxz8001bc8vw8kf04rjsx6060"))))
+    (properties
+     `((upstream-name . "BSgenome.Dmelanogaster.UCSC.dm6")))
+    (build-system r-build-system)
+    ;; As this package provides little more than a very large data file it
+    ;; doesn't make sense to build substitutes.
+    (arguments `(#:substitutable? #f))
+    (propagated-inputs
+     `(("r-bsgenome" ,r-bsgenome)))
+    (home-page
+     "https://www.bioconductor.org/packages/BSgenome.Dmelanogaster.UCSC.dm6/")
+    (synopsis "Full genome sequences for Fly")
+    (description
+     "This package provides full genome sequences for Drosophila
+melanogaster (Fly) as provided by UCSC (dm6) and stored in Biostrings
+objects.")
+    (license license:artistic2.0)))
+
 (define-public r-hpar
   (package
     (name "r-hpar")
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index ae021f8179..4758ce3081 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -2088,7 +2088,7 @@ accurately delineate genomic rearrangements throughout the genome.")
 (define-public diamond
   (package
     (name "diamond")
-    (version "0.9.21")
+    (version "0.9.22")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2097,7 +2097,7 @@ accurately delineate genomic rearrangements throughout the genome.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1cf98vcsiwcv3c4apg50w1240v1mpw0zln1sdw3g692dqa4y041z"))))
+                "0adp87r9ak63frdrdmrdfhsn6g0jnnyq1lr2wibvqbxcl37iir9m"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no "check" target
@@ -11151,25 +11151,22 @@ with narrow binding events such as transcription factor ChIP-seq.")
 (define-public trim-galore
   (package
     (name "trim-galore")
-    (version "0.4.2")
+    (version "0.4.5")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "http://www.bioinformatics.babraham.ac.uk/"
-                           "projects/trim_galore/trim_galore_v"
-                           version ".zip"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FelixKrueger/TrimGalore.git")
+             (commit version)))
+       (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "0b9qdxi4521gsrjvbhgky8g7kry9b5nx3byzaxkgxz7p4k8bn1mn"))))
+         "0x5892l48c816pf00wmnz5vq0zq6170d3xc8zrxncd4jcz7h1p71"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no tests
        #:phases
        (modify-phases %standard-phases
-         ;; The archive contains plain files.
-         (replace 'unpack
-           (lambda* (#:key source #:allow-other-keys)
-             (zero? (system* "unzip" source))))
          (delete 'configure)
          (delete 'build)
          (add-after 'unpack 'hardcode-tool-references
@@ -11581,47 +11578,62 @@ Browser.")
 (define-public bismark
   (package
     (name "bismark")
-    (version "0.16.3")
+    (version "0.19.1")
     (source
      (origin
-       (method url-fetch)
-       (uri (string-append "https://github.com/FelixKrueger/Bismark/"
-                           "archive/" version ".tar.gz"))
-       (file-name (string-append name "-" version ".tar.gz"))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FelixKrueger/Bismark.git")
+             (commit version)))
+       (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1204i0pa02ll2jn5pnxypkclnskvv7a2nwh5nxhagmhxk9wfv9sq"))))
+         "0yb5l36slwg02fp4b1jdlplgljcsxgqfzvzihzdnphd87dghcc84"))
+       (snippet
+        '(begin
+           ;; highcharts.js is non-free software.  The code is available under
+           ;; CC-BY-NC or proprietary licenses only.
+           (delete-file "bismark_sitrep/highcharts.js")
+           #t))))
     (build-system perl-build-system)
     (arguments
-     `(#:tests? #f ; there are no tests
+     `(#:tests? #f                      ; there are no tests
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (delete 'build)
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let ((bin (string-append (assoc-ref outputs "out")
-                                       "/bin"))
-                   (docdir  (string-append (assoc-ref outputs "out")
-                                           "/share/doc/bismark"))
-                   (docs    '("Bismark_User_Guide.pdf"
-                              "RELEASE_NOTES.txt"))
-                   (scripts '("bismark"
-                              "bismark_genome_preparation"
-                              "bismark_methylation_extractor"
-                              "bismark2bedGraph"
-                              "bismark2report"
-                              "coverage2cytosine"
-                              "deduplicate_bismark"
-                              "bismark_sitrep.tpl"
-                              "bam2nuc"
-                              "bismark2summary")))
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (share   (string-append out "/share/bismark"))
+                    (docdir  (string-append out "/share/doc/bismark"))
+                    (docs    '("Docs/Bismark_User_Guide.html"))
+                    (scripts '("bismark"
+                               "bismark_genome_preparation"
+                               "bismark_methylation_extractor"
+                               "bismark2bedGraph"
+                               "bismark2report"
+                               "coverage2cytosine"
+                               "deduplicate_bismark"
+                               "filter_non_conversion"
+                               "bam2nuc"
+                               "bismark2summary")))
+               (mkdir-p share)
                (mkdir-p docdir)
                (mkdir-p bin)
                (for-each (lambda (file) (install-file file bin))
                          scripts)
                (for-each (lambda (file) (install-file file docdir))
                          docs)
+               (copy-recursively "Docs/Images" (string-append docdir "/Images"))
+
+               (substitute* "bismark2report"
+                 (("\\$RealBin/bismark_sitrep")
+                  (string-append share "/bismark_sitrep")))
+               (copy-recursively "bismark_sitrep"
+                                 (string-append share "/bismark_sitrep"))
+
                ;; Fix references to gunzip
                (substitute* (map (lambda (file)
                                    (string-append bin "/" file))
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 0db6ad3f6a..af5d97288d 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -338,7 +338,7 @@ tree binary files.  These are board description files used by Linux and BSD.")
 (define u-boot
   (package
     (name "u-boot")
-    (version "2018.01")
+    (version "2018.05")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -346,10 +346,10 @@ tree binary files.  These are board description files used by Linux and BSD.")
                     "u-boot-" version ".tar.bz2"))
               (sha256
                (base32
-                "1nidnnjprgxdhiiz7gmaj8cgcf52l5gbv64cmzjq4gmkjirmk3wk"))))
+                "0j60p4iskzb4hamxgykc6gd7xchxfka1zwh8hv08r9rrc4m3r8ad"))))
     (native-inputs
      `(("bc" ,bc)
-       ;("dtc" ,dtc) ; they have their own incompatible copy.
+       ("dtc" ,dtc)
        ("python-2" ,python-2)
        ("swig" ,swig)))
     (build-system  gnu-build-system)
@@ -392,15 +392,17 @@ also initializes the boards (RAM etc).")
                  (if (file-exists? (string-append "configs/" config-name))
                      (zero? (apply system* "make" `(,@make-flags ,config-name)))
                      (begin
-                       (display "Invalid board name. Valid board names are:")
-                       (let ((suffix-len (string-length "_defconfig")))
-                         (scandir "configs"
-                                  (lambda (file-name)
-                                    (when (string-suffix? "_defconfig" file-name)
-                                      (format #t
-                                              "- ~A\n"
-                                              (string-drop-right file-name
-                                                                 suffix-len))))))
+                       (display "Invalid board name. Valid board names are:"
+                                (current-error-port))
+                       (let ((suffix-len (string-length "_defconfig"))
+                             (entries (scandir "configs")))
+                         (for-each (lambda (file-name)
+                                     (when (string-suffix? "_defconfig" file-name)
+                                       (format (current-error-port)
+                                               "- ~A\n"
+                                               (string-drop-right file-name
+                                                                  suffix-len))))
+                                   (sort entries string<)))
                        #f)))))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
@@ -411,6 +413,8 @@ also initializes the boards (RAM etc).")
                                     (find-files "." "^(MLO|SPL)$"))))
                  (mkdir-p libexec)
                  (install-file ".config" libexec)
+                 ;; Useful for "qemu -kernel".
+                 (install-file "u-boot" libexec)
                  (for-each
                   (lambda (file)
                     (let ((target-file (string-append libexec "/" file)))
@@ -440,9 +444,10 @@ also initializes the boards (RAM etc).")
                   (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")))
+                    ;; This is necessary when we're using the bundled dtc.
+                    ;(setenv "PATH" (string-append (getenv "PATH") ":"
+                    ;                              "scripts/dtc"))
+                    )
                   #t))))))
       (native-inputs
        `(("firmware" ,arm-trusted-firmware-pine64-plus)
@@ -469,6 +474,12 @@ also initializes the boards (RAM etc).")
 (define-public u-boot-mx6cuboxi
   (make-u-boot-package "mx6cuboxi" "arm-linux-gnueabihf"))
 
+(define-public u-boot-novena
+  (make-u-boot-package "novena" "arm-linux-gnueabihf"))
+
+(define-public u-boot-cubieboard
+  (make-u-boot-package "Cubieboard" "arm-linux-gnueabihf"))
+
 (define-public vboot-utils
   (package
     (name "vboot-utils")
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 9f85781db2..7ad1802f3c 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -267,7 +267,7 @@
                                ;; Drop trailing letters, as gmp-6.0.0a unpacks
                                ;; into gmp-6.0.0.
                                `(symlink ,(string-trim-right
-                                           (package-full-name lib)
+                                           (package-full-name lib "-")
                                            char-set:letter)
                                          ,(package-name lib)))
                              (list gmp-6.0 mpfr mpc))
diff --git a/gnu/packages/dunst.scm b/gnu/packages/dunst.scm
index 6df37894da..eaad227747 100644
--- a/gnu/packages/dunst.scm
+++ b/gnu/packages/dunst.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2017, 2018 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,7 +33,7 @@
 (define-public dunst
   (package
     (name "dunst")
-    (version "1.3.1")
+    (version "1.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -41,7 +42,7 @@
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1mkdp1vqc376z8clwm5s9070jq1g92j8hv2rr231jr2468fnwaga"))))
+                "12nj8qw3y3nl8sm24wizy2a7k06v1p88bnz1xr9l39h527xyidma"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                      ; no check target
diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm
index 58f06c3106..72cd7c61ba 100644
--- a/gnu/packages/education.scm
+++ b/gnu/packages/education.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,27 +23,33 @@
 (define-module (gnu packages education)
   #:use-module (ice-9 regex)
   #:use-module (gnu packages)
-  #:use-module (gnu packages qt)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages javascript)
   #:use-module (gnu packages kde-frameworks) ; extra-cmake-modules
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages xml)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix svn-download)
   #:use-module (guix utils)
-  #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
   #:use-module (srfi srfi-1))
 
 (define-public gcompris
@@ -224,3 +231,65 @@ Useful support functions and an extensive progress tracker, topical lessons
 and the ability to create your own practice lessons make learning to type
 easy.")
     (license license:gpl2)))
+
+(define-public snap
+  (package
+    (name "snap")
+    (version "4.1.2.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/jmoenig/Snap--Build-Your-Own-Blocks.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0cy3jhqqpmivqnfm9kmlnh3fhf3m3y4xqhikblk8vfjprh6vmcvd"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((source (assoc-ref %build-inputs "source"))
+                (out (assoc-ref %outputs "out"))
+                (share (string-append out "/share/snap")))
+           (copy-recursively source share)
+           ;; Replace the sole minified file in the package.
+           (with-directory-excursion share
+             (delete-file "FileSaver.min.js")
+             (symlink (string-append (assoc-ref %build-inputs "js-filesaver")
+                                     "/share/javascript/FileSaver.min.js")
+                      "FileSaver.min.js"))
+           ;; Create a "snap" executable.
+           (let* ((bin (string-append out "/bin"))
+                  (script (string-append bin "/snap"))
+                  (snap (string-append share "/snap.html"))
+                  (bash (string-append (assoc-ref %build-inputs "bash")
+                                       "/bin/sh"))
+                  (xdg-open (string-append (assoc-ref %build-inputs "xdg-utils")
+                                           "/bin/xdg-open")))
+             (mkdir-p bin)
+             (call-with-output-file script
+               (lambda (port)
+                 (format port "#!~a\n~a '~a'" bash xdg-open snap)))
+             (chmod script #o555)))
+         #t)))
+    (inputs
+     `(("bash" ,bash-minimal)
+       ("js-filesaver" ,js-filesaver)
+       ("xdg-utils" ,xdg-utils)))
+    (home-page "https://snap.berkeley.edu")
+    (synopsis "Visual, blocks based programming language")
+    (description "Snap! (formerly BYOB) is a visual, drag-and-drop
+programming language.  It is an extended reimplementation of Scratch (a
+project of the Lifelong Kindergarten Group at the MIT Media Lab) that
+allows you to Build Your Own Blocks.  It also features first class
+lists, first class procedures, and continuations.  These added
+capabilities make it suitable for a serious introduction to computer
+science for high school or college students.
+
+This package provides a @command{snap} executable calling @command{xdg-open}
+to open the application in a web browser, for offline usage.")
+    (license license:agpl3+)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 6b91577fb3..680c64b9f2 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -18,7 +18,7 @@
 ;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
-;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2017, 2018 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2017, 2018 Kyle Meyer <kyle@kyleam.com>
@@ -105,6 +105,7 @@
   #:use-module (gnu packages gd)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages password-utils)
+  #:use-module (gnu packages xdisorg)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1)
   #:use-module (ice-9 match))
@@ -4731,6 +4732,29 @@ used for reverse direction.")
 distribution, primarily targeting Clojure users")
     (license license:gpl3+)))
 
+(define-public emacs-orgalist
+  (package
+    (name "emacs-orgalist")
+    (version "1.7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://elpa.gnu.org/packages/"
+                           "orgalist-" version ".el"))
+       (sha256
+        (base32
+         "13dl0l727vlny3y88gqpngcy90ly5r719s1pbmkva5gmcryb68xr"))))
+    (build-system emacs-build-system)
+    (home-page "http://elpa.gnu.org/packages/orgalist.html")
+    (synopsis "Manage Org-like lists in non-Org buffers")
+    (description "Write Org mode's plain lists in non-Org buffers.  More
+specifically, Orgalist supports the syntax of Org mode for numbered,
+unnumbered, description items, checkboxes, and counter cookies.
+
+The library also implements radio lists, i.e., lists written in Org
+syntax later translated into the host format, e.g., LaTeX or HTML.")
+    (license license:gpl3+)))
+
 (define-public emacs-writegood-mode
   (package
     (name "emacs-writegood-mode")
@@ -4777,35 +4801,35 @@ passive voice.")
     (name "emacs-org")
     ;; emacs-org-contrib inherits from this package.  Please update its sha256
     ;; checksum as well.
-    (version "9.1.11")
+    (version "9.1.13")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://elpa.gnu.org/packages/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "0i27g5qbkfqbxhgiz917pjwkxg3rwid99d0ickwx43bzq0zi7c1m"))))
+                "1vx0n32gvrgy2bl2b4pvxf00cywxwm57gi46f2b2zlrnmd5n85pr"))))
     (build-system emacs-build-system)
     (home-page "https://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
     (description "Org is an Emacs mode for keeping notes, maintaining TODO
-lists, and project planning with a fast and effective plain-text system.  It
-also is an authoring system with unique support for literate programming and
-reproducible research.")
+lists, and project planning with a fast and effective lightweight markup
+language.  It also is an authoring system with unique support for literate
+programming and reproducible research.")
     (license license:gpl3+)))
 
 (define-public emacs-org-contrib
   (package
     (inherit emacs-org)
     (name "emacs-org-contrib")
-    (version "20180423")
+    (version "20180507")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://orgmode.org/elpa/org-plus-contrib-"
                                   version ".tar"))
               (sha256
                (base32
-                "1aggvdy74q8p79xyc19zring5gjvlzp6lbsq8ar319zkmcjrapqd"))))
+                "190iwjpdjrhg7gl2d4bri2y0y679vlrwd841r6dvhza0yy338d2d"))))
     (arguments
      `(#:modules ((guix build emacs-build-system)
                   (guix build utils)
@@ -8359,23 +8383,34 @@ arXiv, Google Scholar, Library of Congress, etc.
       (license license:gpl3+))))
 
 (define-public emacs-ewmctrl
-  (let ((commit "3d0217c4d6cdb5c308b6cb4293574f470d4faacf")
-        (revision "1"))
+  (let ((commit "3d0217c4d6cdb5c308b6cb4293574f470d4faacf"))
     (package
       (name "emacs-ewmctrl")
-      (version (string-append "0.0.1" "-" revision "."
-                              (string-take commit 7)))
+      (version (git-version "0.0.1" "1" commit))
       (source
        (origin
          (method git-fetch)
          (uri (git-reference
                (url "https://github.com/flexibeast/ewmctrl.git")
                (commit commit)))
-         (file-name (string-append name "-" version "-checkout"))
+         (file-name (git-file-name name version))
          (sha256
           (base32
            "0ilwvx0qryv3v6xf0gxqwnfm6pf96gxap8h9g3f6z6lk9ff4n1wi"))))
       (build-system emacs-build-system)
+      (arguments
+       '(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-ewmctrl
+             ;; This build phase makes sure ‘ewmctrl’ looks
+             ;; for ‘wmctrl’ in the right place.
+             (lambda _
+               (let ((file "ewmctrl.el"))
+                 (chmod file #o644)
+                 (emacs-substitute-sexps file
+                   ("(defcustom ewmctrl-wmctrl-path" (which "wmctrl")))))))))
+      (inputs
+       `(("wmctrl" ,wmctrl)))
       (home-page "https://github.com/flexibeast/ewmctrl")
       (synopsis "Emacs interface to @code{wmctrl}")
       (description "@code{ewmctrl} provides an Emacs interface to
@@ -10416,3 +10451,27 @@ with absolutely no stored indexes (tags) or persistent background processes.
 Dumb Jump performs best with The Silver Searcher @command{ag} or ripgrep
 @command{rg} installed.")
     (license license:gpl3+)))
+
+(define-public emacs-dts-mode
+  (let ((commit "9ee0854446dcc6c53d2b8d2941051768dba50344")
+        (revision "1"))
+    (package
+      (name "emacs-dts-mode")
+      (version (string-append "0.1.0-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/bgamari/dts-mode.git")
+               (commit commit)))
+         (file-name (string-append name "-" version "-checkout"))
+         (sha256
+          (base32
+           "1k8lljdbc90nd29xrhdrsscxavzdq532wq2mg7ljc94krj7538b1"))))
+      (build-system emacs-build-system)
+      (home-page "https://github.com/bgamari/dts-mode.git")
+      (synopsis "Emacs minor mode for editing device tree files")
+      (description
+       "This package provides an Emacs minor mode for highlighting
+device tree files.")
+      (license license:gpl3+))))
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 7a11eb33ca..e5624de07e 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -45,6 +45,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages game-development)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -107,8 +108,8 @@
 
 ;; Building from recent Git because the official 5.0 release no longer builds.
 (define-public dolphin-emu
-  (let ((commit "d04b179111f8d863f360839474cb82c766f762b8")
-        (revision "0"))
+  (let ((commit "47fd8c6eff4cdea7660d0fa78040f98d1d4fa136")
+        (revision "1"))
     (package
       (name "dolphin-emu")
       (version (git-version "5.0" revision commit))
@@ -134,7 +135,7 @@
              #t))
          (sha256
           (base32
-           "0g725wmhlim73zrhi47wmr1bmplpy4b7sbimd5pm8xpfhj5nm10l"))))
+           "1gp2sshnr0dswdawxd5ix96nksp435b52bqvpjx8pmn523k29zsw"))))
       (build-system cmake-build-system)
       (arguments
        '(#:tests? #f
@@ -143,6 +144,10 @@
 
          #:phases
          (modify-phases %standard-phases
+           (add-before 'configure 'fixgcc7
+             (lambda _
+               (unsetenv "C_INCLUDE_PATH")
+               (unsetenv "CPLUS_INCLUDE_PATH")))
            (add-before 'configure 'generate-fonts&hardcore-libvulkan-path
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let ((fontfile
@@ -179,6 +184,7 @@
                "-DX11_FOUND=1")))
       (native-inputs
        `(("pkg-config" ,pkg-config)
+         ("gcc" ,gcc-7) ; Building with gcc@5 doesn't work anymore.
          ("gettext" ,gnu-gettext)))
       (inputs
        `(("alsa-lib" ,alsa-lib)
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index 58f707fc48..cb837e554e 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -169,7 +169,7 @@ as required.")
 (define-public libfilezilla
   (package
     (name "libfilezilla")
-    (version "0.12.1")
+    (version "0.12.2")
     (source
      (origin
        (method url-fetch)
@@ -177,7 +177,7 @@ as required.")
                            name "/" name "-" version ".tar.bz2"))
        (sha256
         (base32
-         "1gbqm42dd0m3fvqz3bk53889479dvn8679zp6ba8a9q2br2wkvv0"))))
+         "1v461hwdk74whp89s490dj1z18gfqf9bz9140m5f11rsvrpid33p"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("cppunit" ,cppunit)
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 671b3df28d..45f1f10018 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -1819,7 +1819,7 @@ falling, themeable graphics and sounds, and replays.")
 (define-public wesnoth
   (package
     (name "wesnoth")
-    (version "1.14.0")
+    (version "1.14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/wesnoth/wesnoth-"
@@ -1828,8 +1828,7 @@ falling, themeable graphics and sounds, and replays.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "09niq53y17faizhmd98anx3dha7hvacvj9a0a64lg8wn915cm0bw"))
-              (patches (search-patches "wesnoth-fix-std-bad-cast.patch"))))
+                "1mzrnbv71b4s41c5x8clhb53l8lidiwzny1hl828228pvys5bxkb"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ; no check target
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 8c694c75c7..4609ea9da1 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -536,7 +536,7 @@ and keep up to date translations of documentation.")
 (define-public gnome-disk-utility
   (package
     (name "gnome-disk-utility")
-    (version "3.28.1")
+    (version "3.28.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -544,7 +544,7 @@ and keep up to date translations of documentation.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "09dmknfas8iifv6k5jb4a9ag57s8awrn0f26fd1qlg0mbfjlnfd6"))))
+                "1j3l4b1prbnixzy6srvcsjfg1dx5nqys2lmygm31ygfdq7svp3m6"))))
     (build-system meson-build-system)
     (native-inputs
      `(("glib:bin" ,glib "bin")
@@ -3877,7 +3877,7 @@ supports image conversion, rotation, and slideshows.")
   ;; 'XDG_DATA_DIRS' appropriately set.
   (package
     (name "eog-plugins")
-    (version "3.26.1")
+    (version "3.26.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3885,7 +3885,7 @@ supports image conversion, rotation, and slideshows.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0v45f2m3b60ygkwpq6jrl49nwrivw6qy0ciibpv821qrm73hsgd7"))))
+                "1w8zw7kwfvlwlyb1k1inqdvbwnzq959sqawlmnwfb8ykn98hbk8y"))))
     (build-system gnu-build-system)
     (home-page "https://wiki.gnome.org/Apps/EyeOfGnome/Plugins")
     (synopsis "Extensions for the Eye of GNOME image viewer")
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 1681e37172..8f2afd1b03 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -459,27 +459,29 @@ security standards.")
         (mozilla-patch "icecat-CVE-2018-5146.patch"      "494e5d5278ba" "1yb4lxjw499ppwhk31vz0vzl0cfqvj9d4jwqag7ayj53ybwsqgjr")
         (mozilla-patch "icecat-CVE-2018-5147.patch"      "5cd5586a2f48" "10s774pwvj6xfk3kk6ivnhp2acc8x9sqq6na8z47nkhgwl2712i5")
         (mozilla-patch "icecat-CVE-2018-5148.patch"      "c3e447e07077" "0gmwy631f8ip4gr1mpbjk8bx1n1748wdls5zq4y8hpmpnq5g1wyx")
-        (mozilla-patch "icecat-bug-1443891.patch"        "17201199b18d" "1d0hcim1fwh0bklwpmnal1mv9d9kmyif1m15aj1nqkf1n3x4xc37")
+        (mozilla-patch "icecat-CVE-2018-5178.patch"      "17201199b18d" "1d0hcim1fwh0bklwpmnal1mv9d9kmyif1m15aj1nqkf1n3x4xc37")
         (mozilla-patch "icecat-bug-1361699.patch"        "a07d6c3ff262" "1z8mjg2487r8pxi0x951v6fwwr696q84f6hlzimc3r7bn5ds9r83")
-        (mozilla-patch "icecat-bug-1433609.patch"        "7127ccf8f88c" "0m4my7aflpp0wlqilr2m4axd7k2fyrs7jqdcz2rrz5pwivz1anvd")
+        (mozilla-patch "icecat-CVE-2018-5150-pt01.patch" "7127ccf8f88c" "0m4my7aflpp0wlqilr2m4axd7k2fyrs7jqdcz2rrz5pwivz1anvd")
         (mozilla-patch "icecat-bug-1444231.patch"        "57bd35fa8618" "0pl6x5amc5x6nhwl7qnmnff3jjjxmbs8r365bfzj58g7q5ihqwvf")
-        (mozilla-patch "icecat-bug-1409440.patch"        "2f3e1ccf1661" "0azl8g81kpc0w2xpjpgm1154ll12g0a8n6i7bl3s9nnrk2i26n74")
-        (mozilla-patch "icecat-bug-1441941.patch"        "8ff2c4d68e36" "0kz1rqhnz8ca4z20hnpcafidhsrwhnm0h2gmlgchni33h8pisr1f")
-        (mozilla-patch "icecat-bug-1443092.patch"        "b8c430253efd" "1arjcaps9axhxh5ff84n9bydhhzrihn7hbq7v69nvqwqrjp3lgg9")
-        (mozilla-patch "icecat-bug-1448774.patch"        "05cadfa3ac39" "0q0vh7vy7x0l8jp6376fn10qljfp4mnp4m9zfn90j4m19pfl86a0")
-        (mozilla-patch "icecat-bug-1449548.patch"        "48a678d7cb81" "1yfh7kxxxvqck2hpn98pwag4splyc6c9brc5haq28fp8x9r9qvlk")
-        (mozilla-patch "icecat-bug-1448705.patch"        "112032576872" "1x1hxyggbxlnlj0n9cbp03hjnfvm6cq8nqj0jizrd8cfyd5aig8p")
-        (mozilla-patch "icecat-bug-1388020.patch"        "ad9a885b0df4" "1hrk1q9mk59jww55g4lqmaflznk87x3vvjn2mxfgfbbjs8l1cyz4")
+        (mozilla-patch "icecat-CVE-2018-5150-pt02.patch" "2f3e1ccf1661" "0azl8g81kpc0w2xpjpgm1154ll12g0a8n6i7bl3s9nnrk2i26n74")
+        (mozilla-patch "icecat-CVE-2018-5159.patch"      "8ff2c4d68e36" "0kz1rqhnz8ca4z20hnpcafidhsrwhnm0h2gmlgchni33h8pisr1f")
+        (mozilla-patch "icecat-CVE-2018-5154.patch"      "b8c430253efd" "1arjcaps9axhxh5ff84n9bydhhzrihn7hbq7v69nvqwqrjp3lgg9")
+        (mozilla-patch "icecat-CVE-2018-5155.patch"      "05cadfa3ac39" "0q0vh7vy7x0l8jp6376fn10qljfp4mnp4m9zfn90j4m19pfl86a0")
+        (mozilla-patch "icecat-CVE-2018-5168.patch"      "48a678d7cb81" "1yfh7kxxxvqck2hpn98pwag4splyc6c9brc5haq28fp8x9r9qvlk")
+        (mozilla-patch "icecat-CVE-2018-5150-pt03.patch" "112032576872" "1x1hxyggbxlnlj0n9cbp03hjnfvm6cq8nqj0jizrd8cfyd5aig8p")
+        (mozilla-patch "icecat-CVE-2018-5150-pt04.patch" "ad9a885b0df4" "1hrk1q9mk59jww55g4lqmaflznk87x3vvjn2mxfgfbbjs8l1cyz4")
         (mozilla-patch "icecat-bug-1452416.patch"        "f89ab96a2532" "1dqchxdyznhgyxhfq0hm0vg1p597hjqflfzigc7j3s5vxf9rg2nv")
-        (mozilla-patch "icecat-bug-1451376.patch"        "af885a1bd293" "1wfpqhm2dp4fsx6zbrncngsqz7g2x09b625zcighixrbpvybyww3")
-        (mozilla-patch "icecat-bug-1444668.patch"        "666fc84ec72d" "0lml2wqd4yqidhi364x8r90f78397k2y0kq5z5bv8l8j4bhcnb9v")
-        (search-patch  "icecat-bug-1452075.patch")
-        (mozilla-patch "icecat-bug-1393367.patch"        "1ab40761a856" "1kgwypy7k5b33jwkni4025za4kcnv5m6klsx4wsswlixmljmkbc7")
+        (mozilla-patch "icecat-CVE-2018-5150-pt05.patch" "af885a1bd293" "1wfpqhm2dp4fsx6zbrncngsqz7g2x09b625zcighixrbpvybyww3")
+        (mozilla-patch "icecat-CVE-2018-5150-pt06.patch" "666fc84ec72d" "0lml2wqd4yqidhi364x8r90f78397k2y0kq5z5bv8l8j4bhcnb9v")
+        (search-patch  "icecat-CVE-2018-5157-and-CVE-2018-5158.patch")
+        (mozilla-patch "icecat-CVE-2018-5150-pt07.patch" "1ab40761a856" "1kgwypy7k5b33jwkni4025za4kcnv5m6klsx4wsswlixmljmkbc7")
         (mozilla-patch "icecat-bug-1453339.patch"        "0edb8dca7087" "0b30pipqryh311sc97rcmwnx9n8qdlbbz90b2hkybjnprmbhfxrm")
-        (mozilla-patch "icecat-bug-1452202.patch"        "134c728799c1" "16hbwx6fx1hrddsyjjbd3z954ql3pg348xs13h9riyblq8crzmam")
-        (mozilla-patch "icecat-bug-1411415.patch"        "14eab155eaa8" "0wr4xgblxzk4c2gvlnpl7ic1196mrhry1hgwdl1jivq0ji5cbvbd")
+        (mozilla-patch "icecat-CVE-2018-5150-pt08.patch" "134c728799c1" "16hbwx6fx1hrddsyjjbd3z954ql3pg348xs13h9riyblq8crzmam")
+        (mozilla-patch "icecat-CVE-2018-5150-pt09.patch" "14eab155eaa8" "0wr4xgblxzk4c2gvlnpl7ic1196mrhry1hgwdl1jivq0ji5cbvbd")
         (mozilla-patch "icecat-bug-1452619.patch"        "2b75d55ccf0e" "1g87aybw6ggv6hyk385bplv0lx63n020gwyq0d6d4pqld48hsm1i")
-        (mozilla-patch "icecat-bug-1453127.patch"        "89857f35df29" "0gzi47svrw5ajdlm3i12193psm702zx70x5h1rwp4gb7gxh4m4d9")))
+        (mozilla-patch "icecat-bug-1453127.patch"        "89857f35df29" "0gzi47svrw5ajdlm3i12193psm702zx70x5h1rwp4gb7gxh4m4d9")
+        (mozilla-patch "icecat-CVE-2018-5150-pt10.patch" "3f2ec03c0405" "0w02952dlxd2gmwghck2nm4rjjmc5ylg62bw6m1rvi35kcr134lr")
+        (mozilla-patch "icecat-CVE-2018-5183.patch"      "f729bf78fb3a" "0xkj6jwxwdqkvb5c7wi16b8cm8qrnlrd3s9jnd46jg03iykrx56f")))
       (modules '((guix build utils)))
       (snippet
        '(begin
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index c6fc68468f..fe6dfbe1c8 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -214,7 +214,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
   (package
     (inherit go-1.4)
     (name "go")
-    (version "1.9.5")
+    (version "1.9.6")
     (source
      (origin
        (method url-fetch)
@@ -222,7 +222,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                            name version ".src.tar.gz"))
        (sha256
         (base32
-         "1g4zqhbh1yw3gnb400szzwrdz0k5s3h0h5nc35xgmn5v69zvphpi"))))
+         "0a2qkvzr0g5cbd66wi7b6r40qyp9p55y0zz2j5qg1xsqwsdhbx1n"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.4)
        ((#:phases phases)
@@ -383,7 +383,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
   (package
     (inherit go-1.9)
     (name "go")
-    (version "1.10.1")
+    (version "1.10.2")
     (source
      (origin
        (method url-fetch)
@@ -391,7 +391,7 @@ in the style of communicating sequential processes (@dfn{CSP}).")
                            name version ".src.tar.gz"))
        (sha256
         (base32
-         "1p1xyyxicp752n9wj10sljjl6mjxpfsplkhx74fzzjrwdkzlk52q"))))
+         "1gcqbac3wbhbcr0ri9zgfj6qkqbwf9fn116a0a7fvn4wdff60r32"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.9)
        ((#:phases phases)
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index 2b7438c902..11997598c1 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -117,13 +117,13 @@ interfaces for other technical domains.")
 (define-public python-graphviz
   (package
     (name "python-graphviz")
-    (version "0.8.2")
+    (version "0.8.3")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "graphviz" version ".zip"))
               (sha256
                (base32
-                "148h7ln8z65c1723w9vpx8khkvl9iigh8csv0qd4pidc53042rv0"))))
+                "0gnl11w98iib7vif92f3vircavy2v1yl9sl54y6hhk1mwm0f07f6"))))
     (build-system python-build-system)
     (native-inputs
      `(("unzip" ,unzip)))
diff --git a/gnu/packages/groovy.scm b/gnu/packages/groovy.scm
new file mode 100644
index 0000000000..512f9c9edb
--- /dev/null
+++ b/gnu/packages/groovy.scm
@@ -0,0 +1,1156 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu>
+;;;
+;;; 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 groovy)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module (guix build-system ant)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages java)
+  #:use-module (gnu packages xml))
+
+(define java-groovy-bootstrap
+  (package
+    (name "java-groovy-bootstrap")
+    (version "2.4.15")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/apache/groovy/archive/GROOVY_"
+                                  (string-map (lambda (x) (if (eq? x #\.) #\_ x)) version)
+                                  ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "19f3yd2z6jmz1xhwi5kkg1wmgbqkfs7qvd3rzb43xr3nffz8cisv"))
+              (patches
+                (search-patches
+                  "groovy-add-exceptionutilsgenerator.patch"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "groovy.jar"
+       #:source-dir "src/main:subprojects/groovy-test/src/main/java"
+       #:test-dir "src/test"
+       #:tests? #f
+       #:jdk ,icedtea-8
+       #:main-class "groovy.ui.GroovyMain"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-java8
+           ;; Fix "Reference to plus is ambiguous"
+           (lambda _
+             (substitute* "src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java"
+               (("toList\\(left\\)")
+                "(List<T>)toList(left)"))
+             #t))
+         (add-before 'build 'generate-parsers
+           (lambda _
+             (with-directory-excursion "src/main/org/codehaus/groovy/antlr/java"
+               (invoke "antlr" "java.g"))
+             (with-directory-excursion "src/main/org/codehaus/groovy/antlr"
+               (mkdir "parser")
+               (with-directory-excursion "parser"
+                 (invoke "antlr" "../groovy.g")))
+             #t))
+         (add-before 'build 'generate-exception-utils
+           (lambda _
+             (invoke "javac" "-cp" (getenv "CLASSPATH")
+                     "config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java")
+             (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                 ":config/ant/src")
+                     "org.codehaus.groovy.ExceptionUtilsGenerator"
+                     "build/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
+             #t)))))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("antlr2" ,antlr2)
+       ("java-jmock-1" ,java-jmock-1)
+       ("java-xmlunit-legacy" ,java-xmlunit-legacy)))
+    (inputs
+     `(("java-commons-cli" ,java-commons-cli)
+       ("java-asm" ,java-asm)
+       ("java-classpathx-servletapi" ,java-classpathx-servletapi)
+       ("java-xstream" ,java-xstream)
+       ("java-jansi" ,java-jansi)
+       ("java-jline-2" ,java-jline-2)))
+    (home-page "http://groovy-lang.org/")
+    (synopsis "Groovy's java bootstrap")
+    (description "This package contains the java bootstrap that is used to build
+groovy submodules.")
+    (license license:asl2.0)))
+
+(define groovy-bootstrap
+  (package
+    (inherit java-groovy-bootstrap)
+    (name "groovy-bootstrap")
+    (arguments
+     `(#:jar-name "groovy.jar"
+       #:jdk ,icedtea-8
+       ;Requires groovy-xml and logback-classic which are circular dependencies
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-java8
+           ;; Fix "Reference to plus is ambiguous"
+           (lambda _
+             (substitute* "src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java"
+               (("toList\\(left\\)")
+                "(List<T>)toList(left)"))
+             #t))
+         (add-before 'build 'generate-parser
+           (lambda _
+             (with-directory-excursion "src/main/org/codehaus/groovy/antlr/java"
+               (invoke "antlr" "java.g"))
+             (with-directory-excursion "src/main/org/codehaus/groovy/antlr"
+               (mkdir "parser")
+               (with-directory-excursion "parser"
+                 (invoke "antlr" "../groovy.g")))
+             #t))
+         (add-before 'build 'generate-exception-utils
+           (lambda _
+             (invoke "javac" "-cp" (getenv "CLASSPATH")
+                     "config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java")
+             (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                 ":config/ant/src")
+                     "org.codehaus.groovy.ExceptionUtilsGenerator"
+                     "target/classes/org/codehaus/groovy/runtime/ExceptionUtils.class")
+             #t))
+         (add-before 'build 'generate-dgminfo
+           (lambda _
+             (mkdir-p "target/classes/org/codehaus/groovy/runtime")
+             (mkdir-p "target/classes/META-INF")
+             (invoke "javac" "-cp" (getenv "CLASSPATH")
+                     "src/main/org/codehaus/groovy/tools/DgmConverter.java")
+             (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                 ":src/main")
+                     "org.codehaus.groovy.tools.DgmConverter")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (with-directory-excursion "src/main"
+               (for-each (lambda (file)
+                           (mkdir-p (string-append "../../target/classes/"
+                                                   (dirname file)))
+                           (copy-file file
+                                      (string-append "../../target/classes/"
+                                                     file)))
+                  (find-files "." ".*.(txt|properties|xml|html)")))
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                           "org.codehaus.groovy.tools.FileSystemCompiler"
+                           "-d" "target/classes"
+                           "-j"; joint compilation
+                           (find-files "src/main"
+                                       ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy.jar"
+                     "-C" "target/classes" ".")
+             #t)))))
+    (inputs
+     `(("java-apache-ivy" ,java-apache-ivy)
+       ,@(package-inputs java-groovy-bootstrap)))
+    (native-inputs
+     `(("java-groovy-bootstrap" ,java-groovy-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy compiler")
+    (description "This package contains the first version of the Groovy compiler.
+Although already usable, it doesn't contain the groovy library yet.  This package
+is used to build the groovy submodules written in groovy.")))
+
+(define groovy-tests-bootstrap
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-tests-bootstrap")
+    (arguments
+     `(#:jar-name "groovy-tests-bootstrap.jar"
+       #:jdk ,icedtea-8
+       #:tests? #f; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes"
+                    "-j"; joint compilation
+                    (append
+                      (find-files "src/test" "TestSupport.java")
+                      (find-files "src/test" "HeadlessTestSupport.java")
+                      (find-files "src/test" "XmlAssert.java")))
+             (invoke "jar" "-cf" "build/jar/groovy-tests-bootstrap.jar"
+                     "-C" "build/classes" ".")
+             #t)))))
+    (inputs
+     `(("groovy-test" ,groovy-test)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy test classes")
+    (description "This package contains three classes required for testing
+other groovy submodules.")))
+
+(define groovy-test
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-test")
+    (arguments
+     `(#:jar-name "groovy-test.jar"
+       #:jdk ,icedtea-8
+       #:test-dir "subprojects/groovy-test/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "subprojects/groovy-test/src/main"
+                                ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-test.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (append (find-files "subprojects/groovy-test/src/test"
+                                        ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy test submodule")
+    (description "This package contains the test submodules used to test
+other groovy submodules.")))
+
+(define groovy-xml
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-xml")
+    (arguments
+     `(#:jar-name "groovy-xml.jar"
+       #:jdk ,icedtea-8
+       #:test-dir "src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-xml")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-xml.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy XML")
+    (description "This package contains XML-related utilities for groovy.")))
+
+(define groovy-templates
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-templates")
+    (arguments
+     `(#:jar-name "groovy-templates.jar"
+       #:jdk ,icedtea-8
+       #:test-dir "subprojects/groovy-templates/src/test"
+       #:tests? #f;Requires spock-framework which is a circular dependency
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "subprojects/groovy-templates/src/main"
+                                ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-templates.jar"
+                     "-C" "build/classes" ".")
+             #t)))))
+    (inputs
+     `(("groovy-xml" ,groovy-xml)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy template engine")
+    (description "This package contains a template framework which is
+well-suited to applications where the text to be generated follows the form of
+a static template.")))
+
+(define groovy-groovydoc
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-groovydoc")
+    (arguments
+     `(#:jar-name "groovy-groovydoc.jar"
+       #:jdk ,icedtea-8
+       #:test-dir "subprojects/groovy-groovydoc/src/test"
+       #:tests? #f; Requires groovy-ant which is a circular dependency
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "subprojects/groovy-groovydoc/src/main/resources"
+                               "build/classes")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes"
+                    "-j"; joint compilation
+                    (find-files "subprojects/groovy-groovydoc/src/main"
+                                ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-groovydoc.jar"
+                     "-C" "build/classes" ".")
+             #t)))))
+    (inputs
+     `(("groovy-templates" ,groovy-templates)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy documentation generation")
+    (description "This package contains the groovy documentation generator,
+similar to javadoc.")))
+
+(define groovy-ant
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-ant")
+    (arguments
+     `(#:jar-name "groovy-ant.jar"
+       #:jdk ,icedtea-8
+       #:test-dir "src/test"
+       ;; FIXME: Excluding all tests because they fail
+       #:test-exclude (list
+                        "**/GroovyTest.java"
+                        "**/GroovycTest.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-ant")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-ant.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (find-files "src/test" ".*\\.(groovy|java)$"))
+             (invoke "ant" "check")
+             #t)))))
+    (inputs
+     `(("groovy-groovydoc" ,groovy-groovydoc)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-xml" ,groovy-xml)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy ant tasks")
+    (description "This package contains groovy-related ant tasks definitions.")))
+
+(define groovy-bsf
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-bsf")
+    (arguments
+     `(#:jar-name "groovy-bsf.jar"
+       #:jdk ,icedtea-8
+       #:test-dir "src/test"
+       #:test-exclude (list
+;; exception from Groovy: org.codehaus.groovy.runtime.InvokerInvocationException:
+;; groovy.lang.MissingMethodException: No signature of method:
+;; java.util.ArrayList.each() is applicable for argument types:
+;; (groovy.script.MapFromList$_doit_closure1) values:
+;; [groovy.script.MapFromList$_doit_closure1@17e554d5]
+                        "**/BSFTest.java")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-bsf")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-bsf.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\""))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (find-files "src/test" ".*\\.(groovy|java)$"))
+             (invoke "ant" "check")
+             #t)))))
+    (inputs
+     `(("java-commons-bsf" ,java-commons-bsf)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy BSF engine")
+    (description "This package defines the BSF engine for using Groovy inside
+any @dfn{Bean Scripting Framework} (BSF) application.")))
+
+(define groovy-swing
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-swing")
+    (arguments
+     `(#:jar-name "groovy-swing.jar"
+       #:jdk ,icedtea-8
+       ;; FIXME: tests are not run
+       #:test-dir "src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-swing")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-swing.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "src/test/groovy/groovy/util/GroovySwingTestCase.groovy"
+               (("HeadlessTestSupport.headless") "isHeadless()"))
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (find-files "src/test" ".*\\.(groovy|java)$"))
+             (invoke "ant" "check")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy graphical library")
+    (description "This package contains the groovy bindings to Java Swing, a
+library used to build graphical interfaces.")))
+
+(define groovy-console
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-console")
+    (arguments
+     `(#:jar-name "groovy-console.jar"
+       #:jdk ,icedtea-8
+       ;; FIXME: tests are not run
+       #:test-dir "src/test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-console")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-console.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (substitute*
+               "../groovy-swing/src/test/groovy/groovy/util/GroovySwingTestCase.groovy"
+               (("HeadlessTestSupport.headless") "isHeadless()"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (append
+                      (find-files "../groovy-swing/src/test" ".*\\.(groovy|java)$")
+                      (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (inputs
+     `(("groovy-swing" ,groovy-swing)
+       ("groovy-templates" ,groovy-templates)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ("java-commons-logging-minimal" ,java-commons-logging-minimal)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy graphical interface")
+    (description "This package contains a graphical interface to run groovy.")))
+
+(define groovy-docgenerator
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-docgenerator")
+    (arguments
+     `(#:jar-name "groovy-docgenerator.jar"
+       #:jdk ,icedtea-8
+       #:tests? #f; No tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-docgenerator")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-docgenerator.jar"
+                     "-C" "build/classes" ".")
+             #t)))))
+    (inputs
+     `(("groovy-templates" ,groovy-templates)
+       ("groovy-swing" ,groovy-swing)
+       ("java-qdox-1.12" ,java-qdox-1.12)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy documentation generation")
+    (description "This package contains a command line tool to generate
+documentation for groovy applications.")))
+
+(define groovy-groovysh
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-groovysh")
+    (arguments
+     `(#:jar-name "groovy-groovysh.jar"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-groovysh")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-groovysh.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (inputs
+     `(("groovy-xml" ,groovy-xml)
+       ("groovy-console" ,groovy-console)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy REPL")
+    (description "This package contains the Groovy REPL.")))
+
+(define groovy-jmx
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-jmx")
+    (arguments
+     `(#:jar-name "groovy-jmx.jar"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-jmx")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                      "org.codehaus.groovy.tools.FileSystemCompiler"
+                      "-d" "build/classes" "-j"; joint compilation
+                      (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-jmx.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy JMX extension")
+    (description "This package contains the JMX extension of Groovy, for
+management and monitoring of JVM-based solutions.")))
+
+(define groovy-json
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-json")
+    (arguments
+     `(#:jar-name "groovy-json.jar"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-json")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                      "org.codehaus.groovy.tools.FileSystemCompiler"
+                      "-d" "build/classes" "-j"; joint compilation
+                      (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-json.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy JSON")
+    (description "This package contains JSON-related utilities for groovy.")))
+
+(define groovy-jsr223
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-jsr223")
+    (arguments
+     `(#:jar-name "groovy-jsr223.jar"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-jsr223")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                      "org.codehaus.groovy.tools.FileSystemCompiler"
+                      "-d" "build/classes" "-j"; joint compilation
+                      (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-jsr223.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes" "-j"
+                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy's own JSR223 implementation")
+    (description "This package contains Groovy's own JSR223 implementation.  This
+module is used for interaction between Groovy and Java code.")))
+
+(define groovy-nio
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-nio")
+    (arguments
+     `(#:jar-name "groovy-nio.jar"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:tests? #f; Requires spock-framework
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-nio")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-nio.jar"
+                     "-C" "build/classes" ".")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy input-output library")
+    (description "This package implements an input/output library that extends
+the functionality of the common library of Java.")))
+
+(define groovy-servlet
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-servlet")
+    (arguments
+     `(#:jar-name "groovy-servlet.jar"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-servlet")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes"
+                    "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-servlet.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                    (string-append (getenv "CLASSPATH") ":build/classes")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/test-classes"
+                    "-j"
+                    (append (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (inputs
+     `(("groovy-templates" ,groovy-templates)
+       ("groovy-xml" ,groovy-xml)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-json" ,groovy-json)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy's servlet implementation")
+    (description "This package contains a library to create groovlets, Groovy's
+version of Java servlets.")))
+
+(define groovy-sql
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-sql")
+    (arguments
+     `(#:jar-name "groovy-sql.jar"
+       #:test-dir "src/test"
+       #:tests? #f;TODO: Requires hsqldb
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-sql")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                      "org.codehaus.groovy.tools.FileSystemCompiler"
+                      "-d" "build/classes" "-j"; joint compilation
+                      (find-files "src/main"
+                                  ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-sql.jar"
+                     "-C" "build/classes" ".")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy SQL library")
+    (description "This package contains a facade over Java's normal JDBC APIs
+providing greatly simplified resource management and result set handling.")))
+
+(define groovy-testng
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-testng")
+    (arguments
+     `(#:jar-name "groovy-testng.jar"
+       #:tests? #f; No tests
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-testng")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes"
+                    "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-testng.jar"
+                     "-C" "build/classes" ".")
+             #t)))))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy testing framework")
+    (description "This package contains integration code for running TestNG
+tests in Groovy.")))
+
+(define groovy-macro
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy-macro")
+    (arguments
+     `(#:jar-name "groovy-macro.jar"
+       #:test-dir "src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "subprojects/groovy-macro")
+             #t))
+         (replace 'build
+           (lambda _
+             (mkdir-p "build/classes")
+             (mkdir-p "build/jar")
+             (apply invoke "java" "-cp" (getenv "CLASSPATH")
+                    "org.codehaus.groovy.tools.FileSystemCompiler"
+                    "-d" "build/classes" "-j"; joint compilation
+                    (find-files "src/main" ".*\\.(groovy|java)$"))
+             (invoke "jar" "-cf" "build/jar/groovy-macro.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (replace 'check
+           (lambda _
+             (mkdir-p "build/test-classes")
+             (substitute* "build.xml"
+               (("depends=\"compile-tests\"") "depends=\"\"")
+               (("}/java") "}/groovy"))
+             (apply invoke "java" "-cp"
+                   (string-append (getenv "CLASSPATH") ":build/classes")
+                   "org.codehaus.groovy.tools.FileSystemCompiler"
+                   "-d" "build/test-classes" "-j"
+                   (append (find-files "src/test" ".*\\.(groovy|java)$")))
+             (invoke "ant" "check")
+             #t)))))
+    (inputs
+     `(("groovy-templates" ,groovy-templates)
+       ("groovy-xml" ,groovy-xml)
+       ,@(package-inputs groovy-bootstrap)))
+    (native-inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-json" ,groovy-json)
+       ("groovy-test" ,groovy-test)
+       ("groovy-tests-bootstrap" ,groovy-tests-bootstrap)
+       ,@(package-native-inputs java-groovy-bootstrap)))
+    (synopsis "Groovy macro processor")
+    (description "This package contains a high-level library to create macro
+and modify groovy's @dfn{Abstract Syntax Tree} (AST).")))
+
+(define-public groovy
+  (package
+    (inherit groovy-bootstrap)
+    (name "groovy")
+    (arguments
+     `(#:tests? #f; No tests
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs inputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (out-bin (string-append out "/bin"))
+                    (out-lib (string-append out "/lib")))
+               (with-directory-excursion "src/bin"
+                 (substitute* "startGroovy"
+                   (("\"\\\\\"") "\"")
+                   (("\\\\\"\"") "\"")
+                   (("\\\\\\$") "$")
+                   (("@GROOVYJAR@") "groovy.jar")
+                   (("MAX_FD=\"maximum\"")
+                    (string-append
+                      "MAX_FD=\"maximum\"\nJAVAHOME="
+                      (assoc-ref inputs "jdk"))))
+                 ;; Groovy uses class loading. It's not enough to put the class
+                 ;; in the loader's classpath, as it causes breakages:
+                 ;; the compiler would give this error:
+                 ;; "Prohibited package name: java.lang"
+                 ;; So we symlink dependencies in this package's output. The
+                 ;; starter class (in groovy-bootstrap) is where the class loader
+                 ;; will look for dependencies, so we put it there too.
+                 (mkdir-p out-lib)
+                 (for-each
+                   (lambda (input)
+                     (for-each
+                       (lambda (jar)
+                         (symlink jar (string-append out-lib "/" (basename jar))))
+                       (find-files (assoc-ref inputs input) ".*.jar")))
+                   '("groovy-bootstrap" "groovy-ant" "groovy-bsf"
+                     "groovy-console" "groovy-docgenerator"
+                     "groovy-groovydoc" "groovy-groovysh"
+                     "groovy-jmx" "groovy-json" "groovy-jsr223"
+                     "groovy-nio" "groovy-servlet" "groovy-sql"
+                     "groovy-swing" "groovy-templates" "groovy-testng"
+                     "java-commons-cli" "java-asm"
+                     "java-classpathx-servletapi" "java-xstream"
+                     "java-jansi" "java-jline-2"))
+                 ;; antlr.jar is present twice in antlr2.  Symlink doesn't like
+                 ;; it, so we symlink it here.
+                 (symlink (string-append (assoc-ref inputs "antlr2") "/lib/antlr.jar")
+                          (string-append out-lib "/antlr.jar"))
+                 (for-each
+                   (lambda (tool)
+                     (install-file tool out-bin)
+                     (chmod (string-append out-bin "/" tool) #o755))
+                   '("grape" "groovy" "groovyc" "groovyConsole" "groovydoc"
+                     "groovysh" "java2groovy" "startGroovy")))
+               (install-file "src/conf/groovy-starter.conf"
+                             (string-append out "/conf"))
+               #t))))))
+    (inputs
+     `(("groovy-bootstrap" ,groovy-bootstrap)
+       ("groovy-ant" ,groovy-ant)
+       ("groovy-bsf" ,groovy-bsf)
+       ("groovy-console" ,groovy-console)
+       ("groovy-docgenerator" ,groovy-docgenerator)
+       ("groovy-groovydoc" ,groovy-groovydoc)
+       ("groovy-groovysh" ,groovy-groovysh)
+       ("groovy-jmx" ,groovy-jmx)
+       ("groovy-json" ,groovy-json)
+       ("groovy-jsr223" ,groovy-jsr223)
+       ("groovy-nio" ,groovy-nio)
+       ("groovy-servlet" ,groovy-servlet)
+       ("groovy-sql" ,groovy-sql)
+       ("groovy-swing" ,groovy-swing)
+       ("groovy-templates" ,groovy-templates)
+       ("groovy-testng" ,groovy-testng)
+       ("java-commons-cli" ,java-commons-cli)
+       ("java-asm" ,java-asm)
+       ("java-classpathx-servletapi" ,java-classpathx-servletapi)
+       ("java-xstream" ,java-xstream)
+       ("java-jansi" ,java-jansi)
+       ("java-jline-2" ,java-jline-2)
+       ("antlr2" ,antlr2)))
+    (synopsis "Programming language for the JVM")
+    (description "Apache Groovy is a powerful, optionally typed and dynamic
+language, with static-typing and static compilation capabilities, for the Java
+platform.  It integrates smoothly with any Java program, and immediately
+delivers to your application powerful features, including scripting
+capabilities, Domain-Specific Language authoring, runtime and compile-time
+meta-programming and functional programming.")))
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 9eefb58433..40e1e86f7e 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -353,7 +353,6 @@ par compared to the rest.")
     (inputs
      `(("gst-plugins-base" ,gst-plugins-base)
        ("liba52" ,liba52)
-       ("libmad" ,libmad)
        ("lame" ,lame)
        ("libcdio" ,libcdio)
        ("twolame" ,twolame)
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index ae7813c739..578b4513f8 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -17,6 +17,8 @@
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -66,6 +68,7 @@
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages networking)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -1569,6 +1572,9 @@ provides access to that interface and its types from the Scheme level.")
      '(#:configure-flags
        (list (string-append
               "--with-guile-site-dir=" %output "/share/guile/site/2.2"))
+       #:make-flags
+       (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib:"
+                            (assoc-ref %build-inputs "guile-dbd-sqlite3") "/lib"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'patch-extension-path
@@ -1579,6 +1585,8 @@ provides access to that interface and its types from the Scheme level.")
                     (ext     (string-append out "/lib/libguile-dbi")))
                (substitute* dbi.scm (("libguile-dbi") ext))
                #t))))))
+    (inputs
+     `(("guile-dbd-sqlite3" ,guile-dbd-sqlite3))) ; only shared library, no scheme files
     (propagated-inputs
      `(("guile" ,guile-2.2)))
     (synopsis "Guile database abstraction layer")
@@ -1590,6 +1598,15 @@ programming interface is presented regardless of which database system is used.
 It currently supports MySQL, Postgres and SQLite3.")
     (license license:gpl2+)))
 
+(define guile-dbi-bootstrap
+  (package
+    (inherit guile-dbi)
+    (name "guile-dbi-bootstrap")
+    (inputs '())
+    (arguments
+     (substitute-keyword-arguments (package-arguments guile-dbi)
+       ((#:make-flags _) '(list))))))
+
 (define-public guile-dbd-sqlite3
   (package
     (name "guile-dbd-sqlite3")
@@ -1604,12 +1621,11 @@ It currently supports MySQL, Postgres and SQLite3.")
                 "0rg71jchxd2y8x496s8zmfmikr5g8zxi8zv2ar3f7a23pph92iw2"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("guile-dbi-bootstrap" ,guile-dbi-bootstrap))) ; only required for headers
     (inputs
      `(("sqlite" ,sqlite)
        ("zlib" ,(@ (gnu packages compression) zlib))))
-    (propagated-inputs
-     `(("guile-dbi" ,guile-dbi)))
     (synopsis "Guile DBI driver for SQLite")
     (home-page "https://github.com/jkalbhenn/guile-dbd-sqlite3")
     (description
@@ -2109,4 +2125,93 @@ It has a nice, simple s-expression based syntax.")
      "Guile-colorized provides you with a colorized REPL for GNU Guile.")
     (license license:gpl3+)))
 
+(define-public guile-simple-zmq
+  (let ((commit "d76657aeb1cd10ef8136edc06bb90999914c7c3c")
+        (revision "0"))
+    (package
+      (name "guile-simple-zmq")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/jerry40/guile-simple-zmq")
+               (commit commit)))
+         (sha256
+          (base32
+           "1w73dy5gpyv33jn34dqlkqpwh9w4y8wm6hgvbpb3wbp6xsa2mk4z"))
+         (file-name (git-file-name name version))))
+      (build-system trivial-build-system)
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils)
+                        (srfi srfi-26)
+                        (ice-9 match)
+                        (ice-9 popen)
+                        (ice-9 rdelim))
+
+           (let* ((out (assoc-ref %outputs "out"))
+                  (guile (assoc-ref %build-inputs "guile"))
+                  (effective (read-line
+                              (open-pipe* OPEN_READ
+                                          (string-append guile "/bin/guile")
+                                          "-c" "(display (effective-version))")))
+                  (module-dir (string-append out "/share/guile/site/"
+                                             effective))
+                  (go-dir     (string-append out "/lib/guile/"
+                                             effective "/site-ccache/"))
+                  (source     (string-append (assoc-ref %build-inputs "source")
+                                             "/src"))
+                  (scm-file "simple-zmq.scm")
+                  (guild (string-append (assoc-ref %build-inputs "guile")
+                                        "/bin/guild"))
+                  (zmq  (assoc-ref %build-inputs "zeromq"))
+                  (deps (list zmq))
+                  (path (string-join
+                         (map (cut string-append <>
+                                   "/lib/")
+                              deps)
+                         ":")))
+             ;; Make installation directories.
+             (mkdir-p module-dir)
+             (mkdir-p go-dir)
+
+             ;; Compile .scm files and install.
+             (chdir source)
+             (setenv "GUILE_AUTO_COMPILE" "0")
+             (for-each (lambda (file)
+                         (let* ((dest-file (string-append module-dir "/"
+                                                          file))
+                                (go-file (match (string-split file #\.)
+                                           ((base _)
+                                            (string-append go-dir "/"
+                                                           base ".go")))))
+                           ;; Install source module.
+                           (copy-file file dest-file)
+                           (substitute* dest-file
+                             (("\\(dynamic-link \"libzmq\"\\)")
+                              (format #f "(dynamic-link \"~a/lib/libzmq.so\")"
+                                      (assoc-ref %build-inputs "zeromq"))))
+
+                           ;; Install and compile module.
+                           (unless (zero? (system* guild "compile"
+                                                   "-L" source
+                                                   "-o" go-file
+                                                   dest-file))
+                             (error (format #f "Failed to compile ~s to ~s!"
+                                            file go-file)))))
+                       (list scm-file))
+             #t))))
+      (propagated-inputs
+       `(("guile" ,guile-2.2)
+         ("zeromq" ,zeromq)))
+      (home-page "https://github.com/jerry40/guile-simple-zmq")
+      (synopsis "Guile wrapper over ZeroMQ library")
+      (description
+       "This package provides a Guile programming interface to the ZeroMQ
+messaging library.")
+      (license license:gpl3+))))
+
 ;;; guile.scm ends here
diff --git a/gnu/packages/haskell-check.scm b/gnu/packages/haskell-check.scm
index 6b1d769313..7453f9fbf1 100644
--- a/gnu/packages/haskell-check.scm
+++ b/gnu/packages/haskell-check.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2017 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2017 rsiddharth <s@ricketyspace.net>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Tonton <tonton@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -451,6 +452,19 @@ hold in a large number of randomly generated cases.  Specifications are
 expressed in Haskell, using combinators defined in the QuickCheck library.")
     (license license:bsd-3)))
 
+(define-public ghc-quickcheck-2.9
+  (package
+    (inherit ghc-quickcheck)
+    (name "ghc-quickcheck")
+    (version "2.9.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://hackage.haskell.org/package/QuickCheck-2.9.2/QuickCheck-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "119np67qvx8hyp9vkg4gr2wv3lj3j6ay2vl4hxspkg43ymb1cp0m"))))))
+
 (define-public ghc-quickcheck-latest
   (package (inherit ghc-quickcheck)
     (version "2.11.3")
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index f2c546d08b..c302ae8308 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -13,6 +13,7 @@
 ;;; Copyright © 2017, 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017 rsiddharth <s@ricketyspace.net>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Tonton <tonton@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -9468,4 +9469,58 @@ system dependencies.")
 address string against RFC 5322.")
     (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-0.5.2.0/array-"
+                     version ".tar.gz"))
+     (file-name (string-append name "-" version ".tar.gz"))
+     (sha256
+      (base32
+       "12v83s2imxb3p2crnlzrpjh0nk6lpysw9bdk9yahs6f37csa5jaj"))))
+   (build-system haskell-build-system)
+   (synopsis "Haskell @code{Data.Array} module")
+   (description "In addition to providing the @code{Data.Array} module as
+specified in the Haskell 2010 Language Report, this package 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.")
+   (home-page "https://hackage.haskell.org/package/array")
+   (license license:bsd-3)))
+
+(define-public ghc-containers
+  (package
+   (name "ghc-containers")
+   (version "0.5.11.0")
+   (source
+    (origin
+     (method url-fetch)
+     (uri
+      (string-append "https://hackage.haskell.org/package/containers-0.5.11.0/containers-"
+                     version ".tar.gz"))
+     (file-name (string-append name "-" version ".tar.gz"))
+     (sha256
+      (base32
+       "0j29w09kvcn1c0yi4clmrdbgs2gqmpxs2m7q80ib2ix1smm25kaq"))))
+   (build-system haskell-build-system)
+   (inputs `(("ghc-array" ,ghc-array)
+             ("ghc-deepseq" ,ghc-deepseq-generics)
+             ("ghc-hunit" ,ghc-hunit)
+             ("ghc-chasingbottoms" ,ghc-chasingbottoms)
+             ("ghc-test-framework" ,ghc-test-framework)
+             ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+             ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+             ("ghc-quickcheck" ,ghc-quickcheck)
+             ("ghc-ghc-prim" ,ghc-primitive)))
+   (synopsis "Haskell containers: Assorted concrete container types")
+   (description "This Haskell module provides efficient general-purpose
+implementations of various immutable container types including sets, maps,
+sequences, trees, and graphs.")
+   (home-page "https://hackage.haskell.org/package/containers")
+   (license license:bsd-3)))
+
 ;;; haskell.scm ends here
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index a44bc086d6..8f80b75af4 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,12 +39,16 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages graphviz)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages photo)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
@@ -191,3 +196,203 @@ triangulation.  VTK has an extensive information visualization framework, has
 a suite of 3D interaction widgets, supports parallel processing, and
 integrates with various databases on GUI toolkits such as Qt and Tk.")
     (license license:bsd-3)))
+
+(define-public opencv
+  (package
+    (name "opencv")
+    (version "3.4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/opencv/opencv/archive/"
+                                  version ".zip"))
+              (file-name (string-append name "-" version ".zip"))
+              (sha256
+               (base32
+                "1g8pvnlkzzp50amd89149hqsbvsc2hq3vk1d6a9fksdcx8ra9g94"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Remove external libraries. We have all available in Guix:
+                  (delete-file-recursively "3rdparty")
+
+                  ;; Milky icon set is non-free:
+                  (delete-file-recursively "modules/highgui/src/files_Qt/Milky")
+
+                  ;; Some jars found:
+                  (for-each delete-file
+                            '("modules/java/test/pure_test/lib/junit-4.11.jar"
+                              "samples/java/sbt/sbt/sbt-launch.jar"))))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "-DWITH_IPP=OFF"
+             "-DWITH_ITT=OFF"
+
+             ;; CPU-Features:
+             ;; See cmake/OpenCVCompilerOptimizations.cmake
+             ;; (CPU_ALL_OPTIMIZATIONS) for a list of all optimizations
+             ;; BASELINE is the minimum optimization all CPUs must support
+             ;;
+             ;; DISPATCH is the list of optional dispatches
+             "-DCPU_BASELINE=SSE2, NEON"
+
+             "-DCPU_DISPATCH=SSE3,SSSE3,SSE4_1,SSE4_2,AVX,AVX2"
+             "-DCPU_DISPATCH_REQUIRE=SSE3,SSSE3,SSE4_1,SSE4_2,AVX,AVX2"
+
+             "-DBUILD_PERF_TESTS=OFF"
+             "-D BUILD_TESTS=ON"
+
+             (string-append "-DOPENCV_EXTRA_MODULES_PATH="
+                            "/tmp/guix-build-opencv-" ,version ".drv-0"
+                            "/opencv-contrib/opencv_contrib-" ,version
+                            "/modules")
+
+             ;;Define test data:
+             (string-append "-DOPENCV_TEST_DATA_PATH="
+                            "/tmp/guix-build-opencv-" ,version ".drv-0"
+                            ;;"/opencv-3.4.0"
+                            "/opencv-extra/opencv_extra-" ,version
+                            "/testdata")
+
+             ;; Is ON by default and would try to rebuild 3rd-party protobuf,
+             ;; which we had removed, which would lead to an error:
+             "-DBUILD_PROTOBUF=OFF"
+
+             ;; Rebuild protobuf files, because we have a slightly different
+             ;; version than the included one. If we would not update, we
+             ;; would get a compile error later:
+             "-DPROTOBUF_UPDATE_FILES=ON"
+
+             ;; xfeatures2d disabled, because it downloads extra binaries from
+             ;; https://github.com/opencv/opencv_3rdparty
+             ;; defined in xfeatures2d/cmake/download_{vgg|bootdesc}.cmake
+             ;; Cmp this bug entry:
+             ;; https://github.com/opencv/opencv_contrib/issues/1131
+             "-DBUILD_opencv_xfeatures2d=OFF")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-broken-tests
+           (lambda _
+             ;; These tests fails with:
+             ;; vtkXOpenGLRenderWindow (0x723990): Could not find a decent config
+             ;; I think we have no OpenGL support with the Xvfb.
+             (substitute* '("modules/viz/test/test_tutorial3.cpp"
+                            "modules/viz/test/test_main.cpp"
+                            "modules/viz/test/tests_simple.cpp"
+                            "modules/viz/test/test_viz3d.cpp")
+               (("(TEST\\(Viz, )([a-z].*\\).*)" all pre post)
+                (string-append pre "DISABLED_" post)))
+
+             ;; This one fails with "unknown file: Failure"
+             ;; But I couldn't figure out which file was missing:
+             (substitute* (list (string-append
+                                 "../opencv-contrib/opencv_contrib-"
+                                 ,version
+                                 "/modules/face/test/test_face_align.cpp"))
+               (("(TEST\\(CV_Face_FacemarkKazemi, )(can_detect_landmarks\\).*)"
+                 all pre post)
+                (string-append pre "DISABLED_" post)))
+
+             ;; Failure reason: Bad accuracy
+             ;; Incorrect count of accurate poses [2nd case]: 90.000000 / 94.000000
+             (substitute* (list (string-append
+                                 "../opencv-contrib/opencv_contrib-"
+                                 ,version
+                                 "/modules/rgbd/test/test_odometry.cpp"))
+               (("(TEST\\(RGBD_Odometry_Rgbd, )(algorithmic\\).*)" all pre post)
+                (string-append pre "DISABLED_" post)))
+             #t))
+
+         ;; Idea copied from ldc.scm (ldc-bootstrap):
+         (add-after 'unpack 'unpack-submodule-sources
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "../opencv-extra")
+             (mkdir "../opencv-contrib")
+             (let ((unpack (lambda (source target)
+                             (with-directory-excursion target
+                               (apply invoke "unzip"
+                                      (list (assoc-ref inputs source)))))))
+               (unpack "opencv-extra" "../opencv-extra")
+               (unpack "opencv-contrib" "../opencv-contrib"))))
+
+         (add-after 'set-paths 'add-ilmbase-include-path
+           (lambda* (#:key inputs #:allow-other-keys)
+           ;; OpenEXR propagates ilmbase, but its include files do not appear
+           ;; in the CPATH, so we need to add "$ilmbase/include/OpenEXR/" to
+           ;; the CPATH to satisfy the dependency on "ImathVec.h".
+           (setenv "CPATH"
+                   (string-append (assoc-ref inputs "ilmbase")
+                                  "/include/OpenEXR"
+                                  ":" (or (getenv "CPATH") "")))
+           #t))
+       (add-before 'check 'start-xserver
+         (lambda* (#:key inputs #:allow-other-keys)
+           (let ((xorg-server (assoc-ref inputs "xorg-server"))
+                 (disp ":1"))
+             (setenv "HOME" (getcwd))
+             (setenv "DISPLAY" disp)
+             ;; There must be a running X server and make check doesn't start one.
+             ;; Therefore we must do it.
+             (zero? (system (format #f "~a/bin/Xvfb ~a &" xorg-server disp)))))))))
+    (native-inputs
+     `(("unzip" ,unzip)
+       ("pkg-config" ,pkg-config)
+       ("xorg-server" ,xorg-server) ; For running the tests
+       ("opencv-extra"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "https://codeload.github.com/"
+                               "opencv/opencv_extra/zip/" version))
+           (file-name (string-append "opencv-extra-" version ".zip"))
+           (sha256
+            (base32 "0wfh3pvfxqydf7hsccp50npcsg37sf6fqi6cd3zkc4qil9zhpbps"))))
+       ("opencv-contrib"
+        ,(origin
+           (method url-fetch)
+           (uri (string-append "https://codeload.github.com/"
+                               "opencv/opencv_contrib/zip/" version))
+           (file-name (string-append "opencv-contrib-" version ".zip"))
+           (sha256
+           (base32 "18zm0qmjcdvg90c33gzv0ws0xdaid1xpqzz2xa9l2x12qkr6zj3p"))))))
+    (inputs `(("libjpeg" ,libjpeg)
+              ("libpng" ,libpng)
+              ("jasper" ,jasper)
+              ;; ffmpeg 4.0 causes core dumps in tests.
+              ("ffmpeg" ,ffmpeg-3.4)
+              ("libtiff" ,libtiff)
+              ("hdf5" ,hdf5)
+              ("libgphoto2" ,libgphoto2)
+              ("libwebp" ,libwebp)
+              ("zlib" ,zlib)
+              ("gtkglext" ,gtkglext)
+              ("openexr" ,openexr)
+              ("ilmbase" ,ilmbase)
+              ("gtk+" ,gtk+-2)
+              ("python-numpy" ,python-numpy)
+              ("protobuf" ,protobuf)
+              ("vtk" ,vtk)
+              ("python" ,python)))
+    ;; These three CVEs are not a problem of OpenCV, see:
+    ;; https://github.com/opencv/opencv/issues/10998
+    (properties '((lint-hidden-cve . ("CVE-2018-7712"
+                                      "CVE-2018-7713"
+                                      "CVE-2018-7714"))))
+    (synopsis "Computer vision library")
+    (description "OpenCV is a library aimed at
+real-time computer vision, including several hundred computer
+vision algorithms.  It can be used to do things like:
+
+@itemize
+@item image and video input and output
+@item image and video processing
+@item displaying
+@item feature recognition
+@item segmentation
+@item facial recognition
+@item stereo vision
+@item structure from motion
+@item augmented reality
+@item machine learning
+@end itemize\n")
+    (home-page "https://opencv.org/")
+    (license license:bsd-3)))
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index 1f0a9e46e1..68f1148908 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -2,7 +2,7 @@
 ;;; 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>
+;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -31,14 +31,15 @@
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system meson)
   #:use-module (guix build-system python)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages algebra)
-  #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
@@ -59,7 +60,7 @@
 (define-public feh
   (package
     (name "feh")
-    (version "2.26")
+    (version "2.26.2")
     (home-page "https://feh.finalrewind.org/")
     (source (origin
               (method url-fetch)
@@ -67,7 +68,7 @@
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "11kckzwk3b734l0n4j41k40liq1v2lbbj1gzir5qc386g7fvzmmi"))))
+                "07hn5d5m1jsqp6qb2d3lah1js8382hrf225y0q8776m2k3vzylk3"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases (delete 'configure))
@@ -231,43 +232,36 @@ it and customize it for your needs.")
 (define-public viewnior
   (package
     (name "viewnior")
-    (version "1.6")
+    (version "1.7")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append "https://github.com/xsisqox/Viewnior/archive/"
+        (uri (string-append "https://github.com/hellosiyan/Viewnior/archive/"
                             name "-" version ".tar.gz"))
         (sha256
          (base32
-          "18309qjgwak3kn228z3p3nx7yxasqgzx69v3rgc23hf161nky0c9"))))
-    (build-system gnu-build-system)
+          "1rpkk721s3xas125q3g0fl11b5zsrmzv9pzl6ddzcy4sj2rd7ymr"))))
+    (build-system meson-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
-           (lambda _
-             (zero? (system* "sh" "autogen.sh"))))
-         (add-before 'install 'skip-gtk-update-icon-cache
+         (add-after 'unpack 'patch-source
            (lambda _
              ;; Don't create 'icon-theme.cache'
-             (substitute* (find-files "data" "^Makefile$")
-               (("gtk-update-icon-cache") (which "true")))
-             #t)))))
+             (substitute* "meson.build"
+               (("meson.add_install_script*") ""))
+             #t)))
+       #:tests? #f)) ; no tests
     (native-inputs
-     `(("automake" ,automake)
-       ("autoconf" ,autoconf)
-       ("intltool" ,intltool)
+     `(("gettext" ,gettext-minimal)
        ("glib" ,glib "bin") ; glib-genmarshal
-       ("gnome-common" ,gnome-common)
-       ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)
-       ("shared-mime-info" ,shared-mime-info)
-       ("which" ,which)))
+       ("shared-mime-info" ,shared-mime-info)))
     (inputs
      `(("exiv2" ,exiv2)
        ("gdk-pixbuf" ,gdk-pixbuf)
        ("gtk+-2" ,gtk+-2)))
-    (home-page "http://siyanpanayotov.com/project/viewnior/")
+    (home-page "http://siyanpanayotov.com/project/viewnior")
     (synopsis "Simple, fast and elegant image viewer")
     (description "Viewnior is an image viewer program.  Created to be simple,
 fast and elegant.  Its minimalistic interface provides more screenspace for
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index c63259dd01..e80da6d848 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -47,14 +47,14 @@
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.9-39")
+    (version "6.9.9-43")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0cgrvfg8722cdv2y0hw2f7xhzdfmfiqc1348l71ki38dg4b0q4sn"))))
+               "09vfxb1ljfma7mvkcqp17bs7adlrfh6kc6k9hifkhgxf51vr7hk6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
@@ -169,7 +169,7 @@ script.")
 (define-public graphicsmagick
   (package
     (name "graphicsmagick")
-    (version "1.3.28")
+    (version "1.3.29")
     (source (origin
               (method url-fetch)
               (uri
@@ -181,7 +181,7 @@ script.")
                                  "/GraphicsMagick-" version ".tar.xz")))
               (sha256
                (base32
-                "0jlrrimrajcmwp7llivyj14qnzb1mpqd8vw95dl6zbx5m2lnhall"))))
+                "1m0cc6kpky06lpcipj7rfwc2jbw2igr0jk97zqmw3j1ld5mg93g1"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/inkscape.scm b/gnu/packages/inkscape.scm
index ffd5f60b38..de9940df1c 100644
--- a/gnu/packages/inkscape.scm
+++ b/gnu/packages/inkscape.scm
@@ -80,8 +80,13 @@
     ;; FIXME: tests require gmock
     (arguments
      `(#:tests? #f
-       #:make-flags
-       '("gtk_update_icon_cache=true")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-icon-cache-generator
+           (lambda _
+             (substitute* "share/icons/application/CMakeLists.txt"
+              (("gtk-update-icon-cache") "true"))
+             #t)))))
     (home-page "https://inkscape.org/")
     (synopsis "Vector graphics editor")
     (description "Inkscape is a vector graphics editor.  What sets Inkscape
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index eeeec406a8..3a9e88ad08 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -370,6 +371,44 @@ to ES5 without causing run-time errors in older engines.  In many cases, this
 means that these shams cause many ES5 methods to silently fail.")
     (license license:expat)))
 
+(define-public js-filesaver
+  (package
+    (name "js-filesaver")
+    (version "1.3.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/eligrey/FileSaver.js/"
+                                  "archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version))
+              (sha256
+               (base32
+                "1rkhfqs5plaj628kzj7qgm5qahy4v7ihygifidqr6g6265mil97h"))))
+    (build-system minify-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-uglification
+           ;; Remove "export" keyword which prevents the file from being
+           ;; uglified by uglify-js.  Moreover, that keyword is not present in
+           ;; the minified version of the library some projects are using,
+           ;; e.g.,
+           ;; <https://github.com/jmoenig/Snap--Build-Your-Own-Blocks/blob/master/FileSaver.min.js>
+           (lambda _
+             (substitute* "src/FileSaver.js"
+               (("export ") ""))
+             #t)))))
+    (home-page
+     "https://eligrey.com/blog/saving-generated-files-on-the-client-side/")
+    (synopsis "HTML5 saveAs() FileSaver implementation")
+    (description "@file{FileSaver.js} implements the @code{saveAs()}
+FileSaver interface in browsers that do not natively support it.
+
+@file{FileSaver.js} is the solution to saving files on the
+client-side, and is perfect for webapps that need to generate files,
+or for saving sensitive information that shouldn't be sent to an
+external server.")
+    (license license:expat)))
+
 (define-public mujs
   (package
     (name "mujs")
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index 099c01fe3d..7dc2cf37fe 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -142,7 +142,7 @@ common build settings used in software produced by the KDE community.")
 (define-public phonon
   (package
     (name "phonon")
-    (version "4.10.0")
+    (version "4.10.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -151,7 +151,7 @@ common build settings used in software produced by the KDE community.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0gyhlnwamzfw31kw4qh0v6rj0m47k9wfygd6h07klg9ggp60xhg2"))))
+                "1dwdw0hm6685psrp7v9frhkhqvsxrbdnm3gw794j5z7g3brqvag5"))))
     (build-system cmake-build-system)
     (native-inputs
      ;; TODO: Think about adding pulseaudio. Is it required for sound?
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 65119e85df..39e2ef1d7e 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -838,7 +838,7 @@ and to return information on pronunciations, meanings and synonyms.")
 (define-public libreoffice
   (package
     (name "libreoffice")
-    (version "5.4.6.2")
+    (version "5.4.7.1")
     (source
      (origin
       (method url-fetch)
@@ -848,7 +848,7 @@ and to return information on pronunciations, meanings and synonyms.")
           (version-prefix version 3) "/libreoffice-" version ".tar.xz"))
       (sha256
        (base32
-        "0icd8h221gp2dsbn6d35flwhqhcfpx66cjc5dg8yifhhvrfam74i"))))
+        "0g60wzg90n1kanmkiwy01jz4s4xgdkpczvm7vdrmjpp7ifrgijbv"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 427f9bd88d..85d83d85d8 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -392,8 +392,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.16.7")
-(define %linux-libre-hash "145hv7paw5zd6bnkk0agxyg2a37066xhrxszbq3d03mjvi8ap117")
+(define %linux-libre-version "4.16.9")
+(define %linux-libre-hash "13v5pb30v16cn81w2gnwaa4zhxas7q3zz10igpa2rqd5fdiy3rlz")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -401,8 +401,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.39")
-(define %linux-libre-4.14-hash "0r6fydsgspnskh5n1hfrkyrlrmql635zqr44ajafmqimldc0bplz")
+(define %linux-libre-4.14-version "4.14.41")
+(define %linux-libre-4.14-hash "0qcfw4spnjlzri8bgch1j0yxsw75gjx1m9qyn3h1lk4a33gczih6")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -411,14 +411,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.98"
-                    "14mqg2hvxg4zwajwly18akyaca821sp4iz5w3xmikwndn2j8y1lw"
+  (make-linux-libre "4.9.100"
+                    "1zphlisrjzbgk7nvclbwm23kmrx7vw13w02r1va3g5lzh0rlwx71"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.131"
-                    "1phah297rxjwy22wfaqlzpbk71ddp3drma5dx3i8xv6g8vijd08x"
+  (make-linux-libre "4.4.132"
+                    "012nmbvvi8sg0iav5aibk8qx189iwqjadnr4h5jv65gzi7i79li9"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -716,7 +716,7 @@ slabtop, and skill.")
 (define-public usbutils
   (package
     (name "usbutils")
-    (version "009")
+    (version "010")
     (source
      (origin
       (method url-fetch)
@@ -724,7 +724,7 @@ slabtop, and skill.")
                           "usbutils-" version ".tar.xz"))
       (sha256
        (base32
-        "0q3iavmak2bs9xw486w4xfbjl0hbzii93ssgpr95mxmm9kjz1gwb"))))
+        "06aag4jfgsfjxk563xsp9ik9nadihmasrr37a1gb0vwqni5kdiv1"))))
     (build-system gnu-build-system)
     (inputs
      `(("libusb" ,libusb)
@@ -3268,10 +3268,10 @@ repair and easy administration.")
 from the btrfs-progs package.  It is meant to be used in initrds.")
     (license (package-license btrfs-progs))))
 
-(define-public f2fs-tools
+(define-public f2fs-tools-1.7
   (package
     (name "f2fs-tools")
-    (version "1.8.0")
+    (version "1.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -3279,15 +3279,27 @@ from the btrfs-progs package.  It is meant to be used in initrds.")
                     "/f2fs-tools.git/snapshot/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1bir9ladb58ijlcvrjrq1fb1xv5ys50zdjaq0yzliib0apsyrnyl"))))
+                "1m6bn1ibq0p53m0n97il91xqgjgn2pzlz74lb5bfzassx7159m1k"))))
+
     (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-headers
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (out-include (string-append out "/include")))
+               (install-file "include/f2fs_fs.h" out-include)
+               (install-file "mkfs/f2fs_format_utils.h" out-include)
+               #t))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
        ("libtool" ,libtool)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("libuuid" ,util-linux)))
+     `(("libuuid" ,util-linux)
+       ("libselinux" ,libselinux)))
     (home-page "https://f2fs.wiki.kernel.org/")
     (synopsis "Userland tools for f2fs")
     (description
@@ -3298,6 +3310,22 @@ disks and SD cards.  This package provides the userland utilities.")
     ;; GPL2/LGPL2.1, everything else is GPL2 only. See 'COPYING'.
     (license (list license:gpl2 license:lgpl2.1))))
 
+(define-public f2fs-tools
+  (package
+    (inherit f2fs-tools-1.7)
+    (name "f2fs-tools")
+    (version "1.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://git.kernel.org/cgit/linux/kernel/git/jaegeuk"
+                    "/f2fs-tools.git/snapshot/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1bir9ladb58ijlcvrjrq1fb1xv5ys50zdjaq0yzliib0apsyrnyl"))))
+    (inputs
+     `(("libuuid" ,util-linux)))))
+
 (define-public freefall
   (package
     (name "freefall")
@@ -3493,7 +3521,7 @@ The following service daemons are also provided:
 (define-public rng-tools
   (package
     (name "rng-tools")
-    (version "6.1")
+    (version "6.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/nhorman/rng-tools/"
@@ -3501,7 +3529,7 @@ The following service daemons are also provided:
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "00ywsknjpc9jd9kfmz2syk9l0xkiiwyx5qhl5zvhhc69v6682i31"))))
+                "0xy4qmfhvkr5z4jr9j55dn5gnajr2jccdp6n0xsxkipjcgag342j"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Avoid using OpenSSL, curl, and libxml2, reducing the closure by 166 MiB.
@@ -4136,7 +4164,7 @@ re-use code and to avoid re-inventing the wheel.")
 (define-public libnftnl
   (package
     (name "libnftnl")
-    (version "1.0.9")
+    (version "1.1.0")
     (source
       (origin
         (method url-fetch)
@@ -4144,7 +4172,7 @@ re-use code and to avoid re-inventing the wheel.")
                             "libnftnl-" version ".tar.bz2"))
         (sha256
          (base32
-          "0d9nkdbdck8sg6msysqyv3m9kjr9sjif5amf26dfa0g3mqjdihgy"))))
+          "0v4gywcjvv2vg4zk632al1zv3ad0lx87nshynv110l8n3fhsq3pc"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm
index af576c44f7..9a0d8e957d 100644
--- a/gnu/packages/lxde.scm
+++ b/gnu/packages/lxde.scm
@@ -48,7 +48,7 @@
 (define-public libfm
   (package
     (name "libfm")
-    (version "1.3.0")
+    (version "1.3.0.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/pcmanfm/"
@@ -56,7 +56,7 @@
                                   "%29/LibFM/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "151jyy8ipmp2h829gd9s4s429qafv1zxl7j6zaj1k1gzm9s5rmnb"))))
+                "0wkwbi1nyvqza3r1dhrq846axiiq0fy0dqgngnagh76fjrwnzl0q"))))
     (build-system gnu-build-system)
     (inputs `(("glib" ,glib)
               ("gtk+" ,gtk+-2)))
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 2b21e839a6..aac042027b 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -481,7 +481,10 @@ large scale eigenvalue problems.")
     (inputs
      `(("mpi" ,openmpi)
        ,@(package-inputs arpack-ng)))
-    (arguments `(#:configure-flags '("--enable-mpi")))
+    (arguments
+     (substitute-keyword-arguments (package-arguments arpack-ng)
+       ((#:configure-flags _ '())
+        ''("--enable-mpi"))))
     (synopsis "Fortran subroutines for solving eigenvalue problems with MPI")))
 
 (define-public lapack
@@ -3466,6 +3469,7 @@ set.")
     (native-inputs
      `(("doc++" ,doc++)
        ("netpbm" ,netpbm)
+       ("perl" ,perl)                   ;needed to run 'ppmquant' during tests
        ("texlive" ,texlive)             ;full package required for fonts
        ("ghostscript" ,ghostscript)))
     (inputs
@@ -3900,14 +3904,14 @@ are noisy or are discontinuous at the solution.")
 (define-public r-desolve
   (package
     (name "r-desolve")
-    (version "1.20")
+    (version "1.21")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "deSolve" version))
         (sha256
          (base32
-          "18nx3maww979a8p8ly4hv63y65mnjx8vbj2fpipd6rhcbf1lbsan"))))
+          "0qqc4mknw1jblzcmph1dg3k1p6w42yal0k1xjh8pqk7yb3a75hs5"))))
     (properties `((upstream-name . "deSolve")))
     (build-system r-build-system)
     (native-inputs
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index af49ddc8c6..95744075cb 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -627,7 +627,15 @@ was initially a fork of xmpppy, but uses non-blocking sockets.")
                (with-directory-excursion icons
                  (symlink adwaita "Adwaita")
                  (copy-recursively hicolor "hicolor")))
-             #t)))))
+             #t))
+         (add-after 'install-icons 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (wrap-program (string-append (assoc-ref outputs "out")
+                                          "/bin/gajim")
+               ;; For GtkFileChooserDialog.
+               `("GSETTINGS_SCHEMA_DIR" =
+                 (,(string-append (assoc-ref inputs "gtk+")
+                                  "/share/glib-2.0/schemas")))))))))
     (native-inputs
      `(("intltool" ,intltool)
        ("xorg-server" ,xorg-server)))
@@ -728,14 +736,14 @@ a graphical desktop environment like GNOME.")
 (define-public prosody
   (package
     (name "prosody")
-    (version "0.10.0")
+    (version "0.10.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://prosody.im/downloads/source/"
                                   "prosody-" version ".tar.gz"))
               (sha256
                (base32
-                "1644jy5dk46vahmh6nna36s79k8k668sbi3qamjb4q3c4m3y853l"))))
+                "1kmmpkkgymg1r8r0k8j83pgmiskg1phl8hmpzjrnvlvsfnrnjplr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index 1889035492..6f2ff5d784 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -119,9 +119,10 @@ interfacing MPD in the C, C++ & Objective C languages.")
               ("flac" ,flac)
               ("glib" ,glib)
               ("icu4c" ,icu4c)
+              ;; The LAME decoder comes from FFmpeg, but is added here so that
+              ;; configure picks up the LAME encoder.
               ("lame" ,lame)
               ("libid3tag" ,libid3tag)
-              ("libmad" ,libmad)
               ("libmpdclient" ,libmpdclient)
               ("libsamplerate" ,libsamplerate)
               ("libsndfile" ,libsndfile)
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index 21ef9d5592..07c2a1ff77 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -30,7 +30,7 @@
 (define-public nano
   (package
     (name "nano")
-    (version "2.9.6")
+    (version "2.9.7")
     (source
      (origin
       (method url-fetch)
@@ -38,7 +38,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1inl8ljkc711969ncwy7irf0464psasikg1g42l0g4sfpdz50wx3"))))
+        "1ga4sdk3ikx1ilggc6c77vyfpbmq3nrhg6svgglpf5sv60bv0jmn"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 0d187ab930..9a24c372f6 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -1333,7 +1333,7 @@ networks.")
 (define-public speedtest-cli
   (package
     (name "speedtest-cli")
-    (version "1.0.7")
+    (version "2.0.0")
     (source
      (origin
        (method url-fetch)
@@ -1342,7 +1342,7 @@ networks.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1fbq4kpx8sj50g74hwpixisfjjgxq6zyn40d3m28dxhn7mxbnlrq"))))
+         "16kcpba7nmszz2h0fq7qvv6src20syck2wlknaacg69kk88aybbk"))))
     (build-system python-build-system)
     (home-page "https://github.com/sivel/speedtest-cli")
     (synopsis "Internet bandwidth tester")
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 0a7caf2e7a..ea79de9021 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -544,13 +544,13 @@ transactions from C or Python.")
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "93")
+    (version "94")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "0g90nf7817jk03hzk36l3hymky4xqs50iynfld3r0in7hffly5nj"))))
+                "07pcc4r9kz8zfr4pfkzk3ipgyv7m5h9vwicrzdgjpa87nbbdgjx6"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 923122903e..011cf594d1 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -18,6 +18,7 @@
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;; Copyright © 2018 Thomas Sigurdsen <tonton@riseup.net>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,6 +63,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages suckless)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages qt)
@@ -94,7 +96,7 @@ human.")
 (define-public keepassxc
   (package
     (name "keepassxc")
-    (version "2.3.1")
+    (version "2.3.3")
     (source
      (origin
        (method url-fetch)
@@ -103,7 +105,7 @@ human.")
                            version "-src.tar.xz"))
        (sha256
         (base32
-         "1gdrbpzwbs56anc3k5vklvcackcn214pc8gm5xh5zcymsi8q4zff"))))
+         "1m8alsp39vk21zgcvy5zswk0dc1xmajbwnccg7n0lndsi7pqbzyg"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags '("-DWITH_XC_NETWORKING=YES"
@@ -659,3 +661,30 @@ Upstream development seems to have stopped.  It is therefore recommended
 to use a different password manager.")
     (home-page "https://als.regnet.cz/fpm2/")
     (license license:gpl2+)))
+
+(define-public pass-rotate
+  (package
+    (name "pass-rotate")
+    (version "0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/SirCmpwn/pass-rotate/archive/"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1svm5nj8bczv2dg8lh2zqqhbsrljqsw9680r03qwgl9vlci90210"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-docopt" ,python-docopt)
+       ("python-html5lib" ,python-html5lib)
+       ("python-requests" ,python-requests)))
+    (home-page "https://github.com/SirCmpwn/pass-rotate")
+    (synopsis "Rotate password on online services")
+    (description "pass-rotate is a command line utility and python library for
+rotating passwords on various web services.  It makes it easier to rotate your
+passwords, one at a time or in bulk, when security events or routine upkeep of
+your online accounts makes it necessary.")
+    (license license:expat)))
diff --git a/gnu/packages/patches/adb-add-libraries.patch b/gnu/packages/patches/adb-add-libraries.patch
new file mode 100644
index 0000000000..b014832f62
--- /dev/null
+++ b/gnu/packages/patches/adb-add-libraries.patch
@@ -0,0 +1,30 @@
+--- a/adb/Android.mk	2018-04-25 23:23:29.527198350 +0200
++++ b/adb/Android.mk	2018-04-25 23:24:25.558632573 +0200
+@@ -226,7 +226,7 @@
+ LOCAL_SRC_FILES := test_track_devices.cpp
+ LOCAL_SANITIZE := $(adb_host_sanitize)
+ LOCAL_SHARED_LIBRARIES := libbase
+-LOCAL_STATIC_LIBRARIES := libadb libcrypto_static libcutils
++LOCAL_STATIC_LIBRARIES := libadb libbase libcrypto_static libcutils
+ LOCAL_LDLIBS += -lrt -ldl -lpthread
+ include $(BUILD_HOST_EXECUTABLE)
+ endif
+@@ -278,6 +278,7 @@
+ LOCAL_SANITIZE := $(adb_host_sanitize)
+ LOCAL_STATIC_LIBRARIES := \
+     libadb \
++    libcutils \
+     libbase \
+     libcrypto_static \
+     libdiagnose_usb \
+--- a/adb/sysdeps_test.cpp	2018-05-09 23:58:46.583163684 +0200
++++ b/adb/sysdeps_test.cpp	2018-05-09 23:56:41.356544648 +0200
+@@ -17,6 +17,8 @@
+ #include <gtest/gtest.h>
+ #include <unistd.h>
+ #include <atomic>
++#include <climits>
++#include <mutex>
+ 
+ #include "adb_io.h"
+ #include "sysdeps.h"
diff --git a/gnu/packages/patches/groovy-add-exceptionutilsgenerator.patch b/gnu/packages/patches/groovy-add-exceptionutilsgenerator.patch
new file mode 100644
index 0000000000..df74bdbaba
--- /dev/null
+++ b/gnu/packages/patches/groovy-add-exceptionutilsgenerator.patch
@@ -0,0 +1,98 @@
+From 3dbdc68093e90f0ef9b77b70490d8e0b1dcfbf8f Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Sun, 17 Sep 2017 21:08:45 +0200
+Subject: [PATCH] Add ExceptionUtilsGenerator.java.
+
+A gradle task (in gradle/utils.gradle) is normally used to generate an
+ExceptionUtils class. Since gradle depends on groovy, we cannot use it, so
+we copy the code from the gradle task to a new file. Running this file then
+generates the required class.
+---
+ .../codehaus/groovy/ExceptionUtilsGenerator.java   | 75 ++++++++++++++++++++++
+ 1 file changed, 75 insertions(+)
+ create mode 100644 config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java
+
+diff --git a/config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java b/config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java
+new file mode 100644
+index 0000000..41f006d
+--- /dev/null
++++ b/config/ant/src/org/codehaus/groovy/ExceptionUtilsGenerator.java
+@@ -0,0 +1,75 @@
++package org.codehaus.groovy;
++
++import org.objectweb.asm.*;
++
++import java.io.BufferedOutputStream;
++import java.io.File;
++import java.io.FileOutputStream;
++import java.io.IOException;
++import java.util.logging.Logger;
++
++public class ExceptionUtilsGenerator implements Opcodes {
++    private final static Logger LOGGER = Logger.getLogger(ExceptionUtilsGenerator.class.getName());
++
++    public static void main(String... args) {
++        if (args==null || args.length==0) {
++            throw new IllegalArgumentException("You must specify at least one file");
++        }
++
++        ClassWriter cw = new ClassWriter(0);
++        MethodVisitor mv;
++
++        cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, "org/codehaus/groovy/runtime/ExceptionUtils", null, "java/lang/Object", null);
++
++        cw.visitSource("ExceptionUtils.java", null);
++
++        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
++        mv.visitCode();
++        Label l0 = new Label();
++        mv.visitLabel(l0);
++        mv.visitLineNumber(18, l0);
++        mv.visitVarInsn(ALOAD, 0);
++        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
++        mv.visitInsn(RETURN);
++        Label l1 = new Label();
++        mv.visitLabel(l1);
++        mv.visitLocalVariable("this", "Lorg/codehaus/groovy/runtime/ExceptionUtils;", null, l0, l1, 0);
++        mv.visitMaxs(1, 1);
++        mv.visitEnd();
++
++        mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "sneakyThrow", "(Ljava/lang/Throwable;)V", null, null);
++        mv.visitCode();
++        Label l2 = new Label();
++        mv.visitLabel(l2);
++        mv.visitLineNumber(20, l2);
++        mv.visitVarInsn(ALOAD, 0);
++        mv.visitInsn(ATHROW);
++        Label l3 = new Label();
++        mv.visitLabel(l3);
++        mv.visitLocalVariable("e", "Ljava/lang/Throwable;", null, l2, l3, 0);
++        mv.visitMaxs(1, 1);
++        mv.visitEnd();
++
++        cw.visitEnd();
++
++        LOGGER.info("Generating ExceptionUtils");
++        byte[] bytes = cw.toByteArray();
++        for (String classFilePath : args) {
++            File classFile = new File(classFilePath);
++            if (classFile.getParentFile().exists() || classFile.getParentFile().mkdirs()) {
++                try {
++                    if (classFile.exists()) {
++                        classFile.delete();
++                    }
++                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(classFile));
++                    bos.write(bytes);
++                    bos.close();
++                } catch (IOException e) {
++                    LOGGER.warning("Unable to write file "+classFile);
++                }
++            } else {
++                LOGGER.warning("Unable to create directory "+classFile.getParentFile());
++            }
++        }
++	}
++}
+-- 
+2.14.1
+
diff --git a/gnu/packages/patches/icecat-bug-1452075.patch b/gnu/packages/patches/icecat-CVE-2018-5157-and-CVE-2018-5158.patch
index b776640133..b776640133 100644
--- a/gnu/packages/patches/icecat-bug-1452075.patch
+++ b/gnu/packages/patches/icecat-CVE-2018-5157-and-CVE-2018-5158.patch
diff --git a/gnu/packages/patches/libutils-add-includes.patch b/gnu/packages/patches/libutils-add-includes.patch
new file mode 100644
index 0000000000..354c59b735
--- /dev/null
+++ b/gnu/packages/patches/libutils-add-includes.patch
@@ -0,0 +1,11 @@
+--- a/libutils/CallStack.cpp	2018-04-25 20:13:06.348665241 +0200
++++ b/libutils/CallStack.cpp	2018-04-25 20:13:18.360510763 +0200
+@@ -17,7 +17,7 @@
+ #define LOG_TAG "CallStack"
+ 
+ #include <memory>
+-
++#include <cstdlib>
+ #include <utils/CallStack.h>
+ #include <utils/Printer.h>
+ #include <utils/Errors.h>
diff --git a/gnu/packages/patches/libutils-remove-damaging-includes.patch b/gnu/packages/patches/libutils-remove-damaging-includes.patch
new file mode 100644
index 0000000000..7867dd3b80
--- /dev/null
+++ b/gnu/packages/patches/libutils-remove-damaging-includes.patch
@@ -0,0 +1,21 @@
+--- a/include/utils/StrongPointer.h	2018-04-25 18:42:34.321003602 +0200
++++ b/include/utils/StrongPointer.h	2018-04-25 18:42:42.180912201 +0200
+@@ -17,8 +17,6 @@
+ #ifndef ANDROID_STRONG_POINTER_H
+ #define ANDROID_STRONG_POINTER_H
+ 
+-#include <cutils/atomic.h>
+-
+ #include <stdint.h>
+ #include <sys/types.h>
+ #include <stdlib.h>
+--- a/libutils/Trace.cpp	2018-04-25 20:41:48.775049786 +0200
++++ b/libutils/Trace.cpp	2018-04-25 20:42:13.674744182 +0200
+@@ -21,5 +21,7 @@
+ 
+ static void traceInit()
+ {
++#if defined(__ANDROID__)
+     ::android::add_sysprop_change_callback(atrace_update_tags, 0);
++#endif
+ }
diff --git a/gnu/packages/patches/libziparchive-add-includes.patch b/gnu/packages/patches/libziparchive-add-includes.patch
new file mode 100644
index 0000000000..41137105a0
--- /dev/null
+++ b/gnu/packages/patches/libziparchive-add-includes.patch
@@ -0,0 +1,10 @@
+--- a/libziparchive/zip_writer.cc	2018-04-25 22:33:05.472674164 +0200
++++ b/libziparchive/zip_writer.cc	2018-04-25 22:33:21.296519518 +0200
+@@ -22,6 +22,7 @@
+ 
+ #include <sys/param.h>
+ 
++#include <cstring>
+ #include <cassert>
+ #include <cstdio>
+ #include <memory>
diff --git a/gnu/packages/patches/mupdf-CVE-2017-17858.patch b/gnu/packages/patches/mupdf-CVE-2017-17858.patch
deleted file mode 100644
index 66df127509..0000000000
--- a/gnu/packages/patches/mupdf-CVE-2017-17858.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Fix CVE-2017-17858:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17858
-https://bugs.ghostscript.com/show_bug.cgi?id=698819
-https://github.com/mzet-/Security-Advisories/blob/master/mzet-adv-2017-01.md
-
-Patch copied from upstream source repository:
-
-https://git.ghostscript.com/?p=mupdf.git;a=commit;h=55c3f68d638ac1263a386e0aaa004bb6e8bde731
-
-From 55c3f68d638ac1263a386e0aaa004bb6e8bde731 Mon Sep 17 00:00:00 2001
-From: Sebastian Rasmussen <sebras@gmail.com>
-Date: Mon, 11 Dec 2017 14:09:15 +0100
-Subject: [PATCH] Bugs 698804/698810/698811: Keep PDF object numbers below
- limit.
-
-This ensures that:
- * xref tables with objects pointers do not grow out of bounds.
- * other readers, e.g. Adobe Acrobat can parse PDFs written by mupdf.
----
- include/mupdf/pdf/object.h |  3 +++
- source/pdf/pdf-repair.c    |  5 +----
- source/pdf/pdf-xref.c      | 21 ++++++++++++---------
- 3 files changed, 16 insertions(+), 13 deletions(-)
-
-diff --git a/include/mupdf/pdf/object.h b/include/mupdf/pdf/object.h
-index 21ed8595..4177112b 100644
---- a/include/mupdf/pdf/object.h
-+++ b/include/mupdf/pdf/object.h
-@@ -3,6 +3,9 @@
- 
- typedef struct pdf_document_s pdf_document;
- 
-+/* Defined in PDF 1.7 according to Acrobat limit. */
-+#define PDF_MAX_OBJECT_NUMBER 8388607
-+
- /*
-  * Dynamic objects.
-  * The same type of objects as found in PDF and PostScript.
-diff --git a/source/pdf/pdf-repair.c b/source/pdf/pdf-repair.c
-index ca149bd3..0c29758e 100644
---- a/source/pdf/pdf-repair.c
-+++ b/source/pdf/pdf-repair.c
-@@ -6,9 +6,6 @@
- 
- /* Scan file for objects and reconstruct xref table */
- 
--/* Define in PDF 1.7 to be 8388607, but mupdf is more lenient. */
--#define MAX_OBJECT_NUMBER (10 << 20)
--
- struct entry
- {
- 	int num;
-@@ -436,7 +433,7 @@ pdf_repair_xref(fz_context *ctx, pdf_document *doc)
- 					break;
- 				}
- 
--				if (num <= 0 || num > MAX_OBJECT_NUMBER)
-+				if (num <= 0 || num > PDF_MAX_OBJECT_NUMBER)
- 				{
- 					fz_warn(ctx, "ignoring object with invalid object number (%d %d R)", num, gen);
- 					goto have_next_token;
-diff --git a/source/pdf/pdf-xref.c b/source/pdf/pdf-xref.c
-index 00586dbd..6284e70b 100644
---- a/source/pdf/pdf-xref.c
-+++ b/source/pdf/pdf-xref.c
-@@ -868,11 +868,12 @@ pdf_read_old_xref(fz_context *ctx, pdf_document *doc, pdf_lexbuf *buf)
- 			fz_seek(ctx, file, -(2 + (int)strlen(s)), SEEK_CUR);
- 		}
- 
--		if (ofs < 0)
--			fz_throw(ctx, FZ_ERROR_GENERIC, "out of range object num in xref: %d", (int)ofs);
--		if (ofs > INT64_MAX - len)
--			fz_throw(ctx, FZ_ERROR_GENERIC, "xref section object numbers too big");
--
-+		if (ofs < 0 || ofs > PDF_MAX_OBJECT_NUMBER
-+				|| len < 0 || len > PDF_MAX_OBJECT_NUMBER
-+				|| ofs + len - 1 > PDF_MAX_OBJECT_NUMBER)
-+		{
-+			fz_throw(ctx, FZ_ERROR_GENERIC, "xref subsection object numbers are out of range");
-+		}
- 		/* broken pdfs where size in trailer undershoots entries in xref sections */
- 		if (ofs + len > xref_len)
- 		{
-@@ -933,10 +934,8 @@ pdf_read_new_xref_section(fz_context *ctx, pdf_document *doc, fz_stream *stm, in
- 	pdf_xref_entry *table;
- 	int i, n;
- 
--	if (i0 < 0 || i1 < 0 || i0 > INT_MAX - i1)
--		fz_throw(ctx, FZ_ERROR_GENERIC, "negative xref stream entry index");
--	//if (i0 + i1 > pdf_xref_len(ctx, doc))
--	//	fz_throw(ctx, FZ_ERROR_GENERIC, "xref stream has too many entries");
-+	if (i0 < 0 || i0 > PDF_MAX_OBJECT_NUMBER || i1 < 0 || i1 > PDF_MAX_OBJECT_NUMBER || i0 + i1 - 1 > PDF_MAX_OBJECT_NUMBER)
-+		fz_throw(ctx, FZ_ERROR_GENERIC, "xref subsection object numbers are out of range");
- 
- 	table = pdf_xref_find_subsection(ctx, doc, i0, i1);
- 	for (i = i0; i < i0 + i1; i++)
-@@ -2086,6 +2085,10 @@ pdf_create_object(fz_context *ctx, pdf_document *doc)
- 	/* TODO: reuse free object slots by properly linking free object chains in the ofs field */
- 	pdf_xref_entry *entry;
- 	int num = pdf_xref_len(ctx, doc);
-+
-+	if (num > PDF_MAX_OBJECT_NUMBER)
-+		fz_throw(ctx, FZ_ERROR_GENERIC, "too many objects stored in pdf");
-+
- 	entry = pdf_get_incremental_xref_entry(ctx, doc, num);
- 	entry->type = 'f';
- 	entry->ofs = -1;
--- 
-2.16.1
-
diff --git a/gnu/packages/patches/mupdf-CVE-2018-1000051.patch b/gnu/packages/patches/mupdf-CVE-2018-1000051.patch
deleted file mode 100644
index bb78c46f80..0000000000
--- a/gnu/packages/patches/mupdf-CVE-2018-1000051.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-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
deleted file mode 100644
index b2c8f849f3..0000000000
--- a/gnu/packages/patches/mupdf-CVE-2018-6544.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-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/mupdf-build-with-latest-openjpeg.patch b/gnu/packages/patches/mupdf-build-with-latest-openjpeg.patch
deleted file mode 100644
index d5c9c60242..0000000000
--- a/gnu/packages/patches/mupdf-build-with-latest-openjpeg.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-Make it possible to build MuPDF with OpenJPEG 2.3, which is the latest
-release series and contains many important bug fixes.
-
-Patch adapted from Debian:
-
-https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=745246
-
-And related to this upstream commit:
-
-http://git.ghostscript.com/?p=mupdf.git;a=commit;h=f88bfe2e62dbadb96d4f52d7aa025f0a516078da
-
-diff --git a/source/fitz/load-jpx.c b/source/fitz/load-jpx.c
-index 65699ba..ea84778 100644
---- a/source/fitz/load-jpx.c
-+++ b/source/fitz/load-jpx.c
-@@ -445,11 +445,6 @@ fz_load_jpx_info(fz_context *ctx, const unsigned char *data, size_t size, int *w
- 
- #else /* HAVE_LURATECH */
- 
--#define OPJ_STATIC
--#define OPJ_HAVE_INTTYPES_H
--#if !defined(_MSC_VER) || _MSC_VER >= 1600
--#define OPJ_HAVE_STDINT_H
--#endif
- #define USE_JPIP
- 
- #include <openjpeg.h>
diff --git a/gnu/packages/patches/myrepos-CVE-2018-7032.patch b/gnu/packages/patches/myrepos-CVE-2018-7032.patch
new file mode 100644
index 0000000000..ce9493e5f9
--- /dev/null
+++ b/gnu/packages/patches/myrepos-CVE-2018-7032.patch
@@ -0,0 +1,69 @@
+http://source.myrepos.branchable.com/?p=source.git;a=patch;h=40a3df21c73f1bb1b6915cc6fa503f50814664c8
+This can be removed with the next release. It was modified slightly to apply
+
+From 40a3df21c73f1bb1b6915cc6fa503f50814664c8 Mon Sep 17 00:00:00 2001
+From: Paul Wise <pabs3@bonedaddy.net>
+Date: Sun, 11 Feb 2018 21:57:49 +0800
+Subject: [PATCH] Mitigate vulnerabilities caused by some git remotes being
+ able to execute code
+
+Set GIT_PROTOCOL_FROM_USER=0 with git versions newer than 2.12.
+
+Prevent remote websites from causing cloning of local repositories.
+
+Manually whitelist known-safe protocols (http, https, git, ssh)
+when using git versions older than 2.12.
+
+Fixes: CVE-2018-7032
+Fixes: https://bugs.debian.org/840014
+Suggestions-by: Jakub Wilk <jwilk@jwilk.net>
+Reported-by: Jakub Wilk <jwilk@jwilk.net>
+---
+ webcheckout | 22 +++++++++++++++++++++-
+ 1 file changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/webcheckout b/webcheckout
+index e98da5c..de497ba 100755
+--- a/webcheckout
++++ b/webcheckout
+@@ -71,6 +71,16 @@ use Getopt::Long;
+ use warnings;
+ use strict;
+ 
++# Mitigate some git remote types being dangerous
++my $git_unsafe = 1;
++my $git_version = `git --version`;
++$git_version =~ s{^git version }{};
++my ($major, $minor) = split(/\./, $git_version);
++if (int($major) >= 2 && int($minor) >= 12) {
++	$ENV{GIT_PROTOCOL_FROM_USER} = 0;
++	$git_unsafe = 0;
++}
++
+ # What to download.
+ my $url;
+ 
+@@ -89,7 +99,17 @@ my $destdir;
+ 
+ # how to perform checkouts
+ my %handlers=(
+-	git => sub { doit("git", "clone", shift, $destdir) },
+-	svn => sub { doit("svn", "checkout", shift, $destdir) },
+-	bzr => sub { doit("bzr", "branch", shift, $destdir) },
++	git => sub {
++		my $git_url = shift;
++		# Reject unsafe URLs with older versions of git
++		# that do not already check the URL safety.
++		if ($git_unsafe && $git_url !~ m{^(?:(?:https?|git|ssh):[^:]|(?:[-_.A-Za-z0-9]+@)?[-_.A-Za-z0-9]+:(?!:|//))}) {
++			print STDERR "potentially unsafe git URL, may fail, touch local files or execute arbitrary code\n";
++			return 1;
++		}
++		# Reject cloning local directories too, webcheckout is for remote repos
++		doit(qw(git -c protocol.file.allow=user clone --), $git_url, $destdir)
++	},
++	svn => sub { doit(qw(svn checkout --), shift, $destdir) },
++	bzr => sub { doit(qw(bzr branch --), shift, $destdir) },
+ );
+-- 
+2.11.0
+
diff --git a/gnu/packages/patches/python-statsmodels-fix-tests.patch b/gnu/packages/patches/python-statsmodels-fix-tests.patch
deleted file mode 100644
index f910b4b5a5..0000000000
--- a/gnu/packages/patches/python-statsmodels-fix-tests.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-This drops a test that fails with numpy 1.12.
-
-Upstream bug URL: https://github.com/statsmodels/statsmodels/issues/3541
-
---- a/statsmodels/discrete/tests/test_discrete.py     2017-03-06 15:29:19.947343331 +0000
-+++ b/statsmodels/discrete/tests/test_discrete.py     2017-03-06 15:29:37.759328845 +0000
-@@ -1329,21 +1329,6 @@
-         res = mod.fit(start_params=-np.ones(4), method='newton', disp=0)

-     assert_(not res.mle_retvals['converged'])

- 

--def test_issue_339():

--    # make sure MNLogit summary works for J != K.

--    data = sm.datasets.anes96.load()

--    exog = data.exog

--    # leave out last exog column

--    exog = exog[:,:-1]

--    exog = sm.add_constant(exog, prepend=True)

--    res1 = sm.MNLogit(data.endog, exog).fit(method="newton", disp=0)

--    # strip the header from the test

--    smry = "\n".join(res1.summary().as_text().split('\n')[9:])

--    cur_dir = os.path.dirname(os.path.abspath(__file__))

--    test_case_file = os.path.join(cur_dir, 'results', 'mn_logit_summary.txt')

--    test_case = open(test_case_file, 'r').read()

--    np.testing.assert_equal(smry, test_case[:-1])

--

- def test_issue_341():

-     data = sm.datasets.anes96.load()

-     exog = data.exog

diff --git a/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch b/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch
deleted file mode 100644
index 18328ed018..0000000000
--- a/gnu/packages/patches/wesnoth-fix-std-bad-cast.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From 18e5ea50a7136cb3686c5a7c51c111ccce73dc54 Mon Sep 17 00:00:00 2001
-From: Iris Morelle <shadowm@wesnoth.org>
-Date: Sun, 6 May 2018 16:10:42 -0300
-Subject: [PATCH] i18n: Blind fix attempt for std::bad_cast being thrown on
- Windows
-
-Several reports on Steam and our forums point at std::bad_cast being
-thrown when accessing Preferences and the Multiplayer menu amongst
-others. It's possible that the locale configuration on those systems is
-not quite right, and compare() and icompare() are able to throw
-std::bad_cast when this happens as they both use std::use_facet().
-
-Note that much like the macOS/iOS version of icompare(), this stopgap
-patch doesn't attempt to provide any form of case-insensitive fallback
-and just uses a case-sensitive comparison instead.
----
- src/gettext_boost.cpp | 29 +++++++++++++++++++++++++++--
- 1 file changed, 27 insertions(+), 2 deletions(-)
-
-diff --git a/src/gettext_boost.cpp b/src/gettext_boost.cpp
-index 3cc7690d5ef..fb04ffeea90 100644
---- a/src/gettext_boost.cpp
-+++ b/src/gettext_boost.cpp
-@@ -423,7 +423,19 @@ void set_language(const std::string& language, const std::vector<std::string>* /
- int compare(const std::string& s1, const std::string& s2)
- {
- 	std::lock_guard<std::mutex> lock(get_mutex());
--	return std::use_facet<std::collate<char>>(get_manager().get_locale()).compare(s1.c_str(), s1.c_str() + s1.size(), s2.c_str(), s2.c_str() + s2.size());
-+
-+	try {
-+		return std::use_facet<std::collate<char>>(get_manager().get_locale()).compare(s1.c_str(), s1.c_str() + s1.size(), s2.c_str(), s2.c_str() + s2.size());
-+	} catch(const std::bad_cast&) {
-+		static bool bad_cast_once = false;
-+
-+		if(!bad_cast_once) {
-+			ERR_G << "locale set-up for compare() is broken, falling back to std::string::compare()\n";
-+			bad_cast_once = true;
-+		}
-+
-+		return s1.compare(s2);
-+	}
- }
- 
- int icompare(const std::string& s1, const std::string& s2)
-@@ -433,8 +445,21 @@ int icompare(const std::string& s1, const std::string& s2)
- 	return compare(s1, s2);
- #else
- 	std::lock_guard<std::mutex> lock(get_mutex());
--	return std::use_facet<bl::collator<char>>(get_manager().get_locale()).compare(
-+
-+	try {
-+		return std::use_facet<bl::collator<char>>(get_manager().get_locale()).compare(
- 			bl::collator_base::secondary, s1, s2);
-+	} catch(const std::bad_cast&) {
-+		static bool bad_cast_once = false;
-+
-+		if(!bad_cast_once) {
-+			ERR_G << "locale set-up for icompare() is broken, falling back to std::string::compare()\n";
-+			bad_cast_once = true;
-+		}
-+
-+		// FIXME: not even lazily case-insensitive
-+		return s1.compare(s2);
-+	}
- #endif
- }
- 
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index aaa22cce15..84f17ad553 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
@@ -597,19 +597,15 @@ extracting content or merging files.")
 (define-public mupdf
   (package
     (name "mupdf")
-    (version "1.12.0")
+    (version "1.13.0")
     (source
       (origin
         (method url-fetch)
         (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-2018-6544.patch"
-                                 "mupdf-CVE-2018-1000051.patch"))
         (sha256
          (base32
-          "0b9j0gqbc3jhmx87r6idcsh8lnb30840c3hyx6dk2gdjqqh3hysp"))
+          "0129k92bav692l6lyw10ryldx7h2f9khjpgnp3f3n4fdsph9hrkl"))
         (modules '((guix build utils)))
         (snippet '(begin (delete-file-recursively "thirdparty") #t))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 348ac1df62..6c3c116ef6 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -69,14 +69,14 @@
 (define-public libraw
   (package
     (name "libraw")
-    (version "0.18.10")
+    (version "0.18.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.libraw.org/data/LibRaw-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0klrzg1cn8ksxqbhx52dldi5bbmad190npnhhgkyr2jzpgrbpj88"))))
+                "07a7k83hx7icahh6jaxfbd7pw5jjm5i11xcqjj31b28d1aj29xvw"))))
     (build-system gnu-build-system)
     (home-page "https://www.libraw.org")
     (synopsis "Raw image decoder")
diff --git a/gnu/packages/printers.scm b/gnu/packages/printers.scm
new file mode 100644
index 0000000000..f8890cb7f1
--- /dev/null
+++ b/gnu/packages/printers.scm
@@ -0,0 +1,69 @@
+;;; 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 (gnu packages printers)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages qt))
+
+;; This is a module for packages related to printer-like devices, but not
+;; related to CUPS.
+
+(define-public robocut
+  (package
+    (name "robocut")
+    (version "1.0.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/Timmmm/robocut/archive/v"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0nmr1plq1f6sarxwqwy4vzbxkljlx8y4xalm7r05vx4lrdai5pad"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (replace 'configure
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (substitute* "Robocut.pro"
+                          (("/usr/")
+                           (string-append out "/")))
+
+                        (invoke "qmake"
+                                (string-append "PREFIX=" out))
+                        #t))))))
+    (inputs
+     `(("libusb" ,libusb)
+       ("qt" ,qtbase)
+       ("qtsvg" ,qtsvg)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("qmake" ,qtbase)))
+    (synopsis "Graphical program to drive plotting cutters")
+    (description
+     "Robocut is a simple graphical program that allows you to cut graphics
+with Graphtec and Sihouette plotting cutters using an SVG file as its input.")
+    (home-page "http://robocut.org")
+    (license license:gpl3+)))
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 48e84521c5..b7cd51e868 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -16,6 +16,7 @@
 ;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
+;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,11 +45,32 @@
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (srfi srfi-1))
 
+(define-public python-base58
+  (package
+    (name "python-base58")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "base58" version))
+       (sha256
+        (base32
+         "0lgnk7ycdxwhk2bkygl30nsks56bvrdj79ix76iv965pz808pzn5"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pyhamcrest" ,python-pyhamcrest)))
+    (home-page "https://github.com/keis/base58")
+    (synopsis "Base58 and Base58Check implementation")
+    (description "Base58 and Base58Check implementation compatible
+with what is used by the Bitcoin network.")
+    (license license:expat)))
+
 (define-public python-bcrypt
   (package
     (name "python-bcrypt")
@@ -821,3 +843,105 @@ through the Engine interface.")
 
 (define-public python2-m2crypto
   (package-with-python2 python-m2crypto))
+
+(define-public python-pylibscrypt
+  (package
+    (name "python-pylibscrypt")
+    (version "1.7.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pylibscrypt" version))
+       (sha256
+        (base32
+         "1b3rgzl6dbzs08vhv41b6y4n5189wv7lr27acxn104hs45745abs"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ;FIXME: unable to find libraries
+    (inputs
+     `(("openssl" ,openssl)))
+    (home-page "https://github.com/jvarho/pylibscrypt")
+    (synopsis "Scrypt for Python")
+    (description "There are a lot of different scrypt modules for Python, but
+none of them have everything that I'd like, so here's one more.  It uses
+hashlib.scrypt on Python 3.6 and OpenSSL 1.1.")
+    (license license:isc)))
+
+(define-public python-libnacl
+  (package
+    (name "python-libnacl")
+    (version "1.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "libnacl" version))
+       (sha256
+        (base32
+         "0nv7n8nfswkhl614x5mllrkvaslraa0053q11iylb337cy43vb4v"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'locate-libsodium
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "libnacl/__init__.py"
+               (("(return ctypes.cdll.LoadLibrary\\(')libsodium.so('\\))"
+                 _ pre post)
+                (let ((libsodium (string-append (assoc-ref inputs "libsodium")
+                                                "/lib/libsodium.so")))
+                  (string-append pre libsodium post)))))))))
+    (native-inputs
+     `(("python-pyhamcrest" ,python-pyhamcrest)))
+    (inputs
+     `(("libsodium" ,libsodium)))
+    (home-page "https://libnacl.readthedocs.org/")
+    (synopsis "Python bindings for libsodium based on ctypes")
+    (description "@code{libnacl} is used to gain direct access to the
+functions exposed by @code{NaCl} library via @code{libsodium}.  It has
+been constructed to maintain extensive documentation on how to use
+@code{NaCl} as well as being completely portable.")
+    (license license:asl2.0)))
+
+(define-public python-duniterpy
+  (package
+    (name "python-duniterpy")
+    (version "0.43.2")
+    (source
+     (origin
+       (method git-fetch)
+       ;; Pypi's default URI is missing "requirements.txt" file.
+       (uri (git-reference
+             (url "https://github.com/duniter/duniter-python-api.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "1ch4f150k1p1l876pp08p5rxqhpv5xfbxdw6njcmr06hspv8v8x4"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Among 108 tests, a single one is failing: FAIL:
+         ;; test_from_pubkey.  Remove it.
+         (add-after 'unpack 'remove-failing-test
+           (lambda _
+             (delete-file "tests/documents/test_crc_pubkey.py")
+             #t)))))
+    (propagated-inputs
+     `(("python-aiohttp" ,python-aiohttp)
+       ("python-base58" ,python-base58)
+       ("python-jsonschema" ,python-jsonschema)
+       ("python-libnacl" ,python-libnacl)
+       ("python-pylibscrypt" ,python-pylibscrypt)
+       ("python-pypeg2" ,python-pypeg2)))
+    (home-page "https://github.com/duniter/duniter-python-api")
+    (synopsis "Python implementation of Duniter API")
+    (description "@code{duniterpy} is an implementation of
+@uref{https://github.com/duniter/duniter/, duniter} API. Its
+main features are:
+@itemize
+@item Supports Duniter's Basic Merkle API and protocol
+@item Asynchronous
+@item Duniter signing key
+@end itemize")
+    (license license:gpl3+)))
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 6e8d9ab954..8ebae2e4b7 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -24,6 +24,7 @@
 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
 ;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
+;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -60,6 +61,70 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (srfi srfi-1))
 
+(define-public python-aiohttp
+  (package
+    (name "python-aiohttp")
+    (version "3.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "aiohttp" version))
+       (sha256
+        (base32
+         "1b888lggmyf2d08rfayq9khszzc0pav1z70ssc0b4d9kkr4g1klz"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ;FIXME: 2 errors, 2084 passed
+    (native-inputs
+     `(("python-async-generator" ,python-async-generator)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-capturelog" ,python-pytest-capturelog)
+       ("python-pytest-mock" ,python-pytest-mock)))
+    (propagated-inputs
+     `(("python-aiodns" ,python-aiodns)
+       ("python-async-timeout" ,python-async-timeout)
+       ("python-attrs" ,python-attrs)
+       ("python-chardet" ,python-chardet)
+       ("python-idna-ssl" ,python-idna-ssl)
+       ("python-multidict" ,python-multidict)
+       ("python-yarl" ,python-yarl)))
+    (home-page "https://github.com/aio-libs/aiohttp/")
+    (synopsis "Async HTTP client/server framework (asyncio)")
+    (description "@code{aiohttp} is an asynchronous HTTP client/server
+framework.
+
+Its main features are:
+@itemize
+@item Supports both client and server side of HTTP protocol.
+@item Supports both client and server Web-Sockets out-of-the-box without the
+Callback Hell.
+@item Web-server has middlewares and pluggable routing.
+@end itemize")
+    (license license:asl2.0)))
+
+(define-public python-aiodns
+  (package
+    (name "python-aiodns")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "aiodns" version))
+       (sha256
+        (base32
+         "1snr5paql8dgvc676n8xq460wypjsb1xj53cf3px1s4wczf7lryq"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-pycares" ,python-pycares)))
+    (arguments
+     `(#:tests? #f))                    ;tests require internet access
+    (home-page "http://github.com/saghul/aiodns")
+    (synopsis "Simple DNS resolver for asyncio")
+    (description "@code{aiodns} provides a simple way for doing
+asynchronous DNS resolutions with a synchronous looking interface by
+using @url{https://github.com/saghul/pycares,pycares}.")
+    (license license:expat)))
+
 (define-public python-furl
   (package
     (name "python-furl")
@@ -2511,3 +2576,47 @@ protocols, it supports features like HTTP keep-alive, reget, throttling and
 more.")
     (license license:lgpl2.1+)))
 
+(define-public python-pycares
+  (package
+    (name "python-pycares")
+    (version "2.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pycares" version))
+       (sha256
+        (base32
+         "0h4fxw5drrhfyslzmfpljk0qnnpbhhb20hnnndzahhbwylyw1x1n"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))                    ;tests require internet access
+    (home-page "http://github.com/saghul/pycares")
+    (synopsis "Python interface for @code{c-ares}")
+    (description "@code{pycares} is a Python module which provides an
+interface to @code{c-ares}, a C library that performs DNS requests and
+name resolutions asynchronously.")
+    (license license:expat)))
+
+(define-public python-yarl
+  (package
+    (name "python-yarl")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "yarl" version))
+       (sha256
+        (base32
+         "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (propagated-inputs
+     `(("python-idna" ,python-idna)
+       ("python-multidict" ,python-multidict)))
+    (home-page "https://github.com/aio-libs/yarl/")
+    (synopsis "Yet another URL library")
+    (description "@code{yarl} module provides handy @code{URL} class
+for URL parsing and changing.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 080552573d..b7b7714fb1 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -51,6 +51,7 @@
 ;;; Copyright © 2018 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2018 Adam Massmann <massmannak@gmail.com>
 ;;; Copyright © 2016, 2018 Tomáš Čech <sleep_walker@gnu.org>
+;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -3369,14 +3370,14 @@ that client code uses to construct the grammar directly in Python code.")
 (define-public python-numexpr
   (package
     (name "python-numexpr")
-    (version "2.6.4")
+    (version "2.6.5")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "numexpr" version))
        (sha256
         (base32
-         "1kpnbb5d5n927113zccfibn16z7gidjipyac6kbbhzs0lnizkgph"))))
+         "1frnbcwmsi312154x274xl28xazr1k8vjby83fwyla2n10a81bgq"))))
     (build-system python-build-system)
     (arguments `(#:tests? #f))          ; no tests included
     (propagated-inputs
@@ -3872,6 +3873,27 @@ Python code against some of the style conventions in
 (define-public python2-pycodestyle
   (package-with-python2 python-pycodestyle))
 
+(define-public python-multidict
+  (package
+    (name "python-multidict")
+    (version "4.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "multidict" version))
+       (sha256
+        (base32
+         "1vf5bq8hn5a9rvhr5v4fwbmarfsp35hhr8gs74kqfijy34j2f194"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-pytest-runner" ,python-pytest-runner)))
+    (home-page "https://github.com/aio-libs/multidict/")
+    (synopsis "Multidict implementation")
+    (description "Multidict is dict-like collection of key-value pairs
+where key might be occurred more than once in the container.")
+    (license license:asl2.0)))
+
 (define-public python-orderedmultidict
   (package
     (name "python-orderedmultidict")
@@ -5030,14 +5052,14 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.")
 (define-public python-netifaces
   (package
     (name "python-netifaces")
-    (version "0.10.6")
+    (version "0.10.7")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "netifaces" version))
         (sha256
           (base32
-            "1q7bi5k2r955rlcpspx4salvkkpk28jky67fjbpz2dkdycisak8c"))))
+            "1gccklrcplbbqh81g1mdgpa5y8na7kkf29cq2ka3f5a2fp5hyndx"))))
     (build-system python-build-system)
     (home-page "https://github.com/al45tair/netifaces")
     (synopsis
@@ -6373,6 +6395,26 @@ specification.")
 (define-public python2-idna
   (package-with-python2 python-idna))
 
+(define-public python-idna-ssl
+  (package
+    (name "python-idna-ssl")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "idna-ssl" version))
+       (sha256
+        (base32
+         "0ydrc8hpg9mdr5hqq1lqfsfbn6sjq69slwpfrnlrm3k0phqg14qj"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))          ;circular dependency with python-aiohttp
+    (home-page "https://github.com/aio-libs/idna-ssl")
+    (synopsis "Patch @code{ssl.match_hostname} for Unicode(idna) domains support")
+    (description "Patch @code{ssl.match_hostname} for Unicode(idna)
+domains support.")
+    (license license:expat)))
+
 (define-public python-pretend
   (package
     (name "python-pretend")
@@ -10606,14 +10648,14 @@ convering text with ANSI color codes to HTML or LaTeX.")
 (define-public python-ddt
   (package
     (name "python-ddt")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ddt" version))
        (sha256
         (base32
-         "1wqkmz0yhanly8sif5vb02p2iik7mwxwph8ywph2kbb8ws8szdpx"))))
+         "1lw17420iimhghkgzgax85nn8d1an2d6k2cfvb7j5kwn2dqlr1vk"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-mock" ,python-mock)
@@ -10827,10 +10869,12 @@ and bit flag values.")
                 "1jafnn1kzd6qhxgprhx6y6ik1r5m2rilx25syzcmq03azp660y8w"))))
     (build-system python-build-system)
     (native-inputs
-     `(("python-pytest" ,python-pytest)
+     `(("python-coverage" ,python-coverage)
        ("python-hypothesis" ,python-hypothesis)
-       ("python-zope-interface" ,python-zope-interface)
-       ("python-six" ,python-six)))
+       ("python-pytest" ,python-pytest)
+       ("python-six" ,python-six)
+       ("python-sphinx" ,python-sphinx)
+       ("python-zope-interface" ,python-zope-interface)))
     (home-page "https://github.com/python-attrs/attrs/")
     (synopsis "Attributes without boilerplate")
     (description "@code{attrs} is a Python package with class decorators that
@@ -13336,3 +13380,43 @@ Parso is also able to list multiple syntax errors in your Python file.")
 
 (define-public python2-parso
   (package-with-python2 python-parso))
+
+(define-public python-async-generator
+  (package
+    (name "python-async-generator")
+    (version "1.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "async_generator" version))
+       (sha256
+        (base32
+         "0wc3hidz1q85cja93k5pzybn0fprfnqyrv4qlkdqdzklc5f4dmdp"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/python-trio/async_generator")
+    (synopsis "Async generators and context managers for Python 3.5+")
+    (description "@code{async_generator} back-ports Python 3.6's native async
+generators and Python 3.7's context managers into Python 3.5.")
+    ;; Dual licensed.
+    (license (list license:expat license:asl2.0))))
+
+(define-public python-async-timeout
+  (package
+    (name "python-async-timeout")
+    (version "2.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "async-timeout" version))
+       (sha256
+        (base32
+         "1l3kg062m02mph6rf9rdv8r5c5n356clxa6b6mrn0i77vk9g9kq0"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/aio-libs/async_timeout/")
+    (synopsis "Timeout context manager for asyncio programs")
+    (description "@code{async-timeout} provides a timeout timeout context
+manager compatible with @code{asyncio}.")
+    (license license:asl2.0)))
+
diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 0a9d5bb382..bf50cdd55e 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -237,8 +237,21 @@ in turn be used to build the final Rust.")
        ("llvm" ,llvm-3.9.1)
        ("openssl" ,openssl)
        ("libcurl" ,curl))) ; For "cargo"
+
     ;; rustc invokes gcc, so we need to set its search paths accordingly.
-    (native-search-paths (package-native-search-paths gcc))
+    ;; Note: duplicate its value here to cope with circular dependencies among
+    ;; modules (see <https://bugs.gnu.org/31392>).
+    (native-search-paths
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib" "lib64")))))
+
     (synopsis "Compiler for the Rust progamming language")
     (description "Rust is a systems programming language that provides memory
 safety and thread safety guarantees.")
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index a948547f72..24ee68abd2 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -52,7 +52,7 @@
 (define-public dash
   (package
     (name "dash")
-    (version "0.5.9.1")
+    (version "0.5.10.1")
     (source
      (origin
        (method url-fetch)
@@ -60,7 +60,7 @@
                            "dash-" version ".tar.gz"))
        (sha256
         (base32
-         "0ng695mq5ngg43h7ljhxvbjm46ym3nayj6ssn47d2gm9fbm5pkay"))
+         "1bl4brz5vy07lrss54glp4vfca3q8d73hyc87sqdk99f76z95b6s"))
        (modules '((guix build utils)))
        (snippet
         '(begin
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index aca26edad4..0762037ee3 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -639,14 +639,14 @@ curves, Cox models, and parametric accelerated failure time models.")
 (define-public r-bit
   (package
     (name "r-bit")
-    (version "1.1-12")
+    (version "1.1-13")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "bit" version))
        (sha256
         (base32
-         "0a6ig6nnjzq80r2ll4hc74za3xwzbzig6wlyb4dby0knzf3iqa6f"))))
+         "1yhpwvfkxpb773h8khjzyamqxl2jn7pjjmxjfawq626hhds8fsh6"))))
     (build-system r-build-system)
     (home-page "http://ff.r-forge.r-project.org")
     (synopsis "Class for vectors of 1-bit booleans")
@@ -965,13 +965,13 @@ transliteration, concatenation, date-time formatting and parsing, etc.")
 (define-public r-stringr
   (package
     (name "r-stringr")
-    (version "1.3.0")
+    (version "1.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stringr" version))
        (sha256
-        (base32 "07dvfbkhv8gk6l32j43jvxpmqlhqp0mdby406h5a3bsc6k94ic13"))))
+        (base32 "0hq3ybz7clnifi5wdm2s6p2i0kzljdkv26blg6yphng472h8x2vs"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-glue" ,r-glue)
@@ -1824,14 +1824,15 @@ building design matrices.")
        (uri (pypi-uri "statsmodels" version))
        (sha256
         (base32
-         "0j30v3932shnj9368c9jr3svkyrvfj90h2l7nxnqkbpv0svilhr6"))
-       (patches (search-patches "python-statsmodels-fix-tests.patch"))))
+         "0j30v3932shnj9368c9jr3svkyrvfj90h2l7nxnqkbpv0svilhr6"))))
     (build-system python-build-system)
     (arguments
-     `(#:phases
+     `(;; The test suite is very large and rather brittle.  Tests often fail
+       ;; because of minor changes in dependencies that upstream hasn't fixed
+       ;; in a new release.
+       #:tests? #f
+       #:phases
        (modify-phases %standard-phases
-         ;; tests must be run after installation
-         (delete 'check)
          (add-after 'unpack 'set-matplotlib-backend-to-agg
           (lambda _
             ;; Set the matplotlib backend to Agg to avoid problems using the
@@ -1843,14 +1844,17 @@ building design matrices.")
                (string-append "import matplotlib;matplotlib.use('Agg');"
                               line)))
             #t))
-         (add-after 'install 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             ;; Make installed package available for running the tests
-             (add-installed-pythonpath inputs outputs)
-             (with-directory-excursion "/tmp"
-               (zero? (system* "nosetests"
-                               "--stop"
-                               "-v" "statsmodels"))))))))
+         ;; FIXME: This is a bug in version 0.8 since the upgrade to scipy 1.0.
+         ;; See https://github.com/statsmodels/statsmodels/issues/3931
+         ;; This has been fixed in version 0.9.
+         (add-after 'unpack 'patch-for-scipy
+           (lambda _
+             (substitute* "statsmodels/discrete/discrete_model.py"
+               (("return stats.chisqprob" match)
+                (string-append
+                 "stats.chisqprob = lambda chisq, df: stats.chi2.sf(chisq, df);"
+                 match)))
+             #t)))))
     (propagated-inputs
      `(("python-numpy" ,python-numpy)
        ("python-scipy" ,python-scipy)
@@ -2423,13 +2427,13 @@ disk (or a connection).")
 (define-public r-plotrix
   (package
     (name "r-plotrix")
-    (version "3.7")
+    (version "3.7-1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "plotrix" version))
               (sha256
                (base32
-                "0rw81n9p3d2i03b4pgcfj5blryc94f29bm9a4j9bnp5h8qjj6pry"))))
+                "16p6d2dna6dah7rg2xknhyy65jkfn0zzivx1nnfxhd4f5q0v87w2"))))
     (build-system r-build-system)
     (home-page "https://cran.r-project.org/web/packages/plotrix")
     (synopsis "Various plotting functions")
@@ -5195,14 +5199,14 @@ classification and regression models.")
 (define-public r-rcppprogress
   (package
     (name "r-rcppprogress")
-    (version "0.4")
+    (version "0.4.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "RcppProgress" version))
        (sha256
         (base32
-         "09ayw6d69i0lplmaj5md25p5hn1nmiyp6a4sh60v93nrrs1cq7iv"))))
+         "0yk01hfv961zyp569682k9igvhnwqyg5j0n5fm63sxigj82l2xhi"))))
     (properties `((upstream-name . "RcppProgress")))
     (build-system r-build-system)
     (propagated-inputs
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index 5210e73ed4..6b625b5d3f 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Jovany Leandro G.C <bit4bit@riseup.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -30,6 +31,7 @@
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages file)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages linux)
@@ -42,9 +44,15 @@
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages flex)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu))
 
 (define-public commoncpp
@@ -482,3 +490,64 @@ Mumble consists of two applications for separate usage:
     (license (list license:bsd-3
                    ;; The bundled celt is bsd-2. Remove after 1.3.0.
                    license:bsd-2))))
+
+(define-public twinkle
+  (let ((commit "02e1d1538af3337134bd7381dcd95f8d7775b30f")
+        (revision "1"))
+  (package
+   (name "twinkle")
+   (version (git-version "1.10.1" revision commit))
+   (source (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/LubosD/twinkle")
+                   (commit commit)))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "0ds4rp4vr1wagn4m4m7ldqbsx5vgmgbfcqqgyhn1wf6s1dm0020z"))))
+   (build-system cmake-build-system)
+   (arguments
+    `(#:tests? #f ; no test target
+      #:configure-flags '("-DWITH_SPEEX=On")
+      #:phases
+      (modify-phases %standard-phases
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/twinkle")
+                 `("QT_PLUGIN_PATH" ":" prefix
+                   ,(map (lambda (label)
+                           (string-append (assoc-ref inputs label)
+                                          "/lib/qt5/plugins"))
+                         '("qtbase" "qtdeclarative")))
+                 `("QML2_IMPORT_PATH" ":" prefix
+                   ,(map (lambda (label)
+                           (string-append (assoc-ref inputs label)
+                                          "/lib/qt5/qml"))
+                         '("qtdeclarative" "qtquickcontrols"))))
+               #t))))))
+   (native-inputs
+    `(("bison" ,bison)
+      ("flex" ,flex)
+      ("readline" ,readline)
+      ("file" ,file)
+      ("ucommon" ,ucommon)
+      ("ccrtp" ,ccrtp)
+      ("libxml2" ,libxml2)
+      ("speex" ,speex)
+      ("speexdsp" ,speexdsp)
+      ("libsndfile" ,libsndfile)
+      ("alsa-lib" ,alsa-lib)
+      ("qttools" ,qttools)))
+   (inputs
+    `(("qtbase" ,qtbase)
+      ("qtdeclarative" ,qtdeclarative)
+      ("qtquickcontrols" ,qtquickcontrols)))
+   (home-page "http://twinkle.dolezel.info/")
+   (synopsis "Softphone for voice over IP and instant messaging")
+   (description "Twinkle is a softphone for your voice over IP and instant
+messaging communcations using the SIP protocol.  You can use it for direct IP
+phone to IP phone communication or in a network using a SIP proxy to route your
+calls and messages")
+   (license license:gpl2+))))
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index ea3955439a..7f1f6ef72b 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -449,14 +449,14 @@ required structures.")
 (define-public libressl
   (package
     (name "libressl")
-    (version "2.7.2")
+    (version "2.7.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://openbsd/LibreSSL/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1589f0kg7kj51j9hid542s4isb96s1azjaqsfprpy5s2qdwqfyli"))))
+                "1597kj9jy3jyw52ys19sd4blg2gkam5q0rqdxbnrnvnyw67hviqn"))))
     (build-system gnu-build-system)
     (arguments
      ;; Do as if 'getentropy' was missing since older Linux kernels lack it
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index ba60cb0826..54bcbd46bf 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -1570,7 +1570,8 @@ modification time.")
              (commit version)))
        (file-name (string-append name "-" version "-checkout"))
        (sha256
-        (base32 "10q7lpx152xnkk701fscn4dq99q9znnmv3bc2482khhjg7z8rps0"))))
+        (base32 "10q7lpx152xnkk701fscn4dq99q9znnmv3bc2482khhjg7z8rps0"))
+       (patches (search-patches "myrepos-CVE-2018-7032.patch"))))
     (build-system gnu-build-system)
     (inputs
      `(("perl" ,perl)))
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 983ce45ec4..fce51150c0 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -472,7 +472,7 @@ canvas operations.")
 (define-public libdca
   (package
     (name "libdca")
-    (version "0.0.5")
+    (version "0.0.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -480,7 +480,7 @@ canvas operations.")
                     version "/libdca-" version ".tar.bz2"))
               (sha256
                (base32
-                "0hh6a7l8vvccsd5i1fkv9av2gzv9fy8m0b8jpsn5p6hh4bh2586v"))))
+                "0h0zvcn97i9kyljdpifzi8in9xnw31fx3b3ggj96p8h0l2d8mycq"))))
     (build-system gnu-build-system)
     (home-page "https://www.videolan.org/developers/libdca.html")
     (synopsis "DTS Coherent Acoustics decoder")
@@ -1156,7 +1156,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2018.04.25")
+    (version "2018.05.09")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://yt-dl.org/downloads/"
@@ -1164,7 +1164,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "17zxgwfcy7c6gdyxdgh02f5zi52gvmy0zpccfj6zjkhw5iqj1vbw"))))
+                "0sl4bi2jls3417rd62awbqdq1b6wskkjbfwpnyw4a61qarfxid1d"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
diff --git a/gnu/packages/web-browsers.scm b/gnu/packages/web-browsers.scm
index a5ecd0b546..d6da22152c 100644
--- a/gnu/packages/web-browsers.scm
+++ b/gnu/packages/web-browsers.scm
@@ -79,14 +79,14 @@ older or slower computers and embedded systems.")
 (define-public links
   (package
     (name "links")
-    (version "2.15")
+    (version "2.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://links.twibright.com/download/"
                                   name "-" version ".tar.bz2"))
                 (sha256
                (base32
-                "1jp3xyvp87a188b4kg5ycqahrazj7928zncgsznzn54w8d5iqahy"))))
+                "0gsa2gpb1grhssl5jzpc5pa0zi21mxi8g25rh5bacl70slw31w42"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -130,7 +130,7 @@ features including, tables, builtin image display, bookmarks, SSL and more.")
 (define-public lynx
   (package
     (name "lynx")
-    (version "2.8.9dev.17")
+    (version "2.8.9dev.18")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -138,7 +138,7 @@ features including, tables, builtin image display, bookmarks, SSL and more.")
                     "/lynx" version ".tar.bz2"))
               (sha256
                (base32
-                "1lvfsnrw5mmwrmn1m76q9mx287xwm3h5lg8sv7bcqilc0ywi2f54"))))
+                "08v3n58hlrwncfvz6g76v061xwcbjgabiy5gv7ainf1li5akjwz5"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("perl" ,perl)))
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index ae7b08fddf..c96f8699d0 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -69,7 +69,7 @@
 (define-public wine
   (package
     (name "wine")
-    (version "3.0")
+    (version "3.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dl.winehq.org/wine/source/"
@@ -77,7 +77,7 @@
                                   "/wine-" version ".tar.xz"))
               (sha256
                (base32
-                "1v7vq9iinkscbq6wg85fb0d2137660fg2nk5iabxkl2wr850asil"))))
+                "1wr63n70pli83p3rmclr2j4lxzs4ll1cwlpdlaajfrf6v9yhvl5s"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("gettext" ,gettext-minimal)
@@ -223,7 +223,7 @@ integrate Windows applications into your desktop.")
 (define-public wine-staging-patchset-data
   (package
    (name "wine-staging-patchset-data")
-   (version "3.7")
+   (version "3.8")
    (source
     (origin
      (method url-fetch)
@@ -232,7 +232,7 @@ integrate Windows applications into your desktop.")
      (file-name (string-append name "-" version ".zip"))
      (sha256
       (base32
-       "112sy32sja4cc3rv8x6v4cdi3jfxdgzwfra8f78hzdf8a2wrjqz6"))))
+       "1z1a9zlhcglyzfxdilrsz558qpn69b4mzp086s364jqgzj930sja"))))
    (build-system trivial-build-system)
    (native-inputs
     `(("bash" ,bash)
@@ -279,7 +279,7 @@ integrate Windows applications into your desktop.")
               (file-name (string-append name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1drbzk3y0m14lkq3vzwwkvain5shykgcbmyzh6gcb5r4sxh3givn"))))
+                "0l8dqb8r72i6n7yh2bmx738i8ss0lmsj07hvgrqsnfwbjin0rc02"))))
     (inputs `(("autoconf" ,autoconf) ; for autoreconf
               ("gtk+" ,gtk+)
               ("libva" ,libva)
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index b503f71a62..6b589c823d 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -136,14 +136,14 @@ the leaves of a full binary tree.")
 (define-public i3status
   (package
     (name "i3status")
-    (version "2.11")
+    (version "2.12")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://i3wm.org/i3status/i3status-"
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0pwcy599fw8by1a1sf91crkqba7679qhvhbacpmhis8c1xrpxnwq"))))
+                "06krpbijv4yi33nypg6qcn4hilcrdyarsdpd9fmr2cq46qaqiikg"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 6801de39c1..18b78ccc7f 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -18,7 +18,7 @@
 ;;; Copyright © 2016 Petter <petter@mykolab.ch>
 ;;; Copyright © 2017 Mekeor Melire <mekeor.melire@gmail.com>
 ;;; 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 Marek Benc <dusxmt@gmx.com>
 ;;; Copyright © 2017 Mike Gerwitz <mtg@gnu.org>
 ;;; Copyright © 2018 Thomas Sigurdsen <tonton@riseup.net>
@@ -529,7 +529,7 @@ selection's dimensions to stdout.")
 (define-public maim
   (package
     (name "maim")
-    (version "5.5")
+    (version "5.5.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -538,7 +538,7 @@ selection's dimensions to stdout.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "02blbimjdckbcb04crhv0k2vxnp3rcgskyq66sk0v13l2h52849v"))))
+                "1dvw0axnr9hhjg6zdcq9lwvaq0x7vrzlz00p8n3hj25qzsi4z5as"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f))            ; no "check" target
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 8491faf881..99cd0a14a9 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -636,14 +636,14 @@ that conforms to the API of the Document Object Model.")
 (define-public perl-xml-compile-tester
   (package
     (name "perl-xml-compile-tester")
-    (version "0.90")
+    (version "0.91")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/M/MA/MARKOV/"
                                   "XML-Compile-Tester-" version ".tar.gz"))
               (sha256
                (base32
-                "1bcl8x8cyacqv9yjp97aq9qq85sy8wv78kd8c16yd9yw3by4cpp1"))))
+                "1drzwziwi96rfkh48qpw4l225mcbk8ppl2157nj92cslcpwwdk75"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-log-report" ,perl-log-report)
@@ -735,14 +735,14 @@ used.")
 (define-public perl-xml-compile-wsdl11
   (package
     (name "perl-xml-compile-wsdl11")
-    (version "3.06")
+    (version "3.07")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/M/MA/MARKOV/"
                                   "XML-Compile-WSDL11-" version ".tar.gz"))
               (sha256
                (base32
-                "0vbq05cpynm3jj81fw1k4nsb3wv4zngi6blvi1jhdarmh2rfg1x2"))))
+                "09ayl442hzvn97q4ghn5rz4r82dm9w3l69hixhb29h9xq9ysi7ba"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-log-report" ,perl-log-report)
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 422f625cf4..62cdc78604 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -5899,7 +5899,7 @@ basic eye-candy effects.")
 (define-public xpra
   (package
     (name "xpra")
-    (version "2.2.6")
+    (version "2.3")
     (source
      (origin
        (method url-fetch)
@@ -5907,7 +5907,7 @@ basic eye-candy effects.")
                            version ".tar.xz"))
        (sha256
         (base32
-         "1zyynghhzjbgnmzcibm17wpj9f7jy31d7dr373li8cwg2yl2swyz"))))
+         "0kq0ambpy8r7m3wxdp79cgxgnl9yfmr19lv88f617gnv0sp0aarp"))))
     (build-system python-build-system)
     (inputs `(("ffmpeg" ,ffmpeg)
               ("flac" ,flac)
@@ -6000,15 +6000,15 @@ X11 servers, Windows, or macOS.")
 (define-public uim
   (package
     (name "uim")
-    (version "1.8.6")
+    (version "1.8.8")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://github.com/uim/uim/releases/download/uim-"
+       (uri (string-append "https://github.com/uim/uim/releases/download/"
                            version "/uim-" version ".tar.bz2"))
        (sha256
         (base32
-         "0pr3rfqpxha8p6cxzdjsxbbmmr76riklzw36f68phd1zqw1sh7kv"))))
+         "1p7sl0js47ja4glmax93ci59h02ipqw3wxkh4f1qgaz5qjy9nn9l"))))
     (build-system gnu-build-system)
     (inputs
      `(("anthy" ,anthy)
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 517d5d3efe..0dada82738 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -29,6 +29,7 @@
   #:use-module (gnu services avahi)
   #:use-module (gnu services xorg)
   #:use-module (gnu services networking)
+  #:use-module (gnu services sound)
   #:use-module ((gnu system file-systems)
                 #:select (%elogind-file-systems))
   #:use-module (gnu system shadow)
@@ -934,6 +935,8 @@ with the administrator's password."
 
          x11-socket-directory-service
 
+         (service alsa-service-type)
+
          %base-services))
 
 ;;; desktop.scm ends here
diff --git a/gnu/services/games.scm b/gnu/services/games.scm
index b146696237..b9d78e078d 100644
--- a/gnu/services/games.scm
+++ b/gnu/services/games.scm
@@ -27,7 +27,7 @@
   #:use-module (guix records)
   #:use-module (ice-9 match)
   #:export (wesnothd-configuration
-            wesnoth-configuration?
+            wesnothd-configuration?
             wesnothd-service-type))
 
 ;;;
diff --git a/gnu/services/messaging.scm b/gnu/services/messaging.scm
index 273ba2cc14..4b7e724a78 100644
--- a/gnu/services/messaging.scm
+++ b/gnu/services/messaging.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Pierre-Antoine Rouby <contact@parouby.fr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -790,20 +791,24 @@ string, you could instantiate a prosody service like this:
              (default "127.0.0.1"))
   (port bitlbee-configuration-port
         (default 6667))
+  (plugins bitlbee-plugins
+           (default '()))
   (extra-settings bitlbee-configuration-extra-settings
                   (default "")))
 
 (define bitlbee-shepherd-service
   (match-lambda
-    (($ <bitlbee-configuration> bitlbee interface port extra-settings)
-     (let ((conf (plain-file "bitlbee.conf"
-                             (string-append "
+    (($ <bitlbee-configuration> bitlbee interface port
+                                plugins extra-settings)
+     (let ((conf (mixed-text-file "bitlbee.conf"
+                                  "
   [settings]
   User = bitlbee
   ConfigDir = /var/lib/bitlbee
   DaemonInterface = " interface "
   DaemonPort = " (number->string port) "
-" extra-settings))))
+  PluginDir = " (directory-union "bitlbee-plugins" plugins) "/lib/bitlbee
+" extra-settings)))
 
        (with-imported-modules (source-module-closure
                                '((gnu build shepherd)
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 920d215272..a2917e485f 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -49,7 +49,10 @@
             a20-olinuxino-micro-installation-os
             banana-pi-m2-ultra-installation-os
             beaglebone-black-installation-os
-            nintendo-nes-classic-edition-installation-os))
+            mx6cuboxi-installation-os
+            nintendo-nes-classic-edition-installation-os
+            novena-installation-os
+            wandboard-installation-os))
 
 ;;; Commentary:
 ;;;
@@ -429,11 +432,26 @@ The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET."
                             "/dev/mmcblk1" ; eMMC storage
                             "ttyS0"))
 
+(define mx6cuboxi-installation-os
+  (embedded-installation-os u-boot-mx6cuboxi-bootloader
+                            "/dev/mmcblk0" ; SD card storage
+                            "ttymxc0"))
+
+(define novena-installation-os
+  (embedded-installation-os u-boot-novena-bootloader
+                            "/dev/mmcblk1" ; SD card storage
+                            "ttymxc1"))
+
 (define nintendo-nes-classic-edition-installation-os
   (embedded-installation-os u-boot-nintendo-nes-classic-edition-bootloader
                             "/dev/mmcblk0" ; SD card (solder it yourself)
                             "ttyS0"))
 
+(define wandboard-installation-os
+  (embedded-installation-os u-boot-wandboard-bootloader
+                            "/dev/mmcblk0" ; SD card storage
+                            "ttymxc0"))
+
 ;; Return the default os here so 'guix system' can consume it directly.
 installation-os
 
diff --git a/guix/build-system/android-ndk.scm b/guix/build-system/android-ndk.scm
new file mode 100644
index 0000000000..dbfa626a19
--- /dev/null
+++ b/guix/build-system/android-ndk.scm
@@ -0,0 +1,127 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 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 (guix build-system android-ndk)
+  #:use-module (guix search-paths)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix derivations)
+  #:use-module (guix packages)
+  #:use-module (guix build-system)
+  #:use-module (guix build-system gnu)
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-26)
+  #:export (android-ndk-build-system))
+
+(define %android-ndk-build-system-modules
+  ;; Build-side modules imported by default.
+  `((guix build android-ndk-build-system)
+    (guix build syscalls)
+    ,@%gnu-build-system-modules))
+
+(define* (android-ndk-build store name inputs
+                      #:key
+                      (tests? #t)
+                      (test-target #f)
+                      (phases '(@ (guix build android-ndk-build-system)
+                                  %standard-phases))
+                      (outputs '("out"))
+                      (make-flags ''())
+                      (search-paths '())
+                      (system (%current-system))
+                      (guile #f)
+                      (imported-modules %android-ndk-build-system-modules)
+                      (modules '((guix build android-ndk-build-system)
+                                 (guix build utils))))
+  "Build SOURCE using Android NDK, and with INPUTS."
+  (define builder
+    `(begin
+       (use-modules ,@modules)
+       (android-ndk-build #:name ,name
+                    #:source ,(match (assoc-ref inputs "source")
+                                (((? derivation? source))
+                                 (derivation->output-path source))
+                                ((source)
+                                 source)
+                                (source
+                                 source))
+                    #:system ,system
+                    #:test-target ,test-target
+                    #:tests? ,tests?
+                    #:phases ,phases
+                    #:make-flags (cons* "-f"
+                                         ,(string-append
+                                          (derivation->output-path
+                                           (car (assoc-ref inputs "android-build")))
+                                          "/share/android/build/core/main.mk")
+                                         ,make-flags)
+                    #:outputs %outputs
+                    #:search-paths ',(map search-path-specification->sexp
+                                          search-paths)
+                    #:inputs %build-inputs)))
+
+  (define guile-for-build
+    (match guile
+      ((? package?)
+       (package-derivation store guile system #:graft? #f))
+      (#f                                         ; the default
+       (let* ((distro (resolve-interface '(gnu packages commencement)))
+              (guile  (module-ref distro 'guile-final)))
+         (package-derivation store guile system #:graft? #f)))))
+
+  (build-expression->derivation store name builder
+                                #:inputs inputs
+                                #:system system
+                                #:modules imported-modules
+                                #:outputs outputs
+                                #:guile-for-build guile-for-build))
+
+(define* (lower name
+                #:key source inputs native-inputs outputs system target
+                #:allow-other-keys
+                #:rest arguments)
+  "Return a bag for NAME."
+
+  (define private-keywords
+    '(#:source #:target #:inputs #:native-inputs #:outputs))
+
+  (and (not target) ;; TODO: support cross-compilation
+       (bag
+         (name name)
+         (system system)
+         (target target)
+         (host-inputs `(,@(if source
+                              `(("source" ,source))
+                              '())
+                        ,@inputs
+
+                        ;; Keep the standard inputs of 'gnu-build-system'
+                        ,@(standard-packages)))
+         (build-inputs `(("android-build" ,(module-ref (resolve-interface '(gnu packages android)) 'android-make-stub))
+                         ("android-googletest" ,(module-ref (resolve-interface '(gnu packages android)) 'android-googletest))
+                         ,@native-inputs))
+         (outputs outputs)
+         (build android-ndk-build)
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define android-ndk-build-system
+  (build-system
+    (name 'android-ndk)
+    (description
+     "Android NDK build system, to build Android NDK packages")
+    (lower lower)))
diff --git a/guix/build/android-ndk-build-system.scm b/guix/build/android-ndk-build-system.scm
new file mode 100644
index 0000000000..3c8f726d1d
--- /dev/null
+++ b/guix/build/android-ndk-build-system.scm
@@ -0,0 +1,88 @@
+;;; 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 (guix build android-ndk-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build syscalls)
+  #:use-module (guix build utils)
+  #:use-module (ice-9 popen)
+  #:use-module (ice-9 rdelim)
+  #:use-module (ice-9 ftw)
+  #:use-module (ice-9 format)
+  #:use-module (ice-9 match)
+  #:use-module (rnrs io ports)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (%standard-phases
+            android-ndk-build))
+
+;; Commentary:
+;;
+;; Builder-side code of the Android NDK build system.
+;;
+;; Code:
+
+(define* (configure #:key inputs outputs #:allow-other-keys)
+  (let ((library-directories (filter-map (match-lambda
+                                          ((name . path)
+                                           (if (eq? 'directory (stat:type (stat path)))
+                                               path
+                                               #f)))
+                                         inputs)))
+    (setenv "CC" "gcc")
+    (setenv "CXX" "g++")
+    (setenv "CPPFLAGS"
+     (string-join
+      (map (cut string-append "-I " <> "/include") library-directories)
+      " "))
+    (setenv "LDFLAGS"
+     (string-append "-L . "
+                    (string-join
+                     (map (lambda (x)
+                            (string-append "-L " x "/lib" " -Wl,-rpath=" x "/lib"))
+                          library-directories)
+                     " ")))
+    #t))
+
+(define* (install #:key inputs outputs (make-flags '()) #:allow-other-keys)
+  (let ((out (assoc-ref outputs "out")))
+    (apply invoke "make" "install"
+           (string-append "prefix=" out)
+           make-flags)
+    #t))
+
+(define* (check #:key target inputs outputs (tests? (not target)) (make-flags '()) #:allow-other-keys)
+  (if tests?
+      (begin
+        (apply invoke "make" "check" make-flags)
+        (when (and (file-exists? "tests") tests?)
+          (with-directory-excursion "tests"
+            (apply invoke "make" "check" make-flags))))
+      (format #t "test suite not run~%"))
+  #t)
+
+(define %standard-phases
+  (modify-phases gnu:%standard-phases
+    (replace 'configure configure)
+    (replace 'install install)
+    (replace 'check check)))
+
+(define* (android-ndk-build #:key inputs (phases %standard-phases)
+                            #:allow-other-keys #:rest args)
+  "Build the given Android NDK package, applying all of PHASES in order."
+  (apply gnu:gnu-build #:inputs inputs #:phases phases args))
diff --git a/guix/build/profiles.scm b/guix/build/profiles.scm
index b4160fba1b..819688a913 100644
--- a/guix/build/profiles.scm
+++ b/guix/build/profiles.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,6 +24,7 @@
   #:use-module (ice-9 ftw)
   #:use-module (ice-9 match)
   #:use-module (ice-9 pretty-print)
+  #:re-export (symlink-relative)                  ;for convenience
   #:export (ensure-writable-directory
             build-profile))
 
@@ -129,12 +130,15 @@ instead make DIRECTORY a \"real\" directory containing symlinks."
             (apply throw args))))))
 
 (define* (build-profile output inputs
-                        #:key manifest search-paths)
-  "Build a user profile from INPUTS in directory OUTPUT.  Write MANIFEST, an
-sexp, to OUTPUT/manifest.  Create OUTPUT/etc/profile with Bash definitions for
--all the variables listed in SEARCH-PATHS."
+                        #:key manifest search-paths
+                        (symlink symlink))
+  "Build a user profile from INPUTS in directory OUTPUT, using SYMLINK to
+create symlinks.  Write MANIFEST, an sexp, to OUTPUT/manifest.  Create
+OUTPUT/etc/profile with Bash definitions for -all the variables listed in
+SEARCH-PATHS."
   ;; Make the symlinks.
   (union-build output inputs
+               #:symlink symlink
                #:log-port (%make-void-port "w"))
 
   ;; Store meta-data.
diff --git a/guix/build/union.scm b/guix/build/union.scm
index 1179f1234b..24b366af45 100644
--- a/guix/build/union.scm
+++ b/guix/build/union.scm
@@ -27,7 +27,10 @@
   #:use-module (rnrs io ports)
   #:export (union-build
 
-            warn-about-collision))
+            warn-about-collision
+
+            relative-file-name
+            symlink-relative))
 
 ;;; Commentary:
 ;;;
@@ -174,4 +177,47 @@ returns #f, skip the faulty file altogether."
 
   (union-of-directories output (delete-duplicates inputs)))
 
+
+;;;
+;;; Relative symlinks.
+;;;
+
+(define %not-slash
+  (char-set-complement (char-set #\/)))
+
+(define (relative-file-name reference file)
+  "Given REFERENCE and FILE, both of which are absolute file names, return the
+file name of FILE relative to REFERENCE.
+
+  (relative-file-name \"/gnu/store/foo\" \"/gnu/store/bin/bar\")
+  => \"../bin/bar\"
+
+Note that this is from a purely lexical standpoint; conversely, \"..\" is
+*not* resolved lexically on POSIX in the presence of symlinks."
+  (if (and (string-prefix? "/" file) (string-prefix? "/" reference))
+      (let loop ((reference (string-tokenize reference %not-slash))
+                 (file      (string-tokenize file %not-slash)))
+        (define (finish)
+          (string-join (append (make-list (length reference) "..") file)
+                       "/"))
+
+        (match reference
+          (()
+           (finish))
+          ((head . tail)
+           (match file
+             (()
+              (finish))
+             ((head* . tail*)
+              (if (string=? head head*)
+                  (loop tail tail*)
+                  (finish)))))))
+      file))
+
+(define (symlink-relative old new)
+  "Assuming both OLD and NEW are absolute file names, make NEW a symlink to
+OLD, but using a relative file name."
+  (symlink (relative-file-name (dirname new) old)
+           new))
+
 ;;; union.scm ends here
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 5ffe505be1..c6d70e4e36 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -664,7 +664,9 @@ The other arguments are as for 'derivation'."
                                      (imported-modules %modules
                                                        #:system system
                                                        #:module-path module-path
-                                                       #:guile guile-for-build)
+                                                       #:guile guile-for-build
+                                                       #:deprecation-warnings
+                                                       deprecation-warnings)
                                      (return #f)))
                        (compiled (if (pair? %modules)
                                      (compiled-modules %modules
@@ -974,7 +976,15 @@ environment."
 (define* (imported-files files
                          #:key (name "file-import")
                          (system (%current-system))
-                         (guile (%guile-for-build)))
+                         (guile (%guile-for-build))
+
+                         ;; XXX: The only reason we have
+                         ;; #:deprecation-warnings is because (guix build
+                         ;; utils), which we use here, relies on _IO*, which
+                         ;; is deprecated in 2.2.  On the next full-rebuild
+                         ;; cycle, we should disable such warnings
+                         ;; unconditionally.
+                         (deprecation-warnings #f))
   "Return a derivation that imports FILES into STORE.  FILES must be a list
 of (FINAL-PATH . FILE) pairs.  Each FILE is mapped to FINAL-PATH in the
 resulting store path.  FILE can be either a file name, or a file-like object,
@@ -1010,13 +1020,25 @@ as returned by 'local-file' for example."
     (gexp->derivation name build
                       #:system system
                       #:guile-for-build guile
-                      #:local-build? #t)))
+                      #:local-build? #t
+
+                      ;; TODO: On the next rebuild cycle, set to "no"
+                      ;; unconditionally.
+                      #:env-vars
+                      (case deprecation-warnings
+                        ((#f)
+                         '(("GUILE_WARN_DEPRECATED" . "no")))
+                        ((detailed)
+                         '(("GUILE_WARN_DEPRECATED" . "detailed")))
+                        (else
+                         '())))))
 
 (define* (imported-modules modules
                            #:key (name "module-import")
                            (system (%current-system))
                            (guile (%guile-for-build))
-                           (module-path %load-path))
+                           (module-path %load-path)
+                           (deprecation-warnings #f))
   "Return a derivation that contains the source files of MODULES, a list of
 module names such as `(ice-9 q)'.  All of MODULES must be either names of
 modules to be found in the MODULE-PATH search path, or a module name followed
@@ -1041,7 +1063,8 @@ last one is created from the given <scheme-file> object."
                                    (cons f (search-path* module-path f))))))
                              modules)))
     (imported-files files #:name name #:system system
-                    #:guile guile)))
+                    #:guile guile
+                    #:deprecation-warnings deprecation-warnings)))
 
 (define* (compiled-modules modules
                            #:key (name "module-import-compiled")
@@ -1058,7 +1081,9 @@ they can refer to each other."
                                                  #:system system
                                                  #:guile guile
                                                  #:module-path
-                                                 module-path)))
+                                                 module-path
+                                                 #:deprecation-warnings
+                                                 deprecation-warnings)))
     (define build
       (gexp
        (begin
diff --git a/guix/packages.scm b/guix/packages.scm
index ab4b6278d6..a6f9936d63 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -388,10 +388,11 @@ object."
 (define-condition-type &package-cross-build-system-error &package-error
   package-cross-build-system-error?)
 
-
-(define (package-full-name package)
-  "Return the full name of PACKAGE--i.e., `NAME-VERSION'."
-  (string-append (package-name package) "-" (package-version package)))
+(define* (package-full-name package #:optional (delimiter "@"))
+  "Return the full name of PACKAGE--i.e., `NAME@VERSION'.  By specifying
+DELIMITER (a string), you can customize what will appear between the name and
+the version.  By default, DELIMITER is \"@\"."
+  (string-append (package-name package) delimiter (package-version package)))
 
 (define (%standard-patch-inputs)
   (let* ((canonical (module-ref (resolve-interface '(gnu packages base))
@@ -945,6 +946,10 @@ and return it."
               (($ <package> name version source build-system
                             args inputs propagated-inputs native-inputs
                             self-native-input? outputs)
+               ;; Even though we prefer to use "@" to separate the package
+               ;; name from the package version in various user-facing parts
+               ;; of Guix, checkStoreName (in nix/libstore/store-api.cc)
+               ;; prohibits the use of "@", so use "-" instead.
                (or (make-bag build-system (string-append name "-" version)
                              #:system system
                              #:target target
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 95dc9746bd..dca2479769 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -168,7 +168,7 @@
   (version      manifest-entry-version)           ; string
   (output       manifest-entry-output             ; string
                 (default "out"))
-  (item         manifest-entry-item)              ; package | store path
+  (item         manifest-entry-item)              ; package | file-like | store path
   (dependencies manifest-entry-dependencies       ; <manifest-entry>*
                 (default '()))
   (search-paths manifest-entry-search-paths       ; search-path-specification*
@@ -318,7 +318,7 @@ denoting a specific output of a package."
                  (propagated-inputs #$(map entry->gexp deps))
                  (search-paths #$(map search-path-specification->sexp
                                       search-paths))))
-      (($ <manifest-entry> name version output (? package? package)
+      (($ <manifest-entry> name version output package
                            (deps ...) (search-paths ...))
        #~(#$name #$version #$output
                  (ungexp package (or output "out"))
@@ -671,7 +671,13 @@ if not found."
             (return (find-among-inputs inputs)))))
         ((? string? item)
          (mlet %store-monad ((refs (references* item)))
-           (return (find-among-store-items refs)))))))
+           (return (find-among-store-items refs))))
+        (item
+         ;; XXX: ITEM might be a 'computed-file' or anything like that, in
+         ;; which case we don't know what to do.  The fix may be to check
+         ;; references once ITEM is compiled, as proposed at
+         ;; <https://bugs.gnu.org/29927>.
+         (return #f)))))
 
   (anym %store-monad
         entry-lookup-package (manifest-entries manifest)))
@@ -1202,6 +1208,7 @@ the entries in MANIFEST."
                              (hooks %default-profile-hooks)
                              (locales? #t)
                              (allow-collisions? #f)
+                             (relative-symlinks? #f)
                              system target)
   "Return a derivation that builds a profile (aka. 'user environment') with
 the given MANIFEST.  The profile includes additional derivations returned by
@@ -1213,6 +1220,9 @@ with a different version number.)
 When LOCALES? is true, the build is performed under a UTF-8 locale; this adds
 a dependency on the 'glibc-utf8-locales' package.
 
+When RELATIVE-SYMLINKS? is true, use relative file names for symlink targets.
+This is one of the things to do for the result to be relocatable.
+
 When TARGET is true, it must be a GNU triplet, and the packages in MANIFEST
 are cross-built for TARGET."
   (mlet* %store-monad ((system (if system
@@ -1275,6 +1285,9 @@ are cross-built for TARGET."
                                         (manifest-entries manifest))))))
 
             (build-profile #$output '#$inputs
+                           #:symlink #$(if relative-symlinks?
+                                           #~symlink-relative
+                                           #~symlink)
                            #:manifest '#$(manifest->gexp manifest)
                            #:search-paths search-paths))))
 
diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm
index 4ec3267007..cd802985dc 100644
--- a/guix/scripts/lint.scm
+++ b/guix/scripts/lint.scm
@@ -1037,7 +1037,7 @@ them for PACKAGE."
      (check       check-inputs-should-be-native))
    (lint-checker
      (name        'inputs-should-not-be-input)
-     (description "Identify inputs that should be inputs at all")
+     (description "Identify inputs that shouldn't be inputs at all")
      (check       check-inputs-should-not-be-an-input-at-all))
    (lint-checker
      (name        'patch-file-names)
diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm
index 0e09a01496..1e84459e78 100644
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@ -32,6 +32,8 @@
   #:use-module (guix packages)
   #:use-module (guix profiles)
   #:use-module (guix derivations)
+  #:use-module (guix search-paths)
+  #:use-module (guix build-system gnu)
   #:use-module (guix scripts build)
   #:use-module (gnu packages)
   #:use-module (gnu packages bootstrap)
@@ -100,11 +102,14 @@ with a properly initialized store database.
 SYMLINKS must be a list of (SOURCE -> TARGET) tuples denoting symlinks to be
 added to the pack."
   (define build
-    (with-imported-modules '((guix build utils)
-                             (guix build store-copy)
-                             (gnu build install))
+    (with-imported-modules (source-module-closure
+                            '((guix build utils)
+                              (guix build union)
+                              (guix build store-copy)
+                              (gnu build install)))
       #~(begin
           (use-modules (guix build utils)
+                       ((guix build union) #:select (relative-file-name))
                        (gnu build install)
                        (srfi srfi-1)
                        (srfi srfi-26)
@@ -117,9 +122,17 @@ added to the pack."
             ;; parent directories.
             (match-lambda
               ((source '-> target)
-               (let ((target (string-append #$profile "/" target)))
-                 `((directory ,(dirname source))
-                   (,source -> ,target))))))
+               (let ((target (string-append #$profile "/" target))
+                     (parent (dirname source)))
+                 ;; Never add a 'directory' directive for "/" so as to
+                 ;; preserve its ownnership when extracting the archive (see
+                 ;; below), and also because this would lead to adding the
+                 ;; same entries twice in the tarball.
+                 `(,@(if (string=? parent "/")
+                         '()
+                         `((directory ,parent)))
+                   (,source
+                    -> ,(relative-file-name parent target)))))))
 
           (define directives
             ;; Fully-qualified symlinks.
@@ -140,9 +153,11 @@ added to the pack."
                                        "")
                                  #$tar "/bin"))
 
-          ;; Note: there is not much to gain here with deduplication and
-          ;; there is the overhead of the '.links' directory, so turn it
-          ;; off.
+          ;; Note: there is not much to gain here with deduplication and there
+          ;; is the overhead of the '.links' directory, so turn it off.
+          ;; Furthermore GNU tar < 1.30 sometimes fails to extract tarballs
+          ;; with hard links:
+          ;; <http://lists.gnu.org/archive/html/bug-tar/2017-11/msg00009.html>.
           (populate-single-profile-directory %root
                                              #:profile #$profile
                                              #:closure "profile"
@@ -189,6 +204,8 @@ added to the pack."
                             (filter-map (match-lambda
                                           (('directory directory)
                                            (string-append "." directory))
+                                          ((source '-> _)
+                                           (string-append "." source))
                                           (_ #f))
                                         directives)))))))))
 
@@ -217,11 +234,13 @@ the image."
       (('gnu rest ...) #t)
       (rest #f)))
 
+  (define defmod 'define-module)                  ;trick Geiser
+
   (define config
     ;; (guix config) module for consumption by (guix gcrypt).
     (scheme-file "gcrypt-config.scm"
                  #~(begin
-                     (define-module (guix config)
+                     (#$defmod (guix config)
                        #:export (%libgcrypt))
 
                      ;; XXX: Work around <http://bugs.gnu.org/15602>.
@@ -267,6 +286,165 @@ the image."
 
 
 ;;;
+;;; Compiling C programs.
+;;;
+
+;; A C compiler.  That lowers to a single program that can be passed typical C
+;; compiler flags, and it makes sure the whole toolchain is available.
+(define-record-type <c-compiler>
+  (%c-compiler toolchain guile)
+  c-compiler?
+  (toolchain c-compiler-toolchain)
+  (guile     c-compiler-guile))
+
+(define* (c-compiler #:optional inputs
+                     #:key (guile (default-guile)))
+  (%c-compiler inputs guile))
+
+(define (bootstrap-c-compiler)
+  "Return the C compiler that uses the bootstrap toolchain.  This is used only
+by '--bootstrap', for testing purposes."
+  (define bootstrap-toolchain
+    (list (first (assoc-ref %bootstrap-inputs "gcc"))
+          (first (assoc-ref %bootstrap-inputs "binutils"))
+          (first (assoc-ref %bootstrap-inputs "libc"))))
+
+  (c-compiler bootstrap-toolchain
+              #:guile %bootstrap-guile))
+
+(define-gexp-compiler (c-compiler-compiler (compiler <c-compiler>) system target)
+  "Lower COMPILER to a single script that does the right thing."
+  (define toolchain
+    (or (c-compiler-toolchain compiler)
+        (list (first (assoc-ref (standard-packages) "gcc"))
+              (first (assoc-ref (standard-packages) "ld-wrapper"))
+              (first (assoc-ref (standard-packages) "binutils"))
+              (first (assoc-ref (standard-packages) "libc"))
+              (gexp-input (first (assoc-ref (standard-packages) "libc"))
+                          "static"))))
+
+  (define inputs
+    (match (append-map package-propagated-inputs
+                       (filter package? toolchain))
+      (((labels things . _) ...)
+       (append toolchain things))))
+
+  (define search-paths
+    (cons $PATH
+          (append-map package-native-search-paths
+                      (filter package? inputs))))
+
+  (define run
+    (with-imported-modules (source-module-closure
+                            '((guix build utils)
+                              (guix search-paths)))
+      #~(begin
+          (use-modules (guix build utils) (guix search-paths)
+                       (ice-9 match))
+
+          (define (output-file args)
+            (let loop ((args args))
+              (match args
+                (() "a.out")
+                (("-o" file _ ...) file)
+                ((head rest ...) (loop rest)))))
+
+          (set-search-paths (map sexp->search-path-specification
+                                 '#$(map search-path-specification->sexp
+                                         search-paths))
+                            '#$inputs)
+
+          (let ((output (output-file (command-line))))
+            (apply invoke "gcc" (cdr (command-line)))
+            (invoke "strip" output)))))
+
+  (when target
+    ;; TODO: Yep, we'll have to do it someday!
+    (leave (G_ "cross-compilation not implemented here;
+please email '~a'~%")
+           (@ (guix config) %guix-bug-report-address)))
+
+  (gexp->script "c-compiler" run
+                #:guile (c-compiler-guile compiler)))
+
+
+;;;
+;;; Wrapped package.
+;;;
+
+(define* (wrapped-package package
+                          #:optional (compiler (c-compiler)))
+  (define runner
+    (local-file (search-auxiliary-file "run-in-namespace.c")))
+
+  (define build
+    (with-imported-modules (source-module-closure
+                            '((guix build utils)
+                              (guix build union)))
+      #~(begin
+          (use-modules (guix build utils)
+                       ((guix build union) #:select (relative-file-name))
+                       (ice-9 ftw)
+                       (ice-9 match))
+
+          (define (strip-store-prefix file)
+            ;; Given a file name like "/gnu/store/…-foo-1.2/bin/foo", return
+            ;; "/bin/foo".
+            (let* ((len  (string-length (%store-directory)))
+                   (base (string-drop file (+ 1 len))))
+              (match (string-index base #\/)
+                (#f    base)
+                (index (string-drop base index)))))
+
+          (define (build-wrapper program)
+            ;; Build a user-namespace wrapper for PROGRAM.
+            (format #t "building wrapper for '~a'...~%" program)
+            (copy-file #$runner "run.c")
+
+            (substitute* "run.c"
+              (("@WRAPPED_PROGRAM@") program)
+              (("@STORE_DIRECTORY@") (%store-directory)))
+
+            (let* ((base   (strip-store-prefix program))
+                   (result (string-append #$output "/" base)))
+              (mkdir-p (dirname result))
+              (invoke #$compiler "-std=gnu99" "-static" "-Os" "-g0" "-Wall"
+                      "run.c" "-o" result)
+              (delete-file "run.c")))
+
+          (setvbuf (current-output-port)
+                   (cond-expand (guile-2.2 'line)
+                                (else      _IOLBF)))
+
+          ;; Link the top-level files of PACKAGE so that search paths are
+          ;; properly defined in PROFILE/etc/profile.
+          (mkdir #$output)
+          (for-each (lambda (file)
+                      (unless (member file '("." ".." "bin" "sbin" "libexec"))
+                        (let ((file* (string-append #$package "/" file)))
+                          (symlink (relative-file-name #$output file*)
+                                   (string-append #$output "/" file)))))
+                    (scandir #$package))
+
+          (for-each build-wrapper
+                    (append (find-files #$(file-append package "/bin"))
+                            (find-files #$(file-append package "/sbin"))
+                            (find-files #$(file-append package "/libexec")))))))
+
+  (computed-file (string-append (package-full-name package "-") "R")
+                 build))
+
+(define (map-manifest-entries proc manifest)
+  "Apply PROC to all the entries of MANIFEST and return a new manifest."
+  (make-manifest
+   (map (lambda (entry)
+          (manifest-entry
+            (inherit entry)
+            (item (proc (manifest-entry-item entry)))))
+        (manifest-entries manifest))))
+
+
+;;;
 ;;; Command-line options.
 ;;;
 
@@ -302,6 +480,9 @@ the image."
          (option '(#\f "format") #t #f
                  (lambda (opt name arg result)
                    (alist-cons 'format (string->symbol arg) result)))
+         (option '(#\R "relocatable") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'relocatable? #t result)))
          (option '(#\e "expression") #t #f
                  (lambda (opt name arg result)
                    (alist-cons 'expression arg result)))
@@ -354,6 +535,8 @@ Create a bundle of PACKAGE.\n"))
   (display (G_ "
   -f, --format=FORMAT    build a pack in the given FORMAT"))
   (display (G_ "
+  -R, --relocatable      produce relocatable executables"))
+  (display (G_ "
   -e, --expression=EXPR  consider the package EXPR evaluates to"))
   (display (G_ "
   -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""))
@@ -417,6 +600,9 @@ Create a bundle of PACKAGE.\n"))
 
   (with-error-handling
     (with-store store
+      ;; Set the build options before we do anything else.
+      (set-build-options-from-command-line store opts)
+
       (parameterize ((%graft? (assoc-ref opts 'graft?))
                      (%guile-for-build (package-derivation
                                         store
@@ -425,7 +611,13 @@ Create a bundle of PACKAGE.\n"))
                                             (canonical-package guile-2.2))
                                         #:graft? (assoc-ref opts 'graft?))))
         (let* ((dry-run?    (assoc-ref opts 'dry-run?))
-               (manifest    (manifest-from-args store opts))
+               (relocatable? (assoc-ref opts 'relocatable?))
+               (manifest    (let ((manifest (manifest-from-args store opts)))
+                              ;; Note: We cannot honor '--bootstrap' here because
+                              ;; 'glibc-bootstrap' lacks 'libc.a'.
+                              (if relocatable?
+                                  (map-manifest-entries wrapped-package manifest)
+                                  manifest)))
                (pack-format (assoc-ref opts 'format))
                (name        (string-append (symbol->string pack-format)
                                            "-pack"))
@@ -444,12 +636,10 @@ Create a bundle of PACKAGE.\n"))
                                (leave (G_ "~a: unknown pack format")
                                       format))))
                (localstatedir? (assoc-ref opts 'localstatedir?)))
-          ;; 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
+                                           #:relative-symlinks? relocatable?
                                            #:hooks (if bootstrap?
                                                        '()
                                                        %default-profile-hooks)
diff --git a/guix/search-paths.scm b/guix/search-paths.scm
index 4bf0e44389..002e6342bb 100644
--- a/guix/search-paths.scm
+++ b/guix/search-paths.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,7 +38,8 @@
             string-tokenize*
             evaluate-search-paths
             environment-variable-definition
-            search-path-definition))
+            search-path-definition
+            set-search-paths))
 
 ;;; Commentary:
 ;;;
@@ -196,4 +197,14 @@ prefix/suffix."
                                       #:kind kind
                                       #:separator separator))))
 
+(define* (set-search-paths search-paths directories
+                           #:key (setenv setenv))
+  "Set the search path environment variables specified by SEARCH-PATHS for the
+given directories."
+  (for-each (match-lambda
+              ((spec . value)
+               (setenv (search-path-specification-variable spec)
+                       value)))
+            (evaluate-search-paths search-paths directories)))
+
 ;;; search-paths.scm ends here
diff --git a/guix/utils.scm b/guix/utils.scm
index 92e45de616..e9efea5866 100644
--- a/guix/utils.scm
+++ b/guix/utils.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, 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
@@ -84,6 +84,7 @@
             version-major+minor
             version-major
             guile-version>?
+            version-prefix?
             string-replace-substring
             arguments-from-environment-variable
             file-extension
@@ -521,6 +522,27 @@ minor version numbers from version-string."
                             (micro-version))
              str))
 
+(define version-prefix?
+  (let ((not-dot (char-set-complement (char-set #\.))))
+    (lambda (v1 v2)
+      "Return true if V1 is a version prefix of V2:
+
+  (version-prefix? \"4.1\" \"4.16.2\") => #f
+  (version-prefix? \"4.1\" \"4.1.2\") => #t
+"
+      (define (list-prefix? lst1 lst2)
+        (match lst1
+          (() #t)
+          ((head1 tail1 ...)
+           (match lst2
+             (() #f)
+             ((head2 tail2 ...)
+              (and (equal? head1 head2)
+                   (list-prefix? tail1 tail2)))))))
+
+      (list-prefix? (string-tokenize v1 not-dot)
+                    (string-tokenize v2 not-dot)))))
+
 (define (file-extension file)
   "Return the extension of FILE or #f if there is none."
   (let ((dot (string-rindex file #\.)))
diff --git a/tests/graph.scm b/tests/graph.scm
index 5faa19298a..b86ae4a32f 100644
--- a/tests/graph.scm
+++ b/tests/graph.scm
@@ -134,7 +134,7 @@ edges."
                      (map (lambda (destination)
                             (list "p-0.drv"
                                   (string-append
-                                   (package-full-name destination)
+                                   (package-full-name destination "-")
                                    ".drv")))
                           implicit)))))))
 
diff --git a/tests/guix-pack.sh b/tests/guix-pack.sh
index 5584c10e00..130389a7ad 100644
--- a/tests/guix-pack.sh
+++ b/tests/guix-pack.sh
@@ -20,9 +20,9 @@
 # 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
+# The bootstrap binaries are needed to run these tests, which usually requires
+# a network connection.
+if ! guix build -q guile-bootstrap; then
     exit 77
 fi
 
@@ -87,6 +87,10 @@ guix pack --dry-run --bootstrap -f docker -S /opt/gnu=/ guile-bootstrap
 # guile-bootstrap is not intended to be cross-compiled.
 guix pack --dry-run --bootstrap --target=arm-unknown-linux-gnueabihf coreutils
 
+# Likewise, 'guix pack -R' requires a full-blown toolchain (because
+# 'glibc-bootstrap' lacks 'libc.a'), hence '--dry-run'.
+guix pack -R --dry-run --bootstrap -S /mybin=bin guile-bootstrap
+
 # Make sure package transformation options are honored.
 mkdir -p "$test_directory"
 drv1="`guix pack -n guile 2>&1 | grep pack.*\.drv`"
diff --git a/tests/profiles.scm b/tests/profiles.scm
index eba79d4e31..3a59a0cc4f 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -223,6 +223,52 @@
                  (string=? (dirname (readlink bindir))
                            (derivation->output-path guile))))))
 
+(test-assertm "profile-derivation relative symlinks, one entry"
+  (mlet* %store-monad
+      ((entry ->   (package->manifest-entry %bootstrap-guile))
+       (guile      (package->derivation %bootstrap-guile))
+       (drv        (profile-derivation (manifest (list entry))
+                                       #:relative-symlinks? #t
+                                       #:hooks '()
+                                       #:locales? #f))
+       (profile -> (derivation->output-path drv))
+       (bindir ->  (string-append profile "/bin"))
+       (_          (built-derivations (list drv))))
+    (return (and (file-exists? (string-append bindir "/guile"))
+                 (string=? (readlink bindir)
+                           (string-append "../"
+                                          (basename
+                                           (derivation->output-path guile))
+                                          "/bin"))))))
+
+(unless (network-reachable?) (test-skip 1))
+(test-assertm "profile-derivation relative symlinks, two entries"
+  (mlet* %store-monad
+      ((gnu-make-boot0 -> (@@ (gnu packages commencement) gnu-make-boot0))
+       (manifest -> (packages->manifest
+                     (list %bootstrap-guile gnu-make-boot0)))
+       (guile       (package->derivation %bootstrap-guile))
+       (make        (package->derivation gnu-make-boot0))
+       (drv         (profile-derivation manifest
+                                        #:relative-symlinks? #t
+                                        #:hooks '()
+                                        #:locales? #f))
+       (profile ->  (derivation->output-path drv))
+       (bindir ->   (string-append profile "/bin"))
+       (_           (built-derivations (list drv))))
+    (return (and (file-exists? (string-append bindir "/guile"))
+                 (file-exists? (string-append bindir "/make"))
+                 (string=? (readlink (string-append bindir "/guile"))
+                           (string-append "../../"
+                                          (basename
+                                           (derivation->output-path guile))
+                                          "/bin/guile"))
+                 (string=? (readlink (string-append bindir "/make"))
+                           (string-append "../../"
+                                          (basename
+                                           (derivation->output-path make))
+                                          "/bin/make"))))))
+
 (test-assertm "profile-derivation, inputs"
   (mlet* %store-monad
       ((entry ->   (package->manifest-entry packages:glibc "debug"))
@@ -242,8 +288,8 @@
                                         #:hooks '()
                                         #:locales? #t
                                         #:target target)))
-    (define (find-input name)
-      (let ((name (string-append name ".drv")))
+    (define (find-input package)
+      (let ((name (string-append (package-full-name package "-") ".drv")))
         (any (lambda (input)
                (let ((input (derivation-input-path input)))
                  (and (string-suffix? name input) input)))
@@ -252,12 +298,11 @@
     ;; The inputs for grep and sed should be cross-build derivations, but that
     ;; for the glibc-utf8-locales should be a native build.
     (return (and (string=? (derivation-system drv) (%current-system))
-                 (string=? (find-input (package-full-name packages:grep))
+                 (string=? (find-input packages:grep)
                            (derivation-file-name grep))
-                 (string=? (find-input (package-full-name packages:sed))
+                 (string=? (find-input packages:sed)
                            (derivation-file-name sed))
-                 (string=? (find-input
-                            (package-full-name packages:glibc-utf8-locales))
+                 (string=? (find-input packages:glibc-utf8-locales)
                            (derivation-file-name locales))))))
 
 (test-assert "package->manifest-entry defaults to \"out\""
diff --git a/tests/union.scm b/tests/union.scm
index aa95cae001..5a6a4033fc 100644
--- a/tests/union.scm
+++ b/tests/union.scm
@@ -184,4 +184,22 @@
                 (file-is-directory? "bin")
                 (eq? 'symlink (stat:type (lstat "bin/guile"))))))))
 
+(letrec-syntax ((test-relative-file-name
+                 (syntax-rules (=>)
+                   ((_ (reference file => expected) rest ...)
+                    (begin
+                      (test-equal (string-append "relative-file-name "
+                                                 reference " " file)
+                        expected
+                        (relative-file-name reference file))
+                      (test-relative-file-name rest ...)))
+                   ((_)
+                    #t))))
+  (test-relative-file-name
+   ("/a/b" "/a/c/d"     => "../c/d")
+   ("/a/b" "/a/b"       => "")
+   ("/a/b" "/a"         => "..")
+   ("/a/b" "/a/b/c/d"   => "c/d")
+   ("/a/b/c" "/a/d/e/f" => "../../d/e/f")))
+
 (test-end)
diff --git a/tests/utils.scm b/tests/utils.scm
index 035886dd16..3015b21b23 100644
--- a/tests/utils.scm
+++ b/tests/utils.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 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;;
@@ -72,6 +72,12 @@
 (test-assert "guile-version>? 10.5"
   (not (guile-version>? "10.5")))
 
+(test-assert "version-prefix?"
+  (and (version-prefix? "4.1" "4.1.2")
+       (version-prefix? "4.1" "4.1")
+       (not (version-prefix? "4.1" "4.16.2"))
+       (not (version-prefix? "4.1" "4"))))
+
 (test-equal "string-tokenize*"
   '(("foo")
     ("foo" "bar" "baz")