summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2016-10-12 09:28:14 -0400
committerMark H Weaver <mhw@netris.org>2016-10-12 09:28:14 -0400
commitabcf4858cda9ded59671681ab9820b5358d8bb16 (patch)
treefd1b0a53affad3ad0eb9b3867a2c127228530973
parent82adf4952ac1c03af3b41851ef4bbe1d2d6935a0 (diff)
parentbfb48f4f33583f58392a05f1d6cbf559156293ed (diff)
downloadguix-abcf4858cda9ded59671681ab9820b5358d8bb16.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--.mailmap8
-rw-r--r--Makefile.am3
-rw-r--r--doc/guix.texi59
-rw-r--r--gnu/local.mk36
-rw-r--r--gnu/packages/admin.scm14
-rw-r--r--gnu/packages/astronomy.scm6
-rw-r--r--gnu/packages/audio.scm39
-rw-r--r--gnu/packages/autogen.scm9
-rw-r--r--gnu/packages/bash.scm6
-rw-r--r--gnu/packages/bioinformatics.scm58
-rw-r--r--gnu/packages/bootstrap.scm1
-rw-r--r--gnu/packages/calendar.scm4
-rw-r--r--gnu/packages/ccache.scm4
-rw-r--r--gnu/packages/certs.scm4
-rw-r--r--gnu/packages/check.scm12
-rw-r--r--gnu/packages/databases.scm82
-rw-r--r--gnu/packages/dav.scm4
-rw-r--r--gnu/packages/dejagnu.scm75
-rw-r--r--gnu/packages/emacs.scm51
-rw-r--r--gnu/packages/embedded.scm165
-rw-r--r--gnu/packages/fonts.scm24
-rw-r--r--gnu/packages/fontutils.scm13
-rw-r--r--gnu/packages/fpga.scm311
-rw-r--r--gnu/packages/freeipmi.scm6
-rw-r--r--gnu/packages/games.scm24
-rw-r--r--gnu/packages/gcc.scm7
-rw-r--r--gnu/packages/gdb.scm6
-rw-r--r--gnu/packages/gnome.scm1
-rw-r--r--gnu/packages/gnupg.scm25
-rw-r--r--gnu/packages/gnuzilla.scm113
-rw-r--r--gnu/packages/guile.scm1
-rw-r--r--gnu/packages/haskell.scm200
-rw-r--r--gnu/packages/image.scm5
-rw-r--r--gnu/packages/irc.scm42
-rw-r--r--gnu/packages/libupnp.scm2
-rw-r--r--gnu/packages/linux.scm78
-rw-r--r--gnu/packages/lisp.scm584
-rw-r--r--gnu/packages/lynx.scm34
-rw-r--r--gnu/packages/mail.scm4
-rw-r--r--gnu/packages/man.scm4
-rw-r--r--gnu/packages/maths.scm37
-rw-r--r--gnu/packages/messaging.scm58
-rw-r--r--gnu/packages/music.scm56
-rw-r--r--gnu/packages/ncdu.scm10
-rw-r--r--gnu/packages/patches/clx-remove-demo.patch27
-rw-r--r--gnu/packages/patches/hdf-eos5-build-shared.patch31
-rw-r--r--gnu/packages/patches/hdf-eos5-fix-szip.patch30
-rw-r--r--gnu/packages/patches/hdf-eos5-fortrantests.patch156
-rw-r--r--gnu/packages/patches/hdf-eos5-remove-gctp.patch55
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt1.patch62
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt2.patch29
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt3.patch18
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt4.patch61
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt5.patch266
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt6.patch17
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt7.patch33
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt8.patch267
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2818-pt9.patch188
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2819.patch102
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2821.patch16
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2824.patch85
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2828.patch185
-rw-r--r--gnu/packages/patches/icecat-CVE-2016-2831.patch120
-rw-r--r--gnu/packages/patches/icecat-avoid-bundled-includes.patch35
-rw-r--r--gnu/packages/patches/icecat-avoid-bundled-libraries.patch50
-rw-r--r--gnu/packages/patches/libupnp-CVE-2016-6255.patch50
-rw-r--r--gnu/packages/patches/qemu-CVE-2016-8576.patch62
-rw-r--r--gnu/packages/patches/qemu-CVE-2016-8577.patch36
-rw-r--r--gnu/packages/patches/qemu-CVE-2016-8578.patch27
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch32
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch51
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch54
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch34
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch82
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch51
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch82
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch62
-rw-r--r--gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch50
-rw-r--r--gnu/packages/python.scm37
-rw-r--r--gnu/packages/qemu.scm5
-rw-r--r--gnu/packages/ruby.scm20
-rw-r--r--gnu/packages/samba.scm18
-rw-r--r--gnu/packages/scanner.scm9
-rw-r--r--gnu/packages/ssh.scm65
-rw-r--r--gnu/packages/statistics.scm4
-rw-r--r--gnu/packages/tbb.scm6
-rw-r--r--gnu/packages/video.scm4
-rw-r--r--gnu/packages/web.scm40
-rw-r--r--gnu/services/xorg.scm2
-rw-r--r--guix/build-system/asdf.scm360
-rw-r--r--guix/build/asdf-build-system.scm282
-rw-r--r--guix/build/bournish.scm14
-rw-r--r--guix/build/graft.scm30
-rw-r--r--guix/build/lisp-utils.scm327
-rw-r--r--guix/import/github.scm2
-rw-r--r--guix/licenses.scm7
-rwxr-xr-xguix/scripts/substitute.scm12
-rw-r--r--guix/scripts/system.scm25
-rw-r--r--guix/utils.scm21
-rw-r--r--po/guix/de.po1289
-rw-r--r--tests/utils.scm32
101 files changed, 4575 insertions, 2827 deletions
diff --git a/.mailmap b/.mailmap
index 4f756eca31..85f502161b 100644
--- a/.mailmap
+++ b/.mailmap
@@ -30,10 +30,10 @@ Ludovic Courtès <ludo@gnu.org> <ludovic.courtes@inria.fr>
 Mathieu Lirzin <mthl@gnu.org> <mthl@openmailbox.org>
 Mathieu Lirzin <mthl@gnu.org> <mathieu.lirzin@openmailbox.org>
 Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com>
-ng0 <ngillmann@runbox.com> <ng0@we.make.ritual.n0.is>
-ng0 <ngillmann@runbox.com> <niasterisk@grrlz.net>
-ng0 <ngillmann@runbox.com> <ng@niasterisk.space>
-ng0 <ngillmann@runbox.com> <ng0@libertad.pw>
+ng0 <ng0@we.make.ritual.n0.is> <ngillmann@runbox.com>
+ng0 <ng0@we.make.ritual.n0.is> <niasterisk@grrlz.net>
+ng0 <ng0@we.make.ritual.n0.is> <ng@niasterisk.space>
+ng0 <ng0@we.make.ritual.n0.is> <ng0@libertad.pw>
 Pjotr Prins <pjotr.public01@thebird.nl>
 Pjotr Prins <pjotr.public01@thebird.nl> <pjotr.public12@thebird.nl>
 Raimon Grau <raimonster@gmail.com> <raimon@3scale.net>
diff --git a/Makefile.am b/Makefile.am
index 1690a94de4..7f2281cfa4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -63,6 +63,7 @@ MODULES =					\
   guix/build-system/ant.scm			\
   guix/build-system/cmake.scm			\
   guix/build-system/emacs.scm			\
+  guix/build-system/asdf.scm			\
   guix/build-system/glib-or-gtk.scm		\
   guix/build-system/gnu.scm			\
   guix/build-system/haskell.scm			\
@@ -84,6 +85,7 @@ MODULES =					\
   guix/build/download.scm			\
   guix/build/cmake-build-system.scm		\
   guix/build/emacs-build-system.scm		\
+  guix/build/asdf-build-system.scm		\
   guix/build/git.scm				\
   guix/build/hg.scm				\
   guix/build/glib-or-gtk-build-system.scm	\
@@ -106,6 +108,7 @@ MODULES =					\
   guix/build/syscalls.scm                       \
   guix/build/gremlin.scm			\
   guix/build/emacs-utils.scm			\
+  guix/build/lisp-utils.scm			\
   guix/build/graft.scm				\
   guix/build/bournish.scm			\
   guix/build/qt-utils.scm			\
diff --git a/doc/guix.texi b/doc/guix.texi
index 9bd8b43582..57821c5617 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -2697,7 +2697,7 @@ one @i{via} its @code{Requires} field.
 
 Another example where @code{propagated-inputs} is useful is for languages
 that lack a facility to record the run-time search path akin to the
-@code{RUNPATH} of ELF files; this includes Guile, Python, Perl, GHC, and
+@code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
 more.  To ensure that libraries written in those languages can find
 library code they depend on at run time, run-time dependencies must be
 listed in @code{propagated-inputs} rather than @code{inputs}.
@@ -2967,6 +2967,63 @@ that should be run during the @code{build} phase.  By default the
 
 @end defvr
 
+@defvr {Scheme Variable} asdf-build-system/source
+@defvrx {Scheme Variable} asdf-build-system/sbcl
+@defvrx {Scheme Variable} asdf-build-system/ecl
+
+These variables, exported by @code{(guix build-system asdf)}, implement
+build procedures for Common Lisp packages using
+@url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
+definition facility for Common Lisp programs and libraries.
+
+The @code{asdf-build-system/source} system installs the packages in
+source form, and can be loaded using any common lisp implementation, via
+ASDF.  The others, such as @code{asdf-build-system/sbcl}, install binary
+systems in the format which a particular implementation understands.
+These build systems can also be used to produce executable programs, or
+lisp images which contain a set of packages pre-loaded.
+
+The build system uses naming conventions.  For binary packages, the
+package itself as well as its run-time dependencies should begin their
+name with the lisp implementation, such as @code{sbcl-} for
+@code{asdf-build-system/sbcl}.  Beginning the input name with this
+prefix will allow the build system to encode its location into the
+resulting library, so that the input can be found at run-time.
+
+If dependencies are used only for tests, it is convenient to use a
+different prefix in order to avoid having a run-time dependency on such
+systems.  For example,
+
+@example
+(define-public sbcl-bordeaux-threads
+  (package
+    ...
+    (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam)))
+    ...))
+@end example
+
+Additionally, the corresponding source package should be labeled using
+the same convention as python packages (see @ref{Python Modules}), using
+the @code{cl-} prefix.
+
+For binary packages, each system should be defined as a Guix package.
+If one package @code{origin} contains several systems, package variants
+can be created in order to build all the systems.  Source packages,
+which use @code{asdf-build-system/source}, may contain several systems.
+
+In order to create executable programs and images, the build-side
+procedures @code{build-program} and @code{build-image} can be used.
+They should be called in a build phase after the @code{create-symlinks}
+phase, so that the system which was just built can be used within the
+resulting image.  @code{build-program} requires a list of Common Lisp
+expressions to be passed as the @code{#:entry-program} argument.
+
+If the system is not defined within its own @code{.asd} file of the same
+name, then the @code{#:asd-file} parameter should be used to specify
+which file the system is defined in.
+
+@end defvr
+
 @defvr {Scheme Variable} cmake-build-system
 This variable is exported by @code{(guix build-system cmake)}.  It
 implements the build procedure for packages using the
diff --git a/gnu/local.mk b/gnu/local.mk
index c7cd72fba3..1acf949a2f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -111,6 +111,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/education.scm			\
   %D%/packages/elf.scm				\
   %D%/packages/elixir.scm			\
+  %D%/packages/embedded.scm			\
   %D%/packages/emacs.scm			\
   %D%/packages/enchant.scm			\
   %D%/packages/engineering.scm			\
@@ -128,6 +129,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/fltk.scm				\
   %D%/packages/fonts.scm			\
   %D%/packages/fontutils.scm			\
+  %D%/packages/fpga.scm				\
   %D%/packages/freedesktop.scm			\
   %D%/packages/freeipmi.scm			\
   %D%/packages/ftp.scm				\
@@ -477,6 +479,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/clang-libc-search-path.patch		\
   %D%/packages/patches/clang-3.8-libc-search-path.patch		\
   %D%/packages/patches/clucene-pkgconfig.patch			\
+  %D%/packages/patches/clx-remove-demo.patch			\
   %D%/packages/patches/cmake-fix-tests.patch			\
   %D%/packages/patches/cpio-CVE-2016-2037.patch			\
   %D%/packages/patches/cpufrequtils-fix-aclocal.patch		\
@@ -570,27 +573,17 @@ dist_patch_DATA =						\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
   %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
   %D%/packages/patches/hdf5-config-date.patch			\
+  %D%/packages/patches/hdf-eos5-build-shared.patch 		\
+  %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
+  %D%/packages/patches/hdf-eos5-fix-szip.patch			\
+  %D%/packages/patches/hdf-eos5-fortrantests.patch		\
   %D%/packages/patches/higan-remove-march-native-flag.patch	\
   %D%/packages/patches/hop-bigloo-4.0b.patch			\
   %D%/packages/patches/hop-linker-flags.patch			\
   %D%/packages/patches/hydra-disable-darcs-test.patch		\
   %D%/packages/patches/hypre-doc-tables.patch			\
   %D%/packages/patches/hypre-ldflags.patch			\
-  %D%/packages/patches/icecat-avoid-bundled-includes.patch	\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt1.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt2.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt3.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt4.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt5.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt6.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt7.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt8.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2818-pt9.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2819.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2821.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2824.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2828.patch		\
-  %D%/packages/patches/icecat-CVE-2016-2831.patch		\
+  %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
   %D%/packages/patches/icu4c-CVE-2014-6585.patch		\
   %D%/packages/patches/icu4c-CVE-2015-1270.patch		\
   %D%/packages/patches/icu4c-CVE-2015-4760.patch		\
@@ -656,6 +649,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libtiff-oob-write-in-nextdecode.patch	\
   %D%/packages/patches/libtool-skip-tests2.patch		\
   %D%/packages/patches/libunwind-CVE-2015-3239.patch		\
+  %D%/packages/patches/libupnp-CVE-2016-6255.patch		\
   %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
   %D%/packages/patches/libwmf-CAN-2004-0941.patch		\
   %D%/packages/patches/libwmf-CVE-2006-3376.patch		\
@@ -787,6 +781,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-paste-remove-website-test.patch	\
   %D%/packages/patches/python-paste-remove-timing-test.patch	\
   %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
+  %D%/packages/patches/qemu-CVE-2016-8576.patch			\
+  %D%/packages/patches/qemu-CVE-2016-8577.patch			\
+  %D%/packages/patches/qemu-CVE-2016-8578.patch			\
   %D%/packages/patches/qt4-ldflags.patch			\
   %D%/packages/patches/quickswitch-fix-dmenu-check.patch	\
   %D%/packages/patches/rapicorn-isnan.patch			\
@@ -875,15 +872,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/wordnet-CVE-2008-2149.patch			\
   %D%/packages/patches/wordnet-CVE-2008-3908-pt1.patch			\
   %D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch			\
-  %D%/packages/patches/wpa-supplicant-CVE-2015-5310.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2015-5314.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2015-5315.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2015-5316.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2016-4476.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch	\
-  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch	\
   %D%/packages/patches/xdotool-fix-makefile.patch               \
   %D%/packages/patches/xf86-video-ark-remove-mibstore.patch	\
   %D%/packages/patches/xf86-video-ast-remove-mibstore.patch	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index f608259382..9724c9b652 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -862,7 +862,7 @@ commands and their arguments.")
 (define-public wpa-supplicant-minimal
   (package
     (name "wpa-supplicant-minimal")
-    (version "2.5")
+    (version "2.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -871,17 +871,7 @@ commands and their arguments.")
                     ".tar.gz"))
               (sha256
                (base32
-                "05mkp5bx1c3z7h5biddsv0p49gkrq9ksany3anp4wdiv92p5prfc"))
-              (patches
-               (search-patches "wpa-supplicant-CVE-2015-5310.patch"
-                               "wpa-supplicant-CVE-2015-5314.patch"
-                               "wpa-supplicant-CVE-2015-5315.patch"
-                               "wpa-supplicant-CVE-2015-5316.patch"
-                               "wpa-supplicant-CVE-2016-4476.patch"
-                               "wpa-supplicant-CVE-2016-4477-pt1.patch"
-                               "wpa-supplicant-CVE-2016-4477-pt2.patch"
-                               "wpa-supplicant-CVE-2016-4477-pt3.patch"
-                               "wpa-supplicant-CVE-2016-4477-pt4.patch"))))
+                "0l0l5gz3d5j9bqjsbjlfcv4w4jwndllp9fmyai4x9kg6qhs6v4xl"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (alist-replace
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index 0c29a39a54..c1b15e1dee 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -87,7 +87,7 @@ systems in a FITS image header.")
 (define-public gnuastro
   (package
     (name "gnuastro")
-    (version "0.1")
+    (version "0.2")
     (source
      (origin
        (method url-fetch)
@@ -95,14 +95,14 @@ systems in a FITS image header.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "105s007kw8l3jwwhvh8k9lgbpfbf7sqh2wpxmvpv3qdr6nh9lnjg"))))
+         "0099g7zqg1gr9y94ybhyjgx9pkn9zv4rj1xb00fkybfw8w6ij9iv"))))
     (inputs
      `(("cfitsio" ,cfitsio)
        ("gsl" ,gsl)
        ("libjpeg" ,libjpeg-8)
        ("wcslib" ,wcslib)))
     (build-system gnu-build-system)
-    (home-page "http://www.gnu.org/software/gnuastro")
+    (home-page "https://www.gnu.org/software/gnuastro")
     (synopsis "Astronomical data manipulation programs")
     (description "The GNU Astronomy Utilities (Gnuastro) is a suite of
 programs for the manipulation and analysis of astronomical data.")
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 192fb0e231..781e7fac29 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -40,6 +40,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
@@ -179,7 +180,7 @@ streams from live audio.")
 (define-public ardour
   (package
     (name "ardour")
-    (version "5.3")
+    (version "5.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -193,10 +194,10 @@ streams from live audio.")
                     "libs/ardour/revision.cc"
                   (lambda (port)
                     (format port "#include \"ardour/revision.h\"
-namespace ARDOUR { const char* revision = \"5.3\" ; }"))))
+namespace ARDOUR { const char* revision = \"5.4\" ; }"))))
               (sha256
                (base32
-                "0xdyc3syxg4drg7rafadhlrn6nycg169ay6q5xhga19kcwy6qmqm"))
+                "1yrg0d86k9fqw7lmzjglilbadb4cjqxqkf6ii4bjs6rihj6b0qrf"))
               (file-name (string-append name "-" version))))
     (build-system waf-build-system)
     (arguments
@@ -242,6 +243,7 @@ namespace ARDOUR { const char* revision = \"5.3\" ; }"))))
        ("readline" ,readline)
        ("redland" ,redland)
        ("rubberband" ,rubberband)
+       ("libarchive" ,libarchive)
        ("taglib" ,taglib)
        ("python-rdflib" ,python-rdflib)))
     (native-inputs
@@ -336,6 +338,37 @@ tools (analyzer, mono/stereo tools, crossovers).")
     ;; The plugins are released under LGPLv2.1+
     (license (list license:lgpl2.1+ license:gpl2+))))
 
+(define-public infamous-plugins
+  (package
+    (name "infamous-plugins")
+    (version "0.2.02")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/ssj71/infamousPlugins/"
+                                  "archive/v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0qm3ak07vc1l3f5c3c2lq9gkfknlxwn8ks03cysw1pk8hj7dwnv6"))))
+    (build-system cmake-build-system)
+    ;; There are no tests
+    (arguments `(#:tests? #f))
+    (inputs
+     `(("cairo" ,cairo)
+       ("fftwf" ,fftwf)
+       ("lv2" ,lv2)
+       ("ntk" ,ntk)
+       ("zita-resampler" ,zita-resampler)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://ssj71.github.io/infamousPlugins")
+    (synopsis "LV2 plugins for live use")
+    (description
+     "The infamous plugins are a collection of LV2 audio plugins for live
+performances.  The plugins include a cellular automaton synthesizer, an
+envelope follower, distortion effects, tape effects and more.")
+    (license license:gpl2+)))
+
 (define-public csound
   (package
     (name "csound")
diff --git a/gnu/packages/autogen.scm b/gnu/packages/autogen.scm
index 4cbc215070..f3ab30b10a 100644
--- a/gnu/packages/autogen.scm
+++ b/gnu/packages/autogen.scm
@@ -31,7 +31,7 @@
 (define-public autogen
   (package
     (name "autogen")
-    (version "5.18.10")
+    (version "5.18.12")
     (source
      (origin
       (method url-fetch)
@@ -39,7 +39,7 @@
                           "/autogen-" version ".tar.xz"))
       (sha256
        (base32
-        "0j61mf3qab5ya7w5xsp7xalrby00cv92g462bxffl104ql18w92f"))))
+        "1n5zq4872sakvz9c7ncsdcfp0z8rsybsxvbmhkpbd19ii0pacfxy"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)     ;for doc generator mdoc
                      ("pkg-config" ,pkg-config)))
@@ -55,8 +55,9 @@
                  (append (find-files "agen5/test" "\\.test$")
                          (find-files "autoopts/test" "\\.(test|in)$"))
                  (("/bin/sh") sh)
-                 (("/usr/bin/tr") "tr"))))))))
-    (home-page "http://www.gnu.org/software/autogen/")
+                 (("/usr/bin/tr") "tr"))
+               #t))))))
+    (home-page "https://www.gnu.org/software/autogen/")
     (synopsis "Automated program generator")
     (description
      "AutoGen is a program to ease the maintenance of programs that contain
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index 01168ade16..c12c0ac9a0 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -238,7 +238,7 @@ without modification.")
 (define-public bash-completion
   (package
     (name "bash-completion")
-    (version "2.3")
+    (version "2.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -246,7 +246,7 @@ without modification.")
                     version "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1sg82nmsr00ig37skln2qvmi8mgbxgdvycm3ygzs8gbz66pq3q5j"))
+                "1xlhd09sb2w3bw8qaypxgkr0782w082mcbx8zf7yzjgy0996pxy0"))
               (patches
                (search-patches "bash-completion-directories.patch"))))
     (build-system gnu-build-system)
@@ -279,7 +279,7 @@ without modification.")
     (description
      "This package provides extensions that allow Bash to provide adapted
 completion for many common commands.")
-    (home-page "http://bash-completion.alioth.debian.org/")
+    (home-page "https://github.com/scop/bash-completion")
     (license gpl2+)))
 
 (define-public bash-tap
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index ac46fe4bcc..5fbfdf0b9b 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -1972,7 +1972,25 @@ trees (phylogenies) and characters.")
   (let ((base (package-with-python2 (strip-python2-variant python-dendropy))))
     (package
       (inherit base)
+      ;; Do not use same source as 'python-dendropy' because the patched
+      ;; failing tests do not occur on Python 2.
+      (source
+       (origin
+         (method url-fetch)
+         (uri (pypi-uri "DendroPy" (package-version base)))
+         (sha256
+          (base32
+           "1jfz7gp18wph311w1yygbvjanb3n5mdqal439bb6myw41dwb5m63"))))
+      (arguments
+       `(#:python ,python-2
+         #:phases
+           (modify-phases %standard-phases
+             (replace 'check
+               ;; There is currently a test failure that only happens on some
+               ;; systems, and only using "setup.py test"
+               (lambda _ (zero? (system* "nosetests")))))))
       (native-inputs `(("python2-setuptools" ,python2-setuptools)
+                       ("python2-nose" ,python2-nose)
                        ,@(package-native-inputs base))))))
 
 
@@ -2019,7 +2037,7 @@ identify enrichments with functional annotations of the genome.")
 (define-public diamond
   (package
     (name "diamond")
-    (version "0.8.22")
+    (version "0.8.23")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2028,7 +2046,7 @@ identify enrichments with functional annotations of the genome.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0lbqa07c5z8pr4dvdrc14rqc4311kq69j1ldry9glfc8hg3x1kd1"))))
+                "0xpcq3fbk4c52xbpgyk5brl58rljvl83bg8nkxy8vs00pxanm7i2"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no "check" target
@@ -5576,7 +5594,7 @@ track.  The database is exposed as a @code{TxDb} object.")
 (define-public vsearch
   (package
     (name "vsearch")
-    (version "2.1.2")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
@@ -5586,7 +5604,7 @@ track.  The database is exposed as a @code{TxDb} object.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1zzfj6ydsfzljyswlwqknpp8s2cf31vimi1aqf9ljsbagjyizc58"))
+         "1r8fk3whkil348y5hfsd4r56qjmchhq4nxm6s7ra5rlisw0mf9fy"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -6929,6 +6947,38 @@ elegans (Worm) as provided by UCSC (ce6, May 2008) and stored in Biostrings
 objects.")
     (license license:artistic2.0)))
 
+(define-public r-bsgenome-celegans-ucsc-ce10
+  (package
+    (name "r-bsgenome-celegans-ucsc-ce10")
+    (version "1.4.0")
+    (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 "http://www.bioconductor.org/packages/"
+                                  "release/data/annotation/src/contrib/"
+                                  "BSgenome.Celegans.UCSC.ce10_"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1zaym97jk4npxk14ifvwz2rvhm4zx9xgs33r9vvx9rlynp0gydrk"))))
+    (properties
+     `((upstream-name . "BSgenome.Celegans.UCSC.ce10")))
+    (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
+     "http://www.bioconductor.org/packages/BSgenome.Celegans.UCSC.ce10/")
+    (synopsis "Full genome sequences for Worm")
+    (description
+     "This package provides full genome sequences for Caenorhabditis
+elegans (Worm) as provided by UCSC (ce10, Oct 2010) and stored in Biostrings
+objects.")
+    (license license:artistic2.0)))
+
 (define-public r-bsgenome-dmelanogaster-ucsc-dm3
   (package
     (name "r-bsgenome-dmelanogaster-ucsc-dm3")
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index f47a343ca6..f6faba3188 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -171,6 +171,7 @@ successful, or false to signal an error."
 
         ;; XXX: This one is used bare-bones, without a libc, so add a case
         ;; here just so we can keep going.
+        ((string=? system "arm-eabi") "no-ld.so")
         ((string=? system "xtensa-elf") "no-ld.so")
         ((string=? system "avr") "no-ld.so")
         ((string=? system "i686-mingw") "no-ld.so")
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 0c37caa8e8..306c949066 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -84,13 +84,13 @@ data units.")
 (define-public khal
   (package
     (name "khal")
-    (version "0.8.3")
+    (version "0.8.4")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "khal" version))
              (sha256
               (base32
-               "1qryqs5d8jsl7j22pjjfkfdi4m8m3nn3n44b890pq85xkw599ihy"))))
+               "03vy4dp9n43w51mwqjjy08dr5nj7wxqnb085visz3j43vzm42p1f"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index 48ed860724..15a20ff08b 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -29,7 +29,7 @@
 (define-public ccache
   (package
     (name "ccache")
-    (version "3.3.1")
+    (version "3.3.2")
     (source
      (origin
       (method url-fetch)
@@ -37,7 +37,7 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "1ij1p8arz72fw67gx65ngb7jmg30ynjxk7i8dmikjxkdri4pmn66"))))
+        "0c25l78hi36682l9cyxca78i8sdkmgmv9afip1s21y6q4g5qaxlh"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)     ;for test.sh
                      ("which" ,(@ (gnu packages base) which))))
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index f010fabc86..b27577bbec 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -73,7 +73,7 @@
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.26")
+    (version "3.27.1")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -84,7 +84,7 @@
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "0r65s5q8kk0vr48s0zr8xi610k7h072lgkkpp4z6jlxr19bkly4i"))))
+                "0sraxk26swlgl7rl742rkfp5k251v5z3lqw9k8ikin0cjfhkfdpx"))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 95c80438e9..b394571d6f 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -26,6 +26,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages python)
+  #:use-module (guix utils)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -155,14 +156,15 @@ multi-paradigm automated test framework for C++ and Objective-C.")
 (define-public cmocka
   (package
     (name "cmocka")
-    (version "1.0.1")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://cmocka.org/files/1.0/cmocka-"
+              (uri (string-append "https://cmocka.org/files/"
+                                  (version-major+minor version) "/cmocka-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0fvm6rdalqcxckbddch8ycdw6n2ckldblv117n09chi2l7bm0q5k"))))
+                "0c0k8ax16fgh39nsva09q4jsh83g9nxihkwj9d5666763fzx6q79"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ; No test target
@@ -178,13 +180,13 @@ format.")
 (define-public cppcheck
   (package
     (name "cppcheck")
-    (version "1.72")
+    (version "1.76")
     (source (origin
       (method url-fetch)
       (uri (string-append "https://github.com/danmar/cppcheck/archive/"
                           version ".tar.gz"))
       (sha256
-       (base32 "0zxaixhqi4vmj7xj56gzadggcbjhbjjm6abyr86qlan23sg98667"))
+       (base32 "14d0ikcmq1xcqy9f1vq1jbn5ifl0jiy3rycqdcg7v8hil48m59z8"))
       (file-name (string-append name "-" version ".tar.gz"))))
     (build-system cmake-build-system)
     (home-page "http://cppcheck.sourceforge.net")
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 8970ea1c03..b7bd1f0cd6 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,11 +35,13 @@
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages crypto)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages language)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages ncurses)
@@ -541,32 +544,32 @@ is in the public domain.")
 (define-public tdb
   (package
     (name "tdb")
-    (version "1.3.9")
+    (version "1.3.11")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/tdb/tdb-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1ll4q17scax1arg12faj8p25jq1f7q9irc3pwla0ziymwqkgf0bi"))))
+                "0i1l38h0vyck6zkcj4fn2l03spadlmyr1qa1xpdp9dy2ccbm3s1r"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (alist-replace
-                 'configure
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (let ((out (assoc-ref outputs "out")))
-                     ;; The 'configure' script is a wrapper for Waf and
-                     ;; doesn't recognize things like '--enable-fast-install'.
-                     (zero? (system* "./configure"
-                                     (string-append "--prefix=" out)))))
-                 %standard-phases)))
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; The 'configure' script is a wrapper for Waf and
+               ;; doesn't recognize things like '--enable-fast-install'.
+               (zero? (system* "./configure"
+                               (string-append "--prefix=" out)))))))))
     (native-inputs
      `(;; TODO: Build the documentation.
        ;; ("docbook-xsl" ,docbook-xsl)
        ;; ("libxml2" ,libxml2)
        ;; ("libxslt" ,libxslt)
        ("python" ,python-2)))                     ;for the Waf build system
-    (home-page "http://tdb.samba.org/")
+    (home-page "https://tdb.samba.org/")
     (synopsis "Trivial database")
     (description
      "TDB is a Trivial Database.  In concept, it is very much like GDBM,
@@ -951,14 +954,14 @@ similar to BerkeleyDB, LevelDB, etc.")
 (define-public redis
   (package
     (name "redis")
-    (version "3.2.3")
+    (version "3.2.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.redis.io/releases/redis-"
                                   version".tar.gz"))
               (sha256
                (base32
-                "05az2g3gna5lkhh6x1a5m6yardbiig1l4ysggldlk5if8ww9qkk7"))))
+                "1wb9jd692a0y52bkkxr6815kk4g039mirjdrvqx24265lv2l5l1a"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; tests related to master/slave and replication fail
@@ -966,6 +969,7 @@ similar to BerkeleyDB, LevelDB, etc.")
                   (delete 'configure))
        #:make-flags `("CC=gcc"
                       "MALLOC=libc"
+                      "LDFLAGS=-ldl"
                       ,(string-append "PREFIX="
                                       (assoc-ref %outputs "out")))))
     (synopsis "Key-value cache and store")
@@ -1154,3 +1158,53 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")
 
 (define-public python2-peewee
   (package-with-python2 python-peewee))
+
+(define-public sqlcipher
+  (package
+    (name "sqlcipher")
+    (version "3.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/sqlcipher/" name
+                           "/archive/v" version ".tar.gz"))
+       (sha256
+        (base32 "1gv58dlbpzrmznly52yqbxgvii0ib88zr3aszla1bsypwjr6flff"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libcrypto" ,openssl)
+       ("libtcl8.6" ,tcl))) ; required for running the tests
+    (native-inputs
+     `(("tcl" ,tcl)))
+    (arguments
+     '(#:configure-flags
+       '("--enable-tempstore=yes"
+         "CFLAGS=-DSQLITE_HAS_CODEC -DSQLITE_ENABLE_FTS3"
+         "LDFLAGS=-lcrypto -ltcl8.6"
+         "--disable-tcl")
+       ;; tests cannot be run from the Makefile
+       ;; see: <https://github.com/sqlcipher/sqlcipher/issues/172>
+       #:test-target "testfixture"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'build-test-runner
+           (assoc-ref %standard-phases 'check))
+         (replace 'check
+           (lambda _
+             (zero?
+              (system* "./testfixture" "test/crypto.test")))))))
+    (home-page "https://www.zetetic.net/sqlcipher/")
+    (synopsis
+     "Library providing transparent encryption of SQLite database files")
+    (description "SQLCipher is an implementation of SQLite, extended to
+provide transparent 256-bit AES encryption of database files.  Pages are
+encrypted before being written to disk and are decrypted when read back.  It’s
+well suited for protecting embedded application databases and for mobile
+development.")
+    ;; The source files
+    ;; src/{crypto.c,crypto_impl.c,crypto.h,crypto_cc.c,crypto_libtomcrypt.c},
+    ;; src/{crypto_openssl.c,sqlcipher.h}, tool/crypto-speedtest.tcl,
+    ;; test/crypto.test are licensed under a 3-clause BSD license. All other
+    ;; source files are in the public domain.
+    (license (list license:public-domain license:bsd-3))))
diff --git a/gnu/packages/dav.scm b/gnu/packages/dav.scm
index 507d00c1a6..be6c40f4ba 100644
--- a/gnu/packages/dav.scm
+++ b/gnu/packages/dav.scm
@@ -52,13 +52,13 @@ clients.")
 (define-public vdirsyncer
   (package
     (name "vdirsyncer")
-    (version "0.12.1")
+    (version "0.13.1")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri name version))
              (sha256
               (base32
-               "1y3xpl83p4y1m5ks44drhwpygzwbjwhraycrhxlkhwk8bhnsifrz"))))
+               "1c4kipcc7dx1rn5j1a1x7wckz09mm9ihwakf3ramwn1y78q5zanb"))))
     (build-system python-build-system)
     (arguments
       `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/dejagnu.scm b/gnu/packages/dejagnu.scm
index 60fd2124f0..ba34e36c6a 100644
--- a/gnu/packages/dejagnu.scm
+++ b/gnu/packages/dejagnu.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016 Efraim Flashner <efraim@flasher.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,7 +27,7 @@
 (define-public dejagnu
   (package
     (name "dejagnu")
-    (version "1.5.3")
+    (version "1.6")
     (source
      (origin
       (method url-fetch)
@@ -34,50 +35,48 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "069z3qrdv35cm2sbnfr5yjzplrqj9f61cchxis7j9mm19hv8x6q9"))))
+        "0qypaakd2065jgpcv84zcsibl8gph3p334gb2qdmhsrbirhlmdh0"))))
     (build-system gnu-build-system)
     (inputs `(("expect" ,expect)))
     (arguments
-     '(#:phases (alist-replace
-                 'check
-                 (lambda _
-                   ;; Note: The test-suite *requires* /dev/pts among the
-                   ;; `build-chroot-dirs' of the build daemon when
-                   ;; building in a chroot.  See
-                   ;; <http://thread.gmane.org/gmane.linux.distributions.nixos/1036>
-                   ;; for details.
-                   (if (and (directory-exists? "/dev/pts")
-                            (directory-exists? "/proc"))
-                       (begin
-                        ;; Provide `runtest' with a log name, otherwise
-                        ;; it tries to run `whoami', which fails when in
-                        ;; a chroot.
-                        (setenv "LOGNAME" "guix-builder")
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             ;; Note: The test-suite *requires* /dev/pts among the
+             ;; `build-chroot-dirs' of the build daemon when
+             ;; building in a chroot.  See
+             ;; <http://thread.gmane.org/gmane.linux.distributions.nixos/1036>
+             ;; for details.
+             (if (and (directory-exists? "/dev/pts")
+                      (directory-exists? "/proc"))
+                 (begin
+                  ;; Provide `runtest' with a log name, otherwise it
+                  ;; tries to run `whoami', which fails when in a chroot.
+                  (setenv "LOGNAME" "guix-builder")
 
-                        ;; The test-suite needs to have a non-empty stdin:
-                        ;; <http://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html>.
-                        (zero?
-                         (system "make check < /dev/zero")))
-                       (begin
-                         (display "test suite cannot be run, skipping\n")
-                         #t)))
-                 (alist-cons-after
-                  'install 'post-install
-                  (lambda* (#:key inputs outputs #:allow-other-keys)
-                    ;; Use the right `expect' binary.
-                    (let ((out    (assoc-ref outputs "out"))
-                          (expect (assoc-ref inputs "expect")))
-                      (substitute* (string-append out "/bin/runtest")
-                        (("^mypath.*$" all)
-                         (string-append all
-                                        "export PATH="
-                                        expect "/bin:$PATH\n")))))
-                  %standard-phases))))
+                  ;; The test-suite needs to have a non-empty stdin:
+                  ;; <http://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html>.
+                  (zero?
+                   (system "make check < /dev/zero")))
+                 (begin
+                   (display "test suite cannot be run, skipping\n")
+                   #t))))
+         (add-after 'install 'post-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Use the right `expect' binary.
+             (let ((out    (assoc-ref outputs "out"))
+                   (expect (assoc-ref inputs "expect")))
+               (substitute* (string-append out "/bin/runtest")
+                 (("^mypath.*$" all)
+                  (string-append all
+                                 "export PATH="
+                                 expect "/bin:$PATH\n")))))))))
     (home-page
-     "http://www.gnu.org/software/dejagnu/")
+     "https://www.gnu.org/software/dejagnu/")
     (synopsis "GNU software testing framework")
     (description
      "DejaGnu is a framework for testing software.  In effect, it serves as
 a front-end for all tests written for a program.  Thus, each program can have
 multiple test suites, which are then all managed by a single harness.")
-    (license gpl2+)))
+    (license gpl3+)))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 4a20f0c1a5..1b345dba1f 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -266,14 +266,14 @@ editor (without an X toolkit)" )
 (define-public geiser
   (package
     (name "geiser")
-    (version "0.8.1")
+    (version "0.9")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://savannah/geiser/" version
                                  "/geiser-" version ".tar.gz"))
              (sha256
               (base32
-               "163zh8qf1q8l485d94a51a9xixirj8r2xvrbgxyw06vkaqrz5qvc"))))
+               "1n772ysl1dmn0vy3gk230ymyjm14h93zw99y6h2rqp1ixy7v43dm"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (alist-cons-after
@@ -298,34 +298,8 @@ metadata.")
     (license license:bsd-3)))
 
 (define-public geiser-next
-  ;; Geiser's upcoming version supports guile-next, and 0.8.1 does not.
-  ;; When the next Geiser release comes out, we can remove this.
-  (let ((commit "2e335695fc1a4a0b520b50deb761b958194cbec4"))
-    (package
-      (inherit geiser)
-      (name "geiser-next")
-      (version (string-append "0.8.1-1"
-                              (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "git://git.sv.gnu.org/geiser.git")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "00rmpn8zncq1fiah5m12l26z0s28bh7ql63kxdvksqdgfrisnmgf"))))
-      (native-inputs
-       `(("autoconf" ,autoconf)
-         ("automake" ,automake)
-         ("texinfo" ,texinfo)
-         ,@(package-native-inputs geiser)))
-      (arguments
-       (substitute-keyword-arguments (package-arguments geiser)
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'autogen
-               (lambda _
-                 (zero? (system* "sh" "autogen.sh")))))))))))
+  ;; This has become "geiser".
+  (deprecated-package "geiser-next" geiser))
 
 (define-public paredit
   (package
@@ -424,7 +398,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
 (define-public emacs-with-editor
   (package
     (name "emacs-with-editor")
-    (version "2.5.2")
+    (version "2.5.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -433,7 +407,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0k57f2wqng7510nzyzgjgbapplia23l3zrphl816nfm4s58sy1ka"))))
+                "14vypqj3wqym5yd0nggfm1xdgq5hv1kwxkg6i8ymlpxcdfxj45w7"))))
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-dash" ,emacs-dash)))
@@ -2156,7 +2130,7 @@ dark background.")
 (define-public emacs-smartparens
   (package
     (name "emacs-smartparens")
-    (version "1.7.1")
+    (version "1.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2165,7 +2139,7 @@ dark background.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1b47ppkzsj8j8a2p0bmvq05rhm2d2lsm3wlc0sg542r4zr6nji8s"))))
+                "0xsqiklg0q4w6gj0js1hvsz4lkypvcx6c9kzb1mz232gwlqx1azw"))))
     (build-system emacs-build-system)
     (propagated-inputs `(("emacs-dash" ,emacs-dash)))
     (home-page "https://github.com/Fuco1/smartparens")
@@ -2185,15 +2159,16 @@ well as completely new features.")
 (define-public emacs-hl-todo
   (package
     (name "emacs-hl-todo")
-    (version "1.7.0")
+    (version "1.7.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://raw.githubusercontent.com/tarsius/hl-todo/"
                     version "/hl-todo.el"))
+              (file-name (string-append "hl-todo-" version ".el"))
               (sha256
                (base32
-                "18zydm43zajlglhgr0bhdkd4pln27amd063k2ql6p1mvyam3j8ia"))))
+                "0flhz9vy8w1vvwwji92pi5k4659hl368bakj2qf2zfd26z8x583h"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/tarsius/hl-todo")
     (synopsis "Emacs mode to highlight TODO and similar keywords")
@@ -2258,7 +2233,7 @@ fully-functional one.")
 (define-public emacs-hydra
   (package
     (name "emacs-hydra")
-    (version "0.13.0")
+    (version "0.13.6")
     (source
      (origin
        (method url-fetch)
@@ -2267,7 +2242,7 @@ fully-functional one.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "19ynkjlg3jj7x90xxbz885324h6nkxmzlb2c2c95xkr20zckn0lk"))))
+         "0575vh858gm35p57s49dy6pc2ij46dmj9zaa4z0cp98sqra3j3l0"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/abo-abo/hydra")
     (synopsis "Make Emacs bindings that stick around")
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
new file mode 100644
index 0000000000..24eeef9fa7
--- /dev/null
+++ b/gnu/packages/embedded.scm
@@ -0,0 +1,165 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages embedded)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix svn-download)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages cross-base)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages texinfo))
+
+;; We must not use the released GCC sources here, because the cross-compiler
+;; does not produce working binaries.  Instead we take the very same SVN
+;; revision from the branch that is used for a release of the "GCC ARM
+;; embedded" project on launchpad.
+;; See https://launchpadlibrarian.net/218827644/release.txt
+(define-public gcc-arm-none-eabi-4.9
+  (let ((xgcc (cross-gcc "arm-none-eabi"
+                         (cross-binutils "arm-none-eabi")))
+        (revision "1")
+        (svn-revision 227977))
+    (package (inherit xgcc)
+      (version (string-append (package-version xgcc) "-"
+                              revision "." (number->string svn-revision)))
+      (source
+       (origin
+         (method svn-fetch)
+         (uri (svn-reference
+               (url "svn://gcc.gnu.org/svn/gcc/branches/ARM/embedded-4_9-branch/")
+               (revision svn-revision)))
+         (file-name (string-append "gcc-arm-embedded-" version "-checkout"))
+         (sha256
+          (base32
+           "113r98kygy8rrjfv2pd3z6zlfzbj543pq7xyq8bgh72c608mmsbr"))
+         (patches (origin-patches (package-source xgcc)))))
+      (native-inputs
+       `(("flex" ,flex)
+         ,@(package-native-inputs xgcc)))
+      (arguments
+       (substitute-keyword-arguments (package-arguments xgcc)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'fix-genmultilib
+               (lambda _
+                 (substitute* "gcc/genmultilib"
+                   (("#!/bin/sh") (string-append "#!" (which "sh"))))
+                 #t))))
+         ((#:configure-flags flags)
+          ;; The configure flags are largely identical to the flags used by the
+          ;; "GCC ARM embedded" project.
+          `(append (list "--enable-multilib"
+                         "--with-newlib"
+                         "--with-multilib-list=armv6-m,armv7-m,armv7e-m"
+                         "--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm"
+                         "--enable-plugins"
+                         "--disable-decimal-float"
+                         "--disable-libffi"
+                         "--disable-libgomp"
+                         "--disable-libmudflap"
+                         "--disable-libquadmath"
+                         "--disable-libssp"
+                         "--disable-libstdcxx-pch"
+                         "--disable-nls"
+                         "--disable-shared"
+                         "--disable-threads"
+                         "--disable-tls")
+                   (delete "--disable-multilib" ,flags)))))
+      (native-search-paths
+       (list (search-path-specification
+              (variable "CROSS_C_INCLUDE_PATH")
+              (files '("arm-none-eabi/include")))
+             (search-path-specification
+              (variable "CROSS_CPLUS_INCLUDE_PATH")
+              (files '("arm-none-eabi/include")))
+             (search-path-specification
+              (variable "CROSS_LIBRARY_PATH")
+              (files '("arm-none-eabi/lib"))))))))
+
+(define-public newlib-arm-none-eabi
+  (package
+    (name "newlib")
+    (version "2.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "ftp://sourceware.org/pub/newlib/newlib-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "01i7qllwicf05vsvh39qj7qp5fdifpvvky0x95hjq39mbqiksnsl"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:out-of-source? #t
+       ;; The configure flags are identical to the flags used by the "GCC ARM
+       ;; embedded" project.
+       #:configure-flags '("--target=arm-none-eabi"
+                           "--enable-newlib-io-long-long"
+                           "--enable-newlib-register-fini"
+                           "--disable-newlib-supplied-syscalls"
+                           "--disable-nls")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-references-to-/bin/sh
+           (lambda _
+             (substitute* '("libgloss/arm/cpu-init/Makefile.in"
+                            "libgloss/arm/Makefile.in"
+                            "libgloss/libnosys/Makefile.in"
+                            "libgloss/Makefile.in")
+               (("/bin/sh") (which "sh")))
+             #t)))))
+    (native-inputs
+     `(("xbinutils" ,(cross-binutils "arm-none-eabi"))
+       ("xgcc" ,gcc-arm-none-eabi-4.9)
+       ("texinfo" ,texinfo)))
+    (home-page "http://www.sourceware.org/newlib/")
+    (synopsis "C library for use on embedded systems")
+    (description "Newlib is a C library intended for use on embedded
+systems.  It is a conglomeration of several library parts that are easily
+usable on embedded products.")
+    (license (license:non-copyleft
+              "https://www.sourceware.org/newlib/COPYING.NEWLIB"))))
+
+(define-public newlib-nano-arm-none-eabi
+  (package (inherit newlib-arm-none-eabi)
+    (name "newlib-nano")
+    (arguments
+     (substitute-keyword-arguments (package-arguments newlib-arm-none-eabi)
+       ;; The configure flags are identical to the flags used by the "GCC ARM
+       ;; embedded" project.  They optimize newlib for use on small embedded
+       ;; systems with limited memory.
+       ((#:configure-flags flags)
+        ''("--target=arm-none-eabi"
+           "--enable-multilib"
+           "--disable-newlib-supplied-syscalls"
+           "--enable-newlib-reent-small"
+           "--disable-newlib-fvwrite-in-streamio"
+           "--disable-newlib-fseek-optimization"
+           "--disable-newlib-wide-orient"
+           "--enable-newlib-nano-malloc"
+           "--disable-newlib-unbuf-stream-opt"
+           "--enable-lite-exit"
+           "--enable-newlib-global-atexit"
+           "--enable-newlib-nano-formatted-io"
+           "--disable-nls"))))
+    (synopsis "Newlib variant for small systems with limited memory")))
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index e28598d421..22857e84b5 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -704,18 +704,11 @@ symbols unable to be displayed properly.")
   (package
     (name "font-un")
     (version "1.0.2-080608")
-    ;; The upstream server at kldp.net is serving us broken MIME.
-    ;; See <http://bugs.gnu.org/22908>.
     (source (origin
               (method url-fetch)
-              (uri (list
-                    (string-append
-                     "http://krosos.sdf.org/static/unix/"
-                     "un-fonts-core-" version ".tar.gz")
-                    ;; XXX: The upstream server at kldp.net
-                    (string-append
-                     "https://kldp.net/projects/unfonts/download/4695?filename="
-                     "un-fonts-core-" version ".tar.gz")))
+              (uri (string-append
+                    "https://kldp.net/unfonts/release/2607-"
+                    "un-fonts-core-" version ".tar.gz"))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
@@ -838,22 +831,15 @@ glyph designs, not just an added slant.")
                                                              "unzip")
                                                   "/bin"))
                          (font-dir (string-append %output
-                                                  "/share/fonts/truetype"))
-                         (doc-dir  (string-append %output "/share/doc/"
-                                                  ,name "-" ,version)))
+                                                  "/share/fonts/truetype")))
                      (setenv "PATH" PATH)
                      (system* "unzip" (assoc-ref %build-inputs "source"))
 
                      (mkdir-p font-dir)
-                     (mkdir-p doc-dir)
                      (for-each (lambda (ttf)
                                  (copy-file ttf
                                             (string-append font-dir "/" ttf)))
-                               (find-files "." "\\.ttf$"))
-                     (for-each (lambda (doc)
-                                 (copy-file doc
-                                            (string-append doc-dir "/" doc)))
-                               (find-files "." "\\.txt$"))))))
+                               (find-files "." "\\.ttf$"))))))
     (native-inputs
      `(("source" ,source)
        ("unzip" ,unzip)))
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 5054df8fca..60cff2e330 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -465,7 +465,7 @@ smooth contours with constant curvature at the spline joins.")
 (define-public libuninameslist
   (package
     (name "libuninameslist")
-    (version "0.5.20150701")
+    (version "20160701")
     (source
      (origin
        (method url-fetch)
@@ -474,17 +474,16 @@ smooth contours with constant curvature at the spline joins.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1j6147l100rppw7axlrkdx0p35fax6bz2zh1xgpg7a3b4pmqaj3v"))))
+         "12xxb301a66dh282pywpy00wxiaq5z8z20qm3pr2vql04r2g8d0x"))))
     (build-system gnu-build-system)
     (native-inputs `(("autoconf" ,autoconf)
                      ("automake" ,automake)
                      ("libtool" ,libtool)))
     (arguments
-     `(#:phases (alist-cons-after
-                 'unpack 'bootstrap
-                 (lambda _
-                   (zero? (system* "autoreconf" "-vi")))
-                 %standard-phases)))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'bootstrap
+           (lambda _ (zero? (system* "autoreconf" "-vi")))))))
     (synopsis "Unicode names and annotation list")
     (description
      "LibUniNamesList holds www.unicode.org Nameslist.txt data which can be
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
new file mode 100644
index 0000000000..bb199096dc
--- /dev/null
+++ b/gnu/packages/fpga.scm
@@ -0,0 +1,311 @@
+;;; 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 (gnu packages fpga)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system cmake)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages tcl)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages zip)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages gperf)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages libftdi))
+
+(define-public abc
+ (let ((commit "5ae4b975c49c")
+       (revision "1"))
+  (package
+    (name "abc")
+    (version (string-append "0.0-" revision "-" (string-take commit 9)))
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "https://bitbucket.org/alanmi/abc/get/" commit ".zip"))
+              (file-name (string-append name "-" version "-checkout.zip"))
+              (sha256
+                (base32
+                   "1syygi1x40rdryih3galr4q8yg1w5bvdzl75hd27v1xq0l5bz3d0"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (inputs
+     `(("readline" ,readline)))
+    (arguments
+     `(#:tests? #f ; no check target
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (out-bin (string-append out "/bin")))
+               (install-file "abc" out-bin)))))))
+    (home-page "http://people.eecs.berkeley.edu/~alanmi/abc/")
+    (synopsis "Sequential logic synthesis and formal verification")
+    (description "ABC is a program for sequential logic synthesis and
+formal verification.")
+    (license
+      (license:non-copyleft "https://fedoraproject.org/wiki/Licensing:MIT#Modern_Variants")))))
+
+(define-public iverilog
+  (package
+    (name "iverilog")
+    (version "10.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "ftp://ftp.icarus.com/pub/eda/verilog/v10/"
+                              "verilog-" version ".tar.gz"))
+              (sha256
+                (base32
+                   "1nnassxvq30rnn0r2p85rkb2zwxk97p109y13x3vr365wzgpbapx"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("flex" ,flex)
+       ("bison" ,bison)
+       ("ghostscript" ,ghostscript))) ; ps2pdf
+    (home-page "http://iverilog.icarus.com/")
+    (synopsis "FPGA Verilog simulation and synthesis tool")
+    (description "Icarus Verilog is a Verilog simulation and synthesis tool.
+It operates as a compiler, compiling source code written in Verilog
+(IEEE-1364) into some target format.
+For batch simulation, the compiler can generate an intermediate form
+called vvp assembly.
+This intermediate form is executed by the ``vvp'' command.
+For synthesis, the compiler generates netlists in the desired format.")
+    ;; GPL2 only because of:
+    ;; - ./driver/iverilog.man.in
+    ;; - ./iverilog-vpi.man.in
+    ;; - ./tgt-fpga/iverilog-fpga.man
+    ;; - ./vvp/vvp.man.in
+    ;; Otherwise would be GPL2+.
+    ;; You have to accept both GPL2 and LGPL2.1+.
+    (license (list license:gpl2 license:lgpl2.1+))))
+
+(define-public yosys
+  (package
+    (name "yosys")
+    (version "0.6")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "https://github.com/cliffordwolf/yosys/archive/"
+                              name "-" version ".tar.gz"))
+              (sha256
+                (base32
+                   "02j0c0m9dfyjccynalf0aggj6gy20k7iphpkg5cn6sdirlkv8gmx"))
+              (file-name (string-append name "-" version "-checkout.tar.gz"))
+              (modules '((guix build utils)))
+              (snippet
+                '(substitute* "Makefile"
+                   (("ABCREV = .*") "ABCREV = default\n")))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:make-flags (list "CC=gcc"
+                          "CXX=g++"
+                          (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs (make-flags '()) #:allow-other-keys)
+             (zero? (apply system* "make" "config-gcc" make-flags))))
+         (add-after 'configure 'prepare-abc
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((sourceabc (assoc-ref inputs "abc"))
+                    (sourcebin (string-append sourceabc "/bin"))
+                    (source (string-append sourcebin "/abc")))
+                   (mkdir-p "abc")
+                   (call-with-output-file "abc/Makefile"
+                     (lambda (port)
+                       (format port ".PHONY: all\nall:\n\tcp -f abc abc-default\n")))
+                   (copy-file source "abc/abc")
+                   (zero? (system* "chmod" "+w" "abc/abc")))))
+          (add-before 'check 'fix-iverilog-references
+             (lambda* (#:key inputs native-inputs #:allow-other-keys)
+               (let* ((xinputs (or native-inputs inputs))
+                      (xdirname (assoc-ref xinputs "iverilog"))
+                      (iverilog (string-append xdirname "/bin/iverilog")))
+                     (substitute* '("./manual/CHAPTER_StateOfTheArt/synth.sh"
+                                    "./manual/CHAPTER_StateOfTheArt/validate_tb.sh"
+                                    "./techlibs/ice40/tests/test_bram.sh"
+                                    "./techlibs/ice40/tests/test_ffs.sh"
+                                    "./techlibs/xilinx/tests/bram1.sh"
+                                    "./techlibs/xilinx/tests/bram2.sh"
+                                    "./tests/bram/run-single.sh"
+                                    "./tests/realmath/run-test.sh"
+                                    "./tests/simple/run-test.sh"
+                                    "./tests/techmap/mem_simple_4x1_runtest.sh"
+                                    "./tests/tools/autotest.sh"
+                                    "./tests/vloghtb/common.sh")
+                        (("if ! which iverilog") "if ! true")
+                        (("iverilog ") (string-append iverilog " "))
+                        (("iverilog_bin=\".*\"") (string-append "iverilog_bin=\""
+                                                                iverilog "\"")))
+                     #t))))))
+    ;; TODO add xdot [patch the path to it here] as soon as I find out where it is.
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("bison" ,bison)
+       ("flex" ,flex)
+       ("gawk" , gawk) ; for the tests and "make" progress pretty-printing
+       ("tcl" ,tcl) ; tclsh for the tests
+       ("iverilog" ,iverilog))) ; for the tests
+    (inputs
+     `(("tcl" ,tcl)
+       ("readline" ,readline)
+       ("libffi" ,libffi)
+       ("abc" ,abc)))
+    (home-page "http://www.clifford.at/yosys/")
+    (synopsis "FPGA Verilog RTL synthesizer")
+    (description "Yosys synthesizes Verilog-2005.")
+    (license license:isc)))
+
+(define-public icestorm
+  (let ((commit "12b2295c9087d94b75e374bb205ae4d76cf17e2f")
+        (revision "1"))
+   (package
+    (name "icestorm")
+    (version (string-append "0.0-" revision "-" (string-take commit 9)))
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/cliffordwolf/icestorm.git")
+                     (commit commit)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+                (base32
+                   "1mmzlqvap6w8n4qzv3idvy51arkgn03692ssplwncy3akjrbsd2b"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no unit tests that don't need an FPGA exist.
+       #:make-flags (list "CC=gcc" "CXX=g++"
+                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+        (modify-phases %standard-phases
+          (add-after 'unpack 'remove-usr-local
+            (lambda _
+              (substitute* "iceprog/Makefile"
+                (("-I/usr/local/include") "")
+                (("-L/usr/local/lib") ""))
+              #t))
+          (delete 'configure))))
+    (inputs
+     `(("libftdi" ,libftdi)))
+    (native-inputs
+     `(("python-3" ,python)
+       ("pkg-config" ,pkg-config)))
+    (home-page "http://www.clifford.at/icestorm/")
+    (synopsis "Project IceStorm - Lattice iCE40 FPGAs bitstream tools")
+    (description "Project IceStorm - Lattice iCE40 FPGAs Bitstream Tools.
+Includes the actual FTDI connector.")
+    (license license:isc))))
+
+(define-public arachne-pnr
+  (let ((commit "52e69ed207342710080d85c7c639480e74a021d7")
+        (revision "1"))
+   (package
+    (name "arachne-pnr")
+    (version (string-append "0.0-" revision "-" (string-take commit 9)))
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/cseed/arachne-pnr.git")
+                     (commit commit)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+                (base32
+                   "15bdw5yxj76lxrwksp6liwmr6l1x77isf4bs50ys9rsnmiwh8c3w"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:phases (modify-phases %standard-phases
+       (replace 'configure
+         (lambda* (#:key outputs inputs #:allow-other-keys)
+           (substitute* '("Makefile")
+             (("DESTDIR = .*") (string-append "DESTDIR = "
+                                             (assoc-ref outputs "out")
+                                             "\n"))
+             (("ICEBOX = .*") (string-append "ICEBOX = "
+                                             (assoc-ref inputs "icestorm")
+                                             "/share/icebox\n")))
+           (substitute* '("./tests/fsm/generate.py"
+                          "./tests/combinatorial/generate.py")
+             (("#!/usr/bin/python") "#!/usr/bin/python2"))
+           #t)))))
+    (inputs
+     `(("icestorm" ,icestorm)))
+    (native-inputs
+     `(("git" ,git)  ; for determining its own version string
+       ("yosys" ,yosys) ; for tests
+       ("perl" ,perl) ; for shasum
+       ("python-2" ,python-2))) ; for tests
+    (home-page "https://github.com/cseed/arachne-pnr")
+    (synopsis "Place-and-Route tool for FPGAs")
+    (description "Arachne-PNR is a Place-and-Route Tool For FPGAs.")
+    (license license:gpl2))))
+
+(define-public gtkwave
+  (package
+    (name "gtkwave")
+    (version "3.3.76")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://gtkwave.sourceforge.net/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1vlvavszb1jwwiixiagld88agjrjg0ix8qa4xnxj4ziw0q87jbmn"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("gperf" ,gperf)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("tcl" ,tcl)
+       ("tk" ,tk)
+       ("gtk+-2" ,gtk+-2)))
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--with-tcl="
+                            (assoc-ref %build-inputs "tcl")
+                            "/lib")
+             (string-append "--with-tk="
+                            (assoc-ref %build-inputs "tk")
+                            "/lib"))))
+
+    (synopsis "Waveform viewer for FPGA simulator trace files")
+    (description "This package is a waveform viewer for FPGA
+simulator trace files (FST).")
+    (home-page "http://gtkwave.sourceforge.net/")
+    ;; Exception against free government use in tcl_np.c and tcl_np.h
+    (license (list license:gpl2+ license:expat license:tcl/tk))))
diff --git a/gnu/packages/freeipmi.scm b/gnu/packages/freeipmi.scm
index 01f1389144..cd97d52f99 100644
--- a/gnu/packages/freeipmi.scm
+++ b/gnu/packages/freeipmi.scm
@@ -28,19 +28,19 @@
 (define-public freeipmi
   (package
     (name "freeipmi")
-    (version "1.5.3")
+    (version "1.5.4")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/freeipmi/freeipmi-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0s4q7imc4r3g9lkd92bnvw70679q83b0irrlw895i5nc05dj4djx"))))
+               "1m8zvnyjyjap07vvc5z90nyghabbb6bjcyyc7qswj66qsmssf135"))))
     (build-system gnu-build-system)
     (inputs
      `(("readline" ,readline)
        ("libgcrypt" ,libgcrypt)))
-    (home-page "http://www.gnu.org/software/freeipmi/")
+    (home-page "https://www.gnu.org/software/freeipmi/")
     (synopsis "Platform management, including sensor and power monitoring")
     (description
      "GNU FreeIPMI is a collection of in-band and out-of-band IPMI software
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 8c8a35b121..72aff907ae 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -179,8 +179,10 @@ scriptable with Guile.")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://abbaye-for-linux.googlecode.com/files/"
-                           "abbaye-for-linux-src-" version ".tar.gz"))
+       (uri (string-append "https://storage.googleapis.com/"
+                           "google-code-archive-downloads/v2/code.google.com/"
+                           "abbaye-for-linux/abbaye-for-linux-src-"
+                           version ".tar.gz"))
        (sha256
         (base32
          "1wgvckgqa2084rbskxif58wbb83xbas8s1i8s7d57xbj08ryq8rk"))))
@@ -427,7 +429,7 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
 (define-public xboard
   (package
     (name "xboard")
-    (version "4.9.0")
+    (version "4.9.1")
     (source
      (origin
        (method url-fetch)
@@ -435,14 +437,15 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
                            ".tar.gz"))
        (sha256
         (base32
-         "1av6r3s5vyclwf3c9i1pkr2442ryrf4ixhhf2i44a4j1xyhlp5jb"))))
+         "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
     (build-system gnu-build-system)
     (inputs
      `(("gtk+" ,gtk+-2)
        ("librsvg" ,librsvg)))
-    (native-inputs `(("texinfo" ,texinfo)
-                     ("pkg-config" ,pkg-config)))
-    (home-page "http://www.gnu.org/software/xboard")
+    (native-inputs
+     `(("texinfo" ,texinfo)
+       ("pkg-config" ,pkg-config)))
+    (home-page "https://www.gnu.org/software/xboard")
     (synopsis "Graphical user interface for chess programs")
     (description "GNU XBoard is a graphical board for all varieties of chess,
 including international chess, xiangqi (Chinese chess), shogi (Japanese chess)
@@ -2784,12 +2787,11 @@ auto mapper with a VT100 map display.")
     (source
      (origin (method url-fetch)
              (uri (string-append
-                   "https://github.com/sgimenez/laby/tarball/"
-                   name "-" version))
-             (file-name (string-append name "-" version ".tar.gz"))
+                   "https://github.com/sgimenez/laby/archive/"
+                   name "-" version ".tar.gz"))
              (sha256
               (base32
-               "113ip48308ps3lsw427xswgx3wdanils43nyal9n4jr6bcx1bj2j"))
+               "0gyrfa95l1qka7gbjf7l6mk7mbfvph00l0c995ia272qdw7rjhyf"))
              (patches (search-patches "laby-make-install.patch"))))
     (build-system gnu-build-system)
     (inputs
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index b26e93e886..bed277b1e0 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -566,6 +566,13 @@ as the 'native-search-paths' field."
                 (("libgcj(_bc)?_la_LDFLAGS =" ldflags _)
                  (string-append ldflags " -Wl,-rpath=$(libdir)")))))
            (add-after
+            'unpack 'patch-testsuite
+            ;; dejagnu-1.6 removes the 'absolute' command
+            (lambda _
+              (substitute* "libjava/testsuite/lib/libjava.exp"
+                (("absolute") "file normalize"))
+              #t))
+           (add-after
             'install 'install-javac-and-javap-wrappers
             (lambda _
               (let* ((javac  (assoc-ref %build-inputs "javac.in"))
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index 80d53935e2..c6cc623f6c 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -37,14 +37,14 @@
 (define-public gdb
   (package
     (name "gdb")
-    (version "7.11.1")
+    (version "7.12")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/gdb/gdb-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0w7wi1llznlqdqk2lmzygz2xylb2c9mh580s9i0rypkmwfj6s8g9"))))
+               "152g2qa8337cxif3lkvabjcxfd9jphfb2mza8f1p2c4bjk2z6kw3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; FIXME "make check" fails on single-processor systems.
@@ -95,7 +95,7 @@
     (native-inputs
       `(("texinfo" ,texinfo)
         ("pkg-config" ,pkg-config)))
-    (home-page "http://www.gnu.org/software/gdb/")
+    (home-page "https://www.gnu.org/software/gdb/")
     (synopsis "The GNU debugger")
     (description
      "GDB is the GNU debugger.  With it, you can monitor what a program is
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 7d66ac97b8..b62a5f7f4d 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -5094,6 +5094,7 @@ software that do not provide their own configuration interface.")
        ("gvfs"                      ,gvfs)
        ("hicolor-icon-theme"        ,hicolor-icon-theme)
        ("nautilus"                  ,nautilus)
+       ("pinentry-gnome3"           ,pinentry-gnome3)
        ("pulseaudio"                ,pulseaudio)
        ("shared-mime-info"          ,shared-mime-info)
        ("totem"                     ,totem)
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index c15a4afcd6..4972b37090 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -7,7 +7,8 @@
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
-;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Nils Gillmann <ng0@libertad.pw>
+;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -606,7 +607,7 @@ including tools for signing keys, keyring analysis, and party preparation.
     (synopsis "GnuPG's interface to passphrase input")
     (description
      "Pinentry provides a console that allows users to enter a passphrase when
-@code{gpg} or @code{gpg2} is run and needs it.")
+@code{gpg} is run and needs it.")
     (license license:gpl2+)))
 
 (define-public pinentry-gtk2
@@ -619,7 +620,23 @@ including tools for signing keys, keyring analysis, and party preparation.
        ,@(package-inputs pinentry-tty)))
     (description
      "Pinentry provides a console and a GTK+ GUI that allows users to enter a
-passphrase when @code{gpg} or @code{gpg2} is run and needs it.")))
+passphrase when @code{gpg} is run and needs it.")))
+
+(define-public pinentry-gnome3
+  (package
+    (inherit pinentry-tty)
+    (name "pinentry-gnome3")
+    (inputs
+     `(("gtk+" ,gtk+-2)
+       ("gcr" ,gcr)
+       ("glib" ,glib)
+       ,@(package-inputs pinentry-tty)))
+    (arguments
+     `(#:configure-flags '("--enable-pinentry-gnome3")))
+    (description
+     "Pinentry provides a console and a GUI designed for use with GNOME@tie{}3
+that allows users to enter a passphrase when required by @code{gpg} or other
+software.")))
 
 (define-public pinentry-qt
   (package
@@ -632,7 +649,7 @@ passphrase when @code{gpg} or @code{gpg2} is run and needs it.")))
      `(#:configure-flags '("CXXFLAGS=-std=gnu++11")))
   (description
    "Pinentry provides a console and a Qt GUI that allows users to enter a
-passphrase when @code{gpg} or @code{gpg2} is run and needs it.")))
+passphrase when @code{gpg} is run and needs it.")))
 
 (define-public pinentry
   (package (inherit pinentry-gtk2)
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index d114dc0ad5..4927a516e2 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -28,6 +28,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gstreamer)
@@ -185,7 +186,7 @@ in the Mozilla clients.")
 (define-public nss
   (package
     (name "nss")
-    (version "3.26")
+    (version "3.27.1")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -196,7 +197,7 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "0r65s5q8kk0vr48s0zr8xi610k7h072lgkkpp4z6jlxr19bkly4i"))
+                "0sraxk26swlgl7rl742rkfp5k251v5z3lqw9k8ikin0cjfhkfdpx"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-pkgconfig.patch"))))
     (build-system gnu-build-system)
@@ -290,38 +291,71 @@ PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other security
 standards.")
     (license license:mpl2.0)))
 
+(define (mozilla-patch file-name changeset hash)
+  "Return an origin for CHANGESET from the mozilla-esr45 repository."
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://hg.mozilla.org/releases/mozilla-esr45/raw-rev/"
+                        changeset))
+    (sha256 (base32 hash))
+    (file-name file-name)))
+
 (define-public icecat
   (package
     (name "icecat")
-    (version "38.8.0-gnu2")
+    (version "45.3.0-gnu1-beta")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "mirror://gnu/gnuzilla/"
-                          version "/"
-                          name "-" version ".tar.bz2"))
+      (uri (list (string-append "mirror://gnu/gnuzilla/" version "/"
+                                name "-" version ".tar.bz2")
+                 ;; XXX Temporary URI for 45.3 beta release.
+                 ;;     Remove when no longer needed.
+                 (string-append "http://jenkins.trisquel.info/icecat/binaries/"
+                                "icecat-45.3.0-gnu1.tar.bz2")))
       (sha256
        (base32
-        "1yb7a1zsqpra9cgq8hrzrbm5v31drb9367cwvwiksz0ngqy342hb"))
-      (patches (search-patches
-                "icecat-avoid-bundled-includes.patch"
-                "icecat-CVE-2016-2818-pt1.patch"
-                "icecat-CVE-2016-2818-pt2.patch"
-                "icecat-CVE-2016-2818-pt3.patch"
-                "icecat-CVE-2016-2818-pt4.patch"
-                "icecat-CVE-2016-2818-pt5.patch"
-                "icecat-CVE-2016-2818-pt6.patch"
-                "icecat-CVE-2016-2818-pt7.patch"
-                "icecat-CVE-2016-2818-pt8.patch"
-                "icecat-CVE-2016-2818-pt9.patch"
-                "icecat-CVE-2016-2819.patch"
-                "icecat-CVE-2016-2821.patch"
-                "icecat-CVE-2016-2824.patch"
-                "icecat-CVE-2016-2828.patch"
-                "icecat-CVE-2016-2831.patch"))
+        "1hk5lwaqm8nkfm43sq521mzyrx0x3iiwvlcy62m7cq7grz9wixp6"))
+      (patches
+       `(,(search-patch "icecat-avoid-bundled-libraries.patch")
+         ,(mozilla-patch "icecat-CVE-2016-5250.patch"     "6711ccb0184e" "1p0s91rw1j7ib6hy9gh5p0l33rja32rfgygh29jw4wq1hxfql8rk")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt1.patch" "b08f28db372e" "0fmifimavawbff700rzjibsnr16am6902gp965scvi1iy78754ia")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt2.patch" "a49fd7eb57ba" "1dyh0pjdmf64sjbj1x0mdjwfispacx9yny1kx9nzpf85myryr640")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt3.patch" "9707c3423a1e" "12nn8av0akza4ml1is9mfy8f7368mrkxsl32ly97r4irzh0iryh1")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt4.patch" "9d632865560a" "1msp1wqv0c317wqkm82hd9ajbg4a5mcr8pld5j8cx37ccv7f21g3")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt5.patch" "90697781ec9f" "1h6gcrw5ykf7r59phxqkhpfs7jsgzqn509qm43sj7mbpcvqvk5mg")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt6.patch" "dd9eb81853b9" "1lyqnn40sayziych8gqd5aj7il3zajf318y8ddj8dzz3c8id5dzc")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt7.patch" "d91fc76079e0" "022lhixa8dxa6ny9a4bh2di282i0lhyq0glqr9n4q3r8msfmf0ba")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt8.patch" "3e37ba5e0867" "1w8lncxaayq4xndhyp1hwlv00zggbayljq6rlypb8kdwgzfpi77w")
+         ,(mozilla-patch "icecat-CVE-2016-5257-pt9.patch" "3c4958a98908" "16bc6ai5qddnpm3yw24lry5s7i05xs0ycixzxiir4wmcgwcaayiy")
+         ,(mozilla-patch "icecat-CVE-2016-5261.patch"     "bc2f5467b33d" "0i4b8ydmqg4blx541f56g9qrlm7gp6ih4cs7ixbds724cwk83b9f")
+         ,(mozilla-patch "icecat-CVE-2016-5270.patch"     "7cd50d56bb61" "15nbp5axr59mczxgf37nli37jbw0jdknmxz7z71772pzjd2z07r9")
+         ,(mozilla-patch "icecat-CVE-2016-5272.patch"     "6e43a01fee3c" "025xp1wdnz1gc5l2rsgbrwsh1pbysjiyfgz0g6rvr390r7ag1n74")
+         ,(mozilla-patch "icecat-CVE-2016-5274.patch"     "10c9453407de" "1wqh6hj0dpa7r3hhlyrflcv3r3cg0xq4rb0zvhysi6l7lwb8q51r")
+         ,(mozilla-patch "icecat-CVE-2016-5276.patch"     "fc818ab03f15" "1q64ipl172dcmyy9p8p3l3ljpdh1q1jg48lai0qn2xgknl7sdpks")
+         ,(mozilla-patch "icecat-CVE-2016-5277.patch"     "7b668c5cec92" "1qmchn6qifgjakzac6i4hgnivy062pzgz9p1l11c1m3an1rh0isg")
+         ,(mozilla-patch "icecat-CVE-2016-5278.patch"     "fd5052e343df" "1nzmzlnsz61w9aw4mjvgmlkz88aqv1w858rr0mbv07hwyrljfi84")
+         ,(mozilla-patch "icecat-CVE-2016-5280.patch"     "30673bc9730b" "1qz1684v1rp86ngadcaqd68iqf472flnrnk971ryg4fbsyy8g1za")
+         ,(mozilla-patch "icecat-CVE-2016-5281-pt1.patch" "61405f1fd1df" "1fgmq67arwsl1nrl133fcb5cz6jbbcfjvbv8cd8cadhapin971a7")
+         ,(mozilla-patch "icecat-CVE-2016-5281-pt2.patch" "7776b6ec7b92" "1f7k8f4lk7nyghwajsxf6nb7yvzsaw3jwpa3316znsva12m548mn")
+         ,(mozilla-patch "icecat-CVE-2016-5284-pt1.patch" "55e768767416" "1gg7m12njbkn1jqf2gp2y7zd9ik3xhqkjb7znczna4l438h7ki83")
+         ,(mozilla-patch "icecat-CVE-2016-5284-pt2.patch" "3c42249975a5" "0gnanndkmhsp49rldv4kh0smkdcs7616v46hn567kfw8yfwqvnli")
+         ,(mozilla-patch "icecat-CVE-2016-5284-pt3.patch" "126e5d574811" "13gr08bzqy23adz0ciihb7cy9wdnkcn71i77a3y5b5apm6k54mwi")
+         ,(mozilla-patch "icecat-CVE-2016-5284-pt4.patch" "7b8bd7aae1a8" "0mq5gpq6ni8czfcs1rif4is0igh0054aw41ga0jqkq58g7lavkrf")
+         ,(mozilla-patch "icecat-CVE-2016-5284-pt5.patch" "0799490f4e6f" "1ypv6i48nabbhcqbach8fbgz9bmnhm7q5z9dnfid44z8g54l3f33")
+         ,(mozilla-patch "icecat-CVE-2016-5284-pt6.patch" "fc990e4ae8bc" "1s2cj505ajwwiy4xvn5zlmyzqpgahxmqqvis0a6xm6mjbjh02gm4")
+         ,(mozilla-patch "icecat-bug-1251088.patch"       "5ffa912ed83e" "0v5lpv3c89c2d4y5acn0kyijv096axdnrvaj5ya5yypzfcaqxv24")
+         ,(mozilla-patch "icecat-bug-1292590.patch"       "d4b5b8f3e373" "0w8cxn6ryhgxryy8k8i06yw4mknv509ns9ff1avd0hmgxa83mcdp")
+         ,(mozilla-patch "icecat-bug-1298169.patch"       "adce603ae36d" "0mgs85cwx61bk17r7npl311l4m8yn4667wyhgjmm2ajiys6nn0yl")
+         ,(mozilla-patch "icecat-bug-1301496.patch"       "97268426bb6f" "1z7hg796cgag025gm9pp2szz7w870s7naagdri1dlsilj797v8hr")
+         ,(mozilla-patch "icecat-bug-1299519.patch"       "fc055950b6b8" "05iml5k3rzc653jk4imd111sh18625jxfxkcj12kjdihl0gdr4x4")
+         ,(mozilla-patch "icecat-bug-1303710.patch"       "6f845c23565b" "01dlbnmpsnwr448fajs276y62gl03r74k1hxnwsg6ihwhnfdvn5a")
+         ,(mozilla-patch "icecat-bug-1301343.patch"       "e5d51ca7a3c0" "0hshcz24hc6pkz5pcqxhajm17ibwrlfn1s00frfnpjjy56vacfz0")
+         ,(mozilla-patch "icecat-bug-1299686.patch"       "576f1725a57e" "1lic9d3r8r1vcniw1g3ca71390lw3dmwjsw55dp6z96hyjbcq3fd")))
       (modules '((guix build utils)))
       (snippet
        '(begin
+          (use-modules (ice-9 ftw))
           ;; Remove bundled libraries that we don't use, since they may
           ;; contain unpatched security flaws, they waste disk space and
           ;; network bandwidth, and may cause confusion.
@@ -358,6 +392,12 @@ standards.")
                       "gfx/cairo"
                       "js/src/ctypes/libffi"
                       "db/sqlite3"))
+          ;; Delete .pyc files, typically present in icecat source tarballs
+          (for-each delete-file (find-files "." "\\.pyc$"))
+          ;; Delete obj-* directories, found in icecat-45.3.0-gnu1-beta
+          (for-each delete-file-recursively
+                    (scandir "." (lambda (name)
+                                   (string-prefix? "obj-" name))))
           #t))))
     (build-system gnu-build-system)
     (inputs
@@ -391,7 +431,21 @@ standards.")
        ("mit-krb5" ,mit-krb5)
        ("nspr" ,nspr)
        ("nss" ,nss)
-       ("sqlite" ,sqlite)
+
+       ;; XXX Work around the fact that our 'sqlite' package was not built
+       ;;     with -DSQLITE_ENABLE_DBSTAT_VTAB.
+       ("sqlite" ,(package
+                    (inherit sqlite)
+                    (arguments
+                     `(#:configure-flags
+                       ;; Add -DSQLITE_SECURE_DELETE, -DSQLITE_ENABLE_UNLOCK_NOTIFY and
+                       ;; -DSQLITE_ENABLE_DBSTAT_VTAB to CFLAGS.  GNU Icecat will refuse
+                       ;; to use the system SQLite unless these options are enabled.
+                       (list (string-append "CFLAGS=-O2 -DSQLITE_SECURE_DELETE "
+                                            "-DSQLITE_ENABLE_UNLOCK_NOTIFY "
+                                            "-DSQLITE_ENABLE_DBSTAT_VTAB"))))))
+       ;;("sqlite" ,sqlite)
+
        ("startup-notification" ,startup-notification)
        ("unzip" ,unzip)
        ("yasm" ,yasm)
@@ -401,7 +455,8 @@ standards.")
      `(("perl" ,perl)
        ("python" ,python-2) ; Python 3 not supported
        ("python2-pysqlite" ,python2-pysqlite)
-       ("pkg-config" ,pkg-config)))
+       ("pkg-config" ,pkg-config)
+       ("which" ,which)))
     (arguments
      `(#:tests? #f          ; no check target
        #:out-of-source? #t  ; must be built outside of the source directory
@@ -432,6 +487,11 @@ standards.")
                            "--disable-debug"
                            "--disable-debug-symbols"
 
+                           ;; Temporary hack to work around missing
+                           ;; "unofficial" branding in
+                           ;; icecat-45.3.0-gnu1-beta.
+                           "--enable-official-branding"
+
                            ;; Avoid bundled libraries.
                            "--with-system-zlib"
                            "--with-system-bz2"
@@ -597,5 +657,4 @@ features built-in privacy-protecting features.")
     (properties
      `((ftp-directory . "/gnu/gnuzilla")
        (cpe-name . "firefox_esr")
-       (cpe-version . ,(string-drop-right version
-                                          (string-length "-gnu1")))))))
+       (cpe-version . ,(first (string-split version #\-)))))))
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index e1b27519e0..6bb5e87a94 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -219,6 +219,7 @@ without requiring the source code to be rewritten.")
               (snippet '(for-each delete-file
                                   (find-files "prebuilt" "\\.go$")))))
     (synopsis "Snapshot of what will become version 2.2 of GNU Guile")
+    (properties '((timeout . 72000)))  ; 20 hours
     (native-search-paths
      (list (search-path-specification
             (variable "GUILE_LOAD_PATH")
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index cf17c4f3d8..52e4bc3484 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -1170,12 +1170,10 @@ version 1.3).")
     (build-system haskell-build-system)
     (inputs
      `(("ghc-blaze-builder" ,ghc-blaze-builder)
-       ("ghc-directory" ,ghc-directory)
        ("ghc-network" ,ghc-network)
        ("ghc-random" ,ghc-random)
        ("ghc-stm" ,ghc-stm)
        ("ghc-text" ,ghc-text)
-       ("ghc-transformers" ,ghc-transformers)
        ("ghc-zlib" ,ghc-zlib)))
     (native-inputs
      `(("ghc-quickcheck" ,ghc-quickcheck)
@@ -6320,6 +6318,204 @@ definition lists, tables, and other features.  A compatibility mode is
 provided for those who need a drop-in replacement for Markdown.pl.")
     (license license:gpl2+)))
 
+(define-public ghc-hs-bibutils
+  (package
+    (name "ghc-hs-bibutils")
+    (version "5.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/hs-bibutils/hs-bibutils-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0pf5lh179rw9jkmw16ss3kiwydlj6zgfk868mjl5s57kx55z7ycm"))))
+    (build-system haskell-build-system)
+    (inputs `(("ghc-syb" ,ghc-syb)))
+    (home-page "https://hackage.haskell.org/package/hs-bibutils")
+    (synopsis "Haskell bindings to bibutils")
+    (description
+     "This package provides Haskell bindings to @code{bibutils}, a library
+that interconverts between various bibliography formats using a common
+MODS-format XML intermediate.")
+    (license license:gpl2+)))
+
+(define-public ghc-rfc5051
+  (package
+    (name "ghc-rfc5051")
+    (version "0.1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/rfc5051/"
+                           "rfc5051-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0av4c3qvwbkbzrjrrg601ay9pds7wscqqp2lc2z78mv2lllap3g3"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/rfc5051")
+    (synopsis "Simple unicode collation as per RFC5051")
+    (description
+     "This library implements @code{unicode-casemap}, the simple, non
+locale-sensitive unicode collation algorithm described in RFC 5051.  Proper
+unicode collation can be done using @code{text-icu}, but that is a big
+dependency that depends on a large C library, and @code{rfc5051} might be
+better for some purposes.")
+    (license license:bsd-3)))
+
+(define-public ghc-conduit-extra
+  (package
+    (name "ghc-conduit-extra")
+    (version "1.1.13.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "conduit-extra/conduit-extra-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "108vsn9dpsfwvar7nssw6wkqy26rxlf3p4ran6swa5xh8l6d5k4z"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-conduit" ,ghc-conduit)
+       ("ghc-exceptions" ,ghc-exceptions)
+       ("ghc-monad-control" ,ghc-monad-control)
+       ("ghc-text" ,ghc-text)
+       ("ghc-transformers-base" ,ghc-transformers-base)
+       ("ghc-async" ,ghc-async)
+       ("ghc-attoparsec" ,ghc-attoparsec)
+       ("ghc-blaze-builder" ,ghc-blaze-builder)
+       ("ghc-network" ,ghc-network)
+       ("ghc-primitive" ,ghc-primitive)
+       ("ghc-resourcet" ,ghc-resourcet)
+       ("ghc-stm" ,ghc-stm)
+       ("ghc-streaming-commons" ,ghc-streaming-commons)
+       ("ghc-hspec" ,ghc-hspec)
+       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
+       ("ghc-quickcheck" ,ghc-quickcheck)))
+    (native-inputs
+     `(("hspec-discover" ,hspec-discover)))
+    (home-page "http://github.com/snoyberg/conduit")
+    (synopsis "Conduit adapters for common libraries")
+    (description
+     "The @code{conduit} package itself maintains relative small dependencies.
+The purpose of this package is to collect commonly used utility functions
+wrapping other library dependencies, without depending on heavier-weight
+dependencies.  The basic idea is that this package should only depend on
+@code{haskell-platform} packages and @code{conduit}.")
+    (license license:expat)))
+
+(define-public ghc-xml-types
+  (package
+    (name "ghc-xml-types")
+    (version "0.3.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/xml-types/"
+                           "xml-types-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1jgqxsa9p2q3h6nymbfmvhldqrqlwrhrzmwadlyc0li50x0d8dwr"))))
+    (build-system haskell-build-system)
+    (inputs `(("ghc-text" ,ghc-text)))
+    (home-page "https://john-millikin.com/software/haskell-xml/")
+    (synopsis "Basic types for representing XML")
+    (description "This package provides basic types for representing XML
+documents.")
+    (license license:expat)))
+
+(define-public ghc-xml-conduit
+  (package
+    (name "ghc-xml-conduit")
+    (version "1.3.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/xml-conduit/"
+                           "xml-conduit-" version ".tar.gz"))
+       (sha256
+        (base32
+         "10yw8jiksw21jgwqjjd1ixflavcblisgkp9qq3ba05vadc35lqr5"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-conduit" ,ghc-conduit)
+       ("ghc-conduit-extra" ,ghc-conduit-extra)
+       ("ghc-resourcet" ,ghc-resourcet)
+       ("ghc-text" ,ghc-text)
+       ("ghc-xml-types" ,ghc-xml-types)
+       ("ghc-attoparsec" ,ghc-attoparsec)
+       ("ghc-blaze-builder" ,ghc-blaze-builder)
+       ("ghc-blaze-markup" ,ghc-blaze-markup)
+       ("ghc-blaze-html" ,ghc-blaze-html)
+       ("ghc-data-default" ,ghc-data-default)
+       ("ghc-monad-control" ,ghc-monad-control)
+       ("ghc-hspec" ,ghc-hspec)
+       ("ghc-hunit" ,ghc-hunit)))
+    (home-page "http://github.com/snoyberg/xml")
+    (synopsis "Utilities for dealing with XML with the conduit package")
+    (description
+     "This package provides pure-Haskell utilities for dealing with XML with
+the @code{conduit} package.")
+    (license license:expat)))
+
+(define-public ghc-pandoc-citeproc
+  (package
+    (name "ghc-pandoc-citeproc")
+    (version "0.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://hackage.haskell.org/package/"
+                           "pandoc-citeproc/pandoc-citeproc-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "00mprphppk51ylsrkg817mbk23f9fsfvkwzbys9qqbcjbrxi2r94"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Tests need to be run after installation.
+         (delete 'check)
+         (add-after 'install 'post-install-check
+           (assoc-ref %standard-phases 'check)))))
+    (inputs
+     `(("ghc-mtl" ,ghc-mtl)
+       ("ghc-pandoc-types" ,ghc-pandoc-types)
+       ("ghc-pandoc" ,ghc-pandoc)
+       ("ghc-tagsoup" ,ghc-tagsoup)
+       ("ghc-aeson" ,ghc-aeson)
+       ("ghc-text" ,ghc-text)
+       ("ghc-vector" ,ghc-vector)
+       ("ghc-xml-conduit" ,ghc-xml-conduit)
+       ("ghc-unordered-containers" ,ghc-unordered-containers)
+       ("ghc-data-default" ,ghc-data-default)
+       ("ghc-setenv" ,ghc-setenv)
+       ("ghc-split" ,ghc-split)
+       ("ghc-yaml" ,ghc-yaml)
+       ("ghc-hs-bibutils" ,ghc-hs-bibutils)
+       ("ghc-rfc5051" ,ghc-rfc5051)
+       ("ghc-syb" ,ghc-syb)
+       ("ghc-parsec" ,ghc-parsec)
+       ("ghc-old-locale" ,ghc-old-locale)
+       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
+       ("ghc-attoparsec" ,ghc-attoparsec)
+       ("ghc-temporary" ,ghc-temporary)))
+    (home-page "https://github.com/jgm/pandoc-citeproc")
+    (synopsis "Library for using pandoc with citeproc")
+    (description
+     "The @code{pandoc-citeproc} library exports functions for using the
+citeproc system with pandoc.  It relies on @code{citeproc-hs}, a library for
+rendering bibliographic reference citations into a variety of styles using a
+macro language called @dfn{Citation Style Language} (CSL).  This package also
+contains an executable @code{pandoc-citeproc}, which works as a pandoc filter,
+and also has a mode for converting bibliographic databases a YAML format
+suitable for inclusion in pandoc YAML metadata.")
+    (license license:bsd-3)))
+
 (define-public ghc-union-find
   (package
     (name "ghc-union-find")
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 920a293dbf..7f4327badc 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -636,12 +636,15 @@ graphics image formats like PNG, BMP, JPEG, TIFF and others.")
                              "/lib/python2.7/site-packages")
               ;; OpenEXR is not enabled by default.
               "-DWITH_OPENEXR=1"
+              ;; Fix rounding error on 32-bit machines
+              "-DCMAKE_C_FLAGS=-ffloat-store"
               ;; The header files of ilmbase are not found when included
               ;; by the header files of openexr, and an explicit flag
               ;; needs to be set.
               (string-append "-DCMAKE_CXX_FLAGS=-I"
                              (assoc-ref %build-inputs "ilmbase")
-                             "/include/OpenEXR"))))
+                             "/include/OpenEXR"
+                             " -ffloat-store"))))
    (synopsis "Computer vision library")
    (description
     "VIGRA stands for Vision with Generic Algorithms.  It is an image
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index ba073bc771..a516629dbf 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014 Kevin Lemonnier <lemonnierk@ulrar.net>
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +26,7 @@
   #:use-module (guix packages)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages autogen)
@@ -48,7 +49,8 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages tcl)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages web))
 
 (define-public quassel
   (package
@@ -291,3 +293,39 @@ and extensible with plugins and scripts.")
     (description
      "sic is a simple IRC client, even more minimalistic than ii.")
     (license license:expat)))
+
+(define-public limnoria
+  (package
+    (name "limnoria")
+    (version "2016.08.07")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "limnoria" version))
+       (sha256
+        (base32
+         "0w1d98hfhn4iqrczam7zahhqsvxa79n3xfcrm4jwkg5lba4f9ccm"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-pytz" ,python-pytz)
+       ("python-chardet" ,python-chardet)
+       ("python-dateutil" ,python-dateutil)
+       ("python-gnupg" ,python-gnupg)
+       ("python-feedparser" ,python-feedparser)
+       ("python-sqlalchemy" ,python-sqlalchemy)
+       ("python-socksipy-branch" ,python-socksipy-branch)
+       ("python-ecdsa" ,python-ecdsa)))
+    (native-inputs
+     `(("python-mock" ,python-mock)))
+    ;; Despite the existence of a test folder there is no test phase.
+    ;; We need to package https://github.com/ProgVal/irctest and write
+    ;; our own testphase.
+    (arguments
+     `(#:tests? #f))
+    (home-page "https://github.com/ProgVal/Limnoria")
+    (synopsis "Modified version of Supybot (an IRC bot and framework)")
+    (description
+     "Modified version of Supybot with Python 3 and IRCv3 support,
+embedded web server, translations (fr, fi, it, hu, de), and many
+other enhancements and bug fixes.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/libupnp.scm b/gnu/packages/libupnp.scm
index 2f9a5741d7..b9209bf04b 100644
--- a/gnu/packages/libupnp.scm
+++ b/gnu/packages/libupnp.scm
@@ -17,6 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages libupnp)
+  #:use-module (gnu packages)
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
@@ -31,6 +32,7 @@
       (method url-fetch)
       (uri (string-append "mirror://sourceforge/pupnp/pupnp/libUPnP%20"
                           version "/" name "-" version ".tar.bz2"))
+      (patches (search-patches "libupnp-CVE-2016-6255.patch"))
       (sha256
        (base32
         "0qrsdsb1qm85hc4jy04qph895613d148f0x1mmk6z99y3q43fdgf"))))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index b77ca774b4..58b74f487c 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -34,6 +34,7 @@
 
 (define-module (gnu packages linux)
   #:use-module (gnu packages)
+  #:use-module (gnu packages acl)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages attr)
@@ -321,14 +322,14 @@ It has been modified to remove all non-free binary blobs.")
 (define %intel-compatible-systems '("x86_64-linux" "i686-linux"))
 
 (define-public linux-libre
-  (make-linux-libre "4.8"
-                    "0fnax2qb597zg2gchab9n9fn7551vccmqfcvq5k3ckz24y50yknm"
+  (make-linux-libre "4.8.1"
+                    "0l57ab8v52nvx4d898qfvkl7c6zlrm7qd080z6jg0bg0adn4w5lf"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.23"
-                    "07akixpxlcrpfsadnppyk2hbggqf7j2hzlkg56k0yh3dhyglxv86"
+  (make-linux-libre "4.4.24"
+                    "1wg1d9rq29612psr5v4krabx7nv1y1gzfshq7wpx6i1lpqf3lill"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -339,8 +340,8 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 ;; Avoid rebuilding kernel variants when there is a minor version bump.
-(define %linux-libre-version "4.7.6")
-(define %linux-libre-hash "0716lpzq3w2pdc0nrrx06gqzdfzhkrjq7g37v4ws9wjlzak8hkvy")
+(define %linux-libre-version "4.8.1")
+(define %linux-libre-hash "0l57ab8v52nvx4d898qfvkl7c6zlrm7qd080z6jg0bg0adn4w5lf")
 
 (define-public linux-libre-arm-generic
   (make-linux-libre %linux-libre-version
@@ -1657,14 +1658,14 @@ time.")
 (define-public lvm2
   (package
     (name "lvm2")
-    (version "2.02.109")
+    (version "2.02.166")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://sources.redhat.com/pub/lvm2/releases/LVM2."
                                   version ".tgz"))
               (sha256
                (base32
-                "1rv5ivg0l1w3nwzwdkqixm96h5bzg7ib4rr196ysb2lw42jmpjbv"))
+                "150v0mawd2swdvypcmkjd3h3s4n5i1220h6sxx94a8jvp1kb0871"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1683,16 +1684,27 @@ time.")
     (inputs
      `(("udev" ,eudev)))
     (arguments
-     '(#:phases (alist-cons-after
-                 'configure 'set-makefile-shell
-                 (lambda _
-                   ;; Use 'sh', not 'bash', so that '. lib/utils.sh' works as
-                   ;; expected.
-                   (setenv "SHELL" (which "sh"))
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'set-makefile-shell
+           (lambda _
+             ;; Use 'sh', not 'bash', so that '. lib/utils.sh' works as
+             ;; expected.
+             (setenv "SHELL" (which "sh"))
 
-                   ;; Replace /bin/sh with the right file name.
-                   (patch-makefile-SHELL "make.tmpl"))
-                 %standard-phases)
+             ;; Replace /bin/sh with the right file name.
+             (patch-makefile-SHELL "make.tmpl")
+             #t))
+         (add-before 'strip 'make-objects-writable
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Make compiled objects writable so they can be stripped.
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (lambda (file)
+                           (chmod file #o755))
+                         (append
+                           (find-files (string-append out "/lib"))
+                           (find-files (string-append out "/sbin"))))
+               #t))))
 
        #:configure-flags (list (string-append "--sysconfdir="
                                               (assoc-ref %outputs "out")
@@ -2996,3 +3008,35 @@ and other hardware errors on x86 systems.  It can also perform user-defined
 tasks, such as bringing bad pages off-line, when configurable error thresholds
 are exceeded.")
     (license license:gpl2)))
+
+(define-public mtd-utils
+  (package
+    (name "mtd-utils")
+    (version "1.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.infradead.org/pub/mtd-utils/"
+                    "mtd-utils-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "007lhsd8yb34l899r4m37whhzdw815cz4fnjbpnblfha524p7dax"))))
+    (inputs
+     `(("acl" ,acl)
+       ("libuuid" ,util-linux)
+       ("lzo", lzo)
+       ("zlib" ,zlib)))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "tests"
+       #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (synopsis "MTD Flash Storage Utilities")
+    (description "This package provides utilities for testing, partitioning, etc
+of flash storage.")
+    (home-page "http://www.linux-mtd.infradead.org/")
+    (license
+      (list license:gpl2 ; Almost everything is gpl2 or gpl2+
+            license:mpl1.1 ; All ftl* files
+            license:expat)))) ; libiniparser
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 2e50897594..d0837606f3 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -33,6 +33,8 @@
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system asdf)
+  #:use-module (guix build-system trivial)
   #:use-module (gnu packages base)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages bdw-gc)
@@ -47,6 +49,17 @@
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
+(define (asdf-substitutions lisp)
+  ;; Prepend XDG_DATA_DIRS/LISP-bundle-systems to ASDF's
+  ;; 'default-system-source-registry'.
+  `((("\\(,dir \"systems/\"\\)\\)")
+     (format #f
+             "(,dir \"~a-bundle-systems\")))
+
+      ,@(loop :for dir :in (xdg-data-dirs \"common-lisp/\")
+              :collect `(:directory (,dir \"systems\"))"
+             ,lisp))))
+
 (define-public gcl
   (package
     (name "gcl")
@@ -112,7 +125,12 @@ interface to the Tk widget system.")
              "https://common-lisp.net/project/ecl/static/files/release/"
              name "-" version ".tgz"))
        (sha256
-        (base32 "16ab8qs3awvdxy8xs8jy82v8r04x4wr70l9l2j45vgag18d2nj1d"))))
+        (base32 "16ab8qs3awvdxy8xs8jy82v8r04x4wr70l9l2j45vgag18d2nj1d"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Add ecl-bundle-systems to 'default-system-source-registry'.
+        `(substitute* "contrib/asdf/asdf.lisp"
+           ,@(asdf-substitutions name)))))
     (build-system gnu-build-system)
     ;; src/configure uses 'which' to confirm the existence of 'gzip'.
     (native-inputs `(("which" ,which)))
@@ -153,6 +171,10 @@ interface to the Tk widget system.")
                  `("LIBRARY_PATH" suffix ,library-directories)
                  `("LD_LIBRARY_PATH" suffix ,library-directories)))))
          (add-after 'wrap 'check (assoc-ref %standard-phases 'check)))))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XDG_DATA_DIRS")
+            (files '("share")))))
     (home-page "http://ecls.sourceforge.net/")
     (synopsis "Embeddable Common Lisp")
     (description "ECL is an implementation of the Common Lisp language as
@@ -226,7 +248,12 @@ an interpreter, a compiler, a debugger, and much more.")
        (uri (string-append "mirror://sourceforge/sbcl/sbcl/" version "/sbcl-"
                            version "-source.tar.bz2"))
        (sha256
-        (base32 "0fjdqnb2rsm2vi9794ywp27jr239ddvzc4xfr0dk49jd4v7p2kc5"))))
+        (base32 "0fjdqnb2rsm2vi9794ywp27jr239ddvzc4xfr0dk49jd4v7p2kc5"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Add sbcl-bundle-systems to 'default-system-source-registry'.
+        `(substitute* "contrib/asdf/asdf.lisp"
+           ,@(asdf-substitutions name)))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     ;; Bootstrap with CLISP.
@@ -315,6 +342,10 @@ an interpreter, a compiler, a debugger, and much more.")
                #t))))
          ;; No 'check' target, though "make.sh" (build phase) runs tests.
          #:tests? #f))
+    (native-search-paths
+     (list (search-path-specification
+            (variable "XDG_DATA_DIRS")
+            (files '("share")))))
     (home-page "http://www.sbcl.org/")
     (synopsis "Common Lisp implementation")
     (description "Steel Bank Common Lisp (SBCL) is a high performance Common
@@ -492,3 +523,552 @@ simple, elegant Scheme dialect.  It is a lisp-1 with lexical scope.
 The core is 12 builtin special forms and 33 builtin functions.")
       (home-page "https://github.com/JeffBezanson/femtolisp")
       (license license:bsd-3))))
+
+(define-public sbcl-alexandria
+  (let ((revision "1")
+        (commit "926a066611b7b11cb71e26c827a271e500888c30"))
+    (package
+      (name "sbcl-alexandria")
+      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://gitlab.common-lisp.net/alexandria/alexandria.git")
+               (commit commit)))
+         (sha256
+          (base32
+           "18yncicdkh294j05rhgm23gzi36y9qy6vrfba8vg69jrxjp1hx8l"))
+         (file-name (string-append "alexandria-" version "-checkout"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Collection of portable utilities for Common Lisp")
+      (description
+       "Alexandria is a collection of portable utilities.  It does not contain
+conceptual extensions to Common Lisp.  It is conservative in scope, and
+portable between implementations.")
+      (home-page "https://common-lisp.net/project/alexandria/")
+      (license license:public-domain))))
+
+(define-public cl-alexandria
+  (sbcl-package->cl-source-package sbcl-alexandria))
+
+(define-public ecl-alexandria
+  (sbcl-package->ecl-package sbcl-alexandria))
+
+(define-public sbcl-fiveam
+  (package
+    (name "sbcl-fiveam")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/sionescu/fiveam/archive/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0f48pcbhqs3wwwzjl5nk57d4hcbib4l9xblxc66b8c2fhvhmhxnv"))
+       (file-name (string-append "fiveam-" version ".tar.gz"))))
+    (inputs `(("sbcl-alexandria" ,sbcl-alexandria)))
+    (build-system asdf-build-system/sbcl)
+    (synopsis "Common Lisp testing framework")
+    (description "FiveAM is a simple (as far as writing and running tests
+goes) regression testing framework.  It has been designed with Common Lisp's
+interactive development model in mind.")
+    (home-page "https://common-lisp.net/project/fiveam/")
+    (license license:bsd-3)))
+
+(define-public cl-fiveam
+  (sbcl-package->cl-source-package sbcl-fiveam))
+
+(define-public ecl-fiveam
+  (sbcl-package->ecl-package sbcl-fiveam))
+
+(define-public sbcl-bordeaux-threads
+  (package
+    (name "sbcl-bordeaux-threads")
+    (version "0.8.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/sionescu/bordeaux-threads/archive/v"
+                    version ".tar.gz"))
+              (sha256
+               (base32 "10ryrcx832fwqdawb6jmknymi7wpdzhi30qzx7cbrk0cpnka71w2"))
+              (file-name
+               (string-append "bordeaux-threads-" version ".tar.gz"))))
+    (inputs `(("sbcl-alexandria" ,sbcl-alexandria)))
+    (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam)))
+    (build-system asdf-build-system/sbcl)
+    (synopsis "Portable shared-state concurrency library for Common Lisp")
+    (description "BORDEAUX-THREADS is a proposed standard for a minimal
+MP/Threading interface.  It is similar to the CLIM-SYS threading and lock
+support.")
+    (home-page "https://common-lisp.net/project/bordeaux-threads/")
+    (license license:x11)))
+
+(define-public cl-bordeaux-threads
+  (sbcl-package->cl-source-package sbcl-bordeaux-threads))
+
+(define-public ecl-bordeaux-threads
+  (sbcl-package->ecl-package sbcl-bordeaux-threads))
+
+(define-public sbcl-trivial-gray-streams
+  (let ((revision "1")
+        (commit "0483ade330508b4b2edeabdb47d16ec9437ee1cb"))
+    (package
+      (name "sbcl-trivial-gray-streams")
+      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/trivial-gray-streams/trivial-gray-streams.git")
+           (commit commit)))
+         (sha256
+          (base32 "0m3rpf2x0zmdk3nf1qfa01j6a55vj7gkwhyw78qslcgbjlgh8p4d"))
+         (file-name
+          (string-append "trivial-gray-streams-" version "-checkout"))))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Compatibility layer for Gray streams implementations")
+      (description "Gray streams is an interface proposed for inclusion with
+ANSI CL by David N. Gray.  The proposal did not make it into ANSI CL, but most
+popular CL implementations implement it.  This package provides an extremely
+thin compatibility layer for gray streams.")
+      (home-page "http://www.cliki.net/trivial-gray-streams")
+      (license license:x11))))
+
+(define-public cl-trivial-gray-streams
+  (sbcl-package->cl-source-package sbcl-trivial-gray-streams))
+
+(define-public ecl-trivial-gray-streams
+  (sbcl-package->ecl-package sbcl-trivial-gray-streams))
+
+(define-public sbcl-flexi-streams
+  (package
+    (name "sbcl-flexi-streams")
+    (version "1.0.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/edicl/flexi-streams/archive/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "16grnxvs7vqm5s6myf8a5s7vwblzq1kgwj8i7ahz8vwvihm9gzfi"))
+       (file-name (string-append "flexi-streams-" version ".tar.gz"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs `(("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)))
+    (synopsis "Implementation of virtual bivalent streams for Common Lisp")
+    (description "Flexi-streams is an implementation of \"virtual\" bivalent
+streams that can be layered atop real binary or bivalent streams and that can
+be used to read and write character data in various single- or multi-octet
+encodings which can be changed on the fly.  It also supplies in-memory binary
+streams which are similar to string streams.")
+    (home-page "http://weitz.de/flexi-streams/")
+    (license license:bsd-3)))
+
+(define-public cl-flexi-streams
+  (sbcl-package->cl-source-package sbcl-flexi-streams))
+
+(define-public ecl-flexi-streams
+  (sbcl-package->ecl-package sbcl-flexi-streams))
+
+(define-public sbcl-cl-ppcre
+  (package
+    (name "sbcl-cl-ppcre")
+    (version "2.0.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/edicl/cl-ppcre/archive/v"
+             version ".tar.gz"))
+       (sha256
+        (base32 "1i7daxf0wnydb0pgwiym7qh2wy70n14lxd6dyv28sy0naa8p31gd"))
+       (file-name (string-append "cl-ppcre-" version ".tar.gz"))))
+    (build-system asdf-build-system/sbcl)
+    (native-inputs `(("tests:cl-flexi-streams" ,sbcl-flexi-streams)))
+    (synopsis "Portable regular expression library for Common Lisp")
+    (description "CL-PPCRE is a portable regular expression library for Common
+Lisp, which is compatible with perl.  It is pretty fast, thread-safe, and
+compatible with ANSI-compliant Common Lisp implementations.")
+    (home-page "http://weitz.de/cl-ppcre/")
+    (license license:bsd-2)))
+
+(define-public cl-ppcre
+  (sbcl-package->cl-source-package sbcl-cl-ppcre))
+
+(define-public ecl-cl-ppcre
+  (sbcl-package->ecl-package sbcl-cl-ppcre))
+
+(define-public sbcl-clx
+  (let ((revision "1")
+        (commit "1c62774b03c1cf3fe6e5cb532df8b14b44c96b95"))
+    (package
+      (name "sbcl-clx")
+      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/sharplispers/clx.git")
+           (commit commit)))
+         (sha256
+          (base32 "0qffag03ns52kwq9xjns2qg1yr0bf3ba507iwq5cmx5xz0b0rmjm"))
+         (file-name (string-append "clx-" version "-checkout"))
+         (patches
+          (list
+           (search-patch "clx-remove-demo.patch")))
+         (modules '((guix build utils)))
+         (snippet
+          '(begin
+             ;; These removed files cause the compiled system to crash when
+             ;; loading.
+             (delete-file-recursively "demo")
+             (delete-file "test/trapezoid.lisp")
+             (substitute* "clx.asd"
+               (("\\(:file \"trapezoid\"\\)") ""))))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       '(#:special-dependencies '("sb-bsd-sockets")))
+      (home-page "http://www.cliki.net/portable-clx")
+      (synopsis "X11 client library for Common Lisp")
+      (description "CLX is an X11 client library for Common Lisp.  The code was
+originally taken from a CMUCL distribution, was modified somewhat in order to
+make it compile and run under SBCL, then a selection of patches were added
+from other CLXes around the net.")
+      (license license:x11))))
+
+(define-public cl-clx
+  (sbcl-package->cl-source-package sbcl-clx))
+
+(define-public ecl-clx
+  (sbcl-package->ecl-package sbcl-clx))
+
+(define-public sbcl-stumpwm
+  (package
+    (name "sbcl-stumpwm")
+    (version "0.9.9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/stumpwm/stumpwm/archive/"
+                    version ".tar.gz"))
+              (sha256
+               (base32 "1fqabij4zcsqg1ywgdv2irp1ys23dwc8ms9ai55lb2i47hgv7z3x"))
+              (file-name (string-append "stumpwm-" version ".tar.gz"))))
+    (build-system asdf-build-system/sbcl)
+    (inputs `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
+              ("sbcl-clx" ,sbcl-clx)))
+    (outputs '("out" "bin"))
+    (arguments
+     '(#:special-dependencies '("sb-posix")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'create-symlinks 'build-program
+           (lambda* (#:key lisp outputs inputs #:allow-other-keys)
+             (build-program
+              lisp
+              (string-append (assoc-ref outputs "bin") "/bin/stumpwm")
+              #:inputs inputs
+              #:entry-program '((stumpwm:stumpwm) 0))))
+         (add-after 'build-program 'create-desktop-file
+           (lambda* (#:key outputs lisp binary? #:allow-other-keys)
+             (let ((output (or (assoc-ref outputs "bin")
+                               (assoc-ref outputs "out")))
+                   (xsessions "/share/xsessions"))
+               (mkdir-p (string-append output xsessions))
+               (with-output-to-file
+                   (string-append output xsessions
+                                  "/stumpwm.desktop")
+                 (lambda _
+                   (format #t
+                    "[Desktop Entry]~@
+                     Name=stumpwm~@
+                     Comment=The Stump Window Manager~@
+                     Exec=~a/bin/stumpwm~@
+                     TryExec=~@*~a/bin/stumpwm~@
+                     Icon=~@
+                     Type=Application~%"
+                    output)))
+               #t))))))
+    (synopsis "Window manager written in Common Lisp")
+    (description "Stumpwm is a window manager written entirely in Common Lisp.
+It attempts to be highly customizable while relying entirely on the keyboard
+for input.  These design decisions reflect the growing popularity of
+productive, customizable lisp based systems.")
+    (home-page "http://github.com/stumpwm/stumpwm")
+    (license license:gpl2+)
+    (properties `((ecl-variant . ,(delay ecl-stumpwm))))))
+
+(define-public cl-stumpwm
+  (sbcl-package->cl-source-package sbcl-stumpwm))
+
+(define-public ecl-stumpwm
+  (let ((base (sbcl-package->ecl-package sbcl-stumpwm)))
+    (package
+      (inherit base)
+      (outputs '("out"))
+      (arguments '()))))
+
+(define sbcl-slynk-boot0
+  (let ((revision "1")
+        (commit "5706cd45d484a4f25795abe8e643509d31968aa2"))
+    (package
+      (name "sbcl-slynk")
+      (version (string-append "1.0.0-beta-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (url "https://github.com/joaotavora/sly.git")
+           (commit commit)))
+         (sha256
+          (base32 "0h4gg3sndl2bf6jdnx9nrf14p9hhi43hagrl0f4v4l11hczl8w81"))
+         (file-name (string-append "slynk-" version "-checkout"))
+         (modules '((guix build utils)
+                    (ice-9 ftw)))
+         (snippet
+          '(begin
+             ;; Move the contribs into the main source directory for easier
+             ;; access
+             (substitute* "slynk/slynk.asd"
+               (("\\.\\./contrib")
+                "contrib")
+               (("\\(defsystem :slynk-util")
+                "(defsystem :slynk-util :depends-on (:slynk)"))
+             (substitute* "contrib/slynk-trace-dialog.lisp"
+               (("\\(slynk::reset-inspector\\)") ; Causes problems on load
+                "nil"))
+             (substitute* "contrib/slynk-profiler.lisp"
+               (("slynk:to-line")
+                "slynk-pprint-to-line"))
+             (rename-file "contrib" "slynk/contrib")
+             ;; Move slynk's contents into the base directory for easier
+             ;; access
+             (for-each
+              (lambda (file)
+                (unless (string-prefix? "." file)
+                  (rename-file (string-append "slynk/" file)
+                               (string-append "./" (basename file)))))
+              (scandir "slynk"))))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       `(#:tests? #f)) ; No test suite
+      (synopsis "Common Lisp IDE for Emacs")
+      (description "SLY is a fork of SLIME.  It also features a completely
+redesigned REPL based on Emacs's own full-featured comint.el, live code
+annotations, and a consistent interactive button interface.  Everything can be
+copied to the REPL.  One can create multiple inspectors with independent
+history.")
+      (home-page "https://github.com/joaotavora/sly")
+      (license license:public-domain)
+      (properties `((cl-source-variant . ,(delay cl-slynk)))))))
+
+(define-public cl-slynk
+  (sbcl-package->cl-source-package sbcl-slynk-boot0))
+
+(define ecl-slynk-boot0
+  (sbcl-package->ecl-package sbcl-slynk-boot0))
+
+(define sbcl-slynk-arglists
+  (package
+    (inherit sbcl-slynk-boot0)
+    (name "sbcl-slynk-arglists")
+    (inputs `(("sbcl-slynk" ,sbcl-slynk-boot0)))
+    (arguments
+     `(#:asd-file "slynk.asd"
+       ,@(package-arguments sbcl-slynk-boot0)))))
+
+(define ecl-slynk-arglists
+  (sbcl-package->ecl-package sbcl-slynk-arglists))
+
+(define sbcl-slynk-util
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-util")))
+
+(define ecl-slynk-util
+  (sbcl-package->ecl-package sbcl-slynk-util))
+
+(define sbcl-slynk-fancy-inspector
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-fancy-inspector")
+    (inputs `(("sbcl-slynk-util" ,sbcl-slynk-util)
+              ,@(package-inputs sbcl-slynk-arglists)))))
+
+(define ecl-slynk-fancy-inspector
+  (sbcl-package->ecl-package sbcl-slynk-fancy-inspector))
+
+(define sbcl-slynk-package-fu
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-package-fu")))
+
+(define ecl-slynk-package-fu
+  (sbcl-package->ecl-package sbcl-slynk-package-fu))
+
+(define sbcl-slynk-mrepl
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-mrepl")))
+
+(define ecl-slynk-mrepl
+  (sbcl-package->ecl-package sbcl-slynk-mrepl))
+
+(define sbcl-slynk-trace-dialog
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-trace-dialog")))
+
+(define ecl-slynk-trace-dialog
+  (sbcl-package->ecl-package sbcl-slynk-trace-dialog))
+
+(define sbcl-slynk-profiler
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-profiler")))
+
+(define ecl-slynk-profiler
+  (sbcl-package->ecl-package sbcl-slynk-profiler))
+
+(define sbcl-slynk-stickers
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-stickers")))
+
+(define ecl-slynk-stickers
+  (sbcl-package->ecl-package sbcl-slynk-stickers))
+
+(define sbcl-slynk-indentation
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-indentation")))
+
+(define ecl-slynk-indentation
+  (sbcl-package->ecl-package sbcl-slynk-indentation))
+
+(define sbcl-slynk-retro
+  (package
+    (inherit sbcl-slynk-arglists)
+    (name "sbcl-slynk-retro")))
+
+(define ecl-slynk-retro
+  (sbcl-package->ecl-package sbcl-slynk-retro))
+
+(define slynk-systems
+  '("slynk"
+    "slynk-util"
+    "slynk-arglists"
+    "slynk-fancy-inspector"
+    "slynk-package-fu"
+    "slynk-mrepl"
+    "slynk-profiler"
+    "slynk-trace-dialog"
+    "slynk-stickers"
+    "slynk-indentation"
+    "slynk-retro"))
+
+(define-public sbcl-slynk
+  (package
+    (inherit sbcl-slynk-boot0)
+    (inputs
+     `(("slynk" ,sbcl-slynk-boot0)
+       ("slynk-util" ,sbcl-slynk-util)
+       ("slynk-arglists" ,sbcl-slynk-arglists)
+       ("slynk-fancy-inspector" ,sbcl-slynk-fancy-inspector)
+       ("slynk-package-fu" ,sbcl-slynk-package-fu)
+       ("slynk-mrepl" ,sbcl-slynk-mrepl)
+       ("slynk-profiler" ,sbcl-slynk-profiler)
+       ("slynk-trace-dialog" ,sbcl-slynk-trace-dialog)
+       ("slynk-stickers" ,sbcl-slynk-stickers)
+       ("slynk-indentation" ,sbcl-slynk-indentation)
+       ("slynk-retro" ,sbcl-slynk-retro)))
+    (native-inputs `(("sbcl" ,sbcl)))
+    (build-system trivial-build-system)
+    (source #f)
+    (outputs '("out" "image"))
+    (arguments
+     `(#:modules ((guix build union)
+                  (guix build utils)
+                  (guix build lisp-utils))
+       #:builder
+       (begin
+         (use-modules (ice-9 match)
+                      (srfi srfi-1)
+                      (guix build union)
+                      (guix build lisp-utils))
+
+         (union-build
+          (assoc-ref %outputs "out")
+          (filter-map
+           (match-lambda
+             ((name . path)
+              (if (string-prefix? "slynk" name) path #f)))
+           %build-inputs))
+
+         (prepend-to-source-registry
+          (string-append (assoc-ref %outputs "out") "//"))
+         (build-image "sbcl"
+                      (string-append
+                       (assoc-ref %outputs "image")
+                       "/bin/slynk")
+                      #:inputs %build-inputs
+                      #:dependencies ',slynk-systems))))))
+
+(define-public ecl-slynk
+  (package
+    (inherit sbcl-slynk)
+    (name "ecl-slynk")
+    (inputs
+     (map (match-lambda
+            ((name pkg . _)
+             (list name (sbcl-package->ecl-package pkg))))
+          (package-inputs sbcl-slynk)))
+    (native-inputs '())
+    (outputs '("out"))
+    (arguments
+     '(#:modules ((guix build union))
+       #:builder
+       (begin
+         (use-modules (ice-9 match)
+                      (guix build union))
+         (match %build-inputs
+           (((names . paths) ...)
+            (union-build (assoc-ref %outputs "out")
+                         paths))))))))
+
+(define-public sbcl-stumpwm+slynk
+  (package
+    (inherit sbcl-stumpwm)
+    (name "sbcl-stumpwm-with-slynk")
+    (outputs '("out"))
+    (native-inputs
+     `(("stumpwm" ,sbcl-stumpwm)
+       ("slynk" ,sbcl-slynk)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments sbcl-stumpwm)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'build-program
+             (lambda* (#:key lisp inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (program (string-append out "/bin/stumpwm")))
+                 (build-program lisp program
+                                #:inputs inputs
+                                #:entry-program '((stumpwm:stumpwm) 0)
+                                #:dependencies '("stumpwm"
+                                                 ,@slynk-systems))
+                 ;; Remove unneeded file.
+                 (delete-file (string-append out "/bin/stumpwm-exec.fasl"))
+                 #t)))
+           (delete 'copy-source)
+           (delete 'build)
+           (delete 'check)
+           (delete 'link-dependencies)
+           (delete 'cleanup)
+           (delete 'create-symlinks)))))))
diff --git a/gnu/packages/lynx.scm b/gnu/packages/lynx.scm
index 3182b3e3f9..6e4ed6cd13 100644
--- a/gnu/packages/lynx.scm
+++ b/gnu/packages/lynx.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,14 +34,15 @@
 (define-public lynx
   (package
     (name "lynx")
-    (version "2.8.8rel.2")
+    (version "2.8.9dev.9")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "http://invisible-mirror.net/archives/lynx/tarballs"
                     "/lynx" version ".tar.bz2"))
               (sha256
-               (base32 "1rxysl08acqll5b87368f04kckl8sggy1qhnq59gsxyny1ffg039"))))
+               (base32
+                "1m72ga89hywm097kazcm8w6sqrfjnl83gh31pkbhk4zhzhfpzxgh"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("perl" ,perl)))
@@ -53,19 +55,21 @@
               ("gzip" ,gzip)
               ("bzip2" ,bzip2)))
     (arguments
-     `(#:configure-flags '("--with-pkg-config"
-                           "--with-screen=ncurses"
-                           "--with-zlib"
-                           "--with-bzlib"
-                           "--with-gnutls"
-                           ;; "--with-socks5"    ; XXX TODO
-                           "--enable-widec"
-                           "--enable-ascii-ctypes"
-                           "--enable-local-docs"
-                           "--enable-htmlized-cfg"
-                           "--enable-gzip-help"
-                           "--enable-nls"
-                           "--enable-ipv6")
+     `(#:configure-flags
+       (let ((gnutls (assoc-ref %build-inputs "gnutls")))
+         `("--with-pkg-config"
+           "--with-screen=ncurses"
+           "--with-zlib"
+           "--with-bzlib"
+           ,(string-append "--with-gnutls=" gnutls)
+           ;; "--with-socks5"    ; XXX TODO
+           "--enable-widec"
+           "--enable-ascii-ctypes"
+           "--enable-local-docs"
+           "--enable-htmlized-cfg"
+           "--enable-gzip-help"
+           "--enable-nls"
+           "--enable-ipv6"))
        #:tests? #f  ; no check target
        #:phases (alist-replace
                  'install
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 09c15e267f..baa5a96185 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -302,7 +302,7 @@ and corrections.  It is based on a Bayesian filter.")
 (define-public offlineimap
   (package
     (name "offlineimap")
-    (version "7.0.7")
+    (version "7.0.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/OfflineIMAP/offlineimap/"
@@ -310,7 +310,7 @@ and corrections.  It is based on a Bayesian filter.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1719xnw0xah5knypd5vrpsxi337576q1r8axpziw8wa7zms7abl0"))))
+                "0smxh5ag3cbn92kp49jq950j5m2pivs9kr04prpd1lw62hy7gnhr"))))
     (build-system python-build-system)
     (inputs `(("python2-pysqlite" ,python2-pysqlite)
               ("python2-six" ,python2-six)))
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index ddb7a3e283..2d99438420 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -134,7 +134,7 @@ the traditional flat-text whatis databases.")
 (define-public man-pages
   (package
     (name "man-pages")
-    (version "4.06")
+    (version "4.08")
     (source (origin
               (method url-fetch)
               (uri
@@ -147,7 +147,7 @@ the traditional flat-text whatis databases.")
                     "man-pages-" version ".tar.xz")))
               (sha256
                (base32
-                "0vv056k9yyf05dqal9m2pq3pv9c8lnp7i5rjxvcnic6aq7vyrafb"))))
+                "1d32ki8nkwd2xiln619jihqn7s15ydrg7386n4hxq530sys7svic"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (alist-delete 'configure %standard-phases)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 3bb2a386b0..97f545b8e5 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -483,6 +484,42 @@ extremely large and complex data collections.")
     (license (license:x11-style
               "http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/COPYING"))))
 
+(define-public hdf-eos5
+  (package
+    (name "hdf-eos5")
+    (version "1.15")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "ftp://edhs1.gsfc.nasa.gov\
+/edhs/hdfeos5/latest_release/HDF-EOS5." version ".tar.Z"))
+              (sha256
+               (base32
+                "1p83333nzzy8rn5chxlm0hrkjjnhh2w1ji8ac0f9q4xzg838i58i"))
+              (patches (search-patches "hdf-eos5-build-shared.patch"
+                                       "hdf-eos5-remove-gctp.patch"
+                                       "hdf-eos5-fix-szip.patch"
+                                       "hdf-eos5-fortrantests.patch"))))
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (build-system gnu-build-system)
+    (inputs
+     `(("hdf5" ,hdf5)
+       ("zlib" ,zlib)
+       ("gctp" ,gctp)))
+    (arguments
+     `(#:configure-flags '("--enable-install-include" "--enable-shared"
+                           "CC=h5cc -Df2cFortran" "LIBS=-lgctp")
+       #:parallel-tests? #f))
+    (synopsis "HDF5-based data format for NASA's Earth Observing System")
+    (description
+     "HDF-EOS5 is a software library built on HDF5 to support the construction
+of data structures used in NASA's Earth Observing System (Grid, Point and
+Swath).")
+    (home-page "http://www.hdfeos.org/software/library.php#HDF-EOS5")
+
+    ;; Source files carry a permissive license header.
+    (license (license:non-copyleft home-page))))
+
 (define-public hdf5-parallel-openmpi
   (package (inherit hdf5)
     (name "hdf5-parallel-openmpi")
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 5a618c2742..0089da1112 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
+;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
+  #:use-module (gnu packages aidc)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages check)
@@ -166,14 +168,14 @@ identi.ca and status.net).")
 (define-public hexchat
   (package
     (name "hexchat")
-    (version "2.12.1")
+    (version "2.12.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0svwz9ldrry1sn35jywgpacjj1cf3xl3k74ynwn8rjvxs73b00aj"))))
+                "1xnclfbrgbkqndxygi5f27q00jd7yy54jbd1061jmhxa6wzpibbd"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("intltool" ,intltool)))
@@ -661,6 +663,58 @@ protocols.")
 instant messenger with audio and video chat capabilities.")
    (home-page "http://utox.org/")
    (license license:gpl3)))
+ 
+(define-public qtox
+  (package
+    (name "qtox")
+    (version "1.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/qTox/qTox/archive/v"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0y15mc39x54k1kz36cw9412kl1p1p6nzlx97gagv4gg3vybfhbjv"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (inputs
+     `(("ffmpeg" ,ffmpeg)
+       ("glib" ,glib)
+       ("gtk+" ,gtk+-2)
+       ("libsodium" ,libsodium)
+       ("libtoxcore" ,libtoxcore)
+       ("libvpx" ,libvpx)
+       ("libxscrnsaver" ,libxscrnsaver)
+       ("libx11" ,libx11)
+       ("openal" ,openal)
+       ("qrencode" ,qrencode)
+       ("qt" ,qt)
+       ("sqlcipher" ,sqlcipher)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("qmake" ,qt)))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-reproducibility-issues
+           (lambda _
+             (substitute* "src/main.cpp"
+               (("__DATE__") "\"\"")
+               (("__TIME__") "\"\"")
+               (("TIMESTAMP") "\"\""))
+             #t))
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (zero?
+              (system* "qmake"
+                       (string-append "PREFIX="
+                                      (assoc-ref outputs "out")))))))))
+    (home-page "https://qtox.github.io/")
+    (synopsis "Tox chat client using Qt")
+    (description "qTox is a Tox client that follows the Tox design
+guidelines.  It provides an easy to use application that allows you to
+connect with friends and family without anyone else listening in.")
+    (license license:gpl3+)))
 
 (define-public pybitmessage
   (package
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index adaf78e4a3..40f3948bb6 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -1318,14 +1318,14 @@ browser.")
 (define-public drumstick
   (package
     (name "drumstick")
-    (version "1.0.2")
+    (version "1.1.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/drumstick/"
                                   version "/drumstick-" version ".tar.bz2"))
               (sha256
                (base32
-                "0l47gy9yywrc860db5g3wdqg8yc8qdb2lqq6wvw1dfim5j0vbail"))))
+                "13pkfqrav30bbcddgf1imd7jk6lpqbxkz1qv31718pdl446jq7df"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f  ; no test target
@@ -1457,7 +1457,7 @@ capabilities, custom envelopes, effects, etc.")
 (define-public yoshimi
   (package
     (name "yoshimi")
-    (version "1.3.8.2")
+    (version "1.4.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/yoshimi/"
@@ -1465,7 +1465,7 @@ capabilities, custom envelopes, effects, etc.")
                                   "/yoshimi-" version ".tar.bz2"))
               (sha256
                (base32
-                "0wl4ln6v1nkkx56kfah23chyrhga2vi93i82g0s200c4s4184xr8"))))
+                "133sx42wb66g803pcrgdwph40wh94knvab3yfqkgm0001jv4v14y"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; there are no tests
@@ -1485,7 +1485,17 @@ capabilities, custom envelopes, effects, etc.")
               (("-msse -msse2 -mfpmath=sse") "")
               (("-march=(athlon64|core2)" flag)
                (string-append flag " -msse -msse2 -mfpmath=sse")))
-            #t)))))
+            #t))
+         ;; Yoshimi tries to find ncurses with pkg-config, but our ncurses
+         ;; package does not install .pc files.
+         (add-after 'unpack 'find-ncurses
+           (lambda _
+             (substitute* "src/CMakeLists.txt"
+               (("LIBNCURSES REQUIRED") "LIBNCURSES")
+               (("NCURSES REQUIRED") "NCURSES")
+               (("FATAL_ERROR \"libncurses") "STATUS \"libncurses")
+               (("\\$\\{NCURSES_LIBRARIES\\}") "ncurses"))
+             #t)))))
     (inputs
      `(("boost" ,boost)
        ("fftwf" ,fftwf)
@@ -1575,6 +1585,42 @@ JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
 follows a traditional multi-track tape recorder control paradigm.")
     (license license:gpl2+)))
 
+(define-public gxtuner
+  (package
+    (name "gxtuner")
+    (version "2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/brummer10/gxtuner/"
+                                  "archive/v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1abpxiydn4c9wssz6895hnad9ipkcy3rkgzbnanvwb46nm44x6if"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             (string-append "INCLUDE_L_DIR="
+                            (assoc-ref %build-inputs "zita-resampler")
+                            "/include/"))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure))))
+    (inputs
+     `(("gtk+" ,gtk+-2)
+       ("jack" ,jack-1)
+       ("fftwf" ,fftwf)
+       ("cairo" ,cairo)
+       ("zita-resampler" ,zita-resampler)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/brummer10/gxtuner")
+    (synopsis "Guitar tuner")
+    (description "GXtuner is a simple guitar tuner for JACK with an
+analogue-like user interface.")
+    (license license:gpl2+)))
+
 (define-public pianobar
   (package
     (name "pianobar")
diff --git a/gnu/packages/ncdu.scm b/gnu/packages/ncdu.scm
index da4b587822..b2e2ae2d83 100644
--- a/gnu/packages/ncdu.scm
+++ b/gnu/packages/ncdu.scm
@@ -27,14 +27,14 @@
 (define-public ncdu
   (package
     (name "ncdu")
-    (version "1.11")
+    (version "1.12")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://dev.yorhel.nl/download/ncdu-"
+              (uri (string-append "https://dev.yorhel.nl/download/ncdu-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0yxv87hpal05p6nii6rlnai5a8958689l9vz020w4qvlwiragbnh"))))
+                "16j9fyw73y1lk05a35i4q9i66laklgsx41lz5rxfr8m28x3lw3l2"))))
     (build-system gnu-build-system)
     (inputs `(("ncurses" ,ncurses)))
     (synopsis "Ncurses based disk usage analyzer")
@@ -44,6 +44,6 @@ to do with a simple SSH connection. ncdu aims to be fast, simple and easy to
 use, and should be able to run in any minimal POSIX-like environment with
 ncurses installed.")
     (license (x11-style
-              (string-append "http://g.blicky.net/ncdu.git/plain/COPYING?id=v"
+              (string-append "https://g.blicky.net/ncdu.git/plain/COPYING?id=v"
                              version)))
-    (home-page "http://dev.yorhel.nl/ncdu")))
+    (home-page "https://dev.yorhel.nl/ncdu")))
diff --git a/gnu/packages/patches/clx-remove-demo.patch b/gnu/packages/patches/clx-remove-demo.patch
new file mode 100644
index 0000000000..c5fffea0d0
--- /dev/null
+++ b/gnu/packages/patches/clx-remove-demo.patch
@@ -0,0 +1,27 @@
+--- a/clx.asd	2016-02-16 00:06:48.161596976 -0500
++++ b/clx.asd	2016-02-16 00:06:54.793774658 -0500
+@@ -79,24 +79,6 @@
+                (:file "xtest")
+                (:file "screensaver")
+                (:file "xinerama")))
+-     (:module demo
+-	      :default-component-class example-source-file
+-	      :components
+-	      ((:file "bezier")
+-	       ;; KLUDGE: this requires "bezier" for proper operation,
+-	       ;; but we don't declare that dependency here, because
+-	       ;; asdf doesn't load example files anyway.
+-	       (:file "beziertest")
+-	       (:file "clclock")
+-               (:file "clipboard")
+-	       (:file "clx-demos")
+-	       (:file "gl-test")
+-	       ;; FIXME: compiling this generates 30-odd spurious code
+-	       ;; deletion notes.  Find out why, and either fix or
+-	       ;; workaround the problem.
+-	       (:file "mandel")
+-	       (:file "menu")
+-	       (:file "zoid")))
+      (:module test
+ 	      :default-component-class example-source-file
+ 	      :components
diff --git a/gnu/packages/patches/hdf-eos5-build-shared.patch b/gnu/packages/patches/hdf-eos5-build-shared.patch
new file mode 100644
index 0000000000..f4ae5c73e3
--- /dev/null
+++ b/gnu/packages/patches/hdf-eos5-build-shared.patch
@@ -0,0 +1,31 @@
+Make shared library linking work.
+---
+ src/Makefile.in | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/src/Makefile.in b/src/Makefile.in
+index 86880e5..24efffe 100644
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -72,7 +72,7 @@ LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
+ 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ 	$(AM_CFLAGS) $(CFLAGS) -DH5_USE_16_API
+ CCLD = $(CC)
+-LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++LINK = HDF5_USE_SHLIB=yes $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+ SOURCES = $(libhe5_hdfeos_la_SOURCES)
+ DIST_SOURCES = $(libhe5_hdfeos_la_SOURCES)
+@@ -124,9 +124,6 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
+ INSTALL_SCRIPT = @INSTALL_SCRIPT@
+ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+ 
+-# Set LDFLAGS to allow the HDF-EOS library to use extern variables from
+-# HDF5
+-LDFLAGS = -Wl,-single_module
+ LIBOBJS = @LIBOBJS@
+ LIBS = @LIBS@
+ LIBTOOL = @LIBTOOL@
+-- 
+2.10.0
+
diff --git a/gnu/packages/patches/hdf-eos5-fix-szip.patch b/gnu/packages/patches/hdf-eos5-fix-szip.patch
new file mode 100644
index 0000000000..799f542ef3
--- /dev/null
+++ b/gnu/packages/patches/hdf-eos5-fix-szip.patch
@@ -0,0 +1,30 @@
+Ill-placed #endif causes missing symbol errors when compiling without
+szip.  Reported to upstream maintainer.
+---
+ src/EHapi.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/src/EHapi.c b/src/EHapi.c
+index 46a9b5c..208f447 100755
+--- a/src/EHapi.c
++++ b/src/EHapi.c
+@@ -11379,6 +11379,7 @@ int HE5_szip_can_encode(void )
+   return(-1);
+ }
+ 
++#endif /* H5_HAVE_FILTER_SZIP */
+ 
+ 
+ /*----------------------------------------------------------------------------|
+@@ -11509,8 +11510,6 @@ HE5_EHHEisHE5(char *filename)
+     }
+ }
+ 
+-#endif /* H5_HAVE_FILTER_SZIP */
+-
+ 
+ #ifndef __cplusplus
+ 
+-- 
+2.10.0
+
diff --git a/gnu/packages/patches/hdf-eos5-fortrantests.patch b/gnu/packages/patches/hdf-eos5-fortrantests.patch
new file mode 100644
index 0000000000..7333056342
--- /dev/null
+++ b/gnu/packages/patches/hdf-eos5-fortrantests.patch
@@ -0,0 +1,156 @@
+Fix fortran line length/indentation issues in Fortran test programs.
+Reported to upstream maintainer.
+
+diff --git a/samples/he5_gd_writedataF_32.f b/samples/he5_gd_writedataF_32.f
+index 515edf9..9c86299 100755
+--- a/samples/he5_gd_writedataF_32.f
++++ b/samples/he5_gd_writedataF_32.f
+@@ -77,26 +77,26 @@ c           ------------------------------
+ 
+ 		attr4 = "ABCDEFGH"
+ 		count(1) = 8
+-		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR"
++     &               ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_gdwrattr():  ',status
+ 
+ 		attr4 = "111"
+ 		count(1) = 3
+-		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1"
++     &               ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_gdwrgattr():  ',status
+ 
+ 		attr4 = "222222"
+ 		count(1) = 6
+-		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2"
++     &               ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_ehwrglatt():  ',status
+ 
+ 		attr5 = "abcdefgh111111111111"
+ 		count(1) = 20
+-		status = he5_gdwrlattr(gdid,"Vegetation","LocalAttribute_0",
+-	1	HE5T_NATIVE_CHAR,count,attr5)
++		status = he5_gdwrlattr(gdid,"Vegetation"
++     &               ,"LocalAttribute_0",HE5T_NATIVE_CHAR,count,attr5)
+ 	write(*,*) 'Status returned by he5_gdwrlattr():  ',status
+ 
+ 		 endif
+diff --git a/samples/he5_gd_writedataF_64.f b/samples/he5_gd_writedataF_64.f
+index eff04f5..62a7398 100755
+--- a/samples/he5_gd_writedataF_64.f
++++ b/samples/he5_gd_writedataF_64.f
+@@ -77,26 +77,26 @@ c           ------------------------------
+ 
+ 		attr4 = "ABCDEFGH"
+ 		count(1) = 8
+-		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR"
++     &               ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_gdwrattr():  ',status
+ 
+ 		attr4 = "111"
+ 		count(1) = 3
+-		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1"
++     &               ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_gdwrgattr():  ',status
+ 
+ 		attr4 = "222222"
+ 		count(1) = 6
+-		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2"
++     &               ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_ehwrglatt():  ',status
+ 
+ 		attr5 = "abcdefgh111111111111"
+ 		count(1) = 20
+-		status = he5_gdwrlattr(gdid,"Vegetation","LocalAttribute_0",
+-	1	HE5T_NATIVE_CHAR,count,attr5)
++		status = he5_gdwrlattr(gdid,"Vegetation"
++     &               ,"LocalAttribute_0",HE5T_NATIVE_CHAR,count,attr5)
+ 	write(*,*) 'Status returned by he5_gdwrlattr():  ',status
+ 
+ 		 endif
+diff --git a/samples/he5_sw_writedataF_32.f b/samples/he5_sw_writedataF_32.f
+index 7abab9b..fedd49a 100755
+--- a/samples/he5_sw_writedataF_32.f
++++ b/samples/he5_sw_writedataF_32.f
+@@ -173,20 +173,21 @@ c     Write Global Attribute
+ c     ----------------------
+ 			attr4 = "ABCDEFGH"
+ 			count(1) = 8
+-			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR"
++     &                       ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_swwrattr():  ',status
+ 
+ 			attr4 = "111"
+ 			count(1) = 3
+-			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1"
++     &                       ,HE5T_NATIVE_CHAR,count,attr4)
+ 	write(*,*) 'Status returned by he5_swwrgattr():  ',status
+ 
+ 			attr4 = "222222"
+ 			count(1) = 6
+-			status = he5_ehwrglatt(swfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++			status = he5_ehwrglatt(swfid
++     &                       ,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR
++     &                       ,count,attr4)
+ 	write(*,*) 'Status returned by he5_ehwrglatt():  ',status
+ 
+ c     Write Local Attribute
+diff --git a/samples/he5_sw_writedataF_64.f b/samples/he5_sw_writedataF_64.f
+index 79e34bd..e5d74cb 100755
+--- a/samples/he5_sw_writedataF_64.f
++++ b/samples/he5_sw_writedataF_64.f
+@@ -162,25 +162,27 @@ c     Write Global Attribute
+ c     ----------------------
+ 			attr4 = "ABCDEFGH"
+ 			count(1) = 8
+-			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR"
++     &                       ,HE5T_NATIVE_CHAR,count,attr4)
+ 
+ 			attr4 = "111"
+ 			count(1) = 3		
+-			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1"
++     &                       ,HE5T_NATIVE_CHAR,count,attr4)
+ 
+ 			attr4 = "222222"
+ 			count(1) = 6
+-			status = he5_ehwrglatt(swfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
+-	1	count,attr4)
++			status = he5_ehwrglatt(swfid
++     &                       ,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR
++     &                       ,count,attr4)
+ 
+ c     Write Local Attribute
+ c     ---------------------
+ 			attr5 = "abababababababababab"
+ 			count(1) = 20
+-			status = he5_swwrlattr(swid,"Density","LocalAttribute_0",
+-	1	HE5T_NATIVE_CHAR,count,attr5)
++			status = he5_swwrlattr(swid,"Density"
++     &                       ,"LocalAttribute_0",HE5T_NATIVE_CHAR,count
++     &                       ,attr5)
+ 
+ 	      
+ 		 endif
+-- 
+2.10.0
+
diff --git a/gnu/packages/patches/hdf-eos5-remove-gctp.patch b/gnu/packages/patches/hdf-eos5-remove-gctp.patch
new file mode 100644
index 0000000000..3b78357129
--- /dev/null
+++ b/gnu/packages/patches/hdf-eos5-remove-gctp.patch
@@ -0,0 +1,55 @@
+Don't build/install/use bundled gctp code/headers.
+
+* cproj.h, proj.h: part of GCTP, therefore already present.
+* HE5_config.h, tutils.h: used for library building and testing.
+
+diff --git a/Makefile.in b/Makefile.in
+index f160d0d..367b537 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -206,7 +206,7 @@ LIBGCTP = $(top_builddir)/gctp/src/libGctp.la
+ @TESTDRIVERS_CONDITIONAL_TRUE@TESTDRIVERS = testdrivers
+ @INSTALL_INCLUDE_CONDITIONAL_FALSE@INCLUDE = 
+ @INSTALL_INCLUDE_CONDITIONAL_TRUE@INCLUDE = include
+-SUBDIRS = gctp src $(INCLUDE) samples $(TESTDRIVERS)
++SUBDIRS = src $(INCLUDE) samples $(TESTDRIVERS)
+ all: all-recursive
+ 
+ .SUFFIXES:
+diff --git a/samples/Makefile.in b/samples/Makefile.in
+index 59331dd..64fda89 100644
+--- a/samples/Makefile.in
++++ b/samples/Makefile.in
+@@ -206,7 +206,6 @@ he5_gd_datainfo_SOURCES = he5_gd_datainfo.c
+ he5_gd_datainfo_OBJECTS = he5_gd_datainfo.$(OBJEXT)
+ he5_gd_datainfo_LDADD = $(LDADD)
+ am__DEPENDENCIES_1 = $(top_builddir)/src/libhe5_hdfeos.la
+-am__DEPENDENCIES_2 = $(top_builddir)/gctp/src/libGctp.la
+ he5_gd_datainfo_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+ 	$(am__DEPENDENCIES_2)
+ he5_gd_defexternalfld_SOURCES = he5_gd_defexternalfld.c
+@@ -1093,7 +1092,7 @@ sharedstatedir = @sharedstatedir@
+ sysconfdir = @sysconfdir@
+ target_alias = @target_alias@
+ LIBHDFEOS5 = $(top_builddir)/src/libhe5_hdfeos.la
+-LIBGCTP = $(top_builddir)/gctp/src/libGctp.la
++LIBGCTP =
+ 
+ # Boilerplate definitions file
+ 
+diff --git a/include/Makefile.in b/include/Makefile.in
+index a572128..64dabb5 100644
+--- a/include/Makefile.in
++++ b/include/Makefile.in
+@@ -190,8 +190,7 @@ LIBGCTP = $(top_builddir)/gctp/src/libGctp.la
+ # Boilerplate include
+ 
+ # Headers to install
+-include_HEADERS = HE5_GctpFunc.h HE5_HdfEosDef.h HE5_config.h cproj.h ease.h \
+-                  isin.h proj.h tutils.h cfortHdf.h
++include_HEADERS = HE5_GctpFunc.h HE5_HdfEosDef.h ease.h isin.h cfortHdf.h
+ 
+ all: HE5_config.h
+ 	$(MAKE) $(AM_MAKEFLAGS) all-am
+-- 
+2.10.0
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt1.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt1.patch
deleted file mode 100644
index 57bc45f3c2..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt1.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-  changeset:   312039:4290826b078c
-  user:        Timothy Nikkel <tnikkel@gmail.com>
-  Date:        Fri May 13 06:09:38 2016 +0200
-  summary:     Bug 1261230. r=mats, a=ritu
-
-diff -r 45a59425b498 -r 4290826b078c layout/generic/nsSubDocumentFrame.cpp
---- a/layout/generic/nsSubDocumentFrame.cpp	Tue May 10 14:12:20 2016 +0200
-+++ b/layout/generic/nsSubDocumentFrame.cpp	Fri May 13 06:09:38 2016 +0200
-@@ -132,6 +132,7 @@
-     nsCOMPtr<nsIDocument> oldContainerDoc;
-     nsView* detachedViews =
-       frameloader->GetDetachedSubdocView(getter_AddRefs(oldContainerDoc));
-+    frameloader->SetDetachedSubdocView(nullptr, nullptr);
-     if (detachedViews) {
-       if (oldContainerDoc == aContent->OwnerDoc()) {
-         // Restore stashed presentation.
-@@ -142,7 +143,6 @@
-         frameloader->Hide();
-       }
-     }
--    frameloader->SetDetachedSubdocView(nullptr, nullptr);
-   }
- 
-   nsContentUtils::AddScriptRunner(new AsyncFrameInit(this));
-@@ -936,13 +936,16 @@
-     if (!mPresShell->IsDestroying()) {
-       mPresShell->FlushPendingNotifications(Flush_Frames);
-     }
-+
-+    // Either the frame has been constructed by now, or it never will be,
-+    // either way we want to clear the stashed views.
-+    mFrameLoader->SetDetachedSubdocView(nullptr, nullptr);
-+
-     nsSubDocumentFrame* frame = do_QueryFrame(mFrameElement->GetPrimaryFrame());
-     if ((!frame && mHideViewerIfFrameless) ||
-         mPresShell->IsDestroying()) {
-       // Either the frame element has no nsIFrame or the presshell is being
--      // destroyed. Hide the nsFrameLoader, which destroys the presentation,
--      // and clear our references to the stashed presentation.
--      mFrameLoader->SetDetachedSubdocView(nullptr, nullptr);
-+      // destroyed. Hide the nsFrameLoader, which destroys the presentation.
-       mFrameLoader->Hide();
-     }
-     return NS_OK;
-@@ -968,7 +971,7 @@
-   // Detach the subdocument's views and stash them in the frame loader.
-   // We can then reattach them if we're being reframed (for example if
-   // the frame has been made position:fixed).
--  nsFrameLoader* frameloader = FrameLoader();
-+  RefPtr<nsFrameLoader> frameloader = FrameLoader();
-   if (frameloader) {
-     nsView* detachedViews = ::BeginSwapDocShellsForViews(mInnerView->GetFirstChild());
-     frameloader->SetDetachedSubdocView(detachedViews, mContent->OwnerDoc());
-@@ -977,7 +980,7 @@
-     // safely determine whether the frame is being reframed or destroyed.
-     nsContentUtils::AddScriptRunner(
-       new nsHideViewer(mContent,
--                       mFrameLoader,
-+                       frameloader,
-                        PresContext()->PresShell(),
-                        (mDidCreateDoc || mCallingShow)));
-   }
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt2.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt2.patch
deleted file mode 100644
index 843e2eb244..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt2.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-  changeset:   312044:09418166fd77
-  user:        Jon Coppeard <jcoppeard@mozilla.com>
-  Date:        Wed May 11 10:14:45 2016 +0100
-  summary:     Bug 1264575 - Add missing pre-barrier in Ion r=jandem a=ritu
-
-diff -r 9cc65cca1f71 -r 09418166fd77 js/src/jit-test/tests/self-hosting/bug1264575.js
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/js/src/jit-test/tests/self-hosting/bug1264575.js	Wed May 11 10:14:45 2016 +0100
-@@ -0,0 +1,7 @@
-+function f(x, [y]) {}
-+f(0, []);
-+// jsfunfuzz-generated
-+let i = 0;
-+for (var z of [0, 0, 0]) {
-+    verifyprebarriers();
-+}
-diff -r 9cc65cca1f71 -r 09418166fd77 js/src/jit/MCallOptimize.cpp
---- a/js/src/jit/MCallOptimize.cpp	Mon May 16 15:11:24 2016 -0400
-+++ b/js/src/jit/MCallOptimize.cpp	Wed May 11 10:14:45 2016 +0100
-@@ -2263,7 +2263,8 @@
- 
-     callInfo.setImplicitlyUsedUnchecked();
- 
--    MStoreFixedSlot* store = MStoreFixedSlot::New(alloc(), callInfo.getArg(0), slot, callInfo.getArg(2));
-+    MStoreFixedSlot* store =
-+        MStoreFixedSlot::NewBarriered(alloc(), callInfo.getArg(0), slot, callInfo.getArg(2));
-     current->add(store);
-     current->push(store);
- 
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt3.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt3.patch
deleted file mode 100644
index fab003158c..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt3.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-  changeset:   312051:9ec3d076fbee
-  parents:     312049:e0a272d5e162 
-  user:        Eric Faust <efaustbmo@gmail.com>
-  Date:        Wed May 04 15:54:43 2016 -0700
-  summary:     Bug 1269729 - Handle another OOM case on ARM. (r=jolesen) a=ritu
-
-diff -r e0a272d5e162 -r 9ec3d076fbee js/src/jit/arm/CodeGenerator-arm.cpp
---- a/js/src/jit/arm/CodeGenerator-arm.cpp	Tue May 17 08:26:37 2016 -0400
-+++ b/js/src/jit/arm/CodeGenerator-arm.cpp	Wed May 04 15:54:43 2016 -0700
-@@ -1116,7 +1116,7 @@
-     for (int32_t i = 0; i < cases; i++) {
-         CodeLabel cl;
-         masm.writeCodePointer(cl.dest());
--        ool->addCodeLabel(cl);
-+        masm.propagateOOM(ool->addCodeLabel(cl));
-     }
-     addOutOfLineCode(ool, mir);
- }
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt4.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt4.patch
deleted file mode 100644
index 0973203e0f..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt4.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-  changeset:   312055:b74f1ab939d2
-  user:        Olli Pettay <Olli.Pettay@helsinki.fi>
-  Date:        Mon May 16 21:42:24 2016 +0300
-  summary:     Bug 1273202, make sure to not keep objects alive too long because of some useless event dispatching, r=jwatt a=ritu
-
-diff -r 072992bf176d -r b74f1ab939d2 dom/html/HTMLInputElement.cpp
---- a/dom/html/HTMLInputElement.cpp	Sun May 15 17:03:06 2016 +0300
-+++ b/dom/html/HTMLInputElement.cpp	Mon May 16 21:42:24 2016 +0300
-@@ -1168,7 +1168,7 @@
-     mFileList->Disconnect();
-   }
-   if (mNumberControlSpinnerIsSpinning) {
--    StopNumberControlSpinnerSpin();
-+    StopNumberControlSpinnerSpin(eDisallowDispatchingEvents);
-   }
-   DestroyImageLoadingContent();
-   FreeData();
-@@ -3721,7 +3721,7 @@
- }
- 
- void
--HTMLInputElement::StopNumberControlSpinnerSpin()
-+HTMLInputElement::StopNumberControlSpinnerSpin(SpinnerStopState aState)
- {
-   if (mNumberControlSpinnerIsSpinning) {
-     if (nsIPresShell::GetCapturingContent() == this) {
-@@ -3732,11 +3732,16 @@
- 
-     mNumberControlSpinnerIsSpinning = false;
- 
--    FireChangeEventIfNeeded();
-+    if (aState == eAllowDispatchingEvents) {
-+      FireChangeEventIfNeeded();
-+    }
- 
-     nsNumberControlFrame* numberControlFrame =
-       do_QueryFrame(GetPrimaryFrame());
-     if (numberControlFrame) {
-+      MOZ_ASSERT(aState == eAllowDispatchingEvents,
-+                 "Shouldn't have primary frame for the element when we're not "
-+                 "allowed to dispatch events to it anymore.");
-       numberControlFrame->SpinnerStateChanged();
-     }
-   }
-diff -r 072992bf176d -r b74f1ab939d2 dom/html/HTMLInputElement.h
---- a/dom/html/HTMLInputElement.h	Sun May 15 17:03:06 2016 +0300
-+++ b/dom/html/HTMLInputElement.h	Mon May 16 21:42:24 2016 +0300
-@@ -721,7 +721,12 @@
-   HTMLInputElement* GetOwnerNumberControl();
- 
-   void StartNumberControlSpinnerSpin();
--  void StopNumberControlSpinnerSpin();
-+  enum SpinnerStopState {
-+    eAllowDispatchingEvents,
-+    eDisallowDispatchingEvents
-+  };
-+  void StopNumberControlSpinnerSpin(SpinnerStopState aState =
-+                                      eAllowDispatchingEvents);
-   void StepNumberControlForUserEvent(int32_t aDirection);
- 
-   /**
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt5.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt5.patch
deleted file mode 100644
index cd98d0b28b..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt5.patch
+++ /dev/null
@@ -1,266 +0,0 @@
-  changeset:   312063:88bea96c802a
-  user:        Andrea Marchesini <amarchesini@mozilla.com>
-  Date:        Tue May 10 10:52:19 2016 +0200
-  summary:     Bug 1267130 - Improve the URL segment calculation, r=valentin a=ritu
-
-diff -r 28dcecced055 -r 88bea96c802a netwerk/base/nsStandardURL.cpp
---- a/netwerk/base/nsStandardURL.cpp	Wed May 18 11:55:29 2016 +1200
-+++ b/netwerk/base/nsStandardURL.cpp	Tue May 10 10:52:19 2016 +0200
-@@ -475,19 +475,28 @@
- }
- 
- uint32_t
--nsStandardURL::AppendSegmentToBuf(char *buf, uint32_t i, const char *str, URLSegment &seg, const nsCString *escapedStr, bool useEscaped)
-+nsStandardURL::AppendSegmentToBuf(char *buf, uint32_t i, const char *str,
-+                                  const URLSegment &segInput, URLSegment &segOutput,
-+                                  const nsCString *escapedStr,
-+                                  bool useEscaped, int32_t *diff)
- {
--    if (seg.mLen > 0) {
-+    MOZ_ASSERT(segInput.mLen == segOutput.mLen);
-+
-+    if (diff) *diff = 0;
-+
-+    if (segInput.mLen > 0) {
-         if (useEscaped) {
--            seg.mLen = escapedStr->Length();
--            memcpy(buf + i, escapedStr->get(), seg.mLen);
-+            MOZ_ASSERT(diff);
-+            segOutput.mLen = escapedStr->Length();
-+            *diff = segOutput.mLen - segInput.mLen;
-+            memcpy(buf + i, escapedStr->get(), segOutput.mLen);
-+        } else {
-+            memcpy(buf + i, str + segInput.mPos, segInput.mLen);
-         }
--        else
--            memcpy(buf + i, str + seg.mPos, seg.mLen);
--        seg.mPos = i;
--        i += seg.mLen;
-+        segOutput.mPos = i;
-+        i += segOutput.mLen;
-     } else {
--        seg.mPos = i;
-+        segOutput.mPos = i;
-     }
-     return i;
- }
-@@ -598,6 +607,20 @@
-         }
-     }
- 
-+    // We must take a copy of every single segment because they are pointing to
-+    // the |spec| while we are changing their value, in case we must use
-+    // encoded strings.
-+    URLSegment username(mUsername);
-+    URLSegment password(mPassword);
-+    URLSegment host(mHost);
-+    URLSegment path(mPath);
-+    URLSegment filepath(mFilepath);
-+    URLSegment directory(mDirectory);
-+    URLSegment basename(mBasename);
-+    URLSegment extension(mExtension);
-+    URLSegment query(mQuery);
-+    URLSegment ref(mRef);
-+
-     //
-     // generate the normalized URL string
-     //
-@@ -607,9 +630,10 @@
-     char *buf;
-     mSpec.BeginWriting(buf);
-     uint32_t i = 0;
-+    int32_t diff = 0;
- 
-     if (mScheme.mLen > 0) {
--        i = AppendSegmentToBuf(buf, i, spec, mScheme);
-+        i = AppendSegmentToBuf(buf, i, spec, mScheme, mScheme);
-         net_ToLowerCase(buf + mScheme.mPos, mScheme.mLen);
-         i = AppendToBuf(buf, i, "://", 3);
-     }
-@@ -619,15 +643,22 @@
- 
-     // append authority
-     if (mUsername.mLen > 0) {
--        i = AppendSegmentToBuf(buf, i, spec, mUsername, &encUsername, useEncUsername);
--        if (mPassword.mLen >= 0) {
-+        i = AppendSegmentToBuf(buf, i, spec, username, mUsername,
-+                               &encUsername, useEncUsername, &diff);
-+        ShiftFromPassword(diff);
-+        if (password.mLen >= 0) {
-             buf[i++] = ':';
--            i = AppendSegmentToBuf(buf, i, spec, mPassword, &encPassword, useEncPassword);
-+            i = AppendSegmentToBuf(buf, i, spec, password, mPassword,
-+                                   &encPassword, useEncPassword, &diff);
-+            ShiftFromHost(diff);
-         }
-         buf[i++] = '@';
-     }
--    if (mHost.mLen > 0) {
--        i = AppendSegmentToBuf(buf, i, spec, mHost, &encHost, useEncHost);
-+    if (host.mLen > 0) {
-+        i = AppendSegmentToBuf(buf, i, spec, host, mHost, &encHost, useEncHost,
-+                               &diff);
-+        ShiftFromPath(diff);
-+
-         net_ToLowerCase(buf + mHost.mPos, mHost.mLen);
-         MOZ_ASSERT(mPort >= -1, "Invalid negative mPort");
-         if (mPort != -1 && mPort != mDefaultPort) {
-@@ -652,21 +683,23 @@
-     }
-     else {
-         uint32_t leadingSlash = 0;
--        if (spec[mPath.mPos] != '/') {
-+        if (spec[path.mPos] != '/') {
-             LOG(("adding leading slash to path\n"));
-             leadingSlash = 1;
-             buf[i++] = '/';
-             // basename must exist, even if empty (bugs 113508, 429347)
-             if (mBasename.mLen == -1) {
--                mBasename.mPos = i;
--                mBasename.mLen = 0;
-+                mBasename.mPos = basename.mPos = i;
-+                mBasename.mLen = basename.mLen = 0;
-             }
-         }
- 
-         // record corrected (file)path starting position
-         mPath.mPos = mFilepath.mPos = i - leadingSlash;
- 
--        i = AppendSegmentToBuf(buf, i, spec, mDirectory, &encDirectory, useEncDirectory);
-+        i = AppendSegmentToBuf(buf, i, spec, directory, mDirectory,
-+                               &encDirectory, useEncDirectory, &diff);
-+        ShiftFromBasename(diff);
- 
-         // the directory must end with a '/'
-         if (buf[i-1] != '/') {
-@@ -674,7 +707,9 @@
-             mDirectory.mLen++;
-         }
- 
--        i = AppendSegmentToBuf(buf, i, spec, mBasename, &encBasename, useEncBasename);
-+        i = AppendSegmentToBuf(buf, i, spec, basename, mBasename,
-+                               &encBasename, useEncBasename, &diff);
-+        ShiftFromExtension(diff);
- 
-         // make corrections to directory segment if leadingSlash
-         if (leadingSlash) {
-@@ -687,18 +722,24 @@
- 
-         if (mExtension.mLen >= 0) {
-             buf[i++] = '.';
--            i = AppendSegmentToBuf(buf, i, spec, mExtension, &encExtension, useEncExtension);
-+            i = AppendSegmentToBuf(buf, i, spec, extension, mExtension,
-+                                   &encExtension, useEncExtension, &diff);
-+            ShiftFromQuery(diff);
-         }
-         // calculate corrected filepath length
-         mFilepath.mLen = i - mFilepath.mPos;
- 
-         if (mQuery.mLen >= 0) {
-             buf[i++] = '?';
--            i = AppendSegmentToBuf(buf, i, spec, mQuery, &encQuery, useEncQuery);
-+            i = AppendSegmentToBuf(buf, i, spec, query, mQuery,
-+                                   &encQuery, useEncQuery,
-+                                   &diff);
-+            ShiftFromRef(diff);
-         }
-         if (mRef.mLen >= 0) {
-             buf[i++] = '#';
--            i = AppendSegmentToBuf(buf, i, spec, mRef, &encRef, useEncRef);
-+            i = AppendSegmentToBuf(buf, i, spec, ref, mRef, &encRef, useEncRef,
-+                                   &diff);
-         }
-         // calculate corrected path length
-         mPath.mLen = i - mPath.mPos;
-@@ -953,6 +994,39 @@
- #undef GOT_PREF
- }
- 
-+#define SHIFT_FROM(name, what)                    \
-+void                                              \
-+nsStandardURL::name(int32_t diff)                 \
-+{                                                 \
-+    if (!diff) return;                            \
-+    if (what.mLen >= 0) {                         \
-+        CheckedInt<int32_t> pos = what.mPos;      \
-+        pos += diff;                              \
-+        MOZ_ASSERT(pos.isValid());                \
-+        what.mPos = pos.value();                  \
-+    }
-+
-+#define SHIFT_FROM_NEXT(name, what, next)         \
-+    SHIFT_FROM(name, what)                        \
-+    next(diff);                                   \
-+}
-+
-+#define SHIFT_FROM_LAST(name, what)               \
-+    SHIFT_FROM(name, what)                        \
-+}
-+
-+SHIFT_FROM_NEXT(ShiftFromAuthority, mAuthority, ShiftFromUsername)
-+SHIFT_FROM_NEXT(ShiftFromUsername, mUsername, ShiftFromPassword)
-+SHIFT_FROM_NEXT(ShiftFromPassword, mPassword, ShiftFromHost)
-+SHIFT_FROM_NEXT(ShiftFromHost, mHost, ShiftFromPath)
-+SHIFT_FROM_NEXT(ShiftFromPath, mPath, ShiftFromFilepath)
-+SHIFT_FROM_NEXT(ShiftFromFilepath, mFilepath, ShiftFromDirectory)
-+SHIFT_FROM_NEXT(ShiftFromDirectory, mDirectory, ShiftFromBasename)
-+SHIFT_FROM_NEXT(ShiftFromBasename, mBasename, ShiftFromExtension)
-+SHIFT_FROM_NEXT(ShiftFromExtension, mExtension, ShiftFromQuery)
-+SHIFT_FROM_NEXT(ShiftFromQuery, mQuery, ShiftFromRef)
-+SHIFT_FROM_LAST(ShiftFromRef, mRef)
-+
- //----------------------------------------------------------------------------
- // nsStandardURL::nsISupports
- //----------------------------------------------------------------------------
-diff -r 28dcecced055 -r 88bea96c802a netwerk/base/nsStandardURL.h
---- a/netwerk/base/nsStandardURL.h	Wed May 18 11:55:29 2016 +1200
-+++ b/netwerk/base/nsStandardURL.h	Tue May 10 10:52:19 2016 +0200
-@@ -77,6 +77,7 @@
- 
-         URLSegment() : mPos(0), mLen(-1) {}
-         URLSegment(uint32_t pos, int32_t len) : mPos(pos), mLen(len) {}
-+        URLSegment(const URLSegment& aCopy) : mPos(aCopy.mPos), mLen(aCopy.mLen) {}
-         void Reset() { mPos = 0; mLen = -1; }
-         // Merge another segment following this one to it if they're contiguous
-         // Assumes we have something like "foo;bar" where this object is 'foo' and right
-@@ -177,7 +178,10 @@
-     bool     NormalizeIDN(const nsCSubstring &host, nsCString &result);
-     void     CoalescePath(netCoalesceFlags coalesceFlag, char *path);
- 
--    uint32_t AppendSegmentToBuf(char *, uint32_t, const char *, URLSegment &, const nsCString *esc=nullptr, bool useEsc = false);
-+    uint32_t AppendSegmentToBuf(char *, uint32_t, const char *,
-+                                const URLSegment &input, URLSegment &output,
-+                                const nsCString *esc=nullptr,
-+                                bool useEsc = false, int32_t* diff = nullptr);
-     uint32_t AppendToBuf(char *, uint32_t, const char *, uint32_t);
- 
-     nsresult BuildNormalizedSpec(const char *spec);
-@@ -216,17 +220,17 @@
-     const nsDependentCSubstring Ref()       { return Segment(mRef); }
- 
-     // shift the URLSegments to the right by diff
--    void ShiftFromAuthority(int32_t diff) { mAuthority.mPos += diff; ShiftFromUsername(diff); }
--    void ShiftFromUsername(int32_t diff)  { mUsername.mPos += diff; ShiftFromPassword(diff); }
--    void ShiftFromPassword(int32_t diff)  { mPassword.mPos += diff; ShiftFromHost(diff); }
--    void ShiftFromHost(int32_t diff)      { mHost.mPos += diff; ShiftFromPath(diff); }
--    void ShiftFromPath(int32_t diff)      { mPath.mPos += diff; ShiftFromFilepath(diff); }
--    void ShiftFromFilepath(int32_t diff)  { mFilepath.mPos += diff; ShiftFromDirectory(diff); }
--    void ShiftFromDirectory(int32_t diff) { mDirectory.mPos += diff; ShiftFromBasename(diff); }
--    void ShiftFromBasename(int32_t diff)  { mBasename.mPos += diff; ShiftFromExtension(diff); }
--    void ShiftFromExtension(int32_t diff) { mExtension.mPos += diff; ShiftFromQuery(diff); }
--    void ShiftFromQuery(int32_t diff)     { mQuery.mPos += diff; ShiftFromRef(diff); }
--    void ShiftFromRef(int32_t diff)       { mRef.mPos += diff; }
-+    void ShiftFromAuthority(int32_t diff);
-+    void ShiftFromUsername(int32_t diff);
-+    void ShiftFromPassword(int32_t diff);
-+    void ShiftFromHost(int32_t diff);
-+    void ShiftFromPath(int32_t diff);
-+    void ShiftFromFilepath(int32_t diff);
-+    void ShiftFromDirectory(int32_t diff);
-+    void ShiftFromBasename(int32_t diff);
-+    void ShiftFromExtension(int32_t diff);
-+    void ShiftFromQuery(int32_t diff);
-+    void ShiftFromRef(int32_t diff);
- 
-     // fastload helper functions
-     nsresult ReadSegment(nsIBinaryInputStream *, URLSegment &);
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt6.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt6.patch
deleted file mode 100644
index 143b02fa58..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt6.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-  changeset:   312067:380ddd689680
-  user:        Timothy Nikkel <tnikkel@gmail.com>
-  Date:        Tue May 10 22:58:26 2016 -0500
-  summary:     Bug 1261752. Part 1. r=mats a=ritu
-
-diff -r 02df988a56ae -r 380ddd689680 view/nsViewManager.cpp
---- a/view/nsViewManager.cpp	Thu May 26 10:06:15 2016 -0700
-+++ b/view/nsViewManager.cpp	Tue May 10 22:58:26 2016 -0500
-@@ -416,7 +416,7 @@
-   if (aWidget->NeedsPaint()) {
-     // If an ancestor widget was hidden and then shown, we could
-     // have a delayed resize to handle.
--    for (nsViewManager *vm = this; vm;
-+    for (RefPtr<nsViewManager> vm = this; vm;
-          vm = vm->mRootView->GetParent()
-            ? vm->mRootView->GetParent()->GetViewManager()
-            : nullptr) {
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt7.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt7.patch
deleted file mode 100644
index 23c509d6c1..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt7.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-  changeset:   312068:73cc9a2d8fc1
-  user:        Timothy Nikkel <tnikkel@gmail.com>
-  Date:        Tue May 10 22:58:47 2016 -0500
-  summary:     Bug 1261752. Part 2. r=mats a=ritu
-
-diff -r 380ddd689680 -r 73cc9a2d8fc1 view/nsViewManager.cpp
---- a/view/nsViewManager.cpp	Tue May 10 22:58:26 2016 -0500
-+++ b/view/nsViewManager.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -372,7 +372,7 @@
-     }
-   }
-   if (rootShell->GetViewManager() != this) {
--    return; // 'this' might have been destroyed
-+    return; // presentation might have been torn down
-   }
-   if (aFlushDirtyRegion) {
-     nsAutoScriptBlocker scriptBlocker;
-@@ -1069,6 +1069,7 @@
-   if (mPresShell) {
-     mPresShell->GetPresContext()->RefreshDriver()->RevokeViewManagerFlush();
- 
-+    RefPtr<nsViewManager> strongThis(this);
-     CallWillPaintOnObservers();
- 
-     ProcessPendingUpdatesForView(mRootView, true);
-@@ -1085,6 +1086,7 @@
- 
-   if (mHasPendingWidgetGeometryChanges) {
-     mHasPendingWidgetGeometryChanges = false;
-+    RefPtr<nsViewManager> strongThis(this);
-     ProcessPendingUpdatesForView(mRootView, false);
-   }
- }
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt8.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt8.patch
deleted file mode 100644
index ee5e54e805..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt8.patch
+++ /dev/null
@@ -1,267 +0,0 @@
-  changeset:   312069:3c2bd9158ad3
-  user:        Timothy Nikkel <tnikkel@gmail.com>
-  Date:        Tue May 10 22:58:47 2016 -0500
-  summary:     Bug 1261752. Part 3. r=mats a=ritu
-
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 layout/forms/nsComboboxControlFrame.cpp
---- a/layout/forms/nsComboboxControlFrame.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/layout/forms/nsComboboxControlFrame.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -1417,7 +1417,11 @@
-     // The popup's visibility doesn't update until the minimize animation has
-     // finished, so call UpdateWidgetGeometry to update it right away.
-     nsViewManager* viewManager = mDropdownFrame->GetView()->GetViewManager();
--    viewManager->UpdateWidgetGeometry();
-+    viewManager->UpdateWidgetGeometry(); // might destroy us
-+  }
-+
-+  if (!weakFrame.IsAlive()) {
-+    return consume;
-   }
- 
-   return consume;
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 view/nsViewManager.cpp
---- a/view/nsViewManager.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/view/nsViewManager.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -670,15 +670,16 @@
- 
- void nsViewManager::WillPaintWindow(nsIWidget* aWidget)
- {
--  if (aWidget) {
--    nsView* view = nsView::GetViewFor(aWidget);
--    LayerManager *manager = aWidget->GetLayerManager();
-+  RefPtr<nsIWidget> widget(aWidget);
-+  if (widget) {
-+    nsView* view = nsView::GetViewFor(widget);
-+    LayerManager* manager = widget->GetLayerManager();
-     if (view &&
-         (view->ForcedRepaint() || !manager->NeedsWidgetInvalidation())) {
-       ProcessPendingUpdates();
-       // Re-get the view pointer here since the ProcessPendingUpdates might have
-       // destroyed it during CallWillPaintOnObservers.
--      view = nsView::GetViewFor(aWidget);
-+      view = nsView::GetViewFor(widget);
-       if (view) {
-         view->SetForcedRepaint(false);
-       }
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/PuppetWidget.cpp
---- a/widget/PuppetWidget.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/PuppetWidget.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -823,6 +823,8 @@
-   mDirtyRegion.SetEmpty();
-   mPaintTask.Revoke();
- 
-+  RefPtr<PuppetWidget> strongThis(this);
-+
-   mAttachedWidgetListener->WillPaintWindow(this);
- 
-   if (mAttachedWidgetListener) {
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/cocoa/nsChildView.mm
---- a/widget/cocoa/nsChildView.mm	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/cocoa/nsChildView.mm	Tue May 10 22:58:47 2016 -0500
-@@ -3716,6 +3716,8 @@
- 
- - (void)viewWillDraw
- {
-+  nsAutoRetainCocoaObject kungFuDeathGrip(self);
-+
-   if (mGeckoChild) {
-     // The OS normally *will* draw our NSWindow, no matter what we do here.
-     // But Gecko can delete our parent widget(s) (along with mGeckoChild)
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/gonk/nsWindow.cpp
---- a/widget/gonk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/gonk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -196,7 +196,7 @@
-         return;
-     }
- 
--    nsWindow *targetWindow = (nsWindow *)sTopWindows[0];
-+    RefPtr<nsWindow> targetWindow = (nsWindow *)sTopWindows[0];
-     while (targetWindow->GetLastChild())
-         targetWindow = (nsWindow *)targetWindow->GetLastChild();
- 
-@@ -205,15 +205,15 @@
-         listener->WillPaintWindow(targetWindow);
-     }
- 
--    LayerManager* lm = targetWindow->GetLayerManager();
--    if (mozilla::layers::LayersBackend::LAYERS_CLIENT == lm->GetBackendType()) {
--      // No need to do anything, the compositor will handle drawing
--    } else {
--        NS_RUNTIMEABORT("Unexpected layer manager type");
--    }
--
-     listener = targetWindow->GetWidgetListener();
-     if (listener) {
-+        LayerManager* lm = targetWindow->GetLayerManager();
-+        if (mozilla::layers::LayersBackend::LAYERS_CLIENT == lm->GetBackendType()) {
-+            // No need to do anything, the compositor will handle drawing
-+        } else {
-+            NS_RUNTIMEABORT("Unexpected layer manager type");
-+        }
-+
-         listener->DidPaintWindow();
-     }
- }
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/gtk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -469,6 +469,12 @@
-     }
- }
- 
-+nsIWidgetListener*
-+nsWindow::GetListener()
-+{
-+    return mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
-+}
-+
- nsresult
- nsWindow::DispatchEvent(WidgetGUIEvent* aEvent, nsEventStatus& aStatus)
- {
-@@ -481,8 +487,7 @@
-     aEvent->refPoint.y = GdkCoordToDevicePixels(aEvent->refPoint.y);
- 
-     aStatus = nsEventStatus_eIgnore;
--    nsIWidgetListener* listener =
--        mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
-+    nsIWidgetListener* listener = GetListener();
-     if (listener) {
-       aStatus = listener->HandleEvent(aEvent, mUseAttachedEvents);
-     }
-@@ -2119,8 +2124,7 @@
-     if (!mGdkWindow || mIsFullyObscured || !mHasMappedToplevel)
-         return FALSE;
- 
--    nsIWidgetListener *listener =
--        mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
-+    nsIWidgetListener *listener = GetListener();
-     if (!listener)
-         return FALSE;
- 
-@@ -2149,6 +2153,8 @@
-         clientLayers->SendInvalidRegion(region);
-     }
- 
-+    RefPtr<nsWindow> strongThis(this);
-+
-     // Dispatch WillPaintWindow notification to allow scripts etc. to run
-     // before we paint
-     {
-@@ -2161,8 +2167,7 @@
- 
-         // Re-get the listener since the will paint notification might have
-         // killed it.
--        listener =
--            mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
-+        listener = GetListener();
-         if (!listener)
-             return FALSE;
-     }
-@@ -2223,6 +2228,13 @@
-     // If this widget uses OMTC...
-     if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT) {
-         listener->PaintWindow(this, region);
-+
-+        // Re-get the listener since the will paint notification might have
-+        // killed it.
-+        listener = GetListener();
-+        if (!listener)
-+            return TRUE;
-+
-         listener->DidPaintWindow();
-         return TRUE;
-     }
-@@ -2307,6 +2319,13 @@
-       if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_BASIC) {
-         AutoLayerManagerSetup setupLayerManager(this, ctx, layerBuffering);
-         painted = listener->PaintWindow(this, region);
-+
-+        // Re-get the listener since the will paint notification might have
-+        // killed it.
-+        listener = GetListener();
-+        if (!listener)
-+            return TRUE;
-+
-       }
-     }
- 
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/gtk/nsWindow.h	Tue May 10 22:58:47 2016 -0500
-@@ -359,6 +359,7 @@
-                                    GdkWindow** aWindow, gint* aButton,
-                                    gint* aRootX, gint* aRootY);
-     void               ClearCachedResources();
-+    nsIWidgetListener* GetListener();
- 
-     GtkWidget          *mShell;
-     MozContainer       *mContainer;
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/qt/nsWindow.cpp
---- a/widget/qt/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/qt/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -857,18 +857,28 @@
- 
- // EVENTS
- 
-+nsIWidgetListener*
-+nsWindow::GetPaintListener()
-+{
-+    return mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
-+}
-+
- void
- nsWindow::OnPaint()
- {
-     LOGDRAW(("nsWindow::%s [%p]\n", __FUNCTION__, (void *)this));
--    nsIWidgetListener* listener =
--        mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
-+    nsIWidgetListener* listener = GetPaintListener();
-     if (!listener) {
-         return;
-     }
- 
-     listener->WillPaintWindow(this);
- 
-+    nsIWidgetListener* listener = GetPaintListener();
-+    if (!listener) {
-+        return;
-+    }
-+
-     switch (GetLayerManager()->GetBackendType()) {
-         case mozilla::layers::LayersBackend::LAYERS_CLIENT: {
-             nsIntRegion region(nsIntRect(0, 0, mWidget->width(), mWidget->height()));
-@@ -879,6 +889,11 @@
-             NS_ERROR("Invalid layer manager");
-     }
- 
-+    nsIWidgetListener* listener = GetPaintListener();
-+    if (!listener) {
-+        return;
-+    }
-+
-     listener->DidPaintWindow();
- }
- 
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/qt/nsWindow.h
---- a/widget/qt/nsWindow.h	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/qt/nsWindow.h	Tue May 10 22:58:47 2016 -0500
-@@ -254,6 +254,7 @@
-         bool needDispatch;
-     } MozCachedMoveEvent;
- 
-+    nsIWidgetListener* GetPaintListener();
-     bool               CheckForRollup(double aMouseX, double aMouseY, bool aIsWheel);
-     void*              SetupPluginPort(void);
-     nsresult           SetWindowIconList(const nsTArray<nsCString> &aIconList);
-diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/windows/nsWindowGfx.cpp
---- a/widget/windows/nsWindowGfx.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/widget/windows/nsWindowGfx.cpp	Tue May 10 22:58:47 2016 -0500
-@@ -298,6 +298,8 @@
-     clientLayerManager->SendInvalidRegion(region);
-   }
- 
-+  RefPtr<nsWindow> strongThis(this);
-+
-   nsIWidgetListener* listener = GetPaintListener();
-   if (listener) {
-     listener->WillPaintWindow(this);
diff --git a/gnu/packages/patches/icecat-CVE-2016-2818-pt9.patch b/gnu/packages/patches/icecat-CVE-2016-2818-pt9.patch
deleted file mode 100644
index a72698cc0b..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2818-pt9.patch
+++ /dev/null
@@ -1,188 +0,0 @@
-  changeset:   312075:ee870911fabb
-  user:        Timothy Nikkel <tnikkel@gmail.com>
-  Date:        Wed May 04 16:12:48 2016 -0500
-  summary:     Bug 1265577. r=mats, a=lizzard
-
-diff -r 751208d22b91 -r ee870911fabb dom/base/nsFrameLoader.cpp
---- a/dom/base/nsFrameLoader.cpp	Thu May 26 17:07:49 2016 -0400
-+++ b/dom/base/nsFrameLoader.cpp	Wed May 04 16:12:48 2016 -0500
-@@ -155,7 +155,7 @@
- nsFrameLoader::nsFrameLoader(Element* aOwner, bool aNetworkCreated)
-   : mOwnerContent(aOwner)
-   , mAppIdSentToPermissionManager(nsIScriptSecurityManager::NO_APP_ID)
--  , mDetachedSubdocViews(nullptr)
-+  , mDetachedSubdocFrame(nullptr)
-   , mIsPrerendered(false)
-   , mDepthTooGreat(false)
-   , mIsTopLevelContent(false)
-@@ -2507,18 +2507,18 @@
- }
- 
- void
--nsFrameLoader::SetDetachedSubdocView(nsView* aDetachedViews,
--                                     nsIDocument* aContainerDoc)
-+nsFrameLoader::SetDetachedSubdocFrame(nsIFrame* aDetachedFrame,
-+                                      nsIDocument* aContainerDoc)
- {
--  mDetachedSubdocViews = aDetachedViews;
-+  mDetachedSubdocFrame = aDetachedFrame;
-   mContainerDocWhileDetached = aContainerDoc;
- }
- 
--nsView*
--nsFrameLoader::GetDetachedSubdocView(nsIDocument** aContainerDoc) const
-+nsIFrame*
-+nsFrameLoader::GetDetachedSubdocFrame(nsIDocument** aContainerDoc) const
- {
-   NS_IF_ADDREF(*aContainerDoc = mContainerDocWhileDetached);
--  return mDetachedSubdocViews;
-+  return mDetachedSubdocFrame.GetFrame();
- }
- 
- void
-diff -r 751208d22b91 -r ee870911fabb dom/base/nsFrameLoader.h
---- a/dom/base/nsFrameLoader.h	Thu May 26 17:07:49 2016 -0400
-+++ b/dom/base/nsFrameLoader.h	Wed May 04 16:12:48 2016 -0500
-@@ -23,6 +23,7 @@
- #include "mozilla/Attributes.h"
- #include "FrameMetrics.h"
- #include "nsStubMutationObserver.h"
-+#include "nsIFrame.h"
- 
- class nsIURI;
- class nsSubDocumentFrame;
-@@ -197,23 +198,23 @@
-   void SetRemoteBrowser(nsITabParent* aTabParent);
- 
-   /**
--   * Stashes a detached view on the frame loader. We do this when we're
-+   * Stashes a detached nsIFrame on the frame loader. We do this when we're
-    * destroying the nsSubDocumentFrame. If the nsSubdocumentFrame is
--   * being reframed we'll restore the detached view when it's recreated,
-+   * being reframed we'll restore the detached nsIFrame when it's recreated,
-    * otherwise we'll discard the old presentation and set the detached
--   * subdoc view to null. aContainerDoc is the document containing the
-+   * subdoc nsIFrame to null. aContainerDoc is the document containing the
-    * the subdoc frame. This enables us to detect when the containing
-    * document has changed during reframe, so we can discard the presentation 
-    * in that case.
-    */
--  void SetDetachedSubdocView(nsView* aDetachedView,
--                             nsIDocument* aContainerDoc);
-+  void SetDetachedSubdocFrame(nsIFrame* aDetachedFrame,
-+                              nsIDocument* aContainerDoc);
- 
-   /**
--   * Retrieves the detached view and the document containing the view,
--   * as set by SetDetachedSubdocView().
-+   * Retrieves the detached nsIFrame and the document containing the nsIFrame,
-+   * as set by SetDetachedSubdocFrame().
-    */
--  nsView* GetDetachedSubdocView(nsIDocument** aContainerDoc) const;
-+  nsIFrame* GetDetachedSubdocFrame(nsIDocument** aContainerDoc) const;
- 
-   /**
-    * Applies a new set of sandbox flags. These are merged with the sandbox
-@@ -326,12 +327,12 @@
-   nsRefPtr<nsFrameMessageManager> mMessageManager;
-   nsCOMPtr<nsIInProcessContentFrameMessageManager> mChildMessageManager;
- private:
--  // Stores the root view of the subdocument while the subdocument is being
-+  // Stores the root frame of the subdocument while the subdocument is being
-   // reframed. Used to restore the presentation after reframing.
--  nsView* mDetachedSubdocViews;
-+  nsWeakFrame mDetachedSubdocFrame;
-   // Stores the containing document of the frame corresponding to this
-   // frame loader. This is reference is kept valid while the subframe's
--  // presentation is detached and stored in mDetachedSubdocViews. This
-+  // presentation is detached and stored in mDetachedSubdocFrame. This
-   // enables us to detect whether the frame has moved documents during
-   // a reframe, so that we know not to restore the presentation.
-   nsCOMPtr<nsIDocument> mContainerDocWhileDetached;
-diff -r 751208d22b91 -r ee870911fabb layout/generic/nsSubDocumentFrame.cpp
---- a/layout/generic/nsSubDocumentFrame.cpp	Thu May 26 17:07:49 2016 -0400
-+++ b/layout/generic/nsSubDocumentFrame.cpp	Wed May 04 16:12:48 2016 -0500
-@@ -130,13 +130,16 @@
-   nsRefPtr<nsFrameLoader> frameloader = FrameLoader();
-   if (frameloader) {
-     nsCOMPtr<nsIDocument> oldContainerDoc;
--    nsView* detachedViews =
--      frameloader->GetDetachedSubdocView(getter_AddRefs(oldContainerDoc));
--    frameloader->SetDetachedSubdocView(nullptr, nullptr);
--    if (detachedViews) {
--      if (oldContainerDoc == aContent->OwnerDoc()) {
-+    nsIFrame* detachedFrame =
-+      frameloader->GetDetachedSubdocFrame(getter_AddRefs(oldContainerDoc));
-+    frameloader->SetDetachedSubdocFrame(nullptr, nullptr);
-+    MOZ_ASSERT(oldContainerDoc || !detachedFrame);
-+    if (oldContainerDoc) {
-+      nsView* detachedView =
-+        detachedFrame ? detachedFrame->GetView() : nullptr;
-+      if (detachedView && oldContainerDoc == aContent->OwnerDoc()) {
-         // Restore stashed presentation.
--        ::InsertViewsInReverseOrder(detachedViews, mInnerView);
-+        ::InsertViewsInReverseOrder(detachedView, mInnerView);
-         ::EndSwapDocShellsForViews(mInnerView->GetFirstChild());
-       } else {
-         // Presentation is for a different document, don't restore it.
-@@ -252,11 +255,12 @@
-     nsRefPtr<nsFrameLoader> frameloader = FrameLoader();
-     if (frameloader) {
-       nsCOMPtr<nsIDocument> oldContainerDoc;
--      nsView* detachedViews =
--        frameloader->GetDetachedSubdocView(getter_AddRefs(oldContainerDoc));
--      if (detachedViews) {
--        nsSize size = detachedViews->GetBounds().Size();
--        nsPresContext* presContext = detachedViews->GetFrame()->PresContext();
-+      nsIFrame* detachedFrame =
-+        frameloader->GetDetachedSubdocFrame(getter_AddRefs(oldContainerDoc));
-+      nsView* view = detachedFrame ? detachedFrame->GetView() : nullptr;
-+      if (view) {
-+        nsSize size = view->GetBounds().Size();
-+        nsPresContext* presContext = detachedFrame->PresContext();
-         return nsIntSize(presContext->AppUnitsToDevPixels(size.width),
-                          presContext->AppUnitsToDevPixels(size.height));
-       }
-@@ -939,7 +943,7 @@
- 
-     // Either the frame has been constructed by now, or it never will be,
-     // either way we want to clear the stashed views.
--    mFrameLoader->SetDetachedSubdocView(nullptr, nullptr);
-+    mFrameLoader->SetDetachedSubdocFrame(nullptr, nullptr);
- 
-     nsSubDocumentFrame* frame = do_QueryFrame(mFrameElement->GetPrimaryFrame());
-     if ((!frame && mHideViewerIfFrameless) ||
-@@ -974,15 +978,25 @@
-   RefPtr<nsFrameLoader> frameloader = FrameLoader();
-   if (frameloader) {
-     nsView* detachedViews = ::BeginSwapDocShellsForViews(mInnerView->GetFirstChild());
--    frameloader->SetDetachedSubdocView(detachedViews, mContent->OwnerDoc());
- 
--    // We call nsFrameLoader::HideViewer() in a script runner so that we can
--    // safely determine whether the frame is being reframed or destroyed.
--    nsContentUtils::AddScriptRunner(
--      new nsHideViewer(mContent,
--                       frameloader,
--                       PresContext()->PresShell(),
--                       (mDidCreateDoc || mCallingShow)));
-+    if (detachedViews && detachedViews->GetFrame()) {
-+      MOZ_ASSERT(mContent->OwnerDoc());
-+      frameloader->SetDetachedSubdocFrame(
-+        detachedViews->GetFrame(), mContent->OwnerDoc());
-+
-+      // We call nsFrameLoader::HideViewer() in a script runner so that we can
-+      // safely determine whether the frame is being reframed or destroyed.
-+      nsContentUtils::AddScriptRunner(
-+        new nsHideViewer(mContent,
-+                         frameloader,
-+                         PresContext()->PresShell(),
-+                         (mDidCreateDoc || mCallingShow)));
-+    } else {
-+      frameloader->SetDetachedSubdocFrame(nullptr, nullptr);
-+      if (mDidCreateDoc || mCallingShow) {
-+        frameloader->Hide();
-+      }
-+    }
-   }
- 
-   nsLeafFrame::DestroyFrom(aDestructRoot);
diff --git a/gnu/packages/patches/icecat-CVE-2016-2819.patch b/gnu/packages/patches/icecat-CVE-2016-2819.patch
deleted file mode 100644
index cbb833d43d..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2819.patch
+++ /dev/null
@@ -1,102 +0,0 @@
-  changeset:   312054:072992bf176d
-  user:        Henri Sivonen <hsivonen@hsivonen.fi>
-  Date:        Sun May 15 17:03:06 2016 +0300
-  summary:     Bug 1270381. r=wchen. a=ritu
-
-diff -r d30748143c21 -r 072992bf176d parser/html/javasrc/TreeBuilder.java
---- a/parser/html/javasrc/TreeBuilder.java	Mon May 09 18:05:32 2016 -0700
-+++ b/parser/html/javasrc/TreeBuilder.java	Sun May 15 17:03:06 2016 +0300
-@@ -39,6 +39,11 @@
- import java.util.HashMap;
- import java.util.Map;
- 
-+import org.xml.sax.ErrorHandler;
-+import org.xml.sax.Locator;
-+import org.xml.sax.SAXException;
-+import org.xml.sax.SAXParseException;
-+
- import nu.validator.htmlparser.annotation.Auto;
- import nu.validator.htmlparser.annotation.Const;
- import nu.validator.htmlparser.annotation.IdType;
-@@ -54,11 +59,6 @@
- import nu.validator.htmlparser.common.TokenHandler;
- import nu.validator.htmlparser.common.XmlViolationPolicy;
- 
--import org.xml.sax.ErrorHandler;
--import org.xml.sax.Locator;
--import org.xml.sax.SAXException;
--import org.xml.sax.SAXParseException;
--
- public abstract class TreeBuilder<T> implements TokenHandler,
-         TreeBuilderState<T> {
- 
-@@ -1924,7 +1924,6 @@
-                                     break starttagloop;
-                                 }
-                                 generateImpliedEndTags();
--                                // XXX is the next if dead code?
-                                 if (errorHandler != null && !isCurrent("table")) {
-                                     errNoCheckUnclosedElementsOnStack();
-                                 }
-@@ -2183,11 +2182,11 @@
-                                             pop();
-                                         }
-                                         break;
--                                    } else if (node.isSpecial()
-+                                    } else if (eltPos == 0 || (node.isSpecial()
-                                             && (node.ns != "http://www.w3.org/1999/xhtml"
--                                                || (node.name != "p"
--                                                    && node.name != "address"
--                                                    && node.name != "div"))) {
-+                                                    || (node.name != "p"
-+                                                            && node.name != "address"
-+                                                            && node.name != "div")))) {
-                                         break;
-                                     }
-                                     eltPos--;
-@@ -3878,7 +3877,7 @@
-                                         pop();
-                                     }
-                                     break endtagloop;
--                                } else if (node.isSpecial()) {
-+                                } else if (eltPos == 0 || node.isSpecial()) {
-                                     errStrayEndTag(name);
-                                     break endtagloop;
-                                 }
-@@ -4745,6 +4744,7 @@
-             int furthestBlockPos = formattingEltStackPos + 1;
-             while (furthestBlockPos <= currentPtr) {
-                 StackNode<T> node = stack[furthestBlockPos]; // weak ref
-+                assert furthestBlockPos > 0: "How is formattingEltStackPos + 1 not > 0?";
-                 if (node.isSpecial()) {
-                     break;
-                 }
-diff -r d30748143c21 -r 072992bf176d parser/html/nsHtml5TreeBuilder.cpp
---- a/parser/html/nsHtml5TreeBuilder.cpp	Mon May 09 18:05:32 2016 -0700
-+++ b/parser/html/nsHtml5TreeBuilder.cpp	Sun May 15 17:03:06 2016 +0300
-@@ -1102,7 +1102,7 @@
-                     pop();
-                   }
-                   break;
--                } else if (node->isSpecial() && (node->ns != kNameSpaceID_XHTML || (node->name != nsHtml5Atoms::p && node->name != nsHtml5Atoms::address && node->name != nsHtml5Atoms::div))) {
-+                } else if (!eltPos || (node->isSpecial() && (node->ns != kNameSpaceID_XHTML || (node->name != nsHtml5Atoms::p && node->name != nsHtml5Atoms::address && node->name != nsHtml5Atoms::div)))) {
-                   break;
-                 }
-                 eltPos--;
-@@ -2749,7 +2749,7 @@
-                   pop();
-                 }
-                 NS_HTML5_BREAK(endtagloop);
--              } else if (node->isSpecial()) {
-+              } else if (!eltPos || node->isSpecial()) {
-                 errStrayEndTag(name);
-                 NS_HTML5_BREAK(endtagloop);
-               }
-@@ -3593,6 +3593,7 @@
-     int32_t furthestBlockPos = formattingEltStackPos + 1;
-     while (furthestBlockPos <= currentPtr) {
-       nsHtml5StackNode* node = stack[furthestBlockPos];
-+      MOZ_ASSERT(furthestBlockPos > 0, "How is formattingEltStackPos + 1 not > 0?");
-       if (node->isSpecial()) {
-         break;
-       }
diff --git a/gnu/packages/patches/icecat-CVE-2016-2821.patch b/gnu/packages/patches/icecat-CVE-2016-2821.patch
deleted file mode 100644
index 8255d60009..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2821.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-  changeset:   312045:7aea44059251
-  user:        Olli Pettay <Olli.Pettay@helsinki.fi>
-  Date:        Fri May 13 20:10:22 2016 +0300
-  summary:     Bug 1271460, don't leak editor created element objects, r=ehsan a=ritu
-
-diff -r 09418166fd77 -r 7aea44059251 editor/libeditor/nsHTMLInlineTableEditor.cpp
---- a/editor/libeditor/nsHTMLInlineTableEditor.cpp	Wed May 11 10:14:45 2016 +0100
-+++ b/editor/libeditor/nsHTMLInlineTableEditor.cpp	Fri May 13 20:10:22 2016 +0300
-@@ -109,7 +109,6 @@
- 
-   // get the root content node.
-   nsCOMPtr<nsIContent> bodyContent = GetRoot();
--  NS_ENSURE_TRUE(bodyContent, NS_ERROR_FAILURE);
- 
-   DeleteRefToAnonymousNode(mAddColumnBeforeButton, bodyContent, ps);
-   mAddColumnBeforeButton = nullptr;
diff --git a/gnu/packages/patches/icecat-CVE-2016-2824.patch b/gnu/packages/patches/icecat-CVE-2016-2824.patch
deleted file mode 100644
index 72772ed15f..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2824.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-  changeset:   312070:4b54feddf36c
-  user:        JerryShih <hshih@mozilla.com>
-  Date:        Wed May 25 16:27:41 2016 +0200
-  summary:     Bug 1248580 - strip the uploading element num according to the uniform array size. r=jgilbert a=ritu
-
-diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLContextValidate.cpp
---- a/dom/canvas/WebGLContextValidate.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/dom/canvas/WebGLContextValidate.cpp	Wed May 25 16:27:41 2016 +0200
-@@ -1531,9 +1531,10 @@
-     if (!loc->ValidateArrayLength(setterElemSize, setterArraySize, this, funcName))
-         return false;
- 
-+    MOZ_ASSERT((size_t)loc->mActiveInfo->mElemCount > loc->mArrayIndex);
-+    size_t uniformElemCount = loc->mActiveInfo->mElemCount - loc->mArrayIndex;
-     *out_rawLoc = loc->mLoc;
--    *out_numElementsToUpload = std::min((size_t)loc->mActiveInfo->mElemCount,
--                                        setterArraySize / setterElemSize);
-+    *out_numElementsToUpload = std::min(uniformElemCount, setterArraySize / setterElemSize);
-     return true;
- }
- 
-diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLProgram.cpp
---- a/dom/canvas/WebGLProgram.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/dom/canvas/WebGLProgram.cpp	Wed May 25 16:27:41 2016 +0200
-@@ -510,8 +510,14 @@
-     const NS_LossyConvertUTF16toASCII userName(userName_wide);
- 
-     nsDependentCString baseUserName;
--    bool isArray;
--    size_t arrayIndex;
-+    bool isArray = false;
-+    // GLES 2.0.25, Section 2.10, p35
-+    // If the the uniform location is an array, then the location of the first
-+    // element of that array can be retrieved by either using the name of the
-+    // uniform array, or the name of the uniform array appended with "[0]".
-+    // The ParseName() can't recognize this rule. So always initialize
-+    // arrayIndex with 0.
-+    size_t arrayIndex = 0;
-     if (!ParseName(userName, &baseUserName, &isArray, &arrayIndex))
-         return nullptr;
- 
-@@ -536,7 +542,8 @@
-         return nullptr;
- 
-     nsRefPtr<WebGLUniformLocation> locObj = new WebGLUniformLocation(mContext, LinkInfo(),
--                                                                     loc, activeInfo);
-+                                                                     loc, arrayIndex,
-+                                                                     activeInfo);
-     return locObj.forget();
- }
- 
-diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLUniformLocation.cpp
---- a/dom/canvas/WebGLUniformLocation.cpp	Tue May 10 22:58:47 2016 -0500
-+++ b/dom/canvas/WebGLUniformLocation.cpp	Wed May 25 16:27:41 2016 +0200
-@@ -16,10 +16,13 @@
- 
- WebGLUniformLocation::WebGLUniformLocation(WebGLContext* webgl,
-                                            const webgl::LinkedProgramInfo* linkInfo,
--                                           GLuint loc, const WebGLActiveInfo* activeInfo)
-+                                           GLuint loc,
-+                                           size_t arrayIndex,
-+                                           const WebGLActiveInfo* activeInfo)
-     : WebGLContextBoundObject(webgl)
-     , mLinkInfo(linkInfo)
-     , mLoc(loc)
-+    , mArrayIndex(arrayIndex)
-     , mActiveInfo(activeInfo)
- { }
- 
-diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLUniformLocation.h
---- a/dom/canvas/WebGLUniformLocation.h	Tue May 10 22:58:47 2016 -0500
-+++ b/dom/canvas/WebGLUniformLocation.h	Wed May 25 16:27:41 2016 +0200
-@@ -41,10 +41,11 @@
- 
-     const WeakPtr<const webgl::LinkedProgramInfo> mLinkInfo;
-     const GLuint mLoc;
-+    const size_t mArrayIndex;
-     const WebGLActiveInfo* const mActiveInfo;
- 
-     WebGLUniformLocation(WebGLContext* webgl, const webgl::LinkedProgramInfo* linkInfo,
--                         GLuint loc, const WebGLActiveInfo* activeInfo);
-+                         GLuint loc, size_t arrayIndex, const WebGLActiveInfo* activeInfo);
- 
-     bool ValidateForProgram(WebGLProgram* prog, WebGLContext* webgl,
-                             const char* funcName) const;
diff --git a/gnu/packages/patches/icecat-CVE-2016-2828.patch b/gnu/packages/patches/icecat-CVE-2016-2828.patch
deleted file mode 100644
index 951eb4fc46..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2828.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-  changeset:   312096:dc190bd03d24
-  tag:         FIREFOX_45_2_0esr_BUILD2
-  tag:         FIREFOX_45_2_0esr_RELEASE
-  user:        Jeff Gilbert <jgilbert@mozilla.com>
-  Date:        Thu Apr 14 13:50:04 2016 -0700
-  summary:     Bug 1224199 - Destroy SharedSurfaces before ~GLContext(). - r=jrmuizel a=lizzard
-
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLBlitHelper.cpp
---- a/gfx/gl/GLBlitHelper.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/GLBlitHelper.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -172,6 +172,9 @@
- 
- GLBlitHelper::~GLBlitHelper()
- {
-+    if (!mGL->MakeCurrent())
-+        return;
-+
-     DeleteTexBlitProgram();
- 
-     GLuint tex[] = {
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLContext.cpp
---- a/gfx/gl/GLContext.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/GLContext.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -2079,12 +2079,13 @@
-     if (IsDestroyed())
-         return;
- 
-+    // Null these before they're naturally nulled after dtor, as we want GLContext to
-+    // still be alive in *their* dtors.
-+    mScreen = nullptr;
-+    mBlitHelper = nullptr;
-+    mReadTexImageHelper = nullptr;
-+
-     if (MakeCurrent()) {
--        DestroyScreenBuffer();
--
--        mBlitHelper = nullptr;
--        mReadTexImageHelper = nullptr;
--
-         mTexGarbageBin->GLContextTeardown();
-     } else {
-         NS_WARNING("MakeCurrent() failed during MarkDestroyed! Skipping GL object teardown.");
-@@ -2328,8 +2329,6 @@
-         return false;
-     }
- 
--    DestroyScreenBuffer();
--
-     // This will rebind to 0 (Screen) if needed when
-     // it falls out of scope.
-     ScopedBindFramebuffer autoFB(this);
-@@ -2349,12 +2348,6 @@
- }
- 
- void
--GLContext::DestroyScreenBuffer()
--{
--    mScreen = nullptr;
--}
--
--void
- GLContext::ForceDirtyScreen()
- {
-     ScopedBindFramebuffer autoFB(0);
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLContext.h
---- a/gfx/gl/GLContext.h	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/GLContext.h	Thu Apr 14 13:50:04 2016 -0700
-@@ -3492,8 +3492,6 @@
-     friend class GLScreenBuffer;
-     UniquePtr<GLScreenBuffer> mScreen;
- 
--    void DestroyScreenBuffer();
--
-     SharedSurface* mLockedSurface;
- 
- public:
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLReadTexImageHelper.cpp
---- a/gfx/gl/GLReadTexImageHelper.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/GLReadTexImageHelper.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -31,6 +31,9 @@
- 
- GLReadTexImageHelper::~GLReadTexImageHelper()
- {
-+    if (!mGL->MakeCurrent())
-+        return;
-+
-     mGL->fDeleteProgram(mPrograms[0]);
-     mGL->fDeleteProgram(mPrograms[1]);
-     mGL->fDeleteProgram(mPrograms[2]);
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceANGLE.cpp
---- a/gfx/gl/SharedSurfaceANGLE.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/SharedSurfaceANGLE.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -120,8 +120,10 @@
- {
-     mEGL->fDestroySurface(Display(), mPBuffer);
- 
-+    if (!mGL->MakeCurrent())
-+        return;
-+
-     if (mFence) {
--        mGL->MakeCurrent();
-         mGL->fDeleteFences(1, &mFence);
-     }
- }
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceEGL.cpp
---- a/gfx/gl/SharedSurfaceEGL.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/SharedSurfaceEGL.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -87,9 +87,12 @@
- {
-     mEGL->fDestroyImage(Display(), mImage);
- 
--    mGL->MakeCurrent();
--    mGL->fDeleteTextures(1, &mProdTex);
--    mProdTex = 0;
-+    if (mSync) {
-+        // We can't call this unless we have the ext, but we will always have
-+        // the ext if we have something to destroy.
-+        mEGL->fDestroySync(Display(), mSync);
-+        mSync = 0;
-+    }
- 
-     if (mConsTex) {
-         MOZ_ASSERT(mGarbageBin);
-@@ -97,12 +100,11 @@
-         mConsTex = 0;
-     }
- 
--    if (mSync) {
--        // We can't call this unless we have the ext, but we will always have
--        // the ext if we have something to destroy.
--        mEGL->fDestroySync(Display(), mSync);
--        mSync = 0;
--    }
-+    if (!mGL->MakeCurrent())
-+        return;
-+
-+    mGL->fDeleteTextures(1, &mProdTex);
-+    mProdTex = 0;
- }
- 
- void
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceGralloc.cpp
---- a/gfx/gl/SharedSurfaceGralloc.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/SharedSurfaceGralloc.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -154,7 +154,9 @@
-
-     DEBUG_PRINT("[SharedSurface_Gralloc %p] destroyed\n", this);
- 
--    mGL->MakeCurrent();
-+    if (!mGL->MakeCurrent())
-+        return;
-+
-     mGL->fDeleteTextures(1, &mProdTex);
- 
-     if (mSync) {
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceIO.cpp
---- a/gfx/gl/SharedSurfaceIO.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/SharedSurfaceIO.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -111,11 +111,10 @@
- 
- SharedSurface_IOSurface::~SharedSurface_IOSurface()
- {
--    if (mProdTex) {
--        DebugOnly<bool> success = mGL->MakeCurrent();
--        MOZ_ASSERT(success);
--        mGL->fDeleteTextures(1, &mProdTex);
--    }
-+    if (!mGL->MakeCurrent())
-+        return;
-+
-+    mGL->fDeleteTextures(1, &mProdTex);
- }
- 
- ////////////////////////////////////////////////////////////////////////
-diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/TextureGarbageBin.cpp
---- a/gfx/gl/TextureGarbageBin.cpp	Mon Mar 07 11:51:12 2016 +0000
-+++ b/gfx/gl/TextureGarbageBin.cpp	Thu Apr 14 13:50:04 2016 -0700
-@@ -36,6 +36,7 @@
-     if (!mGL)
-         return;
- 
-+    MOZ_RELEASE_ASSERT(mGL->IsCurrent());
-     while (!mGarbageTextures.empty()) {
-         GLuint tex = mGarbageTextures.top();
-         mGarbageTextures.pop();
diff --git a/gnu/packages/patches/icecat-CVE-2016-2831.patch b/gnu/packages/patches/icecat-CVE-2016-2831.patch
deleted file mode 100644
index b99ecb6458..0000000000
--- a/gnu/packages/patches/icecat-CVE-2016-2831.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-  changeset:   312091:a3fff31b8b70
-  user:        Xidorn Quan <quanxunzhen@gmail.com>
-  Date:        Thu Apr 14 17:38:13 2016 +1000
-  summary:     Bug 1261933 - Continue unlocking pointer even if the widget has gone. r=smaug a=lizzard
-
-  MozReview-Commit-ID: 1siQhemFf9O
-
-diff -r f5e862ea4a72 -r a3fff31b8b70 dom/base/nsDocument.cpp
---- a/dom/base/nsDocument.cpp	Tue May 31 18:35:26 2016 -0700
-+++ b/dom/base/nsDocument.cpp	Thu Apr 14 17:38:13 2016 +1000
-@@ -12315,49 +12315,37 @@
- bool
- nsDocument::SetPointerLock(Element* aElement, int aCursorStyle)
- {
--  // NOTE: aElement will be nullptr when unlocking.
--  nsCOMPtr<nsPIDOMWindow> window = GetWindow();
--  if (!window) {
--    NS_WARNING("SetPointerLock(): No Window");
--    return false;
--  }
--
--  nsIDocShell *docShell = window->GetDocShell();
--  if (!docShell) {
--    NS_WARNING("SetPointerLock(): No DocShell (window already closed?)");
--    return false;
--  }
--
--  nsRefPtr<nsPresContext> presContext;
--  docShell->GetPresContext(getter_AddRefs(presContext));
--  if (!presContext) {
--    NS_WARNING("SetPointerLock(): Unable to get presContext in \
--                domWindow->GetDocShell()->GetPresContext()");
-+  MOZ_ASSERT(!aElement || aElement->OwnerDoc() == this,
-+             "We should be either unlocking pointer (aElement is nullptr), "
-+             "or locking pointer to an element in this document");
-+#ifdef DEBUG
-+  if (!aElement) {
-+    nsCOMPtr<nsIDocument> pointerLockedDoc =
-+      do_QueryReferent(EventStateManager::sPointerLockedDoc);
-+    MOZ_ASSERT(pointerLockedDoc == this);
-+  }
-+#endif
-+
-+  nsIPresShell* shell = GetShell();
-+  if (!shell) {
-+    NS_WARNING("SetPointerLock(): No PresShell");
-     return false;
-   }
--
--  nsCOMPtr<nsIPresShell> shell = presContext->PresShell();
--  if (!shell) {
--    NS_WARNING("SetPointerLock(): Unable to find presContext->PresShell()");
--    return false;
--  }
--
--  nsIFrame* rootFrame = shell->GetRootFrame();
--  if (!rootFrame) {
--    NS_WARNING("SetPointerLock(): Unable to get root frame");
-+  nsPresContext* presContext = shell->GetPresContext();
-+  if (!presContext) {
-+    NS_WARNING("SetPointerLock(): Unable to get PresContext");
-     return false;
-   }
- 
--  nsCOMPtr<nsIWidget> widget = rootFrame->GetNearestWidget();
--  if (!widget) {
--    NS_WARNING("SetPointerLock(): Unable to find widget in \
--                shell->GetRootFrame()->GetNearestWidget();");
--    return false;
--  }
--
--  if (aElement && (aElement->OwnerDoc() != this)) {
--    NS_WARNING("SetPointerLock(): Element not in this document.");
--    return false;
-+  nsCOMPtr<nsIWidget> widget;
-+  nsIFrame* rootFrame = shell->GetRootFrame();
-+  if (!NS_WARN_IF(!rootFrame)) {
-+    widget = rootFrame->GetNearestWidget();
-+    NS_WARN_IF_FALSE(widget, "SetPointerLock(): Unable to find widget "
-+                     "in shell->GetRootFrame()->GetNearestWidget();");
-+    if (aElement && !widget) {
-+      return false;
-+    }
-   }
- 
-   // Hide the cursor and set pointer lock for future mouse events
-diff -r f5e862ea4a72 -r a3fff31b8b70 dom/events/EventStateManager.cpp
---- a/dom/events/EventStateManager.cpp	Tue May 31 18:35:26 2016 -0700
-+++ b/dom/events/EventStateManager.cpp	Thu Apr 14 17:38:13 2016 +1000
-@@ -4128,10 +4128,6 @@
-   // NOTE: aElement will be nullptr when unlocking.
-   sIsPointerLocked = !!aElement;
- 
--  if (!aWidget) {
--    return;
--  }
--
-   // Reset mouse wheel transaction
-   WheelTransaction::EndTransaction();
- 
-@@ -4140,6 +4136,8 @@
-     do_GetService("@mozilla.org/widget/dragservice;1");
- 
-   if (sIsPointerLocked) {
-+    MOZ_ASSERT(aWidget, "Locking pointer requires a widget");
-+
-     // Store the last known ref point so we can reposition the pointer after unlock.
-     mPreLockPoint = sLastRefPoint;
- 
-@@ -4164,7 +4162,9 @@
-     // pre-pointerlock position, so that the synthetic mouse event reports
-     // no movement.
-     sLastRefPoint = mPreLockPoint;
--    aWidget->SynthesizeNativeMouseMove(mPreLockPoint + aWidget->WidgetToScreenOffset());
-+    if (aWidget) {
-+      aWidget->SynthesizeNativeMouseMove(mPreLockPoint + aWidget->WidgetToScreenOffset());
-+    }
- 
-     // Don't retarget events to this element any more.
-     nsIPresShell::SetCapturingContent(nullptr, CAPTURE_POINTERLOCK);
diff --git a/gnu/packages/patches/icecat-avoid-bundled-includes.patch b/gnu/packages/patches/icecat-avoid-bundled-includes.patch
deleted file mode 100644
index d11b528b8e..0000000000
--- a/gnu/packages/patches/icecat-avoid-bundled-includes.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Do not use headers from bundled libraries.
-
---- icecat-38.3.0/xpcom/build/moz.build.orig	2015-10-12 19:33:43.000000000 -0400
-+++ icecat-38.3.0/xpcom/build/moz.build	2015-10-13 16:37:28.693224858 -0400
-@@ -92,10 +92,5 @@
-     '/docshell/base',
- ]
- 
--if CONFIG['MOZ_VPX']:
--    LOCAL_INCLUDES += [
--        '/media/libvpx',
--    ]
--
- if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
-     CXXFLAGS += CONFIG['TK_CFLAGS']
---- icecat-38.3.0/storage/src/moz.build.orig	2015-10-12 19:34:45.000000000 -0400
-+++ icecat-38.3.0/storage/src/moz.build	2015-10-13 18:48:26.584724518 -0400
-@@ -66,7 +66,6 @@
- DEFINES['SQLITE_MAX_LIKE_PATTERN_LENGTH'] = 50000
- 
- LOCAL_INCLUDES += [
--    '/db/sqlite3/src',
-     '/dom/base',
- ]
- 
---- icecat-38.3.0/dom/indexedDB/moz.build.orig	2015-10-12 19:35:00.000000000 -0400
-+++ icecat-38.3.0/dom/indexedDB/moz.build	2015-10-13 19:10:10.528756487 -0400
-@@ -91,7 +91,6 @@
- FAIL_ON_WARNINGS = True
- 
- LOCAL_INCLUDES += [
--    '/db/sqlite3/src',
-     '/dom/base',
-     '/dom/storage',
-     '/dom/workers',
diff --git a/gnu/packages/patches/icecat-avoid-bundled-libraries.patch b/gnu/packages/patches/icecat-avoid-bundled-libraries.patch
new file mode 100644
index 0000000000..267f7b8aac
--- /dev/null
+++ b/gnu/packages/patches/icecat-avoid-bundled-libraries.patch
@@ -0,0 +1,50 @@
+Fixes needed when avoiding bundled libraries.
+
+--- icecat-45.3.0/xpcom/build/moz.build.orig
++++ icecat-45.3.0/xpcom/build/moz.build
+@@ -92,10 +92,5 @@
+     '/docshell/base',
+ ]
+ 
+-if CONFIG['MOZ_VPX']:
+-    LOCAL_INCLUDES += [
+-        '/media/libvpx',
+-    ]
+-
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
+     CXXFLAGS += CONFIG['TK_CFLAGS']
+--- icecat-45.3.0/storage/moz.build.orig
++++ icecat-45.3.0/storage/moz.build
+@@ -108,7 +108,6 @@
+ DEFINES['SQLITE_MAX_LIKE_PATTERN_LENGTH'] = 50000
+ 
+ LOCAL_INCLUDES += [
+-    '/db/sqlite3/src',
+     '/dom/base',
+ ]
+ 
+--- icecat-45.3.0/dom/indexedDB/moz.build.orig
++++ icecat-45.3.0/dom/indexedDB/moz.build
+@@ -96,7 +96,6 @@
+     SOURCES['Key.cpp'].flags += ['-Wno-error=type-limits']
+ 
+ LOCAL_INCLUDES += [
+-    '/db/sqlite3/src',
+     '/dom/base',
+     '/dom/storage',
+     '/dom/workers',
+--- icecat-45.3.0/modules/libmar/tests/Makefile.in.orig
++++ icecat-45.3.0/modules/libmar/tests/Makefile.in
+@@ -10,12 +10,5 @@
+ ifndef MOZ_PROFILE_GENERATE
+ libs::
+ 	$(INSTALL) ../tool/signmar$(BIN_SUFFIX) $(TESTROOT)/unit
+-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)nss3$(DLL_SUFFIX) $(TESTROOT)/unit
+-ifndef MOZ_FOLD_LIBS
+-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)nssutil3$(DLL_SUFFIX) $(TESTROOT)/unit
+-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)plc4$(DLL_SUFFIX) $(TESTROOT)/unit
+-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)nspr4$(DLL_SUFFIX) $(TESTROOT)/unit
+-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)plds4$(DLL_SUFFIX) $(TESTROOT)/unit
+-endif
+ endif
+ endif # Not Android
diff --git a/gnu/packages/patches/libupnp-CVE-2016-6255.patch b/gnu/packages/patches/libupnp-CVE-2016-6255.patch
new file mode 100644
index 0000000000..c9a3fa284c
--- /dev/null
+++ b/gnu/packages/patches/libupnp-CVE-2016-6255.patch
@@ -0,0 +1,50 @@
+Fix CVE-2016-6255:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6255
+http://www.openwall.com/lists/oss-security/2016/07/18/13
+
+Patch adapted from upstream commit:
+
+https://github.com/mrjimenez/pupnp/commit/d64d6a44906b5aa5306bdf1708531d698654dda5
+
+The upstream change is simplified to unconditionally disable the HTTP
+POST feature.
+
+From d64d6a44906b5aa5306bdf1708531d698654dda5 Mon Sep 17 00:00:00 2001
+From: Matthew Garrett <mjg59@srcf.ucam.org>
+Date: Tue, 23 Feb 2016 13:53:20 -0800
+Subject: [PATCH] Don't allow unhandled POSTs to write to the filesystem by
+ default
+
+If there's no registered handler for a POST request, the default behaviour
+is to write it to the filesystem. Several million deployed devices appear
+to have this behaviour, making it possible to (at least) store arbitrary
+data on them. Add a configure option that enables this behaviour, and change
+the default to just drop POSTs that aren't directly handled.
+
+Signed-off-by: Marcelo Roberto Jimenez <mroberto@users.sourceforge.net>
+(cherry picked from commit c91a8a3903367e1163765b73eb4d43be7d7927fa)
+---
+ configure.ac                         | 9 +++++++++
+ upnp/inc/upnpconfig.h.in             | 9 +++++++++
+ upnp/src/genlib/net/http/webserver.c | 4 ++++
+ 3 files changed, 22 insertions(+)
+
+diff --git a/upnp/src/genlib/net/http/webserver.c b/upnp/src/genlib/net/http/webserver.c
+index 26bf0f7..7ae8c1e 100644
+--- a/upnp/src/genlib/net/http/webserver.c
++++ b/upnp/src/genlib/net/http/webserver.c
+@@ -1367,9 +1367,13 @@ static int http_RecvPostMessage(
+ 		if (Fp == NULL)
+ 			return HTTP_INTERNAL_SERVER_ERROR;
+ 	} else {
++#if 0
+ 		Fp = fopen(filename, "wb");
+ 		if (Fp == NULL)
+ 			return HTTP_UNAUTHORIZED;
++#else
++		return HTTP_NOT_FOUND;
++#endif
+ 	}
+ 	parser->position = POS_ENTITY;
+ 	do {
diff --git a/gnu/packages/patches/qemu-CVE-2016-8576.patch b/gnu/packages/patches/qemu-CVE-2016-8576.patch
new file mode 100644
index 0000000000..5031b59d81
--- /dev/null
+++ b/gnu/packages/patches/qemu-CVE-2016-8576.patch
@@ -0,0 +1,62 @@
+From 20009bdaf95d10bf748fa69b104672d3cfaceddf Mon Sep 17 00:00:00 2001
+From: Gerd Hoffmann <kraxel@redhat.com>
+Date: Fri, 7 Oct 2016 10:15:29 +0200
+Subject: [PATCH] xhci: limit the number of link trbs we are willing to process
+
+Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
+---
+ hw/usb/hcd-xhci.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
+index 726435c..ee4fa48 100644
+--- a/hw/usb/hcd-xhci.c
++++ b/hw/usb/hcd-xhci.c
+@@ -54,6 +54,8 @@
+  * to the specs when it gets them */
+ #define ER_FULL_HACK
+ 
++#define TRB_LINK_LIMIT  4
++
+ #define LEN_CAP         0x40
+ #define LEN_OPER        (0x400 + 0x10 * MAXPORTS)
+ #define LEN_RUNTIME     ((MAXINTRS + 1) * 0x20)
+@@ -1000,6 +1002,7 @@ static TRBType xhci_ring_fetch(XHCIState *xhci, XHCIRing *ring, XHCITRB *trb,
+                                dma_addr_t *addr)
+ {
+     PCIDevice *pci_dev = PCI_DEVICE(xhci);
++    uint32_t link_cnt = 0;
+ 
+     while (1) {
+         TRBType type;
+@@ -1026,6 +1029,9 @@ static TRBType xhci_ring_fetch(XHCIState *xhci, XHCIRing *ring, XHCITRB *trb,
+             ring->dequeue += TRB_SIZE;
+             return type;
+         } else {
++            if (++link_cnt > TRB_LINK_LIMIT) {
++                return 0;
++            }
+             ring->dequeue = xhci_mask64(trb->parameter);
+             if (trb->control & TRB_LK_TC) {
+                 ring->ccs = !ring->ccs;
+@@ -1043,6 +1049,7 @@ static int xhci_ring_chain_length(XHCIState *xhci, const XHCIRing *ring)
+     bool ccs = ring->ccs;
+     /* hack to bundle together the two/three TDs that make a setup transfer */
+     bool control_td_set = 0;
++    uint32_t link_cnt = 0;
+ 
+     while (1) {
+         TRBType type;
+@@ -1058,6 +1065,9 @@ static int xhci_ring_chain_length(XHCIState *xhci, const XHCIRing *ring)
+         type = TRB_TYPE(trb);
+ 
+         if (type == TR_LINK) {
++            if (++link_cnt > TRB_LINK_LIMIT) {
++                return -length;
++            }
+             dequeue = xhci_mask64(trb.parameter);
+             if (trb.control & TRB_LK_TC) {
+                 ccs = !ccs;
+-- 
+1.8.3.1
+
diff --git a/gnu/packages/patches/qemu-CVE-2016-8577.patch b/gnu/packages/patches/qemu-CVE-2016-8577.patch
new file mode 100644
index 0000000000..c4132d2fb1
--- /dev/null
+++ b/gnu/packages/patches/qemu-CVE-2016-8577.patch
@@ -0,0 +1,36 @@
+Subject: [Qemu-devel] [PATCH] 9pfs: fix potential host memory leak in v9fs_read
+From: Li Qiang <liq3ea@gmail.com>
+
+In 9pfs read dispatch function, it doesn't free two QEMUIOVector
+object thus causing potential memory leak. This patch avoid this.
+
+Signed-off-by: Li Qiang <liq3ea@gmail.com>
+---
+ hw/9pfs/9p.c | 5 +++--
+  1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
+index 119ee58..543a791 100644
+--- a/hw/9pfs/9p.c
++++ b/hw/9pfs/9p.c
+@@ -1826,14 +1826,15 @@ static void v9fs_read(void *opaque)
+             if (len < 0) {
+                 /* IO error return the error */
+                 err = len;
+-                goto out;
++                goto out_free_iovec;
+             }
+         } while (count < max_count && len > 0);
+         err = pdu_marshal(pdu, offset, "d", count);
+         if (err < 0) {
+-            goto out;
++            goto out_free_iovec;
+         }
+         err += offset + count;
++out_free_iovec:
+         qemu_iovec_destroy(&qiov);
+         qemu_iovec_destroy(&qiov_full);
+     } else if (fidp->fid_type == P9_FID_XATTR) {
+-- 
+1.8.3.1
+
diff --git a/gnu/packages/patches/qemu-CVE-2016-8578.patch b/gnu/packages/patches/qemu-CVE-2016-8578.patch
new file mode 100644
index 0000000000..92ba365727
--- /dev/null
+++ b/gnu/packages/patches/qemu-CVE-2016-8578.patch
@@ -0,0 +1,27 @@
+From: Li Qiang <liq3ea@gmail.com>
+
+In 9pfs function v9fs_iov_vunmarshal, it will not allocate space
+for empty string. This will cause several NULL pointer dereference
+issues. this patch fix this issue.
+
+Signed-off-by: Li Qiang <liq3ea@gmail.com>
+---
+ fsdev/9p-iov-marshal.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/fsdev/9p-iov-marshal.c b/fsdev/9p-iov-marshal.c
+index 663cad5..1d16f8d 100644
+--- a/fsdev/9p-iov-marshal.c
++++ b/fsdev/9p-iov-marshal.c
+@@ -125,7 +125,7 @@ ssize_t v9fs_iov_vunmarshal(struct iovec *out_sg, int out_num, size_t offset,
+                 str->data = g_malloc(str->size + 1);
+                 copied = v9fs_unpack(str->data, out_sg, out_num, offset,
+                                      str->size);
+-                if (copied > 0) {
++                if (copied >= 0) {
+                     str->data[str->size] = 0;
+                 } else {
+                     v9fs_string_free(str);
+-- 
+1.8.3.1
+
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch b/gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch
deleted file mode 100644
index 00e5b7c771..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 6b12d93d2c7428a34bfd4b3813ba339ed57b698a Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <j@w1.fi>
-Date: Sun, 25 Oct 2015 15:45:50 +0200
-Subject: [PATCH] WNM: Ignore Key Data in WNM Sleep Mode Response frame if no
- PMF in use
-
-WNM Sleep Mode Response frame is used to update GTK/IGTK only if PMF is
-enabled. Verify that PMF is in use before using this field on station
-side to avoid accepting unauthenticated key updates. (CVE-2015-5310)
-
-Signed-off-by: Jouni Malinen <j@w1.fi>
----
- wpa_supplicant/wnm_sta.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c
-index 954de67..7d79499 100644
---- a/wpa_supplicant/wnm_sta.c
-+++ b/wpa_supplicant/wnm_sta.c
-@@ -187,6 +187,12 @@ static void wnm_sleep_mode_exit_success(struct wpa_supplicant *wpa_s,
- 	end = ptr + key_len_total;
- 	wpa_hexdump_key(MSG_DEBUG, "WNM: Key Data", ptr, key_len_total);
- 
-+	if (key_len_total && !wpa_sm_pmf_enabled(wpa_s->wpa)) {
-+		wpa_msg(wpa_s, MSG_INFO,
-+			"WNM: Ignore Key Data in WNM-Sleep Mode Response - PMF not enabled");
-+		return;
-+	}
-+
- 	while (ptr + 1 < end) {
- 		if (ptr + 2 + ptr[1] > end) {
- 			wpa_printf(MSG_DEBUG, "WNM: Invalid Key Data element "
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch b/gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch
deleted file mode 100644
index bfc4c74e95..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From bef802ece03f9ae9d52a21f0cf4f1bc2c5a1f8aa Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <j@w1.fi>
-Date: Sun, 1 Nov 2015 18:24:16 +0200
-Subject: [PATCH] EAP-pwd server: Fix last fragment length validation
-
-All but the last fragment had their length checked against the remaining
-room in the reassembly buffer. This allowed a suitably constructed last
-fragment frame to try to add extra data that would go beyond the buffer.
-The length validation code in wpabuf_put_data() prevents an actual
-buffer write overflow from occurring, but this results in process
-termination. (CVE-2015-5314)
-
-Signed-off-by: Jouni Malinen <j@w1.fi>
----
- src/eap_server/eap_server_pwd.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/eap_server/eap_server_pwd.c b/src/eap_server/eap_server_pwd.c
-index cb83ff7..9f787ab 100644
---- a/src/eap_server/eap_server_pwd.c
-+++ b/src/eap_server/eap_server_pwd.c
-@@ -970,7 +970,7 @@ static void eap_pwd_process(struct eap_sm *sm, void *priv,
- 	/*
- 	 * the first and all intermediate fragments have the M bit set
- 	 */
--	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
-+	if (EAP_PWD_GET_MORE_BIT(lm_exch) || data->in_frag_pos) {
- 		if ((data->in_frag_pos + len) > wpabuf_size(data->inbuf)) {
- 			wpa_printf(MSG_DEBUG, "EAP-pwd: Buffer overflow "
- 				   "attack detected! (%d+%d > %d)",
-@@ -981,6 +981,8 @@ static void eap_pwd_process(struct eap_sm *sm, void *priv,
- 		}
- 		wpabuf_put_data(data->inbuf, pos, len);
- 		data->in_frag_pos += len;
-+	}
-+	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
- 		wpa_printf(MSG_DEBUG, "EAP-pwd: Got a %d byte fragment",
- 			   (int) len);
- 		return;
-@@ -990,8 +992,6 @@ static void eap_pwd_process(struct eap_sm *sm, void *priv,
- 	 * buffering fragments so that's how we know it's the last)
- 	 */
- 	if (data->in_frag_pos) {
--		wpabuf_put_data(data->inbuf, pos, len);
--		data->in_frag_pos += len;
- 		pos = wpabuf_head_u8(data->inbuf);
- 		len = data->in_frag_pos;
- 		wpa_printf(MSG_DEBUG, "EAP-pwd: Last fragment, %d bytes",
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch b/gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch
deleted file mode 100644
index 82c26398b6..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 8057821706784608b828e769ccefbced95591e50 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <j@w1.fi>
-Date: Sun, 1 Nov 2015 18:18:17 +0200
-Subject: [PATCH] EAP-pwd peer: Fix last fragment length validation
-
-All but the last fragment had their length checked against the remaining
-room in the reassembly buffer. This allowed a suitably constructed last
-fragment frame to try to add extra data that would go beyond the buffer.
-The length validation code in wpabuf_put_data() prevents an actual
-buffer write overflow from occurring, but this results in process
-termination. (CVE-2015-5315)
-
-Signed-off-by: Jouni Malinen <j@w1.fi>
----
- src/eap_peer/eap_pwd.c | 7 +++----
- 1 file changed, 3 insertions(+), 4 deletions(-)
-
-diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
-index 1f78544..75ceef1 100644
---- a/src/eap_peer/eap_pwd.c
-+++ b/src/eap_peer/eap_pwd.c
-@@ -903,7 +903,7 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
- 	/*
- 	 * buffer and ACK the fragment
- 	 */
--	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
-+	if (EAP_PWD_GET_MORE_BIT(lm_exch) || data->in_frag_pos) {
- 		data->in_frag_pos += len;
- 		if (data->in_frag_pos > wpabuf_size(data->inbuf)) {
- 			wpa_printf(MSG_INFO, "EAP-pwd: Buffer overflow attack "
-@@ -916,7 +916,8 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
- 			return NULL;
- 		}
- 		wpabuf_put_data(data->inbuf, pos, len);
--
-+	}
-+	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
- 		resp = eap_msg_alloc(EAP_VENDOR_IETF, EAP_TYPE_PWD,
- 				     EAP_PWD_HDR_SIZE,
- 				     EAP_CODE_RESPONSE, eap_get_id(reqData));
-@@ -930,10 +931,8 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
- 	 * we're buffering and this is the last fragment
- 	 */
- 	if (data->in_frag_pos) {
--		wpabuf_put_data(data->inbuf, pos, len);
- 		wpa_printf(MSG_DEBUG, "EAP-pwd: Last fragment, %d bytes",
- 			   (int) len);
--		data->in_frag_pos += len;
- 		pos = wpabuf_head_u8(data->inbuf);
- 		len = data->in_frag_pos;
- 	}
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch b/gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch
deleted file mode 100644
index 3088f6a6dc..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 95577884ca4fa76be91344ff7a8d5d1e6dc3da61 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <j@w1.fi>
-Date: Sun, 1 Nov 2015 19:35:44 +0200
-Subject: [PATCH] EAP-pwd peer: Fix error path for unexpected Confirm message
-
-If the Confirm message is received from the server before the Identity
-exchange has been completed, the group has not yet been determined and
-data->grp is NULL. The error path in eap_pwd_perform_confirm_exchange()
-did not take this corner case into account and could end up
-dereferencing a NULL pointer and terminating the process if invalid
-message sequence is received. (CVE-2015-5316)
-
-Signed-off-by: Jouni Malinen <j@w1.fi>
----
- src/eap_peer/eap_pwd.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
-index 75ceef1..892b590 100644
---- a/src/eap_peer/eap_pwd.c
-+++ b/src/eap_peer/eap_pwd.c
-@@ -774,7 +774,8 @@ eap_pwd_perform_confirm_exchange(struct eap_sm *sm, struct eap_pwd_data *data,
- 	wpabuf_put_data(data->outbuf, conf, SHA256_MAC_LEN);
- 
- fin:
--	bin_clear_free(cruft, BN_num_bytes(data->grp->prime));
-+	if (data->grp)
-+		bin_clear_free(cruft, BN_num_bytes(data->grp->prime));
- 	BN_clear_free(x);
- 	BN_clear_free(y);
- 	if (data->outbuf == NULL) {
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch b/gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch
deleted file mode 100644
index acad6be0a4..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From ecbb0b3dc122b0d290987cf9c84010bbe53e1022 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@qca.qualcomm.com>
-Date: Fri, 4 Mar 2016 17:20:18 +0200
-Subject: [PATCH 1/5] WPS: Reject a Credential with invalid passphrase
-
-WPA/WPA2-Personal passphrase is not allowed to include control
-characters. Reject a Credential received from a WPS Registrar both as
-STA (Credential) and AP (AP Settings) if the credential is for WPAPSK or
-WPA2PSK authentication type and includes an invalid passphrase.
-
-This fixes an issue where hostapd or wpa_supplicant could have updated
-the configuration file PSK/passphrase parameter with arbitrary data from
-an external device (Registrar) that may not be fully trusted. Should
-such data include a newline character, the resulting configuration file
-could become invalid and fail to be parsed.
-
-Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
----
- src/utils/common.c         | 12 ++++++++++++
- src/utils/common.h         |  1 +
- src/wps/wps_attr_process.c | 10 ++++++++++
- 3 files changed, 23 insertions(+)
-
-diff --git a/src/utils/common.c b/src/utils/common.c
-index 450e2c6..27b7c02 100644
---- a/src/utils/common.c
-+++ b/src/utils/common.c
-@@ -697,6 +697,18 @@ int is_hex(const u8 *data, size_t len)
- }
- 
- 
-+int has_ctrl_char(const u8 *data, size_t len)
-+{
-+	size_t i;
-+
-+	for (i = 0; i < len; i++) {
-+		if (data[i] < 32 || data[i] == 127)
-+			return 1;
-+	}
-+	return 0;
-+}
-+
-+
- size_t merge_byte_arrays(u8 *res, size_t res_len,
- 			 const u8 *src1, size_t src1_len,
- 			 const u8 *src2, size_t src2_len)
-diff --git a/src/utils/common.h b/src/utils/common.h
-index 701dbb2..a972240 100644
---- a/src/utils/common.h
-+++ b/src/utils/common.h
-@@ -488,6 +488,7 @@ const char * wpa_ssid_txt(const u8 *ssid, size_t ssid_len);
- 
- char * wpa_config_parse_string(const char *value, size_t *len);
- int is_hex(const u8 *data, size_t len);
-+int has_ctrl_char(const u8 *data, size_t len);
- size_t merge_byte_arrays(u8 *res, size_t res_len,
- 			 const u8 *src1, size_t src1_len,
- 			 const u8 *src2, size_t src2_len);
-diff --git a/src/wps/wps_attr_process.c b/src/wps/wps_attr_process.c
-index eadb22f..e8c4579 100644
---- a/src/wps/wps_attr_process.c
-+++ b/src/wps/wps_attr_process.c
-@@ -229,6 +229,16 @@ static int wps_workaround_cred_key(struct wps_credential *cred)
- 		cred->key_len--;
- #endif /* CONFIG_WPS_STRICT */
- 	}
-+
-+
-+	if (cred->auth_type & (WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK) &&
-+	    (cred->key_len < 8 || has_ctrl_char(cred->key, cred->key_len))) {
-+		wpa_printf(MSG_INFO, "WPS: Reject credential with invalid WPA/WPA2-Personal passphrase");
-+		wpa_hexdump_ascii_key(MSG_INFO, "WPS: Network Key",
-+				      cred->key, cred->key_len);
-+		return -1;
-+	}
-+
- 	return 0;
- }
- 
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch b/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch
deleted file mode 100644
index 507a96e47c..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 73e4abb24a936014727924d8b0b2965edfc117dd Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@qca.qualcomm.com>
-Date: Fri, 4 Mar 2016 18:46:41 +0200
-Subject: [PATCH 2/5] Reject psk parameter set with invalid passphrase
- character
-
-WPA/WPA2-Personal passphrase is not allowed to include control
-characters. Reject a passphrase configuration attempt if that passphrase
-includes an invalid passphrase.
-
-This fixes an issue where wpa_supplicant could have updated the
-configuration file psk parameter with arbitrary data from the control
-interface or D-Bus interface. While those interfaces are supposed to be
-accessible only for trusted users/applications, it may be possible that
-an untrusted user has access to a management software component that
-does not validate the passphrase value before passing it to
-wpa_supplicant.
-
-This could allow such an untrusted user to inject up to 63 characters of
-almost arbitrary data into the configuration file. Such configuration
-file could result in wpa_supplicant trying to load a library (e.g.,
-opensc_engine_path, pkcs11_engine_path, pkcs11_module_path,
-load_dynamic_eap) from user controlled location when starting again.
-This would allow code from that library to be executed under the
-wpa_supplicant process privileges.
-
-Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
----
- wpa_supplicant/config.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
-index b1c7870..fdd9643 100644
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
-@@ -478,6 +478,12 @@ static int wpa_config_parse_psk(const struct parse_data *data,
- 		}
- 		wpa_hexdump_ascii_key(MSG_MSGDUMP, "PSK (ASCII passphrase)",
- 				      (u8 *) value, len);
-+		if (has_ctrl_char((u8 *) value, len)) {
-+			wpa_printf(MSG_ERROR,
-+				   "Line %d: Invalid passphrase character",
-+				   line);
-+			return -1;
-+		}
- 		if (ssid->passphrase && os_strlen(ssid->passphrase) == len &&
- 		    os_memcmp(ssid->passphrase, value, len) == 0) {
- 			/* No change to the previously configured value */
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch b/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch
deleted file mode 100644
index 684d25de96..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 0fe5a234240a108b294a87174ad197f6b5cb38e9 Mon Sep 17 00:00:00 2001
-From: Paul Stewart <pstew@google.com>
-Date: Thu, 3 Mar 2016 15:40:19 -0800
-Subject: [PATCH 3/5] Remove newlines from wpa_supplicant config network
- output
-
-Spurious newlines output while writing the config file can corrupt the
-wpa_supplicant configuration. Avoid writing these for the network block
-parameters. This is a generic filter that cover cases that may not have
-been explicitly addressed with a more specific commit to avoid control
-characters in the psk parameter.
-
-Signed-off-by: Paul Stewart <pstew@google.com>
----
- src/utils/common.c      | 11 +++++++++++
- src/utils/common.h      |  1 +
- wpa_supplicant/config.c | 15 +++++++++++++--
- 3 files changed, 25 insertions(+), 2 deletions(-)
-
-diff --git a/src/utils/common.c b/src/utils/common.c
-index 27b7c02..9856463 100644
---- a/src/utils/common.c
-+++ b/src/utils/common.c
-@@ -709,6 +709,17 @@ int has_ctrl_char(const u8 *data, size_t len)
- }
- 
- 
-+int has_newline(const char *str)
-+{
-+	while (*str) {
-+		if (*str == '\n' || *str == '\r')
-+			return 1;
-+		str++;
-+	}
-+	return 0;
-+}
-+
-+
- size_t merge_byte_arrays(u8 *res, size_t res_len,
- 			 const u8 *src1, size_t src1_len,
- 			 const u8 *src2, size_t src2_len)
-diff --git a/src/utils/common.h b/src/utils/common.h
-index a972240..d19927b 100644
---- a/src/utils/common.h
-+++ b/src/utils/common.h
-@@ -489,6 +489,7 @@ const char * wpa_ssid_txt(const u8 *ssid, size_t ssid_len);
- char * wpa_config_parse_string(const char *value, size_t *len);
- int is_hex(const u8 *data, size_t len);
- int has_ctrl_char(const u8 *data, size_t len);
-+int has_newline(const char *str);
- size_t merge_byte_arrays(u8 *res, size_t res_len,
- 			 const u8 *src1, size_t src1_len,
- 			 const u8 *src2, size_t src2_len);
-diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
-index fdd9643..eb97cd5 100644
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
-@@ -2699,8 +2699,19 @@ char * wpa_config_get(struct wpa_ssid *ssid, const char *var)
- 
- 	for (i = 0; i < NUM_SSID_FIELDS; i++) {
- 		const struct parse_data *field = &ssid_fields[i];
--		if (os_strcmp(var, field->name) == 0)
--			return field->writer(field, ssid);
-+		if (os_strcmp(var, field->name) == 0) {
-+			char *ret = field->writer(field, ssid);
-+
-+			if (ret && has_newline(ret)) {
-+				wpa_printf(MSG_ERROR,
-+					   "Found newline in value for %s; not returning it",
-+					   var);
-+				os_free(ret);
-+				ret = NULL;
-+			}
-+
-+			return ret;
-+		}
- 	}
- 
- 	return NULL;
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch b/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch
deleted file mode 100644
index 2dd38fee31..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From b166cd84a77a6717be9600bf95378a0055d6f5a5 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@qca.qualcomm.com>
-Date: Tue, 5 Apr 2016 23:33:10 +0300
-Subject: [PATCH 4/5] Reject SET_CRED commands with newline characters in the
- string values
-
-Most of the cred block parameters are written as strings without
-filtering and if there is an embedded newline character in the value,
-unexpected configuration file data might be written.
-
-This fixes an issue where wpa_supplicant could have updated the
-configuration file cred parameter with arbitrary data from the control
-interface or D-Bus interface. While those interfaces are supposed to be
-accessible only for trusted users/applications, it may be possible that
-an untrusted user has access to a management software component that
-does not validate the credential value before passing it to
-wpa_supplicant.
-
-This could allow such an untrusted user to inject almost arbitrary data
-into the configuration file. Such configuration file could result in
-wpa_supplicant trying to load a library (e.g., opensc_engine_path,
-pkcs11_engine_path, pkcs11_module_path, load_dynamic_eap) from user
-controlled location when starting again. This would allow code from that
-library to be executed under the wpa_supplicant process privileges.
-
-Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
----
- wpa_supplicant/config.c | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
-index eb97cd5..69152ef 100644
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
-@@ -2896,6 +2896,8 @@ int wpa_config_set_cred(struct wpa_cred *cred, const char *var,
- 
- 	if (os_strcmp(var, "password") == 0 &&
- 	    os_strncmp(value, "ext:", 4) == 0) {
-+		if (has_newline(value))
-+			return -1;
- 		str_clear_free(cred->password);
- 		cred->password = os_strdup(value);
- 		cred->ext_password = 1;
-@@ -2946,9 +2948,14 @@ int wpa_config_set_cred(struct wpa_cred *cred, const char *var,
- 	}
- 
- 	val = wpa_config_parse_string(value, &len);
--	if (val == NULL) {
-+	if (val == NULL ||
-+	    (os_strcmp(var, "excluded_ssid") != 0 &&
-+	     os_strcmp(var, "roaming_consortium") != 0 &&
-+	     os_strcmp(var, "required_roaming_consortium") != 0 &&
-+	     has_newline(val))) {
- 		wpa_printf(MSG_ERROR, "Line %d: invalid field '%s' string "
- 			   "value '%s'.", line, var, value);
-+		os_free(val);
- 		return -1;
- 	}
- 
--- 
-1.9.1
-
diff --git a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch b/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch
deleted file mode 100644
index 5f42aa9219..0000000000
--- a/gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 2a3f56502b52375c3bf113cf92adfa99bad6b488 Mon Sep 17 00:00:00 2001
-From: Jouni Malinen <jouni@qca.qualcomm.com>
-Date: Tue, 5 Apr 2016 23:55:48 +0300
-Subject: [PATCH 5/5] Reject SET commands with newline characters in the
- string values
-
-Many of the global configuration parameters are written as strings
-without filtering and if there is an embedded newline character in the
-value, unexpected configuration file data might be written.
-
-This fixes an issue where wpa_supplicant could have updated the
-configuration file global parameter with arbitrary data from the control
-interface or D-Bus interface. While those interfaces are supposed to be
-accessible only for trusted users/applications, it may be possible that
-an untrusted user has access to a management software component that
-does not validate the value of a parameter before passing it to
-wpa_supplicant.
-
-This could allow such an untrusted user to inject almost arbitrary data
-into the configuration file. Such configuration file could result in
-wpa_supplicant trying to load a library (e.g., opensc_engine_path,
-pkcs11_engine_path, pkcs11_module_path, load_dynamic_eap) from user
-controlled location when starting again. This would allow code from that
-library to be executed under the wpa_supplicant process privileges.
-
-Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
----
- wpa_supplicant/config.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
-index 69152ef..d9a1603 100644
---- a/wpa_supplicant/config.c
-+++ b/wpa_supplicant/config.c
-@@ -3764,6 +3764,12 @@ static int wpa_global_config_parse_str(const struct global_parse_data *data,
- 		return -1;
- 	}
- 
-+	if (has_newline(pos)) {
-+		wpa_printf(MSG_ERROR, "Line %d: invalid %s value with newline",
-+			   line, data->name);
-+		return -1;
-+	}
-+
- 	tmp = os_strdup(pos);
- 	if (tmp == NULL)
- 		return -1;
--- 
-1.9.1
-
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 30b0bdd22f..26a9113297 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -3744,6 +3744,34 @@ routines such as routines for numerical integration and optimization.")
 (define-public python2-scipy
   (package-with-python2 python-scipy))
 
+(define-public python-socksipy-branch
+  (package
+    (name "python-socksipy-branch")
+    (version "1.01")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "SocksiPy-branch" version))
+       (sha256
+        (base32
+         "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ; There are no tests
+    (home-page "https://code.google.com/archive/p/socksipy-branch/")
+    (synopsis "Python SOCKS module")
+    (description
+     "SocksiPy - A Python SOCKS client module.  It provides a
+socket-like interface that supports connections to any TCP
+service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
+The original version was developed by Dan Haim, this is a
+branch created by Mario Vilas to address some open issues,
+as the original project seems to have been abandoned circa 2007.")
+    (license license:bsd-3)))
+
+(define-public python2-socksipy-branch
+  (package-with-python2 python-socksipy-branch))
+
 (define-public python-sqlalchemy
   (package
     (name "python-sqlalchemy")
@@ -5876,19 +5904,18 @@ object to help create WSGI responses.")
 (define-public python-xlrd
   (package
     (name "python-xlrd")
-    (version "0.9.4")
+    (version "1.0.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://pypi.python.org/packages/source/x/"
-                                  "xlrd/xlrd-" version ".tar.gz"))
+              (uri (pypi-uri "xlrd" version))
               (sha256
                (base32
-                "0wpa55nvidmm5m2qr622dsh3cj46akdk0h3zjgzschcmydck73cf"))))
+                "0s8hjiz01vbhy85xalrz0qlsmd9ypf36zjqrf97hh984spapvy0g"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         ;; Current test in setup.py does not work as of 0.9.4, so use nose to
+         ;; Current test in setup.py does not work as of 1.0.0, so use nose to
          ;; run tests instead for now.
          (replace 'check (lambda _ (zero? (system* "nosetests")))))))
     (native-inputs `(("python-nose"       ,python-nose)
diff --git a/gnu/packages/qemu.scm b/gnu/packages/qemu.scm
index aee6a75f0e..9bf8c3afbd 100644
--- a/gnu/packages/qemu.scm
+++ b/gnu/packages/qemu.scm
@@ -76,7 +76,10 @@
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "0lqyz01z90nvxpc3nx4djbci7hx62cwvs5zwd6phssds0sap6vij"))))
+               "0lqyz01z90nvxpc3nx4djbci7hx62cwvs5zwd6phssds0sap6vij"))
+             (patches (search-patches "qemu-CVE-2016-8576.patch"
+                                      "qemu-CVE-2016-8577.patch"
+                                      "qemu-CVE-2016-8578.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Running tests in parallel can occasionally lead to failures, like:
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index a80b8f7739..23d22a3721 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -423,13 +423,13 @@ expectations and mocks frameworks.")
 (define-public bundler
   (package
     (name "bundler")
-    (version "1.12.5")
+    (version "1.13.2")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "bundler" version))
               (sha256
                (base32
-                "1q84xiwm9j771lpmiply0ls9l2bpvl5axn3jblxjvrldh8di2pkc"))))
+                "05gwyhfn103vrmrw13r3n78bcl75mrj82ipsbazcl08wg1bql7x6"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -2115,7 +2115,7 @@ aware transformations between times in different time zones.")
 (define-public ruby-tzinfo-data
   (package
     (name "ruby-tzinfo-data")
-    (version "1.2016.4")
+    (version "1.2016.7")
     (source
      (origin
        (method url-fetch)
@@ -2128,7 +2128,7 @@ aware transformations between times in different time zones.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0jnm8i379hn48cq5n39j7wzm08i0mw73kqzx3cqbxpiwlb1hnz80"))
+         "0vh75hkfmqk4hdjv6nm7acw64izwpnv7slkmh2kj7qlfz133yh9l"))
        ;; Remove the known test failure.
        ;; https://github.com/tzinfo/tzinfo-data/issues/10
        ;; https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1587128
@@ -3223,14 +3223,14 @@ that TURN is no longer being maintained.")
 (define-public ruby-mime-types-data
   (package
     (name "ruby-mime-types-data")
-    (version "3.2016.0221")
+    (version "3.2016.0521")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "mime-types-data" version))
        (sha256
         (base32
-         "05ygjn0nnfh6yp1wsi574jckk95wqg9a6g598wk4svvrkmkrzkpn"))))
+         "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm"))))
     (build-system ruby-build-system)
     (native-inputs
      `(("ruby-hoe" ,ruby-hoe)))
@@ -3467,14 +3467,14 @@ support to both Ruby and JRuby.  It uses @code{unf_ext} on CRuby and
 (define-public ruby-domain-name
   (package
     (name "ruby-domain-name")
-    (version "0.5.20160310")
+    (version "0.5.20160826")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "domain_name" version))
        (sha256
         (base32
-         "0g1175zspkqhlvl9s11g7p2nbmqpvpxxv02q8csd0ryc81laapys"))))
+         "0rg7gvp45xmb5qz8ydp7ivw05hhplh6k7mbawrpvkysl2c77w5xx"))))
     (build-system ruby-build-system)
     (arguments
      `(#:phases
@@ -4041,14 +4041,14 @@ generation.")
 (define-public ruby-sequel
   (package
     (name "ruby-sequel")
-    (version "4.34.0")
+    (version "4.39.0")
     (source
      (origin
        (method url-fetch)
        (uri (rubygems-uri "sequel" version))
        (sha256
         (base32
-         "0qscddpfwcajggxvbm4a4jv8kkpn6q056bgdg03km34bz8bis1x1"))))
+         "01zqd6mi9wvhbg76b91k35jppha0c944ar9f816gi400cf9817bg"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; Avoid dependency loop with ruby-minitest-hooks.
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index d089167312..45fa47b3c8 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -98,14 +98,14 @@ anywhere.")
 (define-public samba
   (package
     (name "samba")
-    (version "4.3.11")
+    (version "4.5.0")
     (source (origin
              (method url-fetch)
-             (uri (string-append "https://www.samba.org/samba/ftp/stable/samba-"
+             (uri (string-append "https://download.samba.org/pub/samba/stable/samba-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1v2grwivm6rasz1ganbybs0ikz1lydaniy65kxf1v8rl1qqngach"))))
+               "11mmyqag2i4yy6dikcggw776n0laxxr0rxhry72x5pa6nwws9afk"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -164,14 +164,14 @@ Desktops into Active Directory environments using the winbind daemon.")
 (define-public talloc
   (package
     (name "talloc")
-    (version "2.1.7")
+    (version "2.1.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/talloc/talloc-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "01m0kzndciyj43z1zd2nc61xqgh9knjv0w7lk1rrrlj8irr4w58r"))))
+                "0c3ihyb0jd8mhvi7gg2mr5w1zl2habx6jlkbyxzyckad2q8lkl92"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -201,14 +201,14 @@ destructors.  It is the core memory allocator used in Samba.")
 (define-public tevent
   (package
     (name "tevent")
-    (version "0.9.28")
+    (version "0.9.31")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/tevent/tevent-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0a9ml52jjnzz7qg9z750mavlvs1yibjwrzy4yl55dc95j0vm7n84"))))
+                "1z1bij9gccps34q8zakr1k7k3gpqs25jas20x1hch16qd8jz44sa"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -236,14 +236,14 @@ many event types, including timers, signals, and the classic file descriptor eve
 (define-public ldb
   (package
     (name "ldb")
-    (version "1.1.26")
+    (version "1.1.27")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/ldb/ldb-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1rmjv12pf57vga8s5z9p9d90rlfckc1lqjbcp89r83cq5fkwfhw8"))))
+                "1b1mkl5p8swb67s9aswavhzswlib34hpgsv66zgns009paf2df6d"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index 76e11a9516..76817b389f 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -29,15 +29,15 @@
 (define-public sane-backends
   (package
     (name "sane-backends")
-    (version "1.0.24")
+    (version "1.0.25")
     (source (origin
              (method url-fetch)
-             (uri (string-append 
-                   "https://alioth.debian.org/frs/download.php/file/3958/"
+             (uri (string-append
+                   "https://alioth.debian.org/frs/download.php/file/4146/"
                    name "-" version ".tar.gz"))
              (sha256
               (base32
-               "0ba68m6bzni54axjk15i51rya7hfsdliwvqyan5msl7iaid0iir7"))))
+               "0b3fvhrxl4l82bf3v0j47ypjv6a0k5lqbgknrq1agpmjca6vmmx4"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -73,4 +73,3 @@ proving access to any raster image scanner hardware (flatbed scanner,
 hand-held scanner, video- and still-cameras, frame-grabbers, etc.).  The
 package contains the library and drivers.")
     (license licence:gpl2+))) ; plus linking exception
-
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 88bfd062df..c551f18481 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -80,20 +80,6 @@ remote applications.")
     (home-page "http://www.libssh.org")
     (license license:lgpl2.1+)))
 
-(define libssh-0.6 ; kept private for use in guile-ssh
-  (package (inherit libssh)
-    (version "0.6.5")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://red.libssh.org/attachments/"
-                                  "download/121/libssh-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "0b6wyx6bwbb8jpn8x4rhlrdiqwqrwrs0mxjmrnqykm9kw1ijgm8g"))
-              (patches (search-patches
-                        "libssh-0.6.5-CVE-2016-0739.patch"))))))
-
 (define-public libssh2
   (package
    (name "libssh2")
@@ -209,7 +195,7 @@ Additionally, various channel-specific options can be negotiated.")
 (define-public guile-ssh
   (package
     (name "guile-ssh")
-    (version "0.9.0")
+    (version "0.10.1")
     (source (origin
               ;; ftp://memory-heap.org/software/guile-ssh/guile-ssh-VERSION.tar.gz
               ;; exists, but the server appears to be too slow and unreliable.
@@ -220,34 +206,29 @@ Additionally, various channel-specific options can be negotiated.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "04zs1cykwdyj51ag62ymrkgsja9dbhbaaglkvbfbac0bkxl2ir6d"))))
+                "0ky77kr7rnkhbq938bir61mlr8b86lfjcjjb1bxx1y1fhimsiz72"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (alist-cons-after
-                 'unpack 'autoreconf
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (chmod "doc/version.texi" #o777) ;make it writable
-                   (zero? (system* "autoreconf" "-vfi")))
-                 (alist-cons-after
-                  'install 'fix-libguile-ssh-file-name
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let* ((out      (assoc-ref outputs "out"))
-                           (libdir   (string-append out "/lib"))
-                           (guiledir (string-append out
-                                                    "/share/guile/site/2.0")))
-                      (substitute* (find-files guiledir ".scm")
-                        (("\"libguile-ssh\"")
-                         (string-append "\"" libdir "/libguile-ssh\"")))
-
-                      ;; Make sure it works.
-                      (setenv "GUILE_LOAD_PATH" guiledir)
-                      (setenv "GUILE_LOAD_COMPILED_PATH" guiledir)
-                      (zero?
-                       (system* "guile" "-c" "(use-modules (ssh session))"))))
-                  %standard-phases))
-       #:configure-flags (list (string-append "--with-guilesitedir="
-                                              (assoc-ref %outputs "out")
-                                              "/share/guile/site/2.0"))
+     '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'autoreconf
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (chmod "doc/version.texi" #o777) ;make it writable
+                      (zero? (system* "autoreconf" "-vfi"))))
+                  (add-before 'build 'fix-libguile-ssh-file-name
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; Build and install libguile-ssh.so so that we can use
+                      ;; its absolute file name in .scm files, before we build
+                      ;; the .go files.
+                      (and (zero? (system* "make" "install"
+                                           "-C" "libguile-ssh"
+                                           "-j" (number->string
+                                                 (parallel-job-count))))
+                           (let* ((out      (assoc-ref outputs "out"))
+                                  (libdir   (string-append out "/lib")))
+                             (substitute* (find-files "." "\\.scm$")
+                               (("\"libguile-ssh\"")
+                                (string-append "\"" libdir "/libguile-ssh\"")))
+                             #t)))))
 
        ;; Tests are not parallel-safe.
        #:parallel-tests? #f))
@@ -258,7 +239,7 @@ Additionally, various channel-specific options can be negotiated.")
                      ("pkg-config" ,pkg-config)
                      ("which" ,which)))
     (inputs `(("guile" ,guile-2.0)
-              ("libssh" ,libssh-0.6)
+              ("libssh" ,libssh)
               ("libgcrypt" ,libgcrypt)))
     (synopsis "Guile bindings to libssh")
     (description
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 79fb0427fd..0748b5d860 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -432,14 +432,14 @@ and operations on them using LAPACK and SuiteSparse.")
 (define-public r-mgcv
   (package
    (name "r-mgcv")
-   (version "1.8-14")
+   (version "1.8-15")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "mgcv" version))
      (sha256
       (base32
-       "0ly9x23q6kd7aqrsb8qjsj8jc597h3068iaqjmkkdv56r5dln29f"))))
+       "05xzmsx51y92c0r0yihac8m9d3v1sqnn8ahcgm3q75j8z6zybsjs"))))
    (build-system r-build-system)
    (home-page "http://cran.r-project.org/web/packages/mgcv")
    (synopsis "Mixed generalised additive model computation")
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 43e9288fee..6a668801ff 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -28,16 +28,16 @@
 (define-public tbb
   (package
     (name "tbb")
-    (version "2017")
+    (version "2017_20160916")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://www.threadingbuildingblocks.org/sites/default"
                     "/files/software_releases/source/"
-                    "tbb" version "_20160722oss_src.tgz"))
+                    "tbb" version "oss_src.tgz"))
               (sha256
                (base32
-                "038rmv3s8si51bjrzwyv8ldqw742fjjdfayi8pmjaq5zw32b8pzx"))
+                "1i3zy87gyzw22fvajm039w6g822qzqn7jbmznc8y8c57qpqnf330"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "build/common.inc"
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 243a8fb44e..c13eec2723 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -1440,7 +1440,7 @@ be used for realtime video capture via Linux-specific APIs.")
 (define-public obs
   (package
     (name "obs")
-    (version "0.15.4")
+    (version "0.16.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/jp9000/obs-studio"
@@ -1448,7 +1448,7 @@ be used for realtime video capture via Linux-specific APIs.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "11bqk0jpp8fp24j0rkjgrv3fdi3xnjyk4wq55j803cg84mn4zsp0"))))
+                "0p2grxyaf79hb3nlja23xp7b2vc1w18llvzcyhnjn2lhwfjabcgm"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; no tests
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 4901f116e3..cabf1e6b49 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -45,6 +45,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system r)
   #:use-module (guix build-system trivial)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages apr)
   #:use-module (gnu packages documentation)
@@ -121,14 +122,14 @@ and its related documentation.")
 (define-public nginx
   (package
     (name "nginx")
-    (version "1.10.1")
+    (version "1.11.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://nginx.org/download/nginx-"
+              (uri (string-append "https://nginx.org/download/nginx-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "00d8hxj8453c7989qd7z4f1mjp0k3ib8k29i1qyf11b4ar35ilqz"))))
+                "0fvb09ycxz3xnyynav6ybj6miwh9kv8jcb2vzrmvqhzn8cgiq8h6"))))
     (build-system gnu-build-system)
     (inputs `(("pcre" ,pcre)
               ("openssl" ,openssl)
@@ -140,7 +141,8 @@ and its related documentation.")
          (add-before 'configure 'patch-/bin/sh
            (lambda _
              (substitute* "auto/feature"
-               (("/bin/sh") (which "bash")))))
+               (("/bin/sh") (which "bash")))
+             #t))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((flags
@@ -186,7 +188,7 @@ and its related documentation.")
                             (string-append share "/conf"))
                (rename-file (string-append out "/html")
                             (string-append share "/html"))))))))
-    (home-page "http://nginx.org")
+    (home-page "https://nginx.org")
     (synopsis "HTTP and reverse proxy server")
     (description
      "Nginx (\"engine X\") is a high-performance web and reverse proxy server
@@ -3147,6 +3149,34 @@ http://opensearch.a9.com} compatible search engines.")
 their web site.")
     (home-page "http://search.cpan.org/~gaas/WWW-RobotRules/")))
 
+(define-public python-feedparser
+  (package
+    (name "python-feedparser")
+    (version "5.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "feedparser" version ".tar.bz2"))
+       (sha256
+        (base32
+         "00hb4qg2am06g81mygfi1jsbx8830024jm45g6qp9g8fr6am91yf"))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/kurtmckee/feedparser")
+    (synopsis "Parse feeds in Python")
+    (description
+     "Universal feed parser which handles RSS 0.9x, RSS 1.0, RSS 2.0,
+CDF, Atom 0.3, and Atom 1.0 feeds.")
+    (license (list l:bsd-2 ; source code
+                   l:freebsd-doc)))) ; documentation
+
+(define-public python2-feedparser
+  (let ((base (package-with-python2
+               (strip-python2-variant python-feedparser))))
+    (package (inherit base)
+             (native-inputs
+              `(("python2-setuptools" ,python2-setuptools))))))
+
 (define-public r-httpuv
   (package
     (name "r-httpuv")
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index d098d831e1..ccac677202 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -108,6 +108,7 @@ Section \"Files\"
   FontPath \"" font-adobe75dpi "/share/fonts/X11/75dpi\"
   ModulePath \"" xf86-video-vesa "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-fbdev "/lib/xorg/modules/drivers\"
+  ModulePath \"" xf86-video-ati "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-modesetting "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-cirrus "/lib/xorg/modules/drivers\"
   ModulePath \"" xf86-video-intel "/lib/xorg/modules/drivers\"
@@ -145,6 +146,7 @@ EndSection
 (define %default-xorg-modules
   (list xf86-video-vesa
         xf86-video-fbdev
+        xf86-video-ati
         xf86-video-modesetting
         xf86-video-cirrus
         xf86-video-intel
diff --git a/guix/build-system/asdf.scm b/guix/build-system/asdf.scm
new file mode 100644
index 0000000000..f28c098ea2
--- /dev/null
+++ b/guix/build-system/asdf.scm
@@ -0,0 +1,360 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
+;;;
+;;; 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 asdf)
+  #:use-module (guix store)
+  #:use-module (guix utils)
+  #:use-module (guix packages)
+  #:use-module (guix derivations)
+  #:use-module (guix search-paths)
+  #:use-module (guix build-system)
+  #:use-module (guix build-system gnu)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (%asdf-build-system-modules
+            %asdf-build-modules
+            asdf-build
+            asdf-build-system/sbcl
+            asdf-build-system/ecl
+            asdf-build-system/source
+            sbcl-package->cl-source-package
+            sbcl-package->ecl-package))
+
+;; Commentary:
+;;
+;; Standard build procedure for asdf packages.  This is implemented as an
+;; extension of 'gnu-build-system'.
+;;
+;; Code:
+
+(define %asdf-build-system-modules
+  ;; Imported build-side modules
+  `((guix build asdf-build-system)
+    (guix build lisp-utils)
+    ,@%gnu-build-system-modules))
+
+(define %asdf-build-modules
+  ;; Used (visible) build-side modules
+  '((guix build asdf-build-system)
+    (guix build utils)
+    (guix build lisp-utils)))
+
+(define (default-lisp implementation)
+  "Return the default package for the lisp IMPLEMENTATION."
+  ;; Lazily resolve the binding to avoid a circular dependancy.
+  (let ((lisp-module (resolve-interface '(gnu packages lisp))))
+    (module-ref lisp-module implementation)))
+
+(define* (lower/source name
+                       #:key source inputs outputs native-inputs system target
+                       #:allow-other-keys
+                       #:rest arguments)
+  "Return a bag for NAME"
+  (define private-keywords
+    '(#:target #:inputs #:native-inputs))
+
+  (and (not target)
+       (bag
+         (name name)
+         (system system)
+         (host-inputs `(,@(if source
+                              `(("source" ,source))
+                              '())
+                        ,@inputs
+                        ,@(standard-packages)))
+         (build-inputs native-inputs)
+         (outputs outputs)
+         (build asdf-build/source)
+         (arguments (strip-keyword-arguments private-keywords arguments)))))
+
+(define* (asdf-build/source store name inputs
+                            #:key source outputs
+                            (phases '(@ (guix build asdf-build-system)
+                                        %standard-phases/source))
+                            (search-paths '())
+                            (system (%current-system))
+                            (guile #f)
+                            (imported-modules %asdf-build-system-modules)
+                            (modules %asdf-build-modules))
+  (define builder
+    `(begin
+       (use-modules ,@modules)
+       (asdf-build/source #:name ,name
+                          #:source ,(match (assoc-ref inputs "source")
+                                      (((? derivation? source))
+                                       (derivation->output-path source))
+                                      ((source) source)
+                                      (source source))
+                          #:system ,system
+                          #:phases ,phases
+                          #: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
+       (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* (package-with-build-system from-build-system to-build-system
+                                    from-prefix to-prefix
+                                    #:key variant-property
+                                    phases-transformer)
+  "Return a precedure which takes a package PKG which uses FROM-BUILD-SYSTEM,
+and returns one using TO-BUILD-SYSTEM.  If PKG was prefixed by FROM-PREFIX,
+the resulting package will be prefixed by TO-PREFIX.  Inputs of PKG are
+recursively transformed using the same rule.  The result's #:phases argument
+will be modified by PHASES-TRANSFORMER, an S-expression which evaluates on the
+build side to a procedure of one argument.
+
+VARIANT-PROPERTY can be added to a package's properties to indicate that the
+corresponding package promise should be used as the result of this
+transformation.  This allows the result to differ from what the transformation
+would otherwise produce.
+
+If TO-BUILD-SYSTEM is asdf-build-system/source, the resulting package will be
+set up using CL source package conventions."
+  (define target-is-source? (eq? asdf-build-system/source to-build-system))
+
+  (define (transform-package-name name)
+    (if (string-prefix? from-prefix name)
+        (let ((new-name (string-drop name (string-length from-prefix))))
+          (if (string-prefix? to-prefix new-name)
+              new-name
+              (string-append to-prefix new-name)))
+        name))
+
+  (define (has-from-build-system? pkg)
+    (eq? from-build-system (package-build-system pkg)))
+
+  (define transform
+    (memoize
+     (lambda (pkg)
+       (define rewrite
+         (match-lambda
+           ((name content . rest)
+            (let* ((is-package? (package? content))
+                   (new-content (if is-package? (transform content) content))
+                   (new-name (if (and is-package?
+                                      (string-prefix? from-prefix name))
+                                 (package-name new-content)
+                                 name)))
+              `(,new-name ,new-content ,@rest)))))
+
+       ;; Special considerations for source packages: CL inputs become
+       ;; propagated, and un-handled arguments are removed. Native inputs are
+       ;; removed as are extraneous outputs.
+       (define new-propagated-inputs
+         (if target-is-source?
+             (map rewrite
+                  (filter (match-lambda
+                            ((_ input . _)
+                             (has-from-build-system? input)))
+                          (package-inputs pkg)))
+             '()))
+
+       (define new-inputs
+         (if target-is-source?
+             (map rewrite
+                  (filter (match-lambda
+                            ((_ input . _)
+                             (not (has-from-build-system? input))))
+                          (package-inputs pkg)))
+             (map rewrite (package-inputs pkg))))
+
+       (define base-arguments
+         (if target-is-source?
+             (strip-keyword-arguments
+              '(#:tests? #:special-dependencies #:asd-file
+                #:test-only-systems #:lisp)
+              (package-arguments pkg))
+             (package-arguments pkg)))
+
+       (cond
+        ((and variant-property
+              (assoc-ref (package-properties pkg) variant-property))
+         => force)
+
+        ((has-from-build-system? pkg)
+         (package
+           (inherit pkg)
+           (location (package-location pkg))
+           (name (transform-package-name (package-name pkg)))
+           (build-system to-build-system)
+           (arguments
+            (substitute-keyword-arguments base-arguments
+              ((#:phases phases) (list phases-transformer phases))))
+           (inputs new-inputs)
+           (propagated-inputs new-propagated-inputs)
+           (native-inputs (if target-is-source?
+                              '()
+                              (map rewrite (package-native-inputs pkg))))
+           (outputs (if target-is-source?
+                        '("out")
+                        (package-outputs pkg)))))
+        (else pkg)))))
+
+  transform)
+
+(define (strip-variant-as-necessary variant pkg)
+  (define properties (package-properties pkg))
+  (if (assoc variant properties)
+      (package
+        (inherit pkg)
+        (properties (alist-delete variant properties)))
+      pkg))
+
+(define (lower lisp-implementation)
+  (lambda* (name
+            #:key source inputs outputs native-inputs system target
+            (lisp (default-lisp (string->symbol lisp-implementation)))
+            #:allow-other-keys
+            #:rest arguments)
+    "Return a bag for NAME"
+    (define private-keywords
+      '(#:target #:inputs #:native-inputs #:lisp))
+
+    (and (not target)
+         (bag
+           (name name)
+           (system system)
+           (host-inputs `(,@(if source
+                                `(("source" ,source))
+                                '())
+                          ,@inputs
+                          ,@(standard-packages)))
+           (build-inputs `((,lisp-implementation ,lisp)
+                           ,@native-inputs))
+           (outputs outputs)
+           (build (asdf-build lisp-implementation))
+           (arguments (strip-keyword-arguments private-keywords arguments))))))
+
+(define (asdf-build lisp-implementation)
+  (lambda* (store name inputs
+                  #:key source outputs
+                  (tests? #t)
+                  (special-dependencies ''())
+                  (asd-file #f)
+                  (test-only-systems ''())
+                  (lisp lisp-implementation)
+                  (phases '(@ (guix build asdf-build-system)
+                              %standard-phases))
+                  (search-paths '())
+                  (system (%current-system))
+                  (guile #f)
+                  (imported-modules %asdf-build-system-modules)
+                  (modules %asdf-build-modules))
+
+    (define builder
+      `(begin
+         (use-modules ,@modules)
+         (asdf-build #:name ,name
+                     #:source ,(match (assoc-ref inputs "source")
+                                 (((? derivation? source))
+                                  (derivation->output-path source))
+                                 ((source) source)
+                                 (source source))
+                     #:lisp ,lisp
+                     #:special-dependencies ,special-dependencies
+                     #:asd-file ,asd-file
+                     #:test-only-systems ,test-only-systems
+                     #:system ,system
+                     #:tests? ,tests?
+                     #:phases ,phases
+                     #: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
+         (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 asdf-build-system/sbcl
+  (build-system
+    (name 'asdf/sbcl)
+    (description "The build system for ASDF binary packages using SBCL")
+    (lower (lower "sbcl"))))
+
+(define asdf-build-system/ecl
+  (build-system
+    (name 'asdf/ecl)
+    (description "The build system for ASDF binary packages using ECL")
+    (lower (lower "ecl"))))
+
+(define asdf-build-system/source
+  (build-system
+    (name 'asdf/source)
+    (description "The build system for ASDF source packages")
+    (lower lower/source)))
+
+(define sbcl-package->cl-source-package
+  (let* ((property 'cl-source-variant)
+         (transformer
+          (package-with-build-system asdf-build-system/sbcl
+                                     asdf-build-system/source
+                                     "sbcl-"
+                                     "cl-"
+                                     #:variant-property property
+                                     #:phases-transformer
+                                     '(const %standard-phases/source))))
+    (lambda (pkg)
+      (transformer
+       (strip-variant-as-necessary property pkg)))))
+
+(define sbcl-package->ecl-package
+  (let* ((property 'ecl-variant)
+         (transformer
+          (package-with-build-system asdf-build-system/sbcl
+                                     asdf-build-system/ecl
+                                     "sbcl-"
+                                     "ecl-"
+                                     #:variant-property property
+                                     #:phases-transformer
+                                     'identity)))
+    (lambda (pkg)
+      (transformer
+       (strip-variant-as-necessary property pkg)))))
+
+;;; asdf.scm ends here
diff --git a/guix/build/asdf-build-system.scm b/guix/build/asdf-build-system.scm
new file mode 100644
index 0000000000..085d073dea
--- /dev/null
+++ b/guix/build/asdf-build-system.scm
@@ -0,0 +1,282 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
+;;;
+;;; 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 asdf-build-system)
+  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
+  #:use-module (guix build utils)
+  #:use-module (guix build lisp-utils)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 rdelim)
+  #:use-module (ice-9 receive)
+  #:use-module (ice-9 regex)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 format)
+  #:use-module (ice-9 ftw)
+  #:export (%standard-phases
+            %standard-phases/source
+            asdf-build
+            asdf-build/source))
+
+;; Commentary:
+;;
+;; System for building ASDF packages; creating executable programs and images
+;; from them.
+;;
+;; Code:
+
+(define %object-prefix "/lib")
+
+(define (source-install-prefix lisp)
+  (string-append %install-prefix "/" lisp "-source"))
+
+(define %system-install-prefix
+  (string-append %install-prefix "/systems"))
+
+(define (output-path->package-name path)
+  (package-name->name+version (strip-store-file-name path)))
+
+(define (outputs->name outputs)
+  (output-path->package-name
+   (assoc-ref outputs "out")))
+
+(define (lisp-source-directory output lisp name)
+  (string-append output (source-install-prefix lisp) "/" name))
+
+(define (source-directory output name)
+  (string-append output %install-prefix "/source/" name))
+
+(define (library-directory output lisp)
+  (string-append output %object-prefix
+                 "/" lisp))
+
+(define (output-translation source-path
+                            object-output
+                            lisp)
+  "Return a translation for the system's source path
+to it's binary output."
+  `((,source-path
+     :**/ :*.*.*)
+    (,(library-directory object-output lisp)
+     :**/ :*.*.*)))
+
+(define (source-asd-file output lisp name asd-file)
+  (string-append (lisp-source-directory output lisp name) "/" asd-file))
+
+(define (copy-files-to-output outputs output name)
+  "Copy all files from OUTPUT to \"out\".  Create an extra link to any
+system-defining files in the source to a convenient location.  This is done
+before any compiling so that the compiled source locations will be valid."
+  (let* ((out (assoc-ref outputs output))
+         (source (getcwd))
+         (target (source-directory out name))
+         (system-path (string-append out %system-install-prefix)))
+    (copy-recursively source target)
+    (mkdir-p system-path)
+    (for-each
+     (lambda (file)
+       (symlink file
+                (string-append system-path "/" (basename file))))
+     (find-files target "\\.asd$"))
+    #t))
+
+(define* (install #:key outputs #:allow-other-keys)
+  "Copy and symlink all the source files."
+  (copy-files-to-output outputs "out" (outputs->name outputs)))
+
+(define* (copy-source #:key outputs lisp #:allow-other-keys)
+  "Copy the source to \"out\"."
+  (let* ((out (assoc-ref outputs "out"))
+         (name (remove-lisp-from-name (output-path->package-name out) lisp))
+         (install-path (string-append out %install-prefix)))
+    (copy-files-to-output outputs "out" name)
+    ;; Hide the files from asdf
+    (with-directory-excursion install-path
+      (rename-file "source" (string-append lisp "-source"))
+      (delete-file-recursively "systems")))
+  #t)
+
+(define* (build #:key outputs inputs lisp asd-file
+                #:allow-other-keys)
+  "Compile the system."
+  (let* ((out (assoc-ref outputs "out"))
+         (name (remove-lisp-from-name (output-path->package-name out) lisp))
+         (source-path (lisp-source-directory out lisp name))
+         (translations (wrap-output-translations
+                        `(,(output-translation source-path
+                                               out
+                                               lisp))))
+         (asd-file (and=> asd-file (cut source-asd-file out lisp name <>))))
+
+    (setenv "ASDF_OUTPUT_TRANSLATIONS"
+            (replace-escaped-macros (format #f "~S" translations)))
+
+    ;; We don't need this if we have the asd file, and it can mess with the
+    ;; load ordering we're trying to enforce
+    (unless asd-file
+      (prepend-to-source-registry (string-append source-path "//")))
+
+    (setenv "HOME" out) ; ecl's asdf sometimes wants to create $HOME/.cache
+
+    (parameterize ((%lisp (string-append
+                           (assoc-ref inputs lisp) "/bin/" lisp)))
+      (compile-system name lisp asd-file))
+
+    ;; As above, ecl will sometimes create this even though it doesn't use it
+
+    (let ((cache-directory (string-append out "/.cache")))
+      (when (directory-exists? cache-directory)
+        (delete-file-recursively cache-directory))))
+  #t)
+
+(define* (check #:key lisp tests? outputs inputs asd-file
+                #:allow-other-keys)
+  "Test the system."
+  (let* ((name (remove-lisp-from-name (outputs->name outputs) lisp))
+         (out (assoc-ref outputs "out"))
+         (asd-file (and=> asd-file (cut source-asd-file out lisp name <>))))
+    (if tests?
+        (parameterize ((%lisp (string-append
+                               (assoc-ref inputs lisp) "/bin/" lisp)))
+          (test-system name lisp asd-file))
+        (format #t "test suite not run~%")))
+  #t)
+
+(define* (patch-asd-files #:key outputs
+                          inputs
+                          lisp
+                          special-dependencies
+                          test-only-systems
+                          #:allow-other-keys)
+  "Patch any asd files created by the compilation process so that they can
+find their dependencies.  Exclude any TEST-ONLY-SYSTEMS which were only
+included to run tests.  Add any SPECIAL-DEPENDENCIES which the LISP
+implementation itself provides."
+  (let* ((out (assoc-ref outputs "out"))
+         (name (remove-lisp-from-name (output-path->package-name out) lisp))
+         (registry (lset-difference
+                    (lambda (input system)
+                      (match input
+                        ((name . path) (string=? name system))))
+                    (lisp-dependencies lisp inputs)
+                    test-only-systems))
+         (lisp-systems (map first registry)))
+
+    (for-each
+     (lambda (asd-file)
+       (patch-asd-file asd-file registry lisp
+                       (append lisp-systems special-dependencies)))
+     (find-files out "\\.asd$")))
+  #t)
+
+(define* (symlink-asd-files #:key outputs lisp #:allow-other-keys)
+  "Create an extra reference to the system in a convenient location."
+  (let* ((out (assoc-ref outputs "out")))
+    (for-each
+     (lambda (asd-file)
+       (substitute* asd-file
+         ((";;; Built for.*") "") ; remove potential non-determinism
+         (("^\\(DEFSYSTEM(.*)$" all end) (string-append "(asdf:defsystem" end)))
+       (receive (new-asd-file asd-file-directory)
+           (bundle-asd-file out asd-file lisp)
+         (mkdir-p asd-file-directory)
+         (symlink asd-file new-asd-file)
+         ;; Update the source registry for future phases which might want to
+         ;; use the newly compiled system.
+         (prepend-to-source-registry
+          (string-append asd-file-directory "/"))))
+
+     (find-files (string-append out %object-prefix) "\\.asd$"))
+)
+  #t)
+
+(define* (cleanup-files #:key outputs lisp
+                             #:allow-other-keys)
+  "Remove any compiled files which are not a part of the final bundle."
+  (let ((out (assoc-ref outputs "out")))
+    (match lisp
+      ("sbcl"
+       (for-each
+        (lambda (file)
+          (unless (string-suffix? "--system.fasl" file)
+            (delete-file file)))
+        (find-files out "\\.fasl$")))
+      ("ecl"
+       (for-each delete-file
+                 (append (find-files out "\\.fas$")
+                         (find-files out "\\.o$")
+                         (find-files out "\\.a$")))))
+
+    (with-directory-excursion (library-directory out lisp)
+      (for-each
+       (lambda (file)
+         (rename-file file
+                      (string-append "./" (basename file))))
+       (find-files "."))
+      (for-each delete-file-recursively
+                (scandir "."
+                         (lambda (file)
+                           (and
+                            (directory-exists? file)
+                            (string<> "." file)
+                            (string<> ".." file)))))))
+  #t)
+
+(define* (strip #:key lisp #:allow-other-keys #:rest args)
+  ;; stripping sbcl binaries removes their entry program and extra systems
+  (or (string=? lisp "sbcl")
+      (apply (assoc-ref gnu:%standard-phases 'strip) args)))
+
+(define %standard-phases/source
+  (modify-phases gnu:%standard-phases
+    (delete 'configure)
+    (delete 'check)
+    (delete 'build)
+    (replace 'install install)))
+
+(define %standard-phases
+  (modify-phases gnu:%standard-phases
+    (delete 'configure)
+    (delete 'install)
+    (replace 'build build)
+    (add-before 'build 'copy-source copy-source)
+    (replace 'check check)
+    (replace 'strip strip)
+    (add-after 'check 'link-dependencies patch-asd-files)
+    (add-after 'link-dependencies 'cleanup cleanup-files)
+    (add-after 'cleanup 'create-symlinks symlink-asd-files)))
+
+(define* (asdf-build #:key inputs
+                     (phases %standard-phases)
+                     #:allow-other-keys
+                     #:rest args)
+  (apply gnu:gnu-build
+         #:inputs inputs
+         #:phases phases
+         args))
+
+(define* (asdf-build/source #:key inputs
+                            (phases %standard-phases/source)
+                            #:allow-other-keys
+                            #:rest args)
+  (apply gnu:gnu-build
+         #:inputs inputs
+         #:phases phases
+         args))
+
+;;; asdf-build-system.scm ends here
diff --git a/guix/build/bournish.scm b/guix/build/bournish.scm
index 928bef5b9e..51dad17ba7 100644
--- a/guix/build/bournish.scm
+++ b/guix/build/bournish.scm
@@ -162,6 +162,17 @@ characters."
         (else
          `((@@ (guix build bournish) wc-command-implementation) ,@args))))
 
+(define (reboot-command . args)
+  "Emit code for 'reboot'."
+  ;; Normally Bournish is used in the initrd, where 'reboot' is provided
+  ;; directly by (guile-user).  In other cases, just bail out.
+  `(if (defined? 'reboot)
+       (reboot)
+       (begin
+         (format (current-error-port)
+                 "I don't know how to reboot, sorry about that!~%")
+         #f)))
+
 (define (help-command . _)
   (display "\
 Hello, this is Bournish, a minimal Bourne-like shell in Guile!
@@ -189,7 +200,8 @@ commands such as 'ls' and 'cd'; it lacks globbing, pipes---everything.\n"))
     ("ls"     ,ls-command)
     ("which"  ,which-command)
     ("cat"    ,cat-command)
-    ("wc"     ,wc-command)))
+    ("wc"     ,wc-command)
+    ("reboot" ,reboot-command)))
 
 (define (read-bournish port env)
   "Read a Bournish expression from PORT, and return the corresponding Scheme
diff --git a/guix/build/graft.scm b/guix/build/graft.scm
index b08b65b7cf..7025b72fea 100644
--- a/guix/build/graft.scm
+++ b/guix/build/graft.scm
@@ -210,6 +210,32 @@ an exception is caught."
           (print-exception port #f key args)
           (primitive-exit 1))))))
 
+(define* (mkdir-p* dir #:optional (mode #o755))
+  "This is a variant of 'mkdir-p' that works around
+<http://bugs.gnu.org/24659> by passing MODE explicitly in each 'mkdir' call."
+  (define absolute?
+    (string-prefix? "/" dir))
+
+  (define not-slash
+    (char-set-complement (char-set #\/)))
+
+  (let loop ((components (string-tokenize dir not-slash))
+             (root       (if absolute?
+                             ""
+                             ".")))
+    (match components
+      ((head tail ...)
+       (let ((path (string-append root "/" head)))
+         (catch 'system-error
+           (lambda ()
+             (mkdir path mode)
+             (loop tail path))
+           (lambda args
+             (if (= EEXIST (system-error-errno args))
+                 (loop tail path)
+                 (apply throw args))))))
+      (() #t))))
+
 (define* (rewrite-directory directory output mapping
                             #:optional (store (%store-directory)))
   "Copy DIRECTORY to OUTPUT, replacing strings according to MAPPING, a list of
@@ -258,7 +284,7 @@ file name pairs."
   (define (rewrite-leaf file)
     (let ((stat (lstat file))
           (dest (destination file)))
-      (mkdir-p (dirname dest))
+      (mkdir-p* (dirname dest))
       (case (stat:type stat)
         ((symlink)
          (let ((target (readlink file)))
@@ -277,7 +303,7 @@ file name pairs."
                                            store)
                  (chmod output (stat:perms stat)))))))
         ((directory)
-         (mkdir-p dest))
+         (mkdir-p* dest))
         (else
          (error "unsupported file type" stat)))))
 
diff --git a/guix/build/lisp-utils.scm b/guix/build/lisp-utils.scm
new file mode 100644
index 0000000000..55a07c7207
--- /dev/null
+++ b/guix/build/lisp-utils.scm
@@ -0,0 +1,327 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
+;;;
+;;; 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 lisp-utils)
+  #:use-module (ice-9 format)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (guix build utils)
+  #:export (%lisp
+            %install-prefix
+            lisp-eval-program
+            compile-system
+            test-system
+            replace-escaped-macros
+            generate-executable-wrapper-system
+            generate-executable-entry-point
+            generate-executable-for-system
+            patch-asd-file
+            bundle-install-prefix
+            lisp-dependencies
+            bundle-asd-file
+            remove-lisp-from-name
+            wrap-output-translations
+            prepend-to-source-registry
+            build-program
+            build-image))
+
+;;; Commentary:
+;;;
+;;; Tools to evaluate lisp programs within a lisp session, generate wrapper
+;;; systems for executables. Compile, test, and produce images for systems and
+;;; programs, and link them with their dependencies.
+;;;
+;;; Code:
+
+(define %lisp
+  ;; File name of the Lisp compiler.
+  (make-parameter "lisp"))
+
+(define %install-prefix "/share/common-lisp")
+
+(define (bundle-install-prefix lisp)
+  (string-append %install-prefix "/" lisp "-bundle-systems"))
+
+(define (remove-lisp-from-name name lisp)
+  (string-drop name (1+ (string-length lisp))))
+
+(define (wrap-output-translations translations)
+  `(:output-translations
+    ,@translations
+    :inherit-configuration))
+
+(define (lisp-eval-program lisp program)
+  "Evaluate PROGRAM with a given LISP implementation."
+  (unless (zero? (apply system*
+                        (lisp-invoke lisp (format #f "~S" program))))
+    (error "lisp-eval-program failed!" lisp program)))
+
+(define (lisp-invoke lisp program)
+  "Return a list of arguments for system* determining how to invoke LISP
+with PROGRAM."
+  (match lisp
+    ("sbcl" `(,(%lisp) "--non-interactive" "--eval" ,program))
+    ("ecl" `(,(%lisp) "-eval" ,program "-eval" "(quit)"))))
+
+(define (asdf-load-all systems)
+  (map (lambda (system)
+         `(funcall
+           (find-symbol
+            (symbol-name :load-system)
+            (symbol-name :asdf))
+           ,system))
+       systems))
+
+(define (compile-system system lisp asd-file)
+  "Use a lisp implementation to compile SYSTEM using asdf.  Load ASD-FILE
+first if SYSTEM is defined there."
+  (lisp-eval-program lisp
+                     `(progn
+                       (require :asdf)
+                       (in-package :asdf)
+                       ,@(if asd-file
+                             `((load ,asd-file))
+                             '())
+                       (in-package :cl-user)
+                       (funcall (find-symbol
+                                 (symbol-name :operate)
+                                 (symbol-name :asdf))
+                                (find-symbol
+                                 (symbol-name :compile-bundle-op)
+                                 (symbol-name :asdf))
+                                ,system)
+                       (funcall (find-symbol
+                                 (symbol-name :operate)
+                                 (symbol-name :asdf))
+                                (find-symbol
+                                 (symbol-name :deliver-asd-op)
+                                 (symbol-name :asdf))
+                                ,system))))
+
+(define (test-system system lisp asd-file)
+  "Use a lisp implementation to test SYSTEM using asdf.  Load ASD-FILE first
+if SYSTEM is defined there."
+  (lisp-eval-program lisp
+                     `(progn
+                       (require :asdf)
+                       (in-package :asdf)
+                       ,@(if asd-file
+                             `((load ,asd-file))
+                             '())
+                       (in-package :cl-user)
+                       (funcall (find-symbol
+                                 (symbol-name :test-system)
+                                 (symbol-name :asdf))
+                                ,system))))
+
+(define (string->lisp-keyword . strings)
+  "Return a lisp keyword for the concatenation of STRINGS."
+  (string->symbol (apply string-append ":" strings)))
+
+(define (generate-executable-for-system type system lisp)
+  "Use LISP to generate an executable, whose TYPE can be \"image\" or
+\"program\".  The latter will always be standalone.  Depends on having created
+a \"SYSTEM-exec\" system which contains the entry program."
+  (lisp-eval-program
+   lisp
+   `(progn
+     (require :asdf)
+     (funcall (find-symbol
+               (symbol-name :operate)
+               (symbol-name :asdf))
+              (find-symbol
+               (symbol-name ,(string->lisp-keyword type "-op"))
+               (symbol-name :asdf))
+              ,(string-append system "-exec")))))
+
+(define (generate-executable-wrapper-system system dependencies)
+  "Generates a system which can be used by asdf to produce an image or program
+inside the current directory.  The image or program will contain
+DEPENDENCIES."
+  (with-output-to-file (string-append system "-exec.asd")
+    (lambda _
+      (format #t "~y~%"
+              `(defsystem ,(string->lisp-keyword system "-exec")
+                 :entry-point ,(string-append system "-exec:main")
+                 :depends-on (:uiop
+                              ,@(map string->lisp-keyword
+                                     dependencies))
+                 :components ((:file ,(string-append system "-exec"))))))))
+
+(define (generate-executable-entry-point system entry-program)
+  "Generates an entry point program from the list of lisp statements
+ENTRY-PROGRAM for SYSTEM within the current directory."
+  (with-output-to-file (string-append system "-exec.lisp")
+    (lambda _
+      (let ((system (string->lisp-keyword system "-exec")))
+        (format #t "~{~y~%~%~}"
+                `((defpackage ,system
+                    (:use :cl)
+                    (:export :main))
+
+                  (in-package ,system)
+
+                  (defun main ()
+                    (let ((arguments uiop:*command-line-arguments*))
+                      (declare (ignorable arguments))
+                      ,@entry-program))))))))
+
+(define (wrap-perform-method lisp registry dependencies file-name)
+  "Creates a wrapper method which allows the system to locate its dependent
+systems from REGISTRY, an alist of the same form as %outputs, which contains
+lisp systems which the systems is dependent on.  All DEPENDENCIES which the
+system depends on will the be loaded before this system."
+  (let* ((system (string-drop-right (basename file-name) 4))
+         (system-symbol (string->lisp-keyword system)))
+
+    `(defmethod asdf:perform :before
+       (op (c (eql (asdf:find-system ,system-symbol))))
+       (asdf/source-registry:ensure-source-registry)
+       ,@(map (match-lambda
+                ((name . path)
+                 (let ((asd-file (string-append path
+                                                (bundle-install-prefix lisp)
+                                                "/" name ".asd")))
+                   `(setf
+                     (gethash ,name
+                              asdf/source-registry:*source-registry*)
+                     ,(string->symbol "#p")
+                     ,(bundle-asd-file path asd-file lisp)))))
+              registry)
+       ,@(map (lambda (system)
+                `(asdf:load-system ,(string->lisp-keyword system)))
+              dependencies))))
+
+(define (patch-asd-file asd-file registry lisp dependencies)
+  "Patches ASD-FILE with a perform method as described in WRAP-PERFORM-METHOD."
+  (chmod asd-file #o644)
+  (let ((port (open-file asd-file "a")))
+    (dynamic-wind
+      (lambda _ #t)
+      (lambda _
+        (display
+         (replace-escaped-macros
+          (format #f "~%~y~%"
+                  (wrap-perform-method lisp registry
+                                       dependencies asd-file)))
+         port))
+      (lambda _ (close-port port))))
+  (chmod asd-file #o444))
+
+(define (lisp-dependencies lisp inputs)
+  "Determine which inputs are lisp system dependencies, by using the convention
+that a lisp system dependency will resemble \"system-LISP\"."
+  (filter-map (match-lambda
+                ((name . value)
+                 (and (string-prefix? lisp name)
+                      (string<> lisp name)
+                      `(,(remove-lisp-from-name name lisp)
+                        . ,value))))
+              inputs))
+
+(define (bundle-asd-file output-path original-asd-file lisp)
+  "Find the symlinked bundle file for ORIGINAL-ASD-FILE by looking in
+OUTPUT-PATH/share/common-lisp/LISP-bundle-systems/<system>.asd.  Returns two
+values: the asd file itself and the directory in which it resides."
+  (let ((bundle-asd-path (string-append output-path
+                                        (bundle-install-prefix lisp))))
+    (values (string-append bundle-asd-path "/" (basename original-asd-file))
+            bundle-asd-path)))
+
+(define (replace-escaped-macros string)
+  "Replace simple lisp forms that the guile writer escapes, for example by
+replacing #{#p}# with #p.  Should only be used to replace truly simple forms
+which are not nested."
+  (regexp-substitute/global #f "(#\\{)(\\S*)(\\}#)" string
+                            'pre 2 'post))
+
+(define (prepend-to-source-registry path)
+  (setenv "CL_SOURCE_REGISTRY"
+          (string-append path ":" (or (getenv "CL_SOURCE_REGISTRY") ""))))
+
+(define* (build-program lisp program #:key inputs
+                        (dependencies (list (basename program)))
+                        entry-program
+                        #:allow-other-keys)
+  "Generate an executable program containing all DEPENDENCIES, and which will
+execute ENTRY-PROGRAM.  The result is placed in PROGRAM.  When executed, it
+will run ENTRY-PROGRAM, a list of Common Lisp expressions in which `arguments'
+has been bound to the command-line arguments which were passed."
+  (generate-executable lisp program
+                       #:inputs inputs
+                       #:dependencies dependencies
+                       #:entry-program entry-program
+                       #:type "program")
+  (let* ((name (basename program))
+         (bin-directory (dirname program)))
+    (with-directory-excursion bin-directory
+      (rename-file (string-append name "-exec")
+                   name)))
+  #t)
+
+(define* (build-image lisp image #:key inputs
+                      (dependencies (list (basename image)))
+                      #:allow-other-keys)
+  "Generate an image, possibly standalone, which contains all DEPENDENCIES,
+placing the result in IMAGE.image."
+  (generate-executable lisp image
+                       #:inputs inputs
+                       #:dependencies dependencies
+                       #:entry-program '(nil)
+                       #:type "image")
+  (let* ((name (basename image))
+         (bin-directory (dirname image)))
+    (with-directory-excursion bin-directory
+      (rename-file (string-append name "-exec--all-systems.image")
+                   (string-append name ".image"))))
+  #t)
+
+(define* (generate-executable lisp out-file #:key inputs
+                              dependencies
+                              entry-program
+                              type
+                              #:allow-other-keys)
+  "Generate an executable by using asdf's TYPE-op, containing whithin the
+image all DEPENDENCIES, and running ENTRY-PROGRAM in the case of an
+executable."
+  (let* ((bin-directory (dirname out-file))
+         (name (basename out-file)))
+    (mkdir-p bin-directory)
+    (with-directory-excursion bin-directory
+      (generate-executable-wrapper-system name dependencies)
+      (generate-executable-entry-point name entry-program))
+
+    (prepend-to-source-registry
+     (string-append bin-directory "/"))
+
+    (setenv "ASDF_OUTPUT_TRANSLATIONS"
+            (replace-escaped-macros
+             (format
+              #f "~S"
+              (wrap-output-translations
+               `(((,bin-directory :**/ :*.*.*)
+                  (,bin-directory :**/ :*.*.*)))))))
+
+    (parameterize ((%lisp (string-append
+                           (assoc-ref inputs lisp) "/bin/" lisp)))
+      (generate-executable-for-system type name lisp))
+
+    (delete-file (string-append bin-directory "/" name "-exec.asd"))
+    (delete-file (string-append bin-directory "/" name "-exec.lisp"))))
diff --git a/guix/import/github.scm b/guix/import/github.scm
index 9ba9a10ba0..0843ddeefd 100644
--- a/guix/import/github.scm
+++ b/guix/import/github.scm
@@ -44,7 +44,7 @@ failure."
   "Return the extension of the archive e.g. '.tar.gz' given a URL, or
 false if none is recognized"
   (find (lambda (x) (string-suffix? x url))
-        (list ".tar.gz" ".tar.bz2" ".tar.xz" ".zip" ".tar" ".tgz")))
+        (list ".tar.gz" ".tar.bz2" ".tar.xz" ".zip" ".tar" ".tgz" ".love")))
 
 (define (updated-github-url old-package new-version)
   ;; Return a url for the OLD-PACKAGE with NEW-VERSION.  If no source url in
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 8a98b0960a..ff214cf957 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
+;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,6 +44,7 @@
             epl1.0
             expat
             freetype
+            freebsd-doc
             giftware
             gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+
             gfl1.0
@@ -286,6 +288,11 @@ at URI, which may be a file:// URI pointing the package's tree."
            "https://www.gnu.org/licenses/fdl.html"
            "https://www.gnu.org/licenses/license-list#FDL"))
 
+(define freebsd-doc
+  (license "FreeBSD Documentation License"
+           "https://www.freebsd.org/copyright/freebsd-doc-license.html"
+           "https://www.gnu.org/licenses/license-list.html#FreeBSDDL"))
+
 (define opl1.0+
   (license "Open Publication License 1.0 or later"
            "http://opencontent.org/openpub/"
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 21e0613a8a..8f50477801 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -391,7 +391,7 @@ No authentication and authorization checks are performed here!"
 
 (define* (assert-valid-narinfo narinfo
                                #:optional (acl (current-acl))
-                               #:key (verbose? #t))
+                               #:key verbose?)
   "Raise an exception if NARINFO lacks a signature, has an invalid signature,
 or is signed by an unauthorized key."
   (let ((hash (narinfo-sha256 narinfo)))
@@ -404,9 +404,8 @@ or is signed by an unauthorized key."
           (unless %allow-unauthenticated-substitutes?
             (assert-valid-signature narinfo signature hash acl)
             (when verbose?
-              ;; Visually separate substitutions with a newline.
               (format (current-error-port)
-                      (_ "~%Found valid signature for ~a~%")
+                      (_ "Found valid signature for ~a~%")
                       (narinfo-path narinfo))
               (format (current-error-port)
                       (_ "From ~a~%")
@@ -893,7 +892,7 @@ DESTINATION as a nar file.  Verify the substitute against ACL."
             ;; "(4.1MiB installed)"; it shows the size of the package once
             ;; installed.
             (_ "Downloading ~a~:[~*~; (~a installed)~]...~%")
-            (store-path-abbreviation store-item)
+            (uri->string uri)
             ;; Use the Nar size as an estimate of the installed size.
             (narinfo-size narinfo)
             (and=> (narinfo-size narinfo)
@@ -921,8 +920,9 @@ DESTINATION as a nar file.  Verify the substitute against ACL."
       ;; Unpack the Nar at INPUT into DESTINATION.
       (restore-file input destination)
 
-      ;; Skip a line after what 'progress-proc' printed.
-      (newline (current-error-port))
+      ;; Skip a line after what 'progress-proc' printed, and another one to
+      ;; visually separate substitutions.
+      (display "\n\n" (current-error-port))
 
       (every (compose zero? cdr waitpid) pids))))
 
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index a2cd97ac1f..0519ab8c0b 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -227,25 +227,20 @@ BODY..., and restore them."
         (set! %load-path path)
         (set! %load-compiled-path cpath)))))
 
-(define-syntax-rule (warn-on-system-error body ...)
-  (catch 'system-error
-    (lambda ()
-      body ...)
-    (lambda (key proc format-string format-args errno . rest)
-      (warning (_ "while talking to shepherd: ~a~%")
-               (apply format #f format-string format-args))
-      (with-monad %store-monad
-        (return #f)))))
-
 (define-syntax-rule (with-shepherd-error-handling mbody ...)
   "Catch and report Shepherd errors that arise when binding MBODY, a monadic
 expression in %STORE-MONAD."
   (lambda (store)
-    (warn-on-system-error
-     (guard (c ((shepherd-error? c)
-                (values (report-shepherd-error c) store)))
-       (values (run-with-store store (begin mbody ...))
-               store)))))
+    (catch 'system-error
+      (lambda ()
+        (guard (c ((shepherd-error? c)
+                   (values (report-shepherd-error c) store)))
+          (values (run-with-store store (begin mbody ...))
+                  store)))
+      (lambda (key proc format-string format-args errno . rest)
+        (warning (_ "while talking to shepherd: ~a~%")
+                 (apply format #f format-string format-args))
+        (values #f store)))))
 
 (define (report-shepherd-error error)
   "Report ERROR, a '&shepherd-error' error condition object."
diff --git a/guix/utils.scm b/guix/utils.scm
index c68094cf49..decadf64a6 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -369,19 +369,30 @@ keywords not already present in ARGS."
     (match defaults
       ((kw value rest ...)
        (loop rest
-             (if (assoc-ref kw args)
+             (if (memq kw args)
                  args
                  (cons* kw value args))))
       (()
        args))))
 
+(define-syntax collect-default-args
+  (syntax-rules ()
+    ((_)
+     '())
+    ((_ (_ _) rest ...)
+     (collect-default-args rest ...))
+    ((_ (kw _ dflt) rest ...)
+     (cons* kw dflt (collect-default-args rest ...)))))
+
 (define-syntax substitute-keyword-arguments
   (syntax-rules ()
     "Return a new list of arguments where the value for keyword arg KW is
-replaced by EXP.  EXP is evaluated in a context where VAR is boud to the
-previous value of the keyword argument."
-    ((_ original-args ((kw var) exp) ...)
-     (let loop ((args    original-args)
+replaced by EXP.  EXP is evaluated in a context where VAR is bound to the
+previous value of the keyword argument, or DFLT if given."
+    ((_ original-args ((kw var dflt ...) exp) ...)
+     (let loop ((args (default-keyword-arguments
+                        original-args
+                        (collect-default-args (kw var dflt ...) ...)))
                 (before '()))
        (match args
          ((kw var rest (... ...))
diff --git a/po/guix/de.po b/po/guix/de.po
index 1e3105236e..5242d53780 100644
--- a/po/guix/de.po
+++ b/po/guix/de.po
@@ -1,118 +1,121 @@
 # German translation of guix.
 # Copyright (C) 2014 Free Software Foundation, Inc.
 # This file is distributed under the same license as the guix package.
-# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015.
+# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: guix 0.9.0\n"
+"Project-Id-Version: guix 0.11.0\n"
 "Report-Msgid-Bugs-To: ludo@gnu.org\n"
-"POT-Creation-Date: 2015-10-28 16:31+0100\n"
-"PO-Revision-Date: 2015-11-29 16:01+0100\n"
+"POT-Creation-Date: 2016-07-29 10:16+0200\n"
+"PO-Revision-Date: 2016-09-15 21:49+0200\n"
 "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.5\n"
+"X-Generator: Poedit 1.8.9\n"
 
-#: gnu/packages.scm:80
+#: gnu/packages.scm:79
 #, scheme-format
 msgid "~a: patch not found"
 msgstr "~a: Patch nicht gefunden"
 
-#: gnu/packages.scm:91
+#: gnu/packages.scm:95
 #, scheme-format
 msgid "could not find bootstrap binary '~a' for system '~a'"
 msgstr ""
 
-#: gnu/packages.scm:143
+#: gnu/packages.scm:147
 #, scheme-format
 msgid "cannot access `~a': ~a~%"
 msgstr "Zugriff auf »~a« nicht möglich: ~a~%"
 
-#: gnu/packages.scm:388
-#, scheme-format
-msgid "looking for the latest release of GNU ~a..."
-msgstr "Nach der letzten Veröffentlichung von GNU ~a wird gesucht …"
-
-#: gnu/packages.scm:395
-#, scheme-format
-msgid "~a: note: using ~a but ~a is available upstream~%"
-msgstr ""
-
-#: gnu/packages.scm:417 gnu/packages.scm:452
+#: gnu/packages.scm:301
 #, scheme-format
 msgid "ambiguous package specification `~a'~%"
 msgstr "Nicht eindeutige Paketangabe »~a«~%"
 
-#: gnu/packages.scm:418 gnu/packages.scm:454
+#: gnu/packages.scm:302
 #, scheme-format
 msgid "choosing ~a from ~a~%"
 msgstr ""
 
-#: gnu/packages.scm:424
+#: gnu/packages.scm:306
+#, scheme-format
+msgid "deprecated NAME-VERSION syntax; use NAME@VERSION instead~%"
+msgstr ""
+
+#: gnu/packages.scm:311
 #, scheme-format
 msgid "~A: package not found for version ~a~%"
 msgstr "~A: Paket nicht gefunden für Version ~a~%"
 
-#: gnu/packages.scm:426
+#: gnu/packages.scm:321
 #, scheme-format
 msgid "~A: unknown package~%"
 msgstr "~A: unbekanntes Paket~%"
 
-#: gnu/packages.scm:442
+#: gnu/packages.scm:349
 #, scheme-format
 msgid "package `~a' lacks output `~a'~%"
 msgstr ""
 
-#: gnu/packages.scm:459
-#, scheme-format
-msgid "~a: package not found~%"
-msgstr "~a: Paket nicht gefunden~%"
-
-#: gnu/services.scm:376
+#: gnu/services.scm:540
 #, scheme-format
 msgid "no target of type '~a' for service ~s"
 msgstr ""
 
-#: gnu/services.scm:387 gnu/services.scm:447
+#: gnu/services.scm:551 gnu/services.scm:612
 #, scheme-format
 msgid "more than one target service of type '~a'"
 msgstr ""
 
-#: gnu/services.scm:437
+#: gnu/services.scm:602
 #, scheme-format
 msgid "service of type '~a' not found"
 msgstr "Dienst des Typs »~a« wurde nicht gefunden"
 
-#: gnu/system.scm:547
+#: gnu/system.scm:500
 #, scheme-format
 msgid "using a string for file '~a' is deprecated; use 'plain-file' instead~%"
 msgstr ""
 
-#: gnu/system.scm:563
+#: gnu/system.scm:516
 #, scheme-format
 msgid "using a monadic value for '~a' is deprecated; use 'plain-file' instead~%"
 msgstr ""
 
-#: gnu/system.scm:646
-msgid "system locale lacks a definition"
-msgstr ""
+#: gnu/system.scm:650
+#, fuzzy, scheme-format
+#| msgid "~a: invalid number~%"
+msgid "~a: invalid locale name"
+msgstr "~a: ungültige Zahl~%"
+
+#: gnu/system.scm:770
+#, scheme-format
+msgid "unrecognized boot parameters for '~a'~%"
+msgstr "Nicht erkannte Startparameter für »~a«~%"
 
-#: gnu/services/dmd.scm:131
+#: gnu/services/shepherd.scm:162
 #, scheme-format
 msgid "service '~a' provided more than once"
 msgstr ""
 
-#: gnu/system/shadow.scm:213
+#: gnu/services/shepherd.scm:177
+#, scheme-format
+msgid "service '~a' requires '~a', which is not provided by any service"
+msgstr ""
+
+#: gnu/system/shadow.scm:240
 #, scheme-format
 msgid "supplementary group '~a' of user '~a' is undeclared"
 msgstr ""
 
-#: gnu/system/shadow.scm:223
+#: gnu/system/shadow.scm:250
 #, scheme-format
 msgid "primary group '~a' of user '~a' is undeclared"
 msgstr ""
@@ -122,32 +125,69 @@ msgstr ""
 msgid "invalid argument: ~a~%"
 msgstr "Ungültiges Argument: ~a~%"
 
-#: guix/scripts.scm:78 guix/scripts/download.scm:97 guix/scripts/gc.scm:157
-#: guix/scripts/import/cran.scm:72 guix/scripts/import/elpa.scm:77
-#: guix/scripts/pull.scm:219 guix/scripts/lint.scm:792
-#: guix/scripts/publish.scm:355
+#: guix/scripts.scm:78 guix/scripts/download.scm:99 guix/scripts/gc.scm:164
+#: guix/scripts/import/cran.scm:78 guix/scripts/import/elpa.scm:77
+#: guix/scripts/pull.scm:219 guix/scripts/lint.scm:916
+#: guix/scripts/publish.scm:549 guix/scripts/graph.scm:383
 #, scheme-format
 msgid "~A: unrecognized option~%"
 msgstr "~A: nicht erkannte Option~%"
 
-#: guix/scripts/build.scm:107
+#: guix/scripts/build.scm:121
 #, scheme-format
 msgid "failed to create GC root `~a': ~a~%"
 msgstr ""
 
-#: guix/scripts/build.scm:151
+#: guix/scripts/build.scm:198
+#, fuzzy, scheme-format
+#| msgid "ambiguous package specification `~a'~%"
+msgid "invalid replacement specification: ~s~%"
+msgstr "Nicht eindeutige Paketangabe »~a«~%"
+
+#: guix/scripts/build.scm:246
+msgid ""
+"\n"
+"      --with-source=SOURCE\n"
+"                         use SOURCE when building the corresponding package"
+msgstr ""
+
+#: guix/scripts/build.scm:249
+msgid ""
+"\n"
+"      --with-input=PACKAGE=REPLACEMENT\n"
+"                         replace dependency PACKAGE by REPLACEMENT"
+msgstr ""
+
+#: guix/scripts/build.scm:274
+#, scheme-format
+msgid "transformation '~a' had no effect on ~a~%"
+msgstr ""
+
+#: guix/scripts/build.scm:292
 msgid ""
 "\n"
 "  -L, --load-path=DIR    prepend DIR to the package module search path"
 msgstr ""
 
-#: guix/scripts/build.scm:153
+#: guix/scripts/build.scm:294
 msgid ""
 "\n"
 "  -K, --keep-failed      keep build tree of failed builds"
 msgstr ""
 
-#: guix/scripts/build.scm:155
+#: guix/scripts/build.scm:296
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "  -n, --dry-run          do not build the derivations"
+msgid ""
+"\n"
+"  -k, --keep-going       keep going when some of the derivations fail"
+msgstr ""
+"\n"
+"  -n, --dry-run          die Ableitungen nicht erstellen"
+
+#: guix/scripts/build.scm:298
 msgid ""
 "\n"
 "  -n, --dry-run          do not build the derivations"
@@ -155,45 +195,51 @@ msgstr ""
 "\n"
 "  -n, --dry-run          die Ableitungen nicht erstellen"
 
-#: guix/scripts/build.scm:157
+#: guix/scripts/build.scm:300
 msgid ""
 "\n"
 "      --fallback         fall back to building when the substituter fails"
 msgstr ""
 
-#: guix/scripts/build.scm:159
+#: guix/scripts/build.scm:302
 msgid ""
 "\n"
 "      --no-substitutes   build instead of resorting to pre-built substitutes"
 msgstr ""
 
-#: guix/scripts/build.scm:161 guix/scripts/size.scm:215
+#: guix/scripts/build.scm:304 guix/scripts/size.scm:217
 msgid ""
 "\n"
 "      --substitute-urls=URLS\n"
 "                         fetch substitute from URLS if they are authorized"
 msgstr ""
 
-#: guix/scripts/build.scm:164
+#: guix/scripts/build.scm:307
+msgid ""
+"\n"
+"      --no-grafts        do not graft packages"
+msgstr ""
+
+#: guix/scripts/build.scm:309
 msgid ""
 "\n"
 "      --no-build-hook    do not attempt to offload builds via the build hook"
 msgstr ""
 
-#: guix/scripts/build.scm:166
+#: guix/scripts/build.scm:311
 msgid ""
 "\n"
 "      --max-silent-time=SECONDS\n"
 "                         mark the build as failed after SECONDS of silence"
 msgstr ""
 
-#: guix/scripts/build.scm:169
+#: guix/scripts/build.scm:314
 msgid ""
 "\n"
 "      --timeout=SECONDS  mark the build as failed after SECONDS of activity"
 msgstr ""
 
-#: guix/scripts/build.scm:171
+#: guix/scripts/build.scm:316
 msgid ""
 "\n"
 "      --verbosity=LEVEL  use the given verbosity LEVEL"
@@ -201,7 +247,13 @@ msgstr ""
 "\n"
 "      --verbosity=STUFE  die angegebene Ausführlichkeitsstufe verwenden"
 
-#: guix/scripts/build.scm:173
+#: guix/scripts/build.scm:318
+msgid ""
+"\n"
+"      --rounds=N         build N times in a row to detect non-determinism"
+msgstr ""
+
+#: guix/scripts/build.scm:320
 msgid ""
 "\n"
 "  -c, --cores=N          allow the use of up to N CPU cores for the build"
@@ -209,101 +261,107 @@ msgstr ""
 "\n"
 "  -c, --cores=N          bis zu N Prozessorkerne für die Erstellung nutzen"
 
-#: guix/scripts/build.scm:175
+#: guix/scripts/build.scm:322
 msgid ""
 "\n"
 "  -M, --max-jobs=N       allow at most N build jobs"
 msgstr ""
 
-#: guix/scripts/build.scm:261 guix/scripts/build.scm:268
+#: guix/scripts/build.scm:428 guix/scripts/build.scm:435
 #, scheme-format
 msgid "not a number: '~a' option argument: ~a~%"
 msgstr ""
 
-#: guix/scripts/build.scm:287
+#: guix/scripts/build.scm:455
 msgid ""
 "Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n"
 "Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"
 msgstr ""
 
-#: guix/scripts/build.scm:289
+#: guix/scripts/build.scm:457
 msgid ""
 "\n"
 "  -e, --expression=EXPR  build the package or derivation EXPR evaluates to"
 msgstr ""
 
-#: guix/scripts/build.scm:291
+#: guix/scripts/build.scm:459
 msgid ""
 "\n"
 "  -f, --file=FILE        build the package or derivation that the code within\n"
 "                         FILE evaluates to"
 msgstr ""
 
-#: guix/scripts/build.scm:294
+#: guix/scripts/build.scm:462
 msgid ""
 "\n"
 "  -S, --source           build the packages' source derivations"
 msgstr ""
 
-#: guix/scripts/build.scm:296
+#: guix/scripts/build.scm:464
 msgid ""
 "\n"
 "      --sources[=TYPE]   build source derivations; TYPE may optionally be one\n"
 "                         of \"package\", \"all\" (default), or \"transitive\""
 msgstr ""
 
-#: guix/scripts/build.scm:299
+#: guix/scripts/build.scm:467
 msgid ""
 "\n"
 "  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""
 msgstr ""
 
-#: guix/scripts/build.scm:301
+#: guix/scripts/build.scm:469
 msgid ""
 "\n"
 "      --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""
 msgstr ""
 
-#: guix/scripts/build.scm:303
+#: guix/scripts/build.scm:471
 msgid ""
 "\n"
-"      --with-source=SOURCE\n"
-"                         use SOURCE when building the corresponding package"
+"  -d, --derivations      return the derivation paths of the given packages"
 msgstr ""
 
-#: guix/scripts/build.scm:306
+#: guix/scripts/build.scm:473
 msgid ""
 "\n"
-"      --no-grafts        do not graft packages"
+"      --check            rebuild items to check for non-determinism issues"
 msgstr ""
 
-#: guix/scripts/build.scm:308
+#: guix/scripts/build.scm:475
 msgid ""
 "\n"
-"  -d, --derivations      return the derivation paths of the given packages"
+"  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
+"                         as a garbage collector root"
 msgstr ""
 
-#: guix/scripts/build.scm:310
+#: guix/scripts/build.scm:478
+#, fuzzy
+#| msgid ""
+#| "\n"
+#| "  -n, --dry-run          do not build the derivations"
 msgid ""
 "\n"
-"  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
-"                         as a garbage collector root"
+"  -q, --quiet            do not show the build log"
 msgstr ""
+"\n"
+"  -n, --dry-run          die Ableitungen nicht erstellen"
 
-#: guix/scripts/build.scm:313
+#: guix/scripts/build.scm:480
 msgid ""
 "\n"
 "      --log-file         return the log file names for the given derivations"
 msgstr ""
 
-#: guix/scripts/build.scm:318 guix/scripts/download.scm:54
-#: guix/scripts/package.scm:292 guix/scripts/gc.scm:70
+#: guix/scripts/build.scm:487 guix/scripts/download.scm:56
+#: guix/scripts/package.scm:388 guix/scripts/gc.scm:74
 #: guix/scripts/hash.scm:56 guix/scripts/import.scm:91
-#: guix/scripts/import/cran.scm:44 guix/scripts/pull.scm:83
-#: guix/scripts/substitute.scm:752 guix/scripts/system.scm:556
-#: guix/scripts/lint.scm:741 guix/scripts/publish.scm:63
-#: guix/scripts/edit.scm:43 guix/scripts/size.scm:223
-#: guix/scripts/graph.scm:398 guix/scripts/challenge.scm:181
+#: guix/scripts/import/cran.scm:46 guix/scripts/pull.scm:83
+#: guix/scripts/substitute.scm:827 guix/scripts/system.scm:695
+#: guix/scripts/lint.scm:865 guix/scripts/publish.scm:73
+#: guix/scripts/edit.scm:44 guix/scripts/size.scm:225
+#: guix/scripts/graph.scm:364 guix/scripts/challenge.scm:182
+#: guix/scripts/container.scm:33 guix/scripts/container/exec.scm:43
 msgid ""
 "\n"
 "  -h, --help             display this help and exit"
@@ -311,14 +369,15 @@ msgstr ""
 "\n"
 "  -h, --help             diese Hilfe anzeigen und beenden"
 
-#: guix/scripts/build.scm:320 guix/scripts/download.scm:56
-#: guix/scripts/package.scm:294 guix/scripts/gc.scm:72
+#: guix/scripts/build.scm:489 guix/scripts/download.scm:58
+#: guix/scripts/package.scm:390 guix/scripts/gc.scm:76
 #: guix/scripts/hash.scm:58 guix/scripts/import.scm:93
-#: guix/scripts/import/cran.scm:46 guix/scripts/pull.scm:85
-#: guix/scripts/substitute.scm:754 guix/scripts/system.scm:558
-#: guix/scripts/lint.scm:745 guix/scripts/publish.scm:65
-#: guix/scripts/edit.scm:45 guix/scripts/size.scm:225
-#: guix/scripts/graph.scm:400 guix/scripts/challenge.scm:183
+#: guix/scripts/import/cran.scm:48 guix/scripts/pull.scm:85
+#: guix/scripts/substitute.scm:829 guix/scripts/system.scm:697
+#: guix/scripts/lint.scm:869 guix/scripts/publish.scm:75
+#: guix/scripts/edit.scm:46 guix/scripts/size.scm:227
+#: guix/scripts/graph.scm:366 guix/scripts/challenge.scm:184
+#: guix/scripts/container.scm:35 guix/scripts/container/exec.scm:45
 msgid ""
 "\n"
 "  -V, --version          display version information and exit"
@@ -326,24 +385,24 @@ msgstr ""
 "\n"
 "  -V, --version          Versionsinformation anzeigen und beenden"
 
-#: guix/scripts/build.scm:347
+#: guix/scripts/build.scm:516
 #, scheme-format
 msgid ""
 "invalid argument: '~a' option argument: ~a, ~\n"
 "must be one of 'package', 'all', or 'transitive'~%"
 msgstr ""
 
-#: guix/scripts/build.scm:478
+#: guix/scripts/build.scm:563
 #, scheme-format
-msgid "sources do not match any package:~{ ~a~}~%"
+msgid "~s: not something we can build~%"
 msgstr ""
 
-#: guix/scripts/build.scm:536
+#: guix/scripts/build.scm:643
 #, scheme-format
 msgid "no build log for '~a'~%"
 msgstr "Kein Erstellungsprotokoll für »~a«~%"
 
-#: guix/scripts/download.scm:45
+#: guix/scripts/download.scm:47
 msgid ""
 "Usage: guix download [OPTION] URL\n"
 "Download the file at URL, add it to the store, and print its store path\n"
@@ -353,7 +412,7 @@ msgid ""
 "('hex' and 'hexadecimal' can be used as well).\n"
 msgstr ""
 
-#: guix/scripts/download.scm:51 guix/scripts/hash.scm:51
+#: guix/scripts/download.scm:53 guix/scripts/hash.scm:51
 msgid ""
 "\n"
 "  -f, --format=FMT       write the hash in the given format"
@@ -361,43 +420,92 @@ msgstr ""
 "\n"
 "  -f, --format=FORMAT    die Prüfsumme im angegebenen Format schreiben"
 
-#: guix/scripts/download.scm:74 guix/scripts/hash.scm:76
+#: guix/scripts/download.scm:76 guix/scripts/hash.scm:76
 #, scheme-format
 msgid "unsupported hash format: ~a~%"
 msgstr "Nicht unterstütztes Prüfsummenformat: ~a~%"
 
-#: guix/scripts/download.scm:107
+#: guix/scripts/download.scm:102 guix/scripts/package.scm:842
+#: guix/scripts/publish.scm:551
+#, scheme-format
+msgid "~A: extraneous argument~%"
+msgstr ""
+
+#: guix/scripts/download.scm:111
+#, fuzzy, scheme-format
+#| msgid "~a: download failed~%"
+msgid "no download URI was specified~%"
+msgstr "~a: Herunterladen fehlgeschlagen~%"
+
+#: guix/scripts/download.scm:113
 #, scheme-format
 msgid "~a: failed to parse URI~%"
 msgstr "~a: URI~% konnte nicht verarbeitet werden"
 
-#: guix/scripts/download.scm:118
+#: guix/scripts/download.scm:126
 #, scheme-format
 msgid "~a: download failed~%"
 msgstr "~a: Herunterladen fehlgeschlagen~%"
 
-#: guix/scripts/package.scm:128
+#: guix/scripts/package.scm:104
+#, scheme-format
+msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
+msgstr ""
+
+#: guix/scripts/package.scm:126
+#, scheme-format
+msgid "error: while creating directory `~a': ~a~%"
+msgstr "Fehler beim Anlegen des Verzeichnisses »~a«: ~a~%"
+
+#: guix/scripts/package.scm:130
+#, scheme-format
+msgid "Please create the `~a' directory, with you as the owner.~%"
+msgstr "Bitte legen Sie das Verzeichnis »~a« mit Ihnen als Eigentümer an.~%"
+
+#: guix/scripts/package.scm:137
+#, scheme-format
+msgid "error: directory `~a' is not owned by you~%"
+msgstr "Fehler: Das Verzeichnis »~a« gehört Ihnen nicht~%"
+
+#: guix/scripts/package.scm:140
+#, scheme-format
+msgid "Please change the owner of `~a' to user ~s.~%"
+msgstr "Bitte ändern Sie den Eigentümer von »~a« in Benutzer ~s.~%"
+
+#: guix/scripts/package.scm:175
 #, scheme-format
 msgid "not removing generation ~a, which is current~%"
 msgstr ""
 
-#: guix/scripts/package.scm:135
+#: guix/scripts/package.scm:182
 #, scheme-format
 msgid "no matching generation~%"
 msgstr "Keine passende Generation%"
 
-#: guix/scripts/package.scm:138 guix/scripts/package.scm:734
-#: guix/scripts/system.scm:396
+#: guix/scripts/package.scm:185 guix/scripts/package.scm:659
+#: guix/scripts/system.scm:502
 #, scheme-format
 msgid "invalid syntax: ~a~%"
 msgstr "Unzulässige Syntax: ~a~%"
 
-#: guix/scripts/package.scm:219
+#: guix/scripts/package.scm:210
+#, scheme-format
+msgid "nothing to be done~%"
+msgstr "Nichts zu tun~%"
+
+#: guix/scripts/package.scm:224
+#, scheme-format
+msgid "~a package in profile~%"
+msgid_plural "~a packages in profile~%"
+msgstr[0] "~a Paket im Profil~%"
+msgstr[1] "~a Pakete im Profil~%"
+
+#: guix/scripts/package.scm:313
 #, scheme-format
 msgid "The following environment variable definitions may be needed:~%"
 msgstr "Die Definition folgender Umgebungsvariablen könnte nötig sein:~%"
 
-#: guix/scripts/package.scm:235
+#: guix/scripts/package.scm:329
 msgid ""
 "Usage: guix package [OPTION]...\n"
 "Install, remove, or upgrade packages in a single transaction.\n"
@@ -406,7 +514,7 @@ msgstr ""
 "Pakete in einer einzigen Transaktion installieren,\n"
 "entfernen oder aktualisieren.\n"
 
-#: guix/scripts/package.scm:237
+#: guix/scripts/package.scm:331
 msgid ""
 "\n"
 "  -i, --install PACKAGE ...\n"
@@ -415,14 +523,14 @@ msgstr ""
 "\n"
 "  -i, --install=PAKET    PAKET oder PAKETE installieren"
 
-#: guix/scripts/package.scm:240
+#: guix/scripts/package.scm:334
 msgid ""
 "\n"
 "  -e, --install-from-expression=EXP\n"
 "                         install the package EXP evaluates to"
 msgstr ""
 
-#: guix/scripts/package.scm:243
+#: guix/scripts/package.scm:337
 msgid ""
 "\n"
 "  -f, --install-from-file=FILE\n"
@@ -430,7 +538,7 @@ msgid ""
 "                         evaluates to"
 msgstr ""
 
-#: guix/scripts/package.scm:247
+#: guix/scripts/package.scm:341
 msgid ""
 "\n"
 "  -r, --remove PACKAGE ...\n"
@@ -439,32 +547,32 @@ msgstr ""
 "\n"
 "  -r, --remove=PAKET     PAKET oder PAKETE entfernen"
 
-#: guix/scripts/package.scm:250
+#: guix/scripts/package.scm:344
 msgid ""
 "\n"
 "  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
 msgstr ""
 
-#: guix/scripts/package.scm:252
+#: guix/scripts/package.scm:346
 msgid ""
 "\n"
 "  -m, --manifest=FILE    create a new profile generation with the manifest\n"
 "                         from FILE"
 msgstr ""
 
-#: guix/scripts/package.scm:255
+#: guix/scripts/package.scm:349
 msgid ""
 "\n"
 "      --do-not-upgrade[=REGEXP] do not upgrade any packages matching REGEXP"
 msgstr ""
 
-#: guix/scripts/package.scm:257
+#: guix/scripts/package.scm:351
 msgid ""
 "\n"
 "      --roll-back        roll back to the previous generation"
 msgstr ""
 
-#: guix/scripts/package.scm:259
+#: guix/scripts/package.scm:353
 msgid ""
 "\n"
 "      --search-paths[=KIND]\n"
@@ -474,40 +582,40 @@ msgstr ""
 "      --search-paths[=ART]\n"
 "                         benötigte Definitionen von Umgebungsvariablen anzeigen"
 
-#: guix/scripts/package.scm:262
+#: guix/scripts/package.scm:356
 msgid ""
 "\n"
 "  -l, --list-generations[=PATTERN]\n"
 "                         list generations matching PATTERN"
 msgstr ""
 
-#: guix/scripts/package.scm:265
+#: guix/scripts/package.scm:359
 msgid ""
 "\n"
 "  -d, --delete-generations[=PATTERN]\n"
 "                         delete generations matching PATTERN"
 msgstr ""
 
-#: guix/scripts/package.scm:268
+#: guix/scripts/package.scm:362
 msgid ""
 "\n"
 "  -S, --switch-generation=PATTERN\n"
 "                         switch to a generation matching PATTERN"
 msgstr ""
 
-#: guix/scripts/package.scm:271
+#: guix/scripts/package.scm:365
 msgid ""
 "\n"
 "  -p, --profile=PROFILE  use PROFILE instead of the user's default profile"
 msgstr ""
 
-#: guix/scripts/package.scm:274
+#: guix/scripts/package.scm:368
 msgid ""
 "\n"
 "      --bootstrap        use the bootstrap Guile to build the profile"
 msgstr ""
 
-#: guix/scripts/package.scm:276 guix/scripts/pull.scm:76
+#: guix/scripts/package.scm:370 guix/scripts/pull.scm:76
 msgid ""
 "\n"
 "      --verbose          produce verbose output"
@@ -515,27 +623,27 @@ msgstr ""
 "\n"
 "      --verbose          ausführliche Ausgaben anzeigen"
 
-#: guix/scripts/package.scm:279
+#: guix/scripts/package.scm:373
 msgid ""
 "\n"
 "  -s, --search=REGEXP    search in synopsis and description using REGEXP"
 msgstr ""
 
-#: guix/scripts/package.scm:281
+#: guix/scripts/package.scm:375
 msgid ""
 "\n"
 "  -I, --list-installed[=REGEXP]\n"
 "                         list installed packages matching REGEXP"
 msgstr ""
 
-#: guix/scripts/package.scm:284
+#: guix/scripts/package.scm:378
 msgid ""
 "\n"
 "  -A, --list-available[=REGEXP]\n"
 "                         list available packages matching REGEXP"
 msgstr ""
 
-#: guix/scripts/package.scm:287
+#: guix/scripts/package.scm:381
 msgid ""
 "\n"
 "      --show=PACKAGE     show details about PACKAGE"
@@ -543,69 +651,27 @@ msgstr ""
 "\n"
 "      --show=PAKET       Details zu PAKET anzeigen"
 
-#: guix/scripts/package.scm:380
+#: guix/scripts/package.scm:476
 #, scheme-format
 msgid "~a: unsupported kind of search path~%"
 msgstr ""
 
-#: guix/scripts/package.scm:550 guix/scripts/publish.scm:357
-#, scheme-format
-msgid "~A: extraneous argument~%"
-msgstr ""
-
-#: guix/scripts/package.scm:558
-#, scheme-format
-msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
-msgstr ""
-
-#: guix/scripts/package.scm:580
-#, scheme-format
-msgid "error: while creating directory `~a': ~a~%"
-msgstr "Fehler beim Anlegen des Verzeichnisses »~a«: ~a~%"
-
-#: guix/scripts/package.scm:584
-#, scheme-format
-msgid "Please create the `~a' directory, with you as the owner.~%"
-msgstr "Bitte legen Sie das Verzeichnis »~a« mit Ihnen als Eigentümer an.~%"
-
-#: guix/scripts/package.scm:591
-#, scheme-format
-msgid "error: directory `~a' is not owned by you~%"
-msgstr "Fehler: Das Verzeichnis »~a« gehört Ihnen nicht~%"
-
-#: guix/scripts/package.scm:594
-#, scheme-format
-msgid "Please change the owner of `~a' to user ~s.~%"
-msgstr "Bitte ändern Sie den Eigentümer von »~a« in Benutzer ~s.~%"
-
-#: guix/scripts/package.scm:628
-#, scheme-format
-msgid "nothing to be done~%"
-msgstr "Nichts zu tun~%"
-
-#: guix/scripts/package.scm:644
-#, scheme-format
-msgid "~a package in profile~%"
-msgid_plural "~a packages in profile~%"
-msgstr[0] "~a Paket im Profil~%"
-msgstr[1] "~a Pakete im Profil~%"
-
-#: guix/scripts/package.scm:668
+#: guix/scripts/package.scm:755
 #, scheme-format
 msgid "cannot switch to generation '~a'~%"
 msgstr "Zu Generation »~a« kann nicht gewechselt werden~%"
 
-#: guix/scripts/package.scm:690
+#: guix/scripts/package.scm:771
 #, scheme-format
 msgid "would install new manifest from '~a' with ~d entries~%"
 msgstr ""
 
-#: guix/scripts/package.scm:692
+#: guix/scripts/package.scm:773
 #, scheme-format
 msgid "installing new manifest from '~a' with ~d entries~%"
 msgstr ""
 
-#: guix/scripts/gc.scm:40
+#: guix/scripts/gc.scm:42
 msgid ""
 "Usage: guix gc [OPTION]... PATHS...\n"
 "Invoke the garbage collector.\n"
@@ -613,14 +679,20 @@ msgstr ""
 "Aufruf: guix gc [OPTION] … PFADE …\n"
 "Ruft den Müllsammler auf.\n"
 
-#: guix/scripts/gc.scm:42
+#: guix/scripts/gc.scm:44
 msgid ""
 "\n"
 "  -C, --collect-garbage[=MIN]\n"
 "                         collect at least MIN bytes of garbage"
 msgstr ""
 
-#: guix/scripts/gc.scm:45
+#: guix/scripts/gc.scm:47
+msgid ""
+"\n"
+"  -F, --free-space=FREE  attempt to reach FREE available space in the store"
+msgstr ""
+
+#: guix/scripts/gc.scm:49
 msgid ""
 "\n"
 "  -d, --delete           attempt to delete PATHS"
@@ -628,43 +700,43 @@ msgstr ""
 "\n"
 "  -d, --delete           versuchen, PFADE zu löschen"
 
-#: guix/scripts/gc.scm:47
+#: guix/scripts/gc.scm:51
 msgid ""
 "\n"
 "      --optimize         optimize the store by deduplicating identical files"
 msgstr ""
 
-#: guix/scripts/gc.scm:49
+#: guix/scripts/gc.scm:53
 msgid ""
 "\n"
 "      --list-dead        list dead paths"
 msgstr ""
 
-#: guix/scripts/gc.scm:51
+#: guix/scripts/gc.scm:55
 msgid ""
 "\n"
 "      --list-live        list live paths"
 msgstr ""
 
-#: guix/scripts/gc.scm:54
+#: guix/scripts/gc.scm:58
 msgid ""
 "\n"
 "      --references       list the references of PATHS"
 msgstr ""
 
-#: guix/scripts/gc.scm:56
+#: guix/scripts/gc.scm:60
 msgid ""
 "\n"
 "  -R, --requisites       list the requisites of PATHS"
 msgstr ""
 
-#: guix/scripts/gc.scm:58
+#: guix/scripts/gc.scm:62
 msgid ""
 "\n"
 "      --referrers        list the referrers of PATHS"
 msgstr ""
 
-#: guix/scripts/gc.scm:61
+#: guix/scripts/gc.scm:65
 msgid ""
 "\n"
 "      --verify[=OPTS]    verify the integrity of the store; OPTS is a\n"
@@ -672,23 +744,41 @@ msgid ""
 "                         'contents'"
 msgstr ""
 
-#: guix/scripts/gc.scm:65
+#: guix/scripts/gc.scm:69
 msgid ""
 "\n"
 "      --list-failures    list cached build failures"
 msgstr ""
 
-#: guix/scripts/gc.scm:67
+#: guix/scripts/gc.scm:71
 msgid ""
 "\n"
 "      --clear-failures   remove PATHS from the set of cached failures"
 msgstr ""
 
-#: guix/scripts/gc.scm:96
+#: guix/scripts/gc.scm:100
 #, scheme-format
 msgid "invalid amount of storage: ~a~%"
 msgstr "Ungültiger Speicher-Wert: ~a~%"
 
+#: guix/scripts/gc.scm:191
+msgid "already ~h bytes available on ~a, nothing to do~%"
+msgstr ""
+
+#: guix/scripts/gc.scm:194
+msgid "freeing ~h bytes~%"
+msgstr ""
+
+#: guix/scripts/gc.scm:206
+#, fuzzy, scheme-format
+#| msgid "invalid argument: ~a~%"
+msgid "extraneous arguments: ~{~a ~}~%"
+msgstr "Ungültiges Argument: ~a~%"
+
+#: guix/scripts/gc.scm:226 guix/scripts/gc.scm:229
+msgid "freed ~h bytes~%"
+msgstr ""
+
 #: guix/scripts/hash.scm:46
 msgid ""
 "Usage: guix hash [OPTION] FILE\n"
@@ -711,12 +801,12 @@ msgstr ""
 msgid "unrecognized option: ~a~%"
 msgstr "Nicht erkannte Option: ~a~%"
 
-#: guix/scripts/hash.scm:135 guix/ui.scm:458
+#: guix/scripts/hash.scm:135 guix/ui.scm:477
 #, scheme-format
 msgid "~a~%"
 msgstr "~a~%"
 
-#: guix/scripts/hash.scm:138 guix/scripts/system.scm:685
+#: guix/scripts/hash.scm:138 guix/scripts/system.scm:825
 #, scheme-format
 msgid "wrong number of arguments~%"
 msgstr "Falsche Argumentanzahl~%"
@@ -738,10 +828,17 @@ msgstr "IMPORTER muss einer der unten aufgelisteten Importer sein:\n"
 msgid "guix import: missing importer name~%"
 msgstr "guix import: Importer-Name fehlt~%"
 
-#: guix/scripts/import.scm:113
-#, scheme-format
-msgid "guix import: invalid importer~%"
-msgstr ""
+#: guix/scripts/import.scm:115
+#, fuzzy, scheme-format
+#| msgid "~a: download failed~%"
+msgid "'~a' import failed~%"
+msgstr "~a: Herunterladen fehlgeschlagen~%"
+
+#: guix/scripts/import.scm:116
+#, fuzzy, scheme-format
+#| msgid "~a: invalid number~%"
+msgid "~a: invalid importer~%"
+msgstr "~a: ungültige Zahl~%"
 
 #: guix/scripts/import/cran.scm:42
 msgid ""
@@ -749,17 +846,23 @@ msgid ""
 "Import and convert the CRAN package for PACKAGE-NAME.\n"
 msgstr ""
 
-#: guix/scripts/import/cran.scm:87
+#: guix/scripts/import/cran.scm:44
+msgid ""
+"\n"
+"  -a, --archive=ARCHIVE  specify the archive repository"
+msgstr ""
+
+#: guix/scripts/import/cran.scm:94
 #, scheme-format
 msgid "failed to download description for package '~a'~%"
 msgstr "Beschreibung für Paket »~a« konnte nicht geladen werden~%"
 
-#: guix/scripts/import/cran.scm:91 guix/scripts/import/elpa.scm:95
+#: guix/scripts/import/cran.scm:98 guix/scripts/import/elpa.scm:95
 #, scheme-format
 msgid "too few arguments~%"
 msgstr "Zu wenige Argumente~%"
 
-#: guix/scripts/import/cran.scm:93 guix/scripts/import/elpa.scm:97
+#: guix/scripts/import/cran.scm:100 guix/scripts/import/elpa.scm:97
 #, scheme-format
 msgid "too many arguments~%"
 msgstr "Zu viele Argumente~%"
@@ -851,100 +954,146 @@ msgstr "~A: unerwartetes Argument~%"
 msgid "failed to download up-to-date source, exiting\n"
 msgstr "Aktueller Quellcode konnte nicht heruntergeladen werden, Abbruch\n"
 
-#: guix/scripts/substitute.scm:103
+#: guix/scripts/substitute.scm:113
 #, scheme-format
 msgid "authentication and authorization of substitutes disabled!~%"
 msgstr ""
 
-#: guix/scripts/substitute.scm:179
+#: guix/scripts/substitute.scm:188
 #, scheme-format
 msgid "download from '~a' failed: ~a, ~s~%"
 msgstr "Herunterladen von »~a« ist fehlgeschlagen: ~a, ~s~%"
 
-#: guix/scripts/substitute.scm:191
+#: guix/scripts/substitute.scm:201
 #, scheme-format
 msgid "while fetching ~a: server is somewhat slow~%"
 msgstr "Beim Holen von ~a: Server ist etwas langsam~%"
 
-#: guix/scripts/substitute.scm:193
+#: guix/scripts/substitute.scm:203
 #, scheme-format
 msgid "try `--no-substitutes' if the problem persists~%"
 msgstr "Versuchen Sie »--no-substitutes«, falls das Problem weiter besteht~%"
 
-#: guix/scripts/substitute.scm:266
+#: guix/scripts/substitute.scm:219
+#, fuzzy, scheme-format
+#| msgid "unsupported signature version: ~a~%"
+msgid "unsupported substitute URI scheme: ~a~%"
+msgstr "Signaturversion wird nicht unterstützt: ~a~%"
+
+#: guix/scripts/substitute.scm:252
+#, fuzzy, scheme-format
+#| msgid "while fetching ~a: server is somewhat slow~%"
+msgid "while fetching '~a': ~a (~s)~%"
+msgstr "Beim Holen von ~a: Server ist etwas langsam~%"
+
+#: guix/scripts/substitute.scm:257
+#, scheme-format
+msgid "ignoring substitute server at '~s'~%"
+msgstr ""
+
+#: guix/scripts/substitute.scm:306
 #, scheme-format
 msgid "signature version must be a number: ~s~%"
 msgstr "Signaturversion muss eine Zahl sein: ~s~%"
 
-#: guix/scripts/substitute.scm:270
+#: guix/scripts/substitute.scm:310
 #, scheme-format
 msgid "unsupported signature version: ~a~%"
 msgstr "Signaturversion wird nicht unterstützt: ~a~%"
 
-#: guix/scripts/substitute.scm:278
+#: guix/scripts/substitute.scm:318
 #, scheme-format
 msgid "signature is not a valid s-expression: ~s~%"
 msgstr ""
 
-#: guix/scripts/substitute.scm:282
+#: guix/scripts/substitute.scm:322
 #, scheme-format
 msgid "invalid format of the signature field: ~a~%"
 msgstr "Unzulässiges Format des Signaturfeldes: ~a~%"
 
-#: guix/scripts/substitute.scm:317
+#: guix/scripts/substitute.scm:357
 #, scheme-format
 msgid "invalid signature for '~a'~%"
 msgstr "Ungültige Signatur für »~a«~%"
 
-#: guix/scripts/substitute.scm:319
+#: guix/scripts/substitute.scm:359
 #, scheme-format
 msgid "hash mismatch for '~a'~%"
 msgstr "Prüfsummenfehler für »~a«~%"
 
-#: guix/scripts/substitute.scm:321
+#: guix/scripts/substitute.scm:361
 #, scheme-format
 msgid "'~a' is signed with an unauthorized key~%"
 msgstr ""
 
-#: guix/scripts/substitute.scm:323
+#: guix/scripts/substitute.scm:363
 #, scheme-format
 msgid "signature on '~a' is corrupt~%"
 msgstr "Signature von »~a« ist beschädigt~%"
 
-#: guix/scripts/substitute.scm:361
+#: guix/scripts/substitute.scm:401
 #, scheme-format
 msgid "substitute at '~a' lacks a signature~%"
 msgstr ""
 
-#: guix/scripts/substitute.scm:537
+#: guix/scripts/substitute.scm:409
+#, fuzzy, scheme-format
+#| msgid "found valid signature for '~a'~%"
+msgid "~%Found valid signature for ~a~%"
+msgstr "Gültige Signatur für »~a« gefunden~%"
+
+#: guix/scripts/substitute.scm:412
+#, fuzzy, scheme-format
+#| msgid "~a~%"
+msgid "From ~a~%"
+msgstr "~a~%"
+
+#: guix/scripts/substitute.scm:452
+#, fuzzy, scheme-format
+#| msgid "profile '~a' does not exist~%"
+msgid "'~a' does not name a store item~%"
+msgstr "Profil »~a« existiert nicht~%"
+
+#: guix/scripts/substitute.scm:596
 #, scheme-format
 msgid "updating list of substitutes from '~a'... ~5,1f%"
 msgstr ""
 
-#: guix/scripts/substitute.scm:591
+#: guix/scripts/substitute.scm:646
 #, scheme-format
 msgid "~s: unsupported server URI scheme~%"
 msgstr ""
 
-#: guix/scripts/substitute.scm:733
+#: guix/scripts/substitute.scm:656
+#, scheme-format
+msgid "'~a' uses different store '~a'; ignoring it~%"
+msgstr ""
+
+#: guix/scripts/substitute.scm:801
 #, scheme-format
 msgid "host name lookup error: ~a~%"
 msgstr "Fehler beim Nachschlagen des Rechnernamens: ~a~%"
 
-#: guix/scripts/substitute.scm:742
+#: guix/scripts/substitute.scm:806
+#, fuzzy, scheme-format
+#| msgid "error: while creating directory `~a': ~a~%"
+msgid "TLS error in procedure '~a': ~a~%"
+msgstr "Fehler beim Anlegen des Verzeichnisses »~a«: ~a~%"
+
+#: guix/scripts/substitute.scm:817
 msgid ""
 "Usage: guix substitute [OPTION]...\n"
 "Internal tool to substitute a pre-built binary to a local build.\n"
 msgstr ""
 
-#: guix/scripts/substitute.scm:744
+#: guix/scripts/substitute.scm:819
 msgid ""
 "\n"
 "      --query            report on the availability of substitutes for the\n"
 "                         store file names passed on the standard input"
 msgstr ""
 
-#: guix/scripts/substitute.scm:747
+#: guix/scripts/substitute.scm:822
 msgid ""
 "\n"
 "      --substitute STORE-FILE DESTINATION\n"
@@ -952,11 +1101,19 @@ msgid ""
 "                         DESTINATION"
 msgstr ""
 
-#: guix/scripts/substitute.scm:872
+#. TRANSLATORS: The second part of this message looks like
+#. "(4.1MiB installed)"; it shows the size of the package once
+#. installed.
+#: guix/scripts/substitute.scm:895
+#, scheme-format
+msgid "Downloading ~a~:[~*~; (~a installed)~]...~%"
+msgstr ""
+
+#: guix/scripts/substitute.scm:951
 msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n"
 msgstr ""
 
-#: guix/scripts/substitute.scm:954
+#: guix/scripts/substitute.scm:1047
 #, scheme-format
 msgid "~a: unrecognized options~%"
 msgstr "~a: nicht erkannte Optionen~%"
@@ -995,76 +1152,137 @@ msgstr ""
 msgid "wrong arguments"
 msgstr "Falsche Argumente"
 
-#: guix/scripts/system.scm:105
+#: guix/scripts/system.scm:111
 #, scheme-format
 msgid "failed to register '~a' under '~a'~%"
 msgstr "»~a« konnte nicht unter »~a« registriert werden~%"
 
-#: guix/scripts/system.scm:137
+#: guix/scripts/system.scm:144
 #, scheme-format
 msgid "failed to install GRUB on device '~a'~%"
 msgstr "GRUB konnte nicht auf Gerät »~a« installiert werden~%"
 
-#: guix/scripts/system.scm:155
+#: guix/scripts/system.scm:162
 #, scheme-format
 msgid "initializing the current root file system~%"
 msgstr "Aktuelles Wurzeldateisystem wird initialisiert~%"
 
-#: guix/scripts/system.scm:169
+#: guix/scripts/system.scm:176
 #, scheme-format
 msgid "not running as 'root', so the ownership of '~a' may be incorrect!~%"
 msgstr ""
 
-#: guix/scripts/system.scm:219
+#: guix/scripts/system.scm:234
 #, scheme-format
-msgid "unrecognized boot parameters for '~a'~%"
-msgstr "Nicht erkannte Startparameter für »~a«~%"
+msgid "while talking to shepherd: ~a~%"
+msgstr ""
+
+#: guix/scripts/system.scm:248
+#, fuzzy, scheme-format
+#| msgid "service of type '~a' not found"
+msgid "service '~a' could not be found~%"
+msgstr "Dienst des Typs »~a« wurde nicht gefunden"
+
+#: guix/scripts/system.scm:251
+#, fuzzy, scheme-format
+#| msgid "profile '~a' does not exist~%"
+msgid "service '~a' does not have an action '~a'~%"
+msgstr "Profil »~a« existiert nicht~%"
+
+#: guix/scripts/system.scm:255
+#, fuzzy, scheme-format
+#| msgid "corrupt input while restoring '~a' from ~s~%"
+msgid "exception caught while executing '~a' on service '~a':~%"
+msgstr "Beschädigte Eingabe, während »~a« aus »~s« wiederhergestellt wurde~%"
+
+#: guix/scripts/system.scm:263
+#, fuzzy, scheme-format
+#| msgid "no matching generation~%"
+msgid "something went wrong: ~s~%"
+msgstr "Keine passende Generation%"
+
+#: guix/scripts/system.scm:266
+#, scheme-format
+msgid "shepherd error~%"
+msgstr ""
+
+#: guix/scripts/system.scm:302
+#, fuzzy, scheme-format
+#| msgid "failed to install GRUB on device '~a'~%"
+msgid "failed to obtain list of shepherd services~%"
+msgstr "GRUB konnte nicht auf Gerät »~a« installiert werden~%"
+
+#: guix/scripts/system.scm:322
+#, fuzzy, scheme-format
+#| msgid "unpacking '~a'...~%"
+msgid "unloading service '~a'...~%"
+msgstr "»~a« wird entpackt …~%"
+
+#: guix/scripts/system.scm:330
+#, scheme-format
+msgid "loading new services:~{ ~a~}...~%"
+msgstr ""
 
-#: guix/scripts/system.scm:254
+#: guix/scripts/system.scm:354
 #, scheme-format
 msgid "activating system...~%"
 msgstr "System wird aktiviert …~%"
 
-#: guix/scripts/system.scm:338
+#: guix/scripts/system.scm:445
 msgid "the DAG of services"
 msgstr ""
 
-#: guix/scripts/system.scm:351
-msgid "the dependency graph of dmd services"
+#: guix/scripts/system.scm:458
+msgid "the dependency graph of shepherd services"
 msgstr ""
 
-#: guix/scripts/system.scm:369
+#: guix/scripts/system.scm:479
 #, scheme-format
 msgid "  file name: ~a~%"
 msgstr "  Dateiname: ~a~%"
 
-#: guix/scripts/system.scm:370
+#: guix/scripts/system.scm:480
 #, scheme-format
 msgid "  canonical file name: ~a~%"
 msgstr ""
 
 #. TRANSLATORS: Please preserve the two-space indentation.
-#: guix/scripts/system.scm:374
+#: guix/scripts/system.scm:482
 #, scheme-format
 msgid "  label: ~a~%"
 msgstr "  Label: ~a~%"
 
-#: guix/scripts/system.scm:375
+#: guix/scripts/system.scm:483
 #, scheme-format
 msgid "  root device: ~a~%"
 msgstr "  Root-Gerät: ~a~%"
 
-#: guix/scripts/system.scm:376
+#: guix/scripts/system.scm:484
 #, scheme-format
 msgid "  kernel: ~a~%"
 msgstr "  Kernel: ~a~%"
 
-#: guix/scripts/system.scm:476
+#: guix/scripts/system.scm:541
+#, scheme-format
+msgid "~a not found: 'guix pull' was never run~%"
+msgstr ""
+
+#: guix/scripts/system.scm:542
+#, scheme-format
+msgid "Consider running 'guix pull' before 'reconfigure'.~%"
+msgstr ""
+
+#: guix/scripts/system.scm:543
+#, scheme-format
+msgid "Failing to do that may downgrade your system!~%"
+msgstr ""
+
+#: guix/scripts/system.scm:613
 #, scheme-format
 msgid "initializing operating system under '~a'...~%"
 msgstr "Betriebssystem unter »~a« wird initialisiert …~%"
 
-#: guix/scripts/system.scm:515
+#: guix/scripts/system.scm:652
 msgid ""
 "Usage: guix system [OPTION] ACTION [FILE]\n"
 "Build the operating system declared in FILE according to ACTION.\n"
@@ -1072,62 +1290,70 @@ msgstr ""
 "Aufruf: guix system [OPTION] AKTION [DATEI]\n"
 "Das in DATEI deklarierte Betriebssystem entsprechend der AKTION erstellen.\n"
 
-#: guix/scripts/system.scm:518
+#: guix/scripts/system.scm:655 guix/scripts/container.scm:28
 msgid "The valid values for ACTION are:\n"
 msgstr "Die gültigen Werte für AKTION sind:\n"
 
-#: guix/scripts/system.scm:520
+#: guix/scripts/system.scm:657
 msgid "   reconfigure      switch to a new operating system configuration\n"
 msgstr "   reconfigure      zur neuen Betriebssystemkonfiguration wechseln\n"
 
-#: guix/scripts/system.scm:522
+#: guix/scripts/system.scm:659
 msgid "   list-generations list the system generations\n"
 msgstr ""
 
-#: guix/scripts/system.scm:524
+#: guix/scripts/system.scm:661
 msgid "   build            build the operating system without installing anything\n"
 msgstr "   build            das Betriebssystem erstellen, ohne etwas zu installieren\n"
 
-#: guix/scripts/system.scm:526
+#: guix/scripts/system.scm:663
+#, fuzzy
+#| msgid "   vm               build a virtual machine image that shares the host's store\n"
+msgid "   container        build a container that shares the host's store\n"
+msgstr ""
+"   vm               ein Image für eine virtuelle Maschine erstellen, das den\n"
+"                    Speicher des Rechners nutzt\n"
+
+#: guix/scripts/system.scm:665
 msgid "   vm               build a virtual machine image that shares the host's store\n"
 msgstr ""
 "   vm               ein Image für eine virtuelle Maschine erstellen, das den\n"
 "                    Speicher des Rechners nutzt\n"
 
-#: guix/scripts/system.scm:528
+#: guix/scripts/system.scm:667
 msgid "   vm-image         build a freestanding virtual machine image\n"
 msgstr "   vm-image         ein unabhängiges Image für eine virtuelle Maschine erstellen\n"
 
-#: guix/scripts/system.scm:530
+#: guix/scripts/system.scm:669
 msgid "   disk-image       build a disk image, suitable for a USB stick\n"
 msgstr "   disk-image       ein Disk-Image für einen USB-Stick erstellen\n"
 
-#: guix/scripts/system.scm:532
+#: guix/scripts/system.scm:671
 msgid "   init             initialize a root file system to run GNU\n"
 msgstr "   init             ein Wurzeldateisystem initialisieren, um GNU auszuführen.\n"
 
-#: guix/scripts/system.scm:534
+#: guix/scripts/system.scm:673
 msgid "   extension-graph  emit the service extension graph in Dot format\n"
 msgstr ""
 
-#: guix/scripts/system.scm:536
-msgid "   dmd-graph        emit the graph of dmd services in Dot format\n"
+#: guix/scripts/system.scm:675
+msgid "   shepherd-graph   emit the graph of shepherd services in Dot format\n"
 msgstr ""
 
-#: guix/scripts/system.scm:540
+#: guix/scripts/system.scm:679
 msgid ""
 "\n"
 "  -d, --derivation       return the derivation of the given system"
 msgstr ""
 
-#: guix/scripts/system.scm:542
+#: guix/scripts/system.scm:681
 msgid ""
 "\n"
 "      --on-error=STRATEGY\n"
 "                         apply STRATEGY when an error occurs while reading FILE"
 msgstr ""
 
-#: guix/scripts/system.scm:545
+#: guix/scripts/system.scm:684
 msgid ""
 "\n"
 "      --image-size=SIZE  for 'vm-image', produce an image of SIZE"
@@ -1135,7 +1361,7 @@ msgstr ""
 "\n"
 "      --image-size=GRÖSSE für »vm-image«, ein Image der GRÖSSE erstellen"
 
-#: guix/scripts/system.scm:547
+#: guix/scripts/system.scm:686
 msgid ""
 "\n"
 "      --no-grub          for 'init', do not install GRUB"
@@ -1143,19 +1369,19 @@ msgstr ""
 "\n"
 "      --no-grub          für »init«, GRUB nicht installieren"
 
-#: guix/scripts/system.scm:549
+#: guix/scripts/system.scm:688
 msgid ""
 "\n"
 "      --share=SPEC       for 'vm', share host file system according to SPEC"
 msgstr ""
 
-#: guix/scripts/system.scm:551
+#: guix/scripts/system.scm:690
 msgid ""
 "\n"
 "      --expose=SPEC      for 'vm', expose host file system according to SPEC"
 msgstr ""
 
-#: guix/scripts/system.scm:553
+#: guix/scripts/system.scm:692
 msgid ""
 "\n"
 "      --full-boot        for 'vm', make a full boot sequence"
@@ -1163,210 +1389,253 @@ msgstr ""
 "\n"
 "      --full-boot        für »vm«, vollständige Boot-Sequenz"
 
-#: guix/scripts/system.scm:637
+#: guix/scripts/system.scm:777
 #, scheme-format
 msgid "no configuration file specified~%"
 msgstr "Keine Konfigurationsdatei angegeben~%"
 
-#: guix/scripts/system.scm:700
+#: guix/scripts/system.scm:840
 #, scheme-format
 msgid "~a: unknown action~%"
 msgstr "~a: unbekannte Aktion~%"
 
-#: guix/scripts/system.scm:715
+#: guix/scripts/system.scm:855
 #, scheme-format
 msgid "wrong number of arguments for action '~a'~%"
 msgstr "Falsche Anzahl an Argumenten für Aktion »~a«~%"
 
-#: guix/scripts/system.scm:720
+#: guix/scripts/system.scm:860
 #, scheme-format
 msgid "guix system: missing command name~%"
 msgstr "guix system: Befehlsname fehlt~%"
 
-#: guix/scripts/system.scm:722
+#: guix/scripts/system.scm:862
 #, scheme-format
 msgid "Try 'guix system --help' for more information.~%"
 msgstr "Rufen Sie »guix system --help« auf, um weitere Informationen zu erhalten.~%"
 
-#: guix/scripts/lint.scm:124
+#: guix/scripts/lint.scm:130
 #, scheme-format
 msgid "Available checkers:~%"
 msgstr "Verfügbare Prüfer:~%"
 
-#: guix/scripts/lint.scm:144
+#: guix/scripts/lint.scm:150
 msgid "description should not be empty"
 msgstr ""
 
-#: guix/scripts/lint.scm:154
+#: guix/scripts/lint.scm:160
 msgid "Texinfo markup in description is invalid"
 msgstr ""
 
-#: guix/scripts/lint.scm:162
+#: guix/scripts/lint.scm:168
 msgid "description should start with an upper-case letter or digit"
 msgstr ""
 
-#: guix/scripts/lint.scm:178
+#: guix/scripts/lint.scm:184
 #, scheme-format
 msgid ""
 "sentences in description should be followed ~\n"
 "by two spaces; possible infraction~p at ~{~a~^, ~}"
 msgstr ""
 
-#: guix/scripts/lint.scm:202
-msgid "pkg-config should probably be a native input"
+#: guix/scripts/lint.scm:200
+#, fuzzy, scheme-format
+#| msgid "Validate package descriptions"
+msgid "invalid description: ~s"
+msgstr "Paketbeschreibungen überprüfen"
+
+#: guix/scripts/lint.scm:220
+#, scheme-format
+msgid "'~a' should probably be a native input"
 msgstr ""
 
-#: guix/scripts/lint.scm:217
+#: guix/scripts/lint.scm:238
 msgid "synopsis should not be empty"
 msgstr ""
 
-#: guix/scripts/lint.scm:225
+#: guix/scripts/lint.scm:246
 msgid "no period allowed at the end of the synopsis"
 msgstr "Am Ende der Zusammenfassung darf kein Punkt gesetzt werden"
 
-#: guix/scripts/lint.scm:237
+#: guix/scripts/lint.scm:258
 msgid "no article allowed at the beginning of the synopsis"
-msgstr "Am Beginn der Zusammenfassung darf kein Punkt stehen"
+msgstr "Am Beginn der Zusammenfassung darf kein Artikel stehen"
 
-#: guix/scripts/lint.scm:244
+#: guix/scripts/lint.scm:265
 msgid "synopsis should be less than 80 characters long"
 msgstr "Zusammenfassung sollte nicht länger als 80 Zeichen sein"
 
-#: guix/scripts/lint.scm:250
+#: guix/scripts/lint.scm:271
 msgid "synopsis should start with an upper-case letter or digit"
 msgstr "Zusammenfassung sollte mit einem Großbuchstaben oder einer Zahl beginnen"
 
-#: guix/scripts/lint.scm:257
+#: guix/scripts/lint.scm:278
 msgid "synopsis should not start with the package name"
 msgstr "Zusammenfassung sollte nicht mit dem Paketnamen beginnen"
 
-#: guix/scripts/lint.scm:348 guix/scripts/lint.scm:360
+#: guix/scripts/lint.scm:292
+#, scheme-format
+msgid "invalid synopsis: ~s"
+msgstr "Unzulässige Zusammenfassung: ~s"
+
+#: guix/scripts/lint.scm:383
+#, scheme-format
+msgid "URI ~a returned suspiciously small file (~a bytes)"
+msgstr ""
+
+#: guix/scripts/lint.scm:392 guix/scripts/lint.scm:404
 #, scheme-format
 msgid "URI ~a not reachable: ~a (~s)"
 msgstr ""
 
-#: guix/scripts/lint.scm:367
+#: guix/scripts/lint.scm:411
 #, scheme-format
 msgid "URI ~a domain not found: ~a"
 msgstr "URI-Domain ~a nicht gefunden: ~a"
 
-#: guix/scripts/lint.scm:375
+#: guix/scripts/lint.scm:419
 #, scheme-format
 msgid "URI ~a unreachable: ~a"
 msgstr "URI ~a ist nicht erreichbar: ~a"
 
-#: guix/scripts/lint.scm:401
+#: guix/scripts/lint.scm:445
 msgid "invalid value for home page"
 msgstr "Ungültiger Wert für Homepage"
 
-#: guix/scripts/lint.scm:404
+#: guix/scripts/lint.scm:448
 #, scheme-format
 msgid "invalid home page URL: ~s"
 msgstr "Ungültige URL für Homepage: ~s"
 
-#: guix/scripts/lint.scm:429
+#: guix/scripts/lint.scm:468
 msgid "file names of patches should start with the package name"
 msgstr "Dateinamen oder Patches sollten mit dem Paketnamen beginnen"
 
-#: guix/scripts/lint.scm:467
+#: guix/scripts/lint.scm:507
 #, scheme-format
 msgid "~a: ~a: proposed synopsis: ~s~%"
 msgstr "~a: ~a: vorgeschlagene Zusammenfassung: ~s~%"
 
-#: guix/scripts/lint.scm:479
+#: guix/scripts/lint.scm:520
 #, scheme-format
 msgid "~a: ~a: proposed description:~%     \"~a\"~%"
 msgstr "~a: ~a: vorgeschlagene Beschreibung:~%     \"~a\"~%"
 
-#: guix/scripts/lint.scm:516
+#: guix/scripts/lint.scm:557
 msgid "all the source URIs are unreachable:"
 msgstr "Alle Quell-URIs sind nicht erreichbar:"
 
-#: guix/scripts/lint.scm:539
+#: guix/scripts/lint.scm:580
 msgid "the source file name should contain the package name"
 msgstr "Der Name der Quelldatei sollte den Paketnamen enthalten"
 
-#: guix/scripts/lint.scm:548 guix/scripts/lint.scm:552
+#: guix/scripts/lint.scm:589 guix/scripts/lint.scm:593
 #, scheme-format
 msgid "failed to create derivation: ~a"
 msgstr "Ableitung konnte nicht erstellt werden: ~a"
 
-#: guix/scripts/lint.scm:558
+#: guix/scripts/lint.scm:607
 #, scheme-format
 msgid "failed to create derivation: ~s~%"
 msgstr "Ableitung konnte nicht erstellt werden: ~s~%"
 
-#: guix/scripts/lint.scm:568
+#: guix/scripts/lint.scm:617
 msgid "invalid license field"
 msgstr "Ungültiges Lizenz-Feld"
 
-#: guix/scripts/lint.scm:582
+#: guix/scripts/lint.scm:634
+#, fuzzy, scheme-format
+#| msgid "failed to create derivation: ~s~%"
+msgid "failed to retrieve CVE vulnerabilities from ~s: ~a (~s)~%"
+msgstr "Ableitung konnte nicht erstellt werden: ~s~%"
+
+#: guix/scripts/lint.scm:639 guix/scripts/lint.scm:647
+#, scheme-format
+msgid "assuming no CVE vulnerabilities~%"
+msgstr ""
+
+#: guix/scripts/lint.scm:645
+#, fuzzy, scheme-format
+#| msgid "failed to load '~a': ~a~%"
+msgid "failed to lookup NIST host: ~a~%"
+msgstr "»~a« konnte nicht geladen werden: ~a~%"
+
+#: guix/scripts/lint.scm:683
+#, scheme-format
+msgid "probably vulnerable to ~a"
+msgstr ""
+
+#: guix/scripts/lint.scm:698
 #, scheme-format
 msgid "tabulation on line ~a, column ~a"
 msgstr "Tabulator in Zeile ~a, Spalte ~a"
 
-#: guix/scripts/lint.scm:591
+#: guix/scripts/lint.scm:707
 #, scheme-format
 msgid "trailing white space on line ~a"
-msgstr "Führende Leerzeichen in Zeile ~a"
+msgstr "Leerzeichen am Ende der Zeile ~a"
 
-#: guix/scripts/lint.scm:601
+#: guix/scripts/lint.scm:717
 #, scheme-format
 msgid "line ~a is way too long (~a characters)"
 msgstr "Zeile ~a ist viel zu lang (~a Zeichen)"
 
-#: guix/scripts/lint.scm:612
+#: guix/scripts/lint.scm:728
 #, scheme-format
 msgid "line ~a: parentheses feel lonely, move to the previous or next line"
 msgstr ""
 
-#: guix/scripts/lint.scm:667
+#: guix/scripts/lint.scm:783
 msgid "Validate package descriptions"
 msgstr "Paketbeschreibungen überprüfen"
 
-#: guix/scripts/lint.scm:671
+#: guix/scripts/lint.scm:787
 msgid "Validate synopsis & description of GNU packages"
 msgstr "GNU-Paketzusammenfassung und -beschreibungen überprüfen"
 
-#: guix/scripts/lint.scm:675
+#: guix/scripts/lint.scm:791
 msgid "Identify inputs that should be native inputs"
 msgstr "Eingaben prüfen, die native Eingaben sein sollten"
 
-#: guix/scripts/lint.scm:679
+#: guix/scripts/lint.scm:795
 msgid "Validate file names and availability of patches"
 msgstr "Dateinamen und Verfügbarkeit der Patches überprüfen"
 
-#: guix/scripts/lint.scm:683
+#: guix/scripts/lint.scm:799
 msgid "Validate home-page URLs"
 msgstr "Homepage-URLs überprüfen"
 
 #. TRANSLATORS: <license> is the name of a data type and must not be
 #. translated.
-#: guix/scripts/lint.scm:689
+#: guix/scripts/lint.scm:805
 msgid "Make sure the 'license' field is a <license> or a list thereof"
 msgstr ""
 
-#: guix/scripts/lint.scm:694
+#: guix/scripts/lint.scm:810
 msgid "Validate source URLs"
 msgstr "Quell-URLs überprüfen"
 
-#: guix/scripts/lint.scm:698
+#: guix/scripts/lint.scm:814
 msgid "Validate file names of sources"
 msgstr "Dateinamen der Quellen überprüfen"
 
-#: guix/scripts/lint.scm:702
+#: guix/scripts/lint.scm:818
 msgid "Report failure to compile a package to a derivation"
 msgstr ""
 
-#: guix/scripts/lint.scm:706
+#: guix/scripts/lint.scm:822
 msgid "Validate package synopses"
 msgstr "Paketzusammenfassungen überprüfen"
 
-#: guix/scripts/lint.scm:710
+#: guix/scripts/lint.scm:826
+msgid "Check the Common Vulnerabilities and Exposures (CVE) database"
+msgstr ""
+
+#: guix/scripts/lint.scm:831
 msgid "Look for formatting issues in the source"
 msgstr "Nach Formatierungsfehlern in der Quelle schauen"
 
-#: guix/scripts/lint.scm:735
+#: guix/scripts/lint.scm:859
 msgid ""
 "Usage: guix lint [OPTION]... [PACKAGE]...\n"
 "Run a set of checkers on the specified package; if none is specified,\n"
@@ -1377,7 +1646,7 @@ msgstr ""
 "Falls keine angegeben sind, werden alle verfügbaren Überprüfungen\n"
 "mit allen Paketen ausgeführt.\n"
 
-#: guix/scripts/lint.scm:738
+#: guix/scripts/lint.scm:862
 msgid ""
 "\n"
 "  -c, --checkers=CHECKER1,CHECKER2...\n"
@@ -1387,7 +1656,7 @@ msgstr ""
 "  -c, --checkers=PRÜFER1,PRÜFER2 …\n"
 "                         nur die angegebenen Prüfer aufrufen"
 
-#: guix/scripts/lint.scm:743
+#: guix/scripts/lint.scm:867
 msgid ""
 "\n"
 "  -l, --list-checkers    display the list of available lint checkers"
@@ -1395,12 +1664,12 @@ msgstr ""
 "\n"
 "  -l, --list-checkers    Liste der verfügbaren Überprüfungen anzeigen"
 
-#: guix/scripts/lint.scm:763
+#: guix/scripts/lint.scm:887
 #, scheme-format
 msgid "~a: invalid checker~%"
 msgstr "~a: unzulässiger Prüfer~%"
 
-#: guix/scripts/publish.scm:52
+#: guix/scripts/publish.scm:57
 #, scheme-format
 msgid ""
 "Usage: guix publish [OPTION]...\n"
@@ -1409,7 +1678,7 @@ msgstr ""
 "Aufruf: guix publish [OPTION]...\n"
 "~a über HTTP bereitstellen.\n"
 
-#: guix/scripts/publish.scm:54
+#: guix/scripts/publish.scm:59
 msgid ""
 "\n"
 "  -p, --port=PORT        listen on PORT"
@@ -1417,90 +1686,124 @@ msgstr ""
 "\n"
 "  -p, --port=PORT        an PORT lauschen"
 
-#: guix/scripts/publish.scm:56
+#: guix/scripts/publish.scm:61
 msgid ""
 "\n"
 "      --listen=HOST      listen on the network interface for HOST"
 msgstr ""
 
-#: guix/scripts/publish.scm:58
+#: guix/scripts/publish.scm:63
 msgid ""
 "\n"
 "  -u, --user=USER        change privileges to USER as soon as possible"
 msgstr ""
 
-#: guix/scripts/publish.scm:60
+#: guix/scripts/publish.scm:65
+msgid ""
+"\n"
+"  -C, --compression[=LEVEL]\n"
+"                         compress archives at LEVEL"
+msgstr ""
+
+#: guix/scripts/publish.scm:68
+msgid ""
+"\n"
+"      --ttl=TTL          announce narinfos can be cached for TTL seconds"
+msgstr ""
+
+#: guix/scripts/publish.scm:70
 msgid ""
 "\n"
 "  -r, --repl[=PORT]      spawn REPL server on PORT"
 msgstr ""
 
-#: guix/scripts/publish.scm:76
+#: guix/scripts/publish.scm:86
 #, scheme-format
 msgid "lookup of host '~a' failed: ~a~%"
 msgstr "Suche nach Host »~a« ist fehlgeschlagen: ~a~%"
 
-#: guix/scripts/publish.scm:100
+#: guix/scripts/publish.scm:124
 #, scheme-format
 msgid "lookup of host '~a' returned nothing"
 msgstr "Suche nach Host »~a« lieferte kein Ergebnis"
 
-#: guix/scripts/publish.scm:343
+#: guix/scripts/publish.scm:137
+#, scheme-format
+msgid "zlib support is missing; compression disabled~%"
+msgstr ""
+
+#: guix/scripts/publish.scm:144
+#, fuzzy, scheme-format
+#| msgid "~a: invalid number~%"
+msgid "~a: invalid duration~%"
+msgstr "~a: ungültige Zahl~%"
+
+#: guix/scripts/publish.scm:537
 #, scheme-format
 msgid "user '~a' not found: ~a~%"
 msgstr "Benutzer »~a« nicht gefunden: ~a~%"
 
-#: guix/scripts/publish.scm:378
+#: guix/scripts/publish.scm:574
 #, scheme-format
 msgid "server running as root; consider using the '--user' option!~%"
 msgstr ""
 
-#: guix/scripts/publish.scm:380
+#: guix/scripts/publish.scm:576
 #, scheme-format
 msgid "publishing ~a on ~a, port ~d~%"
 msgstr "~a wird auf ~a bereitgestellt, Port ~d~%"
 
-#: guix/scripts/edit.scm:40
+#: guix/scripts/edit.scm:41
 msgid ""
 "Usage: guix edit PACKAGE...\n"
-"Start $EDITOR to edit the definitions of PACKAGE...\n"
+"Start $VISUAL or $EDITOR to edit the definitions of PACKAGE...\n"
 msgstr ""
 
-#: guix/scripts/edit.scm:58
+#: guix/scripts/edit.scm:62
 #, scheme-format
 msgid "file '~a' not found in search path ~s~%"
 msgstr "Datei »~a« im Suchpfad ~s nicht gefunden~%"
 
-#: guix/scripts/edit.scm:70
+#: guix/scripts/edit.scm:83
 #, scheme-format
 msgid "source location of package '~a' is unknown~%"
 msgstr "Quellort des Pakets »~a« ist unbekannt~%"
 
-#: guix/scripts/size.scm:75
+#: guix/scripts/edit.scm:96
+#, scheme-format
+msgid "failed to launch '~a': ~a~%"
+msgstr "»~a« konnte nicht gestartet werden: ~a~%"
+
+#: guix/scripts/size.scm:76
 #, scheme-format
 msgid "no available substitute information for '~a'~%"
 msgstr ""
 
-#: guix/scripts/size.scm:83
+#: guix/scripts/size.scm:84
 msgid "store item"
 msgstr ""
 
-#: guix/scripts/size.scm:83
+#: guix/scripts/size.scm:84
 msgid "total"
 msgstr ""
 
-#: guix/scripts/size.scm:83
+#: guix/scripts/size.scm:84
 msgid "self"
 msgstr ""
 
+#: guix/scripts/size.scm:95
+#, scheme-format
+msgid "total: ~,1f MiB~%"
+msgstr ""
+
 #. TRANSLATORS: This is the title of a graph, meaning that the graph
 #. represents a profile of the store (the "store" being the place where
 #. packages are stored.)
-#: guix/scripts/size.scm:204
+#: guix/scripts/size.scm:206
 msgid "store profile"
 msgstr ""
 
-#: guix/scripts/size.scm:213
+#: guix/scripts/size.scm:215
 msgid ""
 "Usage: guix size [OPTION]... PACKAGE\n"
 "Report the size of PACKAGE and its dependencies.\n"
@@ -1508,13 +1811,13 @@ msgstr ""
 "Aufruf: guix size [OPTION] … PAKET …\n"
 "Größe des PAKETs und seiner Abhängigkeiten ermitteln.\n"
 
-#: guix/scripts/size.scm:218
+#: guix/scripts/size.scm:220
 msgid ""
 "\n"
 "  -s, --system=SYSTEM    consider packages for SYSTEM--e.g., \"i686-linux\""
 msgstr ""
 
-#: guix/scripts/size.scm:220
+#: guix/scripts/size.scm:222
 msgid ""
 "\n"
 "  -m, --map-file=FILE    write to FILE a graphical map of disk usage"
@@ -1523,63 +1826,78 @@ msgstr ""
 "  -m, --map-file=DATEI   eine grafische Darstellung des Plattenplatzverbrauchs\n"
 "                         in DATEI schreiben"
 
-#: guix/scripts/size.scm:274
+#: guix/scripts/size.scm:276
 msgid "missing store item argument\n"
 msgstr ""
 
-#: guix/scripts/size.scm:292
-msgid "too many arguments\n"
-msgstr "Zu wenige Argumente\n"
+#: guix/scripts/graph.scm:82
+#, scheme-format
+msgid "~a: invalid argument (package name expected)"
+msgstr "~a: Unzulässiges Argument (Paketname wurde erwartet)"
 
-#: guix/scripts/graph.scm:105
+#: guix/scripts/graph.scm:93
 msgid "the DAG of packages, excluding implicit inputs"
 msgstr ""
 
-#: guix/scripts/graph.scm:155
+#: guix/scripts/graph.scm:150
 msgid "the DAG of packages, including implicit inputs"
 msgstr ""
 
-#: guix/scripts/graph.scm:179
+#: guix/scripts/graph.scm:160
+msgid "the DAG of packages and origins, including implicit inputs"
+msgstr ""
+
+#: guix/scripts/graph.scm:191
 msgid "same as 'bag', but without the bootstrap nodes"
 msgstr ""
 
-#: guix/scripts/graph.scm:222
+#: guix/scripts/graph.scm:237
 msgid "the DAG of derivations"
 msgstr ""
 
-#: guix/scripts/graph.scm:246
+#: guix/scripts/graph.scm:249
+#, fuzzy
+#| msgid "unsupported signature version: ~a~%"
+msgid "unsupported argument for derivation graph"
+msgstr "Signaturversion wird nicht unterstützt: ~a~%"
+
+#: guix/scripts/graph.scm:270
 #, scheme-format
 msgid "references for '~a' are not known~%"
-msgstr ""
+msgstr "Referenzen für »~a« sind unbekannt~%"
 
-#: guix/scripts/graph.scm:253
+#: guix/scripts/graph.scm:277
 msgid "the DAG of run-time dependencies (store references)"
 msgstr ""
 
-#: guix/scripts/graph.scm:282
+#: guix/scripts/graph.scm:290
+msgid "unsupported argument for reference graph"
+msgstr ""
+
+#: guix/scripts/graph.scm:315
 #, scheme-format
 msgid "~a: unknown node type~%"
 msgstr "~a: unbekannter Node-Typ~%"
 
-#: guix/scripts/graph.scm:286
+#: guix/scripts/graph.scm:319
 msgid "The available node types are:\n"
 msgstr "Die gültigen Node-Typen sind:\n"
 
 #. TRANSLATORS: Here 'dot' is the name of a program; it must not be
 #. translated.
-#: guix/scripts/graph.scm:389
+#: guix/scripts/graph.scm:355
 msgid ""
 "Usage: guix graph PACKAGE...\n"
 "Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"
 msgstr ""
 
-#: guix/scripts/graph.scm:391
+#: guix/scripts/graph.scm:357
 msgid ""
 "\n"
 "  -t, --type=TYPE        represent nodes of the given TYPE"
 msgstr ""
 
-#: guix/scripts/graph.scm:393
+#: guix/scripts/graph.scm:359
 msgid ""
 "\n"
 "      --list-types       list the available graph types"
@@ -1587,140 +1905,203 @@ msgstr ""
 "\n"
 "      --list-types       verfügbare Diagrammtypen auflisten"
 
-#: guix/scripts/graph.scm:395
+#: guix/scripts/graph.scm:361
 msgid ""
 "\n"
 "  -e, --expression=EXPR  consider the package EXPR evaluates to"
 msgstr ""
 
-#: guix/scripts/challenge.scm:104
+#: guix/scripts/challenge.scm:105
 #, scheme-format
 msgid "~a: no substitute at '~a'~%"
 msgstr ""
 
-#: guix/scripts/challenge.scm:120
+#: guix/scripts/challenge.scm:121
 #, scheme-format
 msgid "no substitutes for '~a'~%"
 msgstr ""
 
-#: guix/scripts/challenge.scm:137 guix/scripts/challenge.scm:157
+#: guix/scripts/challenge.scm:138 guix/scripts/challenge.scm:158
 #, scheme-format
 msgid "no local build for '~a'~%"
 msgstr ""
 
-#: guix/scripts/challenge.scm:154
+#: guix/scripts/challenge.scm:155
 #, scheme-format
 msgid "~a contents differ:~%"
 msgstr ""
 
-#: guix/scripts/challenge.scm:156
+#: guix/scripts/challenge.scm:157
 #, scheme-format
 msgid "  local hash: ~a~%"
 msgstr "  lokale Prüfsumme: ~a~%"
 
-#: guix/scripts/challenge.scm:161
+#: guix/scripts/challenge.scm:162
 #, scheme-format
 msgid "  ~50a: ~a~%"
 msgstr "  ~50a: ~a~%"
 
-#: guix/scripts/challenge.scm:165
+#: guix/scripts/challenge.scm:166
 #, scheme-format
 msgid "  ~50a: unavailable~%"
 msgstr "  ~50a: nicht verfügbar~%"
 
-#: guix/scripts/challenge.scm:175
+#: guix/scripts/challenge.scm:176
 msgid ""
 "Usage: guix challenge [PACKAGE...]\n"
 "Challenge the substitutes for PACKAGE... provided by one or more servers.\n"
 msgstr ""
 
-#: guix/scripts/challenge.scm:177
+#: guix/scripts/challenge.scm:178
 msgid ""
 "\n"
 "      --substitute-urls=URLS\n"
 "                         compare build results with those at URLS"
 msgstr ""
 
-#: guix/gnu-maintenance.scm:418
+#: guix/gnu-maintenance.scm:532
 msgid "Updater for GNU packages"
 msgstr "Aktualisierungswerkzeug für GNU-Pakete"
 
-#: guix/upstream.scm:156
+#: guix/gnu-maintenance.scm:539
+msgid "Updater for GNOME packages"
+msgstr "Aktualisierungswerkzeug für GNOME-Pakete"
+
+#: guix/gnu-maintenance.scm:546
+msgid "Updater for X.org packages"
+msgstr "Aktualisierungswerkzeug für X.org-Pakete"
+
+#: guix/scripts/container.scm:25
+msgid ""
+"Usage: guix container ACTION ARGS...\n"
+"Build and manipulate Linux containers.\n"
+msgstr ""
+
+#: guix/scripts/container.scm:30
+msgid "   exec            execute a command inside of an existing container\n"
+msgstr "   exec            führt einen Befehl innerhalb eines vorhandenen Containers aus\n"
+
+#: guix/scripts/container.scm:53
+#, scheme-format
+msgid "guix container: missing action~%"
+msgstr "guix container: Aktion fehlt~%"
+
+#: guix/scripts/container.scm:63
+#, scheme-format
+msgid "guix container: invalid action~%"
+msgstr "guix container: Unzulässige Aktion~%"
+
+#: guix/scripts/container/exec.scm:40
+msgid ""
+"Usage: guix container exec PID COMMAND [ARGS...]\n"
+"Execute COMMMAND within the container process PID.\n"
+msgstr ""
+
+#: guix/scripts/container/exec.scm:69
+#, scheme-format
+msgid "~a: extraneous argument~%"
+msgstr "~a: zusätzliches Argument~%"
+
+#: guix/scripts/container/exec.scm:80
+#, scheme-format
+msgid "no pid specified~%"
+msgstr "Keine Prozess-ID angegeben~%"
+
+#: guix/scripts/container/exec.scm:83
+#, scheme-format
+msgid "no command specified~%"
+msgstr "Kein Befehl angegeben~%"
+
+#: guix/scripts/container/exec.scm:86
+#, scheme-format
+msgid "no such process ~d~%"
+msgstr "Kein solcher Prozess ~d~%"
+
+#: guix/scripts/container/exec.scm:94
+#, scheme-format
+msgid "exec failed with status ~d~%"
+msgstr ""
+
+#: guix/upstream.scm:157
 #, scheme-format
 msgid "signature verification failed for `~a'~%"
 msgstr "Verifizierung der Signatur fehlgeschlagen für »~a«~%"
 
-#: guix/upstream.scm:158
+#: guix/upstream.scm:159
 #, scheme-format
 msgid "(could be because the public key is not in your keyring)~%"
 msgstr "(vielleicht befindet sich Ihr öffentlicher Schlüssel nicht im Schlüsselbund)~%"
 
-#: guix/upstream.scm:190
+#: guix/upstream.scm:191
 msgid "gz"
 msgstr "gz"
 
-#: guix/upstream.scm:253
+#: guix/upstream.scm:234
 #, scheme-format
 msgid "~a: could not locate source file"
 msgstr "~a: Quelldatei konnte nicht gefunden werden"
 
-#: guix/upstream.scm:258
+#: guix/upstream.scm:239
 #, scheme-format
 msgid "~a: ~a: no `version' field in source; skipping~%"
 msgstr "~a: ~a: kein »version«-Feld in der Quelle; wird übersprungen~%"
 
-#: guix/ui.scm:234
+#: guix/ui.scm:238
 msgid "entering debugger; type ',bt' for a backtrace\n"
 msgstr ""
 
-#: guix/ui.scm:250 guix/ui.scm:267
+#: guix/ui.scm:254 guix/ui.scm:271
 #, scheme-format
 msgid "failed to load '~a': ~a~%"
 msgstr "»~a« konnte nicht geladen werden: ~a~%"
 
-#: guix/ui.scm:253
+#: guix/ui.scm:257
 #, scheme-format
 msgid "~a: error: ~a~%"
 msgstr "~a: Fehler: ~a~%"
 
-#: guix/ui.scm:256 guix/ui.scm:510
+#: guix/ui.scm:260 guix/ui.scm:529
 #, scheme-format
 msgid "exception thrown: ~s~%"
 msgstr ""
 
-#: guix/ui.scm:258 guix/ui.scm:276
+#: guix/ui.scm:262 guix/ui.scm:280
 #, scheme-format
 msgid "failed to load '~a':~%"
 msgstr "»~a« konnte nicht geladen werden:~%"
 
-#: guix/ui.scm:270
+#: guix/ui.scm:274
 #, scheme-format
 msgid "~a: warning: ~a~%"
 msgstr "~a: Warnung: ~a~%"
 
-#: guix/ui.scm:273
+#: guix/ui.scm:277
 #, scheme-format
 msgid "failed to load '~a': exception thrown: ~s~%"
 msgstr ""
 
-#: guix/ui.scm:285
+#: guix/ui.scm:289
 #, scheme-format
 msgid "failed to install locale: ~a~%"
 msgstr "Locale konnte nicht installiert werden: ~a~%"
 
-#: guix/ui.scm:304
+#: guix/ui.scm:308
 msgid ""
-"Copyright (C) 2015 the Guix authors\n"
+"Copyright (C) 2016 the Guix authors\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
 "This is free software: you are free to change and redistribute it.\n"
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
-"Copyright (C) 2015 Die Guix-Autoren\n"
+"Copyright (C) 2016 Die Guix-Autoren\n"
 "Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl.html>\n"
 "Dies ist freie Software: Sie können Sie ändern und weitergeben.\n"
 "Es gibt keine Garantie, soweit gesetzlich zulässig.\n"
 
-#: guix/ui.scm:312
+#. TRANSLATORS: The placeholder indicates the bug-reporting address for this
+#. package.  Please add another line saying "Report translation bugs to
+#. ...\n" with the address for translation bugs (typically your translation
+#. team's web or email address).
+#: guix/ui.scm:320
 #, scheme-format
 msgid ""
 "\n"
@@ -1729,7 +2110,7 @@ msgstr ""
 "\n"
 "Melden Sie Fehler an: ~a."
 
-#: guix/ui.scm:314
+#: guix/ui.scm:322
 #, scheme-format
 msgid ""
 "\n"
@@ -1738,7 +2119,7 @@ msgstr ""
 "\n"
 "~a Homepage: <~a>"
 
-#: guix/ui.scm:316
+#: guix/ui.scm:324
 msgid ""
 "\n"
 "General help using GNU software: <http://www.gnu.org/gethelp/>"
@@ -1746,219 +2127,227 @@ msgstr ""
 "\n"
 "Allgemeine Hilfe zu GNU-Software: <http://www.gnu.org/gethelp/>"
 
-#: guix/ui.scm:361
+#: guix/ui.scm:369
 #, scheme-format
 msgid "'~a' is not a valid regular expression: ~a~%"
 msgstr "»~a« ist kein gültiger regulärer Ausdruck: ~a~%"
 
-#: guix/ui.scm:367
+#: guix/ui.scm:375
 #, scheme-format
 msgid "~a: invalid number~%"
 msgstr "~a: ungültige Zahl~%"
 
-#: guix/ui.scm:384
+#: guix/ui.scm:392
 #, scheme-format
 msgid "invalid number: ~a~%"
 msgstr "Ungültige Zahl: ~a~%"
 
-#: guix/ui.scm:407
+#: guix/ui.scm:415
 #, scheme-format
 msgid "unknown unit: ~a~%"
 msgstr "Unbekannte Einheit: ~a~%"
 
-#: guix/ui.scm:418
+#: guix/ui.scm:432
 #, scheme-format
 msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%"
 msgstr ""
 
-#: guix/ui.scm:425
+#: guix/ui.scm:439
 #, scheme-format
 msgid "~a: ~a: build system `~a' does not support cross builds~%"
 msgstr ""
 
-#: guix/ui.scm:430
+#: guix/ui.scm:444
 #, scheme-format
 msgid "profile '~a' does not exist~%"
 msgstr "Profil »~a« existiert nicht~%"
 
-#: guix/ui.scm:433
+#: guix/ui.scm:447
 #, scheme-format
 msgid "generation ~a of profile '~a' does not exist~%"
 msgstr "Generation ~a des Profils »~a« existiert nicht~%"
 
-#: guix/ui.scm:440
+#: guix/ui.scm:454
 #, scheme-format
 msgid "corrupt input while restoring '~a' from ~s~%"
 msgstr "Beschädigte Eingabe, während »~a« aus »~s« wiederhergestellt wurde~%"
 
-#: guix/ui.scm:442
+#: guix/ui.scm:456
 #, scheme-format
 msgid "corrupt input while restoring archive from ~s~%"
 msgstr "Beschädigte Eingabe, während das Archiv aus »~s« wiederhergestellt wurde~%"
 
-#: guix/ui.scm:445
+#: guix/ui.scm:459
 #, scheme-format
 msgid "failed to connect to `~a': ~a~%"
 msgstr "Verbindung zu »~a« fehlgeschlagen: ~a~%"
 
-#: guix/ui.scm:450
+#: guix/ui.scm:464
 #, scheme-format
 msgid "build failed: ~a~%"
 msgstr "Erstellung fehlgeschlagen: ~a~%"
 
-#: guix/ui.scm:453
+#: guix/ui.scm:467
 #, scheme-format
 msgid "reference to invalid output '~a' of derivation '~a'~%"
 msgstr ""
 
-#: guix/ui.scm:464
+#: guix/ui.scm:471
+#, scheme-format
+msgid "file '~a' could not be found in these directories:~{ ~a~}~%"
+msgstr "Datei »~a« konnte in diesen Verzeichnissen nicht gefunden werden:~{ ~a~}~%"
+
+#: guix/ui.scm:483
 #, scheme-format
 msgid "~a: ~a~%"
 msgstr "~a: ~a~%"
 
-#: guix/ui.scm:499
+#: guix/ui.scm:518
 #, scheme-format
 msgid "failed to read expression ~s: ~s~%"
 msgstr "Ausdruck ~s konnte nicht gelesen werden: ~s~%"
 
-#: guix/ui.scm:505
+#: guix/ui.scm:524
 #, scheme-format
 msgid "failed to evaluate expression '~a':~%"
 msgstr "Ausdruck »~a« kann nicht ausgewertet werden:~%"
 
-#: guix/ui.scm:508
+#: guix/ui.scm:527
 #, scheme-format
 msgid "syntax error: ~a~%"
 msgstr "Syntaxfehler: ~a~%"
 
-#: guix/ui.scm:522
+#: guix/ui.scm:541
 #, scheme-format
 msgid "expression ~s does not evaluate to a package~%"
 msgstr "Ausdruck ~s ergibt kein Paket~%"
 
-#: guix/ui.scm:582
+#: guix/ui.scm:603
 #, scheme-format
 msgid "~:[The following derivation would be built:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following derivations would be built:~%~{   ~a~%~}~;~]"
 msgstr[0] ""
 msgstr[1] ""
 
-#: guix/ui.scm:587
+#: guix/ui.scm:608
 #, scheme-format
 msgid "~:[The following file would be downloaded:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following files would be downloaded:~%~{   ~a~%~}~;~]"
 msgstr[0] ""
 msgstr[1] ""
 
-#: guix/ui.scm:593
+#: guix/ui.scm:614
 #, scheme-format
 msgid "~:[The following derivation will be built:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following derivations will be built:~%~{   ~a~%~}~;~]"
 msgstr[0] ""
 msgstr[1] ""
 
-#: guix/ui.scm:598
+#: guix/ui.scm:619
 #, scheme-format
 msgid "~:[The following file will be downloaded:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following files will be downloaded:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[Die folgende Datei wird heruntergeladen:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[Die folgenden Dateien werden heruntergeladen:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:653
+#: guix/ui.scm:674
 #, scheme-format
 msgid "The following package would be removed:~%~{~a~%~}~%"
 msgid_plural "The following packages would be removed:~%~{~a~%~}~%"
 msgstr[0] "Das folgende Paket würde entfernt werden:~%~{~a~%~}~%"
 msgstr[1] "Die folgenden Pakete würden entfernt werden:~%~{~a~%~}~%"
 
-#: guix/ui.scm:658
+#: guix/ui.scm:679
 #, scheme-format
 msgid "The following package will be removed:~%~{~a~%~}~%"
 msgid_plural "The following packages will be removed:~%~{~a~%~}~%"
 msgstr[0] "Das folgende Paket würde entfernt werden:~%~{~a~%~}~%"
 msgstr[1] "Die folgenden Pakete würden entfernt werden:~%~{~a~%~}~%"
 
-#: guix/ui.scm:671
+#: guix/ui.scm:692
 #, scheme-format
 msgid "The following package would be downgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages would be downgraded:~%~{~a~%~}~%"
 msgstr[0] "Die Version des folgenden Pakets würde heruntergestuft werden:~%~{~a~%~}~%"
 msgstr[1] "Die Version der folgenden Pakete würde heruntergestuft werden:~%~{~a~%~}~%"
 
-#: guix/ui.scm:676
+#: guix/ui.scm:697
 #, scheme-format
 msgid "The following package will be downgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages will be downgraded:~%~{~a~%~}~%"
 msgstr[0] "Die Version des folgenden Pakets wird heruntergestuft:~%~{~a~%~}~%"
 msgstr[1] "Die Version der folgenden Pakete wird heruntergestuft:~%~{~a~%~}~%"
 
-#: guix/ui.scm:689
+#: guix/ui.scm:710
 #, scheme-format
 msgid "The following package would be upgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages would be upgraded:~%~{~a~%~}~%"
 msgstr[0] "Das folgende Paket würde aktualisiert werden:~%~{~a~%~}~%"
 msgstr[1] "Die folgenden Pakete würden aktualisiert werden:~%~{~a~%~}~%"
 
-#: guix/ui.scm:694
+#: guix/ui.scm:715
 #, scheme-format
 msgid "The following package will be upgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages will be upgraded:~%~{~a~%~}~%"
 msgstr[0] "Das folgende Paket wird aktualisiert:~%~{~a~%~}~%"
 msgstr[1] "Die folgenden Pakete werden aktualisiert:~%~{~a~%~}~%"
 
-#: guix/ui.scm:705
+#: guix/ui.scm:726
 #, scheme-format
 msgid "The following package would be installed:~%~{~a~%~}~%"
 msgid_plural "The following packages would be installed:~%~{~a~%~}~%"
 msgstr[0] "Das folgende Paket würde installiert werden:~%~{~a~%~}~%"
 msgstr[1] "Die folgenden Pakete würden installiert werden:~%~{~a~%~}~%"
 
-#: guix/ui.scm:710
+#: guix/ui.scm:731
 #, scheme-format
 msgid "The following package will be installed:~%~{~a~%~}~%"
 msgid_plural "The following packages will be installed:~%~{~a~%~}~%"
 msgstr[0] "Das folgende Paket wird installiert:~%~{~a~%~}~%"
 msgstr[1] "Die folgenden Pakete werden installiert:~%~{~a~%~}~%"
 
-#: guix/ui.scm:727
+#: guix/ui.scm:748
 msgid "<unknown location>"
 msgstr "<unbekannter Ort>"
 
-#: guix/ui.scm:746
+#: guix/ui.scm:767
 #, scheme-format
 msgid "failed to create configuration directory `~a': ~a~%"
 msgstr "Konfigurationsverzeichnis »~a« konnte nicht angelegt werden: ~a~%"
 
-#: guix/ui.scm:865 guix/ui.scm:879
+#: guix/ui.scm:890 guix/ui.scm:904
 msgid "unknown"
 msgstr "unbekannt"
 
-#: guix/ui.scm:1029
+#: guix/ui.scm:1062
 #, scheme-format
 msgid "Generation ~a\t~a"
 msgstr "Generation ~a\t~a"
 
-#: guix/ui.scm:1036
+#. TRANSLATORS: The word "current" here is an adjective for
+#. "Generation", as in "current generation".  Use the appropriate
+#. gender where applicable.
+#: guix/ui.scm:1072
 #, scheme-format
 msgid "~a\t(current)~%"
 msgstr "~a\t(aktuell)~%"
 
-#: guix/ui.scm:1053
+#: guix/ui.scm:1089
 #, scheme-format
 msgid "switched from generation ~a to ~a~%"
 msgstr "Von Generation »~a« zu »~a« gewechselt~%"
 
-#: guix/ui.scm:1069
+#: guix/ui.scm:1105
 #, scheme-format
 msgid "deleting ~a~%"
 msgstr "~a wird gelöscht~%"
 
-#: guix/ui.scm:1117
+#: guix/ui.scm:1153
 #, scheme-format
 msgid "Try `guix --help' for more information.~%"
 msgstr "Rufen Sie »guix --help« auf, um weitere Informationen zu erhalten.~%"
 
-#: guix/ui.scm:1144
+#: guix/ui.scm:1180
 msgid ""
 "Usage: guix COMMAND ARGS...\n"
 "Run COMMAND with ARGS.\n"
@@ -1966,31 +2355,31 @@ msgstr ""
 "Aufruf: guix BEFEHL ARGUMENTE …\n"
 "BEFEHL mit ARGUMENTEN ausführen.\n"
 
-#: guix/ui.scm:1147
+#: guix/ui.scm:1183
 msgid "COMMAND must be one of the sub-commands listed below:\n"
 msgstr "BEFEHL muss einer der unten aufgelisteten Unterbefehle sein:\n"
 
-#: guix/ui.scm:1167
+#: guix/ui.scm:1203
 #, scheme-format
 msgid "guix: ~a: command not found~%"
 msgstr "guix: ~a: Befehl nicht gefunden~%"
 
-#: guix/ui.scm:1184
+#: guix/ui.scm:1220
 #, scheme-format
 msgid "guix: missing command name~%"
 msgstr "guix: Befehlsname fehlt~%"
 
-#: guix/ui.scm:1192
+#: guix/ui.scm:1228
 #, scheme-format
 msgid "guix: unrecognized option '~a'~%"
 msgstr "guix: nicht erkannte Option »~a«~%"
 
-#: guix/http-client.scm:228
+#: guix/http-client.scm:266
 #, scheme-format
 msgid "following redirection to `~a'...~%"
 msgstr "Weiterleitung zu »~a« wird gefolgt …~%"
 
-#: guix/http-client.scm:237
+#: guix/http-client.scm:275
 msgid "download failed"
 msgstr "Herunterladen fehlgeschlagen"
 
@@ -2044,113 +2433,131 @@ msgstr ""
 msgid "This program is a daemon meant to run in the background.  It serves requests sent over a Unix-domain socket.  It accesses the store, and builds derivations on behalf of its clients."
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:86
+#: nix/nix-daemon/guix-daemon.cc:87
 msgid "SYSTEM"
 msgstr "SYSTEM"
 
-#: nix/nix-daemon/guix-daemon.cc:87
+#: nix/nix-daemon/guix-daemon.cc:88
 msgid "assume SYSTEM as the current system type"
 msgstr "SYSTEM als aktuellen Systemtyp annehmen"
 
-#: nix/nix-daemon/guix-daemon.cc:88 nix/nix-daemon/guix-daemon.cc:91
+#: nix/nix-daemon/guix-daemon.cc:89 nix/nix-daemon/guix-daemon.cc:92
 msgid "N"
 msgstr "N"
 
-#: nix/nix-daemon/guix-daemon.cc:89
+#: nix/nix-daemon/guix-daemon.cc:90
 msgid "use N CPU cores to build each derivation; 0 means as many as available"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:92
+#: nix/nix-daemon/guix-daemon.cc:93
 msgid "allow at most N build jobs"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:94
+#: nix/nix-daemon/guix-daemon.cc:95
 msgid "disable chroot builds"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:95
+#: nix/nix-daemon/guix-daemon.cc:96
 msgid "DIR"
 msgstr "VERZ"
 
-#: nix/nix-daemon/guix-daemon.cc:96
+#: nix/nix-daemon/guix-daemon.cc:97
 msgid "add DIR to the build chroot"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:97
+#: nix/nix-daemon/guix-daemon.cc:98
 msgid "GROUP"
 msgstr "GRUPPE"
 
-#: nix/nix-daemon/guix-daemon.cc:98
+#: nix/nix-daemon/guix-daemon.cc:99
 msgid "perform builds as a user of GROUP"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:100
+#: nix/nix-daemon/guix-daemon.cc:101
 msgid "do not use substitutes"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:101
+#: nix/nix-daemon/guix-daemon.cc:102
 msgid "URLS"
 msgstr "URLS"
 
-#: nix/nix-daemon/guix-daemon.cc:102
+#: nix/nix-daemon/guix-daemon.cc:103
 msgid "use URLS as the default list of substitute providers"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:104
+#: nix/nix-daemon/guix-daemon.cc:105
 msgid "do not use the 'build hook'"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:106
+#: nix/nix-daemon/guix-daemon.cc:107
 msgid "cache build failures"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:108
+#: nix/nix-daemon/guix-daemon.cc:109
+msgid "build each derivation N times in a row"
+msgstr ""
+
+#: nix/nix-daemon/guix-daemon.cc:111
 msgid "do not keep build logs"
 msgstr "Erstellungsprotokolle nicht behalten"
 
-#: nix/nix-daemon/guix-daemon.cc:110
+#: nix/nix-daemon/guix-daemon.cc:113
 msgid "disable compression of the build logs"
-msgstr ""
+msgstr "Erstellungsprotokolle nicht komprimieren"
 
-#: nix/nix-daemon/guix-daemon.cc:115
+#: nix/nix-daemon/guix-daemon.cc:118
 msgid "disable automatic file \"deduplication\" in the store"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:125
+#: nix/nix-daemon/guix-daemon.cc:128
 msgid "impersonate Linux 2.6"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:129
+#: nix/nix-daemon/guix-daemon.cc:132
 msgid "tell whether the GC must keep outputs of live derivations"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:132
+#: nix/nix-daemon/guix-daemon.cc:135
 msgid "tell whether the GC must keep derivations corresponding to live outputs"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:135
+#: nix/nix-daemon/guix-daemon.cc:138
 msgid "SOCKET"
 msgstr "SOCKET"
 
-#: nix/nix-daemon/guix-daemon.cc:136
+#: nix/nix-daemon/guix-daemon.cc:139
 msgid "listen for connections on SOCKET"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:138
+#: nix/nix-daemon/guix-daemon.cc:141
 msgid "produce debugging output"
 msgstr ""
 
-#: nix/nix-daemon/guix-daemon.cc:205 nix/nix-daemon/guix-daemon.cc:381
+#: nix/nix-daemon/guix-daemon.cc:201
+#, c-format
+msgid "error: %s: invalid number of rounds\n"
+msgstr ""
+
+#: nix/nix-daemon/guix-daemon.cc:220 nix/nix-daemon/guix-daemon.cc:396
 #, c-format
 msgid "error: %s\n"
 msgstr "Fehler: %s\n"
 
-#: nix/nix-daemon/guix-daemon.cc:266
+#: nix/nix-daemon/guix-daemon.cc:281
 #, c-format
 msgid "error: libgcrypt version mismatch\n"
 msgstr "Fehler: libgcrypt-Version passt nicht\n"
 
-#: nix/nix-daemon/guix-daemon.cc:357
+#: nix/nix-daemon/guix-daemon.cc:372
 #, c-format
 msgid "warning: daemon is running as root, so using `--build-users-group' is highly recommended\n"
 msgstr ""
+
+#~ msgid "looking for the latest release of GNU ~a..."
+#~ msgstr "Nach der letzten Veröffentlichung von GNU ~a wird gesucht …"
+
+#~ msgid "~a: package not found~%"
+#~ msgstr "~a: Paket nicht gefunden~%"
+
+#~ msgid "too many arguments\n"
+#~ msgstr "Zu wenige Argumente\n"
diff --git a/tests/utils.scm b/tests/utils.scm
index 6590ed91cf..bcfaa14faa 100644
--- a/tests/utils.scm
+++ b/tests/utils.scm
@@ -111,6 +111,38 @@
         (ensure-keyword-arguments '(#:foo 2) '(#:bar 3))
         (ensure-keyword-arguments '(#:foo 2) '(#:bar 3 #:foo 42))))
 
+(test-equal "default-keyword-arguments"
+  '((#:foo 2)
+    (#:foo 2)
+    (#:foo 2 #:bar 3)
+    (#:foo 2 #:bar 3)
+    (#:foo 2 #:bar 3))
+  (list (default-keyword-arguments '() '(#:foo 2))
+        (default-keyword-arguments '(#:foo 2) '(#:foo 4))
+        (default-keyword-arguments '() '(#:bar 3 #:foo 2))
+        (default-keyword-arguments '(#:bar 3) '(#:foo 2))
+        (default-keyword-arguments '(#:foo 2 #:bar 3) '(#:bar 6))))
+
+(test-equal "substitute-keyword-arguments"
+  '((#:foo 3)
+    (#:foo 3)
+    (#:foo 3 #:bar (1 2))
+    (#:bar (1 2) #:foo 3)
+    (#:foo 3))
+  (list (substitute-keyword-arguments '(#:foo 2)
+          ((#:foo f) (1+ f)))
+        (substitute-keyword-arguments '()
+          ((#:foo f 2) (1+ f)))
+        (substitute-keyword-arguments '(#:foo 2 #:bar (2))
+          ((#:foo f) (1+ f))
+          ((#:bar b) (cons 1 b)))
+        (substitute-keyword-arguments '(#:foo 2)
+          ((#:foo _) 3)
+          ((#:bar b '(2)) (cons 1 b)))
+        (substitute-keyword-arguments '(#:foo 2)
+          ((#:foo f 1) (1+ f))
+          ((#:bar b) (cons 42 b)))))
+
 (test-assert "filtered-port, file"
   (let* ((file  (search-path %load-path "guix.scm"))
          (input (open-file file "r0b")))