summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-09-30 12:01:32 +0200
committerLudovic Courtès <ludo@gnu.org>2016-09-30 12:05:27 +0200
commit79355ae3e84359716f5135cc7083e72246bc8bf9 (patch)
tree6b61851e2153581578bb78ef0f177b8841ee5db7
parent39d6b9c99f297e14fc4f47f002be3d40556726be (diff)
parent86d8f6d3efb8300a3354735cbf06be6c01e23243 (diff)
downloadguix-79355ae3e84359716f5135cc7083e72246bc8bf9.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--Makefile.am11
-rw-r--r--configure.ac21
-rw-r--r--doc/emacs.texi6
-rw-r--r--doc/guix.texi378
-rw-r--r--etc/completion/bash/guix41
-rw-r--r--etc/completion/zsh/_guix456
-rw-r--r--gnu/build/activation.scm3
-rw-r--r--gnu/build/file-systems.scm34
-rw-r--r--gnu/local.mk35
-rw-r--r--gnu/packages.scm11
-rw-r--r--gnu/packages/admin.scm103
-rw-r--r--gnu/packages/adns.scm8
-rw-r--r--gnu/packages/algebra.scm30
-rw-r--r--gnu/packages/animation.scm5
-rw-r--r--gnu/packages/astronomy.scm9
-rw-r--r--gnu/packages/audio.scm123
-rw-r--r--gnu/packages/autotools.scm4
-rw-r--r--gnu/packages/backup.scm132
-rw-r--r--gnu/packages/bioinformatics.scm846
-rw-r--r--gnu/packages/bittorrent.scm4
-rw-r--r--gnu/packages/boost.scm8
-rw-r--r--gnu/packages/c.scm3
-rw-r--r--gnu/packages/calendar.scm55
-rw-r--r--gnu/packages/ccache.scm22
-rw-r--r--gnu/packages/cdrom.scm8
-rw-r--r--gnu/packages/certs.scm4
-rw-r--r--gnu/packages/ci.scm17
-rw-r--r--gnu/packages/compression.scm112
-rw-r--r--gnu/packages/crypto.scm209
-rw-r--r--gnu/packages/curl.scm4
-rw-r--r--gnu/packages/databases.scm72
-rw-r--r--gnu/packages/debug.scm20
-rw-r--r--gnu/packages/dictionaries.scm64
-rw-r--r--gnu/packages/disk.scm4
-rw-r--r--gnu/packages/display-managers.scm164
-rw-r--r--gnu/packages/django.scm195
-rw-r--r--gnu/packages/dns.scm80
-rw-r--r--gnu/packages/emacs.scm149
-rw-r--r--gnu/packages/enlightenment.scm149
-rw-r--r--gnu/packages/finance.scm6
-rw-r--r--gnu/packages/flashing-tools.scm11
-rw-r--r--gnu/packages/fonts.scm4
-rw-r--r--gnu/packages/freedesktop.scm75
-rw-r--r--gnu/packages/game-development.scm4
-rw-r--r--gnu/packages/games.scm124
-rw-r--r--gnu/packages/gd.scm1
-rw-r--r--gnu/packages/gforth.scm60
-rw-r--r--gnu/packages/gl.scm31
-rw-r--r--gnu/packages/glib.scm44
-rw-r--r--gnu/packages/gnome.scm98
-rw-r--r--gnu/packages/gnunet.scm51
-rw-r--r--gnu/packages/gnupg.scm1
-rw-r--r--gnu/packages/gnuzilla.scm4
-rw-r--r--gnu/packages/gobby.scm131
-rw-r--r--gnu/packages/golang.scm18
-rw-r--r--gnu/packages/graphics.scm31
-rw-r--r--gnu/packages/grub.scm8
-rw-r--r--gnu/packages/gstreamer.scm34
-rw-r--r--gnu/packages/gtk.scm71
-rw-r--r--gnu/packages/guile-wm.scm85
-rw-r--r--gnu/packages/guile.scm202
-rw-r--r--gnu/packages/haskell.scm1028
-rw-r--r--gnu/packages/image.scm176
-rw-r--r--gnu/packages/imagemagick.scm11
-rw-r--r--gnu/packages/irc.scm8
-rw-r--r--gnu/packages/java.scm27
-rw-r--r--gnu/packages/ldc.scm16
-rw-r--r--gnu/packages/libftdi.scm4
-rw-r--r--gnu/packages/libupnp.scm4
-rw-r--r--gnu/packages/lighting.scm75
-rw-r--r--gnu/packages/links.scm40
-rw-r--r--gnu/packages/linux.scm446
-rw-r--r--gnu/packages/lisp.scm65
-rw-r--r--gnu/packages/llvm.scm28
-rw-r--r--gnu/packages/lua.scm86
-rw-r--r--gnu/packages/machine-learning.scm39
-rw-r--r--gnu/packages/mail.scm195
-rw-r--r--gnu/packages/man.scm31
-rw-r--r--gnu/packages/markdown.scm31
-rw-r--r--gnu/packages/maths.scm61
-rw-r--r--gnu/packages/messaging.scm300
-rw-r--r--gnu/packages/microcom.scm57
-rw-r--r--gnu/packages/mpd.scm54
-rw-r--r--gnu/packages/music.scm218
-rw-r--r--gnu/packages/nano.scm5
-rw-r--r--gnu/packages/ncurses.scm48
-rw-r--r--gnu/packages/networking.scm119
-rw-r--r--gnu/packages/nfs.scm118
-rw-r--r--gnu/packages/nickle.scm54
-rw-r--r--gnu/packages/ocaml.scm2
-rw-r--r--gnu/packages/onc-rpc.scm2
-rw-r--r--gnu/packages/openstack.scm49
-rw-r--r--gnu/packages/orpheus.scm75
-rw-r--r--gnu/packages/package-management.scm4
-rw-r--r--gnu/packages/parallel.scm4
-rw-r--r--gnu/packages/password-utils.scm35
-rw-r--r--gnu/packages/patches/azr3.patch151
-rw-r--r--gnu/packages/patches/dtc-add-missing-symbols-to-lds.patch59
-rw-r--r--gnu/packages/patches/flashrom-use-libftdi1.patch70
-rw-r--r--gnu/packages/patches/gnupg-fix-expired-test.patch78
-rw-r--r--gnu/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch15
-rw-r--r--gnu/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch15
-rw-r--r--gnu/packages/patches/hydra-automake-1.15.patch63
-rw-r--r--gnu/packages/patches/jbig2dec-ignore-testtest.patch24
-rw-r--r--gnu/packages/patches/llvm-for-extempore.patch118
-rw-r--r--gnu/packages/patches/lua51-pkgconfig.patch101
-rw-r--r--gnu/packages/patches/mupdf-build-with-openjpeg-2.1.patch38
-rw-r--r--gnu/packages/patches/mysql-fix-failing-test.patch57
-rw-r--r--gnu/packages/patches/onionshare-fix-install-paths.patch39
-rw-r--r--gnu/packages/patches/openjpeg-CVE-2016-5157.patch96
-rw-r--r--gnu/packages/patches/openjpeg-CVE-2016-7163.patch71
-rw-r--r--gnu/packages/patches/openssl-1.1.0-c-rehash-in.patch19
-rw-r--r--gnu/packages/patches/p7zip-remove-unused-code.patch959
-rw-r--r--gnu/packages/patches/plink-endian-detection.patch30
-rw-r--r--gnu/packages/patches/python-django-fix-testcase.patch42
-rw-r--r--gnu/packages/patches/slock-CVE-2016-6866.patch51
-rw-r--r--gnu/packages/patches/steghide-fixes.patch71
-rw-r--r--gnu/packages/patches/swish-e-format-security.patch33
-rw-r--r--gnu/packages/patches/swish-e-search.patch43
-rw-r--r--gnu/packages/pdf.scm85
-rw-r--r--gnu/packages/perl.scm171
-rw-r--r--gnu/packages/python.scm821
-rw-r--r--gnu/packages/qemu.scm6
-rw-r--r--gnu/packages/qt.scm10
-rw-r--r--gnu/packages/regex.scm32
-rw-r--r--gnu/packages/ruby.scm3
-rw-r--r--gnu/packages/scheme.scm22
-rw-r--r--gnu/packages/screen.scm2
-rw-r--r--gnu/packages/scribus.scm4
-rw-r--r--gnu/packages/sdcc.scm69
-rw-r--r--gnu/packages/search.scm94
-rw-r--r--gnu/packages/shells.scm23
-rw-r--r--gnu/packages/shellutils.scm34
-rw-r--r--gnu/packages/ssh.scm2
-rw-r--r--gnu/packages/statistics.scm507
-rw-r--r--gnu/packages/suckless.scm8
-rw-r--r--gnu/packages/tbb.scm75
-rw-r--r--gnu/packages/telephony.scm22
-rw-r--r--gnu/packages/terminals.scm86
-rw-r--r--gnu/packages/tex.scm43
-rw-r--r--gnu/packages/texinfo.scm12
-rw-r--r--gnu/packages/tls.scm129
-rw-r--r--gnu/packages/tor.scm117
-rw-r--r--gnu/packages/tre.scm57
-rw-r--r--gnu/packages/u-boot.scm21
-rw-r--r--gnu/packages/version-control.scm48
-rw-r--r--gnu/packages/video.scm94
-rw-r--r--gnu/packages/vim.scm18
-rw-r--r--gnu/packages/web.scm252
-rw-r--r--gnu/packages/webkit.scm4
-rw-r--r--gnu/packages/wm.scm77
-rw-r--r--gnu/packages/xml.scm180
-rw-r--r--gnu/packages/xorg.scm19
-rw-r--r--gnu/packages/zip.scm11
-rw-r--r--gnu/services.scm22
-rw-r--r--gnu/services/avahi.scm2
-rw-r--r--gnu/services/base.scm279
-rw-r--r--gnu/services/databases.scm4
-rw-r--r--gnu/services/dbus.scm4
-rw-r--r--gnu/services/desktop.scm11
-rw-r--r--gnu/services/dict.scm2
-rw-r--r--gnu/services/mail.scm14
-rw-r--r--gnu/services/networking.scm27
-rw-r--r--gnu/services/nfs.scm54
-rw-r--r--gnu/services/sddm.scm318
-rw-r--r--gnu/services/spice.scm2
-rw-r--r--gnu/services/ssh.scm133
-rw-r--r--gnu/services/web.scm6
-rw-r--r--gnu/services/xorg.scm13
-rw-r--r--gnu/system.scm72
-rw-r--r--gnu/system/examples/lightweight-desktop.tmpl2
-rw-r--r--gnu/system/file-systems.scm1
-rw-r--r--gnu/system/grub.scm72
-rw-r--r--gnu/system/install.scm16
-rw-r--r--gnu/system/linux-initrd.scm25
-rw-r--r--gnu/system/mapped-devices.scm5
-rw-r--r--gnu/system/vm.scm23
-rw-r--r--gnu/tests/base.scm9
-rw-r--r--guix/build-system/python.scm2
-rw-r--r--guix/build/ant-build-system.scm2
-rw-r--r--guix/build/syscalls.scm180
-rw-r--r--guix/gexp.scm131
-rw-r--r--guix/gnupg.scm4
-rw-r--r--guix/import/gem.scm13
-rw-r--r--guix/import/pypi.scm13
-rw-r--r--guix/import/utils.scm104
-rw-r--r--guix/licenses.scm12
-rw-r--r--guix/modules.scm155
-rw-r--r--guix/packages.scm18
-rw-r--r--guix/profiles.scm111
-rw-r--r--guix/scripts/build.scm14
-rw-r--r--guix/scripts/hash.scm27
-rw-r--r--guix/scripts/import/gnu.scm6
-rw-r--r--guix/scripts/import/nix.scm4
-rw-r--r--guix/scripts/offload.scm4
-rw-r--r--guix/scripts/package.scm139
-rw-r--r--guix/scripts/refresh.scm2
-rwxr-xr-xguix/scripts/substitute.scm2
-rw-r--r--guix/scripts/system.scm9
-rw-r--r--guix/ui.scm12
-rw-r--r--tests/gexp.scm53
-rw-r--r--tests/guix-build.sh6
-rw-r--r--tests/guix-hash.sh16
-rw-r--r--tests/import-utils.scm5
-rw-r--r--tests/modules.scm45
-rw-r--r--tests/packages.scm59
-rw-r--r--tests/profiles.scm3
207 files changed, 13650 insertions, 2226 deletions
diff --git a/Makefile.am b/Makefile.am
index 165dfe9727..43a33c80ad 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -41,6 +41,7 @@ MODULES =					\
   guix/combinators.scm				\
   guix/utils.scm				\
   guix/sets.scm					\
+  guix/modules.scm				\
   guix/download.scm				\
   guix/git-download.scm				\
   guix/hg-download.scm				\
@@ -207,6 +208,12 @@ endif INSTALL_SRFI_37
 # Handy way to remove the .go files without removing all the rest.
 clean-go:
 	-$(RM) -f $(GOBJECTS)
+	@find . -name '*.go' -print | \
+	  if test -t 1; then \
+	    xargs -r echo -e "\033[31mwarning:\033[0m stray .go files:"; \
+	  else \
+	    xargs -r echo "warning: stray .go files:"; \
+	  fi
 
 
 # Test extensions; has to be unconditional.
@@ -222,6 +229,7 @@ SCM_TESTS =					\
   tests/pk-crypto.scm				\
   tests/pki.scm					\
   tests/sets.scm				\
+  tests/modules.scm				\
   tests/gnu-maintenance.scm			\
   tests/substitute.scm				\
   tests/builders.scm				\
@@ -342,6 +350,9 @@ dist_pkgdata_DATA = hydra.gnu.org.pub
 # Bash completion file.
 dist_bashcompletion_DATA = etc/completion/bash/guix
 
+# Zsh completion file.
+dist_zshcompletion_DATA = etc/completion/zsh/_guix
+
 EXTRA_DIST =						\
   HACKING						\
   ROADMAP						\
diff --git a/configure.ac b/configure.ac
index 13a9b6e19f..3b33f851e7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -41,6 +41,13 @@ AC_ARG_WITH([bash-completion-dir],
   [bashcompletiondir='${sysconfdir}/bash_completion.d'])
 AC_SUBST([bashcompletiondir])
 
+AC_ARG_WITH([zsh-completion-dir],
+  AC_HELP_STRING([--with-zsh-completion-dir=DIR],
+    [name of the Zsh completion directory]),
+  [zshcompletiondir="$withval"],
+  [zshcompletiondir='${datadir}/zsh/site-functions'])
+AC_SUBST([zshcompletiondir])
+
 dnl Better be verbose.
 AC_MSG_CHECKING([for the store directory])
 AC_MSG_RESULT([$storedir])
@@ -67,14 +74,22 @@ dnl We require pkg.m4 (from pkg-config) and guile.m4 (from Guile.)
 dnl Make sure they are available.
 m4_pattern_forbid([PKG_CHECK_MODULES])
 m4_pattern_forbid([GUILE_MODULE_AVAILABLE])
+m4_pattern_forbid([^GUILE_P$])
 
-PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.7])
-AC_PATH_PROG([GUILE], [guile])
-AC_PATH_PROG([GUILD], [guild])
+dnl Search for 'guile' and 'guild'.  Prefer 2.0 until the 2.2 upgrade is
+dnl complete.
+GUILE_PKG([2.0 2.2])
+GUILE_PROGS
 if test "x$GUILD" = "x"; then
    AC_MSG_ERROR(['guild' binary not found; please check your guile-2.x installation.])
 fi
 
+if test "x$GUILE_EFFECTIVE_VERSION" = "x2.0"; then
+  PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.7])
+else
+  AC_MSG_WARN([Guile $GUILE_EFFECTIVE_VERSION is not fully supported!])
+fi
+
 dnl guile-json is used for the PyPI package importer
 GUILE_MODULE_AVAILABLE([have_guile_json], [(json)])
 AM_CONDITIONAL([HAVE_GUILE_JSON], [test "x$have_guile_json" = "xyes"])
diff --git a/doc/emacs.texi b/doc/emacs.texi
index d124eca3cb..c7a8881ef5 100644
--- a/doc/emacs.texi
+++ b/doc/emacs.texi
@@ -225,7 +225,7 @@ guix pull}) from Emacs using:
 With @kbd{C-u}, make it verbose.
 @end table
 
-Once @command{guix pull} has succeeded, the Guix REPL is restared.  This
+Once @command{guix pull} has succeeded, the Guix REPL is restarted.  This
 allows you to keep using the Emacs interface with the updated Guix.
 
 
@@ -266,7 +266,7 @@ Describe current mode to see all available bindings.
 @end table
 
 @emph{Hint:} If you need several ``list'' or ``info'' buffers, you can
-simlpy @kbd{M-x clone-buffer} them, and each buffer will have its own
+simply @kbd{M-x clone-buffer} them, and each buffer will have its own
 history.
 
 @emph{Warning:} Name/version pairs cannot be used to identify packages
@@ -310,7 +310,7 @@ Mark the current package for upgrading.
 @item ^
 Mark all obsolete packages for upgrading.
 @item e
-Edit the definition of the curent package (go to its location).  This is
+Edit the definition of the current package (go to its location).  This is
 similar to @command{guix edit} command (@pxref{Invoking guix edit}), but
 for opening a package recipe in the current Emacs instance.
 @item x
diff --git a/doc/guix.texi b/doc/guix.texi
index 2a7fd4d041..f5bbb92c7c 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -10,7 +10,7 @@
 @include version.texi
 
 @c Identifier of the OpenPGP key used to sign tarballs and such.
-@set OPENPGP-SIGNING-KEY-ID 090B11993D9AEBB5
+@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
 
 @copying
 Copyright @copyright{} 2012, 2013, 2014, 2015, 2016 Ludovic Courtès@*
@@ -25,6 +25,7 @@ Copyright @copyright{} 2015, 2016 Ricardo Wurmus@*
 Copyright @copyright{} 2016 Ben Woodcroft@*
 Copyright @copyright{} 2016 Chris Marusich@*
 Copyright @copyright{} 2016 Efraim Flashner@*
+Copyright @copyright{} 2016 John Darrington@*
 Copyright @copyright{} 2016 ng0
 
 Permission is granted to copy, distribute and/or modify this document
@@ -218,7 +219,7 @@ Services
 * Database Services::           SQL databases.
 * Mail Services::               IMAP, POP3, SMTP, and all that.
 * Web Services::                Web servers.
-* Various Services::            Other services.
+* Miscellaneous Services::      Other services.
 
 Defining Services
 
@@ -3793,7 +3794,7 @@ native package build:
                 "-s"
                 (string-append #$emacs "/bin/emacs")
                 (string-append #$output "/bin/vi")))
-   #:target "mips64el-linux")
+   #:target "mips64el-linux-gnu")
 @end example
 
 @noindent
@@ -3825,6 +3826,28 @@ In this example, the @code{(guix build utils)} module is automatically
 pulled into the isolated build environment of our gexp, such that
 @code{(use-modules (guix build utils))} works as expected.
 
+@cindex module closure
+@findex source-module-closure
+Usually you want the @emph{closure} of the module to be imported---i.e.,
+the module itself and all the modules it depends on---rather than just
+the module; failing to do that, attempts to use the module will fail
+because of missing dependent modules.  The @code{source-module-closure}
+procedure computes the closure of a module by looking at its source file
+headers, which comes in handy in this case:
+
+@example
+(use-modules (guix modules))   ;for 'source-module-closure'
+
+(with-imported-modules (source-module-closure
+                         '((guix build utils)
+                           (gnu build vm)))
+  (gexp->derivation "something-with-vms"
+                    #~(begin
+                        (use-modules (guix build utils)
+                                     (gnu build vm))
+                        @dots{})))
+@end example
+
 The syntactic form to construct gexps is summarized below.
 
 @deffn {Scheme Syntax} #~@var{exp}
@@ -3962,7 +3985,7 @@ The @code{local-file}, @code{plain-file}, @code{computed-file},
 these objects lead to a file in the store.  Consider this G-expression:
 
 @example
-#~(system* (string-append #$glibc "/sbin/nscd") "-f"
+#~(system* #$(file-append glibc "/sbin/nscd") "-f"
            #$(local-file "/tmp/my-nscd.conf"))
 @end example
 
@@ -4021,7 +4044,7 @@ command:
 (use-modules (guix gexp) (gnu packages base))
 
 (gexp->script "list-files"
-              #~(execl (string-append #$coreutils "/bin/ls")
+              #~(execl #$(file-append coreutils "/bin/ls")
                        "ls"))
 @end example
 
@@ -4032,8 +4055,7 @@ executable file @file{/gnu/store/@dots{}-list-files} along these lines:
 @example
 #!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
 !#
-(execl (string-append "/gnu/store/@dots{}-coreutils-8.22"/bin/ls")
-       "ls")
+(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
 @end example
 @end deffn
 
@@ -4103,6 +4125,34 @@ as in:
 This is the declarative counterpart of @code{text-file*}.
 @end deffn
 
+@deffn {Scheme Procedure} file-append @var{obj} @var{suffix} @dots{}
+Return a file-like object that expands to the concatenation of @var{obj}
+and @var{suffix}, where @var{obj} is a lowerable object and each
+@var{suffix} is a string.
+
+As an example, consider this gexp:
+
+@example
+(gexp->script "run-uname"
+              #~(system* #$(file-append coreutils
+                                        "/bin/uname")))
+@end example
+
+The same effect could be achieved with:
+
+@example
+(gexp->script "run-uname"
+              #~(system* (string-append #$coreutils
+                                        "/bin/uname")))
+@end example
+
+There is one difference though: in the @code{file-append} case, the
+resulting script contains the absolute file name as a string, whereas in
+the second case, the resulting script contains a @code{(string-append
+@dots{})} expression to construct the file name @emph{at run time}.
+@end deffn
+
+
 Of course, in addition to gexps embedded in ``host'' code, there are
 also modules containing build tools.  To make it clear that they are
 meant to be used in the build stratum, these modules are kept in the
@@ -4656,7 +4706,7 @@ The general syntax is:
 guix hash @var{option} @var{file}
 @end example
 
-@command{guix hash} has the following option:
+@command{guix hash} has the following options:
 
 @table @code
 
@@ -4684,6 +4734,11 @@ hash (@pxref{Invoking guix archive}).
 @c FIXME: Replace xref above with xref to an ``Archive'' section when
 @c it exists.
 
+@item --exclude-vcs
+@itemx -x
+When combined with @option{--recursive}, exclude version control system
+directories (@file{.bzr}, @file{.git}, @file{.hg}, etc.)
+
 @vindex git-fetch
 As an example, here is how you would compute the hash of a Git checkout,
 which is useful when using the @code{git-fetch} method (@pxref{origin
@@ -4692,8 +4747,7 @@ Reference}):
 @example
 $ git clone http://example.org/foo.git
 $ cd foo
-$ rm -rf .git
-$ guix hash -r .
+$ guix hash -rx .
 @end example
 @end table
 
@@ -6129,7 +6183,7 @@ Few system services are currently supported out-of-the-box
 (@pxref{Services}).
 
 @item
-More than 3,200 packages are available, but you may
+More than 4,000 packages are available, but you may
 occasionally find that a useful package is missing.
 
 @item
@@ -6699,8 +6753,7 @@ following in your operating system declaration:
                         (extra-options '("--gc-keep-derivations"))))
     (mingetty-service-type config =>
                            (mingetty-configuration
-                            (inherit config)
-                            (motd (plain-file "motd" "Howdy!"))))))
+                            (inherit config)))))
 
 (operating-system
   ;; @dots{}
@@ -7534,7 +7587,7 @@ declaration.
 * Database Services::           SQL databases.
 * Mail Services::               IMAP, POP3, SMTP, and all that.
 * Web Services::                Web servers.
-* Various Services::            Other services.
+* Miscellaneous Services::      Other services.
 @end menu
 
 @node Base Services
@@ -7565,6 +7618,27 @@ this:
 Return a service that sets the host name to @var{name}.
 @end deffn
 
+@deffn {Scheme Procedure} login-service @var{config}
+Return a service to run login according to @var{config}, a
+@code{<login-configuration>} object, which specifies the message of the day,
+among other things.
+@end deffn
+
+@deftp {Data Type} login-configuration
+This is the data type representing the configuration of login.
+
+@table @asis
+
+@item @code{motd}
+A file-like object containing the ``message of the day''.
+
+@item @code{allow-empty-passwords?} (default: @code{#t})
+Allow empty passwords by default so that first-time users can log in when
+the 'root' account has just been created.
+
+@end table
+@end deftp
+
 @deffn {Scheme Procedure} mingetty-service @var{config}
 Return a service to run mingetty according to @var{config}, a
 @code{<mingetty-configuration>} object, which specifies the tty to run, among
@@ -7580,9 +7654,6 @@ implements console log-in.
 @item @code{tty}
 The name of the console this Mingetty runs on---e.g., @code{"tty1"}.
 
-@item @code{motd}
-A file-like object containing the ``message of the day''.
-
 @item @code{auto-login} (default: @code{#f})
 When true, this field must be a string denoting the user name under
 which the system automatically logs in.  When it is @code{#f}, a
@@ -7603,6 +7674,37 @@ The Mingetty package to use.
 @end table
 @end deftp
 
+@deffn {Scheme Procedure} kmscon-service-type @var{config}
+Return a service to run @uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon}
+according to @var{config}, a @code{<kmscon-configuration>} object, which
+specifies the tty to run, among other things.
+@end deffn
+
+@deftp {Data Type} kmscon-configuration
+This is the data type representing the configuration of Kmscon, which
+implements console log-in.
+
+@table @asis
+
+@item @code{virtual-terminal}
+The name of the console this Kmscon runs on---e.g., @code{"tty1"}.
+
+@item @code{login-program} (default: @code{#~(string-append #$shadow "/bin/login")})
+A gexp denoting the name of the log-in program. The default log-in program is
+@command{login} from the Shadow tool suite.
+
+@item @code{login-arguments} (default: @code{'("-p")})
+A list of arguments to pass to @command{login}.
+
+@item @code{hardware-acceleration?} (default: #f)
+Whether to use hardware acceleration.
+
+@item @code{kmscon} (default: @var{kmscon})
+The Kmscon package to use.
+
+@end table
+@end deftp
+
 @cindex name service cache daemon
 @cindex nscd
 @deffn {Scheme Procedure} nscd-service [@var{config}] [#:glibc glibc] @
@@ -7697,12 +7799,23 @@ privacy---often the result of host name lookups is in local cache, so
 external name servers do not even need to be queried.
 @end defvr
 
+@anchor{syslog-configuration-type}
+@deftp {Data Type} syslog-configuration
+This data type represents the configuration of the syslog daemon.
+
+@table @asis
+@item @code{syslogd} (default: @code{#~(string-append #$inetutils "/libexec/syslogd")})
+The syslog daemon to use.
+
+@item @code{config-file} (default: @code{%default-syslog.conf})
+The syslog configuration file to use.
 
-@deffn {Scheme Procedure} syslog-service @
-             [#:config-file @var{%default-syslog.conf}]
-Return a service that runs @command{syslogd}.  If the configuration file
-name @var{config-file} is not specified, use some reasonable default
-settings.
+@end table
+@end deftp
+
+@anchor{syslog-service}
+@deffn {Scheme Procedure} syslog-service @var{config}
+Return a service that runs a syslog daemon according to @var{config}.
 
 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
 information on the configuration file syntax.
@@ -8086,6 +8199,40 @@ root.
 The other options should be self-descriptive.
 @end deffn
 
+@deffn {Scheme Procedure} openssh-service [#:pid-file "/var/run/sshd.pid"] @
+       [#:port-number 22] [#:permit-root-login 'without-password] @
+       [#:allow-empty-passwords #f] [#:password-authentication? #t] @
+       [#:pubkey-authentication? #t] [#:rsa-authentication? #t] @
+       [#:x11-forwarding? #f] [#:protocol-number "2"]
+Run the @command{sshd} program from @var{openssh} on port
+@var{port-number}.  @command{sshd} runs an SSH daemon and writes its PID
+to @var{pid-file}.  It understands SSH protocol
+@var{protocol-number}. The @var{protocol-number} can be either 1 or 2.
+
+@var{permit-root-login} takes one of @code{#t}, @code{'without-password}
+and @code{#f}.  It is used to allow root login through SSH.
+@code{'without-password} means that root login is allowed, but not with
+password-based authentication.
+
+When @var{allow-empty-passwords?} is true, users with empty passwords
+may log in.  When false, they may not.
+
+When @var{password-authentication?} is true, users may log in with their
+password.  When false, they have to use other means of authentication.
+
+When @var{pubkey-authentication?} is true, users may log in using public
+key authentication.  When false, users have to use other means of
+authentication.  Authorized public keys are stored in
+@file{~/.ssh/authorized_keys}.  This is used only by protocol version 2.
+
+When @var{rsa-authentication?} is true, users may log in using pure RSA
+authentication.  When false, users have to use other means of
+authentication.  This is used only by protocol 1.
+
+When @var{x11-forwarding?} is true, @command{ssh} options @option{-X}
+and @option{-Y} will work.
+@end deffn
+
 @deffn {Scheme Procedure} dropbear-service [@var{config}]
 Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
 daemon} with the given @var{config}, a @code{<dropbear-configuration>}
@@ -8193,6 +8340,109 @@ Xorg---is provided by the @code{(gnu services xorg)} module.  Note that
 there is no @code{xorg-service} procedure.  Instead, the X server is
 started by the @dfn{login manager}, currently SLiM.
 
+@deftp {Data Type} sddm-configuration
+This is the data type representing the sddm service configuration.
+
+@table @asis
+@item @code{display-server} (default: "x11")
+Select display server to use for the greeter. Valid values are "x11"
+or "wayland".
+
+@item @code{numlock} (default: "on")
+Valid values are "on", "off" or "none".
+
+@item @code{halt-command} (default @code{#~(string-apppend #$shepherd "/sbin/halt")})
+Command to run when halting.
+
+@item @code{reboot-command} (default @code{#~(string-append #$shepherd "/sbin/reboot")})
+Command to run when rebooting.
+
+@item @code{theme} (default "maldives")
+Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
+
+@item @code{themes-directory} (default "/run/current-system/profile/share/sddm/themes")
+Directory to look for themes.
+
+@item @code{faces-directory} (default "/run/current-system/profile/share/sddm/faces")
+Directory to look for faces.
+
+@item @code{default-path} (default "/run/current-system/profile/bin")
+Default PATH to use.
+
+@item @code{minimum-uid} (default 1000)
+Minimum UID to display in SDDM.
+
+@item @code{maximum-uid} (default 2000)
+Maximum UID to display in SDDM
+
+@item @code{remember-last-user?} (default #t)
+Remember last user.
+
+@item @code{remember-last-session?} (default #t)
+Remember last session.
+
+@item @code{hide-users} (default "")
+Usernames to hide from SDDM greeter.
+
+@item @code{hide-shells} (default @code{#~(string-append #$shadow "/sbin/nologin")})
+Users with shells listed will be hidden from the SDDM greeter.
+
+@item @code{session-command} (default @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
+Script to run before starting a wayland session.
+
+@item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions")
+Directory to look for desktop files starting wayland sessions.
+
+@item @code{xorg-server-path} (default @code{xorg-start-command})
+Path to xorg-server.
+
+@item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")})
+Path to xauth.
+
+@item @code{xephyr-path} (default @code{#~(string-append #$xorg-server "/bin/Xephyr")})
+Path to Xephyr.
+
+@item @code{xdisplay-start} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
+Script to run after starting xorg-server.
+
+@item @code{xdisplay-stop} (default @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
+Script to run before stopping xorg-server.
+
+@item @code{xsession-command} (default: @code{xinitr })
+Script to run before starting a X session.
+
+@item @code{xsessions-directory} (default: "/run/current-system/profile/share/xsessions")
+Directory to look for desktop files starting X sessions.
+
+@item @code{minimum-vt} (default: 7)
+Minimum VT to use.
+
+@item @code{xserver-arguments} (default "-nolisten tcp")
+Arguments to pass to xorg-server.
+
+@item @code{auto-login-user} (default "")
+User to use for auto-login.
+
+@item @code{auto-login-session} (default "")
+Desktop file to use for auto-login.
+
+@item @code{relogin?} (default #f)
+Relogin after logout.
+
+@end table
+@end deftp
+
+@deffn {Scheme Procedure} sddm-service config
+Return a service that spawns the SDDM graphical login manager for config of
+type @code{<sddm-configuration>}.
+
+@example
+  (sddm-service (sddm-configuration
+                 (auto-login-user "Alice")
+                 (auto-login-session "xfce.desktop")))
+@end example
+@end deffn
+
 @deffn {Scheme Procedure} slim-service [#:allow-empty-passwords? #f] @
   [#:auto-login? #f] [#:default-user ""] [#:startx] @
   [#:theme @var{%default-slim-theme}] @
@@ -8324,7 +8574,7 @@ profile, and extends polkit with the actions from
 
 @deffn {Scheme Procedure} xfce-desktop-service
 Return a service that adds the @code{xfce} package to the system profile,
-and extends polkit with the abilit for @code{thunar} to manipulate the
+and extends polkit with the ability for @code{thunar} to manipulate the
 file system as root from within a user session, after the user has
 authenticated with the administrator's password.
 @end deffn
@@ -9328,7 +9578,7 @@ Defaults to @samp{""}.
 @end deftypevr
 
 @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
-Allow full filesystem access to clients.  There's no access checks
+Allow full file system access to clients.  There's no access checks
 other than what the operating system does for the active UID/GID.  It
 works with both maildir and mboxes, allowing you to prefix mailboxes
 names with e.g. /path/ or ~user/.
@@ -9337,7 +9587,7 @@ Defaults to @samp{#f}.
 
 @deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
 Don't use mmap() at all.  This is required if you store indexes to
-shared filesystems (NFS or clustered filesystem).
+shared file systems (NFS or clustered file system).
 Defaults to @samp{#f}.
 @end deftypevr
 
@@ -9599,7 +9849,7 @@ Defaults to @samp{"1d"}.
 @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
 When creating new mdbox files, immediately preallocate their size to
 @samp{mdbox-rotate-size}.  This setting currently works only in Linux
-with some filesystems (ext4, xfs).
+with some file systems (ext4, xfs).
 Defaults to @samp{#f}.
 @end deftypevr
 
@@ -9622,7 +9872,7 @@ Defaults to @samp{128000}.
 @end deftypevr
 
 @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
-Filesystem backend to use for saving attachments:
+File system backend to use for saving attachments:
 @table @code
 @item posix
 No SiS done by Dovecot (but this might help FS's own deduplication)
@@ -9748,8 +9998,8 @@ Defaults to @samp{""}.
 
 @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
 Address to use when sending rejection mails.
-Default is postmaster@@<your domain>.  %d expands to recipient domain.
-Defaults to @samp{""}.
+%d expands to recipient domain.
+Defaults to @samp{"postmaster@@%d"}.
 @end deftypevr
 
 @deftypevr {@code{dovecot-configuration} parameter} string hostname
@@ -9950,8 +10200,33 @@ directories are created when the service is activated.
 
 @end deffn
 
-@node Various Services
-@subsubsection Various Services
+@node Miscellaneous Services
+@subsubsection Miscellaneous Services
+
+
+@subsubheading RPC Bind Service
+@cindex rpcbind
+
+The @code{(gnu services nfs)} module provides the following:
+
+@defvr {Scheme Variable} rpcbind-service-type
+A service type  for the RPC portmapper daemon.
+@end defvr
+
+
+@deftp {Data Type} rpcbind-configuration
+Data type representing the configuration of the RPC Bind Service.
+This type has the following parameters:
+@table @asis
+@item @code{rpcbind} (default: @code{rpcbind})
+The rpcbind package to use.
+
+@item @code{warm-start?} (default: @code{#t})
+If this parameter is @code{#t}, then the daemon will read a
+state file on startup thus reloading state information saved by a previous
+instance.
+@end table
+@end deftp
 
 @cindex lirc
 @subsubheading Lirc Service
@@ -10429,9 +10704,23 @@ The @code{grub-theme} object describing the theme to use.
 
 @end deftp
 
+@cindex dual boot
+@cindex boot menu
 Should you want to list additional boot menu entries @i{via} the
 @code{menu-entries} field above, you will need to create them with the
-@code{menu-entry} form:
+@code{menu-entry} form.  For example, imagine you want to be able to
+boot another distro (hard to imagine!), you can define a menu entry
+along these lines:
+
+@example
+(menu-entry
+  (label "The Other Distro")
+  (linux "/boot/old/vmlinux-2.6.32")
+  (linux-arguments '("root=/dev/sda2"))
+  (initrd "/boot/old/initrd"))
+@end example
+
+Details below.
 
 @deftp {Data Type} menu-entry
 The type of an entry in the GRUB boot menu.
@@ -10442,7 +10731,11 @@ The type of an entry in the GRUB boot menu.
 The label to show in the menu---e.g., @code{"GNU"}.
 
 @item @code{linux}
-The Linux kernel to boot.
+The Linux kernel image to boot, for example:
+
+@example
+(file-append linux-libre "/bzImage")
+@end example
 
 @item @code{linux-arguments} (default: @code{()})
 The list of extra Linux kernel command-line arguments---e.g.,
@@ -11089,6 +11382,25 @@ the extension; it must return a valid value for the target service.
 Return true if @var{obj} is a service extension.
 @end deffn
 
+Occasionally, you might want to simply extend an existing service.  This
+involves creating a new service type and specifying the extension of
+interest, which can be verbose; the @code{simple-service} procedure
+provides a shorthand for this.
+
+@deffn {Scheme Procedure} simple-service @var{name} @var{target} @var{value}
+Return a service that extends @var{target} with @var{value}.  This works
+by creating a singleton service type @var{name}, of which the returned
+service is an instance.
+
+For example, this extends mcron (@pxref{Scheduled Job Execution}) with
+an additional job:
+
+@example
+(simple-service 'my-mcron-job mcron-service-type
+                #~(job '(next-hour (3)) "guix gc -F 2G"))
+@end example
+@end deffn
+
 At the core of the service abstraction lies the @code{fold-services}
 procedure, which is responsible for ``compiling'' a list of services
 down to a single directory that contains everything needed to boot and
diff --git a/etc/completion/bash/guix b/etc/completion/bash/guix
index 807a0b2e1f..c92f8915c9 100644
--- a/etc/completion/bash/guix
+++ b/etc/completion/bash/guix
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -20,6 +20,15 @@
 
 declare _guix_available_packages
 
+_guix_complete_subcommand ()
+{
+    local command="${COMP_WORDS[1]}"
+    local subcommands="$(${COMP_WORDS[0]} $command --help 2> /dev/null \
+                         | grep '^   [a-z]' \
+                         | sed -e's/^ \+\([a-z-]\+\).*$/\1/g')"
+    COMPREPLY=($(compgen -W "$subcommands" -- "${COMP_WORDS[${#COMP_WORDS[*]} - 1]}"))
+}
+
 _guix_complete_available_package ()
 {
     local prefix="$1"
@@ -27,7 +36,8 @@ _guix_complete_available_package ()
     then
 	# Cache the complete list because it rarely changes and makes
 	# completion much faster.
-	_guix_available_packages="$(${COMP_WORDS[0]} package -A | cut -f1)"
+	_guix_available_packages="$(${COMP_WORDS[0]} package -A 2> /dev/null \
+                                    | cut -f1)"
     fi
     COMPREPLY=($(compgen -W "$_guix_available_packages" -- "$prefix"))
 }
@@ -37,17 +47,23 @@ _guix_complete_installed_package ()
     # Here we do not cache the list of installed packages because that
     # may change over time and the list is relatively small anyway.
     local prefix="$1"
-    local packages="$(${COMP_WORDS[0]} package -I "^$prefix" | cut -f1)"
+    local packages="$(${COMP_WORDS[0]} package -I "^$prefix" 2> /dev/null \
+                      | cut -f1)"
     COMPREPLY=($(compgen -W "$packages" -- "$prefix"))
 }
 
 _guix_complete_option ()
 {
-    local options="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} --help \
+    local subcommand
+    case "${COMP_WORDS[2]}" in
+	-*)     subcommand="";;
+	[a-z]*) subcommand="${COMP_WORDS[2]}";;
+    esac
+    local options="$(${COMP_WORDS[0]} ${COMP_WORDS[1]} $subcommand --help 2> /dev/null \
                             | grep '^  \+-' \
-                            | sed -e's/^.*--\([a-zA-Z0-9_-]\+\)\(=\?\).*/--\1\2/g' )"
+                            | sed -e's/^.*--\([a-zA-Z0-9_-]\+\)\(=\?\).*/--\1\2/g')"
     compopt -o nospace
-    COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[$word_count - 1]}"))
+    COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[${#COMP_WORDS[*]} - 1]}"))
 }
 
 _guix_is_command ()
@@ -119,7 +135,8 @@ _guix_complete ()
 	    if [ -z "$_guix_subcommands" ]
 	    then
 		# Cache the list of subcommands to speed things up.
-		_guix_subcommands="$(guix --help | grep '^  ' | cut -c 2-)"
+		_guix_subcommands="$(guix --help 2> /dev/null \
+                                     | grep '^  ' | cut -c 2-)"
 	    fi
 	    COMPREPLY=($(compgen -W "$_guix_subcommands" -- "$word_at_point"))
 	    ;;
@@ -137,13 +154,13 @@ _guix_complete ()
 		fi
 	    elif _guix_is_command "system"
 	    then
-		_guix_complete_file # TODO: complete sub-commands
-	    elif _guix_is_command "hash"
+		_guix_complete_subcommand
+	    elif _guix_is_command "import"
 	    then
-		 _guix_complete_file
-	    elif _guix_is_command "import" # TODO: complete sub-commands
+		_guix_complete_subcommand
+	    elif _guix_is_command "hash"
 	    then
-		 _guix_complete_file
+		_guix_complete_file
 	    else
 		_guix_complete_available_package "$word_at_point"
 	    fi
diff --git a/etc/completion/zsh/_guix b/etc/completion/zsh/_guix
new file mode 100644
index 0000000000..3760bb629b
--- /dev/null
+++ b/etc/completion/zsh/_guix
@@ -0,0 +1,456 @@
+#compdef guix
+#
+# GNU Guix --- Functional package management for GNU
+# Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
+#
+# 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/>.
+
+
+_guix_caching_policy()
+{
+    local -a old_policy
+    old_policy=( "$1"(Nmh+24) )
+    (( $#old_policy ))
+}
+
+_guix_list_actions()
+{
+    _guix_actions=( $(guix system --help | sed -n 's/^   \([a-z-]\+\)\s\+.\+/\1/p') )
+}
+
+_guix_list_checkers()
+{
+    _guix_checkers=( $(guix lint -l | sed -n 's/^- \(.\+\): .\+/\1/p') )
+}
+
+_guix_list_graph_types()
+{
+    _guix_graph_types=( $(guix graph --list-types | sed -n 's/^  - \(.\+\): .\+/\1/p') )
+}
+
+_guix_list_importers()
+{
+    _guix_importers=( $(guix import --help | sed -n 's/^\s\+\([a-z]\+\)$/\1/p') )
+}
+
+_guix_list_updaters()
+{
+    _guix_updaters=( $(guix lint -l | sed -n 's/^- \(.\+\): .\+/\1/p') )
+}
+
+_guix_list_available_packages()
+{
+    if ( [[ ${+_guix_available_packages} -eq 0 ]] || _cache_invalid GUIX_AVAILABLE_PACKAGES ) \
+       && ! _retrieve_cache GUIX_AVAILABLE_PACKAGES; then
+        _guix_available_packages=(${${(f)"$(guix package -A | cut -f1)"}})
+        _store_cache GUIX_AVAILABLE_PACKAGES _guix_available_packages
+    fi
+}
+
+_guix_list_installed_packages()
+{
+    _guix_installed_packages=( $(guix package -I "^${prefix}" | cut -f1) )
+}
+
+(( $+functions[_guix_build] )) || _guix_build()
+{
+    _arguments \
+        '--expression=[build the package matching EXPR]:EXPR' \
+        '--file=[build the package matching code evaluated from FILE]:FILE:_files' \
+        '--source[build the packages source derivations]' \
+        '--sources=[build source derivations]:TYPE:(all package transitive)' \
+        '--system=[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
+        '--target=[cross-build for TRIPLET (e.g. "armel-linux-gnu")]:TRIPLET' \
+        '--derivations[return the derivation paths of the given packages]' \
+        '--check[rebuild items to check for non-determinism issues]' \
+        '--root=[symlink result to FILE and register it as GC root]:FILE:_files' \
+        '--quiet[do not show the build log]' \
+        '--log-file[return the log file names for the given derivations]' \
+        '--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
+        '--keep-failed[keep build tree of failed builds]' \
+        '--keep-going[keep going when some of the derivations fail]' \
+        '--dry-run[do not build the derivations]' \
+        '--fallback[fall back to building when the substituter fails]' \
+        '--no-substitutes[build instead of resorting to pre-built substitutes]' \
+        '--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
+        '--no-grafts[do not graft packages]' \
+        '--no-build-hook[do not attempt to offload builds via the build hook]' \
+        '--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
+        '--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
+        '--verbosity=[use the given verbosity LEVEL]:LEVEL' \
+        '--rounds=[build N times in a row to detect non-determinism]:N' \
+        '--cores=[allow the use of up to N CPU cores for the build]:N' \
+        '--max-jobs=[allow at most N build jobs]:N' \
+        '--with-source=[use SOURCE when building the corresponding package]:SOURCE' \
+        '--with-input=[replace dependency PACKAGE by REPLACEMENT]:PACKAGE=REPLACEMENT' \
+        '*:package:->packages'
+
+    if [[ "$state" = packages ]]; then
+        _guix_list_available_packages
+        compadd -a -- _guix_available_packages
+    fi
+}
+
+(( $+functions[_guix_challenge] )) || _guix_challenge()
+{
+    _arguments \
+        '--substitute-urls=[fetch substitute from URLS if they are authorized]:URL:_urls' \
+        '*:package:->packages'
+
+    if [[ "$state" = packages ]]; then
+        _guix_list_available_packages
+        compadd -a -- _guix_available_packages
+    fi
+}
+
+(( $+functions[_guix_container] )) || _guix_container()
+{
+    _arguments \
+        ':action:(exec)' \
+        '*:args'
+}
+
+(( $+functions[_guix_download] )) || _guix_download()
+{
+    _arguments \
+        '--format=[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
+        '1:URL:_urls'
+}
+
+(( $+functions[_guix_edit] )) || _guix_edit()
+{
+    _guix_list_available_packages
+    compadd -a -- _guix_available_packages
+}
+
+(( $+functions[_guix_environment] )) || _guix_environment()
+{
+    _arguments \
+        '--expression=[create environment for the package evaluated from EXPR]:EXPR' \
+        '--load=[create environment for the package evaluated from FILE]:FILE:_files' \
+        '--ad-hoc[include all specified packages, not only their inputs]' \
+        '--pure[unset existing environment variables]' \
+        '--search-paths[display needed environment variable definitions]' \
+        '--system=[attempt to build for SYSTEM (e.g. "i686-linux")]:SYSTEM' \
+        '--container[run command within an isolated container]' \
+        '--network[allow containers to access the network]' \
+        '--share=[share writable host file system according to SPEC]:SPEC' \
+        '--expose=[expose read-only host file system according to SPEC]:SPEC' \
+        '--bootstrap[use bootstrap binaries to build the environment]' \
+        '--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
+        '--keep-failed[keep build tree of failed builds]' \
+        '--keep-going[keep going when some of the derivations fail]' \
+        '--dry-run[do not build the derivations]' \
+        '--fallback[fall back to building when the substituter fails]' \
+        '--no-substitutes[build instead of resorting to pre-built substitutes]' \
+        '--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
+        '--no-grafts[do not graft packages]' \
+        '--no-build-hook[do not attempt to offload builds via the build hook]' \
+        '--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
+        '--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
+        '--verbosity=[use the given verbosity LEVEL]:LEVEL' \
+        '--rounds=[build N times in a row to detect non-determinism]:N' \
+        '--cores=[allow the use of up to N CPU cores for the build]:N' \
+        '--max-jobs=[allow at most N build jobs]:N' \
+        '*:package:->packages'
+
+    if [[ "$state" = packages ]]; then
+        _guix_list_available_packages
+        compadd -a -- _guix_available_packages
+    fi
+
+}
+
+(( $+functions[_guix_gc] )) || _guix_gc()
+{
+    _arguments \
+        '--collect-garbage=[collect at least MIN bytes of garbage]:MIN' \
+        '--free-space=[attempt to reach FREE available space in the store]:FREE' \
+        '--delete[attempt to delete PATHS]' \
+        '--optimize[optimize the store by deduplicating identical files]' \
+        '--list-dead[list dead paths]' \
+        '--list-live[list live paths]' \
+        '--references[list the references of PATHS]' \
+        '--requisites[list the requisites of PATHS]' \
+        '--referrers[list the referrers of PATHS]' \
+        '--verify=[verify the integrity of the store]:OPTS:(contents repair)' \
+        '--list-failures[list cached build failures]' \
+        '--clear-failures[remove PATHS from the set of cached failures]' \
+        '1:PATH:_dirs'
+}
+
+(( $+functions[_guix_graph] )) || _guix_graph()
+{
+    _arguments \
+        '--type=[represent nodes of the given TYPE]:TYPE:->types' \
+        '--list-types[list the available graph types]' \
+        '--expression=[consider the package EXPR evaluates to]:EXPR' \
+        '1:PACKAGE:->packages'
+
+    case "$state" in
+        types)
+            _guix_list_graph_types
+            compadd -a -- _guix_graph_types
+            ;;
+        packages)
+            _guix_list_available_packages
+            compadd -a -- _guix_available_packages
+            ;;
+    esac
+
+}
+
+(( $+functions[_guix_hash] )) || _guix_hash()
+{
+    _arguments \
+        '--format=[write the hash in the given format]:FMT:(nix-base32 base16 base32 hex)' \
+        '--recursive[compute the hash on FILE recursively]'\
+        '1:FILE:_files'
+}
+
+(( $+functions[_guix_import] )) || _guix_import()
+{
+    _arguments \
+        '1:IMPORTER:->importer' \
+        '*:args:'
+
+    if [[ "$state" = importer ]]; then
+        _guix_list_importers
+        compadd -a -- _guix_importers
+    fi
+}
+
+(( $+functions[_guix_lint] )) || _guix_lint()
+{
+    _arguments \
+        '--checkers=[only run the specified checkers]:CHECKERS:->checkers' \
+        '--list-checkers[display the list of available lint checkers]' \
+        '1:PACKAGE:->packages'
+
+    case "$state" in
+        checkers)
+            _guix_list_checkers
+            compadd -a -- _guix_checkers
+            ;;
+        packages)
+            _guix_list_available_packages
+            compadd -a -- _guix_available_packages
+            ;;
+    esac
+}
+
+(( $+functions[_guix_package] )) || _guix_package()
+{
+    _arguments \
+        '--install[install one or more packages]: :->install' \
+        '--install-from-expression=[install the package EXP evaluates to]:EXP' \
+        '--install-from-file=[install the package evaluated from FILE]:FILE:_files' \
+        '--remove[remove one or more packages]: :->remove' \
+        '--upgrade=[upgrade all the installed packages matching REGEXP]:REGEXP' \
+        '--manifest=[create a new profile generation from FILE]:FILE:_files' \
+        '--do-not-upgrade=[do not upgrade any packages matching REGEXP]:REGEXP' \
+        '--roll-back[roll back to the previous generation]' \
+        '--search-paths=[display needed environment variable definitions]:KINDS' \
+        '--list-generations=[list generations matching PATTERN]:PATTERN' \
+        '--delete-generations=[delete generations matching PATTERN]:PATTERN' \
+        '--switch-generation=[switch to a generation matching PATTERN]:PATTERN' \
+        '--profile=[use PROFILE instead of the default profile]:PROFILE' \
+        '--bootstrap[use the bootstrap Guile to build the profile]' \
+        '--verbose[produce verbose output]' \
+        '--search=[search in synopsis and description using REGEXP]:REGEXP' \
+        '--list-installed=[list installed packages matching REGEXP]:REGEXP' \
+        '--list-available=[list available packages matching REGEXP]:REGEXP' \
+        '--show=[show details about a package]: :->show' \
+        '--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
+        '--keep-failed[keep build tree of failed builds]' \
+        '--keep-going[keep going when some of the derivations fail]' \
+        '--dry-run[do not build the derivations]' \
+        '--fallback[fall back to building when the substituter fails]' \
+        '--no-substitutes[build instead of resorting to pre-built substitutes]' \
+        '--substitute-urls=[fetch substitute from URLS if they are authorized]:URLS:_urls' \
+        '--no-grafts[do not graft packages]' \
+        '--no-build-hook[do not attempt to offload builds via the build hook]' \
+        '--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
+        '--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
+        '--verbosity=[use the given verbosity LEVEL]:LEVEL' \
+        '--rounds=[build N times in a row to detect non-determinism]:N' \
+        '--cores=[allow the use of up to N CPU cores for the build]:N' \
+        '--max-jobs=[allow at most N build jobs]:N' \
+        '--with-source=[use SOURCE when building the corresponding package]:SOURCE' \
+        '--with-input=[replace dependency PACKAGE by REPLACEMENT]:PACKAGE=REPLACEMENT'
+
+    case "$state" in
+        install|show)
+            _guix_list_available_packages
+            compadd -a -- _guix_available_packages
+            ;;
+        remove)
+            _guix_list_installed_packages
+             compadd -a -- _guix_installed_packages
+            ;;
+        esac
+}
+
+(( $+functions[_guix_publish] )) || _guix_publish()
+{
+    _arguments \
+        '--port=[listen on PORT]:PORT:' \
+        '--listen=[listen on the network interface for HOST]:HOST:_hosts' \
+        '--user=[change privileges to USER as soon as possible]:USER:_users' \
+        '--compression=[compress archives at LEVEL]:LEVEL' \
+        '--ttl=[announce narinfos can be cached for TTL seconds]:TTL' \
+        '--repl=[spawn REPL server on PORT]:PORT'
+}
+
+(( $+functions[_guix_pull] )) || _guix_pull()
+{
+    _arguments \
+        '--verbose[produce verbose output]' \
+        '--url=[download the Guix tarball from URL]:URL:_urls' \
+        '--bootstrap[use the bootstrap Guile to build the new Guix]'
+}
+
+(( $+functions[_guix_refresh] )) || _guix_refresh()
+{
+    _arguments \
+        '--expression=[consider the package EXPR evaluates to]:EXPR' \
+        '--update[update source files in place]' \
+        '--select=[select all the packages in SUBSET]:SUBSET:(core non-core)' \
+        '--type=[restrict to updates from the specified updaters]:UPDATER:->updaters' \
+        '--list-updaters[list available updaters and exit]' \
+        '--list-dependent[list top-level dependent packages]' \
+        '--key-server=[use HOST as the OpenPGP key server]:HOST:_hosts' \
+        '--gpg=[use COMMAND as the GnuPG 2.x command]:COMMAND' \
+        '--key-download=[policy to handle missing OpenPGP keys]:POLICY:(always interactive never)' \
+        '*:package:->packages'
+
+    case "$state" in
+        updaters)
+            _guix_list_updaters
+            compadd -a -- _guix_updaters
+            ;;
+        packages)
+            _guix_list_available_packages
+            compadd -a -- _guix_available_packages
+            ;;
+    esac
+}
+
+(( $+functions[_guix_size] )) || _guix_size()
+{
+    _arguments \
+        '--substitute-urls=[fetch substitute from URLS if they are authorized]:URL:_urls' \
+        '-system=[consider packages for SYSTEM--e.g., "i686-linux"]:SYSTEM' \
+        '--map-file=[write to FILE a graphical map of disk usage]:FILE:_files' \
+        '*:package:->packages'
+
+        if [[ "$state" = packages ]]; then
+            _guix_list_available_packages
+            compadd -a -- _guix_available_packages
+        fi
+}
+
+(( $+functions[_guix_system] )) || _guix_system()
+{
+    _arguments \
+        '--load-path=[prepend DIR to the package module search path]:DIR:_dirs' \
+        '--keep-failed[keep build tree of failed builds]' \
+        '--keep-going[keep going when some of the derivations fail]' \
+        '--dry-run[do not build the derivations]' \
+        '--fallback[fall back to building when the substituter fails]' \
+        '--no-substitutes[build instead of resorting to pre-built substitutes]' \
+        '--substitute-urls=[fetch substitute from URLS if they are authorized]:URL:_urls' \
+        '--no-grafts[do not graft packages]' \
+        '--no-build-hook[do not attempt to offload builds via the build hook]' \
+        '--max-silent-time=[mark the build as failed after SECONDS of silence]:SECONDS' \
+        '--timeout=[mark the build as failed after SECONDS of activity]:SECONDS' \
+        '--verbosity=[use the given verbosity LEVEL]:LEVEL' \
+        '--rounds=[build N times in a row to detect non-determinism]:N' \
+        '--cores=[allow the use of up to N CPU cores for the build]:N' \
+        '--max-jobs=[allow at most N build jobs]:N' \
+        '--derivation[return the derivation of the given system]' \
+        '--on-error=[apply STRATEGY when an error occurs while reading FILE]:STRATEGY' \
+        '--image-size=[for "vm-image", produce an image of SIZE]:SIZE' \
+        '--no-grub[for "init", do not install GRUB]' \
+        '--share=[for "vm", share host file system according to SPEC]:SPEC' \
+        '--expose=[for "vm", expose host file system according to SPEC]:SPEC' \
+        '--full-boot[for "vm", make a full boot sequence]' \
+        '1:action:->actions' \
+        '*:file:_files'
+
+    if [[ "$state" = actions ]]; then
+        _guix_list_actions
+        compadd -a -- _guix_actions
+    fi
+}
+
+(( $+functions[_guix_command] )) || _guix_command()
+{
+    local -a _guix_cmds
+    _guix_cmds=(
+        "archive:Export/import one or more packages from/to the store"
+        "build:Build a given package"
+        "challenge:Challenge the substitutes for a package"
+        "container:Build and manipulate Linux containers"
+        "download:Download the file at given URL and add it to the store"
+        "edit:Edit the definitions of a package"
+        "environment:Build an environment with a package and its dependencies"
+        "gc:Invoke the garbage collector"
+        "graph:Emit a DOT representation of the dependencies of a package"
+        "hash:Return the cryptographic hash of a file"
+        "import:Run an importer"
+        "lint:Run a set of checkers on a package"
+        "package:Install, remove, or upgrade packages"
+        "publish:Publish /gnu/store over HTTP."
+        "pull:Download and deploy the latest version of Guix"
+        "refresh:Update package definitions to match the latest version"
+        "size:Report the size of a package and its dependencies"
+        "system:Build the operating system"
+    )
+
+    if (( CURRENT == 1 )); then
+        _describe -t commands 'guix command' _guix_cmds || compadd "$@"
+    else
+        local curcontext="$curcontext"
+
+        cmd="${${_guix_cmds[(r)$words[1]:*]%%:*}}"
+
+        if (( $#cmd )); then
+            local cache_policy
+
+            zstyle -s ":completion:${curcontext}:" cache-policy cache_policy
+            if [[ -z "$cache_policy" ]]; then
+                zstyle ":completion:${curcontext}:" cache-policy _guix_caching_policy
+            fi
+
+            curcontext="${curcontext%:*:*}:guix-${cmd}:"
+
+            _call_function ret _guix_${cmd} || _message 'no more arguments'
+        else
+            _message "unknown guix command: $words[1]"
+        fi
+        return ret
+    fi
+}
+
+_arguments \
+    '(--version)--version[Display version information and exit]' \
+    '*::guix command:_guix_command'
+
+# vim: ts=4 sts=4 sw=4 et ai
+# Local variables:
+# mode: sh
+# End:
diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm
index 10aa58d85c..1b31dc1538 100644
--- a/gnu/build/activation.scm
+++ b/gnu/build/activation.scm
@@ -233,6 +233,9 @@ numeric gid or #f."
   ;; 'groupadd' aborts if the file doesn't already exist.
   (touch "/etc/group")
 
+  ;; Allow home directories to be created under /var/lib.
+  (mkdir-p "/var/lib")
+
   ;; Create the root account so we can use 'useradd' and 'groupadd'.
   (activate-user (find (match-lambda
                         ((name (? zero?) _ ...) #t)
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index f277cbfa34..f1fccbdf2e 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -19,6 +19,7 @@
 (define-module (gnu build file-systems)
   #:use-module (guix build utils)
   #:use-module (guix build bournish)
+  #:use-module (guix build syscalls)
   #:use-module (rnrs io ports)
   #:use-module (rnrs bytevectors)
   #:use-module (ice-9 match)
@@ -41,17 +42,16 @@
             uuid->string
             string->uuid
 
-            MS_RDONLY
-            MS_NOSUID
-            MS_NODEV
-            MS_NOEXEC
-            MS_BIND
-            MS_MOVE
             bind-mount
 
             mount-flags->bit-mask
             check-file-system
-            mount-file-system))
+            mount-file-system)
+  #:re-export (mount
+               umount
+               MS_BIND
+               MS_MOVE
+               MS_RDONLY))
 
 ;;; Commentary:
 ;;;
@@ -61,21 +61,11 @@
 ;;; Code:
 
 ;; 'mount' is already defined in the statically linked Guile used for initial
-;; RAM disks, but in all other cases the (guix build syscalls) module contains
-;; the mount binding.
-(eval-when (expand load eval)
-  (unless (defined? 'mount)
-    (module-use! (current-module)
-                 (resolve-interface '(guix build syscalls)))))
-
-;; Linux mount flags, from libc's <sys/mount.h>.
-(define MS_RDONLY 1)
-(define MS_NOSUID 2)
-(define MS_NODEV  4)
-(define MS_NOEXEC 8)
-(define MS_REMOUNT 32)
-(define MS_BIND 4096)
-(define MS_MOVE 8192)
+;; RAM disks, in which case the bindings in (guix build syscalls) do not work
+;; (the FFI bindings do not work there).  Override them in that case.
+(when (module-defined? the-scm-module 'mount)
+  (set! mount (@ (guile) mount))
+  (set! umount (@ (guile) umount)))
 
 (define (bind-mount source target)
   "Bind-mount SOURCE at TARGET."
diff --git a/gnu/local.mk b/gnu/local.mk
index f86fc02e58..7c44196e0d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -98,6 +98,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/dillo.scm			\
   %D%/packages/disk.scm				\
   %D%/packages/display-managers.scm		\
+  %D%/packages/django.scm			\
   %D%/packages/djvu.scm				\
   %D%/packages/dns.scm				\
   %D%/packages/docbook.scm			\
@@ -142,6 +143,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/geo.scm				\
   %D%/packages/geeqie.scm			\
   %D%/packages/gettext.scm			\
+  %D%/packages/gforth.scm			\
   %D%/packages/ghostscript.scm			\
   %D%/packages/gimp.scm				\
   %D%/packages/gkrellm.scm			\
@@ -155,6 +157,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/gnustep.scm			\
   %D%/packages/gnuzilla.scm			\
   %D%/packages/gnu-pw-mgr.scm			\
+  %D%/packages/gobby.scm			\
   %D%/packages/golang.scm			\
   %D%/packages/gperf.scm			\
   %D%/packages/gprolog.scm			\
@@ -214,6 +217,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/libusb.scm			\
   %D%/packages/libunwind.scm			\
   %D%/packages/libupnp.scm			\
+  %D%/packages/lighting.scm                     \
   %D%/packages/links.scm			\
   %D%/packages/linux.scm			\
   %D%/packages/lirc.scm				\
@@ -239,6 +243,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/mcrypt.scm			\
   %D%/packages/messaging.scm			\
   %D%/packages/mg.scm				\
+  %D%/packages/microcom.scm			\
   %D%/packages/mit-krb5.scm			\
   %D%/packages/moe.scm				\
   %D%/packages/mono.scm				\
@@ -256,6 +261,8 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/netpbm.scm			\
   %D%/packages/nettle.scm			\
   %D%/packages/networking.scm			\
+  %D%/packages/nfs.scm                          \
+  %D%/packages/nickle.scm                       \
   %D%/packages/ninja.scm			\
   %D%/packages/node.scm				\
   %D%/packages/noweb.scm			\
@@ -312,6 +319,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/screen.scm			\
   %D%/packages/scribus.scm			\
   %D%/packages/scsi.scm				\
+  %D%/packages/sdcc.scm				\
   %D%/packages/sdl.scm				\
   %D%/packages/search.scm			\
   %D%/packages/serialization.scm		\
@@ -344,7 +352,6 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/tls.scm				\
   %D%/packages/tmux.scm				\
   %D%/packages/tor.scm				\
-  %D%/packages/tre.scm				\
   %D%/packages/tv.scm				\
   %D%/packages/unrtf.scm			\
   %D%/packages/upnp.scm				\
@@ -389,8 +396,10 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/mail.scm				\
   %D%/services/mcron.scm			\
   %D%/services/networking.scm			\
+  %D%/services/nfs.scm			\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
+  %D%/services/sddm.scm				\
   %D%/services/spice.scm				\
   %D%/services/ssh.scm				\
   %D%/services/web.scm				\
@@ -452,6 +461,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/avahi-localstatedir.patch		\
   %D%/packages/patches/avidemux-install-to-lib.patch		\
   %D%/packages/patches/awesome-reproducible-png.patch		\
+  %D%/packages/patches/azr3.patch				\
   %D%/packages/patches/bash-completion-directories.patch	\
   %D%/packages/patches/bigloo-gc-shebangs.patch			\
   %D%/packages/patches/binutils-ld-new-dtags.patch		\
@@ -480,12 +490,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/dbus-helper-search-path.patch		\
   %D%/packages/patches/devil-CVE-2009-3994.patch		\
   %D%/packages/patches/devil-fix-libpng.patch			\
-  %D%/packages/patches/diffutils-gets-undeclared.patch		\
   %D%/packages/patches/dfu-programmer-fix-libusb.patch		\
+  %D%/packages/patches/diffutils-gets-undeclared.patch		\
   %D%/packages/patches/doc++-include-directives.patch		\
   %D%/packages/patches/doc++-segfault-fix.patch			\
   %D%/packages/patches/doxygen-test.patch			\
-  %D%/packages/patches/dtc-add-missing-symbols-to-lds.patch     \
   %D%/packages/patches/duplicity-piped-password.patch		\
   %D%/packages/patches/duplicity-test_selection-tmp.patch	\
   %D%/packages/patches/elfutils-tests-ptrace.patch		\
@@ -507,7 +516,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/fasthenry-spFactor.patch			\
   %D%/packages/patches/findutils-localstatedir.patch		\
   %D%/packages/patches/findutils-test-xargs.patch		\
-  %D%/packages/patches/flashrom-use-libftdi1.patch		\
   %D%/packages/patches/flex-CVE-2016-6354.patch			\
   %D%/packages/patches/flint-ldconfig.patch			\
   %D%/packages/patches/fltk-shared-lib-defines.patch		\
@@ -537,6 +545,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/gmp-faulty-test.patch			\
   %D%/packages/patches/gnome-tweak-tool-search-paths.patch	\
   %D%/packages/patches/gnucash-price-quotes-perl.patch		\
+  %D%/packages/patches/gnupg-fix-expired-test.patch		\
   %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \
   %D%/packages/patches/gobject-introspection-cc.patch		\
   %D%/packages/patches/gobject-introspection-girepository.patch	\
@@ -552,14 +561,15 @@ dist_patch_DATA =						\
   %D%/packages/patches/guile-relocatable.patch			\
   %D%/packages/patches/guile-rsvg-pkgconfig.patch		\
   %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch	\
+  %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \
   %D%/packages/patches/gtk2-theme-paths.patch			\
   %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
+  %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/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-automake-1.15.patch		\
   %D%/packages/patches/hydra-disable-darcs-test.patch		\
   %D%/packages/patches/hypre-doc-tables.patch			\
   %D%/packages/patches/hypre-ldflags.patch			\
@@ -654,10 +664,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/libxslt-generated-ids.patch		\
   %D%/packages/patches/linux-pam-no-setfsuid.patch		\
   %D%/packages/patches/lirc-localstatedir.patch			\
+  %D%/packages/patches/llvm-for-extempore.patch			\
   %D%/packages/patches/lm-sensors-hwmon-attrs.patch		\
   %D%/packages/patches/lua-CVE-2014-5461.patch                      \
   %D%/packages/patches/lua-pkgconfig.patch                      \
   %D%/packages/patches/lua51-liblua-so.patch                    \
+  %D%/packages/patches/lua51-pkgconfig.patch                    \
   %D%/packages/patches/lua52-liblua-so.patch                    \
   %D%/packages/patches/luajit-no_ldconfig.patch			\
   %D%/packages/patches/luajit-symlinks.patch			\
@@ -677,11 +689,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/mplayer2-theora-fix.patch		\
   %D%/packages/patches/module-init-tools-moduledir.patch	\
   %D%/packages/patches/mumps-build-parallelism.patch		\
+  %D%/packages/patches/mupdf-build-with-openjpeg-2.1.patch	\
   %D%/packages/patches/mupdf-CVE-2016-6265.patch		\
   %D%/packages/patches/mupdf-CVE-2016-6525.patch		\
   %D%/packages/patches/mupen64plus-ui-console-notice.patch	\
   %D%/packages/patches/mutt-store-references.patch		\
-  %D%/packages/patches/mysql-fix-failing-test.patch		\
   %D%/packages/patches/nasm-no-ps-pdf.patch			\
   %D%/packages/patches/net-tools-bitrot.patch			\
   %D%/packages/patches/netcdf-config-date.patch			\
@@ -696,15 +708,20 @@ dist_patch_DATA =						\
   %D%/packages/patches/nvi-db4.patch				\
   %D%/packages/patches/ocaml-CVE-2015-8869.patch		\
   %D%/packages/patches/ocaml-findlib-make-install.patch	\
+  %D%/packages/patches/onionshare-fix-install-paths.patch		\
   %D%/packages/patches/openexr-missing-samples.patch		\
   %D%/packages/patches/openjpeg-CVE-2015-6581.patch		\
+  %D%/packages/patches/openjpeg-CVE-2016-5157.patch		\
+  %D%/packages/patches/openjpeg-CVE-2016-7163.patch		\
   %D%/packages/patches/openjpeg-use-after-free-fix.patch	\
   %D%/packages/patches/openssl-runpath.patch			\
+  %D%/packages/patches/openssl-1.1.0-c-rehash-in.patch		\
   %D%/packages/patches/openssl-c-rehash-in.patch		\
   %D%/packages/patches/openssl-CVE-2016-2177.patch		\
   %D%/packages/patches/openssl-CVE-2016-2178.patch		\
   %D%/packages/patches/orpheus-cast-errors-and-includes.patch	\
   %D%/packages/patches/ots-no-include-missing-file.patch	\
+  %D%/packages/patches/p7zip-remove-unused-code.patch		\
   %D%/packages/patches/patchelf-page-size.patch			\
   %D%/packages/patches/patchelf-rework-for-arm.patch		\
   %D%/packages/patches/patchutils-xfail-gendiff-tests.patch	\
@@ -730,6 +747,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/pinball-system-ltdl.patch		\
   %D%/packages/patches/pingus-sdl-libs-config.patch		\
   %D%/packages/patches/plink-1.07-unclobber-i.patch		\
+  %D%/packages/patches/plink-endian-detection.patch		\
   %D%/packages/patches/plotutils-libpng-jmpbuf.patch		\
   %D%/packages/patches/polkit-drop-test.patch			\
   %D%/packages/patches/portaudio-audacity-compat.patch		\
@@ -752,6 +770,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-3.4-fix-tests.patch		\
   %D%/packages/patches/python-3.5-fix-tests.patch		\
   %D%/packages/patches/python-dendropy-exclude-failing-tests.patch \
+  %D%/packages/patches/python-django-fix-testcase.patch		\
   %D%/packages/patches/python-fix-tests.patch			\
   %D%/packages/patches/python-ipython-inputhook-ctype.patch	\
   %D%/packages/patches/python-rarfile-fix-tests.patch		\
@@ -783,9 +802,13 @@ dist_patch_DATA =						\
   %D%/packages/patches/slim-session.patch			\
   %D%/packages/patches/slim-config.patch			\
   %D%/packages/patches/slim-sigusr1.patch			\
+  %D%/packages/patches/slock-CVE-2016-6866.patch		\
   %D%/packages/patches/slurm-configure-remove-nonfree-contribs.patch \
   %D%/packages/patches/soprano-find-clucene.patch		\
+  %D%/packages/patches/steghide-fixes.patch			\
   %D%/packages/patches/superlu-dist-scotchmetis.patch		\
+  %D%/packages/patches/swish-e-search.patch			\
+  %D%/packages/patches/swish-e-format-security.patch		\
   %D%/packages/patches/synfig-build-fix.patch			\
   %D%/packages/patches/t1lib-CVE-2010-2642.patch		\
   %D%/packages/patches/t1lib-CVE-2011-0764.patch		\
diff --git a/gnu/packages.scm b/gnu/packages.scm
index 68a9eef2ad..f55c294a18 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -305,8 +305,15 @@ return its return value."
      (when fallback?
        (warning (_ "deprecated NAME-VERSION syntax; \
 use NAME@VERSION instead~%")))
-     pkg)
-    (_
+
+     (match (package-superseded pkg)
+       ((? package? new)
+        (info (_ "package '~a' has been superseded by '~a'~%")
+              (package-name pkg) (package-name new))
+        new)
+       (#f
+        pkg)))
+    (x
      (if version
          (leave (_ "~A: package not found for version ~a~%") name version)
          (if (not fallback?)
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 0a16640909..6d298843c3 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2016 John J. Foerch <jjfoerch@earthlink.net>
 ;;; Coypright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Coypright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Coypright © 2016 John Darrington <jmd@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,6 +75,7 @@
   #:use-module (gnu packages man)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages mit-krb5)
   #:use-module (gnu packages gtk))
 
 (define-public aide
@@ -239,7 +241,9 @@ re-executing them as necessary.")
               (base32
                "05n65k4ixl85dc6rxc51b1b732gnmm8xnqi424dy9f1nz7ppb3xy"))))
     (build-system gnu-build-system)
-    (arguments `(;; FIXME: `tftp.sh' relies on `netstat' from utils-linux,
+    (arguments `(#:configure-flags '("--localstatedir=/var")
+
+                 ;; FIXME: `tftp.sh' relies on `netstat' from utils-linux,
                  ;; which is currently missing.
                  #:tests? #f))
     (inputs `(("ncurses" ,ncurses)
@@ -454,8 +458,8 @@ connection alive.")
   (let* ((bind-major-version "9")
          (bind-minor-version "9")
          (bind-patch-version "9")
-         (bind-release-type "")         ; for patch release, use "-P"
-         (bind-release-version "")      ; for patch release, e.g. "4"
+         (bind-release-type "-P")         ; for patch release, use "-P"
+         (bind-release-version "3")      ; for patch release, e.g. "4"
          (bind-version (string-append bind-major-version
                                       "."
                                       bind-minor-version
@@ -571,7 +575,7 @@ connection alive.")
                                         "/bind-" bind-version ".tar.gz"))
                     (sha256
                      (base32
-                      "0w8qqm6p2y6x57j2l0a3278g173wd84dsr4py9z00191f3wra74q"))))
+                      "1qlii6syr491yjn6kpyqknlvbsrkwlsqa0grmmfbq1g3471fyfyn"))))
 
                 ;; When cross-compiling, we need the cross Coreutils and sed.
                 ;; Otherwise just use those from %FINAL-INPUTS.
@@ -731,15 +735,34 @@ over ssh connections.")
                    "true")))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags (list (string-append "ROTT_ETCDIR="
-                                              (assoc-ref %outputs "out")
-                                              "/etc")
+     '(#:configure-flags (list "ROTT_ETCDIR=/etc/rottlog" ;rc file location
                                "--localstatedir=/var")
-       #:phases (alist-cons-after
-                 'install 'install-info
-                 (lambda _
-                   (zero? (system* "make" "install-info")))
-                 %standard-phases)))
+
+       ;; Install example config files in OUT/etc.
+       #:make-flags (list (string-append "ROTT_ETCDIR="
+                                         (assoc-ref %outputs "out")
+                                         "/etc"))
+
+       #:phases (modify-phases %standard-phases
+                  (add-after 'build 'set-packdir
+                    (lambda _
+                      ;; Set a default location for archived logs.
+                      (substitute* "rc/rc"
+                        (("packdir=\"\"")
+                         "packdir=\"/var/log\""))
+                      #t))
+                  (add-before 'install 'tweak-rc-weekly
+                    (lambda _
+                      (substitute* "rc/weekly"
+                        (("/bin/kill")
+                         (which "kill"))
+                        (("syslogd\\.pid")
+                         ;; The file is called 'syslog.pid' (no 'd').
+                         "syslog.pid"))
+                      #t))
+                  (add-after 'install 'install-info
+                    (lambda _
+                      (zero? (system* "make" "install-info")))))))
     (native-inputs `(("texinfo" ,texinfo)
                      ("util-linux" ,util-linux))) ; for 'cal'
     (home-page "http://www.gnu.org/software/rottlog/")
@@ -1440,9 +1463,9 @@ limits.")
                           `("PYTHONPATH" ":" prefix (,py)))
                         #t))))))
     (home-page "https://github.com/wting/autojump")
-    (synopsis "Shell extension for filesystem navigation")
+    (synopsis "Shell extension for file system navigation")
     (description
-     "Autojump provides a faster way to navigate your filesystem, with a \"cd
+     "Autojump provides a faster way to navigate your file system, with a \"cd
 command that learns\".  It works by maintaining a database of the directories
 you use the most from the command line and allows you to \"jump\" to
 frequently used directories by typing only a small pattern.")
@@ -1771,3 +1794,55 @@ the status of your battery in the system tray.")
 shortcut syntax and completion options.")
       (home-page "https://github.com/TrilbyWhite/interrobang")
       (license license:gpl3+))))
+
+
+
+(define-public pam-krb5
+  (package
+    (name "pam-krb5")
+    (version "4.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://archives.eyrie.org/software/kerberos/" name "-"
+                    version ".tar.xz"))
+              (sha256
+               (base32
+                "0abf8cfpkprmhw5ca8iyqgrggh65lgqvmfllc1y6qz7zw1gas894"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'disable-tests
+           (lambda _
+             ;; The build container seems to interfere with some tests.
+             (substitute* "tests/TESTS"
+               (("module/basic\n")  ""))
+             (substitute* "tests/TESTS"
+               (("pam-util/vector\n")  ""))
+             #t)))))
+    (inputs
+     `(("linux-pam" ,linux-pam)
+       ("mit-krb5" ,mit-krb5)))
+    (native-inputs
+     `(("perl" ,perl)
+       ("perl-test-pod" ,perl-test-pod))) ; required for tests
+    (synopsis "Kerberos PAM module")
+    (description
+     "Pam-krb5 is a Kerberos PAM module for either MIT Kerberos or Heimdal.
+It supports ticket refreshing by screen savers, configurable
+authorization handling, authentication of non-local accounts for network
+services, password changing, and password expiration, as well as all the
+standard expected PAM features.  It works correctly with OpenSSH, even
+with ChallengeResponseAuthentication and PrivilegeSeparation enabled,
+and supports extensive configuration either by PAM options or in
+krb5.conf or both.  PKINIT is supported with recent versions of both MIT
+Kerberos and Heimdal and FAST is supported with recent MIT Kerberos.")
+    (home-page "http://www.eyrie.org/~eagle/software/pam-krb5")
+    ;; Dual licenced under  a homebrew non-copyleft OR GPL (any version)
+    ;; However, the tarball does not contain a copy of the GPL,  so unless
+    ;; we put one in, we cannot distribute it under GPL without violating
+    ;; clause requiring us to give all recipients a copy.
+    (license license:gpl1+)))
+
+;;http://archives.eyrie.org/software/kerberos/pam-krb5-4.7.tar.xz
diff --git a/gnu/packages/adns.scm b/gnu/packages/adns.scm
index 81e51d8eb2..29d3fa26e3 100644
--- a/gnu/packages/adns.scm
+++ b/gnu/packages/adns.scm
@@ -59,19 +59,19 @@ scripts.")
 (define-public c-ares
   (package
     (name "c-ares")
-    (version "1.11.0")
+    (version "1.12.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://c-ares.haxx.se/download/" name "-" version
+                    "https://c-ares.haxx.se/download/" name "-" version
                     ".tar.gz"))
               (sha256
                (base32
-                "1z9y1f835dpi1ka2a2vzjygm3djdvr01036ml4l2js6r2xk2wqdk"))))
+                "1yv5ygkd813glz8hbagykgp1hlb6450chig061hr7pyw7i0gk4l6"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://c-ares.haxx.se/")
+    (home-page "https://c-ares.haxx.se/")
     (synopsis "C library for asynchronous DNS requests")
     (description
       "C-ares is a C library that performs DNS requests and name resolution
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 0f492eba5f..016f52db19 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -202,7 +202,7 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
 (define-public giac-xcas
   (package
     (name "giac-xcas")
-    (version "1.2.2-75")
+    (version "1.2.2-81")
     (source (origin
               (method url-fetch)
               ;; "~parisse/giac" is not used because the maintainer regularly
@@ -214,7 +214,7 @@ GP2C, the GP to C compiler, translates GP scripts to PARI programs.")
                                   "source/giac_" version ".tar.gz"))
               (sha256
                (base32
-                "0vs111fkd900wkm7yypaxmplc8i8j63d9shc3fbdhddn7cdj70b1"))))
+                "0jwlx8b97zkly9gcbdfbj4mzyn21dbg1kgpw7j7vqs380jryzgfs"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -505,6 +505,32 @@ syntax is similar to that of C, so basic usage is familiar.  It also includes
 \"dc\", a reverse-polish calculator.")
     (license license:gpl2+)))
 
+;; The original kiss-fft does not have a complete build system and does not
+;; build any shared libraries.  This is a fork used by Extempore.
+(define-public kiss-fft-for-extempore
+  (package
+    (name "kiss-fft-for-extempore")
+    (version "1.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/extemporelang/kiss_fft/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0hkp9l6l4c92fb1l2sh6a6zv1hynpvb2s4d03vd8vxyvybc0l4pv"))))
+    (build-system cmake-build-system)
+    (arguments `(#:tests? #f)) ; no tests included
+    ;; Extempore refuses to build on architectures other than x86_64
+    (supported-systems '("x86_64-linux"))
+    (home-page "https://github.com/extemporelang/kiss_fft")
+    (synopsis "Mixed-radix Fast Fourier Transform")
+    (description
+     "Kiss FFT attempts to be a reasonably efficient, moderately useful FFT
+that can use fixed or floating data types and can easily be incorporated into
+a C program.")
+    (license license:bsd-3)))
+
 (define-public fftw
   (package
     (name "fftw")
diff --git a/gnu/packages/animation.scm b/gnu/packages/animation.scm
index 077657937d..8de1fbfaa8 100644
--- a/gnu/packages/animation.scm
+++ b/gnu/packages/animation.scm
@@ -91,6 +91,11 @@ C++ @dfn{Standard Template Library} (STL).")
             (substitute* "src/modules/mod_svg/svg_parser.cpp"
               (("xmlpp::Node::NodeList") "xmlpp::Node::const_NodeList"))
             #t))
+         (add-after 'unpack 'fix-isnan-error
+           (lambda _
+             (substitute* "src/synfig/time.cpp"
+               (("return !::isnan") "return !std::isnan"))
+             #t))
          (add-before 'configure 'set-flags
           (lambda _
             ;; Compile with C++11, required by libsigc++.
diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
index eaf1598096..0c29a39a54 100644
--- a/gnu/packages/astronomy.scm
+++ b/gnu/packages/astronomy.scm
@@ -43,7 +43,8 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-paths
            (lambda _
-             (substitute* "Makefile.in" (("/bin/") "")))))))
+             (substitute* "Makefile.in" (("/bin/") ""))
+             #t)))))
     (home-page "http://heasarc.gsfc.nasa.gov/fitsio/fitsio.html")
     (synopsis "Library for reading and writing FITS files")
     (description "CFITSIO provides simple high-level routines for reading and
@@ -62,7 +63,8 @@ in FITS files.")
      (origin
        (method url-fetch)
        (uri (string-append
-             "ftp://ftp.atnf.csiro.au/pub/software/wcslib/" name "-" version ".tar.bz2"))
+             "ftp://ftp.atnf.csiro.au/pub/software/wcslib/" name "-" version
+             ".tar.bz2"))
        (sha256
         (base32 "1s2nig327g4bimd9xshlk11ww09a7mrjmsbpdcd8smsmn2kl1glb"))))
     (inputs
@@ -73,7 +75,8 @@ in FITS files.")
                   (add-before 'configure 'patch-/bin/sh
                     (lambda _
                       (substitute* "makedefs.in"
-                        (("/bin/sh") "sh")))))))
+                        (("/bin/sh") "sh"))
+                      #t)))))
     (home-page "http://www.atnf.csiro.au/people/mcalabre/WCS")
     (synopsis "Library which implements the FITS WCS standard")
     (description "The FITS \"World Coordinate System\" (WCS) standard defines
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 594b8d005b..39ecc52d8b 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -6,6 +6,8 @@
 ;;; Copyright © 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -177,7 +179,7 @@ streams from live audio.")
 (define-public ardour
   (package
     (name "ardour")
-    (version "5.0")
+    (version "5.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -191,14 +193,15 @@ streams from live audio.")
                     "libs/ardour/revision.cc"
                   (lambda (port)
                     (format port "#include \"ardour/revision.h\"
-namespace ARDOUR { const char* revision = \"5.0-10-g23d1d1f\" ; }"))))
+namespace ARDOUR { const char* revision = \"5.3\" ; }"))))
               (sha256
                (base32
-                "0ihd6zxha1vvp4jy5s49pqyw09qxxjgrdlslrkz6ll59zdh6x7am"))
+                "0xdyc3syxg4drg7rafadhlrn6nycg169ay6q5xhga19kcwy6qmqm"))
               (file-name (string-append name "-" version))))
     (build-system waf-build-system)
     (arguments
-     `(#:configure-flags '("--cxx11") ; required by gtkmm
+     `(#:configure-flags '("--cxx11"          ; required by gtkmm
+                           "--no-phone-home") ; don't contact ardour.org
        #:phases
        (modify-phases %standard-phases
          (add-after
@@ -264,12 +267,15 @@ engineers, musicians, soundtrack editors and composers.")
                                   ".tar.bz2"))
               (sha256
                (base32
-                "18mdw6nc0vgj6k9rsy0x8w64wvzld0frqshrxxbxfj9qi9843vlc"))))
+                "18mdw6nc0vgj6k9rsy0x8w64wvzld0frqshrxxbxfj9qi9843vlc"))
+              (patches (search-patches "azr3.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no check target
        #:make-flags
        (list "LV2PEG=ttl2c"
+             "CXXFLAGS=-std=gnu++11"
+             "CFLAGS=-std=gnu++11"
              (string-append "prefix=" %output)
              (string-append "pkgdatadir=" %output "/share/azr3-jack"))))
     (inputs
@@ -1467,7 +1473,7 @@ lv2-c++-tools.")
 (define-public openal
   (package
     (name "openal")
-    (version "1.15.1")
+    (version "1.17.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1475,7 +1481,7 @@ lv2-c++-tools.")
                     version ".tar.bz2"))
               (sha256
                (base32
-                "0mmhdqiyb3c9dzvxspm8h2v8jibhi8pfjxnf6m0wn744y1ia2a8f"))))
+                "051k5fy8pk4fd9ha3qaqcv08xwbks09xl5qs4ijqq2qz5xaghhd3"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f  ; no check target
@@ -1511,6 +1517,32 @@ buffers, and audio capture.")
     (home-page "http://kcat.strangesoft.net/openal.html")
     (license license:lgpl2.0+)))
 
+(define-public freealut
+  (package
+    (name "freealut")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              ;; Upstream url is unclear, many systems use Fedora, there is also
+              ;; https://github.com/vancegroup/freealut though the status of it
+              ;; (official? unofficial?) is not clear.
+              (uri (string-append
+                    "https://pkgs.fedoraproject.org/repo/pkgs/" name "/" name "-"
+                    version ".tar.gz" "/e089b28a0267faabdb6c079ee173664a/" name
+                    "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0kzlil6112x2429nw6mycmif8y6bxr2cwjcvp18vh6s7g63ymlb0"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))  ; no check target
+    (inputs
+     `(("openal" ,openal)))
+    (synopsis "Free implementation of OpenAL's ALUT standard")
+    (description "freealut is the OpenAL Utility Toolkit.")
+    (home-page "http://kcat.strangesoft.net/openal.html")
+    (license license:lgpl2.0)))
+
 (define-public patchage
   (package
     (name "patchage")
@@ -2456,3 +2488,80 @@ with support for HD extensions.")
 flavors EBU R128, ATSC A/85, and ReplayGain 2.0.  It helps normalizing the
 loudness of audio and video files to the same level.")
     (license license:gpl2+)))
+
+(define-public filteraudio
+  (let ((revision "1")
+        (commit "2fc669581e2a0ff87fba8de85861b49133306094"))
+    (package
+      (name "filteraudio")
+      (version (string-append "0.0.0-" revision "."
+                              (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/irungentoo/filter_audio.git")
+               (commit commit)))
+         (file-name (string-append name "-" version "-checkout"))
+         (sha256
+          (base32
+           "0hbb290n3wb23f2k692a6bhc23nnqmxqi9sc9j15pnya8wifw64g"))))
+      (build-system gnu-build-system)
+      (arguments
+       '(#:make-flags (list (string-append "PREFIX=" %output)
+                            "CC=gcc")
+         #:tests? #f ; No tests
+         #:phases
+         (modify-phases %standard-phases
+           ;; No configure script
+           (delete 'configure))))
+      (synopsis "Lightweight audio filtering library")
+      (description "An easy to use audio filtering library made from webrtc
+code, used in @code{libtoxcore}.")
+      (home-page "https://github.com/irungentoo/filter_audio")
+      (license license:bsd-3))))
+
+(define-public gsm
+  (package
+    (name "gsm")
+    (version "1.0.14")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append "http://www.quut.com/" name "/" name
+                       "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0b1mx69jq88wva3wk0hi6fcl5a52qhnq2f9p3f3jdh5k61ma252q"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "tst"
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'pre-install
+           (lambda _
+             (let ((out (assoc-ref %outputs "out")))
+               (substitute* "Makefile"
+                 (("INSTALL_ROOT\t=")
+                  (string-append "INSTALL_ROOT\t=\t" out)))
+               (mkdir-p (string-append out "/inc"))
+               (mkdir-p (string-append out "/man"))
+               (mkdir-p (string-append out "/man/man1"))
+               (mkdir-p (string-append out "/man/man3"))
+               (mkdir-p (string-append out "/bin"))
+               (mkdir-p (string-append out "/lib")))))
+         (add-after 'install 'post-install
+           (lambda _
+             (let ((out (assoc-ref %outputs "out")))
+               (rename-file (string-append out "/inc")
+                            (string-append out "/include"))
+               (mkdir-p (string-append out "/include/gsm"))
+               (copy-recursively "inc"
+                                 (string-append out "/include/gsm")))))
+         (delete 'configure))))
+    (synopsis "GSM 06.10 lossy speech compression library")
+    (description "This C library provides an encoder and a decoder for the GSM
+06.10 RPE-LTP lossy speech compression algorithm.")
+    (home-page "http://quut.com/gsm/")
+    (license (license:non-copyleft "file://COPYRIGHT"))))
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 21ed0e6179..72492e70eb 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -163,7 +163,7 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
 (define-public autoconf-archive
   (package
     (name "autoconf-archive")
-    (version "2016.03.20")
+    (version "2016.09.16")
     (source
      (origin
       (method url-fetch)
@@ -171,7 +171,7 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
                           version ".tar.xz"))
       (sha256
        (base32
-        "0dz4fnc723jqn3by22ds5fys7g31apzm1r9allldvva0yvzjxyw8"))))
+        "10mxz9hfnfz66m1l9s28sbyfb9a04akz92wkyv9blhpq6p9fzwp8"))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/autoconf-archive")
     (synopsis "Collection of freely reusable Autoconf macros")
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index dcab95fa28..c6f1321d77 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -28,6 +28,7 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
@@ -99,6 +100,42 @@ uses GnuPG to encrypt and/or sign these archives, they will be safe from
 spying and/or modification by the server.")
     (license license:gpl2+)))
 
+(define-public par2cmdline
+  (package
+    (name "par2cmdline")
+    (version "0.6.14")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/Parchive/par2cmdline/archive/v"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ykfb7ar0x0flfdgf6i8xphyv5b93dalbjj2jb6hx7sdjax33n1g"))
+              ;; This test merely needs a file to test recovery on, but
+              ;; /dev/random is essentially /dev/urandom plus minimum entropy
+              ;; locking, making the test hang indefinitely. This change is
+              ;; already upstream: remove on upgrade to future 0.6.15.
+              ;; https://github.com/Parchive/par2cmdline/commit/27723a678f780da82c79b98592592009c779a4fb
+              (modules '((guix build utils)))
+              (snippet
+               '(substitute* "tests/test20" (("if=/dev/random") "if=/dev/urandom")))))
+    (native-inputs
+     `(("automake" ,automake)
+       ("autoconf" ,autoconf)))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'autoreconf
+           (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
+    (synopsis "File verification and repair tool")
+    (description "Par2cmdline is a tool for generating RAID-like PAR2 recovery
+files using Reed-Solomon coding.  PAR2 files can be stored along side backups
+or distributed files for recovering from bitrot.")
+    (home-page "https://github.com/Parchive/par2cmdline")
+    (license license:gpl3+)))
+
 (define-public hdup
   (package
     (name "hdup")
@@ -321,48 +358,6 @@ to a remote location, and only the differences will be transmitted.  Finally,
 rdiff-backup is easy to use and settings have sensible defaults.")
     (license license:gpl2+)))
 
-(define-public attic
-  (package
-    (name "attic")
-    (version "0.16")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://pypi.python.org/packages/source/A/Attic/Attic-"
-                    version ".tar.gz"))
-              (sha256
-               (base32
-                "0b5skd36r4c0915lwpkqg5hxm49gls9pprs1b7hc40910wlcsl36"))))
-    (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before
-          'build 'set-openssl-prefix
-          (lambda* (#:key inputs #:allow-other-keys)
-            (setenv "ATTIC_OPENSSL_PREFIX" (assoc-ref inputs "openssl"))
-            #t)))))
-    (inputs
-     `(("acl" ,acl)
-       ("openssl" ,openssl)
-       ("python-msgpack" ,python-msgpack)
-
-       ;; Attic is probably incompatible with llfuse > 0.41.
-       ;; These links are to discussions of llfuse compatibility from
-       ;; the borg project. Borg is a recent fork of attic, and attic
-       ;; has not been updated since the fork, so it's likely that
-       ;; llfuse compatibility requirements are still the same.
-       ;; https://github.com/borgbackup/borg/issues/642
-       ;; https://github.com/borgbackup/borg/issues/643
-       ("python-llfuse" ,python-llfuse-0.41)))
-    (synopsis "Deduplicating backup program")
-    (description "Attic is a deduplicating backup program.  The main goal of
-Attic is to provide an efficient and secure way to backup data.  The data
-deduplication technique used makes Attic suitable for daily backups since only
-changes are stored.")
-    (home-page "https://attic-backup.org/")
-    (license license:bsd-3)))
-
 (define-public libchop
   (package
     (name "libchop")
@@ -410,10 +405,13 @@ detection, and lossless compression.")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "borgbackup" version))
-
               (sha256
                (base32
-                "1l9iw55w5x51yxl3q89cf6avg80lajxvc8qz584hrsmnk6i56cr0"))))
+                "1l9iw55w5x51yxl3q89cf6avg80lajxvc8qz584hrsmnk6i56cr0"))
+              (modules '((guix build utils)))
+              (snippet
+               '(for-each
+                  delete-file (find-files "borg" "^(c|h|p).*\\.c$")))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -437,7 +435,8 @@ detection, and lossless compression.")
                    (install-file "docs/_build/man/borg.1" man)
                    #t))))))))
     (native-inputs
-     `(("python-setuptools-scm" ,python-setuptools-scm)
+     `(("python-cython" ,python-cython)
+       ("python-setuptools-scm" ,python-setuptools-scm)
        ;; For generating the documentation.
        ("python-sphinx" ,python-sphinx)
        ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)))
@@ -456,3 +455,46 @@ stored.  The authenticated encryption technique makes it suitable for backups
 to not fully trusted targets.  Borg is a fork of Attic.")
     (home-page "https://borgbackup.github.io/borgbackup/")
     (license license:bsd-3)))
+
+(define-public attic
+  (package
+    (name "attic")
+    (version "0.16")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://pypi.python.org/packages/source/A/Attic/Attic-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0b5skd36r4c0915lwpkqg5hxm49gls9pprs1b7hc40910wlcsl36"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before
+          'build 'set-openssl-prefix
+          (lambda* (#:key inputs #:allow-other-keys)
+            (setenv "ATTIC_OPENSSL_PREFIX" (assoc-ref inputs "openssl"))
+            #t)))))
+    (inputs
+     `(("acl" ,acl)
+       ("openssl" ,openssl)
+       ("python-msgpack" ,python-msgpack)
+
+       ;; Attic is probably incompatible with llfuse > 0.41.
+       ;; These links are to discussions of llfuse compatibility from
+       ;; the borg project. Borg is a recent fork of attic, and attic
+       ;; has not been updated since the fork, so it's likely that
+       ;; llfuse compatibility requirements are still the same.
+       ;; https://github.com/borgbackup/borg/issues/642
+       ;; https://github.com/borgbackup/borg/issues/643
+       ("python-llfuse" ,python-llfuse-0.41)))
+    (synopsis "Deduplicating backup program")
+    (description "Attic is a deduplicating backup program.  The main goal of
+Attic is to provide an efficient and secure way to backup data.  The data
+deduplication technique used makes Attic suitable for daily backups since only
+changes are stored.")
+    (home-page "https://attic-backup.org/")
+    (license license:bsd-3)
+    (properties `((superseded . ,borg)))))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 08c25459c0..3cf1ffcd1f 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -76,6 +76,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages ruby)
+  #:use-module (gnu packages serialization)
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages tbb)
   #:use-module (gnu packages tex)
@@ -141,17 +142,17 @@ structure of the predicted RNA.")
 (define-public bamm
   (package
     (name "bamm")
-    (version "1.7.2a")
+    (version "1.7.3")
     (source (origin
               (method url-fetch)
               ;; BamM is not available on pypi.
               (uri (string-append
-                    "https://github.com/Ecogenomics/BamM/archive/v"
+                    "https://github.com/Ecogenomics/BamM/archive/"
                     version ".tar.gz"))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0nb20yml39f8fh0cahpjywsl91irh9yskig549c17xkrkl74czsq"))
+                "1f35yxp4pc8aadsvbpg6r4kg2jh4fkjci0iby4iyljm6980sac0s"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -264,6 +265,64 @@ instance, it implements several methods to assess contig-wise read coverage.")
 BAM files.")
     (license license:expat)))
 
+(define-public bcftools
+  (package
+    (name "bcftools")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/samtools/bcftools/releases/download/"
+                    version "/bcftools-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "095ry68vmz9q5s1scjsa698dhgyvgw5aicz24c19iwfbai07mhqj"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Delete bundled htslib.
+               '(delete-file-recursively "htslib-1.3.1"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (list
+        "USE_GPL=1"
+        (string-append "prefix=" (assoc-ref %outputs "out"))
+        (string-append "HTSDIR=" (assoc-ref %build-inputs "htslib") "/include")
+        (string-append "HTSLIB=" (assoc-ref %build-inputs "htslib") "/lib/libhts.a")
+        (string-append "BGZIP=" (assoc-ref %build-inputs "htslib") "/bin/bgzip")
+        (string-append "TABIX=" (assoc-ref %build-inputs "htslib") "/bin/tabix"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-Makefile
+           (lambda _
+             (substitute* "Makefile"
+               ;; Do not attempt to build htslib.
+               (("^include \\$\\(HTSDIR\\)/htslib\\.mk") "")
+               ;; Link against GSL cblas.
+               (("-lcblas") "-lgslcblas"))
+             #t))
+         (delete 'configure)
+         (add-before 'check 'patch-tests
+           (lambda _
+             (substitute* "test/test.pl"
+               (("/bin/bash") (which "bash")))
+             #t)))))
+    (native-inputs
+     `(("htslib" ,htslib)
+       ("perl" ,perl)))
+    (inputs
+     `(("gsl" ,gsl)
+       ("zlib" ,zlib)))
+    (home-page "https://samtools.github.io/bcftools/")
+    (synopsis "Utilities for variant calling and manipulating VCFs and BCFs")
+    (description
+     "BCFtools is a set of utilities that manipulate variant calls in the
+Variant Call Format (VCF) and its binary counterpart BCF.  All commands work
+transparently with both VCFs and BCFs, both uncompressed and BGZF-compressed.")
+    ;; The sources are dual MIT/GPL, but becomes GPL-only when USE_GPL=1.
+    (license (list license:gpl3+ license:expat))))
+
 (define-public bedops
   (package
     (name "bedops")
@@ -496,7 +555,7 @@ Python.")
       (base32
        "1n25w3p1rixbpac8iysmzcja6m4ip5r6sz19l8y6wlwi49hxn278"))))
    (build-system python-build-system)
-   (inputs
+   (propagated-inputs
     `(("python-numpy" ,python-numpy)
       ("python-scipy" ,python-scipy)
       ("python-future" ,python-future)
@@ -593,19 +652,23 @@ provide a coordinated and extensible framework to do computational biology.")
 (define-public python-biopython
   (package
     (name "python-biopython")
-    (version "1.66")
+    (version "1.68")
     (source (origin
               (method url-fetch)
               ;; use PyPi rather than biopython.org to ease updating
               (uri (pypi-uri "biopython" version))
               (sha256
                (base32
-                "1gdv92593klimg22icf5j9by7xiq86jnwzkpz4abaa05ylkdf6hp"))))
+                "07qc7nz0k77y8hf8s18rscvibvm91zw0kkq7ylrhisf8vp8hkp6i"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-home
+           ;; Some tests require a home directory to be set.
+           (lambda _ (setenv "HOME" "/tmp") #t)))))
     (inputs
      `(("python-numpy" ,python-numpy)))
-    (native-inputs
-     `(("python-setuptools" ,python2-setuptools)))
     (home-page "http://biopython.org/")
     (synopsis "Tools for biological computation in Python")
     (description
@@ -615,12 +678,29 @@ bioinformatics programs; a standard sequence class and tools for performing
 common operations on them; code to perform data classification; code for
 dealing with alignments; code making it easy to split up parallelizable tasks
 into separate processes; and more.")
-    (license (license:non-copyleft "http://www.biopython.org/DIST/LICENSE"))))
+    (license (license:non-copyleft "http://www.biopython.org/DIST/LICENSE"))
+    (properties `((python2-variant . ,(delay python2-biopython))))))
 
 (define-public python2-biopython
-  (package (inherit (package-with-python2 python-biopython))
-    (inputs
-     `(("python2-numpy" ,python2-numpy)))))
+  (let ((base (package-with-python2 (strip-python2-variant python-biopython))))
+    (package
+      (inherit base)
+      (native-inputs `(("python2-setuptools" ,python2-setuptools)
+                       ,@(package-native-inputs base))))))
+
+;; An outdated version of biopython is required for seqmagick, see
+;; https://github.com/fhcrc/seqmagick/issues/59
+;; When that issue has been resolved this package should be removed.
+(define python2-biopython-1.66
+  (package
+    (inherit python2-biopython)
+    (version "1.66")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "biopython" version))
+              (sha256
+               (base32
+                "1gdv92593klimg22icf5j9by7xiq86jnwzkpz4abaa05ylkdf6hp"))))))
 
 (define-public bpp-core
   ;; The last release was in 2014 and the recommended way to install from source
@@ -1033,7 +1113,7 @@ errors at the end of reads.")
 (define-public bowtie
   (package
     (name "bowtie")
-    (version "2.2.6")
+    (version "2.2.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/BenLangmead/bowtie2/archive/v"
@@ -1041,7 +1121,7 @@ errors at the end of reads.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1ssfvymxfrap6f9pf86s9bvsbqdgka4abr2r7j3mgr4w1l289m86"))
+                "1vp5db8i7is57iwjybcdg18f5ivyzlj5g1ix1nlvxainzivhz55g"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "Makefile"
@@ -1268,29 +1348,64 @@ multiple sequence alignments.")
 (define-public python-pysam
   (package
     (name "python-pysam")
-    (version "0.8.4")
+    (version "0.9.1.4")
     (source (origin
               (method url-fetch)
-              (uri (pypi-uri "pysam" version))
+              ;; Test data is missing on PyPi.
+              (uri (string-append
+                    "https://github.com/pysam-developers/pysam/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1slx5mb94mzm5qzk52q270sab0sar95j67w1g1k452nz3s9j7krh"))))
+                "0y41ssbg6nvn2jgcbnrvkzblpjcwszaiv1rgyd8dwzjkrbfsgsmc"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Drop bundled htslib. TODO: Also remove samtools and bcftools.
+               '(delete-file-recursively "htslib"))))
     (build-system python-build-system)
     (arguments
-     `(#:tests? #f ; tests are excluded in the manifest
-       #:phases
-       (alist-cons-before
-        'build 'set-flags
-        (lambda _
-          (setenv "LDFLAGS" "-lncurses")
-          (setenv "CFLAGS" "-D_CURSES_LIB=1"))
-        %standard-phases)))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'set-flags
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "HTSLIB_MODE" "external")
+             (setenv "HTSLIB_LIBRARY_DIR"
+                     (string-append (assoc-ref inputs "htslib") "/lib"))
+             (setenv "HTSLIB_INCLUDE_DIR"
+                     (string-append (assoc-ref inputs "htslib") "/include"))
+             (setenv "LDFLAGS" "-lncurses")
+             (setenv "CFLAGS" "-D_CURSES_LIB=1")
+             #t))
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (setenv "PYTHONPATH"
+                     (string-append
+                      (getenv "PYTHONPATH")
+                      ":" (assoc-ref outputs "out")
+                      "/lib/python"
+                      (string-take (string-take-right
+                                    (assoc-ref inputs "python") 5) 3)
+                      "/site-packages"))
+             ;; Step out of source dir so python does not import from CWD.
+             (chdir "tests")
+             (setenv "HOME" "/tmp")
+             (and (zero? (system* "make" "-C" "pysam_data"))
+                  (zero? (system* "make" "-C" "cbcf_data"))
+                  (zero? (system* "nosetests" "-v"))))))))
+    (propagated-inputs
+     `(("htslib"            ,htslib))) ; Included from installed header files.
     (inputs
      `(("ncurses"           ,ncurses)
        ("zlib"              ,zlib)))
     (native-inputs
      `(("python-cython"     ,python-cython)
-       ("python-setuptools" ,python-setuptools)))
+       ("python-setuptools" ,python-setuptools)
+       ;; Dependencies below are are for tests only.
+       ("samtools"          ,samtools)
+       ("bcftools"          ,bcftools)
+       ("python-nose"       ,python-nose)))
     (home-page "https://github.com/pysam-developers/pysam")
     (synopsis "Python bindings to the SAMtools C API")
     (description
@@ -1333,13 +1448,13 @@ UCSC genome browser.")
 (define-public python-plastid
   (package
     (name "python-plastid")
-    (version "0.4.5")
+    (version "0.4.6")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "plastid" version))
               (sha256
                (base32
-                "1nhxw8a5gn9as58i2ih52c5cjwj48ik418pzsjwph3s66mmy9yvq"))))
+                "1sqkz5d3b9kf688mp7k771c87ins42j7j0whmkb49cb3fsg8s8lj"))))
     (properties `((python2-variant . ,(delay python2-plastid))))
     (build-system python-build-system)
     (arguments
@@ -1352,7 +1467,8 @@ UCSC genome browser.")
        ("python-pysam" ,python-pysam)
        ("python-matplotlib" ,python-matplotlib)
        ("python-biopython" ,python-biopython)
-       ("python-twobitreader" ,python-twobitreader)))
+       ("python-twobitreader" ,python-twobitreader)
+       ("python-termcolor" ,python-termcolor)))
     (native-inputs
      `(("python-cython" ,python-cython)
        ("python-nose" ,python-nose)))
@@ -1903,7 +2019,7 @@ identify enrichments with functional annotations of the genome.")
 (define-public diamond
   (package
     (name "diamond")
-    (version "0.8.20")
+    (version "0.8.22")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1912,7 +2028,7 @@ identify enrichments with functional annotations of the genome.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "16bhwpxqzq2nfkh9522rwcc1p97ygszjmhphz69x2jk501jf9wkg"))))
+                "0lbqa07c5z8pr4dvdrc14rqc4311kq69j1ldry9glfc8hg3x1kd1"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no "check" target
@@ -2846,6 +2962,8 @@ DNA sequences.  It outputs its k-mer counts in a binary format, which can be
 translated into a human-readable text format using the @code{jellyfish dump}
 command, or queried for specific k-mers with @code{jellyfish query}.")
     (home-page "http://www.genome.umd.edu/jellyfish.html")
+    ;; From their website: JELLYFISH runs on 64-bit Intel-compatible processors
+    (supported-systems '("x86_64-linux"))
     ;; The combined work is published under the GPLv3 or later.  Individual
     ;; files such as lib/jsoncpp.cpp are released under the Expat license.
     (license (list license:gpl3+ license:expat))))
@@ -3046,6 +3164,62 @@ sequences).")
               "http://mafft.cbrc.jp/alignment/software/license.txt"
               "BSD-3 with different formatting"))))
 
+(define-public mash
+  (package
+    (name "mash")
+    (version "1.1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/marbl/mash/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "08znbvqq5xknfhmpp3wcj574zvi4p7i8zifi67c9qw9a6ikp42fj"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Delete bundled kseq.
+               ;; TODO: Also delete bundled murmurhash and open bloom filter.
+               '(delete-file "src/mash/kseq.h"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No tests.
+       #:configure-flags
+       (list
+        (string-append "--with-capnp=" (assoc-ref %build-inputs "capnproto"))
+        (string-append "--with-gsl=" (assoc-ref %build-inputs "gsl")))
+       #:make-flags (list "CC=gcc")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-includes
+           (lambda _
+             (substitute* '("src/mash/Sketch.cpp" "src/mash/CommandFind.cpp")
+               (("^#include \"kseq\\.h\"")
+                "#include \"htslib/kseq.h\""))
+             #t))
+         (add-before 'configure 'autoconf
+           (lambda _ (zero? (system* "autoconf")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ;; Capnproto and htslib are statically embedded in the final
+       ;; application. Therefore we also list their licenses, below.
+       ("capnproto" ,capnproto)
+       ("htslib" ,htslib)))
+    (inputs
+     `(("gsl" ,gsl)
+       ("zlib" ,zlib)))
+    (supported-systems '("x86_64-linux"))
+    (home-page "https://mash.readthedocs.io")
+    (synopsis "Fast genome and metagenome distance estimation using MinHash")
+    (description "Mash is a fast sequence distance estimator that uses the
+MinHash algorithm and is designed to work with genomes and metagenomes in the
+form of assemblies or reads.")
+    (license (list license:bsd-3          ; Mash
+                   license:expat          ; HTSlib and capnproto
+                   license:public-domain  ; MurmurHash 3
+                   license:cpl1.0))))     ; Open Bloom Filter
+
 (define-public metabat
   (package
     (name "metabat")
@@ -3296,13 +3470,13 @@ interrupted by stop codons.  OrfM finds and prints these ORFs.")
 (define-public python2-pbcore
   (package
     (name "python2-pbcore")
-    (version "1.2.8")
+    (version "1.2.10")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "pbcore" version))
               (sha256
                (base32
-                "02pfn5raa3zf739672bg0dkx7z3j2c4nx7vmpfjqy5b12jrqpymk"))))
+                "1kjmv891d6qbpp4shhhvkl02ff4q5xlpnls2513sm2cjcrs52f1i"))))
     (build-system python-build-system)
     (arguments `(#:python ,python-2)) ; pbcore requires Python 2.7
     (inputs
@@ -3315,6 +3489,8 @@ interrupted by stop codons.  OrfM finds and prints these ORFs.")
        ("python-nose" ,python2-nose)
        ("python-setuptools" ,python2-setuptools)
        ("python-sphinx" ,python2-sphinx)))
+    (propagated-inputs
+     `(("python-pyxb" ,python2-pyxb)))
     (home-page "http://pacificbiosciences.github.io/pbcore/")
     (synopsis "Library for reading and writing PacBio data files")
     (description
@@ -3449,6 +3625,12 @@ generated using the PacBio Iso-Seq protocol.")
             (lambda _
               (chdir "src")
               #t))
+         (add-after 'unpack 'remove-m64-flag
+           ;; Prank will build with the correct 'bit-ness' without this flag
+           ;; and this allows building on 32-bit machines.
+           (lambda _ (substitute* "src/Makefile"
+                                  (("-m64") ""))
+             #t))
          (delete 'configure)
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
@@ -4034,7 +4216,7 @@ Roche 454, Ion Torrent and Pacific BioSciences SMRT.")
 (define-public ngs-sdk
   (package
     (name "ngs-sdk")
-    (version "1.2.3")
+    (version "1.2.5")
     (source
      (origin
        (method url-fetch)
@@ -4044,7 +4226,7 @@ Roche 454, Ion Torrent and Pacific BioSciences SMRT.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "15074fdi94c6pjy83hhk22r86kfvzpaz2i07h3rqg9yy6x3w0pk2"))))
+         "04y1fsmdnb5y86m3gg6f5g9wcscr6r25n7m8mdlcxy0i2q6w6cia"))))
     (build-system gnu-build-system)
     (arguments
      `(#:parallel-build? #f ; not supported
@@ -4098,7 +4280,7 @@ simultaneously.")
 (define-public ncbi-vdb
   (package
     (name "ncbi-vdb")
-    (version "2.5.7")
+    (version "2.7.0")
     (source
      (origin
        (method url-fetch)
@@ -4108,7 +4290,7 @@ simultaneously.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0hay5hy8ynva3mi5wbn4wmq1q23qwxc3aqzbb86hg3x4f1r73270"))))
+         "0x1cg1x8vy0yjlkp0snc1533zcjhxqzqsaiwqk598n7vvw37n8lf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:parallel-build? #f ; not supported
@@ -4130,6 +4312,10 @@ simultaneously.")
               (("LIBRARIES_TO_INSTALL =")
                "LIBRARIES_TO_INSTALL = kdf5.$(VERSION_LIBX) kdf5.$(VERSION_SHLX)"))
 
+            (substitute* "build/Makefile.env"
+              (("CFLAGS	=" prefix)
+               (string-append prefix "-msse2 ")))
+
             ;; The 'configure' script doesn't recognize things like
             ;; '--enable-fast-install'.
             (zero? (system*
@@ -4172,6 +4358,8 @@ simultaneously.")
        ("libmagic" ,file)
        ("hdf5" ,hdf5)))
     (native-inputs `(("perl" ,perl)))
+    ;; NCBI-VDB requires SSE capability.
+    (supported-systems '("i686-linux" "x86_64-linux"))
     (home-page "https://github.com/ncbi/ncbi-vdb")
     (synopsis "Database engine for genetic information")
     (description
@@ -4193,7 +4381,8 @@ accessed/downloaded on demand across HTTP.")
              version "-src.zip"))
        (sha256
         (base32 "0as8gxm4pjyc8dxmm1sl873rrd7wn5qs0l29nqfnl31x8i467xaa"))
-       (patches (search-patches "plink-1.07-unclobber-i.patch"))))
+       (patches (search-patches "plink-1.07-unclobber-i.patch"
+                                "plink-endian-detection.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ;no "check" target
@@ -4376,7 +4565,7 @@ sequence itself can be retrieved from these databases.")
 (define-public sra-tools
   (package
     (name "sra-tools")
-    (version "2.5.7")
+    (version "2.7.0")
     (source
      (origin
        (method url-fetch)
@@ -4386,11 +4575,19 @@ sequence itself can be retrieved from these databases.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0q93qg744x787d08qmjmdafki1wkbvkdwynayjnjd454gkd26jl5"))))
+         "13paw7bq6y47d2pl0ac5gpgcqp1xsy1g7v1fwysm3hr8lb2dck17"))))
     (build-system gnu-build-system)
     (arguments
      `(#:parallel-build? #f ; not supported
        #:tests? #f ; no "check" target
+       #:make-flags
+       (list (string-append "VDB_LIBDIR="
+                            (assoc-ref %build-inputs "ncbi-vdb")
+                            ,(if (string-prefix? "x86_64"
+                                                 (or (%current-target-system)
+                                                     (%current-system)))
+                                 "/lib64"
+                                 "/lib32")))
        #:phases
        (alist-replace
         'configure
@@ -4409,6 +4606,10 @@ sequence itself can be retrieved from these databases.")
             (("my \\$ilibdir = File::Spec->catdir\\(\\$builddir, 'ilib'\\);")
              "my $ilibdir = File::Spec->catdir($dir, 'ilib');"))
 
+          ;; Dynamic linking
+          (substitute* "tools/copycat/Makefile"
+            (("smagic-static") "lmagic"))
+
           ;; The 'configure' script doesn't recognize things like
           ;; '--enable-fast-install'.
           (zero? (system*
@@ -4515,7 +4716,11 @@ bioinformatics file formats, sequence alignment, and more.")
          ;; https://github.com/fhcrc/seqmagick/issues/55
          (replace 'check (lambda _ (zero? (system* "nosetests")))))))
     (inputs
-     `(("python-biopython" ,python2-biopython)))
+     ;; biopython-1.66 is required due to
+     ;; https://github.com/fhcrc/seqmagick/issues/59
+     ;; When that issue is resolved the 'python2-biopython-1.66' package
+     ;; should be removed.
+     `(("python-biopython" ,python2-biopython-1.66)))
     (native-inputs
      `(("python-setuptools" ,python2-setuptools)
        ("python-nose" ,python2-nose)))
@@ -4529,6 +4734,49 @@ BioPython in a convenient way.  Instead of having a big mess of scripts, there
 is one that takes arguments.")
     (license license:gpl3)))
 
+(define-public seqtk
+  (package
+    (name "seqtk")
+    (version "1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/lh3/seqtk/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ywdyzpmfiz2wp6ampbzqg4y8bj450nfgqarpamg045b8mk32lxx"))
+                            (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Remove extraneous header files, as is done in the seqtk
+                  ;; master branch.
+                  (for-each (lambda (file) (delete-file file))
+                            (list "ksort.h" "kstring.h" "kvec.h"))
+                  #t))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'check
+           ;; There are no tests, so we just run a sanity check.
+           (lambda _ (zero? (system* "./seqtk" "seq"))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((bin (string-append (assoc-ref outputs "out") "/bin/")))
+               (install-file "seqtk" bin)))))))
+    (inputs
+     `(("zlib" ,zlib)))
+    (home-page "https://github.com/lh3/seqtk")
+    (synopsis "Toolkit for processing biological sequences in FASTA/Q format")
+    (description
+     "Seqtk is a fast and lightweight tool for processing sequences in the
+FASTA or FASTQ format.  It parses both FASTA and FASTQ files which can be
+optionally compressed by gzip.")
+      (license license:expat)))
+
 (define-public snap-aligner
   (package
     (name "snap-aligner")
@@ -4835,17 +5083,45 @@ data in the form of VCF files.")
     ;; at https://vcftools.github.io/license.html
     (license license:lgpl3)))
 
+(define-public infernal
+  (package
+    (name "infernal")
+    (version "1.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://eddylab.org/software/infernal/"
+                                  "infernal-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sr2hiz3qxfwqpz3whxr6n82p3x27336v3f34iqznp10hks2935c"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("perl" ,perl))) ; for tests
+    (home-page "http://eddylab.org/infernal/")
+    (synopsis "Inference of RNA alignments")
+    (description "Infernal (\"INFERence of RNA ALignment\") is a tool for
+searching DNA sequence databases for RNA structure and sequence similarities.
+It is an implementation of a special case of profile stochastic context-free
+grammars called @dfn{covariance models} (CMs).  A CM is like a sequence
+profile, but it scores a combination of sequence consensus and RNA secondary
+structure consensus, so in many cases, it is more capable of identifying RNA
+homologs that conserve their secondary structure more than their primary
+sequence.")
+    ;; Infernal 1.1.2 requires VMX or SSE capability for parallel instructions.
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (license license:bsd-3)))
+
 (define-public r-vegan
   (package
     (name "r-vegan")
-    (version "2.4-0")
+    (version "2.4-1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "vegan" version))
        (sha256
         (base32
-         "10cygzkyg2m0y054ygivqxrkvqz792qsg6bmbdfzaqq37qv4wc7z"))))
+         "0i0c7rc0nzgbysd1nlxzxd2rvy75qcnw3yc7nggzqjzzj5d7yzsd"))))
     (build-system r-build-system)
     (arguments
      `(#:phases
@@ -4886,10 +5162,416 @@ dissimilarity analysis.  Most of its multivariate tools can be used for other
 data types as well.")
     (license license:gpl2+)))
 
+(define-public r-annotate
+  (package
+    (name "r-annotate")
+    (version "1.50.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "annotate" version))
+       (sha256
+        (base32
+         "00wnhbjp5i6a5vyvlq4f5hs8qngjxz7fm869kla1spmd0dp2ynsy"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotationdbi" ,r-annotationdbi)
+       ("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-dbi" ,r-dbi)
+       ("r-xml" ,r-xml)
+       ("r-xtable" ,r-xtable)))
+    (home-page
+     "http://bioconductor.org/packages/annotate")
+    (synopsis "Annotation for microarrays")
+    (description "This package provides R enviroments for the annotation of
+microarrays.")
+    (license license:artistic2.0)))
+
+(define-public r-geneplotter
+  (package
+    (name "r-geneplotter")
+    (version "1.50.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "geneplotter" version))
+       (sha256
+        (base32
+         "0lvrywl0251g4y0h0qlgkbg4l83ja5544c85z1wj30qxiy77iqc2"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotate" ,r-annotate)
+       ("r-annotationdbi" ,r-annotationdbi)
+       ("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-lattice" ,r-lattice)
+       ("r-rcolorbrewer" ,r-rcolorbrewer)))
+    (home-page "http://bioconductor.org/packages/geneplotter")
+    (synopsis "Graphics functions for genomic data")
+    (description
+     "This package provides functions for plotting genomic data.")
+    (license license:artistic2.0)))
+
+(define-public r-genefilter
+  (package
+    (name "r-genefilter")
+    (version "1.54.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "genefilter" version))
+       (sha256
+        (base32
+         "1hmz6as0njvrsrdbgmk72jyclnnqvfdvp6kqv456h43ldq2ajfv5"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (propagated-inputs
+     `(("r-annotate" ,r-annotate)
+       ("r-annotationdbi" ,r-annotationdbi)
+       ("r-biobase" ,r-biobase)
+       ("r-s4vectors" ,r-s4vectors)))
+    (home-page "http://bioconductor.org/packages/genefilter")
+    (synopsis "Filter genes from high-throughput experiments")
+    (description
+     "This package provides basic functions for filtering genes from
+high-throughput sequencing experiments.")
+    (license license:artistic2.0)))
+
+(define-public r-deseq2
+  (package
+    (name "r-deseq2")
+    (version "1.12.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "DESeq2" version))
+       (sha256
+        (base32
+         "12h77f0dpi5xaj7aqf50kkyn6lq9j7bcsly1r0ffmyfcszrp1sfx"))))
+    (properties `((upstream-name . "DESeq2")))
+    (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'link-against-armadillo
+           (lambda _
+             (substitute* "src/Makevars"
+               (("PKG_LIBS =" prefix)
+                (string-append prefix "-larmadillo"))))))))
+    (propagated-inputs
+     `(("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-biocparallel" ,r-biocparallel)
+       ("r-genefilter" ,r-genefilter)
+       ("r-geneplotter" ,r-geneplotter)
+       ("r-genomicranges" ,r-genomicranges)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-hmisc" ,r-hmisc)
+       ("r-iranges" ,r-iranges)
+       ("r-locfit" ,r-locfit)
+       ("r-rcpp" ,r-rcpp)
+       ("r-rcpparmadillo" ,r-rcpparmadillo)
+       ("r-s4vectors" ,r-s4vectors)
+       ("r-summarizedexperiment" ,r-summarizedexperiment)))
+    (home-page "http://bioconductor.org/packages/DESeq2")
+    (synopsis "Differential gene expression analysis")
+    (description
+     "This package provides functions to estimate variance-mean dependence in
+count data from high-throughput nucleotide sequencing assays and test for
+differential expression based on a model using the negative binomial
+distribution.")
+    (license license:lgpl3+)))
+
+(define-public r-annotationforge
+  (package
+    (name "r-annotationforge")
+    (version "1.14.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "AnnotationForge" version))
+       (sha256
+        (base32
+         "1vkdd1qdv5g680ipw4vwjvn52xn66xpg6ngmwyknz77ckxnnpf4q"))))
+    (properties
+     `((upstream-name . "AnnotationForge")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotationdbi" ,r-annotationdbi)
+       ("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-dbi" ,r-dbi)
+       ("r-rsqlite" ,r-rsqlite)
+       ("r-s4vectors" ,r-s4vectors)
+       ("r-xml" ,r-xml)))
+    (home-page "http://bioconductor.org/packages/AnnotationForge")
+    (synopsis "Code for building annotation database packages")
+    (description
+     "This package provides code for generating Annotation packages and their
+databases.  Packages produced are intended to be used with AnnotationDbi.")
+    (license license:artistic2.0)))
+
+(define-public r-rbgl
+  (package
+    (name "r-rbgl")
+    (version "1.48.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "RBGL" version))
+       (sha256
+        (base32
+         "1k82zcbyfx3p9hc8r0hwq73krbhakjan8fgbfr6w8z2crfkv3zmz"))))
+    (properties `((upstream-name . "RBGL")))
+    (build-system r-build-system)
+    (propagated-inputs `(("r-graph" ,r-graph)))
+    (home-page "http://www.bioconductor.org/packages/RBGL")
+    (synopsis "Interface to the Boost graph library")
+    (description
+     "This package provides a fairly extensive and comprehensive interface to
+the graph algorithms contained in the Boost library.")
+    (license license:artistic2.0)))
+
+(define-public r-gseabase
+  (package
+    (name "r-gseabase")
+    (version "1.34.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "GSEABase" version))
+       (sha256
+        (base32
+         "1mvgja8malrnbzfakzjl5mmi7g080kj8zgxwc5964hcmn33i937j"))))
+    (properties `((upstream-name . "GSEABase")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotate" ,r-annotate)
+       ("r-annotationdbi" ,r-annotationdbi)
+       ("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-graph" ,r-graph)
+       ("r-xml" ,r-xml)))
+    (home-page "http://bioconductor.org/packages/GSEABase")
+    (synopsis "Gene set enrichment data structures and methods")
+    (description
+     "This package provides classes and methods to support @dfn{Gene Set
+Enrichment Analysis} (GSEA).")
+    (license license:artistic2.0)))
+
+(define-public r-category
+  (package
+    (name "r-category")
+    (version "2.38.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "Category" version))
+       (sha256
+        (base32
+         "0c8px9ar589f3iqkbk9vfhwj30dpnxj81h8sfq20cl1cbmcx2a04"))))
+    (properties `((upstream-name . "Category")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotate" ,r-annotate)
+       ("r-annotationdbi" ,r-annotationdbi)
+       ("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-genefilter" ,r-genefilter)
+       ("r-graph" ,r-graph)
+       ("r-gseabase" ,r-gseabase)
+       ("r-matrix" ,r-matrix)
+       ("r-rbgl" ,r-rbgl)
+       ("r-rsqlite" ,r-rsqlite)))
+    (home-page "http://bioconductor.org/packages/Category")
+    (synopsis "Category analysis")
+    (description
+     "This package provides a collection of tools for performing category
+analysis.")
+    (license license:artistic2.0)))
+
+(define-public r-gostats
+  (package
+    (name "r-gostats")
+    (version "2.38.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "GOstats" version))
+       (sha256
+        (base32
+         "1hhw6vqr8f3g4jzq0v8f2za0r1h117j5s6av87zxs41cv7dq1wb3"))))
+    (properties `((upstream-name . "GOstats")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotate" ,r-annotate)
+       ("r-annotationdbi" ,r-annotationdbi)
+       ("r-annotationforge" ,r-annotationforge)
+       ("r-biobase" ,r-biobase)
+       ("r-category" ,r-category)
+       ("r-go-db" ,r-go-db)
+       ("r-graph" ,r-graph)
+       ("r-rbgl" ,r-rbgl)))
+    (home-page "http://bioconductor.org/packages/GOstats")
+    (synopsis "Tools for manipulating GO and microarrays")
+    (description
+     "This package provides a set of tools for interacting with GO and
+microarray data.  A variety of basic manipulation tools for graphs, hypothesis
+testing and other simple calculations.")
+    (license license:artistic2.0)))
+
+(define-public r-shortread
+  (package
+    (name "r-shortread")
+    (version "1.30.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "ShortRead" version))
+       (sha256
+        (base32
+         "0qlxns4bhwfpafx3km2lnivgl2qyp7n4g1ardm6vrinpq8paxbjg"))))
+    (properties `((upstream-name . "ShortRead")))
+    (build-system r-build-system)
+    (inputs
+     `(("zlib" ,zlib)))
+    (propagated-inputs
+     `(("r-biobase" ,r-biobase)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-biocparallel" ,r-biocparallel)
+       ("r-biostrings" ,r-biostrings)
+       ("r-genomeinfodb" ,r-genomeinfodb)
+       ("r-genomicalignments" ,r-genomicalignments)
+       ("r-genomicranges" ,r-genomicranges)
+       ("r-hwriter" ,r-hwriter)
+       ("r-iranges" ,r-iranges)
+       ("r-lattice" ,r-lattice)
+       ("r-latticeextra" ,r-latticeextra)
+       ("r-rsamtools" ,r-rsamtools)
+       ("r-s4vectors" ,r-s4vectors)
+       ("r-xvector" ,r-xvector)
+       ("r-zlibbioc" ,r-zlibbioc)))
+    (home-page "http://bioconductor.org/packages/ShortRead")
+    (synopsis "FASTQ input and manipulation tools")
+    (description
+     "This package implements sampling, iteration, and input of FASTQ files.
+It includes functions for filtering and trimming reads, and for generating a
+quality assessment report.  Data are represented as
+@code{DNAStringSet}-derived objects, and easily manipulated for a diversity of
+purposes.  The package also contains legacy support for early single-end,
+ungapped alignment formats.")
+    (license license:artistic2.0)))
+
+(define-public r-systempiper
+  (package
+    (name "r-systempiper")
+    (version "1.6.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "systemPipeR" version))
+       (sha256
+        (base32
+         "0s2g46a5d5bvx45i3cgmib48wf8hrniyladhm0f7kgcbfx57248m"))))
+    (properties `((upstream-name . "systemPipeR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-annotate" ,r-annotate)
+       ("r-batchjobs" ,r-batchjobs)
+       ("r-biocgenerics" ,r-biocgenerics)
+       ("r-biostrings" ,r-biostrings)
+       ("r-deseq2" ,r-deseq2)
+       ("r-edger" ,r-edger)
+       ("r-genomicfeatures" ,r-genomicfeatures)
+       ("r-genomicranges" ,r-genomicranges)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-go-db" ,r-go-db)
+       ("r-gostats" ,r-gostats)
+       ("r-limma" ,r-limma)
+       ("r-pheatmap" ,r-pheatmap)
+       ("r-rjson" ,r-rjson)
+       ("r-rsamtools" ,r-rsamtools)
+       ("r-shortread" ,r-shortread)
+       ("r-summarizedexperiment" ,r-summarizedexperiment)
+       ("r-variantannotation" ,r-variantannotation)))
+    (home-page "https://github.com/tgirke/systemPipeR")
+    (synopsis "Next generation sequencing workflow and reporting environment")
+    (description
+     "This R package provides tools for building and running automated
+end-to-end analysis workflows for a wide range of @dfn{next generation
+sequence} (NGS) applications such as RNA-Seq, ChIP-Seq, VAR-Seq and Ribo-Seq.
+Important features include a uniform workflow interface across different NGS
+applications, automated report generation, and support for running both R and
+command-line software, such as NGS aligners or peak/variant callers, on local
+computers or compute clusters.  Efficient handling of complex sample sets and
+experimental designs is facilitated by a consistently implemented sample
+annotation infrastructure.")
+    (license license:artistic2.0)))
+
+(define-public r-grohmm
+  (package
+    (name "r-grohmm")
+    (version "1.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (bioconductor-uri "groHMM" version))
+       (sha256
+        (base32
+         "1l9mcyzyc548114ysb9r0q7hgzw3yy7gpiahrzkzj6hblc4f1jyp"))))
+    (properties `((upstream-name . "groHMM")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-genomeinfodb" ,r-genomeinfodb)
+       ("r-genomicalignments" ,r-genomicalignments)
+       ("r-genomicranges" ,r-genomicranges)
+       ("r-iranges" ,r-iranges)
+       ("r-rtracklayer" ,r-rtracklayer)
+       ("r-s4vectors" ,r-s4vectors)))
+    (home-page "https://github.com/Kraus-Lab/groHMM")
+    (synopsis "GRO-seq analysis pipeline")
+    (description
+     "This package provides a pipeline for the analysis of GRO-seq data.")
+    (license license:gpl3+)))
+
+(define-public r-txdb-hsapiens-ucsc-hg19-knowngene
+  (package
+    (name "r-txdb-hsapiens-ucsc-hg19-knowngene")
+    (version "3.2.2")
+    (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://bioconductor.org/packages/"
+                                  "release/data/annotation/src/contrib"
+                                  "/TxDb.Hsapiens.UCSC.hg19.knownGene_"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1sajhcqqwazgz2lqbik7rd935i7kpnh08zxbp2ra10j72yqy4g86"))))
+    (properties
+     `((upstream-name . "TxDb.Hsapiens.UCSC.hg19.knownGene")))
+    (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-genomicfeatures" ,r-genomicfeatures)))
+    (home-page
+     "http://bioconductor.org/packages/TxDb.Hsapiens.UCSC.hg19.knownGene/")
+    (synopsis "Annotation package for human genome in TxDb format")
+    (description
+     "This package provides an annotation database of Homo sapiens genome
+data.  It is derived from the UCSC hg19 genome and based on the \"knownGene\"
+track.  The database is exposed as a @code{TxDb} object.")
+    (license license:artistic2.0)))
+
 (define-public vsearch
   (package
     (name "vsearch")
-    (version "2.0.1")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
@@ -4899,7 +5581,7 @@ data types as well.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0q7szwbf7r29yxkhb415a8i51vj87kvl5ap7h09w7k9ycb2ywvzw"))
+         "0rn40inkpgv0j1r1j9kmgjkb7nc8v5c9ijvbhzr17iayannxvlq9"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -5119,13 +5801,13 @@ BLAST, KEGG, GenBank, MEDLINE and GO.")
 (define-public r-acsnminer
   (package
     (name "r-acsnminer")
-    (version "0.16.01.29")
+    (version "0.16.8.25")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "ACSNMineR" version))
               (sha256
                (base32
-                "1b1243wkncanm1blkqzicjgzb576vzcg4iwinsgn2xqr7f264amf"))))
+                "0gh604s8qall6zfjlwcg2ilxjvz08dplf9k5g47idhv43scm748l"))))
     (properties `((upstream-name . "ACSNMineR")))
     (build-system r-build-system)
     (propagated-inputs
@@ -5162,6 +5844,25 @@ barplots or heatmaps.")
 packages.")
     (license license:artistic2.0)))
 
+(define-public r-biocinstaller
+  (package
+    (name "r-biocinstaller")
+    (version "1.22.3")
+    (source (origin
+              (method url-fetch)
+              (uri (bioconductor-uri "BiocInstaller" version))
+              (sha256
+               (base32
+                "02qkfq6f2b7v9klri6d1nv21r54bywv1zd5x47ka0jhhp946cqpr"))))
+    (properties
+     `((upstream-name . "BiocInstaller")))
+    (build-system r-build-system)
+    (home-page "http://bioconductor.org/packages/BiocInstaller")
+    (synopsis "Install Bioconductor packages")
+    (description "This package is used to install and update R packages from
+Bioconductor, CRAN, and Github.")
+    (license license:artistic2.0)))
+
 (define-public r-dnacopy
   (package
     (name "r-dnacopy")
@@ -5187,13 +5888,13 @@ abnormal copy number.")
 (define-public r-s4vectors
   (package
     (name "r-s4vectors")
-    (version "0.10.2")
+    (version "0.10.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "S4Vectors" version))
               (sha256
                (base32
-                "0cvq9yb97cka7lg5nimvzxbz8b2hxkscmjdqb5z23w5c7hrbjffp"))))
+                "09lrvy3d5q58hsgw9as4hyyx07k1vyy2zjn3xsvhyfd97yk6w6lv"))))
     (properties
      `((upstream-name . "S4Vectors")))
     (build-system r-build-system)
@@ -5214,17 +5915,18 @@ S4Vectors package itself.")
 (define-public r-seqinr
   (package
     (name "r-seqinr")
-    (version "3.1-3")
+    (version "3.3-1")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "seqinr" version))
         (sha256
           (base32
-            "0bbjfwbqg74wsamb3iz01g0ssdpdpg65gh00y9xlnpk4wb990n4n"))))
+            "1al83y6m7739dz2j895yihksm0s5l45ialid4yw911ylbg3w6cm1"))))
     (build-system r-build-system)
     (propagated-inputs
-     `(("r-ade4" ,r-ade4)))
+     `(("r-ade4" ,r-ade4)
+       ("r-segmented" ,r-segmented)))
     (inputs
      `(("zlib" ,zlib)))
     (home-page "http://seqinr.r-forge.r-project.org/")
@@ -5267,13 +5969,13 @@ possible.")
 (define-public r-genomeinfodb
   (package
     (name "r-genomeinfodb")
-    (version "1.8.3")
+    (version "1.8.7")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomeInfoDb" version))
               (sha256
                (base32
-                "03s2khhdwz06xr58cjpkil935y6p7f6ljqkbkkcai73qxl1k4ica"))))
+                "1x96468bbjx7z3ikp1dgr2krnz9pwx86vmssfbfrsikaxfs4q829"))))
     (properties
      `((upstream-name . "GenomeInfoDb")))
     (build-system r-build-system)
@@ -5318,13 +6020,13 @@ CAGE.")
 (define-public r-variantannotation
   (package
     (name "r-variantannotation")
-    (version "1.18.6")
+    (version "1.18.7")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "VariantAnnotation" version))
               (sha256
                (base32
-                "17q2b3wlv3250v6qm114srkarxykpd5rqmg4kzymmqsn1b8hynhv"))))
+                "002kif2c66wbcng953m3g1jys7w1lgz7hh3zsk4jlnhc20jdv1vj"))))
     (properties
      `((upstream-name . "VariantAnnotation")))
     (inputs
@@ -5350,13 +6052,13 @@ coding changes and predict coding outcomes.")
 (define-public r-limma
   (package
     (name "r-limma")
-    (version "3.28.17")
+    (version "3.28.21")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "limma" version))
               (sha256
                (base32
-                "124n8dbvl1yy8b1068kqmqszpfhaawk5xfyb73vixma2i66nrcyk"))))
+                "1dvisifd2rr7s1rrsqj5vrv2qcg4la4yi2ajbn0zkk5z81ffxv9f"))))
     (build-system r-build-system)
     (home-page "http://bioinf.wehi.edu.au/limma")
     (synopsis "Package for linear models for microarray and RNA-seq data")
@@ -5405,13 +6107,13 @@ different technologies, including microarrays, RNA-seq, and quantitative PCR.")
 (define-public r-genomicranges
   (package
     (name "r-genomicranges")
-    (version "1.24.2")
+    (version "1.24.3")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "GenomicRanges" version))
               (sha256
                (base32
-                "183kdz76rz93v69k6x684bpwa28xixp83bsyf6xfy182h6vh8x89"))))
+                "098a34hfgb5z120v6wpl5nv8v61nm65yg6xq0j7i9bigvxr7apg2"))))
     (properties
      `((upstream-name . "GenomicRanges")))
     (build-system r-build-system)
@@ -5511,13 +6213,13 @@ powerful online queries from gene annotation to database mining.")
 (define-public r-biocparallel
   (package
     (name "r-biocparallel")
-    (version "1.6.3")
+    (version "1.6.6")
     (source (origin
               (method url-fetch)
               (uri (bioconductor-uri "BiocParallel" version))
               (sha256
                (base32
-                "1gb3lpafhx9wi7wbjdvczdf837qq1arpymcr438jwx39biv9dwb4"))))
+                "1l39zmvhjlvlczrk5wal4y2s4g0b2kmaczgq5biah9qn45y474mw"))))
     (properties
      `((upstream-name . "BiocParallel")))
     (build-system r-build-system)
@@ -5753,7 +6455,7 @@ extracting the desired features in a convenient format.")
 (define-public r-go-db
   (package
     (name "r-go-db")
-    (version "3.2.2")
+    (version "3.3.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.bioconductor.org/packages/"
@@ -5761,7 +6463,7 @@ extracting the desired features in a convenient format.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "00gariag9ampz82dh0xllrc26r85d7vdcwc0vca5zdy147rwxr7f"))))
+                "0x2hkbhg9d8waw32hdn05887vv3zbs5aqff3mf5vfyzvl7xhgxy0"))))
     (properties
      `((upstream-name . "GO.db")))
     (build-system r-build-system)
@@ -5974,7 +6676,7 @@ downloaded from Encode.")
 (define-public r-org-hs-eg-db
   (package
     (name "r-org-hs-eg-db")
-    (version "3.2.3")
+    (version "3.3.0")
     (source (origin
               (method url-fetch)
               ;; We cannot use bioconductor-uri here because this tarball is
@@ -5984,7 +6686,7 @@ downloaded from Encode.")
                                   "org.Hs.eg.db_" version ".tar.gz"))
               (sha256
                (base32
-                "0xicgkbh6xkvs74s1piafqac63dyz2ycdyil4pj4ghhxx2sabm6p"))))
+                "09zb43yjd82ny210n5a0wsrji4w56l2r6ana6d9lx0nn9mzd7rzp"))))
     (properties
      `((upstream-name . "org.Hs.eg.db")))
     (build-system r-build-system)
@@ -6000,7 +6702,7 @@ annotations for the human genome.")
 (define-public r-org-ce-eg-db
   (package
     (name "r-org-ce-eg-db")
-    (version "3.2.3")
+    (version "3.3.0")
     (source (origin
               (method url-fetch)
               ;; We cannot use bioconductor-uri here because this tarball is
@@ -6010,7 +6712,7 @@ annotations for the human genome.")
                                   "org.Ce.eg.db_" version ".tar.gz"))
               (sha256
                (base32
-                "1d0lx00ybq34yqs6mziaa0lrh77xm0ggsmi76g6k95f77gi7m1sw"))))
+                "17mvb2ci2jgac3zi420cbf70n4zswqinzxlk1v2fjnp8vvydl2fw"))))
     (properties
      `((upstream-name . "org.Ce.eg.db")))
     (build-system r-build-system)
@@ -6026,7 +6728,7 @@ annotations for the genome of the model worm Caenorhabditis elegans.")
 (define-public r-org-dm-eg-db
   (package
     (name "r-org-dm-eg-db")
-    (version "3.2.3")
+    (version "3.3.0")
     (source (origin
               (method url-fetch)
               ;; We cannot use bioconductor-uri here because this tarball is
@@ -6036,7 +6738,7 @@ annotations for the genome of the model worm Caenorhabditis elegans.")
                                   "org.Dm.eg.db_" version ".tar.gz"))
               (sha256
                (base32
-                "0mib46c7nr00l7mh290n383za9hyl91a1dc6jhjbk884jmxaxyz6"))))
+                "15kzvw78xwa54yk1d69l6pmgny4726ydpdkk8lic26vr0yiwicla"))))
     (properties
      `((upstream-name . "org.Dm.eg.db")))
     (build-system r-build-system)
@@ -6052,7 +6754,7 @@ annotations for the genome of the model fruit fly Drosophila melanogaster.")
 (define-public r-org-mm-eg-db
   (package
     (name "r-org-mm-eg-db")
-    (version "3.2.3")
+    (version "3.3.0")
     (source (origin
               (method url-fetch)
               ;; We cannot use bioconductor-uri here because this tarball is
@@ -6062,7 +6764,7 @@ annotations for the genome of the model fruit fly Drosophila melanogaster.")
                                   "org.Mm.eg.db_" version ".tar.gz"))
               (sha256
                (base32
-                "0wh1pm3npdg7070875kfgiid3bqkz3q7rq6snhk6bxfvph00298y"))))
+                "0r939vfmsqqdwfimix1nv0bkhnixawy9c6avbclrncfanw3kgjax"))))
     (properties
      `((upstream-name . "org.Mm.eg.db")))
     (build-system r-build-system)
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 51248508ff..b1daf02bf9 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -207,7 +207,7 @@ interface, for the Transmission BitTorrent daemon.")
 (define-public aria2
   (package
     (name "aria2")
-    (version "1.26.0")
+    (version "1.27.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/tatsuhiro-t/aria2/"
@@ -215,7 +215,7 @@ interface, for the Transmission BitTorrent daemon.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1388qswa0in7kb1dx7qb10wp60p58zvvpys7jwim3clsbqvz6a68"))))
+                "023g22yn91pnvv7jvx43gl4x5rszn31sc9crgkxgsb3067pjg5n0"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags (list "--enable-libaria2"
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index 8fe8c8e899..ab31fa8c5c 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -34,7 +34,7 @@
 (define-public boost
   (package
     (name "boost")
-    (version "1.60.0")
+    (version "1.61.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -43,7 +43,7 @@
                     ".tar.bz2"))
               (sha256
                (base32
-                "0fzx6dwqbrkd4bcd8pjv0fpapwmrxxwr8yx9g67lihlsk3zzysk8"))))
+                "0h5nk7pgxf7xsvvshj9qfpsfp9wx6gq9r78n3nx736pxq83bsix5"))))
     (build-system gnu-build-system)
     (inputs `(("zlib" ,zlib)))
     (native-inputs
@@ -90,7 +90,9 @@
          (replace
              'build
            (lambda* (#:key outputs make-flags #:allow-other-keys)
-             (zero? (apply system* "./b2" make-flags))))
+             (zero? (apply system* "./b2"
+                           (format #f "-j~a" (parallel-job-count))
+                           make-flags))))
          (replace
              'install
            (lambda* (#:key outputs make-flags #:allow-other-keys)
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index 6e16d1365b..4b9791348e 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -58,6 +59,8 @@
                                               (assoc-ref %build-inputs "libc")
                                               "/lib"))
        #:test-target "test"))
+    ;; Fails to build on MIPS: "Unsupported CPU"
+    (supported-systems (delete "mips64el-linux" %supported-systems))
     (synopsis "Tiny and fast C compiler")
     (description
      "TCC, also referred to as \"TinyCC\", is a small and fast C compiler
diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm
index 7f3d05d08e..0c37caa8e8 100644
--- a/gnu/packages/calendar.scm
+++ b/gnu/packages/calendar.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
+;;; Copyright © 2016 Stefan Reichoer <stefan@xsteve.at>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,6 +27,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build utils)
+  #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
   #:use-module (gnu packages base)
@@ -34,7 +36,8 @@
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages perl)
-  #:use-module (gnu packages python))
+  #:use-module (gnu packages python)
+  #:use-module (srfi srfi-26))
 
 (define-public libical
   (package
@@ -134,3 +137,53 @@ data units.")
 able to synchronize with CalDAV servers through vdirsyncer.")
     (home-page "http://lostpackets.de/khal/")
     (license expat)))
+
+(define-public remind
+  (package
+    (name "remind")
+    (version "3.1.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.roaringpenguin.com/files/download/"
+                           "remind-"
+                           (string-join (map (cut string-pad <> 2 #\0)
+                                             (string-split version #\.))
+                                        ".")
+                           ".tar.gz"))
+       (sha256
+        (base32
+         "1hcfcxz5fjzl7606prlb7dgls5kr8z3wb51h48s6qm8ang0b9nla"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f))  ;no "check" target
+    (home-page "http://www.roaringpenguin.com/products/remind/")
+    (synopsis "Sophisticated calendar and alarm program")
+    (description
+     "Remind allows you to remind yourself of upcoming events and appointments.
+Each reminder or alarm can consist of a message sent to standard output, or a
+program to be executed.  It also features: sophisticated date calculation,
+moon phases, sunrise/sunset, Hebrew calendar, alarms, PostScript output and
+proper handling of holidays.")
+    (license gpl2)))
+
+(define-public libhdate
+  (package
+    (name "libhdate")
+    (version "1.6.02")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "mirror://sourceforge/libhdate/libhdate/libhdate-"
+                            version "/" name "-" version ".tar.bz2"))
+        (sha256
+         (base32
+          "0qkpq412p78znw8gckwcx3l0wcss9s0dgw1pvjb1ih2pxf6hm4rw"))))
+    (build-system gnu-build-system)
+    (home-page "http://libhdate.sourceforge.net/")
+    (synopsis "Library to use Hebrew dates")
+    (description "LibHdate is a small library for the Hebrew calendar and times
+of day, written in C, and including bindings for C++, pascal, perl, php, python,
+and ruby.  It includes two illustrative command-line programs, @code{hcal} and
+@code{hdate}, and some snippets and scripts written in the binding languages.")
+    (license gpl3+)))
diff --git a/gnu/packages/ccache.scm b/gnu/packages/ccache.scm
index 01db7ae57d..48ed860724 100644
--- a/gnu/packages/ccache.scm
+++ b/gnu/packages/ccache.scm
@@ -29,7 +29,7 @@
 (define-public ccache
   (package
     (name "ccache")
-    (version "3.2.5")
+    (version "3.3.1")
     (source
      (origin
       (method url-fetch)
@@ -37,24 +37,24 @@
                           version ".tar.xz"))
       (sha256
        (base32
-        "11db1g109g0g5si0s50yd99ja5f8j4asxb081clvx78r9d9i2w0i"))))
+        "1ij1p8arz72fw67gx65ngb7jmg30ynjxk7i8dmikjxkdri4pmn66"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)     ;for test.sh
                      ("which" ,(@ (gnu packages base) which))))
     (inputs `(("zlib" ,zlib)))
     (arguments
-     '(#:phases (alist-cons-before
-                 'check 'setup-tests
-                 (lambda _
-                   (substitute* '("test/test_hashutil.c" "test.sh")
-                     (("#!/bin/sh") (string-append "#!" (which "sh")))
-                     (("which") (which "which")))
-                   #t)
-                 %standard-phases)))
+     '(#:phases (modify-phases %standard-phases
+                 (add-before 'check 'setup-tests
+                   (lambda _
+                     (substitute* '("test/test_hashutil.c" "test.sh")
+                       (("#!/bin/sh") (string-append "#!" (which "sh")))
+                       (("which") (which "which")))
+                     #t)))))
     (home-page "https://ccache.samba.org/")
     (synopsis "Compiler cache")
     (description
      "Ccache is a compiler cache.  It speeds up recompilation by caching
 previous compilations and detecting when the same compilation is being done
-again.  Supported languages are C, C++, Objective-C and Objective-C++.")
+again.  Supported languages are C, C++, Objective-C, Objective-C++, and
+Fortran 77.")
     (license gpl3+)))
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 621f08d8c1..cdf0a4932e 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -130,14 +130,14 @@ libcdio.")
 (define-public xorriso
   (package
     (name "xorriso")
-    (version "1.4.4")
+    (version "1.4.6")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/xorriso/xorriso-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1izv8dvwacyh432vv1rm6lyjrq0v205kyakfra6iwa146c9m9fgr"))))
+               "112p0ghwzxrcjbsir1n2jxhq103ckrw93wzvd55qqvzfgs674vsj"))))
     (build-system gnu-build-system)
     (inputs
      `(("acl" ,acl)
@@ -146,10 +146,10 @@ libcdio.")
        ("zlib" ,zlib)
        ("libcdio" ,libcdio)))
     (home-page "https://www.gnu.org/software/xorriso/")
-    (synopsis "Create, manipulate, burn ISO-9660 filesystems")
+    (synopsis "Create, manipulate, burn ISO-9660 file systems")
     (description
      "GNU Xorriso is a tool for copying files to and from ISO 9660 Rock
-Ridge, a.k.a. Compact Disc File System, filesystems and it allows
+Ridge, a.k.a. Compact Disc File System, file systems and it allows
 session-wise manipulation of them.  It features a formatter and burner for
 CD, DVD and BD.  It can operate on existing ISO images or it can create new
 ones.  xorriso can then be used to copy files directly into or out of ISO
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index f5a4372d5c..f010fabc86 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.23")
+    (version "3.26")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -84,7 +84,7 @@
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "1kqidv91icq96m9m8zx50n7px08km2l88458rkgyjwcn3kiq7cwl"))))
+                "0r65s5q8kk0vr48s0zr8xi610k7h072lgkkpp4z6jlxr19bkly4i"))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index e0ff873b3e..3f54ff1298 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -39,23 +39,22 @@
   #:use-module (guix build-system gnu))
 
 (define-public hydra
-  (let ((commit "4c0e3e47034545ad3e9e86dd069138bcebb8ccee"))
+  (let ((commit "1ff48da3d3d4a425063f5b7dd0b89d35270f8932"))
     (package
       (name "hydra")
-      (version (string-append "20150407." (string-take commit 7)))
+      (version (string-append "20151030." (string-take commit 7)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
                       (url "https://github.com/NixOS/hydra")
                       (commit commit)))
                 (file-name (string-append name "-" version))
-                (sha256
-                 (base32
-                  "08vc76xb7f42hh65j7qvjf58hw36aki5ml343170pq94vk75b1nh"))
                 (patches (search-patches
-                          "hydra-automake-1.15.patch"
                           ;; TODO: Remove once we have a darcs input
-                          "hydra-disable-darcs-test.patch"))))
+                          "hydra-disable-darcs-test.patch"))
+                (sha256
+                 (base32
+                  "0ni8i8v1nxxfr51rz8m6znwpbm77vr7i05k506hmgmg32r938lap"))))
       (build-system gnu-build-system)
       (native-inputs
        `(("unzip" ,unzip)
@@ -74,7 +73,8 @@
          ("mercurial" ,mercurial)
          ("bazaar" ,bazaar)))
       (inputs
-       `(("perl" ,perl)
+       `(("libpqxx" ,libpqxx)
+         ("perl" ,perl)
          ("guile" ,guile-2.0)
          ("openssl" ,openssl)
          ("bzip2" ,bzip2)
@@ -125,6 +125,7 @@
          ("perl-libwww" ,perl-libwww)
          ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
          ("perl-net-amazon-s3" ,perl-net-amazon-s3)
+         ("perl-net-statsd" ,perl-net-statsd)
          ("perl-padwalker" ,perl-padwalker)
          ("perl-readonly" ,perl-readonly)
          ("perl-set-scalar" ,perl-set-scalar)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index c239d16638..6504641977 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -12,6 +12,8 @@
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
+;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -662,14 +664,14 @@ time for compression ratio.")
        ("xz" ,xz)
        ("zlib" ,zlib)))
     (home-page "http://squashfs.sourceforge.net/")
-    (synopsis "Tools to create and extract squashfs filesystems")
+    (synopsis "Tools to create and extract squashfs file systems")
     (description
-     "Squashfs is a highly compressed read-only filesystem for Linux.  It uses
+     "Squashfs is a highly compressed read-only file system for Linux.  It uses
 zlib to compress files, inodes, and directories.  All blocks are packed to
 minimize the data overhead, and block sizes of between 4K and 1M are supported.
 It is intended to be used for archival use, for live CDs, and for embedded
 systems where low overhead is needed.  This package allows you to create and
-extract such filesystems.")
+extract such file systems.")
     (license license:gpl2+)))
 
 (define-public pigz
@@ -895,3 +897,107 @@ compared to the fastest mode of zlib, Snappy is an order of magnitude faster
 for most inputs, but the resulting compressed files are anywhere from 20% to
 100% bigger.")
     (license license:asl2.0)))
+
+(define-public p7zip
+  (package
+    (name "p7zip")
+    (version "16.02")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/" name "/" name "/"
+                                  version "/" name "_" version
+                                  "_src_all.tar.bz2"))
+              (sha256
+               (base32
+                "07rlwbbgszq8i7m8jh3x6j2w2hc9a72dc7fmqawnqkwlwb00mcjy"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Remove non-free source files
+                  (for-each delete-file
+                            (append
+                             (find-files "CPP/7zip/Compress" "Rar.*")
+                             (find-files "CPP/7zip/Crypto" "Rar.*")
+                             (find-files "DOC/unRarLicense.txt")
+                             (find-files  "Utils/file_Codecs_Rar_so.py")))
+                  (delete-file-recursively "CPP/7zip/Archive/Rar")
+                  (delete-file-recursively "CPP/7zip/Compress/Rar")
+                  #t))
+              (patches (search-patches "p7zip-remove-unused-code.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "DEST_HOME=" (assoc-ref %outputs "out")) "all3")
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key system outputs #:allow-other-keys)
+             (zero? (system* "cp"
+                             (let ((system ,(or (%current-target-system)
+                                                (%current-system))))
+                               (cond
+                                ((string-prefix? "x86_64" system)
+                                 "makefile.linux_amd64_asm")
+                                ((string-prefix? "i686" system)
+                                 "makefile.linux_x86_asm_gcc_4.X")
+                                (else
+                                 "makefile.linux_any_cpu_gcc_4.X")))
+                             "makefile.machine"))))
+         (replace 'check
+           (lambda _
+             (and (zero? (system* "make" "test"))
+                  (zero? (system* "make" "test_7z"))
+                  (zero? (system* "make" "test_7zr"))))))))
+    (inputs
+     (let ((system (or (%current-target-system)
+                       (%current-system))))
+       `(,@(cond ((string-prefix? "x86_64" system)
+                  `(("yasm" ,yasm)))
+                 ((string-prefix? "i686" system)
+                  `(("nasm" ,nasm)))
+                 (else '())))))
+    (home-page "http://p7zip.sourceforge.net/")
+    (synopsis "Command-line file archiver with high compression ratio")
+    (description "p7zip is a command-line port of 7-Zip, a file archiver that
+handles the 7z format which features very high compression ratios.")
+    (license (list license:lgpl2.1+
+                   license:gpl2+
+                   license:public-domain))))
+
+(define-public gzstream
+  (package
+    (name "gzstream")
+    (version "1.5")
+    (source (origin
+              (method url-fetch)
+              (uri
+                ;; No versioned URL, but last release was in 2003.
+                "http://www.cs.unc.edu/Research/compgeom/gzstream/gzstream.tgz")
+                (file-name (string-append name "-" version ".tgz"))
+                (sha256
+                 (base32
+                  "00y19pqjsdj5zcrx4p9j56pl73vayfwnb7y2hvp423nx0cwv5b4r"))
+                (modules '((guix build utils)))
+                (snippet
+                 ;; Remove pre-compiled object.
+                 '(delete-file "gzstream.o"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib"))
+                    (include (string-append out "/include")))
+               (install-file "libgzstream.a" lib)
+               (install-file "gzstream.h" include)
+               #t))))))
+    (propagated-inputs `(("zlib" ,zlib)))
+    (home-page "http://www.cs.unc.edu/Research/compgeom/gzstream/")
+    (synopsis "Compressed C++ iostream")
+    (description "gzstream is a small library for providing zlib
+functionality in a C++ iostream.")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index 920c346b70..88e9038dc3 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -4,6 +4,8 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox>
 ;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,9 +24,15 @@
 
 (define-module (gnu packages crypto)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages aidc)
+  #:use-module (gnu packages attr)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages cryptsetup)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages image)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages linux)
@@ -32,11 +40,17 @@
   #:use-module (gnu packages password-utils)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages search)
   #:use-module (gnu packages serialization)
+  #:use-module (gnu packages shells)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages xml)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu))
 
 (define-public libsodium
@@ -133,9 +147,10 @@ OpenBSD tool of the same name.")
     (inputs
      `(("gnutls" ,gnutls)
        ("nettle" ,nettle)
-       ("msgpack" ,msgpack)
        ("readline" ,readline)
        ("argon2" ,argon2)))
+    (propagated-inputs
+     `(("msgpack" ,msgpack)))           ;included in several installed headers
     (native-inputs
      `(("autoconf" ,autoconf)
        ("pkg-config" ,pkg-config)
@@ -154,36 +169,10 @@ be used to manage peer-to-peer network connections as needed for real time
 communication.")
     (license license:gpl3)))
 
-(define rlog
-  (package
-    (name "rlog")
-    (version "1.4")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "http://rlog.googlecode.com/files/rlog-"
-                       version ".tar.gz"))
-       (sha256
-        (base32
-         "0y9zg0pd7vmnskwac1qdyzl282z7kb01nmn57lsg2mjdxgnywf59"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (modify-phases %standard-phases
-                  (add-before 'configure 'patch-/bin/sh
-                    (lambda _
-                      (substitute* "docs/Makefile.in"
-                        (("/bin/sh") "sh")))))))
-    (home-page "http://www.arg0.net/rlog")
-    (synopsis "Flexible message logging library for EncFS")
-    (description
-     "RLog provides message logging for EncFS.  It is no longer maintained.")
-    (license license:lgpl2.1+)))
-
 (define-public encfs
   (package
     (name "encfs")
-    (version "1.8.1")
+    (version "1.9.1")
     (source
      (origin
        (method url-fetch)
@@ -192,27 +181,26 @@ communication.")
                        version "/encfs-" version ".tar.gz"))
        (sha256
         (base32
-         "1lfmcsk187qr6ahy8c8959p7jrk9d5rd9kcsx572850ca3zmf0la"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:configure-flags '("--with-boost-serialization=boost_wserialization"
-                           "--with-boost-filesystem=boost_filesystem")
-       #:phases (modify-phases %standard-phases
-                  (add-before 'configure 'autoconf
-                    (lambda _
-                      (zero? (system* "autoreconf" "-vfi")))))))
+         "1906254dg5hwljh0h4gyrw09ms3b57dlhjfzhfzffv50yzpkl837"))
+       (modules '((guix build utils)))
+       ;; Remove bundled dependencies in favour of proper inputs.
+       (snippet '(for-each delete-file-recursively
+                           (find-files "internal" "^tinyxml2-[0-9]"
+                                       #:directories? #t)))))
+    (build-system cmake-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)
-       ("libtool" ,libtool)
-       ("perl" ,perl)
-       ("pkg-config" ,pkg-config)))
+     `(("gettext" ,gettext-minimal)
+
+       ;; Test dependencies.
+       ("expect" ,expect)
+       ("perl" ,perl)))
     (inputs
-     `(("boost" ,boost)
+     `(("attr" ,attr)
        ("fuse" ,fuse)
        ("openssl" ,openssl)
-       ("rlog" ,rlog)))
+       ("tinyxml2" ,tinyxml2)))
+    (arguments
+     `(#:configure-flags (list "-DUSE_INTERNAL_TINYXML=OFF")))
     (home-page "https://vgough.github.io/encfs")
     (synopsis "Encrypted virtual file system")
     (description
@@ -221,8 +209,9 @@ created under an EncFS mount point is stored as a separate encrypted file on
 the underlying file system.  Like most encrypted file systems, EncFS is meant
 to provide security against off-line attacks, such as a drive falling into
 the wrong hands.")
-    (license (list license:lgpl3+                 ;encfs library
-                   license:gpl3+))))              ;command-line tools
+    (license (list license:expat                  ; internal/easylogging++.h
+                   license:lgpl3+                 ; encfs library
+                   license:gpl3+))))              ; command-line tools
 
 (define-public keyutils
   (package
@@ -263,3 +252,129 @@ gain and retain the authorization and encryption keys required to perform
 secure operations. ")
     (license (list license:lgpl2.1+             ; the files keyutils.*
                    license:gpl2+))))            ; the rest
+
+;; There is no release candidate but commits point out a version number,
+;; furthermore no tarball exists.
+(define-public eschalot
+  (let ((commit "0bf31d88a11898c19b1ed25ddd2aff7b35dbac44")
+        (revision "1"))
+    (package
+      (name "eschalot")
+      (version (string-append "1.2.0-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/schnabear/eschalot")
+               (commit commit)))
+         (file-name (string-append name "-" version))
+         (sha256
+          (base32
+           "0lj38ldh8vzi11wp4ghw4k0fkwp0s04zv8k8d473p1snmbh7mx98"))))
+      (inputs
+       `(("openssl" ,openssl))) ; It needs: openssl/{bn,pem,rsa,sha}.h
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags (list "CC=gcc"
+                            (string-append "PREFIX=" (assoc-ref %outputs "out"))
+                            (string-append "INSTALL=" "install"))
+         ;; XXX: make test would run a !VERY! long hashing of names with the use
+         ;; of a wordlist, the amount of computing time this would waste on build
+         ;; servers is in no relation to the size or importance of this small
+         ;; application, therefore we run our own tests on eschalot and worgen.
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (replace 'check
+             (lambda _
+               (and
+                 (zero? (system* "./worgen" "8-12" "top1000.txt" "3-10" "top400nouns.txt"
+                                 "3-6" "top150adjectives.txt" "3-6"))
+                 (zero? (system* "./eschalot" "-r" "^guix|^guixsd"))
+                 (zero? (system* "./eschalot" "-r" "^gnu|^free"))
+                 (zero? (system* "./eschalot" "-r" "^cyber|^hack"))
+                 (zero? (system* "./eschalot" "-r" "^troll")))))
+           ;; Make install can not create the bin dir, create it.
+           (add-before 'install 'create-bin-dir
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin")))
+                 (mkdir-p bin)
+                 #t))))))
+      (home-page "https://github.com/schnabear/eschalot")
+      (synopsis "Tor hidden service name generator")
+      (description
+       "Eschalot is a tor hidden service name generator, it allows one to
+produce customized vanity .onion addresses using a brute-force method.  Searches
+for valid names can be run with regular expressions and wordlists.  For the
+generation of wordlists the included tool @code{worgen} can be used.  There is
+no man page, refer to the home page for usage details.")
+      (license (list license:isc license:expat)))))
+
+(define-public tomb
+  (package
+    (name "tomb")
+    (version "2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://files.dyne.org/tomb/"
+                                  "tomb-" version ".tar.gz"))
+              (sha256
+               (base32
+                "11msj38fdmymiqcmwq1883kjqi5zr01ybdjj58rfjjrw4zw2w5y0"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("zsh" ,zsh)
+       ("sudo" ,sudo)
+       ("gnupg" ,gnupg)
+       ("cryptsetup" ,cryptsetup)
+       ("e2fsprogs" ,e2fsprogs)         ;for mkfs.ext4
+       ("gettext" ,gnu-gettext)         ;used at runtime
+       ("mlocate" ,mlocate)
+       ("pinentry" ,pinentry)
+       ("qrencode" ,qrencode)
+       ("steghide" ,steghide)
+       ("swish-e" ,swish-e)))
+    (arguments
+     `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       ;; TODO: Build and install gtk and qt trays
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)   ;no configuration to be done
+         (add-after 'install 'i18n
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (zero? (apply system*
+                           "make" "-C" "extras/translations"
+                           "install" make-flags))))
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/tomb")
+                 `("PATH" ":" prefix
+                   (,(string-append (assoc-ref inputs "mlocate") "/bin")
+                    ,@(map (lambda (program)
+                             (or (and=> (which program) dirname)
+                                 (error "program not found:" program)))
+                           '("seq" "mkfs.ext4" "pinentry" "sudo"
+                             "gpg" "cryptsetup" "gettext"
+                             "qrencode" "steghide" "swish-e")))))
+               #t)))
+         (delete 'check)
+         (add-after 'wrap 'check
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Running the full tests requires sudo/root access for
+             ;; cryptsetup, which is not available in the build environment.
+             ;; But we can run `tomb dig` without root, so make sure that
+             ;; works.  TODO: It Would Be Nice to check the expected "index",
+             ;; "search", "bury", and "exhume" features are available by
+             ;; querying `tomb -h`.
+             (let ((tomb (string-append (assoc-ref outputs "out")
+                                        "/bin/tomb")))
+               (zero? (system* tomb "dig" "-s" "10" "secrets.tomb"))))))))
+    (home-page "http://www.dyne.org/software/tomb")
+    (synopsis "File encryption for secret data")
+    (description
+     "Tomb is an application to manage the creation and access of encrypted
+storage files: it can be operated from commandline and it can integrate with a
+user's graphical desktop.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index 0e1badf869..b267497c7c 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -40,14 +40,14 @@
 (define-public curl
   (package
    (name "curl")
-   (version "7.50.1")
+   (version "7.50.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://curl.haxx.se/download/curl-"
                                 version ".tar.lzma"))
             (sha256
              (base32
-              "0qc3qp3h18v24irzw7dgg1jf39v4hnz8irv83v9lbn9rxzrpdcdj"))))
+              "1spmk0345hq0sgpwxs8d410268lmg3wf1x9v23hxff7wxki5fm4c"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                             ;1.2 MiB of man3 pages
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 0ac71b930c..4eface899e 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -63,6 +64,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
+  #:use-module (guix build-system python)
   #:use-module (guix build-system cmake)
   #:use-module (guix utils)
   #:use-module (srfi srfi-26)
@@ -205,7 +207,7 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
 (define-public mysql
   (package
     (name "mysql")
-    (version "5.7.13")
+    (version "5.7.15")
     (source (origin
              (method url-fetch)
              (uri (list (string-append
@@ -215,13 +217,12 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
                         (string-append
                           "http://downloads.mysql.com/archives/get/file/"
                           name "-" version ".tar.gz")))
-             (patches (search-patches "mysql-fix-failing-test.patch"))
              (sha256
               (base32
-               "11qbib1xpy0zkki7j9ip17hks5kp5zgpcj7x8gy3a4m66lb1mgsh"))))
+               "0mlrxcvkn6bf869hjw9fb6m24ak26ndffnd91b4mknmz8cqkb1ch"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:configure-flags
+     `(#:configure-flags
        '("-DBUILD_CONFIG=mysql_release"
          "-DWITH_SSL=system"
          "-DWITH_ZLIB=system"
@@ -248,7 +249,9 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
                    (lambda _
                      ;; Mysql wants boost-1.59.0 specifically
                      (substitute* "cmake/boost.cmake"
-                                  (("59") "60"))))
+                       (("59")
+                        ,(match (string-split (package-version boost) #\.)
+                           ((_ minor . _) minor))))))
                   (add-after
                    'install 'remove-extra-binaries
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -279,7 +282,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.1.16")
+    (version "10.1.17")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.org/f/"
@@ -287,7 +290,7 @@ Language.")
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "14s3wq1c25n62n75hkixl8n7cni4m73w055nsx4czm655k33bjv7"))))
+                "1ddalhxxcn95qp5b50z213niylcd0s6bqphid0c7c624wg2mm92c"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
@@ -1096,3 +1099,58 @@ trees (LSM), for sustained throughput under random insert workloads.")
     (synopsis "Lightning memory-mapped database library")
     (description "Lightning memory-mapped database library.")
     (license license:openldap2.8)))
+
+(define-public libpqxx
+  (package
+    (name "libpqxx")
+    (version "4.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://pqxx.org/download/software/libpqxx/"
+                    name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0f6wxspp6rx12fkasanb0z2g2gc8dhcfwnxagx8wwqbpg6ifsz09"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("python" ,python-2)))
+    (inputs `(("postgresql" ,postgresql)))
+    (arguments
+     `(#:tests? #f)) ; # FAIL:  1
+    (synopsis "C++ connector for PostgreSQL")
+    (description
+     "Libpqxx is a C++ library to enable user programs to communicate with the
+PostgreSQL database back-end.  The database back-end can be local or it may be
+on another machine, accessed via TCP/IP.")
+    (home-page "http://pqxx.org/")
+    (license license:bsd-3)))
+
+(define-public python-peewee
+  (package
+    (name "python-peewee")
+    (version "2.8.3")
+      (source
+        (origin
+        (method url-fetch)
+        (uri (pypi-uri "peewee" version))
+        (sha256
+         (base32
+          "1605bk11s7aap2q4qyba93rx7yfh8b11kk0cqi08z8klx2iar8yd"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f)) ; Fails to import test data
+    (native-inputs
+     `(("python-cython" ,python-cython)))
+    (home-page "https://github.com/coleifer/peewee/")
+    (synopsis "Small object-relational mapping utility")
+    (description
+     "Peewee is a simple and small ORM (object-relation mapping) tool.  Peewee
+handles converting between pythonic values and those used by databases, so you
+can use Python types in your code without having to worry.  It has built-in
+support for sqlite, mysql and postgresql.  If you already have a database, you
+can autogenerate peewee models using @code{pwiz}, a model generator.")
+    (license license:expat)))
+
+(define-public python2-peewee
+  (package-with-python2 python-peewee))
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 9da8885fb3..54ed5cd36a 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -88,7 +88,7 @@ program to exhibit a bug.")
 (define-public c-reduce
   (package
     (name "c-reduce")
-    (version "2.3.0")
+    (version "2.5.0")
     (source
      (origin
       (method url-fetch)
@@ -97,26 +97,21 @@ program to exhibit a bug.")
                            "creduce-" version ".tar.gz")))
       (sha256
        (base32
-        "0r9lvnifjcnsrkrk8k4mha1kmmb93jya7alm523ck59y3173bpi0"))
-      (modules '((guix build utils)))
-      (snippet
-       '(substitute* "clang_delta/TransformationManager.cpp"
-          (("llvm/Config/config.h") "llvm/Config/llvm-config.h")))))
+        "1r23lhzq3dz8vi2dalxk5las8bf0av2w94hxxbs61pr73m77ik9d"))))
     (build-system gnu-build-system)
     (inputs
      `(("astyle"          ,astyle)
-       ("delta"           ,delta)
        ("llvm"            ,llvm)
        ("clang"           ,clang)
        ("flex"            ,flex)
        ("indent"          ,indent)
        ("perl"            ,perl)
-       ("benchmark-timer" ,perl-benchmark-timer)
        ("exporter-lite"   ,perl-exporter-lite)
        ("file-which"      ,perl-file-which)
        ("getopt-tabular"  ,perl-getopt-tabular)
        ("regex-common"    ,perl-regexp-common)
-       ("sys-cpu"         ,perl-sys-cpu)))
+       ("sys-cpu"         ,perl-sys-cpu)
+       ("term-readkey"    ,perl-term-readkey)))
     (arguments
      `(#:phases (alist-cons-after
                  'install 'set-load-paths
@@ -131,7 +126,7 @@ program to exhibit a bug.")
                                 (string-append (assoc-ref inputs p)
                                                "/lib/perl5/site_perl/"
                                                ,(package-version perl)))
-                              '("benchmark-timer" "exporter-lite"
+                              '("term-readkey"    "exporter-lite"
                                 "file-which"      "getopt-tabular"
                                 "regex-common"    "sys-cpu"))))))
                  %standard-phases)))
@@ -161,7 +156,10 @@ tools that process C/C++ code.")
      ;; XXX: Disable tests because of GTester's rejection of duplicate test
      ;; names, which wasn't addressed in this version of QEMU.
      `(#:tests? #f
-       ,@(package-arguments qemu-minimal)))))
+       ,@(substitute-keyword-arguments (package-arguments qemu-minimal)
+           ((#:phases phases)
+            ;; We disable the tests so we skip the phase disabling the qga test.
+            `(modify-phases ,phases (delete 'disable-test-qga))))))))
 
 (define-public american-fuzzy-lop
   (let ((machine (match (or (%current-target-system)
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index 931db626d8..0c47585fe7 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -26,7 +26,9 @@
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages base)
   #:use-module (gnu packages texinfo)
-  #:use-module (gnu packages compression))
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages tcl))
+
 
 (define-public vera
   (package
@@ -138,3 +140,63 @@ body of text.  Style instead analyzes surface aspects of a written
 work, such as sentence length and other readability measures.")
     (home-page "https://www.gnu.org/software/diction/")
     (license gpl3+)))
+
+(define-public ding
+  (package
+    (name "ding")
+    (version "1.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://ftp.tu-chemnitz.de/pub/Local/urz/" name
+                                  "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "00z97ndwmzsgig9q6y98y8nbxy76pyi9qyj5qfpbbck24gakpz5l"))))
+    (build-system gnu-build-system)
+    (inputs `(("tk" ,tk)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (delete 'check)
+         (replace
+             'install
+           (lambda _
+             (let ((bindir (string-append
+                            (assoc-ref %outputs "out") "/bin"))
+                   (wish (string-append
+                          (assoc-ref %build-inputs "tk")
+                          "/bin/wish8.6"))
+                   (sharedir (string-append
+                              (assoc-ref %outputs "out")
+                              "/share/applications"))
+                   (libdir (string-append
+                            (assoc-ref %outputs "out") "/lib")))
+               (mkdir-p bindir)
+               (mkdir-p libdir)
+               (mkdir-p sharedir)
+
+               (substitute* "ding.desktop"
+                 (("Exec=/usr/bin/ding")
+                  (string-append "Exec=" bindir "/ding")))
+               (with-fluids ((%default-port-encoding "ISO-8859-1"))
+                 (substitute* "ding" (("exec wish") (string-append "exec " wish))))
+               (substitute* "install.sh"
+                 (("/bin/cp") "cp")
+                 (("/bin/mv") "mv")
+                 (("NEEDPROG=\"wish\"")
+                  (string-append "NEEDPROG=\"" wish "\""))
+                 (("DEFBINDIR=\"/usr/local/bin\"")
+                  (string-append "DEFBINDIR=\"" bindir "\""))
+                 (("DEFLIBDIR=\"/usr/local/lib\"")
+                  (string-append "DEFLIBDIR=\"" libdir "\"")))
+               (install-file "ding.desktop" sharedir)
+               (install-file "ding.png" sharedir)
+               (zero?
+                (system* "./install.sh"))))))))
+    (synopsis "Dictionary lookup program with a German-English dictionary")
+    (description "Ding is a dictionary lookup program for the X window system.
+It comes with a German-English dictionary with approximately 270,000 entries.")
+    (home-page  "http://www-user.tu-chemnitz.de/~fri/ding/")
+    (license gpl2+)))
diff --git a/gnu/packages/disk.scm b/gnu/packages/disk.scm
index a322576f14..e75eb081ed 100644
--- a/gnu/packages/disk.scm
+++ b/gnu/packages/disk.scm
@@ -191,10 +191,10 @@ to recover data more efficiently by only reading the necessary blocks.")
                           "CC=gcc")
        #:tests? #f))  ;no tests
     (home-page "https://github.com/dosfstools/dosfstools")
-    (synopsis "Utilities for making and checking MS-DOS FAT filesystems")
+    (synopsis "Utilities for making and checking MS-DOS FAT file systems")
     (description
      "The dosfstools package includes the mkfs.fat and fsck.fat utilities,
-which respectively make and check MS-DOS FAT filesystems.")
+which respectively make and check MS-DOS FAT file systems.")
     (license license:gpl3+)))
 
 (define-public sdparm
diff --git a/gnu/packages/display-managers.scm b/gnu/packages/display-managers.scm
index 579b149a0c..1371bb5f39 100644
--- a/gnu/packages/display-managers.scm
+++ b/gnu/packages/display-managers.scm
@@ -19,18 +19,172 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages display-managers)
-  #:use-module ((guix licenses) #:prefix l:)
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system cmake)
   #:use-module (guix packages)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gl)
-  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages glib)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages kde-frameworks)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages linux))
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xorg))
+
+(define-public greenisland
+  (package
+    (name "greenisland")
+    (version "0.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/greenisland/greenisland"
+                    "/releases/download/v" version "/"
+                    "greenisland-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1c9rlq7fqrsd5nb37anjvnp9xspqjz1kc0fvydv5xdy3abg8mw40"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("extra-cmake-modules" ,extra-cmake-modules)
+       ("dbus" ,dbus)
+       ("glib:bin" ,glib "bin")
+       ("pkg-config" ,pkg-config)
+       ("xorg-server" ,xorg-server)))
+    (inputs
+     `(("elogind" ,elogind)
+       ("eudev" ,eudev)
+       ("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("glib" ,glib)
+       ("libdrm" ,libdrm)
+       ("libinput" ,libinput-minimal)
+       ("libxcursor" ,libxcursor)
+       ("libxkbcommon" ,libxkbcommon)
+       ("libx11" ,libx11)
+       ("mesa" ,mesa)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("wayland" ,wayland)
+       ("wayland-protocols" ,wayland-protocols)
+       ("xcb-util-cursor" ,xcb-util-cursor)))
+    (arguments
+     `(#:configure-flags
+       (list (string-append "-DPLUGIN_INSTALL_DIR="
+                            (assoc-ref %outputs "out") "/plugins")
+             (string-append "-DQML_INSTALL_DIR="
+                            (assoc-ref %outputs "out") "/qml"))
+       #:modules ((guix build cmake-build-system)
+                  (guix build qt-utils)
+                  (guix build utils))
+       #:imported-modules (,@%cmake-build-system-modules
+                           (guix build qt-utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-udev-tests
+           (lambda _ ; FIXME: Build env doesn't contain /dev/sda
+             (substitute* "tests/auto/platform/tst_udev.cpp"
+               (("QVERIFY") "// QVERIFY")
+               (("QCOMPARE") "// QCOMPARE"))))
+         (replace 'check
+           (lambda _
+             (setenv "DBUS_FATAL_WARNINGS" "0")
+             (zero? (system* "dbus-launch" "ctest" "."))))
+         (add-before 'check 'check-setup
+           (lambda _
+             (setenv "CTEST_OUTPUT_ON_FAILURE" "1") ; Enable debug output
+             (setenv "QT_QPA_PLATFORM" "offscreen")
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             #t))
+         (add-after 'install 'wrap-programs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-qt-program out "greenisland")
+               (wrap-qt-program out "greenisland-launcher")
+               (wrap-qt-program out "greenisland-screencaster")
+               (wrap-qt-program out "greenisland-wayland-scanner")
+               #t))))))
+    (synopsis "QtQuick Wayland compositor and shell for desktop and mobile")
+    (description "Green Island provides a full blown Wayland compositor for
+QtQuick as well as pluggable hardware abstraction, extensions, tools and a
+Qt-style API for Wayland clients.")
+    (home-page "http://hawaiios.org")
+    ;; Choice of license at the user's opinion.
+    (license (list license:gpl2 license:gpl3 license:lgpl2.1 license:lgpl3))))
+
+(define-public sddm
+  (package
+    (name "sddm")
+    (version "0.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/sddm/sddm"
+                    "/releases/download/v" version "/"
+                    "sddm-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0y3pn8g2qj7q20zkmbasrfsj925lfzizk63sfrvzf84bc5c84d3y"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("extra-cmake-modules" ,extra-cmake-modules)
+       ("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)))
+    (inputs
+     `(("glib" ,glib)
+       ("greenisland" ,greenisland)
+       ("libxcb" ,libxcb)
+       ("libxkbcommon" ,libxkbcommon)
+       ("linux-pam" ,linux-pam)
+       ("qtbase" ,qtbase)
+       ("qtdeclarative" ,qtdeclarative)
+       ("shadow" ,shadow)
+       ("wayland" ,wayland)))
+    (arguments
+     `(#:configure-flags
+       (list
+        ;; Currently doesn't do anything
+        ;; Option added by enable wayland greeters PR
+        "-DENABLE_WAYLAND=ON"
+        "-DENABLE_PAM=ON"
+        "-DCONFIG_FILE=/etc/sddm.conf"
+        ;; Set path to /etc/login.defs
+        ;; Alternatively use -DUID_MIN and -DUID_MAX
+        (string-append "-DLOGIN_DEFS_PATH="
+                       (assoc-ref %build-inputs "shadow")
+                       "/etc/login.defs")
+        (string-append "-DQT_IMPORTS_DIR="
+                       (assoc-ref %outputs "out") "/qml")
+        (string-append "-DCMAKE_INSTALL_SYSCONFDIR="
+                       (assoc-ref %outputs "out") "/etc"))
+       #:modules ((guix build cmake-build-system)
+                  (guix build qt-utils)
+                  (guix build utils))
+       #:imported-modules (,@%cmake-build-system-modules
+                           (guix build qt-utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-programs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-qt-program out "sddm")
+               (wrap-qt-program out "sddm-greeter")
+               #t))))))
+    (synopsis "QML based X11 and Wayland display manager")
+    (description "SDDM is a display manager for X11 and Wayland aiming to be
+fast, simple and beautiful.  SDDM is themeable and puts no restrictions on the
+user interface design.  It uses QtQuick which gives the designer the ability to
+create smooth, animated user interfaces.")
+    (home-page "https://github.com/sddm/sddm")
+    ;; QML files are MIT licensed and images are CC BY 3.0.
+    (license (list license:gpl2+ license:expat license:cc-by3.0))))
 
 (define-public slim
   (package
@@ -92,4 +246,4 @@ fonts, External themes support, Configurable runtime options: X server --
 login / shutdown / reboot commands, Single (GDM-like) or double (XDM-like)
 input control, Can load predefined user at startup, Configurable welcome /
 shutdown messages, Random theme selection.")
-    (license l:gpl2)))
+    (license license:gpl2)))
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
new file mode 100644
index 0000000000..8d4a7e4753
--- /dev/null
+++ b/gnu/packages/django.scm
@@ -0,0 +1,195 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;;
+;;; 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 django)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system python)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages python))
+
+(define-public python-django
+  (package
+    (name "python-django")
+    (version "1.10")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "Django" version))
+              (sha256
+               (base32
+                "01bh5yra6zyxcpqacahbwfbn0y4ivw07j2jsw3crvmjzivb6if26"))
+              (patches (search-patches "python-django-fix-testcase.patch"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-tzdir
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; The test-suite tests timezone-dependent functions, thus tzdata
+             ;; needs to be available.
+             (setenv "TZDIR"
+                     (string-append (assoc-ref inputs "tzdata")
+                                    "/share/zoneinfo"))
+             #t))
+         (replace 'check
+           (lambda _
+             (setenv "PYTHONPATH"
+                     (string-append ".:" (getenv "PYTHONPATH")))
+             (zero? (system* "python" "tests/runtests.py")))))))
+    ;; TODO: Install extras/django_bash_completion.
+    (propagated-inputs
+     ;; Django uses 'pkg_resources' (part of setuptools) to locate templates
+     ;; at run-time.
+     `(("python-setuptools" ,python-setuptools)))
+    (native-inputs
+     `(("tzdata", tzdata)
+       ;; bcrypt and argon2-cffi are extra requirements not yet in guix
+       ;;("python-argon2-cffi" ,python-argon2-cffi) ; >= 16.1.0
+       ;;("python-bcrypt" ,python-bcrypt) ; not py-bcrypt!
+       ;; Remaining packages are test requirements taken from
+       ;; tests/requirements/py3.txt
+       ("python-docutils" ,python-docutils)
+       ;; optional for tests: ("python-geoip2" ,python-geoip2)
+       ("python-jinja2" ,python-jinja2)           ; >= 2.7
+       ;; optional for tests: ("python-memcached" ,python-memcached)
+       ("python-numpy" ,python-numpy)
+       ("python-pillow" ,python-pillow)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-pytz" ,python-pytz)
+       ;; optional for tests: ("python-selenium" ,python-selenium)
+       ("python-sqlparse" ,python-sqlparse)
+       ("python-tblib" ,python-tblib)))
+    (home-page "http://www.djangoproject.com/")
+    (synopsis "High-level Python Web framework")
+    (description
+     "Django is a high-level Python Web framework that encourages rapid
+development and clean, pragmatic design.  It provides many tools for building
+any Web site.  Django focuses on automating as much as possible and adhering
+to the @dfn{don't repeat yourself} (DRY) principle.")
+    (license license:bsd-3)
+    (properties `((python2-variant . ,(delay python2-django))))))
+
+(define-public python2-django
+  (let ((base (package-with-python2 (strip-python2-variant python-django))))
+    (package
+      (inherit base)
+      (native-inputs
+       `(;; Test requirements for Python 2 taken from
+         ;; tests/requirements/py3.txt: enum34 and mock.
+         ("python2-enum34" ,python2-enum34)
+         ("python2-mock" ,python2-mock)
+         ;; When adding memcached mind: for Python 2 memcached <= 1.53 is
+         ;; required.
+         ,@(package-native-inputs base))))))
+
+(define-public python-django-simple-math-captcha
+  (package
+    (name "python-django-simple-math-captcha")
+    (version "1.0.7")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-simple-math-captcha" version))
+              (sha256
+               (base32
+                "0906hms6y6znjhpd0g4wmzv9vcla4brkdpsm4zha9zdj8g5vq2hd"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (home-page "https://github.com/alsoicode/django-simple-math-captcha")
+    (synopsis "Easy-to-use math field/widget captcha for Django forms")
+    (description
+     "A multi-value-field that presents a human answerable question,
+with no settings.py configuration necessary, but instead can be configured
+with arguments to the field constructor.")
+    (license license:asl2.0)))
+
+(define-public python2-django-simple-math-captcha
+  (package-with-python2 python-django-simple-math-captcha))
+
+(define-public python-pytest-django
+  (package
+    (name "python-pytest-django")
+    (version "2.9.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pytest-django" version))
+              (sha256
+               (base32
+                "1mmc7zsz3dlhs6sx4sppkj1vgshabi362r1a8b8wpj1qfximpqcb"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-setuppy
+           (lambda _
+             (substitute* "setup.py"
+                          (("setuptools_scm==1.8.0") "setuptools_scm"))
+             #t)))))
+    (native-inputs
+     `(("python-setuptools-scm" ,python-setuptools-scm)))
+    (inputs
+     `(("python-py" ,python-py)
+       ("python-pytest" ,python-pytest)))
+    (home-page "http://pytest-django.readthedocs.org/")
+    (synopsis "Django plugin for py.test")
+    (description "Pytest-django is a plugin for py.test that provides a set of
+useful tools for testing Django applications and projects.")
+    (properties `((python2-variant . ,(delay python2-pytest-django))))
+    (license license:bsd-3)))
+
+(define-public python2-pytest-django
+  (let ((base (package-with-python2
+                (strip-python2-variant python-pytest-django))))
+    (package (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
+
+(define-public python-django-filter
+  (package
+    (name "python-django-filter")
+    (version "0.14.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-filter" version))
+              (sha256
+               (base32
+                "0f78hmk8c903zwfzlsiw7ivgag81ymmb5hi73rzxbhnlg2v0l3fx"))))
+    (build-system python-build-system)
+    (home-page "https://django-filter.readthedocs.io/en/latest/")
+    (synopsis "Reusable Django application to filter querysets dynamically")
+    (description
+     "Django-filter is a generic, reusable application to alleviate writing
+some of the more mundane bits of view code.  Specifically, it allows users to
+filter down a queryset based on a model’s fields, displaying the form to let
+them do this.")
+    (properties `((python2-variant . ,(delay python2-django-filter))))
+    (license license:bsd-3)))
+
+(define-public python2-django-filter
+  (let ((base (package-with-python2
+                (strip-python2-variant python-django-filter))))
+    (package (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 819343ad42..3e79e57adb 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -63,56 +64,67 @@ and BOOTP/TFTP for network booting of diskless machines.")
     ;; Source files only say GPL2 and GPL3 are allowed.
     (license (list license:gpl2 license:gpl3))))
 
-(define-public bind-utils
+(define-public bind
   (package
-    (name "bind-utils")
-    (version "9.10.4")
+    (name "bind")
+    (version "9.10.4-P3")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://ftp.isc.org/isc/bind9/" version
-                                  "/bind-" version ".tar.gz"))
+              (uri (string-append
+                    "ftp://ftp.isc.org/isc/bind9/" version "/" name "-"
+                    version ".tar.gz"))
               (sha256
                (base32
-                "0mmhzi4483mkak47wj255a36g3v0yilxwfwlbckr1hssinri5m7q"))))
+                "1vxs29w4hnl7jcd7sknga58xv1qk2rcpsxyich7cpp7xi77faxd0"))))
     (build-system gnu-build-system)
+    (outputs `("out" "utils"))
     (inputs
      ;; it would be nice to add GeoIP and gssapi once there is package
      `(("libcap" ,libcap)
        ("libxml2" ,libxml2)
-       ("mysql" ,mysql)
        ("openssl" ,openssl)
-       ("perl" ,perl)
        ("p11-kit" ,p11-kit)))
+    (native-inputs `(("perl" ,perl)
+                     ("net-tools" ,net-tools)))
     (arguments
-     `(#:tests? #f ; no test phase implemented
-       #:configure-flags
+     `(#:configure-flags
        (list (string-append "--with-openssl="
                             (assoc-ref %build-inputs "openssl"))
-             (string-append "--with-dlz-mysql="
-                            (assoc-ref %build-inputs "mysql"))
              (string-append "--with-pkcs11="
                             (assoc-ref %build-inputs "p11-kit")))
-       #:modules ((srfi srfi-1)
-                  (srfi srfi-26)
-                  ,@%gnu-build-system-modules)
        #:phases
-       (let ((libs '("dns" "isc" "bind9" "isccfg" "lwres"))
-             (bins '("dig" "nsupdate")))
-         (modify-phases %standard-phases
-           (replace 'build
-             (lambda _
-               (every (lambda (dir)
-                        (zero? (system* "make" "-C" dir)))
-                      (append (map (cut string-append "lib/" <>) libs)
-                              (map (cut string-append "bin/" <>) bins)))))
-           (replace 'install
-             (lambda _
-               (every (lambda (dir)
-                        (zero? (system* "make" "-C" dir "install")))
-                      (map (cut string-append "bin/" <>) bins))))))))
-    (home-page "https://www.isc.org/downloads/bind/")
-    (synopsis "Tools for querying nameservers")
-    (description
-     "These tools, included with ISC BIND, are useful for analysis of DNS
-issues or verification of configuration.")
+       (modify-phases %standard-phases
+         (add-after 'strip 'move-to-utils
+           (lambda _
+             (for-each
+              (lambda (file)
+                (let ((target  (string-append (assoc-ref %outputs "utils") file))
+                      (src  (string-append (assoc-ref %outputs "out") file)))
+                  (mkdir-p (dirname target))
+                  (link src target)
+                  (delete-file src)))
+              '("/bin/dig" "/bin/delv" "/bin/nslookup" "/bin/host" "/bin/nsupdate"
+                "/share/man/man1/dig.1"
+                "/share/man/man1/host.1"
+                "/share/man/man1/nslookup.1"
+                "/share/man/man1/nsupdate.1"))))
+         ;; When and if guix provides user namespaces for the build process,
+         ;; then the following can be uncommented and the subsequent "force-test"
+         ;; will not be necessary.
+         ;;
+         ;;   (add-before 'check 'set-up-loopback
+         ;;     (lambda _
+         ;;          (system "bin/tests/system/ifconfig.sh up")))
+         (replace 'check
+           (lambda _
+             (zero? (system* "make" "force-test")))))))
+    (synopsis "An implementation of the Domain Name System")
+    (description "BIND is an implementation of the Domain Name System (DNS)
+protocols for the Internet.  It is a reference implementation of those
+protocols, but it is also production-grade software, suitable for use in
+high-volume and high-reliability applications. The name BIND stands for
+\"Berkeley Internet Name Domain\", because the software originated in the early
+1980s at the University of California at Berkeley.")
+    (home-page "https://www.isc.org/downloads/bind")
     (license (list license:isc))))
+
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index ad51634f0c..df9f4496fb 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
@@ -16,6 +16,7 @@
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -74,20 +75,24 @@
   #:use-module (gnu packages statistics)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages mp3)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages fribidi)
+  #:use-module (gnu packages gd)
+  #:use-module (gnu packages fontutils)
   #:use-module (guix utils)
   #:use-module (srfi srfi-1))
 
 (define-public emacs
   (package
     (name "emacs")
-    (version "24.5")
+    (version "25.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/emacs/emacs-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0kn3rzm91qiswi0cql89kbv6mqn27rwsyjfb8xmwy9m5s8fxfiyx"))
+               "0cwgyiyymnx4xdg99dm2drfxcyhy2jmyf0rkr9fwj9mwwf77kwhr"))
              (patches (search-patches "emacs-exec-path.patch"
                                       "emacs-fix-scheme-indent-function.patch"
                                       "emacs-source-date-epoch.patch"))
@@ -155,7 +160,11 @@
        ("libsm" ,libsm)
        ("alsa-lib" ,alsa-lib)
        ("dbus" ,dbus)
-       ("guix-src" ,(package-source guix))))
+       ("guix-src" ,(package-source guix))
+
+       ;; multilingualization support
+       ("libotf" ,libotf)
+       ("m17n-lib" ,m17n-lib)))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("texinfo" ,texinfo)))
@@ -320,7 +329,7 @@ metadata.")
 
 (define-public paredit
   (package
-    (name "paredit")
+    (name "emacs-paredit")
     (version "24")
     (source (origin
               (method url-fetch)
@@ -364,6 +373,9 @@ for those who may want transient periods of unbalanced parentheses, such as
 when typing parentheses directly or commenting out code line by line.")
     (license license:gpl3+)))
 
+(define-public paredit/old-name
+  (deprecated-package "paredit" paredit))
+
 (define-public git-modes
   (package
     (name "git-modes")
@@ -652,7 +664,7 @@ programs.")
     (version "1.0.4")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://elpa.gnu.org/packages/let-alist-"
+              (uri (string-append "https://elpa.gnu.org/packages/let-alist-"
                                   version ".el"))
               (sha256
                (base32
@@ -681,7 +693,7 @@ programs.")
                      (emacs-byte-compile-directory lispdir)
                      #t))))
     (native-inputs `(("emacs" ,emacs-minimal)))
-    (home-page "http://elpa.gnu.org/packages/let-alist.html")
+    (home-page "https://elpa.gnu.org/packages/let-alist.html")
     (synopsis "Easily let-bind values of an assoc-list by their names")
     (description
      "This package offers a single Emacs Lisp macro, @code{let-alist}.  This
@@ -1038,13 +1050,13 @@ mode, Rmail, Gnus, MH-E, and VM).  BBDB is fully customizable.")
     (version "1.9")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://elpa.gnu.org/packages/async-"
+              (uri (string-append "https://elpa.gnu.org/packages/async-"
                                   version ".tar"))
               (sha256
                (base32
                 "1ip5nc8xyln5szvqwp6wqva9xr84pn8ssn3nnphrszr19y4js2bm"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/async.html")
+    (home-page "https://elpa.gnu.org/packages/async.html")
     (synopsis "Asynchronous processing in Emacs")
     (description
      "This package provides the ability to call asynchronous functions and
@@ -1061,7 +1073,7 @@ as a library for other Emacs packages.")
      (origin
        (method url-fetch)
        (uri (string-append
-             "http://elpa.gnu.org/packages/auctex-"
+             "https://elpa.gnu.org/packages/auctex-"
              version
              ".tar"))
        (sha256
@@ -1327,6 +1339,34 @@ Expectations, but it can be used in other contexts.")
 definitions for testing with the Ecukes framework.")
     (license license:gpl3+)))
 
+(define-public emacs-es-mode
+  (package
+    (name "emacs-es-mode")
+    (version "4.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/dakrone/es-mode/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "02as82clm553yss7jfjac888308zr1h2229cch4z1yij70j25c8y"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     ;; The version of org in Emacs 24.5 is not sufficient, and causes tables
+     ;; to be rendered incorrectly
+     `(("emacs-org" ,emacs-org)))
+    (home-page "https://github.com/dakrone/es-mode")
+    (synopsis "Major mode for editing Elasticsearch queries")
+    (description "@code{es-mode} includes highlighting, completion and
+indentation support for Elasticsearch queries.  Also supported are
+@code{es-mode} blocks in @code{org-mode}, for which the results of queries can
+be processed through @code{jq}, or in the case of aggregations, can be
+rendered in to a table.  In addition, there is an @code{es-command-center}
+mode, which displays information about Elasticsearch clusters.")
+    (license license:gpl3+)))
+
 (define-public emacs-expand-region
   (package
     (name "emacs-expand-region")
@@ -1619,7 +1659,7 @@ source code using IPython.")
     (version "0.9")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://elpa.gnu.org/packages/debbugs-"
+              (uri (string-append "https://elpa.gnu.org/packages/debbugs-"
                                   version ".tar"))
               (sha256
                (base32
@@ -1627,7 +1667,7 @@ source code using IPython.")
     (build-system emacs-build-system)
     (propagated-inputs
      `(("emacs-async" ,emacs-async)))
-    (home-page "http://elpa.gnu.org/packages/debbugs.html")
+    (home-page "https://elpa.gnu.org/packages/debbugs.html")
     (synopsis "Access the Debbugs bug tracker in Emacs")
     (description
      "This package lets you access the @uref{http://bugs.gnu.org,GNU Bug
@@ -2099,7 +2139,7 @@ package provides a light and a dark variant.")
     (version "1.3.0")
     (source
      (origin (method url-fetch)
-             (uri (string-append "http://elpa.gnu.org/packages/ahungry-theme-"
+             (uri (string-append "https://elpa.gnu.org/packages/ahungry-theme-"
                                  version ".tar"))
              (sha256
               (base32
@@ -2405,7 +2445,7 @@ The purpose of this library is to wrap all the quirks and hassle of
     (version "0.1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://elpa.gnu.org/packages/queue-"
+              (uri (string-append "https://elpa.gnu.org/packages/queue-"
                                   version ".el"))
               (sha256
                (base32
@@ -2448,7 +2488,7 @@ be removed from the front.  This type of data structure is sometimes called an
     (version "1.7.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://elpa.gnu.org/packages/spinner-"
+              (uri (string-append "https://elpa.gnu.org/packages/spinner-"
                                   version ".el"))
               (sha256
                (base32
@@ -2467,13 +2507,13 @@ ongoing operations.")
     (version "2.15")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://elpa.gnu.org/packages/seq-"
+              (uri (string-append "https://elpa.gnu.org/packages/seq-"
                                   version ".tar"))
               (sha256
                (base32
                 "09wi1765bmn7i8fg6ajjfaxgs4ipc42d58zx2fdqpidrdg9c7q73"))))
     (build-system emacs-build-system)
-    (home-page "http://elpa.gnu.org/packages/seq.html")
+    (home-page "https://elpa.gnu.org/packages/seq.html")
     (synopsis "Sequence manipulation functions for Emacs")
     (description
      "This Emacs library provides sequence-manipulation functions that
@@ -2986,14 +3026,14 @@ passive voice.")
 (define-public emacs-org
   (package
     (name "emacs-org")
-    (version "20160815")
+    (version "20160912")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://orgmode.org/elpa/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "0k9pa13kpmpi6irmbavxffgqfanhjnijz4mkmmi0zp7kgjfbaliw"))))
+                "1xawj0pdvqrgzlixxgbfa01gzajfaz47anr5m4aw035rhc6s02r7"))))
     (build-system emacs-build-system)
     (home-page "http://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
@@ -3073,3 +3113,74 @@ that allows users to concentrate more on their own work.  Its features are:
 a visual interface, reduce overhead of completion by using statistic method,
 extensibility.")
     (license license:gpl3+)))
+
+(define-public m17n-db
+  (package
+    (name "m17n-db")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/m17n/m17n-db-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "1w08hnsbknrcjlzp42c99bgwc9hzsnf5m4apdv0dacql2s09zfm2"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("gettext" ,gnu-gettext)))
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--with-charmaps="
+                            (assoc-ref %build-inputs "libc")
+                            "/share/i18n/charmaps"))))
+    ;; With `guix lint' the home-page URI returns a small page saying
+    ;; that your browser does not handle frames. This triggers the "URI
+    ;; returns suspiciously small file" warning.
+    (home-page "http://www.nongnu.org/m17n/")
+    (synopsis "Multilingual text processing library (database)")
+    (description "The m17n library realizes multilingualization of
+many aspects of applications.  The m17n library represents
+multilingual text as an object named M-text.  M-text is a string with
+attributes called text properties, and designed to substitute for
+string in C.  Text properties carry any information required to input,
+display and edit the text.
+
+This package contains the library database.")
+    (license license:lgpl2.1+)))
+
+(define-public m17n-lib
+  (package
+    (name "m17n-lib")
+    (version "1.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://download.savannah.gnu.org/releases/m17n/m17n-lib-"
+             version ".tar.gz"))
+       (sha256
+        (base32 "10yv730i25g1rpzv6q49m6xn4p8fjm7jdwvik2h70sn8w3hm7f4f"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("fribidi" ,fribidi)
+       ("gd" ,gd)
+       ("libotf" ,libotf)
+       ("libxft" ,libxft)
+       ("libxml2" ,libxml2)
+       ("m17n-db" ,m17n-db)))
+    (arguments
+     `(#:parallel-build? #f))
+    ;; With `guix lint' the home-page URI returns a small page saying
+    ;; that your browser does not handle frames. This triggers the "URI
+    ;; returns suspiciously small file" warning.
+    (home-page "http://www.nongnu.org/m17n/")
+    (synopsis "Multilingual text processing library (runtime)")
+    (description "The m17n library realizes multilingualization of
+many aspects of applications.  The m17n library represents
+multilingual text as an object named M-text.  M-text is a string with
+attributes called text properties, and designed to substitute for
+string in C.  Text properties carry any information required to input,
+display and edit the text.
+
+This package contains the library runtime.")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index b1cc401bdc..f642943892 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -26,6 +26,8 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages code)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages fontutils)
@@ -40,6 +42,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages photo)
@@ -53,7 +56,7 @@
 (define-public efl
   (package
     (name "efl")
-    (version "1.18.0")
+    (version "1.18.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -61,7 +64,7 @@
                     version ".tar.xz"))
               (sha256
                (base32
-                "17mzbjmz8d2vs8p63r1sk3mppl3l2fhxy2jv24dp75lgqbsvp806"))))
+                "08njx6wd505as1vn0yp4mnmf6mb2v28jsipxxx4zhf78v18d2sqc"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -79,6 +82,7 @@
        ("librsvg" ,librsvg)
        ("libspectre" ,libspectre)
        ("libtiff" ,libtiff)
+       ("libwebp" ,libwebp)
        ("libx11" ,libx11)
        ("libxcomposite" ,libxcomposite)
        ("libxcursor" ,libxcursor)
@@ -122,23 +126,12 @@
     (arguments
      `(#:configure-flags '("--disable-silent-rules"
                            "--enable-liblz4"
-                           "--enable-harfbuzz")
-       #:phases
-       (modify-phases %standard-phases
-         ;; ecore_audio cannot find pulseaudio or libsndfile when compiled.
-         ;; Starting in version 1.18.0, these two libraries are dlopened so
-         ;; we hardcode their locations as a temporary workaround.
-         (add-after 'configure 'hardlink-dlopen-files
-           (lambda _
-             (substitute* "src/lib/ecore_audio/ecore_audio.c"
-                          (("libpulse.so.0")
-                           (string-append (assoc-ref %build-inputs "pulseaudio")
-                                          "/lib/libpulse.so.0")))
-             (substitute* "src/lib/ecore_audio/ecore_audio.c"
-                          (("libsndfile.so.1")
-                           (string-append (assoc-ref %build-inputs "libsndfile")
-                                          "/lib/libsndfile.so.1")))
-             #t)))))
+                           "--enable-xinput22"
+                           "--enable-image-loader-webp"
+                           "--enable-multisense"
+                           "--with-opengl=es"
+                           "--enable-egl"
+                           "--enable-harfbuzz")))
     (home-page "https://www.enlightenment.org")
     (synopsis "Enlightenment Foundation Libraries")
     (description
@@ -149,90 +142,6 @@ removable devices or support for multimedia.")
     ;; Different parts are under different licenses.
     (license (list license:bsd-2 license:lgpl2.1 license:zlib))))
 
-(define-public elementary
-  (package
-    (name "elementary")
-    (version "1.17.1")
-    (source (origin
-              (method url-fetch)
-              (uri
-               (string-append "https://download.enlightenment.org/rel/libs/"
-                              "elementary/elementary-" version ".tar.xz"))
-              (sha256
-               (base32
-                "149xjq4z71l44w1kd8zks9b2g0wjc9656w46hzd27b58afj1dqc5"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (propagated-inputs
-     `(("efl" ,efl))) ; elementary.pc, elementary-cxx.pc
-    (home-page "https://www.enlightenment.org")
-    (synopsis "Widget library of Enlightenment world")
-    (description
-     "Elementary is a widget library/toolkit, part of the Enlightenment
-Foundation  Libraries.  It is build upon Edje and Evas libraries and uses
-full capabilities of EFL.")
-    (license license:lgpl2.1)))
-
-(define-public evas-generic-loaders
-  (package
-    (name "evas-generic-loaders")
-    (version "1.17.0")
-    (source (origin
-              (method url-fetch)
-              (uri
-               (string-append
-                "https://download.enlightenment.org/rel/libs/"
-                "evas_generic_loaders/evas_generic_loaders-"
-                version ".tar.xz"))
-              (sha256
-               (base32
-                "0ynq1nx0bfgg19p4vki1fap36yyip53zaxpzncx2slr6jcx1kxf2"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("efl" ,efl)
-       ("gstreamer" ,gstreamer)
-       ("gst-plugins-base" ,gst-plugins-base)
-       ("librsvg" ,librsvg)
-       ("libspectre" ,libspectre)
-       ("poppler" ,poppler)))
-    (home-page "https://www.enlightenment.org")
-    (synopsis "Plugins for integration of various file types into Evas")
-    (description
-     "Evas-generic-loaders is a collection of interfaces to outside libraries
-and applications allowing to natively open pictures, documents and media
-files in Evas (EFL canvas library).")
-    (license license:gpl2+)))
-
-(define-public emotion-generic-players
-  (package
-    (name "emotion-generic-players")
-    (version "1.17.0")
-    (source (origin
-              (method url-fetch)
-              (uri
-               (string-append "https://download.enlightenment.org/rel/libs/"
-                              "emotion_generic_players/emotion_generic_players"
-                              "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "03kaql95mk0c5j50v3c5i5lmlr3gz7xlh8p8q87xz8zf9j5h1pp7"))))
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (inputs
-     `(("efl" ,efl)
-       ("vlc" ,vlc)))
-    (home-page "https://www.enlightenment.org")
-    (synopsis "Plugins for integrating media players in EFL based applications")
-    (description
-     "Emotion-generic-players is a collection of interfaces to outside libraries
-and applications allowing to natively play video files through Emotion.
-The only supported now is VLC.")
-    (license license:bsd-2)))
-
 (define-public terminology
   (package
     (name "terminology")
@@ -262,7 +171,7 @@ contents and more.")
 (define-public rage
   (package
     (name "rage")
-    (version "0.2.0")
+    (version "0.2.1")
     (source (origin
               (method url-fetch)
               (uri
@@ -271,7 +180,7 @@ contents and more.")
                 version ".tar.xz"))
               (sha256
                (base32
-                "07mfh0k83nrm557x72qafxawxizilqgkr6sngbia3ikprc8556zy"))))
+                "06kbgcnbhl9clhdl7k983m4d0n6ggsl4qvizzi1nrp8c7np87fix"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -359,3 +268,33 @@ Libraries stack (eo, evas, ecore, edje, emotion, ethumb and elementary).")
 
 (define-public python2-efl
   (package-with-python2 python-efl))
+
+(define-public edi
+  (package
+    (name "edi")
+    (version "0.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://github.com/ajwillia-ms/edi/releases/"
+                            "download/v" version "/edi-" version ".tar.bz2"))
+        (sha256
+         (base32
+          "0qczz5psryxasphg5km95845h510237rf0k1dy8f0dad52ii90j1"))))
+    (build-system gnu-build-system)
+    (arguments '(#:configure-flags '("--with-tests=coverage")))
+    (native-inputs
+     `(("check" ,check)
+       ("lcov" ,lcov)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("clang" ,clang)
+       ("efl" ,efl)))
+    (home-page "https://www.enlightenment.org/about-edi")
+    (synopsis "Development environment for Enlightenment")
+    (description "EDI is a development environment designed for and built using
+the EFL.  It's aim is to create a new, native development environment for Linux
+that tries to lower the barrier to getting involved in Enlightenment development
+and in creating applications based on the Enlightenment Foundation Library suite.")
+    (license (list license:public-domain ; data/extra/skeleton
+                   license:gpl2))))      ; edi
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 21a22768fd..57c9f60bac 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -46,7 +46,7 @@
 (define-public bitcoin-core
   (package
     (name "bitcoin-core")
-    (version "0.12.1")
+    (version "0.13.0")
     (source (origin
              (method url-fetch)
              (uri
@@ -54,11 +54,11 @@
                              version "/bitcoin-" version ".tar.gz"))
              (sha256
               (base32
-               "16g1cnasy24275kxrs0cg48nbx1dk54xvxm1pdsvk7y30mn3pz08"))))
+               "1nhw2s8p1hg6715l6kc1c7psqhkzfwhfrrgiar17zccvd14p0z8c"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("python" ,python-2) ; for the tests
+       ("python" ,python) ; for the tests
        ("util-linux" ,util-linux))) ; provides the hexdump command for tests
     (inputs
      `(("bdb" ,bdb-5.3) ; with 6.2.23, there is an error: ambiguous overload
diff --git a/gnu/packages/flashing-tools.scm b/gnu/packages/flashing-tools.scm
index d0c164eff4..a55ed96edd 100644
--- a/gnu/packages/flashing-tools.scm
+++ b/gnu/packages/flashing-tools.scm
@@ -38,16 +38,15 @@
 (define-public flashrom
   (package
     (name "flashrom")
-    (version "0.9.7")
+    (version "0.9.9")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://download.flashrom.org/releases/flashrom-"
+                    "https://download.flashrom.org/releases/flashrom-"
                     version ".tar.bz2"))
               (sha256
                (base32
-                "1s9pc4yls2s1gcg2ar4q75nym2z5v6lxq36bl6lq26br00nj2mas"))
-              (patches (search-patches "flashrom-use-libftdi1.patch"))))
+                "0i9wg1lyfg99bld7d00zqjm9f0lk6m0q3h3n9c195c9yysq5ccfb"))))
     (build-system gnu-build-system)
     (inputs `(("dmidecode" ,dmidecode)
               ("pciutils" ,pciutils)
@@ -55,7 +54,9 @@
               ("libftdi" ,libftdi)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (arguments
-     '(#:make-flags (list "CC=gcc" (string-append "PREFIX=" %output))
+     '(#:make-flags (list "CC=gcc"
+                          (string-append "PREFIX=" %output)
+                          "CONFIG_ENABLE_LIBUSB0_PROGRAMMERS=no")
        #:tests? #f   ; no 'check' target
        #:phases
        (alist-delete
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 3902aab7da..e28598d421 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -602,7 +602,7 @@ languages, plus Greek and Cyrillic.")
 (define-public font-gnu-unifont
   (package
     (name "font-gnu-unifont")
-    (version "9.0.01")
+    (version "9.0.02")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -610,7 +610,7 @@ languages, plus Greek and Cyrillic.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "14z4lx6asa94i73m19lsdgzqjn9xzi8320h3dafvzq9ima94pm9b"))))
+                "1ss6cp2bs8mzz3jqjbmmi877jfdb1jjcd29dvyk3i8qy7r0d44qm"))))
     (build-system gnu-build-system)
     (outputs '("out" ; TrueType version
                "pcf" ; PCF (bitmap) version
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 19ce0ee6e4..4bef23c1ae 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -36,6 +36,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gtk)
@@ -49,6 +50,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages libunwind)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages polkit)
@@ -318,6 +320,79 @@ applications, X servers (rootless or fullscreen) or other display servers.")
     (home-page "https://wayland.freedesktop.org")
     (license license:expat)))
 
+(define-public weston
+  (package
+    (name "weston")
+    (version "1.11.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://wayland.freedesktop.org/releases/"
+                    "weston-" version ".tar.xz"))
+              (sha256
+               (base32
+                "09biddxw3ar797kxf9mywjkb2iwky6my39gpp51ni846y7lqdq05"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("xorg-server" ,xorg-server)))
+    (inputs
+     `(("cairo" ,cairo-xcb)
+       ("dbus" ,dbus)
+       ("elogind" ,elogind)
+       ("libinput" ,libinput-minimal)
+       ("libunwind" ,libunwind)
+       ("libxcursor" ,libxcursor)
+       ("libxkbcommon" ,libxkbcommon)
+       ("mesa" ,mesa)
+       ("mtdev" ,mtdev)
+       ("linux-pam" ,linux-pam)
+       ("wayland" ,wayland)
+       ("wayland-protocols" ,wayland-protocols)
+       ("xorg-server-xwayland" ,xorg-server-xwayland)))
+    (arguments
+     `(#:configure-flags
+       (list "--disable-setuid-install"
+             "--enable-systemd-login"
+             (string-append "--with-xserver-path="
+                            (assoc-ref %build-inputs "xorg-server-xwayland")
+                            "/bin/Xwayland"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'use-elogind
+           (lambda _
+             ;; Use elogind instead of systemd
+             (substitute* "configure"
+               (("libsystemd-login >= 198") "libelogind"))
+             (substitute* '("src/launcher-logind.c" "src/weston-launch.c")
+               (("#include <systemd/sd-login.h>")
+                "#include <elogind/sd-login.h>"))))
+         (add-after 'configure 'patch-confdefs.h
+           (lambda _
+             (system "echo \"#define HAVE_SYSTEMD_LOGIN_209 1\" >> confdefs.h")))
+         (add-before 'check 'setup
+           (lambda _
+             (setenv "HOME" (getcwd))
+             (setenv "XDG_RUNTIME_DIR" (getcwd))
+             #t))
+         (add-before 'check 'start-xorg-server
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; The test suite requires a running X server.
+             (system (string-append (assoc-ref inputs "xorg-server")
+                                    "/bin/Xvfb :1 &"))
+             (setenv "DISPLAY" ":1")
+             #t)))))
+    (home-page "https://wayland.freedesktop.org")
+    (synopsis "Reference implementation of a Wayland compositor")
+    (description "Weston is the reference implementation of a Wayland
+compositor, and a useful compositor in its own right.
+
+A Wayland compositor allows applications to render to a shared offscreen
+buffer using OpenGL ES.  The compositor then culls the hidden parts and
+composes the final output.  A Wayland compositor is essentially a
+multiplexer to the KMS/DRM Linux kernel devices.")
+    (license license:expat)))
+
 (define-public exempi
   (package
     (name "exempi")
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index d544a7294d..5e6cf0b234 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -93,14 +93,14 @@ is used in some video games and movies.")
 (define-public gzochi
   (package
     (name "gzochi")
-    (version "0.10")
+    (version "0.10.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://savannah/gzochi/gzochi-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "055m7ywgl48ljwxf0kjhl76ldck890y5afdwjhk5s3p65xyaxh0k"))))
+                "166rawdal45kvanhvi0bkzy1d2pwf1p0lzslb287lcnm9vdw97yy"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 4a9cafe91f..b0a6575aae 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -101,6 +101,8 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages pcre)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system haskell)
   #:use-module (guix build-system python)
@@ -324,7 +326,7 @@ asynchronously and at a user-defined speed.")
 (define-public chess
   (package
     (name "chess")
-    (version "6.2.2")
+    (version "6.2.3")
     (source
      (origin
        (method url-fetch)
@@ -332,7 +334,7 @@ asynchronously and at a user-defined speed.")
                            ".tar.gz"))
        (sha256
         (base32
-         "1a41ag03q66pwy3pjrmbxxjpzi9fcaiiaiywd7m9v25mxqac2xkp"))))
+         "10hvnfhj9bkpz80x20jgxyqvgvrcgfdp8sfcbcrf1dgjn9v936bq"))))
     (build-system gnu-build-system)
     (home-page "http://www.gnu.org/software/chess")
     (synopsis "Full chess implementation")
@@ -862,7 +864,7 @@ either by Infocom or created using the Inform compiler.")
 (define-public retroarch
   (package
     (name "retroarch")
-    (version "1.3.4")
+    (version "1.3.6")
     (source
      (origin
        (method url-fetch)
@@ -870,7 +872,7 @@ either by Infocom or created using the Inform compiler.")
                            version ".tar.gz"))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "077v1sj000y3csjw9vradba3k2aknvg5k8521z8aya6q987klwx5"))))
+        (base32 "1xar0wagcz50clwwkvjg4zq9m1sjqw47vw3xx44pisdj94g21m5y"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -1778,7 +1780,7 @@ towards a working Mupen64Plus for casual users.")
 (define-public nestopia-ue
   (package
     (name "nestopia-ue")
-    (version "1.46.2")
+    (version "1.47")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1787,7 +1789,7 @@ towards a working Mupen64Plus for casual users.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "07h49xwvg61dx20rk5p4r3ax2ar5y0ppvm60cqwqljyi9rdfbh7p"))
+                "1dzrrjmvyqks64q5l5pfly80jb6qcsbj5b3dm40fijd5xnpbapci"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1813,21 +1815,14 @@ towards a working Mupen64Plus for casual users.")
        (modify-phases %standard-phases
          ;; The Nestopia build system consists solely of a Makefile.
          (delete 'configure)
-         ;; XXX Should be unnecessary with the next release.
-         (add-before
-          'build 'patch-makefile
-          (lambda _
-            (substitute* "Makefile"
-              (("@mkdir \\$@") "@mkdir -p $@")
-              (("CC =") "CC ?=")
-              (("CXX =") "CXX ?=")
-              (("PREFIX =") "PREFIX ?=")
-              (("^install:\n$") "install:\n\tmkdir -p $(BINDIR)\n"))))
-         (add-before
-          'build 'remove-xdg-desktop-menu-call
-          (lambda _
-            (substitute* "Makefile"
-              (("xdg-desktop-menu install .*") "")))))
+         (add-before 'build 'remove-xdg-desktop-menu-call
+           (lambda _
+             (substitute* "Makefile"
+               (("xdg-desktop-menu install .*") ""))))
+         (add-before 'build 'remove-gdkwayland-include
+           (lambda _
+             (substitute* "source/unix/gtkui/gtkui.h"
+               (("#include <gdk/gdkwayland\\.h>") "")))))
        #:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list "CC=gcc" "CXX=g++" (string-append "PREFIX=" out)))
        ;; There are no tests.
@@ -2261,7 +2256,7 @@ Red Eclipse provides fast paced and accessible gameplay.")
 (define-public higan
   (package
     (name "higan")
-    (version "099")
+    (version "101")
     (source
      (origin
        (method url-fetch)
@@ -2270,7 +2265,7 @@ Red Eclipse provides fast paced and accessible gameplay.")
              version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "0xlzjqrd308hmg6yjzjkmxkkr9p3w387kf6yxyplb47jcbx2sq4n"))
+        (base32 "0qavwkmzc63p6qplmxii4gc541z5mcs8gjwh3m4y7i576r7rcbk9"))
        (patches (search-patches "higan-remove-march-native-flag.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -2736,6 +2731,42 @@ the GNU GPL.")
    (home-page "https://supertuxproject.org/")
    (license license:gpl3+)))
 
+(define-public tintin++
+  (package
+    (name "tintin++")
+    (version "2.01.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://sourceforge.net/projects/tintin"
+                                  "/files/TinTin++ Source Code/" version
+                                  "/tintin" "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "195wrfcys8yy953gdrl1gxryhjnx9lg1vqgxm3dyzm8bi18aa2yc"))))
+    (inputs
+     `(("gnutls" ,gnutls)
+       ("pcre" ,pcre)
+       ("readline" ,readline)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:tests? #f ; no test suite
+       #:phases
+       (modify-phases %standard-phases
+         ;; The source is in tt/src.
+         (add-before 'configure 'chdir
+           (lambda _
+             (chdir "src")
+             #t)))))
+    (build-system gnu-build-system)
+    (home-page "http://tintin.sourceforge.net/")
+    (synopsis "MUD client")
+    (description
+     "TinTin++ is a MUD client which supports MCCP (Mud Client Compression Protocol),
+MMCP (Mud Master Chat Protocol), xterm 256 colors, most TELNET options used by MUDs,
+as well as those required to login via telnet on Linux / Mac OS X servers, and an
+auto mapper with a VT100 map display.")
+    (license license:gpl2+)))
+
 (define-public laby
   (package
     (name "laby")
@@ -2818,3 +2849,50 @@ programmers may also add their own favorite language.")
 application that locks the keyboard and mouse and instead displays bright
 colors, pictures, and sounds.")
     (license license:gpl3+)))
+
+(define-public mrrescue
+  (package
+    (name "mrrescue")
+    (version "1.02e")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/SimonLarsen/mrrescue/releases/"
+                    "download/" version "/" name version ".love"))
+              (file-name (string-append name "-" version ".love"))
+              (sha256
+               (base32
+                "0jwzbwkgp1l5ia6c7s760gmdirbsncp6nfqp7vqdqsfb63la9gl2"))))
+    (build-system trivial-build-system)
+    (arguments
+     '(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((out     (assoc-ref %outputs "out"))
+                (bindir  (string-append out "/bin"))
+                (prog    (string-append bindir "/mrrescue"))
+                (source  (assoc-ref %build-inputs "source"))
+                (bash    (string-append (assoc-ref %build-inputs "bash")
+                                        "/bin/bash"))
+                (love    (string-append (assoc-ref %build-inputs "love")
+                                        "/bin/love")))
+           (mkdir-p bindir)
+           (with-output-to-file prog
+             (lambda ()
+               (format #t "#!~a~%" bash)
+               (format #t "exec -a mrrescue \"~a\" \"~a\"~%" love source)))
+           (chmod prog #o755)
+           #t))))
+    (inputs
+     `(("bash" ,bash)
+       ("love" ,love)))
+    (home-page "http://tangramgames.dk/games/mrrescue")
+    (synopsis "Arcade-style fire fighting game")
+    (description
+     "Mr. Rescue is an arcade styled 2d action game centered around evacuating
+civilians from burning buildings.  The game features fast paced fire
+extinguishing action, intense boss battles, a catchy soundtrack and lots of
+throwing people around in pseudo-randomly generated buildings.")
+    (license (list license:zlib             ; for source code
+                   license:cc-by-sa3.0))))  ; for graphics and music assets
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index b1bbc22cd7..4ba019460f 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -106,6 +106,7 @@ most common applications of GD involve website development.")
                                    (string-append "--lib_" i "_path="
                                                   (assoc-ref %build-inputs i)))
                                  '("zlib" "png" "ft" "jpeg" "fontconfig"))
+       #:tests? #f ;; Failed 1/2 test programs. 1/12 subtests failed.
        #:phases (alist-cons-after
                  'configure 'clear-autogenerated-files
                  (lambda _
diff --git a/gnu/packages/gforth.scm b/gnu/packages/gforth.scm
new file mode 100644
index 0000000000..b2a67ce58c
--- /dev/null
+++ b/gnu/packages/gforth.scm
@@ -0,0 +1,60 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages gforth)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages m4))
+
+(define-public gforth
+  (package
+    (name "gforth")
+    (version "0.7.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/gforth/gforth-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1c1bahc9ypmca8rv2dijiqbangm1d9av286904yw48ph7ciz4qig"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:parallel-build? #f             ; XXX: parallel build fails
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-gforth.el
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out           (assoc-ref outputs "out"))
+                    (emacs-sitedir (string-append
+                                    out "/share/emacs/site-lisp")))
+               ;; TODO: compile and autoload it.
+               (install-file "gforth.el" emacs-sitedir)
+               #t))))))
+    (native-inputs
+     `(("m4" ,m4)))
+    (synopsis "Forth interpreter")
+    (description
+     "Gforth is a fast and portable implementation of the ANSI Forth language.
+It includes an editing mode for Emacs and an interpreter featuring completion
+and history.  A generic virtual machine environment, vmgen, is also
+included.")
+    (home-page "https://www.gnu.org/software/gforth/")
+    (license license:gpl3+)))
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 7014081eb2..ee56998da7 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2014, 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -366,14 +367,14 @@ glxgears, glxheads, and glxinfo.")
 (define-public glew
   (package
     (name "glew")
-    (version "1.11.0")
+    (version "2.0.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/glew/glew/" version
                                   "/glew-" version ".tgz"))
               (sha256
                (base32
-                "1mhkllxz49l1x680dmzrv2i82qjrq017sykah3xc90f2d8qcxfv9"))
+                "0r37fg2s1f0jrvwh6c8cz5x6v4wqmhq42qm15cs9qs349q5c6wn5"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "config/Makefile.linux"
@@ -582,3 +583,29 @@ OpenGL.")
 desktop computers.  It provides a simple API for creating windows, contexts
 and surfaces, receiving input and events.")
     (license license:zlib)))
+
+(define-public nanovg-for-extempore
+  (package
+    (name "nanovg-for-extempore")
+    (version "0.7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/extemporelang/nanovg/"
+                                  "archive/"  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ivs1sagq19xiw8jxd9f8w2b39svi0n9hrbmdvckwvqg95r8701g"))))
+    (build-system cmake-build-system)
+    (arguments `(#:tests? #f)) ; no tests included
+    (inputs
+     `(("mesa" ,mesa)))
+    ;; Extempore refuses to build on architectures other than x86_64
+    (supported-systems '("x86_64-linux"))
+    (home-page "https://github.com/extemporelang/nanovg")
+    (synopsis "2D vector drawing library on top of OpenGL")
+    (description "NanoVG is small antialiased vector graphics rendering
+library for OpenGL.  It has lean API modeled after HTML5 canvas API.  It is
+aimed to be a practical and fun toolset for building scalable user interfaces
+and visualizations.")
+    (license license:zlib)))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 20229f2b76..7e247d3299 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +32,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages enlightenment)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
@@ -43,6 +45,7 @@
   #:use-module (gnu packages xml)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages file)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages m4)
 
@@ -659,3 +662,44 @@ many applications simultaneously.
 
 This package provides the library for GLib applications.")
     (license license:lgpl2.1+)))
+
+
+(define-public dbus-c++
+  (package
+    (name "dbus-c++")
+    (version "0.9.0")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append
+                "mirror://sourceforge/dbus-cplusplus/dbus-c%2B%2B/"
+                version "/libdbus-c%2B%2B-" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0qafmy2i6dzx4n1dqp6pygyy6gjljnb7hwjcj2z11c1wgclsq4dw"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     `(("dbus" ,dbus)))                      ;mentioned in the pkg-config file
+    (inputs
+     `(("efl" ,efl)
+       ("expat" ,expat)
+       ("glib" ,glib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     `(;; The 'configure' machinery fails to detect that it needs -lpthread.
+       #:configure-flags (list "LDFLAGS=-lpthread")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'add-missing-header
+           (lambda _
+             (substitute* "include/dbus-c++/eventloop-integration.h"
+               (("#include <errno.h>")
+                "#include <errno.h>\n#include <unistd.h>")))))))
+    (synopsis "D-Bus API for C++")
+    (description "This package provides D-Bus client API bindings for the C++
+programming langauage.  It also contains the utility
+@command{dbuscxx-xml2cpp}.")
+    (home-page "https://sourceforge.net/projects/dbus-cplusplus/")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index fb671c8679..7d66ac97b8 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -14,7 +14,6 @@
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net>
-;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
@@ -110,6 +109,7 @@
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages mail)
   #:use-module (gnu packages mit-krb5)
+  #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages ncurses)
@@ -2444,7 +2444,7 @@ output devices.")
 (define-public geoclue
   (package
     (name "geoclue")
-    (version "2.4.3")
+    (version "2.4.4")
     (source
      (origin
        (method url-fetch)
@@ -2453,7 +2453,7 @@ output devices.")
                            name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0pk07k65dlw37nz8z5spksivsv5nh96xmbi336rf2yfxf2ldpadd"))
+         "0p1ibjf5vzjsahw5xif2si3lj6a00sxhll008jk7w1hj1jfznhww"))
        (patches (search-patches "geoclue-config.patch"))))
     (build-system glib-or-gtk-build-system)
     (arguments
@@ -3490,9 +3490,9 @@ part of udev-extras, then udev, then systemd.  It's now a project on its own.")
        ("nettle" ,nettle) ; XXX: required by libarchive.pc
        ("udisks" ,udisks)))
     (home-page "https://wiki.gnome.org/gvfs/")
-    (synopsis "Userspace virtual filesystem for GIO")
+    (synopsis "Userspace virtual file system for GIO")
     (description
-     "GVFS is a userspace virtual filesystem designed to work with the I/O
+     "GVFS is a userspace virtual file system designed to work with the I/O
 abstraction of GIO.  It contains a GIO module that seamlessly adds GVFS support
 to all applications using the GIO API.  It also supports exposing the GVFS
 mounts to non-GIO applications using FUSE.
@@ -3549,7 +3549,7 @@ USB transfers with your high-level application or system daemon.")
 (define-public simple-scan
   (package
     (name "simple-scan")
-    (version "3.21.90")
+    (version "3.22.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://launchpad.net/simple-scan/"
@@ -3558,7 +3558,7 @@ USB transfers with your high-level application or system daemon.")
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0dmsvq3vviky6851rqiik898r84c7744i7md672ckic3mdv21ap3"))))
+                "0l1b3llkdlqq0bcjx1cadba67l2zb4zfykdaprpjbjbr6gkbc1f5"))))
     (build-system glib-or-gtk-build-system)
     (inputs
      `(("gtk" ,gtk+)
@@ -3602,7 +3602,7 @@ work and the interface is well tested.")
 (define-public epiphany
   (package
     (name "epiphany")
-    (version "3.20.3")
+    (version "3.22.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3610,7 +3610,7 @@ work and the interface is well tested.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "18i4nk4k4q2yaj4zw0gbyp7ja2g67pm05p56bbras52cnjyy37ad"))))
+                "09rscbmyjxzd8wlibn1fbmbwmlwnahzfl1kkcka6dhm121yd2id6"))))
     (build-system glib-or-gtk-build-system)
     (arguments
      ;; FIXME: tests run under Xvfb, but fail with:
@@ -3635,9 +3635,7 @@ work and the interface is well tested.")
        ("iso-codes" ,iso-codes)
        ("libnotify" ,libnotify)
        ("libsecret" ,libsecret)
-       ("libwnck" ,libwnck)
        ("libxslt" ,libxslt)
-       ("nss" ,nss)
        ("sqlite" ,sqlite)
        ("webkitgtk" ,webkitgtk)))
     (home-page "https://wiki.gnome.org/Apps/Web")
@@ -3732,7 +3730,7 @@ to format Docbook and Mallard documents.")
 (define-public yelp
   (package
     (name "yelp")
-    (version "3.21.3")
+    (version "3.20.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -3740,7 +3738,7 @@ to format Docbook and Mallard documents.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1x8la7qn0l796p4nhprvkwb6sk6yc39xhq3gabvzrhdlb6mjgmrs"))))
+                "1hh8yqbv0scn9nksk9mq94cb4sdczlzxplclv2wqr41jmm8v186x"))))
     (build-system glib-or-gtk-build-system)
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-genmarshal, etc.
@@ -4563,6 +4561,20 @@ the available networks and allows users to easily switch between them.")
 libxml2.")
     (license license:lgpl2.1+)))
 
+(define-public libxml++-2
+  (package
+    (inherit libxml++)
+    (name "libxml++")
+    (version "2.40.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1sb3akryklvh2v6m6dihdnbpf1lkx441v972q9hlz1sq6bfspm2a"))))))
+
 (define-public gdm
   (package
     (name "gdm")
@@ -5204,6 +5216,36 @@ Microsoft SkyDrive and Hotmail, using their REST protocols.")
 desktop.  It supports multiple calendars, monthly view and yearly view.")
     (license license:gpl3+)))
 
+(define-public gnome-dictionary
+  (package
+    (name "gnome-dictionary")
+    (version "3.20.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnome/sources/" name "/"
+                                  (version-major+minor version) "/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "08b1f5s5aqka3dwxnzmwr2fmyddjm9xw7zmqsf8r5zvfsivn7czg"))))
+    (build-system glib-or-gtk-build-system)
+    (native-inputs
+     `(("glib:bin" ,glib "bin")
+       ("gobject-introspection" ,gobject-introspection)
+       ("intltool" ,intltool)
+       ("itstool" ,itstool)
+       ("pkg-config" ,pkg-config)
+       ("xmllint" ,libxml2)))
+    (inputs
+     `(("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gtk+" ,gtk+)))
+    (home-page "https://wiki.gnome.org/Apps/Dictionary")
+    (synopsis "Look up words in dictionary sources")
+    (description
+     "GNOME Dictionary can look for the definition or translation of a word in
+existing databases over the internet.")
+    (license license:gpl3+)))
+
 (define-public gnome-tweak-tool
   (package
     (name "gnome-tweak-tool")
@@ -5510,3 +5552,33 @@ write this kind of application, by providing a base class, taking care of all
 the IPC machinery needed to send messages to a running instance, and also
 handling the startup notification side.")
     (license license:lgpl2.1+)))
+
+(define-public gnome-calculator
+  (package
+    (name "gnome-calculator")
+    (version "3.20.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1yx86kyd54y3k3b6rmdazvmpxzl0zn791zr1q87zjc5228mc3w9a"))))
+    (build-system glib-or-gtk-build-system)
+    (native-inputs
+     `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, gio-2.0.
+       ("intltool" ,intltool)
+       ("itstool" ,itstool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gtksourceview" ,gtksourceview)
+       ("libsoup" ,libsoup)
+       ("mpfr" ,mpfr)))
+    (home-page "https://wiki.gnome.org/Apps/Calculator")
+    (synopsis "Desktop calculator")
+    (description
+     "Calculator is an application that solves mathematical equations and
+is suitable as a default application in a Desktop environment.")
+    (license license:gpl3)))
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index cdc9872fef..56a5ea3299 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -158,7 +158,7 @@ and support for SSL3 and TLS.")
 (define-public gnurl
   (package
    (name "gnurl")
-   (version "7.50.1")
+   (version "7.50.3")
    (source (origin
             (method url-fetch)
             (uri (let ((version-with-underscores
@@ -167,7 +167,7 @@ and support for SSL3 and TLS.")
                                   name "-" version-with-underscores ".tar.bz2")))
             (sha256
              (base32
-              "0irb8df3lqd9w1pb627q260hn448vbkh0sn4l6p6jh0q8lqscv84"))))
+              "07ij9mj60kpfrmi0436k14b1d1idsj79nk4w5h3bia69arzp2cnk"))))
    (build-system gnu-build-system)
    (inputs `(("gnutls" ,gnutls)
              ("libidn" ,libidn)
@@ -189,21 +189,16 @@ and support for SSL3 and TLS.")
                           "--disable-telnet" "--disable-tftp" "--disable-pop3"
                           "--disable-imap" "--disable-smtp" "--disable-gopher"
                           "--disable-file" "--disable-ftp" "--disable-smb")
-     #:test-target "test"
-     #:parallel-tests? #f
-     #:phases
-     ;; We have to patch runtests.pl in tests/ directory
-      (alist-cons-before
-       'check 'patch-runtests
-       (lambda _
-         (substitute* "tests/runtests.pl"
-           (("/bin/sh") (which "sh"))))
-       ;; To be discussed with upstream.
-       (alist-cons-before
-        'check 'delete-failing-test1139
-        (lambda _
-          (delete-file "tests/data/test1139"))
-       %standard-phases))))
+      #:test-target "test"
+      #:parallel-tests? #f
+      #:phases
+      ;; We have to patch runtests.pl in tests/ directory
+      (modify-phases %standard-phases
+        (add-before 'check 'patch-runtests
+          (lambda _
+            (substitute* "tests/runtests.pl"
+              (("/bin/sh") (which "sh")))
+            #t)))))
    (synopsis "Microfork of cURL with support for the HTTP/HTTPS/GnuTLS subset of cURL")
    (description
     "Gnurl is a microfork of cURL, a command line tool for transferring data
@@ -252,19 +247,17 @@ supports HTTP, HTTPS and GnuTLS.")
       ;; test_gnunet_service_arm fails; reported upstream
       #:tests? #f
       #:phases
+      (modify-phases %standard-phases
         ;; swap check and install phases and set paths to installed binaries
-        (alist-cons-before
-         'check 'set-path-for-check
-         (lambda* (#:key outputs #:allow-other-keys)
-          (let ((out (assoc-ref outputs "out")))
-           (setenv "GNUNET_PREFIX" (string-append out "/lib"))
-           (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin"))))
-         (alist-cons-after
-          'install 'check
-          (assoc-ref %standard-phases 'check)
-          (alist-delete
-           'check
-           %standard-phases)))))
+        (add-before 'check 'set-path-for-check
+          (lambda* (#:key outputs #:allow-other-keys)
+           (let ((out (assoc-ref outputs "out")))
+             (setenv "GNUNET_PREFIX" (string-append out "/lib"))
+             (setenv "PATH" (string-append (getenv "PATH") ":" out "/bin")))
+           #t))
+        (add-after 'install 'check
+          (assoc-ref %standard-phases 'check))
+        (delete 'check))))
    (synopsis "Secure, decentralized, peer-to-peer networking framework")
    (description
      "GNUnet is a framework for secure peer-to-peer networking.  The
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index 2817f2c573..c15a4afcd6 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -215,6 +215,7 @@ compatible to GNU Pth.")
               (method url-fetch)
               (uri (string-append "mirror://gnupg/gnupg/gnupg-" version
                                   ".tar.bz2"))
+              (patches (search-patches "gnupg-fix-expired-test.patch"))
               (sha256
                (base32
                 "1pgz02gd84ab94w4xdg67p9z8kvkyr9d523bvcxxd2hviwh1m362"))))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 27c8ede8e9..c2aba247b4 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -185,7 +185,7 @@ in the Mozilla clients.")
 (define-public nss
   (package
     (name "nss")
-    (version "3.23")
+    (version "3.26")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -196,7 +196,7 @@ in the Mozilla clients.")
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "1kqidv91icq96m9m8zx50n7px08km2l88458rkgyjwcn3kiq7cwl"))
+                "0r65s5q8kk0vr48s0zr8xi610k7h072lgkkpp4z6jlxr19bkly4i"))
               ;; Create nss.pc and nss-config.
               (patches (search-patches "nss-pkgconfig.patch"))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/gobby.scm b/gnu/packages/gobby.scm
new file mode 100644
index 0000000000..961028d00a
--- /dev/null
+++ b/gnu/packages/gobby.scm
@@ -0,0 +1,131 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Andy Wingo <wingo@igalia.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages gobby)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix utils)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages xml))
+
+(define-public libnet6
+  (package
+    (name "libnet6")
+    (version "1.3.14")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://releases.0x539.de/net6/net6-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "088yqq60wjx3jqjlhl12893p15gl9asjpavrbhh590qzpqndhp8m"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     `(#:configure-flags
+       '("CXXFLAGS=-std=c++11")         ; required by libsigc++
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'update-gnutls-api
+           (lambda _
+             (substitute* "src/encrypt.cpp"
+               ;; The GnuTLS API to set authentication and other parameters
+               ;; and priorities changed in 3.4; update to allow ANON_DH via
+               ;; the new API.
+               (("gnutls_kx_set_priority\\(session, kx_prio\\)")
+                (string-append "gnutls_priority_set_direct"
+                               "(session, \"NORMAL:+ANON-DH\", NULL)"))))))))
+    (inputs
+     `(("libsigc++" ,libsigc++)
+       ("gnutls" ,gnutls)))
+    (home-page "https://gobby.github.io/")
+    (synopsis "Network access framework for IPv4/IPv6")
+    (description
+     "Library which that provides a TCP protocol abstraction for C++.")
+    (license license:lgpl2.1)))
+
+(define-public obby
+  (package
+    (name "obby")
+    (version "0.4.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://releases.0x539.de/obby/obby-"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0rwvp0kzsb8y6mq73rzb8yk4kvsrz64i2zf4lfqs3kh0x2k7n7bx"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libsigc++" ,libsigc++)
+       ("gnutls" ,gnutls)
+       ("libnet6" ,libnet6)))
+    (arguments
+     ;; Required by libsigc++.
+     `(#:configure-flags '("CXXFLAGS=-std=c++11")))
+    (home-page "https://gobby.github.io/")
+    (synopsis "Library for building collaborative editors")
+    (description
+     "Library that provides synced document buffers.  It supports multiple
+documents in one session.  Obby is used by the Gobby collaborative editor.")
+    (license license:gpl2+)))
+
+(define-public gobby
+  (package
+    (name "gobby")
+    (version "0.4.13")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://releases.0x539.de/gobby/gobby-"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0w8q01lf6bcdz537b29m7rwlbc7k87b12vnpm1h6219ypvzqkgcc"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("intltool" ,intltool)))
+    (inputs
+     `(("libxml++-2" ,libxml++-2)
+       ("gnutls" ,gnutls)
+       ("gtkmm-2" ,gtkmm-2)
+       ("gtksourceview-2" ,gtksourceview-2)
+       ("libnet6" ,libnet6)
+       ("obby" ,obby)))
+    (arguments
+     ;; Required by libsigc++.
+     `(#:configure-flags '("CXXFLAGS=-std=c++11")))
+    (home-page "https://gobby.github.io/")
+    (synopsis "Collaborative editor")
+    (description
+     "Collaborative editor that supports multiple documents in one session and
+a multi-user chat.  Gobby allows multiple users to edit the same document
+together over the internet in real-time.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 09d962dd1d..6b5038cf30 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2016 Andy Wingo <wingo@igalia.com>
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016 Petter <petter@mykolab.ch>
 ;;;
 ;;; This file is an addendum GNU Guix.
 ;;;
@@ -185,11 +186,11 @@ garbage collection, various safety features and in the style of communicating
 sequential processes (CSP) concurrent programming features added.")
     (license license:bsd-3)))
 
-(define-public go-1.6
+(define-public go-1.7
   (package
     (inherit go-1.4)
     (name "go")
-    (version "1.6.3")
+    (version "1.7.1")
     (source
      (origin
        (method url-fetch)
@@ -197,7 +198,7 @@ sequential processes (CSP) concurrent programming features added.")
                            name version ".src.tar.gz"))
        (sha256
         (base32
-         "002v6irgfd63zp9iza8nski5by0lar033j3ddpqiikw6bznsw9k3"))))
+         "1ls2shd8ha2dhigz8kf4j15p1l5rvfxn9jyh4rgrkdw17c9kz11b"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.4)
        ((#:phases phases)
@@ -216,11 +217,14 @@ sequential processes (CSP) concurrent programming features added.")
                  ;; Removing net/ tests, which fail when attempting to access
                  ;; network resources not present in the build container.
                  (for-each delete-file
-                           '("net/listen_test.go" "net/parse_test.go"))
+                           '("net/listen_test.go"
+                             "net/parse_test.go"
+                             "net/cgo_unix_test.go"))
 
                  (substitute* "os/os_test.go"
                    (("/usr/bin") (getcwd))
-                   (("/bin/pwd") (which "pwd")))
+                   (("/bin/pwd") (which "pwd"))
+                   (("/bin/sh") (which "sh")))
 
                  ;; Add libgcc to runpath
                  (substitute* "cmd/link/internal/ld/lib.go"
@@ -275,7 +279,7 @@ sequential processes (CSP) concurrent programming features added.")
 
                  ;; fix shebang for testar script
                  ;; note the target script is generated at build time.
-                 (substitute* "../misc/cgo/testcarchive/test.bash"
+                 (substitute* "../misc/cgo/testcarchive/carchive_test.go"
                    (("#!/usr/bin/env") (string-append "#!" (which "env"))))
 
                  (substitute* "net/lookup_unix.go"
@@ -336,4 +340,4 @@ sequential processes (CSP) concurrent programming features added.")
      `(("go" ,go-1.4)
        ,@(package-native-inputs go-1.4)))))
 
-(define-public go go-1.6)
+(define-public go go-1.7)
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index d0df83072e..930e1985d5 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -60,7 +60,8 @@
   #:use-module (gnu packages sdl)
   #:use-module (gnu packages video)
   #:use-module (gnu packages xml)
-  #:use-module (gnu packages xorg))
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages zip))
 
 (define-public blender
   (package
@@ -138,6 +139,34 @@ compositing and motion tracking, even video editing and game creation.  The
 application can be customized via its API for Python scripting.")
     (license license:gpl2+)))
 
+(define-public assimp
+  (package
+    (name "assimp")
+    (version "3.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/assimp/assimp/archive/v"
+                                  version ".zip"))
+              (file-name (string-append name "-" version ".zip"))
+              (sha256
+               (base32
+                "11sfahmbwnjjpd8vpzdsng1bx5mb0cmaqb20dz6sdwapqanqwmar"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("zlib" ,zlib)))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (home-page "http://assimp.org/")
+    (synopsis "Asset import library")
+    (description
+     "The Open Asset Import Library loads more than 40 3D file formats into
+one unified data structure.  Additionally, assimp features various mesh post
+processing tools: normals and tangent space generation, triangulation, vertex
+cache locality optimization, removal of degenerate primitives and duplicate
+vertices, sorting by primitive type, merging of redundant materials and many
+more.")
+    (license license:bsd-3)))
+
 (define-public cgal
   (package
     (name "cgal")
diff --git a/gnu/packages/grub.scm b/gnu/packages/grub.scm
index ec6bd84ab8..bfc9d6ffab 100644
--- a/gnu/packages/grub.scm
+++ b/gnu/packages/grub.scm
@@ -22,6 +22,7 @@
 (define-module (gnu packages grub)
   #:use-module (guix download)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module ((guix licenses) #:select (gpl3+))
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
@@ -58,7 +59,12 @@
     ;;   ERROR:tests/rtc-test.c:176:check_time: assertion failed (ABS(t - s) <= wiggle): (382597824 <= 2)
     ;; Simply disable the tests.
     (arguments `(#:tests? #f
-                 ,@(package-arguments qemu-minimal)))
+                 ,@(substitute-keyword-arguments (package-arguments qemu-minimal)
+                     ((#:phases phases)
+                      ;; We disable the tests so we also skip the phase disabling
+                      ;; the qga test, which fails due to changes in QEMU
+                      `(modify-phases ,phases
+                         (delete 'disable-test-qga))))))
 
     ;; The manual fails to build with Texinfo 5.x.
     (native-inputs (alist-delete "texinfo" (package-native-inputs qemu)))))
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 651186ab8a..b1785e95c9 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -63,27 +63,27 @@
 (define-public orc
   (package
     (name "orc")
-    (version "0.4.25")
+    (version "0.4.26")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gstreamer.freedesktop.org/data/src/"
                                   "orc/orc-" version ".tar.xz"))
               (sha256
                (base32
-                "1lak3hyvvb0w9avzmf0a8vayb7vqhj4m709q1czlhvgjb15dbcf1"))))
+                "0jd69ynvr3k70mlxxgbsk047l1rd63m1wkj3qdcq7644xy0gllkx"))))
     (build-system gnu-build-system)
-    (arguments `(#:phases
-                 (alist-cons-before
-                  'check 'disable-faulty-test
-                  (lambda _
-                    ;; XXX Disable the 'test-limits' and 'exec_opcodes_sys'
-                    ;; tests, which fail on some machines.  See:
-                    ;; https://bugzilla.gnome.org/show_bug.cgi?id=735273
-                    (substitute* '("testsuite/test-limits.c"
-                                   "testsuite/exec_opcodes_sys.c")
-                      (("if \\(error\\) return 1;")
-                       "if (error) return 77;")))
-                  %standard-phases)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'disable-faulty-test
+           (lambda _
+             ;; XXX Disable the 'test-limits' and 'exec_opcodes_sys'
+             ;; tests, which fail on some machines.  See:
+             ;; https://bugzilla.gnome.org/show_bug.cgi?id=735273
+             (substitute* '("testsuite/test-limits.c"
+                            "testsuite/exec_opcodes_sys.c")
+               (("if \\(error\\) return 1;")
+                "if (error) return 77;")))))))
     (home-page "http://code.entropywave.com/orc/")
     (synopsis "Oil runtime compiler")
     (description
@@ -160,6 +160,7 @@ This package provides the core library and elements.")
      `(("gstreamer" ,gstreamer))) ; required by gstreamer-plugins-base-1.0.pc
     (inputs
      `(("cdparanoia" ,cdparanoia)
+       ("opus" ,opus)
        ("orc" ,orc)
        ("pango" ,pango)
        ("libogg" ,libogg)
@@ -323,7 +324,9 @@ developers consider to have good quality code and correct functionality.")
        ("openssl" ,openssl)
        ("opus" ,opus)
        ("orc" ,orc)
-       ("qtbase" ,qtbase)
+       ;("qtbase" ,qtbase)
+       ;("qtdeclarative" ,qtdeclarative)
+       ;("qtx11extras" ,qtx11extras)
        ("soundtouch" ,soundtouch)
        ("wayland" ,wayland)))
     (home-page "http://gstreamer.freedesktop.org/")
@@ -356,6 +359,7 @@ par compared to the rest.")
        ("libmpeg2" ,libmpeg2)
        ("libdvdread" ,libdvdread)
        ("libx264" ,libx264)
+       ("mpg123" ,mpg123)
        ;; TODO:
        ;; * opencore-amr (for the AMR-NB decoder and encoder and the
        ;;   AMR-WB decoder) <http://sourceforge.net/projects/opencore-amr/>
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index b7be57c7bb..569d8d1591 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -149,6 +149,19 @@ affine transformation (scale, rotation, shear, etc.).")
    (license license:lgpl2.1) ; or Mozilla Public License 1.1
    (home-page "http://cairographics.org/")))
 
+(define-public cairo-xcb
+  (package
+    (inherit cairo)
+    (name "cairo-xcb")
+    (inputs
+     `(("mesa" ,mesa)
+       ,@(package-inputs cairo)))
+    (arguments
+     `(#:tests? #f
+       #:configure-flags
+       '("--enable-xlib-xcb" "--enable-gl" "--enable-egl")))
+    (synopsis "2D graphics library (with X11 support)")))
+
 (define-public harfbuzz
   (package
    (name "harfbuzz")
@@ -563,6 +576,7 @@ is part of the GNOME accessibility project.")
              (base32
               "0l6aqk86aw5w132ygy6hv6nlxvd1h6xg7c85qbm60p6mnv1ww58d"))
             (patches (search-patches "gtk2-respect-GUIX_GTK2_PATH.patch"
+                                     "gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch"
                                      "gtk2-theme-paths.patch"))))
    (build-system gnu-build-system)
    (outputs '("out" "doc"))
@@ -623,8 +637,9 @@ application suites.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "05xcwvy68p7f4hdhi4bgdm3aycvqqr4pr5kkkr8ba91l5yx0k9l3"))
-            (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"))))
+              "157nh9gg0p2avw765hrnkvr8lsh2w811397yxgjv6q5j4fzz6d1q"))
+            (patches (search-patches "gtk3-respect-GUIX_GTK3_PATH.patch"
+                                     "gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch"))))
    (outputs '("out" "bin" "doc"))
    (propagated-inputs
     `(("at-spi2-atk" ,at-spi2-atk)
@@ -659,20 +674,18 @@ application suites.")
       #:configure-flags (list (string-append "--with-html-dir="
                                              (assoc-ref %outputs "doc")
                                              "/share/gtk-doc/html"))
-      #:phases
-      (alist-cons-before
-       'configure 'pre-configure
-       (lambda _
-         ;; Disable most tests, failing in the chroot with the message:
-         ;; D-Bus library appears to be incorrectly set up; failed to read
-         ;; machine uuid: Failed to open "/etc/machine-id": No such file or
-         ;; directory.
-         ;; See the manual page for dbus-uuidgen to correct this issue.
-         (substitute* "testsuite/Makefile.in"
-           (("SUBDIRS = gdk gtk a11y css reftests")
-            "SUBDIRS = gdk"))
-         #t)
-       %standard-phases)))
+      #:phases (modify-phases %standard-phases
+        (add-before 'configure 'pre-configure
+          (lambda _
+            ;; Disable most tests, failing in the chroot with the message:
+            ;; D-Bus library appears to be incorrectly set up; failed to read
+            ;; machine uuid: Failed to open "/etc/machine-id": No such file or
+            ;; directory.
+            ;; See the manual page for dbus-uuidgen to correct this issue.
+            (substitute* "testsuite/Makefile.in"
+              (("SUBDIRS = gdk gtk a11y css reftests")
+               "SUBDIRS = gdk"))
+            #t)))))
    (native-search-paths
     (list (search-path-specification
            (variable "GUIX_GTK3_PATH")
@@ -1332,3 +1345,29 @@ glass artworks done by Venicians glass blowers.")
      "GtkSpell provides word-processor-style highlighting and replacement of
 misspelled words in a GtkTextView widget.")
     (license license:gpl2+)))
+
+(define-public clipit
+  (package
+    (name "clipit")
+    (version "1.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/downloads/ClipIt/clipit-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0jrwn8qfgb15rwspdp1p8hb1nc0ngmpvgr87d4k3lhlvqg2cfqva"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gtk+" ,gtk+-2)))
+    (home-page "https://github.com/CristianHenzel/ClipIt")
+    (synopsis "Lightweight GTK+ clipboard manager")
+    (description
+     "ClipIt is a clipboard manager with features such as a history, search
+thereof, global hotkeys and clipboard item actions.  It was forked from
+Parcellite and adds bugfixes and features.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/guile-wm.scm b/gnu/packages/guile-wm.scm
index 98e657f75b..a114fd441d 100644
--- a/gnu/packages/guile-wm.scm
+++ b/gnu/packages/guile-wm.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016 Alex ter Weele <alex.ter.weele@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -64,6 +65,7 @@ dependencies.")
   (package
     (name "guile-wm")
     (version "1.0")
+    (synopsis "X11 window manager toolkit in Scheme")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.markwitmer.com/dist/guile-wm-"
@@ -72,43 +74,60 @@ dependencies.")
                (base32
                 "1l9qcz236jxvryndimjy62cf8zxf8i3f8vg3zpqqjhw15j9mdk3r"))))
     (build-system gnu-build-system)
-    (arguments '(;; The '.scm' files go to $(datadir), so set that to the
-                 ;; standard value.
-                 #:configure-flags (list (string-append "--datadir="
-                                          (assoc-ref %outputs "out")
-                                          "/share/guile/site/2.0"))
-                 #:phases (alist-cons-before
-                           'configure 'set-go-directory
-                           (lambda* (#:key outputs #:allow-other-keys)
-                             ;; Install .go files to $out/share/guile/site/2.0.
-                             (let ((out (assoc-ref outputs "out")))
-                               (substitute* "module/Makefile.in"
-                                 (("^wmdir = .*$")
-                                  (string-append "wmdir = " out
-                                                 "/share/guile/site/2.0\n")))))
-                           (alist-cons-after
-                            'install 'set-load-path
-                            (lambda* (#:key inputs outputs #:allow-other-keys)
-                              ;; Put Guile-XCB's and Guile-WM's modules in the
-                              ;; search path of PROG.
-                              (let* ((out  (assoc-ref outputs "out"))
-                                     (prog (string-append out "/bin/guile-wm"))
-                                     (mods (string-append
-                                            out "/share/guile/site/2.0"))
-                                     (xcb  (string-append
-                                            (assoc-ref inputs "guile-xcb")
-                                            "/share/guile/site/2.0")))
-                                (wrap-program
-                                 prog
-                                 `("GUILE_LOAD_PATH" ":" prefix (,mods ,xcb))
-                                 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
-                                   (,mods ,xcb)))))
-                            %standard-phases))))
+    (arguments
+     `( ;; The '.scm' files go to $(datadir), so set that to the
+       ;; standard value.
+       #:configure-flags (list (string-append "--datadir="
+                                              (assoc-ref %outputs "out")
+                                              "/share/guile/site/2.0"))
+       #:phases (alist-cons-before
+                 'configure 'set-go-directory
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   ;; Install .go files to $out/share/guile/site/2.0.
+                   (let ((out (assoc-ref outputs "out")))
+                     (substitute* "module/Makefile.in"
+                       (("^wmdir = .*$")
+                        (string-append "wmdir = " out
+                                       "/share/guile/site/2.0\n")))))
+                 (alist-cons-after
+                  'install 'set-load-path
+                  (lambda* (#:key inputs outputs #:allow-other-keys)
+                    ;; Put Guile-XCB's and Guile-WM's modules in the
+                    ;; search path of PROG.
+                    (let* ((out  (assoc-ref outputs "out"))
+                           (prog (string-append out "/bin/guile-wm"))
+                           (mods (string-append
+                                  out "/share/guile/site/2.0"))
+                           (xcb  (string-append
+                                  (assoc-ref inputs "guile-xcb")
+                                  "/share/guile/site/2.0")))
+                      (wrap-program
+                          prog
+                        `("GUILE_LOAD_PATH" ":" prefix (,mods ,xcb))
+                        `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                          (,mods ,xcb)))))
+                  (alist-cons-after
+                   'install 'install-xsession
+                   (lambda* (#:key outputs #:allow-other-keys)
+                     ;; add a .desktop file to xsessions
+                     (let ((xsessions (string-append
+                                       %output "/share/xsessions")))
+                       (mkdir-p xsessions)
+                       (call-with-output-file (string-append
+                                               xsessions "/guile-wm.desktop")
+                         (lambda (port)
+                           (format port
+                                   "[Desktop Entry]~@
+                                    Name=~a~@
+                                    Comment=~a~@
+                                    Exec=~a/bin/guile-wm~@
+                                    Type=Application~%"
+                            ,name ,synopsis %output)))))
+                   %standard-phases)))))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("guile" ,guile-2.0)
               ("guile-xcb" ,guile-xcb)))
     (home-page "http://www.markwitmer.com/guile-xcb/guile-wm.html")
-    (synopsis "X11 window manager toolkit in Scheme")
     (description
      "Guile-WM is a simple window manager that's completely customizable—you
 have total control of what it does by choosing which modules to include.
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index c6d1bfbcf4..e1b27519e0 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -203,14 +203,14 @@ without requiring the source code to be rewritten.")
 (define-public guile-next
   (package (inherit guile-2.0)
     (name "guile-next")
-    (version "2.1.3")
+    (version "2.1.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://alpha.gnu.org/gnu/guile/guile-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1k48wqca2hrsbfq4ssiv4pg9jwlqncs5iwwxklk2bnczi7lavv78"))
+                "1w8kyy8nz6489d092fix6lvgjrk0bww7i0c2k67ym4hq0kjl0r1j"))
               (modules '((guix build utils)))
 
               ;; Remove the pre-built object files.  Instead, build everything
@@ -228,6 +228,21 @@ without requiring the source code to be rewritten.")
             (files '("lib/guile/2.2/site-ccache"
                      "share/guile/site/2.2")))))))
 
+(define (guile-2.2-package-name name)
+  "Return NAME with a \"guile2.2-\" prefix instead of \"guile-\", when
+applicable."
+  (if (string-prefix? "guile-" name)
+      (string-append "guile2.2-"
+                     (string-drop name
+                                  (string-length "guile-")))
+      name))
+
+(define package-for-guile-2.2
+  ;; A procedure that rewrites the dependency tree of the given package to use
+  ;; GUILE-NEXT instead of GUILE-2.0.
+  (package-input-rewriting `((,guile-2.0 . ,guile-next))
+                           guile-2.2-package-name))
+
 (define-public guile-for-guile-emacs
   (package (inherit guile-next)
     (name "guile-for-guile-emacs")
@@ -270,7 +285,7 @@ without requiring the source code to be rewritten.")
             (files '("share/guile/site/2.0")))
            (search-path-specification
             (variable "GUILE_LOAD_COMPILED_PATH")
-            (files '("lib/guile/2.0/ccache"
+            (files '("lib/guile/2.0/site-ccache"
                      "share/guile/site/2.0")))))))
 
 
@@ -513,19 +528,23 @@ for Guile\".")
     (name "guile-json")
     (version "0.5.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://savannah/guile-json/guile-json-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "0l8a34l92nrdszy7ykycfvr8y0n0yi5qb3ccliycvpvf9mzk5n8d"))
-             (modules '((guix build utils)))
-             (snippet
-              ;; Make sure everything goes under .../site/2.0, like Guile's
-              ;; search paths expects.
-              '(substitute* '("Makefile.in" "json/Makefile.in")
-                 (("moddir =.*/share/guile/site" all)
-                  (string-append all "/2.0"))))))
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/guile-json/guile-json-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0l8a34l92nrdszy7ykycfvr8y0n0yi5qb3ccliycvpvf9mzk5n8d"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Make sure everything goes under .../site/X.Y, like Guile's
+               ;; search paths expects.
+               '(begin
+                  (substitute* "configure"
+                    (("ac_subst_vars='")
+                     "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
+                  (substitute* '("Makefile.in" "json/Makefile.in")
+                    (("moddir =.*/share/guile/site" all)
+                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
     (build-system gnu-build-system)
     (native-inputs `(("guile" ,guile-2.0)))
     (home-page "http://savannah.nongnu.org/projects/guile-json/")
@@ -539,6 +558,9 @@ http:://json.org specification.  These are the main features:
 - Allows JSON pretty printing.")
     (license lgpl3+)))
 
+(define-public guile2.2-json
+  (package-for-guile-2.2 guile-json))
+
 (define-public guile-minikanren
   (package
     (name "guile-minikanren")
@@ -554,15 +576,22 @@ http:://json.org specification.  These are the main features:
                 "0r50jlpzi940jlmxyy3ddqqwmj5r12gb4bcv0ssini9v8km13xz6"))))
     (build-system trivial-build-system)
     (arguments
-     `(#:modules
-       ((guix build utils)
-        (ice-9 match))
+     `(#:modules ((guix build utils))
        #:builder
        (begin
          (use-modules (guix build utils)
-                      (ice-9 match))
+                      (ice-9 match)
+                      (ice-9 popen)
+                      (ice-9 rdelim))
+
          (let* ((out (assoc-ref %outputs "out"))
-                (module-dir (string-append out "/share/guile/site/2.0"))
+                (guile (assoc-ref %build-inputs "guile"))
+                (effective (read-line
+                            (open-pipe* OPEN_READ
+                                        (string-append guile "/bin/guile")
+                                        "-c" "(display (effective-version))")))
+                (module-dir (string-append out "/share/guile/site/"
+                                           effective))
                 (source (assoc-ref %build-inputs "source"))
                 (doc (string-append out "/share/doc/guile-minikanren"))
                 (scm-files '("minikanren.scm"
@@ -615,6 +644,9 @@ slightly from miniKanren mainline.
 See http://minikanren.org/ for more on miniKanren generally.")
     (license expat)))
 
+(define-public guile2.2-minikanren
+  (package-for-guile-2.2 guile-minikanren))
+
 (define-public guile-irregex
   (package
     (name "guile-irregex")
@@ -631,6 +663,8 @@ See http://minikanren.org/ for more on miniKanren generally.")
     (arguments
      `(#:modules ((guix build utils)
                   (ice-9 match)
+                  (ice-9 rdelim)
+                  (ice-9 popen)
                   (guix build gnu-build-system))
        #:phases
        (modify-phases %standard-phases
@@ -639,50 +673,52 @@ See http://minikanren.org/ for more on miniKanren generally.")
          (delete 'check)
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (begin
-               (use-modules (guix build utils)
-                            (ice-9 match))
-               (let* ((out (assoc-ref outputs "out"))
-                      (module-dir (string-append out "/share/guile/site/2.0"))
-                      (source (assoc-ref inputs "source"))
-                      (doc (string-append out "/share/doc/guile-irregex/"))
-                      (guild (string-append (assoc-ref %build-inputs "guile")
-                                            "/bin/guild")))
-                 ;; Make installation directories.
-                 (mkdir-p (string-append module-dir "/rx/source"))
-                 (mkdir-p doc)
-
-                 ;; Compile .scm files and install.
-                 (setenv "GUILE_AUTO_COMPILE" "0")
-
-                 (for-each (lambda (copy-info)
-                             (match copy-info
-                               ((src-file dest-file-basis)
-                                (let* ((dest-file (string-append
-                                                   module-dir dest-file-basis
-                                                   ".scm"))
-                                       (go-file (string-append
+             (let* ((out (assoc-ref outputs "out"))
+                    (effective (read-line
+                                (open-pipe* OPEN_READ
+                                            "guile" "-c"
+                                            "(display (effective-version))")))
+                    (module-dir (string-append out "/share/guile/site/"
+                                               effective))
+                    (source (assoc-ref inputs "source"))
+                    (doc (string-append out "/share/doc/guile-irregex/"))
+                    (guild (string-append (assoc-ref %build-inputs "guile")
+                                          "/bin/guild")))
+               ;; Make installation directories.
+               (mkdir-p (string-append module-dir "/rx/source"))
+               (mkdir-p doc)
+
+               ;; Compile .scm files and install.
+               (setenv "GUILE_AUTO_COMPILE" "0")
+
+               (for-each (lambda (copy-info)
+                           (match copy-info
+                             ((src-file dest-file-basis)
+                              (let* ((dest-file (string-append
                                                  module-dir dest-file-basis
-                                                 ".go")))
-                                  ;; Install source module.
-                                  (copy-file src-file
-                                             dest-file)
-                                  ;; Install compiled module.
-                                  (unless (zero? (system* guild "compile"
-                                                          "-L" (getcwd)
-                                                          "-o" go-file
-                                                          src-file))
-                                    (error (format #f "Failed to compile ~s to ~s!"
-                                                   src-file dest-file)))))))
-                           '(("irregex-guile.scm" "/rx/irregex")
-                             ("irregex.scm" "/rx/source/irregex")
-                             ;; Not really reachable via guile's packaging system,
-                             ;; but nice to have around
-                             ("irregex-utils.scm" "/rx/source/irregex-utils")))
-
-                 ;; Also copy over the README.
-                 (install-file "irregex.html" doc)
-                 #t)))))))
+                                                 ".scm"))
+                                     (go-file (string-append
+                                               module-dir dest-file-basis
+                                               ".go")))
+                                ;; Install source module.
+                                (copy-file src-file
+                                           dest-file)
+                                ;; Install compiled module.
+                                (unless (zero? (system* guild "compile"
+                                                        "-L" (getcwd)
+                                                        "-o" go-file
+                                                        src-file))
+                                  (error (format #f "Failed to compile ~s to ~s!"
+                                                 src-file dest-file)))))))
+                         '(("irregex-guile.scm" "/rx/irregex")
+                           ("irregex.scm" "/rx/source/irregex")
+                           ;; Not really reachable via guile's packaging system,
+                           ;; but nice to have around
+                           ("irregex-utils.scm" "/rx/source/irregex-utils")))
+
+               ;; Also copy over the README.
+               (install-file "irregex.html" doc)
+               #t))))))
     (inputs
      `(("guile" ,guile-2.0)))
     (home-page "http://synthcode.com/scheme/irregex")
@@ -693,6 +729,9 @@ string-based regular expressions.  It implements SRFI 115 and is deeply
 inspired by the SCSH regular expression system.")
     (license bsd-3)))
 
+(define-public guile2.2-irregex
+  (package-for-guile-2.2 guile-irregex))
+
 ;; There are two guile-gdbm packages, one using the FFI and one with
 ;; direct C bindings, hence the verbose name.
 
@@ -895,13 +934,17 @@ above command-line parameters.")
                 "0vx6if6b4r3kwx64vzbs6vpc0cpcr85x11w9vkzq27gw8n7isv56"))
               (modules '((guix build utils)))
               (snippet
-               ;; Make sure everything goes under .../site/2.0, like Guile's
+               ;; Make sure everything goes under .../site/X.Y, like Guile's
                ;; search paths expects.
-               '(substitute* '("Makefile.in"
-                               "redis/Makefile.in"
-                               "redis/commands/Makefile.in")
-                  (("moddir =.*/share/guile/site" all)
-                   (string-append all "/2.0"))))))
+               '(begin
+                  (substitute* "configure"
+                    (("ac_subst_vars='")
+                     "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
+                  (substitute* '("Makefile.in"
+                                 "redis/Makefile.in"
+                                 "redis/commands/Makefile.in")
+                    (("moddir =.*/share/guile/site" all)
+                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
     (build-system gnu-build-system)
     (native-inputs
      `(("guile" ,guile-2.0)))
@@ -911,6 +954,9 @@ above command-line parameters.")
 key-value cache and store.")
     (license lgpl3+)))
 
+(define-public guile2.2-redis
+  (package-for-guile-2.2 guile-redis))
+
 (define-public guile-wisp
   (package
     (name "guile-wisp")
@@ -1190,7 +1236,18 @@ you send to a FIFO file.")
                                   "/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "12cb5fqvvgc87f5xp0ih5az305wnjia89l5jba83d0r2p8bfy0b0"))))
+                "12cb5fqvvgc87f5xp0ih5az305wnjia89l5jba83d0r2p8bfy0b0"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Use the real effective version of Guile in directory names
+               ;; instead of a hard-coded "/2.0".
+               '(begin
+                  (substitute* "configure"
+                    (("ac_subst_vars='")
+                     "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
+                  (substitute* "Makefile.in"
+                    (("/site/2.0")
+                     "/site/@GUILE_EFFECTIVE_VERSION@"))))))
     (build-system gnu-build-system)
     (inputs
      `(("guile" ,guile-2.0)))
@@ -1204,4 +1261,7 @@ is no support for parsing block and inline level HTML.")
     (home-page "https://github.com/OrangeShark/guile-commonmark")
     (license lgpl3+)))
 
+(define-public guile2.2-commonmark
+  (package-for-guile-2.2 guile-commonmark))
+
 ;;; guile.scm ends here
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index 87628b559d..3bd3e1476d 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -3032,7 +3033,7 @@ variety of traversals.")
 (define-public ghc-fgl
   (package
     (name "ghc-fgl")
-    (version "5.5.1.0")
+    (version "5.5.3.0")
     (outputs '("out" "doc"))
     (source
      (origin
@@ -3043,9 +3044,12 @@ variety of traversals.")
              ".tar.gz"))
        (sha256
         (base32
-         "0rcmz0xlyr1wj490ffja29z1jgl51gz19ka609da6bx39bwx7nga"))))
+         "0fbyb6jxy9whgrv6dgnkzz70cmy98arx3q2gnkhgl4a3d7idh36p"))))
     (build-system haskell-build-system)
-    (inputs `(("ghc-mtl" ,ghc-mtl)))
+    (inputs
+     `(("ghc-mtl" ,ghc-mtl)
+       ("ghc-hspec" ,ghc-hspec)
+       ("ghc-quickcheck" ,ghc-quickcheck)))
     (home-page "http://web.engr.oregonstate.edu/~erwig/fgl/haskell")
     (synopsis
      "Martin Erwig's Functional Graph Library")
@@ -4287,7 +4291,7 @@ indexed variants.")
 (define-public ghc-tagsoup
   (package
     (name "ghc-tagsoup")
-    (version "0.13.3")
+    (version "0.14")
     (source
      (origin
        (method url-fetch)
@@ -4297,7 +4301,7 @@ indexed variants.")
              ".tar.gz"))
        (sha256
         (base32
-         "13b6zy6346r3cxhaivys84fnxarg8wbv7r2znazfjdkqil8n5a1j"))))
+         "07pax7i0bl79dmqqz58zy09yrgpnyyr2ya0z183hv96kp65jv0lh"))))
     (build-system haskell-build-system)
     (inputs `(("ghc-text" ,ghc-text)))
     (home-page
@@ -5112,7 +5116,7 @@ providing an 'rnf' implementation.")
 (define-public ghc-pandoc-types
   (package
     (name "ghc-pandoc-types")
-    (version "1.12.4.7")
+    (version "1.16.1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -5120,7 +5124,7 @@ providing an 'rnf' implementation.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "108n11kbdaj2ii3cyf0xczhsx90p1gjbxwqp1f0wyn2m3cls632n"))))
+                "094mzgdxva84kcpjf9m8b5n3chm1wm44bzflh5x6xhddz6pb7zpq"))))
     (build-system haskell-build-system)
     (propagated-inputs
      `(("ghc-syb" ,ghc-syb)
@@ -5137,14 +5141,14 @@ building up, manipulating and serialising @code{Pandoc} structures.")
 (define-public ghc-texmath
   (package
     (name "ghc-texmath")
-    (version "0.8.4")
+    (version "0.8.6.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "texmath/texmath-" version ".tar.gz"))
               (sha256
                (base32
-                "15821jg64fbr4rwaglp5ksah6q8qqz1vkjxlqp6d3bbb1rj8v2ri"))))
+                "143c8k7dyhwa9blpa8svy23ybx7i4xzb9jnfcimj8iigizbw7y1k"))))
     (build-system haskell-build-system)
     (propagated-inputs
      `(("ghc-syb" ,ghc-syb)
@@ -5212,7 +5216,7 @@ and utilities for pretty printing.")
 (define-public ghc-highlighting-kate
   (package
     (name "ghc-highlighting-kate")
-    (version "0.6")
+    (version "0.6.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -5220,7 +5224,7 @@ and utilities for pretty printing.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "16334fbiyq6017zbgc59qc00h0bk24xh4dcrbqx63dvf72ac37dk"))))
+                "03c4flh4h1jd48bx0qmplax3q8w6wj1dhbh6j0xhaf5h95fbinki"))))
     (build-system haskell-build-system)
     (propagated-inputs
      `(("ghc-diff" ,ghc-diff)
@@ -5244,14 +5248,14 @@ descriptions.")
 (define-public ghc-cmark
   (package
     (name "ghc-cmark")
-    (version "0.4.1")
+    (version "0.5.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "cmark/cmark-" version ".tar.gz"))
               (sha256
                (base32
-                "0c134qh65viaq4q6pv7bnnr5wchzivg94nv0dj8pc1326sx0dw12"))))
+                "09515h9b26az9c2mbl6l7azimaixa6yff8w359k0ml8jwykjvqaa"))))
     (build-system haskell-build-system)
     (propagated-inputs
      `(("ghc-text" ,ghc-text)))
@@ -5979,7 +5983,7 @@ tasty.")
 (define-public ghc-cryptonite
   (package
     (name "ghc-cryptonite")
-    (version "0.9")
+    (version "0.19")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
@@ -5987,7 +5991,7 @@ tasty.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1h22x22lq2m8h456v5j50xm0l25bcm3h1pchsk83br909hjxql4z"))))
+                "1rw5k34vpn4134yrzdhf0rsshsrkixfbv9ap18di2n00z2cw1shw"))))
     (build-system haskell-build-system)
     (propagated-inputs
      `(("ghc-memory" ,ghc-memory)
@@ -6149,14 +6153,14 @@ for X.509 certificates.")
 (define-public ghc-tls
   (package
     (name "ghc-tls")
-    (version "1.3.3")
+    (version "1.3.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://hackage.haskell.org/package/"
                                   "tls/tls-" version ".tar.gz"))
               (sha256
                (base32
-                "096ay54bwy6qi9z8ypncww3ls853zj37yaficvcg7qcqj42zn0wz"))))
+                "1rdidf18i781c0vdvy9yn79yh08hmcacf6fp3sgghyiy3h0wyh5l"))))
     (build-system haskell-build-system)
     (propagated-inputs
      `(("ghc-mtl" ,ghc-mtl)
@@ -6276,7 +6280,7 @@ libraries, such as http-conduit.")
 (define-public ghc-pandoc
   (package
     (name "ghc-pandoc")
-    (version "1.15.2.1")
+    (version "1.17.2")
     (source
      (origin
        (method url-fetch)
@@ -6284,7 +6288,7 @@ libraries, such as http-conduit.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0nfzwsdvrvg9zypgyqk0246p10yzlpqsqnkds8yraqybbvkb1g30"))))
+         "1v78zq12p71gq0pc24h08inxcq5gxd0xb7m5ds0xw9pv9l2pswl1"))))
     (build-system haskell-build-system)
     (propagated-inputs
      `(("ghc-syb" ,ghc-syb)
@@ -6432,4 +6436,990 @@ can be specified precisely in the type.  The language is closely related to
 Epigram and Agda.")
     (license license:bsd-3)))
 
+(define-public ghc-base16-bytestring
+  (package
+    (name "ghc-base16-bytestring")
+    (version "0.1.1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/base16-bytestring/"
+             "base16-bytestring-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0jf40m3yijqw6wd1rwwvviww46fasphaay9m9rgqyhf5aahnbzjs"))))
+    (build-system haskell-build-system)
+    (home-page "http://github.com/bos/base16-bytestring")
+    (synopsis "Fast base16 (hex) encoding and decoding for ByteStrings")
+    (description
+     "This package provides a Haskell library for working with base16-encoded
+data quickly and efficiently, using the ByteString type.")
+    (license license:bsd-3)))
+
+(define-public ghc-binary
+  (package
+    (name "ghc-binary")
+    (version "0.8.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/binary/binary-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1fp7wxnf57cjzhbb7rgqs6fgws4690zh0dxgl924dj4nzq0cf4wd"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-random" ,ghc-random)
+       ("ghc-test-framework" ,ghc-test-framework)
+       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+       ("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-hunit" ,ghc-hunit)))
+    (home-page "https://github.com/kolmodin/binary")
+    (synopsis
+     "Binary serialisation for Haskell values using lazy ByteStrings")
+    (description
+     "Efficient, pure binary serialisation using lazy ByteStrings.  Haskell values
+may be encoded to and from binary formats, written to disk as binary, or sent over
+the network.  The format used can be automatically generated, or you can choose to
+implement a custom format if needed.  Serialisation speeds of over 1 G\\/sec have
+been observed, so this library should be suitable for high performance scenarios.")
+    (license license:bsd-3)))
+
+(define-public ghc-cryptohash
+  (package
+    (name "ghc-cryptohash")
+    (version "0.11.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/cryptohash/cryptohash-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1yr2iyb779znj79j3fq4ky8l1y8a600a2x1fx9p5pmpwq5zq93y2"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-byteable" ,ghc-byteable)
+       ("ghc-cryptonite" ,ghc-cryptonite)
+       ("ghc-memory" ,ghc-memory)
+       ("ghc-hunit" ,ghc-hunit)
+       ("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-tasty" ,ghc-tasty)
+       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+    (home-page "http://github.com/vincenthz/hs-cryptohash")
+    (synopsis "Collection of cryptographic hashes in Haskell")
+    (description
+     "A collection of crypto hashes, with a practical incremental and one-pass,
+pure APIs, with performance close to the fastest implementations available in
+other languages.  The implementations are made in C with a haskell FFI wrapper
+that hides the C implementation.")
+    (license license:bsd-3)))
+
+(define-public ghc-data-ordlist
+  (package
+    (name "ghc-data-ordlist")
+    (version "0.4.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/data-ordlist/data-ordlist-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "03a9ix1fcx08viwv2jg5ndw1qbkydyyrmjvqr9wasmcik9x1wv3g"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/data-ordlist")
+    (synopsis "Set and bag operations on ordered lists")
+    (description
+     "This module provides set and multiset operations on ordered lists.")
+    (license license:bsd-3)))
+
+(define-public ghc-haskeline
+  (package
+    (name "ghc-haskeline")
+    (version "0.7.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/haskeline/haskeline-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "09wd6sxgn65xxpk7dhy1cg3ywlbk0ccqq7xylycwk4zazy3gjgkd"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ncurses" ,ncurses)))
+    (arguments
+     `(#:configure-flags (list "-fterminfo")))
+    (home-page "https://github.com/judah/haskeline")
+    (synopsis "Command-line interface for user input")
+    (description
+     "Haskeline provides a user interface for line input in command-line
+programs.  This library is similar in purpose to readline, but since it
+is written in Haskell it is (hopefully) more easily used in other Haskell
+programs.")
+    (license license:bsd-3)))
+
+(define-public ghc-regex-applicative
+  (package
+    (name "ghc-regex-applicative")
+    (version "0.3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/regex-applicative/"
+             "regex-applicative-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1riv7jqf26lbv4rm54sd6mrx8xdh4dvh4xbzymzdfdw13k6a4nb6"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-smallcheck" ,ghc-smallcheck)
+       ("ghc-tasty" ,ghc-tasty)
+       ("ghc-tasty-smallcheck" ,ghc-tasty-smallcheck)
+       ("ghc-tasty-hunit" ,ghc-tasty-hunit)))
+    (home-page "https://github.com/feuerbach/regex-applicative")
+    (synopsis "Regex-based parsing with applicative interface")
+    (description
+     "@code{regex-applicative} is a Haskell library for parsing using
+regular expressions.  Parsers can be built using Applicative interface.")
+    (license license:expat)))
+
+(define-public ghc-regex-tdfa
+  (package
+    (name "ghc-regex-tdfa")
+    (version "1.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/regex-tdfa/regex-tdfa-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0f8x8wyr6m21g8dnxvnvalz5bsq37l125l6qhs0fscbvprsxc4nb"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-mtl" ,ghc-mtl)
+       ("ghc-parsec" ,ghc-parsec)
+       ("ghc-regex-base" ,ghc-regex-base)))
+    (home-page "https://github.com/ChrisKuklewicz/regex-tdfa")
+    (synopsis "POSIX extended regular expressions in Haskell.")
+    (description
+     "Regex-tdfa is a pure Haskell regular expression library implementing POSIX
+extended regular expressions.  It is a \"tagged\" DFA regex engine. It is
+inspired by libtre.")
+    (license license:bsd-3)))
+
+(define-public ghc-regex-compat-tdfa
+  (package
+    (name "ghc-regex-compat-tdfa")
+    (version "0.95.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/regex-compat-tdfa/regex-compat-tdfa-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1p90fn90yhp7fvljjdqjp41cszidcfz4pw7fwvzyx4739b98x8sg"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-regex-base" ,ghc-regex-base)
+       ("ghc-regex-tdfa" ,ghc-regex-tdfa)))
+    (home-page "http://hub.darcs.net/shelarcy/regex-compat-tdfa")
+    (synopsis "Unicode Support version of Text.Regex, using regex-tdfa")
+    (description
+     "One module layer over @code{regex-tdfa} to replace @code{Text.Regex}.
+@code{regex-compat} can't use Unicode characters correctly because of using regex-posix.
+This is not good for Unicode users.  This modified regex-compat uses regex-tdfa to solve
+this problem.")
+    (license license:bsd-3)))
+
+(define-public ghc-tasty-th
+  (package
+    (name "ghc-tasty-th")
+    (version "0.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/tasty-th/tasty-th-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0dff9si8i1qp0s7p4hlk0l29vq7wxfglw6mvlgmld43h7rllv88q"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-tasty" ,ghc-tasty)))
+    (home-page "http://github.com/bennofs/tasty-th")
+    (synopsis "Automatically generate tasty TestTrees")
+    (description
+      "Tasty-th automatically generates tasty TestTrees from functions of the
+current module, using TemplateHaskell.  This is a fork the original
+test-framework-th package, modified to work with tasty instead of
+test-framework.")
+    (license license:bsd-3)))
+
+(define-public ghc-sandi
+  (package
+    (name "ghc-sandi")
+    (version "0.4.0") ; darcs-2.12.4 needs == 0.4.*
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/sandi/sandi-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1smf3bq44qni4zbgxpw7cy7b9g95fbrr73j8njjf6139naj9bj20"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-stringsearch" ,ghc-stringsearch)
+       ("ghc-conduit" ,ghc-conduit)
+       ("ghc-exceptions" ,ghc-exceptions)
+       ("ghc-hunit" ,ghc-hunit)
+       ("ghc-tasty" ,ghc-tasty)
+       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+       ("ghc-tasty-th" ,ghc-tasty-th)))
+    (home-page "http://hackage.haskell.org/package/sandi")
+    (synopsis "Data encoding library")
+    (description "Reasonably fast data encoding library.")
+    (license license:bsd-3)))
+
+(define-public ghc-bytestring-handle
+  (package
+    (name "ghc-bytestring-handle")
+    (version "0.1.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/bytestring-handle/bytestring-handle-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0q5yzx90ad9w7qvaix05bynxwlsbqjrgfc4hqb355ibf991wd0rh"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+       ("ghc-hunit" ,ghc-hunit)
+       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+       ("ghc-test-framework" ,ghc-test-framework)))
+    (home-page "http://hub.darcs.net/ganesh/bytestring-handle")
+    (synopsis "ByteString-backed Handles")
+    (description "ByteString-backed Handles") ; There is no description
+    (license license:bsd-3)))
+
+(define-public ghc-tar
+  (package
+    (name "ghc-tar")
+    (version "0.5.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/tar/tar-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "18qq94j9bm91iswnxq2dm5dws5c7wm4k01q2rpf8py35cf3svnfq"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-bytestring-handle" ,ghc-bytestring-handle)
+       ("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-tasty" ,ghc-tasty)
+       ("ghc-tasty-quickcheck" ,ghc-tasty-quickcheck)
+       ("ghc-array" ,ghc-array)))
+    (home-page "http://hackage.haskell.org/package/tar")
+    (synopsis "Reading, writing and manipulating \".tar\" archive files")
+    (description
+     "This library is for working with \\\"@.tar@\\\" archive files.
+It can read and write a range of common variations of the tar archive format
+including V7, POSIX USTAR and GNU formats.  It provides support for packing and
+unpacking portable archives.  This makes it suitable for distribution but not
+backup because details like file ownership and exact permissions are not
+preserved.  It also provides features for random access to archive content using
+an index.")
+    (license license:bsd-3)))
+
+(define-public ghc-transformers
+  (package
+    (name "ghc-transformers")
+    (version "0.5.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/transformers/transformers-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1qkhi8ssf8c4jnmrw9dzym3igqbzq7h48iisaykdfzdsm09qfh3c"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/transformers")
+    (synopsis "Concrete functor and monad transformers")
+    (description
+     "A portable library of functor and monad transformers, inspired by the paper
+'Functional Programming with Overloading and Higher-Order Polymorphism',
+by Mark P Jones.  This package contains the monad transformer class and IO monad class,
+concrete functor and monad transformers, each with associated operations and functions
+to lift operations associated with other transformers.  The package can be used on
+its own in portable Haskell code, in which case operations need to be manually lifted
+through transformer stacks.  Alternatively, it can be used with the
+non-portable monad classes in the @code{mtl} or @code{monads-tf} packages,
+which automatically lift operations introduced by monad transformers through
+other transformers.")
+    (license license:bsd-3)))
+
+;; darcs-2.12.0 requires transformers-0.4.2.0
+(define-public ghc-transformers-0.4.2.0
+  (package
+    (inherit ghc-transformers)
+    (version "0.4.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://hackage.haskell.org/package/transformers/"
+                                  "transformers-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0a364zfcm17mhpy0c4ms2j88sys4yvgd6071qsgk93la2wjm8mkr"))))))
+
+(define-public ghc-findbin
+  (package
+    (name "ghc-findbin")
+    (version "0.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/FindBin/FindBin-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "197xvn05yysmibm1p5wzxfa256lvpbknr5d1l2ws6g40w1kpk717"))))
+    (build-system haskell-build-system)
+    (home-page "https://github.com/audreyt/findbin")
+    (synopsis "Get the absolute path of the running program")
+    (description
+     "This module locates the full directory of the running program, to allow
+the use of paths relative to it.  FindBin supports invocation of Haskell
+programs via \"ghci\", via \"runhaskell/runghc\", as well as compiled as
+an executable.")
+    (license license:bsd-3)))
+
+(define-public ghc-patience
+  (package
+    (name "ghc-patience")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/patience/patience-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0qyv20gqy9pb1acy700ahv70lc6vprcwb26cc7fcpcs4scsc7irm"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/patience")
+    (synopsis "Patience diff and longest increasing subsequence")
+    (description
+     "This library implements the 'patience diff' algorithm, as well as the
+patience algorithm for the longest increasing subsequence problem.
+Patience diff computes the difference between two lists, for example the lines
+of two versions of a source file.  It provides a good balance between
+performance, nice output for humans, and simplicity of implementation.")
+    (license license:bsd-3)))
+
+(define-public ghc-monads-tf
+  (package
+    (name "ghc-monads-tf")
+    (version "0.1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/monads-tf/monads-tf-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1wdhskwa6dw8qljbvwpyxj8ca6y95q2np7z4y4q6bpf4anmd5794"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/monads-tf")
+    (synopsis "Monad classes, using type families")
+    (description
+     "Monad classes using type families, with instances for various monad transformers,
+inspired by the paper 'Functional Programming with Overloading and Higher-Order
+Polymorphism', by Mark P Jones.  This package is almost a compatible replacement for
+the @code{mtl-tf} package.")
+    (license license:bsd-3)))
+
+(define-public ghc-bytestring
+  (package
+    (name "ghc-bytestring")
+    (version "0.10.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/bytestring/bytestring-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "16zwb1p83z7vc5wlhvknpy80b5a2jxc5awx67rk52qnp9idmyq9d"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-random" ,ghc-random)
+       ("ghc-test-framework" ,ghc-test-framework)
+       ("ghc-test-framework-quickcheck2" ,ghc-test-framework-quickcheck2)
+       ("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-test-framework-hunit" ,ghc-test-framework-hunit)
+       ("ghc-hunit" ,ghc-hunit)
+       ("ghc-byteorder" ,ghc-byteorder)
+       ("ghc-dlist" ,ghc-dlist)
+       ("ghc-mtl" ,ghc-mtl)))
+    (arguments
+     `(#:tests? #f)) ; Test number two becomes non-responsive for 20+ minutes
+    (home-page "https://github.com/haskell/bytestring")
+    (synopsis "Fast, compact, strict and lazy byte strings with a list interface")
+    (description
+     "An efficient compact, immutable byte string type (both strict and lazy)
+suitable for binary or 8-bit character data.  The 'ByteString' type represents
+sequences of bytes or 8-bit characters.  It is suitable for high performance use,
+both in terms of large data quantities, or high speed requirements.  The 'ByteString'
+functions follow the same style as ordinary lists, so it is easy to convert code
+from using 'String' to 'ByteString'.")
+    (license license:bsd-3)))
+
+(define-public ghc-colour
+(package
+  (name "ghc-colour")
+  (version "2.3.3")
+  (source
+   (origin
+     (method url-fetch)
+     (uri (string-append
+           "https://hackage.haskell.org/package/colour/colour-"
+           version ".tar.gz"))
+     (sha256
+      (base32
+       "1qmn1778xzg07jg9nx4k1spdz2llivpblf6wwrps1qpqjhsac5cd"))))
+  (build-system haskell-build-system)
+  (home-page "http://www.haskell.org/haskellwiki/Colour")
+  (synopsis "Model for human colour perception")
+  (description
+   "This package provides a data type for colours and transparency.
+Colours can be blended and composed.  Various colour spaces are
+supported.  A module of colour names (\"Data.Colour.Names\") is provided.")
+  (license license:expat)))
+
+(define-public ghc-directory
+  (package
+    (name "ghc-directory")
+    (version "1.2.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/directory/directory-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0h3hrqskadmbigaxbz2k5xxjjjlmfaq2zdn2g7jh1wv9k6yrxraa"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/directory")
+    (synopsis "Platform-agnostic library for filesystem operations")
+    (description
+     "This library provides a basic set of operations for manipulating
+files and directories in a portable way.")
+    (license license:bsd-3)))
+
+(define-public ghc-process
+  (package
+    (name "ghc-process")
+    (version "1.4.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/process/process-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1v1bav5isqxq9fc4lw714x94qbfsjbm2nn12kjp69r1ql8jaaaqw"))))
+    (build-system haskell-build-system)
+    (home-page "http://hackage.haskell.org/package/process")
+    (synopsis "System process libraries")
+    (description
+     "This package contains libraries for dealing with system processes.")
+    (license license:bsd-3)))
+
+(define-public ghc-wl-pprint-text
+  (package
+    (name "ghc-wl-pprint-text")
+    (version "1.1.0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/wl-pprint-text/wl-pprint-text-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1xgizzimfw17mpmw2afvmnvyag976j8ggn7k5r564rkw9f0m6bgz"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-text" ,ghc-text)))
+    (home-page "http://hackage.haskell.org/package/wl-pprint-text")
+    (synopsis "Wadler/Leijen Pretty Printer for Text values")
+    (description
+     "A clone of wl-pprint for use with the text library.")
+    (license license:bsd-3)))
+
+(define-public ghc-fgl-arbitrary
+  (package
+    (name "ghc-fgl-arbitrary")
+    (version "0.2.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/fgl-arbitrary/fgl-arbitrary-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "12qbsla4vivffris6y3gj29vrafkpyazqdbdy2m55nggypqpf7ah"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-fgl" ,ghc-fgl)
+       ("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-hspec" ,ghc-hspec)))
+    (home-page "http://hackage.haskell.org/package/fgl-arbitrary")
+    (synopsis "QuickCheck support for fgl")
+    (description
+     "Provides Arbitrary instances for fgl graphs to avoid adding a
+QuickCheck dependency for fgl whilst still making the instances
+available to others.  Also available are non-fgl-specific functions
+for generating graph-like data structures.")
+    (license license:bsd-3)))
+
+(define-public ghc-graphviz
+  (package
+    (name "ghc-graphviz")
+    (version "2999.18.1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://hackage.haskell.org/package/"
+                                  "graphviz/graphviz-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1z453is01v0rnxlv6xx4iyaqv5vrp3bpz829mpv1a341sck2135h"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-quickcheck" ,ghc-quickcheck)
+       ("ghc-colour" ,ghc-colour)
+       ("ghc-dlist" ,ghc-dlist)
+       ("ghc-fgl" ,ghc-fgl)
+       ("ghc-fgl-arbitrary" ,ghc-fgl-arbitrary)
+       ("ghc-polyparse" ,ghc-polyparse)
+       ("ghc-temporary" ,ghc-temporary)
+       ("ghc-text" ,ghc-text)
+       ("ghc-wl-pprint-text" ,ghc-wl-pprint-text)))
+    (home-page "https://hackage.haskell.org/package/graphviz")
+    (synopsis "Bindings to Graphviz for graph visualisation")
+    (description
+     "This library provides bindings for the Dot language used by
+the @uref{http://graphviz.org/, Graphviz} suite of programs for
+visualising graphs, as well as functions to call those programs.
+Main features of the graphviz library include:
+
+@enumerate
+@item Almost complete coverage of all Graphviz attributes and syntax
+@item Support for specifying clusters
+@item The ability to use a custom node type
+@item Functions for running a Graphviz layout tool with all specified output types
+@item Generate and parse Dot code with two options: strict and liberal
+@item Functions to convert FGL graphs and other graph-like data structures
+@item Round-trip support for passing an FGL graph through Graphviz to augment node
+and edge labels with positional information, etc.
+@end enumerate\n")
+    (license license:bsd-3)))
+
+(define-public ghc-array
+  (package
+    (name "ghc-array")
+    (version "0.5.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/array/array-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "08r2rq4blvc737mrg3xhlwiw13jmsz5dlf2fd0ghb9cdaxc6kjc9"))))
+    (build-system haskell-build-system)
+    (home-page
+     "http://hackage.haskell.org/package/array")
+    (synopsis "Mutable and immutable arrays")
+    (description
+     "In addition to providing the @code{Data.Array} module, this package also defines
+the classes @code{IArray} of immutable arrays and @code{MArray} of arrays mutable
+within appropriate monads, as well as some instances of these classes.")
+    (license license:bsd-3)))
+
+(define-public ghc-constraints
+  (package
+    (name "ghc-constraints")
+    (version "0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/constraints/constraints-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "120mmv9rwbahslisc1z8zx9lw7v6hl5fzid4l0hiy5as6ijqgl2c"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-hashable" ,ghc-hashable)
+       ("ghc-mtl" ,ghc-mtl)
+       ("ghc-transformers-compat" ,ghc-transformers-compat)))
+    (home-page "http://github.com/ekmett/constraints/")
+    (synopsis "Constraint manipulation")
+    (description
+     "GHC 7.4 gave us the ability to talk about @code{ConstraintKinds}.
+They stopped crashing the compiler in GHC 7.6.  This package provides
+a vocabulary for working with them.")
+    (license license:bsd-3)))
+
+(define-public ghc-lifted-async
+  (package
+    (name "ghc-lifted-async")
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/lifted-async/lifted-async-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "00fnwfcnc6niq9jbbb9rap9rkdgv5qhcglwanzc5fi8834j94c1r"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-async" ,ghc-async)
+       ("ghc-lifted-base" ,ghc-lifted-base)
+       ("ghc-transformers-base" ,ghc-transformers-base)
+       ("ghc-monad-control" ,ghc-monad-control)
+       ("ghc-constraints" ,ghc-constraints)
+       ("ghc-hunit" ,ghc-hunit)
+       ("ghc-mtl" ,ghc-mtl)
+       ("ghc-tasty" ,ghc-tasty)
+       ("ghc-tasty-hunit" ,ghc-tasty-hunit)
+       ("ghc-tasty-th" ,ghc-tasty-th)))
+    (home-page "https://github.com/maoe/lifted-async")
+    (synopsis "Run lifted IO operations asynchronously and wait for their results")
+    (description
+     "This package provides IO operations from @code{async} package lifted to any
+instance of @code{MonadBase} or @code{MonadBaseControl}.")
+    (license license:bsd-3)))
+
+;; Ghc-shelly depends on ghc-system-filepath and ghc-system-fileio, who in turn depend on
+;; ghc-chell and ghc-chell-quickcheck for the test phase. Ghc-chell depends on ghc-options
+;; which depends on ghc-chell and ghc-chell-quickcheck.
+;; Therefore we bootstrap it with tests disabled.
+(define ghc-system-filepath-bootstrap
+  (package
+    (name "ghc-system-filepath-bootstrap")
+    (version "0.4.13.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/system-filepath/system-filepath-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1yy5zsmmimhg6iaw9fmpwrxvxrgi5s6bfyqfihdsnx4bjvn7sp9l"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f))
+    (inputs
+     `(("ghc-text" ,ghc-text)
+       ("ghc-quickcheck" ,ghc-quickcheck)))
+    (home-page "https://github.com/fpco/haskell-filesystem")
+    (synopsis "High-level, byte-based file and directory path manipulations")
+    (description
+     "Provides a FilePath datatype and utility functions for operating on it.
+Unlike the filepath package, this package does not simply reuse String,
+increasing type safety.")
+    (license license:expat)))
+
+;; See ghc-system-filepath-bootstrap. In addition this package depends on
+;; ghc-system-filepath.
+(define ghc-system-fileio-bootstrap
+  (package
+    (name "ghc-system-fileio-bootstrap")
+    (version "0.3.16.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/system-fileio/system-fileio-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1484hcl27s2qcby8ws5djj11q9bz68bspcifz9h5gii2ndy70x9i"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f))
+    (inputs
+     `(("ghc-system-filepath-bootstrap" ,ghc-system-filepath-bootstrap)
+       ("ghc-text" ,ghc-text)
+       ("ghc-temporary" ,ghc-temporary)))
+    (home-page "https://github.com/fpco/haskell-filesystem")
+    (synopsis "Consistent filesystem interaction across GHC versions")
+    (description
+     "This is a small wrapper around the directory, unix, and Win32 packages,
+for use with system-filepath.  It provides a consistent API to the various
+versions of these packages distributed with different versions of GHC.
+In particular, this library supports working with POSIX files that have paths
+which can't be decoded in the current locale encoding.")
+    (license license:expat)))
+
+(define-public ghc-shelly
+  (package
+    (name "ghc-shelly")
+    (version "1.6.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/shelly/shelly-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0bg1pj5bhswfgwfgz66xr82i8cmjgrnx5ljvjy37052zxb82imnk"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-mtl" ,ghc-mtl)
+       ("ghc-unix-compat" ,ghc-unix-compat)
+       ("ghc-system-filepath-bootstrap" ,ghc-system-filepath-bootstrap)
+       ("ghc-system-fileio-bootstrap" ,ghc-system-fileio-bootstrap)
+       ("ghc-monad-control" ,ghc-monad-control)
+       ("ghc-lifted-base" ,ghc-lifted-base)
+       ("ghc-lifted-async" ,ghc-lifted-async)
+       ("ghc-exceptions" ,ghc-exceptions)
+       ("ghc-enclosed-exceptions" ,ghc-enclosed-exceptions)
+       ("ghc-text" ,ghc-text)
+       ("ghc-async" ,ghc-async)
+       ("ghc-transformers-base" ,ghc-transformers-base)
+       ("ghc-hunit" ,ghc-hunit)
+       ("ghc-hspec" ,ghc-hspec)))
+    (home-page "https://github.com/yesodweb/Shelly.hs")
+    (synopsis "Shell-like (systems) programming in Haskell")
+    (description
+     "Shelly provides convenient systems programming in Haskell, similar in
+spirit to POSIX shells.  Shelly is originally forked  from the Shellish package.")
+    (license license:bsd-3)))
+
+;; See ghc-system-filepath-bootstrap, chell and chell-quickcheck are required for tests.
+(define ghc-options-bootstrap
+  (package
+    (name "ghc-options-bootstrap")
+    (version "1.2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/options/options-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0qjs0v1ny52w51n5582d4z8wy9h6n0zw1xb5dh686ff5wadflgi8"))))
+    (build-system haskell-build-system)
+    (arguments
+     `(#:tests? #f))
+    (inputs
+     `(("ghc-monads-tf" ,ghc-monads-tf)))
+    (home-page "https://john-millikin.com/software/haskell-options/")
+    (synopsis "Powerful and easy-to-use command-line option parser")
+    (description
+     "The @code{options} package lets library and application developers
+easily work with command-line options.")
+    (license license:expat)))
+
+(define-public ghc-chell
+  (package
+    (name "ghc-chell")
+    (version "0.4.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/chell/chell-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0lb95abzxl4a87nfqxsxpb3a39pd52cci43hcvj8615hyhqvs2jz"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-options-bootstrap" ,ghc-options-bootstrap)
+       ("ghc-patience" ,ghc-patience)
+       ("ghc-random" ,ghc-random)
+       ("ghc-text" ,ghc-text)
+       ("ghc-ansi-terminal" ,ghc-ansi-terminal)))
+    (home-page "https://john-millikin.com/software/chell/")
+    (synopsis "Simple and intuitive library for automated testing")
+    (description
+     "Chell is a simple and intuitive library for automated testing.
+It natively supports assertion-based testing, and can use companion
+libraries such as @code{chell-quickcheck} to support more complex
+testing strategies.")
+    (license license:expat)))
+
+(define ghc-chell-quickcheck-bootstrap
+  (package
+    (name "ghc-chell-quickcheck-bootstrap")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/chell-quickcheck/chell-quickcheck-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "02bkcnx5k6r5csdnnkvk4wfd0l36nxb87i1463ynw17n7ym9s4cs"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-chell" ,ghc-chell)
+       ("ghc-random" ,ghc-random)
+       ("ghc-quickcheck" ,ghc-quickcheck)))
+    (arguments
+     `(#:tests? #f))
+    (home-page "https://john-millikin.com/software/chell/")
+    (synopsis "QuickCheck support for the Chell testing library")
+    (description "More complex tests for @code{chell}.")
+    (license license:expat)))
+
+(define-public ghc-chell-quickcheck
+  (package
+    (name "ghc-chell-quickcheck")
+    (version "0.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/chell-quickcheck/chell-quickcheck-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "02bkcnx5k6r5csdnnkvk4wfd0l36nxb87i1463ynw17n7ym9s4cs"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-chell" ,ghc-chell)
+       ("ghc-chell-quickcheck-bootstrap" ,ghc-chell-quickcheck-bootstrap)
+       ("ghc-random" ,ghc-random)
+       ("ghc-quickcheck" ,ghc-quickcheck)))
+    (home-page "https://john-millikin.com/software/chell/")
+    (synopsis "QuickCheck support for the Chell testing library")
+    (description "More complex tests for @code{chell}.")
+    (license license:expat)))
+
+(define-public ghc-options
+  (package
+    (name "ghc-options")
+    (version "1.2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/options/options-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0qjs0v1ny52w51n5582d4z8wy9h6n0zw1xb5dh686ff5wadflgi8"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-monads-tf" ,ghc-monads-tf)
+       ("ghc-chell" ,ghc-chell)
+       ("ghc-chell-quickcheck" ,ghc-chell-quickcheck)))
+    (home-page "https://john-millikin.com/software/haskell-options/")
+    (synopsis "Powerful and easy-to-use command-line option parser")
+    (description
+     "The @code{options} package lets library and application developers
+easily work with command-line options.")
+    (license license:expat)))
+
+(define-public ghc-system-filepath
+  (package
+    (name "ghc-system-filepath")
+    (version "0.4.13.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/system-filepath/system-filepath-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1yy5zsmmimhg6iaw9fmpwrxvxrgi5s6bfyqfihdsnx4bjvn7sp9l"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-text" ,ghc-text)
+       ("ghc-chell" ,ghc-chell)
+       ("ghc-chell-quickcheck" ,ghc-chell-quickcheck)
+       ("ghc-quickcheck" ,ghc-quickcheck)))
+    (home-page "https://github.com/fpco/haskell-filesystem")
+    (synopsis "High-level, byte-based file and directory path manipulations")
+    (description
+     "Provides a FilePath datatype and utility functions for operating on it.
+Unlike the filepath package, this package does not simply reuse String,
+increasing type safety.")
+    (license license:expat)))
+
+(define-public ghc-system-fileio
+  (package
+    (name "ghc-system-fileio")
+    (version "0.3.16.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/system-fileio/system-fileio-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "1484hcl27s2qcby8ws5djj11q9bz68bspcifz9h5gii2ndy70x9i"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-system-filepath" ,ghc-system-filepath)
+       ("ghc-text" ,ghc-text)
+       ("ghc-chell" ,ghc-chell)
+       ("ghc-temporary" ,ghc-temporary)))
+    (home-page "https://github.com/fpco/haskell-filesystem")
+    (synopsis "Consistent filesystem interaction across GHC versions")
+    (description
+     "This is a small wrapper around the directory, unix, and Win32 packages,
+for use with system-filepath.  It provides a consistent API to the various
+versions of these packages distributed with different versions of GHC.
+In particular, this library supports working with POSIX files that have paths
+which can't be decoded in the current locale encoding.")
+    (license license:expat)))
 ;;; haskell.scm ends here
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 730dbf97e9..920a293dbf 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -9,6 +9,8 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,10 +35,12 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages graphics)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages mcrypt)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -46,6 +50,7 @@
   #: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 (srfi srfi-1))
@@ -127,13 +132,13 @@ image files in PBMPLUS PPM/PGM, GIF, BMP, and Targa file formats.")
 (define-public jpegoptim
   (package
    (name "jpegoptim")
-   (version "1.4.3")
+   (version "1.4.4")
    (source (origin
             (method url-fetch)
             (uri (string-append "http://www.kokkonen.net/tjko/src/jpegoptim-"
                                 version ".tar.gz"))
             (sha256 (base32
-                     "0k53q7dc8w5ashz8v261x2b5vvz7gdvg8w962rz9gjvkjbh4lg93"))))
+                     "1cn1i0g1xjdwa12w0ifbnzgb1vqbpr8ji6h05vxksj79vyi3x849"))))
    (build-system gnu-build-system)
    (inputs `(("libjpeg" ,libjpeg)))
    (arguments
@@ -147,6 +152,37 @@ maximum quality factor.")
    (license license:gpl2+)
    (home-page "http://www.kokkonen.net/tjko/projects.html#jpegoptim")))
 
+(define-public libicns
+  (package
+    (name "libicns")
+    (version "0.8.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/icns/"
+                    "libicns-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1hjm8lwap7bjyyxsyi94fh5817xzqhk4kb5y0b7mb6675xw10prk"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libpng" ,libpng)
+       ("jasper" ,jasper)))
+    (arguments
+     `(#:tests? #t)) ; No tests.
+    (home-page "http://icns.sourceforge.net/")
+    (synopsis "Library for handling Mac OS icns resource files")
+    (description
+     "Libicns is a library for the manipulation of Mac OS IconFamily resource
+type files (ICNS).  @command{icns2png} and @command{png2icns} are provided to
+convert between PNG and ICNS. @command{icns2png} will extract image files from
+ICNS files under names like \"Foo_48x48x32.png\" useful for installing for use
+with .desktop files.  Additionally, @command{icontainer2png} is provided for
+extracting icontainer icon files.")
+    (license (list license:lgpl2.1+     ; libicns
+                   license:lgpl2.0+     ; src/apidocs.*
+                   license:gpl2+))))    ; icns2png, png2icns, icontainer2png
+
 (define-public libtiff
   (package
    (name "libtiff")
@@ -306,15 +342,14 @@ arithmetic ops.")
 (define-public jbig2dec
   (package
     (name "jbig2dec")
-    (version "0.11")
+    (version "0.13")
     (source
       (origin
         (method url-fetch)
-        (uri             ;; The link on the homepage is dead.
-          (string-append "http://distfiles.gentoo.org/distfiles/" name "-"
-                          version ".tar.gz"))
+        (uri (string-append "http://downloads.ghostscript.com/public/" name "/"
+                            name "-" version ".tar.gz"))
         (sha256
-          (base32 "1ffhgmf2fqzk0h4k736pp06z7q5y4x41fg844bd6a9vgncq86bby"))
+          (base32 "04akiwab8iy5iy34razcvh9mcja9wy737civ3sbjxk4j143s1b2s"))
         (patches (search-patches "jbig2dec-ignore-testtest.patch"))))
 
     (build-system gnu-build-system)
@@ -329,23 +364,25 @@ This is a decoder only implementation, and currently is in the alpha
 stage, meaning it doesn't completely work yet.  However, it is
 maintaining parity with available encoders, so it is useful for real
 work.")
-    (home-page "http://jbig2dec.sourceforge.net/")
+    (home-page "http://www.ghostscript.com/jbig2dec.html")
     (license license:gpl2+)))
 
 (define-public openjpeg
   (package
     (name "openjpeg")
-    (version "2.1.0")
+    (version "2.1.1")
     (source
       (origin
         (method url-fetch)
         (uri
-         (string-append "mirror://sourceforge/openjpeg.mirror/" version "/"
-                        name "-" version ".tar.gz"))
+         (string-append "https://github.com/uclouvain/openjpeg/archive/v"
+                        version ".tar.gz"))
+        (file-name (string-append name "-" version ".tar.gz"))
         (sha256
-         (base32 "00zzm303zvv4ijzancrsb1cqbph3pgz0nky92k9qx3fq9y0vnchj"))
-        (patches (search-patches "openjpeg-use-after-free-fix.patch"
-                                 "openjpeg-CVE-2015-6581.patch"))))
+         (base32
+          "1anv0rjkbxw9kx91wvlfpb3dhppibda6kb1papny46bjzi3pzhl2"))
+        (patches (search-patches "openjpeg-CVE-2016-5157.patch"
+                                 "openjpeg-CVE-2016-7163.patch"))))
     (build-system cmake-build-system)
     (arguments
       ;; Trying to run `$ make check' results in a no rule fault.
@@ -369,21 +406,6 @@ error-resilience, a Java-viewer for j2k-images, ...")
     (home-page "https://github.com/uclouvain/openjpeg")
     (license license:bsd-2)))
 
-(define-public openjpeg-2.0
-  (package (inherit openjpeg)
-    (name "openjpeg")
-    (version "2.0.1")
-    (source
-     (origin
-       (method url-fetch)
-       (uri
-        (string-append "mirror://sourceforge/openjpeg.mirror/" version "/"
-                       name "-" version ".tar.gz"))
-       (sha256
-        (base32 "1c2xc3nl2mg511b63rk7hrckmy14681p1m44mzw3n1fyqnjm0b0z"))
-       (patches (search-patches "openjpeg-use-after-free-fix.patch"
-                                "openjpeg-CVE-2015-6581.patch"))))))
-
 (define-public openjpeg-1
   (package (inherit openjpeg)
     (name "openjpeg")
@@ -779,7 +801,7 @@ ISO/IEC 15444-1).")
 (define-public zimg
   (package
     (name "zimg")
-    (version "2.1")
+    (version "2.2.1")
     (source
       (origin
         (method url-fetch)
@@ -788,7 +810,7 @@ ISO/IEC 15444-1).")
         (file-name (string-append name "-" version ".tar.gz"))
         (sha256
          (base32
-          "1hqp1gcsa2zhypms5dnasb1srjgxdqm7cip3w5i571kk9nxkn289"))))
+          "0m2gjpkb0dlg4j77nr41z284zvyfq9qg3ahsv8p1xy8jfr7h1hqa"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -840,3 +862,95 @@ whether they look alike.  It uses a computational model of the human visual
 system to detect similarities.  This allows it too see beyond irrelevant
 differences in file encoding, image quality, and other small variations.")
     (license license:gpl2+)))
+
+(define-public steghide
+  (package
+    (name "steghide")
+    (version "0.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/steghide/steghide/"
+                                  version "/steghide-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "18bxlhbdc3zsmxj84i417xjh0q28kv26q449k23n0a72ldwziix2"))
+              (patches (list (search-patch "steghide-fixes.patch")))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("gettext" ,gnu-gettext)
+       ("libtool" ,libtool)
+       ("perl" ,perl)))                 ;for tests
+    (inputs
+     `(("libmhash" ,libmhash)
+       ("libmcrypt" ,libmcrypt)
+       ("libjpeg" ,libjpeg)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:make-flags '("CXXFLAGS=-fpermissive"))) ;required for MHashPP.cc
+    (home-page "http://steghide.sourceforge.net")
+    (synopsis "Image and audio steganography")
+    (description
+     "Steghide is a steganography program that is able to hide data in various
+kinds of image- and audio-files.  The color- respectivly sample-frequencies
+are not changed thus making the embedding resistant against first-order
+statistical tests.")
+    (license license:gpl2+)))
+
+(define-public stb-image-for-extempore
+  (let ((revision "1")
+        (commit "152a250a702bf28951bb0220d63bc0c99830c498"))
+    (package
+      (name "stb-image-for-extempore")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source
+       (origin (method git-fetch)
+               (uri (git-reference
+                     (url "https://github.com/extemporelang/stb.git")
+                     (commit commit)))
+               (sha256
+                (base32
+                 "0y0aa20pj9311x2ii06zg8xs34idg14hfgldqc5ymizc6cf1qiqv"))
+               (file-name (string-append name "-" version "-checkout"))))
+      (build-system cmake-build-system)
+      (arguments `(#:tests? #f))        ; no tests included
+      ;; Extempore refuses to build on architectures other than x86_64
+      (supported-systems '("x86_64-linux"))
+      (home-page "https://github.com/extemporelang/stb")
+      (synopsis "Image library for Extempore")
+      (description
+       "This package is a collection of assorted single-file libraries.  Of
+all included libraries only the image loading and decoding library is
+installed as @code{stb_image}.")
+      (license license:public-domain))))
+
+(define-public optipng
+  (package
+    (name "optipng")
+    (version "0.7.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://prdownloads.sourceforge.net/optipng/optipng-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "105yk5qykvhiahzag67gm36s2kplxf6qn5hay02md0nkrcgn6w28"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; configure script does not accept arguments CONFIG_SHELL and SHELL
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (zero? (system* "sh" "configure"
+                             (string-append "--prefix=" (assoc-ref outputs "out")))))))))
+    (synopsis "Optimizer that recompresses PNG image files to a
+smaller size")
+    (description "OptiPNG is a PNG optimizer that recompresses image
+files to a smaller size, without losing any information.  This program
+also converts external formats (BMP, GIF, PNM and TIFF) to optimized
+PNG, and performs PNG integrity checks and corrections.")
+    (home-page "http://optipng.sourceforge.net/")
+    (license license:zlib)))
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index f824abf3f4..75427a4ce1 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -41,14 +41,14 @@
 (define-public imagemagick
   (package
     (name "imagemagick")
-    (version "6.9.5-8")
+    (version "6.9.5-10")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0ds21sk1pczf2cwi62rqp6b8x2m24sb6xn82ivzh13m42phzigav"))))
+               "0cxjzqzca80vf6sfx4z9zq4wq2w0vy9ajp9kf88jb4na8mwsn198"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
@@ -124,7 +124,8 @@ text, lines, polygons, ellipses and Bézier curves.")
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("imagemagick" ,imagemagick)))
     (arguments
-     `(#:phases
+     `(#:tests? #f ;;Failed 2/23 test programs. 2/353 subtests failed.
+       #:phases
        (modify-phases %standard-phases
          (add-before
           'configure 'image-magick-flags
@@ -155,7 +156,7 @@ script.")
 (define-public graphicsmagick
   (package
     (name "graphicsmagick")
-    (version "1.3.24")
+    (version "1.3.25")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://ftp.graphicsmagick.org/pub/"
@@ -163,7 +164,7 @@ script.")
                                  "/GraphicsMagick-" version ".tar.xz"))
              (sha256
               (base32
-               "1q40w5hcl8rcpszm0r7rpr3a9lj390p39zfvavkvlgxyyk7bmgsj"))))
+               "17xcc7pfcmiwpfr1g8ys5a7bdnvqzka53vg3kkzhwwz0s99gljyn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index a39596307a..ba073bc771 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -95,7 +95,7 @@ irssi, but graphical.")
 (define-public irssi
   (package
     (name "irssi")
-    (version "0.8.19")
+    (version "0.8.20")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/irssi/irssi/"
@@ -103,7 +103,7 @@ irssi, but graphical.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1lz57v3nkki30lb883pipp5syyfkssvjlq3xxf9yl578902h982c"))))
+               "0njh43xmpad9h5g6fp1805hrix1mwbbnk7p6qmlw9apm47lc90kq"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -262,9 +262,9 @@ and extensible with plugins and scripts.")
        (modify-phases %standard-phases
          (delete 'configure)))) ; no configure
     (home-page "http://tools.suckless.org/ii/")
-    (synopsis "FIFO and filesystem-based IRC client")
+    (synopsis "FIFO and file system based IRC client")
     (description
-     "ii (Irc it) is a minimalist FIFO and filesystem based IRC client.")
+     "ii (Irc it) is a minimalist FIFO and file system based IRC client.")
     (license license:expat)))
 
 (define-public sic
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 7387235c5b..36c10d0fd0 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -994,6 +994,33 @@ build process and its dependencies, whereas Make uses Makefile format.")
              (delete 'patch-paths)
              (delete 'set-additional-paths)
              (delete 'patch-patches)
+             (add-after 'unpack 'patch-jni-libs
+               ;; Hardcode dynamically loaded libraries.
+               (lambda _
+                 (let* ((library-path (search-path-as-string->list
+                                       (getenv "LIBRARY_PATH")))
+                        (find-library (lambda (name)
+                                        (search-path
+                                         library-path
+                                         (string-append "lib" name ".so")))))
+                   (for-each
+                    (lambda (file)
+                      (catch 'encoding-error
+                        (lambda ()
+                          (substitute* file
+                            (("VERSIONED_JNI_LIB_NAME\\(\"(.*)\", \"(.*)\"\\)"
+                              _ name version)
+                             (format #f "\"~a\""  (find-library name)))
+                            (("JNI_LIB_NAME\\(\"(.*)\"\\)" _ name)
+                             (format #f "\"~a\"" (find-library name)))))
+                        (lambda _
+                          ;; Those are safe to skip.
+                          (format (current-error-port)
+                                  "warning: failed to substitute: ~a~%"
+                                  file))))
+                    (find-files "openjdk.src/jdk/src/solaris/native"
+                                "\\.c|\\.h"))
+                   #t)))
              ;; FIXME: This phase is needed but fails with this version of
              ;; IcedTea.
              (delete 'install-keystore)
diff --git a/gnu/packages/ldc.scm b/gnu/packages/ldc.scm
index 1709f59f4c..560fa497fb 100644
--- a/gnu/packages/ldc.scm
+++ b/gnu/packages/ldc.scm
@@ -26,6 +26,7 @@
   #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages compression)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages textutils)
@@ -101,6 +102,14 @@ and freshness without requiring additional information from the user.")
                (and (unpack "phobos-src" "runtime/phobos")
                     (unpack "druntime-src" "runtime/druntime")
                     (unpack "dmd-testsuite-src" "tests/d2/dmd-testsuite")))))
+         (add-after 'unpack-submodule-sources 'patch-dmd2
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "dmd2/root/port.c"
+               ((" ::isnan") " isnan")
+               ((" ::isinf") " isinf")
+               (("#undef isnan") "")
+               (("#undef isinf") ""))
+             #t))
          (add-after 'unpack-submodule-sources 'patch-phobos
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "runtime/phobos/std/process.d"
@@ -115,10 +124,11 @@ and freshness without requiring additional information from the user.")
     (inputs
      `(("libconfig" ,libconfig)
        ("libedit" ,libedit)
-       ("tzdata" ,tzdata)))
+       ("tzdata" ,tzdata)
+       ("zlib" ,zlib)))
     (native-inputs
-     `(("llvm" ,llvm)
-       ("clang" ,clang)
+     `(("llvm" ,llvm-3.7)
+       ("clang" ,clang-3.7)
        ("unzip" ,unzip)
        ("phobos-src"
         ,(origin
diff --git a/gnu/packages/libftdi.scm b/gnu/packages/libftdi.scm
index 5c2671aac7..208e13546e 100644
--- a/gnu/packages/libftdi.scm
+++ b/gnu/packages/libftdi.scm
@@ -37,8 +37,8 @@
                (base32
                 "088yh8pxd6q53ssqndydcw1dkq51cjqyahc03lm6iip22cdazcf0"))))
     (build-system cmake-build-system)
-    (inputs
-     `(("libusb" ,libusb)))
+    (propagated-inputs
+     `(("libusb" ,libusb))) ; required by libftdi1.pc
     (home-page "http://www.intra2net.com/en/developer/libftdi/")
     (synopsis "FTDI USB driver with bitbang mode")
     (description
diff --git a/gnu/packages/libupnp.scm b/gnu/packages/libupnp.scm
index 520bf1c297..2f9a5741d7 100644
--- a/gnu/packages/libupnp.scm
+++ b/gnu/packages/libupnp.scm
@@ -25,7 +25,7 @@
 (define-public libupnp
   (package
     (name "libupnp")
-    (version "1.6.19")
+    (version "1.6.20")
     (source
      (origin
       (method url-fetch)
@@ -33,7 +33,7 @@
                           version "/" name "-" version ".tar.bz2"))
       (sha256
        (base32
-        "0amjv4lypvclmi4vim2qdyw5xa6v4x50zjgf682vahqjc0wjn55k"))))
+        "0qrsdsb1qm85hc4jy04qph895613d148f0x1mmk6z99y3q43fdgf"))))
     (build-system gnu-build-system)
     (arguments
      ;; The tests require a network device capable of multicasting which is
diff --git a/gnu/packages/lighting.scm b/gnu/packages/lighting.scm
new file mode 100644
index 0000000000..5101fba208
--- /dev/null
+++ b/gnu/packages/lighting.scm
@@ -0,0 +1,75 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 John J. Foerch <jjfoerch@earthlink.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 lighting)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages gnunet)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages libftdi)
+  #:use-module (gnu packages libusb)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages protobuf))
+
+(define-public ola
+  (package
+    (name "ola")
+    (version "0.10.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/OpenLightingProject/ola/releases/download/"
+                    version "/ola-" version ".tar.gz"))
+              (sha256
+               (base32
+                "09zx1c8nkj29shfdzkahrh9397m3mwnsy0gj7jrb63f89f3n2vlq"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("cppunit" ,cppunit)
+       ("flex" ,flex)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libftdi" ,libftdi)
+       ("libmicrohttpd" ,libmicrohttpd)
+       ("libusb" ,libusb)
+       ("libuuid" ,util-linux)
+       ("zlib" ,zlib)))
+    (propagated-inputs
+     `(("protobuf" ,protobuf))) ;; for pkg-config --libs libola
+    (arguments
+     `(;; G++ >= 4.8 macro expansion tracking requires lots of memory, causing
+       ;; build to fail on low memory systems.  We disable that with the
+       ;; following configure flags.
+       #:configure-flags (list "CXXFLAGS=-ftrack-macro-expansion=0")))
+    (synopsis "Framework for controlling entertainment lighting equipment")
+    (description "The Open Lighting Architecture is a framework for lighting
+control information.  It supports a range of protocols and over a dozen USB
+devices.  It can run as a standalone service, which is useful for converting
+signals between protocols, or alternatively using the OLA API, it can be used
+as the backend for lighting control software.  OLA runs on many different
+platforms including ARM, which makes it a perfect fit for low cost Ethernet to
+DMX gateways.")
+    (home-page "https://www.openlighting.org/ola")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/links.scm b/gnu/packages/links.scm
index 41fac8c305..2f0c12a786 100644
--- a/gnu/packages/links.scm
+++ b/gnu/packages/links.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
-;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,32 +33,32 @@
 (define-public links
   (package
     (name "links")
-    (version "2.12")
+    (version "2.13")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://links.twibright.com/download/"
                                   name "-" version ".tar.bz2"))
               (sha256
-               (base32 "0knq15yrp60s4jh92aacw8yfc2pcv3bqsw7dba7h5s6ivq8ihhcq"))))
+               (base32 "01a4mbpvf7450ymqarjkpmzrm0z2zyd9lvqwg7x9kcd36i9hjln2"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases (alist-replace
-                 'configure
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   ;; The tarball uses a very old version of autconf. It doesn't
-                   ;; understand extra flags like `--enable-fast-install', so
-                   ;; we need to invoke it with just what it understands.
-                   (let ((out (assoc-ref outputs "out")))
-                     ;; 'configure' doesn't understand '--host'.
-                     ,@(if (%current-target-system)
-                           `((setenv "CHOST" ,(%current-target-system)))
-                           '())
-                     (setenv "CONFIG_SHELL" (which "bash"))
-                     (zero?
-                      (system* "./configure"
-                               (string-append "--prefix=" out)
-                               "--enable-graphics"))))
-                 %standard-phases)))
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; The tarball uses a very old version of autconf. It doesn't
+             ;; understand extra flags like `--enable-fast-install', so
+             ;; we need to invoke it with just what it understands.
+             (let ((out (assoc-ref outputs "out")))
+               ;; 'configure' doesn't understand '--host'.
+               ,@(if (%current-target-system)
+                     `((setenv "CHOST" ,(%current-target-system)))
+                     '())
+               (setenv "CONFIG_SHELL" (which "bash"))
+               (zero?
+                (system* "./configure"
+                         (string-append "--prefix=" out)
+                         "--enable-graphics"))))))))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("zlib" ,zlib)
               ("openssl" ,openssl)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index fc7d64e2c2..64e8bfbf06 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -85,7 +85,7 @@
 
 (define-public (system->linux-architecture arch)
   "Return the Linux architecture name for ARCH, a Guix system name such as
-\"x86_64-linux\"."
+\"x86_64-linux\" or a target triplet such as \"arm-linux-gnueabihf\"."
   (let ((arch (car (string-split arch #\-))))
     (cond ((string=? arch "i686") "i386")
           ((string-prefix? "mips" arch) "mips")
@@ -166,62 +166,6 @@
     (description "Headers of the Linux-Libre kernel.")
     (license license:gpl2)))
 
-(define-public module-init-tools
-  (package
-    (name "module-init-tools")
-    (version "3.16")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "mirror://kernel.org/linux/utils/kernel/module-init-tools/module-init-tools-"
-                   version ".tar.bz2"))
-             (sha256
-              (base32
-               "0jxnz9ahfic79rp93l5wxcbgh4pkv85mwnjlbv1gz3jawv5cvwp1"))
-             (patches (search-patches "module-init-tools-moduledir.patch"))))
-    (build-system gnu-build-system)
-    (arguments
-     ;; FIXME: The upstream tarball lacks man pages, and building them would
-     ;; require DocBook & co.  We used to use Gentoo's pre-built man pages,
-     ;; but they vanished.  In the meantime, fake it.
-     '(#:phases (alist-cons-before
-                 'configure 'fake-docbook
-                 (lambda _
-                   (substitute* "Makefile.in"
-                     (("^DOCBOOKTOMAN.*$")
-                      "DOCBOOKTOMAN = true\n")))
-                 %standard-phases)))
-    (home-page "http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/")
-    (synopsis "Tools for loading and managing Linux kernel modules")
-    (description
-     "Tools for loading and managing Linux kernel modules, such as `modprobe',
-`insmod', `lsmod', and more.")
-    (license license:gpl2+)))
-
-(define-public libnfsidmap
-  (package
-    (name "libnfsidmap")
-    (version "0.25")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append
-                   "http://www.citi.umich.edu/projects/nfsv4/linux/"
-                   name "/" name "-" version ".tar.gz"))
-             (sha256
-              (base32
-               "1kzgwxzh83qi97rblcm9qj80cdvnv8kml2plz0q103j0hifj8vb5"))))
-    (build-system gnu-build-system)
-    (home-page
-     "http://www.citi.umich.edu/projects/nfsv4/crossrealm/libnfsidmap_config.html")
-    (synopsis
-     "NFSv4 support library for name/ID mapping")
-    (description "Libnfsidmap is a library holding mulitiple methods of
-mapping names to ids and visa versa, mainly for NFSv4.  It provides an
-extensible array of mapping functions, currently consisting of two choices:
-the default @code{nsswitch} and the experimental @code{umich_ldap}.")
-    (license (license:non-copyleft "file://COPYING"
-                                   "See COPYING in the distribution."))))
-
 (define %boot-logo-patch
   ;; Linux-Libre boot logo featuring Freedo and a gnu.
   (origin
@@ -232,171 +176,178 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
      (base32
       "1hk9swxxc80bmn2zd2qr5ccrjrk28xkypwhl4z0qx4hbivj7qm06"))))
 
-(define* (kernel-config system #:key variant)
+(define* (kernel-config arch #:key variant)
   "Return the absolute file name of the Linux-Libre build configuration file
-for SYSTEM and optionally VARIANT, or #f if there is no such configuration."
-  (and-let* ((arch (match system
-                     ("i686-linux"
-                      "i686")
-                     ("x86_64-linux"
-                      "x86_64")
-                     (_
-                      #f)))
-             (name (string-append "linux-libre-"
-                                  (if variant
-                                      (string-append variant "-")
-                                      "")
-                                  arch
-                                  ".conf"))
-             (file (string-append "gnu/packages/" name)))
+for ARCH and optionally VARIANT, or #f if there is no such configuration."
+  (let* ((name (string-append "linux-libre-"
+                              (if variant (string-append variant "-") "")
+                              (if (string=? "i386" arch) "i686" arch) ".conf"))
+         (file (string-append "gnu/packages/" name)))
     (search-path %load-path file)))
 
-(define-public linux-libre
-  (let* ((version "4.7.2")
-         (build-phase
-          '(lambda* (#:key system inputs #:allow-other-keys #:rest args)
+(define %default-extra-linux-options
+  `(;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
+    ("CONFIG_DEVPTS_MULTIPLE_INSTANCES" . #t)
+    ;; Modules required for initrd:
+    ("CONFIG_NET_9P" . m)
+    ("CONFIG_NET_9P_VIRTIO" . m)
+    ("CONFIG_VIRTIO_BLK" . m)
+    ("CONFIG_VIRTIO_NET" . m)
+    ("CONFIG_VIRTIO_PCI" . m)
+    ("CONFIG_VIRTIO_BALLOON" . m)
+    ("CONFIG_VIRTIO_MMIO" . m)
+    ("CONFIG_FUSE_FS" . m)
+    ("CONFIG_CIFS" . m)
+    ("CONFIG_9P_FS" . m)))
+
+(define (config->string options)
+  (string-join (map (match-lambda
+                      ((option . 'm)
+                       (string-append option "=m"))
+                      ((option . #t)
+                       (string-append option "=y"))
+                      ((option . #f)
+                       (string-append option "=n")))
+                    options)
+               "\n"))
+
+(define* (make-linux-libre version hash supported-systems
+                           #:key
+                           ;; A function that takes an arch and a variant.
+                           ;; See kernel-config for an example.
+                           (extra-version #f)
+                           (configuration-file #f)
+                           (defconfig "defconfig")
+                           (extra-options %default-extra-linux-options))
+  (package
+    (name (if extra-version
+              (string-append "linux-libre-" extra-version)
+              "linux-libre"))
+    (version version)
+    (source (origin
+              (method url-fetch)
+              (uri (linux-libre-urls version))
+              (sha256 (base32 hash))
+              (patches (list %boot-logo-patch))))
+    (supported-systems supported-systems)
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("perl" ,perl)
+       ("bc" ,bc)
+       ("openssl" ,openssl)
+       ("kmod" ,kmod)
+       ,@(if configuration-file
+             `(("kconfig" ,(configuration-file
+                            (system->linux-architecture
+                             (or (%current-target-system)
+                                 (%current-system)))
+                            #:variant (version-major+minor version))))
+             '())))
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1)
+                  (ice-9 match))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs native-inputs target #:allow-other-keys)
              ;; Avoid introducing timestamps
              (setenv "KCONFIG_NOTIMESTAMP" "1")
              (setenv "KBUILD_BUILD_TIMESTAMP" (getenv "SOURCE_DATE_EPOCH"))
 
-             ;; Apply the neat patch.
-             (system* "patch" "-p1" "--force"
-                      "-i" (assoc-ref inputs "patch/freedo+gnu"))
+             ;; Set ARCH and CROSS_COMPILE
+             (let ((arch ,(system->linux-architecture
+                           (or (%current-target-system)
+                               (%current-system)))))
+               (setenv "ARCH" arch)
+               (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
+
+               (when target
+                 (setenv "CROSS_COMPILE" (string-append target "-"))
+                 (format #t "`CROSS_COMPILE' set to `~a'~%"
+                         (getenv "CROSS_COMPILE"))))
 
-             (let ((arch (car (string-split system #\-))))
-               (setenv "ARCH"
-                       (cond ((string=? arch "i686") "i386")
-                             ((string=? arch "mips64el") "mips")
-                             (else arch)))
-               (format #t "`ARCH' set to `~a'~%" (getenv "ARCH")))
+             (setenv "EXTRA_VERSION" ,extra-version)
 
              (let ((build  (assoc-ref %standard-phases 'build))
                    (config (assoc-ref inputs "kconfig")))
 
-               ;; Use the architecture-specific config if available, and
-               ;; 'defconfig' otherwise.
+               ;; Use a custom kernel configuration file or a default
+               ;; configuration file.
                (if config
                    (begin
                      (copy-file config ".config")
                      (chmod ".config" #o666))
-                   (system* "make" "defconfig"))
+                   (system* "make" ,defconfig))
 
                ;; Appending works even when the option wasn't in the
                ;; file.  The last one prevails if duplicated.
-               (let ((port (open-file ".config" "a")))
-                 (display (string-append "CONFIG_NET_9P=m\n"
-                                         "CONFIG_NET_9P_VIRTIO=m\n"
-                                         "CONFIG_VIRTIO_BLK=m\n"
-                                         "CONFIG_VIRTIO_NET=m\n"
-                                         ;; https://lists.gnu.org/archive/html/guix-devel/2014-04/msg00039.html
-                                         "CONFIG_DEVPTS_MULTIPLE_INSTANCES=y\n"
-                                         "CONFIG_VIRTIO_PCI=m\n"
-                                         "CONFIG_VIRTIO_BALLOON=m\n"
-                                         "CONFIG_VIRTIO_MMIO=m\n"
-                                         "CONFIG_FUSE_FS=m\n"
-                                         "CONFIG_CIFS=m\n"
-                                         "CONFIG_9P_FS=m\n")
-                          port)
+               (let ((port (open-file ".config" "a"))
+                     (extra-configuration ,(config->string extra-options)))
+                 (display extra-configuration port)
                  (close-port port))
 
-               (zero? (system* "make" "oldconfig"))
-
-               ;; Call the default `build' phase so `-j' is correctly
-               ;; passed.
-               (apply build #:make-flags "all" args))))
-         (install-phase
-          `(lambda* (#:key inputs outputs #:allow-other-keys)
+               (zero? (system* "make" "oldconfig")))))
+         (replace 'install
+           (lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
              (let* ((out    (assoc-ref outputs "out"))
                     (moddir (string-append out "/lib/modules"))
-                    (mit    (assoc-ref inputs "module-init-tools")))
+                    (dtbdir (string-append out "/lib/dtbs"))
+                    (kmod   (assoc-ref (or native-inputs inputs) "kmod")))
+               ;; Install kernel image, kernel configuration and link map.
+               (for-each (lambda (file) (install-file file out))
+                         (find-files "." "^(\\.config|bzImage|zImage|vmlinuz|System\\.map)$"))
+               ;; Install device tree files
+               (for-each (lambda (file) (install-file file dtbdir))
+                         (find-files "." "\\.dtb$"))
+               ;; Install kernel modules
                (mkdir-p moddir)
-               (for-each (lambda (file)
-                           (copy-file file
-                                      (string-append out "/" (basename file))))
-                         (find-files "." "^(bzImage|vmlinuz|System\\.map)$"))
-               (copy-file ".config" (string-append out "/config"))
                (zero? (system* "make"
-                               (string-append "DEPMOD=" mit "/sbin/depmod")
+                               (string-append "DEPMOD=" kmod "/bin/depmod")
                                (string-append "MODULE_DIR=" moddir)
                                (string-append "INSTALL_PATH=" out)
                                (string-append "INSTALL_MOD_PATH=" out)
                                "INSTALL_MOD_STRIP=1"
                                "modules_install"))))))
-   (package
-    (name "linux-libre")
-    (version version)
-    (source (origin
-             (method url-fetch)
-             (uri (linux-libre-urls version))
-             (sha256
-              (base32
-               "1rp09y2hv0hvdybm2n2im9717kzxmklpgzs8k1bmdfzqxyg8cb85"))))
-    (build-system gnu-build-system)
-    (supported-systems '("x86_64-linux" "i686-linux"))
-    (native-inputs `(("perl" ,perl)
-                     ("bc" ,bc)
-                     ("openssl" ,openssl)
-                     ("module-init-tools" ,module-init-tools)
-                     ("patch/freedo+gnu" ,%boot-logo-patch)
-
-                     ,@(let ((conf (kernel-config
-                                    (or (%current-target-system)
-                                        (%current-system))
-                                    #:variant (version-major+minor version))))
-                         (if conf
-                             `(("kconfig" ,conf))
-                             '()))))
-    (arguments
-     `(#:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1)
-                  (ice-9 match))
-       #:phases (alist-replace
-                 'build ,build-phase
-                 (alist-replace
-                  'install ,install-phase
-                  (alist-delete 'configure %standard-phases)))
        #:tests? #f))
+    (home-page "http://www.gnu.org/software/linux-libre/")
     (synopsis "100% free redistribution of a cleaned Linux kernel")
     (description
      "GNU Linux-Libre is a free (as in freedom) variant of the Linux kernel.
 It has been modified to remove all non-free binary blobs.")
-    (license license:gpl2)
-    (home-page "http://www.gnu.org/software/linux-libre/"))))
+    (license license:gpl2)))
+
+(define %intel-compatible-systems '("x86_64-linux" "i686-linux"))
+
+(define-public linux-libre
+  (make-linux-libre "4.7.5"
+                    "1v5xzagc7zmf0dszq623h83rzhn2qwcapg2fwlihrrb6h9317xqx"
+                    %intel-compatible-systems
+                    #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (package
-    (inherit linux-libre)
-    (version "4.4.19")
-    (source (origin
-              (method url-fetch)
-              (uri (linux-libre-urls version))
-              (sha256
-               (base32
-                "0nddjs7prmb0g7g3w2k4qfyq02a9szm5nvsgflxcaarbq1slibb5"))))
-    (native-inputs
-     (let ((conf (kernel-config (or (%current-target-system)
-                                    (%current-system))
-                                #:variant "4.4")))
-       `(,@(alist-delete "kconfig" (package-native-inputs linux-libre))
-         ("kconfig" ,conf))))))
+  (make-linux-libre "4.4.22"
+                    "0pwqp5hain26p3wmiqgq3qasyp4j7nl2ai49sq2n8xdi3g2vnmii"
+                    %intel-compatible-systems
+                    #:configuration-file kernel-config))
 
 (define-public linux-libre-4.1
-  (package
-    (inherit linux-libre)
-    (version "4.1.31")
-    (source (origin
-              (method url-fetch)
-              (uri (linux-libre-urls version))
-              (sha256
-               (base32
-                "0grffah921k136w1qwcswxv6m810s8q54nr2rk7kyqka3a1b81yw"))))
-    (native-inputs
-     (let ((conf (kernel-config (or (%current-target-system)
-                                    (%current-system))
-                                #:variant "4.1")))
-       `(,@(alist-delete "kconfig" (package-native-inputs linux-libre))
-         ("kconfig" ,conf))))))
+  (make-linux-libre "4.1.33"
+                    "1s45vymx7zp7qwj4rx63dpj9xwm8hv5fd9nm27wqvmgnmd3q548h"
+                    %intel-compatible-systems
+                    #:configuration-file kernel-config))
+
+;; Avoid rebuilding kernel variants when there is a minor version bump.
+(define %linux-libre-version "4.7.5")
+(define %linux-libre-hash "1v5xzagc7zmf0dszq623h83rzhn2qwcapg2fwlihrrb6h9317xqx")
+
+(define-public linux-libre-arm-generic
+  (make-linux-libre %linux-libre-version
+                    %linux-libre-hash
+                    '("armhf-linux")
+                    #:defconfig "multi_v7_defconfig"
+                    #:extra-version "arm-generic"))
 
 
 ;;;
@@ -481,10 +432,10 @@ at login.  Local and dynamic reconfiguration are its key features.")
     (inputs `(("ncurses" ,ncurses)))
     (home-page "http://psmisc.sourceforge.net/")
     (synopsis
-     "Small utilities that use the proc filesystem")
+     "Small utilities that use the proc file system")
     (description
      "This PSmisc package is a set of some small useful utilities that
-use the proc filesystem.  We're not about changing the world, but
+use the proc file system.  We're not about changing the world, but
 providing the system administrator with some help in common tasks.")
     (license license:gpl2+)))
 
@@ -562,7 +513,7 @@ providing the system administrator with some help in common tasks.")
     (home-page "https://www.kernel.org/pub/linux/utils/util-linux/")
     (synopsis "Collection of utilities for the Linux kernel")
     (description "Util-linux is a diverse collection of Linux kernel
-utilities.  It provides dmesg and includes tools for working with filesystems,
+utilities.  It provides dmesg and includes tools for working with file systems,
 block devices, UUIDs, TTYs, and many other tools.")
 
     ;; Note that util-linux doesn't use the same license for all the
@@ -711,7 +662,7 @@ slabtop, and skill.")
 
        ;; FIXME: Tests work by comparing the stdout/stderr of programs, that
        ;; they fail because we get an extra line that says "Can't check if
-       ;; filesystem is mounted due to missing mtab file".
+       ;; file system is mounted due to missing mtab file".
        #:tests? #f))
     (home-page "http://e2fsprogs.sourceforge.net/")
     (synopsis "Creating and checking ext2/ext3/ext4 file systems")
@@ -1923,20 +1874,16 @@ country-specific regulations for the wireless spectrum.")
 (define-public lm-sensors
   (package
     (name "lm-sensors")
-    (version "3.3.5")
+    (version "3.4.0")
     (source (origin
               (method url-fetch)
               (uri (list (string-append
-                           "ftp://ftp.netroedge.com/pub/lm-sensors/"
-                           "lm_sensors-" version ".tar.bz2")
-                         (string-append
-                           "http://pkgs.fedoraproject.org/repo/pkgs/"
-                           "lm_sensors/lm_sensors-3.3.5.tar.bz2/"
-                           "da506dedceb41822e64865f6ba34828a/"
-                           "lm_sensors-3.3.5.tar.bz2")))
+                           "https://github.com/groeck/lm-sensors/archive/V"
+                           (string-join (string-split version #\.) "-")
+                           ".tar.gz")))
               (sha256
                (base32
-                "1ksgrynxgrq590nb2fwxrl1gwzisjkqlyg3ljfd1al0ibrk6mbjx"))
+                "0knb09s9lvx0wzfsaizx3xq58q6kllqf7nkbwvir0wkgn31c2d73"))
               (patches (search-patches "lm-sensors-hwmon-attrs.patch"))))
     (build-system gnu-build-system)
     (inputs `(("rrdtool" ,rrdtool)
@@ -2253,7 +2200,7 @@ specified in /etc/acpi/events and execute the rules that match the event.")
     (home-page "http://linux-diag.sourceforge.net/Sysfsutils.html")
     (synopsis "System utilities based on Linux sysfs")
     (description
-     "These are a set of utilities built upon sysfs, a virtual filesystem in
+     "These are a set of utilities built upon sysfs, a virtual file system in
 Linux kernel versions 2.5+ that exposes a system's device tree.  The package
 also contains the libsysfs library.")
     ;; The library is under lgpl2.1+ (all files say "or any later version").
@@ -2648,7 +2595,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "4.7.1")
+    (version "4.7.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -2656,7 +2603,7 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "15jsa12ijc6z49v1csc62x9zidrgcf307lwy1rbffdwk3gsrczww"))))
+                "073pvx8vz6rkw2d8mm1m60b3i8743pc712pasvydbgm8wl66zkch"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of binaries in "out" (~16MiB!)
@@ -2691,7 +2638,7 @@ and copy/paste text in the console and in xterm.")
                      ("which" ,which)))
     (home-page "https://btrfs.wiki.kernel.org/")
     (synopsis "Create and manage btrfs copy-on-write file systems")
-    (description "Btrfs is a copy-on-write (CoW) filesystem for Linux aimed at
+    (description "Btrfs is a copy-on-write (CoW) file system for Linux aimed at
 implementing advanced features while focusing on fault tolerance, repair and
 easy administration.")
     ;; GPL2+: crc32.c, radix-tree.c, raid6.c, rbtree.c.
@@ -2946,3 +2893,102 @@ native Linux file system, and has been part of the Linux kernel since version
     ;; The files src/key_mod/ecryptfs_key_mod_{openssl,pkcs11_helper,tspi}.c
     ;; grant additional permission to link with OpenSSL.
     (license license:gpl2+)))
+
+(define-public libnfsidmap
+  (package
+    (name "libnfsidmap")
+    (version "0.25")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "http://www.citi.umich.edu/projects/nfsv4/linux/"
+                   name "/" name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "1kzgwxzh83qi97rblcm9qj80cdvnv8kml2plz0q103j0hifj8vb5"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list
+                          (string-append "--with-pluginpath="
+                                         (assoc-ref %outputs "out")
+                                         "/lib/libnfsidmap"))))
+    (home-page
+     "http://www.citi.umich.edu/projects/nfsv4/crossrealm/libnfsidmap_config.html")
+    (synopsis
+     "NFSv4 support library for name/ID mapping")
+    (description "Libnfsidmap is a library holding mulitiple methods of
+mapping names to ids and visa versa, mainly for NFSv4.  It provides an
+extensible array of mapping functions, currently consisting of two choices:
+the default @code{nsswitch} and the experimental @code{umich_ldap}.")
+    (license (license:non-copyleft "file://COPYING"
+                                   "See COPYING in the distribution."))))
+
+(define-public module-init-tools
+  (package
+    (name "module-init-tools")
+    (version "3.16")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "mirror://kernel.org/linux/utils/kernel/module-init-tools/"
+                   "module-init-tools-" version ".tar.bz2"))
+             (sha256
+              (base32
+               "0jxnz9ahfic79rp93l5wxcbgh4pkv85mwnjlbv1gz3jawv5cvwp1"))
+             (patches (search-patches "module-init-tools-moduledir.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     ;; FIXME: The upstream tarball lacks man pages, and building them would
+     ;; require DocBook & co.  We used to use Gentoo's pre-built man pages,
+     ;; but they vanished.  In the meantime, fake it.
+     '(#:phases (alist-cons-before
+                 'configure 'fake-docbook
+                 (lambda _
+                   (substitute* "Makefile.in"
+                     (("^DOCBOOKTOMAN.*$")
+                      "DOCBOOKTOMAN = true\n")))
+                 %standard-phases)))
+    (home-page "http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/")
+    (synopsis "Tools for loading and managing Linux kernel modules")
+    (description
+     "Tools for loading and managing Linux kernel modules, such as `modprobe',
+`insmod', `lsmod', and more.")
+    (license license:gpl2+)))
+
+(define-public mcelog
+  (package
+    (name "mcelog")
+    (version "141")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://git.kernel.org/cgit/utils/cpu/mce/"
+                                  "mcelog.git/snapshot/v" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ws8blq0prj7slcaljyaxxq20kgmlakzac0ri1pvh24xs1jn2xxg"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; The snapshots lack a .git directory, breaking ‘git describe’.
+               `(substitute* "Makefile"
+                  (("\"unknown\"") (string-append "\"v" ,version "\""))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (delete 'configure))  ; no configure script
+       #:make-flags (let ((out (assoc-ref %outputs "out")))
+                      (list "CC=gcc"
+                            (string-append "prefix=" out)
+                            (string-append "DOCDIR=" out "/share/doc/mcelog")
+                            "etcprefix=$(DOCDIR)/examples"))
+       ;; The tests will only run as root on certain supported CPU models.
+       #:tests? #f))
+    (supported-systems (list "i686-linux" "x86_64-linux"))
+    (home-page "http://mcelog.org/")
+    (synopsis "Machine check monitor for x86 Linux systems")
+    (description
+     "The mcelog daemon is required by the Linux kernel to log memory, I/O, CPU,
+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)))
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 8ee249d397..439433a22b 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
-;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -44,7 +44,8 @@
   #:use-module (gnu packages ed)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages version-control)
-  #:use-module (ice-9 match))
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1))
 
 (define-public gcl
   (package
@@ -453,7 +454,7 @@ interface.")
                 (uri (git-reference
                       (url "https://github.com/blakemcbride/LISPF4.git")
                       (commit commit)))
-                (file-name (string-append name "-" version))
+                (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
                   "18k8kfn30za637y4bfbm9x3vv4psa3q8f7bi9h4h0qlb8rz8m92c"))))
@@ -463,14 +464,12 @@ interface.")
       (arguments
        `(#:make-flags
          '("-f" "Makefile.unx" "CC=gcc")
-         ;; no check phase
-         #:tests? #f
+         #:tests? #f ; No 'check phase
          #:phases
          (modify-phases %standard-phases
            (delete 'configure)
-           (replace
-            'install
-            (lambda* (#:key outputs inputs #:allow-other-keys)
+           (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
                      (bin (string-append out "/bin"))
                      (doc (string-append (assoc-ref outputs "doc")
@@ -487,3 +486,53 @@ in the early 80's.  It was converted to C by Blake McBride and supports much of
 the InterLisp Standard.")
       (home-page "https://github.com/blakemcbride/LISPF4.git")
       (license license:expat))))
+
+(define-public femtolisp
+  (let ((commit "68c5b1225572ecf2c52baf62f928063e5a30511b")
+        (revision "1"))
+    (package
+      (name "femtolisp")
+      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/JeffBezanson/femtolisp.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "04rnwllxnl86zw8c6pwxznn49bvkvh0f1lfliy085vjzvlq3rgja"))))
+      ;; See "utils.h" for supported systems. Upstream bug:
+      ;; https://github.com/JeffBezanson/femtolisp/issues/25
+      (supported-systems
+       (fold delete %supported-systems
+             '("armhf-linux" "mips64el-linux")))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:make-flags '("CC=gcc" "release")
+         #:test-target "test"
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure) ; No configure script
+           (replace 'install ; Makefile has no 'install phase
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (bin (string-append out "/bin")))
+                (install-file "flisp" bin)
+                #t)))
+           ;; The flisp binary is now available, run bootstrap to
+           ;; generate flisp.boot and afterwards runs make test.
+           (add-after 'install 'bootstrap-gen-and-test
+             (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out"))
+                     (bin (string-append out "/bin")))
+                (and
+                 (zero? (system* "./bootstrap.sh"))
+                 (install-file "flisp.boot" bin))))))))
+      (synopsis "Scheme-like lisp implementation")
+      (description
+       "@code{femtolisp} is a scheme-like lisp implementation with a
+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))))
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index c380eba122..1a1f7eef6c 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
+;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,15 +53,27 @@
      `(("python" ,python-2) ;bytes->str conversion in clang>=3.7 needs python-2
        ("perl"   ,perl)))
     (inputs
-     `(("libffi" ,libffi)
-       ("zlib" ,zlib)))
+     `(("libffi" ,libffi)))
+    (propagated-inputs
+     `(("zlib" ,zlib)))                 ;to use output from llvm-config
     (arguments
      `(#:configure-flags '("-DCMAKE_SKIP_BUILD_RPATH=FALSE"
                            "-DCMAKE_BUILD_WITH_INSTALL_RPATH=FALSE"
+                           "-DBUILD_SHARED_LIBS:BOOL=TRUE"
                            "-DLLVM_ENABLE_FFI:BOOL=TRUE")
 
        ;; Don't use '-g' during the build, to save space.
-       #:build-type "Release"))
+       #:build-type "Release"
+       #:phases (modify-phases %standard-phases
+                  (add-before 'build 'shared-lib-workaround
+                    ;; Even with CMAKE_SKIP_BUILD_RPATH=FALSE, llvm-tblgen
+                    ;; doesn't seem to get the correct rpath to be able to run
+                    ;; from the build directory.  Set LD_LIBRARY_PATH as a
+                    ;; workaround.
+                    (lambda _
+                      (setenv "LD_LIBRARY_PATH"
+                              (string-append (getcwd) "/lib"))
+                      #t)))))
     (home-page "http://www.llvm.org")
     (synopsis "Optimizing compiler infrastructure")
     (description
@@ -255,3 +268,12 @@ code analysis tools.")
 (define-public clang-3.5
   (clang-from-llvm llvm-3.5 clang-runtime-3.5
                    "0846h8vn3zlc00jkmvrmy88gc6ql6014c02l4jv78fpvfigmgssg"))
+
+(define-public llvm-for-extempore
+  (package (inherit llvm-3.7)
+    (source
+     (origin
+       (inherit (package-source llvm-3.7))
+       (patches (list (search-patch "llvm-for-extempore.patch")))))
+    ;; Extempore refuses to build on architectures other than x86_64
+    (supported-systems '("x86_64-linux"))))
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 8bd67c594d..8fdba61e92 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,7 +30,12 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages gtk))
 
 (define-public lua
   (package
@@ -51,7 +57,7 @@
                   (srfi srfi-1))
        #:test-target "test"
        #:make-flags
-       '("CFLAGS=-fPIC -DLUA_DL_DLOPEN -DLUA_USE_POSIX"
+       '("MYCFLAGS=-fPIC -DLUA_DL_DLOPEN"
          "linux")
        #:phases
        (modify-phases %standard-phases
@@ -84,7 +90,8 @@ for configuration, scripting, and rapid prototyping.")
              (sha256
               (base32 "0cskd4w0g6rdm2q8q3i4n1h3j8kylhs3rq8mxwl9vwlmlxbgqh16"))
              (patches (search-patches "lua51-liblua-so.patch"
-                                      "lua-CVE-2014-5461.patch"))))))
+                                      "lua-CVE-2014-5461.patch"
+                                      "lua51-pkgconfig.patch"))))))
 
 (define-public luajit
   (package
@@ -259,3 +266,76 @@ directory structure and file attributes.")
 communication.  It takes an already established TCP connection and creates a
 secure session between the peers.")
     (license (package-license lua-5.1))))
+
+(define-public lua-lgi
+  (package
+    (name "lua-lgi")
+    (version "0.9.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+              "https://github.com/pavouk/lgi/archive/"
+              version ".tar.gz"))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+          (base32
+            "1fmgdl5y4ph3yc6ycg865s3vai1rjkyda61cgqxk6zd13hmznw0c"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags (list "CC=gcc"
+                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure) ; no configure script
+         (add-before 'build 'set-env
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; we need to load cairo dynamically
+             (let* ((cairo (string-append
+                             (assoc-ref inputs "cairo") "/lib" )))
+               (setenv "LD_LIBRARY_PATH" cairo)
+               #t)))
+         (add-before 'build 'set-lua-version
+           (lambda _
+             ;; lua version and therefore install directories are hardcoded
+             ;; FIXME: This breaks when we update lua to >=5.3
+             (substitute* "./lgi/Makefile"
+               (("LUA_VERSION=5.1") "LUA_VERSION=5.2"))
+             #t))
+         (add-before 'check 'skip-test-gtk
+           (lambda _
+             ;; FIXME: Skip GTK tests:
+             ;;   gtk3 - can't get it to run with the xorg-server config below
+             ;;          and some non-gtk tests will also fail
+             ;;   gtk2 - lots of functions aren't implemented
+             ;; We choose gtk2 as the lesser evil and simply skip the test.
+             ;; Currently, awesome is the only package that uses lua-lgi but
+             ;; it doesn't need or interact with GTK using lua-lgi.
+             (substitute* "./tests/test.lua"
+               (("'gtk.lua',") "-- 'gtk.lua',"))
+             #t))
+         (add-before 'check 'start-xserver-instance
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; There must be a running X server during tests.
+             (system (format #f "~a/bin/Xvfb :1 &"
+                             (assoc-ref inputs "xorg-server")))
+             (setenv "DISPLAY" ":1")
+             #t)))))
+    (inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("glib" ,glib)
+       ("pango", pango)
+       ("gtk", gtk+-2)
+       ("lua" ,lua)
+       ("cairo" ,cairo)
+       ("libffi" ,libffi)
+       ("xorg-server", xorg-server)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/pavouk/lgi/")
+    (synopsis "Lua bridge to GObject based libraries")
+    (description
+     "LGI is gobject-introspection based dynamic Lua binding to GObject
+based libraries.  It allows using GObject-based libraries directly from Lua.
+Notable examples are GTK+, GStreamer and Webkit.")
+    (license license:expat)))
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 4332045d63..7fd0a26d0d 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -28,7 +28,6 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system r)
   #:use-module (gnu packages)
-  #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
@@ -268,6 +267,9 @@ networks) based on simulation of (stochastic) flow in graphs.")
     (native-inputs
      `(("gfortran" ,gfortran)
        ("gfortran:lib" ,gfortran "lib")))
+    ;; Non-portable assembly instructions are used so building fails on
+    ;; platforms other than x86_64 or i686.
+    (supported-systems '("x86_64-linux" "i686-linux"))
     (home-page "http://www.imbs-luebeck.de/imbs/de/node/227/")
     (synopsis "Implementation of the Random Forests machine learning method")
     (description
@@ -500,14 +502,36 @@ single hidden layer, and for multinomial log-linear models.")
              (substitute* "dlib/config.h"
                (("^//#define DLIB_DISABLE_ASSERTS") "#define DLIB_DISABLE_ASSERTS"))
              #t))
+         (add-after 'disable-asserts 'disable-failing-tests
+           (lambda _
+             ;; One test times out on MIPS, so we need to disable it.
+             ;; The rest is known to fail on non-x86_64 platforms in the current release.
+             ;; Some have been fixed in git; this list should be readjusted next update.
+             (let* ((system ,(or (%current-target-system)
+                                 (%current-system)))
+                    (disabled-tests (cond
+                                     ((string-prefix? "mips64" system)
+                                      '("object_detector" ; timeout
+                                        "data_io"))
+                                     ((string-prefix? "armhf" system)
+                                      '("learning_to_track" "max_cost_assignment"))
+                                     ((string-prefix? "i686" system)
+                                      '("optimization" "matrix2" "mpc"))
+                                     (else '()))))
+               ;; The following test fails due a bug in openblas < 0.2.18.
+               (append! disabled-tests '("empirical_map"))
+               (for-each
+                (lambda (test)
+                  (substitute* "dlib/test/makefile"
+                    (((string-append "SRC \\+= " test "\\.cpp")) "")) #t)
+                disabled-tests))))
          (replace 'check
            (lambda _
              ;; No test target, so we build and run the unit tests here.
-             (let ((test-dir (string-append "../dlib-" ,version "/dlib/test/build")))
-               (mkdir-p test-dir)
+             (let ((test-dir (string-append "../dlib-" ,version "/dlib/test")))
                (with-directory-excursion test-dir
-                 (and (zero? (system* "cmake" ".."))
-                      (zero? (system* "cmake" "--build" "." "--config" "Release"))
+                 (setenv "CXXFLAGS" "-std=gnu++11")
+                 (and (zero? (system* "make" "-j" (number->string (parallel-job-count))))
                       (zero? (system* "./dtest" "--runall")))))))
          (add-after 'install 'delete-static-library
            (lambda* (#:key outputs #:allow-other-keys)
@@ -515,9 +539,8 @@ single hidden layer, and for multinomial log-linear models.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("fftw" ,fftw)
-       ("giflib" ,giflib)
-       ;("lapack" ,lapack) XXX lapack here causes test failures in some setups.
+     `(("giflib" ,giflib)
+       ("lapack" ,lapack)
        ("libjpeg" ,libjpeg)
        ("libpng" ,libpng)
        ("libx11" ,libx11)
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index c07bc529d0..09c15e267f 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -16,6 +16,9 @@
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -77,14 +80,16 @@
   #:use-module (gnu packages xorg)
   #:use-module ((guix licenses)
                 #:select (gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
-                           non-copyleft (expat . license:expat) bsd-3))
+                           non-copyleft (expat . license:expat) bsd-3
+                           public-domain))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
-  #:use-module (guix build-system python))
+  #:use-module (guix build-system python)
+  #:use-module (guix build-system trivial))
 
 (define-public mailutils
   (package
@@ -297,7 +302,7 @@ and corrections.  It is based on a Bayesian filter.")
 (define-public offlineimap
   (package
     (name "offlineimap")
-    (version "7.0.6")
+    (version "7.0.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/OfflineIMAP/offlineimap/"
@@ -305,7 +310,7 @@ and corrections.  It is based on a Bayesian filter.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1msg0v5i3v4mvjm2c5alzz91dk5y20h4xdr60lcz3507fv80407m"))))
+                "1719xnw0xah5knypd5vrpsxi337576q1r8axpziw8wa7zms7abl0"))))
     (build-system python-build-system)
     (inputs `(("python2-pysqlite" ,python2-pysqlite)
               ("python2-six" ,python2-six)))
@@ -1209,7 +1214,7 @@ deliver it in various ways.")
                       #t)))
        #:tests? #f)) ;; There are no tests indicating a successful
     ;; build.  Some tests of basic locking mechanisms provided by the
-    ;; filesystem are performed during 'make install'.  However, these
+    ;; file system are performed during 'make install'.  However, these
     ;; are performed before the actual build process.
     (build-system gnu-build-system)
     (inputs `(("exim" ,exim)))
@@ -1308,3 +1313,183 @@ Khard can also be used from within the email client @command{mutt}.")
   (description "Mail::SPF is the Sender Policy Framework implemented
 in Perl.")
   (license bsd-3)))
+
+(define-public mb2md
+  (package
+    (name "mb2md")
+    (version "3.20")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://batleth.sapienti-sat.org/projects/mb2md/mb2md-"
+                    version ".pl.gz"))
+              (sha256
+               (base32
+                "0bvkky3c90738h3skd2f1b2yy5xzhl25cbh9w2dy97rs86ssjidg"))))
+    (build-system trivial-build-system)
+    (arguments
+     '(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((source (assoc-ref %build-inputs "source"))
+                (out (assoc-ref %outputs "out"))
+                (bin (string-append out "/bin"))
+                (perl (assoc-ref %build-inputs "perl"))
+                (gzip (assoc-ref %build-inputs "gzip"))
+                (perl-timedate (assoc-ref %build-inputs "perl-timedate"))
+                (perl5lib (string-append perl-timedate "/lib/perl5/site_perl")))
+           (mkdir-p bin)
+           (with-directory-excursion bin
+             (copy-file source "mb2md.gz")
+             (system* (string-append gzip "/bin/gzip") "-d" "mb2md.gz")
+             (substitute* "mb2md"
+               (("#!/usr/bin/perl")
+                (string-append "#!/usr/bin/perl -I " perl5lib)))
+             (patch-shebang "mb2md" (list (string-append perl "/bin")))
+             (chmod "mb2md" #o555))
+           #t))))
+    (native-inputs `(("gzip", gzip)))
+    (inputs `(("perl" ,perl)
+              ("perl-timedate" ,perl-timedate)))
+    (home-page "http://batleth.sapienti-sat.org/projects/mb2md/")
+    (synopsis "Mbox to maildir converter")
+    (description
+     "Mb2md is a Perl script that takes one or more mbox format files and
+converts them to maildir format directories.")
+    (license public-domain)))
+
+(define-public mpop
+  (package
+    (name "mpop")
+    (version "1.2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://downloads.sourceforge.net/mpop/mpop-"
+                           version ".tar.xz"))
+       (sha256
+        (base32
+         "0n0ij258kn8lfa6nyr6l6plc4hf1wvyf1hkwicvdbjqdqrgjnq81"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("gnutls" ,gnutls)
+       ("libidn" ,libidn)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (arguments
+     `(#:configure-flags (list "--with-tls=gnutls")))
+    (home-page "http://mpop.sourceforge.net/")
+    (synopsis "POP3 mail client")
+    (description "mpop is a small and fast POP3 client suitable as a
+fetchmail replacement.
+
+mpop supports multiple accounts, header based mail filtering, delivery
+to mbox files, maildir folders or a Mail Delivery Agent (MDA),
+TLS/SSL, several authentication methods, Internationalized Domain
+Names (IDN) and SOCKS proxies.")
+    (license gpl3+)))
+
+(define-public mhonarc
+  (package
+    (name "mhonarc")
+    (version "2.6.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/E/EH/EHOOD/MHonArc-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0ll3v93yji334zqp6xfzfxc0127pmjcznmai1l5q6dzawrs2igzq"))))
+    (build-system perl-build-system)
+    (home-page "https://www.mhonarc.org/")
+    (synopsis "Create HTML archives of mail/news messages")
+    (description
+     "MHonArc is a Perl mail-to-HTML converter.  MHonArc
+provides HTML mail archiving with index, mail thread linking,
+etc; plus other capabilities including support for MIME and
+powerful user customization features.")
+    (license gpl2+)))
+
+
+(define-public sendmail
+  (package
+    (name "sendmail")
+    (version "8.15.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "ftp://ftp.sendmail.org/pub/sendmail/sendmail."
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0fdl9ndmspqspdlmghzxlaqk56j3yajk52d7jxcg21b7sxglpy94"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'replace-/bin/sh
+           (lambda _
+             (substitute*
+                 (append
+                  (list "smrsh/smrsh.c" "sendmail/conf.c" "contrib/mailprio"
+                        "contrib/mmuegel" "devtools/bin/configure.sh")
+                  (find-files "." ".*\\.m4")
+                  (find-files "." ".*\\.cf"))
+               (("/bin/sh") (which "bash")))
+
+             (substitute* "devtools/bin/Build"
+               (("SHELL=/bin/sh") (string-append "SHELL=" (which "bash"))))
+             #t))
+         (replace 'configure
+           (lambda _
+
+             ;; Render harmless any attempts to chown or chgrp
+             (substitute* "devtools/bin/install.sh"
+               (("owner=\\$2") "owner=''")
+               (("group=\\$2") "group=''"))
+
+             (with-output-to-file "devtools/Site/site.config.m4"
+               (lambda ()
+                 (format #t "
+define(`confCC', `gcc')
+define(`confOPTIMIZE', `-g -O2')
+define(`confLIBS', `-lresolv')
+define(`confINSTALL', `~a/devtools/bin/install.sh')
+define(`confDEPEND_TYPE', `CC-M')
+define(`confINST_DEP', `')
+" (getcwd))))))
+         (replace 'build
+           (lambda _
+             (and (zero? (system* "sh" "Build"))
+                  (with-directory-excursion "cf/cf"
+                    (begin
+                      (copy-file "generic-linux.mc" "sendmail.mc")
+                      (zero? (system* "sh" "Build" "sendmail.cf")))))))
+         (add-before 'install 'pre-install
+           (lambda _
+             (let ((out (assoc-ref %outputs "out")))
+               (mkdir-p (string-append out "/usr/bin"))
+               (mkdir-p (string-append out "/usr/sbin"))
+               (mkdir-p (string-append out "/etc/mail"))
+               (setenv "DESTDIR" out)
+               (with-directory-excursion "cf/cf"
+                 (zero? (system* "sh" "Build" "install-cf")))))))
+       ;; There is no make check.  There are some post installation tests, but those
+       ;; require root privileges
+       #:tests? #f))
+    (inputs
+     `(("m4" ,m4)
+       ("perl" ,perl)))
+    (home-page "http://sendmail.org")
+    (synopsis
+     "Highly configurable Mail Transfer Agent (MTA)")
+    (description
+     "Sendmail is a mail transfer agent (MTA) originally developed by Eric
+Allman.  It is highly configurable and supports many delivery methods and many
+transfer protocols.")
+    (license (non-copyleft "file://LICENSE"
+                           "See LICENSE in the distribution."))))
+
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 7d266cf91d..ddb7a3e283 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 David Thompson <dthompson2@worcester.edu>
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;;
@@ -69,18 +69,23 @@ a flexible and convenient way.")
     (build-system gnu-build-system)
     (arguments
      '(#:phases
-       (alist-cons-after
-        'patch-source-shebangs 'patch-test-shebangs
-        (lambda* (#:key outputs #:allow-other-keys)
-          ;; Patch shebangs in test scripts.
-          (let ((out (assoc-ref outputs "out")))
-            (for-each (lambda (file)
-                        (substitute* file
-                          (("#! /bin/sh")
-                           (string-append "#!" (which "sh")))))
-                      (remove file-is-directory?
-                              (find-files "src/tests" ".*")))))
-        %standard-phases)
+       (modify-phases %standard-phases
+         (add-after 'patch-source-shebangs 'patch-test-shebangs
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Patch shebangs in test scripts.
+             (let ((out (assoc-ref outputs "out")))
+               (for-each (lambda (file)
+                           (substitute* file
+                             (("#! /bin/sh")
+                              (string-append "#!" (which "sh")))))
+                         (remove file-is-directory?
+                                 (find-files "src/tests" ".*"))))))
+         (add-after 'unpack 'patch-iconv-path
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/man.c"
+               (("\"iconv\"")
+                (string-append "\"" (which "iconv") "\"")))
+             #t)))
        #:configure-flags
        (let ((groff (assoc-ref %build-inputs "groff"))
              (less  (assoc-ref %build-inputs "less"))
diff --git a/gnu/packages/markdown.scm b/gnu/packages/markdown.scm
index dab3d4eab1..ae54b0b172 100644
--- a/gnu/packages/markdown.scm
+++ b/gnu/packages/markdown.scm
@@ -24,6 +24,7 @@
   #:use-module (guix packages)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
+  #:use-module (guix build-system cmake)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
   #:use-module (gnu packages web)
@@ -99,3 +100,33 @@ you to write using an easy-to-read, easy-to-write plain text format, then
 convert it to structurally valid XHTML (or HTML).")
     (license (non-copyleft "file://License.text"
                            "See License.text in the distribution."))))
+
+(define-public cmark
+  (package
+    (name "cmark")
+    (version "0.26.1")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "https://github.com/jgm/cmark/archive/"
+                                 version ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "1mpmcy4bbmc8m058zqs9dwx49lcfi7bdnfszsr9y66cwgylia1mm"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:test-target "test"))
+    (native-inputs `(("python" ,python)))
+    (synopsis "CommonMark Markdown reference implementation")
+    (description "CommonMark is a strongly defined, highly compatible
+specification of Markdown.  cmark is the C reference implementation of
+CommonMark.  It provides @code{libcmark} shared library for parsing
+CommonMark to an abstract syntax tree (AST) and rendering the document
+as HTML, groff man, LaTeX, CommonMark, or an XML representation of the
+AST.  The package also provides the command-line program @command{cmark}
+for parsing and rendering CommonMark.")
+    (home-page "http://commonmark.org")
+    ;; cmark is distributed with a BSD-2 license, but some components are Expat
+    ;; licensed. The CommonMark specification is Creative Commons CC-BY-SA 4.0
+    ;; licensed. See 'COPYING' in the source distribution for more information.
+    (license (list bsd-2 expat cc-by-sa4.0))))
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index db53e717f8..eafb501508 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -418,6 +418,32 @@ plotting engine by third-party applications like Octave.")
       (license (license:fsf-free
                 "http://gnuplot.cvs.sourceforge.net/gnuplot/gnuplot/Copyright")))))
 
+(define-public gctp
+  (package
+    (name "gctp")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/OkoSanto/GCTP/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0l9aqnqynh9laicn5dxf3rsb1n14xiks79wbyqccirzmjqd1c1x4"))))
+    (native-inputs
+     `(("fortran" ,gfortran)))
+    (build-system gnu-build-system)
+    (synopsis "General Cartographic Transformation Package (GCTP)")
+    (description
+     "The General Cartographic Transformation Package (GCTP) is a system of
+software routines designed to permit the transformation of coordinate pairs
+from one map projection to another.  The GCTP is the standard computer
+software used by the National Mapping Division for map projection
+computations.")
+    (home-page "https://github.com/OkoSanto/GCTP")
+    (license 'license:public-domain))) ; https://www2.usgs.gov/laws/info_policies.html
+
 (define-public hdf5
   (package
     (name "hdf5")
@@ -1191,16 +1217,39 @@ sparse system of linear equations A x = b using Guassian elimination.")
     (inputs
      (alist-delete "pt-scotch" (package-inputs mumps-openmpi)))))
 
+(define-public r-quadprog
+  (package
+    (name "r-quadprog")
+    (version "1.5-5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "quadprog" version))
+       (sha256
+        (base32
+         "0jg3r6abmhp8r9vkbhpx9ldjfw6vyl1m4c5vwlyjhk1mi03656fr"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "http://cran.r-project.org/web/packages/quadprog")
+    (synopsis "Functions to solve quadratic programming problems")
+    (description
+     "This package contains routines and documentation for solving quadratic
+programming problems.")
+    (license license:gpl3+)))
+
 (define-public r-pracma
   (package
     (name "r-pracma")
-    (version "1.8.8")
+    (version "1.9.5")
     (source (origin
       (method url-fetch)
       (uri (cran-uri "pracma" version))
       (sha256
-        (base32 "0ans9l5rrb7a38gyi4qx4258sd5r5668vyrk02yzjpg9k3h8l165"))))
+        (base32 "19nr2jlkbcdgvw3gx5hry12av565lmvqd5q4h7zlch3q13avwwl2"))))
     (build-system r-build-system)
+    (propagated-inputs
+     `(("r-quadprog" ,r-quadprog)))
     (home-page "http://cran.r-project.org/web/packages/pracma")
     (synopsis "Practical numerical math functions")
     (description "This package provides functions for numerical analysis and
@@ -1793,14 +1842,14 @@ associated functions (eg. contiguous and non-contiguous submatrix views).")
 
 (define-public armadillo-for-rcpparmadillo
   (package (inherit armadillo)
-    (version "6.700.6")
+    (version "7.400.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/arma/armadillo-"
-                                  version ".tar.gz"))
+                                  version ".tar.xz"))
               (sha256
                (base32
-                "1cdpjxb0fz5f28y5qrqgpw53s7qi8s2v3al9lfdldqxngb21vpx8"))))))
+                "0xmpnqhm9mwr1lssjyarj0cl8b4svbqv6z1xa1dxlwd2ly1srkg4"))))))
 
 (define-public muparser
   ;; When switching download sites, muparser re-issued a 2.2.5 release with a
@@ -1921,6 +1970,8 @@ programming language implementations.  The project was born out of a need to
 have a good libm for the Julia programming language that worked consistently
 across compilers and operating systems, and in 32-bit and 64-bit
 environments.")
+    ;; Each architecture has its own make target, and there is none for mips.
+    (supported-systems (delete "mips64el-linux" %supported-systems))
     ;; See LICENSE.md for details.
     (license (list license:expat
                    license:isc
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index fa4515c768..5a618c2742 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,12 +23,11 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages messaging)
-  #:use-module ((guix licenses)
-                #:select (gpl3+ gpl2+ gpl2 lgpl2.1 lgpl2.0+ bsd-2 non-copyleft
-                          asl2.0 x11))
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system python)
@@ -35,6 +35,7 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages crypto)
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages documentation)
@@ -44,6 +45,7 @@
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages libcanberra)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages xml)
@@ -59,7 +61,12 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages tls)
-  #:use-module (gnu packages icu4c))
+  #:use-module (gnu packages icu4c)
+  #:use-module (gnu packages qt)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages xiph)
+  #:use-module (gnu packages audio)
+  #:use-module (gnu packages fontutils))
 
 (define-public libotr
   (package
@@ -90,7 +97,7 @@ correspondent is assured the messages he sees are authentic and
 unmodified.  (4) Perfect forward secrecy: If you lose control of your private
 keys, no previous conversation is compromised.")
     (home-page "https://otr.cypherpunks.ca/")
-    (license (list lgpl2.1 gpl2))))
+    (license (list license:lgpl2.1 license:gpl2))))
 
 ;; These patches together fix https://github.com/bitlbee/bitlbee/pull/55, are
 ;; already upstream, and should be unnecessary when the next bitlbee comes
@@ -154,19 +161,19 @@ Google Talk), MSN Messenger, Yahoo!  Messenger, AIM and ICQ, and the Twitter
 microblogging network (plus all other Twitter API compatible services like
 identi.ca and status.net).")
     (home-page "http://www.bitlbee.org/")
-    (license (list gpl2+ bsd-2))))
+    (license (list license:gpl2+ license:bsd-2))))
 
 (define-public hexchat
   (package
     (name "hexchat")
-    (version "2.12.0")
+    (version "2.12.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "17fncwza5r80z9r6j1lrh7h375hp4w6pay08zgnfc3qca6bjy1y2"))))
+                "0svwz9ldrry1sn35jywgpacjj1cf3xl3k74ynwn8rjvxs73b00aj"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)
                      ("intltool" ,intltool)))
@@ -178,17 +185,20 @@ identi.ca and status.net).")
               ("libcanberra" ,libcanberra)
               ("libnotify" ,libnotify)
               ("openssl" ,openssl)
-              ("perl-xml-parser" ,perl-xml-parser) ;for addons
-              ("python-2" ,python-2)))             ;for addons
+
+              ;; Bindings for add-on scripts.
+              ("luajit" ,luajit)
+              ("perl-xml-parser" ,perl-xml-parser)
+              ("python-2" ,python-2)))
     (synopsis "Graphical IRC Client")
     (description
-     "HexChat lets you connect to multiple IRC networks at once.  The main window
-shows the list of currently connected networks and their channels, the current
-conversation and the list of users.  It uses colors to differentiate between
-users and to highlight messages.  It checks spelling using available
+     "HexChat lets you connect to multiple IRC networks at once.  The main
+window shows the list of currently connected networks and their channels, the
+current conversation and the list of users.  It uses colors to differentiate
+between users and to highlight messages.  It checks spelling using available
 dictionaries.  HexChat can be extended with multiple addons.")
     (home-page "http://hexchat.net/")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public ngircd
   (package
@@ -208,8 +218,9 @@ dictionaries.  HexChat can be extended with multiple addons.")
     (native-inputs `(("procps" ,procps)
                      ("expect" ,expect)
                      ("inetutils" ,inetutils)))
-    ;; XXX Add libident, libwrap.
+    ;; XXX Add libident.
     (inputs `(("zlib" ,zlib)
+              ("libwrap" ,tcp-wrappers)
               ("gnutls" ,gnutls)
               ,@(if (string-suffix? "-linux"
                                     (or (%current-target-system)
@@ -218,7 +229,7 @@ dictionaries.  HexChat can be extended with multiple addons.")
                     '())))
     (arguments
      `(#:configure-flags
-       '("--with-gnutls" "--with-iconv" "--enable-ipv6"
+       '("--with-gnutls" "--with-iconv" "--enable-ipv6" "--with-tcp-wrappers"
          ,@(if (string-suffix? "-linux"
                                (or (%current-target-system)
                                    (%current-system)))
@@ -253,7 +264,7 @@ dictionaries.  HexChat can be extended with multiple addons.")
      "ngIRCd is a lightweight Internet Relay Chat server for small or private
 networks.  It is easy to configure, can cope with dynamic IP addresses, and
 supports IPv6, SSL-protected connections as well as PAM for authentication.")
-    (license gpl2+)))
+    (license license:gpl2+)))
 
 (define-public pidgin
   (package
@@ -327,14 +338,14 @@ supports IPv6, SSL-protected connections as well as PAM for authentication.")
 chat protocols.")
     (license
      (list
-      gpl2+    ; Most of the code
-      lgpl2.1  ; GG protocol plugin (libpurple/protocols/gg/lib)
-      lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
+      license:gpl2+    ; Most of the code
+      license:lgpl2.1  ; GG protocol plugin (libpurple/protocols/gg/lib)
+      license:lgpl2.0+ ; OSCAR protocol plugin (libpurple/protocols/oscar)
       ;; The following licenses cover the zephyr protocol plugin:
-      (non-copyleft
+      (license:non-copyleft
        "file://libpurple/protocols/zephyr/mit-copyright.h"
        "See libpurple/protocols/zephyr/mit-copyright.h in the distribution.")
-      (non-copyleft
+      (license:non-copyleft
        "file://libpurple/protocols/zephyr/mit-sipb-copyright.h"
        "See libpurple/protocols/zephyr/mit-sipb-copyright.h in the distribution.")))))
 
@@ -374,7 +385,7 @@ you.  However, during a conversation, your correspondent is assured the
 messages he sees are authentic and unmodified.  (4) Perfect forward secrecy:
 If you lose control of your private keys, no previous conversation is
 compromised.")
-    (license gpl2)))
+    (license license:gpl2)))
 
 (define-public znc
   (package
@@ -408,7 +419,7 @@ compromised.")
 client from the actual IRC server, and also from selected channels.  Multiple
 clients from different locations can connect to a single ZNC account
 simultaneously and therefore appear under the same nickname on IRC.")
-    (license asl2.0)))
+    (license license:asl2.0)))
 
 (define-public python-nbxmpp
   (package
@@ -431,7 +442,7 @@ simultaneously and therefore appear under the same nickname on IRC.")
      "The goal of this python library is to provide a way for Python
 applications to use Jabber/XMPP networks in a non-blocking way.  This library
 was initially a fork of xmpppy, but is using non-blocking sockets.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public python2-nbxmpp
   (package-with-python2 python-nbxmpp))
@@ -491,7 +502,7 @@ Among its features are: a tabbed chat window and single window modes; support
 for group chat (with Multi-User Chat protocol), invitation, chat to group chat
 transformation; audio and video conferences; file transfer; TLS, GPG and
 end-to-end encryption support; XML console.")
-    (license gpl3+)))
+    (license license:gpl3+)))
 
 (define-public prosody
   (package
@@ -507,6 +518,7 @@ end-to-end encryption support; XML console.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
+       #:configure-flags (list "--no-example-certs")
        #:modules ((ice-9 match)
                   (srfi srfi-1)
                   (guix build gnu-build-system)
@@ -564,6 +576,238 @@ be easy to set up and configure, and efficient with system resources.
 Additionally, for developers it aims to be easy to extend and give a flexible
 system on which to rapidly develop added functionality, or prototype new
 protocols.")
-    (license x11)))
+    (license license:x11)))
+
+(define-public libtoxcore
+  (let ((revision "1")
+        (commit "755f084e8720b349026c85afbad58954cb7ff1d4"))
+    (package
+      (name "libtoxcore")
+      (version (string-append "0.0.0" "-"
+                              revision "."(string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/irungentoo/toxcore.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "0ap1gvlyihnfivv235dbrgsxsiiz70bhlmlr5gn1027w3h5kqz8w"))))
+      (build-system gnu-build-system)
+      (native-inputs
+       `(("autoconf" ,autoconf)
+         ("automake" ,automake)
+         ("libtool" ,libtool)
+         ;; TODO: Add when test suite is capable of passing.
+         ;; ("check" ,check)
+         ("pkg-config" ,pkg-config)))
+      (inputs
+       `(("libsodium" ,libsodium)
+         ("opus" ,opus)
+         ("libvpx" ,libvpx)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'autoconf
+             (lambda _
+               (zero? (system* "autoreconf" "-vfi")))))
+         #:tests? #f)) ; FIXME: Testsuite fails, reasons unspecific.
+      (synopsis "Library for the Tox encrypted messenger protocol")
+      (description
+       "C library implementation of the Tox encrypted messenger protocol.")
+      (license license:gpl3+)
+      (home-page "https://tox.chat"))))
+
+(define-public utox
+  (package
+   (name "utox")
+   (version "0.9.8")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (string-append "https://github.com/GrayHatter/uTox/archive/v"
+                         version ".tar.gz"))
+     (file-name (string-append name "-" version ".tar.gz"))
+     (sha256
+      (base32
+       "13hfqbwzcgvfbvf9yjm62aqsvxnpqppb50c88sys43m7022yqcsy"))))
+   (build-system gnu-build-system)
+   (arguments
+    '(#:make-flags (list (string-append "PREFIX=" %output)
+                         "CC=gcc")
+      #:tests? #f ; No tests
+      #:phases
+      (modify-phases %standard-phases
+        ;; No configure script
+        (delete 'configure))))
+   (inputs
+    `(("dbus" ,dbus)
+      ("filteraudio" ,filteraudio)
+      ("fontconfig" ,fontconfig)
+      ("freetype" ,freetype)
+      ("libsodium" ,libsodium)
+      ("libtoxcore" ,libtoxcore)
+      ("libvpx" ,libvpx)
+      ("libx11" ,libx11)
+      ("libxext" ,libxext)
+      ("libxrender" ,libxrender)
+      ("openal" ,openal)
+      ("v4l-utils" ,v4l-utils)))
+   (native-inputs
+    `(("pkg-config" ,pkg-config)))
+   (synopsis "Lightweight Tox client")
+   (description "A  lightweight Tox client.  Tox is a distributed and secure
+instant messenger with audio and video chat capabilities.")
+   (home-page "http://utox.org/")
+   (license license:gpl3)))
+
+(define-public pybitmessage
+  (package
+    (name "pybitmessage")
+    (version "0.6.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/Bitmessage/"
+                           "PyBitmessage/archive/v" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1ffj7raxpp277kphj98190fxrwfx16vmbspk7k3azg3bh5f5idnf"))))
+    (inputs
+     `(("python" ,python-2)
+       ("python:tk" ,python-2 "tk")
+       ("openssl" ,openssl)
+       ("sqlite" ,sqlite)
+       ("qt" ,qt-4)
+       ("python2-pyqt-4" ,python2-pyqt-4)
+       ("python2-sip" ,python2-sip)
+       ("python2-pysqlite" ,python2-pysqlite)
+       ("python2-pyopenssl" ,python2-pyopenssl)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:imported-modules ((guix build python-build-system)
+                           ,@%gnu-build-system-modules)
+       #:make-flags (list (string-append "PREFIX="
+                                         (assoc-ref %outputs "out")))
+       #:tests? #f ; no test target
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-makefile
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "Makefile"
+               (("mkdir -p \\$\\{DESTDIR\\}/usr") "")
+               (("/usr/local") "")
+               (("/usr") "")
+               (("#!/bin/sh") (string-append "#!" (which "bash")))
+               (("python2") (which "python"))
+               (("/opt/openssl-compat-bitcoin/lib/")
+                (string-append (assoc-ref inputs "openssl") "/lib/")))
+             #t))
+         (add-after 'unpack 'fix-unmatched-python-shebangs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/bitmessagemain.py"
+               (("#!/usr/bin/env python2.7")
+                (string-append "#!" (which "python"))))
+             (substitute* "src/bitmessagecli.py"
+               (("#!/usr/bin/env python2.7.x")
+                (string-append "#!" (which "python"))))
+             #t))
+         (add-after 'unpack 'fix-depends
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/depends.py"
+               (("libcrypto.so")
+                (string-append (assoc-ref inputs "openssl")
+                               "/lib/libcrypto.so")))
+             #t))
+         (add-after 'unpack 'fix-local-files-in-paths
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "src/proofofwork.py"
+               (("bitmsghash.so")
+                (string-append (assoc-ref outputs "out")
+                               "/lib/bitmsghash.so")))
+             #t))
+         (add-after 'unpack 'fix-pyelliptic
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/pyelliptic/openssl.py"
+               (("libcrypto.so")
+                (string-append (assoc-ref inputs "openssl")
+                               "/lib/libcrypto.so"))
+               (("libssl.so")
+                (string-append (assoc-ref inputs "openssl")
+                               "/lib/libssl.so")))
+             #t))
+         ;; XXX: Make does not build and install bitmsghash, do it
+         ;; and place it in /lib.
+         (add-before 'build 'build-and-install-bitmsghash
+           (lambda* (#:key outputs #:allow-other-keys)
+             (chdir "src/bitmsghash")
+             (system* "make")
+             (chdir "../..")
+             (install-file "src/bitmsghash/bitmsghash.so"
+                           (string-append (assoc-ref outputs "out") "/lib"))
+             #t))
+         (add-after 'install 'wrap
+           (@@ (guix build python-build-system) wrap)))))
+    (license license:expat)
+    (description
+     "Distributed and trustless peer-to-peer communications protocol
+for sending encrypted messages to one person or many subscribers.")
+    (synopsis "Distributed peer-to-peer communication")
+    (home-page "https://bitmessage.org/")))
+
+(define-public ytalk
+  (package
+    (name "ytalk")
+    (version "3.3.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://ftp.ourproject.org/pub/ytalk/ytalk-"
+                           version  ".tar.gz"))
+       (sha256
+        (base32
+         "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("ncurses" ,ncurses)))
+    (home-page "http://ytalk.ourproject.org")
+    (synopsis "Multi-user chat program")
+    (description "Ytalk is a replacement for the BSD talk program.  Its main
+advantage is the ability to communicate with any arbitrary number of users at
+once.  It supports both talk protocols (\"talk\" and \"ntalk\") and can communicate
+with several different talk daemons at the same time.")
+    (license license:gpl2+)))
+
+(define-public gloox
+  (package
+    (name "gloox")
+    (version "1.0.17")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://camaya.net/download/gloox-"
+                           version ".tar.bz2"))
+       (sha256
+        (base32
+         "09c01jr5nrm7f1ly42wg0pqqscmp48pv8y2fjx1vwbavjxdq59ri"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libidn" ,libidn)
+       ("gnutls" ,gnutls)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (synopsis "Portable high-level Jabber/XMPP library for C++")
+    (description
+     "gloox is a full-featured Jabber/XMPP client library,
+written in ANSI C++.  It makes writing spec-compliant clients easy
+and allows for hassle-free integration of Jabber/XMPP functionality
+into existing applications.")
+    (home-page "https://camaya.net/gloox")
+    (license license:gpl3)))
 
 ;;; messaging.scm ends here
diff --git a/gnu/packages/microcom.scm b/gnu/packages/microcom.scm
new file mode 100644
index 0000000000..cfa2518f18
--- /dev/null
+++ b/gnu/packages/microcom.scm
@@ -0,0 +1,57 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages microcom)
+  #:use-module (guix packages)
+  #:use-module (guix licenses)
+  #:use-module (guix git-download)
+  #:use-module (guix download)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages readline)
+  #:use-module (guix build-system gnu))
+
+(define-public microcom
+  (package
+    (name "microcom")
+    (version "2016.01.09")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "git://git.pengutronix.de/git/tools/microcom.git")
+                    (commit "v2016.01.0")))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "080ci5589bpyy5kcl51csmvpw9zysify189hw6awx69pi3cjnxly"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'bootstrap
+           (lambda _
+             (zero? (system* "autoreconf" "-i")))))))
+    (inputs `(("readline" ,readline)))
+    (native-inputs `(("automake" ,automake)
+                     ("autoconf" ,autoconf)))
+    (home-page  "http://git.pengutronix.de/?p=tools/microcom.git")
+    (synopsis "Minimalistic serial line terminal program")
+ (description "Microcom is a minimalistic terminal program for accessing
+devices via a serial connection.  It features connection via RS232 serial
+interfaces (including setting of transfer rates) as well as in `telnetmode'
+as specified in rfc2217 and a (Linux specific) CAN mode.")
+    (license gpl2+)))
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index 279ec68440..ec0861db11 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -31,6 +31,9 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages compression)
@@ -205,7 +208,7 @@ terminal using ncurses.")
     (description "Ncmpcpp is an mpd client with a UI very similar to ncmpc,
 but it provides new useful features such as support for regular expressions
 for library searches, extended song format, items filtering, the ability to
-sort playlists, and a local filesystem browser.")
+sort playlists, and a local file system browser.")
     (home-page "http://ncmpcpp.rybczak.net/")
     (license license:gpl2+)))
 
@@ -263,3 +266,52 @@ interface for the Music Player Daemon.")
     (package (inherit mpd2)
       (native-inputs `(("python2-setuptools" ,python2-setuptools)
                        ,@(package-native-inputs mpd2))))))
+
+(define-public sonata
+  (package
+    (name "sonata")
+    (version "1.7b1")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "https://github.com/multani/sonata/archive/v"
+                              version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "07gq2nxqwxs0qyxjbay7k5j25zd386bn7wdr2dl1gk53diwnn7s0"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build python-build-system)
+                  ((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
+                  (guix build utils))
+       #:imported-modules (,@%gnu-build-system-modules
+                           (guix build python-build-system)
+                           (guix build glib-or-gtk-build-system))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'glib-or-gtk-wrap
+           (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))
+         (add-after 'install 'wrap-sonata
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out               (assoc-ref outputs "out"))
+                   (gi-typelib-path   (getenv "GI_TYPELIB_PATH")))
+               (wrap-program (string-append out "/bin/sonata")
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
+             #t)))))
+    (native-inputs
+     `(("gettext" ,gnu-gettext)))
+    (inputs
+     `(("python-mpd2" ,python-mpd2)
+       ("gtk+" ,gtk+)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
+       ("gobject-introspection" ,gobject-introspection)
+       ("adwaita-icon-theme" ,adwaita-icon-theme)
+       ("python-pygobject" ,python-pygobject)))
+    (synopsis "Elegant client for the Music Player Daemon")
+    (description "Sonata is an elegant graphical client for the Music Player
+Daemon (MPD).  It supports playlists, multiple profiles (connecting to different
+MPD servers, search and multimedia key support.")
+    (home-page "http://www.nongnu.org/sonata/")
+    (license license:gpl3+)))
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index bdba7bc96a..adaf78e4a3 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -37,6 +37,7 @@
   #:use-module (guix build-system waf)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages apr)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages backup)
@@ -51,6 +52,7 @@
   #:use-module (gnu packages cyrus-sasl)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages emacs)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fltk)
@@ -71,11 +73,14 @@
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
   #:use-module (gnu packages linux) ; for alsa-utils
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages man)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages mpd)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
+  #:use-module (gnu packages pcre)
   #:use-module (gnu packages pdf)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -262,6 +267,150 @@ many input formats and provides a customisable Vi-style user interface.")
 enable professional yet simple and intuitive pattern-based drum programming.")
     (license license:gpl2+)))
 
+(define-public extempore
+  (package
+    (name "extempore")
+    (version "0.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/digego/extempore/archive/"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1wap1mvsicrhlazikf7l8zxg37fir8bmnh9rin28m1rix730vcch"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(;; The default target also includes ahead-of-time compilation of the
+       ;; standard libraries.  However, during the "install" phase this would
+       ;; happen *again* for unknown reasons.  Hence we only build the
+       ;; extempore executable during the build phase.
+       #:make-flags '("extempore")
+       #:configure-flags '("-DJACK=ON"
+                           ;; We want to distribute.
+                           "-DIN_TREE=OFF"
+                           ;; Don't download any dependencies.
+                           "-DBUILD_DEPS=OFF")
+       #:modules ((ice-9 match)
+                  (guix build cmake-build-system)
+                  (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-directories
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Rewrite default path to runtime directory
+             (substitute* "src/Extempore.cpp"
+               (("runtimedir \\+= \"runtime\"")
+                (string-append "runtimedir = \""
+                               (assoc-ref outputs "out")
+                               "/lib/extempore/runtime\"")))
+             (substitute* "extras/extempore.el"
+               (("\\(runtime-directory \\(concat default-directory \"runtime\"\\)\\)")
+                (string-append "(runtime-directory \""
+                               (assoc-ref outputs "out")
+                               "/lib/extempore/runtime"
+                               "\")")))
+             #t))
+         (add-after 'unpack 'link-with-additional-libs
+           (lambda _
+             ;; The executable must be linked with libffi and zlib.
+             (substitute* "CMakeLists.txt"
+               (("add_dependencies\\(aot_extended extended_deps\\)") "")
+               (("target_link_libraries\\(extempore PRIVATE dl" line)
+                (string-append line " ffi z")))
+             #t))
+         ;; FIXME: AOT compilation of the nanovg bindings fail with the error:
+         ;; "Compiler Error  could not bind _nvgLinearGradient"
+         (add-after 'unpack 'disable-nanovg
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("aotcompile_lib\\(libs/external/nanovg.xtm.*") ""))
+             #t))
+         ;; FIXME: All examples that are used as tests segfault for some
+         ;; unknown reason.
+         (add-after 'unpack 'disable-broken-tests
+           (lambda _
+             (substitute* "CMakeLists.txt"
+               (("extempore_add_example_as_test\\(.*") ""))
+             #t))
+         (add-after 'unpack 'hardcode-external-lib-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (use-modules (ice-9 match))
+             (for-each
+              (match-lambda
+                ((file-name lib pkg-name)
+                 (substitute* (string-append "libs/external/" file-name ".xtm")
+                   ((lib) (string-append (assoc-ref inputs pkg-name)
+                                         "/lib/" lib)))))
+              '(("assimp"    "libassimp.so"    "assimp")
+                ("portmidi"  "libportmidi.so"  "portmidi")
+                ("sndfile"   "libsndfile.so"   "libsndfile")
+                ("fft"       "libkiss_fft.so"  "kiss-fft")
+                ("stb_image" "libstb_image.so" "stb-image")
+                ("nanovg"    "libnanovg.so"    "nanovg")
+                ("glext"     "libGL.so"        "mesa")
+                ("glfw3"     "libglfw.so"      "glfw")
+                ("gl/glcore-directbind"   "libGL.so" "mesa")
+                ("gl/glcompat-directbind" "libGL.so" "mesa")))
+             #t))
+         (add-after 'unpack 'use-own-llvm
+          (lambda* (#:key inputs #:allow-other-keys)
+            (setenv "EXT_LLVM_DIR" (assoc-ref inputs "llvm"))
+            ;; Our LLVM builds shared libraries, so Extempore should use
+            ;; those.
+            (substitute* "CMakeLists.txt"
+              (("CMAKE_STATIC_LIBRARY") "CMAKE_SHARED_LIBRARY"))
+            #t))
+         (add-after 'unpack 'fix-aot-compilation
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               ;; EXT_SHARE_DIR does not exist before installation, so the
+               ;; working directory should be the source directory instead.
+               (("WORKING_DIRECTORY \\$\\{EXT_SHARE_DIR\\}")
+                "WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}")
+               ;; Extempore needs to be told where the runtime is to be found.
+               ;; While we're at it we disable automatic tuning for a specific
+               ;; CPU to make binary substitution possible.
+               (("COMMAND extempore" prefix)
+                (string-append prefix " --sharedir " (getcwd)
+                               " --mcpu=generic --attr=none")))
+             #t)))))
+    (inputs
+     `(("llvm" ,llvm-for-extempore)
+       ("libffi" ,libffi)
+       ("jack" ,jack-1)
+       ("libsndfile" ,libsndfile)
+       ("glfw" ,glfw)
+       ("apr" ,apr)
+       ("stb-image" ,stb-image-for-extempore)
+       ("kiss-fft" ,kiss-fft-for-extempore)
+       ("nanovg" ,nanovg-for-extempore)
+       ("portmidi" ,portmidi-for-extempore)
+       ("assimp" ,assimp)
+       ("alsa-lib" ,alsa-lib)
+       ("portaudio" ,portaudio)
+       ("mesa" ,mesa)
+       ("pcre" ,pcre)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("perl" ,perl)
+       ("emacs" ,emacs-no-x)))
+    ;; Extempore refuses to build on architectures other than x86_64
+    (supported-systems '("x86_64-linux"))
+    (home-page "http://benswift.me/extempore-docs/index.html")
+    (synopsis "Programming environment for live coding of multimedia")
+    (description
+     "Extempore is a programming language and runtime environment designed
+with live programming in mind.  It supports interactive programming in a REPL
+style, compiling and binding code just-in-time.  Although Extempore has its
+roots in 'live coding' of audiovisual media art, it is suitable for any task
+domain where dynamic run-time modifiability and good numerical performance are
+required.  Extempore also has strong timing and concurrency semantics, which
+are helpful when working in problem spaces where timing is important (such as
+audio and video).")
+    (license license:bsd-2)))
+
 (define-public klick
   (package
     (name "klick")
@@ -1081,6 +1230,25 @@ projects.")
 using a system-independent interface.")
     (license license:expat)))
 
+(define-public portmidi-for-extempore
+  (package (inherit portmidi)
+    (name "portmidi-for-extempore")
+    (version "217")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/extemporelang/portmidi/"
+                                  "archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0gjikwciyr8kk4y3qiv1pcq58xpgw38ql1m2gs6g0qc1s8sx4235"))))
+    (build-system cmake-build-system)
+    (arguments `(#:tests? #f)) ; no tests
+    (native-inputs '())
+    ;; Extempore refuses to build on architectures other than x86_64
+    (supported-systems '("x86_64-linux"))
+    (home-page "https://github.com/extemporelang/portmidi/")))
+
 (define-public python-pyportmidi
   (package
     (name "python-pyportmidi")
@@ -1372,14 +1540,14 @@ computer's keyboard.")
 (define-public qtractor
   (package
     (name "qtractor")
-    (version "0.7.7")
+    (version "0.7.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://downloads.sourceforge.net/qtractor/"
                                   "qtractor-" version ".tar.gz"))
               (sha256
                (base32
-                "0q8kvy1ynlg64v1w7jxix1rpq0lp2ixgb2y8cbbwxd2b28r3r2vl"))))
+                "0pp459kfgrnngj373gnwwl43xjz32lmyf7v62p2nnjh6c7wr1ryq"))))
     (build-system gnu-build-system)
     (arguments `(#:tests? #f)) ; no "check" target
     (inputs
@@ -1638,6 +1806,52 @@ for improved Amiga ProTracker 2/3 compatibility.")
     ;; 'src/milkyplay' is under Modified BSD, the rest is under GPL3 or later.
     (license (list license:bsd-3 license:gpl3+))))
 
+(define-public schismtracker
+  (package
+    (name "schismtracker")
+    (version "20160521")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/" name "/" name "/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0c6r24wm3rldm4j8cskl9xnixj3rwi3lnrhckw5gv43wpy6h4jcz"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Remove use of __DATE__ and __TIME__ for reproducibility.
+               `(substitute* "schism/version.c"
+                  (("Schism Tracker build %s %s.*$")
+                   (string-append "Schism Tracker version " ,version "\");"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'autoconf
+           (lambda _ (zero? (system* "autoreconf" "-vfi"))))
+         (add-before 'configure 'link-libm
+           (lambda _ (setenv "LIBS" "-lm") #t)))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("python" ,python)))
+    (inputs
+     `(("alsa-lib" ,alsa-lib) ; for asound dependency
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("sdl" ,sdl)))
+    (home-page "http://schismtracker.org")
+    (synopsis "Oldschool sample-based music composition tool")
+    (description
+     "Schism Tracker is a reimplementation of Impulse Tracker, a program used to
+create high quality music without the requirements of specialized, expensive
+equipment, and with a unique \"finger feel\" that is difficult to replicate in
+part.  The player is based on a highly modified version of the ModPlug engine,
+with a number of bugfixes and changes to improve IT playback.")
+    (license license:gpl2+)))
+
 (define-public moc
   (package
     (name "moc")
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index b29788599c..01ef5dc800 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,7 +29,7 @@
 (define-public nano
   (package
     (name "nano")
-    (version "2.5.3")
+    (version "2.7.0")
     (source
      (origin
       (method url-fetch)
@@ -36,7 +37,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "1vhjrcydcfxqq1719vcsvqqnbjbq2523m00dhzag5vwzkc961c5j"))))
+        "1hzazcrbwjqiw89jjvlj97q0wf385qqkzcm0870pdrixiv7yklax"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index 147033a7e5..97991670f3 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,7 +23,10 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system perl)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages perl))
 
 (define-public ncurses
   (let ((patch-makefile-phase
@@ -161,3 +165,45 @@ curses widgets, such as dialog boxes.")
     (home-page "http://invisible-island.net/dialog/dialog.html")
     ;; Includes the gpl3 file "config.sub" from Automake.
     (license (list lgpl2.1 gpl3))))
+
+(define-public perl-curses
+  (package
+    (name "perl-curses")
+    (version "1.36")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/G/GI/GIRAFFED/"
+                           "Curses-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0r6xd9wr0c25rr28zixhqipak575zqsfb7r7f2693i9il1dpj554"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("ncurses" ,ncurses)))
+    (arguments
+     `(#:make-maker-flags (list "PANELS" "MENUS")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before
+           'configure 'set-curses-ldflags
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let* ((ncurses (assoc-ref inputs "ncurses"))
+                    (include (string-append ncurses "/include"))
+                    (lib (string-append ncurses "/lib")))
+               (setenv "CURSES_LIBTYPE" "ncurses")
+               (setenv "CURSES_CFLAGS" (string-append "-I" include))
+               (setenv "CURSES_PANEL_CFLAGS" (string-append "-I" include))
+               (setenv "CURSES_MENU_CFLAGS" (string-append "-I" include))
+               (setenv "CURSES_FORM_CFLAGS" (string-append "-I" include))
+               (setenv "CURSES_LDFLAGS" (string-append "-L" lib " -lncurses"))
+               (setenv "CURSES_PANEL_LDFLAGS" (string-append "-L" lib " -lpanel"))
+               (setenv "CURSES_MENU_LDFLAGS" (string-append "-L" lib " -lmenu"))
+               (setenv "CURSES_FORM_LDFLAGS" (string-append "-L" lib " -lform"))
+               #t))))))
+    (home-page "http://search.cpan.org/dist/Curses")
+    (synopsis "Terminal screen handling and optimization")
+    (description
+     "@code{Curses} is the interface between Perl and the curses library
+of your system.")
+    (license (package-license perl))))
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 787b5dba38..1cf6b052b8 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -135,6 +135,84 @@ establish a relatively secure environment (su and chroot) for running client
 or server shell scripts with network connections.")
     (license license:gpl2)))
 
+(define-public tcp-wrappers
+  (package
+    (name "tcp-wrappers")
+    (version "7.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "ftp://ftp.porcupine.org/pub/security/tcp_wrappers_"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0p9ilj4v96q32klavx0phw9va21fjp8vpk11nbh6v2ppxnnxfhwm"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)  ; there is no configure script
+         (delete 'check)      ; there are no tests
+         (replace 'build
+           (lambda _
+             (chmod "." #o755)
+             ;; Upstream doesn't generate a shared library.  So we have to do it.
+             (setenv "CC" "gcc -fno-builtin -fPIC")
+             (substitute* "Makefile"
+               (("^(all[^\n]*)" line) (string-append line " libwrap.so\n
+libwrap.so: $(LIB_OBJ)\n
+\tgcc -shared $^ -o $@\n")))
+             ;; Deal with some gcc breakage.
+             (substitute* "percent_m.c"
+               (("extern char .sys_errlist.*;") ""))
+             (substitute* "scaffold.c"
+               (("extern char .malloc.*;") ""))
+             ;; This, believe it or not, is the recommended way to build!
+             (zero? (system* "make" "REAL_DAEMON_DIR=/etc" "linux"))))
+         ;; There is no make install stage, so we have to do it ourselves.
+         (replace 'install
+           (lambda _
+             (let ((out (assoc-ref %outputs "out"))
+                   (man-pages `("hosts_access.3"
+                                "hosts_access.5"
+                                "hosts_options.5"
+                                "tcpd.8"
+                                "tcpdchk.8"
+                                "tcpdmatch.8"))
+                   (libs  `("libwrap.a"
+                            "libwrap.so"))
+                   (headers `("tcpd.h"))
+                   (bins `("safe_finger"
+                           "tcpd"
+                           "tcpdchk"
+                           "tcpdmatch"
+                           "try-from")))
+               (for-each
+                (lambda (x)
+                  (install-file x (string-append out "/include")))
+                headers)
+               (for-each
+                (lambda (x)
+                  (install-file x (string-append out "/share/man/man"
+                                                 (string-take-right x 1))))
+                man-pages)
+               (for-each
+                (lambda (x)
+                  (install-file x (string-append out "/lib/")))
+                libs)
+               (for-each
+                (lambda (x)
+                  (install-file x (string-append out "/bin/")))
+                bins)))))))
+    (home-page "http://www.porcupine.org")
+    (synopsis  "Monitor and filter incoming requests for network services")
+    (description "With this package you can monitor and filter incoming requests for
+network services.  It includes a library which may be used by daemons to
+transparently check connection attempts against an access control list.")
+    (license (license:non-copyleft "file://DISCLAIMER"
+                                   "See the file DISCLAIMER in the distribution."))))
+
+
 (define-public zeromq
   (package
     (name "zeromq")
@@ -313,8 +391,14 @@ and min/max network usage.")
      '(#:phases
        (modify-phases %standard-phases
          (delete 'configure)
+         (add-before 'build 'fix-ifconfig-path
+           ;; This package works only with the net-tools version of ifconfig.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/tun.c"
+               (("PATH=[^ ]* ")
+                (string-append (assoc-ref inputs "net-tools") "/sbin/")))))
          (add-before 'check 'delete-failing-tests
-           ;; Avoid https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=802105
+           ;; Avoid https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=802105.
            (lambda _
              (substitute* "tests/common.c"
                (("tcase_add_test\\(tc, \
@@ -323,7 +407,8 @@ test_parse_format_ipv(4(|_listen_all|_mapped_ipv6)|6)\\);")
        #:make-flags (list "CC=gcc"
                           (string-append "prefix=" (assoc-ref %outputs "out")))
        #:test-target "test"))
-    (inputs `(("zlib" ,zlib)))
+    (inputs `(("net-tools" ,net-tools)
+              ("zlib" ,zlib)))
     (native-inputs `(("check" ,check)
                      ("pkg-config" ,pkg-config)))
     (home-page "http://code.kryo.se/iodine/")
@@ -338,7 +423,7 @@ and up to 1 Mbit/s downstream.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "2.0.5")
+    (version "2.2.0")
     (synopsis "Network traffic analyzer")
     (source
      (origin
@@ -347,7 +432,7 @@ and up to 1 Mbit/s downstream.")
                            version ".tar.bz2"))
        (sha256
         (base32
-         "02xi3fz8blcz9cf75rs11g7bijk06wm45vpgnksp72c2609j9q0c"))))
+         "010i7wpsv2231pwb1xdqs0xfwywi3514siidv6wnrfpw3rs7x156"))))
     (build-system glib-or-gtk-build-system)
     (inputs `(("bison" ,bison)
               ("c-ares" ,c-ares)
@@ -746,3 +831,29 @@ in dynamically linked programs and redirects them through one or more SOCKS or
 HTTP proxies.")
     (home-page "https://github.com/rofl0r/proxychains-ng")
     (license license:gpl2+)))
+
+(define-public enet
+  (package
+    (name "enet")
+    (version "1.3.13")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://enet.bespin.org/download/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0p53mnmjbm56wizwraznynx13fcibcxiqny110dp6a5a3w174q73"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (synopsis
+     "Network communication layer on top of UDP")
+    (description
+     "ENet's purpose is to provide a relatively thin, simple and robust network
+communication layer on top of UDP.  The primary feature it provides is optional
+reliable, in-order delivery of packets.  ENet omits certain higher level
+networking features such as authentication, server discovery, encryption, or
+other similar tasks that are particularly application specific so that the
+library remains flexible, portable, and easily embeddable.")
+    (home-page "http://enet.bespin.org")
+    (license license:expat)))
diff --git a/gnu/packages/nfs.scm b/gnu/packages/nfs.scm
new file mode 100644
index 0000000000..650a2af0d6
--- /dev/null
+++ b/gnu/packages/nfs.scm
@@ -0,0 +1,118 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages nfs)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages gsasl)
+  #:use-module (gnu packages libevent)
+  #:use-module (gnu packages mit-krb5)
+  #:use-module (gnu packages onc-rpc)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
+  #:use-module (guix build-system trivial)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix utils)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-2)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match))
+
+(define-public nfs-utils
+  (package
+    (name "nfs-utils")
+    (version "1.3.4")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append
+                   "mirror://kernel.org/linux/utils/nfs-utils/" version
+                   "/nfs-utils-" version ".tar.xz"))
+             (sha256
+              (base32
+               "0xarqhwy757vazv9gqhyrgxsrx083yhvkkih01jh83fqm305naml"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags
+       `("--without-tcp-wrappers"
+         ,(string-append "--with-start-statd="
+                         (assoc-ref %outputs "out") "/sbin/start-statd")
+         ,(string-append "--with-krb5=" (assoc-ref %build-inputs "mit-krb5")))
+       #:phases (modify-phases %standard-phases
+                  (add-before
+                      'configure 'adjust-command-file-names
+                    (lambda _
+                      ;; Remove assumptions of FHS from start-statd script
+                      (substitute* `("utils/statd/start-statd")
+                        (("^PATH=.*") "")
+                        (("^flock")
+                         (string-append
+                          (assoc-ref %build-inputs "util-linux")
+                          "/bin/flock"))
+                        (("^exec rpc.statd")
+                         (string-append "exec "
+                          (assoc-ref %outputs "out") "/sbin/rpc.statd")))
+
+                      ;; This hook tries to write to /var
+                      ;; That needs to be done by a service too.
+                      (substitute* `("Makefile.in")
+                        (("^install-data-hook:")
+                         "install-data-hook-disabled-for-guix:"))
+
+                      ;; Replace some hard coded paths.
+                      (substitute* `("utils/nfsd/nfssvc.c")
+                        (("/bin/mount")
+                         (string-append
+                          (assoc-ref %build-inputs "util-linux")
+                          "/bin/mount")))
+                      (substitute* `("utils/statd/statd.c")
+                        (("/usr/sbin/")
+                         (string-append (assoc-ref %outputs "out") "/sbin/")))
+                      (substitute* `("utils/osd_login/Makefile.in"
+                                     "utils/mount/Makefile.in"
+                                     "utils/nfsdcltrack/Makefile.in")
+                        (("^sbindir = /sbin")
+                         (string-append "sbindir = "
+                                        (assoc-ref %outputs "out") "/sbin")))
+                      #t)))))
+    (inputs `(("libevent" ,libevent)
+              ("libnfsidmap" ,libnfsidmap)
+              ("sqlite" ,sqlite)
+              ("lvm2" ,lvm2)
+              ("gss" ,gss)
+              ("util-linux" ,util-linux)
+              ("mit-krb5" ,mit-krb5)
+              ("libtirpc" ,libtirpc)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://www.kernel.org/pub/linux/utils/nfs-utils/")
+    (synopsis "Tools for loading and managing Linux NFS mounts")
+    (description "The Network File System (NFS) was developed to allow
+machines to mount a disk partition on a remote machine as if it were a local
+disk.  It allows for fast, seamless sharing of files across a network.")
+    ;; It is hard to be sure what the licence is.  Most of the source files
+    ;; contain no licence notice at all.  A few have a licence notice for a 3
+    ;; clause non-copyleft licence.  However the tarball has a COPYING file
+    ;; with the text of GPLv2 -- It seems then that GLPv2 is the most
+    ;; restrictive licence, and until advice to the contrary we must assume
+    ;; that is what is intended.
+    (license license:gpl2)))
diff --git a/gnu/packages/nickle.scm b/gnu/packages/nickle.scm
new file mode 100644
index 0000000000..1312aecbbd
--- /dev/null
+++ b/gnu/packages/nickle.scm
@@ -0,0 +1,54 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages nickle)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages readline)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
+
+(define-public nickle
+  (package
+    (name "nickle")
+    (version "2.77")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://nickle.org/release/nickle-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0rhij7cn1zkn8wzxyjkamz9fs262zyg80p6v6i864hdalg4plpm3"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("readline" ,readline)))
+    (synopsis "Numeric oriented programming language")
+    (description
+     "Nickle is a programming language based prototyping environment with
+powerful programming and scripting capabilities.  Nickle supports a variety of
+datatypes, especially arbitrary precision numbers.  The programming language
+vaguely resembles C.  Some things in C which do not translate easily are
+different, some design choices have been made differently, and a very few
+features are simply missing.  Nickle provides the functionality of Unix bc, dc
+and expr in a different form.  It is also an ideal environment for prototyping
+complex algorithms.  Nickle's scripting capabilities make it a replacement for
+spreadsheets in some applications, and its numeric features complement the
+limited numeric functionality of text-oriented languages such as AWK and Perl.")
+    (home-page "https://nickle.org/")
+    (license license:expat)))
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index 8345040cda..f1b4bdbf6f 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -673,7 +673,7 @@ to the other.")
      "The \"findlib\" library provides a scheme to manage reusable software
 components (packages), and includes tools that support this scheme.  Packages
 are collections of OCaml modules for which metainformation can be stored.  The
-packages are kept in the filesystem hierarchy, but with strict directory
+packages are kept in the file system hierarchy, but with strict directory
 structure.  The library contains functions to look the directory up that
 stores a package, to query metainformation about a package, and to retrieve
 dependency information about multiple packages.  There is also a tool that
diff --git a/gnu/packages/onc-rpc.scm b/gnu/packages/onc-rpc.scm
index 549b82307b..0bcc885c39 100644
--- a/gnu/packages/onc-rpc.scm
+++ b/gnu/packages/onc-rpc.scm
@@ -71,7 +71,7 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
-       `("--with-systemdsystemunitdir=no")))
+       `("--with-systemdsystemunitdir=no" "--enable-warmstarts")))
     (inputs
      `(("libtirpc" ,libtirpc)))
     (native-inputs
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 8474904265..62f1e84a3b 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,7 +20,9 @@
 
 (define-module (gnu packages openstack)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages tls)
+  #:use-module (gnu packages version-control)
   #:use-module (guix build-system python)
   #:use-module (guix download)
   #:use-module ((guix licenses)
@@ -781,3 +784,49 @@ permanence.")
          ("python2-oslosphinx" ,python2-oslosphinx)
          ,@(fold alist-delete (package-native-inputs swiftclient)
             '("python-keystoneclient" "python-oslosphinx")))))))
+
+(define-public python-git-review
+  (package
+    (name "python-git-review")
+    (version "1.25.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "git-review" version))
+       (sha256
+        (base32
+         "07d1jn9ryff5j5ic6qj5pbk10m1ccmpllj0wyalrcms1q9yhlzh8"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f ; tests require a running Gerrit server
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (git (assoc-ref inputs "git"))
+                    (openssh (assoc-ref inputs "openssh")))
+               (wrap-program (string-append out "/bin/git-review")
+                 `("PATH" ":" prefix
+                   ,(map (lambda (dir)
+                           (string-append dir "/bin"))
+                         (list git openssh))))))))))
+    (native-inputs
+     `(("python-pbr" ,python-pbr)))
+    (inputs
+     `(("python-requests" ,python-requests)
+       ("git" ,git)
+       ("openssh" ,openssh)))
+    (home-page "http://docs.openstack.org/infra/git-review/")
+    (synopsis "Command-line tool for Gerrit")
+    (description
+     "Git-review is a command-line tool that helps submitting Git branches to
+Gerrit for review, or fetching existing ones.")
+    (license asl2.0)))
+
+(define-public python2-git-review
+  (let ((base (package-with-python2 (strip-python2-variant python-git-review))))
+    (package (inherit base)
+             (native-inputs
+              `(("python2-setuptools" ,python2-setuptools)
+                ,@(package-native-inputs base))))))
diff --git a/gnu/packages/orpheus.scm b/gnu/packages/orpheus.scm
index 069d3e548a..39118c9abc 100644
--- a/gnu/packages/orpheus.scm
+++ b/gnu/packages/orpheus.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,41 +53,45 @@
        ("which" ,which)))
     (arguments
      `(#:phases
-       (alist-replace
-        'configure
-        (lambda* (#:key outputs #:allow-other-keys)
-          ;; This old `configure' script does not support variables passed as
-          ;; arguments.
-          (let ((out (assoc-ref outputs "out")))
-            (setenv "CONFIG_SHELL" (which "bash"))
-            (setenv "SHELL" (which "bash"))
-            (setenv "LIBS" "-logg")     ;doesn't declare its use of libogg
-            (zero?
-             (system* "./configure" (string-append "--prefix=" out)))))
-        (alist-cons-after
-         'configure 'configure-players
-         (lambda* (#:key inputs #:allow-other-keys)
-           ;; To avoid propagating the mpg321 and vorbis-tools inputs, we can
-           ;; make the orpheus application execute the needed players from the
-           ;; store.
-           (let ((ogg123 (string-append (assoc-ref inputs "vorbis-tools")
-                                        "/bin/ogg123"))
-                 (mpg321 (string-append (assoc-ref inputs "mpg321")
-                                        "/bin/mpg321"))
-                 (which  (string-append (assoc-ref inputs "which")
-                                        "/bin/which")))
-             (substitute* "src/orpheusconf.cc"
-               (("ogg123") ogg123)
-               (("which")  which)
-               (("mpg321") mpg321))))
-         (alist-cons-before
-          'build 'patch-shells
-          (lambda _
-            (substitute* '("src/mp3track.cc"
-                           "src/streamtrack.cc"
-                           "src/oggtrack.cc")
-              (("/bin/sh") (which "bash"))))
-          %standard-phases)))))
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; This old `configure' script does not support variables passed as
+             ;; arguments.
+             (let ((out (assoc-ref outputs "out")))
+               (setenv "CONFIG_SHELL" (which "bash"))
+               (setenv "SHELL" (which "bash"))
+               (setenv "LIBS" "-logg")     ;doesn't declare its use of libogg
+               (zero?
+                (system* "./configure" (string-append "--prefix=" out)
+                                       ,@(if (string=? "mips64el-linux"
+                                                       (%current-system))
+                                             '("--host=mips64el-unknown-linux-gnu")
+                                             '())
+                         )))))
+         (add-after 'configure 'configure-players
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; To avoid propagating the mpg321 and vorbis-tools inputs, we can
+             ;; make the orpheus application execute the needed players from the
+             ;; store.
+             (let ((ogg123 (string-append (assoc-ref inputs "vorbis-tools")
+                                          "/bin/ogg123"))
+                   (mpg321 (string-append (assoc-ref inputs "mpg321")
+                                          "/bin/mpg321"))
+                   (which  (string-append (assoc-ref inputs "which")
+                                          "/bin/which")))
+               (substitute* "src/orpheusconf.cc"
+                 (("ogg123") ogg123)
+                 (("which")  which)
+                 (("mpg321") mpg321))
+               #t)))
+         (add-before 'build 'patch-shells
+           (lambda _
+             (substitute* '("src/mp3track.cc"
+                            "src/streamtrack.cc"
+                            "src/oggtrack.cc")
+               (("/bin/sh") (which "bash")))
+             #t)))))
     (home-page "http://thekonst.net/en/orpheus")
     (synopsis "Text-mode audio player")
     (description
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index f0e1769e25..058221ac02 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -476,13 +476,13 @@ transactions from C or Python.")
 (define-public diffoscope
   (package
     (name "diffoscope")
-    (version "56")
+    (version "60")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "0nbbbp2c1374pl2ysqij2gk013pl49l1nqlg40jxsg95bwa6610l"))))
+                "0qwsnh7sldjlwi4qydn1ljzh3322k2ga45d867ml49xr2wnsivcc"))))
     (build-system python-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 3bb078e031..b49ec1f8c1 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -45,7 +45,7 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20160722")
+    (version "20160822")
     (source
      (origin
       (method url-fetch)
@@ -53,7 +53,7 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "08gm0i9vj2nz8qgqi98z00myypgb3dni0s5yf3l17fp8h78fp4g3"))))
+        "1qdb7889w7v5amd0z4qg3v4hia0wj5vjly9qvm5lm5nlxg8bfrwq"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index 7288da6613..d2410c6106 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -334,3 +334,38 @@ through the pass command.")
     (description "Argon2 provides a key derivation function that was declared
 winner of the 2015 Password Hashing Competition.")
     (license license:cc0)))
+
+(define-public python-bcrypt
+  (package
+    (name "python-bcrypt")
+    (version "3.1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "bcrypt" version))
+        (sha256
+         (base32
+          "1giy0dvd8gvq6flxh44np1v2nqwsji5qsnrz038mgwzgp7c20j75"))))
+        (build-system python-build-system)
+    (native-inputs
+     `(("python-pycparser" ,python-pycparser)
+       ("python-pytest" ,python-pytest)))
+    (inputs
+     `(("python-cffi" ,python-cffi)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/pyca/bcrypt/")
+    (synopsis
+     "Modern password hashing library")
+    (description
+     "Bcrypt is a Python module which provides a password hashing method based
+on the Blowfish password hashing algorithm, as described in
+@url{http://static.usenix.org/events/usenix99/provos.html,\"A Future-Adaptable
+Password Scheme\"} by Niels Provos and David Mazieres.")
+    (license license:asl2.0)))
+
+(define-public python2-bcrypt
+  (let ((bcrypt (package-with-python2 python-bcrypt)))
+    (package (inherit bcrypt)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs bcrypt))))))
diff --git a/gnu/packages/patches/azr3.patch b/gnu/packages/patches/azr3.patch
new file mode 100644
index 0000000000..5849383c5b
--- /dev/null
+++ b/gnu/packages/patches/azr3.patch
@@ -0,0 +1,151 @@
+This patch adds the "sigc" and "std" namespace prefixes where needed.  It also
+replaces a double single-argument "bind" with a single two-argument "bind",
+because the former would confuse the compiler.
+
+The patch has been sent to the developer on 2016-09-26.
+
+--- azr3-jack-1.2.3/azr3/knob.cpp	2016-09-26 10:29:27.653375902 +0200
++++ azr3-jack-1.2.3/azr3/knob.cpp	2016-09-26 10:29:38.693430647 +0200
+@@ -44,7 +44,7 @@
+   set_size_request(44, 44);
+   add_events(EXPOSURE_MASK | BUTTON1_MOTION_MASK | 
+              BUTTON_PRESS_MASK | SCROLL_MASK);
+-  m_adj.signal_value_changed().connect(mem_fun(*this, &Knob::queue_draw));
++  m_adj.signal_value_changed().connect(sigc::mem_fun(*this, &Knob::queue_draw));
+ }
+  
+  
+--- azr3-jack-1.2.3/azr3/drawbar.cpp	2016-09-26 10:27:40.632845216 +0200
++++ azr3-jack-1.2.3/azr3/drawbar.cpp	2016-09-26 10:27:48.952886473 +0200
+@@ -37,7 +37,7 @@
+   set_size_request(22, 150);
+   add_events(EXPOSURE_MASK | BUTTON1_MOTION_MASK | 
+              BUTTON_PRESS_MASK | SCROLL_MASK);
+-  m_adj.signal_value_changed().connect(mem_fun(*this, &Drawbar::queue_draw));
++  m_adj.signal_value_changed().connect(sigc::mem_fun(*this, &Drawbar::queue_draw));
+ }
+  
+  
+--- azr3-jack-1.2.3/azr3/switch.cpp	2016-09-26 10:28:48.169180111 +0200
++++ azr3-jack-1.2.3/azr3/switch.cpp	2016-09-26 10:28:55.713217520 +0200
+@@ -49,7 +49,7 @@
+   }
+   set_size_request(m_width, m_height);
+   add_events(EXPOSURE_MASK | BUTTON_PRESS_MASK | SCROLL_MASK);
+-  m_adj.signal_value_changed().connect(mem_fun(*this, &Switch::queue_draw));
++  m_adj.signal_value_changed().connect(sigc::mem_fun(*this, &Switch::queue_draw));
+ }
+  
+  
+--- azr3-jack-1.2.3/azr3/azr3gui.cpp	2016-09-26 09:05:10.106963561 +0200
++++ azr3-jack-1.2.3/azr3/azr3gui.cpp	2016-09-26 10:26:47.480581648 +0200
+@@ -73,19 +73,19 @@
+   m_tbox = add_textbox(m_fbox, pixmap, 391, 19, 3, 140, 39);
+   m_tbox->add_events(SCROLL_MASK);
+   m_tbox->signal_scroll_display.
+-    connect(mem_fun(*this, &AZR3GUI::display_scroll));
++    connect(sigc::mem_fun(*this, &AZR3GUI::display_scroll));
+   m_splitpoint_adj = new Adjustment(0, 0, 1);
+   m_adj[n_splitpoint] = m_splitpoint_adj;
+   m_splitpoint_adj->signal_value_changed().
+-    connect(mem_fun(*this, &AZR3GUI::splitpoint_changed));
++    connect(sigc::mem_fun(*this, &AZR3GUI::splitpoint_changed));
+   Menu* menu = create_menu();
+   m_tbox->signal_button_press_event().
+-    connect(bind(mem_fun(*this, &AZR3GUI::popup_menu), menu));
++    connect(sigc::bind(sigc::mem_fun(*this, &AZR3GUI::popup_menu), menu));
+   
+   // keyboard split switch
+   m_splitswitch = add_switch(m_fbox, -1, 537, 49, Switch::Mini);
+   m_splitswitch->get_adjustment().signal_value_changed().
+-    connect(mem_fun(*this, &AZR3GUI::splitbox_clicked));
++    connect(sigc::mem_fun(*this, &AZR3GUI::splitbox_clicked));
+   
+   // upper knobs
+   add_switch(m_fbox, n_mono, 61, 105, Switch::Mini);
+@@ -141,8 +141,8 @@
+   // mode switcher
+   Widget* eb = add_clickbox(m_fbox, 14, 319, 14, 44);
+   eb->signal_button_press_event().
+-    connect(sigc::hide(bind(bind(mem_fun(*this, &AZR3GUI::change_mode), 
+-				 ref(m_fbox)), false)));
++    connect(sigc::hide(sigc::bind(sigc::mem_fun(*this, &AZR3GUI::change_mode), 
++                                  false, std::ref(m_fbox))));
+   m_fx_widgets.push_back(eb);
+   
+   // Mr Valve controls
+@@ -182,8 +182,8 @@
+   // mode switcher 2
+   Widget* eb2 = add_clickbox(m_vbox, 14, 53, 14, 44);
+   eb2->signal_button_press_event().
+-    connect(sigc::hide(bind(bind(mem_fun(*this, &AZR3GUI::change_mode), 
+-				 ref(m_fbox)), true)));
++    connect(sigc::hide(sigc::bind(sigc::mem_fun(*this, &AZR3GUI::change_mode), 
++                                  true, std::ref(m_fbox))));
+ 
+   // vibrato controls
+   add_switch(m_vbox, n_1_vibrato, 39, 17, Switch::Green);
+@@ -352,9 +352,9 @@
+   knob->set_style(s);
+   if (port >= 0 && port < m_adj.size()) {
+     knob->get_adjustment().signal_value_changed().
+-      connect(compose(bind<0>(mem_fun(*this, &AZR3GUI::control_changed), port),
+-		      mem_fun(knob->get_adjustment(), 
+-			      &Adjustment::get_value)));
++      connect(compose(sigc::bind<0>(sigc::mem_fun(*this, &AZR3GUI::control_changed), port),
++		      sigc::mem_fun(knob->get_adjustment(), 
++                                    &Adjustment::get_value)));
+     assert(m_adj[port] == 0);
+     m_adj[port] = &knob->get_adjustment();
+   }
+@@ -382,8 +382,8 @@
+   db->set_style(s);
+   if (port >= 0 && port < m_adj.size()) {
+     db->get_adjustment().signal_value_changed().
+-      connect(compose(bind<0>(mem_fun(*this, &AZR3GUI::control_changed), port),
+-		      mem_fun(db->get_adjustment(), &Adjustment::get_value)));
++      connect(compose(sigc::bind<0>(sigc::mem_fun(*this, &AZR3GUI::control_changed), port),
++		      sigc::mem_fun(db->get_adjustment(), &Adjustment::get_value)));
+     assert(m_adj[port] == 0);
+     m_adj[port] = &db->get_adjustment();
+   }
+@@ -397,8 +397,8 @@
+   fbox.put(*sw, xoffset, yoffset);
+   if (port >= 0 && port < m_adj.size()) {
+     sw->get_adjustment().signal_value_changed().
+-      connect(compose(bind<0>(mem_fun(*this, &AZR3GUI::control_changed),port),
+-		      mem_fun(sw->get_adjustment(), &Adjustment::get_value)));
++      connect(compose(sigc::bind<0>(sigc::mem_fun(*this, &AZR3GUI::control_changed),port),
++		      sigc::mem_fun(sw->get_adjustment(), &Adjustment::get_value)));
+     assert(m_adj[port] == 0);
+     m_adj[port] = &sw->get_adjustment();
+   }
+@@ -489,7 +489,7 @@
+     oss<<setw(2)<<setfill('0')<<iter->first<<' '<<iter->second.substr(0, 23);
+     MenuItem* item = manage(new MenuItem(oss.str()));
+     item->signal_activate().
+-      connect(bind(mem_fun(*this, &AZR3GUI::program_changed), iter->first));
++      connect(sigc::bind(sigc::mem_fun(*this, &AZR3GUI::program_changed), iter->first));
+     m_program_menu->items().push_back(*item);
+     item->show();
+     item->get_child()->modify_bg(STATE_NORMAL, m_menu_bg);
+@@ -503,8 +503,8 @@
+   for (int i = 0; i < 128; ++i) {
+     MenuItem* item = manage(new MenuItem(note2str(i)));
+     item->signal_activate().
+-      connect(bind(mem_fun(*m_splitpoint_adj, &Adjustment::set_value),
+-		   i / 128.0));
++      connect(sigc::bind(sigc::mem_fun(*m_splitpoint_adj, &Adjustment::set_value),
++                         i / 128.0));
+     m_split_menu->items().push_back(*item);
+     item->show();
+     item->get_child()->modify_bg(STATE_NORMAL, m_menu_bg);
+@@ -533,7 +533,7 @@
+   
+   MenuItem* save_item = manage(new MenuItem("Save program"));
+   save_item->signal_activate().
+-    connect(mem_fun(*this, &AZR3GUI::save_program));
++    connect(sigc::mem_fun(*this, &AZR3GUI::save_program));
+   save_item->show();
+   save_item->get_child()->modify_fg(STATE_NORMAL, m_menu_bg);
+   save_item->get_child()->modify_fg(STATE_NORMAL, m_menu_fg);
diff --git a/gnu/packages/patches/dtc-add-missing-symbols-to-lds.patch b/gnu/packages/patches/dtc-add-missing-symbols-to-lds.patch
deleted file mode 100644
index ccece0f466..0000000000
--- a/gnu/packages/patches/dtc-add-missing-symbols-to-lds.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From a4b093f7366fdb429ca1781144d3985fa50d0fbb Mon Sep 17 00:00:00 2001
-From: Julien Grall <julien.grall@linaro.org>
-Date: Tue, 17 Mar 2015 16:00:34 +0000
-Subject: [PATCH] libfdt: Add missing functions to shared library
-
-The commit 4e76ec7 "libfdt: Add fdt_next_subnode() to permit easy
-subnode iteration" adds new functions (fdt_{first,next}_subnode) but
-forgot to mark them as 'global' in the shared library.
-
-Signed-off-by: Julien Grall <julien.grall@linaro.org>
----
- libfdt/version.lds | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/libfdt/version.lds b/libfdt/version.lds
-index 80b322b..941208e 100644
---- a/libfdt/version.lds
-+++ b/libfdt/version.lds
-@@ -54,6 +54,8 @@ LIBFDT_1.2 {
- 		fdt_get_property_by_offset;
- 		fdt_getprop_by_offset;
- 		fdt_next_property_offset;
-+		fdt_first_subnode;
-+		fdt_next_subnode;
- 
- 	local:
- 		*;
-From f58799be130e27cc729cb2d45566daa0bb3b8605 Mon Sep 17 00:00:00 2001
-From: David Gibson <david@gibson.dropbear.id.au>
-Date: Tue, 1 Dec 2015 12:55:21 +1100
-Subject: [PATCH] libfdt: Add some missing symbols to version.lds
-
-Several functions in the header file were missing from the version.lds
-script, meaning that they couldn't be used from a libfdt shared library.
-
-Reported by Ken Aaker, via github issue tracker.
-
-Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
----
- libfdt/version.lds | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/libfdt/version.lds b/libfdt/version.lds
-index f19f157..1f4e1ea 100644
---- a/libfdt/version.lds
-+++ b/libfdt/version.lds
-@@ -57,6 +57,10 @@ LIBFDT_1.2 {
- 		fdt_next_property_offset;
- 		fdt_first_subnode;
- 		fdt_next_subnode;
-+		fdt_address_cells;
-+		fdt_size_cells;
-+		fdt_stringlist_contains;
-+		fdt_resize;
- 
- 	local:
- 		*;
--- 
-2.8.1
diff --git a/gnu/packages/patches/flashrom-use-libftdi1.patch b/gnu/packages/patches/flashrom-use-libftdi1.patch
deleted file mode 100644
index a6051df30a..0000000000
--- a/gnu/packages/patches/flashrom-use-libftdi1.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-Update to libftdi-1.0 is advertised as a drop-in replacement for libftdi,
-running on top of libusb-1.0. This also removes indirect dependency to
-libusb-0.1.
-
-Patch by Kyösti Mälkki <kyosti.malkki@gmail.com>.
-See <http://patchwork.coreboot.org/patch/3904/>.
-
---- flashrom/Makefile.orig	2013-08-13 18:00:00.000000000 -0400
-+++ flashrom/Makefile	2014-08-05 03:10:40.217145375 -0400
-@@ -492,19 +492,21 @@
- ifeq ($(CONFIG_FT2232_SPI), yes)
- # This is a totally ugly hack.
- FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_FT2232_SPI=1'")
--NEED_FTDI := yes
-+NEED_FTDI1 := yes
- PROGRAMMER_OBJS += ft2232_spi.o
- endif
- 
- ifeq ($(CONFIG_USBBLASTER_SPI), yes)
- # This is a totally ugly hack.
- FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "-D'CONFIG_USBBLASTER_SPI=1'")
--NEED_FTDI := yes
-+NEED_LIBUSB1 := yes
-+NEED_FTDI1 := yes
- PROGRAMMER_OBJS += usbblaster_spi.o
- endif
- 
--ifeq ($(NEED_FTDI), yes)
--FTDILIBS := $(shell pkg-config --libs libftdi 2>/dev/null || printf "%s" "-lftdi -lusb")
-+ifeq ($(NEED_FTDI1), yes)
-+FTDILIBS := $(shell pkg-config --libs libftdi1 2>/dev/null || printf "%s" "-lftdi1 -lusb-1.0")
-+FEATURE_CFLAGS += $(shell pkg-config --cflags libftdi1 2>/dev/null)
- FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "FT232H := yes" .features && printf "%s" "-D'HAVE_FT232H=1'")
- FEATURE_LIBS += $(shell LC_ALL=C grep -q "FTDISUPPORT := yes" .features && printf "%s" "$(FTDILIBS)")
- # We can't set NEED_USB here because that would transform libftdi auto-enabling
-@@ -781,6 +783,7 @@
- endif
- 
- define FTDI_TEST
-+#include <stddef.h>
- #include <ftdi.h>
- struct ftdi_context *ftdic = NULL;
- int main(int argc, char **argv)
-@@ -793,6 +796,7 @@
- export FTDI_TEST
- 
- define FTDI_232H_TEST
-+#include <stddef.h>
- #include <ftdi.h>
- enum ftdi_chip_type type = TYPE_232H;
- endef
-@@ -826,15 +830,15 @@
- 
- features: compiler
- 	@echo "FEATURES := yes" > .features.tmp
--ifeq ($(NEED_FTDI), yes)
-+ifeq ($(NEED_FTDI1), yes)
- 	@printf "Checking for FTDI support... "
- 	@echo "$$FTDI_TEST" > .featuretest.c
--	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
-+	@$(CC) $(CPPFLAGS) $(CFLAGS) $(FEATURE_CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
- 		( echo "found."; echo "FTDISUPPORT := yes" >> .features.tmp ) ||	\
- 		( echo "not found."; echo "FTDISUPPORT := no" >> .features.tmp )
- 	@printf "Checking for FT232H support in libftdi... "
- 	@echo "$$FTDI_232H_TEST" >> .featuretest.c
--	@$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
-+	@$(CC) $(CPPFLAGS) $(CFLAGS) $(FEATURE_CFLAGS) $(LDFLAGS) .featuretest.c -o .featuretest$(EXEC_SUFFIX) $(FTDILIBS) $(LIBS) >/dev/null 2>&1 &&	\
- 		( echo "found."; echo "FT232H := yes" >> .features.tmp ) ||	\
- 		( echo "not found."; echo "FT232H := no" >> .features.tmp )
- endif
diff --git a/gnu/packages/patches/gnupg-fix-expired-test.patch b/gnu/packages/patches/gnupg-fix-expired-test.patch
new file mode 100644
index 0000000000..ac2564f50c
--- /dev/null
+++ b/gnu/packages/patches/gnupg-fix-expired-test.patch
@@ -0,0 +1,78 @@
+Fix a test that has an expiration date of 2016-09-17:
+
+https://bugs.gnupg.org/gnupg/issue2393
+
+Patch adapted from upstream source repository:
+
+https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=commit;h=e584d6468a2e72cd01e55f46104f9f96b56c0b66
+
+The patch has been altered by commenting out a diff that does not apply
+to the version of GnuPG that we are applying it to, 2.1.13. This is
+what the patch author refers to below with "This commit includes changes
+to the old test as well, for those who need to backport it." We keep the
+old test and comment out the new test.
+
+From e584d6468a2e72cd01e55f46104f9f96b56c0b66 Mon Sep 17 00:00:00 2001
+From: Justus Winter <justus@g10code.com>
+Date: Thu, 23 Jun 2016 17:24:23 +0200
+Subject: [PATCH] tests/openpgp: Fake the system time for the tofu test.
+
+The keys in the tofu test are set to expire on 2016-09-17.  Fake the
+system time for this test.
+
+This commit includes changes to the old test as well, for those who
+need to backport it.
+
+* tests/openpgp/gpg-agent.conf.tmpl: Drop trailing newlines.
+* tests/openpgp/tofu.scm: Fake system time.
+* tests/openpgp/tofu.test: Likewise.
+
+GnuPG-bug-id: 2393
+Signed-off-by: Justus Winter <justus@g10code.com>
+---
+ tests/openpgp/gpg-agent.conf.tmpl | 2 --
+ tests/openpgp/tofu.scm            | 4 +++-
+ tests/openpgp/tofu.test           | 3 +++
+ 3 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/tests/openpgp/gpg-agent.conf.tmpl b/tests/openpgp/gpg-agent.conf.tmpl
+index b3cb54f..70e1633 100644
+--- a/tests/openpgp/gpg-agent.conf.tmpl
++++ b/tests/openpgp/gpg-agent.conf.tmpl
+@@ -1,4 +1,2 @@
+ allow-preset-passphrase
+ no-grab
+-
+-
+#diff --git a/tests/openpgp/tofu.scm b/tests/openpgp/tofu.scm
+#index 24fa9df..38b6a0f 100755
+#--- a/tests/openpgp/tofu.scm
+#+++ b/tests/openpgp/tofu.scm
+#@@ -19,7 +19,9 @@
+# 
+# (load (with-path "defs.scm"))
+# 
+#-(define GPG `(,(tool 'gpg) --no-permission-warning)) ;; w/o --always-trust
+#+ ;; Redefine GPG without --always-trust and a fixed time.
+#+(define GPG `(,(tool 'gpg) --no-permission-warning
+#+	      --faked-system-time=1466684990))
+# (define GNUPGHOME (getenv "GNUPGHOME"))
+# (if (string=? "" GNUPGHOME)
+#     (error "GNUPGHOME not set"))
+diff --git a/tests/openpgp/tofu.test b/tests/openpgp/tofu.test
+index 18c1756..0d34af4 100755
+--- a/tests/openpgp/tofu.test
++++ b/tests/openpgp/tofu.test
+@@ -4,6 +4,9 @@
+ 
+ # set -x
+ 
++# Redefine GPG with a fixed time.
++GPG="$GPG --faked-system-time=1466684990"
++
+ KEYS="2183839A BC15C85A EE37CF96"
+ 
+ # Make sure $srcdir is set.
+-- 
+2.10.0
+
diff --git a/gnu/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch b/gnu/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch
new file mode 100644
index 0000000000..f399024f1d
--- /dev/null
+++ b/gnu/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch
@@ -0,0 +1,15 @@
+This patch replaces the environment variable "GTK_IM_MODULE" with
+"GUIX_GTK2_IM_MODULE_FILE" to prevent this version of GTK+ from loading input
+method modules for other major versions of GTK+.
+
+--- gtk+-2.24.30/gtk/gtkrc.c	2016-08-21 22:40:22.339660438 +0200
++++ gtk+-2.24.30/gtk/gtkrc.c	2016-08-23 10:11:11.080822710 +0200
+@@ -439,7 +439,7 @@
+ gchar *
+ gtk_rc_get_im_module_file (void)
+ {
+-  const gchar *var = g_getenv ("GTK_IM_MODULE_FILE");
++  const gchar *var = g_getenv ("GUIX_GTK2_IM_MODULE_FILE");
+   gchar *result = NULL;
+ 
+   if (var)
diff --git a/gnu/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch b/gnu/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch
new file mode 100644
index 0000000000..aa63a54402
--- /dev/null
+++ b/gnu/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch
@@ -0,0 +1,15 @@
+This patch replaces the environment variable "GTK_IM_MODULE" with
+"GUIX_GTK3_IM_MODULE_FILE" to prevent this version of GTK+ from loading input
+method modules for other major versions of GTK+.
+
+--- gtk+-3.20.3/gtk/deprecated/gtkrc.c	2016-08-21 22:40:48.168437905 +0200
++++ gtk+-3.20.3/gtk/deprecated/gtkrc.c	2016-08-23 10:12:09.097070097 +0200
+@@ -768,7 +768,7 @@
+ gchar *
+ gtk_rc_get_im_module_file (void)
+ {
+-  const gchar *var = g_getenv ("GTK_IM_MODULE_FILE");
++  const gchar *var = g_getenv ("GUIX_GTK3_IM_MODULE_FILE");
+   gchar *result = NULL;
+ 
+   if (var)
diff --git a/gnu/packages/patches/hydra-automake-1.15.patch b/gnu/packages/patches/hydra-automake-1.15.patch
deleted file mode 100644
index 91c7b9202b..0000000000
--- a/gnu/packages/patches/hydra-automake-1.15.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-This patch takes a slightly different approach to solving the issue reported
-at https://github.com/NixOS/hydra/issues/200.  This fix allows us to use
-Automake's parallel test harness.
-
---- source/configure.ac.orig	1969-12-31 18:00:01.000000000 -0600
-+++ source/configure.ac	2015-04-15 10:58:15.974679278 -0500
-@@ -33,7 +33,7 @@
- fi
- ])
- 
--NEED_PROG(perl, perl)
-+NEED_PROG([PERL], perl)
- 
- NEED_PROG([NIX_STORE_PROGRAM], [nix-store])
- 
---- source/tests/Makefile.am.orig	1969-12-31 18:00:01.000000000 -0600
-+++ source/tests/Makefile.am	2015-04-15 11:00:35.846682904 -0500
-@@ -1,19 +1,20 @@
--TESTS_ENVIRONMENT = \
--  BZR_HOME="$(abs_builddir)/data"			\
--  HYDRA_DBI="dbi:SQLite:db.sqlite"			\
--  HYDRA_DATA="$(abs_builddir)/data"			\
--  HYDRA_HOME="$(top_srcdir)/src"			\
--  HYDRA_CONFIG=						\
--  NIX_REMOTE=						\
--  GUIX_CONFIGURATION_DIRECTORY="$(abs_builddir)/nix/etc/nix"		\
--  NIX_STATE_DIR="$(abs_builddir)/nix/var/nix"		\
--  NIX_MANIFESTS_DIR="$(abs_builddir)/nix/var/nix/manifests"	\
--  NIX_STORE_DIR="$(abs_builddir)/nix/store"			\
--  NIX_LOG_DIR="$(abs_builddir)/nix/var/log/nix"		\
--  NIX_BUILD_HOOK=					\
--  PERL5LIB="$(srcdir):$(top_srcdir)/src/lib:$$PERL5LIB"	\
--  PATH=$(abs_top_srcdir)/src/script:$(abs_top_srcdir)/src/c:$$PATH \
--  perl -w
-+AM_TESTS_ENVIRONMENT = \
-+  BZR_HOME="$(abs_builddir)/data"; export BZR_HOME;	\
-+  HYDRA_DBI="dbi:SQLite:db.sqlite"; export HYDRA_DBI;	\
-+  HYDRA_DATA="$(abs_builddir)/data"; export HYDRA_DATA;	\
-+  HYDRA_HOME="$(top_srcdir)/src"; export HYDRA_HOME;	\
-+  HYDRA_CONFIG=; export HYDRA_CONFIG;			\
-+  NIX_REMOTE=; export NIX_REMOTE;			\
-+  GUIX_CONFIGURATION_DIRECTORY="$(abs_builddir)/nix/etc/nix"; export GUIX_CONFIGURATION_DIRECTORY; \
-+  NIX_STATE_DIR="$(abs_builddir)/nix/var/nix"; export NIX_STATE_DIR; \
-+  NIX_MANIFESTS_DIR="$(abs_builddir)/nix/var/nix/manifests"; export NIX_MANIFESTS_DIR; \
-+  NIX_STORE_DIR="$(abs_builddir)/nix/store"; export NIX_STORE_DIR; \
-+  NIX_LOG_DIR="$(abs_builddir)/nix/var/log/nix"; export NIX_LOG_DIR; \
-+  NIX_BUILD_HOOK=; export NIX_BUILD_HOOK;		\
-+  PERL5LIB="$(srcdir):$(top_srcdir)/src/lib:$$PERL5LIB"; export PERL5LIB; \
-+  PATH=$(abs_top_srcdir)/src/script:$(abs_top_srcdir)/src/c:$$PATH; export PATH;
-+LOG_COMPILER = $(PERL)
-+AM_LOG_FLAGS = -w
- 
- EXTRA_DIST = \
-   $(wildcard *.pm) \
-@@ -33,7 +34,7 @@
- check_SCRIPTS = db.sqlite repos
- 
- db.sqlite: $(top_srcdir)/src/sql/hydra-sqlite.sql
--	$(TESTS_ENVIRONMENT) $(top_srcdir)/src/script/hydra-init
-+	$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) $(top_srcdir)/src/script/hydra-init
- 
- repos: dirs
- 
diff --git a/gnu/packages/patches/jbig2dec-ignore-testtest.patch b/gnu/packages/patches/jbig2dec-ignore-testtest.patch
index 1bf8f7ad76..1efde8628c 100644
--- a/gnu/packages/patches/jbig2dec-ignore-testtest.patch
+++ b/gnu/packages/patches/jbig2dec-ignore-testtest.patch
@@ -1,14 +1,16 @@
 Do not run the "testtest script", it doesn't seem to do anything and reports
 failiute. TODO: Actually fix the test instead of ignoring it.
 
---- a/Makefile.in	2010-02-02 20:13:56.000000000 +0100
-+++ b/Makefile.in	2014-09-13 17:50:10.957816767 +0200
-@@ -181,7 +181,7 @@
- 
- MAINTAINERCLEANFILES = config_types.h.in
- 
--TESTS = test_sha1 test_jbig2dec.py test_huffman test_arith
-+TESTS = test_sha1 test_huffman test_arith
- 
- test_sha1_SOURCES = sha1.c sha1.h
- test_sha1_CFLAGS = -DTEST
+diff --git a/Makefile.in b/Makefile.in
+index 0573592..1a5de77 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -93,7 +93,7 @@ host_triplet = @host@
+ bin_PROGRAMS = jbig2dec$(EXEEXT)
+ noinst_PROGRAMS = test_sha1$(EXEEXT) test_huffman$(EXEEXT) \
+ 	test_arith$(EXEEXT)
+-TESTS = test_sha1$(EXEEXT) test_jbig2dec.py test_huffman$(EXEEXT) \
++TESTS = test_sha1$(EXEEXT) test_huffman$(EXEEXT) \
+ 	test_arith$(EXEEXT)
+ subdir = .
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
diff --git a/gnu/packages/patches/llvm-for-extempore.patch b/gnu/packages/patches/llvm-for-extempore.patch
new file mode 100644
index 0000000000..614682c6cb
--- /dev/null
+++ b/gnu/packages/patches/llvm-for-extempore.patch
@@ -0,0 +1,118 @@
+This patch to LLVM is required by the developers of the Extempore language.
+The following explanation was posted to the extemporelang@googlegroups.com
+mailing list:
+
+"There is an assumption in the parser that all definitions occur within the
+same compilation unit - i.e. the parser has local state about what has been
+parsed in this unit of work.  Extempore obviously does lots of little units
+rather than one big unit and this causes problems for named types that were
+defined in another unit - which they always are.  The patch simply checks the
+current module to see if the type has been previously defined, and intervenes
+appropriately if it has."
+
+Message-ID: <CAOjrPOqoreXuZo4ZpDBvHE7M_tgAR_V8Txq5JFjh1HnGRn2EsA@mail.gmail.com>
+
+--- llvm-3.7.1.src/include/llvm/MC/MCSectionCOFF.h	2015-04-11 12:11:45.000000000 +1000
++++ llvm-3.7.1.src/include/llvm/MC/MCSectionCOFF.h	2015-09-14 09:22:56.000000000 +1000
+@@ -16,7 +16,6 @@
+ 
+ #include "llvm/ADT/StringRef.h"
+ #include "llvm/MC/MCSection.h"
+-#include "llvm/Support/COFF.h"
+ 
+ namespace llvm {
+ class MCSymbol;
+
+--- llvm-3.7.1.src/lib/AsmParser/LLParser.cpp	2015-07-11 20:30:36.000000000 +1000
++++ llvm-3.7.1.src/lib/AsmParser/LLParser.cpp	2015-09-14 09:20:57.000000000 +1000
+@@ -1754,8 +1754,14 @@
+     // If the type hasn't been defined yet, create a forward definition and
+     // remember where that forward def'n was seen (in case it never is defined).
+     if (!Entry.first) {
+-      Entry.first = StructType::create(Context, Lex.getStrVal());
+-      Entry.second = Lex.getLoc();
++      // this here for extempore
++      if (M->getTypeByName(Lex.getStrVal())) {
++        Entry.first = M->getTypeByName(Lex.getStrVal());
++        Entry.second = SMLoc();
++      } else {
++        Entry.first = StructType::create(Context, Lex.getStrVal());
++        Entry.second = Lex.getLoc();
++      }
+     }
+     Result = Entry.first;
+     Lex.Lex();
+
+--- llvm-3.7.1.src/lib/CodeGen/TargetLoweringObjectFileImpl.cpp	2015-07-01 05:10:31.000000000 +1000
++++ llvm-3.7.1.src/lib/CodeGen/TargetLoweringObjectFileImpl.cpp	2015-09-14 09:23:40.000000000 +1000
+@@ -32,6 +32,7 @@
+ #include "llvm/MC/MCStreamer.h"
+ #include "llvm/MC/MCSymbolELF.h"
+ #include "llvm/MC/MCValue.h"
++#include "llvm/Support/COFF.h"
+ #include "llvm/Support/Dwarf.h"
+ #include "llvm/Support/ELF.h"
+ #include "llvm/Support/ErrorHandling.h"
+
+--- llvm-3.7.1.src/lib/ExecutionEngine/MCJIT/MCJIT.cpp	2015-07-31 02:31:16.000000000 +1000
++++ llvm-3.7.1.src/lib/ExecutionEngine/MCJIT/MCJIT.cpp	2015-09-14 09:21:28.000000000 +1000
+@@ -524,6 +524,17 @@
+         rv.IntVal = APInt(32, PF(ArgValues[0].IntVal.getZExtValue()));
+         return rv;
+       }
++      if (FTy->getNumParams() == 1 &&
++          RetTy->isVoidTy() &&
++          FTy->getParamType(0)->isPointerTy()) {
++        GenericValue rv;
++        //void (*PF)(char *) = (void(*)(char *))(intptr_t)FPtr;
++        //printf("are symbols available: %d\n",isSymbolSearchingDisabled());
++        void (*PF)(char *) = (void(*)(char *))FPtr;
++        char* mzone = (char*) GVTOP(ArgValues[0]);
++        PF(mzone);
++        return rv;
++      }      
+       break;
+     }
+   }
+
+--- llvm-3.7.1.src/lib/MC/MCContext.cpp	2015-06-23 21:31:32.000000000 +1000
++++ llvm-3.7.1.src/lib/MC/MCContext.cpp	2015-09-14 09:24:01.000000000 +1000
+@@ -23,6 +23,7 @@
+ #include "llvm/MC/MCSymbolCOFF.h"
+ #include "llvm/MC/MCSymbolELF.h"
+ #include "llvm/MC/MCSymbolMachO.h"
++#include "llvm/Support/COFF.h"
+ #include "llvm/Support/ELF.h"
+ #include "llvm/Support/ErrorHandling.h"
+ #include "llvm/Support/FileSystem.h"
+
+--- llvm-3.7.1.src/lib/MC/MCObjectFileInfo.cpp	2015-06-25 10:28:42.000000000 +1000
++++ llvm-3.7.1.src/lib/MC/MCObjectFileInfo.cpp	2015-09-14 09:24:17.000000000 +1000
+@@ -16,6 +16,7 @@
+ #include "llvm/MC/MCSectionCOFF.h"
+ #include "llvm/MC/MCSectionELF.h"
+ #include "llvm/MC/MCSectionMachO.h"
++#include "llvm/Support/COFF.h"
+ using namespace llvm;
+ 
+ static bool useCompactUnwind(const Triple &T) {
+
+--- llvm-3.7.1.src/lib/MC/MCSectionCOFF.cpp	2015-06-09 10:31:39.000000000 +1000
++++ llvm-3.7.1.src/lib/MC/MCSectionCOFF.cpp	2015-09-14 09:24:25.000000000 +1000
+@@ -11,6 +11,7 @@
+ #include "llvm/MC/MCAsmInfo.h"
+ #include "llvm/MC/MCContext.h"
+ #include "llvm/MC/MCSymbol.h"
++#include "llvm/Support/COFF.h"
+ #include "llvm/Support/raw_ostream.h"
+ using namespace llvm;
+ 
+--- llvm-3.7.1.src/lib/Target/X86/X86TargetObjectFile.cpp	2015-06-27 04:55:48.000000000 +1000
++++ llvm-3.7.1.src/lib/Target/X86/X86TargetObjectFile.cpp	2015-09-14 09:25:03.000000000 +1000
+@@ -16,6 +16,7 @@
+ #include "llvm/MC/MCSectionCOFF.h"
+ #include "llvm/MC/MCSectionELF.h"
+ #include "llvm/MC/MCValue.h"
++#include "llvm/Support/COFF.h"
+ #include "llvm/Support/Dwarf.h"
+ #include "llvm/Target/TargetLowering.h"
diff --git a/gnu/packages/patches/lua51-pkgconfig.patch b/gnu/packages/patches/lua51-pkgconfig.patch
new file mode 100644
index 0000000000..5b03adaaaa
--- /dev/null
+++ b/gnu/packages/patches/lua51-pkgconfig.patch
@@ -0,0 +1,101 @@
+Enables generating Lua's pkg-config file.
+
+http://lua-users.org/lists/lua-l/2015-03/msg00338.html
+
+--- a/Makefile	2016-08-16 19:44:27.363614964 +0200
++++ b/Makefile	2016-08-16 19:49:22.623070005 +0200
+@@ -13,6 +13,7 @@
+ INSTALL_BIN= $(INSTALL_TOP)/bin
+ INSTALL_INC= $(INSTALL_TOP)/include
+ INSTALL_LIB= $(INSTALL_TOP)/lib
++INSTALL_PC= $(INSTALL_LIB)/pkgconfig
+ INSTALL_MAN= $(INSTALL_TOP)/man/man1
+ #
+ # You probably want to make INSTALL_LMOD and INSTALL_CMOD consistent with
+@@ -41,9 +42,12 @@
+ PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris
+ 
+ # What to install.
+-TO_BIN= lua luac
++INTERPRETER= lua
++COMPILER= luac
++TO_BIN= $(INTERPRETER) $(COMPILER)
+ TO_INC= lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp
+ TO_LIB= liblua.a liblua.so liblua.so.${V}
++TO_PC= lua-$(V).pc
+ TO_MAN= lua.1 luac.1
+ 
+ # Lua version and release.
+@@ -52,17 +56,22 @@
+ 
+ all:	$(PLAT)
+ 
+-$(PLATS) clean:
++$(PLATS):
+ 	cd src && $(MAKE) $@ V=$(V) R=$(R)
+ 
++clean:
++	cd src && $(MAKE) $@
++	$(RM) $(TO_PC)
++
+ test:	dummy
+ 	src/lua test/hello.lua
+ 
+-install: dummy
+-	cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
++install: dummy $(TO_PC)
++	cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_PC) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
+ 	cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
+ 	cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
+ 	cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
++	cd src && $(INSTALL_DATA) ../$(TO_PC) $(INSTALL_PC)
+ 	cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN)
+ 
+ ranlib:
+@@ -95,6 +104,7 @@
+ 	@echo "INSTALL_BIN = $(INSTALL_BIN)"
+ 	@echo "INSTALL_INC = $(INSTALL_INC)"
+ 	@echo "INSTALL_LIB = $(INSTALL_LIB)"
++	@echo "INSTALL_PC = $(INSTALL_PC)"
+ 	@echo "INSTALL_MAN = $(INSTALL_MAN)"
+ 	@echo "INSTALL_LMOD = $(INSTALL_LMOD)"
+ 	@echo "INSTALL_CMOD = $(INSTALL_CMOD)"
+@@ -111,6 +121,7 @@
+ 	@echo "TO_BIN = $(TO_BIN)"
+ 	@echo "TO_INC = $(TO_INC)"
+ 	@echo "TO_LIB = $(TO_LIB)"
++	@echo "TO_PC = $(TO_PC)"
+ 	@echo "TO_MAN = $(TO_MAN)"
+ 
+ # echo config parameters as Lua code
+@@ -122,7 +133,29 @@
+ 	@$(MAKE) echo | grep = | sed -e 's/= /= "/' -e 's/$$/"/' #-e 's/""/nil/'
+ 	@echo "-- EOF"
+ 
++pc:
++	@echo 'prefix=$(INSTALL_TOP)'
++	@echo 'libdir=$(INSTALL_LIB)'
++	@echo 'includedir=$(INSTALL_INC)'
++	@echo 'bindir=$(INSTALL_BIN)'
++	@echo
++	@echo 'INSTALL_LMOD=$(INSTALL_LMOD)'
++	@echo 'INSTALL_CMOD=$(INSTALL_CMOD)'
++	@echo 'INTERPRETER=$${bindir}/$(INTERPRETER)'
++	@echo 'COMPILER=$${bindir}/$(COMPILER)'
++	@echo
++	@echo 'Name: Lua'
++	@echo 'Description: A powerful, fast, lightweight, embeddable scripting language'
++	@echo 'Version: $(R)'
++	@echo
++	@echo 'Libs: -L$${libdir} -llua -lm'
++	@echo 'Cflags: -I$${includedir}'
++
++pkg-config: $(TO_PC)
++$(TO_PC):
++	@$(MAKE) -s pc > $@
++
+ # list targets that do not create files (but not all makes understand .PHONY)
+-.PHONY: all $(PLATS) clean test install local none dummy echo pecho lecho
++.PHONY: all $(PLATS) clean test install local none dummy echo pecho lecho pkg-config
+ 
+ # (end of Makefile)
diff --git a/gnu/packages/patches/mupdf-build-with-openjpeg-2.1.patch b/gnu/packages/patches/mupdf-build-with-openjpeg-2.1.patch
new file mode 100644
index 0000000000..cd8136b701
--- /dev/null
+++ b/gnu/packages/patches/mupdf-build-with-openjpeg-2.1.patch
@@ -0,0 +1,38 @@
+Make it possible to build MuPDF with OpenJPEG 2.1, which is the latest
+release series and contains many important bug fixes.
+
+Patch adapted from Debian:
+
+https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=745246
+
+And related to this upstream commit:
+
+http://git.ghostscript.com/?p=mupdf.git;a=commit;h=f88bfe2e62dbadb96d4f52d7aa025f0a516078da
+
+diff --git a/source/fitz/load-jpx.c b/source/fitz/load-jpx.c
+index 6b92e5c..72dea50 100644
+--- a/source/fitz/load-jpx.c
++++ b/source/fitz/load-jpx.c
+@@ -1,13 +1,5 @@
+ #include "mupdf/fitz.h"
+ 
+-/* Without the definition of OPJ_STATIC, compilation fails on windows
+- * due to the use of __stdcall. We believe it is required on some
+- * linux toolchains too. */
+-#define OPJ_STATIC
+-#ifndef _MSC_VER
+-#define OPJ_HAVE_STDINT_H
+-#endif
+-
+ #include <openjpeg.h>
+ 
+ static void fz_opj_error_callback(const char *msg, void *client_data)
+@@ -117,7 +109,7 @@ fz_load_jpx(fz_context *ctx, unsigned char *data, int size, fz_colorspace *defcs
+ 	opj_stream_set_read_function(stream, fz_opj_stream_read);
+ 	opj_stream_set_skip_function(stream, fz_opj_stream_skip);
+ 	opj_stream_set_seek_function(stream, fz_opj_stream_seek);
+-	opj_stream_set_user_data(stream, &sb);
++	opj_stream_set_user_data(stream, &sb, NULL);
+ 	/* Set the length to avoid an assert */
+ 	opj_stream_set_user_data_length(stream, size);
+ 
diff --git a/gnu/packages/patches/mysql-fix-failing-test.patch b/gnu/packages/patches/mysql-fix-failing-test.patch
deleted file mode 100644
index 730d138c18..0000000000
--- a/gnu/packages/patches/mysql-fix-failing-test.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-Fix spurious test failure:
-https://bugs.mysql.com/bug.php?id=81868
-
-Copied from Fedora:
-https://pkgs.fedoraproject.org/cgit/rpms/community-mysql.git/diff/community-mysql-5.7.13-pfs-oom-unittest.patch?id=a51381c6f98b9cd6855bc89ba93398a949ef7098
-
-commit 6c23035b52284c2575f297311dfd0278bcbb0dd1
-Author: Christopher Powers <chris.powers@oracle.com>
-Date:   Mon May 2 19:43:31 2016 +0100
-
-    Bug#23186653 PERFORMANCE SCHEMA UNIT TESTS PFS_INSTR-OOM & PFS_INSTR_CLASS FAIL REGULARLY
-    
-    Two test cases pass on Windows but crash on Linux due to different init paths.
-    Now pass on both.
-
-diff --git a/storage/perfschema/unittest/pfs_instr-oom-t.cc b/storage/perfschema/unittest/pfs_instr-oom-t.cc
-index db74c9c..b6bc818 100644
---- a/storage/perfschema/unittest/pfs_instr-oom-t.cc
-+++ b/storage/perfschema/unittest/pfs_instr-oom-t.cc
-@@ -232,12 +232,14 @@ void test_oom()
-   ok(cond_2 == NULL, "oom (create cond)");
- 
-   /* Create file. */
--  stub_alloc_always_fails = false;
-   PFS_thread fake_thread;
-+  rc = init_instruments(&param);
-   fake_thread.m_filename_hash_pins= NULL;
-   init_file_hash(&param);
--  rc = init_instruments(&param);
--  ok(rc == 0, "instances init");
-+
-+  stub_alloc_always_fails = true;
-+  file_2 = find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
-+  ok(file_2 == NULL, "oom (create file)");
- 
-   stub_alloc_always_fails= false;
-   file_1= find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
-@@ -245,10 +247,6 @@ void test_oom()
-   release_file(file_1);
-   cleanup_instruments();
- 
--  stub_alloc_always_fails= true;
--  file_2= find_or_create_file(&fake_thread, &dummy_file_class, "dummy", 5, true);
--  ok(file_2 == NULL, "oom (create file)");
--
-   /* Create socket. */
-   stub_alloc_always_fails = false;
-   rc = init_instruments(&param);
-@@ -422,7 +420,7 @@ void do_all_tests()
- 
- int main(int, char **)
- {
--  plan(28);
-+  plan(32);
-   MY_INIT("pfs_instr-oom-t");
-   do_all_tests();
-   return 0;
diff --git a/gnu/packages/patches/onionshare-fix-install-paths.patch b/gnu/packages/patches/onionshare-fix-install-paths.patch
new file mode 100644
index 0000000000..721b89f04b
--- /dev/null
+++ b/gnu/packages/patches/onionshare-fix-install-paths.patch
@@ -0,0 +1,39 @@
+From 7afdd3366711a0c508bfb9323af8f4268ab77c9b Mon Sep 17 00:00:00 2001
+From: Efraim Flashner <efraim@flashner.co.il>
+Date: Thu, 21 Jul 2016 13:22:45 +0300
+Subject: [PATCH] patch
+
+---
+ setup.py | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index 8ae56fe..8b245c9 100644
+--- a/setup.py
++++ b/setup.py
+@@ -91,15 +91,15 @@ setup(
+     include_package_data=True,
+     scripts=['install/scripts/onionshare', 'install/scripts/onionshare-gui'],
+     data_files=[
+-        (os.path.join(sys.prefix, 'share/applications'), ['install/onionshare.desktop']),
+-        (os.path.join(sys.prefix, 'share/appdata'), ['install/onionshare.appdata.xml']),
+-        (os.path.join(sys.prefix, 'share/pixmaps'), ['install/onionshare80.xpm']),
+-        (os.path.join(sys.prefix, 'share/onionshare'), [
++        ('share/applications', ['install/onionshare.desktop']),
++        ('share/appdata', ['install/onionshare.appdata.xml']),
++        ('share/pixmaps', ['install/onionshare80.xpm']),
++        ('share/onionshare', [
+             'resources/version.txt',
+             'resources/wordlist.txt'
+         ]),
+-        (os.path.join(sys.prefix, 'share/onionshare/images'), images),
+-        (os.path.join(sys.prefix, 'share/onionshare/locale'), locale),
+-        (os.path.join(sys.prefix, 'share/onionshare/html'), html)
++        ('share/onionshare/images', images),
++        ('share/onionshare/locale', locale),
++        ('share/onionshare/html', html)
+     ]
+ )
+-- 
+2.9.1
+
diff --git a/gnu/packages/patches/openjpeg-CVE-2016-5157.patch b/gnu/packages/patches/openjpeg-CVE-2016-5157.patch
new file mode 100644
index 0000000000..f83bd9b511
--- /dev/null
+++ b/gnu/packages/patches/openjpeg-CVE-2016-5157.patch
@@ -0,0 +1,96 @@
+Fix CVE-2016-5157 (heap overflow in opj_dwt_interleave_v() allowing execution of
+arbitrary code):
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5157
+https://pdfium.googlesource.com/pdfium/+/b6befb2ed2485a3805cddea86dc7574510178ea9
+http://seclists.org/oss-sec/2016/q3/441
+
+Adapted from upstream source repository:
+
+https://github.com/uclouvain/openjpeg/commit/e078172b1c3f98d2219c37076b238fb759c751ea
+
+The final hunk of the patch, affecting
+'tests/nonregression/test_suite.ctest.in', had to be adjusted, since it referred
+to some context that is not yet provided by a tagged release.
+
+From c80286a4d573ad07ccc3c8b53289c38bb8256b30 Mon Sep 17 00:00:00 2001
+From: Leo Famulari <leo@famulari.name>
+Date: Fri, 9 Sep 2016 04:37:40 -0400
+Subject: [PATCH] CVE-2016-5157 adjusted to apply to 2.1.0.
+
+---
+ src/lib/openjp2/tcd.c                   | 11 +++++++++++
+ tests/compare_dump_files.c              | 14 +++++++-------
+ tests/nonregression/test_suite.ctest.in |  2 ++
+ 3 files changed, 20 insertions(+), 7 deletions(-)
+
+diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c
+index 12da05c..7a29c49 100644
+--- a/src/lib/openjp2/tcd.c
++++ b/src/lib/openjp2/tcd.c
+@@ -696,9 +696,20 @@ static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no,
+ 	l_tx0 = l_cp->tx0 + p * l_cp->tdx; /* can't be greater than l_image->x1 so won't overflow */
+ 	l_tile->x0 = (OPJ_INT32)opj_uint_max(l_tx0, l_image->x0);
+ 	l_tile->x1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, l_cp->tdx), l_image->x1);
++	/* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */
++	if ((l_tile->x0 < 0) || (l_tile->x1 <= l_tile->x0)) {
++		opj_event_msg(manager, EVT_ERROR, "Tile X coordinates are not supported\n");
++		return OPJ_FALSE;
++	}
+ 	l_ty0 = l_cp->ty0 + q * l_cp->tdy; /* can't be greater than l_image->y1 so won't overflow */
+ 	l_tile->y0 = (OPJ_INT32)opj_uint_max(l_ty0, l_image->y0);
+ 	l_tile->y1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, l_cp->tdy), l_image->y1);
++	/* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */
++	if ((l_tile->y0 < 0) || (l_tile->y1 <= l_tile->y0)) {
++		opj_event_msg(manager, EVT_ERROR, "Tile Y coordinates are not supported\n");
++		return OPJ_FALSE;
++	}
++	
+ 
+ 	/* testcase 1888.pdf.asan.35.988 */
+ 	if (l_tccp->numresolutions == 0) {
+diff --git a/tests/compare_dump_files.c b/tests/compare_dump_files.c
+index 946c92a..7d22270 100644
+--- a/tests/compare_dump_files.c
++++ b/tests/compare_dump_files.c
+@@ -118,10 +118,10 @@ int main(int argc, char **argv)
+   test_cmp_parameters inParam;
+   FILE *fbase=NULL, *ftest=NULL;
+   int same = 0;
+-  char lbase[256];
+-  char strbase[256];
+-  char ltest[256];
+-  char strtest[256];
++  char lbase[512];
++  char strbase[512];
++  char ltest[512];
++  char strtest[512];
+ 
+   if( parse_cmdline_cmp(argc, argv, &inParam) == 1 )
+     {
+@@ -154,9 +154,9 @@ int main(int argc, char **argv)
+ 
+   while (fgets(lbase, sizeof(lbase), fbase) && fgets(ltest,sizeof(ltest),ftest))
+     {
+-    int nbase = sscanf(lbase, "%255[^\r\n]", strbase);
+-    int ntest = sscanf(ltest, "%255[^\r\n]", strtest);
+-    assert( nbase != 255 && ntest != 255 );
++    int nbase = sscanf(lbase, "%511[^\r\n]", strbase);
++    int ntest = sscanf(ltest, "%511[^\r\n]", strtest);
++    assert( nbase != 511 && ntest != 511 );
+     if( nbase != 1 || ntest != 1 )
+       {
+       fprintf(stderr, "could not parse line from files\n" );
+diff --git a/tests/nonregression/test_suite.ctest.in b/tests/nonregression/test_suite.ctest.in
+index d393e6c..90cfa43 100644
+--- a/tests/nonregression/test_suite.ctest.in
++++ b/tests/nonregression/test_suite.ctest.in
+@@ -564,3 +564,5 @@ opj_decompress -i @INPUT_NR_PATH@/issue726.j2k -o @TEMP_PATH@/issue726.png
+ # issue 775
+ !opj_decompress -i @INPUT_NR_PATH@/issue775.j2k -o @TEMP_PATH@/issue775.png
+ !opj_decompress -i @INPUT_NR_PATH@/issue775-2.j2k -o @TEMP_PATH@/issue775-2.png
++#  issue 823 (yes, not a typo, test image is issue822)
++!opj_decompress -i @INPUT_NR_PATH@/issue822.jp2 -o @TEMP_PATH@/issue822.png
+-- 
+2.10.0
+
diff --git a/gnu/packages/patches/openjpeg-CVE-2016-7163.patch b/gnu/packages/patches/openjpeg-CVE-2016-7163.patch
new file mode 100644
index 0000000000..a4a24e4ff5
--- /dev/null
+++ b/gnu/packages/patches/openjpeg-CVE-2016-7163.patch
@@ -0,0 +1,71 @@
+Fix CVE-2016-7613 (Integer overflow in opj_pi_create_decode allowing execution
+of arbitrary code):
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-7163
+https://github.com/uclouvain/openjpeg/issues/826
+http://seclists.org/oss-sec/2016/q3/442
+
+Copied from upstream repository:
+
+https://github.com/uclouvain/openjpeg/commit/c16bc057ba3f125051c9966cf1f5b68a05681de4
+https://github.com/uclouvain/openjpeg/commit/ef01f18dfc6780b776d0674ed3e7415c6ef54d24
+
+From c16bc057ba3f125051c9966cf1f5b68a05681de4 Mon Sep 17 00:00:00 2001
+From: trylab <trylab@users.noreply.github.com>
+Date: Tue, 6 Sep 2016 13:55:49 +0800
+Subject: [PATCH] Fix an integer overflow issue (#809)
+
+Prevent an integer overflow issue in function opj_pi_create_decode of
+pi.c.
+---
+ src/lib/openjp2/pi.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/src/lib/openjp2/pi.c b/src/lib/openjp2/pi.c
+index cffad66..36e2ff0 100644
+--- a/src/lib/openjp2/pi.c
++++ b/src/lib/openjp2/pi.c
+@@ -1237,7 +1237,13 @@ opj_pi_iterator_t *opj_pi_create_decode(opj_image_t *p_image,
+ 	l_current_pi = l_pi;
+ 
+ 	/* memory allocation for include */
+-	l_current_pi->include = (OPJ_INT16*) opj_calloc((l_tcp->numlayers +1) * l_step_l, sizeof(OPJ_INT16));
++	/* prevent an integer overflow issue */
++	l_current_pi->include = 00;
++	if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U)))
++	{
++		l_current_pi->include = (OPJ_INT16*) opj_calloc((l_tcp->numlayers +1) * l_step_l, sizeof(OPJ_INT16));
++	}
++
+ 	if
+ 		(!l_current_pi->include)
+ 	{
+-- 
+2.10.0
+
+From ef01f18dfc6780b776d0674ed3e7415c6ef54d24 Mon Sep 17 00:00:00 2001
+From: Matthieu Darbois <mayeut@users.noreply.github.com>
+Date: Thu, 8 Sep 2016 07:34:46 +0200
+Subject: [PATCH] Cast to size_t before multiplication
+
+Need to cast to size_t before multiplication otherwise overflow check is useless.
+---
+ src/lib/openjp2/pi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/lib/openjp2/pi.c b/src/lib/openjp2/pi.c
+index 36e2ff0..809b33d 100644
+--- a/src/lib/openjp2/pi.c
++++ b/src/lib/openjp2/pi.c
+@@ -1241,7 +1241,7 @@ opj_pi_iterator_t *opj_pi_create_decode(opj_image_t *p_image,
+ 	l_current_pi->include = 00;
+ 	if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U)))
+ 	{
+-		l_current_pi->include = (OPJ_INT16*) opj_calloc((l_tcp->numlayers +1) * l_step_l, sizeof(OPJ_INT16));
++		l_current_pi->include = (OPJ_INT16*) opj_calloc((size_t)(l_tcp->numlayers + 1U) * l_step_l, sizeof(OPJ_INT16));
+ 	}
+ 
+ 	if
+-- 
+2.10.0
+
diff --git a/gnu/packages/patches/openssl-1.1.0-c-rehash-in.patch b/gnu/packages/patches/openssl-1.1.0-c-rehash-in.patch
new file mode 100644
index 0000000000..e3a982b7a8
--- /dev/null
+++ b/gnu/packages/patches/openssl-1.1.0-c-rehash-in.patch
@@ -0,0 +1,19 @@
+This patch removes the explicit reference to the 'perl' binary,
+such that OpenSSL does not retain a reference to Perl.
+
+The 'c_rehash' program is seldom used, but it is used nonetheless
+to create symbolic links to certificates, for instance in the 'nss-certs'
+package.
+
+diff --git a/tools/c_rehash.in b/tools/c_rehash.in
+index 2fef627..9d40eae 100644
+--- a/tools/c_rehash.in
++++ b/tools/c_rehash.in
+@@ -1,4 +1,6 @@
+-#!{- $config{hashbangperl} -}
++eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
++  & eval 'exec perl -wS "$0" $argv:q'
++    if 0;
+ 
+ # {- join("\n# ", @autowarntext) -}
+ # Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
diff --git a/gnu/packages/patches/p7zip-remove-unused-code.patch b/gnu/packages/patches/p7zip-remove-unused-code.patch
new file mode 100644
index 0000000000..f9c782b93e
--- /dev/null
+++ b/gnu/packages/patches/p7zip-remove-unused-code.patch
@@ -0,0 +1,959 @@
+diff --git a/C/Sha1.c b/C/Sha1.c
+index 55c1c63..48b4c5d 100644
+--- a/C/Sha1.c
++++ b/C/Sha1.c
+@@ -104,39 +104,6 @@ void Sha1_GetBlockDigest(CSha1 *p, const UInt32 *data, UInt32 *destDigest)
+   destDigest[4] = p->state[4] + e;
+ }
+ 
+-void Sha1_UpdateBlock_Rar(CSha1 *p, UInt32 *data, int returnRes)
+-{
+-  UInt32 a, b, c, d, e;
+-  UInt32 W[kNumW];
+-
+-  a = p->state[0];
+-  b = p->state[1];
+-  c = p->state[2];
+-  d = p->state[3];
+-  e = p->state[4];
+-  
+-  RX_15
+-
+-  RX_1_4(R0, R1, 15);
+-
+-  RX_20(R2, 20);
+-  RX_20(R3, 40);
+-  RX_20(R4, 60);
+-
+-  p->state[0] += a;
+-  p->state[1] += b;
+-  p->state[2] += c;
+-  p->state[3] += d;
+-  p->state[4] += e;
+-
+-  if (returnRes)
+-  {
+-    unsigned i;
+-    for (i = 0 ; i < SHA1_NUM_BLOCK_WORDS; i++)
+-      data[i] = W[kNumW - SHA1_NUM_BLOCK_WORDS + i];
+-  }
+-}
+-
+ #define Sha1_UpdateBlock(p) Sha1_GetBlockDigest(p, p->buffer, p->state)
+ 
+ void Sha1_Update(CSha1 *p, const Byte *data, size_t size)
+@@ -212,46 +179,6 @@ void Sha1_Update(CSha1 *p, const Byte *data, size_t size)
+   }
+ }
+ 
+-void Sha1_Update_Rar(CSha1 *p, Byte *data, size_t size /* , int rar350Mode */)
+-{
+-  int returnRes = False;
+-  
+-  unsigned pos = (unsigned)p->count & 0x3F;
+-  p->count += size;
+-
+-  while (size--)
+-  {
+-    unsigned pos2 = (pos & 3);
+-    UInt32 v = ((UInt32)*data++) << (8 * (3 - pos2));
+-    UInt32 *ref = &(p->buffer[pos >> 2]);
+-    pos++;
+-    if (pos2 == 0)
+-    {
+-      *ref = v;
+-      continue;
+-    }
+-    *ref |= v;
+-    
+-    if (pos == SHA1_BLOCK_SIZE)
+-    {
+-      pos = 0;
+-      Sha1_UpdateBlock_Rar(p, p->buffer, returnRes);
+-      if (returnRes)
+-      {
+-        unsigned i;
+-        for (i = 0; i < SHA1_NUM_BLOCK_WORDS; i++)
+-        {
+-          UInt32 d = p->buffer[i];
+-          Byte *prev = data + i * 4 - SHA1_BLOCK_SIZE;
+-          SetUi32(prev, d);
+-        }
+-      }
+-      // returnRes = rar350Mode;
+-      returnRes = True;
+-    }
+-  }
+-}
+-
+ void Sha1_Final(CSha1 *p, Byte *digest)
+ {
+   unsigned pos = (unsigned)p->count & 0x3F;
+diff --git a/C/Sha1.h b/C/Sha1.h
+index aa22ec3..9c45653 100644
+--- a/C/Sha1.h
++++ b/C/Sha1.h
+@@ -27,8 +27,6 @@ void Sha1_GetBlockDigest(CSha1 *p, const UInt32 *data, UInt32 *destDigest);
+ void Sha1_Update(CSha1 *p, const Byte *data, size_t size);
+ void Sha1_Final(CSha1 *p, Byte *digest);
+ 
+-void Sha1_Update_Rar(CSha1 *p, Byte *data, size_t size /* , int rar350Mode */);
+-
+ void Sha1_32_PrepareBlock(const CSha1 *p, UInt32 *block, unsigned size);
+ void Sha1_32_Update(CSha1 *p, const UInt32 *data, size_t size);
+ void Sha1_32_Final(CSha1 *p, UInt32 *digest);
+diff --git a/CPP/7zip/Archive/7z/7zUpdate.cpp b/CPP/7zip/Archive/7z/7zUpdate.cpp
+index a0571e7..43ad3e9 100644
+--- a/CPP/7zip/Archive/7z/7zUpdate.cpp
++++ b/CPP/7zip/Archive/7z/7zUpdate.cpp
+@@ -562,7 +562,7 @@ static int CompareEmptyItems(const unsigned *p1, const unsigned *p2, void *param
+ }
+ 
+ static const char *g_Exts =
+-  " 7z xz lzma ace arc arj bz tbz bz2 tbz2 cab deb gz tgz ha lha lzh lzo lzx pak rar rpm sit zoo"
++  " 7z xz lzma ace arc arj bz tbz bz2 tbz2 cab deb gz tgz ha lha lzh lzo lzx pak rpm sit zoo"
+   " zip jar ear war msi"
+   " 3gp avi mov mpeg mpg mpe wmv"
+   " aac ape fla flac la mp3 m4a mp4 ofr ogg pac ra rm rka shn swa tta wv wma wav"
+diff --git a/CPP/7zip/Bundles/Format7zFree/makefile.list b/CPP/7zip/Bundles/Format7zFree/makefile.list
+index da2056b..1dcf1a5 100644
+--- a/CPP/7zip/Bundles/Format7zFree/makefile.list
++++ b/CPP/7zip/Bundles/Format7zFree/makefile.list
+@@ -87,8 +87,6 @@ SRCS=\
+   ../../../../CPP/7zip/Archive/PeHandler.cpp \
+   ../../../../CPP/7zip/Archive/PpmdHandler.cpp \
+   ../../../../CPP/7zip/Archive/QcowHandler.cpp \
+-  ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp \
+-  ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp \
+   ../../../../CPP/7zip/Archive/RpmHandler.cpp \
+   ../../../../CPP/7zip/Archive/SplitHandler.cpp \
+   ../../../../CPP/7zip/Archive/SquashfsHandler.cpp \
+@@ -191,9 +189,6 @@ SRCS=\
+   ../../../../CPP/7zip/Crypto/MyAesReg.cpp \
+   ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp \
+   ../../../../CPP/7zip/Crypto/RandGen.cpp \
+-  ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp \
+-  ../../../../CPP/7zip/Crypto/Rar5Aes.cpp \
+-  ../../../../CPP/7zip/Crypto/RarAes.cpp \
+   ../../../../CPP/7zip/Crypto/WzAes.cpp \
+   ../../../../CPP/7zip/Crypto/ZipCrypto.cpp \
+   ../../../../CPP/7zip/Crypto/ZipStrong.cpp \
+@@ -485,10 +480,6 @@ PpmdHandler.o : ../../../../CPP/7zip/Archive/PpmdHandler.cpp
+ 	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/PpmdHandler.cpp
+ QcowHandler.o : ../../../../CPP/7zip/Archive/QcowHandler.cpp
+ 	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/QcowHandler.cpp
+-RarHandler.o : ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp
+-	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp
+-Rar5Handler.o : ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp
+-	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp
+ RpmHandler.o : ../../../../CPP/7zip/Archive/RpmHandler.cpp
+ 	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Archive/RpmHandler.cpp
+ SplitHandler.o : ../../../../CPP/7zip/Archive/SplitHandler.cpp
+@@ -693,12 +684,6 @@ Pbkdf2HmacSha1.o : ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp
+ 	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp
+ RandGen.o : ../../../../CPP/7zip/Crypto/RandGen.cpp
+ 	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/RandGen.cpp
+-Rar20Crypto.o : ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp
+-	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp
+-Rar5Aes.o : ../../../../CPP/7zip/Crypto/Rar5Aes.cpp
+-	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/Rar5Aes.cpp
+-RarAes.o : ../../../../CPP/7zip/Crypto/RarAes.cpp
+-	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/RarAes.cpp
+ WzAes.o : ../../../../CPP/7zip/Crypto/WzAes.cpp
+ 	$(CXX) $(CXXFLAGS) ../../../../CPP/7zip/Crypto/WzAes.cpp
+ ZipCrypto.o : ../../../../CPP/7zip/Crypto/ZipCrypto.cpp
+@@ -869,8 +854,6 @@ OBJS=\
+  PeHandler.o \
+  PpmdHandler.o \
+  QcowHandler.o \
+- RarHandler.o \
+- Rar5Handler.o \
+  RpmHandler.o \
+  SplitHandler.o \
+  SquashfsHandler.o \
+@@ -973,9 +956,6 @@ OBJS=\
+  MyAesReg.o \
+  Pbkdf2HmacSha1.o \
+  RandGen.o \
+- Rar20Crypto.o \
+- Rar5Aes.o \
+- RarAes.o \
+  WzAes.o \
+  ZipCrypto.o \
+  ZipStrong.o \
+diff --git a/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt b/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt
+index 61f41f9..adc7117 100644
+--- a/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt
++++ b/CPP/7zip/CMAKE/Format7zFree/CMakeLists.txt
+@@ -126,8 +126,6 @@ add_library(7z MODULE
+   "../../../../CPP/7zip/Archive/PeHandler.cpp"
+   "../../../../CPP/7zip/Archive/PpmdHandler.cpp"
+   "../../../../CPP/7zip/Archive/QcowHandler.cpp"
+-  "../../../../CPP/7zip/Archive/Rar/RarHandler.cpp"
+-  "../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp"
+   "../../../../CPP/7zip/Archive/RpmHandler.cpp"
+   "../../../../CPP/7zip/Archive/SplitHandler.cpp"
+   "../../../../CPP/7zip/Archive/SquashfsHandler.cpp"
+@@ -230,9 +228,6 @@ add_library(7z MODULE
+   "../../../../CPP/7zip/Crypto/MyAesReg.cpp"
+   "../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp"
+   "../../../../CPP/7zip/Crypto/RandGen.cpp"
+-  "../../../../CPP/7zip/Crypto/Rar20Crypto.cpp"
+-  "../../../../CPP/7zip/Crypto/Rar5Aes.cpp"
+-  "../../../../CPP/7zip/Crypto/RarAes.cpp"
+   "../../../../CPP/7zip/Crypto/WzAes.cpp"
+   "../../../../CPP/7zip/Crypto/ZipCrypto.cpp"
+   "../../../../CPP/7zip/Crypto/ZipStrong.cpp"
+diff --git a/CPP/7zip/Crypto/Sha1Cls.h b/CPP/7zip/Crypto/Sha1Cls.h
+index 71acbde..cde4a57 100644
+--- a/CPP/7zip/Crypto/Sha1Cls.h
++++ b/CPP/7zip/Crypto/Sha1Cls.h
+@@ -28,7 +28,6 @@ class CContext: public CContextBase
+ {
+ public:
+   void Update(const Byte *data, size_t size) throw() { Sha1_Update(&_s, data, size); }
+-  void UpdateRar(Byte *data, size_t size /* , bool rar350Mode */) throw() { Sha1_Update_Rar(&_s, data, size /* , rar350Mode ? 1 : 0 */); }
+   void Final(Byte *digest) throw() { Sha1_Final(&_s, digest); }
+ };
+ 
+diff --git a/CPP/7zip/Guid.txt b/CPP/7zip/Guid.txt
+index 7edab6e..cc22992 100644
+--- a/CPP/7zip/Guid.txt
++++ b/CPP/7zip/Guid.txt
+@@ -151,7 +151,6 @@ Handler GUIDs:
+ 
+   01 Zip
+   02 BZip2
+-  03 Rar
+   04 Arj
+   05 Z
+   06 Lzh
+@@ -168,7 +167,6 @@ Handler GUIDs:
+   C9 VDI
+   CA Qcow
+   CB GPT
+-  CC Rar5
+   CD IHex
+   CE Hxs
+   CF TE
+diff --git a/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro b/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro
+index afa36d4..93c45c7 100644
+--- a/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro
++++ b/CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro
+@@ -137,8 +137,6 @@ SOURCES +=  \
+   ../../../../CPP/7zip/Archive/PeHandler.cpp \
+   ../../../../CPP/7zip/Archive/PpmdHandler.cpp \
+   ../../../../CPP/7zip/Archive/QcowHandler.cpp \
+-  ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp \
+-  ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp \
+   ../../../../CPP/7zip/Archive/RpmHandler.cpp \
+   ../../../../CPP/7zip/Archive/SplitHandler.cpp \
+   ../../../../CPP/7zip/Archive/SquashfsHandler.cpp \
+@@ -241,9 +239,6 @@ SOURCES +=  \
+   ../../../../CPP/7zip/Crypto/MyAesReg.cpp \
+   ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp \
+   ../../../../CPP/7zip/Crypto/RandGen.cpp \
+-  ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp \
+-  ../../../../CPP/7zip/Crypto/Rar5Aes.cpp \
+-  ../../../../CPP/7zip/Crypto/RarAes.cpp \
+   ../../../../CPP/7zip/Crypto/WzAes.cpp \
+   ../../../../CPP/7zip/Crypto/ZipCrypto.cpp \
+   ../../../../CPP/7zip/Crypto/ZipStrong.cpp \
+diff --git a/CPP/7zip/QMAKE/all.pro b/CPP/7zip/QMAKE/all.pro
+index a565ba8..6668619 100644
+--- a/CPP/7zip/QMAKE/all.pro
++++ b/CPP/7zip/QMAKE/all.pro
+@@ -4,7 +4,6 @@ SUBDIRS = 7za \
+           7zr \
+           7z_ \
+           Format7zFree \
+-          Rar \
+           Lzham \
+           test_lib
+ 
+diff --git a/CPP/7zip/UI/Client7z/Client7z.cpp b/CPP/7zip/UI/Client7z/Client7z.cpp
+index d0eca6d..7f4e6e2 100644
+--- a/CPP/7zip/UI/Client7z/Client7z.cpp
++++ b/CPP/7zip/UI/Client7z/Client7z.cpp
+@@ -32,7 +32,7 @@ HINSTANCE g_hInstance = 0;
+ #endif
+ 
+ // Tou can find the list of all GUIDs in Guid.txt file.
+-// use another CLSIDs, if you want to support other formats (zip, rar, ...).
++// use another CLSIDs, if you want to support other formats (zip, ...).
+ // {23170F69-40C1-278A-1000-000110070000}
+ 
+ DEFINE_GUID(CLSID_CFormat7z,
+diff --git a/CPP/7zip/UI/Common/LoadCodecs.h b/CPP/7zip/UI/Common/LoadCodecs.h
+index ac9eeac..076bd1c 100644
+--- a/CPP/7zip/UI/Common/LoadCodecs.h
++++ b/CPP/7zip/UI/Common/LoadCodecs.h
+@@ -158,7 +158,6 @@ struct CArcInfoEx
+   void AddExts(const UString &ext, const UString &addExt);
+ 
+   bool IsSplit() const { return StringsAreEqualNoCase_Ascii(Name, "Split"); }
+-  // bool IsRar() const { return StringsAreEqualNoCase_Ascii(Name, "Rar"); }
+ 
+   CArcInfoEx():
+       Flags(0),
+diff --git a/CPP/7zip/UI/Common/OpenArchive.cpp b/CPP/7zip/UI/Common/OpenArchive.cpp
+index 7d5b0c4..88ea5ab 100644
+--- a/CPP/7zip/UI/Common/OpenArchive.cpp
++++ b/CPP/7zip/UI/Common/OpenArchive.cpp
+@@ -1063,7 +1063,6 @@ static const char * const k_Formats_with_simple_signuature[] =
+ {
+     "7z"
+   , "xz"
+-  , "rar"
+   , "bzip2"
+   , "gzip"
+   , "cab"
+@@ -1720,29 +1719,6 @@ HRESULT CArc::OpenStream2(const COpenOptions &op)
+         {
+           // signature search was here
+         }
+-        else if (extension.IsEqualTo("000") || extension.IsEqualTo("001"))
+-        {
+-          int i = FindFormatForArchiveType(op.codecs, orderIndices, "rar");
+-          if (i >= 0)
+-          {
+-            const size_t kBufSize = (1 << 10);
+-            byteBuffer.Alloc(kBufSize);
+-            size_t processedSize = kBufSize;
+-            RINOK(ReadStream(op.stream, byteBuffer, &processedSize));
+-            if (processedSize >= 16)
+-            {
+-              const Byte *buf = byteBuffer;
+-              const Byte kRarHeader[] = { 0x52 , 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00 };
+-              if (TestSignature(buf, kRarHeader, 7) && buf[9] == 0x73 && (buf[10] & 1) != 0)
+-              {
+-                orderIndices2.Add(orderIndices[i]);
+-                orderIndices[i] = -1;
+-                if (i >= (int)numFinded)
+-                  numFinded++;
+-              }
+-            }
+-          }
+-        }
+         else
+         {
+           const size_t kBufSize = (1 << 10);
+diff --git a/CPP/7zip/UI/FileManager/FM_rc.cpp b/CPP/7zip/UI/FileManager/FM_rc.cpp
+index 83578ed..034feed 100644
+--- a/CPP/7zip/UI/FileManager/FM_rc.cpp
++++ b/CPP/7zip/UI/FileManager/FM_rc.cpp
+@@ -821,8 +821,6 @@ REGISTER_STRINGTABLE(g_stringTable)
+ 
+ /////////////////////////////////////////////////////
+ 
+-#include "res/ParentFolder.h"
+-
+ 	SevenZipPanel::SevenZipPanel(MyFrame *frame, wxWindow *parent,int id,int panelIndex) :
+ 	       	wxPanel(parent,id) , m_frame(frame), _wList(0)
+ 	{
+@@ -840,7 +838,7 @@ REGISTER_STRINGTABLE(g_stringTable)
+ 		int sizes[] = {150, 250, 350, -1};
+ 		wxArrayString pathArray;
+ 		wxBoxSizer *pPathSizer = new wxBoxSizer(wxHORIZONTAL);
+-		m_pBmpButtonParentFolder = new wxBitmapButton(this, kParentFolderID, wxGetBitmapFromMemory(PARENT_FOLDER), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
++		m_pBmpButtonParentFolder = new wxBitmapButton(this, kParentFolderID, wxArtProvider::GetBitmap(wxART_GO_DIR_UP, wxART_TOOLBAR, wxDefaultSize), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW);
+ 		m_pComboBoxPath = new wxComboBox(this, _comboBoxID, wxEmptyString, wxDefaultPosition, wxSize(300,-1), pathArray, wxCB_DROPDOWN | wxCB_SORT );
+ 		pPathSizer->Add(m_pBmpButtonParentFolder, 0, wxALL|wxEXPAND, 0);
+ 		pPathSizer->Add(m_pComboBoxPath, 1, wxALL|wxEXPAND, 5);
+diff --git a/CPP/ANDROID/Format7zFree/jni/Android.mk b/CPP/ANDROID/Format7zFree/jni/Android.mk
+index 7c74e73..48cb4fa 100644
+--- a/CPP/ANDROID/Format7zFree/jni/Android.mk
++++ b/CPP/ANDROID/Format7zFree/jni/Android.mk
+@@ -91,8 +91,6 @@ LOCAL_SRC_FILES := \
+   ../../../../CPP/7zip/Archive/PeHandler.cpp \
+   ../../../../CPP/7zip/Archive/PpmdHandler.cpp \
+   ../../../../CPP/7zip/Archive/QcowHandler.cpp \
+-  ../../../../CPP/7zip/Archive/Rar/RarHandler.cpp \
+-  ../../../../CPP/7zip/Archive/Rar/Rar5Handler.cpp \
+   ../../../../CPP/7zip/Archive/RpmHandler.cpp \
+   ../../../../CPP/7zip/Archive/SplitHandler.cpp \
+   ../../../../CPP/7zip/Archive/SquashfsHandler.cpp \
+@@ -195,9 +193,6 @@ LOCAL_SRC_FILES := \
+   ../../../../CPP/7zip/Crypto/MyAesReg.cpp \
+   ../../../../CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp \
+   ../../../../CPP/7zip/Crypto/RandGen.cpp \
+-  ../../../../CPP/7zip/Crypto/Rar20Crypto.cpp \
+-  ../../../../CPP/7zip/Crypto/Rar5Aes.cpp \
+-  ../../../../CPP/7zip/Crypto/RarAes.cpp \
+   ../../../../CPP/7zip/Crypto/WzAes.cpp \
+   ../../../../CPP/7zip/Crypto/ZipCrypto.cpp \
+   ../../../../CPP/7zip/Crypto/ZipStrong.cpp \
+diff --git a/ChangeLog b/ChangeLog
+index daabd8e..f2a01d6 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -28,7 +28,6 @@ Version 16.00 (never published)
+       - 7z update bcj bugs were fixed.
+       - split (aaa.001) fixed
+       - iso loop fix
+-      - rar4 multivol -stdin kpidSize
+       - drag and drop 1<2.txt
+       - memory access violation fix
+ 
+@@ -80,11 +79,6 @@ Version 15.12 (never published)
+     - "There are no errors" string after "Test" operation inside archive.
+     - The bugs in LZMA SDK were fixed (but these bugs are not related directly to 7-Zip's code).
+ 
+-
+-  - From Windows version of 7-Zip 15.11 :
+-        - Some bugs were fixed.
+-        - 7-Zip 15.10 showed incorrect error message about missing volume for multivolume RAR archives.
+-
+    - ..../LZHAM added
+    
+ 
+@@ -104,9 +98,6 @@ Version 15.10 beta
+ 	  version (-m switch).
+     - Some bugs were fixed.
+       - extracting from solid wim archives worked incorrectly in some cases,
+-    - Also there are some minor changes.
+-      - 7-Zip can show the name of missing volume for multivolume RAR and VMDK archives.
+-      - Some internal changes with 7-Zip Benchmark.
+ 
+ Version 15.09 beta
+ ==================
+@@ -128,8 +119,6 @@ Version 15.08 beta
+ Version 15.07 beta
+ ==================
+ 
+-  - "bin/Codecs/Rar29.so" renamed to "bin/Codecs/Rar.so"
+-  
+   - support for cygwin 64 bits
+   
+   - support for cygwin 64 bits with asm
+@@ -153,15 +142,12 @@ Version 15.07 beta
+ 
+   - From Windows version of 7-zip 15.06 beta:
+ 
+-    - 7-Zip now can extract RAR5 archives.
+     - 7-Zip now doesn't sort files by type while adding to solid 7z archive.
+       new -mqs switch to sort files by type while adding to solid 7z archive.
+     - The BUG in 7-Zip File Manager was fixed:
+       The "Move" operation to open 7z archive didn't delete empty files.
+     - The BUG in 15.05 was fixed:
+       console version added some text to the end of stdout stream, is -so switch was used.
+-    - The BUG in 9.30 - 15.05 was fixed:
+-      7-Zip could not open multivolume sfx RAR archive.
+     - Some bugs were fixed.
+ 
+   - From Windows version of 7-zip 15.05 beta:
+@@ -214,9 +200,6 @@ Version 9.38
+   - bug #139 "password from commanline is visible in processes list"
+       Now the characters of the password are replaced with *.
+ 
+-  - From Windows version of 7-zip
+-     - bug#138 If you extract the password with # program crashes
+-       7z now supports long password in RAR 3 and 4.
+ 
+ 
+ 
+@@ -247,12 +230,6 @@ Version 9.22
+   - #3283518 : Asm/x{32,64}/7zCrcT8U.asm introduces executable stack
+ 
+ 
+-Version 9.20.1
+-==============
+-
+-  - #3211479 "p7zip 9.20 - "unsupported method" with RAR files - " fixed
+-    "install.sh" installs again "bin/Codecs/Rar29.so"
+-
+ Version 9.20
+ ============
+ 
+@@ -325,8 +302,6 @@ Version 9.13
+     - Some bugs were fixed.
+ 
+ 
+-  - #2863580 "Crash in Rar decoder on a corrupted file" fixed
+-
+   - #2860898 "Dereferencing a zero pointer in cab handler" fixed
+ 
+   - #2860679 "Division by zero in cab decoder" fixed
+@@ -455,7 +430,7 @@ Version 4.59 (never published)
+     - It's allowed to use -t switch for "list" and "extract" commands.
+     - Some bugs were fixed.
+ 
+-  - Bug : wrong timestamp for files extracted from .zip or .rar archives
++  - Bug : wrong timestamp for files extracted from .zip archives
+ 
+ 
+ Version 4.58
+@@ -468,8 +443,6 @@ Version 4.58
+         2) -mcu switch:  7-Zip uses UTF-8, if there are non-ASCII symbols.
+         3) -mcl switch:  7-Zip uses local code page.
+     - Now it's possible to store file creation time in 7z and ZIP archives (-mtc switch).
+-    - 7-Zip now can unpack multivolume RAR archives created with
+-      "old style volume names" scheme and names *.001, *.002, ...
+     - Now it's possible to use -mSW- and -mSW+ switches instead of -mSW=off and -mSW=on
+     - Some bugs were fixed.
+ 
+@@ -685,7 +658,7 @@ Version 4.44
+ 
+   - From Windows version of 7-zip 4.44 :
+     - 7za : Cab support
+-    - Speed optimizations for LZMA, Deflate, BZip2 and unRAR.
++    - Speed optimizations for LZMA, Deflate and BZip2.
+     - fix : now, updating a crypted header archive keeps the crypted header
+ 
+   - fixes in the help displayed by 7za/7z/7zr.
+@@ -805,8 +778,6 @@ Version 4.38
+ 
+   - patch #1465026 - Patch for install.sh for packagers
+ 
+-  - DosDateTimeToFileTime fixed (rar format)
+-
+   - contrib/VirtualFileSystemForMidnightCommander/u7z updated
+     (thank sgh_punk)
+ 
+@@ -923,8 +894,6 @@ Version 4.25
+     - Some bugs were fixed
+     - DOCS/MANUAL/exit_codes.htm added
+ 
+-  - new plugin for 7z : RAR format support (extracting only)
+-
+   - better dependencies in makefile
+ 
+ Version 4.23
+@@ -1112,9 +1081,6 @@ Version 4.10
+   - new port of 7za from the source of 7za 4.10Beta for Windows
+     => p7zip now work on big endian CPU.
+ 
+-  - 7z for Unix is not maintain anymore (because as the source of unrar plugin for 7z
+-    is not available, 7z is unless on Unix).
+-
+ Version 0.91
+ ============
+   - add support for FreeBSD 5.2.1
+diff --git a/DOC/License.txt b/DOC/License.txt
+index 0bcbe26..5b0dfaa 100644
+--- a/DOC/License.txt
++++ b/DOC/License.txt
+@@ -5,15 +5,6 @@
+ 
+   7-Zip Copyright (C) 1999-2016 Igor Pavlov.
+ 
+-  Licenses for files are:
+-
+-    1) CPP/7zip/Compress/Rar* files:  GNU LGPL + unRAR restriction
+-    2) All other files:  GNU LGPL
+-
+-  The GNU LGPL + unRAR restriction means that you must follow both 
+-  GNU LGPL rules and unRAR restriction rules.
+-
+-
+   GNU LGPL information
+   --------------------
+ 
+@@ -33,21 +24,5 @@
+     USA
+ 
+ 
+-  unRAR restriction
+-  -----------------
+-
+-    The decompression engine for RAR archives was developed using source 
+-    code of unRAR program.
+-    All copyrights to original unRAR code are owned by Alexander Roshal.
+-
+-    The license for original unRAR code has the following restriction:
+-
+-    The unRAR sources cannot be used to re-create the RAR compression algorithm, 
+-    which is proprietary. Distribution of modified unRAR sources in separate form 
+-    or as a part of other software is permitted, provided that it is clearly
+-    stated in the documentation and source comments that the code may
+-    not be used to develop a RAR (WinRAR) compatible archiver.
+-
+-
+   --
+   Igor Pavlov
+diff --git a/DOC/MANUAL/cmdline/switches/update.htm b/DOC/MANUAL/cmdline/switches/update.htm
+index 27385b1..0190fc1 100644
+--- a/DOC/MANUAL/cmdline/switches/update.htm
++++ b/DOC/MANUAL/cmdline/switches/update.htm
+@@ -139,7 +139,7 @@ someone in another time zone.</P>
+ <LI>UTC file systems: NTFS

+ <LI>UTC archive formats: .zip with -mtc switch, 7z, tar, gzip2, iso, wim

+ <LI>Local time file systems : FAT, FAT32

+-<LI>Local time archive formats : rar, zip, cab

++<LI>Local time archive formats : zip, cab

+ </UL>

+ 

+ <H4>Examples</H4>

+diff --git a/DOC/MANUAL/general/formats.htm b/DOC/MANUAL/general/formats.htm
+index 7996c5c..cd01bd6 100644
+--- a/DOC/MANUAL/general/formats.htm
++++ b/DOC/MANUAL/general/formats.htm
+@@ -47,7 +47,6 @@
+   <TR> <TD align="center">NSIS</TD> <TD></TD> <TD>nsis</TD> </TR>

+   <TR> <TD align="center">NTFS</TD> <TD></TD> <TD>ntfs img</TD> </TR>

+   <TR> <TD align="center">MBR</TD> <TD></TD> <TD>mbr</TD> </TR>

+-  <TR> <TD align="center">RAR</TD> <TD></TD> <TD>rar r00</TD> </TR>

+   <TR> <TD align="center">RPM</TD>  <TD></TD> <TD>rpm</TD></TR>

+   <TR> <TD align="center">PPMD</TD> <TD></TD> <TD>ppmd</TD> </TR>

+   <TR> <TD align="center">QCOW2</TD> <TD></TD> <TD>qcow qcow2 qcow2c</TD> </TR>

+diff --git a/DOC/Methods.txt b/DOC/Methods.txt
+index 1a1c54c..daa94e2 100644
+--- a/DOC/Methods.txt
++++ b/DOC/Methods.txt
+@@ -97,12 +97,6 @@ List of defined IDs
+    02 - 
+       02 - BZip2
+ 
+-   03 - [Rar]
+-      01 - Rar1
+-      02 - Rar2
+-      03 - Rar3
+-      05 - Rar5
+-
+    04 - [Arj]
+       01 - Arj(1,2,3)
+       02 - Arj4
+@@ -146,10 +140,6 @@ List of defined IDs
+       01 - [Zip]
+          01 - ZipCrypto (Main Zip crypto algo)
+ 
+-      03 - [RAR]
+-         02 - 
+-         03 - Rar29AES (AES-128 + modified SHA-1)
+-
+       07 - [7z]
+          01 - 7zAES (AES-256 + SHA-256)
+ 
+diff --git a/DOC/readme.txt b/DOC/readme.txt
+index 4a6998c..00591d4 100644
+--- a/DOC/readme.txt
++++ b/DOC/readme.txt
+@@ -9,30 +9,9 @@
+ License Info
+ ------------
+ 
+-7-Zip is free software distributed under the GNU LGPL 
+-(except for unRar code).
++7-Zip is free software distributed under the GNU LGPL.
+ read License.txt for more infomation about license.
+ 
+-Notes about unRAR license:
+-
+-Please check main restriction from unRar license:
+-
+-   2. The unRAR sources may be used in any software to handle RAR
+-      archives without limitations free of charge, but cannot be used
+-      to re-create the RAR compression algorithm, which is proprietary.
+-      Distribution of modified unRAR sources in separate form or as a
+-      part of other software is permitted, provided that it is clearly
+-      stated in the documentation and source comments that the code may
+-      not be used to develop a RAR (WinRAR) compatible archiver.
+-
+-In brief it means:
+-1) You can compile and use compiled files under GNU LGPL rules, since 
+-   unRAR license almost has no restrictions for compiled files.
+-   You can link these compiled files to LGPL programs.
+-2) You can fix bugs in source code and use compiled fixed version.
+-3) You can not use unRAR sources to re-create the RAR compression algorithm.
+-
+-
+ LZMA SDK
+ --------
+ 
+@@ -96,7 +75,6 @@ DOC                Documentation
+ ---
+   7zFormat.txt   - 7z format description
+   copying.txt    - GNU LGPL license
+-  unRarLicense.txt - License for unRAR part of source code
+   src-history.txt  - Sources history
+   Methods.txt    - Compression method IDs
+   readme.txt     - Readme file
+diff --git a/DOC/src-history.txt b/DOC/src-history.txt
+index 6b48c80..dda8057 100644
+--- a/DOC/src-history.txt
++++ b/DOC/src-history.txt
+@@ -188,8 +188,6 @@ HISTORY of the 7-Zip source code
+ - 7-Zip now has 128 MB dictionary limit for 32-bit version:
+   It's for speed optimization: kNumLogBits = 9 + sizeof(size_t) / 2;
+ - TAR: 'D' link flag support.
+-- 7-Zip now can unpack multivolume RAR archives created with 
+-  "old style volume names" scheme (-vn switch) and names *.001, *.002, ...
+ - Fixed bugs:
+   - 7-Zip FM could not copy / move files to root network folders like \\COMPNAME\FOLDERNAME\
+     In case of move it removed original files.
+@@ -200,8 +198,6 @@ HISTORY of the 7-Zip source code
+       7-zip tries to delete all extra fileds (except for WzAES).
+       And that code could hang.
+   -  7-Zip GUI didn't suggest BZip2 dictionary size used in previous run.
+-  -  If creation time stamp was included in .RAR archive, 7-zip used creation time stamp 
+-     as modification time stamp.
+ 
+ 4.58 alpha 2   2007-12-31
+ -------------------------
+@@ -251,7 +247,6 @@ HISTORY of the 7-Zip source code
+   stratup code, or you must add CPP/Common/CRC.cpp to your project.
+ - Method ID in .7z now is 63-bit integer (UInt64).
+ - Open error messages
+-- unRar 1.5 fixed
+ - unShrink fixed
+ - BUG of 4.43 beta and 4.44 beta was fixed.
+   7-Zip compressing to .zip in multi-threading mode didn't work in some cases.
+@@ -433,11 +428,6 @@ HISTORY of the 7-Zip source code
+     contains common resurces
+ 
+ 
+-2.30 Beta 19   2002-04-11
+--------------------------
+-- SDK/Archive/Rar/Handler.cpp
+-    supporting RAR29
+-
+ 2.30 Beta 18   2002-03-25
+ -------------------------
+ - SDK/Archive/Cab/MSZipDecoder.cpp
+diff --git a/GUI/Contents/Info.plist b/GUI/Contents/Info.plist
+index 71650e1..d60b262 100644
+--- a/GUI/Contents/Info.plist
++++ b/GUI/Contents/Info.plist
+@@ -311,24 +311,6 @@
+ 		<dict>
+ 			<key>CFBundleTypeExtensions</key>
+ 			<array>
+-				<string>rar</string>
+-				<string>RAR</string>
+-				<string>.r00</string>
+-			</array>
+-			<key>CFBundleTypeIconFile</key>
+-			<string>p7zip</string>
+-			<key>CFBundleTypeName</key>
+-			<string>Rar</string>
+-			<key>CFBundleTypeRole</key>
+-			<string>Viewer</string>
+-			<key>LSTypeIsPackage</key>
+-			<false/>
+-			<key>NSPersistentStoreTypeKey</key>
+-			<string>XML</string>
+-		</dict>
+-		<dict>
+-			<key>CFBundleTypeExtensions</key>
+-			<array>
+ 				<string>ace</string>
+ 				<string>ACE</string>
+ 				<string>.c00</string>
+diff --git a/README b/README
+index b76407f..c03917b 100644
+--- a/README
++++ b/README
+@@ -8,7 +8,7 @@ p7zip is a port of the Windows programs 7z.exe and 7za.exe provided by 7-zip.
+ 7-zip is a file archiver with the highest compression ratio.
+ Homepage : www.7-zip.org
+ 
+-  7z uses plugins (7z.so and Codecs/Rar.so) to handle archives.
++  7z uses plugins (7z.so) to handle archives.
+   7za is a stand-alone executable (7za handles less archive formats than 7z).
+   7zr is a light stand-alone executable that supports only 7z/LZMA/BCJ/BCJ2.
+ 
+@@ -63,7 +63,6 @@ BUILD :
+     make sfx      : to build bin/7zCon.sfx (7za can now create SFX archive)
+     make 7z       : to build bin/7z and its plugins :
+                           - "bin/7z.so" (GNU LGPL + AES code license)
+-                          - "bin/Codecs/Rar.so" (GNU LGPL + unRAR restriction)
+     make 7zr      : to build bin/7zr
+     make all      : to build bin/7za and bin/7zCon.sfx
+     make all2     : to build bin/7za, bin/7z (with its plugins) and bin/7zCon.sfx
+@@ -74,7 +73,6 @@ BUILD :
+ 
+     make 7zG      : to build bin/7zG and its plugins :
+                           - "bin/7z.so" (GNU LGPL + AES code license)
+-                          - "bin/Codecs/Rar.so" (GNU LGPL + unRAR restriction)
+     make test_7zG : to test bin/7zG (extracting, archiving, ...)
+ 
+ 
+diff --git a/Utils/bin_to_sources.py b/Utils/bin_to_sources.py
+index 1be72ec..7da359a 100644
+--- a/Utils/bin_to_sources.py
++++ b/Utils/bin_to_sources.py
+@@ -13,9 +13,6 @@ file0='Utils/file_7zCon_sfx.py'
+ dir0='CPP/7zip/UI/Console'
+ file0='Utils/file_7z.py'
+ 
+-dir0='CPP/7zip/Compress/Rar'
+-file0='Utils/file_Codecs_Rar_so.py'
+-
+ dir0='CPP/7zip/Bundles/Format7zFree'
+ file0='Utils/file_7z_so.py'
+ 
+diff --git a/Utils/file_7z_so.py b/Utils/file_7z_so.py
+index 7ca9fff..43edb87 100644
+--- a/Utils/file_7z_so.py
++++ b/Utils/file_7z_so.py
+@@ -111,8 +111,6 @@ files_cpp=[
+  'CPP/7zip/Archive/PeHandler.cpp',
+  'CPP/7zip/Archive/PpmdHandler.cpp',
+  'CPP/7zip/Archive/QcowHandler.cpp',
+- 'CPP/7zip/Archive/Rar/RarHandler.cpp',
+- 'CPP/7zip/Archive/Rar/Rar5Handler.cpp',
+  'CPP/7zip/Archive/RpmHandler.cpp',
+  'CPP/7zip/Archive/SplitHandler.cpp',
+  'CPP/7zip/Archive/SquashfsHandler.cpp',
+@@ -215,9 +213,6 @@ files_cpp=[
+  'CPP/7zip/Crypto/MyAesReg.cpp',
+  'CPP/7zip/Crypto/Pbkdf2HmacSha1.cpp',
+  'CPP/7zip/Crypto/RandGen.cpp',
+- 'CPP/7zip/Crypto/Rar20Crypto.cpp',
+- 'CPP/7zip/Crypto/Rar5Aes.cpp',
+- 'CPP/7zip/Crypto/RarAes.cpp',
+  'CPP/7zip/Crypto/WzAes.cpp',
+  'CPP/7zip/Crypto/ZipCrypto.cpp',
+  'CPP/7zip/Crypto/ZipStrong.cpp',
+diff --git a/Utils/generate.py b/Utils/generate.py
+index 132024a..62c0456 100755
+--- a/Utils/generate.py
++++ b/Utils/generate.py
+@@ -281,7 +281,6 @@ import file_7zr
+ import file_7zG
+ import file_7zFM
+ import file_7z_so
+-import file_Codecs_Rar_so
+ import file_Codecs_Lzham_so
+ import file_LzmaCon
+ import file_Client7z
+@@ -440,43 +439,6 @@ LOCAL_CFLAGS := -DANDROID_NDK  -fexceptions \
+ -I../../../include_windows
+ ''')
+ 
+-project_Codecs_Rar=Structure(name="Rar",name2="Rar",
+-	type=TYPE_DLL,
+-	need_AES=False,
+-	includedirs=includedirs_7za,
+-	defines=[ "EXTERNAL_CODECS", "_FILE_OFFSET_BITS=64", "_LARGEFILE_SOURCE", "_REENTRANT", "ENV_UNIX", "BREAK_HANDLER", "UNICODE", "_UNICODE", "UNIX_USE_WIN_FILE" ],
+-	files_c=file_Codecs_Rar_so.files_c,
+-	files_cpp=file_Codecs_Rar_so.files_cpp,
+-	cmake_end='''
+-
+-find_library(DL_LIB dl)
+-
+-link_directories(${DL_LIB_PATH})
+-
+-IF(APPLE)
+-   TARGET_LINK_LIBRARIES(Rar ${COREFOUNDATION_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
+-ELSE(APPLE)
+-  IF(HAVE_PTHREADS)
+-   TARGET_LINK_LIBRARIES(Rar ${CMAKE_THREAD_LIBS_INIT} dl)
+-  ENDIF(HAVE_PTHREADS)
+-ENDIF(APPLE)
+-
+-''',
+-android_header=r'''
+-LOCAL_CFLAGS := -DANDROID_NDK  -fexceptions \
+-	-DNDEBUG -D_REENTRANT -DENV_UNIX \
+-	-DEXTERNAL_CODECS \
+-	-DBREAK_HANDLER \
+-	-DUNICODE -D_UNICODE -DUNIX_USE_WIN_FILE \
+-	-I../../../Windows \
+-	-I../../../Common \
+-	-I../../../../C \
+--I../../../myWindows \
+--I../../../ \
+--I../../../include_windows
+-''')
+-
+-
+ 
+ project_Codecs_Lzham=Structure(name="Lzham",name2="Lzham",
+ 	type=TYPE_DLL,
+@@ -762,7 +724,6 @@ generate_makefile_list('../CPP/7zip/Bundles/Alone/makefile.list',project_7za)
+ generate_makefile_list('../CPP/7zip/Bundles/Alone7z/makefile.list',project_7zr)
+ generate_makefile_list('../CPP/7zip/UI/Console/makefile.list',project_7z)
+ generate_makefile_list('../CPP/7zip/Bundles/Format7zFree/makefile.list',project_Format7zFree)
+-generate_makefile_list('../CPP/7zip/Compress/Rar/makefile.list',project_Codecs_Rar,'../../../../bin/Codecs')
+ generate_makefile_list('../CPP/7zip/Compress/Lzham/makefile.list',project_Codecs_Lzham,'../../../../bin/Codecs')
+ generate_makefile_list('../CPP/7zip/Bundles/SFXCon/makefile.list',project_7zCon_sfx)
+ generate_makefile_list('../CPP/7zip/UI/GUI/makefile.list',project_7zG)
+@@ -776,7 +737,6 @@ generate_pro('../CPP/7zip/QMAKE/7za/7za.pro',project_7za)
+ generate_pro('../CPP/7zip/QMAKE/7zr/7zr.pro',project_7zr)
+ generate_pro('../CPP/7zip/QMAKE/7z_/7z_.pro',project_7z)
+ generate_pro('../CPP/7zip/QMAKE/Format7zFree/Format7zFree.pro',project_Format7zFree)
+-generate_pro('../CPP/7zip/QMAKE/Rar/Rar.pro',project_Codecs_Rar)
+ generate_pro('../CPP/7zip/QMAKE/Lzham/Lzham.pro',project_Codecs_Lzham)
+ 
+ generate_premake4('../CPP/7zip/PREMAKE/premake4.lua',project_7za)
+diff --git a/contrib/qnx630sp3/qnx630sp3-shared b/contrib/qnx630sp3/qnx630sp3-shared
+index 6f5481f..ea07114 100644
+--- a/contrib/qnx630sp3/qnx630sp3-shared
++++ b/contrib/qnx630sp3/qnx630sp3-shared
+@@ -8,7 +8,7 @@ mv ./bin/7z ../${BIN} && mv ./bin/7za ../${BIN} && mv ./bin/7zr ../${BIN} && mv
+ make clean && \
+ cp makefile.qnx_shared.so makefile.machine && \
+ make 7z && \
+-mv ./bin/7z.so ../${BIN} && mv ./bin/Codecs/Rar.so ../${BIN}/Codecs && \
++mv ./bin/7z.so ../${BIN} && \
+ make clean && \
+ mv makefile.machine.bak makefile.machine
+ echo "All done - look for binaries in ../${BIN}"
+diff --git a/makefile b/makefile
+index 745c8ed..f8e8e33 100644
+--- a/makefile
++++ b/makefile
+@@ -31,7 +31,6 @@ depend:
+ 	$(MAKE) -C CPP/7zip/UI/Client7z           depend
+ 	$(MAKE) -C CPP/7zip/UI/Console            depend
+ 	$(MAKE) -C CPP/7zip/Bundles/Format7zFree  depend
+-	$(MAKE) -C CPP/7zip/Compress/Rar          depend
+ 	$(MAKE) -C CPP/7zip/UI/GUI                depend
+ 	$(MAKE) -C CPP/7zip/UI/FileManager        depend
+ 
+@@ -42,7 +41,6 @@ sfx: common
+ common7z:common
+ 	$(MKDIR) bin/Codecs
+ 	$(MAKE) -C CPP/7zip/Bundles/Format7zFree all
+-	$(MAKE) -C CPP/7zip/Compress/Rar         all
+ 
+ lzham:common
+ 	$(MKDIR) bin/Codecs
+@@ -67,7 +65,6 @@ clean_C:
+ 	$(MAKE) -C CPP/7zip/UI/FileManager       clean
+ 	$(MAKE) -C CPP/7zip/UI/GUI               clean
+ 	$(MAKE) -C CPP/7zip/Bundles/Format7zFree clean
+-	$(MAKE) -C CPP/7zip/Compress/Rar         clean
+ 	$(MAKE) -C CPP/7zip/Compress/Lzham       clean
+ 	$(MAKE) -C CPP/7zip/Bundles/LzmaCon      clean2
+ 	$(MAKE) -C CPP/7zip/Bundles/AloneGCOV    clean
+diff --git a/makefile.oldmake b/makefile.oldmake
+index afc681c..690af08 100644
+--- a/makefile.oldmake
++++ b/makefile.oldmake
+@@ -31,7 +31,6 @@ depend:
+ 	cd CPP/7zip/UI/Client7z           ; $(MAKE) depend
+ 	cd CPP/7zip/UI/Console            ; $(MAKE) depend
+ 	cd CPP/7zip/Bundles/Format7zFree  ; $(MAKE) depend
+-	cd CPP/7zip/Compress/Rar          ; $(MAKE) depend
+ 	cd CPP/7zip/UI/GUI                ; $(MAKE) depend
+ 	cd CPP/7zip/UI/FileManager        ; $(MAKE) depend
+ 
+@@ -42,7 +41,6 @@ sfx: common
+ common7z:common
+ 	$(MKDIR) bin/Codecs
+ 	cd CPP/7zip/Bundles/Format7zFree ; $(MAKE) all
+-	cd CPP/7zip/Compress/Rar         ; $(MAKE) all
+ 
+ lzham:common
+ 	$(MKDIR) bin/Codecs
+@@ -67,7 +65,6 @@ clean_C:
+ 	cd CPP/7zip/UI/FileManager       ; $(MAKE) clean
+ 	cd CPP/7zip/UI/GUI               ; $(MAKE) clean
+ 	cd CPP/7zip/Bundles/Format7zFree ; $(MAKE) clean
+-	cd CPP/7zip/Compress/Rar         ; $(MAKE) clean
+ 	cd CPP/7zip/Compress/Lzham       ; $(MAKE) clean
+ 	cd CPP/7zip/Bundles/LzmaCon      ; $(MAKE) clean2
+ 	cd CPP/7zip/Bundles/AloneGCOV    ; $(MAKE) clean
+diff --git a/makefile.qnx_shared.so b/makefile.qnx_shared.so
+index abd1caf..cff5485 100644
+--- a/makefile.qnx_shared.so
++++ b/makefile.qnx_shared.so
+@@ -1,5 +1,5 @@
+ ###################################################
+-# makefile.machine for "7z.so , Codecs/Rar.so" :
++# makefile.machine for "7z.so" :
+ # tested with p7zip-4.47_beta on qnx-6.3.0 sp3 x86 target
+ 
+ OPTFLAGS=-O -s
diff --git a/gnu/packages/patches/plink-endian-detection.patch b/gnu/packages/patches/plink-endian-detection.patch
new file mode 100644
index 0000000000..4d6185512f
--- /dev/null
+++ b/gnu/packages/patches/plink-endian-detection.patch
@@ -0,0 +1,30 @@
+This patch is borrowed from Debian's patches for plink
+
+Author: Peter Green <plugwash@p10link.net>
+Puropose: Fallback to endian.h if all else fails on 64bit machines
+Closes: #528659
+Forwarded: Shaun Purcell <plink@chgr.mgh.harvard.edu>
+License: same as plink itself.
+===================================================================
+--- plink-1.06.orig/Rsrv.h	2009-05-15 03:35:29.000000000 +0100
++++ plink-1.06/Rsrv.h	2009-05-15 03:35:41.000000000 +0100
+@@ -313,7 +313,18 @@
+ #define __BIG_ENDIAN__ 1
+ #define SWAPEND 1
+ #elif ! defined Win32 /* Windows is little-endian is most cases, anywhere else we're stuck */
+-#error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ."
++  //try endian.h before we finally bail out
++  #include <endian.h>
++  #if __BYTE_ORDER == __LITTLE_ENDIAN
++    #warning using little endian based on information from endian.h
++    #define __LITTLE_ENDIAN__ 1
++  #elif __BYTE_ORDER == __BIG_ENDIAN
++    #warning using big endian based on information from endian.h
++    #define __BIG_ENDIAN__ 1
++    #define SWAPEND 1
++  #else    
++    #error "Cannot determine endianness. Make sure config.h is included or __{BIG|LITTLE}_ENDIAN__ is defined ."
++  #endif    
+ #endif
+ 
+ /* FIXME: all the mess below needs more efficient implementation - the current one is so messy to work around alignment problems on some platforms like Sun and HP 9000 */
diff --git a/gnu/packages/patches/python-django-fix-testcase.patch b/gnu/packages/patches/python-django-fix-testcase.patch
new file mode 100644
index 0000000000..4c1f9806d7
--- /dev/null
+++ b/gnu/packages/patches/python-django-fix-testcase.patch
@@ -0,0 +1,42 @@
+From 24123c31362b5f3783d84d133c160e9fe16805fe Mon Sep 17 00:00:00 2001
+From: Tim Graham <timograham@gmail.com>
+Date: Mon, 1 Aug 2016 15:40:46 -0400
+Subject: [PATCH] Fixed admin_utils test failures due to translation updates.
+
+https://github.com/django/django/commit/24123c31362b5f3783d84d133c160e9fe16805fe
+
+---
+ tests/admin_utils/test_logentry.py | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/tests/admin_utils/test_logentry.py b/tests/admin_utils/test_logentry.py
+index 7798373..8259bf0 100644
+--- a/tests/admin_utils/test_logentry.py
++++ b/tests/admin_utils/test_logentry.py
+@@ -59,7 +59,7 @@ class LogEntryTests(TestCase):
+         logentry = LogEntry.objects.filter(content_type__model__iexact='article').latest('id')
+         self.assertEqual(logentry.get_change_message(), 'Changed title and hist.')
+         with translation.override('fr'):
+-            self.assertEqual(logentry.get_change_message(), 'Modification de title et hist.')
++            self.assertEqual(logentry.get_change_message(), 'Title et hist modifié(s).')
+ 
+         add_url = reverse('admin:admin_utils_article_add')
+         post_data['title'] = 'New'
+@@ -117,11 +117,12 @@ class LogEntryTests(TestCase):
+             'Changed domain. Added article "Article object". '
+             'Changed title for article "Article object". Deleted article "Article object".'
+         )
++
+         with translation.override('fr'):
+             self.assertEqual(
+                 logentry.get_change_message(),
+-                'Modification de domain. Article « Article object » ajouté. '
+-                'Modification de title pour l\'objet article « Article object ». Article « Article object » supprimé.'
++                "Domain modifié(s). Article « Article object » ajouté. "
++                "Title modifié(s) pour l'objet article « Article object ». Article « Article object » supprimé."
+             )
+ 
+     def test_logentry_get_edited_object(self):
+-- 
+2.7.4
+
diff --git a/gnu/packages/patches/slock-CVE-2016-6866.patch b/gnu/packages/patches/slock-CVE-2016-6866.patch
new file mode 100644
index 0000000000..2f94b8c1a9
--- /dev/null
+++ b/gnu/packages/patches/slock-CVE-2016-6866.patch
@@ -0,0 +1,51 @@
+Fix CVE-2016-6866.
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6866
+https://security-tracker.debian.org/tracker/CVE-2016-6866
+
+Copied from upstream source repository:
+http://git.suckless.org/slock/commit/?id=d8bec0f6fdc8a246d78cb488a0068954b46fcb29
+
+From d8bec0f6fdc8a246d78cb488a0068954b46fcb29 Mon Sep 17 00:00:00 2001
+From: Markus Teich <markus.teich@stusta.mhn.de>
+Date: Tue, 30 Aug 2016 22:59:06 +0000
+Subject: fix CVE-2016-6866
+
+---
+diff --git a/slock.c b/slock.c
+index 847b328..8ed59ca 100644
+--- a/slock.c
++++ b/slock.c
+@@ -123,7 +123,7 @@ readpw(Display *dpy)
+ readpw(Display *dpy, const char *pws)
+ #endif
+ {
+-	char buf[32], passwd[256];
++	char buf[32], passwd[256], *encrypted;
+ 	int num, screen;
+ 	unsigned int len, color;
+ 	KeySym ksym;
+@@ -159,7 +159,11 @@ readpw(Display *dpy, const char *pws)
+ #ifdef HAVE_BSD_AUTH
+ 				running = !auth_userokay(getlogin(), NULL, "auth-slock", passwd);
+ #else
+-				running = !!strcmp(crypt(passwd, pws), pws);
++				errno = 0;
++				if (!(encrypted = crypt(passwd, pws)))
++					fprintf(stderr, "slock: crypt: %s\n", strerror(errno));
++				else
++					running = !!strcmp(encrypted, pws);
+ #endif
+ 				if (running) {
+ 					XBell(dpy, 100);
+@@ -312,6 +316,8 @@ main(int argc, char **argv) {
+ 
+ #ifndef HAVE_BSD_AUTH
+ 	pws = getpw();
++	if (strlen(pws) < 2)
++		die("slock: failed to get user password hash.\n");
+ #endif
+ 
+ 	if (!(dpy = XOpenDisplay(NULL)))
+--
+cgit v0.9.0.3-65-g4555
diff --git a/gnu/packages/patches/steghide-fixes.patch b/gnu/packages/patches/steghide-fixes.patch
new file mode 100644
index 0000000000..4e7f447f9a
--- /dev/null
+++ b/gnu/packages/patches/steghide-fixes.patch
@@ -0,0 +1,71 @@
+--- steghide-0.5.1/src/AuData.h
++++ steghide-0.5.1/src/AuData.h
+@@ -26,22 +26,22 @@
+ 
+ // AuMuLawAudioData
+ typedef AudioDataImpl<AuMuLaw,BYTE> AuMuLawAudioData ;
+-inline BYTE AuMuLawAudioData::readValue (BinaryIO* io) const { return (io->read8()) ; }
+-inline void AuMuLawAudioData::writeValue (BinaryIO* io, BYTE v) const { io->write8(v) ; }
++template<> inline BYTE AuMuLawAudioData::readValue (BinaryIO* io) const { return (io->read8()) ; }
++template<> inline void AuMuLawAudioData::writeValue (BinaryIO* io, BYTE v) const { io->write8(v) ; }
+ 
+ // AuPCM8AudioData
+ typedef AudioDataImpl<AuPCM8,SBYTE> AuPCM8AudioData ;
+-inline SBYTE AuPCM8AudioData::readValue (BinaryIO* io) const { return ((SBYTE) io->read8()) ; }
+-inline void AuPCM8AudioData::writeValue (BinaryIO* io, SBYTE v) const { io->write8((BYTE) v) ; }
++template<> inline SBYTE AuPCM8AudioData::readValue (BinaryIO* io) const { return ((SBYTE) io->read8()) ; }
++template<> inline void AuPCM8AudioData::writeValue (BinaryIO* io, SBYTE v) const { io->write8((BYTE) v) ; }
+ 
+ // AuPCM16AudioData
+ typedef AudioDataImpl<AuPCM16,SWORD16> AuPCM16AudioData ;
+-inline SWORD16 AuPCM16AudioData::readValue (BinaryIO* io) const { return ((SWORD16) io->read16_be()) ; }
+-inline void AuPCM16AudioData::writeValue (BinaryIO* io, SWORD16 v) const { io->write16_be((UWORD16) v) ; }
++template<> inline SWORD16 AuPCM16AudioData::readValue (BinaryIO* io) const { return ((SWORD16) io->read16_be()) ; }
++template<> inline void AuPCM16AudioData::writeValue (BinaryIO* io, SWORD16 v) const { io->write16_be((UWORD16) v) ; }
+ 
+ // AuPCM32AudioData
+ typedef AudioDataImpl<AuPCM32,SWORD32> AuPCM32AudioData ;
+-inline SWORD32 AuPCM32AudioData::readValue (BinaryIO* io) const { return ((SWORD32) io->read32_be()) ; }
+-inline void AuPCM32AudioData::writeValue (BinaryIO* io, SWORD32 v) const { io->write32_be((UWORD32) v) ; }
++template<> inline SWORD32 AuPCM32AudioData::readValue (BinaryIO* io) const { return ((SWORD32) io->read32_be()) ; }
++template<> inline void AuPCM32AudioData::writeValue (BinaryIO* io, SWORD32 v) const { io->write32_be((UWORD32) v) ; }
+ 
+ #endif // ndef SH_AUDATA_H
+--- steghide-0.5.1/src/AuSampleValues.cc
++++ steghide-0.5.1/src/AuSampleValues.cc
+@@ -21,17 +21,17 @@
+ #include "AuSampleValues.h"
+ 
+ // AuMuLawSampleValue
+-const BYTE AuMuLawSampleValue::MinValue = 0 ;
+-const BYTE AuMuLawSampleValue::MaxValue = BYTE_MAX ;
++template<> const BYTE AuMuLawSampleValue::MinValue = 0 ;
++template<> const BYTE AuMuLawSampleValue::MaxValue = BYTE_MAX ;
+ 
+ // AuPCM8SampleValue
+-const SBYTE AuPCM8SampleValue::MinValue = SBYTE_MIN ;
+-const SBYTE AuPCM8SampleValue::MaxValue = SBYTE_MAX ;
++template<> const SBYTE AuPCM8SampleValue::MinValue = SBYTE_MIN ;
++template<> const SBYTE AuPCM8SampleValue::MaxValue = SBYTE_MAX ;
+ 
+ // AuPCM16SampleValue
+-const SWORD16 AuPCM16SampleValue::MinValue = SWORD16_MIN ;
+-const SWORD16 AuPCM16SampleValue::MaxValue = SWORD16_MAX ;
++template<> const SWORD16 AuPCM16SampleValue::MinValue = SWORD16_MIN ;
++template<> const SWORD16 AuPCM16SampleValue::MaxValue = SWORD16_MAX ;
+ 
+ // AuPCM32SampleValue
+-const SWORD32 AuPCM32SampleValue::MinValue = SWORD32_MIN ;
+-const SWORD32 AuPCM32SampleValue::MaxValue = SWORD32_MAX ;
++template<> const SWORD32 AuPCM32SampleValue::MinValue = SWORD32_MIN ;
++template<> const SWORD32 AuPCM32SampleValue::MaxValue = SWORD32_MAX ;
+--- steghide-0.5.1/src/Graph.cc
++++ steghide-0.5.1/src/Graph.cc
+@@ -18,6 +18,7 @@
+  *
+  */
+ 
++#include <climits>
+ #include <ctime>
+ #include <list>
+ #include <map>
diff --git a/gnu/packages/patches/swish-e-format-security.patch b/gnu/packages/patches/swish-e-format-security.patch
new file mode 100644
index 0000000000..be9d7cb8a9
--- /dev/null
+++ b/gnu/packages/patches/swish-e-format-security.patch
@@ -0,0 +1,33 @@
+Borrowed from Debian.
+
+--- swish-e-2.4.7/src/parser.c	2009-04-05 03:58:32.000000000 +0200
++++ swish-e-2.4.7/src/parser.c	2013-06-11 13:53:08.196559035 +0200
+@@ -1760,7 +1760,7 @@
+     va_start(args, msg);
+     vsnprintf(str, 1000, msg, args );
+     va_end(args);
+-    xmlParserError(parse_data->ctxt, str);
++    xmlParserError(parse_data->ctxt, "%s", str);
+ }
+ 
+ static void warning(void *data, const char *msg, ...)
+@@ -1772,7 +1772,7 @@
+     va_start(args, msg);
+     vsnprintf(str, 1000, msg, args );
+     va_end(args);
+-    xmlParserWarning(parse_data->ctxt, str);
++    xmlParserWarning(parse_data->ctxt, "%s", str);
+ }
+ 
+ 
+--- swish-e-2.4.7/src/result_output.c	2009-04-05 03:58:32.000000000 +0200
++++ swish-e-2.4.7/src/result_output.c	2013-06-11 13:53:38.593550825 +0200
+@@ -752,7 +752,7 @@
+             s = (char *) emalloc(MAXWORDLEN + 1);
+             n = strftime(s, (size_t) MAXWORDLEN, fmt, localtime(&(pv->value.v_date)));
+             if (n && f)
+-                fprintf(f, s);
++                fprintf(f, "%s", s);
+             efree(s);
+         }
+         break;
diff --git a/gnu/packages/patches/swish-e-search.patch b/gnu/packages/patches/swish-e-search.patch
new file mode 100644
index 0000000000..2a57a31a08
--- /dev/null
+++ b/gnu/packages/patches/swish-e-search.patch
@@ -0,0 +1,43 @@
+From http://swish-e.org/archive/2015-09/13295.html
+
+--- a/src/compress.c	
++++ a/src/compress.c	
+@@ -995,7 +995,7 @@ void    remove_worddata_longs(unsigned char *worddata,int *sz_worddata)
+             progerr("Internal error in remove_worddata_longs");
+ 
+         /* dst may be smaller than src. So move the data */
+-        memcpy(dst,src,data_len);
++        memmove(dst,src,data_len);
+ 
+         /* Increase pointers */
+         src += data_len;
+--- a/src/headers.c	
++++ a/src/headers.c	
+@@ -280,7 +280,7 @@ static SWISH_HEADER_VALUE fetch_single_header( IndexFILE *indexf, HEADER_MAP *he
+ 
+         case SWISH_NUMBER:
+         case SWISH_BOOL:
+-            value.number = *(unsigned long *) data_pointer;
++            value.number = *(unsigned int *) data_pointer;
+ 
+             /* $$$ Ugly hack alert! */
+             /* correct for removed files */
+--- a/src/swishspider	
++++ a/src/swishspider	
+@@ -27,6 +27,7 @@ use LWP::UserAgent;
+ use HTTP::Status;
+ use HTML::Parser 3.00;
+ use HTML::LinkExtor;
++use Encode;
+ 
+     if (scalar(@ARGV) != 2) {
+         print STDERR "Usage: $0 localpath url\n";
+@@ -94,7 +95,7 @@ use HTML::LinkExtor;
+     # Don't allow links above the base
+     $URI::ABS_REMOTE_LEADING_DOTS = 1;
+ 
+-    $p->parse( $$content_ref );
++    $p->parse( decode_utf8 $$content_ref );
+     close( LINKS );
+ 
+     exit;
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index b2598afa20..6f779feccb 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -7,6 +7,7 @@
 ;;; Coypright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Coypright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Coypright © 2016 Marius Bakke <mbakke@fastmail.com>
+;;; Coypright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,10 +32,14 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system trivial)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages game-development)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages djvu)
@@ -53,6 +58,7 @@
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages sdl)
   #:use-module (gnu packages tls)
   #:use-module (srfi srfi-1))
 
@@ -466,29 +472,42 @@ extracting content or merging files.")
 (define-public mupdf
   (package
     (name "mupdf")
-    (version "1.8")
+    (version "1.9a")
     (source
       (origin
         (method url-fetch)
         (uri (string-append "http://mupdf.com/downloads/archive/"
                             name "-" version "-source.tar.gz"))
         (sha256
-          (base32 "01n26cy41lc2fjri63s4js23ixxb4nd37aafry3hz4i4id6wd8x2"))
-        (patches (search-patches "mupdf-CVE-2016-6265.patch"
+         (base32
+          "1k64pdapyj8a336jw3j61fhn0rp4q6az7d0dqp9r5n3d9rgwa5c0"))
+        (patches (search-patches "mupdf-build-with-openjpeg-2.1.patch"
+                                 "mupdf-CVE-2016-6265.patch"
                                  "mupdf-CVE-2016-6525.patch"))
         (modules '((guix build utils)))
         (snippet
-            ;; Don't build the bundled-in third party libraries.
-            '(delete-file-recursively "thirdparty"))))
+            ;; Delete all the bundled libraries except for mujs, which is
+            ;; developed by the same team as mupdf and has no releases.
+            ;; TODO Package mujs and don't use the bundled copy.
+            '(for-each delete-file-recursively
+                       '("thirdparty/curl"
+                         "thirdparty/freetype"
+                         "thirdparty/glfw"
+                         "thirdparty/harfbuzz"
+                         "thirdparty/jbig2dec"
+                         "thirdparty/jpeg"
+                         "thirdparty/openjpeg"
+                         "thirdparty/zlib")))))
     (build-system gnu-build-system)
     (inputs
       `(("curl" ,curl)
         ("freetype" ,freetype)
+        ("harfbuzz" ,harfbuzz)
         ("jbig2dec" ,jbig2dec)
         ("libjpeg" ,libjpeg)
         ("libx11" ,libx11)
         ("libxext" ,libxext)
-        ("openjpeg" ,openjpeg-2.0)
+        ("openjpeg" ,openjpeg)
         ("openssl" ,openssl)
         ("zlib" ,zlib)))
     (native-inputs
@@ -624,3 +643,57 @@ vector formats.")
     (inherit (package-with-python2
               (strip-python2-variant python-reportlab)))
     (native-inputs `(("python2-pip" ,python2-pip)))))
+
+(define-public impressive
+  (package
+    (name "impressive")
+    (version "0.11.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/impressive/Impressive/"
+                    version "/Impressive-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0b3rmy6acp2vmf5nill3aknxvr9a5aawk1vnphkah61anxp62gsr"))))
+    (build-system python-build-system)
+
+    ;; TODO: Add dependency on pdftk.
+    (inputs `(("python-pygame" ,python-pygame)
+              ("python2-pillow" ,python2-pillow)
+              ("sdl" ,sdl)
+              ("xpdf" ,xpdf)))
+
+    (arguments
+     `(#:python ,python-2
+       #:phases (modify-phases %standard-phases
+                  (delete 'build)
+                  (delete 'configure)
+                  (delete 'check)
+                  (replace 'install
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      ;; There's no 'setup.py' so install things manually.
+                      (let* ((out  (assoc-ref outputs "out"))
+                             (bin  (string-append out "/bin"))
+                             (man1 (string-append out "/share/man/man1"))
+                             (sdl  (assoc-ref inputs "sdl"))
+                             (xpdf (assoc-ref inputs "xpdf")))
+                        (mkdir-p bin)
+                        (copy-file "impressive.py"
+                                   (string-append bin "/impressive"))
+                        (wrap-program (string-append bin "/impressive")
+                          `("LIBRARY_PATH" ":" prefix ;for ctypes
+                            (,(string-append sdl "/lib")))
+                          `("PATH" ":" prefix     ;for pdftoppm
+                            (,(string-append xpdf "/bin"))))
+                        (mkdir-p man1)
+                        (install-file "impressive.1" man1)
+                        #t))))))
+    (home-page "http://impressive.sourceforge.net")
+    (synopsis "PDF presentation tool with visual effects")
+    (description
+     "Impressive is a tool to display PDF files that provides visual effects
+such as smooth alpha-blended slide transitions.  It provides additional tools
+such as zooming, highlighting an area of the screen, and a tool to navigate
+the PDF pages.")
+    (license license:gpl2)))
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index f0c4e36422..63baed8d35 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -11,6 +11,7 @@
 ;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -402,7 +403,7 @@ in web applications to store data locally to save repeated and redundant
 expensive calls to remote machines or databases.  People have also been known
 to use Cache::Cache for its straightforward interface in sharing data between
 runs of an application or invocations of a CGI-style script or simply as an
-easy to use abstraction of the filesystem or shared memory.")
+easy to use abstraction of the file system or shared memory.")
     (license (package-license perl))))
 
 (define-public perl-cache-fastmmap
@@ -699,6 +700,27 @@ subclasses and can be overridden.")
 type for perl.")
     (license (package-license perl))))
 
+(define-public perl-class-errorhandler
+  (package
+    (name "perl-class-errorhandler")
+    (version "0.04")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/T/TO/TOKUHIROM/"
+                                  "Class-ErrorHandler-" version ".tar.gz"))
+              (sha256
+               (base32
+                "00j5f0z4riyq7i95jww291dpmbn0hmmvkcbrh7p0p8lpqz7jsb9l"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Class-ErrorHandler")
+    (synopsis "Base class for error handling")
+    (description
+     "@code{Class::ErrorHandler} provides an error-handling mechanism that is generic
+enough to be used as the base class for a variety of OO classes.  Subclasses inherit
+its two error-handling methods, error and errstr, to communicate error messages back
+to the calling program.")
+    (license (package-license perl))))
+
 (define-public perl-class-factory-util
   (package
     (name "perl-class-factory-util")
@@ -1770,6 +1792,53 @@ to create DateTime objects, with some custom tweaks to smooth out the rough
 edges (mainly concerning timezone detection and selection).")
     (license (package-license perl))))
 
+(define-public perl-datetime-format-mail
+  (package
+    (name "perl-datetime-format-mail")
+    (version "0.403")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/B/BO/BOOK/"
+                                  "DateTime-Format-Mail-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1c7wapbi9g9p2za52l3skhh31vg4da5kx2yfqzsqyf3p8iff7y4d"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("perl-datetime" ,perl-datetime)
+       ("perl-params-validate" ,perl-params-validate)))
+    (home-page "http://search.cpan.org/dist/DateTime-Format-Mail")
+    (synopsis "Convert between DateTime and RFC2822/822 formats")
+    (description "RFCs 2822 and 822 specify date formats to be used by email.
+This module parses and emits such dates.")
+    (license (package-license perl))))
+
+(define-public perl-datetime-format-w3cdtf
+  (package
+    (name "perl-datetime-format-w3cdtf")
+    (version "0.06")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/G/GW/GWILLIAMS/"
+                                  "DateTime-Format-W3CDTF-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ymxizwd2zfx8b4bmrmv4k439qwfwf2522jrvn4hlay5v6z459dr"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("perl-datetime" ,perl-datetime)))
+    (native-inputs
+     `(("perl-test-pod" ,perl-test-pod)
+       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+    (home-page "http://search.cpan.org/dist/DateTime-Format-W3CDTF")
+    (synopsis "Parse and format W3CDTF datetime strings")
+    (description
+     "This module understands the W3CDTF date/time format, an ISO 8601 profile,
+defined at https://www.w3.org/TR/NOTE-datetime.  This format is the native date
+format of RSS 1.0.  It can be used to parse these formats in order to create
+the appropriate objects.")
+    (license (package-license perl))))
+
 (define-public perl-devel-caller
   (package
     (name "perl-devel-caller")
@@ -2045,7 +2114,7 @@ modules separately and deal with them after the module is done installing.")
     (synopsis "Advanced operations on path variables")
     (description "@code{Env::Path} presents an object-oriented interface to
 path variables, defined as that subclass of environment variables which name
-an ordered list of filesystem elements separated by a platform-standard
+an ordered list of file system elements separated by a platform-standard
 separator.")
     (license (package-license perl))))
 
@@ -2391,7 +2460,7 @@ platforms.")
     (synopsis "Create or remove directory trees")
     (description "This module provide a convenient way to create directories
 of arbitrary depth and to delete an entire directory subtree from the
-filesystem.")
+file system.")
     (license (package-license perl))))
 
 (define-public perl-file-list
@@ -4296,6 +4365,28 @@ cycle.  Functions called in the package itself will still be bound by their
 name, but they won't show up as methods on your class or instances.")
     (license (package-license perl))))
 
+(define-public perl-net-statsd
+  (package
+   (name "perl-net-statsd")
+   (version "0.12")
+   (source
+    (origin
+      (method url-fetch)
+      (uri (string-append
+            "mirror://cpan/authors/id/C/CO/COSIMO/Net-Statsd-"
+            version
+            ".tar.gz"))
+      (sha256
+       (base32
+        "0p2nhrwamic2fyj094y583q088ixv9gbb82c3invqrd17mh57r33"))))
+   (build-system perl-build-system)
+   (home-page
+    "http://search.cpan.org/dist/Net-Statsd")
+   (synopsis "Perl client for Etsy's statsd daemon")
+   (description "This module implement a UDP client for the statsd statistics
+collector daemon in use at Etsy.com.")
+   (license (package-license perl))))
+
 (define-public perl-number-compare
   (package
     (name "perl-number-compare")
@@ -4565,6 +4656,31 @@ up inheritance from those modules at the same time.")
 directory specifications in a cross-platform manner.")
     (license (package-license perl))))
 
+(define-public perl-path-tiny
+  (package
+    (name "perl-path-tiny")
+    (version "0.096")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/D/DA/DAGOLDEN/"
+                                  "Path-Tiny-" version ".tar.gz"))
+              (sha256
+               (base32
+                "08dmr6ijjg3dp7h9dxix0nmad0fw16c6qzs4qc0hdz500gd64sr2"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:tests? #f)) ; Tests require additional test modules to be packaged
+    ;; (native-inputs
+    ;;  `(("perl-test-failwarnings" ,perl-test-failwarnings)
+    ;;    ("perl-test-mockrandom" ,perl-test-mockrandom)))
+    (inputs
+     `(("perl-unicode-utf8" ,perl-unicode-utf8)))
+    (home-page "http://search.cpan.org/dist/Path-Tiny")
+    (synopsis "File path utility")
+    (description "This module provides a small, fast utility for working
+with file paths.")
+    (license asl2.0)))
+
 (define-public perl-perlio-utf8_strict
   (package
     (name "perl-perlio-utf8-strict")
@@ -5679,6 +5795,29 @@ string comparison functions of Test::More, but which are more suitable when
 you test against long strings.")
     (license (package-license perl))))
 
+(define-public perl-test-manifest
+  (package
+    (name "perl-test-manifest")
+    (version "2.02")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/B/BD/BDFOY/"
+                                  "Test-Manifest-" version ".tar.gz"))
+              (sha256
+               (base32
+                "15ik52l9macrrfizf4y6wj71d4lx7w590h2dfajnkmbxmz786iq6"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-pod" ,perl-test-pod)
+       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+    (home-page "http://search.cpan.org/dist/Test-Manifest")
+    (synopsis "Interact with a t/test_manifest file")
+    (description "@code{Test::Manifest} overrides the default test file order.  Instead of
+running all of the t/*.t files in ASCII-betical order, it looks in the t/test_manifest
+file to find out which tests you want to run and the order in which you want to run them.
+It constructs the right value for the build system to do the right thing.")
+    (license (package-license perl))))
+
 (define-public perl-test-mockobject
   (package
     (name "perl-test-mockobject")
@@ -6208,7 +6347,7 @@ generally slower on larger files.")
     (home-page "http://search.cpan.org/dist/Text-Glob")
     (synopsis "Match globbing patterns against text")
     (description "Text::Glob implements glob(3) style matching that can be
-used to match against text, rather than fetching names from a filesystem.  If
+used to match against text, rather than fetching names from a file system.  If
 you want to do full file globbing use the File::Glob module instead.")
     (license (package-license perl))))
 
@@ -6610,6 +6749,30 @@ described in Unicode Standard Annex #14.  The @code{East_Asian_Width} property
 defined by Annex #11 is used to determine breaking positions.")
     (license (package-license perl))))
 
+(define-public perl-unicode-utf8
+  (package
+    (name "perl-unicode-utf8")
+    (version "0.60")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/C/CH/CHANSEN/"
+                                  "Unicode-UTF8-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1g3fp47slsk7wbz3189kpg342lfs7lpsy570jxnx7s9v59dg5k7n"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-fatal" ,perl-test-fatal)
+       ("perl-test-leaktrace" ,perl-test-leaktrace)
+       ("perl-variable-magic" ,perl-variable-magic)
+       ("perl-test-pod" ,perl-test-pod)))
+    (home-page "http://search.cpan.org/dist/Unicode-UTF8")
+    (synopsis "Encoding and decoding of UTF-8 encoding form")
+    (description
+     "This module provides functions to encode and decode UTF-8 encoding form
+as specified by Unicode and ISO/IEC 10646:2011.")
+    (license (package-license perl))))
+
 (define-public perl-universal-can
   (package
     (name "perl-universal-can")
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index f6ea28d927..190f59400d 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -26,6 +26,9 @@
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016 Stefan Reichoer <stefan@xsteve.at>
+;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -51,6 +54,7 @@
   #:use-module (gnu packages backup)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages django)
   #:use-module (gnu packages file)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gcc)
@@ -69,6 +73,8 @@
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages networking)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages openstack)
+  #:use-module (gnu packages password-utils)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -87,7 +93,6 @@
   #:use-module (gnu packages zip)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages bdw-gc)
-  #:use-module (gnu packages pcre)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -1512,6 +1517,37 @@ matching them against a list of media-ranges.")
 (define-public python2-nose
   (package-with-python2 python-nose))
 
+(define-public python-nose2
+  (package
+    (name "python-nose2")
+    (version "0.6.5")
+      (source
+        (origin
+          (method url-fetch)
+          (uri (pypi-uri "nose2" version))
+          (sha256
+           (base32
+            "1x4zjq1zlyrh8b9ba0cmafd3w94pxhid408kibyjd3s6h1lap6s7"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f)) ; 'module' object has no attribute 'collector'
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (inputs
+     `(("python-cov-core" ,python-cov-core)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/nose-devs/nose2")
+    (synopsis "Next generation of nicer testing for Python")
+    (description
+     "Nose2 is the next generation of nicer testing for Python, based on the
+plugins branch of unittest2.  Nose2 aims to improve on nose by providing a
+better plugin api, being easier for users to configure, and simplifying internal
+interfaces and processes.")
+    (license license:bsd-2)))
+
+(define-public python2-nose2
+  (package-with-python2 python-nose2))
+
 (define-public python-unittest2
   (package
     (name "python-unittest2")
@@ -1690,6 +1726,45 @@ supports coverage of subprocesses.")
 (define-public python2-pytest-runner
   (package-with-python2 python-pytest-runner))
 
+(define-public python-pytest-mock
+  (package
+    (name "python-pytest-mock")
+    (version "1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pytest-mock" version ".zip"))
+        (sha256
+         (base32
+          "03zxar5drzm7ksqyrwypjaza3cri6wqvpr6iam92djvg6znp32gp"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (inputs
+     `(("python-py" ,python-py)
+       ("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/pytest-dev/pytest-mock/")
+    (synopsis "Thin-wrapper around the mock package for easier use with py.test")
+    (description
+     "This plugin installs a @code{mocker} fixture which is a thin-wrapper
+around the patching API provided by the @code{mock} package, but with the
+benefit of not having to worry about undoing patches at the end of a test.
+The mocker fixture has the same API as @code{mock.patch}, supporting the
+same arguments.")
+    (properties `((python2-variant . ,(delay python2-pytest-mock))))
+    (license license:expat)))
+
+(define-public python2-pytest-mock
+  (let ((base (package-with-python2
+                (strip-python2-variant python-pytest-mock))))
+    (package (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base)))
+      (inputs
+       `(("python2-mock" ,python2-mock)
+         ,@(package-inputs base))))))
+
 (define-public python-pytest-xdist
   (package
     (name "python-pytest-xdist")
@@ -2070,6 +2145,35 @@ executed.")
 (define-public python2-coverage
   (package-with-python2 python-coverage))
 
+(define-public python-cov-core
+  (package
+    (name "python-cov-core")
+    (version "1.15.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "cov-core" version))
+        (sha256
+         (base32
+          "0k3np9ymh06yv1ib96sb6wfsxjkqhmik8qfsn119vnhga9ywc52a"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-coverage" ,python-coverage)))
+    (home-page "https://github.com/schlamar/cov-core")
+    (synopsis "plugin core for use by pytest-cov, nose-cov and nose2-cov")
+    (description
+     "This is a library package for use by pytest-cov, nose-cov and nose2-cov.
+It is useful for developing coverage plugins for these testing frameworks.")
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-cov-core))))))
+
+(define-public python2-cov-core
+  (let ((cov-core (package-with-python2 (strip-python2-variant python-cov-core))))
+    (package (inherit cov-core)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs cov-core))))))
+
 (define-public python-discover
   (package
     (name "python-discover")
@@ -2203,14 +2307,22 @@ is used by the Requests library to verify HTTPS requests.")
     (source
      (origin
        (method url-fetch)
-         (uri (string-append
-                "https://pypi.python.org/packages/"
-                "7a/00/c14926d8232b36b08218067bcd5853caefb4737cda3f0a47437151344792/"
-                "click-" version ".tar.gz"))
+       (uri (pypi-uri "click" version))
        (sha256
         (base32
          "1sggipyz52crrybwbr9xvwxd4aqigvplf53k9w3ygxmzivd1jsnc"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((glibc (assoc-ref inputs ,(if (%current-target-system)
+                                                 "cross-libc" "libc"))))
+               (substitute* "click/_unicodefun.py"
+                 (("'locale'")
+                  (string-append "'" glibc "/bin/locale'"))))
+             #t)))))
     (native-inputs
      `(("python-setuptools" ,python-setuptools)))
     (home-page "http://click.pocoo.org")
@@ -2508,20 +2620,25 @@ object.")
 (define-public python-virtualenv
   (package
     (name "python-virtualenv")
-    (version "13.1.2")
+    (version "15.0.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "virtualenv" version))
        (sha256
         (base32
-         "1p732accxwqfjbdna39k8w8lp9gyw91vr4kzkhm8mgfxikqqxg5a"))))
+         "07cbajzk8l05k5zhlw0b9wbf2is65bl9v6zrn2a0iyn57w6pd73d"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-        (replace 'check
-         (lambda _ (zero? (system* "py.test")))))))
+         (replace 'check
+           (lambda _
+             ;; Disable failing test.  See upstream bug report
+             ;; https://github.com/pypa/virtualenv/issues/957
+             (substitute* "tests/test_virtualenv.py"
+               (("skipif.*") "skipif(True, reason=\"Guix\")\n"))
+             (zero? (system* "py.test")))))))
     (inputs
      `(("python-setuptools" ,python-setuptools)
        ("python-mock" ,python-mock)
@@ -3662,6 +3779,37 @@ simple and Pythonic domain language.")
 (define-public python2-sqlalchemy
   (package-with-python2 python-sqlalchemy))
 
+(define-public python-sqlalchemy-utils
+  (package
+    (name "python-sqlalchemy-utils")
+    (version "0.32.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "SQLAlchemy-Utils" version))
+        (sha256
+         (base32
+          "1zbmmh7n8m01ikizn2mj1mfwch26nsr1awv9mvskqry7av0mpy98"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-six" ,python-six)
+       ("python-sqlalchemy" ,python-sqlalchemy)))
+    (home-page "https://github.com/kvesteri/sqlalchemy-utils")
+    (synopsis "Various utility functions for SQLAlchemy")
+    (description
+     "SQLAlchemy-utils provides various utility functions and custom data types
+for SQLAlchemy.  SQLAlchemy is an SQL database abstraction library for Python.")
+    (properties `((python2-variant . ,(delay python2-sqlalchemy-utils))))
+    (license license:bsd-3)))
+
+(define-public python2-sqlalchemy-utils
+  (let ((base (package-with-python2
+                (strip-python2-variant python-sqlalchemy-utils))))
+    (package (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
+
 (define-public python-alembic
   (package
     (name "python-alembic")
@@ -3762,14 +3910,14 @@ services for your Python modules and applications.")
 (define-public python-pillow
   (package
     (name "python-pillow")
-    (version "3.1.1")
+    (version "3.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Pillow" version))
        (sha256
         (base32
-         "1zwzakr5v0skdh0azp5cd6fwzbll5305dsk33k5jk570vv6lqvs8"))))
+         "1w9x3dfrg8b5lqhpjl0fczfyf9842wbqwgxbjjq4vfpxv5jwm49l"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-setuptools" ,python-setuptools)
@@ -4868,6 +5016,35 @@ as possible in order to be comprehensible and easily extensible.")
 (define-public python2-sympy
   (package-with-python2 python-sympy))
 
+(define-public python-q
+  (package
+    (name "python-q")
+    (version "2.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "q" version))
+       (sha256
+        (base32
+         "1mgfazh8fkizh6walra2zv885f3lcgr3nb02v1frfm4p8ddcy3yy"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/zestyping/q")
+    (synopsis "Quick-and-dirty debugging output for tired programmers")
+    (description
+     "q is a Python module for \"print\" style of debugging Python code.  It
+provides convenient short API for print out of values, tracebacks, and
+falling into the Python interpreter.")
+    (license license:asl2.0)
+    (properties `((python2-variant . ,(delay python2-q))))))
+
+(define-public python2-q
+  (let ((base (package-with-python2 (strip-python2-variant python-q))))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
+
 (define-public python-testlib
   (package
     (name "python-testlib")
@@ -6155,6 +6332,30 @@ a hash value.")
     (name "python2-tlsh")
     (inputs `(("python" ,python-2)))))
 
+(define-public python-termcolor
+  (package
+    (name "python-termcolor")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python-termcolor" version))
+       (sha256
+        (base32
+         "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
+    (build-system python-build-system)
+    (arguments
+     ;; There are no tests.
+     `(#:tests? #f))
+    (home-page "http://pypi.python.org/pypi/termcolor")
+    (synopsis "ANSII Color formatting for terminal output")
+    (description
+     "This package provides ANSII Color formatting for output in terminals.")
+    (license license:expat)))
+
+(define-public python2-termcolor
+  (package-with-python2 python-termcolor))
+
 (define-public python-libarchive-c
   (package
     (name "python-libarchive-c")
@@ -6950,7 +7151,7 @@ WebSocket usage in Python programs.")
     (build-system python-build-system)
     (synopsis "Atomic file writes in Python")
     (description "Library for atomic file writes using platform dependent tools
-for atomic filesystem operations.")
+for atomic file system operations.")
     (home-page "https://github.com/untitaker/python-atomicwrites")
     (license license:expat)
     (properties `((python2-variant . ,(delay python2-atomicwrites))))))
@@ -7448,6 +7649,40 @@ asynchronously executing callables.  This package backports the
 concurrent.futures package from Python 3.2")
     (license license:bsd-3)))
 
+(define-public python-promise
+  (package
+    (name "python-promise")
+    (version "0.4.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "promise" version))
+        (sha256
+         (base32
+          "1k19ms8l3d5jzjh557rgkxb5sg4mqgfc315rn4hx1z3n8qq6lr3h"))))
+    (build-system python-build-system)
+    ;; Tests wants python-futures, which is a python2 only program, and
+    ;; can't be found by python-promise at test time.
+    (arguments `(#:tests? #f))
+    (home-page "https://github.com/syrusakbary/promise")
+    (synopsis "Promises/A+ implementation for Python")
+    (description
+     "Promises/A+ implementation for Python")
+    (properties `((python2-variant . ,(delay python2-promise))))
+    (license license:expat)))
+
+(define-public python2-promise
+  (let ((promise (package-with-python2
+                   (strip-python2-variant python-promise))))
+    (package (inherit promise)
+      (arguments (substitute-keyword-arguments (package-arguments promise)
+                   ((#:tests? _) #t)))
+      (native-inputs
+       `(("python2-futures" ,python2-futures)
+         ("python2-pytest" ,python2-pytest)
+         ("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs promise))))))
+
 (define-public python-urllib3
   (package
     (name "python-urllib3")
@@ -8578,8 +8813,8 @@ library.")
          (replace 'check
            (lambda _ (zero? (system* "python" "./test_pathlib.py")))))))
     (home-page "https://pathlib.readthedocs.org/")
-    (synopsis "Object-oriented filesystem paths")
-    (description "Pathlib offers a set of classes to handle filesystem paths.
+    (synopsis "Object-oriented file system paths")
+    (description "Pathlib offers a set of classes to handle file system paths.
 It offers the following advantages over using string objects:
 
 @enumerate
@@ -9022,14 +9257,14 @@ to occurences in strings and comments.")
 (define-public python-py3status
   (package
     (name "python-py3status")
-    (version "2.9")
+    (version "3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "py3status" version))
        (sha256
         (base32
-         "09y7h8rjay5kzwk5akq7f5f9wqnvjkxhivck04hdc8ny1nw3vqzp"))))
+         "0i283z1pivmir61z8kbiycigc94l61v33ygzkhczf1ifq7cppyds"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-setuptools" ,python-setuptools)))
@@ -9206,6 +9441,31 @@ focus on event-based network programming and multiprotocol integration.")
 (define-public python2-twisted
   (package-with-python2 python-twisted))
 
+(define-public python-pika
+  (package
+    (name "python-pika")
+    (version "0.10.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "pika" version))
+        (sha256
+         (base32
+          "0nb4h08di432lv7dy2v9kpwgk0w92f24sqc2hw2s9vwr5b8v8xvj"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-twisted" ,python-twisted)))
+    (home-page "https://pika.readthedocs.org")
+    (synopsis "Pure Python AMQP Client Library")
+    (description
+     "Pika is a pure-Python implementation of the AMQP (Advanced Message Queuing
+Protocol) 0-9-1 protocol that tries to stay fairly independent of the underlying
+network support library.")
+    (license license:bsd-3)))
+
+(define-public python2-pika
+  (package-with-python2 python-pika))
+
 (define-public python-ply
   (package
     (name "python-ply")
@@ -9622,24 +9882,14 @@ parsing UK postcodes.")
 (define-public python-fake-factory
   (package
   (name "python-fake-factory")
-  (version "0.5.7")
+  (version "0.7.2")
   (source (origin
             (method url-fetch)
             (uri (pypi-uri "fake-factory" version))
             (sha256
              (base32
-              "1chmarnrdzn4r017n8qlic0m0bbnhw04s3hkwribjvm3mqpb6pa0"))))
+              "0vs0dkmg0dlaxf8w6q2i3k0i03gmp56ablldv7ci9x3nbadkn71g"))))
   (build-system python-build-system)
-  (arguments
-   '(#:phases
-     (modify-phases %standard-phases
-       (add-before 'check 'disable-failing-test
-         ;; XXX: faker/tests/ne_np/__init__.py, line 40, in test_names
-         ;;      first_name, last_name = name.split()
-         ;; ValueError: too many values to unpack (expected 2)
-         (lambda _
-           (delete-file "faker/tests/ne_np/__init__.py")
-           #t)))))
   (native-inputs
    `(("python-setuptools" ,python-setuptools)
      ;; For testing
@@ -9649,7 +9899,7 @@ parsing UK postcodes.")
   (propagated-inputs
    `(("python-dateutil" ,python-dateutil-2)
      ("python-six" ,python-six)))
-  (home-page "http://github.com/joke2k/faker")
+  (home-page "https://github.com/joke2k/faker")
   (synopsis "Python package that generates fake data")
   (description
    "Faker is a Python package that generates fake data such as names,
@@ -9757,17 +10007,14 @@ implementation for Python.")
 (define-public python-prompt-toolkit
  (package
   (name "python-prompt-toolkit")
-  (version "1.0.3")
+  (version "1.0.7")
   (source
     (origin
       (method url-fetch)
-      (uri (string-append
-             "https://pypi.python.org/packages/"
-             "8d/de/412f23919929c01e6b55183e124623f705e4b91796d3d2dce2cb53d595ad/"
-             "prompt_toolkit-" version ".tar.gz"))
+      (uri (pypi-uri "prompt_toolkit" version ".tar.gz"))
       (sha256
         (base32
-          "18lbmmkyjf509klc3217lq0x863pfzix779zx5kp9lms1iph4pl0"))))
+          "1vyjd0b7wciv55i19l44zy0adx8q7ss79lhy2r9d1rwz2y4822zg"))))
   (build-system python-build-system)
   (inputs `(("python-wcwidth" ,python-wcwidth)
             ("python-pygments" ,python-pygments)))
@@ -9852,6 +10099,49 @@ etc.")
       (inherit base)
       (name "ptpython2"))))
 
+(define-public python-requests-oauthlib
+  (package
+    (name "python-requests-oauthlib")
+    (version "0.6.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "requests-oauthlib" version))
+       (sha256
+        (base32
+         "0ykff67sjcl227c23g0rxzfx34rr5bf21kwv0z3zmgk0lfmch7hn"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; removes tests that require network access
+         (add-before 'check 'pre-check
+           (lambda _
+             (delete-file "tests/test_core.py")
+             #t)))))
+    (native-inputs
+     `(("python-requests-mock" ,python-requests-mock)
+       ("python-mock" ,python-mock)))
+    (inputs
+     `(("python-oauthlib" ,python-oauthlib)
+       ("python-requests" ,python-requests)))
+    (home-page
+     "https://github.com/requests/requests-oauthlib")
+    (synopsis
+     "OAuthlib authentication support for Requests")
+    (description
+     "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
+provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
+    (license license:isc)
+    (properties `((python2-variant . ,(delay python2-requests-oauthlib))))))
+
+(define-public python2-requests-oauthlib
+  (let ((base (package-with-python2 (strip-python2-variant python-requests-oauthlib))))
+    (package
+      (inherit base)
+      (native-inputs `(("python2-setuptools" ,python2-setuptools)
+                       ,@(package-native-inputs base))))))
+
 (define-public python-stem
   (package
     (name "python-stem")
@@ -10092,6 +10382,36 @@ interface for programs.")
        `(("python2-setuptools" ,python2-setuptools)
          ,@(package-native-inputs base))))))
 
+(define-public python-consul
+  (package
+    (name "python-consul")
+    (version "0.6.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "python-consul" version))
+        (sha256
+         (base32
+          "0rfyxcy4cr3x848vhx876ifalxd5ghq6l5x813m49h4vq2d4jiq8"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-requests" ,python-requests)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/cablehead/python-consul")
+    (synopsis "Python client for Consul")
+    (description
+     "Python client for @url{http://www.consul.io/,Consul}, a tool for service
+discovery, monitoring and configuration.")
+    (license license:expat)))
+
+(define-public python2-consul
+  (let ((consul (package-with-python2 python-consul)))
+    (package (inherit consul)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs consul))))))
+
 (define-public python-schematics
   (package
     (name "python-schematics")
@@ -10249,3 +10569,434 @@ time by mocking the datetime module.")
       (native-inputs
        `(("python2-setuptools" ,python2-setuptools)
          ,@(package-native-inputs base))))))
+
+(define-public python-odfpy
+  (package
+    (name "python-odfpy")
+    (version "1.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "odfpy" version))
+              (sha256
+               (base32
+                "1a6ms0w9zfhhkqhvrnynwwbxrivw6hgjc0s5k7j06npc7rq0blxw"))))
+    (arguments
+     `(#:modules ((srfi srfi-1)
+                  (guix build python-build-system)
+                  (guix build utils))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           ;; The test runner invokes python2 and python3 for test*.py.
+           ;; To avoid having both in inputs, we replicate it here.
+           (lambda _
+             (every (lambda (test-file)
+                      (zero? (system* "python" test-file)))
+                    (find-files "tests" "^test.*\\.py$")))))))
+    (build-system python-build-system)
+    (home-page "https://github.com/eea/odfpy")
+    (synopsis "Python API and tools to manipulate OpenDocument files")
+    (description "Collection of libraries and utility programs written in
+Python to manipulate OpenDocument 1.2 files.")
+    (license
+     ;; The software is mainly dual GPL2+ and ASL2.0, but includes a
+     ;; number of files with other licenses.
+     (list license:gpl2+ license:asl2.0 license:lgpl2.1+ license:cc-by-sa3.0))))
+
+(define-public python2-odfpy
+  (package-with-python2 python-odfpy))
+
+(define-public python-cachecontrol
+  (package
+    (name "python-cachecontrol")
+    (version "0.11.6")
+    (source
+     (origin
+       (method url-fetch)
+       ;; Pypi does not have tests.
+       (uri (string-append
+             "https://github.com/ionrock/cachecontrol/archive/v"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             ;; Drop test that requires internet access.
+             (delete-file "tests/test_regressions.py")
+             (setenv "PYTHONPATH"
+                     (string-append (getcwd) "/build/lib:"
+                                    (getenv "PYTHONPATH")))
+             (zero? (system* "py.test" "-vv")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-redis" ,python-redis)
+       ("python-webtest" ,python-webtest)
+       ("python-mock" ,python-mock)))
+    (propagated-inputs
+     `(("python-requests" ,python-requests)
+       ("python-lockfile" ,python-lockfile)))
+    (home-page "https://github.com/ionrock/cachecontrol")
+    (synopsis "The httplib2 caching algorithms for use with requests")
+    (description "CacheControl is a port of the caching algorithms in
+@code{httplib2} for use with @code{requests} session objects.")
+    (license license:asl2.0)
+    (properties `((python2-variant . ,(delay python2-cachecontrol))))))
+
+(define-public python2-cachecontrol
+  (let ((base (package-with-python2 (strip-python2-variant python-cachecontrol))))
+    (package (inherit base)
+             (native-inputs
+              `(("python2-setuptools" ,python2-setuptools)
+                ,@(package-native-inputs base))))))
+
+(define-public python-lit
+  (package
+    (name "python-lit")
+    (version "0.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "lit" version))
+        (sha256
+         (base32
+          "135m2b9cwih85g66rjggavck328z7lj37srgpq3jxszbg0g2b91y"))))
+    (build-system python-build-system)
+    (home-page "http://llvm.org/")
+    (synopsis "LLVM Software Testing Tool")
+    (description "@code{lit} is a portable tool for executing LLVM and Clang
+style test suites, summarizing their results, and providing indication of
+failures.")
+    (license license:ncsa)
+    (properties `((python2-variant . ,(delay python2-lit))))))
+
+(define-public python2-lit
+  (let ((base (package-with-python2 (strip-python2-variant python-lit))))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
+
+(define-public python-pytest-pep8
+  (package
+    (name "python-pytest-pep8")
+    (version "1.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pytest-pep8" version))
+              (sha256
+               (base32
+                "06032agzhw1i9d9qlhfblnl3dw5hcyxhagn7b120zhrszbjzfbh3"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f ; Fails with recent pytest and pep8. See upstream issues #8 and #12.
+       ;; Prevent creation of the egg. This works around
+       ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765 .
+       #:configure-flags '("--single-version-externally-managed" "--root=/")))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (propagated-inputs
+     `(("python-pep8" ,python-pep8)))
+    (home-page "https://bitbucket.org/pytest-dev/pytest-pep8")
+    (synopsis "Py.test plugin to check PEP8 requirements")
+    (description "Pytest plugin for checking PEP8 compliance.")
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-pytest-pep8))))))
+
+(define-public python2-pytest-pep8
+  (let ((base (package-with-python2 (strip-python2-variant python-pytest-pep8))))
+    (package (inherit base)
+             (native-inputs
+              `(("python2-setuptools" ,python2-setuptools)
+                ,@(package-native-inputs base))))))
+
+(define-public python-pytest-flakes
+  (package
+    (name "python-pytest-flakes")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pytest-flakes" version))
+              (sha256
+               (base32
+                "0flag3n33kbhyjrhzmq990rvg4yb8hhhl0i48q9hw0ll89jp28lw"))))
+    (build-system python-build-system)
+    (arguments
+     `(;; Prevent creation of the egg. This works around
+       ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20765 .
+       #:configure-flags '("--single-version-externally-managed" "--root=/")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         (add-after 'install 'check
+           (lambda _ ; It's easier to run tests after install.
+             (zero? (system* "py.test" "-vv")))))))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cache" ,python-pytest-cache)
+       ("python-pytest-pep8" ,python-pytest-pep8)))
+    (propagated-inputs
+     `(("python-pyflakes" ,python-pyflakes)))
+    (home-page "https://github.com/fschulze/pytest-flakes")
+    (synopsis "Py.test plugin to check source code with pyflakes")
+    (description "Pytest plugin for checking Python source code with pyflakes.")
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-pytest-flakes))))))
+
+(define-public python2-pytest-flakes
+  (let ((base (package-with-python2 (strip-python2-variant python-pytest-flakes))))
+    (package (inherit base)
+             (native-inputs
+              `(("python2-setuptools" ,python2-setuptools)
+                ,@(package-native-inputs base))))))
+
+(define-public python-natsort
+  (package
+    (name "python-natsort")
+    (version "5.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "natsort" version))
+              (sha256
+               (base32
+                "1abld5p4a6n5zjnyw5mi2pv37gqalcybv2brjr2y6l9l2p8v9mja"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'set-cachedir
+           ;; Tests require write access to $HOME by default
+           (lambda _ (setenv "PYTHON_EGG_CACHE" "/tmp") #t)))))
+    (native-inputs
+     `(("python-hypothesis" ,python-hypothesis)
+       ("python-pytest-cache" ,python-pytest-cache)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-pytest-flakes" ,python-pytest-flakes)
+       ("python-pytest-pep8" ,python-pytest-pep8)))
+    (propagated-inputs ; TODO: Add python-fastnumbers.
+     `(("python-pyicu" ,python-pyicu)))
+    (home-page "https://github.com/SethMMorton/natsort")
+    (synopsis "Natural sorting for python and shell")
+    (description
+     "Natsort lets you apply natural sorting on lists instead of
+lexicographical.  If you use the built-in @code{sorted} method in python
+on a list such as @code{['a20', 'a9', 'a1', 'a4', 'a10']}, it would be
+returned as @code{['a1', 'a10', 'a20', 'a4', 'a9']}.  Natsort provides a
+function @code{natsorted} that identifies numbers and sorts them separately
+from strings.  It can also sort version numbers, real numbers, mixed types
+and more, and comes with a shell command @command{natsort} that exposes this
+functionality in the command line.")
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-natsort))))))
+
+(define-public python2-natsort
+  (let ((base (package-with-python2 (strip-python2-variant python-natsort))))
+    (package (inherit base)
+             (native-inputs
+              `(("python2-setuptools" ,python2-setuptools)
+                ("python2-pathlib" ,python2-pathlib)
+                ("python2-mock" ,python2-mock)
+                ("python2-enum34" ,python2-enum34)
+                ,@(package-native-inputs base))))))
+
+(define-public python-glances
+  (package
+  (name "python-glances")
+  (version "2.7.1")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (pypi-uri "Glances" version))
+      (sha256
+        (base32
+          "11jbq40g8alsbirnd4kiagznqg270247i0m8qhi48ldf2i5xppxg"))))
+  (build-system python-build-system)
+  (inputs
+   `(("python-psutil" ,python-psutil)))
+  (home-page
+    "https://github.com/nicolargo/glances")
+  (synopsis
+    "A cross-platform curses-based monitoring tool")
+  (description
+    "Glances is a curses-based monitoring tool for a wide variety of platforms.
+Glances uses the PsUtil library to get information from your system. It monitors
+CPU, load, memory, network bandwidth, disk I/O, disk use, and more.")
+  (license license:lgpl3+)
+  (properties `((python2-variant . ,(delay python2-glances))))))
+
+(define-public python2-glances
+  (let ((base (package-with-python2 (strip-python2-variant python-glances))))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
+
+(define-public python-graphql-core
+  (package
+    (name "python-graphql-core")
+    (version "0.5.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "graphql-core" version))
+        (sha256
+         (base32
+          "0rsaarx2sj4xnw9966rhh4haiqaapm4lm2mfqm48ywd51j5vh1a0"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-hardcoded-version
+           (lambda _ (substitute*
+                       "setup.py"
+                       (("'gevent==1.1rc1'") "'gevent'"))
+             #t)))))
+    (native-inputs
+     `(("python-gevent" ,python-gevent)
+       ("python-mock" ,python-mock)
+       ("python-pytest-mock" ,python-pytest-mock)))
+    (inputs
+     `(("python-promise" ,python-promise)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/graphql-python/graphql-core")
+    (synopsis "GraphQL implementation for Python")
+    (description
+     "GraphQL implementation for Python.  GraphQL is a data query language and
+runtime designed and used to request and deliver data to mobile and web apps.
+This library is a port of @url{https://github.com/graphql/graphql-js,graphql-js}
+to Python.")
+    (properties `((python2-variant . ,(delay python2-graphql-core))))
+    (license license:expat)))
+
+(define-public python2-graphql-core
+  (let ((base (package-with-python2
+                (strip-python2-variant python-graphql-core))))
+    (package (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
+
+(define-public python-graphql-relay
+  (package
+    (name "python-graphql-relay")
+    (version "0.4.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "graphql-relay" version))
+        (sha256
+         (base32
+          "04wr9ayshxjjdcg2v21c7ffbz36kif1wjl3604fqd3qignb3fbxi"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (inputs
+     `(("python-graphql-core" ,python-graphql-core)
+       ("python-promise" ,python-promise)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/graphql-python/graphql-relay-py")
+    (synopsis "Relay implementation for Python")
+    (description
+     "This is a library to allow the easy creation of Relay-compliant servers
+using the GraphQL Python reference implementation of a GraphQL server.  It
+should be noted that the code is a exact port of the original
+@url{https://github.com/graphql/graphql-relay-js,graphql-relay js implementation}
+from Facebook.")
+    (properties `((python2-variant . ,(delay python2-graphql-relay))))
+    (license license:expat)))
+
+(define-public python2-graphql-relay
+  (let ((base (package-with-python2
+                (strip-python2-variant python-graphql-relay))))
+    (package (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ,@(package-native-inputs base))))))
+
+(define-public python-graphene
+  (package
+    (name "python-graphene")
+    (version "0.10.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "graphene" version))
+        (sha256
+         (base32
+          "09zhac7igh9ixdz0ay6csy35b40l1jwbf2wrbxmgxwfhy51iy06q"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-django-filter" ,python-django-filter)
+       ("python-mock" ,python-mock)
+       ("python-psycopg2" ,python-psycopg2)
+       ("python-pytest-django" ,python-pytest-django)
+       ("python-sqlalchemy-utils" ,python-sqlalchemy-utils)))
+    (inputs
+     `(("python-graphql-core" ,python-graphql-core)
+       ("python-graphql-relay" ,python-graphql-relay)
+       ("python-iso8601" ,python-iso8601)
+       ("python-promise" ,python-promise)
+       ("python-six" ,python-six)))
+    (home-page "http://graphene-python.org/")
+    (synopsis "GraphQL Framework for Python")
+    (description
+     "Graphene is a Python library for building GraphQL schemas/types.
+A GraphQL schema describes your data model, and provides a GraphQL server
+with an associated set of resolve methods that know how to fetch data.")
+    (properties `((python2-variant . ,(delay python2-graphene))))
+    (license license:expat)))
+
+(define-public python2-graphene
+  (let ((base (package-with-python2
+                (strip-python2-variant python-graphene))))
+    (package (inherit base)
+      (native-inputs
+       `(("python2-setuptools" ,python2-setuptools)
+         ("python2-sqlalchemy" ,python2-sqlalchemy)
+         ,@(package-native-inputs base))))))
+
+(define-public python-nautilus
+  (package
+    (name "python-nautilus")
+    (version "0.4.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "nautilus" version))
+        (sha256
+         (base32
+          "01hwzjc1zshk4vvxrcghm398fpy4jls66dyz06g07mrwqif8878p"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f)) ; fails to import test modules
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (inputs
+     `(("python-bcrypt" ,python-bcrypt)
+       ("python-click" ,python-click)
+       ("python-consul" ,python-consul)
+       ("python-graphql-core" ,python-graphql-core)
+       ("python-graphql-relay" ,python-graphql-relay)
+       ("python-graphene" ,python-graphene)
+       ("python-jinja2" ,python-jinja2)
+       ("python-nose2" ,python-nose2)
+       ("python-peewee" ,python-peewee)
+       ("python-pika" ,python-pika)
+       ("python-pycparser" ,python-pycparser)
+       ("python-requests" ,python-requests)
+       ("python-tornado" ,python-tornado)
+       ("python-wtforms" ,python-wtforms)))
+    (home-page "https://github.com/AlecAivazis/nautilus")
+    (synopsis "Library for creating microservice applications")
+    (description
+     "Nautilus is a framework for flux based microservices that looks to
+provide extendible implementations of common aspects of a cloud so that you can
+focus on building massively scalable web applications.")
+    (license license:expat)))
diff --git a/gnu/packages/qemu.scm b/gnu/packages/qemu.scm
index 1b9f0add25..aee6a75f0e 100644
--- a/gnu/packages/qemu.scm
+++ b/gnu/packages/qemu.scm
@@ -69,14 +69,14 @@
 (define-public qemu
   (package
     (name "qemu")
-    (version "2.6.1")
+    (version "2.7.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "http://wiki.qemu-project.org/download/qemu-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1l88iqk0swqccrnjwczgl9arqsvy77bis862zxajy7z3dqdzshj9"))))
+               "0lqyz01z90nvxpc3nx4djbci7hx62cwvs5zwd6phssds0sap6vij"))))
     (build-system gnu-build-system)
     (arguments
      '(;; Running tests in parallel can occasionally lead to failures, like:
@@ -125,7 +125,7 @@
              (setenv "V" "1")))
          (add-before 'check 'disable-test-qga
            (lambda _
-             (substitute* "tests/Makefile"
+             (substitute* "tests/Makefile.include"
                ;; Comment out the test-qga test, which needs /sys and
                ;; fails within the build environment.
                (("check-unit-.* tests/test-qga" all)
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index 95690fa962..a482d7572a 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; 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>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1069,6 +1070,15 @@ contain over 620 classes.")
          %standard-phases)))
     (license (list license:gpl2 license:gpl3)))) ; choice of either license
 
+(define-public python2-pyqt-4
+  (package (inherit python-pyqt-4)
+           (name "python2-pyqt-4")
+           (native-inputs
+            `(("python-sip" ,python2-sip)
+              ("qt" ,qt-4)))
+           (inputs
+            `(("python" ,python-2)))))
+
 (define-public qtkeychain
   (package
     (name "qtkeychain")
diff --git a/gnu/packages/regex.scm b/gnu/packages/regex.scm
index cea9db8379..e685a17d28 100644
--- a/gnu/packages/regex.scm
+++ b/gnu/packages/regex.scm
@@ -1,4 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2014 John Darrington
+;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -55,3 +57,33 @@
 backtracking regular expression engines like those used in PCRE, Perl and
 Python.  It is a C++ library.")
      (license license:bsd-3)))
+
+(define-public tre
+  (package
+    (name "tre")
+    (version "0.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://laurikari.net/tre/"
+                                  name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0n36cgqys59r2gmb7jzbqiwsy790v8nbxk82d2n2saz0rp145ild"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (alist-cons-before
+                 'check 'install-locales
+                 (lambda _
+                   ;; The tests require the availability of the
+                   ;; 'en_US.ISO-8859-1' locale.
+                   (setenv "LOCPATH" (getcwd))
+                   (zero? (system* "localedef" "--no-archive"
+                                   "--prefix" (getcwd) "-i" "en_US"
+                                   "-f" "ISO-8859-1" "./en_US.ISO-8859-1")))
+                 %standard-phases)))
+    (synopsis "Approximate regex matching library and agrep utility")
+    (description "Superset of the POSIX regex API, enabling approximate
+matching.  Also ships a version of the agrep utility which behaves similar to
+grep but features inexact matching.")
+    (home-page "http://laurikari.net/tre")
+    (license license:bsd-2)))
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 46588dd002..2b5938b477 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -61,8 +61,7 @@
        (patches (search-patches "ruby-symlinkfix.patch"))
        (snippet `(begin
                    ;; Remove bundled libffi
-                   (delete-file-recursively
-                    (string-append "ext/fiddle/libffi-3.2.1"))
+                   (delete-file-recursively "ext/fiddle/libffi-3.2.1")
                    #t))))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index 373b6f37b3..9ad9e707e7 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -402,7 +403,7 @@ implementation techniques and as an expository tool.")
 (define-public racket
   (package
     (name "racket")
-    (version "6.5")
+    (version "6.6")
     (source (origin
              (method url-fetch)
              (uri (list (string-append "http://mirror.racket-lang.org/installers/"
@@ -412,7 +413,7 @@ implementation techniques and as an expository tool.")
                          version "/racket/racket-" version "-src-unix.tgz")))
              (sha256
               (base32
-               "0gvh7i5k87mg1gpqk8gaq50ja9ksbhnvdqn7qqh0n17byidd6999"))))
+               "1kzdi1n6h6hmz8zd9k8r5a5yp2ryi4w3c2fjm1k6cqicn18cwaxz"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -571,14 +572,11 @@ mixed.")
        (file-name (string-append "chibi-scheme-" version ".tar.gz"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (alist-delete
-        'configure
-        (alist-cons-before
-         'build 'set-cc
-         (lambda _
-           (setenv "CC" "gcc"))
-         %standard-phases))
+     `(#:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (add-before 'build 'set-cc
+                    (lambda _
+                      (setenv "CC" "gcc"))))
        #:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list (string-append "PREFIX=" out)
                             (string-append "LDFLAGS=-Wl,-rpath=" out "/lib")))
@@ -736,8 +734,8 @@ threads.")
                                                    "/" name ".boot")))
                     (find-files lib "scheme.boot"))
                #t))))))
-    ;; According to the documentation MIPS is not supported.
-    (supported-systems (delete "mips64el-linux" %supported-systems))
+    ;; According to the documentation MIPS and ARM are not supported.
+    (supported-systems '("x86_64-linux" "i686-linux"))
     (home-page "http://www.scheme.com")
     (synopsis "R6RS Scheme compiler and run-time")
     (description
diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm
index 8c900821be..e0e46411b8 100644
--- a/gnu/packages/screen.scm
+++ b/gnu/packages/screen.scm
@@ -169,4 +169,6 @@ window manager as well as the Tmux terminal multiplexer.")
 it to a new terminal.  Started a long-running process over @code{ssh}, but have
 to leave and don't want to interrupt it?  Just start a @code{screen}, use
 reptyr to grab it, and then kill the @code{ssh} session and head on home.")
+    ;; Reptyr currently does not support mips.
+    (supported-systems (delete "mips64el-linux" %supported-systems))
     (license expat)))
diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index 72f3c57612..d48051ee33 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -40,14 +40,14 @@
 (define-public scribus
   (package
     (name "scribus")
-    (version "1.5.1")
+    (version "1.5.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/scribus/scribus-devel/"
                                   version "/scribus-" version ".tar.xz"))
               (sha256
                (base32
-                "0f2adwg58w37sdi3xrk8xqw486p3pcfjaypcsswjl76r2f3yd0hq"))))
+                "1xbl7h4x32y2nfhn57ivjziyvlnwadcbizqwfqx5srfsmqiyqppc"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; no test target
diff --git a/gnu/packages/sdcc.scm b/gnu/packages/sdcc.scm
new file mode 100644
index 0000000000..c3d4bced26
--- /dev/null
+++ b/gnu/packages/sdcc.scm
@@ -0,0 +1,69 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 David Craven <david@craven.ch>
+;;;
+;;; 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 sdcc)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages texinfo)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module (guix packages)
+  #:use-module ((guix licenses) #:prefix license:))
+
+(define-public sdcc
+  (package
+    (name "sdcc")
+    (version "3.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/sdcc/sdcc"
+                    "/" version "/sdcc-src-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0x53gh5yrrfjvlnkk29mjn8hq4v52alrsf7c8nsyzzq13sqwwpg8"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("bison" ,bison)
+       ("boost" ,boost)
+       ("flex" ,flex)
+       ("python-2" ,python-2)
+       ("texinfo" ,texinfo)))
+    (arguments
+     `(;; gputils is required for PIC ports
+       #:configure-flags
+       '("--disable-pic14-port" "--disable-pic16-port")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-makefile
+           (lambda _
+             (substitute* (find-files "." "(\\.mk$|\\.in$)")
+               (("/bin/sh") (which "sh")))
+             #t)))))
+    (home-page "http://sdcc.sourceforge.net")
+    (synopsis "Small devices C compiler")
+    (description "SDCC is a retargettable, optimizing Standard C compiler suite
+that targets the Intel MCS51 based microprocessors (8031, 8032, 8051, 8052, ...),
+Maxim (formerly Dallas) DS80C390 variants, Freescale (formerly Motorola)
+HC08 based (hc08, s08), Zilog Z80 based MCUs (z80, z180, gbz80, Rabbit
+2000/3000, Rabbit 3000A, TLCS-90) and STMicroelectronics STM8.
+Work is in progress on supporting the Microchip PIC16 and PIC18 targets.
+It can be retargeted for other microprocessors.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index 9b01909753..9eb4039f84 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,14 +19,18 @@
 
 (define-module (gnu packages search)
   #:use-module ((guix licenses)
-                #:select (gpl2+ gpl3+ bsd-3 x11))
+                #:select (gpl2 gpl2+ gpl3+ bsd-3 x11))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages databases)
-  #:use-module (gnu packages linux))
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml))
 
 (define-public xapian
   (package
@@ -148,4 +152,88 @@ accounting for new lines and paragraph changes.  It also has robust support
 for parsing HTML files.")
     (license gpl3+)))
 
+(define-public mlocate
+  (package
+    (name "mlocate")
+    (version "0.26")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://fedorahosted.org/releases/m/l/"
+                                  "mlocate/mlocate-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0gi6y52gkakhhlnzy0p6izc36nqhyfx5830qirhvk3qrzrwxyqrh"))))
+    (build-system gnu-build-system)
+    (home-page "https://fedorahosted.org/mlocate/")
+    (synopsis "Locate files on the file system")
+    (description
+     "mlocate is a locate/updatedb implementation.  The 'm' stands for
+\"merging\": @code{updatedb} reuses the existing database to avoid rereading
+most of the file system, which makes it faster and does not trash the system
+caches as much.  The locate(1) utility is intended to be completely compatible
+with slocate, and attempts to be compatible to GNU locate when it does not
+conflict with slocate compatibility.")
+    (license gpl2)))
+
+(define-public swish-e
+  (package
+    (name "swish-e")
+    (version "2.4.7")
+    (source (origin
+              (method url-fetch)
+              (uri (list (string-append "http://swish-e.org/distribution/"
+                                        "swish-e-" version ".tar.gz")
+                         ;; The upstream swish-e.org appears to be down... so
+                         ;; use debian's copy as a fallback.
+                         (string-append "http://http.debian.net/debian/pool/"
+                                        "main/s/swish-e/swish-e_" version
+                                        ".orig.tar.gz")))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0qkrk7z25yp9hynj21vxkyn7yi8gcagcfxnass5cgczcz0gm9pax"))
+              (patches (search-patches "swish-e-search.patch"
+                                       "swish-e-format-security.patch"))))
+    (build-system gnu-build-system)
+    ;; Several other packages and perl modules may be installed alongside
+    ;; swish-e to extend its features at runtime, but are not required for
+    ;; building: xpdf, catdoc, MP3::Tag, Spreadsheet::ParseExcel,
+    ;; HTML::Entities.
+    (inputs
+     `(("libxml" ,libxml2)
+       ("zlib" ,zlib)
+       ("perl" ,perl)
+       ("perl-uri" ,perl-uri)
+       ("perl-html-parser" ,perl-html-parser)
+       ("perl-html-tagset" ,perl-html-tagset)
+       ("perl-mime-types" ,perl-mime-types)))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after 'install 'wrap-programs
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out")))
+                        (for-each
+                         (lambda (program)
+                           (wrap-program program
+                             `("PERL5LIB" ":" prefix
+                               ,(map (lambda (i)
+                                       (string-append (assoc-ref inputs i)
+                                                      "/lib/perl5/site_perl"))
+                                     ;; These perl modules have no propagated
+                                     ;; inputs, so no further analysis needed.
+                                     '("perl-uri"
+                                       "perl-html-parser"
+                                       "perl-html-tagset"
+                                       "perl-mime-types")))))
+                         (list (string-append out "/lib/swish-e/swishspider")
+                               (string-append out "/bin/swish-filter-test")))
+                        #t))))))
+    (home-page "http://swish-e.org")
+    (synopsis "Web indexing system")
+    (description
+     "Swish-e is Simple Web Indexing System for Humans - Enhanced.  Swish-e
+can quickly and easily index directories of files or remote web sites and
+search the generated indexes.")
+    (license gpl2+)))                   ;with exception
+
 ;;; search.scm ends here
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 183ef7f289..c165f99d4c 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -33,6 +33,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix licenses)
@@ -269,3 +270,25 @@ ksh, and tcsh.")
     ;; The whole thing is under an MIT/X11-style license, but there's one
     ;; command, 'Completion/Unix/Command/_darcs', which is under GPLv2+.
     (license gpl2+)))
+
+(define-public xonsh
+  (package
+    (name "xonsh")
+    (version "0.4.6")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "xonsh" version))
+        (sha256
+          (base32
+            "0byxd9kjl99q2pyvjh9jy18l0di1i35wr0qqgnw4i6jh6ig3zcki"))))
+    (build-system python-build-system)
+    (home-page "http://xon.sh/")
+    (synopsis "Python-ish shell")
+    (description
+     "Xonsh is a Python-ish, BASHwards-looking shell language and command
+prompt. The language is a superset of Python 3.4+ with additional shell
+primitives that you are used to from Bash and IPython. It works on all major
+systems including Linux, Mac OSX, and Windows. Xonsh is meant for the daily
+use of experts and novices alike.")
+    (license bsd-2)))
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index 27f45bab9b..894ec7804a 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,6 +20,7 @@
 
 (define-module (gnu packages shellutils)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages golang)
   #:use-module (gnu packages python)
   #:use-module (guix licenses)
   #:use-module (guix packages)
@@ -88,3 +90,35 @@ FreeDesktop.org trash can used by GNOME, KDE, XFCE, and other common desktop
 environments.  It can move files to the trash, and remove or list files that
 are already there.")
     (license gpl2+)))
+
+(define-public direnv
+  (package
+    (name "direnv")
+    (version "2.9.0")
+    (source
+     (origin (method url-fetch)
+             (uri (string-append "https://github.com/direnv/" name
+                                 "/archive/v" version ".tar.gz"))
+             (file-name (string-append name "-" version ".tar.gz"))
+             (sha256
+              (base32
+               "04v3v2sz9m6ivgbxcplxscj1dsvpaqpqnxgls4060naj3iz9sg82"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:test-target "test"
+       #:make-flags (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases (delete 'configure))))
+    (native-inputs
+      `(("go" ,go)
+        ("which" ,which)))
+    (home-page "http://direnv.net/")
+    (synopsis "Environment switcher for the shell")
+    (description "direnv can hook into bash, zsh, tcsh and fish shell to load
+or unload environment variables depending on the current directory.  This
+allows project-specific environment variables without using the ~/.profile
+file.
+
+Before each prompt, direnv checks for the existence of a .envrc file in the
+current and parent directories.  This file is then used to alter the
+environmental variables of the current shell.")
+    (license expat)))
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index b2612a495f..88bfd062df 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -144,7 +144,7 @@ a server that supports the SSH-2 protocol.")
              ("xauth" ,xauth)))                   ;for 'ssh -X' and 'ssh -Y'
    (arguments
     `(#:test-target "tests"
-      #:configure-flags '("--sysconfdir=/etc"
+      #:configure-flags '("--sysconfdir=/etc/ssh"
 
                           ;; Default value of 'PATH' used by sshd.
                           "--with-default-path=/run/current-system/profile/bin"
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 838428fde9..1bc5aa78ff 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -41,6 +41,7 @@
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages image)
   #:use-module (gnu packages java)
+  #:use-module (gnu packages machine-learning)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages pcre)
@@ -237,13 +238,13 @@ effects of different types of color-blindness.")
 (define-public r-digest
   (package
     (name "r-digest")
-    (version "0.6.9")
+    (version "0.6.10")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "digest" version))
        (sha256
-        (base32 "0ixy1mb7kfl20lkckqiilpw03g1ip4ibihs03gicz7w625hc7zcm"))))
+        (base32 "07825781nl85gx3pqskc04ywgs0f874qj9z2nyrwz7h0aqks0l8c"))))
     (build-system r-build-system)
     ;; Vignettes require r-knitr, which requires r-digest, so we have to
     ;; disable them and the tests.
@@ -300,6 +301,30 @@ non-estimable cases correctly.")
 \"tables\" of grobs.")
     (license license:gpl2+)))
 
+(define-public r-pheatmap
+  (package
+    (name "r-pheatmap")
+    (version "1.0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "pheatmap" version))
+       (sha256
+        (base32
+         "1ik0k69kb4n7xl3bkx4p09kw08ri93855zcsxq1c668171jqfiji"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-gtable" ,r-gtable)
+       ("r-rcolorbrewer" ,r-rcolorbrewer)
+       ("r-scales" ,r-scales)))
+    (home-page
+     "http://cran.r-project.org/web/packages/pheatmap")
+    (synopsis "Pretty heatmaps")
+    (description
+     "This package provides an implementation of heatmaps that offers more
+control over dimensions and appearance.")
+    (license license:gpl2+)))
+
 (define-public r-labeling
   (package
     (name "r-labeling")
@@ -361,13 +386,13 @@ Munsell colour system.")
 (define-public r-rcpp
   (package
     (name "r-rcpp")
-    (version "0.12.5")
+    (version "0.12.7")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "Rcpp" version))
        (sha256
-        (base32 "1vw0zbd6zhqixqg7h8ahn1dr1hb492365x419nrp2lhvr60r8i0k"))))
+        (base32 "1ipid4yfqp1k5c70f7bz7izzq63srmrcxhiqrnyilk2wgrvd7ypb"))))
     (build-system r-build-system)
     (home-page "http://www.rcpp.org")
     (synopsis "Seamless R and C++ Integration")
@@ -382,17 +407,39 @@ and Francois (2011, JSS), and the book by Eddelbuettel (2013, Springer); see
 'citation(\"Rcpp\")' for details on these last two.")
     (license license:gpl2+)))
 
+(define-public r-matrix
+  (package
+    (name "r-matrix")
+    (version "1.2-7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "Matrix" version))
+       (sha256
+        (base32
+         "18x3mdq5cdhbk1lw5cj7vbr41lk8w9p4i5kzh8wslgq6p3d9ac3c"))))
+    (properties `((upstream-name . "Matrix")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-lattice" ,r-lattice)))
+    (home-page "http://Matrix.R-forge.R-project.org/")
+    (synopsis "Sparse and dense matrix classes and methods")
+    (description
+     "This package provides classes and methods for dense and sparse matrices
+and operations on them using LAPACK and SuiteSparse.")
+    (license license:gpl2+)))
+
 (define-public r-mgcv
   (package
    (name "r-mgcv")
-   (version "1.8-12")
+   (version "1.8-14")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "mgcv" version))
      (sha256
       (base32
-       "1khzy36nn6xbnzqfc2953ng0sv8w91mns1ymhibaqn1150x1qid0"))))
+       "0ly9x23q6kd7aqrsb8qjsj8jc597h3068iaqjmkkdv56r5dln29f"))))
    (build-system r-build-system)
    (home-page "http://cran.r-project.org/web/packages/mgcv")
    (synopsis "Mixed generalised additive model computation")
@@ -406,14 +453,14 @@ distributions beyond the exponential family.")
 (define-public r-permute
   (package
    (name "r-permute")
-   (version "0.9-0")
+   (version "0.9-4")
    (source
     (origin
      (method url-fetch)
      (uri (cran-uri "permute" version))
      (sha256
       (base32
-       "0w68cqw6s4pixix8bh1qzsy1pm64jqh1cjznw74h82ygp8sj7p73"))))
+       "1w8wzk1fg9q7wvisnfp2js70dg0m9wi12gkdhpyngpbdcgssahd5"))))
    (build-system r-build-system)
    ;; Tests do not run correctly, but running them properly would entail a
    ;; circular dependency with vegan.
@@ -429,13 +476,13 @@ in which the whole-plots or split-plots or both can be freely exchangeable.")
 (define-public r-plyr
   (package
     (name "r-plyr")
-    (version "1.8.3")
+    (version "1.8.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "plyr" version))
        (sha256
-        (base32 "06v4zxawpjz37rp2q2ii5q43g664z9s29j4ydn0cz3crn7lzl6pk"))))
+        (base32 "1igar5pcjqh0jyxv0z3jah8rz617vfa86vw0r5c7c031b7bj5db0"))))
     (build-system r-build-system)
     (native-inputs `(("r-rcpp" ,r-rcpp)))
     (home-page "http://had.co.nz/plyr")
@@ -485,17 +532,40 @@ designed by Cynthia Brewer as described at http://colorbrewer2.org")
     ;; Includes code licensed under bsd-4
     (license license:asl2.0)))
 
+(define-public r-sendmailr
+  (package
+    (name "r-sendmailr")
+    (version "1.2-1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "sendmailR" version))
+       (sha256
+        (base32
+         "0z7ipywnzgkhfvl4zb2fjwl1xq7b5wib296vn9c9qgbndj6b1zh4"))))
+    (properties `((upstream-name . "sendmailR")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-base64enc" ,r-base64enc)))
+    (home-page
+     "http://cran.r-project.org/web/packages/sendmailR")
+    (synopsis "Send email using R")
+    (description
+     "This package contains a simple SMTP client which provides a portable
+solution for sending email, including attachments, from within R.")
+    (license license:gpl2+)))
+
 (define-public r-stringi
   (package
     (name "r-stringi")
-    (version "1.0-1")
+    (version "1.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stringi" version))
        (sha256
         (base32
-         "1ld38536sswyywp6pyys3v8vkngbk5cksrhdxp8jyr6bz7qf8j77"))))
+         "0rg14hga1g2havd3imhk04iyh1dnisnmxf7yhiiwhs7y72hphc94"))))
     (build-system r-build-system)
     (inputs `(("icu4c" ,icu4c)))
     (native-inputs `(("pkg-config" ,pkg-config)))
@@ -514,13 +584,13 @@ transliteration, concatenation, date-time formatting and parsing, etc.")
 (define-public r-stringr
   (package
     (name "r-stringr")
-    (version "1.0.0")
+    (version "1.1.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "stringr" version))
        (sha256
-        (base32 "0jnz6r9yqyf7dschr2fnn1slg4wn6b4ik5q00j4zrh43bfw7s9pq"))))
+        (base32 "0css5j4psl80br75chg6s1s3ipzf89f71bnbys34flp9yghg1cfc"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-magrittr" ,r-magrittr)
@@ -685,13 +755,13 @@ wrong.")
 (define-public r-lazyeval
   (package
     (name "r-lazyeval")
-    (version "0.1.10")
+    (version "0.2.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "lazyeval" version))
               (sha256
                (base32
-                "02qfpn2fmy78vx4jxr7g7rhqzcm1kcivfwai7lbh0vvpawia0qwh"))))
+                "1jwdz40nznlc44hpjli7h98gnpa4d98ifggmj7z88h84n9aqywqk"))))
     (build-system r-build-system)
     (home-page "https://github.com/hadley/lazyeval")
     (synopsis "Lazy (non-standard) evaluation in R")
@@ -703,13 +773,13 @@ evaluation (NSE) in R.")
 (define-public r-dbi
   (package
     (name "r-dbi")
-    (version "0.4-1")
+    (version "0.5-1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "DBI" version))
               (sha256
                (base32
-                "13n6ibmrma42qmq17qgkyjsc0ciwqf17sd7lw7w26pwpyjd4mwgg"))))
+                "1idwm9lkmz6ns6h0vvgml18mg0k7vjqiv9p5svrdcmx7r1rirpdi"))))
     (build-system r-build-system)
     (home-page "https://github.com/rstats-db/DBI")
     (synopsis "R database interface")
@@ -802,13 +872,13 @@ supported via Andre Simon's highlight package.")
 (define-public r-mime
   (package
     (name "r-mime")
-    (version "0.4")
+    (version "0.5")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "mime" version))
               (sha256
                (base32
-                "145cdcg252w2zsq67dmvmsqka60msfp7agymlxs3gl3ihgiwg46p"))))
+                "0i91m3ivaja1k33jwcvz16pfjypkci27awm8glil7sxhmwaj3izw"))))
     (build-system r-build-system)
     (home-page "https://github.com/yihui/mime")
     (synopsis "R package to map filenames to MIME types")
@@ -864,13 +934,13 @@ emitter (http://pyyaml.org/wiki/LibYAML) for R.")
 (define-public r-knitr
   (package
     (name "r-knitr")
-    (version "1.13")
+    (version "1.14")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "knitr" version))
               (sha256
                (base32
-                "0v69846myi4fbjp8wiik4295fhba67s3i6ccysghm6x031i2f26q"))))
+                "1v0s0knb294p7a2xkwy35bhg0w8p3qcgyphd748sj86hh8a30vds"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-evaluate" ,r-evaluate)
@@ -995,13 +1065,13 @@ you call it again with the same arguments it returns the pre-computed value.")
 (define-public r-crayon
   (package
     (name "r-crayon")
-    (version "1.3.1")
+    (version "1.3.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "crayon" version))
               (sha256
                (base32
-                "0d38fm06h272a8iqlc0d45m2rh36giwqw7mwq4z8hkp4vs975fmm"))))
+                "0s2yam18slph7xsw4pyc9f92gdyf609r5w92yax69zh57kb7asws"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-memoise" ,r-memoise)))
@@ -1061,13 +1131,13 @@ flexible and easy to set up.")
 (define-public r-r6
   (package
     (name "r-r6")
-    (version "2.1.2")
+    (version "2.1.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "R6" version))
               (sha256
                (base32
-                "0yad91i9p4r8bbz6nq8zny39y767n9an7ak5p275ynx8km6v3yqv"))))
+                "19qrkgxvssyi51fm80h93sabzz0n2vgqgv1w8xjqbsap0nx379vy"))))
     (build-system r-build-system)
     (home-page "https://github.com/wch/R6/")
     (synopsis "Classes with reference semantics in R")
@@ -1080,23 +1150,47 @@ private members, and they support inheritance, even when the classes are
 defined in different packages.")
     (license license:expat)))
 
+(define-public r-tibble
+  (package
+    (name "r-tibble")
+    (version "1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "tibble" version))
+       (sha256
+        (base32
+         "011i352ylq9b4xfcj7h10h7qsqd9qkc1rzc0pr1gf8qjb788p2pd"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-assertthat" ,r-assertthat)
+       ("r-lazyeval" ,r-lazyeval)
+       ("r-rcpp" ,r-rcpp)))
+    (home-page "https://github.com/hadley/tibble")
+    (synopsis "Simple data frames")
+    (description
+     "This package provides a @code{tbl_df} class that offers better checking
+and printing capabilities than traditional data frames.")
+    (license license:expat)))
+
 (define-public r-dplyr
   (package
     (name "r-dplyr")
-    (version "0.4.3")
+    (version "0.5.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "dplyr" version))
               (sha256
                (base32
-                "1p8rbn4p4yrx2840dapwiahf9iqa8gnvd35nyc200wfhmrxlqdlc"))))
+                "0ks5cklb03laqf5ygcw986g1lv7wk1ipvypjlha8xly2y4lvilwk"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-assertthat" ,r-assertthat)
        ("r-r6" ,r-r6)
        ("r-magrittr" ,r-magrittr)
        ("r-lazyeval" ,r-lazyeval)
-       ("r-dbi" ,r-dbi)))
+       ("r-dbi" ,r-dbi)
+       ("r-tibble" ,r-tibble)))
     (native-inputs
      `(("r-rcpp" ,r-rcpp)
        ("r-bh" ,r-bh)))
@@ -1431,14 +1525,14 @@ and environmental data in the framework of Euclidean exploratory methods.")
 (define-public r-xml2
   (package
     (name "r-xml2")
-    (version "0.1.2")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "xml2" version))
        (sha256
         (base32
-         "0jjilz36h7vbdbkpvjnja1vgjf6d1imql3z4glqn2m2b74w5qm4c"))))
+         "0f2alsrk3yykznbhnz4pcsg9mb72cv607vbapqx5kqfv39772kgr"))))
     (build-system r-build-system)
     (inputs
      `(("libxml2" ,libxml2)))
@@ -1455,14 +1549,14 @@ files in R.  It is built on top of the libxml2 C library.")
 (define-public r-multitaper
   (package
     (name "r-multitaper")
-    (version "1.0-11")
+    (version "1.0-12")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "multitaper" version))
        (sha256
         (base32
-         "1s0lmjzpyd7zmc2p1ywv5fm7qkq357p70b76gw9wjlms6d81j1n4"))))
+         "011qpkwpjclfc24y2qqigmdnikqwdnanflfhihigh5b5k7qwgm5j"))))
     (build-system r-build-system)
     (native-inputs
      `(("gfortran" ,gfortran)))
@@ -1481,13 +1575,13 @@ jackknifed confidence intervals are available for most estimates.")
 (define-public r-rversions
   (package
     (name "r-rversions")
-    (version "1.0.2")
+    (version "1.0.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "rversions" version))
               (sha256
                (base32
-                "0xmi461g1rf5ngb7r1sri798jn6icld1xq25wj9jii2ca8j8xv68"))))
+                "0i2gi05nrvknr7g89rbppkswyfcwwd4r9gp75fdfhpah8sgq1l11"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-curl" ,r-curl)
@@ -1518,6 +1612,126 @@ previous R versions and their release dates.")
 limited to R.")
     (license license:gpl3+)))
 
+(define-public r-backports
+  (package
+    (name "r-backports")
+    (version "1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "backports" version))
+       (sha256
+        (base32
+         "0s04mbb7imqc00jl37i081y4yf7qdimk687dyrkvb20nixvjvjyh"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/backports")
+    (synopsis "Reimplementations of functions introduced since R 3.0.0")
+    (description
+     "Provides implementations of functions which have been introduced in R
+since version 3.0.0.  The backports are conditionally exported which results
+in R resolving the function names to the version shipped with R (if available)
+and uses the implemented backports as fallback.  This way package developers
+can make use of the new functions without worrying about the minimum required
+R version.")
+    (license license:gpl2+)))
+
+(define-public r-checkmate
+  (package
+    (name "r-checkmate")
+    (version "1.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "checkmate" version))
+       (sha256
+        (base32
+         "1nqyi58jl33af82y8kw8iy9xbna2080y1khhy90kf6lim6q74024"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-backports" ,r-backports)))
+    (home-page "https://github.com/mllg/checkmate")
+    (synopsis "Fast and versatile argument checks")
+    (description
+     "This package provides tests and assertions to perform frequent argument
+checks.  A substantial part of the package was written in C to minimize any
+worries about execution time overhead.")
+    (license license:bsd-3)))
+
+(define-public r-bbmisc
+  (package
+    (name "r-bbmisc")
+    (version "1.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "BBmisc" version))
+       (sha256
+        (base32
+         "0cw2mhw7qhdrx91zzd5iwyh7ch9fy4wxga8j63731q6sxr1airjl"))))
+    (properties `((upstream-name . "BBmisc")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-checkmate" ,r-checkmate)))
+    (home-page "https://github.com/berndbischl/BBmisc")
+    (synopsis "Miscellaneous functions for R package development")
+    (description
+     "This package provides miscellaneous helper functions for the development
+of R packages.")
+    (license license:bsd-3)))
+
+(define-public r-fail
+  (package
+    (name "r-fail")
+    (version "1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "fail" version))
+       (sha256
+        (base32
+         "0vfm6kmpmgsamda5p0sl771kbnsscan31l2chzssyw93kwmams7d"))))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-bbmisc" ,r-bbmisc)
+       ("r-checkmate" ,r-checkmate)))
+    (home-page "https://github.com/mllg/fail")
+    (synopsis "File abstraction interface layer (FAIL)")
+    (description
+     "This package provides a more comfortable interface to work with R data
+or source files in a key-value fashion.")
+    (license license:bsd-3)))
+
+(define-public r-batchjobs
+  (package
+    (name "r-batchjobs")
+    (version "1.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "BatchJobs" version))
+       (sha256
+        (base32
+         "1kb99024jih5bycc226bl4jyvbbl1sg72q3m2wnlshl7s8p6vva0"))))
+    (properties `((upstream-name . "BatchJobs")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-bbmisc" ,r-bbmisc)
+       ("r-brew" ,r-brew)
+       ("r-checkmate" ,r-checkmate)
+       ("r-dbi" ,r-dbi)
+       ("r-digest" ,r-digest)
+       ("r-fail" ,r-fail)
+       ("r-rsqlite" ,r-rsqlite)
+       ("r-sendmailr" ,r-sendmailr)
+       ("r-stringr" ,r-stringr)))
+    (home-page "https://github.com/tudo-r/BatchJobs")
+    (synopsis "Batch computing with R")
+    (description
+     "This package provides @code{Map}, @code{Reduce} and @code{Filter}
+variants to generate jobs on batch computing systems like PBS/Torque, LSF,
+SLURM and Sun Grid Engine.  Multicore and SSH systems are also supported.")
+    (license license:bsd-2)))
+
 (define-public r-brew
   (package
     (name "r-brew")
@@ -1564,14 +1778,14 @@ collation, and NAMESPACE files.")
 (define-public r-openssl
   (package
     (name "r-openssl")
-    (version "0.9.3")
+    (version "0.9.4")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "openssl" version))
        (sha256
         (base32
-         "0ldqam7d9fyxwhr651ld6lsh05lg4v2y8ajxwzq9ywzjmfb3vlpz"))))
+         "0rpb3xdzab453yjddr8ryad53ll27zss8abnj30aqa2lzbg4jwyb"))))
     (build-system r-build-system)
     (inputs
      `(("openssl" ,openssl)))
@@ -1593,13 +1807,13 @@ integers.")
 (define-public r-httr
   (package
     (name "r-httr")
-    (version "1.1.0")
+    (version "1.2.1")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "httr" version))
               (sha256
                (base32
-                "08sq34pknsfcy8lm06nydi12mbaxpqpgb025ahr33v9d3g0wvh6p"))))
+                "03kkjlhyvvi5znwaxfm6cmdsg3q7ivwsvkzgabhjdj2jxs80pfg7"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-curl" ,r-curl)
@@ -1647,13 +1861,13 @@ pure C implementation of the Git core methods.")
 (define-public r-rstudioapi
   (package
     (name "r-rstudioapi")
-    (version "0.5")
+    (version "0.6")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "rstudioapi" version))
               (sha256
                (base32
-                "0sgnqfx0m3hzh57k10s7ndrbw7yqjjjcgfikafya98jcc7wmpwym"))))
+                "1zkvz72z6nw0xc8bhb21y5x1nk6avijs0w8n4vsbvw9sn76wc96s"))))
     (build-system r-build-system)
     (home-page "http://cran.r-project.org/web/packages/rstudioapi")
     (synopsis "Safely access the RStudio API")
@@ -1665,13 +1879,13 @@ informative error messages when it's not available.")
 (define-public r-devtools
   (package
     (name "r-devtools")
-    (version "1.11.1")
+    (version "1.12.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "devtools" version))
               (sha256
                (base32
-                "0ik3l3q62sspdph613f9ik5yz36s8q5nrc50dqgn3pxzvpwpdj2i"))))
+                "16l18szmj482vf3dvl2fqwwa4zaqylmic1pk7dwh428cp0d86mzi"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-curl" ,r-curl)
@@ -1695,13 +1909,13 @@ tools to simplify the devolpment of R packages.")
 (define-public r-withr
   (package
     (name "r-withr")
-    (version "1.0.1")
+    (version "1.0.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "withr" version))
               (sha256
                (base32
-                "0zbj3rd7dc0ycknmay7y7rm1qvnh9n05jw93gjggz46j2zfmy93y"))))
+                "042z8nmqqilgrvhmbqrjc05qys3gzwq1rqy2wxp2bi5d41859493"))))
     (build-system r-build-system)
     (home-page "https://github.com/jimhester/withr")
     (synopsis "Run code with temporarily modified global state")
@@ -1711,20 +1925,42 @@ in which global state has been temporarily modified.  Many of these functions
 were originally a part of the r-devtools package.")
     (license license:gpl2+)))
 
+(define-public r-hms
+  (package
+    (name "r-hms")
+    (version "0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "hms" version))
+       (sha256
+        (base32
+         "0ln1dc26mkl5pc26vvyf01d35x75q6cjaj39cccxp67chbwbdlds"))))
+    (build-system r-build-system)
+    (home-page "https://github.com/rstats-db/hms")
+    (synopsis "Pretty time of day")
+    (description
+     "This package implements an S3 class for storing and formatting
+time-of-day values, based on the @code{difftime} class.")
+    (license license:gpl3+)))
+
 (define-public r-readr
   (package
     (name "r-readr")
-    (version "0.2.2")
+    (version "1.0.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "readr" version))
               (sha256
                (base32
-                "156422xwvskynna5kjc8h1qqnn50kxgjrihl2h2b7vm9sxxdyr2m"))))
+                "0xji0dbal6xcxnsmjj678fw29n7wrj45wrd5ng99yhqqijcm9f6g"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-curl" ,r-curl)
        ("r-rcpp" ,r-rcpp)
+       ("r-hms" ,r-hms)
+       ("r-tibble" ,r-tibble)
+       ("r-r6" ,r-r6)
        ("r-bh" ,r-bh)))
     (home-page "https://github.com/hadley/readr")
     (synopsis "Read tabular data")
@@ -1736,13 +1972,13 @@ disk (or a connection).")
 (define-public r-plotrix
   (package
     (name "r-plotrix")
-    (version "3.6-2")
+    (version "3.6-3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "plotrix" version))
               (sha256
                (base32
-                "1jn1k3skmlgyvpijj6vlcn5m2zgrsdh00g1fq8n5dqs1pkl1sqrw"))))
+                "0h97jra8zqssi9j4i0psa6c7ya49ya8jd2qc18lc61a4s2yn8w91"))))
     (build-system r-build-system)
     (home-page "http://cran.r-project.org/web/packages/plotrix")
     (synopsis "Various plotting functions")
@@ -1771,13 +2007,13 @@ scaling functions for R.")
 (define-public r-lattice
   (package
     (name "r-lattice")
-    (version "0.20-33")
+    (version "0.20-34")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "lattice" version))
               (sha256
                (base32
-                "0car12x5vl9k180i9pc86lq3cvwqakdpqn3lgdf98k9n2h52cilg"))))
+                "0615h69czr73k47whhzimf1qxv5qk0cabcrkljwhyrn6m6piq6ja"))))
     (build-system r-build-system)
     (home-page "http://lattice.r-forge.r-project.org/")
     (synopsis "High-level data visualization system")
@@ -1815,13 +2051,13 @@ well as additional utilities such as panel and axis annotation functions.")
 (define-public r-rcpparmadillo
   (package
     (name "r-rcpparmadillo")
-    (version "0.6.700.6.0")
+    (version "0.7.400.2.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "RcppArmadillo" version))
               (sha256
                (base32
-                "0x736cjg1pbvn8c6h91c88qmmz4pddvvqg88k9c9kwhn24fjrra0"))
+                "0g2658iy43higy1cay00ljibgnwh0zv5gcwvbhckjs48y8z1a2pb"))
               (modules '((guix build utils)))
               ;; Remove bundled armadillo sources
               (snippet
@@ -1899,19 +2135,35 @@ encoder/decoder, round-off-error-free sum and cumsum, etc.")
 (define-public r-rmarkdown
   (package
     (name "r-rmarkdown")
-    (version "0.9.6")
+    (version "1.0")
     (source
       (origin
         (method url-fetch)
         (uri (cran-uri "rmarkdown" version))
         (sha256
           (base32
-            "09ajq5miqzz46q0i9svvbh93dbi7xbjn4702d6z3scdz272gx7l2"))))
+            "0c7gs9c8xdjfxviw0syh13pf3vys2b2ssixmnyqbji64xdscn7pz"))))
     (properties `((upstream-name . "rmarkdown")))
     (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; See https://github.com/rstudio/rmarkdown/pull/800
+         ;; The resource files are in the store and have mode 444.  After
+         ;; copying the files R fails to remove them again because it doesn't
+         ;; have write access to them.
+         (add-after 'unpack 'copy-files-without-mode
+           (lambda _
+             (substitute* "R/render.R"
+               (("file.copy\\(from = from," prefix)
+                (string-append prefix
+                               " copy.mode = FALSE, ")))
+             #t)))))
     (propagated-inputs
      `(("r-catools" ,r-catools)
        ("r-htmltools" ,r-htmltools)
+       ("r-jsonlite" ,r-jsonlite)
+       ("r-base64enc" ,r-base64enc)
        ("r-knitr" ,r-knitr)
        ("r-yaml" ,r-yaml)
        ("ghc-pandoc" ,ghc-pandoc)))
@@ -2074,13 +2326,13 @@ plotted and compared with the asymptotic curve.")
 (define-public r-lambda-r
   (package
     (name "r-lambda-r")
-    (version "1.1.7")
+    (version "1.1.9")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "lambda.r" version))
               (sha256
                (base32
-                "1lxzrwyminc3dfb07pbn1rmj45kplxgsb17b06pzflj728knbqwa"))))
+                "1j6287iqvs3ill6r5g6ksf5809qp0l0nf20ib8266m1r09lc9j14"))))
     (properties `((upstream-name . "lambda.r")))
     (build-system r-build-system)
     (home-page "http://cran.r-project.org/web/packages/lambda.r")
@@ -2117,13 +2369,13 @@ options defined in other packages.")
 (define-public r-futile-logger
   (package
     (name "r-futile-logger")
-    (version "1.4.1")
+    (version "1.4.3")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "futile.logger" version))
               (sha256
                (base32
-                "1plld1icxrcay7llplbd4i8inpg97crpnczk58mbk26j8glqbr51"))))
+                "1r3nayk0z9n1svbf8640vw90dal5q07nkn0gv4bnva3pbzb352sy"))))
     (properties `((upstream-name . "futile.logger")))
     (build-system r-build-system)
     (propagated-inputs
@@ -2138,6 +2390,26 @@ convenient and easy to use replacement for @code{cat} and @code{print}
 statements.")
     (license license:lgpl3+)))
 
+(define-public r-segmented
+  (package
+    (name "r-segmented")
+    (version "0.5-1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "segmented" version))
+       (sha256
+        (base32
+         "1740cvx2q4v23g4q0zkvg50s5bv8jcrlzzhm7fac4xn0riwmzp5i"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/segmented")
+    (synopsis "Regression models with breakpoints estimation")
+    (description
+     "Given a regression model, segmented updates the model by adding one or
+more segmented (i.e., piecewise-linear) relationships.  Several variables with
+multiple breakpoints are allowed.")
+    (license (list license:gpl2+ license:gpl3+))))
+
 (define-public r-snow
   (package
     (name "r-snow")
@@ -2162,13 +2434,13 @@ worker processes and collect and return the results on the master.")
 (define-public r-sparsem
   (package
     (name "r-sparsem")
-    (version "1.7")
+    (version "1.72")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "SparseM" version))
               (sha256
                (base32
-                "0s9kab5khk7daqf6nfp1wm1qnhkssnnwnymisfwyk3kz4q5maqfz"))))
+                "0zpb1swn9xjkb22sky10ixff7vqfiz9m36nkbc1qqbm9frcldnka"))))
     (properties
      `((upstream-name . "SparseM")))
     (inputs
@@ -2297,13 +2569,13 @@ using the multicore functionality of the parallel package.")
 (define-public r-dt
   (package
     (name "r-dt")
-    (version "0.1")
+    (version "0.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "DT" version))
               (sha256
                (base32
-                "0mj7iiy1gglw7kixybmb7kr1bcl5r006zcb3klkw7p6vvvzdm6qj"))))
+                "1g86p0jcjqi2ph5rhm45jkzibsa6yfcj8n5cg3giy90sqgjzkdx1"))))
     (properties
      `((upstream-name . "DT")))
     (build-system r-build-system)
@@ -2349,14 +2621,14 @@ flexible than the orphaned \"base64\" package.")
 (define-public r-irlba
   (package
     (name "r-irlba")
-    (version "2.0.0")
+    (version "2.1.1")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "irlba" version))
        (sha256
         (base32
-         "1gms3rxrm24ri4vjvnpl4v47m7bx0zk63z8y85rbhsvx230xdy0m"))))
+         "0yb8b8g6f3cb0f56r702fn2px8nf5rx8cyy2scq36xai9w7f25jj"))))
     (build-system r-build-system)
     (home-page "http://cran.r-project.org/web/packages/irlba")
     (synopsis "Methods for eigendecomposition of large matrices")
@@ -2463,6 +2735,50 @@ for reproducibility.  Notably, convenient default methods greatly facilitate
 the way current RNG settings can be changed.")
     (license license:gpl3+)))
 
+(define-public r-rtsne
+  (package
+    (name "r-rtsne")
+    (version "0.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "Rtsne" version))
+       (sha256
+        (base32
+         "0zi4nxgpiv1gpdmcnqdhz5kymzp8m5xj02zpf290p1yyydl76bhy"))))
+    (properties `((upstream-name . "Rtsne")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-rcpp" ,r-rcpp)))
+    (home-page "https://github.com/jkrijthe/Rtsne")
+    (synopsis "T-distributed stochastic neighbor embedding")
+    (description
+     "This package provides an R wrapper around the fast T-distributed
+Stochastic Neighbor Embedding using a Barnes-Hut implementation.")
+    ;; The declared license for this package is BSD-3, but it also includes
+    ;; code licensed under BSD-4.
+    (license (list license:bsd-3 license:bsd-4))))
+
+(define-public r-e1071
+  (package
+    (name "r-e1071")
+    (version "1.6-7")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "e1071" version))
+       (sha256
+        (base32
+         "1069qwj9gsjq6par2cgfah8nn5x2w38830761x1f7mqpmk0gnj3h"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/e1071")
+    (synopsis "Miscellaneous functions for probability theory")
+    (description
+     "This package provides functions for latent class analysis, short time
+Fourier transform, fuzzy clustering, support vector machines, shortest path
+computation, bagged clustering, naive Bayes classifier, and more.")
+    (license license:gpl2+)))
+
 (define-public r-nmf
   (package
     (name "r-nmf")
@@ -2729,14 +3045,14 @@ most common form of color blindness.")
 (define-public r-tidyr
   (package
     (name "r-tidyr")
-    (version "0.4.1")
+    (version "0.6.0")
     (source
      (origin
        (method url-fetch)
        (uri (cran-uri "tidyr" version))
        (sha256
         (base32
-         "0xp6lyr2l4ix2mrilx4qmca7wm5qmbhvi24m4nf7qsgwp54gnv2h"))))
+         "1bpwbphgl43ym433b0nrshwhr7pprmj1wkpkamdzix1zvf9dcbc2"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-dplyr" ,r-dplyr)
@@ -2834,6 +3150,63 @@ noncentral hypergeometric distribution (also called extended hypergeometric
 distribution).")
    (license license:gpl3+)))
 
+(define-public r-rpart
+  (package
+    (name "r-rpart")
+    (version "4.1-10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rpart" version))
+       (sha256
+        (base32
+         "119dvh2cpab4vq9blvbkil5hgq6w018amiwlda3ii0fki39axpf5"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/rpart")
+    (synopsis "Recursive partitioning and regression trees")
+    (description
+     "This package provides recursive partitioning functions for
+classification, regression and survival trees.")
+    (license (list license:gpl2+ license:gpl3+))))
+
+(define-public r-hmisc
+  (package
+    (name "r-hmisc")
+    (version "3.17-4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "Hmisc" version))
+       (sha256
+        (base32
+         "1hr2kycpm0h3li9gnlbx9pl6h13das7g2wqfk6cip1kx6lv00ypw"))))
+    (properties `((upstream-name . "Hmisc")))
+    (build-system r-build-system)
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (propagated-inputs
+     `(("r-acepack" ,r-acepack)
+       ("r-cluster" ,r-cluster)
+       ("r-data-table" ,r-data-table)
+       ("r-foreign" ,r-foreign)
+       ("r-formula" ,r-formula)
+       ("r-ggplot2" ,r-ggplot2)
+       ("r-gridextra" ,r-gridextra)
+       ("r-gtable" ,r-gtable)
+       ("r-lattice" ,r-lattice)
+       ("r-latticeextra" ,r-latticeextra)
+       ("r-nnet" ,r-nnet)
+       ("r-rpart" ,r-rpart)))
+    (home-page "http://biostat.mc.vanderbilt.edu/Hmisc")
+    (synopsis "Miscellaneous data analysis and graphics functions")
+    (description
+     "This package contains many functions useful for data analysis,
+high-level graphics, utility operations, functions for computing sample size
+and power, importing and annotating datasets, imputing missing values,
+advanced table making, variable clustering, character string manipulation,
+conversion of R objects to LaTeX code, and recoding variables.")
+    (license license:gpl2+)))
+
 (define-public r-runit
   (package
     (name "r-runit")
diff --git a/gnu/packages/suckless.scm b/gnu/packages/suckless.scm
index 1f62e26248..820d550d6e 100644
--- a/gnu/packages/suckless.scm
+++ b/gnu/packages/suckless.scm
@@ -106,14 +106,15 @@ numbers of user-defined menu items efficiently.")
 (define-public slock
   (package
     (name "slock")
-    (version "1.2")
+    (version "1.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dl.suckless.org/tools/slock-"
                                   version ".tar.gz"))
+              (patches (search-patches "slock-CVE-2016-6866.patch"))
               (sha256
                (base32
-                "1crkyr4vblhciy6vnbjwwjnlkm9yg2hzq16v6hzxm20ai67na0il"))))
+                "065xa9hl7zn0lv2f7yjxphqsa35rg6dn9hv10gys0sh4ljpa7d5s"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -123,7 +124,8 @@ numbers of user-defined menu items efficiently.")
     (inputs
      `(("libx11" ,libx11)
        ("libxext" ,libxext)
-       ("libxinerama" ,libxinerama)))
+       ("libxinerama" ,libxinerama)
+       ("libxrandr" ,libxrandr)))
     (home-page "http://tools.suckless.org/slock/")
     (synopsis "Simple X session lock")
     (description
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 0e9db720aa..43e9288fee 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,16 +28,16 @@
 (define-public tbb
   (package
     (name "tbb")
-    (version "4.3.2")
+    (version "2017")
     (source (origin
               (method url-fetch)
               (uri (string-append
                     "https://www.threadingbuildingblocks.org/sites/default"
                     "/files/software_releases/source/"
-                    "tbb43_20141204oss_src.tgz"))
+                    "tbb" version "_20160722oss_src.tgz"))
               (sha256
                (base32
-                "0jsczl99jfgj47kj7c4sd4fk7v3rbaiax1ng9ypykz1hh0lrrsws"))
+                "038rmv3s8si51bjrzwyv8ldqw742fjjdfayi8pmjaq5zw32b8pzx"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "build/common.inc"
@@ -48,35 +49,39 @@
      `(#:test-target "test"
        #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
                                          (assoc-ref %outputs "out") "/lib"))
-       #:phases (alist-replace
-                 'configure
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (substitute* "build/linux.gcc.inc"
-                     (("LIB_LINK_FLAGS =")
-                      (string-append "LIB_LINK_FLAGS = -Wl,-rpath="
-                                     (assoc-ref outputs "out") "/lib"))))
-                 (alist-replace
-                  'install
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let* ((doc      (string-append
-                                      (assoc-ref outputs "doc") "/doc"))
-                           (examples (string-append doc "/examples"))
-                           (lib      (string-append
-                                      (assoc-ref outputs "out") "/lib"))
-                           (include  (string-append
-                                      (assoc-ref outputs "out") "/include")))
-                      (mkdir-p lib)
-                      (for-each
-                       (lambda (f)
-                         (copy-file f
-                                    (string-append lib "/"
-                                                   (basename f))))
-                       (find-files "build/guix_release" "\\.so"))
-                      (copy-recursively "doc" doc)
-                      (copy-recursively "examples" examples)
-                      (copy-recursively "include" include)
-                      #t))
-                  %standard-phases))))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fail-on-test-errors
+           (lambda _
+             (substitute* "Makefile"
+               (("-\\$\\(MAKE") "$(MAKE"))
+             #t))
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "build/linux.gcc.inc"
+               (("LIB_LINK_FLAGS =")
+                (string-append "LIB_LINK_FLAGS = -Wl,-rpath="
+                               (assoc-ref outputs "out") "/lib")))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((doc      (string-append
+                               (assoc-ref outputs "doc") "/doc"))
+                    (examples (string-append doc "/examples"))
+                    (lib      (string-append
+                               (assoc-ref outputs "out") "/lib"))
+                    (include  (string-append
+                               (assoc-ref outputs "out") "/include")))
+               (mkdir-p lib)
+               (for-each
+                (lambda (f)
+                  (copy-file f
+                             (string-append lib "/"
+                                            (basename f))))
+                (find-files "build/guix_release" "\\.so"))
+               (copy-recursively "doc" doc)
+               (copy-recursively "examples" examples)
+               (copy-recursively "include" include)
+               #t))))))
     (home-page "https://www.threadingbuildingblocks.org")
     (synopsis "C++ library for parallel programming")
     (description
@@ -85,6 +90,4 @@ the low-level threading details necessary for optimal multi-core performance.
 It uses common C++ templates and coding style to eliminate tedious threading
 implementation work.  It provides parallel loop constructs, asynchronous
 tasks, synchronization primitives, atomic operations, and more.")
-    ;; GPLv2 with run-time exception:
-    ;; <https://www.threadingbuildingblocks.org/licensing#runtime-exception>
-    (license gpl2)))
+    (license asl2.0)))
diff --git a/gnu/packages/telephony.scm b/gnu/packages/telephony.scm
index d8a33ddf3d..8f2a10f2c5 100644
--- a/gnu/packages/telephony.scm
+++ b/gnu/packages/telephony.scm
@@ -31,7 +31,7 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xiph)
-  #:use-module (guix licenses)
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu))
@@ -61,7 +61,7 @@ threaded applications, supporting concurrent synchronization, inter-process
 communications via sockets, and various methods for data handling, such as
 serialization and XML parsing.  It includes the uCommon C++ library, a smaller
 reimplementation.")
-   (license gpl2+) ; plus runtime exception
+   (license license:gpl2+) ; plus runtime exception
    (home-page "http://www.gnu.org/software/commoncpp")))
 
 (define-public ucommon
@@ -81,7 +81,7 @@ reimplementation.")
 to facilitate using C++ design patterns even for very deeply embedded
 applications, such as for systems using uclibc along with posix threading
 support.")
-   (license gpl3+)
+   (license license:gpl3+)
    (home-page "http://www.gnu.org/software/commoncpp")
    (properties '((ftp-directory . "/gnu/commoncpp")))))
 
@@ -105,7 +105,7 @@ protocol from the IETF.  It is suitable both for high capacity servers and
 personal client applications.  It is flexible in its design, allowing it to
 function as a framework for the framework, rather than just being a
 packet-manipulation library.")
-   (license gpl2+) ; plus runtime exception
+   (license license:gpl2+) ; plus runtime exception
    (home-page "http://www.gnu.org/software/ccrtp")))
 
 
@@ -124,7 +124,7 @@ packet-manipulation library.")
    (description "GNU oSIP is an implementation of the SIP protocol.  It is
 used to provide multimedia and telecom software developers with an interface
 to initiate and control SIP sessions.")
-   (license lgpl2.1+)
+   (license license:lgpl2.1+)
    (home-page "http://www.gnu.org/software/osip")))
 
 
@@ -147,7 +147,7 @@ SIP protocol for multimedia session establishment.  This protocol is mainly to
 be used by VoIP telephony applications (endpoints or conference server) but
 might be also useful for any application that wish to establish sessions like
 multiplayer games.")
-   (license gpl2+)
+   (license license:gpl2+)
    ;; (plus OpenSSL linking exception)
    ;; http://git.savannah.gnu.org/cgit/exosip.git/plain/LICENSE.OpenSSL
     (home-page "http://savannah.nongnu.org/projects/exosip")))
@@ -192,7 +192,7 @@ without the need for a service provider.  Its peer-to-peer design ensures that
 there is no central point for media intercept or capture and thus it can be
 used to construct a secure telephone system that operates over the public
 internet.")
-   (license gpl3+)
+   (license license:gpl3+)
    (home-page "http://www.gnu.org/software/sipwitch")))
 
 (define-public libsrtp
@@ -216,7 +216,7 @@ internet.")
 Real-time Transport Protocol (SRTP), the Universal Security Transform (UST),
 and a supporting cryptographic kernel.")
     (home-page "https://github.com/cisco/libsrtp")
-    (license bsd-3)))
+    (license license:bsd-3)))
 
 (define-public libiax2
   (let ((commit "0e5980f1d78ce462e2d1ed6bc39ff35c8341f201"))
@@ -255,7 +255,9 @@ Voice-over-IP (VoIP) communications.")
       ;; 'src/options.c', 'src/options.h', 'src/ring10.h', 'src/winiphone.c' are
       ;; covered under the 'GPL'.
       ;; The package as a whole is distributed under the LGPL 2.0.
-      (license (list lgpl2.0 public-domain gpl2+)))))
+      (license (list license:lgpl2.0
+                     license:public-domain
+                     license:gpl2+)))))
 
 (define-public seren
   (package
@@ -285,4 +287,4 @@ without having to register accounts, exchange emails, or add people to contact
 lists.  All you need to join an existing conference is the host name or IP
 address of one of the participants.")
     (home-page "http://holdenc.altervista.org/seren/")
-    (license gpl3+)))
+    (license license:gpl3+)))
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index aaffa13696..5bea5ab536 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -1,8 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Mckinley Olsen <mck.olsen@gmail.com>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,19 +42,22 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages gnome)
-  #:use-module (gnu packages xdisorg))
+  #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages docbook)
+  #:use-module (srfi srfi-26))
 
 (define-public tilda
   (package
     (name "tilda")
-    (version "1.3.1")
+    (version "1.3.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/lanoxx/tilda/archive/"
                                   "tilda-" version ".tar.gz"))
               (sha256
                (base32
-                "1nh0kw8f6srriglj55gmir1hvakcwrak1wcydz3vpnmwipgy6jib"))))
+                "1cc4qbg1m3i04lj5p6i6xbd0zvy1320pxdgmjhz5p3j95ibsbfki"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -205,10 +209,29 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
                     "kmscon-" version ".tar.xz"))
               (sha256
                (base32
-                "0axfwrp3c8f4gb67ap2sqnkn75idpiw09s35wwn6kgagvhf1rc0a"))))
+                "0axfwrp3c8f4gb67ap2sqnkn75idpiw09s35wwn6kgagvhf1rc0a"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; Use elogind instead of systemd.
+               '(begin
+                  (substitute* "configure"
+                    (("libsystemd-daemon libsystemd-login")
+                     "libelogind"))
+                  (substitute* "src/uterm_systemd.c"
+                    (("#include <systemd/sd-login.h>")
+                     "#include <elogind/sd-login.h>")
+                    ;; We don't have this header.
+                    (("#include <systemd/sd-daemon\\.h>")
+                     "")
+                    ;; Replace the call to 'sd_booted' by the truth value.
+                    (("sd_booted\\(\\)")
+                     "1"))))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("libxslt" ,libxslt)                       ;to build the man page
+       ("libxml2" ,libxml2)                       ;for XML_CATALOG_FILES
+       ("docbook-xsl" ,docbook-xsl)))
     (inputs
      `(("libdrm" ,libdrm)
        ("libtsm" ,libtsm)
@@ -217,10 +240,13 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
        ("mesa" ,mesa)
        ("pango" ,pango)
        ("udev" ,eudev)))
-    (synopsis "Simple terminal emulator")
-    (description "Kmscon is a simple terminal emulator based on linux kernel
-mode setting (KMS).  It is an attempt to replace the in-kernel VT implementation
-with a userspace console.  See kmscon(1) man-page for usage information.")
+    (synopsis "Linux KMS-based terminal emulator")
+    (description "Kmscon is a terminal emulator based on Linux's @dfn{kernel
+mode setting} (KMS).  It can replace the in-kernel virtual terminal (VT)
+implementation with a user-space console.  Compared to the Linux console,
+kmscon provides enhanced features including XKB-compatible internationalized
+keyboard support, UTF-8 input/font support, hardware-accelerated rendering,
+multi-seat support, a replacement for @command{mingetty}, and more.")
     (home-page "https://www.freedesktop.org/wiki/Software/kmscon")
     ;; Hash table implementation is lgpl2.1+ licensed.
     ;; The wcwidth implementation in external/wcwidth.{h,c} uses a license
@@ -229,4 +255,42 @@ with a userspace console.  See kmscon(1) man-page for usage information.")
     ;; under the bsd 2 license.
     ;; Unifont-Font is from http://unifoundry.com/unifont.html and licensed
     ;; under the terms of the GNU GPL.
-    (license (list license:expat license:lgpl2.1+ license:bsd-2 license:gpl2+))))
+    (license (list license:expat license:lgpl2.1+ license:bsd-2
+                   license:gpl2+))
+    (supported-systems (filter (cut string-suffix? "-linux" <>)
+                               %supported-systems))))
+
+(define-public picocom
+  (package
+    (name "picocom")
+    (version "2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/npat-efault/picocom"
+                    "/archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1v891cx18vx3lnpfaq90f5y6njgigkn4qsikhrmyzshnz32jy5bb"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("CC=gcc")
+       #:tests? #f ; No tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (man (string-append out "/share/man/man1")))
+               (install-file "picocom" bin)
+               (install-file "picocom.1" man)))))))
+    (home-page "https://github.com/npat-efault/picocom")
+    (synopsis "Minimal dumb-terminal emulation program")
+    (description "It was designed to serve as a simple, manual, modem
+configuration, testing, and debugging tool.  It has also serves well
+as a low-tech serial communications program to allow access to all
+types of devices that provide serial consoles.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 9dde8a9eab..c8114c2077 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -28,7 +28,9 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix utils)
+  #:use-module (guix git-download)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages fontutils)
@@ -446,3 +448,44 @@ PDF documents.")
     (description "Texmaker is a program that integrates many tools needed to
 develop documents with LaTeX, in a single application.")
     (license license:gpl2+)))
+
+
+(define-public teximpatient
+  (package
+    (name "teximpatient")
+    (version "2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/" name "/" name "-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0h56w22d99dh4fgld4ssik8ggnmhmrrbnrn1lnxi1zr0miphn1sd"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'check)
+         ;; Unfortunately some mistakes have been made in packaging.
+         ;; Work around them here ...
+         (replace 'unpack
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((srcdir "teximpatient-2.4"))
+               (system* "tar" "-xzf" (assoc-ref inputs "source")
+                        (string-append "--one-top-level=" srcdir))
+               (delete-file (string-append srcdir "/book.pdf"))
+               (install-file (car
+                              (find-files
+                               (assoc-ref inputs "automake")
+                               "^install-sh$"))
+                             srcdir)
+               (chdir srcdir)))))))
+    (native-inputs
+     `(("texlive" ,texlive)
+       ("automake" ,automake)))
+    (home-page "http://www.gnu.org/software/teximpatient")
+    (synopsis "Book on TeX, plain TeX and Eplain")
+    (description "@i{TeX for the Impatient} is a ~350 page book on TeX,
+plain TeX, and Eplain, originally written by Paul Abrahams, Kathryn Hargreaves,
+and Karl Berry.")
+    (license license:fdl1.3+)))
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index d645ef4bc1..5b22e84fb8 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -62,6 +62,18 @@ their source and the command-line Info reader.  The emphasis of the language
 is on expressing the content semantically, avoiding physical markup commands.")
     (license gpl3+)))
 
+(define-public texinfo-6.3
+  (package
+    (inherit texinfo)
+    (version "6.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/texinfo/texinfo-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "0fpr9kdjjl6nj2pc50k2zr7134hvqz8bi8pfqa7131a9lpzz6v14"))))))
+
 (define-public texinfo-5
   (package (inherit texinfo)
     (version "5.2")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 5578e489b3..5af3e57ca4 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2015, 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,6 +35,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages linux)
@@ -68,6 +70,33 @@ networking, allowing for formal validation of data according to some
 specifications.")
     (license license:lgpl2.0+)))
 
+(define-public asn1c
+  (package
+    (name "asn1c")
+    (version "0.9.27")
+    (source (origin
+      (method url-fetch)
+      (uri (string-append "https://lionet.info/soft/asn1c-"
+                          version ".tar.gz"))
+      (sha256
+       (base32
+        "17nvn2kzvlryasr9dzqg6gs27b9lvqpval0k31pb64bjqbhn8pq2"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("perl" ,perl)))
+    (home-page "https://lionet.info/asn1c")
+    (synopsis "ASN.1 to C compiler")
+    (description "The ASN.1 to C compiler takes ASN.1 module
+files and generates C++ compatible C source code.  That code can be
+used to serialize the native C structures into compact and unambiguous
+BER/XER/PER-based data files, and deserialize the files back.
+
+Various ASN.1 based formats are widely used in the industry, such as to encode
+the X.509 certificates employed in the HTTPS handshake, to exchange control
+data between mobile phones and cellular networks, to car-to-car communication
+in intelligent transportation networks.")
+    (license license:bsd-2)))
+
 (define-public p11-kit
   (package
     (name "p11-kit")
@@ -131,7 +160,7 @@ living in the same process.")
              ;; the location of the system-wide trust store.  Instead it has a
              ;; configure-time option.  Unless specified, its configure script
              ;; attempts to auto-detect the location by looking for common
-             ;; places in the filesystem, none of which are present in our
+             ;; places in the file system, none of which are present in our
              ;; chroot build environment.  If not found, then no default trust
              ;; store is used, so each program has to provide its own
              ;; fallback, and users have to configure each program
@@ -185,6 +214,7 @@ required structures.")
 (define-public openssl
   (package
    (name "openssl")
+   (replacement openssl-1.0.2j)
    (version "1.0.2h")
    (source (origin
              (method url-fetch)
@@ -324,10 +354,64 @@ required structures.")
    (license license:openssl)
    (home-page "http://www.openssl.org/")))
 
+(define openssl-1.0.2j
+  (package (inherit openssl)
+    (source
+      (let ((name "openssl")
+            (version "1.0.2j"))
+        (origin
+          (method url-fetch)
+          (uri (list (string-append "ftp://ftp.openssl.org/source/"
+                                    name "-" version ".tar.gz")
+                     (string-append "ftp://ftp.openssl.org/source/old/"
+                                    (string-trim-right version char-set:letter)
+                                    "/" name "-" version ".tar.gz")))
+          (sha256
+           (base32
+            "0cf4ar97ijfc7mg35zdgpad6x8ivkdx9qii6mz35khi1ps9g5bz7"))
+          (patches (search-patches "openssl-runpath.patch"
+                                   "openssl-c-rehash-in.patch")))))))
+
+(define-public openssl-next
+  (package
+    (inherit openssl)
+    (name "openssl")
+    (replacement #f)
+    (version "1.1.0b")
+    (source (origin
+             (method url-fetch)
+             (uri (list (string-append "ftp://ftp.openssl.org/source/"
+                                       name "-" version ".tar.gz")
+                        (string-append "ftp://ftp.openssl.org/source/old/"
+                                       (string-trim-right version char-set:letter)
+                                       "/" name "-" version ".tar.gz")))
+              (patches (search-patches "openssl-1.1.0-c-rehash-in.patch"))
+              (sha256
+               (base32
+                "1xznrqvb1dbngv2k2nb6da6fdw00c01sy2i36yjdxr4vpxrf0pd4"))))
+    (outputs '("out"
+               "doc"        ;1.3MiB of man3 pages
+               "static"))   ; 5.5MiB of .a files
+    (arguments
+     (substitute-keyword-arguments (package-arguments openssl)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'patch-tests)          ; These two phases are not needed by
+           (delete 'patch-Makefile.org)   ; OpenSSL 1.1.0.
+
+           (add-after 'configure 'patch-runpath
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((lib (string-append (assoc-ref outputs "out") "/lib")))
+                 (substitute* "Makefile.shared"
+                   (("\\$\\$\\{SHAREDCMD\\} \\$\\$\\{SHAREDFLAGS\\}")
+                    (string-append "$${SHAREDCMD} $${SHAREDFLAGS}"
+                                   " -Wl,-rpath," lib)))
+                 #t)))))))))
+
 (define-public libressl
   (package
     (name "libressl")
-    (version "2.4.2")
+    (version "2.5.0")
     (source
      (origin
       (method url-fetch)
@@ -336,7 +420,7 @@ required structures.")
              version ".tar.gz"))
       (sha256
        (base32
-        "1qyrcyzrrn6r9cqvm66ib72qyr65q4hrdyiq1vb24a6nwmwdg1sz"))))
+        "1bkfvapi4z826slycmicvs7hwgk4l82gd8w6nqvznldbammvyll6"))))
     (build-system gnu-build-system)
     (native-search-paths
       ;; FIXME: These two variables must designate a single file or directory
@@ -477,7 +561,7 @@ security, and applying best practice development processes.")
        ("python2-psutil" ,python2-psutil)
        ("python2-requests" ,python2-requests)
        ("python2-pytz" ,python2-pytz)))
-    (synopsis "Let's Encrypt client")
+    (synopsis "Let's Encrypt client by the Electronic Frontier Foundation")
     (description "Tool to automatically receive and install X.509 certificates
 to enable TLS on servers.  The client will interoperate with the Let’s Encrypt CA which
 will be issuing browser-trusted certificates for free.")
@@ -486,7 +570,8 @@ will be issuing browser-trusted certificates for free.")
 
 (define-public letsencrypt
   (package (inherit certbot)
-    (name "letsencrypt")))
+    (name "letsencrypt")
+    (properties `((superseded . ,certbot)))))
 
 (define-public perl-net-ssleay
   (package
@@ -620,3 +705,37 @@ arithmetic in Perl.")
   (description "Crypt::OpenSSL::Random is a OpenSSL/LibreSSL pseudo-random
 number generator")
   (license (package-license perl))))
+
+(define-public acme-client
+  (package
+    (name "acme-client")
+    (version "0.1.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://kristaps.bsd.lv/" name "/"
+                                  "snapshots/" name "-portable-"
+                                  version ".tgz"))
+              (sha256
+               (base32
+                "09pipyfk448gxqr7ci56gsq5la8wlydv7wwn9wk0zgjxmlh7h6fb"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ; no test suite
+       #:make-flags
+       (list "CC=gcc"
+             (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)))) ; no './configure' script
+    (inputs
+     `(("libbsd" ,libbsd)
+       ("libressl" ,libressl)))
+    (synopsis "Let's Encrypt client by the OpenBSD project")
+    (description "acme-client is a Let's Encrypt client implemented in C.  It
+uses a modular design, and attempts to secure itself by dropping privileges and
+operating in a chroot where possible.  acme-client is developed on OpenBSD and
+then ported to the GNU / Linux environment.")
+    (home-page "https://kristaps.bsd.lv/acme-client/")
+    ;; acme-client is distributed under the ISC license, but the files 'jsmn.h'
+    ;; and 'jsmn.c' are distributed under the Expat license.
+    (license (list license:isc license:expat))))
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 951b8f680b..42d882e4bc 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -20,17 +20,19 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages tor)
-  #:use-module ((guix licenses) #:select (bsd-3 gpl2+ gpl2))
+  #:use-module ((guix licenses) #:select (bsd-3 gpl3+ gpl2+ gpl2))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages w3m))
@@ -38,14 +40,14 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.2.8.7")
+    (version "0.2.8.8")
     (source (origin
              (method url-fetch)
-             (uri (string-append "https://www.torproject.org/dist/tor-"
+             (uri (string-append "https://dist.torproject.org/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1iigfi8ljl88s8b5y1g4ak8im57simazscl467zvfbg8k6vf4i5f"))))
+               "1pp3h0a1cl25fv04b3j6wp8aw1sfpbd2lmag397dpp2k2b305bxi"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-2)))  ; for tests
@@ -56,7 +58,7 @@
 
     ;; TODO: Recommend `torsocks' since `torify' needs it.
 
-    (home-page "http://www.torproject.org/")
+    (home-page "https://www.torproject.org/")
     (synopsis "Anonymous network router to improve privacy on the Internet")
     (description
      "Tor protects you by bouncing your communications around a distributed
@@ -105,7 +107,7 @@ rejects UDP traffic from the application you're using.")
 (define-public privoxy
   (package
     (name "privoxy")
-    (version "3.0.24")
+    (version "3.0.26")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/ijbswa/Sources/"
@@ -113,7 +115,7 @@ rejects UDP traffic from the application you're using.")
                                  version "-stable-src.tar.gz"))
              (sha256
               (base32
-               "04mhkz5g713i2crvjd6s783hhrlsjjjlfb9llbaf13ghg3fgd0d3"))))
+               "1n4wpxmahl8m2y3d1azxa8lrdbpaad007k458skxrpz57ss1br2p"))))
     (build-system gnu-build-system)
     (arguments
      '(;; The default 'sysconfdir' is $out/etc; change that to
@@ -135,7 +137,7 @@ rejects UDP traffic from the application you're using.")
        ("zlib" ,zlib)
        ("autoconf" ,autoconf)
        ("automake" ,automake)))
-    (home-page "http://www.privoxy.org")
+    (home-page "https://www.privoxy.org")
     (synopsis "Web proxy with advanced filtering capabilities for enhancing privacy")
     (description
      "Privoxy is a non-caching web proxy with advanced filtering capabilities
@@ -145,3 +147,102 @@ flexible configuration and can be customized to suit individual needs and
 tastes.  It has application for both stand-alone systems and multi-user
 networks.")
     (license gpl2+)))
+
+(define-public onionshare
+  (package
+    (name "onionshare")
+    (version "0.9")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append "https://github.com/micahflee/onionshare/archive/v"
+                            version ".tar.gz"))
+        (file-name (string-append name "-" version ".tar.gz"))
+        (sha256
+         (base32
+          "0pc3xbq379415s0i0y6rz02hay20zbvgra1jmg4mgrl9vbdr8zmw"))
+        (patches (search-patches "onionshare-fix-install-paths.patch"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-install-path
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out        (assoc-ref outputs "out"))
+                    (onionshare (string-append out "/share/onionshare")))
+               (substitute*
+                 "install/pyinstaller.spec"
+                 ;; inform onionshare where the 'resources' files are installed
+                 (("../resources") onionshare))
+               (substitute*
+                 "onionshare/strings.py"
+                 ;; correct the locale directory
+                 (("helpers.get_resource_path\\('locale'\\)")
+                  (string-append "'" onionshare "/locale'")))
+               (substitute*
+                 "onionshare/helpers.py"
+                 ;; correct the location of version.txt
+                 (("/usr") out)
+                 (("get_resource_path\\('version.txt'\\)")
+                  (string-append "'" onionshare "/version.txt'"))
+                 (("get_resource_path\\('wordlist.txt'\\)")
+                  (string-append "'" onionshare "/wordlist.txt'")))
+               (substitute*
+                 "onionshare/web.py"
+                 ;; fix the location of the html files
+                 (("helpers.get_resource_path\\('html/denied.html'\\)")
+                  (string-append "'" onionshare "/html/denied.html'"))
+                 (("helpers.get_resource_path\\('html/404.html'\\)")
+                  (string-append "'" onionshare "/html/404.html'"))
+                 (("helpers.get_resource_path\\('html/index.html'\\)")
+                  (string-append "'" onionshare "/html/index.html'")))
+               (substitute*
+                 "onionshare_gui/file_selection.py"
+                 (("helpers.get_resource_path\\('images/drop_files.png'\\)")
+                  (string-append "'" onionshare "/images/drop_files.png'")))
+               (substitute*
+                 "onionshare_gui/server_status.py"
+                 (("helpers.get_resource_path\\('images/server_stopped.png'\\)")
+                  (string-append "'" onionshare "/images/server_stopped.png'"))
+                 (("helpers.get_resource_path\\('images/server_working.png'\\)")
+                  (string-append "'" onionshare "/images/server_working.png'"))
+                 (("helpers.get_resource_path\\('images/server_started.png'\\)")
+                  (string-append "'" onionshare "/images/server_started.png'")))
+               (substitute*
+                 "onionshare_gui/onionshare_gui.py"
+                 (("helpers.get_resource_path\\('images/logo.png'\\)")
+                  (string-append "'" onionshare "/images/logo.png'")))
+               (substitute*
+                 "install/onionshare.desktop"
+                 (("/usr") out))
+             #t)))
+         (delete 'check)
+         (add-before 'strip 'tests
+           ;; After all the patching we run the tests after installing.
+           ;; This is also a known issue:
+           ;; https://github.com/micahflee/onionshare/issues/284
+           (lambda _ (zero? (system* "nosetests" "test")))))
+       ;; can't compress the egg because it expects to find all the resources
+       ;; inside the egg as though it were a folder.
+       #:configure-flags '("--single-version-externally-managed" "--root=/")
+       ))
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (inputs
+     `(("python-flask" ,python-flask)
+       ("python-nautilus" ,python-nautilus)
+       ("python-sip" ,python-sip)
+       ("python-stem" ,python-stem)
+       ("python-pyqt" ,python-pyqt)))
+    (home-page "https://onionshare.org/")
+    (synopsis "Securely and anonymously share files")
+    (description "OnionShare lets you securely and anonymously share files of
+any size.  It works by starting a web server, making it accessible as a Tor
+hidden service, and generating an unguessable URL to access and download the
+files.  It doesn't require setting up a server on the internet somewhere or
+using a third party filesharing service.  You host the file on your own computer
+and use a Tor hidden service to make it temporarily accessible over the
+internet.  The other user just needs to use Tor Browser to download the file
+from you.")
+    (license (list gpl3+
+                   bsd-3)))) ; onionshare/socks.py
diff --git a/gnu/packages/tre.scm b/gnu/packages/tre.scm
deleted file mode 100644
index 721a350cf0..0000000000
--- a/gnu/packages/tre.scm
+++ /dev/null
@@ -1,57 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 John Darrington
-;;; Copyright © 2015 Mark H Weaver <mhw@netris.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 tre)
-  #:use-module (gnu packages)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system gnu)
-  #:use-module (guix licenses))
-
-(define-public tre
-  (package
-    (name "tre")
-    (version "0.8.0")
-    (source
-      (origin
-        (method url-fetch)
-        (uri
-          (string-append "http://laurikari.net/tre/" name "-" version
-                         ".tar.bz2"))
-        (sha256
-          (base32 "0n36cgqys59r2gmb7jzbqiwsy790v8nbxk82d2n2saz0rp145ild"))))
-
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases (alist-cons-before
-                 'check 'install-locales
-                  (lambda _
-                    ;; The tests require the availability of the
-                    ;; 'en_US.ISO-8859-1' locale.
-                    (setenv "LOCPATH" (getcwd))
-                    (zero? (system* "localedef" "--no-archive"
-                                    "--prefix" (getcwd) "-i" "en_US"
-                                    "-f" "ISO-8859-1" "./en_US.ISO-8859-1")))
-                 %standard-phases)))
-    (synopsis "Approximate regex matching library and agrep utility")
-    (description "Superset of the POSIX regex API, enabling approximate
-matching.  Also ships a version of the agrep utility which behaves similar to
-grep but features inexact matching.")
-    (home-page "http://laurikari.net/tre")
-    (license bsd-2)))
diff --git a/gnu/packages/u-boot.scm b/gnu/packages/u-boot.scm
index 15b24a6056..cdd52d8747 100644
--- a/gnu/packages/u-boot.scm
+++ b/gnu/packages/u-boot.scm
@@ -32,7 +32,7 @@
 (define-public dtc
   (package
     (name "dtc")
-    (version "1.4.1")
+    (version "1.4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -40,24 +40,18 @@
                     "dtc-" version ".tar.xz"))
               (sha256
                (base32
-                "155v52palf5fwfcnq696s41whjk0a5dqx98b7maqzdn7xbc2m6bp"))
-              (patches
-                (search-patches "dtc-add-missing-symbols-to-lds.patch"))))
+                "1b7si8niyca4wxbfah3qw4p4wli81mc1qwfhaswvrfqahklnwi8k"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
        ("flex" ,flex)))
     (arguments
      `(#:make-flags
-       (list "CC=gcc" (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       (list "CC=gcc"
+             (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             "INSTALL=install")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-paths
-           (lambda _
-             (substitute* "Makefile"
-               (("/usr/bin/install") "install"))
-             (substitute* "Makefile"
-               (("PREFIX = \\$\\(HOME\\)") ""))))
          (delete 'configure))))
     (home-page "https://www.devicetree.org")
     (synopsis "Compiles device tree source files")
@@ -132,8 +126,11 @@ also initializes the boards (RAM etc).")
                     (copy-file file target-file)))
                 uboot-files)))))))))
 
-(define-public u-boot-vexpress_ca9x4
+(define-public u-boot-vexpress
   (make-u-boot-package "vexpress_ca9x4" "arm-linux-gnueabihf"))
 
 (define-public u-boot-malta
   (make-u-boot-package "malta" "mips64el-linux-gnuabi64"))
+
+(define-public u-boot-beagle-bone-black
+  (make-u-boot-package "am335x_boneblack" "arm-linux-gnueabihf"))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 5022297b31..c0a122379c 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -59,6 +59,7 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages readline)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages xml)
@@ -111,14 +112,14 @@ as well as the classic centralized workflow.")
 (define-public git
   (package
    (name "git")
-   (version "2.9.3")
+   (version "2.10.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0qzs681a64k3shh5p0rg41l1z16fbk5sj0xga45k34hp1hsp654z"))))
+              "1rr9zyafb6q3wixyjar6cc7z7vdh1dqa4b5irz3gz1df02n68cy7"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -131,7 +132,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "0kabsmjfbvq4y1vlwq0yl2y4033a90rnwsq01d7np3cvy55fiq0l"))))))
+            "1y92v1bxk67ilsizqnjba6hqvrsy2zvmipyd9nnz865s21yrj5ry"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
@@ -142,6 +143,7 @@ as well as the classic centralized workflow.")
 
       ;; For 'git-svn'.
       ("subversion" ,subversion)
+      ("perl-term-readkey" ,perl-term-readkey)
 
       ;; For 'git-send-email'
       ("perl-authen-sasl" ,perl-authen-sasl)
@@ -226,14 +228,15 @@ as well as the classic centralized workflow.")
                         (list gitk git-gui git-cit git-se git-svn)
                         (list gitk* git-gui* git-cit* git-se* git-svn*))
 
-              ;; Tell 'git-svn' where Subversion is.
+              ;; Tell 'git-svn' where Subversion and perl-term-readkey are.
               (wrap-program git-svn*
                 `("PATH" ":" prefix
                   (,(string-append (assoc-ref inputs "subversion")
                                    "/bin")))
                 `("PERL5LIB" ":" prefix
-                  (,(string-append (assoc-ref inputs "subversion")
-                                   "/lib/perl5/site_perl")))
+                  ,(map (lambda (i) (string-append (assoc-ref inputs i)
+                                                   "/lib/perl5/site_perl"))
+                        '("subversion" "perl-term-readkey")))
 
                 ;; XXX: The .so for SVN/Core.pm lacks a RUNPATH, so
                 ;; help it find 'libsvn_client-1.so'.
@@ -293,6 +296,20 @@ everything from small to very large projects with speed and efficiency.")
    (license license:gpl2)
    (home-page "http://git-scm.com/")))
 
+;; Some dependent packages directly access internal interfaces which
+;; have changed in 2.10
+(define-public git@2.9
+  (package
+    (inherit git)
+    (version "2.9.3")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://kernel.org/software/scm/git/git-"
+                                version ".tar.xz"))
+            (sha256
+             (base32
+              "0qzs681a64k3shh5p0rg41l1z16fbk5sj0xga45k34hp1hsp654z"))))))
+
 (define-public libgit2
   (package
     (name "libgit2")
@@ -387,7 +404,7 @@ write native speed custom Git applications in any language with bindings.")
        ("xmllint" ,libxml2)
        ("xsltprot" ,libxslt)))
     (inputs
-     `(("git:src" ,(package-source git))
+     `(("git:src" ,(package-source git@2.9))
        ("openssl" ,openssl)
        ("zlib" ,zlib)))
     (home-page "https://git.zx2c4.com/cgit/")
@@ -1035,7 +1052,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
 (define-public tig
   (package
     (name "tig")
-    (version "2.1.1")
+    (version "2.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1043,12 +1060,21 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
                     version ".tar.gz"))
               (sha256
                (base32
-                "0bw5wivswwh7vx897q8xc2cqgkqhdzk8gh6fnav2kf34sngigiah"))))
+                "0k3m894vfkgkj7xbr0j6ph91351dl6id5f0hk2ksjp5lmg9i6llg"))))
     (build-system gnu-build-system)
+    (native-inputs
+     `(("asciidoc" ,asciidoc)
+       ("xmlto" ,xmlto)))
     (inputs
-     `(("ncurses" ,ncurses)))
+     `(("ncurses" ,ncurses)
+       ("readline" ,readline)))
     (arguments
-     `(#:tests? #f)) ; tests require access to /dev/tty
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-doc
+           (lambda _
+             (zero? (system* "make" "install-doc")))))
+       #:tests? #f)) ; tests require access to /dev/tty
      ;;`(#:test-target "test"))
     (home-page "http://jonas.nitro.dk/tig/")
     (synopsis "Ncurses-based text user interface for Git")
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index b85ece0aac..4a4a3461d4 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -6,10 +6,11 @@
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2015, 2016 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2016 Dmitry Nikolaev <cameltheman@gmail.com>
+;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,11 +48,13 @@
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages avahi)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages cdrom)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages elf)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages fribidi)
@@ -566,14 +569,14 @@ audio/video codec library.")
 (define-public ffmpeg-2.8
   (package
     (inherit ffmpeg)
-    (version "2.8.7")
+    (version "2.8.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0z0mcj2q3ysp9qdn1ks03g5sn2zxyr06vxs4al0m4b5b3in8mglp"))))
+               "1691bmq8j56rcys09xwvzjq16z25m8vczj5a50gdn7ydm9qjykpr"))))
     (arguments
      (substitute-keyword-arguments (package-arguments ffmpeg)
        ((#:configure-flags flags)
@@ -616,6 +619,7 @@ audio/video codec library.")
        ("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
        ("gnutls" ,gnutls)
+       ("liba52" ,liba52)
        ("libcddb" ,libcddb)
        ("libgcrypt" ,libgcrypt)
        ("libkate" ,libkate)
@@ -646,9 +650,7 @@ audio/video codec library.")
        ("xcb-util-keysyms" ,xcb-util-keysyms)))
     (arguments
      `(#:configure-flags
-       `("--disable-a52" ; FIXME: reenable once available
-
-         ;; Gross workaround for <https://trac.videolan.org/vlc/ticket/16907>.
+       `(;; Gross workaround for <https://trac.videolan.org/vlc/ticket/16907>.
          ;; In our case, this led to a test failure:
          ;;   test_libvlc_equalizer: libvlc/equalizer.c:122: test_equalizer: Assertion `isnan(libvlc_audio_equalizer_get_amp_at_index (equalizer, u_bands))' failed.
          "ac_cv_c_fast_math=no"
@@ -790,7 +792,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
 (define-public mpv
   (package
     (name "mpv")
-    (version "0.19.0")
+    (version "0.20.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -798,7 +800,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
                     ".tar.gz"))
               (sha256
                (base32
-                "1qk7blpg64v47qfnvpgnbf413v5gzn900wmlivs727fd88cq3x9x"))
+                "0mibhjg5skcwcfpg6dx7yi2gj14xawnq2jzmcfwq9knmvv9cjvpy"))
               (file-name (string-append name "-" version ".tar.gz"))))
     (build-system waf-build-system)
     (native-inputs
@@ -834,7 +836,6 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
        ("mpg123" ,mpg123)
        ("pulseaudio" ,pulseaudio)
        ("rsound" ,rsound)
-       ("vapoursynth" ,vapoursynth)
        ("waf" ,python-waf)
        ("youtube-dl" ,youtube-dl)
        ("zlib" ,zlib)))
@@ -887,7 +888,7 @@ access to mpv's powerful playback capabilities.")
 (define-public libvpx
   (package
     (name "libvpx")
-    (version "1.5.0")
+    (version "1.6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://storage.googleapis.com/"
@@ -895,7 +896,7 @@ access to mpv's powerful playback capabilities.")
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "15v7qw0ydyxn08ksb6lxn1l51pxgpwgshdwd3275yrr5hs86fv9h"))
+                "1basd6dda5di9p7jhc0f4f52wzm9c3hsravqspw6ibpcn5gbpbyh"))
               (patches (search-patches "libvpx-CVE-2016-2818.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -925,7 +926,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2016.07.22")
+    (version "2016.09.11.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://youtube-dl.org/downloads/"
@@ -933,7 +934,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "02wcxpcbpvsbvyxcnhhf94ma0x5dcg4fygnxxca2h31dp47dkak9"))))
+                "0dfbb1lnpq3if7i5xvq8n6rvlgni3ryc8cw4bcrg1glmca3v1pkc"))))
     (build-system python-build-system)
     (home-page "https://youtube-dl.org")
     (arguments
@@ -976,11 +977,27 @@ YouTube.com and a few more sites.")
                (base32
                 "1q1whviqv5sr9nr372h31zwid1rvbfbx3z4lzr8lnj25xha6cdm6"))))
     (build-system gnu-build-system)
-    (arguments `(#:configure-flags '("--disable-bdjava")))
+    (arguments
+     `(#:configure-flags '("--disable-bdjava")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-dlopen-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((libaacs (assoc-ref inputs "libaacs"))
+                   (libbdplus (assoc-ref inputs "libbdplus")))
+               (substitute* "src/libbluray/disc/aacs.c"
+                 (("\"libaacs\"")
+                  (string-append "\"" libaacs "/lib/libaacs\"")))
+               (substitute* "src/libbluray/disc/bdplus.c"
+                 (("\"libbdplus\"")
+                  (string-append "\"" libbdplus "/lib/libbdplus\"")))
+               #t))))))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs
      `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
+       ("libaacs" ,libaacs)
+       ("libbdplus" ,libbdplus)
        ("libxml2" ,libxml2)))
     (home-page "https://www.videolan.org/developers/libbluray.html")
     (synopsis "Blu-Ray Disc playback library")
@@ -1235,7 +1252,7 @@ capabilities.")
 (define-public vapoursynth
   (package
     (name "vapoursynth")
-    (version "32")
+    (version "33.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1244,7 +1261,7 @@ capabilities.")
               (file-name (string-append name "-" version))
               (sha256
                (base32
-                "1j08whj946v2kkpgxsfhpca8xf0ax9iqzn73wvwjx319p9j0ymp9"))))
+                "1504jaw4yqdlyls0bz9f90rvqq7cy1jvmrnhdvwnmdfbpikqwi4c"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -1272,6 +1289,8 @@ capabilities.")
 manipulation.  It aims to be a modern rewrite of Avisynth, supporting
 multithreading, generalized colorspaces, per frame properties, and videos with
 format changes.")
+    ;; src/core/cpufeatures only allows x86, ARM or PPC
+    (supported-systems (delete "mips64el-linux" %supported-systems))
     ;; As seen from the source files.
     (license license:lgpl2.1+)))
 
@@ -1587,3 +1606,46 @@ and MPEG system streams.")
                    license:lgpl2.1
                    license:lgpl2.1+
                    license:gpl2))))
+
+(define-public libbdplus
+  (package
+    (name "libbdplus")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://ftp.videolan.org/pub/videolan/libbdplus/"
+                           version "/" name "-" version ".tar.bz2"))
+       (sha256
+        (base32 "02n87lysqn4kg2qk7d1ffrp96c44zkdlxdj0n16hbgrlrpiwlcd6"))))
+    (inputs
+     `(("libgcrypt" ,libgcrypt)))
+    (build-system gnu-build-system)
+    (home-page "http://www.videolan.org/developers/libbdplus.html")
+    (synopsis "Library for decrypting certain Blu-Ray discs")
+    (description "libbdplus is a library which implements the BD+ System
+specifications.")
+    (license license:lgpl2.1+)))
+
+(define-public libaacs
+  (package
+    (name "libaacs")
+    (version "0.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "ftp://ftp.videolan.org/pub/videolan/libaacs/"
+                           version "/" name "-" version ".tar.bz2"))
+       (sha256
+        (base32 "1s5v075hnbs57995r6lljm79wgrip3gnyf55a0y7bja75jh49hwm"))))
+    (inputs
+     `(("libgcrypt" ,libgcrypt)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)))
+    (build-system gnu-build-system)
+    (home-page "http://www.videolan.org/developers/libaacs.html")
+    (synopsis "Library for decrypting certain Blu-Ray discs")
+    (description "libaacs is a library which implements the Advanced Access
+Content System specification.")
+    (license license:lgpl2.1+)))
diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm
index 44f94ff49e..b1ee527c7a 100644
--- a/gnu/packages/vim.scm
+++ b/gnu/packages/vim.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,26 +32,35 @@
 (define-public vim
   (package
     (name "vim")
-    (version "7.4")
+    (version "8.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://ftp.vim.org/pub/vim/unix/vim-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1pjaffap91l2rb9pjnlbrpvb3ay5yhhr3g91zabjvw1rqk9adxfh"))))
+               "1s34rf8089klsbdx5l0iw7vjymir0kzfrx8wb30s31wygnq29axc"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
        #:parallel-tests? #f
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'make-bit-reproducable
+           (lambda _
+             (substitute* "src/version.c"
+               ((" VIM_VERSION_LONG_DATE") " VIM_VERSION_LONG")
+               ((" __DATE__") "")
+               ((" __TIME__") ""))
+             #t))
          (add-after 'configure 'patch-config-files
            (lambda _
              (substitute* "runtime/tools/mve.awk"
                (("/usr/bin/nawk") (which "gawk")))
-             (substitute* "src/testdir/Makefile"
-               (("/bin/sh") (which "sh"))))))))
+             (substitute* '("src/testdir/Makefile"
+                            "src/testdir/test_normal.vim")
+               (("/bin/sh") (which "sh")))
+             #t)))))
     (inputs
      `(("gawk" ,gawk)
        ("inetutils" ,inetutils)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index e004062fba..923b39ee8f 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -14,6 +14,7 @@
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -585,8 +586,8 @@ unavailable.")
     (native-inputs `(("texinfo" ,texinfo)))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
-       (alist-delete 'configure %standard-phases)
+     `(#:phases (modify-phases %standard-phases
+                  (delete 'configure))
        #:make-flags (let ((out (assoc-ref %outputs "out")))
                       (list (string-append "PREFIX=" out)
                             (string-append "LOCAL_ROOT="
@@ -1789,6 +1790,33 @@ by calling Encode::encode(locale => $bytes) and converted back again
 with Encode::decode(locale => $string).")
     (home-page "http://search.cpan.org/~gaas/Encode-Locale/")))
 
+(define-public perl-feed-find
+  (package
+    (name "perl-feed-find")
+    (version "0.07")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/B/BT/BTROTT/"
+                                  "Feed-Find-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sa33cm8ww55cymnl8j7b5yspi2y5xkkkgqqa4h6fs3wdqylz600"))))
+    (build-system perl-build-system)
+    (arguments
+     ;; Tests expect to query files at http://stupidfool.org/perl/feeds/
+     `(#:tests? #f))
+    (inputs
+     `(("perl-class-errorhandler" ,perl-class-errorhandler)
+       ("perl-html-parser" ,perl-html-parser)
+       ("perl-libwww" ,perl-libwww)
+       ("perl-uri" ,perl-uri)))
+    (home-page "http://search.cpan.org/dist/Feed-Find")
+    (synopsis "Syndication feed auto-discovery")
+    (description "@code{Feed::Find} implements feed auto-discovery for finding
+syndication feeds, given a URI.  It will discover the following feed formats:
+RSS 0.91, RSS 1.0, RSS 2.0, Atom.")
+    (license (package-license perl))))
+
 (define-public perl-file-listing
   (package
     (name "perl-file-listing")
@@ -2385,14 +2413,14 @@ and IPv6 sockets, intended as a replacement for IO::Socket::INET.")
 (define-public perl-io-socket-ssl
   (package
     (name "perl-io-socket-ssl")
-    (version "2.033")
+    (version "2.038")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/S/SU/SULLR/"
                                   "IO-Socket-SSL-" version ".tar.gz"))
               (sha256
                (base32
-                "01qggwmc97kpzx49fp4fxysrjyq8mpnx54nrb087ridj0ch3cf46"))
+                "11fiifxyvn7njc9p52wgygyw24jz7rh7gnz2ikjphr4l4x9f03rx"))
               (patches (search-patches
                         "perl-io-socket-ssl-openssl-1.0.2f-fix.patch"))))
     (build-system perl-build-system)
@@ -2918,6 +2946,31 @@ represent \"Uniform Resource Identifier references\" as specified in RFC 2396
 and updated by RFC 2732.")
     (home-page "http://search.cpan.org/dist/URI/")))
 
+(define-public perl-uri-fetch
+  (package
+    (name "perl-uri-fetch")
+    (version "0.13")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/N/NE/NEILB/"
+                                  "URI-Fetch-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0rw6xiqm70s218aii9id3hf8j3pz6n22xnwd8v9m1ff2bnh63c0d"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:tests? #f)) ; Tests require internet connection to succeed
+    (inputs
+     `(("perl-class-errorhandler" ,perl-class-errorhandler)
+       ("perl-libwww" ,perl-libwww)
+       ("perl-uri" ,perl-uri)))
+    (home-page "http://search.cpan.org/dist/URI-Fetch")
+    (synopsis "Smart URI fetching/caching")
+    (description "@code{URI::Fetch} is a smart client for fetching HTTP pages,
+notably syndication feeds (RSS, Atom, and others), in an intelligent, bandwidth-
+and time-saving way.")
+    (license (package-license perl))))
+
 (define-public perl-uri-find
   (package
     (name "perl-uri-find")
@@ -2964,6 +3017,30 @@ URI::Find::Schemeless.  For a command-line interface, urifind is provided.")
 methods for WebSocket URIs as it does for HTTP URIs.")
     (license (package-license perl))))
 
+(define-public perl-uri-template
+  (package
+    (name "perl-uri-template")
+    (version "0.22")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/B/BR/BRICAS/URI-Template-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "08kjjb4c0v9gqfrfnj1wkivylxl05finn11ra64dj136fhmnyrbg"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("perl-uri" ,perl-uri)))
+    (native-inputs
+     `(("perl-test-pod-coverage" ,perl-test-pod-coverage)
+       ("perl-test-pod" ,perl-test-pod)
+       ("perl-json" ,perl-json)))
+    (home-page "http://search.cpan.org/dist/URI-Template")
+    (synopsis "Object for handling URI templates")
+    (description "This perl module provides a wrapper around URI templates as described in
+RFC 6570.")
+    (license (package-license perl))))
+
 (define-public perl-www-curl
   (package
     (name "perl-www-curl")
@@ -3016,6 +3093,34 @@ library.")
 web browsing, used for automating interaction with websites.")
     (license (package-license perl))))
 
+(define-public perl-www-opensearch
+  (package
+    (name "perl-www-opensearch")
+    (version "0.17")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/B/BR/BRICAS/"
+                                  "WWW-OpenSearch-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1yxplx1q1qk2fvnzqrbk01lz26fy1lyhay51a3ky7q3jgh9p01rb"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:tests? #f)) ; Tests require further modules to be packaged
+    (inputs
+     `(("perl-data-page" ,perl-data-page)
+       ("perl-libwww" ,perl-libwww)
+       ("perl-uri" ,perl-uri)
+       ("perl-uri-template" ,perl-uri-template)
+       ("perl-xml-feed" ,perl-xml-feed)
+       ("perl-xml-libxml" ,perl-xml-libxml)))
+    (home-page "http://search.cpan.org/dist/WWW-OpenSearch")
+    (synopsis "Search A9 OpenSearch compatible engines")
+    (description
+     "@code{WWW::OpenSearch} is a module to search @url{A9's OpenSearch,
+http://opensearch.a9.com} compatible search engines.")
+    (license (package-license perl))))
+
 (define-public perl-www-robotrules
   (package
     (name "perl-www-robotrules")
@@ -3068,13 +3173,13 @@ particularly easy to create complete web applications using httpuv alone.")
 (define-public r-jsonlite
   (package
     (name "r-jsonlite")
-    (version "0.9.20")
+    (version "1.0")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "jsonlite" version))
               (sha256
                (base32
-                "08b2gifd81yzj0h4k7pqp2cc2r5lwsg3sxnssi6c96rgqvl4702n"))))
+                "0bcnzzycvwwkm0lv0ka9xf55z5c1795b7c2vhmf53z73cxixsmnp"))))
     (build-system r-build-system)
     (home-page "http://arxiv.org/abs/1403.2805")
     (synopsis "Robust, high performance JSON parser and generator for R")
@@ -3125,6 +3230,20 @@ directory.")
                (base32
                 "0j9bf80grd6gwh7116m575pycv87c0wcwkxsz3gzzfs4aw3pxyr9"))))
     (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; See https://github.com/rstudio/htmltools/pull/68
+         ;; The resource files are in the store and have mode 444.  After
+         ;; copying the files R fails to remove them again because it doesn't
+         ;; have write access to them.
+         (add-after 'unpack 'copy-files-without-mode
+           (lambda _
+             (substitute* "R/html_dependency.R"
+               (("file.copy\\(from, to, " prefix)
+                (string-append prefix
+                               "copy.mode = FALSE, ")))
+             #t)))))
     (propagated-inputs
      `(("r-digest" ,r-digest)
        ("r-rcpp" ,r-rcpp)))
@@ -3137,13 +3256,13 @@ directory.")
 (define-public r-htmlwidgets
   (package
     (name "r-htmlwidgets")
-    (version "0.6")
+    (version "0.7")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "htmlwidgets" version))
               (sha256
                (base32
-                "1sljs7zajzj1lsrrvqv7anpma4plzs79mqwmw7b2c5d7mn9py8lw"))))
+                "1xh8aiaci5hi3r67ym7r37hm89m9vzywk292avnmaj125kq7w1d0"))))
     (build-system r-build-system)
     (propagated-inputs
      `(("r-htmltools" ,r-htmltools)
@@ -3160,14 +3279,28 @@ applications.")
 (define-public r-curl
   (package
     (name "r-curl")
-    (version "0.9.7")
+    (version "1.2")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "curl" version))
               (sha256
                (base32
-                "1p24bcaf1wbfdi1r9ibyyp0l0zp4kzs4g3srv8vikz93hycm1qa6"))))
+                "04fwasg400v8dvkcn1fcha1jzdz8lbyxi0679q7flsyrp57b3jrf"))))
     (build-system r-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; The environment variable CURL_CA_BUNDLE is only respected when
+         ;; running Windows, so we disable the platform checks.
+         ;; This can be removed once the libcurl has been patched.
+         (add-after 'unpack 'allow-CURL_CA_BUNDLE
+           (lambda _
+             (substitute* "R/onload.R"
+               (("if \\(!grepl\\(\"mingw\".*")
+                "if (FALSE)\n"))
+             (substitute* "src/handle.c"
+               (("#ifdef _WIN32") "#if 1"))
+             #t)))))
     (inputs
      `(("libcurl" ,curl)))
     (home-page "https://github.com/jeroenooms/curl")
@@ -3182,6 +3315,44 @@ where data can be processed either in memory, on disk, or streaming via the
 callback or connection interfaces.")
     (license l:expat)))
 
+(define-public r-hwriter
+  (package
+    (name "r-hwriter")
+    (version "1.3.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "hwriter" version))
+       (sha256
+        (base32
+         "0arjsz854rfkfqhgvpqbm9lfni97dcjs66isdsfvwfd2wz932dbb"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/hwriter")
+    (synopsis "Output R objects in HTML format")
+    (description
+     "This package provides easy-to-use and versatile functions to output R
+objects in HTML format.")
+    (license l:lgpl2.1+)))
+
+(define-public r-rjson
+  (package
+    (name "r-rjson")
+    (version "0.2.15")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rjson" version))
+       (sha256
+        (base32
+         "1vzjyvf57k1fjizlk28rby65y5lsww5qnfvgnhln74qwda7hvl3p"))))
+    (build-system r-build-system)
+    (home-page "http://cran.r-project.org/web/packages/rjson")
+    (synopsis "JSON library for R")
+    (description
+     "This package provides functions to convert R objects into JSON objects
+and vice-versa.")
+    (license l:gpl2+)))
+
 (define-public gumbo-parser
   (package
     (name "gumbo-parser")
@@ -3505,3 +3676,64 @@ tools they trust (e.g. wget).")
 rendering engine entirely written from scratch.  It is small and capable of
 handling many of the web standards in use today.")
     (license l:gpl2+)))
+
+(define-public surfraw
+  (package
+    (name "surfraw")
+    (version "2.2.9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://surfraw.alioth.debian.org/dist/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1fy4ph5h9kp0jzj1m6pfylxnnmgdk0mmdppw76z9jhna4jndk5xa"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("perl" ,perl)
+       ("perl-www-opensearch" ,perl-www-opensearch)
+       ("perl-html-parser" ,perl-html-parser)
+       ("perl-libwww" ,perl-libwww)))
+    (synopsis "Unix command line interface to the www")
+    (description "Surfraw (Shell Users' Revolutionary Front Rage Against the Web)
+provides a unix command line interface to a variety of popular www search engines
+and similar services.")
+    (home-page "https://surfraw.alioth.debian.org/")
+    (license l:public-domain)))
+
+(define-public darkhttpd
+  (package
+    (name "darkhttpd")
+    (version "1.12")
+    (source
+     (origin
+       ;; The darkhttpd release tarball URL fails to download with a
+       ;; 'TLS warning alert'. Download from the darkhttpd git repo
+       ;; until the problem has been fixed upstream.
+       (method git-fetch)
+       (uri (git-reference
+             (url (string-append "https://unix4lyfe.org/git/darkhttpd"))
+             (commit "41b68476c35270f47dcd2ddebe27cbcd87e43d41")))
+       (sha256
+        (base32
+         "0wi8dfgj4ic0fsy4dszl69xgxdxlwxz4c30vsw2i2dpnczgjm04k"))
+       (file-name (string-append name "-" version "-checkout"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags '("CC=gcc")
+       #:tests? #f ; No test suite
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (install-file "darkhttpd"
+                           (string-append (assoc-ref outputs "out")
+                                          "/bin"))
+             #t)))))
+    (synopsis "Simple static web server")
+    (description "darkhttpd is a simple static web server.  It is
+standalone and does not need inetd or ucspi-tcp.  It does not need any
+config files---you only have to specify the www root.")
+    (home-page "https://unix4lyfe.org/darkhttpd/")
+    (license l:isc)))
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index 4391ac6035..cd3dd876cb 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -53,14 +53,14 @@
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.12.4")
+    (version "2.14.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0xwsc2lpb4q55vdgmwljx43219l0sa6r5mqs3bmw3fwsb5vk2ka2"))))
+                "02paj0anbnqn1z3hn5c4csmq9nga995rzagiplj3sjk2dj1ss4q5"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no tests
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 2cc9f44cdc..710a93397f 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -9,6 +9,8 @@
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -382,7 +384,7 @@ experience.")
 (define-public awesome
   (package
     (name "awesome")
-    (version "3.4.15")
+    (version "3.5.9")
     (source
      (origin (method url-fetch)
              (uri (string-append
@@ -390,7 +392,7 @@ experience.")
                    version ".tar.xz"))
              (sha256
               (base32
-               "1m910lr7wkw2dgzmirfvz7dasfswhhccdf65l21iiciv24c3w1bb"))
+               "0kynair1ykr74b39a4gcm2y24viial64337cf26nhlc7azjbby67"))
              (modules '((guix build utils)
                         (srfi srfi-19)))
              (snippet
@@ -417,12 +419,14 @@ experience.")
               ("dbus" ,dbus)
               ("gdk-pixbuf" ,gdk-pixbuf)
               ("glib" ,glib)
+              ("gobject-introspection" ,gobject-introspection)
               ("imlib2" ,imlib2)
               ("libev" ,libev)
               ("libxcb" ,libxcb)
               ("libxcursor" ,libxcursor)
               ("libxdg-basedir" ,libxdg-basedir)
-              ("lua" ,lua-5.1)
+              ("lua" ,lua)
+              ("lua-lgi",lua-lgi)
               ("pango" ,pango)
               ("startup-notification" ,startup-notification)
               ("xcb-util" ,xcb-util)
@@ -436,32 +440,49 @@ experience.")
        ;; '--no-name' is used, which removes timestamps from gzip output.
        #:configure-flags '("-DCOMPRESS_MANPAGES=off")
 
-       #:phases (modify-phases %standard-phases
-                  (add-before 'build 'xmlto-skip-validation
-                    (lambda _
-                      ;; We can't download the necessary schema, so so skip
-                      ;; validation and assume they're valid.
-                      (substitute* "../build/CMakeFiles/man.dir/build.make"
-                        (("/xmlto")
-                         (string-append "/xmlto --skip-validation")))
-                      #t))
-                  (replace 'check
-                    (lambda _
-                      ;; There aren't any tests, so just make sure the binary
-                      ;; gets built and can be run successfully.
-                      (zero? (system* "../build/awesome" "-v")))))))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'xmlto-skip-validation
+           (lambda _
+             ;; We can't download the necessary schema, so so skip
+             ;; validation and assume they're valid.
+             (substitute* "../build/CMakeFiles/man.dir/build.make"
+               (("/xmlto")
+                (string-append "/xmlto --skip-validation")))
+             #t))
+         (add-before 'configure 'set-lua-paths
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; The build process needs to load cairo dynamically.
+             (let* ((cairo (string-append
+                             (assoc-ref inputs "cairo") "/lib" ))
+                    (lua-lgi (assoc-ref inputs "lua-lgi") ))
+               (setenv "LD_LIBRARY_PATH" cairo )
+               (setenv "LUA_PATH" (string-append lua-lgi
+                                                 "/share/lua/5.2/?.lua"))
+               (setenv "LUA_CPATH" (string-append lua-lgi
+                                                  "/lib/lua/5.2/?.so"))
+               #t)))
+         (replace 'check
+           (lambda _
+             ;; There aren't any tests, so just make sure the binary
+             ;; gets built and can be run successfully.
+             (zero? (system* "../build/awesome" "-v"))))
+         (add-after 'install 'wrap
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((awesome (assoc-ref outputs "out"))
+                    (cairo (string-append
+                             (assoc-ref inputs "cairo") "/lib" ))
+                    (lua-lgi (assoc-ref inputs "lua-lgi") ))
+               (wrap-program (string-append awesome "/bin/awesome")
+                 `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH")))
+                 `("LD_LIBRARY_PATH" suffix (, cairo))
+                 `("LUA_PATH" suffix (,(string-append lua-lgi
+                                                      "/share/lua/5.2/?.lua")))
+                 `("LUA_CPATH" suffix (,(string-append
+                                          lua-lgi "/lib/lua/5.2/?.so"))))))))))
     (synopsis "Highly configurable window manager")
     (description
-     "awesome is a window manager for X.  It manages windows in different
-layouts, like floating or tiled.  Any layout can be applied dynamically,
-optimizing the environment for the application in use and the task currently
-being performed.
-
-In a tiled layout, windows are managed in a master and stacking area.  In a
-floating layout windows can be resized and moved freely.  Dialog windows are
-always managed as floating, regardless of the layout currently applied.
-
-Windows are grouped by tags in awesome.  Each window can be tagged with one or
-more tags.  Selecting certain tags displays all windows with these tags.")
+     "Awesome has been designed as a framework window manager.  It is fast, small,
+dynamic and extensible using the Lua programming language.")
     (license license:gpl2+)
     (home-page "https://awesome.naquadah.org/")))
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index bafbf42629..94a017d1d5 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -11,6 +11,9 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -184,6 +187,38 @@ which read a graph file and create an instance of the Graph class.
 the @code{Graph} class and write it out in a specific file format.")
     (license (package-license perl))))
 
+(define-public perl-xml-atom
+  (package
+    (name "perl-xml-atom")
+    (version "0.41")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/M/MI/MIYAGAWA/"
+                                  "XML-Atom-" version ".tar.gz"))
+              (sha256
+               (base32
+                "17lnkb9ymrhk2z642bhj5i2bv3q1da3kpp2lvsl0yhqshk3wdjj8"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-datetime" ,perl-datetime)
+       ;; TODO package: perl-datetime-format-atom
+       ("perl-xml-xpath" ,perl-xml-xpath)))
+    (inputs
+     `(("perl-class-data-inheritable" ,perl-class-data-inheritable)
+       ("perl-datetime" ,perl-datetime)
+       ("perl-datetime-timezone" ,perl-datetime-timezone)
+       ("perl-digest-sha1" ,perl-digest-sha1)
+       ("perl-libwww" ,perl-libwww)
+       ("perl-uri" ,perl-uri)
+       ("perl-xml-libxml" ,perl-xml-libxml)
+       ("perl-xml-xpath" ,perl-xml-xpath)))
+    (home-page "http://search.cpan.org/dist/XML-Atom")
+    (synopsis "Atom feed and API implementation")
+    (description
+     "Atom is a syndication, API, and archiving format for weblogs and other data.
+@code{XML::Atom} implements the feed format as well as a client for the API.")
+    (license (package-license perl))))
+
 (define-public perl-xml-parser
   (package
     (name "perl-xml-parser")
@@ -306,6 +341,41 @@ maintain a prefix to namespace URI map, and provides a number of basic
 checks.")
     (license (package-license perl))))
 
+(define-public perl-xml-rss
+  (package
+    (name "perl-xml-rss")
+    (version "1.59")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/S/SH/SHLOMIF/"
+                                  "XML-RSS-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0v6vfizn2psy6av057kp7fv3z3y73s6b3w56jm3zr6hlq48llsx2"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-manifest" ,perl-test-manifest)
+       ("perl-test-differences" ,perl-test-differences)
+       ("perl-test-pod" ,perl-test-pod)
+       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+    ;; XXX: The test which uses this modules does not run, even when it is included
+    ;; it is ignored. ("perl-test-trailingspace" ,perl-test-trailingspace)
+    (inputs
+     `(("perl-datetime" ,perl-datetime)
+       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
+       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
+       ("perl-html-parser" ,perl-html-parser)
+       ("perl-xml-parser" ,perl-xml-parser)))
+    (home-page "http://search.cpan.org/dist/XML-RSS")
+    (synopsis "Creates and updates RSS files")
+    (description
+     "This module provides a basic framework for creating and maintaining
+RDF Site Summary (RSS) files.  This distribution also contains many examples
+that allow you to generate HTML from an RSS, convert between 0.9, 0.91, and
+1.0 version, and more.")
+    (license (package-license perl))))
+
 (define-public perl-xml-sax
   (package
     (name "perl-xml-sax")
@@ -562,6 +632,69 @@ encoding of the message to be send into XML, sending the message to the
 server, collect the answer, and finally decoding the XML to Perl.")
     (license (package-license perl))))
 
+(define-public perl-xml-feed
+  (package
+    (name "perl-xml-feed")
+    (version "0.53")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/D/DA/DAVECROSS/"
+                                  "XML-Feed-" version ".tar.gz"))
+              (sha256
+               (base32
+                "07b165g6wk8kqwpl49r3n0kag6p2nrkyp3ch0h8qyxb6nrnkkq7c"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:tests? #f)) ; Tests require internet connection
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-uri" ,perl-uri)
+       ("perl-class-data-inheritable" ,perl-class-data-inheritable)))
+    (inputs
+     `(("perl-class-errorhandler" ,perl-class-errorhandler)
+       ("perl-datetime" ,perl-datetime)
+       ("perl-datetime-format-mail" ,perl-datetime-format-mail)
+       ("perl-datetime-format-w3cdtf" ,perl-datetime-format-w3cdtf)
+       ("perl-feed-find" ,perl-feed-find)
+       ("perl-html-parser" ,perl-html-parser)
+       ("perl-libwww-perl" ,perl-libwww)
+       ("perl-module-pluggable" ,perl-module-pluggable)
+       ("perl-uri-fetch" ,perl-uri-fetch)
+       ("perl-xml-atom" ,perl-xml-atom)
+       ("perl-xml-libxml" ,perl-xml-libxml)
+       ("perl-xml-rss" ,perl-xml-rss)))
+    (home-page "http://search.cpan.org/dist/XML-Feed")
+    (synopsis "XML Syndication Feed Support")
+    (description "@code{XML::Feed} is a syndication feed parser for both RSS and
+Atom feeds.  It also implements feed auto-discovery for finding feeds, given a URI.
+@code{XML::Feed} supports the following syndication feed formats:
+RSS 0.91, RSS 1.0, RSS 2.0, Atom")
+    (license (package-license perl))))
+
+(define-public perl-xml-xpath
+  (package
+    (name "perl-xml-xpath")
+    (version "1.37")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/M/MA/MANWAR/"
+                                  "XML-XPath-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0997l8vjgq8p7d1irvp6amqyrv24x7f8hybjm4l4ayag32b13bmq"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-path-tiny" ,perl-path-tiny)))
+    (inputs
+     `(("perl-xml-parser" ,perl-xml-parser)))
+    (home-page "http://search.cpan.org/dist/XML-XPath")
+    (synopsis "Parse and evaluate XPath statements")
+    (description
+     "This module aims to comply exactly to the @url{XPath specification,
+https://www.w3.org/TR/xpath} and yet allow extensions to be added in
+the form of functions.")
+    (license (package-license perl))))
+
 (define-public pugixml
   (package
     (name "pugixml")
@@ -596,6 +729,30 @@ different Unicode encodings which happen automatically during
 parsing/saving.")
     (license license:expat)))
 
+(define-public python-pyxb
+  (package
+    (name "python-pyxb")
+    (version "1.2.5")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "PyXB" version))
+              (sha256
+               (base32
+                "0rzzwibfqa28gxgcxx4cybx1qcg0g6fand06ykj3gz7z5kp653sf"))))
+    (build-system python-build-system)
+    (home-page "http://pyxb.sourceforge.net/")
+    (synopsis "Python XML Schema Bindings")
+    (description
+     "PyXB (\"pixbee\") is a pure Python package that generates Python source
+code for classes that correspond to data structures defined by XMLSchema.")
+    (license (list license:asl2.0    ; Most files.
+                   license:expat     ; pyxb/utils/six.py
+                   license:gpl2      ; bundled jquery in doc is dual MIT/GPL2
+                   license:psfl))))  ; pyxb/utils/activestate.py
+
+(define-public python2-pyxb
+  (package-with-python2 python-pyxb))
+
 (define-public xmlto
   (package
     (name "xmlto")
@@ -747,10 +904,31 @@ Cflags: -I${includedir}
                #t))))))
     (synopsis "Small XML parser for C++")
     (description "TinyXML is a small and simple XML parsing library for the
-C++ programming langauge.")
+C++ programming language.")
     (home-page "http://www.grinninglizard.com/tinyxml/index.html")
     (license license:zlib)))
 
+(define-public tinyxml2
+  (package
+    (name "tinyxml2")
+    (version "4.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/leethomason/tinyxml2/archive/"
+                           version ".tar.gz"))
+       (sha256
+       (base32
+        "083z4r4khcndxi9k840lcr48sqxvar4gpsnf749xfdn1bkr8xcql"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f))    ; no tests
+    (synopsis "Small XML parser for C++")
+    (description "TinyXML2 is a small and simple XML parsing library for the
+C++ programming language.")
+    (home-page "http://www.grinninglizard.com/tinyxml2/")
+    (license license:zlib)))
+
 (define-public xmlstarlet
  (package
    (name "xmlstarlet")
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index aafb781ddf..00f975bf65 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system perl)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages bison)
@@ -5169,6 +5171,23 @@ communicates with the user via graphical controls such as buttons and
 draggable titlebars and borders.")
     (license license:x11)))
 
+(define-public xorg-server-xwayland
+  (package
+    (inherit xorg-server)
+    (name "xorg-server-xwayland")
+    (inputs
+     `(("libepoxy" ,libepoxy)
+       ("wayland" ,wayland)
+       ,@(package-inputs xorg-server)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments xorg-server)
+       ((#:configure-flags flags)
+        `(cons* "--enable-xwayland" "--disable-xorg"
+                "--disable-docs"    "--disable-devel-docs"
+                "--disable-xvfb"    "--disable-xnest"
+                "--disable-xquartz" "--disable-xwin"
+                ,flags))))
+    (synopsis "Xorg server with wayland backend")))
 
 
 ;; packages of height 4 in the propagated-inputs tree
diff --git a/gnu/packages/zip.scm b/gnu/packages/zip.scm
index 6defbda49e..c9fb70c031 100644
--- a/gnu/packages/zip.scm
+++ b/gnu/packages/zip.scm
@@ -48,11 +48,12 @@
                       (list "-f" "unix/Makefile"
                             (string-append "prefix=" out)
                             (string-append "MANDIR=" out "/share/man/man1")))
-       #:phases (alist-replace
-                 'build
-                 (lambda* (#:key (make-flags '()) #:allow-other-keys)
-                   (zero? (apply system* "make" "generic_gcc" make-flags)))
-                 (alist-delete 'configure %standard-phases))))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'build
+                  (lambda* (#:key (make-flags '()) #:allow-other-keys)
+                    (zero? (apply system* "make" "generic_gcc" make-flags))))
+         (delete 'configure))))
     (home-page "http://www.info-zip.org/Zip.html")
     (synopsis "Compression and file packing utility")
     (description
diff --git a/gnu/services.scm b/gnu/services.scm
index 5479bfae19..693a7f8001 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -25,6 +25,7 @@
   #:use-module (guix profiles)
   #:use-module (guix sets)
   #:use-module (guix ui)
+  #:use-module (guix modules)
   #:use-module (gnu packages base)
   #:use-module (gnu packages bash)
   #:use-module (srfi srfi-1)
@@ -50,6 +51,7 @@
             service-kind
             service-parameters
 
+            simple-service
             modify-services
             service-back-edges
             fold-services
@@ -141,6 +143,13 @@
   (type       service-kind)
   (parameters service-parameters))
 
+(define (simple-service name target value)
+  "Return a service that extends TARGET with VALUE.  This works by creating a
+singleton service type NAME, of which the returned service is an instance."
+  (let* ((extension (service-extension target identity))
+         (type      (service-type (name name)
+                                  (extensions (list extension)))))
+    (service type value)))
 
 (define-syntax %modify-service
   (syntax-rules (=>)
@@ -312,16 +321,6 @@ ACTIVATION-SCRIPT-TYPE."
 
 (define (activation-script gexps)
   "Return the system's activation script, which evaluates GEXPS."
-  (define %modules
-    '((gnu build activation)
-      (gnu build linux-boot)
-      (gnu build linux-modules)
-      (gnu build file-systems)
-      (guix build utils)
-      (guix build syscalls)
-      (guix build bournish)
-      (guix elf)))
-
   (define (service-activations)
     ;; Return the activation scripts for SERVICES.
     (mapm %store-monad
@@ -330,7 +329,8 @@ ACTIVATION-SCRIPT-TYPE."
 
   (mlet* %store-monad ((actions (service-activations)))
     (gexp->file "activate"
-                (with-imported-modules %modules
+                (with-imported-modules (source-module-closure
+                                        '((gnu build activation)))
                   #~(begin
                       (use-modules (gnu build activation))
 
diff --git a/gnu/services/avahi.scm b/gnu/services/avahi.scm
index 807cc05a22..60e9e61f94 100644
--- a/gnu/services/avahi.scm
+++ b/gnu/services/avahi.scm
@@ -88,7 +88,7 @@
          (system? #t)
          (comment "Avahi daemon user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define %avahi-activation
   ;; Activation gexp.
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index f3f6408687..afbecdb47e 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -39,6 +39,7 @@
   #:use-module (gnu packages package-management)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages lsof)
+  #:use-module (gnu packages terminals)
   #:use-module ((gnu build file-systems)
                 #:select (mount-flags->bit-mask))
   #:use-module (guix gexp)
@@ -57,6 +58,8 @@
             session-environment-service-type
             host-name-service
             console-keymap-service
+            %default-console-font
+            console-font-service-type
             console-font-service
 
             udev-configuration
@@ -66,6 +69,11 @@
             udev-service
             udev-rule
 
+            login-configuration
+            login-configuration?
+            login-service-type
+            login-service
+
             mingetty-configuration
             mingetty-configuration?
             mingetty-service
@@ -82,6 +90,9 @@
 
             nscd-service-type
             nscd-service
+
+            syslog-configuration
+            syslog-configuration?
             syslog-service
             syslog-service-type
             %default-syslog.conf
@@ -108,6 +119,11 @@
             rngd-configuration?
             rngd-service-type
             rngd-service
+
+            kmscon-configuration
+            kmscon-configuration?
+            kmscon-service-type
+
             pam-limits-service-type
             pam-limits-service
 
@@ -513,7 +529,7 @@ stopped before 'kill' is called."
       (define device (rngd-configuration-device config))
 
       (define rngd-command
-        (list #~(string-append #$rng-tools "/sbin/rngd")
+        (list (file-append rng-tools "/sbin/rngd")
               "-f" "-r" device))
 
       (shepherd-service
@@ -621,37 +637,83 @@ strings or string-valued gexps."
   "Return a service to load console keymaps from @var{files}."
   (service console-keymap-service-type files))
 
-(define console-font-service-type
-  (shepherd-service-type
-   'console-font
-   (match-lambda
-     ((tty font)
-      (let ((device (string-append "/dev/" tty)))
-        (shepherd-service
-         (documentation "Load a Unicode console font.")
-         (provision (list (symbol-append 'console-font-
-                                         (string->symbol tty))))
-
-         ;; Start after mingetty has been started on TTY, otherwise the settings
-         ;; are ignored.
-         (requirement (list (symbol-append 'term-
-                                           (string->symbol tty))))
+(define %default-console-font
+  ;; Note: 'LatGrkCyr-8x16' has the advantage of providing three common
+  ;; scripts as well as glyphs for em dash, quotation marks, and other Unicode
+  ;; codepoints notably found in the UTF-8 manual.
+  "LatGrkCyr-8x16")
+
+(define (console-font-shepherd-services tty+font)
+  "Return a list of Shepherd services for each pair in TTY+FONT."
+  (map (match-lambda
+         ((tty . font)
+          (let ((device (string-append "/dev/" tty)))
+            (shepherd-service
+             (documentation "Load a Unicode console font.")
+             (provision (list (symbol-append 'console-font-
+                                             (string->symbol tty))))
+
+             ;; Start after mingetty has been started on TTY, otherwise the settings
+             ;; are ignored.
+             (requirement (list (symbol-append 'term-
+                                               (string->symbol tty))))
+
+             (start #~(lambda _
+                        (and #$(unicode-start device)
+                             (zero?
+                              (system* (string-append #$kbd "/bin/setfont")
+                                       "-C" #$device #$font)))))
+             (stop #~(const #t))
+             (respawn? #f)))))
+       tty+font))
 
-         (start #~(lambda _
-                    (and #$(unicode-start device)
-                         (zero?
-                          (system* (string-append #$kbd "/bin/setfont")
-                                   "-C" #$device #$font)))))
-         (stop #~(const #t))
-         (respawn? #f)))))))
+(define console-font-service-type
+  (service-type (name 'console-fonts)
+                (extensions
+                 (list (service-extension shepherd-root-service-type
+                                          console-font-shepherd-services)))
+                (compose concatenate)
+                (extend append)))
 
 (define* (console-font-service tty #:optional (font "LatGrkCyr-8x16"))
-  "Return a service that sets up Unicode support in @var{tty} and loads
+  "This procedure is deprecated in favor of @code{console-font-service-type}.
+
+Return a service that sets up Unicode support in @var{tty} and loads
 @var{font} for that tty (fonts are per virtual console in Linux.)"
-  ;; Note: 'LatGrkCyr-8x16' has the advantage of providing three common
-  ;; scripts as well as glyphs for em dash, quotation marks, and other Unicode
-  ;; codepoints notably found in the UTF-8 manual.
-  (service console-font-service-type (list tty font)))
+  (simple-service (symbol-append 'console-font- (string->symbol tty))
+                  console-font-service-type `((,tty . ,font))))
+
+(define %default-motd
+  (plain-file "motd" "This is the GNU operating system, welcome!\n\n"))
+
+(define-record-type* <login-configuration>
+  login-configuration make-login-configuration
+  login-configuration?
+  (motd                   login-configuration-motd     ;file-like
+                          (default %default-motd))
+  ;; Allow empty passwords by default so that first-time users can log in when
+  ;; the 'root' account has just been created.
+  (allow-empty-passwords? login-configuration-allow-empty-passwords?
+                          (default #t)))               ;Boolean
+
+(define (login-pam-service config)
+  "Return the list of PAM service needed for CONF."
+  ;; Let 'login' be known to PAM.
+  (list (unix-pam-service "login"
+                          #:allow-empty-passwords?
+                          (login-configuration-allow-empty-passwords? config)
+                          #:motd
+                          (login-configuration-motd config))))
+
+(define login-service-type
+  (service-type (name 'login)
+                (extensions (list (service-extension pam-root-service-type
+                                                     login-pam-service)))))
+
+(define* (login-service #:optional (config (login-configuration)))
+  "Return a service configure login according to @var{config}, which specifies
+the message of the day, among other things."
+  (service login-service-type config))
 
 (define-record-type* <mingetty-configuration>
   mingetty-configuration make-mingetty-configuration
@@ -659,35 +721,17 @@ strings or string-valued gexps."
   (mingetty       mingetty-configuration-mingetty ;<package>
                   (default mingetty))
   (tty            mingetty-configuration-tty)     ;string
-  (motd           mingetty-configuration-motd     ;file-like
-                  (default (plain-file "motd" "Welcome.\n")))
   (auto-login     mingetty-auto-login             ;string | #f
                   (default #f))
   (login-program  mingetty-login-program          ;gexp
                   (default #f))
   (login-pause?   mingetty-login-pause?           ;Boolean
-                  (default #f))
-
-  ;; Allow empty passwords by default so that first-time users can log in when
-  ;; the 'root' account has just been created.
-  (allow-empty-passwords? mingetty-configuration-allow-empty-passwords?
-                          (default #t)))          ;Boolean
-
-(define (mingetty-pam-service conf)
-  "Return the list of PAM service needed for CONF."
-  ;; Let 'login' be known to PAM.  All the mingetty services will have that
-  ;; PAM service, but that's fine because they're all identical and duplicates
-  ;; are removed.
-  (list (unix-pam-service "login"
-                          #:allow-empty-passwords?
-                          (mingetty-configuration-allow-empty-passwords? conf)
-                          #:motd
-                          (mingetty-configuration-motd conf))))
+                  (default #f)))
 
 (define mingetty-shepherd-service
   (match-lambda
-    (($ <mingetty-configuration> mingetty tty motd auto-login login-program
-                                 login-pause? allow-empty-passwords?)
+    (($ <mingetty-configuration> mingetty tty auto-login login-program
+                                 login-pause?)
      (list
       (shepherd-service
        (documentation "Run mingetty on an tty.")
@@ -715,9 +759,7 @@ strings or string-valued gexps."
 (define mingetty-service-type
   (service-type (name 'mingetty)
                 (extensions (list (service-extension shepherd-root-service-type
-                                                     mingetty-shepherd-service)
-                                  (service-extension pam-root-service-type
-                                                     mingetty-pam-service)))))
+                                                     mingetty-shepherd-service)))))
 
 (define* (mingetty-service config)
   "Return a service to run mingetty according to @var{config}, which specifies
@@ -885,17 +927,27 @@ given @var{config}---an @code{<nscd-configuration>} object.  @xref{Name
 Service Switch}, for an example."
   (service nscd-service-type config))
 
+
+(define-record-type* <syslog-configuration>
+  syslog-configuration  make-syslog-configuration
+  syslog-configuration?
+  (syslogd              syslog-configuration-syslogd
+                        (default (file-append inetutils "/libexec/syslogd")))
+  (config-file          syslog-configuration-config-file
+                        (default %default-syslog.conf)))
+
 (define syslog-service-type
   (shepherd-service-type
    'syslog
-   (lambda (config-file)
+   (lambda (config)
      (shepherd-service
       (documentation "Run the syslog daemon (syslogd).")
       (provision '(syslogd))
       (requirement '(user-processes))
       (start #~(make-forkexec-constructor
-                (list (string-append #$inetutils "/libexec/syslogd")
-                      "--no-detach" "--rcfile" #$config-file)))
+                (list #$(syslog-configuration-syslogd config)
+                      "--rcfile" #$(syslog-configuration-config-file config))
+                #:pid-file "/var/run/syslog.pid"))
       (stop #~(make-kill-destructor))))))
 
 ;; Snippet adapted from the GNU inetutils manual.
@@ -921,14 +973,14 @@ Service Switch}, for an example."
      mail.*                                  /var/log/maillog
 "))
 
-(define* (syslog-service #:key (config-file %default-syslog.conf))
-  "Return a service that runs @command{syslogd}.  If configuration file
-name @var{config-file} is not specified, use some reasonable default
-settings.
+(define* (syslog-service #:optional (config (syslog-configuration)))
+  "Return a service that runs @command{syslogd} and takes
+@var{<syslog-configuration>} as a parameter.
 
 @xref{syslogd invocation,,, inetutils, GNU Inetutils}, for more
 information on the configuration file syntax."
-  (service syslog-service-type config-file))
+  (service syslog-service-type config))
+
 
 (define pam-limits-service-type
   (let ((security-limits
@@ -996,7 +1048,7 @@ starting at FIRST-UID, and under GID."
 
              (comment (format #f "Guix Build User ~2d" n))
              (home-directory "/var/empty")
-             (shell #~(string-append #$shadow "/sbin/nologin"))))
+             (shell (file-append shadow "/sbin/nologin"))))
           1+
           1))
 
@@ -1023,7 +1075,7 @@ failed to register hydra.gnu.org public key: ~a~%" status))))))))
 
 (define %default-authorized-guix-keys
   ;; List of authorized substitute keys.
-  (list #~(string-append #$guix "/share/guix/hydra.gnu.org.pub")))
+  (list (file-append guix "/share/guix/hydra.gnu.org.pub")))
 
 (define-record-type* <guix-configuration>
   guix-configuration make-guix-configuration
@@ -1154,7 +1206,7 @@ failed to register hydra.gnu.org public key: ~a~%" status))))))))
          (system? #t)
          (comment "guix publish user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define guix-publish-service-type
   (service-type (name 'guix-publish)
@@ -1419,41 +1471,76 @@ This service is not part of @var{%base-services}."
   (service gpm-service-type
            (gpm-configuration (gpm gpm) (options options))))
 
+(define-record-type* <kmscon-configuration>
+  kmscon-configuration     make-kmscon-configuration
+  kmscon-configuration?
+  (kmscon                  kmscon-configuration-kmscon
+                           (default kmscon))
+  (virtual-terminal        kmscon-configuration-virtual-terminal)
+  (login-program           kmscon-configuration-login-program
+                           (default #~(string-append #$shadow "/bin/login")))
+  (login-arguments         kmscon-configuration-login-arguments
+                           (default '("-p")))
+  (hardware-acceleration?  kmscon-configuration-hardware-acceleration?
+                           (default #f))) ; #t causes failure
+
+(define kmscon-service-type
+  (shepherd-service-type
+   'kmscon
+   (lambda (config)
+     (let ((kmscon (kmscon-configuration-kmscon config))
+           (virtual-terminal (kmscon-configuration-virtual-terminal config))
+           (login-program (kmscon-configuration-login-program config))
+           (login-arguments (kmscon-configuration-login-arguments config))
+           (hardware-acceleration? (kmscon-configuration-hardware-acceleration? config)))
+
+       (define kmscon-command
+         #~(list
+            (string-append #$kmscon "/bin/kmscon") "--login"
+            "--vt" #$virtual-terminal
+            #$@(if hardware-acceleration? '("--hwaccel") '())
+            "--" #$login-program #$@login-arguments))
+
+       (shepherd-service
+        (documentation "kmscon virtual terminal")
+        (requirement '(user-processes udev dbus-system))
+        (provision (list (symbol-append 'term- (string->symbol virtual-terminal))))
+        (start #~(make-forkexec-constructor #$kmscon-command))
+        (stop #~(make-kill-destructor)))))))
+
 
 (define %base-services
   ;; Convenience variable holding the basic services.
-  (let ((motd (plain-file "motd" "
-This is the GNU operating system, welcome!\n\n")))
-    (list (console-font-service "tty1")
-          (console-font-service "tty2")
-          (console-font-service "tty3")
-          (console-font-service "tty4")
-          (console-font-service "tty5")
-          (console-font-service "tty6")
-
-          (mingetty-service (mingetty-configuration
-                             (tty "tty1") (motd motd)))
-          (mingetty-service (mingetty-configuration
-                             (tty "tty2") (motd motd)))
-          (mingetty-service (mingetty-configuration
-                             (tty "tty3") (motd motd)))
-          (mingetty-service (mingetty-configuration
-                             (tty "tty4") (motd motd)))
-          (mingetty-service (mingetty-configuration
-                             (tty "tty5") (motd motd)))
-          (mingetty-service (mingetty-configuration
-                             (tty "tty6") (motd motd)))
-
-          (static-networking-service "lo" "127.0.0.1"
-                                     #:provision '(loopback))
-          (syslog-service)
-          (urandom-seed-service)
-          (guix-service)
-          (nscd-service)
-
-          ;; The LVM2 rules are needed as soon as LVM2 or the device-mapper is
-          ;; used, so enable them by default.  The FUSE and ALSA rules are
-          ;; less critical, but handy.
-          (udev-service #:rules (list lvm2 fuse alsa-utils crda)))))
+  (list (login-service)
+
+        (service console-font-service-type
+                 (map (lambda (tty)
+                        (cons tty %default-console-font))
+                      '("tty1" "tty2" "tty3" "tty4" "tty5" "tty6")))
+
+        (mingetty-service (mingetty-configuration
+                           (tty "tty1")))
+        (mingetty-service (mingetty-configuration
+                           (tty "tty2")))
+        (mingetty-service (mingetty-configuration
+                           (tty "tty3")))
+        (mingetty-service (mingetty-configuration
+                           (tty "tty4")))
+        (mingetty-service (mingetty-configuration
+                           (tty "tty5")))
+        (mingetty-service (mingetty-configuration
+                           (tty "tty6")))
+
+        (static-networking-service "lo" "127.0.0.1"
+                                   #:provision '(loopback))
+        (syslog-service)
+        (urandom-seed-service)
+        (guix-service)
+        (nscd-service)
+
+        ;; The LVM2 rules are needed as soon as LVM2 or the device-mapper is
+        ;; used, so enable them by default.  The FUSE and ALSA rules are
+        ;; less critical, but handy.
+        (udev-service #:rules (list lvm2 fuse alsa-utils crda))))
 
 ;;; base.scm ends here
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 86847f8c50..1eed85542b 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -76,7 +76,7 @@ host	all	all	::1/128 	trust"))
          (system? #t)
          (comment "PostgreSQL server user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define postgresql-activation
   (match-lambda
@@ -171,7 +171,7 @@ and stores the database cluster in @var{data-directory}."
          (group "mysql")
          (system? #t)
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define mysql-configuration-file
   (match-lambda
diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm
index 690561cccd..876f56d45f 100644
--- a/gnu/services/dbus.scm
+++ b/gnu/services/dbus.scm
@@ -128,13 +128,13 @@ includes the @code{etc/dbus-1/system.d} directories of each package listed in
          (system? #t)
          (comment "D-Bus system bus user")
          (home-directory "/var/run/dbus")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define dbus-setuid-programs
   ;; Return the file name of the setuid program that we need.
   (match-lambda
     (($ <dbus-configuration> dbus services)
-     (list #~(string-append #$dbus "/libexec/dbus-daemon-launch-helper")))))
+     (list (file-append dbus "/libexec/dbus-daemon-launch-helper")))))
 
 (define (dbus-activation config)
   "Return an activation gexp for D-Bus using @var{config}."
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 8dacf54668..dfd1ea6e92 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -460,9 +460,8 @@ Users need to be in the @code{lp} group to access the D-Bus service.
 (define polkit-setuid-programs
   (match-lambda
     (($ <polkit-configuration> polkit)
-     (list #~(string-append #$polkit
-                            "/lib/polkit-1/polkit-agent-helper-1")
-           #~(string-append #$polkit "/bin/pkexec")))))
+     (list (file-append polkit "/lib/polkit-1/polkit-agent-helper-1")
+           (file-append polkit "/bin/pkexec")))))
 
 (define polkit-service-type
   (service-type (name 'polkit)
@@ -522,7 +521,7 @@ the capability to suspend the system if the user is logged in locally."
          (system? #t)
          (comment "colord daemon user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define colord-service-type
   (service-type (name 'colord)
@@ -738,8 +737,8 @@ seats.)"
   (define pam-elogind
     (pam-entry
      (control "required")
-     (module #~(string-append #$(elogind-package config)
-                              "/lib/security/pam_elogind.so"))))
+     (module (file-append (elogind-package config)
+                          "/lib/security/pam_elogind.so"))))
 
   (list (lambda (pam)
           (pam-service
diff --git a/gnu/services/dict.scm b/gnu/services/dict.scm
index b06922c911..da5d004701 100644
--- a/gnu/services/dict.scm
+++ b/gnu/services/dict.scm
@@ -73,7 +73,7 @@
          (group "dicod")
          (system? #t)
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define (dicod-configuration-file config)
   (define database->text
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index c252d669de..cb0f119f43 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -987,7 +987,7 @@ could allow a user to delete others' mailboxes, or ln -s
 
   (mail-full-filesystem-access?
    (boolean #f)
-   "Allow full filesystem access to clients.  There's no access checks
+   "Allow full file system access to clients.  There's no access checks
 other than what the operating system does for the active UID/GID.  It
 works with both maildir and mboxes, allowing you to prefix mailboxes
 names with e.g. /path/ or ~user/.")
@@ -997,7 +997,7 @@ names with e.g. /path/ or ~user/.")
   (mmap-disable?
    (boolean #f)
    "Don't use mmap() at all.  This is required if you store indexes to
-shared filesystems (NFS or clustered filesystem).")
+shared file systems (NFS or clustered file system).")
 
   (dotlock-use-excl?
    (boolean #t)
@@ -1229,7 +1229,7 @@ disabled.")
    (boolean #f)
    "When creating new mdbox files, immediately preallocate their size to
 @samp{mdbox-rotate-size}.  This setting currently works only in Linux
-with some filesystems (ext4, xfs).")
+with some file systems (ext4, xfs).")
 
   (mail-attachment-dir
    (string "")
@@ -1249,7 +1249,7 @@ externally.")
 
   (mail-attachment-fs
    (string "sis posix")
-   "Filesystem backend to use for saving attachments:
+   "File system backend to use for saving attachments:
 @table @code
 @item posix
 No SiS done by Dovecot (but this might help FS's own deduplication)
@@ -1352,7 +1352,7 @@ regeneration entirely.")
    "SSL crypto device to use, for valid values run \"openssl engine\".")
 
   (postmaster-address
-   (string "")
+   (string "postmaster@%d")
    "Address to use when sending rejection mails.
 Default is postmaster@@<your domain>.  %d expands to recipient domain.")
 
@@ -1505,7 +1505,7 @@ greyed out, instead of only later giving \"not selectable\" popup error.
          (system? #t)
          (comment "Dovecot daemon user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))
+         (shell (file-append shadow "/sbin/nologin")))
 
         (user-group (name "dovenull") (system? #t))
         (user-account
@@ -1514,7 +1514,7 @@ greyed out, instead of only later giving \"not selectable\" popup error.
          (system? #t)
          (comment "Dovecot daemon login user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define %dovecot-activation
   ;; Activation gexp.
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 71f49a03a5..7495179f8e 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -193,7 +194,7 @@ gateway."
    'dhcp-client
    (lambda (dhcp)
      (define dhclient
-       #~(string-append #$dhcp "/sbin/dhclient"))
+       (file-append dhcp "/sbin/dhclient"))
 
      (define pid-file
        "/var/run/dhclient.pid")
@@ -272,7 +273,7 @@ Protocol (DHCP) client, on all the non-loopback network interfaces."
      (let ()
        ;; TODO: Add authentication support.
        (define config
-         (string-append "driftfile /var/run/ntp.drift\n"
+         (string-append "driftfile /var/run/ntpd/ntp.drift\n"
                         (string-join (map (cut string-append "server " <>)
                                           servers)
                                      "\n")
@@ -305,7 +306,19 @@ restrict -6 ::1\n"))
          (system? #t)
          (comment "NTP daemon user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
+
+
+(define (ntp-service-activation config)
+  "Return the activation gexp for CONFIG."
+  (with-imported-modules '((guix build utils))
+    #~(begin
+        (define %user
+          (getpw "ntpd"))
+
+        (let ((directory "/var/run/ntpd"))
+          (mkdir-p directory)
+          (chown directory (passwd:uid %user) (passwd:gid %user))))))
 
 (define ntp-service-type
   (service-type (name 'ntp)
@@ -313,7 +326,9 @@ restrict -6 ::1\n"))
                  (list (service-extension shepherd-root-service-type
                                           ntp-shepherd-service)
                        (service-extension account-service-type
-                                          (const %ntp-accounts))))))
+                                          (const %ntp-accounts))
+                       (service-extension activation-service-type
+                                          ntp-service-activation)))))
 
 (define* (ntp-service #:key (ntp ntp)
                       (servers %ntp-servers))
@@ -346,7 +361,7 @@ keep the system clock synchronized with that of @var{servers}."
          (system? #t)
          (comment "Tor daemon user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define-record-type <hidden-service>
   (hidden-service name mapping)
@@ -539,7 +554,7 @@ project's documentation} for more information."
          (system? #t)
          (comment "BitlBee daemon user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define %bitlbee-activation
   ;; Activation gexp for BitlBee.
diff --git a/gnu/services/nfs.scm b/gnu/services/nfs.scm
new file mode 100644
index 0000000000..82713d8133
--- /dev/null
+++ b/gnu/services/nfs.scm
@@ -0,0 +1,54 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services nfs)
+  #:use-module (gnu)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu packages onc-rpc)
+  #:use-module (guix)
+  #:use-module (guix records)
+  #:export (rpcbind-service-type
+            rpcbind-configuration
+            rpcbind-configuration?))
+
+(define-record-type* <rpcbind-configuration>
+  rpcbind-configuration make-rpcbind-configuration
+  rpcbind-configuration?
+  (rpcbind             rpcbind-configuration-rpcbind
+                       (default rpcbind))
+  (warm-start?         rpcbind-configuration-warm-start?
+                       (default #t)))
+
+(define rpcbind-service-type
+  (shepherd-service-type
+   'rpcbind
+   (lambda (config)
+     (define pkg
+       (rpcbind-configuration-rpcbind config))
+
+     (define rpcbind-command
+       #~(list (string-append #$pkg "/bin/rpcbind") "-f"
+               #$@(if (rpcbind-configuration-warm-start? config) '("-w") '())))
+
+     (shepherd-service
+      (documentation "Start the RPC bind daemon.")
+      (requirement '(networking))
+      (provision '(rpcbind-daemon))
+
+      (start #~(make-forkexec-constructor #$rpcbind-command))
+      (stop #~(make-kill-destructor))))))
diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm
new file mode 100644
index 0000000000..ef1e78e9bf
--- /dev/null
+++ b/gnu/services/sddm.scm
@@ -0,0 +1,318 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 David Craven <david@craven.ch>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services sddm)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages display-managers)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu services)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services xorg)
+  #:use-module (gnu system pam)
+  #:use-module (gnu system shadow)
+  #:use-module (guix gexp)
+  #:use-module (guix records)
+  #:export (sddm-configuration
+            sddm-confiugration?
+            sddm-service-type
+            sddm-service))
+
+(define-record-type* <sddm-configuration>
+  sddm-configuration      make-sddm-configuration
+  sddm-configuration?
+  (sddm                   sddm-configuration-sddm
+                          (default sddm))
+
+  ;; [General]
+  ;; valid values are x11 and wayland
+  ;; currently doesn't do anything is enabled by wayland greeter PR
+  (display-server         sddm-configuration-display-server
+                          (default "x11"))
+  ;; valid values are on, off or none
+  (numlock                sddm-configuration-numlock
+                          (default "on"))
+  (halt-command           sddm-configuration-halt-command
+                          (default (file-append shepherd "/sbin/halt")))
+  (reboot-command         sddm-configuration-reboot-command
+                          (default (file-append shepherd "/sbin/reboot")))
+
+  ;; [Theme]
+  ;; valid values are elarun or maldives
+  (theme                  sddm-configuration-theme
+                          (default "maldives"))
+  (themes-directory       sddm-configuration-themes-directory
+                          (default "/run/current-system/profile/share/sddm/themes"))
+  (faces-directory        sddm-configuration-faces-directory
+                          (default "/run/current-system/profile/share/sddm/faces"))
+
+  ;; [Users]
+  (default-path           sddm-configuration-default-path
+                          (default "/run/current-system/profile/bin"))
+  (minimum-uid            sddm-configuration-minimum-uid
+                          (default 1000))
+  (maximum-uid            sddm-configuration-maximum-uid
+                          (default 2000))
+  (remember-last-user?    sddm-configuration-remember-last-user?
+                          (default #t))
+  (remember-last-session? sddm-configuration-remember-last-session?
+                          (default #t))
+  (hide-users             sddm-configuration-hide-users
+                          (default ""))
+  (hide-shells            sddm-configuration-hide-shells
+                          (default (file-append shadow "/sbin/nologin")))
+
+  ;; [Wayland]
+  (session-command        sddm-configuration-session-command
+                          (default (file-append sddm "/share/sddm/scripts/wayland-session")))
+  (sessions-directory     sddm-configuration-sessions-directory
+                          (default "/run/current-system/profile/share/wayland-sessions"))
+  ;; [X11]
+  (xorg-server-path       sddm-configuration-xorg-server-path
+                          (default (xorg-start-command)))
+  (xauth-path             sddm-configuration-xauth-path
+                          (default (file-append xauth "/bin/xauth")))
+  (xephyr-path            sddm-configuration-xephyr-path
+                          (default (file-append xorg-server "/bin/Xephyr")))
+  (xdisplay-start         sddm-configuration-xdisplay-start
+                          (default (file-append sddm "/share/sddm/scripts/Xsetup")))
+  (xdisplay-stop          sddm-configuration-xdisplay-stop
+                          (default (file-append sddm "/share/sddm/scripts/Xstop")))
+  (xsession-command       sddm-configuration-xsession-command
+                          (default (xinitrc)))
+  (xsessions-directory    sddm-configuration-xsessions-directory
+                          (default "/run/current-system/profile/share/xsessions"))
+  (minimum-vt             sddm-configuration-minimum-vt
+                          (default 7))
+  (xserver-arguments      sddm-configuration-xserver-arguments
+                          (default "-nolisten tcp"))
+
+  ;; [Autologin]
+  (auto-login-user        sddm-configuration-auto-login-user
+                          (default ""))
+  ;; valid values are xfce.desktop gnome.desktop weston.desktop hawaii.desktop
+  (auto-login-session     sddm-configuration-auto-login-session
+                          (default ""))
+  (relogin?               sddm-configuration-relogin?
+                          (default #f)))
+
+(define (sddm-configuration-file config)
+  (mixed-text-file "sddm.conf" "
+[General]
+DisplayServer="        (sddm-configuration-display-server config)              "
+Numlock="              (sddm-configuration-numlock config)                     "
+HaltCommand="          (sddm-configuration-halt-command config)                "
+RebootCommand="        (sddm-configuration-reboot-command config)              "
+
+[Users]
+DefaultPath="          (sddm-configuration-default-path config)                "
+MinimumUid="           (number->string (sddm-configuration-minimum-uid config))"
+MaximumUid="           (number->string (sddm-configuration-maximum-uid config))"
+RememberLastUser="     (if (sddm-configuration-remember-last-user? config)
+                           "true" "false")                                     "
+RememberLastSession="  (if (sddm-configuration-remember-last-session? config)
+                           "true" "false")                                     "
+HideUsers="            (sddm-configuration-hide-users config)                  "
+Hideshells="           (sddm-configuration-hide-shells config)                 "
+
+[Theme]
+Current="              (sddm-configuration-theme config)                       "
+ThemeDir="             (sddm-configuration-themes-directory config)            "
+FacesDir="             (sddm-configuration-faces-directory config)             "
+
+[Wayland]
+SessionCommand="       (sddm-configuration-session-command config)             "
+SessionDir="           (sddm-configuration-sessions-directory config)          "
+
+[X11]
+ServerPath="           (sddm-configuration-xorg-server-path config)            "
+XauthPath="            (sddm-configuration-xauth-path config)                  "
+XephyrPath="           (sddm-configuration-xephyr-path config)                 "
+DisplayCommand="       (sddm-configuration-xdisplay-start config)              "
+DisplayStopCommand="   (sddm-configuration-xdisplay-stop config)               "
+SessionCommand="       (sddm-configuration-xsession-command config)            "
+SessionDir="           (sddm-configuration-xsessions-directory config)         "
+MinimumVT="            (number->string (sddm-configuration-minimum-vt config)) "
+ServerArguments="      (sddm-configuration-xserver-arguments config)           "
+
+[Autologin]
+User="                 (sddm-configuration-auto-login-user config)             "
+Session="              (sddm-configuration-auto-login-session config)          "
+Relogin="              (if (sddm-configuration-relogin? config)
+                           "true" "false")                                     "
+"))
+
+(define (sddm-shepherd-service config)
+  "Return a <shepherd-service> for sddm with CONFIG."
+
+  (define sddm-command
+    #~(list (string-append #$(sddm-configuration-sddm config) "/bin/sddm")))
+
+  (list (shepherd-service
+         (documentation "SDDM display manager.")
+         (requirement '(user-processes))
+         (provision '(display-manager))
+         (start #~(make-forkexec-constructor #$sddm-command))
+         (stop #~(make-kill-destructor)))))
+
+(define (sddm-etc-service config)
+  (list `("sddm.conf" ,(sddm-configuration-file config))))
+
+(define (sddm-pam-service)
+  "Return a PAM service for @command{sddm}."
+  (pam-service
+   (name "sddm")
+   (auth
+    (list
+     (pam-entry
+      (control "requisite")
+      (module "pam_nologin.so"))
+     (pam-entry
+      (control "required")
+      (module "pam_env.so"))
+     (pam-entry
+      (control "required")
+      (module "pam_succeed_if.so")
+      (arguments (list "uid >= 1000" "quiet")))
+     ;; should be factored out into system-auth
+     (pam-entry
+      (control "required")
+      (module "pam_unix.so"))))
+   (account
+    (list
+     ;; should be factored out into system-account
+     (pam-entry
+      (control "required")
+      (module "pam_unix.so"))))
+   (password
+    (list
+     ;; should be factored out into system-password
+     (pam-entry
+      (control "required")
+      (module "pam_unix.so")
+      (arguments (list "sha512" "shadow" "try_first_pass")))))
+   (session
+    (list
+     ;; lfs has a required pam_limits.so
+     ;; should be factored out into system-session
+     (pam-entry
+      (control "required")
+      (module "pam_unix.so"))))))
+
+(define (sddm-greeter-pam-service)
+  "Return a PAM service for @command{sddm-greeter}."
+  (pam-service
+   (name "sddm-greeter")
+   (auth
+    (list
+     ;; Load environment form /etc/environment and ~/.pam_environment
+     (pam-entry
+      (control "required")
+      (module "pam_env.so"))
+     ;; Always let the greeter start without authentication
+     (pam-entry
+      (control "required")
+      (module "pam_permit.so"))))
+   (account
+    (list
+     ;; No action required for account management
+     (pam-entry
+      (control "required")
+      (module "pam_permit.so"))))
+   (password
+    (list
+     ;; Can't change password
+     (pam-entry
+      (control "required")
+      (module "pam_deny.so"))))
+   (session
+    (list
+     ;; Setup session
+     (pam-entry
+      (control "required")
+      (module "pam_unix.so"))))))
+
+(define (sddm-autologin-pam-service)
+  "Return a PAM service for @command{sddm-autologin}"
+  (pam-service
+   (name "sddm-autologin")
+   (auth
+    (list
+     (pam-entry
+      (control "requisite")
+      (module "pam_nologin.so"))
+     (pam-entry
+      (control "required")
+      (module "pam_succeed_if.so")
+      (arguments (list "uid >= 1000" "quiet")))
+     (pam-entry
+      (control "required")
+      (module "pam_permit.so"))))
+   (account
+    (list
+     (pam-entry
+      (control "include")
+      (module "sddm"))))
+   (password
+    (list
+     (pam-entry
+      (control "required")
+      (module "pam_deny.so"))))
+   (session
+    (list
+     (pam-entry
+      (control "include")
+      (module "sddm"))))))
+
+(define (sddm-pam-services config)
+  (list (sddm-pam-service)
+        (sddm-greeter-pam-service)
+        (sddm-autologin-pam-service)))
+
+(define %sddm-accounts
+  (list (user-group (name "sddm") (system? #t))
+        (user-account
+         (name "sddm")
+         (group "sddm")
+         (system? #t)
+         (comment "SDDM user")
+         (home-directory "/var/lib/sddm")
+         (shell (file-append shadow "/sbin/nologin")))))
+
+;; Add default themes to profile
+(define sddm-profile-service
+  (compose list sddm-configuration-sddm))
+
+(define sddm-service-type
+  (service-type (name 'sddm)
+                (extensions
+                  (list (service-extension shepherd-root-service-type
+                                           sddm-shepherd-service)
+                        (service-extension etc-service-type
+                                           sddm-etc-service)
+                        (service-extension pam-root-service-type
+                                           sddm-pam-services)
+                        (service-extension account-service-type
+                                           (const %sddm-accounts))
+                        (service-extension profile-service-type
+                                           sddm-profile-service)))))
+
+(define* (sddm-service #:optional (config (sddm-configuration)))
+  "Run the @uref{https://github.com/sddm/sddm,SSDM display manager}
+with the given @var{config}, a @code{<sddm-configuration>} object."
+  (service sddm-service-type config))
diff --git a/gnu/services/spice.scm b/gnu/services/spice.scm
index 26f072e7a8..bd0a538346 100644
--- a/gnu/services/spice.scm
+++ b/gnu/services/spice.scm
@@ -43,7 +43,7 @@
 
   (define spice-vdagentd-command
     (list
-      #~(string-append #$spice-vdagent "/sbin/spice-vdagentd")
+      (file-append spice-vdagent "/sbin/spice-vdagentd")
       "-x"))
 
   (list
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 9a7ea0fb46..084f8fa4ea 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2016 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -19,17 +20,25 @@
 
 (define-module (gnu services ssh)
   #:use-module (gnu packages ssh)
+  #:use-module (gnu packages admin)
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
   #:use-module (gnu system pam)
+  #:use-module (gnu system shadow)
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
   #:export (lsh-configuration
             lsh-configuration?
             lsh-service
             lsh-service-type
 
+            openssh-configuration
+            openssh-configuration?
+            openssh-service-type
+            openssh-service
+
             dropbear-configuration
             dropbear-configuration?
             dropbear-service-type
@@ -122,7 +131,7 @@
 
   (define lsh-command
     (append
-     (cons #~(string-append #$lsh "/sbin/lshd")
+     (cons (file-append lsh "/sbin/lshd")
            (if daemonic?
                (let ((syslog (if (lsh-configuration-syslog-output? config)
                                  '()
@@ -246,6 +255,128 @@ The other options should be self-descriptive."
 
 
 ;;;
+;;; OpenSSH.
+;;;
+
+(define-record-type* <openssh-configuration>
+  openssh-configuration make-openssh-configuration
+  openssh-configuration?
+  (pid-file              openssh-configuration-pid-file) ;string
+  (port-number           openssh-configuration-port-number) ;integer
+  (permit-root-login     openssh-configuration-permit-root-login) ;Boolean | 'without-password
+  (allow-empty-passwords? openssh-configuration-allow-empty-passwords?) ;Boolean
+  (password-authentication? openssh-configuration-password-authentication?) ;Boolean
+  (pubkey-authentication? openssh-configuration-pubkey-authentication?) ;Boolean
+  (rsa-authentication?   openssh-configuration-rsa-authentication?) ;Boolean
+  (x11-forwarding?       openssh-configuration-x11-forwarding?) ;Boolean
+  (protocol-number       openssh-configuration-protocol-number)) ;integer
+
+(define %openssh-accounts
+  (list (user-group (name "sshd") (system? #t))
+        (user-account
+          (name "sshd")
+          (group "sshd")
+          (system? #t)
+          (comment "sshd privilege separation user")
+          (home-directory "/var/run/sshd")
+          (shell #~(string-append #$shadow "/sbin/nologin")))))
+
+(define (openssh-activation config)
+  "Return the activation GEXP for CONFIG."
+  #~(begin
+      (mkdir-p "/etc/ssh")
+      (mkdir-p (dirname #$(openssh-configuration-pid-file config)))
+
+      ;; Generate missing host keys.
+      (system* (string-append #$openssh "/bin/ssh-keygen") "-A")))
+
+(define (openssh-config-file config)
+  "Return the sshd configuration file corresponding to CONFIG."
+  (computed-file
+   "sshd_config"
+   #~(call-with-output-file #$output
+       (lambda (port)
+         (display "# Generated by 'openssh-service'.\n" port)
+         (format port "Protocol ~a\n"
+                 #$(if (eq? (openssh-configuration-protocol-number config) 1)
+                       "1" "2"))
+         (format port "Port ~a\n"
+                 #$(number->string (openssh-configuration-port-number config)))
+         (format port "PermitRootLogin ~a\n"
+                 #$(match (openssh-configuration-permit-root-login config)
+                     (#t "yes")
+                     (#f "no")
+                     ('without-password "without-password")))
+         (format port "PermitEmptyPasswords ~a\n"
+                 #$(if (openssh-configuration-allow-empty-passwords? config)
+                       "yes" "no"))
+         (format port "PasswordAuthentication ~a\n"
+                 #$(if (openssh-configuration-password-authentication? config)
+                       "yes" "no"))
+         (format port "PubkeyAuthentication ~a\n"
+                 #$(if (openssh-configuration-pubkey-authentication? config)
+                       "yes" "no"))
+         (format port "RSAAuthentication ~a\n"
+                 #$(if (openssh-configuration-rsa-authentication? config)
+                       "yes" "no"))
+         (format port "X11Forwarding ~a\n"
+                 #$(if (openssh-configuration-x11-forwarding? config)
+                       "yes" "no"))
+         (format port "PidFile ~a\n"
+                 #$(openssh-configuration-pid-file config))
+         #t))))
+
+(define (openssh-shepherd-service config)
+  "Return a <shepherd-service> for openssh with CONFIG."
+
+  (define pid-file
+    (openssh-configuration-pid-file config))
+
+  (define openssh-command
+    #~(list (string-append #$openssh "/sbin/sshd")
+            "-D" "-f" #$(openssh-config-file config)))
+
+  (list (shepherd-service
+         (documentation "OpenSSH server.")
+         (requirement '(networking syslogd))
+         (provision '(ssh-daemon))
+         (start #~(make-forkexec-constructor #$openssh-command
+                                             #:pid-file #$pid-file))
+         (stop #~(make-kill-destructor)))))
+
+(define openssh-service-type
+  (service-type (name 'openssh)
+                (extensions
+                 (list (service-extension shepherd-root-service-type
+                                          openssh-shepherd-service)
+                       (service-extension activation-service-type
+                                          openssh-activation)
+                       (service-extension account-service-type
+                                          (const %openssh-accounts))))))
+
+(define* (openssh-service #:key
+                          (pid-file "/var/run/sshd.pid")
+                          (port-number 22)
+                          (permit-root-login 'without-password)
+                          (allow-empty-passwords? #f)
+                          (password-authentication? #t)
+                          (pubkey-authentication? #t)
+                          (rsa-authentication? #t)
+                          (x11-forwarding? #f)
+                          (protocol-number 2))
+  (service openssh-service-type (openssh-configuration
+                                 (pid-file pid-file)
+                                 (port-number port-number)
+                                 (permit-root-login permit-root-login)
+                                 (allow-empty-passwords? allow-empty-passwords?)
+                                 (password-authentication? password-authentication?)
+                                 (pubkey-authentication? pubkey-authentication?)
+                                 (rsa-authentication? rsa-authentication?)
+                                 (x11-forwarding? x11-forwarding?)
+                                 (protocol-number protocol-number))))
+
+
+;;;
 ;;; Dropbear.
 ;;;
 
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index d86aab50b5..0a2a09bbf5 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -67,7 +67,7 @@
          (system? #t)
          (comment "nginx server user")
          (home-directory "/var/empty")
-         (shell #~(string-append #$shadow "/sbin/nologin")))))
+         (shell (file-append shadow "/sbin/nologin")))))
 
 (define nginx-activation
   (match-lambda
@@ -80,13 +80,13 @@
          (format #t "creating nginx run directory '~a'~%" #$run-directory)
          (mkdir-p #$run-directory)
          ;; Check configuration file syntax.
-         (system* (string-append #$nginx "/bin/nginx")
+         (system* (string-append #$nginx "/sbin/nginx")
                   "-c" #$config-file "-t")))))
 
 (define nginx-shepherd-service
   (match-lambda
     (($ <nginx-configuration> nginx log-directory run-directory config-file)
-     (let* ((nginx-binary #~(string-append #$nginx "/sbin/nginx"))
+     (let* ((nginx-binary (file-append nginx "/sbin/nginx"))
             (nginx-action
              (lambda args
                #~(lambda _
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 4e311deb84..d098d831e1 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -42,6 +42,8 @@
   #:export (xorg-configuration-file
             %default-xorg-modules
             xorg-start-command
+            xinitrc
+
             %default-slim-theme
             %default-slim-theme-name
             slim-configuration
@@ -265,7 +267,7 @@ which should be passed to this script as the first argument.  If not, the
 
 (define %default-slim-theme
   ;; Theme based on work by Felipe López.
-  #~(string-append #$%artwork-repository "/slim"))
+  (file-append %artwork-repository "/slim"))
 
 (define %default-slim-theme-name
   ;; This must be the name of the sub-directory in %DEFAULT-SLIM-THEME that
@@ -372,8 +374,8 @@ reboot_cmd " shepherd "/sbin/reboot\n"
                        (theme %default-slim-theme)
                        (theme-name %default-slim-theme-name)
                        (xauth xauth) (shepherd shepherd) (bash bash)
-                       (auto-login-session #~(string-append #$windowmaker
-                                                            "/bin/wmaker"))
+                       (auto-login-session (file-append windowmaker
+                                                        "/bin/wmaker"))
                        (startx (xorg-start-command)))
   "Return a service that spawns the SLiM graphical login manager, which in
 turn starts the X display server with @var{startx}, a command as returned by
@@ -448,14 +450,13 @@ command is @var{program}, to the set of setuid programs and add a PAM entry
 for it.  For example:
 
 @lisp
-(screen-locker-service xlockmore \"xlock\")
+ (screen-locker-service xlockmore \"xlock\")
 @end lisp
 
 makes the good ol' XlockMore usable."
   (service screen-locker-service-type
            (screen-locker program
-                          #~(string-append #$package
-                                           #$(string-append "/bin/" program))
+                          (file-append package "/bin/" program)
                           allow-empty-passwords?)))
 
 ;;; xorg.scm ends here
diff --git a/gnu/system.scm b/gnu/system.scm
index a21bc5eb0e..43117b1714 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -69,6 +69,7 @@
             operating-system-host-name
             operating-system-hosts-file
             operating-system-kernel
+            operating-system-kernel-file
             operating-system-kernel-arguments
             operating-system-initrd
             operating-system-users
@@ -100,6 +101,7 @@
             boot-parameters-root-device
             boot-parameters-kernel
             boot-parameters-kernel-arguments
+            boot-parameters-initrd
             read-boot-parameters
 
             local-host-aliases
@@ -246,6 +248,19 @@ from the initrd."
   "Return the list of swap services for OS."
   (map swap-service (operating-system-swap-devices os)))
 
+(define* (system-linux-image-file-name #:optional (system (%current-system)))
+  "Return the basename of the kernel image file for SYSTEM."
+  ;; FIXME: Evaluate the conditional based on the actual current system.
+  (if (string-prefix? "mips" (%current-system))
+      "vmlinuz"
+      "bzImage"))
+
+(define (operating-system-kernel-file os)
+  "Return an object representing the absolute file name of the kernel image of
+OS."
+  (file-append (operating-system-kernel os)
+               "/" (system-linux-image-file-name os)))
+
 (define* (operating-system-directory-base-entries os #:key container?)
   "Return the basic entries of the 'system' directory of OS for use as the
 value of the SYSTEM-SERVICE-TYPE service."
@@ -458,9 +473,9 @@ then
   source /run/current-system/profile/etc/profile.d/bash_completion.sh
 fi\n")))
     (etc-service
-     `(("services" ,#~(string-append #$net-base "/etc/services"))
-       ("protocols" ,#~(string-append #$net-base "/etc/protocols"))
-       ("rpc" ,#~(string-append #$net-base "/etc/rpc"))
+     `(("services" ,(file-append net-base "/etc/services"))
+       ("protocols" ,(file-append net-base "/etc/protocols"))
+       ("rpc" ,(file-append net-base "/etc/rpc"))
        ("login.defs" ,#~#$login.defs)
        ("issue" ,#~#$issue)
        ("nsswitch.conf" ,#~#$nsswitch)
@@ -468,8 +483,8 @@ fi\n")))
        ("bashrc" ,#~#$bashrc)
        ("hosts" ,#~#$(or (operating-system-hosts-file os)
                          (default-/etc/hosts (operating-system-host-name os))))
-       ("localtime" ,#~(string-append #$tzdata "/share/zoneinfo/"
-                                      #$(operating-system-timezone os)))
+       ("localtime" ,(file-append tzdata "/share/zoneinfo/"
+                                  (operating-system-timezone os)))
        ("sudoers" ,(operating-system-sudoers-file os))))))
 
 (define %root-account
@@ -533,7 +548,7 @@ use 'plain-file' instead~%")
 @var{session-environment-service-type}, to be used in @file{/etc/environment}."
   `(("LANG" . ,(operating-system-locale os))
     ("TZ" . ,(operating-system-timezone os))
-    ("TZDIR" . ,#~(string-append #$tzdata "/share/zoneinfo"))
+    ("TZDIR" . ,(file-append tzdata "/share/zoneinfo"))
     ;; Tell 'modprobe' & co. where to look for modules.
     ("LINUX_MODULE_DIRECTORY" . "/run/booted-system/kernel/lib/modules")
     ;; These variables are honored by OpenSSL (libssl) and Git.
@@ -552,12 +567,12 @@ use 'plain-file' instead~%")
 (define %setuid-programs
   ;; Default set of setuid-root programs.
   (let ((shadow (@ (gnu packages admin) shadow)))
-    (list #~(string-append #$shadow "/bin/passwd")
-          #~(string-append #$shadow "/bin/su")
-          #~(string-append #$inetutils "/bin/ping")
-          #~(string-append #$inetutils "/bin/ping6")
-          #~(string-append #$sudo "/bin/sudo")
-          #~(string-append #$fuse "/bin/fusermount"))))
+    (list (file-append shadow "/bin/passwd")
+          (file-append shadow "/bin/su")
+          (file-append inetutils "/bin/ping")
+          (file-append inetutils "/bin/ping6")
+          (file-append sudo "/bin/sudo")
+          (file-append fuse "/bin/fusermount"))))
 
 (define %sudoers-specification
   ;; Default /etc/sudoers contents: 'root' and all members of the 'wheel'
@@ -641,7 +656,7 @@ hardware-related operations as necessary when booting a Linux container."
   (mlet %store-monad ((initrd (make-initrd boot-file-systems
                                            #:linux (operating-system-kernel os)
                                            #:mapped-devices mapped-devices)))
-    (return #~(string-append #$initrd "/initrd"))))
+    (return (file-append initrd "/initrd"))))
 
 (define (locale-name->definition* name)
   "Variant of 'locale-name->definition' that raises an error upon failure."
@@ -705,12 +720,14 @@ listed in OS.  The C library expects to find it under
       ((system      (operating-system-derivation os))
        (root-fs ->  (operating-system-root-file-system os))
        (store-fs -> (operating-system-store-file-system os))
-       (kernel ->   (operating-system-kernel os))
+       (label ->    (kernel->grub-label (operating-system-kernel os)))
+       (kernel ->   (operating-system-kernel-file os))
+       (initrd      (operating-system-initrd-file os))
        (root-device -> (if (eq? 'uuid (file-system-title root-fs))
                            (uuid->string (file-system-device root-fs))
                            (file-system-device root-fs)))
        (entries ->  (list (menu-entry
-                           (label (kernel->grub-label kernel))
+                           (label label)
                            (linux kernel)
                            (linux-arguments
                             (cons* (string-append "--root=" root-device)
@@ -718,7 +735,7 @@ listed in OS.  The C library expects to find it under
                                    #~(string-append "--load=" #$system
                                                     "/boot")
                                    (operating-system-kernel-arguments os)))
-                           (initrd #~(string-append #$system "/initrd"))))))
+                           (initrd initrd)))))
     (grub-configuration-file (operating-system-bootloader os)
                              store-fs entries
                              #:old-entries old-entries)))
@@ -734,7 +751,7 @@ this file is the reconstruction of GRUB menu entries for old configurations."
                 #~(boot-parameters (version 0)
                                    (label #$label)
                                    (root-device #$(file-system-device root))
-                                   (kernel #$(operating-system-kernel os))
+                                   (kernel #$(operating-system-kernel-file os))
                                    (kernel-arguments
                                     #$(operating-system-kernel-arguments os))
                                    (initrd #$initrd))
@@ -750,7 +767,8 @@ this file is the reconstruction of GRUB menu entries for old configurations."
   (label            boot-parameters-label)
   (root-device      boot-parameters-root-device)
   (kernel           boot-parameters-kernel)
-  (kernel-arguments boot-parameters-kernel-arguments))
+  (kernel-arguments boot-parameters-kernel-arguments)
+  (initrd           boot-parameters-initrd))
 
 (define (read-boot-parameters port)
   "Read boot parameters from PORT and return the corresponding
@@ -763,11 +781,25 @@ this file is the reconstruction of GRUB menu entries for old configurations."
      (boot-parameters
       (label label)
       (root-device root)
-      (kernel linux)
+
+      ;; In the past, we would store the directory name of the kernel instead
+      ;; of the absolute file name of its image.  Detect that and correct it.
+      (kernel (if (string=? linux (direct-store-path linux))
+                  (string-append linux "/"
+                                 (system-linux-image-file-name))
+                  linux))
+
       (kernel-arguments
        (match (assq 'kernel-arguments rest)
          ((_ args) args)
-         (#f       '())))))                       ;the old format
+         (#f       '())))                         ;the old format
+
+      (initrd
+       (match (assq 'initrd rest)
+         (('initrd ('string-append directory file)) ;the old format
+          (string-append directory file))
+         (('initrd (? string? file))
+          file)))))
     (x                                            ;unsupported format
      (warning (_ "unrecognized boot parameters for '~a'~%")
               system)
diff --git a/gnu/system/examples/lightweight-desktop.tmpl b/gnu/system/examples/lightweight-desktop.tmpl
index 7cb461f2b9..91e7d0b562 100644
--- a/gnu/system/examples/lightweight-desktop.tmpl
+++ b/gnu/system/examples/lightweight-desktop.tmpl
@@ -24,7 +24,7 @@
 
   (users (cons (user-account
                 (name "alice")
-                (comment "Bob's brother")
+                (comment "Bob's sister")
                 (group "users")
                 (supplementary-groups '("wheel" "netdev"
                                         "audio" "video"))
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 0dc472e3c7..b51d57f079 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -47,6 +47,7 @@
             %binary-format-file-system
             %shared-memory-file-system
             %pseudo-terminal-file-system
+            %tty-gid
             %immutable-store
             %control-groups
             %elogind-file-systems
diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm
index 45b46cae6f..ead48f0e32 100644
--- a/gnu/system/grub.scm
+++ b/gnu/system/grub.scm
@@ -62,6 +62,17 @@
 ;;;
 ;;; Code:
 
+(define (strip-mount-point fs file)
+  "Strip the mount point of FS from FILE, which is a gexp or other lowerable
+object denoting a file name."
+  (let ((mount-point (file-system-mount-point fs)))
+    (if (string=? mount-point "/")
+	file
+	#~(let ((file #$file))
+            (if (string-prefix? #$mount-point file)
+                (substring #$file #$(string-length mount-point))
+                file)))))
+
 (define-record-type* <grub-image>
   grub-image make-grub-image
   grub-image?
@@ -183,7 +194,8 @@ the store is.  SYSTEM must be the target system string---e.g.,
                      (symbol->string (assoc-ref colors 'bg)))))
 
   (define font-file
-    #~(string-append #$grub "/share/grub/unicode.pf2"))
+    (strip-mount-point root-fs
+                       (file-append grub "/share/grub/unicode.pf2")))
 
   (mlet* %store-monad ((image (grub-background-image config)))
     (return (and image
@@ -209,7 +221,7 @@ fi~%"
                            #$(grub-root-search root-fs font-file)
                            #$font-file
 
-                           #$image
+                           #$(strip-mount-point root-fs image)
                            #$(theme-colors grub-theme-color-normal)
                            #$(theme-colors grub-theme-color-highlight))))))
 
@@ -222,18 +234,23 @@ fi~%"
   "Return the GRUB 'search' command to look for ROOT-FS, which contains FILE,
 a gexp.  The result is a gexp that can be inserted in the grub.cfg-generation
 code."
-  (case (file-system-title root-fs)
-    ;; Preferably refer to ROOT-FS by its UUID or label.  This is more
-    ;; efficient and less ambiguous, see <>.
-    ((uuid)
-     (format #f "search --fs-uuid --set ~a"
-             (uuid->string (file-system-device root-fs))))
-    ((label)
-     (format #f "search --label --set ~a"
-             (file-system-device root-fs)))
-    (else
-     ;; As a last resort, look for any device containing FILE.
-     #~(format #f "search --file --set ~a" #$file))))
+  ;; Usually FILE is a file name gexp like "/gnu/store/…-linux/vmlinuz", but
+  ;; it can also be something like "(hd0,msdos1)/vmlinuz" in the case of
+  ;; custom menu entries.  In the latter case, don't emit a 'search' command.
+  (if (and (string? file) (not (string-prefix? "/" file)))
+      ""
+      (case (file-system-title root-fs)
+        ;; Preferably refer to ROOT-FS by its UUID or label.  This is more
+        ;; efficient and less ambiguous, see <>.
+        ((uuid)
+         (format #f "search --fs-uuid --set ~a"
+                 (uuid->string (file-system-device root-fs))))
+        ((label)
+         (format #f "search --label --set ~a"
+                 (file-system-device root-fs)))
+        (else
+         ;; As a last resort, look for any device containing FILE.
+         #~(format #f "search --file --set ~a" #$file)))))
 
 (define* (grub-configuration-file config store-fs entries
                                   #:key
@@ -243,33 +260,34 @@ code."
 <grub-configuration> object, and where the store is available at STORE-FS, a
 <file-system> object.  OLD-ENTRIES is taken to be a list of menu entries
 corresponding to old generations of the system."
-  (define linux-image-name
-    (if (string-prefix? "mips" system)
-        "vmlinuz"
-        "bzImage"))
-
   (define all-entries
     (append entries (grub-configuration-menu-entries config)))
 
   (define entry->gexp
     (match-lambda
      (($ <menu-entry> label linux arguments initrd)
-      #~(format port "menuentry ~s {
+      ;; Use the right file names for LINUX and STORE-FS in case STORE-FS is
+      ;; not the "/" file system.
+      (let ((linux  (strip-mount-point store-fs linux))
+            (initrd (strip-mount-point store-fs initrd)))
+        #~(format port "menuentry ~s {
   ~a
-  linux ~a/~a ~a
+  linux ~a ~a
   initrd ~a
 }~%"
-                #$label
-                #$(grub-root-search store-fs
-                                    #~(string-append #$linux "/"
-                                                     #$linux-image-name))
-                #$linux #$linux-image-name (string-join (list #$@arguments))
-                #$initrd))))
+                  #$label
+                  #$(grub-root-search store-fs linux)
+                  #$linux (string-join (list #$@arguments))
+                  #$initrd)))))
 
   (mlet %store-monad ((sugar (eye-candy config store-fs system #~port)))
     (define builder
       #~(call-with-output-file #$output
           (lambda (port)
+            (format port
+                    "# This file was generated from your GuixSD configuration.  Any changes
+# will be lost upon reconfiguration.
+")
             #$sugar
             (format port "
 set default=~a
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 5acfa2c65b..dfa003f256 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -268,21 +268,21 @@ You have been warned.  Thanks for being so brave.
 ")))
     (define (normal-tty tty)
       (mingetty-service (mingetty-configuration (tty tty)
-                                                (motd motd)
                                                 (auto-login "root")
                                                 (login-pause? #t))))
 
     (list (mingetty-service (mingetty-configuration
                              (tty "tty1")
-                             (motd motd)
                              (auto-login "root")))
 
+          (login-service (login-configuration
+                          (motd motd)))
+
           ;; Documentation.  The manual is in UTF-8, but
           ;; 'console-font-service' sets up Unicode support and loads a font
           ;; with all the useful glyphs like em dash and quotation marks.
           (mingetty-service (mingetty-configuration
                              (tty "tty2")
-                             (motd motd)
                              (auto-login "guest")
                              (login-program (log-to-info))))
 
@@ -313,12 +313,10 @@ You have been warned.  Thanks for being so brave.
           (cow-store-service)
 
           ;; Install Unicode support and a suitable font.
-          (console-font-service "tty1")
-          (console-font-service "tty2")
-          (console-font-service "tty3")
-          (console-font-service "tty4")
-          (console-font-service "tty5")
-          (console-font-service "tty6")
+          (service console-font-service-type
+                   (map (lambda (tty)
+                          (cons tty %default-console-font))
+                        '("tty1" "tty2" "tty3" "tty4" "tty5" "tty6")))
 
           ;; To facilitate copy/paste.
           (gpm-service)
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index bbaa5c0f89..174239a566 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -27,6 +27,7 @@
                 #:select (%store-prefix))
   #:use-module ((guix derivations)
                 #:select (derivation->output-path))
+  #:use-module (guix modules)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages guile)
@@ -66,10 +67,8 @@ the derivations referenced by EXP are automatically copied to the initrd."
   (mlet %store-monad ((init (gexp->script "init" exp
                                           #:guile guile)))
     (define builder
-      (with-imported-modules '((guix cpio)
-                               (guix build utils)
-                               (guix build store-copy)
-                               (gnu build linux-initrd))
+      (with-imported-modules (source-module-closure
+                              '((gnu build linux-initrd)))
         #~(begin
             (use-modules (gnu build linux-initrd))
 
@@ -88,9 +87,9 @@ the derivations referenced by EXP are automatically copied to the initrd."
   "Return a flat directory containing the Linux kernel modules listed in
 MODULES and taken from LINUX."
   (define build-exp
-    (with-imported-modules '((guix build utils)
-                             (guix elf)
-                             (gnu build linux-modules))
+    (with-imported-modules (source-module-closure
+                            '((guix build utils)
+                              (gnu build linux-modules)))
       #~(begin
           (use-modules (ice-9 match) (ice-9 regex)
                        (srfi srfi-1)
@@ -223,13 +222,11 @@ loaded at boot time in the order in which they appear."
   (mlet %store-monad ((kodir (flat-linux-module-directory linux
                                                           linux-modules)))
     (expression->initrd
-     (with-imported-modules '((guix build bournish)
-                              (guix build utils)
-                              (guix build syscalls)
-                              (gnu build linux-boot)
-                              (gnu build linux-modules)
-                              (gnu build file-systems)
-                              (guix elf))
+     (with-imported-modules (source-module-closure
+                             '((gnu build linux-boot)
+                               (guix build utils)
+                               (guix build bournish)
+                               (gnu build file-systems)))
        #~(begin
            (use-modules (gnu build linux-boot)
                         (guix build utils)
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index 7b91fcfc41..2ce35eaa07 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -20,6 +20,7 @@
 (define-module (gnu system mapped-devices)
   #:use-module (guix gexp)
   #:use-module (guix records)
+  #:use-module (guix modules)
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
   #:autoload   (gnu packages cryptsetup) (cryptsetup)
@@ -95,8 +96,8 @@
 (define (open-luks-device source target)
   "Return a gexp that maps SOURCE to TARGET as a LUKS device, using
 'cryptsetup'."
-  (with-imported-modules '((gnu build file-systems)
-                           (guix build bournish))
+  (with-imported-modules (source-module-closure
+                          '((gnu build file-systems)))
     #~(let ((source #$source))
         ;; XXX: 'use-modules' should be at the top level.
         (use-modules (rnrs bytevectors)           ;bytevector?
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index c31e3a80ef..03f7d6c913 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -26,6 +26,7 @@
   #:use-module (guix packages)
   #:use-module (guix monads)
   #:use-module (guix records)
+  #:use-module (guix modules)
 
   #:use-module ((gnu build vm)
                 #:select (qemu-command))
@@ -90,21 +91,6 @@
           (options "trans=virtio")
           (check? #f))))
 
-(define %vm-module-closure
-  ;; The closure of (gnu build vm), roughly.
-  ;; FIXME: Compute it automatically.
-  '((gnu build vm)
-    (gnu build install)
-    (gnu build linux-boot)
-    (gnu build linux-modules)
-    (gnu build file-systems)
-    (guix elf)
-    (guix records)
-    (guix build utils)
-    (guix build syscalls)
-    (guix build bournish)
-    (guix build store-copy)))
-
 (define* (expression->derivation-in-linux-vm name exp
                                              #:key
                                              (system (%current-system))
@@ -148,7 +134,8 @@ made available under the /xchg CIFS share."
 
     (define builder
       ;; Code that launches the VM that evaluates EXP.
-      (with-imported-modules %vm-module-closure
+      (with-imported-modules (source-module-closure '((guix build utils)
+                                                      (gnu build vm)))
         #~(begin
             (use-modules (guix build utils)
                          (gnu build vm))
@@ -205,7 +192,8 @@ register INPUTS in the store database of the image so that Guix can be used in
 the image."
   (expression->derivation-in-linux-vm
    name
-   (with-imported-modules %vm-module-closure
+   (with-imported-modules (source-module-closure '((gnu build vm)
+                                                   (guix build utils)))
      #~(begin
          (use-modules (gnu build vm)
                       (guix build utils))
@@ -462,7 +450,6 @@ with '-virtfs' options for the host file systems listed in SHARED-FS."
            "")
      " -no-reboot -net nic,model=virtio \
   " #$@(map virtfs-option shared-fs) " \
-  -net user \
   -vga std \
   -drive file=" #$image
   ",if=virtio,cache=writeback,werror=report,readonly \
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 41f50c0e7a..5c2af5b6d4 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -384,9 +384,12 @@ functionality tests.")
                                               (log-file "/dev/console")))
                        (syslog-service-type config
                                             =>
-                                            (plain-file
-                                             "syslog.conf"
-                                             "*.* /dev/console\n")))))))
+                                            (syslog-configuration
+                                             (inherit config)
+                                             (config-file
+                                              (plain-file
+                                               "syslog.conf"
+                                               "*.* /dev/console\n")))))))))
 
 (define (run-nss-mdns-test)
   ;; Test resolution of '.local' names via libc.  Start the marionette service
diff --git a/guix/build-system/python.scm b/guix/build-system/python.scm
index 705943eb73..adeceb4a89 100644
--- a/guix/build-system/python.scm
+++ b/guix/build-system/python.scm
@@ -33,6 +33,8 @@
   #:export (%python-build-system-modules
             package-with-python2
             strip-python2-variant
+            default-python
+            default-python2
             python-build
             python-build-system
             pypi-uri))
diff --git a/guix/build/ant-build-system.scm b/guix/build/ant-build-system.scm
index 6dc19ff2db..00a4a46d81 100644
--- a/guix/build/ant-build-system.scm
+++ b/guix/build/ant-build-system.scm
@@ -83,7 +83,7 @@ INPUTS."
   (string-join
    (apply append (map (match-lambda
                         ((_ . dir)
-                         (find-files dir "\\.*jar$")))
+                         (find-files dir "\\.jar$")))
                       inputs)) ":"))
 
 (define* (unpack #:key source #:allow-other-keys)
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index c663899160..2cee6544c4 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -24,12 +24,12 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-9 gnu)
+  #:use-module (srfi srfi-11)
   #:use-module (ice-9 rdelim)
   #:use-module (ice-9 regex)
   #:use-module (ice-9 match)
   #:use-module (ice-9 ftw)
-  #:export (errno
-            MS_RDONLY
+  #:export (MS_RDONLY
             MS_NOSUID
             MS_NODEV
             MS_NOEXEC
@@ -282,13 +282,14 @@ given TYPES.  READ uses WRAP-FIELDS to return its value."
 ;;;
 
 (define %libc-errno-pointer
-  ;; Glibc's 'errno' pointer.
-  (let ((errno-loc (dynamic-func "__errno_location" (dynamic-link))))
+  ;; Glibc's 'errno' pointer, for use with Guile < 2.0.12.
+  (let ((errno-loc (false-if-exception
+                    (dynamic-func "__errno_location" (dynamic-link)))))
     (and errno-loc
          (let ((proc (pointer->procedure '* errno-loc '())))
            (proc)))))
 
-(define errno
+(define errno                                     ;for Guile < 2.0.12
   (if %libc-errno-pointer
       (let ((bv (pointer->bytevector %libc-errno-pointer (sizeof int))))
         (lambda ()
@@ -327,13 +328,26 @@ given TYPES.  READ uses WRAP-FIELDS to return its value."
   (call-with-restart-on-EINTR (lambda () expr)))
 
 (define (syscall->procedure return-type name argument-types)
-  "Return a procedure that wraps the C function NAME using the dynamic FFI.
+  "Return a procedure that wraps the C function NAME using the dynamic FFI,
+and that returns two values: NAME's return value, and errno.
+
 If an error occurs while creating the binding, defer the error report until
 the returned procedure is called."
   (catch #t
     (lambda ()
       (let ((ptr (dynamic-func name (dynamic-link))))
-        (pointer->procedure return-type ptr argument-types)))
+        ;; The #:return-errno? facility was introduced in Guile 2.0.12.
+        ;; Support older versions of Guile by catching 'wrong-number-of-args'.
+        (catch 'wrong-number-of-args
+          (lambda ()
+            (pointer->procedure return-type ptr argument-types
+                                #:return-errno? #t))
+          (lambda (key . rest)
+            (let ((proc (pointer->procedure return-type ptr argument-types)))
+              (lambda args
+                (let ((result (apply proc args))
+                      (err    (errno)))
+                  (values result err))))))))
     (lambda args
       (lambda _
         (error (format #f "~a: syscall->procedure failed: ~s"
@@ -400,18 +414,18 @@ may be a bitwise-or of the MS_* <sys/mount.h> constants, and OPTIONS may be a
 string.  When FLAGS contains MS_REMOUNT, SOURCE and TYPE are ignored.  When
 UPDATE-MTAB? is true, update /etc/mtab.  Raise a 'system-error' exception on
 error."
-      (let ((ret (proc (if source
-                           (string->pointer source)
-                           %null-pointer)
-                       (string->pointer target)
-                       (if type
-                           (string->pointer type)
-                           %null-pointer)
-                       flags
-                       (if options
-                           (string->pointer options)
-                           %null-pointer)))
-            (err (errno)))
+      (let-values (((ret err)
+                    (proc (if source
+                              (string->pointer source)
+                              %null-pointer)
+                          (string->pointer target)
+                          (if type
+                              (string->pointer type)
+                              %null-pointer)
+                          flags
+                          (if options
+                              (string->pointer options)
+                              %null-pointer))))
         (unless (zero? ret)
           (throw 'system-error "mount" "mount ~S on ~S: ~A"
                  (list source target (strerror err))
@@ -425,8 +439,8 @@ error."
                      #:key (update-mtab? #f))
       "Unmount TARGET.  Optionally FLAGS may be one of the MNT_* or UMOUNT_*
 constants from <sys/mount.h>."
-      (let ((ret (proc (string->pointer target) flags))
-            (err (errno)))
+      (let-values (((ret err)
+                    (proc (string->pointer target) flags)))
         (unless (zero? ret)
           (throw 'system-error "umount" "~S: ~A"
                  (list target (strerror err))
@@ -450,8 +464,8 @@ constants from <sys/mount.h>."
   (let ((proc (syscall->procedure int "swapon" (list '* int))))
     (lambda* (device #:optional (flags 0))
       "Use the block special device at DEVICE for swapping."
-      (let ((ret (proc (string->pointer device) flags))
-            (err (errno)))
+      (let-values (((ret err)
+                    (proc (string->pointer device) flags)))
         (unless (zero? ret)
           (throw 'system-error "swapon" "~S: ~A"
                  (list device (strerror err))
@@ -461,8 +475,7 @@ constants from <sys/mount.h>."
   (let ((proc (syscall->procedure int "swapoff" '(*))))
     (lambda (device)
       "Stop using block special device DEVICE for swapping."
-      (let ((ret (proc (string->pointer device)))
-            (err (errno)))
+      (let-values (((ret err) (proc (string->pointer device))))
         (unless (zero? ret)
           (throw 'system-error "swapoff" "~S: ~A"
                  (list device (strerror err))
@@ -498,8 +511,7 @@ user-land process."
     (lambda (tmpl)
       "Create a new unique directory in the file system using the template
 string TMPL and return its file name.  TMPL must end with 'XXXXXX'."
-      (let ((result (proc (string->pointer tmpl)))
-            (err    (errno)))
+      (let-values (((result err) (proc (string->pointer tmpl))))
         (when (null-pointer? result)
           (throw 'system-error "mkdtemp!" "~S: ~A"
                  (list tmpl (strerror err))
@@ -512,9 +524,8 @@ string TMPL and return its file name.  TMPL must end with 'XXXXXX'."
       "Flush buffered output of PORT, an output file port, and then call
 fdatasync(2) on the underlying file descriptor."
       (force-output port)
-      (let* ((fd  (fileno port))
-             (ret (proc fd))
-             (err (errno)))
+      (let*-values (((fd)      (fileno port))
+                    ((ret err) (proc fd)))
         (unless (zero? ret)
           (throw 'system-error "fdatasync" "~S: ~A"
                  (list fd (strerror err))
@@ -565,9 +576,9 @@ fdatasync(2) on the underlying file descriptor."
     (lambda (file)
       "Return a <file-system> data structure describing the file system
 mounted at FILE."
-      (let* ((stat (make-bytevector sizeof-statfs))
-             (ret  (proc (string->pointer file) (bytevector->pointer stat)))
-             (err  (errno)))
+      (let*-values (((stat)    (make-bytevector sizeof-statfs))
+                    ((ret err) (proc (string->pointer file)
+                                     (bytevector->pointer stat))))
         (if (zero? ret)
             (read-statfs stat)
             (throw 'system-error "statfs" "~A: ~A"
@@ -610,11 +621,11 @@ mounted at FILE."
       "Create a new child process by duplicating the current parent process.
 Unlike the fork system call, clone accepts FLAGS that specify which resources
 are shared between the parent and child processes."
-      (let ((ret (proc syscall-id flags
-                       %null-pointer               ;child stack
-                       %null-pointer %null-pointer ;ptid & ctid
-                       %null-pointer))             ;unused
-            (err (errno)))
+      (let-values (((ret err)
+                    (proc syscall-id flags
+                          %null-pointer                     ;child stack
+                          %null-pointer %null-pointer       ;ptid & ctid
+                          %null-pointer)))                  ;unused
         (if (= ret -1)
             (throw 'system-error "clone" "~d: ~A"
                    (list flags (strerror err))
@@ -631,8 +642,7 @@ are shared between the parent and child processes."
 file descriptor obtained by opening a /proc/PID/ns/* file.  NSTYPE specifies
 which type of namespace the current process may be reassociated with, or 0 if
 there is no such limitation."
-       (let ((ret (proc fdes nstype))
-             (err (errno)))
+       (let-values (((ret err) (proc fdes nstype)))
          (unless (zero? ret)
            (throw 'system-error "setns" "~d ~d: ~A"
                   (list fdes nstype (strerror err))
@@ -643,9 +653,9 @@ there is no such limitation."
     (lambda (new-root put-old)
       "Change the root file system to NEW-ROOT and move the current root file
 system to PUT-OLD."
-      (let ((ret (proc (string->pointer new-root)
-                       (string->pointer put-old)))
-            (err (errno)))
+      (let-values (((ret err)
+                    (proc (string->pointer new-root)
+                          (string->pointer put-old))))
         (unless (zero? ret)
           (throw 'system-error "pivot_root" "~S ~S: ~A"
                  (list new-root put-old (strerror err))
@@ -716,12 +726,12 @@ exception if it's already taken."
 
       ;; XXX: 'fcntl' is a vararg function, but here we happily use the
       ;; standard ABI; crossing fingers.
-      (let ((ret (proc fd
-                       (if wait?
-                           F_SETLKW               ; lock & wait
-                           F_SETLK)               ; non-blocking attempt
-                       (bytevector->pointer bv)))
-            (err (errno)))
+      (let-values (((ret err)
+                    (proc fd
+                          (if wait?
+                              F_SETLKW            ;lock & wait
+                              F_SETLK)            ;non-blocking attempt
+                          (bytevector->pointer bv))))
         (unless (zero? ret)
           ;; Presumably we got EAGAIN or so.
           (throw 'flock-error err))))))
@@ -856,19 +866,19 @@ to interfaces that are currently up."
          (len    (* ifreq-struct-size 10))
          (reqs   (make-bytevector len))
          (conf   (make-c-struct ifconf-struct
-                                (list len (bytevector->pointer reqs))))
-         (ret    (%ioctl (fileno sock) SIOCGIFCONF conf))
-         (err    (errno)))
-    (when close?
-      (close-port sock))
-    (if (zero? ret)
-        (bytevector->string-list reqs ifreq-struct-size
-                                 (match (parse-c-struct conf ifconf-struct)
-                                   ((len . _) len)))
-        (throw 'system-error "network-interface-list"
-               "network-interface-list: ~A"
-               (list (strerror err))
-               (list err)))))
+                                (list len (bytevector->pointer reqs)))))
+    (let-values (((ret err)
+                  (%ioctl (fileno sock) SIOCGIFCONF conf)))
+      (when close?
+        (close-port sock))
+      (if (zero? ret)
+          (bytevector->string-list reqs ifreq-struct-size
+                                   (match (parse-c-struct conf ifconf-struct)
+                                     ((len . _) len)))
+          (throw 'system-error "network-interface-list"
+                 "network-interface-list: ~A"
+                 (list (strerror err))
+                 (list err))))))
 
 (define %interface-line
   ;; Regexp matching an interface line in Linux's /proc/net/dev.
@@ -896,9 +906,9 @@ interface NAME."
   (let ((req (make-bytevector ifreq-struct-size)))
     (bytevector-copy! (string->utf8 name) 0 req 0
                       (min (string-length name) (- IF_NAMESIZE 1)))
-    (let* ((ret (%ioctl (fileno socket) SIOCGIFFLAGS
-                        (bytevector->pointer req)))
-           (err (errno)))
+    (let-values (((ret err)
+                  (%ioctl (fileno socket) SIOCGIFFLAGS
+                          (bytevector->pointer req))))
       (if (zero? ret)
 
           ;; The 'ifr_flags' field is IF_NAMESIZE bytes after the beginning of
@@ -926,9 +936,9 @@ interface NAME."
     ;; Set the 'ifr_flags' field.
     (bytevector-uint-set! req IF_NAMESIZE flags (native-endianness)
                           (sizeof short))
-    (let* ((ret (%ioctl (fileno socket) SIOCSIFFLAGS
-                        (bytevector->pointer req)))
-           (err (errno)))
+    (let-values (((ret err)
+                  (%ioctl (fileno socket) SIOCSIFFLAGS
+                          (bytevector->pointer req))))
       (unless (zero? ret)
         (throw 'system-error "set-network-interface-flags"
                "set-network-interface-flags on ~A: ~A"
@@ -942,9 +952,9 @@ interface NAME."
                       (min (string-length name) (- IF_NAMESIZE 1)))
     ;; Set the 'ifr_addr' field.
     (write-socket-address! sockaddr req IF_NAMESIZE)
-    (let* ((ret (%ioctl (fileno socket) SIOCSIFADDR
-                        (bytevector->pointer req)))
-           (err (errno)))
+    (let-values (((ret err)
+                  (%ioctl (fileno socket) SIOCSIFADDR
+                          (bytevector->pointer req))))
       (unless (zero? ret)
         (throw 'system-error "set-network-interface-address"
                "set-network-interface-address on ~A: ~A"
@@ -957,9 +967,9 @@ the same type as that returned by 'make-socket-address'."
   (let ((req (make-bytevector ifreq-struct-size)))
     (bytevector-copy! (string->utf8 name) 0 req 0
                       (min (string-length name) (- IF_NAMESIZE 1)))
-    (let* ((ret (%ioctl (fileno socket) SIOCGIFADDR
-                        (bytevector->pointer req)))
-           (err (errno)))
+    (let-values (((ret err)
+                  (%ioctl (fileno socket) SIOCGIFADDR
+                          (bytevector->pointer req))))
       (if (zero? ret)
           (read-socket-address req IF_NAMESIZE)
           (throw 'system-error "network-interface-address"
@@ -1075,9 +1085,10 @@ return the list of resulting <interface> objects."
     (lambda ()
       "Return a list of <interface> objects, each denoting a configured
 network interface.  This is implemented using the 'getifaddrs' libc function."
-      (let* ((ptr (bytevector->pointer (make-bytevector (sizeof* '*))))
-             (ret (proc ptr))
-             (err (errno)))
+      (let*-values (((ptr)
+                     (bytevector->pointer (make-bytevector (sizeof* '*))))
+                    ((ret err)
+                     (proc ptr)))
         (if (zero? ret)
             (let* ((ptr    (dereference-pointer ptr))
                    (result (unfold-interface-list ptr)))
@@ -1180,9 +1191,8 @@ given an integer, returns the list of names of the constants that are or'd."
   (let ((proc (syscall->procedure int "tcgetattr" (list int '*))))
     (lambda (fd)
       "Return the <termios> structure for the tty at FD."
-      (let* ((bv  (make-bytevector sizeof-termios))
-             (ret (proc fd (bytevector->pointer bv)))
-             (err (errno)))
+      (let*-values (((bv)      (make-bytevector sizeof-termios))
+                    ((ret err) (proc fd (bytevector->pointer bv))))
         (if (zero? ret)
             (read-termios bv)
             (throw 'system-error "tcgetattr" "~A"
@@ -1205,8 +1215,7 @@ produced by 'tcsetattr-action'; see tcsetattr(3) for details."
         (match/write input-flags output-flags control-flags local-flags
                      line-discipline control-chars input-speed output-speed))
 
-      (let ((ret (proc fd actions (bytevector->pointer bv)))
-            (err (errno)))
+      (let-values (((ret err) (proc fd actions (bytevector->pointer bv))))
         (unless (zero? ret)
           (throw 'system-error "tcgetattr" "~A"
                  (list (strerror err))
@@ -1237,10 +1246,9 @@ produced by 'tcsetattr-action'; see tcsetattr(3) for details."
   "Return a <window-size> structure describing the terminal at PORT, or raise
 a 'system-error' if PORT is not backed by a terminal.  This procedure
 corresponds to the TIOCGWINSZ ioctl."
-  (let* ((size (make-bytevector sizeof-winsize))
-         (ret  (%ioctl (fileno port) TIOCGWINSZ
-                       (bytevector->pointer size)))
-         (err  (errno)))
+  (let*-values (((size)    (make-bytevector sizeof-winsize))
+                ((ret err) (%ioctl (fileno port) TIOCGWINSZ
+                                   (bytevector->pointer size))))
     (if (zero? ret)
         (read-winsize size)
         (throw 'system-error "terminal-window-size" "~A"
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 302879fb42..05178a5ecc 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -63,6 +63,11 @@
             scheme-file-name
             scheme-file-gexp
 
+            file-append
+            file-append?
+            file-append-base
+            file-append-suffix
+
             gexp->derivation
             gexp->file
             gexp->script
@@ -126,26 +131,41 @@
 
 ;; Compiler for a type of objects that may be introduced in a gexp.
 (define-record-type <gexp-compiler>
-  (gexp-compiler predicate lower)
+  (gexp-compiler type lower expand)
   gexp-compiler?
-  (predicate  gexp-compiler-predicate)
-  (lower      gexp-compiler-lower))
+  (type       gexp-compiler-type)                 ;record type descriptor
+  (lower      gexp-compiler-lower)
+  (expand     gexp-compiler-expand))              ;#f | DRV -> sexp
 
 (define %gexp-compilers
-  ;; List of <gexp-compiler>.
-  '())
+  ;; 'eq?' mapping of record type descriptor to <gexp-compiler>.
+  (make-hash-table 20))
+
+(define (default-expander thing obj output)
+  "This is the default expander for \"things\" that appear in gexps.  It
+returns its output file name of OBJ's OUTPUT."
+  (match obj
+    ((? derivation? drv)
+     (derivation->output-path drv output))
+    ((? string? file)
+     file)))
 
 (define (register-compiler! compiler)
   "Register COMPILER as a gexp compiler."
-  (set! %gexp-compilers (cons compiler %gexp-compilers)))
+  (hashq-set! %gexp-compilers
+              (gexp-compiler-type compiler) compiler))
 
 (define (lookup-compiler object)
-  "Search a compiler for OBJECT.  Upon success, return the three argument
+  "Search for a compiler for OBJECT.  Upon success, return the three argument
 procedure to lower it; otherwise return #f."
-  (any (match-lambda
-        (($ <gexp-compiler> predicate lower)
-         (and (predicate object) lower)))
-       %gexp-compilers))
+  (and=> (hashq-ref %gexp-compilers (struct-vtable object))
+         gexp-compiler-lower))
+
+(define (lookup-expander object)
+  "Search for an expander for OBJECT.  Upon success, return the three argument
+procedure to expand it; otherwise return #f."
+  (and=> (hashq-ref %gexp-compilers (struct-vtable object))
+         gexp-compiler-expand))
 
 (define* (lower-object obj
                        #:optional (system (%current-system))
@@ -157,21 +177,35 @@ OBJ must be an object that has an associated gexp compiler, such as a
   (let ((lower (lookup-compiler obj)))
     (lower obj system target)))
 
-(define-syntax-rule (define-gexp-compiler (name (param predicate)
-                                                system target)
-                      body ...)
-  "Define NAME as a compiler for objects matching PREDICATE encountered in
-gexps.  BODY must return a derivation for PARAM, an object that matches
-PREDICATE, for SYSTEM and TARGET (the latter of which is #f except when
-cross-compiling.)"
-  (begin
-    (define name
-      (gexp-compiler predicate
-                     (lambda (param system target)
-                       body ...)))
-    (register-compiler! name)))
-
-(define-gexp-compiler (derivation-compiler (drv derivation?) system target)
+(define-syntax define-gexp-compiler
+  (syntax-rules (=> compiler expander)
+    "Define NAME as a compiler for objects matching PREDICATE encountered in
+gexps.
+
+In the simplest form of the macro, BODY must return a derivation for PARAM, an
+object that matches PREDICATE, for SYSTEM and TARGET (the latter of which is
+#f except when cross-compiling.)
+
+The more elaborate form allows you to specify an expander:
+
+  (define-gexp-compiler something something?
+    compiler => (lambda (param system target) ...)
+    expander => (lambda (param drv output) ...))
+
+The expander specifies how an object is converted to its sexp representation."
+    ((_ (name (param record-type) system target) body ...)
+     (define-gexp-compiler name record-type
+       compiler => (lambda (param system target) body ...)
+       expander => default-expander))
+    ((_ name record-type
+        compiler => compile
+        expander => expand)
+     (begin
+       (define name
+         (gexp-compiler record-type compile expand))
+       (register-compiler! name)))))
+
+(define-gexp-compiler (derivation-compiler (drv <derivation>) system target)
   ;; Derivations are the lowest-level representation, so this is the identity
   ;; compiler.
   (with-monad %store-monad
@@ -237,7 +271,7 @@ This is the declarative counterpart of the 'interned-file' monadic procedure."
 'system-error' exception is raised if FILE could not be found."
   (force (%local-file-absolute-file-name file)))
 
-(define-gexp-compiler (local-file-compiler (file local-file?) system target)
+(define-gexp-compiler (local-file-compiler (file <local-file>) system target)
   ;; "Compile" FILE by adding it to the store.
   (match file
     (($ <local-file> file (= force absolute) name recursive? select?)
@@ -264,7 +298,7 @@ This is the declarative counterpart of 'text-file'."
   ;; them in a declarative context.
   (%plain-file name content '()))
 
-(define-gexp-compiler (plain-file-compiler (file plain-file?) system target)
+(define-gexp-compiler (plain-file-compiler (file <plain-file>) system target)
   ;; "Compile" FILE by adding it to the store.
   (match file
     (($ <plain-file> name content references)
@@ -286,7 +320,7 @@ to 'gexp->derivation'.
 This is the declarative counterpart of 'gexp->derivation'."
   (%computed-file name gexp options))
 
-(define-gexp-compiler (computed-file-compiler (file computed-file?)
+(define-gexp-compiler (computed-file-compiler (file <computed-file>)
                                               system target)
   ;; Compile FILE by returning a derivation whose build expression is its
   ;; gexp.
@@ -308,7 +342,7 @@ GEXP.  GUILE is the Guile package used to execute that script.
 This is the declarative counterpart of 'gexp->script'."
   (%program-file name gexp guile))
 
-(define-gexp-compiler (program-file-compiler (file program-file?)
+(define-gexp-compiler (program-file-compiler (file <program-file>)
                                              system target)
   ;; Compile FILE by returning a derivation that builds the script.
   (match file
@@ -328,13 +362,37 @@ This is the declarative counterpart of 'gexp->script'."
 This is the declarative counterpart of 'gexp->file'."
   (%scheme-file name gexp))
 
-(define-gexp-compiler (scheme-file-compiler (file scheme-file?)
+(define-gexp-compiler (scheme-file-compiler (file <scheme-file>)
                                             system target)
   ;; Compile FILE by returning a derivation that builds the file.
   (match file
     (($ <scheme-file> name gexp)
      (gexp->file name gexp))))
 
+;; Appending SUFFIX to BASE's output file name.
+(define-record-type <file-append>
+  (%file-append base suffix)
+  file-append?
+  (base   file-append-base)                    ;<package> | <derivation> | ...
+  (suffix file-append-suffix))                 ;list of strings
+
+(define (file-append base . suffix)
+  "Return a <file-append> object that expands to the concatenation of BASE and
+SUFFIX."
+  (%file-append base suffix))
+
+(define-gexp-compiler file-append-compiler <file-append>
+  compiler => (lambda (obj system target)
+                (match obj
+                  (($ <file-append> base _)
+                   (lower-object base system #:target target))))
+  expander => (lambda (obj lowered output)
+                (match obj
+                  (($ <file-append> base suffix)
+                   (let* ((expand (lookup-expander base))
+                          (base   (expand base lowered output)))
+                     (string-append base (string-concatenate suffix)))))))
+
 
 ;;;
 ;;; Inputs & outputs.
@@ -429,8 +487,6 @@ corresponding derivation."
   "Based on LST, a list of output names and packages, return a list of output
 names and file names suitable for the #:allowed-references argument to
 'derivation'."
-  ;; XXX: Currently outputs other than "out" are not supported, and things
-  ;; other than packages aren't either.
   (with-monad %store-monad
     (define lower
       (match-lambda
@@ -706,15 +762,12 @@ and in the current monad setting (system type, etc.)"
                            (or n? native?)))
                         refs)))
         (($ <gexp-input> (? struct? thing) output n?)
-         (let ((target (if (or n? native?) #f target)))
+         (let ((target (if (or n? native?) #f target))
+               (expand (lookup-expander thing)))
            (mlet %store-monad ((obj (lower-object thing system
                                                   #:target target)))
              ;; OBJ must be either a derivation or a store file name.
-             (return (match obj
-                       ((? derivation? drv)
-                        (derivation->output-path drv output))
-                       ((? string? file)
-                        file))))))
+             (return (expand thing obj output)))))
         (($ <gexp-input> x)
          (return x))
         (x
diff --git a/guix/gnupg.scm b/guix/gnupg.scm
index d1d8b377e1..ef8f9000dc 100644
--- a/guix/gnupg.scm
+++ b/guix/gnupg.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2010, 2011, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2010, 2011, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -40,7 +40,7 @@
 
 (define %gpg-command
   ;; The GnuPG 2.x command-line program name.
-  (make-parameter "gpg2"))
+  (make-parameter (or (getenv "GUIX_GPG_COMMAND") "gpg")))
 
 (define %openpgp-key-server
   ;; The default key server.  Note that keys.gnupg.net appears to be
diff --git a/guix/import/gem.scm b/guix/import/gem.scm
index fc06b0d748..3d0c190656 100644
--- a/guix/import/gem.scm
+++ b/guix/import/gem.scm
@@ -29,7 +29,7 @@
   #:use-module (guix import json)
   #:use-module (guix packages)
   #:use-module (guix upstream)
-  #:use-module (guix licenses)
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix base32)
   #:use-module (guix build-system ruby)
   #:export (gem->guix-package
@@ -155,6 +155,17 @@ package on RubyGems."
     ;; e.g. "https://rubygems.org/downloads/hashery-2.1.1.gem"
     (substring source-url 31 (string-rindex source-url #\-))))
 
+(define (string->license str)
+  "Convert the string STR into a license object."
+  (match str
+    ("GNU LGPL" license:lgpl2.0)
+    ("GPL" license:gpl3)
+    ((or "BSD" "BSD License") license:bsd-3)
+    ((or "MIT" "MIT license" "Expat license") license:expat)
+    ("Public domain" license:public-domain)
+    ((or "Apache License, Version 2.0" "Apache 2.0") license:asl2.0)
+    (_ #f)))
+
 (define (gem-package? package)
   "Return true if PACKAGE is a gem package from RubyGems."
 
diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm
index 343445aa22..8aeffb2326 100644
--- a/guix/import/pypi.scm
+++ b/guix/import/pypi.scm
@@ -41,7 +41,7 @@
   #:use-module (guix import json)
   #:use-module (guix packages)
   #:use-module (guix upstream)
-  #:use-module (guix licenses)
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system python)
   #:use-module (gnu packages python)
   #:export (guix-package->pypi-name
@@ -294,6 +294,17 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE."
              (make-pypi-sexp name version release wheel home-page synopsis
                              description license))))))
 
+(define (string->license str)
+  "Convert the string STR into a license object."
+  (match str
+    ("GNU LGPL" license:lgpl2.0)
+    ("GPL" license:gpl3)
+    ((or "BSD" "BSD License") license:bsd-3)
+    ((or "MIT" "MIT license" "Expat license") license:expat)
+    ("Public domain" license:public-domain)
+    ((or "Apache License, Version 2.0" "Apache 2.0") license:asl2.0)
+    (_ #f)))
+
 (define (pypi-package? package)
   "Return true if PACKAGE is a Python package from PyPI."
 
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 93cd0f0fa5..e4059ca114 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -1,5 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
+;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,14 +19,15 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix import utils)
-  #:use-module (ice-9 match)
-  #:use-module (ice-9 regex)
-  #:use-module (srfi srfi-1)
-  #:use-module (guix hash)
   #:use-module (guix base32)
+  #:use-module ((guix build download) #:prefix build:)
+  #:use-module (guix hash)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix utils)
-  #:use-module ((guix build download) #:prefix build:)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
+  #:use-module (json)
+  #:use-module (srfi srfi-1)
   #:export (factorize-uri
 
             hash-table->alist
@@ -34,7 +37,7 @@
             url-fetch
             guix-hash-url
 
-            string->license
+            spdx-string->license
             license->symbol
 
             snake-case
@@ -109,29 +112,84 @@ recursively apply the procedure to the sub-list."
   "Return the hash of FILENAME in nix-base32 format."
   (bytevector->nix-base32-string (file-sha256 filename)))
 
-(define (string->license str)
-  "Convert the string STR into a license object."
+(define (spdx-string->license str)
+  "Convert STR, a SPDX formatted license identifier, to a license object.
+   Return #f if STR does not match any known identifiers."
+  ;; https://spdx.org/licenses/
+  ;; The psfl, gfl1.0, nmap, repoze
+  ;; licenses doesn't have SPDX identifiers
   (match str
-    ("GNU LGPL" license:lgpl2.0)
-    ("GPL" license:gpl3)
-    ((or "BSD" "BSD License") license:bsd-3)
-    ((or "MIT" "MIT license" "Expat license") license:expat)
-    ("Public domain" license:public-domain)
-    ((or "Apache License, Version 2.0" "Apache 2.0") license:asl2.0)
+    ("AGPL-1.0"                    'license:agpl-1.0)
+    ("AGPL-3.0"                    'license:agpl-3.0)
+    ("Apache-1.1"                  'license:asl1.1)
+    ("Apache-2.0"                  'license:asl2.0)
+    ("BSL-1.0"                     'license:boost1.0)
+    ("BSD-2-Clause-FreeBSD"        'license:bsd-2)
+    ("BSD-3-Clause"                'license:bsd-3)
+    ("BSD-4-Clause"                'license:bsd-4)
+    ("CC0-1.0"                     'license:cc0)
+    ("CC-BY-2.0"                   'license:cc-by2.0)
+    ("CC-BY-3.0"                   'license:cc-by3.0)
+    ("CC-BY-SA-2.0"                'license:cc-by-sa2.0)
+    ("CC-BY-SA-3.0"                'license:cc-by-sa3.0)
+    ("CC-BY-SA-4.0"                'license:cc-by-sa4.0)
+    ("CDDL-1.0"                    'license:cddl1.0)
+    ("CECILL-C"                    'license:cecill-c)
+    ("Artistic-2.0"                'license:artistic2.0)
+    ("ClArtistic"                  'license:clarified-artistic)
+    ("CPL-1.0"                     'license:cpl1.0)
+    ("EPL-1.0"                     'license:epl1.0)
+    ("MIT"                         'license:expat)
+    ("FTL"                         'license:freetype)
+    ("GFDL-1.1"                    'license:fdl1.1+)
+    ("GFDL-1.2"                    'license:fdl1.2+)
+    ("GFDL-1.3"                    'license:fdl1.3+)
+    ("Giftware"                    'license:giftware)
+    ("GPL-1.0"                     'license:gpl1)
+    ("GPL-1.0+"                    'license:gpl1+)
+    ("GPL-2.0"                     'license:gpl2)
+    ("GPL-2.0+"                    'license:gpl2+)
+    ("GPL-3.0"                     'license:gpl3)
+    ("GPL-3.0+"                    'license:gpl3+)
+    ("ISC"                         'license:isc)
+    ("IJG"                         'license:ijg)
+    ("Imlib2"                      'license:imlib2)
+    ("IPA"                         'license:ipa)
+    ("IPL-1.0"                     'license:ibmpl1.0)
+    ("LGPL-2.0"                    'license:lgpl2.0)
+    ("LGPL-2.0+"                   'license:lgpl2.0+)
+    ("LGPL-2.1"                    'license:lgpl2.1)
+    ("LGPL-2.1+"                   'license:lgpl2.1+)
+    ("LGPL-3.0"                    'license:lgpl3.0)
+    ("LGPL-3.0+"                   'license:lgpl3.0+)
+    ("MPL-1.0"                     'license:mpl1.0)
+    ("MPL-1.1"                     'license:mpl1.1)
+    ("MPL-2.0"                     'license:mpl2.0)
+    ("MS-PL"                       'license:ms-pl)
+    ("NCSA"                        'license:ncsa)
+    ("OpenSSL"                     'license:openssl)
+    ("OLDAP-2.8"                   'license:openldap2.8)
+    ("CUA-OPL-1.0"                 'license:opl1.0)
+    ("QPL-1.0"                     'license:qpl)
+    ("Ruby"                        'license:ruby)
+    ("SGI-B-2.0"                   'license:sgifreeb2.0)
+    ("OFL-1.1"                     'license:silofl1.1)
+    ("Sleepycat"                   'license:sleepycat)
+    ("TCL"                         'license:tcl/tk)
+    ("Unlicense"                   'license:unlicense)
+    ("Vim"                         'license:vim)
+    ("X11"                         'license:x11)
+    ("ZPL-2.1"                     'license:zpl2.1)
+    ("Zlib"                        'license:zlib)
     (_ #f)))
 
 (define (license->symbol license)
   "Convert license to a symbol representing the variable the object is bound
 to in the (guix licenses) module, or #f if there is no such known license."
-  ;; TODO: Traverse list public variables in (guix licenses) instead so we
-  ;; don't have to maintain a list manualy.
-  (assoc-ref `((,license:lgpl2.0 . license:lgpl2.0)
-               (,license:gpl3 . license:gpl3)
-               (,license:bsd-3 . license:bsd-3)
-               (,license:expat . license:expat)
-               (,license:public-domain . license:public-domain)
-               (,license:asl2.0 . license:asl2.0))
-             license))
+  (define licenses
+    (module-map (lambda (sym var) `(,(variable-ref var) . ,sym))
+                (resolve-interface '(guix licenses) #:prefix 'license:)))
+  (assoc-ref licenses license))
 
 (define (snake-case str)
   "Return a downcased version of the string STR where underscores are replaced
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 265f048278..8a98b0960a 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -27,7 +27,7 @@
 (define-module (guix licenses)
   #:use-module (srfi srfi-9)
   #:export (license? license-name license-uri license-comment
-            agpl3 agpl3+
+            agpl1 agpl3 agpl3+
             asl1.1 asl2.0
             boost1.0
             bsd-2 bsd-3 bsd-4
@@ -91,6 +91,11 @@
 ;;;
 ;;; Code:
 
+(define agpl1
+  (license "AGPL 1"
+           "https://gnu.org/licenses/agpl.html"
+           "https://gnu.org/licenses/why-affero-gpl.html"))
+
 (define agpl3
   (license "AGPL 3"
            "https://gnu.org/licenses/agpl.html"
@@ -271,6 +276,11 @@ at URI, which may be a file:// URI pointing the package's tree."
            "https://www.gnu.org/licenses/fdl-1.1"
            "https://www.gnu.org/licenses/license-list#FDL"))
 
+(define fdl1.2+
+  (license "FDL 1.2+"
+           "https://www.gnu.org/licenses/fdl-1.2"
+           "https://www.gnu.org/licenses/license-list#FDL"))
+
 (define fdl1.3+
   (license "FDL 1.3+"
            "https://www.gnu.org/licenses/fdl.html"
diff --git a/guix/modules.scm b/guix/modules.scm
new file mode 100644
index 0000000000..24f613ff4e
--- /dev/null
+++ b/guix/modules.scm
@@ -0,0 +1,155 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix modules)
+  #:use-module ((guix utils) #:select (memoize))
+  #:use-module (guix sets)
+  #:use-module (srfi srfi-26)
+  #:use-module (ice-9 match)
+  #:export (source-module-closure
+            live-module-closure
+            guix-module-name?))
+
+;;; Commentary:
+;;;
+;;; This module provides introspection tools for Guile modules at the source
+;;; level.  Namely, it allows you to determine the closure of a module; it
+;;; does so just by reading the 'define-module' clause of the module and its
+;;; dependencies.  This is primarily useful as an argument to
+;;; 'with-imported-modules'.
+;;;
+;;; Code:
+
+(define (colon-symbol? obj)
+  "Return true if OBJ is a symbol that starts with a colon."
+  (and (symbol? obj)
+       (string-prefix? ":" (symbol->string obj))))
+
+(define (colon-symbol->keyword symbol)
+  "Convert SYMBOL to a keyword after stripping its initial ':'."
+  (symbol->keyword
+   (string->symbol (string-drop (symbol->string symbol) 1))))
+
+(define (extract-dependencies clauses)
+  "Return the list of modules imported according to the given 'define-module'
+CLAUSES."
+  (let loop ((clauses clauses)
+             (result  '()))
+    (match clauses
+      (()
+       (reverse result))
+      ((#:use-module (module (or #:select #:hide #:prefix #:renamer) _)
+        rest ...)
+       (loop rest (cons module result)))
+      ((#:use-module module rest ...)
+       (loop rest (cons module result)))
+      ((#:autoload module _ rest ...)
+       (loop rest (cons module result)))
+      (((or #:export #:re-export #:export-syntax #:re-export-syntax
+            #:replace #:version)
+        _ rest ...)
+       (loop rest result))
+      (((or #:pure #:no-backtrace) rest ...)
+       (loop rest result))
+      (((? colon-symbol? symbol) rest ...)
+       (loop (cons (colon-symbol->keyword symbol) rest)
+             result)))))
+
+(define module-file-dependencies
+  (memoize
+   (lambda (file)
+     "Return the list of the names of modules that the Guile module in FILE
+depends on."
+     (call-with-input-file file
+       (lambda (port)
+         (match (read port)
+           (('define-module name clauses ...)
+            (extract-dependencies clauses))
+           ;; XXX: R6RS 'library' form is ignored.
+           (_
+            '())))))))
+
+(define (module-name->file-name module)
+  "Return the file name for MODULE."
+  (string-append (string-join (map symbol->string module) "/")
+                 ".scm"))
+
+(define (guix-module-name? name)
+  "Return true if NAME (a list of symbols) denotes a Guix or GuixSD module."
+  (match name
+    (('guix _ ...) #t)
+    (('gnu _ ...) #t)
+    (_ #f)))
+
+(define* (source-module-dependencies module #:optional (load-path %load-path))
+  "Return the modules used by MODULE by looking at its source code."
+  ;; The (system syntax) module is a special-case because it has no
+  ;; corresponding source file (as of Guile 2.0.)
+  (if (equal? module '(system syntax))
+      '()
+      (module-file-dependencies
+       (search-path load-path
+                    (module-name->file-name module)))))
+
+(define* (module-closure modules
+                         #:key
+                         (select? guix-module-name?)
+                         (dependencies source-module-dependencies))
+  "Return the closure of MODULES, calling DEPENDENCIES to determine the list
+of modules used by a given module.  MODULES and the result are a list of Guile
+module names.  Only modules that match SELECT? are considered."
+  (let loop ((modules modules)
+             (result  '())
+             (visited  (set)))
+    (match modules
+      (()
+       (reverse result))
+      ((module rest ...)
+       (cond ((set-contains? visited module)
+              (loop rest result visited))
+             ((select? module)
+              (loop (append (dependencies module) rest)
+                    (cons module result)
+                    (set-insert module visited)))
+             (else
+              (loop rest result visited)))))))
+
+(define* (source-module-closure modules
+                                #:optional (load-path %load-path)
+                                #:key (select? guix-module-name?))
+  "Return the closure of MODULES by reading 'define-module' forms in their
+source code.  MODULES and the result are a list of Guile module names.  Only
+modules that match SELECT?  are considered."
+  (module-closure modules
+                  #:dependencies (cut source-module-dependencies <> load-path)
+                  #:select? select?))
+
+(define* (live-module-closure modules
+                              #:key (select? guix-module-name?))
+  "Return the closure of MODULES, determined by looking at live (loaded)
+module information.  MODULES and the result are a list of Guile module names.
+Only modules that match SELECT? are considered."
+  (define (dependencies module)
+    (map module-name
+         (delq the-scm-module (module-uses (resolve-module module)))))
+
+  (module-closure modules
+                  #:dependencies dependencies
+                  #:select? select?))
+
+;;; modules.scm ends here
diff --git a/guix/packages.scm b/guix/packages.scm
index 52204b1e09..88b21f709d 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -84,6 +84,8 @@
             package-location
             hidden-package
             hidden-package?
+            package-superseded
+            deprecated-package
             package-field-location
 
             package-direct-sources
@@ -307,6 +309,18 @@ user interfaces, ignores."
 interfaces."
   (assoc-ref (package-properties p) 'hidden?))
 
+(define (package-superseded p)
+  "Return the package the supersedes P, or #f if P is still current."
+  (assoc-ref (package-properties p) 'superseded))
+
+(define (deprecated-package old-name p)
+  "Return a package called OLD-NAME and marked as superseded by P, a package
+object."
+  (package
+    (inherit p)
+    (name old-name)
+    (properties `((superseded . ,p)))))
+
 (define (package-field-location package field)
   "Return the source code location of the definition of FIELD for PACKAGE, or
 #f if it could not be determined."
@@ -1168,7 +1182,7 @@ cross-compilation target triplet."
 (define package->cross-derivation
   (store-lift package-cross-derivation))
 
-(define-gexp-compiler (package-compiler (package package?) system target)
+(define-gexp-compiler (package-compiler (package <package>) system target)
   ;; Compile PACKAGE to a derivation for SYSTEM, optionally cross-compiled for
   ;; TARGET.  This is used when referring to a package from within a gexp.
   (if target
@@ -1199,7 +1213,7 @@ cross-compilation target triplet."
                          #:modules modules
                          #:guile-for-build guile)))))
 
-(define-gexp-compiler (origin-compiler (origin origin?) system target)
+(define-gexp-compiler (origin-compiler (origin <origin>) system target)
   ;; Compile ORIGIN to a derivation for SYSTEM.  This is used when referring
   ;; to an origin from within a gexp.
   (origin->derivation origin system))
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 169c700f19..d162f6241b 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
+;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,6 +68,9 @@
 
             manifest-pattern
             manifest-pattern?
+            manifest-pattern-name
+            manifest-pattern-version
+            manifest-pattern-output
 
             manifest-remove
             manifest-add
@@ -78,6 +82,9 @@
             manifest-transaction?
             manifest-transaction-install
             manifest-transaction-remove
+            manifest-transaction-install-entry
+            manifest-transaction-remove-pattern
+            manifest-transaction-null?
             manifest-perform-transaction
             manifest-transaction-effects
 
@@ -383,6 +390,28 @@ no match.."
   (remove  manifest-transaction-remove  ; list of <manifest-pattern>
            (default '())))
 
+(define (manifest-transaction-install-entry entry transaction)
+  "Augment TRANSACTION's set of installed packages with ENTRY, a
+<manifest-entry>."
+  (manifest-transaction
+   (inherit transaction)
+   (install
+    (cons entry (manifest-transaction-install transaction)))))
+
+(define (manifest-transaction-remove-pattern pattern transaction)
+  "Add PATTERN to TRANSACTION's list of packages to remove."
+  (manifest-transaction
+   (inherit transaction)
+   (remove
+    (cons pattern (manifest-transaction-remove transaction)))))
+
+(define (manifest-transaction-null? transaction)
+  "Return true if TRANSACTION has no effect---i.e., it neither installs nor
+remove software."
+  (match transaction
+    (($ <manifest-transaction> () ()) #t)
+    (($ <manifest-transaction> _ _)   #f)))
+
 (define (manifest-transaction-effects manifest transaction)
   "Compute the effect of applying TRANSACTION to MANIFEST.  Return 4 values:
 the list of packages that would be removed, installed, upgraded, or downgraded
@@ -424,7 +453,7 @@ replace it."
                    downgrade)))))))
 
 (define (manifest-perform-transaction manifest transaction)
-  "Perform TRANSACTION on MANIFEST and return new manifest."
+  "Perform TRANSACTION on MANIFEST and return the new manifest."
   (let ((install (manifest-transaction-install transaction))
         (remove  (manifest-transaction-remove transaction)))
     (manifest-add (manifest-remove manifest remove)
@@ -444,21 +473,30 @@ replace it."
                 (cons (gexp-input thing output) deps)))
               (manifest-entries manifest)))
 
-(define (manifest-lookup-package manifest name)
+(define* (manifest-lookup-package manifest name #:optional version)
   "Return as a monadic value the first package or store path referenced by
-MANIFEST that named NAME, or #f if not found."
+MANIFEST that is named NAME and optionally has the given VERSION prefix, or #f
+if not found."
   ;; Return as a monadic value the package or store path referenced by the
   ;; manifest ENTRY, or #f if not referenced.
   (define (entry-lookup-package entry)
     (define (find-among-inputs inputs)
       (find (lambda (input)
               (and (package? input)
-                   (equal? name (package-name input))))
+                   (equal? name (package-name input))
+                   (if version
+                       (string-prefix? version (package-version input))
+                       #t)))
             inputs))
     (define (find-among-store-items items)
       (find (lambda (item)
-              (equal? name (package-name->name+version
-                            (store-path-package-name item))))
+              (let-values (((pkg-name pkg-version)
+                            (package-name->name+version
+                             (store-path-package-name item))))
+                (and (equal? name pkg-name)
+                     (if version
+                         (string-prefix? version pkg-version)
+                         #t))))
             items))
 
     ;; TODO: Factorize.
@@ -695,6 +733,66 @@ creates the GTK+ 'icon-theme.cache' file for each theme."
                           #:substitutable? #f)
         (return #f))))
 
+(define (gtk-im-modules manifest)
+  "Return a derivation that builds the cache files for input method modules
+for both major versions of GTK+."
+
+  (mlet %store-monad ((gtk+   (manifest-lookup-package manifest "gtk+" "3"))
+                      (gtk+-2 (manifest-lookup-package manifest "gtk+" "2")))
+
+    (define (build gtk gtk-version)
+      (let ((major (string-take gtk-version 1)))
+        (with-imported-modules '((guix build utils)
+                                 (guix build union)
+                                 (guix build profiles)
+                                 (guix search-paths)
+                                 (guix records))
+          #~(begin
+              (use-modules (guix build utils)
+                           (guix build union)
+                           (guix build profiles)
+                           (ice-9 popen)
+                           (srfi srfi-1)
+                           (srfi srfi-26))
+
+              (let* ((prefix  (string-append "/lib/gtk-" #$major ".0/"
+                                             #$gtk-version))
+                     (query   (string-append #$gtk "/bin/gtk-query-immodules-"
+                                             #$major ".0"))
+                     (destdir (string-append #$output prefix))
+                     (moddirs (cons (string-append #$gtk prefix "/immodules")
+                                    (filter file-exists?
+                                            (map (cut string-append <> prefix "/immodules")
+                                                 '#$(manifest-inputs manifest)))))
+                     (modules (append-map (cut find-files <> "\\.so$")
+                                          moddirs)))
+
+                ;; Generate a new immodules cache file.
+                (mkdir-p (string-append #$output prefix))
+                (let ((pipe    (apply open-pipe* OPEN_READ query modules))
+                      (outfile (string-append #$output prefix
+                                              "/immodules-gtk" #$major ".cache")))
+                  (dynamic-wind
+                    (const #t)
+                    (lambda ()
+                      (call-with-output-file outfile
+                        (lambda (out)
+                          (while (not (eof-object? (peek-char pipe)))
+                            (write-char (read-char pipe) out))))
+                      #t)
+                    (lambda ()
+                      (close-pipe pipe)))))))))
+
+    ;; Don't run the hook when there's nothing to do.
+    (let ((gexp #~(begin
+                    #$(if gtk+   (build gtk+   "3.0.0")  #t)
+                    #$(if gtk+-2 (build gtk+-2 "2.10.0") #t))))
+      (if (or gtk+ gtk+-2)
+          (gexp->derivation "gtk-im-modules" gexp
+                            #:local-build? #t
+                            #:substitutable? #f)
+          (return #f)))))
+
 (define (xdg-desktop-database manifest)
   "Return a derivation that builds the @file{mimeinfo.cache} database from
 desktop files.  It's used to query what applications can handle a given
@@ -816,6 +914,7 @@ files for the truetype fonts of the @var{manifest} entries."
         ghc-package-cache-file
         ca-certificate-bundle
         gtk-icon-themes
+        gtk-im-modules
         xdg-desktop-database
         xdg-mime-database))
 
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index 86b95b4075..b64138ec0e 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -195,7 +195,7 @@ of \"guile\"."
              ((old new)
               (cons (specification->package old)
                     (specification->package new)))
-             (_
+             (x
               (leave (_ "invalid replacement specification: ~s~%") spec))))
          replacement-specs))
 
@@ -595,8 +595,16 @@ build."
                        (#f
                         (list (package->derivation store p system)))
                        (#t
-                        (let ((s (package-source p)))
-                          (list (package-source-derivation store s))))
+                        (match (package-source p)
+                          (#f
+                           (format (current-error-port)
+                                   (_ "~a: warning: \
+package '~a' has no source~%")
+                                   (location->string (package-location p))
+                                   (package-name p))
+                           '())
+                          (s
+                           (list (package-source-derivation store s)))))
                        (proc
                         (map (cut package-source-derivation store <>)
                              (proc p))))))
diff --git a/guix/scripts/hash.scm b/guix/scripts/hash.scm
index d44095377b..a6eced92fb 100644
--- a/guix/scripts/hash.scm
+++ b/guix/scripts/hash.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,6 +50,8 @@ Return the cryptographic hash of FILE.
 Supported formats: 'nix-base32' (default), 'base32', and 'base16' ('hex'
 and 'hexadecimal' can be used as well).\n"))
   (format #t (_ "
+  -x, --exclude-vcs      exclude version control directories"))
+  (format #t (_ "
   -f, --format=FMT       write the hash in the given format"))
   (format #t (_ "
   -r, --recursive        compute the hash on FILE recursively"))
@@ -62,7 +65,10 @@ and 'hexadecimal' can be used as well).\n"))
 
 (define %options
   ;; Specification of the command-line options.
-  (list (option '(#\f "format") #t #f
+  (list (option '(#\x "exclude-vcs") #f #f
+                (lambda (opt name arg result)
+                  (alist-cons 'exclude-vcs? #t result)))
+        (option '(#\f "format") #t #f
                 (lambda (opt name arg result)
                   (define fmt-proc
                     (match arg
@@ -81,7 +87,6 @@ and 'hexadecimal' can be used as well).\n"))
         (option '(#\r "recursive") #f #f
                 (lambda (opt name arg result)
                   (alist-cons 'recursive? #t result)))
-
         (option '(#\h "help") #f #f
                 (lambda args
                   (show-help)
@@ -107,13 +112,23 @@ and 'hexadecimal' can be used as well).\n"))
                   (alist-cons 'argument arg result))
                 %default-options))
 
+  (define (vcs-file? file stat)
+    (case (stat:type stat)
+      ((directory)
+       (member (basename file) '(".bzr" ".git" ".hg" ".svn" "CVS")))
+      (else
+       #f)))
+
   (let* ((opts (parse-options))
          (args (filter-map (match-lambda
                             (('argument . value)
                              value)
                             (_ #f))
                            (reverse opts)))
-         (fmt  (assq-ref opts 'format)))
+         (fmt  (assq-ref opts 'format))
+         (select? (if (assq-ref opts 'exclude-vcs?)
+                      (negate vcs-file?)
+                      (const #t))))
 
     (define (file-hash file)
       ;; Compute the hash of FILE.
@@ -121,7 +136,7 @@ and 'hexadecimal' can be used as well).\n"))
       (with-error-handling
         (if (assoc-ref opts 'recursive?)
             (let-values (((port get-hash) (open-sha256-port)))
-              (write-file file port)
+              (write-file file port #:select? select?)
               (flush-output-port port)
               (get-hash))
             (call-with-input-file file port-sha256))))
@@ -134,5 +149,5 @@ and 'hexadecimal' can be used as well).\n"))
          (lambda args
            (leave (_ "~a~%")
                   (strerror (system-error-errno args))))))
-      (_
+      (x
        (leave (_ "wrong number of arguments~%"))))))
diff --git a/guix/scripts/import/gnu.scm b/guix/scripts/import/gnu.scm
index 92bd8305ea..66861f5837 100644
--- a/guix/scripts/import/gnu.scm
+++ b/guix/scripts/import/gnu.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -68,7 +68,7 @@ Return a package declaration template for PACKAGE, a GNU package.\n"))
                      ((or "interactive" "always" "never")
                       (alist-cons 'key-download (string->symbol arg)
                                   result))
-                     (_
+                     (x
                       (leave (_ "unsupported policy: ~a~%")
                              arg)))))
          %standard-import-options))
@@ -99,7 +99,7 @@ Return a package declaration template for PACKAGE, a GNU package.\n"))
        (with-error-handling
          (gnu->guix-package name
                             #:key-download (assoc-ref opts 'key-download))))
-      (_
+      (x
        (leave (_ "wrong number of arguments~%"))))))
 
 ;;; gnu.scm ends here
diff --git a/guix/scripts/import/nix.scm b/guix/scripts/import/nix.scm
index dba053b313..05e6e4b85d 100644
--- a/guix/scripts/import/nix.scm
+++ b/guix/scripts/import/nix.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -86,5 +86,5 @@ Import and convert the Nix expression ATTRIBUTE of NIXPKGS.\n"))
          (format #t ";; converted from ~a:~a~%~%"
                  (location-file loc) (location-line loc))
          expr))
-      (_
+      (x
        (leave (_ "wrong number of arguments~%"))))))
diff --git a/guix/scripts/offload.scm b/guix/scripts/offload.scm
index 7db0c9d610..b278f1e313 100644
--- a/guix/scripts/offload.scm
+++ b/guix/scripts/offload.scm
@@ -118,7 +118,7 @@ determined."
          (primitive-load file))))
     (lambda args
       (match args
-        (('system-error . _)
+        (('system-error . rest)
          (let ((err (system-error-errno args)))
            ;; Silently ignore missing file since this is a common case.
            (if (= ENOENT err)
@@ -129,7 +129,7 @@ determined."
          (let ((loc (source-properties->location properties)))
            (leave (_ "~a: ~a~%")
                   (location->string loc) message)))
-        (_
+        (x
          (leave (_ "failed to load machine file '~a': ~s~%")
                 file args))))))
 
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index fd42cdb36e..b87aee0be9 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -261,19 +261,46 @@ synopsis or description matches all of REGEXPS."
        ((<)  #t)
        (else #f)))))
 
-(define (upgradeable? name current-version current-path)
-  "Return #t if there's a version of package NAME newer than CURRENT-VERSION,
-or if the newest available version is equal to CURRENT-VERSION but would have
-an output path different than CURRENT-PATH."
-  (match (vhash-assoc name (find-newest-available-packages))
-    ((_ candidate-version pkg . rest)
-     (case (version-compare candidate-version current-version)
-       ((>) #t)
-       ((<) #f)
-       ((=) (let ((candidate-path (derivation->output-path
-                                   (package-derivation (%store) pkg))))
-              (not (string=? current-path candidate-path))))))
-    (#f #f)))
+(define (transaction-upgrade-entry entry transaction)
+  "Return a variant of TRANSACTION that accounts for the upgrade of ENTRY, a
+<manifest-entry>."
+  (define (supersede old new)
+    (info (_ "package '~a' has been superseded by '~a'~%")
+          (manifest-entry-name old) (package-name new))
+    (manifest-transaction-install-entry
+     (package->manifest-entry new (manifest-entry-output old))
+     (manifest-transaction-remove-pattern
+      (manifest-pattern
+        (name (manifest-entry-name old))
+        (version (manifest-entry-version old))
+        (output (manifest-entry-output old)))
+      transaction)))
+
+  (match entry
+    (($ <manifest-entry> name version output (? string? path))
+     (match (vhash-assoc name (find-newest-available-packages))
+       ((_ candidate-version pkg . rest)
+        (match (package-superseded pkg)
+          ((? package? new)
+           (supersede entry new))
+          (#f
+           (case (version-compare candidate-version version)
+             ((>)
+              (manifest-transaction-install-entry
+               (package->manifest-entry pkg output)
+               transaction))
+             ((<)
+              transaction)
+             ((=)
+              (let ((candidate-path (derivation->output-path
+                                     (package-derivation (%store) pkg))))
+                (if (string=? path candidate-path)
+                    transaction
+                    (manifest-transaction-install-entry
+                     (package->manifest-entry pkg output)
+                     transaction))))))))
+       (#f
+        transaction)))))
 
 
 ;;;
@@ -553,24 +580,20 @@ upgrading, #f otherwise."
       (output #f)
       (item item))))
 
-(define (options->installable opts manifest)
+(define (options->installable opts manifest transaction)
   "Given MANIFEST, the current manifest, and OPTS, the result of 'args-fold',
-return the new list of manifest entries."
+return an variant of TRANSACTION that accounts for the specified installations
+and upgrades."
   (define upgrade?
     (options->upgrade-predicate opts))
 
-  (define to-upgrade
-    (filter-map (match-lambda
-                  (($ <manifest-entry> name version output path _)
-                   (and (upgrade? name)
-                        (upgradeable? name version path)
-                        (let ((output (or output "out")))
-                          (call-with-values
-                              (lambda ()
-                                (specification->package+output name output))
-                            package->manifest-entry))))
-                  (_ #f))
-                (manifest-entries manifest)))
+  (define upgraded
+    (fold (lambda (entry transaction)
+            (if (upgrade? (manifest-entry-name entry))
+                (transaction-upgrade-entry entry transaction)
+                transaction))
+          transaction
+          (manifest-entries manifest)))
 
   (define to-install
     (filter-map (match-lambda
@@ -587,23 +610,29 @@ return the new list of manifest entries."
                   (_ #f))
                 opts))
 
-  (append to-upgrade to-install))
-
-(define (options->removable options manifest)
-  "Given options, return the list of manifest patterns of packages to be
-removed from MANIFEST."
-  (filter-map (match-lambda
-               (('remove . spec)
-                (call-with-values
-                    (lambda ()
-                      (package-specification->name+version+output spec))
-                  (lambda (name version output)
-                    (manifest-pattern
-                      (name name)
-                      (version version)
-                      (output output)))))
-               (_ #f))
-              options))
+  (fold manifest-transaction-install-entry
+        upgraded
+        to-install))
+
+(define (options->removable options manifest transaction)
+  "Given options, return a variant of TRANSACTION augmented with the list of
+patterns of packages to remove."
+  (fold (lambda (opt transaction)
+          (match opt
+            (('remove . spec)
+             (call-with-values
+                 (lambda ()
+                   (package-specification->name+version+output spec))
+               (lambda (name version output)
+                 (manifest-transaction-remove-pattern
+                  (manifest-pattern
+                    (name name)
+                    (version version)
+                    (output output))
+                  transaction))))
+            (_ transaction)))
+        transaction
+        options))
 
 (define (register-gc-root store profile)
   "Register PROFILE, a profile generation symlink, as a GC root, unless it
@@ -814,16 +843,18 @@ processed, #f otherwise."
             opts)
 
   ;; Then, process normal package installation/removal/upgrade.
-  (let* ((manifest    (profile-manifest profile))
-         (install     (options->installable opts manifest))
-         (remove      (options->removable opts manifest))
-         (transaction (manifest-transaction
-                       (install (map transform-entry install))
-                       (remove remove)))
-         (new         (manifest-perform-transaction manifest transaction)))
-
-    (unless (and (null? install) (null? remove))
-      (show-manifest-transaction store manifest transaction
+  (let* ((manifest (profile-manifest profile))
+         (step1    (options->installable opts manifest
+                                         (manifest-transaction)))
+         (step2    (options->removable opts manifest step1))
+         (step3    (manifest-transaction
+                    (inherit step2)
+                    (install (map transform-entry
+                                  (manifest-transaction-install step2)))))
+         (new      (manifest-perform-transaction manifest step3)))
+
+    (unless (manifest-transaction-null? step3)
+      (show-manifest-transaction store manifest step3
                                  #:dry-run? dry-run?)
       (build-and-use-profile store profile new
                              #:bootstrap? bootstrap?
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index b00ac98c96..84e2a8f2a6 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -105,7 +105,7 @@
                     ((or "interactive" "always" "never")
                      (alist-cons 'key-download (string->symbol arg)
                                  result))
-                    (_
+                    (x
                      (leave (_ "unsupported policy: ~a~%")
                             arg)))))
 
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 8827c45fb8..21e0613a8a 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -300,7 +300,7 @@ Otherwise return #f."
 (define (narinfo-signature->canonical-sexp str)
   "Return the value of a narinfo's 'Signature' field as a canonical sexp."
   (match (string-split str #\;)
-    ((version _ sig)
+    ((version host-name sig)
      (let ((maybe-number (string->number version)))
        (cond ((not (number? maybe-number))
               (leave (_ "signature version must be a number: ~s~%")
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 953c6243ed..a2cd97ac1f 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -383,7 +383,8 @@ it atomically, and then run OS's activation script."
                                   (uuid->string root)
                                   root))
             (kernel           (boot-parameters-kernel params))
-            (kernel-arguments (boot-parameters-kernel-arguments params)))
+            (kernel-arguments (boot-parameters-kernel-arguments params))
+            (initrd           (boot-parameters-initrd params)))
        (menu-entry
         (label (string-append label " (#"
                               (number->string number) ", "
@@ -391,10 +392,10 @@ it atomically, and then run OS's activation script."
         (linux kernel)
         (linux-arguments
          (cons* (string-append "--root=" root-device)
-                #~(string-append "--system=" #$system)
-                #~(string-append "--load=" #$system "/boot")
+                (string-append "--system=" system)
+                (string-append "--load=" system "/boot")
                 kernel-arguments))
-        (initrd #~(string-append #$system "/initrd"))))))
+        (initrd initrd)))))
 
   (let* ((numbers (generation-numbers profile))
          (systems (map (cut generation-file-name profile <>)
diff --git a/guix/ui.scm b/guix/ui.scm
index 906b349845..eb85df3b18 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -247,7 +247,7 @@ messages."
   "Report the failure to load FILE, a user-provided Scheme file.
 ARGS is the list of arguments received by the 'throw' handler."
   (match args
-    (('system-error . _)
+    (('system-error . rest)
      (let ((err (system-error-errno args)))
        (report-error (_ "failed to load '~a': ~a~%") file (strerror err))))
     (('syntax-error proc message properties form . rest)
@@ -264,7 +264,7 @@ ARGS is the list of arguments received by the 'throw' handler."
   "Report the failure to load FILE, a user-provided Scheme file, without
 exiting.  ARGS is the list of arguments received by the 'throw' handler."
   (match args
-    (('system-error . _)
+    (('system-error . rest)
      (let ((err (system-error-errno args)))
        (warning (_ "failed to load '~a': ~a~%") file (strerror err))))
     (('syntax-error proc message properties form . rest)
@@ -409,7 +409,7 @@ interpreted."
           ("ZB"  (expt 10 21))
           ("YB"  (expt 10 24))
           (""    1)
-          (_
+          (x
            (leave (_ "unknown unit: ~a~%") unit)))))))
 
 (define (call-with-error-handling thunk)
@@ -535,7 +535,7 @@ similar."
 error."
   (match (read/eval str)
     ((? package? p) p)
-    (_
+    (x
      (leave (_ "expression ~s does not evaluate to a package~%")
             str))))
 
@@ -1187,7 +1187,9 @@ found."
   (let ((command-main (module-ref module
                                   (symbol-append 'guix- command))))
     (parameterize ((program-name command))
-      (apply command-main args))))
+      ;; Disable canonicalization so we don't don't stat unreasonably.
+      (with-fluids ((%file-port-name-canonicalization #f))
+        (apply command-main args)))))
 
 (define (run-guix . args)
   "Run the 'guix' command defined by command line ARGS.
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 03a64fa6bb..214e7a5302 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -207,6 +207,47 @@
                (e3 `(display ,txt)))
            (equal? `(begin ,e0 ,e1 ,e2 ,e3) (gexp->sexp* exp))))))
 
+(test-assert "file-append"
+  (let* ((drv (package-derivation %store %bootstrap-guile))
+         (fa  (file-append %bootstrap-guile "/bin/guile"))
+         (exp #~(here we go #$fa)))
+    (and (match (gexp->sexp* exp)
+           (('here 'we 'go (? string? result))
+            (string=? result
+                      (string-append (derivation->output-path drv)
+                                     "/bin/guile"))))
+         (match (gexp-inputs exp)
+           (((thing "out"))
+            (eq? thing fa))))))
+
+(test-assert "file-append, output"
+  (let* ((drv (package-derivation %store glibc))
+         (fa  (file-append glibc "/lib" "/debug"))
+         (exp #~(foo #$fa:debug)))
+    (and (match (gexp->sexp* exp)
+           (('foo (? string? result))
+            (string=? result
+                      (string-append (derivation->output-path drv "debug")
+                                     "/lib/debug"))))
+         (match (gexp-inputs exp)
+           (((thing "debug"))
+            (eq? thing fa))))))
+
+(test-assert "file-append, nested"
+  (let* ((drv   (package-derivation %store glibc))
+         (dir   (file-append glibc "/bin"))
+         (slash (file-append dir "/"))
+         (file  (file-append slash "getent"))
+         (exp   #~(foo #$file)))
+    (and (match (gexp->sexp* exp)
+           (('foo (? string? result))
+            (string=? result
+                      (string-append (derivation->output-path drv)
+                                     "/bin/getent"))))
+         (match (gexp-inputs exp)
+           (((thing "out"))
+            (eq? thing file))))))
+
 (test-assert "ungexp + ungexp-native"
   (let* ((exp    (gexp (list (ungexp-native %bootstrap-guile)
                              (ungexp coreutils)
@@ -338,6 +379,18 @@
     (return (and (equal? sexp (call-with-input-file out read))
                  (equal? (list guile) refs)))))
 
+(test-assertm "gexp->file + file-append"
+  (mlet* %store-monad ((exp -> #~#$(file-append %bootstrap-guile
+                                                "/bin/guile"))
+                       (guile  (package-file %bootstrap-guile))
+                       (drv    (gexp->file "foo" exp))
+                       (out -> (derivation->output-path drv))
+                       (done   (built-derivations (list drv)))
+                       (refs   ((store-lift references) out)))
+    (return (and (equal? (string-append guile "/bin/guile")
+                         (call-with-input-file out read))
+                 (equal? (list guile) refs)))))
+
 (test-assertm "gexp->derivation"
   (mlet* %store-monad ((file    (text-file "foo" "Hello, world!"))
                        (exp ->  (gexp
diff --git a/tests/guix-build.sh b/tests/guix-build.sh
index 6d4f97019a..9e9788bca0 100644
--- a/tests/guix-build.sh
+++ b/tests/guix-build.sh
@@ -93,6 +93,9 @@ cat > "$module_dir/foo.scm"<<EOF
 (define-public baz
   (dummy-package "baz" (replacement foo)))
 
+(define-public superseded
+  (deprecated-package "superseded" bar))
+
 EOF
 
 GUIX_PACKAGE_PATH="$module_dir"
@@ -168,6 +171,9 @@ test "$drv1" = "$drv2"
 if guix build guile --with-input=libunistring=something-really-silly
 then false; else true; fi
 
+# Deprecated/superseded packages.
+test "`guix build superseded -d`" = "`guix build bar -d`"
+
 # Parsing package names and versions.
 guix build -n time		# PASS
 guix build -n time@1.7		# PASS, version found
diff --git a/tests/guix-hash.sh b/tests/guix-hash.sh
index 23df01d417..44213d51af 100644
--- a/tests/guix-hash.sh
+++ b/tests/guix-hash.sh
@@ -1,5 +1,6 @@
 # GNU Guix --- Functional package management for GNU
 # Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 #
 # This file is part of GNU Guix.
 #
@@ -46,3 +47,18 @@ then false; else true; fi
 # the archive format doesn't support.
 if guix hash -r /dev/null
 then false; else true; fi
+
+# Adding a .git directory
+mkdir "$tmpdir/.git"
+touch "$tmpdir/.git/foo"
+
+# ...changes the hash
+test `guix hash -r $tmpdir` = 0a50z04zyzf7pidwxv0nwbj82pgzbrhdy9562kncnvkcfvb48m59
+
+# ...but remains the same when using `-x'
+test `guix hash -r $tmpdir -x` = 10k1lw41wyrjf9mxydi0is5nkpynlsvgslinics4ppir13g7d74p
+
+# Without '-r', this should fail.
+if guix hash "$tmpdir"
+then false; else true; fi
+
diff --git a/tests/import-utils.scm b/tests/import-utils.scm
index 3b11875c4a..8d44b9e0e2 100644
--- a/tests/import-utils.scm
+++ b/tests/import-utils.scm
@@ -20,6 +20,7 @@
 (define-module (test-import-utils)
   #:use-module (guix tests)
   #:use-module (guix import utils)
+  #:use-module ((guix licenses) #:prefix license:)
   #:use-module (srfi srfi-64))
 
 (test-begin "import-utils")
@@ -33,4 +34,8 @@
   "This package provides a function to establish world peace"
   (beautify-description "A function to establish world peace"))
 
+(test-equal "license->symbol"
+  'license:lgpl2.0
+  (license->symbol license:lgpl2.0))
+
 (test-end "import-utils")
diff --git a/tests/modules.scm b/tests/modules.scm
new file mode 100644
index 0000000000..04945e531b
--- /dev/null
+++ b/tests/modules.scm
@@ -0,0 +1,45 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-modules)
+  #:use-module (guix modules)
+  #:use-module ((guix build-system gnu) #:select (%gnu-build-system-modules))
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-64))
+
+(test-begin "modules")
+
+(test-assert "closure of (guix build gnu-build-system)"
+  (lset= equal?
+         (live-module-closure '((guix build gnu-build-system)))
+         (source-module-closure '((guix build gnu-build-system)))
+         %gnu-build-system-modules
+         (source-module-closure %gnu-build-system-modules)
+         (live-module-closure %gnu-build-system-modules)))
+
+(test-assert "closure of (gnu build install)"
+  (lset= equal?
+         (live-module-closure '((gnu build install)))
+         (source-module-closure '((gnu build install)))))
+
+(test-assert "closure of (gnu build vm)"
+  (lset= equal?
+         (live-module-closure '((gnu build vm)))
+         (source-module-closure '((gnu build vm)))))
+
+(test-end)
diff --git a/tests/packages.scm b/tests/packages.scm
index daceea5d62..b8e1f111cd 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -49,6 +49,7 @@
   #:use-module (srfi srfi-35)
   #:use-module (srfi srfi-64)
   #:use-module (rnrs io ports)
+  #:use-module (ice-9 vlist)
   #:use-module (ice-9 regex)
   #:use-module (ice-9 match))
 
@@ -83,6 +84,64 @@
   (and (hidden-package? (hidden-package (dummy-package "foo")))
        (not (hidden-package? (dummy-package "foo")))))
 
+(test-assert "package-superseded"
+  (let* ((new (dummy-package "bar"))
+         (old (deprecated-package "foo" new)))
+    (and (eq? (package-superseded old) new)
+         (mock ((gnu packages) find-best-packages-by-name (const (list old)))
+               (specification->package "foo")
+               (and (eq? new (specification->package "foo"))
+                    (eq? new (specification->package+output "foo")))))))
+
+(test-assert "transaction-upgrade-entry, zero upgrades"
+  (let* ((old (dummy-package "foo" (version "1")))
+         (tx  (mock ((gnu packages) find-newest-available-packages
+                     (const vlist-null))
+                    ((@@ (guix scripts package) transaction-upgrade-entry)
+                     (manifest-entry
+                       (inherit (package->manifest-entry old))
+                       (item (string-append (%store-prefix) "/"
+                                            (make-string 32 #\e) "-foo-1")))
+                     (manifest-transaction)))))
+    (manifest-transaction-null? tx)))
+
+(test-assert "transaction-upgrade-entry, one upgrade"
+  (let* ((old (dummy-package "foo" (version "1")))
+         (new (dummy-package "foo" (version "2")))
+         (tx  (mock ((gnu packages) find-newest-available-packages
+                     (const (vhash-cons "foo" (list "2" new) vlist-null)))
+                    ((@@ (guix scripts package) transaction-upgrade-entry)
+                     (manifest-entry
+                       (inherit (package->manifest-entry old))
+                       (item (string-append (%store-prefix) "/"
+                                            (make-string 32 #\e) "-foo-1")))
+                     (manifest-transaction)))))
+    (and (match (manifest-transaction-install tx)
+           ((($ <manifest-entry> "foo" "2" "out" item))
+            (eq? item new)))
+         (null? (manifest-transaction-remove tx)))))
+
+(test-assert "transaction-upgrade-entry, superseded package"
+  (let* ((old (dummy-package "foo" (version "1")))
+         (new (dummy-package "bar" (version "2")))
+         (dep (deprecated-package "foo" new))
+         (tx  (mock ((gnu packages) find-newest-available-packages
+                     (const (vhash-cons "foo" (list "2" dep) vlist-null)))
+                    ((@@ (guix scripts package) transaction-upgrade-entry)
+                     (manifest-entry
+                       (inherit (package->manifest-entry old))
+                       (item (string-append (%store-prefix) "/"
+                                            (make-string 32 #\e) "-foo-1")))
+                     (manifest-transaction)))))
+    (and (match (manifest-transaction-install tx)
+           ((($ <manifest-entry> "bar" "2" "out" item))
+            (eq? item new)))
+         (match (manifest-transaction-remove tx)
+           (((? manifest-pattern? pattern))
+            (and (string=? (manifest-pattern-name pattern) "foo")
+                 (string=? (manifest-pattern-version pattern) "1")
+                 (string=? (manifest-pattern-output pattern) "out")))))))
+
 (test-assert "package-field-location"
   (let ()
     (define (goto port line column)
diff --git a/tests/profiles.scm b/tests/profiles.scm
index 028d7b6fb4..f9c2f5499e 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -187,6 +187,9 @@
       (and (null? remove) (null? install) (null? downgrade)
            (equal? (list (cons guile-2.0.9 guile-2.0.9)) upgrade)))))
 
+(test-assert "manifest-transaction-null?"
+  (manifest-transaction-null? (manifest-transaction)))
+
 (test-assertm "profile-derivation"
   (mlet* %store-monad
       ((entry ->   (package->manifest-entry %bootstrap-guile))