summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2018-03-01 18:04:12 +0100
committerMarius Bakke <mbakke@fastmail.com>2018-03-01 18:04:12 +0100
commit86990eeda2a85acd3640059c0b681f1eddbacba0 (patch)
treedf0d4f0b86dad2b260b7354d451993c141dde5e7
parent6d796220c417a34100c282a7fa1f9afb6ac00339 (diff)
parent52fb59ef253d9550ca4cfa095c2c0c2360d79095 (diff)
downloadguix-86990eeda2a85acd3640059c0b681f1eddbacba0.tar.gz
Merge branch 'master' into staging
-rw-r--r--README2
-rw-r--r--config-daemon.ac9
-rw-r--r--configure.ac2
-rw-r--r--doc/guix.texi950
-rw-r--r--gnu/build/linux-modules.scm14
-rw-r--r--gnu/local.mk11
-rw-r--r--gnu/packages/admin.scm8
-rw-r--r--gnu/packages/agda.scm86
-rw-r--r--gnu/packages/audio.scm14
-rw-r--r--gnu/packages/autotools.scm17
-rw-r--r--gnu/packages/backup.scm5
-rw-r--r--gnu/packages/cdrom.scm19
-rw-r--r--gnu/packages/check.scm287
-rw-r--r--gnu/packages/ci.scm6
-rw-r--r--gnu/packages/commencement.scm9
-rw-r--r--gnu/packages/databases.scm23
-rw-r--r--gnu/packages/django.scm24
-rw-r--r--gnu/packages/docbook.scm6
-rw-r--r--gnu/packages/emacs.scm12
-rw-r--r--gnu/packages/embedded.scm5
-rw-r--r--gnu/packages/fontutils.scm2
-rw-r--r--gnu/packages/freedesktop.scm14
-rw-r--r--gnu/packages/fribidi.scm9
-rw-r--r--gnu/packages/ftp.scm4
-rw-r--r--gnu/packages/game-development.scm22
-rw-r--r--gnu/packages/gd.scm43
-rw-r--r--gnu/packages/ghostscript.scm2
-rw-r--r--gnu/packages/glib.scm34
-rw-r--r--gnu/packages/gnome.scm28
-rw-r--r--gnu/packages/golang.scm119
-rw-r--r--gnu/packages/gstreamer.scm4
-rw-r--r--gnu/packages/gtk.scm91
-rw-r--r--gnu/packages/haskell-web.scm23
-rw-r--r--gnu/packages/haskell.scm4
-rw-r--r--gnu/packages/image-viewers.scm4
-rw-r--r--gnu/packages/image.scm30
-rw-r--r--gnu/packages/imagemagick.scm4
-rw-r--r--gnu/packages/java.scm650
-rw-r--r--gnu/packages/kde-frameworks.scm5
-rw-r--r--gnu/packages/kodi.scm27
-rw-r--r--gnu/packages/libcanberra.scm2
-rw-r--r--gnu/packages/libffi.scm21
-rw-r--r--gnu/packages/libftdi.scm5
-rw-r--r--gnu/packages/libreoffice.scm25
-rw-r--r--gnu/packages/linux.scm16
-rw-r--r--gnu/packages/lisp.scm50
-rw-r--r--gnu/packages/mail.scm23
-rw-r--r--gnu/packages/make-bootstrap.scm35
-rw-r--r--gnu/packages/maths.scm26
-rw-r--r--gnu/packages/openstack.scm343
-rw-r--r--gnu/packages/package-management.scm13
-rw-r--r--gnu/packages/password-utils.scm50
-rw-r--r--gnu/packages/patches/dblatex-remove-multirow.patch30
-rw-r--r--gnu/packages/patches/dovecot-CVE-2017-15132.patch36
-rw-r--r--gnu/packages/patches/guile-linux-syscalls.patch50
-rw-r--r--gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch53
-rw-r--r--gnu/packages/patches/python-mox3-python3.6-compat.patch43
-rw-r--r--gnu/packages/patches/python-parse-too-many-fields.patch52
-rw-r--r--gnu/packages/patches/wavpack-CVE-2018-6767.patch119
-rw-r--r--gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch26
-rw-r--r--gnu/packages/perl.scm56
-rw-r--r--gnu/packages/photo.scm60
-rw-r--r--gnu/packages/polkit.scm17
-rw-r--r--gnu/packages/pulseaudio.scm2
-rw-r--r--gnu/packages/python-web.scm8
-rw-r--r--gnu/packages/python.scm265
-rw-r--r--gnu/packages/samba.scm4
-rw-r--r--gnu/packages/ssh.scm8
-rw-r--r--gnu/packages/textutils.scm53
-rw-r--r--gnu/packages/time.scm10
-rw-r--r--gnu/packages/tls.scm14
-rw-r--r--gnu/packages/version-control.scm118
-rw-r--r--gnu/packages/video.scm62
-rw-r--r--gnu/packages/vpn.scm6
-rw-r--r--gnu/packages/web.scm100
-rw-r--r--gnu/packages/xdisorg.scm2
-rw-r--r--gnu/packages/xfce.scm4
-rw-r--r--gnu/packages/xml.scm12
-rw-r--r--gnu/packages/xorg.scm8
-rw-r--r--gnu/services/cgit.scm686
-rw-r--r--gnu/services/version-control.scm121
-rw-r--r--gnu/tests/version-control.scm3
-rw-r--r--guix/build-system/trivial.scm42
-rw-r--r--guix/build/download.scm10
-rw-r--r--guix/build/syscalls.scm48
-rw-r--r--guix/hash.scm3
-rw-r--r--guix/http-client.scm154
-rw-r--r--guix/import/cpan.scm6
-rw-r--r--guix/profiles.scm20
-rw-r--r--guix/scripts/package.scm16
-rwxr-xr-xguix/scripts/substitute.scm18
-rw-r--r--m4/guix.m417
-rw-r--r--po/guix/pt_BR.po1738
-rw-r--r--tests/guix-package.sh18
-rw-r--r--tests/hash.scm11
-rw-r--r--tests/packages.scm20
-rw-r--r--tests/profiles.scm7
97 files changed, 5374 insertions, 2019 deletions
diff --git a/README b/README
index d96a43bbef..243a6c058c 100644
--- a/README
+++ b/README
@@ -20,7 +20,7 @@ Guix is based on the [[https://nixos.org/nix/][Nix]] package manager.
 
 GNU Guix currently depends on the following packages:
 
-  - [[https://gnu.org/software/guile/][GNU Guile 2.2.x or 2.0.x]], version 2.0.9 or later
+  - [[https://gnu.org/software/guile/][GNU Guile 2.2.x or 2.0.x]], version 2.0.13 or later
   - [[https://gnupg.org/][GNU libgcrypt]]
   - [[https://www.gnu.org/software/make/][GNU Make]]
   - [[https://www.gnutls.org][GnuTLS]] compiled with guile support enabled.
diff --git a/config-daemon.ac b/config-daemon.ac
index 80d84cbdbc..d409ce0117 100644
--- a/config-daemon.ac
+++ b/config-daemon.ac
@@ -132,16 +132,11 @@ if test "x$guix_build_daemon" = "xyes"; then
   AC_DEFINE_UNQUOTED([GUIX_SUBSTITUTE_URLS], ["$guix_substitute_urls"],
     [Default list of substitute URLs used by 'guix-daemon'.])
 
-  dnl Check whether the 'offload' build hook can be built (uses
-  dnl 'restore-file-set', which requires unbuffered custom binary input
-  dnl ports from Guile >= 2.0.10.)
-  GUIX_CHECK_UNBUFFERED_CBIP
-
   dnl Check for Guile-SSH, which is required by 'guix offload'.
   GUIX_CHECK_GUILE_SSH
 
-  case "x$ac_cv_guix_cbips_support_setvbuf$guix_cv_have_recent_guile_ssh" in
-    xyesyes)
+  case "x$guix_cv_have_recent_guile_ssh" in
+    xyes)
       guix_build_daemon_offload="yes"
       AC_DEFINE([HAVE_DAEMON_OFFLOAD_HOOK], [1],
 	[Define if the daemon's 'offload' build hook is being built (requires Guile-SSH).])
diff --git a/configure.ac b/configure.ac
index 398846f64b..5872a84823 100644
--- a/configure.ac
+++ b/configure.ac
@@ -98,7 +98,7 @@ if test "x$GUILD" = "x"; then
 fi
 
 if test "x$GUILE_EFFECTIVE_VERSION" = "x2.0"; then
-  PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.9])
+  PKG_CHECK_MODULES([GUILE], [guile-2.0 >= 2.0.13])
 fi
 
 dnl Installation directories for .scm and .go files.
diff --git a/doc/guix.texi b/doc/guix.texi
index 691164502b..24db167618 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -45,7 +45,8 @@ Copyright @copyright{} 2017 George Clemmer@*
 Copyright @copyright{} 2017 Andy Wingo@*
 Copyright @copyright{} 2017, 2018 Arun Isaac@*
 Copyright @copyright{} 2017 nee@*
-Copyright @copyright{} 2018 Rutger Helling
+Copyright @copyright{} 2018 Rutger Helling@*
+Copyright @copyright{} 2018 Oleg Pykhalov
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -601,7 +602,7 @@ in the Guix source tree for additional details.
 GNU Guix depends on the following packages:
 
 @itemize
-@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.9 or
+@item @url{http://gnu.org/software/guile/, GNU Guile}, version 2.0.13 or
 later, including 2.2.x;
 @item @url{http://gnupg.org/, GNU libgcrypt};
 @item
@@ -18542,54 +18543,929 @@ By default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
 (service cgit-service-type)
 @end example
 
-@deftp {Data Type} cgit-configuration
-Data type representing the configuration of Cgit.
-This type has the following parameters:
+@c %start of fragment
 
-@table @asis
-@item @code{config-file} (default: @code{(cgit-configuration-file)})
-The configuration file to use for Cgit.  This can be set to a
-@dfn{cgit-configuration-file} record value, or any gexp
-(@pxref{G-Expressions}).
+Available @code{cgit-configuration} fields are:
 
-For example, to instead use a local file, the @code{local-file} function
-can be used:
+@deftypevr {@code{cgit-configuration} parameter} package package
+The CGIT package.
 
-@example
-(service cgit-service-type
-         (cgit-configuration
-           (config-file (local-file "./my-cgitrc.conf"))))
-@end example
+@end deftypevr
 
-@item @code{package} (default: @code{cgit})
-The Cgit package to use.
+@deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
+NGINX configuration.
 
-@end table
-@end deftp
+@end deftypevr
 
-@deftp {Data Type} cgit-configuration-file
-Data type representing the configuration options for Cgit.
-This type has the following parameters:
+@deftypevr {@code{cgit-configuration} parameter} string about-filter
+Specifies a command which will be invoked to format the content of about
+pages (both top-level and for each repository).
 
-@table @asis
-@item @code{css} (default: @code{"/share/cgit/cgit.css"})
-URL which specifies the css document to include in all Cgit pages.
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string agefile
+Specifies a path, relative to each repository path, which can be used to
+specify the date and time of the youngest commit in the repository.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string auth-filter
+Specifies a command that will be invoked for authenticating repository
+access.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string branch-sort
+Flag which, when set to @samp{age}, enables date ordering in the branch
+ref list, and when set @samp{name} enables ordering by branch name.
+
+Defaults to @samp{"name"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string cache-root
+Path used to store the cgit cache entries.
+
+Defaults to @samp{"/var/cache/cgit"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
+Number which specifies the time-to-live, in minutes, for the cached
+version of repository pages accessed with a fixed SHA1.
+
+Defaults to @samp{-1}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
+Number which specifies the time-to-live, in minutes, for the cached
+version of repository pages accessed without a fixed SHA1.
+
+Defaults to @samp{5}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
+Number which specifies the time-to-live, in minutes, for the cached
+version of the repository summary page.
+
+Defaults to @samp{5}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
+Number which specifies the time-to-live, in minutes, for the cached
+version of the repository index page.
+
+Defaults to @samp{5}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
+Number which specifies the time-to-live, in minutes, for the result of
+scanning a path for Git repositories.
+
+Defaults to @samp{15}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
+Number which specifies the time-to-live, in minutes, for the cached
+version of the repository about page.
+
+Defaults to @samp{15}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
+Number which specifies the time-to-live, in minutes, for the cached
+version of snapshots.
+
+Defaults to @samp{5}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer cache-size
+The maximum number of entries in the cgit cache.  When set to @samp{0},
+caching is disabled.
+
+Defaults to @samp{0}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
+Sort items in the repo list case sensitively.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} list clone-prefix
+List of common prefixes which, when combined with a repository URL,
+generates valid clone URLs for the repository.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} list clone-url
+List of @code{clone-url} templates.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string commit-filter
+Command which will be invoked to format commit messages.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string commit-sort
+Flag which, when set to @samp{date}, enables strict date ordering in the
+commit log, and when set to @samp{topo} enables strict topological
+ordering.
+
+Defaults to @samp{"git log"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string css
+URL which specifies the css document to include in all cgit pages.
+
+Defaults to @samp{"/share/cgit/cgit.css"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string email-filter
+Specifies a command which will be invoked to format names and email
+address of committers, authors, and taggers, as represented in various
+places throughout the cgit interface.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean embedded?
+Flag which, when set to @samp{#t}, will make cgit generate a HTML
+fragment suitable for embedding in other HTML pages.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
+Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
+commit history graph to the left of the commit messages in the
+repository log page.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
+Flag which, when set to @samp{#t}, allows all filter settings to be
+overridden in repository-specific cgitrc files.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
+Flag which, when set to @samp{#t}, allows users to follow a file in the
+log view.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
+If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
+clones.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
+Flag which, when set to @samp{#t}, will make cgit generate extra links
+"summary", "commit", "tree" for each repo in the repository index.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
+Flag which, when set to @samp{#t}, will make cgit display the owner of
+each repo in the repository index.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
+Flag which, when set to @samp{#t}, will make cgit print the number of
+modified files for each commit on the repository log page.
 
-@item @code{logo} (default: @code{"/share/cgit/cgit.png"})
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
+Flag which, when set to @samp{#t}, will make cgit print the number of
+added and removed lines for each commit on the repository log page.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
+Flag which, when set to @code{#t}, will make cgit display remote
+branches in the summary and refs views.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
+Flag which, when set to @code{1}, will make cgit use the subject of the
+parent commit as link text when generating links to parent commits in
+commit view.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
+Flag which, when set to @samp{#t}, will make cgit use the subject of the
+parent commit as link text when generating links to parent commits in
+commit view.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
+Flag which, when set to @samp{#t}, will make cgit generate linenumber
+links for plaintext blobs printed in the tree view.
+
+Defaults to @samp{#t}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
+Flag which, when set to @samp{#f}, will allow cgit to use Git config to
+set any repo specific settings.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string favicon
+URL used as link to a shortcut icon for cgit.
+
+Defaults to @samp{"/favicon.ico"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string footer
+The content of the file specified with this option will be included
+verbatim at the bottom of all pages (i.e.  it replaces the standard
+"generated by..." message).
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string head-include
+The content of the file specified with this option will be included
+verbatim in the HTML HEAD section on all pages.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string header
+The content of the file specified with this option will be included
+verbatim at the top of all pages.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string include
+Name of a configfile to include before the rest of the current config-
+file is parsed.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string index-header
+The content of the file specified with this option will be included
+verbatim above the repository index.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string index-info
+The content of the file specified with this option will be included
+verbatim below the heading on the repository index page.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean local-time?
+Flag which, if set to @samp{#t}, makes cgit print commit and tag times
+in the servers timezone.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string logo
 URL which specifies the source of an image which will be used as a logo
-on all Cgit pages.
+on all cgit pages.
 
-@item @code{virtual-root} (default: @code{"/"})
-URL which, if specified, will be used as root for all Cgit links.
+Defaults to @samp{"/share/cgit/cgit.png"}.
 
-@item @code{repository-directory} (default: @code{"/srv/git"})
-Name of the directory to scan for repositories.
+@end deftypevr
 
-@item @code{robots} (default: @code{(list "noindex" "nofollow")})
-Text used as content for the ``robots'' meta-tag.
+@deftypevr {@code{cgit-configuration} parameter} string logo-link
+URL loaded when clicking on the cgit logo image.
 
-@end table
-@end deftp
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string owner-filter
+Command which will be invoked to format the Owner column of the main
+page.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
+Number of items to display in atom feeds view.
+
+Defaults to @samp{10}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
+Number of entries to list per page in "log" view.
+
+Defaults to @samp{50}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer max-message-length
+Number of commit message characters to display in "log" view.
+
+Defaults to @samp{80}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
+Specifies the number of entries to list per page on the repository index
+page.
+
+Defaults to @samp{50}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
+Specifies the maximum number of repo description characters to display
+on the repository index page.
+
+Defaults to @samp{80}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
+Specifies the maximum size of a blob to display HTML for in KBytes.
+
+Defaults to @samp{0}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string max-stats
+Maximum statistics period.  Valid values are @samp{week},@samp{month},
+@samp{quarter} and @samp{year}.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
+Mimetype for the specified filename extension.
+
+Defaults to @samp{((gif "image/gif") (html "text/html") (jpg
+"image/jpeg") (jpeg "image/jpeg") (pdf "application/pdf") (png
+"image/png") (svg "image/svg+xml"))}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string mimetype-file
+Specifies the file to use for automatic mimetype lookup.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string module-link
+Text which will be used as the formatstring for a hyperlink when a
+submodule is printed in a directory listing.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean nocache?
+If set to the value @samp{#t} caching will be disabled.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
+If set to @samp{#t} showing full author email addresses will be
+disabled.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean noheader?
+Flag which, when set to @samp{#t}, will make cgit omit the standard
+header on all pages.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string readme
+Text which will be used as default value for @code{cgit-repo-readme}.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
+If set to @code{#t} and @code{repository-directory} is enabled, if any
+repositories are found with a suffix of @code{.git}, this suffix will be
+removed for the URL and name.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer renamelimit
+Maximum number of files to consider when detecting renames.
+
+Defaults to @samp{-1}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string repository-sort
+The way in which repositories in each section are sorted.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} robots-list robots
+Text used as content for the @code{robots} meta-tag.
+
+Defaults to @samp{("noindex" "nofollow")}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string root-desc
+Text printed below the heading on the repository index page.
+
+Defaults to @samp{"a fast webinterface for the git dscm"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string root-readme
+The content of the file specified with this option will be included
+verbatim below thef "about" link on the repository index page.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string root-title
+Text printed as heading on the repository index page.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
+If set to @samp{#t} and repository-directory is enabled,
+repository-directory will recurse into directories whose name starts
+with a period.  Otherwise, repository-directory will stay away from such
+directories, considered as "hidden".  Note that this does not apply to
+the ".git" directory in non-bare repos.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} list snapshots
+Text which specifies the default set of snapshot formats that cgit
+generates links for.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
+Name of the directory to scan for repositories (represents
+@code{scan-path}).
+
+Defaults to @samp{"/srv/git"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string section
+The name of the current repository section - all repositories defined
+after this option will inherit the current section name.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string section-sort
+Flag which, when set to @samp{1}, will sort the sections on the
+repository listing by name.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer section-from-path
+A number which, if defined prior to repository-directory, specifies how
+many path elements from each repo path to use as a default section name.
+
+Defaults to @samp{0}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
+If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
+default.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string source-filter
+Specifies a command which will be invoked to format plaintext blobs in
+the tree view.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer summary-branches
+Specifies the number of branches to display in the repository "summary"
+view.
+
+Defaults to @samp{10}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer summary-log
+Specifies the number of log entries to display in the repository
+"summary" view.
+
+Defaults to @samp{10}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} integer summary-tags
+Specifies the number of tags to display in the repository "summary"
+view.
+
+Defaults to @samp{10}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string strict-export
+Filename which, if specified, needs to be present within the repository
+for cgit to allow access to that repository.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} string virtual-root
+URL which, if specified, will be used as root for all cgit links.
+
+Defaults to @samp{"/"}.
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
+A list of @dfn{cgit-repo} records to use with config.
+
+Defaults to @samp{()}.
+
+Available @code{repository-cgit-configuration} fields are:
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
+A mask of snapshot formats for this repo that cgit generates links for,
+restricted by the global @code{snapshots} setting.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string source-filter
+Override the default @code{source-filter}.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
+The relative URL used to access the repository.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string about-filter
+Override the default @code{about-filter}.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
+Flag which, when set to @samp{age}, enables date ordering in the branch
+ref list, and when set to @samp{name} enables ordering by branch name.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
+A list of URLs which can be used to clone repo.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-filter
+Override the default @code{commit-filter}.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
+Flag which, when set to @samp{date}, enables strict date ordering in the
+commit log, and when set to @samp{topo} enables strict topological
+ordering.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
+The name of the default branch for this repository.  If no such branch
+exists in the repository, the first branch name (when sorted) is used as
+default instead.  By default branch pointed to by HEAD, or "master" if
+there is no suitable HEAD.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
+The value to show as repository description.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
+The value to show as repository homepage.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string email-filter
+Override the default @code{email-filter}.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-commit-graph?
+A flag which can be used to disable the global setting
+@code{enable-commit-graph?}.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-log-filecount?
+A flag which can be used to disable the global setting
+@code{enable-log-filecount?}.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-log-linecount?
+A flag which can be used to disable the global setting
+@code{enable-log-linecount?}.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-remote-branches?
+Flag which, when set to @code{#t}, will make cgit display remote
+branches in the summary and refs views.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-subject-links?
+A flag which can be used to override the global setting
+@code{enable-subject-links?}.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean enable-html-serving?
+A flag which can be used to override the global setting
+@code{enable-html-serving?}.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
+Flag which, when set to @code{#t}, hides the repository from the
+repository index.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
+Flag which, when set to @samp{#t}, ignores the repository.
+
+Defaults to @samp{#f}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo
+URL which specifies the source of an image which will be used as a logo
+on this repo’s pages.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
+URL loaded when clicking on the cgit logo image.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner-filter
+Override the default @code{owner-filter}.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
+Text which will be used as the formatstring for a hyperlink when a
+submodule is printed in a directory listing.  The arguments for the
+formatstring are the path and SHA1 of the submodule commit.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
+Text which will be used as the formatstring for a hyperlink when a
+submodule with the specified subdirectory path is printed in a directory
+listing.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
+Override the default maximum statistics period.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
+The value to show as repository name.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
+A value used to identify the owner of the repository.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
+An absolute path to the repository directory.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
+A path (relative to repo) which specifies a file to include verbatim as
+the "About" page for this repo.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
+The name of the current repository section - all repositories defined
+after this option will inherit the current section name.
+
+Defaults to @samp{""}.
+
+@end deftypevr
+
+@deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
+Extra options will be appended to cgitrc file.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@end deftypevr
+
+@deftypevr {@code{cgit-configuration} parameter} list extra-options
+Extra options will be appended to cgitrc file.
+
+Defaults to @samp{()}.
+
+@end deftypevr
+
+@c %end of fragment
+
+However, it could be that you just want to get a @code{cgitrc} up and
+running.  In that case, you can pass an @code{opaque-cgit-configuration}
+as a record to @code{cgit-service-type}.  As its name indicates, an
+opaque configuration does not have easy reflective capabilities.
+
+Available @code{opaque-cgit-configuration} fields are:
+
+@deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
+The cgit package.
+@end deftypevr
+
+@deftypevr {@code{opaque-cgit-configuration} parameter} string string
+The contents of the @code{cgitrc}, as a string.
+@end deftypevr
+
+For example, if your @code{cgitrc} is just the empty string, you
+could instantiate a cgit service like this:
+
+@example
+(service cgit-service-type
+         (opaque-cgit-configuration
+          (cgitrc "")))
+@end example
 
 @node Setuid Programs
 @subsection Setuid Programs
diff --git a/gnu/build/linux-modules.scm b/gnu/build/linux-modules.scm
index 5ca7bf8e38..115a17c64e 100644
--- a/gnu/build/linux-modules.scm
+++ b/gnu/build/linux-modules.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -180,10 +180,6 @@ success, false otherwise.  When RECURSIVE? is true, load its dependencies
 first (à la 'modprobe'.)  The actual files containing modules depended on are
 obtained by calling LOOKUP-MODULE with the module name.  Modules whose name
 appears in BLACK-LIST are not loaded."
-  (define (slurp module)
-    ;; TODO: Use 'finit_module' to reduce memory usage.
-    (call-with-input-file file get-bytevector-all))
-
   (define (black-listed? module)
     (let ((result (member module black-list)))
       (when result
@@ -200,16 +196,20 @@ appears in BLACK-LIST are not loaded."
   (and (not (black-listed? (file-name->module-name file)))
        (or (not recursive?)
            (load-dependencies file))
-       (begin
+       (let ((fd #f))
          (format (current-module-debugging-port)
                  "loading Linux module from '~a'...~%" file)
 
          (catch 'system-error
            (lambda ()
-             (load-linux-module (slurp file)))
+             (set! fd (open-fdes file O_RDONLY))
+             (load-linux-module/fd fd)
+             (close-fdes fd)
+             #t)
            (lambda args
              ;; If this module was already loaded and we're in modprobe style, ignore
              ;; the error.
+             (when fd (close-fdes fd))
              (or (and recursive? (= EEXIST (system-error-errno args)))
                  (apply throw args)))))))
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 8151f7c9b0..c3f28da6dd 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -4,7 +4,7 @@
 # Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 # Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
 # Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
-# Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net>
+# Copyright © 2016, 2017, 2018 Kei Kebreau <kkebreau@posteo.net>
 # Copyright © 2016, 2017 Rene Saavedra <rennes@openmailbox.org>
 # Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
 # Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -52,6 +52,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/acl.scm				\
   %D%/packages/admin.scm			\
   %D%/packages/adns.scm				\
+  %D%/packages/agda.scm				\
   %D%/packages/algebra.scm			\
   %D%/packages/aidc.scm				\
   %D%/packages/android.scm			\
@@ -453,6 +454,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/avahi.scm			\
   %D%/services/base.scm				\
   %D%/services/certbot.scm			\
+  %D%/services/cgit.scm			\
   %D%/services/configuration.scm		\
   %D%/services/cuirass.scm			\
   %D%/services/cups.scm				\
@@ -608,7 +610,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/cursynth-wave-rand.patch			\
   %D%/packages/patches/cvs-2017-12836.patch			\
   %D%/packages/patches/cyrus-sasl-CVE-2013-4122.patch		\
-  %D%/packages/patches/dblatex-remove-multirow.patch		\
   %D%/packages/patches/dbus-helper-search-path.patch		\
   %D%/packages/patches/deja-dup-use-ref-keyword-for-iter.patch	\
   %D%/packages/patches/dfu-programmer-fix-libusb.patch		\
@@ -617,7 +618,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/docbook-xsl-nonrecursive-string-subst.patch	\
   %D%/packages/patches/doc++-include-directives.patch		\
   %D%/packages/patches/doc++-segfault-fix.patch			\
-  %D%/packages/patches/dovecot-CVE-2017-15132.patch		\
   %D%/packages/patches/doxygen-test.patch			\
   %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
   %D%/packages/patches/eigen-arm-neon-fixes.patch		\
@@ -971,7 +971,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/perl-dbd-mysql-CVE-2017-10788.patch	\
   %D%/packages/patches/perl-deterministic-ordering.patch	\
   %D%/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \
-  %D%/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch \
   %D%/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch \
   %D%/packages/patches/perl-net-amazon-s3-moose-warning.patch	\
   %D%/packages/patches/perl-net-dns-resolver-programmable-fix.patch	\
@@ -1030,13 +1029,13 @@ dist_patch_DATA =						\
   %D%/packages/patches/python2-larch-coverage-4.0a6-compatibility.patch \
   %D%/packages/patches/python-networkx2-reproducible-build.patch	\
   %D%/packages/patches/python-nose-timer-drop-ordereddict.patch \
-  %D%/packages/patches/python-parse-too-many-fields.patch	\
   %D%/packages/patches/python-pillow-fix-failing-tests.patch	\
   %D%/packages/patches/python2-rdflib-drop-sparqlwrapper.patch	\
   %D%/packages/patches/python-statsmodels-fix-tests.patch	\
   %D%/packages/patches/python-scikit-learn-fix-test-non-determinism.patch	\
   %D%/packages/patches/python-configobj-setuptools.patch	\
   %D%/packages/patches/python-faker-fix-build-32bit.patch	\
+  %D%/packages/patches/python-mox3-python3.6-compat.patch	\
   %D%/packages/patches/python-paste-remove-website-test.patch	\
   %D%/packages/patches/python-paste-remove-timing-test.patch	\
   %D%/packages/patches/python-pygit2-disable-network-tests.patch	\
@@ -1142,6 +1141,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/vsearch-unbundle-cityhash.patch		\
   %D%/packages/patches/vte-CVE-2012-2738-pt1.patch			\
   %D%/packages/patches/vte-CVE-2012-2738-pt2.patch			\
+  %D%/packages/patches/wavpack-CVE-2018-6767.patch		\
   %D%/packages/patches/wavpack-CVE-2018-7253.patch		\
   %D%/packages/patches/wavpack-CVE-2018-7254.patch		\
   %D%/packages/patches/weechat-python.patch			\
@@ -1160,6 +1160,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/wpa-supplicant-fix-zeroed-keys.patch	\
   %D%/packages/patches/wpa-supplicant-fix-nonce-reuse.patch	\
   %D%/packages/patches/wpa-supplicant-krack-followups.patch	\
+  %D%/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch	\
   %D%/packages/patches/xboing-CVE-2004-0149.patch		\
   %D%/packages/patches/xcb-proto-python3-print.patch		\
   %D%/packages/patches/xcb-proto-python3-whitespace.patch	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index cf9524eb5f..80cf8c391c 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -2373,7 +2373,7 @@ make it a perfect utility on modern distros.")
 (define-public thermald
   (package
     (name "thermald")
-    (version "1.6")
+    (version "1.7.1")
     (source
      (origin
       (method url-fetch)
@@ -2381,7 +2381,7 @@ make it a perfect utility on modern distros.")
                           version ".tar.gz"))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256 (base32
-               "14klz9fnvi9jdlaqwrp61xa5nh051n8ykrs1fh1wxd7j66qf2fn6"))))
+               "0isgmav3z3nb5bsdya8m3haqhzj1lyfjx7i812cqfjrh2a9msin4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -2389,6 +2389,7 @@ make it a perfect utility on modern distros.")
                    'unpack 'autogen.sh-and-fix-paths
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let ((out (assoc-ref outputs "out")))
+                       ;; XXX this can probably be removed after version 1.7.1.
                        ;; upstartconfir is hardcoded to /etc/init and the build
                        ;; system tries to mkdir that.  We don't even need upstart
                        ;; files at all; this is a fast and kludgy workaround
@@ -2397,7 +2398,8 @@ make it a perfect utility on modern distros.")
                           (string-append "upstartconfdir = "
                                          out "/etc/init")))
                        ;; Now run autogen
-                       (zero? (system* "sh" "autogen.sh"))))))
+                       (invoke "sh" "autogen.sh")
+                       #t))))
        #:configure-flags
        (let ((out      (assoc-ref %outputs "out")))
          (list (string-append "--sysconfdir="
diff --git a/gnu/packages/agda.scm b/gnu/packages/agda.scm
new file mode 100644
index 0000000000..6aa230116c
--- /dev/null
+++ b/gnu/packages/agda.scm
@@ -0,0 +1,86 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Alex ter Weele <alex.ter.weele@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 agda)
+  #:use-module (gnu packages haskell)
+  #:use-module (gnu packages haskell-check)
+  #:use-module (gnu packages haskell-web)
+  #:use-module (guix build-system haskell)
+  #:use-module (guix build-system trivial)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
+
+(define-public agda
+  (package
+    (name "agda")
+    (version "2.5.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/Agda/Agda-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "0r80vw7vnvbgq47y50v050malv7zvv2p2kg6f47i04r0b2ix855a"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("cpphs" ,cpphs)
+       ("ghc-alex" ,ghc-alex)
+       ("ghc-async" ,ghc-async)
+       ("ghc-blaze-html" ,ghc-blaze-html)
+       ("ghc-boxes" ,ghc-boxes)
+       ("ghc-data-hash" ,ghc-data-hash)
+       ("ghc-edisoncore" ,ghc-edisoncore)
+       ("ghc-edit-distance" ,ghc-edit-distance)
+       ("ghc-equivalence" ,ghc-equivalence)
+       ("ghc-geniplate-mirror" ,ghc-geniplate-mirror)
+       ("ghc-gitrev" ,ghc-gitrev)
+       ("ghc-happy" ,ghc-happy)
+       ("ghc-hashable" ,ghc-hashable)
+       ("ghc-hashtables" ,ghc-hashtables)
+       ("ghc-ieee754" ,ghc-ieee754)
+       ("ghc-monadplus" ,ghc-monadplus)
+       ("ghc-mtl" ,ghc-mtl)
+       ("ghc-murmur-hash" ,ghc-murmur-hash)
+       ("ghc-uri-encode" ,ghc-uri-encode)
+       ("ghc-parallel" ,ghc-parallel)
+       ("ghc-regex-tdfa" ,ghc-regex-tdfa)
+       ("ghc-stm" ,ghc-stm)
+       ("ghc-strict" ,ghc-strict)
+       ("ghc-text" ,ghc-text)
+       ("ghc-unordered-containers" ,ghc-unordered-containers)
+       ("ghc-zlib" ,ghc-zlib)))
+    (home-page "http://wiki.portal.chalmers.se/agda/")
+    (synopsis
+     "Dependently typed functional programming language and proof assistant")
+    (description
+     "Agda is a dependently typed functional programming language: it has
+inductive families, which are similar to Haskell's GADTs, but they can be
+indexed by values and not just types.  It also has parameterised modules,
+mixfix operators, Unicode characters, and an interactive Emacs interface (the
+type checker can assist in the development of your code).  Agda is also a
+proof assistant: it is an interactive system for writing and checking proofs.
+Agda is based on intuitionistic type theory, a foundational system for
+constructive mathematics developed by the Swedish logician Per Martin-Löf.  It
+has many similarities with other proof assistants based on dependent types,
+such as Coq, Epigram and NuPRL.")
+    ;; Agda is distributed under the MIT license, and a couple of
+    ;; source files are BSD-3.  See LICENSE for details.
+    (license (list license:expat license:bsd-3))))
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index b1a15ed34d..1cf6441df0 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1030,7 +1030,7 @@ follower.")
 (define-public fluidsynth
   (package
     (name "fluidsynth")
-    (version "1.1.9")
+    (version "1.1.10")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1039,14 +1039,15 @@ follower.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0krvmb1idnf95l2ydzfcb08ayyx3n4m71hf9fgwv3srzaikvpf3q"))))
+                "04jlgq1d1hd8r9cnmkl3lgf1fgm7kgy4hh9nfddap41fm1wp121p"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f  ; no check phase
+     '(#:tests? #f                      ; no check target
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-libdir
            (lambda _
+             ;; Install libraries to /lib, not /lib64.
              (substitute* "CMakeLists.txt"
                (("LIB_SUFFIX \\$\\{_init_lib_suffix\\}")
                 "LIB_SUFFIX \"\""))
@@ -2377,7 +2378,8 @@ stretching and pitch scaling of audio.  This package contains the library.")
               (method url-fetch)
               (uri (string-append "http://www.wavpack.com/"
                                   name "-" version ".tar.bz2"))
-              (patches (search-patches "wavpack-CVE-2018-7253.patch"
+              (patches (search-patches "wavpack-CVE-2018-6767.patch"
+                                       "wavpack-CVE-2018-7253.patch"
                                        "wavpack-CVE-2018-7254.patch"))
               (sha256
                (base32
@@ -2536,7 +2538,7 @@ can play and record audio files.")
 (define-public soxr
   (package
     (name "soxr")
-    (version "0.1.2")
+    (version "0.1.3")
     (source
      (origin
        (method url-fetch)
@@ -2544,7 +2546,7 @@ can play and record audio files.")
         (string-append "mirror://sourceforge/soxr/soxr-" version
                        "-Source.tar.xz"))
        (sha256
-        (base32 "0xf2w3piwz9gfr1xqyrj4k685q5dy53kq3igv663i4f4y4sg9rjl"))))
+        (base32 "12aql6svkplxq5fjycar18863hcq84c5kx8g6f4rj0lcvigw24di"))))
     (build-system cmake-build-system)
     (arguments '(#:tests? #f))          ;no 'check' target
     (home-page "https://sourceforge.net/p/soxr/wiki/Home/")
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index 355e66f42a..846e318aa1 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mathieu Lirzin <mthl@openmailbox.org>
 ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2015, 2017 Mark H Weaver <mhw@netris.org>
@@ -315,6 +315,21 @@ intuitive format and then Automake works with Autoconf to produce a robust
 Makefile, simplifying the entire process for the developer.")
     (license gpl2+)))                      ; some files are under GPLv3+
 
+(define-public automake-1.16
+  ;; Make this the default on the next rebuild cycle.
+  (package
+    (inherit automake)
+    (version "1.16")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/automake/automake-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "12jvcmkcmd5p14b41w9f7ixd3sca97pymd6lqbkwnl8qn6bjv3zr"))
+              (patches
+               (search-patches "automake-skip-amhello-tests.patch"))))))
+
 (define-public libtool
   (package
     (name "libtool")
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index 48d4b08af6..2fafa2c4a6 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -547,7 +547,10 @@ detection, and lossless compression.")
        ("lz4" ,lz4)
        ("openssl" ,openssl)
        ("python-llfuse" ,python-llfuse)
-       ("python-msgpack" ,python-msgpack)
+       ;; The Python msgpack library changed its name so Borg requires this
+       ;; transitional package for now:
+       ;; <https://bugs.gnu.org/30662>
+       ("python-msgpack" ,python-msgpack-transitional)
        ("zstd" ,zstd)))
     (synopsis "Deduplicated, encrypted, authenticated and compressed backups")
     (description "Borg is a deduplicating backup program.  Optionally, it
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 598b584cb3..672064db12 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 ng0 <ng0@n0.is>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -360,14 +360,15 @@ capacity is user-selectable.")
          "0lwc0hn94m9r8fi07sjqz3fr618l6lnw3zsakxw7nlgnxbjsk7pi"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:configure-flags (list (string-append "XMLTO="
-                                              (assoc-ref %build-inputs "xmlto")
-                                              "/bin/xmlto"
-                                              " --searchpath "
-                                              (assoc-ref %build-inputs "docbook-xsl")
-                                              "/xml/xsl/docbook-xsl-1.79.1/htmlhelp:"
-                                              (assoc-ref %build-inputs "docbook-xml")
-                                              "/xml/dtd/docbook"))
+     `(#:configure-flags
+       (list (string-append "XMLTO="
+                            (assoc-ref %build-inputs "xmlto")
+                            "/bin/xmlto --searchpath "
+                            (assoc-ref %build-inputs "docbook-xsl")
+                            "/xml/xsl/docbook-xsl-" ,(package-version docbook-xsl)
+                            "/htmlhelp:"
+                            (assoc-ref %build-inputs "docbook-xml")
+                            "/xml/dtd/docbook"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'install 'wrap-program
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 8e1eb127b2..50b4afcaf0 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -834,146 +834,231 @@ subprocess and see the output as well as any file modifications.")
 (define-public python2-scripttest
   (package-with-python2 python-scripttest))
 
-(define-public python-testtools
+(define-public python-testtools-bootstrap
   (package
-    (name "python-testtools")
-    (version "1.4.0")
+    (name "python-testtools-bootstrap")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "testtools" version))
        (sha256
         (base32
-         "1vw8yljnd75d396hhw6s2hrf4cclzy845ifd5am0lxsl235z3i8c"))))
+         "0n8519lk8aaa91vymz842831181wf7fss98hyllhygi3z1nfq9sq"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-module-imports
-           (lambda _
-             (substitute* "setup.py"
-               (("'unittest2>=0.8.0',") ""))
-             (substitute* '("testtools/testcase.py"
-                            "testtools/testsuite.py"
-                            "testtools/run.py"
-                            "testtools/tests/test_run.py"
-                            "testtools/tests/test_testsuite.py"
-                            "testtools/tests/test_deferredruntest.py")
-               ;; unittest2 is a backport of Python2.7 features to Python 2.4.
-               (("import unittest2 as unittest") "import unittest")
-               (("import unittest2") "import unittest as unittest2")
-               (("from unittest2 import") "from unittest import"))
-             (substitute* "testtools/tests/test_testresult.py"
-               ;; NUL in source code is not allowed (raises ValueError).
-               (("\\x00\\x04") "\\x04"))
-             #t)))))
+    (arguments '(#:tests? #f))
     (propagated-inputs
-     `(("python-mimeparse" ,python-mimeparse)
-       ("python-extras" ,python-extras)))
+     `(("python-extras" ,python-extras)
+       ("python-fixtures" ,python-fixtures-bootstrap)
+       ("python-mimeparse" ,python-mimeparse)
+       ("python-pbr" ,python-pbr-minimal)
+       ("python-six" ,python-six)
+       ("python-traceback2" ,python-traceback2)
+       ("python-unittest2" ,python-unittest2)))
     (home-page "https://github.com/testing-cabal/testtools")
     (synopsis
      "Extensions to the Python standard library unit testing framework")
     (description
+     "This package is only for bootstrapping.  Do not use this.")
+    (license license:psfl)))
+
+(define-public python2-testtools-bootstrap
+  (package-with-python2 python-testtools-bootstrap))
+
+(define-public python-testtools
+  (package
+    (inherit python-testtools-bootstrap)
+    (name "python-testtools")
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "python" "-m" "testtools.run"
+                              "testtools.tests.test_suite"))))))
+    (propagated-inputs
+     `(("python-extras" ,python-extras)
+       ("python-fixtures" ,python-fixtures)
+       ("python-mimeparse" ,python-mimeparse)
+       ("python-pbr" ,python-pbr)
+       ("python-six" ,python-six)
+       ("python-traceback2" ,python-traceback2)
+       ("python-unittest2" ,python-unittest2)))
+    (native-inputs
+     `(("python-testscenarios" ,python-testscenarios-bootstrap)))
+    (description
      "Testtools extends the Python standard library unit testing framework to
 provide matchers, more debugging information, and cross-Python
-compatibility.")
-    (license license:psfl)))
+compatibility.")))
 
 (define-public python2-testtools
   (package-with-python2 python-testtools))
 
-(define-public python-testscenarios
+(define-public python-testscenarios-bootstrap
   (package
-    (name "python-testscenarios")
-    (version "0.4")
+    (name "python-testscenarios-bootstrap")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/t/testscenarios/testscenarios-"
-             version ".tar.gz"))
+       (uri (pypi-uri "testscenarios" version))
        (sha256
         (base32
-         "1671jvrvqlmbnc42j7pc5y6vc37q44aiwrq0zic652pxyy2fxvjg"))))
+         "1dm2aydqpv76vnsk1pw7k8n42hq58cfi4n1ixy7nyzpaj1mwnmy2"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "python" "-m" "testtools.run"
+                              "testscenarios.test_suite"))))))
     (propagated-inputs
-     `(("python-testtools" ,python-testtools)))
+     `(("python-pbr" ,python-pbr-minimal)
+       ("python-testtools" ,python-testtools-bootstrap)))
     (home-page "https://launchpad.net/testscenarios")
     (synopsis "Pyunit extension for dependency injection")
     (description
-     "Testscenarios provides clean dependency injection for Python unittest
-style tests.")
+     "This package is only for bootstrapping.  Don't use this.")
     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
 
+(define-public python2-testscenarios-bootstrap
+  (package-with-python2 python-testscenarios-bootstrap))
+
+(define-public python-testscenarios
+  (package
+    (inherit python-testscenarios-bootstrap)
+    (name "python-testscenarios")
+    (propagated-inputs
+     `(("python-pbr" ,python-pbr)
+       ("python-testtools" ,python-testtools)))
+    (description
+     "Testscenarios provides clean dependency injection for Python unittest
+style tests.")))
+
 (define-public python2-testscenarios
   (package-with-python2 python-testscenarios))
 
-(define-public python-testresources
+;; Testresources requires python-pbr at runtime, but pbr needs it for its
+;; own tests.  Hence this bootstrap variant.
+(define-public python-testresources-bootstrap
   (package
-    (name "python-testresources")
-    (version "0.2.7")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/t/testresources/testresources-"
-             version ".tar.gz"))
-       (sha256
-        (base32
-         "0cbj3plbllyz42c4b5xxgwaa7mml54lakslrn4kkhinxhdri22md"))))
+    (name "python-testresources-bootstrap")
+    (version "2.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "testresources" version))
+              (sha256
+               (base32
+                "05s4dsli9g17m1r3b1gvwicbbgq011hnpb2b9qnj27ja2n11k7gf"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #f))
+    (propagated-inputs
+     `(("python-pbr" ,python-pbr-minimal)))
     (home-page "https://launchpad.net/testresources")
     (synopsis
      "Pyunit extension for managing test resources")
     (description
-     "Testresources is an extension to Python's unittest to allow declarative
-use of resources by test cases.")
+     "This package is only here for bootstrapping purposes.  Use the regular
+testresources package instead.")
     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
 
+(define-public python2-testresources-bootstrap
+  (package-with-python2 python-testresources-bootstrap))
+
+(define-public python-testresources
+  (package
+    (inherit python-testresources-bootstrap)
+    (name "python-testresources")
+    (propagated-inputs
+     `(("python-pbr" ,python-pbr)))
+    (arguments '())
+    (native-inputs
+     `(("python-fixtures" ,python-fixtures)
+       ("python-testtols" ,python-testtools)))
+    (description
+     "Testresources is an extension to Python's unittest to allow declarative
+use of resources by test cases.")))
+
 (define-public python2-testresources
   (package-with-python2 python-testresources))
 
-(define-public python-subunit
+(define-public python-subunit-bootstrap
   (package
-    (name "python-subunit")
-    (version "0.0.21")
+    (name "python-subunit-bootstrap")
+    (version "1.2.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/p/python-subunit/python-subunit-"
-             version ".tar.gz"))
+       (uri (pypi-uri "python-subunit" version))
        (sha256
         (base32
-         "1nkw9wfbvizmpajbj3in8ns07g7lwkiv8hip14jjlwk3cacls6jv"))))
+         "1yii2gx3z6323as3iraj1yphj76dy7i3h6kj63pnc5y0hwjs5sgx"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-extras" ,python-extras)
-       ("python-mimeparse" ,python-mimeparse)))
+       ("python-testtools" ,python-testtools-bootstrap)))
     (native-inputs
-     `(("python-testscenarios" ,python-testscenarios)))
+     `(("python-fixtures" ,python-fixtures-bootstrap)
+       ("python-hypothesis" ,python-hypothesis)
+       ("python-testscenarios" ,python-testscenarios-bootstrap)))
     (home-page "http://launchpad.net/subunit")
     (synopsis "Python implementation of the subunit protocol")
     (description
-     "Python-subunit is a Python implementation of the subunit test streaming
-protocol.")
+     "This package is here for bootstrapping purposes only.  Use the regular
+python-subunit package instead.")
     (license (list license:bsd-3 license:asl2.0)))) ; at the user's option
 
+(define-public python2-subunit-bootstrap
+  (package-with-python2 python-subunit-bootstrap))
+
+(define-public python-subunit
+  (package
+    (inherit python-subunit-bootstrap)
+    (name "python-subunit")
+    (propagated-inputs
+     `(("python-extras" ,python-extras)
+       ("python-testtools" ,python-testtools)))
+    (native-inputs
+     `(("python-fixtures" ,python-fixtures)
+       ("python-hypothesis" ,python-hypothesis)
+       ("python-testscenarios" ,python-testscenarios)))
+    (description
+     "Python-subunit is a Python implementation of the subunit test streaming
+protocol.")))
+
 (define-public python2-subunit
   (package-with-python2 python-subunit))
 
+;; Fixtures requires python-pbr at runtime, but pbr uses fixtures for its
+;; own tests.  Hence this bootstrap variant.
+(define-public python-fixtures-bootstrap
+  (package
+    (name "python-fixtures-bootstrap")
+    (version "3.0.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "fixtures" version))
+              (sha256
+               (base32
+                "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     `(("python-pbr-minimal" ,python-pbr-minimal)
+       ("python-six" ,python-six)))
+    (home-page "https://launchpad.net/python-fixtures")
+    (synopsis "Python test fixture library")
+    (description
+     "This package is only used for bootstrapping.  Use the regular
+python-fixtures package instead.")
+    (license (list license:bsd-3 license:asl2.0)))) ; at user's option
+
+(define-public python2-fixtures-bootstrap
+  (package-with-python2 python-fixtures-bootstrap))
+
 (define-public python-fixtures
   (package
+    (inherit python-fixtures-bootstrap)
     (name "python-fixtures")
-    (version "1.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "fixtures" version))
-       (sha256
-        (base32
-         "0djxvdwm8s60dbfn7bhf40x6g818p3b3mlwijm1c3bqg7msn271y"))))
-    (build-system python-build-system)
     (arguments
      '(#:phases
        (modify-phases %standard-phases
@@ -982,25 +1067,23 @@ protocol.")
              (zero? (system* "python" "-m" "testtools.run"
                              "fixtures.test_suite")))))))
     (propagated-inputs
-     `(("python-six" ,python-six)))
+     ;; Fixtures uses pbr at runtime to check versions, etc.
+     `(("python-pbr" ,python-pbr)
+       ("python-six" ,python-six)))
     (native-inputs
      `(("python-mock" ,python-mock)
-       ("python-pbr-minimal" ,python-pbr-minimal)
-       ("python-testtools" ,python-testtools)))
-    (home-page "https://launchpad.net/python-fixtures")
-    (synopsis "Python test fixture library")
+       ("python-testtools" ,python-testtools-bootstrap)))
     (description
      "Fixtures provides a way to create reusable state, useful when writing
-Python tests.")
-    (license (list license:bsd-3 license:asl2.0)))) ; at user's option
+Python tests.")))
 
 (define-public python2-fixtures
   (package-with-python2 python-fixtures))
 
-(define-public python-testrepository
+(define-public python-testrepository-bootstrap
   (package
-    (name "python-testrepository")
-    (version "0.0.20")
+    (name "python-testrepository-bootstrap")
+     (version "0.0.20")
     (source
      (origin
        (method url-fetch)
@@ -1011,6 +1094,26 @@ Python tests.")
         (base32
          "1ssqb07c277010i6gzzkbdd46gd9mrj0bi0i8vn560n2k2y4j93m"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #f))
+    (propagated-inputs
+     `(("python-fixtures" ,python-fixtures-bootstrap)
+       ("python-subunit" ,python-subunit-bootstrap)
+       ("python-testtools" ,python-testtools-bootstrap)))
+    (native-inputs
+     `(("python-mimeparse" ,python-mimeparse)))
+    (home-page "https://launchpad.net/testrepository")
+    (synopsis "Database for Python test results")
+    (description
+     "Bootstrap package for python-testrepository.  Don't use this.")
+    (license (list license:bsd-3 license:asl2.0)))) ; at user's option
+
+(define-public python2-testrepository-bootstrap
+  (package-with-python2 python-testrepository-bootstrap))
+
+(define-public python-testrepository
+  (package
+    (inherit python-testrepository-bootstrap)
+    (name "python-testrepository")
     (arguments
      ;; FIXME: Many tests are failing.
      '(#:tests? #f))
@@ -1019,14 +1122,10 @@ Python tests.")
        ("python-subunit" ,python-subunit)
        ("python-testtools" ,python-testtools)))
     (native-inputs
-     `(("python-pbr-minimal" ,python-pbr-minimal) ;; same as for building fixture
-       ("python-mimeparse" ,python-mimeparse)))
-    (home-page "https://launchpad.net/testrepository")
-    (synopsis "Database for Python test results")
+     `(("python-mimeparse" ,python-mimeparse)))
     (description "Testrepository provides a database of test results which can
 be used as part of a developer's workflow to check things such as what tests
-have failed since the last commit or what tests are currently failing.")
-    (license (list license:bsd-3 license:asl2.0)))) ; at user's option
+have failed since the last commit or what tests are currently failing.")))
 
 (define-public python2-testrepository
   (package-with-python2 python-testrepository))
@@ -1629,18 +1728,20 @@ backported from Python 2.7 for Python 2.4+.")
 (define-public behave
   (package
     (name "behave")
-    (version "1.2.5")
+    (version "1.2.6")
     (source (origin
              (method url-fetch)
-             (uri (pypi-uri "behave" version ".tar.bz2"))
+             (uri (pypi-uri "behave" version))
              (sha256
               (base32
-               "1iypp6z46r19n4xmgx6m1lwmlpfjh8vapq8izigrqlaarvp2y64c"))))
+               "11hsz365qglvpp1m1w16239c3kiw15lw7adha49lqaakm8kj6rmr"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-mock" ,python-mock)
        ("python-nose" ,python-nose)
-       ("python-pyhamcrest" ,python-pyhamcrest)))
+       ("python-pathpy" ,python-pathpy)
+       ("python-pyhamcrest" ,python-pyhamcrest)
+       ("python-pytest" ,python-pytest)))
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-parse" ,python-parse)
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index b5cfa7f1ab..a559a4011d 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -187,8 +187,8 @@ their dependencies.")
       (license l:gpl3+))))
 
 (define-public cuirass
-  (let ((commit "4ab2f2c3f084ffd9d0f77134cc1af0f8cf0e13be")
-        (revision "12"))
+  (let ((commit "aa4c7784940581b5e271b9c7c4ac80b6ee1ee309")
+        (revision "13"))
     (package
       (name "cuirass")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
@@ -200,7 +200,7 @@ their dependencies.")
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "1r97z5lkzg6vx014rfmv1pp3x3bl1shb6wkcgnlncwqf56a9bzi1"))))
+                  "1827vgk47rcgm2x0cxzvg79ni6vazjzr8hr9pljlvbd9awzr7hxp"))))
       (build-system gnu-build-system)
       (arguments
        '(#:modules ((guix build utils)
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 7286e954c5..c38f40f618 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -66,6 +66,15 @@
 ;;; To avoid circular dependencies, this module should not be imported
 ;;; directly from anywhere.
 ;;;
+;;; Below, we frequently use "inherit" to create modified packages.  The
+;;; reason why we use "inherit" instead of "package/inherit" is because we do
+;;; not want these commencement packages to inherit grafts.  By definition,
+;;; these packages are not depended on at run time by any of the packages we
+;;; use.  Thus it does not make sense to inherit grafts.  Furthermore, those
+;;; grafts would often lead to extra overhead for users who would end up
+;;; downloading those "-boot0" packages just to build package replacements
+;;; that are in fact not going to be used.
+;;;
 ;;; Code:
 
 (define gnu-make-boot0
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 29b6ca1698..56984af6e2 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -2240,17 +2240,21 @@ SQLAlchemy Database Toolkit for Python.")
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
-    (version "0.5")
+    (version "0.7.4")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pypi.python.org/packages/source/p/"
-                           "pickleshare/pickleshare-" version ".tar.gz"))
+       (uri (pypi-uri "pickleshare" version))
        (sha256
-        (base32 "11ljr90j3p6qswdrbl7p4cjb2i93f6vn0vx9anzpshsx0d2mggn0"))))
+        (base32 "0yvk14dzxk7g6qpr7iw23vzqbsr0dh4ij4xynkhnzpfz4xr2bac4"))))
     (build-system python-build-system)
-    (propagated-inputs
-     `(("python-pathpy" ,python-pathpy)))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "pytest"))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (home-page "https://github.com/vivainio/pickleshare")
     (synopsis "Tiny key value database with concurrency support")
     (description
@@ -2261,10 +2265,15 @@ value in database is immediately visible to other processes accessing the same
 database.  Concurrency is possible because the values are stored in separate
 files.  Hence the “database” is a directory where all files are governed by
 PickleShare.")
+    (properties `((python2-variant . ,(delay python2-pickleshare))))
     (license license:expat)))
 
 (define-public python2-pickleshare
-  (package-with-python2 python-pickleshare))
+  (let ((pickleshare (package-with-python2
+                      (strip-python2-variant python-pickleshare))))
+    (package (inherit pickleshare)
+      (propagated-inputs `(("python2-pathlib2" ,python2-pathlib2)
+                           ,@(package-propagated-inputs pickleshare))))))
 
 (define-public python-apsw
   (package
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index 3864cc884b..0b447b5176 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -36,16 +36,19 @@
 (define-public python-django
   (package
     (name "python-django")
-    (version "1.10.8")
+    (version "1.11.10")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Django" version))
               (sha256
                (base32
-                "1fwqqh2zbcy9dy0lnvk338s11llnnfz2k56bf84w0wv56ayq7vyl"))))
+                "1ndc7axr7cz8jwhr4mz16fvwd0jcd6i81q2wi9nl172s71kkaf12"))))
     (build-system python-build-system)
     (arguments
-     '(#:phases
+     '(#:modules ((srfi srfi-1)
+                  (guix build python-build-system)
+                  (guix build utils))
+       #:phases
        (modify-phases %standard-phases
          (add-before 'check 'set-tzdir
            (lambda* (#:key inputs #:allow-other-keys)
@@ -56,9 +59,19 @@
                                     "/share/zoneinfo"))
              #t))
          (replace 'check
-           (lambda _
+           (lambda* (#:key inputs #:allow-other-keys)
              (setenv "PYTHONPATH"
                      (string-append ".:" (getenv "PYTHONPATH")))
+             (substitute* "tests/admin_scripts/tests.py"
+               (("python_path = \\[")
+                (string-append "python_path = ['"
+                               (find (lambda (entry)
+                                       (string-prefix?
+                                        (assoc-ref inputs "python-pytz")
+                                        entry))
+                                     (string-split (getenv "PYTHONPATH")
+                                                   #\:))
+                               "', ")))
              (zero? (system* "python" "tests/runtests.py")))))))
     ;; TODO: Install extras/django_bash_completion.
     (native-inputs
@@ -75,10 +88,11 @@
        ("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)))
+    (propagated-inputs
+     `(("python-pytz" ,python-pytz)))
     (home-page "http://www.djangoproject.com/")
     (synopsis "High-level Python Web framework")
     (description
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index ed1e60a7a3..d56dc49198 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -176,7 +177,7 @@ by no means limited to these applications.)  This package provides XML DTDs.")
 (define-public dblatex
   (package
     (name "dblatex")
-    (version "0.3.9")
+    (version "0.3.10")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/dblatex/dblatex/"
@@ -184,8 +185,7 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                                   version ".tar.bz2"))
               (sha256
                (base32
-                "0pdizc5rjywwzxa1qqhdmba5zr35pbmdwbysalsid7xw87w3kq06"))
-              (patches (search-patches "dblatex-remove-multirow.patch"))))
+                "1yicd861rqz78i2khl35j7nvc0ccv4jx4hzqrbhll17082vrdmkg"))))
     (build-system python-build-system)
     ;; TODO: Add xfig/transfig for fig2dev utility
     (inputs
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 81e6885f66..67bbb153fb 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -14,7 +14,7 @@
 ;;; Copyright © 2016, 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017 ng0 <ng0@infotropique.org>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2016, 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2016, 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
@@ -2990,14 +2990,14 @@ package provides a light and a dark variant.")
 (define-public emacs-ahungry-theme
   (package
     (name "emacs-ahungry-theme")
-    (version "1.8.0")
+    (version "1.10.0")
     (source
      (origin (method url-fetch)
              (uri (string-append "https://elpa.gnu.org/packages/ahungry-theme-"
                                  version ".tar"))
              (sha256
               (base32
-               "14dhnrlbjzrxk5ligf0z2im5bgnxpjqqzqcrmqg5355xrgpbpb7v"))))
+               "14q5yw56n82qph09bk7wmj5b1snhh9w0nk5s1l7yn9ldg71xq6pm"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/ahungry/color-theme-ahungry")
     (synopsis "Ahungry color theme for Emacs")
@@ -4492,14 +4492,14 @@ passive voice.")
     (name "emacs-org")
     ;; emacs-org-contrib inherits from this package.  Please update its sha256
     ;; checksum as well.
-    (version "20180103")
+    (version "20180226")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://orgmode.org/elpa/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "1hyw9sigcv9wn37y2icmhf1czf0s3dgvsmn36355l95zsw7hnvgj"))))
+                "0jqvry6gah1bwnryha4asynj13jyds3qim0xcy7s01rxk99m2ziy"))))
     (build-system emacs-build-system)
     (home-page "https://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
@@ -4519,7 +4519,7 @@ reproducible research.")
                                   (package-version emacs-org) ".tar"))
               (sha256
                (base32
-                "164i2asqh34p1g3iqsn7rziyxbi1ys8fwdmn7nsw5xph8qszv9zj"))))
+                "034wp70hcqnpidji5k1k80mj35iyyy098nbvc2sl7i2aca4m03zc"))))
     (arguments
      `(#:modules ((guix build emacs-build-system)
                   (guix build utils)
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index b2e33ea10b..6f09c8f353 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016, 2017 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -696,7 +697,7 @@ upload binaries to a Parallax Propeller micro-controller.")
 (define-public spin2cpp
   (package
     (name "spin2cpp")
-    (version "3.6.3")
+    (version "3.6.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/totalspectrum/spin2cpp/"
@@ -704,7 +705,7 @@ upload binaries to a Parallax Propeller micro-controller.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0v5vzh69bp1r2byrpz12rql1w24ff2v9msr31596zq6hd6n82lnh"))))
+                "05qak187sn0xg7vhrxw27b19xhmid1b8ab8kax3gv0faavzablfw"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;; The tests assume that a micro-controller is connected.
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index a04441a005..a5e8c79371 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -290,7 +290,7 @@ high quality, anti-aliased and subpixel rendered text on a display.")
    ; The exact license is more X11-style than BSD-style.
    (license (license:non-copyleft "file://COPYING"
                        "See COPYING in the distribution."))
-   (home-page "http://www.freedesktop.org/wiki/Software/fontconfig")))
+   (home-page "https://www.freedesktop.org/wiki/Software/fontconfig")))
 
 (define-public t1lib
   (package
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 63adb4d076..3c83e668b0 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -409,7 +409,7 @@ manager for the current system.")
      `(("shared-mime-info" ,shared-mime-info) ;for tests
        ("hicolor-icon-theme" ,hicolor-icon-theme) ;for tests
        ("python-nose" ,python-nose)))
-    (home-page "http://freedesktop.org/wiki/Software/pyxdg")
+    (home-page "https://www.freedesktop.org/wiki/Software/pyxdg")
     (synopsis "Implementations of freedesktop.org standards in Python")
     (description
      "PyXDG is a collection of implementations of freedesktop.org standards in
@@ -740,7 +740,7 @@ message bus.")
     (inputs
      `(("shadow" ,shadow)
        ("polkit" ,polkit)))
-    (home-page "http://www.freedesktop.org/wiki/Software/AccountsService/")
+    (home-page "https://www.freedesktop.org/wiki/Software/AccountsService/")
     (synopsis "D-Bus interface for user account query and manipulation")
     (description
      "The AccountService project provides a set of D-Bus interfaces for querying
@@ -840,7 +840,7 @@ which speak the Qualcomm MSM Interface (QMI) protocol.")
        ("libqmi" ,libqmi)
        ("polkit" ,polkit)))
     (synopsis "Mobile broadband modems manager")
-    (home-page "http://www.freedesktop.org/wiki/Software/ModemManager/")
+    (home-page "https://www.freedesktop.org/wiki/Software/ModemManager/")
     (description
      "ModemManager is a DBus-activated daemon which controls mobile
 broadband (2G/3G/4G) devices and connections.  Whether built-in devices, USB
@@ -882,7 +882,7 @@ modems and setup connections with them.")
        ("sqlite" ,sqlite)
        ("telepathy-glib" ,telepathy-glib)))
     (synopsis "Telepathy logger library")
-    (home-page "http://telepathy.freedesktop.org/")
+    (home-page "https://telepathy.freedesktop.org/")
     (description
      "Telepathy logger is a headless observer client that logs information
 received by the Telepathy framework.  It features pluggable backends to log
@@ -909,7 +909,7 @@ different sorts of messages in different formats.")
        ("python-dbus" ,python2-dbus)))
     (propagated-inputs
      `(("telepathy-glib" ,telepathy-glib)))
-    (home-page "http://telepathy.freedesktop.org/")
+    (home-page "https://telepathy.freedesktop.org/")
     (synopsis "Telepathy IRC connection manager")
     (description
      "Idle is an IRC connection manager for the Telepathy framework.  This
@@ -971,7 +971,7 @@ share connections to real-time communication services without conflicting.")
      `(("colord" ,colord)
        ("gtk+" ,gtk+)))
     (synopsis "GTK integration for libcolord")
-    (home-page "http://www.freedesktop.org/software/colord/")
+    (home-page "https://www.freedesktop.org/software/colord/")
     (description
      "This is a GTK+ convenience library for interacting with colord.  It is
 useful for both applications which need colour management and applications that
@@ -1068,7 +1068,7 @@ to applications simultaneously competing for fingerprint readers.")
      `(("pkg-config" ,pkg-config)))
     (inputs
      `(("glib" ,glib)))
-    (home-page "http://www.freedesktop.org/wiki/Software/desktop-file-utils/")
+    (home-page "https://www.freedesktop.org/wiki/Software/desktop-file-utils/")
     (synopsis "Utilities for working with desktop entries")
     (description
      "This package contains a few command line utilities for working with
diff --git a/gnu/packages/fribidi.scm b/gnu/packages/fribidi.scm
index 735fdab8e8..c8a91be4ef 100644
--- a/gnu/packages/fribidi.scm
+++ b/gnu/packages/fribidi.scm
@@ -26,15 +26,16 @@
 (define-public fribidi
   (package
     (name "fribidi")
-    (version "0.19.7")
+    (version "1.0.1")
     (source
       (origin
         (method url-fetch)
         (uri
-          (string-append "http://fribidi.org/download/" name "-" version
+         (string-append "https://github.com/fribidi/fribidi/releases"
+                        "/download/v" version "/fribidi-" version
                          ".tar.bz2"))
         (sha256
-          (base32 "13jsb5qadlhsaxkbrb49nqslmbh904vvzhsm5mm2ghmv29i2l8h8"))))
+          (base32 "1r3ll7apx4b8bhvdkwi71y06df9kvr4q3asvajswvdlh0pbq5cf1"))))
 
     (build-system gnu-build-system)
     (synopsis "Implementation of the Unicode bidirectional algorithm")
@@ -42,5 +43,5 @@
      "GNU FriBidi is an implementation of the Unicode Bidirectional
 Algorithm.  This algorithm is used to properly display text in left-to-right
 or right-to-left ordering as necessary.")
-    (home-page "http://fribidi.org/")
+    (home-page "https://github.com/fribidi/fribidi")
     (license lgpl2.1+)))
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index a70398f678..4ad6bcbf1b 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -173,7 +173,7 @@ as required.")
 (define-public libfilezilla
   (package
     (name "libfilezilla")
-    (version "0.12.0")
+    (version "0.12.1")
     (source
      (origin
        (method url-fetch)
@@ -181,7 +181,7 @@ as required.")
                            name "/" name "-" version ".tar.bz2"))
        (sha256
         (base32
-         "14zag4mhwp5mbir63j1k01jys973kmrivznmm78v6qa92l64jn0a"))))
+         "1gbqm42dd0m3fvqz3bk53889479dvn8679zp6ba8a9q2br2wkvv0"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("cppunit" ,cppunit)
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index ffc3522919..3025a68ec1 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Julian Graham <joolean@gmail.com>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10@gmail.com>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
@@ -547,7 +547,15 @@ archive on a per-file basis.")
                                  "love-" version "-linux-src.tar.gz"))
              (sha256
               (base32
-               "11x346pw0gqad8nmkmywzx4xpcbfc3dslbrdw5x94n1i25mk0sxj"))))
+               "11x346pw0gqad8nmkmywzx4xpcbfc3dslbrdw5x94n1i25mk0sxj"))
+             (modules '((guix build utils)))
+             (snippet
+              '(begin
+                 ;; Build with luajit 2.1.0-beta3.  Fixed in love 0.11.
+                 ;; See <https://bitbucket.org/rude/love/issues/1277>.
+                 (substitute* "src/libraries/luasocket/libluasocket/lua.h"
+                   (("> 501") ">= 501"))
+                 #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -1056,7 +1064,7 @@ games.")
 (define-public godot
   (package
     (name "godot")
-    (version "3.0")
+    (version "3.0.1")
     (source (origin
               (method url-fetch)
               (uri
@@ -1065,7 +1073,7 @@ games.")
               (file-name (string-append name "-" version))
               (sha256
                (base32
-                "1jhp269n1a7c663v2555444icbjwzscj4r8cq4rrrap7r7dr4hyc"))))
+                "0k8c12nzhl98i9il9s3awbwdamkrwxk0s47jr7n8a3z93rpszd2p"))))
     (build-system scons-build-system)
     (arguments
      `(#:scons ,scons-python2
@@ -1108,16 +1116,16 @@ games.")
                  (if (file-exists? "godot.x11.tools.64")
                      (rename-file "godot.x11.tools.64" "godot")
                      (rename-file "godot.x11.tools.32" "godot"))
-                 (install-file "godot" bin)))))
+                 (install-file "godot" bin))
+               #t)))
          (add-after 'install 'install-godot-desktop
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (desktop (string-append out "/share/applications"))
                     (icon-dir (string-append out "/share/pixmaps")))
-               (mkdir-p desktop)
-               (mkdir-p icon-dir)
                (rename-file "icon.png" "godot.png")
                (install-file "godot.png" icon-dir)
+               (mkdir-p desktop)
                (with-output-to-file
                    (string-append desktop "/godot.desktop")
                  (lambda _
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 3b1def55e1..c815cdd7ea 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -93,45 +94,27 @@ most common applications of GD involve website development.")
 (define-public perl-gd
   (package
     (name "perl-gd")
-    (version "2.56")
+    (version "2.68")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/L/LD/LDS/"
+       (uri (string-append "mirror://cpan/authors/id/R/RU/RURBAN/"
                            "GD-" version ".tar.gz"))
        (sha256
         (base32
-         "1ya8f9hpiax8j29vwaiwlvvgah0vkyvpzva28r8231nyk0f3s40z"))
-       (patches (search-patches
-                 "perl-gd-options-passthrough-and-fontconfig.patch"))))
+         "0p2ya641nl5cvcqgw829xgabh835qijfd6vq2ba12862946xx8va"))))
     (build-system perl-build-system)
-    (native-inputs
-     `(("perl-module-build" ,perl-module-build))) ;needs Module::Build >= 0.42
     (inputs
-     `(("gd" ,gd)
-       ("zlib" ,zlib)
-       ("png" ,libpng)
-       ("ft" ,freetype)
-       ("jpeg" ,libjpeg)
-       ("fontconfig" ,fontconfig)))
+     `(("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("gd" ,gd)
+       ("libpng" ,libpng)
+       ("libjpeg" ,libjpeg)
+       ("zlib" ,zlib)))
     (arguments
-     ;; We must use Build.PL for building because Makefile.PL fails to build
-     ;; the XS source.
-     `(#:module-build-flags (map (lambda (i)
-                                   (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
-       (modify-phases %standard-phases
-         (add-after 'configure 'clear-autogenerated-files
-           (lambda _
-             ;; This file is autogenerated by its .PLS script at build
-             ;; time, but file creation fails because that file already
-             ;; exists in the distribution with non-writable
-             ;; permissions, so delete it first.
-             (delete-file "bdf_scripts/bdf2gdfont.pl")
-             #t)))))
+     `(#:make-maker-flags
+       (list (string-append "--lib_jpeg_path="
+                            (assoc-ref %build-inputs "libjpeg")))))
     (home-page "http://search.cpan.org/dist/GD")
     (synopsis "Perl interface to the GD graphics library")
     (description "GD.pm is an autoloadable interface module for libgd, a
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 0561387931..6d2dd4c008 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -362,4 +362,4 @@ Ghostscript.  It currently includes the 35 standard PostScript fonts.")
 It provides a convenient easy to use API for handling and rendering
 Postscript documents.")
    (license license:gpl2+)
-   (home-page "http://www.freedesktop.org/wiki/Software/libspectre")))
+   (home-page "https://www.freedesktop.org/wiki/Software/libspectre")))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index d32472b85e..a64407a36f 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Petter <petter@mykolab.ch>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -124,7 +125,7 @@
        ;; '--autolaunch'.
        ("libx11" ,libx11)))
 
-    (home-page "http://dbus.freedesktop.org/")
+    (home-page "https://www.freedesktop.org/wiki/Software/dbus/")
     (synopsis "Message bus for inter-process communication (IPC)")
     (description
      "D-Bus is a message bus system, a simple way for applications to
@@ -461,7 +462,7 @@ translated.")
     (native-inputs
      `(("glib" ,glib "bin")
        ("pkg-config" ,pkg-config)))
-    (home-page "http://dbus.freedesktop.org/doc/dbus-glib/")
+    (home-page "https://dbus.freedesktop.org/doc/dbus-glib/")
     (synopsis "D-Bus GLib bindings")
     (description
      "GLib bindings for D-Bus.  The package is obsolete and superseded
@@ -622,6 +623,33 @@ useful for C++.")
        ("python-pycairo" ,python2-pycairo)
        ("gobject-introspection" ,gobject-introspection)))))
 
+(define-public perl-glib
+  (package
+    (name "perl-glib")
+    (version "1.326")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/X/XA/XAOC/Glib-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0prn9kkdpwjq9qmzqashbhk3pq4gvlrmvm3b10xf1dhc48406382"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-extutils-depends" ,perl-extutils-depends)
+       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+    (inputs
+     `(("glib" ,glib)))
+    (home-page "http://search.cpan.org/dist/Glib/")
+    (synopsis "Perl wrappers for the GLib utility and Object libraries")
+    (description "This module provides perl access to GLib and GLib's GObject
+libraries.  GLib is a portability and utility library; GObject provides a
+generic type system with inheritance and a powerful signal system.  Together
+these libraries are used as the foundation for many of the libraries that make
+up the Gnome environment, and are used in many unrelated projects.")
+    (license license:lgpl2.1+)))
+
 (define telepathy-glib
   (package
     (name "telepathy-glib")
@@ -662,7 +690,7 @@ useful for C++.")
      `(("dbus" ,dbus)
        ("dbus-glib" ,dbus-glib)
        ("glib" ,glib)))
-    (home-page "http://telepathy.freedesktop.org/wiki/")
+    (home-page "https://telepathy.freedesktop.org/wiki/")
     (synopsis "GLib Real-time communications framework over D-Bus")
     (description "Telepathy is a flexible, modular communications framework
 that enables real-time communication over D-Bus via pluggable protocol
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index c4fb3398f4..c876dbb6a9 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017 Rene Saavedra <rennes@openmailbox.org>
+;;; Copyright © 2016, 2017, 2018 Rene Saavedra <pacoon@protonmail.com>
 ;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net>
 ;;; Copyright © 2016, 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
@@ -947,7 +947,7 @@ guidelines.")
     (native-inputs
      `(("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
-    (home-page "http://freedesktop.org/wiki/Software/shared-mime-info")
+    (home-page "https://www.freedesktop.org/wiki/Software/shared-mime-info")
     (synopsis "Database of common MIME types")
     (description
      "The shared-mime-info package contains the core database of common types
@@ -972,7 +972,7 @@ database is translated at Transifex.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f)) ; no check target
-    (home-page "http://icon-theme.freedesktop.org/releases/")
+    (home-page "https://icon-theme.freedesktop.org/releases/")
     (synopsis
      "Freedesktop icon theme")
     (description
@@ -2324,7 +2324,7 @@ and objects.")
        ("libxkbfile"       ,libxkbfile)
        ("xkbcomp"          ,xkbcomp)
        ("xkeyboard-config" ,xkeyboard-config)))
-    (home-page "http://www.freedesktop.org/wiki/Software/LibXklavier/")
+    (home-page "https://www.freedesktop.org/wiki/Software/LibXklavier/")
     (synopsis "High-level API for X Keyboard Extension")
     (description
      "LibXklavier is a library providing high-level API for X Keyboard
@@ -2830,7 +2830,7 @@ keyboard shortcuts.")
        ("sqlite" ,sqlite)
        ("polkit" ,polkit)
        ("sane-backends" ,sane-backends)))
-    (home-page "http://www.freedesktop.org/software/colord/")
+    (home-page "https://www.freedesktop.org/software/colord/")
     (synopsis "Color management service")
     (description "Colord is a system service that makes it easy to manage,
 install and generate color profiles to accurately color manage input and
@@ -2966,7 +2966,7 @@ faster results and to avoid unnecessary server load.")
      `(("dbus-glib" ,dbus-glib)
        ("libgudev" ,libgudev)
        ("libusb" ,libusb)))
-    (home-page "http://upower.freedesktop.org/")
+    (home-page "https://upower.freedesktop.org/")
     (synopsis "System daemon for managing power devices")
     (description
      "UPower is an abstraction for enumerating power devices,
@@ -5729,7 +5729,7 @@ shared object databases, search tools and indexing.")
 (define-public nautilus
   (package
     (name "nautilus")
-    (version "3.24.2.1")
+    (version "3.26.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -5737,16 +5737,17 @@ shared object databases, search tools and indexing.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1cv138z04qx0fh1a2z2hvxy4p1x15vdv5gmkx5f3hb6c3w2rsz9m"))))
-    (build-system glib-or-gtk-build-system)
+                "1d0l4vgcjqj4671hb6s2a56baqlasbxn3wl6vfrpdsk5qq299jbr"))))
+    (build-system meson-build-system)
     (arguments
-     '(#:configure-flags
-       '("--disable-selinux") ; XXX: not packaged
+     '(#:glib-or-gtk? #t
        ;; XXX: FAIL: check-nautilus
        ;;   Settings schema 'org.gnome.nautilus.preferences' is not installed
        #:tests? #f))
     (native-inputs
-     `(("glib:bin" ,glib "bin") ; for glib-mkenums, etc.
+     `(("desktop-file-utils" ,desktop-file-utils) ; for update-desktop-database
+       ("glib:bin" ,glib "bin")         ; for glib-mkenums, etc.
+       ("gtk+:bin" ,gtk+ "bin")         ; for gtk-update-icon-cache
        ("gobject-introspection" ,gobject-introspection)
        ("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
@@ -5756,7 +5757,8 @@ shared object databases, search tools and indexing.")
        ("exempi" ,exempi)
        ("gnome-desktop" ,gnome-desktop)
        ("gnome-autoar" ,gnome-autoar)
-       ("nettle" ,nettle)    ; XXX required by libarchive.pc via gnome-autoar
+       ("libselinux" ,libselinux)
+       ("nettle" ,nettle) ; XXX required by libarchive.pc via gnome-autoar
        ("tracker" ,tracker)
        ;; XXX: gtk+ is required by libnautilus-extension.pc
        ;;
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index f11cc76d9c..e201ac8e4c 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -187,7 +187,11 @@
     (inputs
      `(("tzdata" ,tzdata)
        ("pcre" ,pcre)
-       ("gcc:lib" ,gcc "lib")))
+       ;; Building Go 1.10 with the Go 1.4 bootstrap, Thread Sanitizer from GCC
+       ;; 5 finds a data race during the the test suite of Go 1.10. With GCC 6,
+       ;; the race doesn't seem to be present:
+       ;; https://github.com/golang/go/issues/24046
+       ("gcc:lib" ,gcc-6 "lib")))
     (native-inputs
      `(("pkg-config" ,%pkg-config)
        ("which" ,which)
@@ -372,6 +376,119 @@ in the style of communicating sequential processes (@dfn{CSP}).")
        ,@(package-native-inputs go-1.4)))
     (supported-systems %supported-systems)))
 
+(define-public go-1.10
+  (package
+    (inherit go-1.9)
+    (name "go")
+    (version "1.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://storage.googleapis.com/golang/"
+                           name version ".src.tar.gz"))
+       (sha256
+        (base32
+         "093z1h0gmi458kv7smpx0ph6jm7ss9mzxa432kysbz85jhl4kppk"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments go-1.9)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'prebuild
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((gcclib (string-append (assoc-ref inputs "gcc:lib") "/lib"))
+                      (ld (string-append (assoc-ref inputs "libc") "/lib"))
+                      (loader (car (find-files ld "^ld-linux.+")))
+                      (net-base (assoc-ref inputs "net-base"))
+                      (tzdata-path
+                       (string-append (assoc-ref inputs "tzdata") "/share/zoneinfo"))
+                      (output (assoc-ref outputs "out")))
+
+                 ;; 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/cgo_unix_test.go"))
+
+                 (substitute* "os/os_test.go"
+                   (("/usr/bin") (getcwd))
+                   (("/bin/pwd") (which "pwd"))
+                   (("/bin/sh") (which "sh")))
+
+                 ;; Add libgcc to runpath
+                 (substitute* "cmd/link/internal/ld/lib.go"
+                   (("!rpath.set") "true"))
+                 (substitute* "cmd/go/internal/work/gccgo.go"
+                   (("cgoldflags := \\[\\]string\\{\\}")
+                    (string-append "cgoldflags := []string{"
+                                   "\"-rpath=" gcclib "\""
+                                   "}"))
+                   (("\"-lgcc_s\", ")
+                    (string-append
+                     "\"-Wl,-rpath=" gcclib "\", \"-lgcc_s\", ")))
+                 (substitute* "cmd/go/internal/work/gc.go"
+                   (("ldflags = setextld\\(ldflags, compiler\\)")
+                    (string-append
+                     "ldflags = setextld(ldflags, compiler)\n"
+                     "ldflags = append(ldflags, \"-r\")\n"
+                     "ldflags = append(ldflags, \"" gcclib "\")\n")))
+
+                 ;; Disable failing tests: these tests attempt to access
+                 ;; commands or network resources which are neither available
+                 ;; nor necessary for the build to succeed.
+                 (for-each
+                  (match-lambda
+                    ((file regex)
+                     (substitute* file
+                       ((regex all before test_name)
+                        (string-append before "Disabled" test_name)))))
+                  '(("net/net_test.go" "(.+)(TestShutdownUnix.+)")
+                    ("net/dial_test.go" "(.+)(TestDialTimeout.+)")
+                    ("os/os_test.go" "(.+)(TestHostname.+)")
+                    ("time/format_test.go" "(.+)(TestParseInSydney.+)")
+                    ("time/format_test.go" "(.+)(TestParseInLocation.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestEcho.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestCommandRelativeName.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestCatStdin.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestCatGoodAndBadFile.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestExitStatus.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestPipes.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestStdinClose.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestIgnorePipeErrorOnSuccess.+)")
+                    ("syscall/syscall_unix_test.go" "(.+)(TestPassFD\\(.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestExtraFiles/areturn.+)")
+                    ("cmd/go/go_test.go" "(.+)(TestCoverageWithCgo.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestOutputStderrCapture.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestExtraFiles.+)")
+                    ("os/exec/exec_test.go" "(.+)(TestExtraFilesRace.+)")
+                    ("net/lookup_test.go" "(.+)(TestLookupPort.+)")
+                    ("syscall/exec_linux_test.go"
+                     "(.+)(TestCloneNEWUSERAndRemapNoRootDisableSetgroups.+)")))
+
+                 ;; fix shebang for testar script
+                 ;; note the target script is generated at build time.
+                 (substitute* "../misc/cgo/testcarchive/carchive_test.go"
+                   (("#!/usr/bin/env") (string-append "#!" (which "env"))))
+
+                 (substitute* "net/lookup_unix.go"
+                   (("/etc/protocols") (string-append net-base "/etc/protocols")))
+                 (substitute* "net/port_unix.go"
+                   (("/etc/services") (string-append net-base "/etc/services")))
+                 (substitute* "time/zoneinfo_unix.go"
+                   (("/usr/share/zoneinfo/") tzdata-path))
+                 (substitute* (find-files "cmd" "\\.go")
+                   (("/lib(64)?/ld-linux.*\\.so\\.[0-9]") loader))
+                 #t)))
+           (replace 'set-bootstrap-variables
+             (lambda* (#:key outputs inputs #:allow-other-keys)
+               ;; Tell the build system where to find the bootstrap Go.
+               (let ((go  (assoc-ref inputs "go")))
+                 (setenv "GOROOT_BOOTSTRAP" go)
+                 (setenv "GOGC" "400")
+                 ;; Go 1.10 tries to write to $HOME in a test
+                 (setenv "HOME" "/tmp")
+                 #t)))))))))
+
 (define-public go go-1.9)
 
 (define-public go-github-com-alsm-ioprogress
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 5fad28952b..4ec5765bb1 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -87,7 +87,7 @@
                             "testsuite/exec_opcodes_sys.c")
                (("if \\(error\\) return 1;")
                 "if (error) return 77;")))))))
-    (home-page "http://gstreamer.freedesktop.org/modules/orc.html")
+    (home-page "https://gstreamer.freedesktop.org/modules/orc.html")
     (synopsis "Oil runtime compiler")
     (description
      "Orc is a just-in-time compiler implemented as a library and set of
@@ -405,7 +405,7 @@ distribution problems in some jurisdictions, e.g. due to patent threats.")
        ("ffmpeg" ,ffmpeg)
        ("orc" ,orc)
        ("zlib" ,zlib)))
-    (home-page "http://gstreamer.freedesktop.org/")
+    (home-page "https://gstreamer.freedesktop.org/")
     (synopsis "Plugins for the GStreamer multimedia library")
     (description
      "This GStreamer plugin supports a large number of audio and video
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index f045eae350..60f2013614 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -17,6 +17,7 @@
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,6 +41,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix build-system waf)
   #:use-module (gnu packages)
@@ -1237,6 +1239,95 @@ targeted at GTK 2.x, and can be used in conjunction with gnome-python to
 write GNOME applications.")
     (license license:lgpl2.1+)))
 
+(define-public perl-cairo
+  (package
+    (name "perl-cairo")
+    (version "1.106")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/X/XA/XAOC/Cairo-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1i25kks408c54k2zxskvg54l5k3qadzm8n72ffga9jy7ic0h6j76"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-extutils-depends" ,perl-extutils-depends)
+       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+    (inputs
+     `(("cairo" ,cairo)))
+    (home-page "http://search.cpan.org/dist/Cairo/")
+    (synopsis "Perl interface to the cairo 2d vector graphics library")
+    (description "Cairo provides Perl bindings for the vector graphics library
+cairo.  It supports multiple output targets, including PNG, PDF and SVG.  Cairo
+produces identical output on all those targets.")
+    (license license:lgpl2.1+)))
+
+(define-public perl-gtk2
+  (package
+    (name "perl-gtk2")
+    (version "1.24992")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/X/XA/XAOC/Gtk2-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1044rj3wbfmgaif2jb0k28m2aczli6ai2n5yvn6pr7zjyw16kvd2"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-extutils-depends" ,perl-extutils-depends)
+       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+    (inputs
+     `(("gtk+" ,gtk+-2)))
+    (propagated-inputs
+     `(("perl-pango" ,perl-pango)))
+    (home-page "http://search.cpan.org/dist/Gtk2/")
+    (synopsis "Perl interface to the 2.x series of the Gimp Toolkit library")
+    (description "Perl bindings to the 2.x series of the Gtk+ widget set.
+This module allows you to write graphical user interfaces in a Perlish and
+object-oriented way, freeing you from the casting and memory management in C,
+yet remaining very close in spirit to original API.")
+    (license license:lgpl2.1+)))
+
+(define-public perl-pango
+  (package
+    (name "perl-pango")
+    (version "1.227")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/X/XA/XAOC/Pango-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0wdcidnfnb6nm79fzfs39ivawj3x8m98a147fmcxgv1zvwia9c1l"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-extutils-depends" ,perl-extutils-depends)
+       ("perl-extutils-pkgconfig" ,perl-extutils-pkgconfig)))
+    (inputs
+     `(("pango" ,pango)))
+    (propagated-inputs
+     `(("perl-cairo" ,perl-cairo)
+       ("perl-glib" ,perl-glib)))
+    (home-page "http://search.cpan.org/dist/Pango/")
+    (synopsis "Layout and render international text")
+    (description "Pango is a library for laying out and rendering text, with an
+emphasis on internationalization.  Pango can be used anywhere that text layout
+is needed, but using Pango in conjunction with Cairo and/or Gtk2 provides a
+complete solution with high quality text handling and graphics rendering.
+
+Dynamically loaded modules handle text layout for particular combinations of
+script and font backend.  Pango provides a wide selection of modules, including
+modules for Hebrew, Arabic, Hangul, Thai, and a number of Indic scripts.
+Virtually all of the world's major scripts are supported.
+
+In addition to the low level layout rendering routines, Pango includes
+@code{Pango::Layout}, a high level driver for laying out entire blocks of text,
+and routines to assist in editing internationalized text.")
+    (license license:lgpl2.1+)))
+
 (define-public girara
   (package
     (name "girara")
diff --git a/gnu/packages/haskell-web.scm b/gnu/packages/haskell-web.scm
index a24ee4b7c0..f1b50b29bd 100644
--- a/gnu/packages/haskell-web.scm
+++ b/gnu/packages/haskell-web.scm
@@ -866,3 +866,26 @@ of a JSON value into a @code{Data.Aeson.Value}.")
     (description
      "HTTP multipart split out of the cgi package, for Haskell.")
     (license license:bsd-3)))
+
+(define-public ghc-uri-encode
+  (package
+    (name "ghc-uri-encode")
+    (version "1.5.0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://hackage.haskell.org/package/uri-encode/uri-encode-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "11miwb5vvnn17m92ykz1pzg9x6s8fbpz3mmsyqs2s4b3mn55haz8"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-text" ,ghc-text)
+       ("ghc-utf8-string" ,ghc-utf8-string)
+       ("ghc-network-uri" ,ghc-network-uri)))
+    (home-page "https://hackage.haskell.org/package/uri-encode")
+    (synopsis "Unicode aware uri-encoding")
+    (description "Unicode aware uri-encoding for Haskell.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index e62c405ab7..dbb9ebc808 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -5755,6 +5755,8 @@ representations of current time.")
        (sha256
         (base32 "0jkca97zyv23yyilp3jydcrzxqhyk27swhzh82llvban5zp8b21y"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:configure-flags (list "--allow-newer=QuickCheck")))
     (inputs
      `(("ghc-random" ,ghc-random)
        ("ghc-test-framework" ,ghc-test-framework)
@@ -7358,6 +7360,8 @@ Haskell, using gnuplot for rendering.")
        (sha256
         (base32 "1b6w9xznk42732vpd8ili60k12yq190xnajgga0iwbdpyg424lgg"))))
     (build-system haskell-build-system)
+    (arguments
+     `(#:configure-flags (list "--allow-newer=vector")))
     (inputs
      `(("ghc-hashable" ,ghc-hashable)
        ("ghc-primitive" ,ghc-primitive)
diff --git a/gnu/packages/image-viewers.scm b/gnu/packages/image-viewers.scm
index ff34da9f4a..a3887ee22d 100644
--- a/gnu/packages/image-viewers.scm
+++ b/gnu/packages/image-viewers.scm
@@ -59,7 +59,7 @@
 (define-public feh
   (package
     (name "feh")
-    (version "2.23.2")
+    (version "2.24")
     (home-page "https://feh.finalrewind.org/")
     (source (origin
               (method url-fetch)
@@ -67,7 +67,7 @@
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1hw9xhhmm404ircmd7aw9n51n23wzjxzmav272ldk1pxb2jk3hcn"))))
+                "148qbxkk5m7i3cxymnfwi7aikqjyfxr306dlqm9ndp6x932js5wq"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases (delete 'configure))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 93114d8e07..e3e3a3ccc7 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -7,9 +7,8 @@
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Amirouche Boubekki <amirouche@hypermove.net>
 ;;; Copyright © 2014, 2017 John Darrington <jmd@gnu.org>
-;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
@@ -633,7 +632,7 @@ compose, and analyze GIF images.")
 (define-public imlib2
   (package
     (name "imlib2")
-    (version "1.4.10")
+    (version "1.5.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -641,7 +640,7 @@ compose, and analyze GIF images.")
                     "/imlib2-" version ".tar.bz2"))
               (sha256
                (base32
-                "0wm2q2xlkbm71k7mw2jyzbxgzylrkcj5yh6nq58w5gybhp98qs9z"))))
+                "0kg28b5wp886hiy12v7abdybrvlymb7g3nvg0ysn2y8h883s5w8m"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkgconfig" ,pkg-config)))
@@ -1230,3 +1229,24 @@ medical image data, e.g. magnetic resonance image (MRI) and functional MRI
     (synopsis "Color picker")
     (description "Gpick is an advanced color picker and palette editing tool.")
     (license license:bsd-3)))
+
+(define-public libiptcdata
+  (package
+    (name "libiptcdata")
+    (version "1.0.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/" name "/" name "/"
+                                  version "/" name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "03pfvkmmx762iydq0q207x2028d275pbdysfsgpmrr0ywy63pxkr"))))
+    (build-system gnu-build-system)
+    (home-page "http://libiptcdata.sourceforge.net/")
+    (synopsis "IPTC metadata manipulation library")
+    (description "Libiptcdata is a C library for manipulating the International
+Press Telecommunications Council (IPTC) metadata stored within multimedia files
+such as images.  This metadata can include captions and keywords, often used by
+popular photo management applications.  The library provides routines for
+parsing, viewing, modifying, and saving this metadata.")
+    (license license:lgpl2.0+)))
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 97b3225a77..cc03f8fc2d 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -47,14 +47,14 @@
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.9-35")
+    (version "6.9.9-36")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "09c8298v7112y579mfp0bgsa3gsmcx2l5zbgfkwply4ihszprh0i"))))
+               "1nhv3cmg4npqibhchp3qgm9pld3n94xwwzv5hgn2s7lqz0zc0vd8"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 47220fc75c..0f8c04e8ba 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -2018,6 +2018,72 @@ debugging, etc.")
              (delete-file-recursively "lib") #t))
          (replace 'install (install-jars "bin/lib")))))))
 
+;; This is the last 3.x release of ECJ
+(define-public java-ecj-3
+  (package
+    (name "java-ecj")
+    (version "3.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://archive.eclipse.org/eclipse/"
+                                  "downloads/drops/R-" version
+                                  "-201301310800/ecjsrc-" version ".jar"))
+              (sha256
+               (base32
+                "01mdj14jw11g1jfnki4fi8229p0c6zzckd38zqy2w4m3cjcvsx04"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; none included
+       #:jdk ,icedtea-7 ; doesn't build with JDK8+
+       #:make-flags (list "-f" "src/build.xml")
+       #:build-target "build"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-manifest
+           (lambda _
+             ;; Record the main class to make ecj executable.
+             (with-atomic-file-replacement "src/META-INF/MANIFEST.MF"
+               (lambda (in out)
+                 (display "Manifest-Version: 1.0
+Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
+                          out)))))
+         (replace 'install (install-jars ".")))))
+    (home-page "https://eclipse.org")
+    (synopsis "Eclipse Java development tools core batch compiler")
+    (description "This package provides the Eclipse Java core batch compiler.")
+    (license license:epl1.0)))
+
+;; This is needed for java-cisd-args4j
+(define-public java-ecj-3.5
+  (package (inherit java-ecj-3)
+    (version "3.5.1")
+    (source (origin
+              (method url-fetch/zipbomb)
+              (uri (string-append "http://archive.eclipse.org/eclipse/"
+                                  "downloads/drops/R-" version
+                                  "-200909170800/ecjsrc-" version ".zip"))
+              (sha256
+               (base32
+                "1vnl2mavisc567bip736xzsvvbjif5279wc4a7pbdik5wlir8qr7"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; none included
+       #:jdk ,icedtea-7 ; doesn't build with JDK8+
+       #:build-target "build"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-manifest
+           (lambda _
+             ;; Record the main class to make ecj executable.
+             (with-atomic-file-replacement "META-INF/MANIFEST.MF"
+               (lambda (in out)
+                 (dump-port in out)
+                 (display "Main-Class: org.eclipse.jdt.internal.compiler.batch.Main\n"
+                          out)))))
+         (replace 'install (install-jars ".")))))
+    (native-inputs
+     `(("unzip" ,unzip)))))
+
 (define-public java-classpathx-servletapi
   (package
     (name "java-classpathx-servletapi")
@@ -2483,7 +2549,7 @@ mechanism of Java.  It is especially useful for dynamic loading of application
 components.")
     (license license:asl2.0)))
 
-(define-public java-plexus-container-default-bootstrap
+(define java-plexus-container-default-bootstrap
   (package
     (name "java-plexus-container-default-bootstrap")
     (version "1.7.1")
@@ -2660,6 +2726,418 @@ archives (jar).")
      `(("archiver" ,java-plexus-archiver)
        ("hamcrest" ,java-hamcrest-core)))))
 
+(define-public java-plexus-component-annotations
+  (package
+    (inherit java-plexus-container-default)
+    (name "java-plexus-component-annotations")
+    (arguments
+     `(#:jar-name "plexus-component-annotations.jar"
+       #:source-dir "plexus-component-annotations/src/main/java"
+       #:tests? #f)); no tests
+    (inputs '())
+    (native-inputs '())
+    (synopsis "Plexus descriptors generator")
+    (description "This package is a Maven plugin to generate Plexus descriptors
+from source tags and class annotations.")))
+
+(define-public java-plexus-cipher
+  (package
+    (name "java-plexus-cipher")
+    (version "1.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/plexus-cipher"
+                                  "/archive/plexus-cipher-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1j3r8xzlxlk340snkjp6lk2ilkxlkn8qavsfiq01f43xmvv8ymk3"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-cipher.jar"
+       #:source-dir "src/main/java"
+       #:jdk ,icedtea-8
+       #:tests? #f; FIXME: requires sisu-inject-bean
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             (mkdir-p "build/classes/META-INF/sisu")
+             (with-output-to-file "build/classes/META-INF/sisu/javax.inject.Named"
+               (lambda _
+                 (display "org.sonatype.plexus.components.cipher.DefaultPlexusCipher\n")))
+             #t)))))
+    (inputs
+     `(("java-cdi-api" ,java-cdi-api)
+       ("java-javax-inject" ,java-javax-inject)))
+    (home-page "https://github.com/sonatype/plexus-cipher")
+    (synopsis "Encryption/decryption Component")
+    (description "Plexus-cipher contains a component to deal with encryption
+and decryption.")
+    (license license:asl2.0)))
+
+(define-public java-plexus-compiler-api
+  (package
+    (name "java-plexus-compiler-api")
+    (version "2.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/plexus-compiler"
+                                  "/archive/plexus-compiler-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0g3x26pymcdnfnwv2a1i57pd5s26f5zqfi1rdy98z1bn01klx25k"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-compiler-api.jar"
+       #:source-dir "plexus-compiler-api/src/main/java"
+       #:jdk ,icedtea-8
+       #:test-dir "plexus-compiler-api/src/test"))
+    (inputs
+     `(("java-plexus-container-default" ,java-plexus-container-default)
+       ("java-plexus-util" ,java-plexus-utils)))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "https://github.com/codehaus-plexus/plexus-compiler")
+    (synopsis "Plexus Compilers component's API to manipulate compilers")
+    (description "This package contains the API used by components to manipulate
+compilers.")
+    (license (list license:asl2.0
+                   license:expat))))
+
+(define-public java-plexus-compiler-javac
+  (package
+    (inherit java-plexus-compiler-api)
+    (name "java-plexus-compiler-javac")
+    (arguments
+     `(#:jar-name "plexus-compiler-javac.jar"
+       #:source-dir "plexus-compilers/plexus-compiler-javac/src/main/java"
+       #:jdk ,icedtea-8
+       #:tests? #f; depends on compiler-test -> maven-core -> ... -> this package.
+       #:test-dir "plexus-compilers/plexus-compiler-javac/src/test"))
+    (inputs
+     `(("java-plexus-compiler-api" ,java-plexus-compiler-api)
+       ("java-plexus-utils" ,java-plexus-utils)
+       ("java-plexus-container-default" ,java-plexus-container-default)))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (synopsis "Javac Compiler support for Plexus Compiler component")
+    (description "This package contains the Javac Compiler support for Plexus
+Compiler component.")))
+
+(define-public java-plexus-sec-dispatcher
+  (package
+    (name "java-plexus-sec-dispatcher")
+    (version "1.4") ;; Newest release listed at the Maven Central Repository.
+    (source (origin
+              ;; This project doesn't tag releases or publish tarballs, so we take
+              ;; the "prepare release plexus-sec-dispatcher-1.4" git commit.
+              (method url-fetch)
+              (uri (string-append "https://github.com/sonatype/plexus-sec-dispatcher/"
+                                  "archive/7db8f88048.tar.gz"))
+              (sha256
+               (base32
+                "1smfrk4n7xbrsxpxcp2j4i0j8q86j73w0w6xg7qz83dp6dagdjgp"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (arguments
+     `(#:jar-name "plexus-sec-dispatcher.jar"
+       #:source-dir "src/main/java"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate-models
+           (lambda* (#:key inputs #:allow-other-keys)
+             (define (modello-single-mode file version mode)
+               (zero? (system* "java"
+                               "org.codehaus.modello.ModelloCli"
+                               file mode "src/main/java" version
+                               "false" "true")))
+             (let ((file "src/main/mdo/settings-security.mdo"))
+               (and
+               (modello-single-mode file "1.0.0" "java")
+               (modello-single-mode file "1.0.0" "xpp3-reader")
+               (modello-single-mode file "1.0.0" "xpp3-writer")))))
+         (add-before 'build 'generate-components.xml
+           (lambda _
+             (mkdir-p "build/classes/META-INF/plexus")
+             (with-output-to-file "build/classes/META-INF/plexus/components.xml"
+               (lambda _
+                 (display
+                   "<component-set>\n
+  <components>\n
+    <component>\n
+      <role>org.sonatype.plexus.components.sec.dispatcher.SecDispatcher</role>\n
+      <role-hint>default</role-hint>\n
+      <implementation>org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher</implementation>\n
+      <description></description>\n
+      <requirements>\n
+        <requirement>\n
+          <role>org.sonatype.plexus.components.cipher.PlexusCipher</role>\n
+          <field-name>_cipher</field-name>\n
+        </requirement>\n
+        <requirement>\n
+          <role>org.sonatype.plexus.components.sec.dispatcher.PasswordDecryptor</role>\n
+          <field-name>_decryptors</field-name>\n
+        </requirement>\n
+      </requirements>\n
+      <configuration>\n
+        <_configuration-file>~/.settings-security.xml</_configuration-file>\n
+      </configuration>\n
+    </component>\n
+  </components>\n
+</component-set>\n")))))
+         (add-before 'check 'fix-paths
+           (lambda _
+             (copy-recursively "src/test/resources" "target"))))))
+    (inputs
+     `(("java-plexus-cipher" ,java-plexus-cipher)))
+    (native-inputs
+     `(("java-modello-core" ,java-modello-core)
+       ;; for modello:
+       ("java-plexus-container-default" ,java-plexus-container-default)
+       ("java-plexus-classworlds" ,java-plexus-classworlds)
+       ("java-plexus-utils" ,java-plexus-utils)
+       ("java-guava" ,java-guava)
+       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
+       ("java-sisu-build-api" ,java-sisu-build-api)
+       ;; modello plugins:
+       ("java-modellop-plugins-java" ,java-modello-plugins-java)
+       ("java-modellop-plugins-xml" ,java-modello-plugins-xml)
+       ("java-modellop-plugins-xpp3" ,java-modello-plugins-xpp3)
+       ;; for tests
+       ("java-junit" ,java-junit)))
+    (build-system ant-build-system)
+    (home-page "https://github.com/sonatype/plexus-sec-dispatcher")
+    (synopsis "Plexus Security Dispatcher Component")
+    (description "This package is the Plexus Security Dispatcher Component.
+This component decrypts a string passed to it.")
+    (license license:asl2.0)))
+
+(define-public java-sisu-build-api
+  (package
+    (name "java-sisu-build-api")
+    (version "0.0.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/sonatype/sisu-build-api/"
+                                  "archive/plexus-build-api-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1c3rrpma3x634xp2rm2p5iskfhzdyc7qfbhjzr70agrl1jwghgy2"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "sisu-build-api.jar"
+       #:source-dir "src/main/java"
+       #:jdk ,icedtea-8
+       #:tests? #f; FIXME: how to run the tests?
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (copy-recursively "src/main/resources" "build/classes")
+             (substitute* (find-files "build/classes")
+               (("\\$\\{project.version\\}") ,version))
+             #t))
+         (add-before 'build 'generate-plexus-compontent
+           (lambda _
+             (mkdir-p "build/classes/META-INF/plexus")
+             ;; This file is required for plexus to inject this package.
+             ;; FIXME: how is it generated?
+             (with-output-to-file "build/classes/META-INF/plexus/components.xml"
+               (lambda _
+                 (display
+                   "<component-set>\n
+  <components>\n
+    <component>\n
+      <role>org.sonatype.plexus.build.incremental.BuildContext</role>\n
+      <role-hint>default</role-hint>\n
+      <implementation>org.sonatype.plexus.build.incremental.DefaultBuildContext</implementation>\n
+      <description>Filesystem based non-incremental build context implementation\n
+which behaves as if all files were just created.</description>\n
+    </component>\n
+  </components>\n
+</component-set>\n")))
+             #t)))))
+    (inputs
+     `(("java-plexus-utils" ,java-plexus-utils)
+       ("java-plexus-container-default" ,java-plexus-container-default)))
+    (home-page "https://github.com/sonatype/sisu-build-api/")
+    (synopsis "Base build API for maven")
+    (description "This package contains the base build API for maven and
+a default implementation of it.  This API is about scanning files in a
+project and determining what files need to be rebuilt.")
+    (license license:asl2.0)))
+
+(define-public java-modello-core
+  (package
+    (name "java-modello-core")
+    (version "1.9.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/modello"
+                                  "/archive/modello-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0l2pvns8pmlrmjm3iknp7gpg3654y1m8qhy55b19sdwdchdcyxfh"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "modello-core.jar"
+       #:source-dir "modello-core/src/main/java"
+       #:test-dir "modello-core/src/test"
+       #:main-class "org.codehaus.modello.ModelloCli"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes/META-INF/plexus")
+             (copy-file "modello-core/src/main/resources/META-INF/plexus/components.xml"
+                        "build/classes/META-INF/plexus/components.xml")
+             #t))
+         (add-before 'check 'fix-tests
+           (lambda _
+             (with-directory-excursion "modello-core/src/test/java/org/codehaus"
+               (substitute* '("modello/core/DefaultModelloCoreTest.java"
+                              "modello/core/io/ModelReaderTest.java")
+                 (("src/test") "modello-core/src/test")))
+             #t)))))
+    (inputs
+     `(("java-plexus-utils" ,java-plexus-utils)
+       ("java-plexus-container-default" ,java-plexus-container-default)
+       ("java-sisu-build-api" ,java-sisu-build-api)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-plexus-classworlds" ,java-plexus-classworlds)
+       ("java-geronimo-xbean-reflect" ,java-geronimo-xbean-reflect)
+       ("java-guava" ,java-guava)))
+    (home-page "http://codehaus-plexus.github.io/modello/")
+    (synopsis "Framework for code generation from a simple model")
+    (description "Modello is a framework for code generation from a simple model.
+
+Modello generates code from a simple model format: based on a plugin
+architecture, various types of code and descriptors can be generated from the
+single model, including Java POJOs, XML/JSON/YAML marshallers/unmarshallers,
+XSD and documentation.")
+    (license (list
+               license:expat
+               ;; Although this package uses only files licensed under expat,
+               ;; other parts of the source are licensed under different
+               ;; licenses.  We include them to be inherited by other packages.
+               license:asl2.0
+               ;; Some files in modello-plugin-java are licensed under a
+               ;; 5-clause BSD license.
+               (license:non-copyleft
+                 (string-append "file:///modello-plugins/modello-plugin-java/"
+                                "src/main/java/org/codehaus/modello/plugin/"
+                                "java/javasource/JNaming.java"))))))
+
+(define-public java-modello-plugins-java
+  (package
+    (inherit java-modello-core)
+    (name "java-modello-plugins-java")
+    (arguments
+     `(#:jar-name "modello-plugins-java.jar"
+       #:source-dir "modello-plugins/modello-plugin-java/src/main/java"
+       #:test-dir "modello-plugins/modello-plugin-java/src/test"
+       #:jdk ,icedtea-8
+       #:tests? #f; requires maven-model, which depends on this package
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes")
+             (copy-recursively "modello-plugins/modello-plugin-java/src/main/resources"
+                               "build/classes")
+             #t)))))
+    (inputs
+     `(("java-modello-core" ,java-modello-core)
+       ,@(package-inputs java-modello-core)))
+    (synopsis "Modello Java Plugin")
+    (description "Modello Java Plugin generates Java objects for the model.")))
+
+(define-public java-modello-plugins-xml
+  (package
+    (inherit java-modello-core)
+    (name "java-modello-plugins-xml")
+    (arguments
+     `(#:jar-name "modello-plugins-xml.jar"
+       #:source-dir "modello-plugins/modello-plugin-xml/src/main/java"
+       #:test-dir "modello-plugins/modello-plugin-xml/src/test"
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes")
+             (copy-recursively
+               "modello-plugins/modello-plugin-xml/src/main/resources"
+               "build/classes")
+             #t))
+         (add-before 'check 'fix-paths
+           (lambda _
+             (with-directory-excursion "modello-plugins/modello-plugin-xml/src/test"
+               (substitute*
+                 "java/org/codehaus/modello/plugins/xml/XmlModelloPluginTest.java"
+                 (("src/test") "modello-plugins/modello-plugin-xml/src/test"))))))))
+    (inputs
+     `(("java-modello-core" ,java-modello-core)
+       ("java-modello-plugins-java" ,java-modello-plugins-java)
+       ,@(package-inputs java-modello-core)))
+    (synopsis "Modello XML Plugin")
+    (description "Modello XML Plugin contains shared code for every plugins
+working on XML representation of the model.")))
+
+(define-public java-modello-test
+  (package
+    (inherit java-modello-core)
+    (name "java-modello-test")
+    (arguments
+     `(#:jar-name "modello-test.jar"
+       #:source-dir "modello-test/src/main/java"
+       #:tests? #f; no tests
+       #:jdk ,icedtea-8))
+    (inputs
+     `(("java-plexus-utils" ,java-plexus-utils)
+       ("java-plexus-compiler-api" ,java-plexus-compiler-api)
+       ("java-plexus-compiler-javac" ,java-plexus-compiler-javac)
+       ("java-plexus-container-default" ,java-plexus-container-default)))
+    (synopsis "Modello test package")
+    (description "The modello test package contains the basis to create
+Modello generator unit-tests, including sample models and xml files to test
+every feature for every plugin.")))
+
+(define-public java-modello-plugins-xpp3
+  (package
+    (inherit java-modello-core)
+    (name "java-modello-plugins-xpp3")
+    (arguments
+     `(#:jar-name "modello-plugins-xpp3.jar"
+       #:source-dir "modello-plugins/modello-plugin-xpp3/src/main/java"
+       #:test-dir "modello-plugins/modello-plugin-xpp3/src/test"
+       ;; One of the test dependencies is maven-model which depends on this package.
+       #:tests? #f
+       #:jdk ,icedtea-8
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'copy-resources
+           (lambda _
+             (mkdir-p "build/classes")
+             (copy-recursively "modello-plugins/modello-plugin-xpp3/src/main/resources"
+                               "build/classes")
+             #t)))))
+    (inputs
+     `(("java-modello-core" ,java-modello-core)
+       ("java-modello-plugins-java" ,java-modello-plugins-java)
+       ("java-modello-plugins-xml" ,java-modello-plugins-xml)
+       ,@(package-inputs java-modello-core)))
+    (native-inputs
+     `(("java-xmlunit" ,java-xmlunit)
+       ("java-modello-test" ,java-modello-test)
+       ,@(package-native-inputs java-modello-core)))
+    (synopsis "Modello XPP3 Plugin")
+    (description "The modello XPP3 plugin generates XML readers and writers based
+on the XPP3 API (XML Pull Parser).")))
+
 (define-public java-asm
   (package
     (name "java-asm")
@@ -5188,7 +5666,6 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
 (define antlr3-3.1
   (package
     (inherit antlr3)
-    (name "antlr3-3.1")
     (version "3.1")
     (source (origin
               (method url-fetch)
@@ -5199,7 +5676,7 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
                (base32
                 "0sfimc9cpbgrihz4giyygc8afgpma2c93yqpwb951giriri6x66z"))))
     (arguments
-     `(#:jar-name (string-append ,name "-" ,version ".jar")
+     `(#:jar-name (string-append "antlr3-" ,version ".jar")
        #:source-dir "src:runtime/Java/src"
        #:tests? #f
        #:phases
@@ -5231,12 +5708,13 @@ import org.antlr.grammar.v2.ANTLRTreePrinter;"))
                (for-each (lambda (file)
                            (display file)
                            (newline)
-                           (system* "antlr" "-o" dir (string-append dir file)))
+                           (invoke "antlr" "-o" dir (string-append dir file)))
                          '("antlr.g" "antlr.print.g" "assign.types.g"
                            "buildnfa.g" "define.g")))
              (format #t "codegen.g\n")
-             (system* "antlr" "-o" "src/org/antlr/codegen"
-                      "src/org/antlr/codegen/codegen.g")))
+             (invoke "antlr" "-o" "src/org/antlr/codegen"
+                     "src/org/antlr/codegen/codegen.g")
+             #t))
          (add-before 'build 'fix-build-xml
            (lambda _
              (substitute* "build.xml"
@@ -6959,7 +7437,7 @@ those in Perl and JavaScript.")
 (define-public java-testng
   (package
     (name "java-testng")
-    (version "6.14.2")
+    (version "6.14.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -6968,7 +7446,7 @@ those in Perl and JavaScript.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0ngj88dpbqqdx9084cmiasmn9q3v5dgx45qbvxpip47nxc5x14xy"))))
+                "0y6vq30i5g276kw0v2bhbvci22ijg7ax49ap2611yqlhbs4d6dqv"))))
     (build-system ant-build-system)
     (arguments
      `(#:jdk ,icedtea-8; java.util.function
@@ -7033,54 +7511,55 @@ to use.")
     (license license:asl2.0)))
 
 (define-public java-jnacl
-  (package
-    (name "java-jnacl")
-    (version "0.1.0")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                     (url "https://github.com/neilalexander/jnacl")
-                     (commit "40c322e0a42637ab17cdf941138eeaf2494055f8")))
-              (sha256
-               (base32
-                "1pspnmp44q61a2q4bpslpxw86rfn8s5l0xgvyrikqgdvg7ypx597"))))
-    (build-system ant-build-system)
-    (arguments
-     `(#:jar-name "java-jnacl.jar"
-       #:source-dir "src/main/java"
-       #:jdk ,icedtea-8
-       #:phases
-       (modify-phases %standard-phases
-         (add-before 'build 'fix-tests
-           (lambda _
-             (substitute* "src/test/java/com/neilalexander/jnacl/NaClTest.java"
-               (("assertions.Assertions") "assertions.api.Assertions"))
-             (substitute* "src/test/java/com/neilalexander/jnacl/NaclSecretBoxTest.java"
-               (("assertions.Assertions") "assertions.api.Assertions"))
-             #t))
-         (replace 'check
-           (lambda _
-             (system* "ant" "compile-tests")
-             (and
-               (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
-                                                           ":build/classes"
-                                                           ":build/test-classes")
-                               "org.testng.TestNG" "-testclass"
-                               "build/test-classes/com/neilalexander/jnacl/NaclSecretBoxTest.class"))
-               (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
-                                                           ":build/classes"
-                                                           ":build/test-classes")
-                               "org.testng.TestNG" "-testclass"
-                               "build/test-classes/com/neilalexander/jnacl/NaClTest.class"))))))))
-    (native-inputs
-     `(("java-testng" ,java-testng)
-       ("java-fest-util" ,java-fest-util)
-       ("java-fest-assert" ,java-fest-assert)))
-    (home-page "https://github.com/neilalexander/jnacl")
-    (synopsis "Java implementation of NaCl")
-    (description "Pure Java implementation of the NaCl: Networking and
+  (let ((commit "094e819afdd63ea81a499b3bcb42a271006bebd9")
+        (revision "2"))
+    (package
+      (name "java-jnacl")
+      (version (string-append "0.1.0-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/neilalexander/jnacl.git")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1d6g6xhn83byv5943n7935wwjsk0ibk0qdvqgr699qqgqqmwisbb"))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:jar-name "jnacl.jar"
+         #:source-dir "src/main/java"
+         #:jdk ,icedtea-8
+         #:phases
+         (modify-phases %standard-phases
+           (add-before 'build 'fix-tests
+             (lambda _
+               (substitute* '("src/test/java/com/neilalexander/jnacl/NaClTest.java"
+                              "src/test/java/com/neilalexander/jnacl/NaclSecretBoxTest.java")
+                 (("assertions.Assertions") "assertions.api.Assertions"))
+               #t))
+           (replace 'check
+             (lambda _
+               (invoke "ant" "compile-tests")
+               (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                   ":build/classes"
+                                                   ":build/test-classes")
+                       "org.testng.TestNG" "-testclass"
+                       "build/test-classes/com/neilalexander/jnacl/NaclSecretBoxTest.class")
+               (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                   ":build/classes"
+                                                   ":build/test-classes")
+                       "org.testng.TestNG" "-testclass"
+                       "build/test-classes/com/neilalexander/jnacl/NaClTest.class")
+               #t)))))
+      (native-inputs
+       `(("java-testng" ,java-testng)
+         ("java-fest-util" ,java-fest-util)
+         ("java-fest-assert" ,java-fest-assert)))
+      (home-page "https://github.com/neilalexander/jnacl")
+      (synopsis "Java implementation of NaCl")
+      (description "Pure Java implementation of the NaCl: Networking and
 Cryptography library.")
-    (license license:mpl2.0)))
+      (license license:bsd-2))))
 
 (define-public java-mvel2
   (package
@@ -7175,8 +7654,9 @@ configuration and string construction.")
          (add-before 'build 'run-javacc
            (lambda _
              (with-directory-excursion "src/main/java/org/apache/commons/jexl2/parser/"
-               (and (zero? (system* "java" "jjtree" "Parser.jjt"))
-                    (zero? (system* "java" "javacc" "Parser.jj")))))))))
+               (invoke "java" "jjtree" "Parser.jjt")
+               (invoke "java" "javacc" "Parser.jj"))
+             #t)))))
     (inputs
      `(("java-commons-logging-minimal" ,java-commons-logging-minimal)))
     (native-inputs
@@ -7216,7 +7696,8 @@ by technical operatives or consultants working with enterprise platforms.")
          (add-before 'configure 'generate-source
            (lambda _
              (with-directory-excursion "src/build/source_templates"
-               (zero? (system* "mvel2" "../gen_sources.mvel" "../../java"))))))))
+               (invoke "mvel2" "../gen_sources.mvel" "../../java"))
+             #t)))))
     (native-inputs
      `(("mvel" ,java-mvel2)))
     (home-page "https://jpountz.github.io/lz4-java")
@@ -7246,7 +7727,8 @@ algorithms and xxHash hashing algorithm.")
            (lambda _
              (mkdir-p "src")
              (with-directory-excursion "src"
-               (zero? (system* "unzip" "../src.zip"))))))))
+               (invoke "unzip" "../src.zip"))
+             #t)))))
     (native-inputs
      `(("unzip" ,unzip)
        ("junit" ,java-junit)))
@@ -7277,7 +7759,8 @@ for the Java programming language.")
            (lambda _
              (mkdir-p "src")
              (with-directory-excursion "src"
-               (zero? (system* "unzip" "../src.zip"))))))))
+               (invoke "unzip" "../src.zip"))
+             #t)))))
     (native-inputs
      `(("unzip" ,unzip)
        ("junit" ,java-junit)))
@@ -7904,26 +8387,23 @@ including pre-existing objects that you do not have source-code of.")
        (modify-phases %standard-phases
          (add-before 'build 'build-native
            (lambda* (#:key inputs #:allow-other-keys)
-             (with-directory-excursion "hawtjni-generator/src/main/resources/"
-               (and
-                 (system* "gcc" "-c" "hawtjni.c" "-o" "hawtjni.o"
-                          "-fPIC" "-O2"
-                          (string-append "-I" (assoc-ref inputs "jdk") "/include/linux"))
-                 (system* "gcc" "-c" "hawtjni-callback.c" "-o" "hawtjni-callback.o"
-                          "-fPIC" "-O2"
-                          (string-append "-I" (assoc-ref inputs "jdk") "/include/linux"))
-                 (system* "gcc" "-o" "libhawtjni.so" "-shared"
-                          "hawtjni.o" "hawtjni-callback.o")))))
+             (let ((include (string-append "-I" (assoc-ref inputs "jdk") "/include/linux")))
+               (with-directory-excursion "hawtjni-generator/src/main/resources/"
+                 (invoke "gcc" "-c" "hawtjni.c" "-o" "hawtjni.o"
+                         "-fPIC" "-O2" include)
+                 (invoke "gcc" "-c" "hawtjni-callback.c" "-o" "hawtjni-callback.o"
+                         "-fPIC" "-O2" include)
+                 (invoke "gcc" "-o" "libhawtjni.so" "-shared"
+                         "hawtjni.o" "hawtjni-callback.o")))
+             #t))
          (add-after 'install 'install-native
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
                     (lib (string-append out "/lib"))
                     (inc (string-append out "/include")))
-               (mkdir-p lib)
-               (mkdir-p inc)
                (with-directory-excursion "hawtjni-generator/src/main/resources/"
-                 (copy-file "libhawtjni.so" (string-append lib "/libhawtjni.so"))
-                 (copy-file "hawtjni.h" (string-append inc "/hawtjni.h"))))
+                 (install-file "libhawtjni.so" lib)
+                 (install-file "hawtjni.h" inc)))
              #t)))))
     (inputs
      `(("java-commons-cli" ,java-commons-cli)
@@ -7960,14 +8440,14 @@ that is part of the SWT Tools project.")
              (with-directory-excursion "src/main/native-package/src"
                (substitute* "jansi_ttyname.c"
                  (("#include \"jansi_.*") ""))
-               (and
-                 (system* "gcc" "-c" "jansi_ttyname.c" "-o" "jansi_ttyname.o"
-                          (string-append "-I" (assoc-ref inputs "java-hawtjni")
-                                         "/include")
-                          (string-append "-I" (assoc-ref inputs "jdk")
-                                         "/include/linux")
-                          "-fPIC" "-O2")
-                 (system* "gcc" "-o" "libjansi.so" "-shared" "jansi_ttyname.o")))))
+               (invoke "gcc" "-c" "jansi_ttyname.c" "-o" "jansi_ttyname.o"
+                       (string-append "-I" (assoc-ref inputs "java-hawtjni")
+                                      "/include")
+                       (string-append "-I" (assoc-ref inputs "jdk")
+                                      "/include/linux")
+                       "-fPIC" "-O2")
+               (invoke "gcc" "-o" "libjansi.so" "-shared" "jansi_ttyname.o")
+               #t)))
          (add-before 'build 'install-native
            (lambda _
              (let ((dir (string-append "build/classes/META-INF/native/"
@@ -7980,7 +8460,6 @@ that is part of the SWT Tools project.")
              #t))
          (add-after 'install 'install-native
            (lambda* (#:key outputs #:allow-other-keys)
-             (mkdir-p (string-append (assoc-ref outputs "out") "/include"))
              (install-file "src/main/native-package/src/jansi.h"
                            (string-append (assoc-ref outputs "out") "/include"))
              #t)))))
@@ -7988,8 +8467,9 @@ that is part of the SWT Tools project.")
      `(("java-hawtjni" ,java-hawtjni)))
     (home-page "https://fusesource.github.io/jansi/")
     (synopsis "Native library for jansi")
-    (description "Java-jansi-native contains the native library for the jansi
-frobnication library/framework.")
+    (description "This package provides the native library for jansi, a small
+Java library that allows you to use ANSI escape sequences to format your
+console output.")
     (license license:asl2.0)))
 
 (define-public java-jansi
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index 84b45961b5..246860e3f3 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016,2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -140,7 +141,7 @@ common build settings used in software produced by the KDE community.")
 (define-public phonon
   (package
     (name "phonon")
-    (version "4.9.1")
+    (version "4.10.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -149,7 +150,7 @@ common build settings used in software produced by the KDE community.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "177647r2jqfm32hqcz2nqfqv6v48hn5ab2vc31svba2wz23fkgk7"))))
+                "0gyhlnwamzfw31kw4qh0v6rj0m47k9wfygd6h07klg9ggp60xhg2"))))
     (build-system cmake-build-system)
     (native-inputs
      ;; TODO: Think about adding pulseaudio. Is it required for sound?
diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm
index dab2a7c692..ad66a846d4 100644
--- a/gnu/packages/kodi.scm
+++ b/gnu/packages/kodi.scm
@@ -128,7 +128,7 @@ generator library for C++.")
 ;; of the standard build process. To make things easier, we bootstrap
 ;; and patch shebangs here, so we don't have to worry about it later.
 (define libdvdnav/kodi
-  (let ((commit "981488f7f27554b103cca10c1fbeba027396c94a"))
+  (let ((commit "6.0.0-Leia-Alpha-1"))
     (package
       (name "libdvdnav-bootstrapped")
       (version commit)
@@ -140,7 +140,7 @@ generator library for C++.")
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "089pswc51l3avh95zl4cpsh7gh1innh7b2y4xgx840mcmy46ycr8"))))
+                  "1xiyfgf8v8aknlxlzsvk6pbzkhclz0hbh3s1b0w6ivkng2k310j9"))))
       (build-system gnu-build-system)
       (arguments
        '(#:tests? #f
@@ -165,7 +165,7 @@ generator library for C++.")
       (license license:gpl2+))))
 
 (define libdvdread/kodi
-  (let ((commit "17d99db97e7b8f23077b342369d3c22a6250affd"))
+  (let ((commit "6.0.0-Leia-Alpha-1"))
     (package
       (name "libdvdread-bootstrapped")
       (version commit)
@@ -177,7 +177,7 @@ generator library for C++.")
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "1gr5aq1cjr3as9mnwrw29cxn4m6f6pfrxdahkdcjy70q3ldg90sl"))))
+                  "1c3g18n2vwhgcfz3dka1pmw58bnv2ram7xjvizfiykb3sgi9zfwp"))))
       (build-system gnu-build-system)
       (arguments
        '(#:tests? #f
@@ -202,7 +202,7 @@ generator library for C++.")
       (license (list license:gpl2+ license:lgpl2.1+)))))
 
 (define libdvdcss/kodi
-  (let ((commit "2f12236bc1c92f73c21e973363f79eb300de603f"))
+  (let ((commit "1.4.1-Leia-Alpha-1"))
     (package
       (name "libdvdcss-bootstrapped")
       (version commit)
@@ -214,7 +214,7 @@ generator library for C++.")
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "198r0q73i55ga1dvyqq9nfcri0zq08b94hy8671lg14i3izx44dd"))))
+                  "0adafwsawxssj3nilkql447v0l4a2584rdpmy5rfjmznh91lykgh"))))
       (build-system gnu-build-system)
       (arguments
        '(#:tests? #f
@@ -241,20 +241,20 @@ generator library for C++.")
 (define-public kodi
   ;; We package the git version because the current released
   ;; version was cut while the cmake transition was in turmoil.
-  (let ((commit "67fd70f01a363002881f3519b50765b756716e3b")
-        (revision "7"))
+  (let ((commit "ec16dbca4dcf2923f53f819695a6d47c52e68d74")
+        (revision "8"))
   (package
     (name "kodi")
-    (version (string-append "18.0_alpha-" revision "-" (string-take commit 7)))
+    (version (git-version "18.0_alpha" revision commit))
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/xbmc/xbmc.git")
                     (commit commit)))
-              (file-name (string-append name "-" version "-checkout"))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "12975n4r982kmxc0r9w24n3lrj7aj3cs4fjkdjnn0r9jbnvfxhs3"))
+                "1rxg752cl59124cfpfwmyjldn6qpq5jginxddpzvgagfadf10i4d"))
               (snippet
                '(begin
                   (use-modules (guix build utils))
@@ -267,7 +267,6 @@ generator library for C++.")
                               ;; "tools/depend/native/TexturePacker"
                               ;; "lib/gtest"
                               ;; "lib/cpluff"
-                              ;; "lib/libexif"
                               ;; "lib/libUPnP"
                               "lib/libUPnP/Neptune/ThirdParty"
                               "project/Win32BuildSetup/tools/7z"))
@@ -318,7 +317,7 @@ generator library for C++.")
                ;; to make them writable before the build process starts.
                (("autoreconf -vif") "chmod -R u+w ."))
 
-             (substitute* "xbmc/linux/LinuxTimezone.cpp"
+             (substitute* "xbmc/platform/linux/LinuxTimezone.cpp"
                (("/usr/share/zoneinfo")
                 (string-append (assoc-ref inputs "tzdata")
                                "/share/zoneinfo")))
@@ -420,7 +419,7 @@ generator library for C++.")
     (description "Kodi is a media center application for playing videos,
 music, games, etc.  Kodi is highly customizable and features a theme and
 plug-in system.")
-    (home-page "http://kodi.tv")
+    (home-page "https://kodi.tv")
     ;; XBMC is largely GPL2+, with some library components as LGPL2.1+, but
     ;; there are some other licenses spread throughout.
     (license (list license:gpl2+ license:lgpl2.1+
diff --git a/gnu/packages/libcanberra.scm b/gnu/packages/libcanberra.scm
index b4ed90ebb4..e9d6ce594c 100644
--- a/gnu/packages/libcanberra.scm
+++ b/gnu/packages/libcanberra.scm
@@ -130,7 +130,7 @@ sounds for various system events.")
     ;; The license of the various sounds is given in the 'CREDITS' file.
     (license (list cc-by-sa4.0 cc-by3.0 gpl2 gpl2+))
 
-    (home-page "http://www.freedesktop.org/wiki/Specifications/sound-theme-spec/")))
+    (home-page "https://www.freedesktop.org/wiki/Specifications/sound-theme-spec/")))
 
 (define-public python-pycanberra
   (package
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index 948dabb41e..dd6b2237f9 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -79,13 +80,13 @@ conversions for values passed between the two languages.")
 (define-public python-cffi
   (package
     (name "python-cffi")
-    (version "1.11.2")
+    (version "1.11.4")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "cffi" version))
       (sha256
-       (base32 "19h0wwz9cww74gw8cyq0izj8zkhjyzjw2d3ks1c3f1y4q28xv1xb"))))
+       (base32 "07fiy4wqg8g08x38r04ydjr8n6g0g74gb8si8b6jhymijalq746z"))))
     (build-system python-build-system)
     (outputs '("out" "doc"))
     (inputs
@@ -121,7 +122,8 @@ conversions for values passed between the two languages.")
                                "linker_so='gcc -shared')")))
              (substitute* "testing/cffi0/test_ownlib.py"
                (("'cc testownlib") "'gcc testownlib"))
-             (zero? (system* "py.test" "-v" "c/" "testing/"))))
+             (invoke "py.test" "-v" "c/" "testing/")
+             #t))
          (add-before 'check 'disable-failing-test
            ;; This is assumed to be a libffi issue:
            ;; https://bitbucket.org/cffi/cffi/issues/312/tests-failed-with-armv8
@@ -130,15 +132,14 @@ conversions for values passed between the two languages.")
                (("ret.left") "ownlib.left"))
              #t))
          (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
-                    (doc (string-append data "/doc/" ,name "-" ,version))
+           (lambda* (#:key outputs (make-flags '())  #:allow-other-keys)
+             (let* ((doc (string-append (assoc-ref outputs "doc")
+                                        "/share/doc/" ,name "-" ,version))
                     (html (string-append doc "/html")))
                (with-directory-excursion "doc"
-                 (system* "make" "html")
+                 (apply invoke "make" "html" make-flags)
                  (mkdir-p html)
                  (copy-recursively "build/html" html))
-               (copy-file "LICENSE" (string-append doc "/LICENSE"))
                #t))))))
     (home-page "https://cffi.readthedocs.org")
     (synopsis "Foreign function interface for Python")
@@ -152,13 +153,13 @@ conversions for values passed between the two languages.")
 (define-public ruby-ffi
   (package
     (name "ruby-ffi")
-    (version "1.9.18")
+    (version "1.9.22")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "ffi" version))
               (sha256
                (base32
-                "034f52xf7zcqgbvwbl20jwdyjwznvqnwpbaps9nk18v9lgb1dpx0"))))
+                "17lvnpmllg4mlzf25lxbmfzk4l6rsddlxwwdkbs4d9v5gv154529"))))
     (build-system ruby-build-system)
     ;; FIXME: Before running tests the build system attempts to build libffi
     ;; from sources.
diff --git a/gnu/packages/libftdi.scm b/gnu/packages/libftdi.scm
index 208e13546e..78f849d02d 100644
--- a/gnu/packages/libftdi.scm
+++ b/gnu/packages/libftdi.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,7 +28,7 @@
 (define-public libftdi
   (package
     (name "libftdi")
-    (version "1.1")
+    (version "1.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -35,7 +36,7 @@
                     version ".tar.bz2"))
               (sha256
                (base32
-                "088yh8pxd6q53ssqndydcw1dkq51cjqyahc03lm6iip22cdazcf0"))))
+                "0x0vncf6i92slgrn0h7ghkskqbglbs534220qa84d0qg114zndpc"))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("libusb" ,libusb))) ; required by libftdi1.pc
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index 9b60c06a8d..316602adbc 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -190,7 +190,7 @@ into other word processors.")
 (define-public libe-book
   (package
     (name "libe-book")
-    (version "0.1.2")
+    (version "0.1.3")
     (source
       (origin
         (method url-fetch)
@@ -198,7 +198,7 @@ into other word processors.")
                             version "/libe-book-" version ".tar.xz"))
         (sha256
           (base32
-            "1v48pd32r2pfysr3a3igc4ivcf6vvb26jq4pdkcnq75p70alp2bz"))))
+            "1yg1vws1wggzhjw672bpgh2x541g5i9wryf67g51m0r79zrqz3by"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("cppunit" ,cppunit)
@@ -206,6 +206,7 @@ into other word processors.")
        ("pkg-config" ,pkg-config)))
     (propagated-inputs ; in Requires or Requires.private field of .pkg
      `(("icu4c" ,icu4c)
+       ("liblangtag" ,liblangtag)
        ("librevenge" ,librevenge)
        ("libxml2" ,libxml2)))
     (inputs
@@ -295,14 +296,14 @@ as Alfresco or Nuxeo.")
 (define-public libabw
   (package
     (name "libabw")
-    (version "0.1.1")
+    (version "0.1.2")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "http://dev-www.libreoffice.org/src/" name "/"
+      (uri (string-append "https://dev-www.libreoffice.org/src/" name "/"
                           name "-" version ".tar.xz"))
       (sha256 (base32
-               "0zi1zj4fpxgpglbbb5n1kg3dmhqq5rpf46lli89r5daavp19iing"))))
+               "11949iscdb99f2jplxjd39282jxcrf2fw0sqbh5dl7gqb96r8whb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
@@ -428,7 +429,7 @@ standard 21.0.2.")
       (sha256 (base32
                "1j6sjwkyhqvsgyw938bxxfwkzzi1mahk66g5342lv6j89jfvrz8k"))))
     (build-system gnu-build-system)
-    (home-page "http://www.freedesktop.org/wiki/Software/libexttextcat/")
+    (home-page "https://www.freedesktop.org/wiki/Software/libexttextcat/")
     (synopsis "Text Categorization library")
     (description "Libexttextcat is an N-Gram-Based Text Categorization
 library primarily intended for language guessing.")
@@ -468,14 +469,14 @@ Aldus/Macromedia/Adobe FreeHand documents.")
 (define-public libmspub
   (package
     (name "libmspub")
-    (version "0.1.2")
+    (version "0.1.4")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "http://dev-www.libreoffice.org/src/" name "/"
+      (uri (string-append "https://dev-www.libreoffice.org/src/" name "/"
                           name "-" version ".tar.xz"))
       (sha256 (base32
-               "03sn6lxpr49sdq6j8q7fw7yjybyfahhs03z80388mh105pwapfmh"))))
+               "1fhkn013gzg59f4z7rldpbi0nj7lgdqzxanspsqa6axvmahw2dpg"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
@@ -495,14 +496,14 @@ Microsoft Publisher documents of all versions.")
 (define-public libpagemaker
   (package
     (name "libpagemaker")
-    (version "0.0.3")
+    (version "0.0.4")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "http://dev-www.libreoffice.org/src/" name "/"
+      (uri (string-append "https://dev-www.libreoffice.org/src/" name "/"
                           name "-" version ".tar.xz"))
       (sha256 (base32
-               "1minj0q14d44qfas81a8lkpgj288h5xlkjp084sfx17xv9axr5nq"))))
+               "17ai8ajffr0ixxmmcv3k5vgjlcsix38ldb4fw2arild70pbsrbb6"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 09c84e2e10..c33b473ca9 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -383,8 +383,8 @@ It has been modified to remove all non-free binary blobs.")
 ;; supports qemu "virt" machine and possibly a large number of ARM boards.
 ;; See : https://wiki.debian.org/DebianKernel/ARMMP.
 
-(define %linux-libre-version "4.15.5")
-(define %linux-libre-hash "1vrqya5zkhzl37fpj5v0v1igm7jf2gi13apkpak90l51xiw592cs")
+(define %linux-libre-version "4.15.6")
+(define %linux-libre-hash "13mv6wrhwjw2wll918c1r9l872wzzanvyi8rk6gv0k6cg0f56jal")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -392,8 +392,8 @@ It has been modified to remove all non-free binary blobs.")
                     %linux-compatible-systems
                     #:configuration-file kernel-config))
 
-(define %linux-libre-4.14-version "4.14.21")
-(define %linux-libre-4.14-hash "07d27mph514jxxkzil4b3c848ywfd4r4js0wl5wsfy7a3j757278")
+(define %linux-libre-4.14-version "4.14.22")
+(define %linux-libre-4.14-hash "1lhswcvgl077kzsln3nxmrdbnlc3b8mphjjmkqz0f2663wa6rhcv")
 
 (define-public linux-libre-4.14
   (make-linux-libre %linux-libre-4.14-version
@@ -402,14 +402,14 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.83"
-                    "09mw2r2fbn0g6xfhyxk0n54c7sg0vk9nlp7k2ca3v0v24n7lrfza"
+  (make-linux-libre "4.9.84"
+                    "08bgdcysva2igz4rc55slyz7nbzwz5skakh5c2iahsklg343pwbw"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.117"
-                    "1mlq9npyriwj0wpj24zah55bkxil31l182ypbn6b3x4yvmr8lhz0"
+  (make-linux-libre "4.4.118"
+                    "0di91awl8ii1fxrfyqbpfpn134apcc98fas7yisjg87f16bn4azl"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 020abc7494..a506566a05 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -435,7 +435,7 @@ statistical profiler, a code coverage tool, and many other extensions.")
 (define-public ccl
   (package
     (name "ccl")
-    (version "1.11")
+    (version "1.11.5")
     (source #f)
     (build-system gnu-build-system)
     ;; CCL consists of a "lisp kernel" and "heap image", both of which are
@@ -448,7 +448,7 @@ statistical profiler, a code coverage tool, and many other extensions.")
         ,(origin
            (method url-fetch)
            (uri (string-append
-                 "ftp://ftp.clozure.com/pub/release/" version
+                 "https://github.com/Clozure/ccl/releases/download/v" version
                  "/ccl-" version "-"
                  (match (%current-system)
                    ((or "i686-linux" "x86_64-linux") "linuxx86")
@@ -461,9 +461,9 @@ statistical profiler, a code coverage tool, and many other extensions.")
             (base32
              (match (%current-system)
                ((or "i686-linux" "x86_64-linux")
-                "0w3dmj7q9kqyra3yrf1lxclnjz151yvf5s5q8ayllvmvqbl8bs08")
+                "0hs1f3z7crgzvinpj990kv9gvbsipxvcvwbmk54n51nasvc5025q")
                ("armhf-linux"
-                "1x487aaz2rqcb6k301sy2p39a1m4qdhg6z9p9fb76ssipqgr38b4")
+                "0p0l1dzsygb6i1xxgbipjpxkn46xhq3jm41a34ga1qqp4x8lkr62")
                (_ ""))))))))
     (native-inputs
      `(("m4" ,m4)
@@ -484,6 +484,8 @@ statistical profiler, a code coverage tool, and many other extensions.")
            ;; Enter the source directory for the current platform's lisp
            ;; kernel, and run 'make clean' to remove the precompiled one.
            (lambda _
+             (substitute* "lisp-kernel/m4macros.m4"
+               (("/bin/pwd") (which "pwd")))
              (chdir (string-append
                      "lisp-kernel/"
                      ,(match (or (%current-target-system) (%current-system))
@@ -726,27 +728,29 @@ interactive development model in mind.")
   (sbcl-package->ecl-package sbcl-fiveam))
 
 (define-public sbcl-bordeaux-threads
-  (package
-    (name "sbcl-bordeaux-threads")
-    (version "0.8.5")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/sionescu/bordeaux-threads/archive/v"
-                    version ".tar.gz"))
-              (sha256
-               (base32 "10ryrcx832fwqdawb6jmknymi7wpdzhi30qzx7cbrk0cpnka71w2"))
-              (file-name
-               (string-append "bordeaux-threads-" version ".tar.gz"))))
-    (inputs `(("alexandria" ,sbcl-alexandria)))
-    (native-inputs `(("fiveam" ,sbcl-fiveam)))
-    (build-system asdf-build-system/sbcl)
-    (synopsis "Portable shared-state concurrency library for Common Lisp")
-    (description "BORDEAUX-THREADS is a proposed standard for a minimal
+  (let ((commit "354abb0ae9f1d9324001e1a8abab3128d7420e0e")
+        (revision "1"))
+    (package
+      (name "sbcl-bordeaux-threads")
+      (version (git-version "0.8.5" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/sionescu/bordeaux-threads.git")
+                      (commit commit)))
+                (sha256
+                 (base32 "1hcfp21l6av1xj6z7r77sp6h4mwf9vvx4s745803sysq2qy2mwnq"))
+                (file-name
+                 (git-file-name "bordeaux-threads" version))))
+      (inputs `(("alexandria" ,sbcl-alexandria)))
+      (native-inputs `(("fiveam" ,sbcl-fiveam)))
+      (build-system asdf-build-system/sbcl)
+      (synopsis "Portable shared-state concurrency library for Common Lisp")
+      (description "BORDEAUX-THREADS is a proposed standard for a minimal
 MP/Threading interface.  It is similar to the CLIM-SYS threading and lock
 support.")
-    (home-page "https://common-lisp.net/project/bordeaux-threads/")
-    (license license:x11)))
+      (home-page "https://common-lisp.net/project/bordeaux-threads/")
+      (license license:x11))))
 
 (define-public cl-bordeaux-threads
   (sbcl-package->cl-source-package sbcl-bordeaux-threads))
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 6e8f9a74ae..8d3544f908 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -296,7 +296,7 @@ operating systems.")
 (define-public neomutt
   (package
     (name "neomutt")
-    (version "20171215")
+    (version "20180223")
     (source
      (origin
        (method url-fetch)
@@ -304,7 +304,7 @@ operating systems.")
                            "/archive/" name "-" version ".tar.gz"))
        (sha256
         (base32
-         "1df1c2ynvivna42ifj1lxmgb0bbfih0ggn1afyniadzjm6cnxdvz"))))
+         "1fr7158xhrhasylyxp709g9mdbggdmni3qn3baxvczfg2w003fhh"))))
     (build-system gnu-build-system)
     (inputs
      `(("cyrus-sasl" ,cyrus-sasl)
@@ -325,7 +325,7 @@ operating systems.")
        ("gettext-minimal" ,gettext-minimal)
        ("pkg-config" ,pkg-config)
        ("docbook-xsl" ,docbook-xsl)
-       ("docbook-xml" ,docbook-xml)
+       ("docbook-xml" ,docbook-xml-4.2)
        ("w3m" ,w3m)
        ("tcl" ,tcl)))
     (arguments
@@ -368,18 +368,6 @@ operating systems.")
        (modify-phases %standard-phases
          ;; TODO: autosetup is meant to be included in the source,
          ;; but we should package autosetup and use our own version of it.
-         (add-before 'configure 'fix-docbook
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* '("doc/chunk.xsl" "doc/manual.xml.tail"
-                            "doc/html.xsl" "doc/manual.xml.head")
-               (("http://docbook.sourceforge.net/release/xsl/current/")
-                (string-append (assoc-ref inputs "docbook-xsl")
-                               "/xml/xsl/docbook-xsl-"
-                               ,(package-version docbook-xsl) "/"))
-               (("http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd")
-                (string-append (assoc-ref inputs "docbook-xml")
-                               "/xml/dtd/docbook/docbookx.dtd")))
-             #t))
          (add-before 'configure 'fix-sasl-test
            (lambda _
              ;; Upstream suggestion to fix the failing sasl autosetup test.
@@ -1192,16 +1180,15 @@ facilities for checking incoming mail.")
 (define-public dovecot
   (package
     (name "dovecot")
-    (version "2.3.0")
+    (version "2.3.0.1")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.dovecot.org/releases/"
                            (version-major+minor version) "/"
                            name "-" version ".tar.gz"))
-       (patches (search-patches "dovecot-CVE-2017-15132.patch"))
        (sha256 (base32
-                "10c5myzgys866c3x6jdr1s9x9pqnjd5vpyz8z384sph21m3wnq6y"))))
+                "0lzisrdgrj5qqwjb7bv99mf2aljm568r6g108yisp0s644z2nxxb"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index 07ac93686a..779b7ef5aa 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -197,6 +197,18 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 				   (("/bin/sh") "sh")
 				   (("execv ") "execvp "))
 				 #t)))))))
+        ;; We don't want to retain a reference to /gnu/store in the bootstrap
+        ;; versions of egrep/fgrep, so we remove the custom phase added since
+        ;; grep@2.25. The effect is 'egrep' and 'fgrep' look for 'grep' in
+        ;; $PATH.
+        (grep (package
+                (inherit grep)
+                (inputs '())                   ;remove PCRE, which is optional
+                (arguments
+                 (substitute-keyword-arguments (package-arguments grep)
+                   ((#:phases phases)
+                    `(modify-phases ,phases
+                       (delete 'fix-egrep-and-fgrep)))))))
         (finalize (compose static-package
                            package-with-relocatable-glibc)))
     `(,@(map (match-lambda
@@ -209,17 +221,7 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                ("patch" ,patch)
                ("coreutils" ,coreutils)
                ("sed" ,sed)
-               ;; We don't want to retain a reference to /gnu/store in the
-               ;; bootstrap versions of egrep/fgrep, so we remove the custom
-               ;; phase added since grep@2.25. The effect is 'egrep' and
-               ;; 'fgrep' look for 'grep' in $PATH.
-               ("grep" ,(package
-                          (inherit grep)
-                          (arguments
-                            (substitute-keyword-arguments (package-arguments grep)
-                              ((#:phases phases)
-                               `(modify-phases ,phases
-                                  (delete 'fix-egrep-and-fgrep)))))))
+               ("grep" ,grep)
                ("gawk" ,gawk)))
       ("bash" ,static-bash))))
 
@@ -530,6 +532,13 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                       ''("LDFLAGS=-ldl"))
                      ((#:phases phases '%standard-phases)
                       `(modify-phases ,phases
+
+                         ;; Do not record the absolute file name of 'sh' in
+                         ;; (ice-9 popen).  This makes 'open-pipe' unusable in
+                         ;; a build chroot ('open-pipe*' is fine) but avoids
+                         ;; keeping a reference to Bash.
+                         (delete 'pre-configure)
+
                          (add-before 'configure 'static-guile
                            (lambda _
                              (substitute* "libguile/Makefile.in"
@@ -555,7 +564,9 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
     (name "guile-static-stripped")
     (build-system trivial-build-system)
     (arguments
-     `(#:modules ((guix build utils))
+     ;; The end result should depend on nothing but itself.
+     `(#:allowed-references ("out")
+       #:modules ((guix build utils))
        #:builder
        (let ()
          (use-modules (guix build utils))
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 25e1d5a312..8d0c10697f 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2015 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
@@ -259,14 +259,14 @@ routines that have been extracted from the V8 JavaScript engine.")
 (define-public dionysus
   (package
     (name "dionysus")
-    (version "1.3.0")
+    (version "1.4.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/dionysus/dionysus-" version
-                                  ".tar.gz"))
+                                  ".tar.xz"))
               (sha256
                (base32
-                "1aqnvw6z33bzqgd1ga571pnx6vq2zrkckm1cz91grv45h4jr9vgs"))))
+                "194pzs1mlsj4ww6v37qq3961h5hckm5h805cv0r14xj3g9wfx2sk"))))
     (build-system gnu-build-system)
     (inputs `(("tcl" ,tcl)))                      ;for 'tclsh'
     (synopsis "Local search for universal constants and scientific values")
@@ -2489,7 +2489,7 @@ point numbers.")
 (define-public wxmaxima
   (package
     (name "wxmaxima")
-    (version "17.10.1")
+    (version "18.02.0")
     (source
      (origin
        (method url-fetch)
@@ -2498,12 +2498,12 @@ point numbers.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0qlzc31cqkwpfgrb9cif9bcnkj3rq487plg4rns7jxv6pq4609v1"))))
-    (build-system gnu-build-system)
+         "03kr2rgfp4hcf3is8m8d8f9hj660c3xgrc50vrrfpixx4syh6wvj"))
+       (patches
+        (search-patches "wxmaxima-do-not-use-old-gnuplot-parameters.patch"))))
+    (build-system cmake-build-system)
     (native-inputs
-     `(("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("gettext" ,gettext-minimal)))
+     `(("gettext" ,gettext-minimal)))
     (inputs
      `(("wxwidgets" ,wxwidgets)
        ("maxima" ,maxima)
@@ -2512,11 +2512,9 @@ point numbers.")
        ("gtk+" ,gtk+)
        ("shared-mime-info" ,shared-mime-info)))
     (arguments
-     `(#:phases
+     `(#:tests? #f ; no check target
+       #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'autoconf
-           (lambda _
-             (zero? (system* "sh" "bootstrap"))))
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (wrap-program (string-append (assoc-ref outputs "out")
diff --git a/gnu/packages/openstack.scm b/gnu/packages/openstack.scm
index 2a55a80842..f0147bab59 100644
--- a/gnu/packages/openstack.scm
+++ b/gnu/packages/openstack.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +21,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages openstack)
+  #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages python)
@@ -39,27 +41,37 @@
 (define-public python-bandit
   (package
     (name "python-bandit")
-    (version "0.13.2")
+    (version "1.4.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/b/bandit/bandit-"
-             version ".tar.gz"))
+       (uri (pypi-uri "bandit" version))
        (sha256
         (base32
-         "03g3cflvrc99ncjd611iy5nnnscsc2vgnrx4mjaqyx8glbfw8y7g"))))
+         "1m5bm42120zyazky4k0lp3d9r0jwhjmp6sb108xfr0vz952p15yb"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (delete 'check)
+                  (add-after 'install 'check
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      ;; Tests require the 'bandit' executable in PATH.
+                      ;; It's only built during install time.
+                      (add-installed-pythonpath inputs outputs)
+                      (setenv "PATH" (string-append (assoc-ref outputs "out")
+                                                    "/bin:" (getenv "PATH")))
+                      (invoke "python" "setup.py" "testr"))))))
     (propagated-inputs
-      `(("python-appdirs" ,python-appdirs)
+      `(("python-gitpython" ,python-gitpython)
         ("python-pyyaml" ,python-pyyaml)
         ("python-six" ,python-six)
         ("python-stevedore" ,python-stevedore)))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ;; Tests
+      `(;; Tests.
+        ("python-beautifulsoup4" ,python-beautifulsoup4)
         ("python-fixtures" ,python-fixtures)
         ("python-mock" ,python-mock)
+        ("python-subunit" ,python-subunit)
         ("python-testrepository" ,python-testrepository)
         ("python-testscenarios" ,python-testscenarios)
         ("python-testtools" ,python-testtools)))
@@ -70,50 +82,50 @@
 To do this Bandit processes each file, builds an AST from it, and runs
 appropriate plugins against the AST nodes.  Once Bandit has finished scanning
 all the files it generates a report.")
-    (properties `((python2-variant . ,(delay python2-bandit))))
     (license asl2.0)))
 
 (define-public python2-bandit
-  (package (inherit (package-with-python2
-                     (strip-python2-variant python-bandit)))
-           (arguments
-            `(#:python ,python-2
-              ;; FIXME: 'subunit.run discover: error: no such option: --list'
-              #:tests? #f))))
+  (package-with-python2 python-bandit))
 
 (define-public python-debtcollector
   (package
     (name "python-debtcollector")
-    (version "1.0.0")
+    (version "1.19.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "debtcollector" version))
         (sha256
           (base32
-           "0g4dfskaiy47rhsh4gh66l5vmdsrgq0qk68pl3ix1cj3ffvfndzv"))))
+           "06c7vyn184y9f0lsrwaz13aq63hdz5fjrd191b8nifx6acsni42f"))))
     (build-system python-build-system)
-    (arguments
-     '(#:tests? #f)) ;FIXME: Requires packaging python-doc8.
     (propagated-inputs
-     `(("python-six" ,python-six)
+     `(("python-pbr" ,python-pbr)
+       ("python-six" ,python-six)
        ("python-wrapt" ,python-wrapt)))
     (native-inputs
-      `(("python-babel" ,python-babel)
-        ("python-pbr" ,python-pbr)
-        ;; Tests.
-        ("python-oslotest" ,python-oslotest)))
+     `(;; Tests.
+       ("python-subunit" ,python-subunit)
+       ("python-testrepository" ,python-testrepository)
+       ("python-testtools" ,python-testtools)))
     (home-page "https://www.openstack.org/")
     (synopsis
-      "Find deprecated patterns and strategies in Python code")
+     "Find deprecated patterns and strategies in Python code")
     (description
       "This package provides a collection of Python deprecation patterns and
 strategies that help you collect your technical debt in a non-destructive
 manner.")
+    (properties `((python2-variant . ,(delay python2-debtcollector))))
     (license asl2.0)))
 
 (define-public python2-debtcollector
-  (package-with-python2 python-debtcollector))
+  (let ((base (package-with-python2 (strip-python2-variant
+                                     python-debtcollector))))
+    (package
+      (inherit base)
+      (propagated-inputs
+       `(("python2-funcsigs" ,python2-funcsigs)
+         ,@(package-propagated-inputs base))))))
 
 (define-public python-hacking
   (package
@@ -155,36 +167,66 @@ guidelines}.")
 (define-public python-mox3
   (package
     (name "python-mox3")
-    (version "0.14.0")
+    (version "0.24.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "mox3" version))
+        (patches (search-patches "python-mox3-python3.6-compat.patch"))
         (sha256
           (base32
-           "0njmh40i1lg5mzn9hc2ax83adj6dli455j6xifilrw27c4wlkjzx"))))
+           "0w58adwv7q9wzvmq9mlrk2asfk73myq9fpwy7mjkzsz3baa95zf5"))))
     (build-system python-build-system)
-    (arguments
-     ;; TODO: Resolve dependency cycle and re-enable.
-     '(#:tests? #f))
+    (propagated-inputs
+     `(("python-fixtures" ,python-fixtures)
+       ("python-pbr" ,python-pbr)))
     (native-inputs
-      `(("python-fixtures" ,python-fixtures)
-        ; TODO re-add ("python-oslosphinx" ,python-oslosphinx)
-        ("python-pbr" ,python-pbr)
-        ("python-sphinx" ,python-sphinx)
+      `(("python-openstackdocstheme" ,python-openstackdocstheme)
+        ("python-sphinx" ,python-sphinx-1.6)
+        ("python-subunit" ,python-subunit)
+        ("python-testrepository" ,python-testrepository)
         ("python-testtools" ,python-testtools)))
     (home-page "https://www.openstack.org/")
     (synopsis "Mock object framework for Python")
     (description
       "Mox3 is an unofficial port of the @uref{https://code.google.com/p/pymox/,
 Google mox framework} to Python 3.  It was meant to be as compatible
-with mox as possible, but small enhancements have been made.  The library was
-tested on Python versions 3.2, 2.7, and 2.6.")
+with mox as possible, but small enhancements have been made.")
     (license asl2.0)))
 
 (define-public python2-mox3
   (package-with-python2 python-mox3))
 
+(define-public python-openstackdocstheme
+  (package
+    (name "python-openstackdocstheme")
+    (version "1.18.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "openstackdocstheme" version))
+              (sha256
+               (base32
+                "1ki5204rjdqjvr8xr9w2qc1z6b6d2i5jas0i70xzkf9njlzjzv2r"))))
+    (build-system python-build-system)
+    (arguments
+     ;; FIXME: Tests require an old version of python-hacking, which in
+     ;; turn depends on mox3 which depends on this package.
+     `(#:tests? #f))
+    (propagated-inputs
+     `(("python-dulwich" ,python-dulwich)
+       ("python-pbr" ,python-pbr)))
+    (native-inputs
+     `(("python-sphinx" ,python-sphinx-1.6)))
+    (home-page "https://docs.openstack.org/openstackdocstheme/latest/")
+    (synopsis "OpenStack Docs Theme")
+    (description
+     "This package provides themes and extensions for Sphinx for publishing
+to docs.openstack.org and developer.openstack.org.")
+    (license asl2.0)))
+
+(define-public python2-openstackdocstheme
+  (package-with-python2 python-openstackdocstheme))
+
 (define-public python-os-client-config
   (package
     (name "python-os-client-config")
@@ -257,27 +299,22 @@ tested on Python versions 3.2, 2.7, and 2.6.")
 (define-public python-stevedore
   (package
     (name "python-stevedore")
-    (version "1.12.0")
+    (version "1.28.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "stevedore" version))
        (sha256
-         (base32
-          "0999zvawaapzg6givjhn7vjscdwblcs73wf28wq1wb4g5mbb5phv"))))
+        (base32
+         "02ynfgwma84g59834dmvzr39mcppy5s229zf1w23c0qngf753izi"))))
     (build-system python-build-system)
     (propagated-inputs
-      `(("python-six" ,python-six)))
+     `(("python-pbr" ,python-pbr)
+       ("python-six" ,python-six)))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ;; Tests
-        ("python-discover" ,python-discover)
-        ("python-docutils" ,python-docutils)
-        ("python-mock" ,python-mock)
-        ("python-oslosphinx" ,python-oslosphinx)
-        ("python-oslotest" ,python-oslotest)
-        ("python-sphinx" ,python-sphinx)
-        ("python-testrepository" ,python-testrepository)))
+     `(("python-mock" ,python-mock)
+       ("python-sphinx" ,python-sphinx-1.6)
+       ("python-testrepository" ,python-testrepository)))
     (home-page "https://github.com/dreamhost/stevedore")
     (synopsis "Manage dynamic plugins for Python applications")
     (description
@@ -289,16 +326,10 @@ mechanism by building on top of setuptools entry points.  The code for managing
 entry points tends to be repetitive, though, so stevedore provides manager
 classes for implementing common patterns for using dynamically loaded
 extensions.")
-    (properties `((python2-variant . ,(delay python2-stevedore))))
     (license asl2.0)))
 
 (define-public python2-stevedore
-  (package (inherit (package-with-python2
-                     (strip-python2-variant python-stevedore)))
-           (arguments
-            `(#:python ,python-2
-              ;; FIXME: 'subunit.run discover: error: no such option: --list'
-              #:tests? #f))))
+  (package-with-python2 python-stevedore))
 
 (define-public python-tempest-lib
   (package
@@ -349,31 +380,35 @@ common features used in Tempest.")
 (define-public python-oslo.config
   (package
     (name "python-oslo.config")
-    (version "2.4.0")
+    (version "5.2.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/o/oslo.config/oslo.config-"
-             version
-             ".tar.gz"))
+       (uri (pypi-uri "oslo.config" version))
        (sha256
          (base32
-          "13r778jfb0fhna37c2pd1f2xipnsbd7zli7qhn96acrzymrwj5k1"))))
+          "0ymf7jxbq29fifyvkwhfiys1qvljqfxdw8ajwzwaf3yiqidgpxqd"))))
     (build-system python-build-system)
-    (arguments
-     '(#:tests? #f)) ; FIXME: Requires packaging python-argparse.
     (propagated-inputs
-      `(("python-netaddr" ,python-netaddr)
-        ("python-six" ,python-six)
-        ("python-stevedore" ,python-stevedore)))
+     `(("python-debtcollector" ,python-debtcollector)
+       ("python-netaddr" ,python-netaddr)
+       ("python-oslo.i18n" ,python-oslo.i18n)
+       ("python-pbr" ,python-pbr)
+       ("python-rfc3986" ,python-rfc3986)
+       ("python-six" ,python-six)
+       ("python-stevedore" ,python-stevedore)
+       ("python-pyyaml" ,python-pyyaml)))
     (native-inputs
-      `(("python-pbr" ,python-pbr)
-        ;; Tests
-        ("python-oslo.i18n" ,python-oslo.i18n)
-        ("python-mock" ,python-mock)
-        ("python-oslotest" ,python-oslotest)
-        ("python-testscenarios" ,python-testscenarios)))
+     `(("python-bandit" ,python-bandit)
+       ("python-coverage" ,python-coverage)
+       ("python-mock" ,python-mock)
+       ("python-openstackdocstheme" ,python-openstackdocstheme)
+       ("python-oslotest" ,python-oslotest)
+       ("python-reno" ,python-reno)
+       ("python-sphinx" ,python-sphinx-1.6)
+       ("python-testrepository" ,python-testrepository)
+       ("python-testscenarios" ,python-testscenarios)
+       ("python-testtools" ,python-testtools)))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo Configuration API")
     (description
@@ -387,28 +422,22 @@ common features used in Tempest.")
 (define-public python-oslo.context
   (package
     (name "python-oslo.context")
-    (version "1.0.0")
+    (version "2.20.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "oslo.context" version))
        (sha256
         (base32
-         "0kvha0rs9295njyl2z6n6zm5dapi5mrl5zwjm0m6ldqrvccyf8c3"))))
+         "0iiq9rpwg6wrdqnhf3d8z8g0g7fjhs5zn6qw6igvxplz2c3rbvvx"))))
     (build-system python-build-system)
-    (arguments
-     '(#:tests? #f)) ; FIXME: Requires python-mock >= 1.2.
+    (propagated-inputs
+     `(("python-debtcollector" ,python-debtcollector)
+       ("python-pbr" ,python-pbr)))
     (native-inputs
-      `(("python-babel" ,python-babel)
-        ("python-pbr" ,python-pbr)
-        ;; Tests.
-        ("python-coverage" ,python-coverage)
-        ("python-hacking" ,python-hacking)
-        ("python-mock" ,python-mock)
-        ("python-os-client-config" ,python-os-client-config)
-        ("python-oslotest" ,python-oslotest)
-        ("python-oslosphinx" ,python-oslosphinx)
-        ("python-sphinx" ,python-sphinx)))
+     `(("python-fixtures" ,python-fixtures)
+       ("python-hacking" ,python-hacking)
+       ("python-oslotest" ,python-oslotest)))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo context library")
     (description
@@ -423,17 +452,15 @@ pipeline and used by various modules such as logging.")
 (define-public python-oslo.i18n
   (package
     (name "python-oslo.i18n")
-    (version "3.0.0")
+    (version "3.19.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "oslo.i18n" version))
         (sha256
           (base32
-           "0bpb1c20sm8my650gl824nzaip83bfn8hr91s65k5ncmyh8hb6pl"))))
+           "18lbfq55cqrbmwm5p6vci9mkjfzr0zwz54ax3ysa463wba5m84cp"))))
     (build-system python-build-system)
-    (arguments
-     '(#:tests? #f)) ; FIXME: Circular dependency on python-oslo.config.
     (propagated-inputs
       `(("python-babel" ,python-babel)
         ("python-six" ,python-six)))
@@ -458,34 +485,33 @@ in an application or library.")
 (define-public python-oslo.log
   (package
   (name "python-oslo.log")
-  (version "1.6.0")
+  (version "3.36.0")
   (source
     (origin
       (method url-fetch)
-      (uri (string-append
-             "https://pypi.python.org/packages/source/o/oslo.log/oslo.log-"
-             version
-             ".tar.gz"))
+      (uri (pypi-uri "oslo.log" version))
       (sha256
         (base32
-          "1fhy6yvbd565nv4x4i3ppyrlbmz3yy9d0xsvw5nkqsa7g43nmf8z"))))
+          "0h7hplf1h8k24v75m3mq1jlrl74x5ynyr4hwgffsg5campxnza4x"))))
   (build-system python-build-system)
-  (arguments
-   '(#:tests? #f)) ; FIXME: Requires oslo.utils >= 3.2.0.
   (propagated-inputs
-   `(("python-debtcollector" ,python-debtcollector)
+   `(("python-dateutil" ,python-dateutil)
+     ("python-debtcollector" ,python-debtcollector)
+     ("python-monotonic" ,python-monotonic)
      ("python-oslo.config" ,python-oslo.config)
      ("python-oslo.context" ,python-oslo.context)
      ("python-oslo.i18n" ,python-oslo.i18n)
      ("python-oslo.utils" ,python-oslo.utils)
      ("python-oslo.serialization" ,python-oslo.serialization)
+     ("python-pbr" ,python-pbr)
+     ("python-pyinotify" ,python-pyinotify)
      ("python-six" ,python-six)))
   (native-inputs
-    `(("python-babel" ,python-babel)
-      ("python-iso8601" ,python-iso8601)
-      ("python-mock" ,python-mock)
+    `(("python-mock" ,python-mock)
       ("python-oslotest" ,python-oslotest)
-      ("python-pbr" ,python-pbr)))
+      ("python-subunit" ,python-subunit)
+      ("python-testrepository" ,python-testrepository)
+      ("python-testtools" ,python-testtools)))
   (home-page "https://launchpad.net/oslo")
   (synopsis "Python logging library of the Oslo project")
   (description
@@ -500,27 +526,23 @@ handlers and support for context specific logging (like resource id’s etc).")
 (define-public python-oslo.serialization
   (package
     (name "python-oslo.serialization")
-    (version "2.2.0")
+    (version "2.24.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "oslo.serialization" version))
        (sha256
         (base32
-         "00s03krhf833gs76aw5ns32w9m1i4hx6x6d9g82m0j5wyqk0sci4"))))
+         "08bxkp98c617y58x630xq44iiffm7f0f3cwh6zbnlkgq0zgh7jk1"))))
     (build-system python-build-system)
-    (arguments
-     '(#:tests? #f)) ; FIXME: Requires python-oslo.utils >= 3.2.0.
     (propagated-inputs
-      `(("python-iso8601" ,python-iso8601)
+      `(("python-msgpack" ,python-msgpack)
         ("python-netaddr" ,python-netaddr)
         ("python-oslo.utils" ,python-oslo.utils)
-        ("python-simplejson" ,python-simplejson)
         ("python-six" ,python-six)
         ("python-pytz" ,python-pytz)))
     (native-inputs
-      `(("python-babel" ,python-babel)
-        ("python-pbr" ,python-pbr)
+      `(("python-pbr" ,python-pbr)
         ;; Tests.
         ("python-mock" ,python-mock)
         ("python-oslo.i18n" ,python-oslo.i18n)
@@ -530,21 +552,28 @@ handlers and support for context specific logging (like resource id’s etc).")
     (description
       "The oslo.serialization library provides support for representing objects
 in transmittable and storable formats, such as JSON and MessagePack.")
+    (properties `((python2-variant . ,(delay python2-oslo.serialization))))
     (license asl2.0)))
 
 (define-public python2-oslo.serialization
-  (package-with-python2 python-oslo.serialization))
+  (let ((base (package-with-python2 (strip-python2-variant
+                                     python-oslo.serialization))))
+    (package
+      (inherit base)
+      (native-inputs
+       `(("python2-ipaddress" ,python2-ipaddress)
+         ,@(package-native-inputs base))))))
 
 (define-public python-reno
   (package
     (name "python-reno")
-    (version "2.0.3")
+    (version "2.7.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "reno" version))
         (sha256
-          (base32 "1i2wnn5fnm3jm5774pahg000q0lma5i913hml91bbbm2mybphndd"))))
+          (base32 "0gwzi5dvacqx43smxl3rd1z33npn7gfhm50bvgmq90fib2q431wc"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -554,33 +583,27 @@ in transmittable and storable formats, such as JSON and MessagePack.")
              ;; reno expects a git repo
              (zero? (system* "git" "init")))))))
     (propagated-inputs
-      `(("python-babel" ,python-babel)
-        ("python-dulwich" ,python-dulwich)
+      `(("python-dulwich" ,python-dulwich)
+        ("python-pbr" ,python-pbr)
         ("python-pyyaml" ,python-pyyaml)
         ("python-six" ,python-six)))
     (native-inputs
       `(("python-testtools" ,python-testtools)
-        ("python-pbr" ,python-pbr)
         ("python-testscenarios" ,python-testscenarios)
         ("python-testrepository" ,python-testrepository)
         ("python-mock" ,python-mock)
-        ("python-oslotest" ,python-oslotest)
+        ("python-docutils" ,python-docutils)
+        ("python-sphinx" ,python-sphinx)
         ("gnupg" ,gnupg)
         ("git" ,git)))
     (home-page "http://docs.openstack.org/developer/reno/")
     (synopsis "Release notes manager")
     (description "Reno is a tool for storing release notes in a git repository
 and building documentation from them.")
-    (properties `((python2-variant . ,(delay python2-reno))))
     (license asl2.0)))
 
 (define-public python2-reno
-  (package (inherit (package-with-python2
-                     (strip-python2-variant python-reno)))
-           (arguments
-            `(#:python ,python-2
-              ;; FIXME: 'subunit.run discover: error: no such option: --list'
-              #:tests? #f))))
+  (package-with-python2 python-reno))
 
 (define-public python-oslosphinx
   (package
@@ -623,65 +646,49 @@ from the OpenStack project.")
 (define-public python-oslotest
   (package
     (name "python-oslotest")
-    (version "1.10.0")
+    (version "3.2.0")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-               "https://pypi.python.org/packages/source/o/oslotest/oslotest-"
-               version
-               ".tar.gz"))
+        (uri (pypi-uri "oslotest" version))
         (sha256
           (base32
-            "0l3ny48ddz5xbf0v4r0jv1yhbdzinc2vy0lybhdkmx3xy0b886fs"))))
+            "1xay6wjxzqm4bg87fahqas84dhvhgf1gghzldkcczsfx897mqdkh"))))
     (build-system python-build-system)
     (propagated-inputs
       `(("python-fixtures" ,python-fixtures)
         ("python-mock" ,python-mock)
         ("python-mox3" ,python-mox3)
-        ("python-six" ,python-six)))
-    (native-inputs
-      `(("python-pbr" ,python-pbr)
         ("python-os-client-config" ,python-os-client-config)
+        ("python-six" ,python-six)
         ("python-subunit" ,python-subunit)
         ("python-testrepository" ,python-testrepository)
-        ("python-testscenarios" ,python-testscenarios)
         ("python-testtools" ,python-testtools)))
+    (native-inputs
+      `(("python-pbr" ,python-pbr)
+        ("python-testscenarios" ,python-testscenarios)))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo test framework")
     (description
       "The Oslo Test framework provides common fixtures, support for debugging,
 and better support for mocking results.")
-    (properties `((python2-variant . ,(delay python2-oslotest))))
     (license asl2.0)))
 
 (define-public python2-oslotest
-  (package (inherit (package-with-python2
-                     (strip-python2-variant python-oslotest)))
-           (arguments
-            `(#:python ,python-2
-              ;; FIXME: 'subunit.run discover: error: no such option: --list'
-              #:tests? #f))))
+  (package-with-python2 python-oslotest))
 
 (define-public python-oslo.utils
   (package
     (name "python-oslo.utils")
-    (version "3.0.0")
+    (version "3.35.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "oslo.utils" version))
         (sha256
           (base32
-           "1c4jrbvfs4hs37fics8frqlyhmsv7v92ncv2cpbm0av9x0ic6pnj"))
-        (snippet
-         '(begin
-            ;; FIXME: setuptools fails to import this file during the test
-            ;; phase.
-            (delete-file "oslo_utils/tests/test_netutils.py")))))
+           "1ai9yyasyh1563khsri6ryk6iqdprmyiashg377m9h4nmv700ybx"))))
     (build-system python-build-system)
-    (arguments
-     '(#:tests? #f)) ; FIXME: Requires oslo.config >= 2.7.0.
     (propagated-inputs
       `(("python-debtcollector" ,python-debtcollector)
         ("python-oslo.i18n" ,python-oslo.i18n)
@@ -689,18 +696,21 @@ and better support for mocking results.")
         ("python-monotonic" ,python-monotonic)
         ("python-netaddr" ,python-netaddr)
         ("python-netifaces" ,python-netifaces)
+        ("python-pyparsing" ,python-pyparsing)
         ("python-pytz" ,python-pytz)
         ("python-six" ,python-six)))
     (native-inputs
-      `(("python-babel" ,python-babel)
-        ("python-pbr" ,python-pbr)
+      `(("python-pbr" ,python-pbr)
         ;; Tests.
         ("python-bandit" ,python-bandit)
+        ("python-ddt" ,python-ddt)
+        ("python-fixtures" ,python-fixtures)
         ("python-oslo.config" ,python-oslo.config)
         ("python-oslotest" ,python-oslotest)
         ("python-mock" ,python-mock)
-        ("python-mox3" ,python-mox3)
-        ("python-testscenarios" ,python-testscenarios)))
+        ("python-testrepository" ,python-testrepository)
+        ("python-testscenarios" ,python-testscenarios)
+        ("python-testtools" ,python-testtools)))
     (home-page "https://launchpad.net/oslo")
     (synopsis "Oslo utility library")
     (description
@@ -827,25 +837,16 @@ data that best fit this type of storage model are virtual machine images, photo
 storage, email storage and backup archiving.  Having no central \"brain\" or
 master point of control provides greater scalability, redundancy and
 permanence.")
-  (license asl2.0)))
+    (properties `((python2-variant . ,(delay python2-swiftclient))))
+    (license asl2.0)))
 
 (define-public python2-swiftclient
-  (let ((swiftclient (package-with-python2 python-swiftclient)))
+  (let ((swiftclient (package-with-python2
+                      (strip-python2-variant python-swiftclient))))
     (package (inherit swiftclient)
-      (arguments
-       `(#:python ,python-2
-         ;; FIXME: subunit.run discover: error: no such option: --list
-         #:tests? #f))
       (propagated-inputs
        `(("python2-futures" ,python2-futures)
-         ("python2-requests" ,python2-requests)
-         ,@(alist-delete "python-requests"
-                         (package-propagated-inputs swiftclient))))
-      (native-inputs
-       `(("python2-keystoneclient" ,python2-keystoneclient)
-         ("python2-oslosphinx" ,python2-oslosphinx)
-         ,@(fold alist-delete (package-native-inputs swiftclient)
-            '("python-keystoneclient" "python-oslosphinx")))))))
+         ,@(package-propagated-inputs swiftclient))))))
 
 (define-public python-git-review
   (package
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 32a7a30e7a..6ec70b12fe 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -791,14 +791,23 @@ on top of GNU Guix.")
 (define-public gcab
   (package
     (name "gcab")
-    (version "1.0")
+    (version "1.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
                                   version "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1ji8j8pnxqaycbp9ydi2zq7gcr02c2vw4qnc198i6jwy9zkh2x19"))))
+                "0l19sr6pg0cfcddmi5n79d08mjjbhn427ip5jlsy9zddq9r24aqr"))
+              ;; gcab 1.1 has a hard dependency on git — even when building
+              ;; from a tarball.  Remove it early so ‘guix environment gcab’
+              ;; can actually build what ‘guix build --source gcab’ returns.
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (substitute* "meson.build"
+                    (("git_version = .*$") "git_version = []\n"))
+                  #t))))
     (build-system meson-build-system)
     (native-inputs
      `(("glib:bin" ,glib "bin")         ; for glib-mkenums
diff --git a/gnu/packages/password-utils.scm b/gnu/packages/password-utils.scm
index f83c05a25b..96a51f0dd4 100644
--- a/gnu/packages/password-utils.scm
+++ b/gnu/packages/password-utils.scm
@@ -9,13 +9,14 @@
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Konrad Hinsen <konrad.hinsen@fastmail.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,6 +45,8 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages crypto)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
@@ -89,7 +92,7 @@ human.")
 (define-public keepassxc
   (package
     (name "keepassxc")
-    (version "2.2.4")
+    (version "2.3.0")
     (source
      (origin
        (method url-fetch)
@@ -98,10 +101,17 @@ human.")
                            version "-src.tar.xz"))
        (sha256
         (base32
-         "1pfkq1m5vb90kx67vyw70s1hc4ivjsvq2535vm6wdwwsncna6bz5"))))
+         "1v6v59fnbbsssbwy4is6hh2l4qqwy3ddb6dp2jk8clx0xbd5hn7c"))))
     (build-system cmake-build-system)
+    (arguments
+     '(#:configure-flags '("-DWITH_XC_NETWORKING=YES"
+                           "-DWITH_XC_BROWSER=YES"
+                           "-DWITH_XC_SSHAGENT=YES")))
     (inputs
-     `(("libgcrypt" ,libgcrypt)
+     `(("argon2" ,argon2)
+       ("curl" ,curl) ; XC_NETWORKING
+       ("libgcrypt" ,libgcrypt)
+       ("libsodium" ,libsodium) ; XC_BROWSER
        ("libxi" ,libxi)
        ("libxtst" ,libxtst)
        ("qtbase" ,qtbase)
@@ -271,7 +281,7 @@ random passwords that pass the checks.")
 (define-public assword
   (package
     (name "assword")
-    (version "0.10")
+    (version "0.11")
     (source (origin
               (method url-fetch)
               (uri (list
@@ -280,7 +290,7 @@ random passwords that pass the checks.")
                      "assword_" version ".orig.tar.gz")))
               (sha256
                (base32
-                "0l6170y6my1gprqkazvzabgjkrkr9v2q7z48vjflna4r323yqira"))))
+                "03gkb6kvsghznbcw5l7nmrc6mn3ixkjd5jcs96ni4zs9l47jf7yp"))))
     (arguments
      `(;; irritatingly, tests do run but not there are two problems:
        ;;  - "import gtk" fails for unknown reasons here despite it the
@@ -603,3 +613,31 @@ password hash types most commonly found on various Unix systems, supported out
 of the box are Windows LM hashes, plus lots of other hashes and ciphers.  This
 is the community-enhanced, \"jumbo\" version of John the Ripper.")
       (license license:gpl2+))))
+
+(define-public sala
+  (package
+    (name "sala")
+    (version "1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sala" version))
+       (sha256
+        (base32
+         "13qgmc3i2a0cqp8jqrfl93lnphfagb32pgfikc1gza2a14asxzi8"))))
+    (build-system python-build-system)
+    (arguments
+     ;; Sala is supposed to work with Python 3.2 or higher,
+     ;; but it doesn't work with Python 3.6. Better stick
+     ;; to Python 2, which works fine.
+     `(#:python ,python-2))
+    (propagated-inputs
+     `(("gnupg" ,gnupg)
+       ("pwgen" ,pwgen)))
+    (home-page "http://www.digip.org/sala/")
+    (synopsis "Encrypted plaintext password store")
+    (description
+     "Store passwords and other bits of sensitive plain-text information
+to encrypted files on a directory hierarchy.  The information is protected
+by GnuPG's symmetrical encryption.")
+    (license license:expat)))
diff --git a/gnu/packages/patches/dblatex-remove-multirow.patch b/gnu/packages/patches/dblatex-remove-multirow.patch
deleted file mode 100644
index 62d1c64e08..0000000000
--- a/gnu/packages/patches/dblatex-remove-multirow.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-This patch is needed to fix dblatex with newer versions of TeX Live.
-It was taken from https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=840189
-
---- a/latex/style/dbk_table.sty	Sun Oct 02 23:21:03 2016 +0200
-+++ b/latex/style/dbk_table.sty	Mon Oct 10 21:31:00 2016 +0200
-@@ -9,7 +9,6 @@
- \usepackage{longtable}
- \usepackage{lscape}
- \usepackage{colortbl}
--\usepackage{multirow}
- \usepackage{calc}
- \usepackage{hhline}
-
-@@ -21,16 +20,6 @@
-   \expandafter[\expandafter3\expandafter]\expandafter{%
-   \multicolumn{#1}{#2}{#3}}
-
--% Make \@xmultirow long
--\expandafter\long\expandafter\def%
--\expandafter\@xmultirow%
--\expandafter#\expandafter1%
--\expandafter[\expandafter#\expandafter2\expandafter]%
--\expandafter#\expandafter3%
--\expandafter[\expandafter#\expandafter4\expandafter]%
--\expandafter#\expandafter5%
--\expandafter{\@xmultirow{#1}[#2]{#3}[#4]{#5}}
--
- % For the newtbl code
- \newdimen\newtblstarfactor%
- \newdimen\newtblsparewidth%
diff --git a/gnu/packages/patches/dovecot-CVE-2017-15132.patch b/gnu/packages/patches/dovecot-CVE-2017-15132.patch
deleted file mode 100644
index 32666b8557..0000000000
--- a/gnu/packages/patches/dovecot-CVE-2017-15132.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Fix CVE-2017-15132:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15132
-
-Patch copied from upstream source repository:
-
-https://github.com/dovecot/core/commit/1a29ed2f96da1be22fa5a4d96c7583aa81b8b060
-
-From 1a29ed2f96da1be22fa5a4d96c7583aa81b8b060 Mon Sep 17 00:00:00 2001
-From: Timo Sirainen <timo.sirainen@dovecot.fi>
-Date: Mon, 18 Dec 2017 16:50:51 +0200
-Subject: [PATCH] lib-auth: Fix memory leak in auth_client_request_abort()
-
-This caused memory leaks when authentication was aborted. For example
-with IMAP:
-
-a AUTHENTICATE PLAIN
-*
-
-Broken by 9137c55411aa39d41c1e705ddc34d5bd26c65021
----
- src/lib-auth/auth-client-request.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/lib-auth/auth-client-request.c b/src/lib-auth/auth-client-request.c
-index 480fb42b30..046f7c307d 100644
---- a/src/lib-auth/auth-client-request.c
-+++ b/src/lib-auth/auth-client-request.c
-@@ -186,6 +186,7 @@ void auth_client_request_abort(struct auth_client_request **_request)
- 
- 	auth_client_send_cancel(request->conn->client, request->id);
- 	call_callback(request, AUTH_REQUEST_STATUS_ABORT, NULL, NULL);
-+	pool_unref(&request->pool);
- }
- 
- unsigned int auth_client_request_get_id(struct auth_client_request *request)
diff --git a/gnu/packages/patches/guile-linux-syscalls.patch b/gnu/packages/patches/guile-linux-syscalls.patch
index 69970a3e60..12cddff47b 100644
--- a/gnu/packages/patches/guile-linux-syscalls.patch
+++ b/gnu/packages/patches/guile-linux-syscalls.patch
@@ -3,17 +3,21 @@ This patch adds bindings to Linux syscalls for which glibc has symbols.
 Using the FFI would have been nice, but that's not an option when using
 a statically-linked Guile in an initrd that doesn't have libc.so around.
 
---- guile-2.0.11/libguile/posix.c.orig	2014-02-28 15:01:27.000000000 -0500
-+++ guile-2.0.11/libguile/posix.c	2015-06-21 14:28:23.624251038 -0400
-@@ -2245,6 +2245,295 @@
+diff --git a/libguile/posix.c b/libguile/posix.c
+index b0fcad5fd..1343186e3 100644
+--- a/libguile/posix.c
++++ b/libguile/posix.c
+@@ -2341,6 +2341,335 @@ scm_init_popen (void)
  }
- #endif
+ #endif /* HAVE_START_CHILD */
  
 +
 +/* Linux! */
 +#ifdef __linux__
 +
 +#include <sys/mount.h>
++#include <sys/syscall.h>
++
 +#include "libguile/foreign.h"
 +#include "libguile/bytevectors.h"
 +
@@ -91,6 +95,16 @@ a statically-linked Guile in an initrd that doesn't have libc.so around.
 +   ARGS, a space-separated list of options.  */
 +extern long init_module (void *module, unsigned long len, const char *args);
 +
++/* Load a kernel module from FD.  FLAGS must be a bitwise or of
++   MODULE_INIT_* constants.  The GNU libc doesn't provide a wrapper for
++   this one so we use 'syscall'.  */
++static int
++finit_module (int fd, const char *args, int flags)
++{
++  return syscall (SYS_finit_module, fd, args, flags);
++}
++
++
 +SCM_DEFINE (scm_load_linux_module, "load-linux-module", 1, 1, 0,
 +	    (SCM data, SCM options),
 +	    "Load the Linux kernel module whose contents are in bytevector "
@@ -121,6 +135,34 @@ a statically-linked Guile in an initrd that doesn't have libc.so around.
 +}
 +#undef FUNC_NAME
 +
++SCM_DEFINE (scm_load_linux_module_fd, "load-linux-module/fd", 1, 2, 0,
++	    (SCM fd, SCM options, SCM flags),
++	    "Load the Linux kernel module from the file at FD, "
++	    "with the arguments from the OPTIONS string, and "
++            "optionally the given FLAGS.")
++#define FUNC_NAME s_scm_load_linux_module_fd
++{
++  long err;
++  int c_fd, c_flags;
++  char *c_options;
++
++  c_fd = scm_to_int (fd);
++  c_options =
++    scm_to_locale_string (SCM_UNBNDP (options) ? scm_nullstr : options);
++  c_flags = SCM_UNBNDP (flags) ? 0 : scm_to_int (flags);
++
++  err = finit_module (c_fd, c_options, c_flags);
++
++  free (c_options);
++
++  if (err != 0)
++    SCM_SYSERROR;
++
++  return SCM_UNSPECIFIED;
++}
++#undef FUNC_NAME
++
++
 +/* Rebooting, halting, and all that.  */
 +
 +#include <sys/reboot.h>
diff --git a/gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch b/gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch
deleted file mode 100644
index b2ff43c0d3..0000000000
--- a/gnu/packages/patches/perl-gd-options-passthrough-and-fontconfig.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-This patch (adapted from nixpkgs for Build.PL) configures Getopt::Long to pass
-options so they will be available at the second GetOptions call.
-
-Also an option to specify the search path for libfontconfig is added.
-
---- GD-2.56/Build.PL	2014-10-27 20:34:54.000000000 -0500
-+++ GD-2.56/Build.PL	2015-02-22 10:08:12.569973657 -0600
-@@ -2,14 +2,14 @@
- 
- use strict;
- use Module::Build;
--use Getopt::Long;
-+use Getopt::Long qw(:config pass_through);
- use Config;
- 
- # =====> PATHS: CHECK AND ADJUST <=====
- my (@INC,@LIBPATH,@LIBS);
- my $AUTOCONFIG = 0;      # global set by try_to_autoconfigure() below
- 
--my ($options,$lib_gd_path,$lib_ft_path,$lib_png_path,$lib_jpeg_path,$lib_xpm_path,$lib_zlib_path);
-+my ($options,$lib_gd_path,$lib_ft_path,$lib_png_path,$lib_jpeg_path,$lib_xpm_path,$lib_zlib_path,$lib_fontconfig_path);
- 
- unless (try_to_autoconfigure(\$options,\$lib_gd_path,\@INC,\@LIBPATH,\@LIBS)) {
-     die <<END;
-@@ -38,6 +38,7 @@
- 			"lib_jpeg_path=s" => \$lib_jpeg_path,
- 			"lib_xpm_path=s"  => \$lib_xpm_path,
- 			"lib_zlib_path=s" => \$lib_zlib_path,
-+			"lib_fontconfig_path=s" => \$lib_fontconfig_path,
- 		       );
- unless ($result) {
-   die <<END;
-@@ -53,6 +54,7 @@
-      -lib_jpeg_path path            path to libjpeg
-      -lib_xpm_path  path            path to libxpm
-      -lib_zlib_path path            path to libpng
-+     -lib_fontconfig_path path      path to fontconfig
-      -ignore_missing_gd             Ignore missing or old libgd installations and try to compile anyway
- 
- If no options are passed on the command line.  The program will
-@@ -100,6 +102,12 @@
-     @INC     = ("-I$lib_zlib_path/include", @INC);
-     @LIBPATH = ("-L$lib_zlib_path/lib", @LIBPATH); 
- }
-+if( defined($lib_fontconfig_path) ) 
-+{
-+    print "Fontconfig library used from:     $lib_fontconfig_path\n";
-+    @INC     = ("-I$lib_fontconfig_path/include", @INC);
-+    @LIBPATH = ("-L$lib_fontconfig_path/lib", @LIBPATH); 
-+}
- #############################################################################################
- 
- if ($^O eq 'VMS'){
diff --git a/gnu/packages/patches/python-mox3-python3.6-compat.patch b/gnu/packages/patches/python-mox3-python3.6-compat.patch
new file mode 100644
index 0000000000..0426d07cf9
--- /dev/null
+++ b/gnu/packages/patches/python-mox3-python3.6-compat.patch
@@ -0,0 +1,43 @@
+Fix regex so that it works with Python 3.6.
+
+See <https://docs.python.org/3/library/re.html#re.LOCALE>.
+
+Copied from upstream bug report:
+https://bugs.launchpad.net/python-mox3/+bug/1665266
+
+From 05064cdb6ea7a16450c6beae2b6f7c6074212a69 Mon Sep 17 00:00:00 2001
+From: Zac Medico <zmedico@gentoo.org>
+Date: Thu, 16 Feb 2017 00:24:10 -0800
+Subject: [PATCH] RegexTest: python3.6 compatibility
+
+These fixes are backward-compatible with older python versions:
+
+* raw strings fix invalid escape sequences
+* flags=8 fixes ValueError: cannot use LOCALE flag with a str pattern
+---
+ mox3/tests/test_mox.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/mox3/tests/test_mox.py b/mox3/tests/test_mox.py
+index 15ac565..3a1af17 100644
+--- a/mox3/tests/test_mox.py
++++ b/mox3/tests/test_mox.py
+@@ -312,12 +312,12 @@ class RegexTest(testtools.TestCase):
+     def testReprWithoutFlags(self):
+         """repr should return the regular expression pattern."""
+         self.assertTrue(
+-            repr(mox.Regex(r"a\s+b")) == "<regular expression 'a\s+b'>")
++            repr(mox.Regex(r"a\s+b")) == r"<regular expression 'a\s+b'>")
+ 
+     def testReprWithFlags(self):
+         """repr should return the regular expression pattern and flags."""
+-        self.assertTrue(repr(mox.Regex(r"a\s+b", flags=4)) ==
+-                        "<regular expression 'a\s+b', flags=4>")
++        self.assertTrue(repr(mox.Regex(r"a\s+b", flags=8)) ==
++                        r"<regular expression 'a\s+b', flags=8>")
+ 
+ 
+ class IsTest(testtools.TestCase):
+-- 
+2.10.2
+
diff --git a/gnu/packages/patches/python-parse-too-many-fields.patch b/gnu/packages/patches/python-parse-too-many-fields.patch
deleted file mode 100644
index 9db6b91a7f..0000000000
--- a/gnu/packages/patches/python-parse-too-many-fields.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 32f15cfefb7c7b6476360ac65cba807aa3dfccfa Mon Sep 17 00:00:00 2001
-From: David King <dking@redhat.com>
-Date: Mon, 14 Dec 2015 09:58:19 +0000
-Subject: [PATCH] Fix test_too_many_fields with Python 3.5
-
-taken from https://github.com/r1chardj0n3s/parse/pull/34
-
-Python versions before 3.5 had a limit of 100 groups in regular
-expressions. This limit was removed during 3.5 development:
-
-http://bugs.python.org/issue22437
-https://hg.python.org/cpython/rev/0b85ea4bd1af
-
-The test_too_many_fields test asserts that the limit exists by
-attempting to parse a string with 15 fields, which triggers the 100
-named groups limit.
-
-Adjust the test so that if first checks to see whether the limit of 100
-named groups exists, and only assert that parsing 15 fields fails if
-that is the case.
----
- test_parse.py | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/test_parse.py b/test_parse.py
-index c524349..1d50568 100755
---- a/test_parse.py
-+++ b/test_parse.py
-@@ -6,6 +6,7 @@
- 
- import unittest
- from datetime import datetime, time
-+import re
- 
- import parse
- 
-@@ -624,8 +625,13 @@ def test_mixed_type_variant(self):
-         self.assertEqual(r.fixed[21], 'spam')
- 
-     def test_too_many_fields(self):
--        p = parse.compile('{:ti}' * 15)
--        self.assertRaises(parse.TooManyFields, p.parse, '')
-+        # Python 3.5 removed the limit of 100 named groups in a regular expression,
-+        # so only test for the exception if the limit exists.
-+        try:
-+            re.compile("".join("(?P<n{n}>{n}-)".format(n=i) for i in range(101)))
-+        except AssertionError:
-+            p = parse.compile('{:ti}' * 15)
-+            self.assertRaises(parse.TooManyFields, p.parse, '')
- 
- 
- class TestSearch(unittest.TestCase):
diff --git a/gnu/packages/patches/wavpack-CVE-2018-6767.patch b/gnu/packages/patches/wavpack-CVE-2018-6767.patch
new file mode 100644
index 0000000000..f49a8f0fd6
--- /dev/null
+++ b/gnu/packages/patches/wavpack-CVE-2018-6767.patch
@@ -0,0 +1,119 @@
+Fix CVE-2018-6767:
+https://nvd.nist.gov/vuln/detail/CVE-2018-6767
+https://security-tracker.debian.org/tracker/CVE-2018-6767
+
+Patch copied from upstream source repository:
+https://github.com/dbry/WavPack/commit/d5bf76b5a88d044a1be1d5656698e3ba737167e5
+
+From d5bf76b5a88d044a1be1d5656698e3ba737167e5 Mon Sep 17 00:00:00 2001
+From: David Bryant <david@wavpack.com>
+Date: Sun, 4 Feb 2018 11:28:15 -0800
+Subject: [PATCH] issue #27, do not overwrite stack on corrupt RF64 file
+
+---
+ cli/riff.c | 39 ++++++++++++++++++++++++++++++++-------
+ 1 file changed, 32 insertions(+), 7 deletions(-)
+
+diff --git a/cli/riff.c b/cli/riff.c
+index 8b1af45..de98c1e 100644
+--- a/cli/riff.c
++++ b/cli/riff.c
+@@ -42,6 +42,7 @@ typedef struct {
+ 
+ #pragma pack(pop)
+ 
++#define CS64ChunkFormat "4D"
+ #define DS64ChunkFormat "DDDL"
+ 
+ #define WAVPACK_NO_ERROR    0
+@@ -101,13 +102,13 @@ int ParseRiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpack
+ 
+         if (!strncmp (chunk_header.ckID, "ds64", 4)) {
+             if (chunk_header.ckSize < sizeof (DS64Chunk) ||
+-                !DoReadFile (infile, &ds64_chunk, chunk_header.ckSize, &bcount) ||
+-                bcount != chunk_header.ckSize) {
++                !DoReadFile (infile, &ds64_chunk, sizeof (DS64Chunk), &bcount) ||
++                bcount != sizeof (DS64Chunk)) {
+                     error_line ("%s is not a valid .WAV file!", infilename);
+                     return WAVPACK_SOFT_ERROR;
+             }
+             else if (!(config->qmode & QMODE_NO_STORE_WRAPPER) &&
+-                !WavpackAddWrapper (wpc, &ds64_chunk, chunk_header.ckSize)) {
++                !WavpackAddWrapper (wpc, &ds64_chunk, sizeof (DS64Chunk))) {
+                     error_line ("%s", WavpackGetErrorMessage (wpc));
+                     return WAVPACK_SOFT_ERROR;
+             }
+@@ -315,10 +316,11 @@ int ParseRiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpack
+ 
+ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples, int qmode)
+ {
+-    int do_rf64 = 0, write_junk = 1;
++    int do_rf64 = 0, write_junk = 1, table_length = 0;
+     ChunkHeader ds64hdr, datahdr, fmthdr;
+     RiffChunkHeader riffhdr;
+     DS64Chunk ds64_chunk;
++    CS64Chunk cs64_chunk;
+     JunkChunk junkchunk;
+     WaveHeader wavhdr;
+     uint32_t bcount;
+@@ -380,6 +382,7 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+     strncpy (riffhdr.formType, "WAVE", sizeof (riffhdr.formType));
+     total_riff_bytes = sizeof (riffhdr) + wavhdrsize + sizeof (datahdr) + ((total_data_bytes + 1) & ~(int64_t)1);
+     if (do_rf64) total_riff_bytes += sizeof (ds64hdr) + sizeof (ds64_chunk);
++    total_riff_bytes += table_length * sizeof (CS64Chunk);
+     if (write_junk) total_riff_bytes += sizeof (junkchunk);
+     strncpy (fmthdr.ckID, "fmt ", sizeof (fmthdr.ckID));
+     strncpy (datahdr.ckID, "data", sizeof (datahdr.ckID));
+@@ -394,11 +397,12 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+ 
+     if (do_rf64) {
+         strncpy (ds64hdr.ckID, "ds64", sizeof (ds64hdr.ckID));
+-        ds64hdr.ckSize = sizeof (ds64_chunk);
++        ds64hdr.ckSize = sizeof (ds64_chunk) + (table_length * sizeof (CS64Chunk));
+         CLEAR (ds64_chunk);
+         ds64_chunk.riffSize64 = total_riff_bytes;
+         ds64_chunk.dataSize64 = total_data_bytes;
+         ds64_chunk.sampleCount64 = total_samples;
++        ds64_chunk.tableLength = table_length;
+         riffhdr.ckSize = (uint32_t) -1;
+         datahdr.ckSize = (uint32_t) -1;
+         WavpackNativeToLittleEndian (&ds64hdr, ChunkHeaderFormat);
+@@ -409,6 +413,14 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+         datahdr.ckSize = (uint32_t) total_data_bytes;
+     }
+ 
++    // this "table" is just a dummy placeholder for testing (normally not written)
++
++    if (table_length) {
++        strncpy (cs64_chunk.ckID, "dmmy", sizeof (cs64_chunk.ckID));
++        cs64_chunk.chunkSize64 = 12345678;
++        WavpackNativeToLittleEndian (&cs64_chunk, CS64ChunkFormat);
++    }
++
+     // write the RIFF chunks up to just before the data starts
+ 
+     WavpackNativeToLittleEndian (&riffhdr, ChunkHeaderFormat);
+@@ -418,8 +430,21 @@ int WriteRiffHeader (FILE *outfile, WavpackContext *wpc, int64_t total_samples,
+ 
+     if (!DoWriteFile (outfile, &riffhdr, sizeof (riffhdr), &bcount) || bcount != sizeof (riffhdr) ||
+         (do_rf64 && (!DoWriteFile (outfile, &ds64hdr, sizeof (ds64hdr), &bcount) || bcount != sizeof (ds64hdr))) ||
+-        (do_rf64 && (!DoWriteFile (outfile, &ds64_chunk, sizeof (ds64_chunk), &bcount) || bcount != sizeof (ds64_chunk))) ||
+-        (write_junk && (!DoWriteFile (outfile, &junkchunk, sizeof (junkchunk), &bcount) || bcount != sizeof (junkchunk))) ||
++        (do_rf64 && (!DoWriteFile (outfile, &ds64_chunk, sizeof (ds64_chunk), &bcount) || bcount != sizeof (ds64_chunk)))) {
++            error_line ("can't write .WAV data, disk probably full!");
++            return FALSE;
++    }
++
++    // again, this is normally not written except for testing
++
++    while (table_length--)
++        if (!DoWriteFile (outfile, &cs64_chunk, sizeof (cs64_chunk), &bcount) || bcount != sizeof (cs64_chunk)) {
++            error_line ("can't write .WAV data, disk probably full!");
++            return FALSE;
++        }
++
++
++    if ((write_junk && (!DoWriteFile (outfile, &junkchunk, sizeof (junkchunk), &bcount) || bcount != sizeof (junkchunk))) ||
+         !DoWriteFile (outfile, &fmthdr, sizeof (fmthdr), &bcount) || bcount != sizeof (fmthdr) ||
+         !DoWriteFile (outfile, &wavhdr, wavhdrsize, &bcount) || bcount != wavhdrsize ||
+         !DoWriteFile (outfile, &datahdr, sizeof (datahdr), &bcount) || bcount != sizeof (datahdr)) {
diff --git a/gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch b/gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch
new file mode 100644
index 0000000000..345101bd3a
--- /dev/null
+++ b/gnu/packages/patches/wxmaxima-do-not-use-old-gnuplot-parameters.patch
@@ -0,0 +1,26 @@
+This fixes the wxplot2d plotting issue found at
+https://github.com/andrejv/wxmaxima/issues/973.
+
+From 5a0693c97ceaa4935b908f1e478126896952f399 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Gunter=20K=C3=B6nigsmann?= <gunter@peterpall.de>
+Date: Mon, 19 Feb 2018 05:37:35 +0100
+Subject: [PATCH] Seems I accidentally made wxMaxima to default to parameters
+ for old gnuplots. Resolves #973
+
+---
+ data/wxmathml.lisp.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/data/wxmathml.lisp.in b/data/wxmathml.lisp.in
+index a32e3fc3..4e19acaf 100644
+--- a/data/wxmathml.lisp.in
++++ b/data/wxmathml.lisp.in
+@@ -43,7 +43,7 @@
+ (defvar $wxsubscripts t
+   "Recognize TeX-style subscripts")
+ (defvar $wxplot_pngcairo nil "Use gnuplot's pngcairo terminal for new plots?")
+-(defmvar $wxplot_old_gnuplot t)
++(defmvar $wxplot_old_gnuplot nil)
+ 
+ (defun $wxstatusbar (status)
+   (format t "<statusbar>~a</statusbar>~%" status))
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index cef42847c6..556d8d31b4 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1341,7 +1341,7 @@ supports XML, YAML, JSON, Apache-style configuration, and Perl code.")
 (define-public perl-config-autoconf
   (package
     (name "perl-config-autoconf")
-    (version "0.309")
+    (version "0.315")
     (source
      (origin
        (method url-fetch)
@@ -1349,7 +1349,7 @@ supports XML, YAML, JSON, Apache-style configuration, and Perl code.")
                            "Config-AutoConf-" version ".tar.gz"))
        (sha256
         (base32
-         "1nqc7calfny12dwfhz7ylsvx55nf69kirdc5dbyvh3sjsqj8yvdq"))))
+         "0h39x9rzrhhilpg8yxlzpka269qrzsjg0iy0c1b9xflqlvhx2g2b"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-capture-tiny" ,perl-capture-tiny)))
@@ -1720,7 +1720,7 @@ indentation and newlines plus sub deparsing.")
 (define-public perl-data-optlist
   (package
     (name "perl-data-optlist")
-    (version "0.109")
+    (version "0.110")
     (source
      (origin
        (method url-fetch)
@@ -1729,7 +1729,7 @@ indentation and newlines plus sub deparsing.")
              version ".tar.gz"))
        (sha256
         (base32
-         "1j44rm2spprlq3bc80cxni3dzs3gfjiqv1qc9q7820n1qj0wgmqw"))))
+         "1hzmgr2imdg1fc3hmwx0d56fhsdfyrgmgx7jb4jkyiv6575ifq9n"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-sub-install" ,perl-sub-install)
@@ -2585,7 +2585,7 @@ based memory management, circular references will cause memory leaks.")
 (define-public perl-devel-globaldestruction
   (package
     (name "perl-devel-globaldestruction")
-    (version "0.13")
+    (version "0.14")
     (source
      (origin
        (method url-fetch)
@@ -2593,7 +2593,7 @@ based memory management, circular references will cause memory leaks.")
                            "Devel-GlobalDestruction-" version ".tar.gz"))
        (sha256
         (base32
-         "0qn4iszgylnxjdkb6430f6a3ci7bcx9ih1az6bd5cbij1pf2965j"))))
+         "1aslj6myylsvzr0vpqry1cmmvzbmpbdcl4v9zrl18ccik7rabf1l"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-sub-exporter-progressive" ,perl-sub-exporter-progressive)))
@@ -3104,7 +3104,7 @@ extensions")
 (define-public perl-extutils-installpaths
   (package
     (name "perl-extutils-installpaths")
-    (version "0.010")
+    (version "0.011")
     (source
      (origin
        (method url-fetch)
@@ -3112,7 +3112,7 @@ extensions")
                            "ExtUtils-InstallPaths-" version ".tar.gz"))
        (sha256
         (base32
-         "0mi1px42in7i442jqncg3gmxd5zn7sw5b2s85h690rz433qvyk6i"))))
+         "0z06y0fhx9hy9x01abb7s2xdbqrh9x4ps7avmlf4bwfwih2gl2bn"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-extutils-config" ,perl-extutils-config)))
@@ -3913,15 +3913,15 @@ variables.")
 (define-public perl-import-into
   (package
     (name "perl-import-into")
-    (version "1.002004")
+    (version "1.002005")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/E/ET/ETHER/"
+       (uri (string-append "mirror://cpan/authors/id/H/HA/HAARG/"
                            "Import-Into-" version ".tar.gz"))
        (sha256
         (base32
-         "110hifk3cj14lxgjq2vaa2qfja21gll4lpn8vbimy0gzqadjbjyy"))))
+         "0rq5kz7c270q33jq6hnrv3xgkvajsc62ilqq7fs40av6zfipg7mx"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-module-runtime" ,perl-module-runtime)))
@@ -4580,7 +4580,7 @@ functionality on lists which is not going to go into List::Util.")
 (define-public perl-list-moreutils-xs
   (package
     (name "perl-list-moreutils-xs")
-    (version "0.426")
+    (version "0.428")
     (source
      (origin
        (method url-fetch)
@@ -4588,7 +4588,7 @@ functionality on lists which is not going to go into List::Util.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "0ss0a0f9yqs7gd9qamhaxq27mvn573ljg28ry1gy2pxbz56byzbc"))))
+         "0bfndmnkqaaf3gffprak143bzplxd69c368jxgr7rzlx88hyd7wx"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-config-autoconf" ,perl-config-autoconf)
@@ -6557,7 +6557,7 @@ up inheritance from those modules at the same time.")
 (define-public perl-path-class
   (package
     (name "perl-path-class")
-    (version "0.35")
+    (version "0.37")
     (source
      (origin
        (method url-fetch)
@@ -6565,7 +6565,7 @@ up inheritance from those modules at the same time.")
                            "Path-Class-" version ".tar.gz"))
        (sha256
         (base32
-         "1viaj8jyshcj135la0kgfgzalaw06xnbsg9h54jx09v1342v69lj"))))
+         "1kj8q8dmd8jci94w5arav59nkp0pkxrkliz4n8n6yf02hsa82iv5"))))
     (build-system perl-build-system)
     (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Path-Class/")
@@ -7861,7 +7861,7 @@ and escapes.")
 (define-public perl-text-diff
   (package
     (name "perl-text-diff")
-    (version "1.44")
+    (version "1.45")
     (source
      (origin
        (method url-fetch)
@@ -7869,7 +7869,7 @@ and escapes.")
                            "Text-Diff-" version ".tar.gz"))
        (sha256
         (base32
-         "041v92zla2acdc433f47giridf6p820sdczs7x5d71fhsyza1xsp"))))
+         "013g13prdghxvrp5754gyc7rmv1syyxrhs33yc5f0lrz3dxs1fp8"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-algorithm-diff" ,perl-algorithm-diff)))
@@ -8041,7 +8041,7 @@ system.")
 (define-public perl-throwable
   (package
     (name "perl-throwable")
-    (version "0.200012")
+    (version "0.200013")
     (source
      (origin
        (method url-fetch)
@@ -8049,7 +8049,7 @@ system.")
                            "Throwable-" version ".tar.gz"))
        (sha256
         (base32
-         "0cy8kza9pd9y5m7k5385asf4xqm54vdqnqm0am10z6j2mrxwr527"))))
+         "184gdcwxqwnkrx5md968v1ny70pq6blzpkihccm3bpdxnpgd11wr"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-devel-stacktrace" ,perl-devel-stacktrace)))
@@ -8647,7 +8647,7 @@ built-in.")
 (define-public perl-variable-magic
   (package
     (name "perl-variable-magic")
-    (version "0.61")
+    (version "0.62")
     (source
      (origin
        (method url-fetch)
@@ -8655,7 +8655,7 @@ built-in.")
                            "Variable-Magic-" version ".tar.gz"))
        (sha256
         (base32
-         "1mx6z36c3wk61x6lag6kyws5g1cba68cw20vrb92wan7ahpfkbxq"))))
+         "0p31dclnj47k4hj35rzay9pzxasl3gq46kzwqalhdw1kgr8ii6iz"))))
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Variable-Magic/")
     (synopsis "Associate user-defined magic to variables from Perl")
@@ -8721,15 +8721,15 @@ neither visible nor modifiable from Perl space).")
 (define-public perl-yaml
   (package
     (name "perl-yaml")
-    (version "1.23")
+    (version "1.24")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/I/IN/INGY/"
+       (uri (string-append "mirror://cpan/authors/id/T/TI/TINITA/"
                            "YAML-" version ".tar.gz"))
        (sha256
         (base32
-         "0kf8mllrgnrmlvjijxc6srjj1y9i8rik5jpjvm8jh4yx70h9gn1a"))))
+         "1dpzgnjbd8yvf94vf45cmyj5bc6vrm6bchhx9xqwxqd5f9d093dm"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-yaml" ,perl-test-yaml)))
@@ -8742,7 +8742,7 @@ on the YAML 1.0 specification.")
 (define-public perl-yaml-libyaml
   (package
     (name "perl-yaml-libyaml")
-    (version "0.65")
+    (version "0.69")
     (source
      (origin
        (method url-fetch)
@@ -8752,7 +8752,7 @@ on the YAML 1.0 specification.")
              ".tar.gz"))
        (sha256
         (base32
-         "0izhvz8f29x1f50hhwfgm0iq1lz7apjjvg77lmky949jr07hnwfv"))))
+         "06msvj3vmjszl5zj1k7g47ll0kkds9gdb5sky0q27lh4zw1vlj33"))))
     (build-system perl-build-system)
     (home-page
      "http://search.cpan.org/dist/YAML-LibYAML/")
@@ -8961,7 +8961,7 @@ files, using JSON::PP and/or CPAN::Meta::YAML.")
 (define-public perl-scalar-list-utils
   (package
     (name "perl-scalar-list-utils")
-    (version "1.47")
+    (version "1.50")
     (source
      (origin
        (method url-fetch)
@@ -8969,7 +8969,7 @@ files, using JSON::PP and/or CPAN::Meta::YAML.")
                            "Scalar-List-Utils-" version ".tar.gz"))
        (sha256
         (base32
-         "1qgg6zxqwziva5j1k5gjks4xmhmgklm551ni3zb74sd9f9rk90y4"))))
+         "0x9n0617gjjcqa4nk5biiwkxdi90xpdfg6z07gjr009qjg3bkah6"))))
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Scalar-List-Utils/")
     (synopsis "Common Scalar and List utility subroutines")
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index e41131fcda..758ed3f6f1 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -46,6 +47,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages man)
@@ -67,14 +69,14 @@
 (define-public libraw
   (package
     (name "libraw")
-    (version "0.18.7")
+    (version "0.18.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.libraw.org/data/LibRaw-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0wap67mb03fl2himbs20yncnnrr71mszsfm2v4spks58c714gqw7"))))
+                "1qi0fkw2zmd0yplrf79z7lgpz0hxl45dj5rdgpaj7283jzys9b2n"))))
     (build-system gnu-build-system)
     (home-page "https://www.libraw.org")
     (synopsis "Raw image decoder")
@@ -465,3 +467,57 @@ user interface.  It can be used to assemble a mosaic of photographs into
 a complete panorama and stitch any series of overlapping pictures.")
     (license license:gpl2+)))
 
+(define-public rawtherapee
+  (package
+    (name "rawtherapee")
+    (version "5.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://rawtherapee.com/shared/source/"
+                                  "rawtherapee-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1y1ygxqmqfp4zg8rcgrlfdc1597cyr5zqgp5zjpldhvwdfa9r5cp"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f ; no test suite
+       #:configure-flags
+       (list (string-append "-DLENSFUNDBDIR="
+                            (assoc-ref %build-inputs "lensfun")
+                            "/share/lensfun")
+             "-DCMAKE_BUILD_TYPE=release"
+             ; Don't optimize the build for the host machine. See the file
+             ; 'ProcessorTargets.cmake' in the source distribution for more
+             ; information.
+             "-DPROC_TARGET_NUMBER=1"
+             ; These flags are recommended by upstream for distributed packages.
+             ; See the file 'RELEASE_NOTES.txt' in the source distribution.
+             "-O3"
+             "-DCACHE_NAME_SUFFIX=\"\"")))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("expat" ,expat)
+       ("fftw" ,fftwf)
+       ("glib" ,glib)
+       ("glibmm" ,glibmm)
+       ("gtk+" ,gtk+)
+       ("gtkmm" ,gtkmm)
+       ("lcms" ,lcms)
+       ("lensfun" ,lensfun)
+       ("libcanberra" ,libcanberra)
+       ("libiptcdata" ,libiptcdata)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libsigc++" ,libsigc++)
+       ("libtiff" ,libtiff)
+       ("zlib" ,zlib)))
+    (home-page "http://rawtherapee.com")
+    (synopsis "Raw image developing and processing")
+    (description "RawTherapee is a raw image processing suite.  It comprises a
+subset of image editing operations specifically aimed at non-destructive raw
+photo post-production and is primarily focused on improving a photographer's
+workflow by facilitating the handling of large numbers of images.  Most raw
+formats are supported, including Pentax Pixel Shift, Canon Dual-Pixel, and those
+from Foveon and X-Trans sensors.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/polkit.scm b/gnu/packages/polkit.scm
index 0e38dd61ee..a3dbc4ff79 100644
--- a/gnu/packages/polkit.scm
+++ b/gnu/packages/polkit.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Huang Ying <huang.ying.caritas@gmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -77,7 +78,8 @@
                  ;; Set the setuid helper's real location.
                  (substitute* "src/polkitagent/polkitagentsession.c"
                    (("PACKAGE_PREFIX \"/lib/polkit-1/polkit-agent-helper-1\"")
-                    "\"/run/setuid-programs/polkit-agent-helper-1\""))))))
+                    "\"/run/setuid-programs/polkit-agent-helper-1\""))
+                 #t))))
     (build-system gnu-build-system)
     (inputs
      `(("expat" ,expat)
@@ -105,7 +107,8 @@
                 (("@INTROSPECTION_GIRDIR@")
                  (string-append out "/share/gir-1.0/"))
                 (("@INTROSPECTION_TYPELIBDIR@")
-                 (string-append out "/lib/girepository-1.0/"))))))
+                 (string-append out "/lib/girepository-1.0/")))
+              #t)))
          (replace
           'install
           (lambda* (#:key outputs (make-flags '()) #:allow-other-keys)
@@ -113,13 +116,13 @@
             ;; to install in /etc, and to instead install the skeletons in the
             ;; output directory.
             (let ((out (assoc-ref outputs "out")))
-             (zero? (apply system*
-                           "make" "install"
+             (apply invoke "make" "install"
                            (string-append "sysconfdir=" out "/etc")
                            (string-append "polkit_actiondir="
                                           out "/share/polkit-1/actions")
-                           make-flags))))))))
-    (home-page "http://www.freedesktop.org/wiki/Software/polkit/")
+                           make-flags)
+             #t))))))
+    (home-page "https://www.freedesktop.org/wiki/Software/polkit/")
     (synopsis "Authorization API for privilege management")
     (description "Polkit is an application-level toolkit for defining and
 handling the policy that allows unprivileged processes to speak to
@@ -183,5 +186,5 @@ easily with PolicyKit.")
     (description "PolicyKit-gnome provides a D-Bus session bus service
 that is used to bring up authentication dialogs used for obtaining
 privileges.")
-    (home-page "http://www.freedesktop.org/wiki/Software/polkit/")
+    (home-page "https://www.freedesktop.org/wiki/Software/polkit/")
     (license lgpl2.0+)))
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index 9cfbe54b46..2721c231c3 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -220,7 +220,7 @@ sound server.")
     (native-inputs
      `(("intltool" ,intltool)
        ("pkg-config" ,pkg-config)))
-    (home-page "http://freedesktop.org/software/pulseaudio/pavucontrol/")
+    (home-page "https://www.freedesktop.org/software/pulseaudio/pavucontrol/")
     (synopsis "PulseAudio volume control")
     (description
      "PulseAudio Volume Control (pavucontrol) provides a GTK+
diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 219b7f9fe2..47fc5cd63a 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -165,14 +165,14 @@ both of which are installed automatically if you install this library.")
 (define-public python-html5lib
   (package
     (name "python-html5lib")
-    (version "1.0b10")
+    (version "1.0.1")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "html5lib" version))
         (sha256
           (base32
-            "1yd068a5c00wd0ajq0hqimv7fd82lhrw0w3s01vbhy9bbd6xapqd"))))
+            "0dipzfrycv6j1jw82v9b7d8lzggx3x8xngx6l4xrqkxwvg7hvjv6"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-six" ,python-six)
@@ -241,13 +241,13 @@ C, yielding parse times that can be a thirtieth of the html5lib parse times.")
 (define-public python-webencodings
   (package
     (name "python-webencodings")
-    (version "0.5")
+    (version "0.5.1")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "webencodings" version))
               (sha256
                (base32
-                "015rw7662lkpb9aqiqah2hbizk6w531badqwjpz41rr47glmxid5"))))
+                "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
     (build-system python-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index d2c2c0b266..ce56e72847 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -448,14 +448,14 @@ instead of @command{python3}.")))
 (define-public python-psutil
   (package
     (name "python-psutil")
-    (version "4.3.0")
+    (version "5.4.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "psutil" version))
        (sha256
         (base32
-         "1w4r09fvn6kd80m5mx4ws1wz100brkaq6hzzpwrns8cgjzjpl6c6"))))
+         "063v69x7spyclyaxrd3gmzj3p16q5ayg97xqhwb1kyn22a9pwip2"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: some tests does not return and times out.
@@ -470,10 +470,16 @@ limiting process resources and management of running processes.  It implements
 many functionalities offered by command line tools such as: ps, top, lsof,
 netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime,
 pidof, tty, taskset, pmap.")
+    (properties `((python2-variant . ,(delay python2-psutil))))
     (license license:bsd-3)))
 
 (define-public python2-psutil
-  (package-with-python2 python-psutil))
+  (let ((base (package-with-python2 (strip-python2-variant python-psutil))))
+    (package
+      (inherit base)
+      (propagated-inputs
+       `(("python2-enum34" ,python2-enum34)         ;optional
+         ,@(package-propagated-inputs base))))))
 
 (define-public python-shapely
   (package
@@ -1386,26 +1392,15 @@ backported for previous versions of Python from 2.4 to 3.3.")
 (define-public python-parse-type
   (package
     (name "python-parse-type")
-    (version "0.3.4")
+    (version "0.4.2")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "https://pypi.python.org/packages/source/p/"
-                          "parse_type/parse_type-" version ".tar.gz"))
+      (uri (pypi-uri "parse_type" version))
       (sha256
        (base32
-        "0iv1c34npr4iynwpgv1vkjx9rjd18a85ir8c01gc5f7wp8iv7l1x"))))
+        "0g3b6gsdwnm8dpkh2vn34q6dzxm9gl908ggyzcv31n9xbp3vv5pm"))))
     (build-system python-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'patch-tests
-           (lambda _
-             (substitute* "tests/test_parse_type_parse.py"
-               ;; Newer Python versions don't have the problem this test tests.
-               (("self[.]assertRaises[(]parse.TooManyFields, p.parse, ''[)]")
-                ""))
-             #t)))))
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-parse" ,python-parse)))
@@ -1431,21 +1426,20 @@ backported for previous versions of Python from 2.4 to 3.3.")
 (define-public python-parse
   (package
     (name "python-parse")
-    (version "1.6.6")
+    (version "1.8.2")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "parse" version))
       (sha256
        (base32
-        "0y31i3mwgv35qn0kzzjn9q8jqfdqmbi6sr6yfvn8rq4lqjm5lhvi"))
-      (patches (search-patches "python-parse-too-many-fields.patch"))))
+        "1lj9v1q4imszyhvipb6drsm3xdl35nan011mqxxas1yaypixsj40"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'check
-           (lambda _ (zero? (system* "python" "test_parse.py")))))))
+           (lambda _ (invoke "python" "test_parse.py"))))))
     (home-page "https://github.com/r1chardj0n3s/parse")
     (synopsis "Parse strings")
     (description
@@ -1512,19 +1506,17 @@ software.")
 (define-public python-extras
   (package
     (name "python-extras")
-    (version "0.0.3")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/e/extras/extras-"
-             version ".tar.gz"))
+       (uri (pypi-uri "extras" version))
        (sha256
         (base32
-         "1h7zx4dfyclalg0fqnfjijpn0f793a9mx8sy3b27gd31nr6dhq3s"))))
+         "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))
     (build-system python-build-system)
     (arguments
-     ;; error in setup.cfg: command 'test' has no such option 'buffer'
+     ;; FIXME: Circular dependency on testtools.
      '(#:tests? #f))
     (home-page "https://github.com/testing-cabal/extras")
     (synopsis "Useful extensions to the Python standard library")
@@ -1701,15 +1693,15 @@ code introspection, and logging.")
     (propagated-inputs
       `(("git" ,git))) ;; pbr actually uses the "git" binary.
     (native-inputs
-      `(("python-fixtures" ,python-fixtures)
+      `(("python-fixtures" ,python-fixtures-bootstrap)
         ;; discover, coverage, hacking, subunit
         ("python-mock" ,python-mock)
         ("python-six" ,python-six)
         ("python-sphinx" ,python-sphinx)
-        ("python-testrepository" ,python-testrepository)
-        ("python-testresources" ,python-testresources)
-        ("python-testscenarios" ,python-testscenarios)
-        ("python-testtools" ,python-testtools)
+        ("python-testrepository" ,python-testrepository-bootstrap)
+        ("python-testresources" ,python-testresources-bootstrap)
+        ("python-testscenarios" ,python-testscenarios-bootstrap)
+        ("python-testtools" ,python-testtools-bootstrap)
         ("python-virtualenv" ,python-virtualenv)))
     (synopsis "Enhance the default behavior of Python’s setuptools")
     (description
@@ -2426,7 +2418,17 @@ sources.")
      `(("python-pytest" ,python-pytest)
        ("imagemagick" ,imagemagick) ; for "convert"
        ,@(package-native-inputs python-sphinx)))
-    (properties '())))
+    (properties `((python2-variant . ,(delay python2-sphinx-1.6))))))
+
+(define-public python2-sphinx-1.6
+  (let ((base (package-with-python2 (strip-python2-variant python-sphinx-1.6))))
+    (package
+      (inherit base)
+      (propagated-inputs
+       `(("python2-typing" ,python2-typing)
+         ,@(package-propagated-inputs base)))
+      (native-inputs `(("python2-enum34" ,python2-enum34)
+                       ,@(package-native-inputs base))))))
 
 (define-public python-sphinx-1.5.3
   (package
@@ -4282,15 +4284,14 @@ them as the version argument or in a SCM managed file.")
 (define-public python-pathpy
   (package
     (name "python-pathpy")
-    (version "8.1.1")
+    (version "11.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pypi.python.org/packages/source/p/"
-                           "path.py/path.py-" version ".tar.gz"))
+       (uri (pypi-uri "path.py" version))
        (sha256
-        (base32 "1p8s1l2vfkqhqxdhqlj0g1jjw4f1as2frr35sjcpjjpd5a89y41f"))))
-    (outputs '("out" "doc"))
+        (base32 "12s84maimiz61980q065rjgi8ang6xw2wwm64m0lmfks51dlw4qn"))))
+    ;; (outputs '("out" "doc"))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-appdirs" ,python-appdirs)))
@@ -4301,22 +4302,24 @@ them as the version argument or in a SCM managed file.")
        ("python-pytest" ,python-pytest)
        ("python-pytest-runner" ,python-pytest-runner)))
     (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'build 'build-doc
-           (lambda _
-             (setenv "LANG" "en_US.UTF-8")
-             (zero? (system* "python" "setup.py" "build_sphinx"))))
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
-                    (doc (string-append data "/doc/" ,name "-" ,version))
-                    (html (string-append doc "/html")))
-               (mkdir-p html)
-               (for-each (lambda (file)
-                           (copy-file file (string-append doc "/" file)))
-                         '("README.rst" "CHANGES.rst"))
-               (copy-recursively "build/sphinx/html" html)))))))
+     ;; FIXME: Documentation and tests require "jaraco.packaging".
+     `(#:tests? #f))
+    ;;    #:phases
+    ;;    (modify-phases %standard-phases
+    ;;      (add-after 'build 'build-doc
+    ;;        (lambda _
+    ;;          (setenv "LANG" "en_US.UTF-8")
+    ;;          (zero? (system* "python" "setup.py" "build_sphinx"))))
+    ;;      (add-after 'install 'install-doc
+    ;;        (lambda* (#:key outputs #:allow-other-keys)
+    ;;          (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
+    ;;                 (doc (string-append data "/doc/" ,name "-" ,version))
+    ;;                 (html (string-append doc "/html")))
+    ;;            (mkdir-p html)
+    ;;            (for-each (lambda (file)
+    ;;                        (copy-file file (string-append doc "/" file)))
+    ;;                      '("README.rst" "CHANGES.rst"))
+    ;;            (copy-recursively "build/sphinx/html" html)))))))
     (home-page "https://github.com/jaraco/path.py")
     (synopsis "Python module wrapper for built-in os.path")
     (description
@@ -4507,13 +4510,13 @@ installing @code{kernelspec}s for use with Jupyter frontends.")
 (define-public python-ipython
   (package
     (name "python-ipython")
-    (version "5.3.0")
+    (version "5.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ipython" version ".tar.gz"))
        (sha256
-        (base32 "079wyjir4a9qx6kvx096b1asm63djbidk65z3ykcbnlngmg62pmz"))))
+        (base32 "03qmzpfy00if10i9k8fjkam1s4xg22j73f933x5d228z9n4rwik6"))))
     (build-system python-build-system)
     (outputs '("out" "doc"))
     (propagated-inputs
@@ -4773,7 +4776,7 @@ toolkit.  Use it to build trees of widgets.")
     (synopsis "Python bindings for D-bus")
     (description "python-dbus provides bindings for libdbus, the reference
 implementation of D-Bus.")
-    (home-page "http://www.freedesktop.org/wiki/Software/DBusBindings/")
+    (home-page "https://www.freedesktop.org/wiki/Software/DBusBindings/")
     (license license:expat)))
 
 (define-public python2-dbus
@@ -4859,20 +4862,16 @@ converts incoming documents to Unicode and outgoing documents to UTF-8.")
 (define-public python-netifaces
   (package
     (name "python-netifaces")
-    (version "0.10.4")
+    (version "0.10.6")
     (source
       (origin
         (method url-fetch)
-        (uri (string-append
-              "https://pypi.python.org/packages/source/n/netifaces/netifaces-"
-              version
-              ".tar.gz"))
+        (uri (pypi-uri "netifaces" version))
         (sha256
           (base32
-            "1plw237a4zib4z8s62g0mrs8gm3kjfrp5sxh6bbk9nl3rdls2mln"))))
+            "1q7bi5k2r955rlcpspx4salvkkpk28jky67fjbpz2dkdycisak8c"))))
     (build-system python-build-system)
-    (home-page
-      "https://bitbucket.org/al45tair/netifaces")
+    (home-page "https://github.com/al45tair/netifaces")
     (synopsis
       "Python module for portable network interface information")
     (description
@@ -5835,21 +5834,59 @@ should be stored on various operating systems.")
 (define-public python-msgpack
   (package
     (name "python-msgpack")
-    (version "0.4.8")
+    (version "0.5.6")
     (source (origin
               (method url-fetch)
-              (uri (pypi-uri "msgpack-python" version))
+              (uri (pypi-uri "msgpack" version))
               (sha256
                (base32
-                "11pqk5braa6wndpnr1dhg64js82vjgxnm0lzy73rwl831zgijaqs"))))
+                "1hz2dba1nvvn52afg34liijsm7kn65cmn06dl0xbwld6bb4cis0f"))))
     (build-system python-build-system)
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build python-build-system)
+                  (ice-9 ftw)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (let ((cwd (getcwd)))
+               (setenv "PYTHONPATH"
+                       (string-append cwd "/build/"
+                                      (find (cut string-prefix? "lib" <>)
+                                            (scandir (string-append cwd "/build")))
+                                      ":"
+                                      (getenv "PYTHONPATH")))
+             (invoke "pytest" "-v" "test")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
     (synopsis "MessagePack (de)serializer")
     (description "MessagePack is a fast, compact binary serialization format,
 suitable for similar data to JSON.  This package provides CPython bindings for
 reading and writing MessagePack data.")
-    (home-page "https://pypi.python.org/pypi/msgpack-python/")
+    (home-page "https://pypi.python.org/pypi/msgpack/")
     (license license:asl2.0)))
 
+;; This msgpack library's name changed from "python-msgpack" to "msgpack" with
+;; release 0.5. Some packages like borg still call it by the old name for now.
+;; <https://bugs.gnu.org/30662>
+(define-public python-msgpack-transitional
+  (package
+    (inherit python-msgpack)
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-msgpack)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'configure-transitional
+             (lambda _
+               ;; Keep using the old name.
+               (substitute* "setup.py"
+                 (("TRANSITIONAL = False")
+                   "TRANSITIONAL = 1"))
+               #t))))))))
+
 (define-public python2-msgpack
   (package-with-python2 python-msgpack))
 
@@ -5879,14 +5916,14 @@ and MAC network addresses.")
 (define-public python-wrapt
   (package
     (name "python-wrapt")
-    (version "1.10.8")
+    (version "1.10.11")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "wrapt" version))
         (sha256
           (base32
-            "0wrcm1mydvfivbkzz0h81ygzdchnscshi6xvy5n3r21r9s0px8af"))))
+            "1ip3dwib39xhp79kblskgvz3fjzcwxgx3fs3ahdixhpjg7a61mfl"))))
     (build-system python-build-system)
     (arguments
      ;; Tests are not included in the tarball, they are only available in the
@@ -8072,21 +8109,22 @@ anymore.")
 (define-public python2-pathlib2
   (package
     (name "python2-pathlib2")
-    (version "2.1.0")
+    (version "2.3.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "pathlib2" version))
               (sha256
                (base32
-                "0p050msg5c8d0kadv702jnfshaxrb0il765cpkgnhn6mq5hakcyy"))))
+                "1cx5gs2v9j2vnzmcrbq5l8fq2mwrr1h6pyf1sjdji2w1bavm09fk"))))
     (build-system python-build-system)
     ;; We only need the the Python 2 variant, since for Python 3 our minimum
     ;; version is 3.4 which already includes this package as part of the
     ;; standard library.
     (arguments
      `(#:python ,python-2))
-    (native-inputs
-     `(("python2-six" ,python2-six)))
+    (propagated-inputs
+     `(("python2-scandir" ,python2-scandir)
+       ("python2-six" ,python2-six)))
     (home-page "https://pypi.python.org/pypi/pathlib2/")
     (synopsis "Object-oriented file system paths - backport of standard
 pathlib module")
@@ -11093,14 +11131,19 @@ It supports both normal and Unicode strings.")
 (define-public python-scandir
   (package
     (name "python-scandir")
-    (version "1.4")
+    (version "1.7")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "scandir" version))
        (sha256
-        (base32 "0yjrgp0mxp3d8bjkq2m1ac2ys8n76wykksvgyjrnil9gr3fx7a5d"))))
+        (base32 "0gbnhjzg42rj87ljv9kb648rfxph69ly3c8r9841dxy4d7l5pmdj"))))
     (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (replace 'check
+                    (lambda _
+                      (invoke "python" "test/run_tests.py"))))))
     (home-page "https://github.com/benhoyt/scandir")
     (synopsis "Directory iteration function")
     (description
@@ -11108,7 +11151,9 @@ It supports both normal and Unicode strings.")
 returning a list of bare filenames, it yields DirEntry objects that include
 file type and stat information along with the name.  Using scandir() increases
 the speed of os.walk() by 2-20 times (depending on the platform and file
-system) by avoiding unnecessary calls to os.stat() in most cases.")
+system) by avoiding unnecessary calls to os.stat() in most cases.
+
+This package is part of the Python standard library since version 3.5.")
     (license license:bsd-3)))
 
 (define-public python2-scandir
@@ -11495,6 +11540,48 @@ applying JSON Patches according to RFC 6902.")
 (define-public python2-jsonpatch-0.4
   (package-with-python2 python-jsonpatch-0.4))
 
+(define-public python-rfc3986
+  (package
+    (name "python-rfc3986")
+    (version "1.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "rfc3986" version))
+              (sha256
+               (base32
+                "06wlmysw83f75ff84zr1yr6n0shvc2xn1n1sb4iwzqap9hf5fn44"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:modules ((guix build utils)
+                  (guix build python-build-system)
+                  (ice-9 ftw)
+                  (srfi srfi-1)
+                  (srfi srfi-26))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (let ((cwd (getcwd)))
+               (setenv "PYTHONPATH"
+                       (string-append cwd "/build/"
+                                      (find (cut string-prefix? "lib" <>)
+                                            (scandir (string-append cwd "/build")))
+                                      ":"
+                                      (getenv "PYTHONPATH")))
+             (invoke "pytest" "-v")))))))
+    (native-inputs
+     `(("python-pytest" ,python-pytest)))
+    (home-page "https://rfc3986.readthedocs.io/")
+    (synopsis "Parse and validate URI references")
+    (description
+     "@code{rfc3986} is a Python implementation of RFC@tie{}3986 including
+validation and authority parsing.  This module also supports RFC@tie{}6874
+which adds support for zone identifiers to IPv6 addresses.")
+    (license license:asl2.0)))
+
+(define-public python2-rfc3986
+  (package-with-python2 python-rfc3986))
+
 (define-public python-rfc3987
   (package
     (name "python-rfc3987")
@@ -12841,3 +12928,25 @@ interpreter. bpython's main features are
                  (("^(\\s+'bpython)(-\\S+)?(\\s+=.*',?)\\s*?$" _ name sub rest)
                   (string-append name "2" (or sub "") rest "\n")))
                #t))))))))
+
+(define-public python-pyinotify
+  (package
+    (name "python-pyinotify")
+    (version "0.9.6")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "pyinotify" version))
+              (sha256
+               (base32
+                "1x3i9wmzw33fpkis203alygfnrkcmq9w1aydcm887jh6frfqm6cw"))))
+    (build-system python-build-system)
+    (arguments `(#:tests? #f))          ;no tests
+    (home-page "https://github.com/seb-m/pyinotify")
+    (synopsis "Python library for monitoring inotify events")
+    (description
+     "@code{pyinotify} provides a Python interface for monitoring
+filesystem events on Linux.")
+    (license license:expat)))
+
+(define-public python2-pyinotify
+  (package-with-python2 python-pyinotify))
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 5ea7858a89..10b26c0ce9 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -338,14 +338,14 @@ many event types, including timers, signals, and the classic file descriptor eve
 (define-public ldb
   (package
     (name "ldb")
-    (version "1.3.1")
+    (version "1.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.samba.org/ftp/ldb/ldb-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1lnbcazm1kqqcc7syy0xbq9srhbylkqhpsmsbsm4c3xfangjr7xi"))))
+                "1avn4fl393kc80krbc47phbp0argdkys62ycs8vm934a6nvz0gnf"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index b439094c26..d7b1897051 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 ng0 <ng0@n0.is>
@@ -408,7 +408,7 @@ TCP, not the SSH protocol.")
 (define-public dropbear
   (package
     (name "dropbear")
-    (version "2017.75")
+    (version "2018.76")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -416,9 +416,9 @@ TCP, not the SSH protocol.")
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1309cm2aw62n9m3h38prvgsqr8bj85hfasgnvwkd42cp3k5ivg3c"))))
+                "0rgavbzw7jrs5wslxm0dnwx2m409yzxd9hazd92r7kx8xikr3yzj"))))
     (build-system gnu-build-system)
-    (arguments  `(#:tests? #f)) ; There is no "make check" or anything similar
+    (arguments `(#:tests? #f)) ; there is no "make check" or anything similar
     (inputs `(("zlib" ,zlib)))
     (synopsis "Small SSH server and client")
     (description "Dropbear is a relatively small SSH server and
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index 3284be243e..1417bea4e5 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
@@ -83,32 +83,25 @@ to DOS format and vice versa.")
 (define-public recode
   (package
     (name "recode")
-    ;; Last beta release (3.7-beta2) is from 2008; last commit from Feb 2014.
-    ;; So we use that commit instead.
-    (version "3.7.0.201402")
+    (version "3.7")
     (source
      (origin
-       (method git-fetch)
-       (uri (git-reference
-             (url "https://github.com/pinard/Recode.git")
-             (commit "2d7092a9999194fc0e9449717a8048c8d8e26c18")))
+       (method url-fetch)
+       (uri (string-append "https://github.com/rrthomas/recode/releases/"
+                           "download/v" version "/" name "-" version ".tar.gz"))
        (sha256
-        (base32 "1wssv8z6g3ryrw33sksz4rjhlnhgvvdqszw1ggl4rcwks34n86zm"))
-       (file-name (string-append name "-" version "-checkout"))))
+        (base32
+         "0r4yhf7i7zp2nl2apyzz7r3i2in12n385hmr8zcfr18ly0ly530q"))
+       (modules '((guix build utils)))
+       (snippet
+        `(begin
+           (delete-file "tests/Recode.c")
+           #t))))
     (build-system gnu-build-system)
-    (native-inputs `(("python" ,python-2)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-before 'check 'pre-check
-           (lambda _
-             (substitute* "tests/setup.py"
-               (("([[:space:]]*)include_dirs=.*" all space)
-                (string-append all space "library_dirs=['../src/.libs'],\n")))
-             ;; The test extension 'Recode.so' lacks RUNPATH for 'librecode.so'.
-             (setenv "LD_LIBRARY_PATH" (string-append (getcwd) "/src/.libs"))
-             #t)))))
-    (home-page "https://github.com/pinard/Recode")
+    (native-inputs
+     `(("python" ,python-2)
+       ("python2-cython" ,python2-cython)))
+    (home-page "https://github.com/rrthomas/recode")
     (synopsis "Text encoding converter")
     (description "The Recode library converts files between character sets and
 usages.  It recognises or produces over 200 different character sets (or about
@@ -116,27 +109,23 @@ usages.  It recognises or produces over 200 different character sets (or about
 any pair.  When exact transliteration are not possible, it gets rid of
 offending characters or falls back on approximations.  The recode program is a
 handy front-end to the library.")
-    (license license:gpl2+)))
+    (license license:gpl3+)))
 
 (define-public enca
   (package
     (name "enca")
-    (version "1.16")
+    (version "1.19")
     (source
      (origin
        (method url-fetch)
        (uri (string-append
              "https://github.com/nijel/enca/archive/" version ".tar.gz"))
        (sha256
-        (base32 "1xik00x0yvhswsw2isnclabhv536xk1s42cf5z54gfbpbhc7ni8l"))
+        (base32 "099z526i7qgij7q1w3lvhl88iv3jc3nqxca2i09h6s08ghyrmzf4"))
        (file-name (string-append name "-" version ".tar.gz"))))
     (build-system gnu-build-system)
-    (inputs `(("recode" ,recode)))
-
-    ;; Both 'test-convert-64.sh' and 'test-convert-filter.sh' manipulate a
-    ;; 'test.tmp' file, so they have to run in sequence.
-    (arguments '(#:parallel-tests? #f))
-
+    ;; enca-1.19 tests fail with recent recode.
+    ;(inputs `(("recode" ,recode)))
     (home-page "https://github.com/nijel/enca")
     (synopsis "Text encoding detection tool")
     (description "Enca (Extremely Naive Charset Analyser) consists of libenca,
diff --git a/gnu/packages/time.scm b/gnu/packages/time.scm
index a54524087f..59414f6d7c 100644
--- a/gnu/packages/time.scm
+++ b/gnu/packages/time.scm
@@ -264,18 +264,16 @@ ISO 8601 dates, time and duration.")
 (define-public python-monotonic
   (package
     (name "python-monotonic")
-    (version "0.3")
+    (version "1.4")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/m/monotonic/monotonic-"
-             version
-             ".tar.gz"))
+       (uri (pypi-uri "monotonic" version))
        (sha256
         (base32
-         "0yz0bcbwx8r2c01czzfpbrxddynxyk9k95jj8h6sgcb7xmfvl998"))))
+         "110zd5ld3nchdjds34r95lzs1csmmv81pli2px8l1k8qnpai29m0"))))
     (build-system python-build-system)
+    (arguments '(#:tests? #f))          ;no tests
     (home-page "https://github.com/atdt/monotonic")
     (synopsis "Implementation of time.monotonic() for Python 2 & < 3.3")
     (description
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 9e06e675f4..45f5255665 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -125,7 +125,7 @@ in intelligent transportation networks.")
 (define-public p11-kit
   (package
     (name "p11-kit")
-    (version "0.23.9")
+    (version "0.23.10")
     (source
      (origin
       (method url-fetch)
@@ -133,7 +133,7 @@ in intelligent transportation networks.")
                           "download/" version "/p11-kit-" version ".tar.gz"))
       (sha256
        (base32
-        "0qyvnkb5hfi94wv3bn67y20hcbbvynvjwxpk7k9sh1si6ff69hg1"))))
+        "0hxfwnyb5yllvlsh0cj6favcph36gm94b6df7zhl7xay48zjl8gr"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -797,7 +797,15 @@ then ported to the GNU / Linux environment.")
                            version "-apache.tgz"))
        (sha256
         (base32
-         "1vsmgxnw7dpvma51896n63yaf9sncmf885ax2jfcg89ssin6vdmf"))))
+         "1vsmgxnw7dpvma51896n63yaf9sncmf885ax2jfcg89ssin6vdmf"))
+       ;; An RFC 5114 constant was accidentally renamed in version 2.7.0.
+       ;; See https://github.com/ARMmbed/mbedtls/pull/1362.
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (substitute* "include/mbedtls/dhm.h"
+             (("#define MBEDTLS_DHM_RFC5114_MODP_P")
+              "#define MBEDTLS_DHM_RFC5114_MODP_2048_P"))))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 91698b5f7f..6c05ab59db 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -15,7 +15,7 @@
 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;; Copyright © 2017 André <eu@euandre.org>
-;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
@@ -52,6 +52,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
   #:use-module (gnu packages cook)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages docbook)
@@ -472,7 +473,7 @@ to lock down your entire repository.")
 (define-public git-remote-gcrypt
   (package
    (name "git-remote-gcrypt")
-   (version "1.0.1")
+   (version "1.0.2")
    (source (origin
              (method git-fetch)
              (uri (git-reference
@@ -481,7 +482,7 @@ to lock down your entire repository.")
              (file-name (string-append name "-" version "-checkout"))
              (sha256
               (base32
-               "0znrx77vpm4a8l7yiybsxk5vrawijqqfxmp1p2yhaaw8cbgrj7az"))))
+               "0kc6qi5gavziqlwnzpy7v4ah7yw860v3i8pyna6way0cfr0qnpr2"))))
    (build-system trivial-build-system)
    (arguments
     `(#:modules ((guix build utils))
@@ -633,6 +634,107 @@ default) of the repository.")
   (package-with-python2
    (strip-python2-variant python-ghp-import)))
 
+(define-public python-gitdb
+  (package
+    (name "python-gitdb")
+    (version "2.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "gitdb2" version))
+              (sha256
+               (base32
+                "02azg62mr99b7cllyjrly77np3vw32y8nrxpa2xjapiyaga2j3mn"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-before 'check 'create-test-repository
+                    (lambda _
+                      (mkdir "/tmp/testrepo")
+                      ;; Some tests require a git repository, so create one.
+                      (with-directory-excursion "/tmp/testrepo"
+                        (do ((filecount 1 (1+ filecount)))
+                            ((> filecount 1000))
+                          (call-with-output-file (string-append
+                                                  "file" (number->string filecount))
+                            (lambda (port)
+                              (format port "~a" filecount))))
+                        (and
+                         (invoke "git" "init")
+                         (invoke "git" "config" "user.name" "Total Git")
+                         (invoke "git" "config" "user.email" "git@localhost")
+                         (invoke "git" "add" "-A")
+                         (invoke "git" "commit" "-q" "-m" "dummy commit")))
+
+                      ;; The repository checkout must be a "bare" clone.
+                      (invoke "git" "clone" "--bare" "/tmp/testrepo"
+                              "/tmp/testrepo.git")))
+                  (replace 'check
+                    (lambda _
+                      (setenv "GITDB_TEST_GIT_REPO_BASE" "/tmp/testrepo.git")
+                      ;; Skip tests that must be run from the gitdb repository.
+                      (setenv "TRAVIS" "1")
+                      (invoke "nosetests" "-v"))))))
+    (propagated-inputs
+     `(("python-smmap2" ,python-smmap2)))
+    (native-inputs
+     `(("git" ,git)
+       ("python-nose" ,python-nose)))
+    (home-page "https://github.com/gitpython-developers/gitdb")
+    (synopsis "Python implementation of the Git object database")
+    (description
+     "GitDB allows you to access @dfn{bare} Git repositories for reading and
+writing.  It aims at allowing full access to loose objects as well as packs
+with performance and scalability in mind.  It operates exclusively on streams,
+allowing to handle large objects with a small memory footprint.")
+    (license license:bsd-3)))
+
+(define-public python2-gitdb
+  (package-with-python2 python-gitdb))
+
+(define-public python-gitpython
+  (package
+    (name "python-gitpython")
+    (version "2.1.8")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "GitPython" version))
+              (sha256
+               (base32
+                "1sbn018mn3y2r58ix5z12na1s02ccprhckb88yq3bdddvqjvqqdd"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f ;XXX: Tests can only be run within the GitPython repository.
+       #:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'embed-git-reference
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* "git/cmd.py"
+                        (("git_exec_name = \"git\"")
+                         (string-append "git_exec_name = \""
+                                        (assoc-ref inputs "git")
+                                        "/bin/git\"")))
+                      #t)))))
+    (inputs
+     `(("git" ,git)))
+    (propagated-inputs
+     `(("python-gitdb" ,python-gitdb)))
+    (native-inputs
+     `(("python-ddt" ,python-ddt)
+       ("python-nose" ,python-nose)))
+    (home-page "https://github.com/gitpython-developers/GitPython")
+    (synopsis "Python library for interacting with Git repositories")
+    (description
+     "GitPython is a python library used to interact with Git repositories,
+high-level like git-porcelain, or low-level like git-plumbing.
+
+It provides abstractions of Git objects for easy access of repository data,
+and additionally allows you to access the Git repository more directly using
+either a pure Python implementation, or the faster, but more resource intensive
+@command{git} command implementation.")
+    (license license:bsd-3)))
+
+(define-public python2-gitpython
+  (package-with-python2 python-gitpython))
+
 (define-public shflags
   (package
     (name "shflags")
@@ -1389,7 +1491,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
 (define-public tig
   (package
     (name "tig")
-    (version "2.3.0")
+    (version "2.3.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1397,7 +1499,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
                     version "/tig-" version ".tar.gz"))
               (sha256
                (base32
-                "1vf02snz8qiiqiyqss1z63rzzmwbrc9agcgh21jdq13rja306vv8"))))
+                "1skbhhj1narsnsff1azdylcy6xghxb18mzqysmipcyyvlv2i17fk"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("asciidoc" ,asciidoc)
@@ -1410,7 +1512,7 @@ from Subversion to any supported Distributed Version Control System (DVCS).")
        (modify-phases %standard-phases
          (add-after 'install 'install-doc
            (lambda _
-             (zero? (system* "make" "install-doc")))))
+             (invoke "make" "install-doc"))))
        #:tests? #f)) ; tests require access to /dev/tty
     ;; #:test-target "test"))
     (home-page "https://jonas.github.io/tig/")
@@ -1768,7 +1870,7 @@ network protocols, and core version control algorithms.")
 (define-public gource
   (package
     (name "gource")
-    (version "0.47")
+    (version "0.48")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1776,7 +1878,7 @@ network protocols, and core version control algorithms.")
                     "/gource-" version "/gource-" version ".tar.gz"))
               (sha256
                (base32
-                "1llqwdnfa1pff8bxk27qsqff1fcg0a9kfdib0rn7p28vl21n1cgj"))))
+                "04qxcm05qiyr9rg2kv6abfy7kkzqr8ziw4iyp1d14lniv93m61dp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 287d142958..549380cda1 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -53,6 +53,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system meson)
+  #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix build-system waf)
   #:use-module (gnu packages)
@@ -1157,7 +1158,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2018.02.11")
+    (version "2018.02.26")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://yt-dl.org/downloads/"
@@ -1165,7 +1166,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0zg34spkfiwjq55jrk417ifdcyvrj80gdbc338rdpfw2s6ibggv8"))))
+                "0ijjnx8qjxk07v5dbz3n5z3cvz8dlkmh7jkyvgng7inl74c29zq5"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -1311,6 +1312,59 @@ audio, images) from the Web.  It can use either mpv or vlc for playback.")
     (home-page "https://you-get.org/")
     (license license:expat)))
 
+(define-public youtube-viewer
+  (package
+    (name "youtube-viewer")
+    (version "3.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/trizen/youtube-viewer/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1j572his6qmazlmyrbnfq62s9bqml875ay7wy26byy9hfc7m0vgk"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
+    ;; FIXME: Add optional dependencies once available:
+    ;; perl-lwp-useragent-cached and perl-term-readline-gnu
+    (inputs
+     `(("perl-data-dump" ,perl-data-dump)
+       ("perl-file-sharedir" ,perl-file-sharedir)
+       ("perl-gtk2" ,perl-gtk2)
+       ("perl-json" ,perl-json)
+       ("perl-libwww" ,perl-libwww)
+       ("perl-lwp-protocol-https" ,perl-lwp-protocol-https)
+       ("perl-mozilla-ca" ,perl-mozilla-ca)
+       ("perl-unicode-linebreak" ,perl-unicode-linebreak)))
+    (arguments
+     `(#:modules ((guix build perl-build-system)
+                  (guix build utils)
+                  (srfi srfi-26))
+       #:module-build-flags '("--gtk")
+       #:phases (modify-phases %standard-phases
+                  (add-after 'install 'wrap-program
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((bin-dir (string-append (assoc-ref outputs "out")
+                                                    "/bin/"))
+                            (perl-path (getenv "PERL5LIB")))
+                        (for-each (cut wrap-program <>
+                                       `("PERL5LIB" ":" prefix (,perl-path)))
+                                  (find-files bin-dir))
+                        #t))))))
+    (synopsis
+     "Lightweight application for searching and streaming videos from YouTube")
+    (description
+     "Youtube-viewer searches and plays YouTube videos in a native player.
+It comes with various search options; it can search for videos, playlists
+and/or channels.  The videos are streamed directly in a selected video player
+at the best resolution (customizable) and with closed-captions (if available).
+Both command-line and GTK2 interface are available.")
+    (home-page "https://github.com/trizen/youtube-viewer")
+    (license license:perl-license)))
+
 (define-public libbluray
   (package
     (name "libbluray")
@@ -2475,7 +2529,7 @@ RTSP or SIP clients and servers.")
 (define-public libdvbpsi
   (package
     (name "libdvbpsi")
-    (version "1.3.1")
+    (version "1.3.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2483,7 +2537,7 @@ RTSP or SIP clients and servers.")
                     version "/libdvbpsi-" version ".tar.bz2"))
               (sha256
                (base32
-                "0824r08kaspbrrg2dd5d46s475zb7j59brqkm2y6x3mdsnpng0yn"))))
+                "1zn5hfv4qbahmydbwh59a3b480s3m5ss27r6ml35gqdip7r3jkmc"))))
     (build-system gnu-build-system)
     (home-page "https://www.videolan.org/developers/libdvbpsi.html")
     (synopsis "Library for decoding and generation of MPEG TS and DVB PSI
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index d7f5dc6597..952f12ce55 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -272,14 +272,14 @@ traversing network address translators (NATs) and firewalls.")
 (define-public tinc
   (package
     (name "tinc")
-    (version "1.0.28")
+    (version "1.0.33")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://tinc-vpn.org/packages/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0i5kx3hza359nclyhb60kxlzqyx0phmg175350hww28g6scjcl0b"))))
+                "1x0hpfz13vn4pl6dcpnls6xq3rfcbdsg90awcfn53ijb8k35svvz"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index ea302aa469..04cebcff73 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -60,6 +60,7 @@
   #:use-module (guix build-system ant)
   #:use-module (guix build-system scons)
   #:use-module (gnu packages)
+  #:use-module (gnu packages adns)
   #:use-module (gnu packages apr)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cran)
@@ -83,8 +84,10 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages java)
   #:use-module (gnu packages javascript)
+  #:use-module (gnu packages jemalloc)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages libevent)
   #:use-module (gnu packages libidn)
   #:use-module (gnu packages libunistring)
   #:use-module (gnu packages lisp)
@@ -796,7 +799,7 @@ for efficient socket-like bidirectional reliable communication channels.")
 (define-public libpsl
   (package
     (name "libpsl")
-    (version "0.19.1")
+    (version "0.20.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rockdaboot/libpsl/"
@@ -804,7 +807,7 @@ for efficient socket-like bidirectional reliable communication channels.")
                                   "/libpsl-" version ".tar.gz"))
               (sha256
                (base32
-                "0ydwi9m39qv6k7zagqx2kzxzf59ipxj9r0c71xmwngdx3fslclbk"))))
+                "0rsjm6mb71nnj6ikr2dq5qmny314v3j7m07zz1i7m6v8hxxm98i7"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -2848,7 +2851,7 @@ environment from an HTTP::Request.")
 (define-public perl-http-server-simple
   (package
     (name "perl-http-server-simple")
-    (version "0.51")
+    (version "0.52")
     (source
      (origin
        (method url-fetch)
@@ -2856,7 +2859,7 @@ environment from an HTTP::Request.")
                            "HTTP-Server-Simple-" version ".tar.gz"))
        (sha256
         (base32
-         "1yvd2g57z2kq00q5i3zzfi15k98qgbif3vghjsda6v612agmrp5r"))))
+         "0k6bg7k6mjixfzxdkkdrhqvaqmdhjszx0zsk8g0bimiby6j9z4yq"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-cgi" ,perl-cgi)))
@@ -3208,7 +3211,7 @@ or to multiple server ports.")
 (define-public perl-net-smtp-ssl
   (package
     (name "perl-net-smtp-ssl")
-    (version "1.03")
+    (version "1.04")
     (source
      (origin
        (method url-fetch)
@@ -3216,7 +3219,7 @@ or to multiple server ports.")
                            "Net-SMTP-SSL-" version ".tar.gz"))
        (sha256
         (base32
-         "05y94mb1vdw32mvwb0cp2h4ggh32f8j8nwwfjb8kjwxvfkfhyp9h"))))
+         "001a6dcfahf7kkyirqkc8jd4fh4fkal7n7vm9c4dblqrvmdc8abv"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-io-socket-ssl" ,perl-io-socket-ssl)))
@@ -3780,13 +3783,13 @@ CDF, Atom 0.3, and Atom 1.0 feeds.")
 (define-public r-httpuv
   (package
     (name "r-httpuv")
-    (version "1.3.5")
+    (version "1.3.6")
     (source (origin
               (method url-fetch)
               (uri (cran-uri "httpuv" version))
               (sha256
                (base32
-                "1sg4f223zfyd265b28rlhsn3b6mqflcpnmya98cjmjncmy9vjdj3"))))
+                "1nzbcw1dm4l5qc9156kz95rdb8bwnpdr57wfc87w8arv7m0i40bc"))))
     (build-system r-build-system)
     (native-inputs `(("r-rcpp" ,r-rcpp)))
     (home-page "https://github.com/rstudio/httpuv")
@@ -6346,3 +6349,84 @@ derivation by David Revoy from the original MonsterID by Andreas Gohr.")
     ;; expat for the code, CC-BY 4.0 for the artwork
     (license (list l:expat
                    l:cc-by4.0))))
+
+(define-public nghttp2
+  (package
+    (name "nghttp2")
+    (version "1.30.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/nghttp2/nghttp2/"
+                           "releases/download/v" version "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1b2j7il0wp8hi4jl3cah7fkshmg29cchdski9cw74gx5496gp6h8"))))
+    (build-system gnu-build-system)
+    (outputs (list "out"
+                   "lib"))              ; only libnghttp2
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+
+       ;; Required by tests.
+       ("cunit" ,cunit)
+       ("tzdata" ,tzdata)))
+    (inputs
+     ;; Required to build the tools (i.e. without ‘--enable-lib-only’).
+     `(("c-ares" ,c-ares)
+       ("jansson" ,jansson)             ; for HPACK tools
+       ("jemalloc" ,jemalloc)           ; fight nghttpd{,x} heap fragmentation
+       ("libev" ,libev)
+       ("libxml2" ,libxml2)             ; for ‘nghttp -a’
+       ("openssl" ,openssl)))
+    (arguments
+     `(#:configure-flags
+       (list (string-append "--libdir=" (assoc-ref %outputs "lib") "/lib")
+             "--enable-app"             ; build all the tools
+             "--enable-hpack-tools"     ; ...all the tools
+             "--disable-examples"
+             "--disable-static")        ; don't bother building .a files
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'break-circular-reference
+           ;; libnghttp2.pc by default retains a reference to the ‘out’ output,
+           ;; which is not allowed.  Break this cycle.  While we could install
+           ;; only the library to ‘out’ and move everything else to a separate
+           ;; output, this would inconvenience the majority of (human) users.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "lib/libnghttp2.pc.in"
+               (("@prefix@")
+                (assoc-ref outputs "lib")))
+             #t))
+         (add-before 'check 'set-timezone-directory
+           (lambda* (#:key inputs #:allow-other-keys)
+             (setenv "TZDIR" (string-append (assoc-ref inputs "tzdata")
+                                            "/share/zoneinfo"))
+             #t)))))
+    (home-page "https://nghttp2.org/")
+    (synopsis "HTTP/2 protocol client, proxy, server, and library")
+    (description
+     "nghttp2 implements the Hypertext Transfer Protocol, version
+2 (@dfn{HTTP/2}).
+
+A reusable C library provides the HTTP/2 framing layer, with several tools built
+on top of it:
+
+@itemize
+@item @command{nghttp}, a command-line HTTP/2 client.  It exposes many advanced
+and low-level aspects of the protocol and is useful for debugging.
+@item @command{nghttpd}, a fast, multi-threaded HTTP/2 static web server that
+serves files from a local directory.
+@item @command{nghttpx}, a fast, multi-threaded HTTP/2 reverse proxy that can be
+deployed in front of existing web servers that don't support HTTP/2.
+Both @command{nghttpd} and @command{nghttpx} can fall back to HTTP/1.1 for
+backwards compatibilty with clients that don't speak HTTP/2.
+@item @command{h2load} for benchmarking (only!) your own HTTP/2 servers.
+@item HTTP/2 uses a header compression method called @dfn{HPACK}.
+nghttp2 provides a HPACK encoder and decoder as part of its public API.
+@item @command{deflatehd} converts JSON data or HTTP/1-style header fields to
+compressed JSON header blocks.
+@item @command{inflatehd} converts such compressed headers back to JSON pairs.
+@end itemize\n")
+    (license l:expat)))
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index e04ada8b0d..444c3ea39b 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -406,7 +406,7 @@ tracking.")
     (inputs
      `(("libx11" ,libx11)
        ("xcb-util" ,xcb-util)))
-    (home-page "http://www.freedesktop.org/wiki/Software/startup-notification/")
+    (home-page "https://www.freedesktop.org/wiki/Software/startup-notification/")
     (synopsis "Application startup notification and feedback library")
     (description
      "Startup-notification contains a reference implementation of the startup
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 035e9c5f20..ba749c9989 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -912,7 +912,7 @@ sending standard messages over D-Bus using the
 (define-public xfburn
   (package
     (name "xfburn")
-    (version "0.5.4")
+    (version "0.5.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://archive.xfce.org/src/apps/xfburn/"
@@ -920,7 +920,7 @@ sending standard messages over D-Bus using the
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1xn1kwxa3dl5r9bfj90a5322ynkwbn6k5v9b3a3pbr3a23zm604s"))))
+                "1qdd8prnsfilsprg36p95cz3z50ffr9kgvka4d5pm260lsl3l5xa"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("intltool" ,intltool)
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index cc5e19af27..add374c899 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -425,7 +425,7 @@ XML parser and the high performance DOM implementation.")
 (define-public perl-xml-libxslt
   (package
     (name "perl-xml-libxslt")
-    (version "1.95")
+    (version "1.96")
     (source
      (origin
        (method url-fetch)
@@ -433,7 +433,7 @@ XML parser and the high performance DOM implementation.")
                            "XML-LibXSLT-" version ".tar.gz"))
        (sha256
         (base32
-         "0dggycql18kfxzkb1kw3yc7gslxlrrgyyn2r2ygsylycb89j3jpi"))))
+         "0wyl8klgr65j8y8fzgwz9jlvfjwvxazna8j3dg9gksd2v973fpia"))))
     (build-system perl-build-system)
     (inputs
      `(("libxslt" ,libxslt)))
@@ -538,7 +538,7 @@ building Perl SAX2 XML parsers, filters, and drivers.")
 (define-public perl-xml-sax-base
   (package
     (name "perl-xml-sax-base")
-    (version "1.08")
+    (version "1.09")
     (source
      (origin
        (method url-fetch)
@@ -546,7 +546,7 @@ building Perl SAX2 XML parsers, filters, and drivers.")
                            "XML-SAX-Base-" version ".tar.gz"))
        (sha256
         (base32
-         "17i161rq1ngjlk0c8vdkrkkc56y1pf51k1g54y28py0micqp0qk6"))))
+         "1l1ai9g1z11ja7mvnfl5mj346r13jyckbg9qlw6c2izglidkbjv6"))))
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/XML-SAX-Base")
     (synopsis "Base class for SAX Drivers and Filters")
@@ -1109,7 +1109,7 @@ XSLT and EXSLT.")
 (define-public html-xml-utils
  (package
    (name "html-xml-utils")
-   (version "7.5")
+   (version "7.6")
    (source
     (origin
       (method url-fetch)
@@ -1118,7 +1118,7 @@ XSLT and EXSLT.")
             version ".tar.gz"))
       (sha256
        (base32
-        "0cbmqa9c4bc4ikk7vmgd65ixh2pl9mr336c4his3m8l7rgsjnh8n"))))
+        "0l97ps089byy62838wf2jwvvc465iw29z9r5kwmwcq7f3bn11y3m"))))
    (build-system gnu-build-system)
    (home-page "https://www.w3.org/Tools/HTML-XML-utils/")
    (synopsis "Command line utilities to manipulate HTML and XML files")
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index c16e5ecb13..4de93d2161 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -4771,14 +4771,14 @@ common definitions and porting layer.")
 (define-public xorgproto
   (package
     (name "xorgproto")
-    (version "2018.3")
+    (version "2018.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://xorg/individual/proto/"
                                   name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "1rdhw28n1gp7yylwia41jhih66gfx75nxgrmi2ggglzvzqhwr0x8"))))
+                "180mqkp70i44rkmj430pmn9idssvffrgv4y5h19fm698a7h8bs7y"))))
     (build-system gnu-build-system)
     (propagated-inputs
      ;; To get util-macros in (almost?) all package inputs.
@@ -5813,7 +5813,7 @@ programs that cannot use the window system directly.")
 (define-public perl-x11-xcb
   (package
     (name "perl-x11-xcb")
-    (version "0.16")
+    (version "0.17")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -5821,7 +5821,7 @@ programs that cannot use the window system directly.")
                     "X11-XCB-" version ".tar.gz"))
               (sha256
                (base32
-                "14mnvr1001py2z1n43l18yaw0plwvjg5pcsyc7k81sa0amw8ahzw"))))
+                "12qyf98s5hbybmh0mblpz50c00i68srq73w5rw31m2dhclj8n96q"))))
     (build-system perl-build-system)
     (arguments
      '(;; Disable parallel build to prevent a race condition.
diff --git a/gnu/services/cgit.scm b/gnu/services/cgit.scm
new file mode 100644
index 0000000000..a868d758a4
--- /dev/null
+++ b/gnu/services/cgit.scm
@@ -0,0 +1,686 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Oleg Pykhalov <go.wigust@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 services cgit)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu services base)
+  #:use-module (gnu services configuration)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu services web)
+  #:use-module (gnu services)
+  #:use-module (gnu system shadow)
+  #:use-module (guix gexp)
+  #:use-module (guix packages)
+  #:use-module (guix records)
+  #:use-module (guix store)
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:export (repository-cgit-configuration
+            cgit-configuration
+            %cgit-configuration-nginx
+            cgit-configuration-nginx-config
+            opaque-cgit-configuration
+            cgit-service-type))
+
+;;; Commentary:
+;;;
+;;; This module provides a service definition for the Cgit a web frontend for
+;;; Git repositories written in C.
+;;;
+;;; Note: fields of <cgit-configuration> and <repository-cgit-configuration>
+;;; should be specified in the specific order.
+;;;
+;;; Code:
+
+(define %cgit-configuration-nginx
+  (nginx-server-configuration
+   (root cgit)
+   (locations
+    (list
+     (nginx-location-configuration
+      (uri "@cgit")
+      (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
+              "fastcgi_param PATH_INFO $uri;"
+              "fastcgi_param QUERY_STRING $args;"
+              "fastcgi_param HTTP_HOST $server_name;"
+              "fastcgi_pass 127.0.0.1:9000;")))))
+   (try-files (list "$uri" "@cgit"))
+   (listen '("80"))
+   (ssl-certificate #f)
+   (ssl-certificate-key #f)))
+
+
+;;;
+;;; Serialize <cgit-configuration>
+;;;
+
+(define (uglify-field-name field-name)
+  (let ((str (symbol->string field-name)))
+    (string-join (string-split (string-delete #\? str) #\-) "-")))
+
+(define (serialize-field field-name val)
+  (format #t "~a=~a\n" (uglify-field-name field-name) val))
+
+(define (serialize-string field-name val)
+  (if (string=? val "") "" (serialize-field field-name val)))
+
+(define (serialize-boolean field-name val)
+  (serialize-field field-name (if val 1 0)))
+
+(define (serialize-list field-name val)
+  (if (null? val) "" (serialize-field field-name (string-join val))))
+
+(define robots-list? list?)
+
+(define (serialize-robots-list field-name val)
+  (if (null? val) "" (serialize-field field-name (string-join val ", "))))
+
+(define (integer? val)
+  (exact-integer? val))
+
+(define (serialize-integer field-name val)
+  (serialize-field field-name val))
+
+(define (serialize-repository-cgit-configuration x)
+  (serialize-configuration x repository-cgit-configuration-fields))
+
+(define (repository-cgit-configuration-list? val)
+  (list? val))
+
+(define (serialize-repository-cgit-configuration-list field-name val)
+  (for-each serialize-repository-cgit-configuration val))
+
+
+;;;
+;;; Serialize <nginx-server-configuration>
+;;;
+
+(define (nginx-server-configuration-list? val)
+  (and (list? val) (and-map nginx-server-configuration? val)))
+
+(define (serialize-nginx-server-configuration-list field-name val)
+  #f)
+
+
+;;;
+;;; Serialize <repository-cgit-configuration>
+;;;
+
+(define (serialize-repo-field field-name val)
+  (format #t "repo.~a=~a\n" (uglify-field-name field-name) val))
+
+(define (serialize-repo-list field-name val)
+  (if (null? val) "" (serialize-repo-field field-name (string-join val))))
+
+(define repo-boolean? boolean?)
+
+(define (serialize-repo-boolean field-name val)
+  (serialize-repo-field field-name (if val 1 0)))
+
+(define (serialize-repo-integer field-name val)
+  (serialize-repo-field field-name val))
+
+(define repo-list? list?)
+
+(define repo-string? string?)
+
+(define (serialize-repo-string field-name val)
+  (if (string=? val "") "" (serialize-repo-field field-name val)))
+
+(define module-link-path? list?)
+
+(define (serialize-module-link-path field-name val)
+  (if (null? val) ""
+      (match val
+        ((path text)
+         (format #t "repo.~a.~a=~a\n"
+                 (string-drop-right (uglify-field-name 'module-link-path)
+                                    (string-length "-path"))
+                 path text)))))
+
+(define repository-directory? string?)
+
+(define (serialize-repository-directory _ val)
+  (if (string=? val "") "" (format #t "scan-path=~a\n" val)))
+
+(define mimetype-alist? list?)
+
+(define (serialize-mimetype-alist field-name val)
+  (format #t "# Mimetypes\n~a"
+          (string-join
+           (map (match-lambda
+                  ((extension mimetype)
+                   (format #f "mimetype.~a=~a"
+                           (symbol->string extension) mimetype)))
+                val) "\n")))
+
+(define-configuration repository-cgit-configuration
+  (snapshots
+   (repo-list '())
+   "A mask of snapshot formats for this repo that cgit generates links for,
+restricted by the global @code{snapshots} setting.")
+  (source-filter
+   (repo-string "")
+   "Override the default @code{source-filter}.")
+  (url
+   (repo-string "")
+   "The relative URL used to access the repository.")
+  (about-filter
+   (repo-string "")
+   "Override the default @code{about-filter}.")
+  (branch-sort
+   (repo-string "")
+   "Flag which, when set to @samp{age}, enables date ordering in the branch
+ref list, and when set to @samp{name} enables ordering by branch name.")
+  (clone-url
+   (repo-list '())
+   "A list of URLs which can be used to clone repo.")
+  (commit-filter
+   (repo-string "")
+   "Override the default @code{commit-filter}.")
+  (commit-sort
+   (repo-string "")
+   "Flag which, when set to @samp{date}, enables strict date ordering in the
+commit log, and when set to @samp{topo} enables strict topological ordering.")
+  (defbranch
+   (repo-string "")
+   "The name of the default branch for this repository.  If no such branch
+exists in the repository, the first branch name (when sorted) is used as
+default instead.  By default branch pointed to by HEAD, or \"master\" if there
+is no suitable HEAD.")
+  (desc
+   (repo-string "")
+   "The value to show as repository description.")
+  (homepage
+   (repo-string "")
+   "The value to show as repository homepage.")
+  (email-filter
+   (repo-string "")
+   "Override the default @code{email-filter}.")
+  (enable-commit-graph?
+   (repo-boolean #f)
+   "A flag which can be used to disable the global setting
+@code{enable-commit-graph?}.")
+  (enable-log-filecount?
+   (repo-boolean #f)
+   "A flag which can be used to disable the global setting
+@code{enable-log-filecount?}.")
+  (enable-log-linecount?
+   (repo-boolean #f)
+   "A flag which can be used to disable the global setting
+@code{enable-log-linecount?}.")
+  (enable-remote-branches?
+   (repo-boolean #f)
+   "Flag which, when set to @code{#t}, will make cgit display remote
+branches in the summary and refs views.")
+  (enable-subject-links?
+   (repo-boolean #f)
+   "A flag which can be used to override the global setting
+@code{enable-subject-links?}.")
+  (enable-html-serving?
+   (repo-boolean #f)
+   "A flag which can be used to override the global setting
+@code{enable-html-serving?}.")
+  (hide?
+   (repo-boolean #f)
+   "Flag which, when set to @code{#t}, hides the repository from the
+repository index.")
+  (ignore?
+   (repo-boolean #f)
+   "Flag which, when set to @samp{#t}, ignores the repository.")
+  (logo
+   (repo-string "")
+   "URL which specifies the source of an image which will be used as a
+logo on this repo’s pages.")
+  (logo-link
+   (repo-string "")
+   "URL loaded when clicking on the cgit logo image.")
+  (owner-filter
+   (repo-string "")
+   "Override the default @code{owner-filter}.")
+  (module-link
+   (repo-string "")
+   "Text which will be used as the formatstring for a hyperlink when a
+submodule is printed in a directory listing.  The arguments for the
+formatstring are the path and SHA1 of the submodule commit.")
+  (module-link-path
+   (module-link-path '())
+   "Text which will be used as the formatstring for a hyperlink when a
+submodule with the specified subdirectory path is printed in a directory
+listing.")
+  (max-stats
+   (repo-string "")
+   "Override the default maximum statistics period.")
+  (name
+   (repo-string "")
+   "The value to show as repository name.")
+  (owner
+   (repo-string "")
+   "A value used to identify the owner of the repository.")
+  (path
+   (repo-string "")
+   "An absolute path to the repository directory.")
+  (readme
+   (repo-string "")
+   "A path (relative to repo) which specifies a file to include verbatim
+as the \"About\" page for this repo.")
+  (section
+   (repo-string "")
+   "The name of the current repository section - all repositories defined
+after this option will inherit the current section name.")
+  (extra-options
+   (repo-list '())
+   "Extra options will be appended to cgitrc file."))
+
+;; Generate a <cgit-configuration> record, which may include a list of
+;; <repository-cgit-configuration>, <nginx-server-configuration>, <package>.
+(define-configuration cgit-configuration
+  (package
+   (package cgit)
+   "The CGIT package.")
+  (nginx
+   (nginx-server-configuration-list (list %cgit-configuration-nginx))
+   "NGINX configuration.")
+  (about-filter
+   (string "")
+   "Specifies a command which will be invoked to format the content of about
+pages (both top-level and for each repository).")
+  (agefile
+   (string "")
+   "Specifies a path, relative to each repository path, which can be used to
+specify the date and time of the youngest commit in the repository.")
+  (auth-filter
+   (string "")
+   "Specifies a command that will be invoked for authenticating repository
+access.")
+  (branch-sort
+   (string "name")
+   "Flag which, when set to @samp{age}, enables date ordering in the branch
+ref list, and when set @samp{name} enables ordering by branch name.")
+  (cache-root
+   (string "/var/cache/cgit")
+   "Path used to store the cgit cache entries.")
+  (cache-static-ttl
+   (integer -1)
+   "Number which specifies the time-to-live, in minutes, for the cached
+version of repository pages accessed with a fixed SHA1.")
+  (cache-dynamic-ttl
+   (integer 5)
+   "Number which specifies the time-to-live, in minutes, for the cached
+version of repository pages accessed without a fixed SHA1.")
+  (cache-repo-ttl
+   (integer 5)
+   "Number which specifies the time-to-live, in minutes, for the cached
+version of the repository summary page.")
+  (cache-root-ttl
+   (integer 5)
+   "Number which specifies the time-to-live, in minutes, for the cached
+version of the repository index page.")
+  (cache-scanrc-ttl
+   (integer 15)
+   "Number which specifies the time-to-live, in minutes, for the result of
+scanning a path for Git repositories.")
+  (cache-about-ttl
+   (integer 15)
+   "Number which specifies the time-to-live, in minutes, for the cached
+version of the repository about page.")
+  (cache-snapshot-ttl
+   (integer 5)
+   "Number which specifies the time-to-live, in minutes, for the cached
+version of snapshots.")
+  (cache-size
+   (integer 0)
+   "The maximum number of entries in the cgit cache. When set to
+@samp{0}, caching is disabled.")
+  (case-sensitive-sort?
+   (boolean #t)
+   "Sort items in the repo list case sensitively.")
+  (clone-prefix
+   (list '())
+   "List of common prefixes which, when combined with a repository URL,
+generates valid clone URLs for the repository.")
+  (clone-url
+   (list '())
+   "List of @code{clone-url} templates.")
+  (commit-filter
+   (string "")
+   "Command which will be invoked to format commit messages.")
+  (commit-sort
+   (string "git log")
+   "Flag which, when set to @samp{date}, enables strict date ordering in the
+commit log, and when set to @samp{topo} enables strict topological
+ordering.")
+  (css
+   (string "/share/cgit/cgit.css")
+   "URL which specifies the css document to include in all cgit pages.")
+  (email-filter
+   (string "")
+   "Specifies a command which will be invoked to format names and email
+address of committers, authors, and taggers, as represented in various
+places throughout the cgit interface.")
+  (embedded?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, will make cgit generate a HTML
+fragment suitable for embedding in other HTML pages.")
+  (enable-commit-graph?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, will make cgit print an ASCII-art
+commit history graph to the left of the commit messages in the
+repository log page.")
+  (enable-filter-overrides?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, allows all filter settings to be
+overridden in repository-specific cgitrc files.")
+  (enable-follow-links?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, allows users to follow a file in the
+log view.")
+  (enable-http-clone?
+   (boolean #t)
+   "If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git
+clones.")
+  (enable-index-links?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, will make cgit generate extra links
+\"summary\", \"commit\", \"tree\" for each repo in the repository index.")
+  (enable-index-owner?
+   (boolean #t)
+   "Flag which, when set to @samp{#t}, will make cgit display the owner of
+each repo in the repository index.")
+  (enable-log-filecount?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, will make cgit print the number of
+modified files for each commit on the repository log page.")
+  (enable-log-linecount?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, will make cgit print the number of
+added and removed lines for each commit on the repository log page.")
+  (enable-remote-branches?
+   (boolean #f)
+   "Flag which, when set to @code{#t}, will make cgit display remote
+branches in the summary and refs views.")
+  (enable-subject-links?
+   (boolean #f)
+   "Flag which, when set to @code{1}, will make cgit use the subject of
+the parent commit as link text when generating links to parent commits
+in commit view.")
+  (enable-html-serving?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, will make cgit use the subject of the
+parent commit as link text when generating links to parent commits in
+commit view.")
+  (enable-tree-linenumbers?
+   (boolean #t)
+   "Flag which, when set to @samp{#t}, will make cgit generate linenumber
+links for plaintext blobs printed in the tree view.")
+  (enable-git-config?
+   (boolean #f)
+   "Flag which, when set to @samp{#f}, will allow cgit to use Git config to
+set any repo specific settings.")
+  (favicon
+   (string "/favicon.ico")
+   "URL used as link to a shortcut icon for cgit.")
+  (footer
+   (string "")
+   "The content of the file specified with this option will be included
+verbatim at the bottom of all pages (i.e. it replaces the standard
+\"generated by...\" message).")
+  (head-include
+   (string "")
+   "The content of the file specified with this option will be included
+verbatim in the HTML HEAD section on all pages.")
+  (header
+   (string "")
+   "The content of the file specified with this option will be included
+verbatim at the top of all pages.")
+  (include
+   (string "")
+   "Name of a configfile to include before the rest of the current config-
+file is parsed.")
+  (index-header
+   (string "")
+   "The content of the file specified with this option will be included
+verbatim above the repository index.")
+  (index-info
+   (string "")
+   "The content of the file specified with this option will be included
+verbatim below the heading on the repository index page.")
+  (local-time?
+   (boolean #f)
+   "Flag which, if set to @samp{#t}, makes cgit print commit and tag times
+in the servers timezone.")
+  (logo
+   (string "/share/cgit/cgit.png")
+   "URL which specifies the source of an image which will be used as a logo
+on all cgit pages.")
+  (logo-link
+   (string "")
+   "URL loaded when clicking on the cgit logo image.")
+  (owner-filter
+   (string "")
+   "Command which will be invoked to format the Owner column of the main
+page.")
+  (max-atom-items
+   (integer 10)
+   "Number of items to display in atom feeds view.")
+  (max-commit-count
+   (integer 50)
+   "Number of entries to list per page in \"log\" view.")
+  (max-message-length
+   (integer 80)
+   "Number of commit message characters to display in \"log\" view.")
+  (max-repo-count
+   (integer 50)
+   "Specifies the number of entries to list per page on the repository index
+page.")
+  (max-repodesc-length
+   (integer 80)
+   "Specifies the maximum number of repo description characters to display
+on the repository index page.")
+  (max-blob-size
+   (integer 0)
+   "Specifies the maximum size of a blob to display HTML for in KBytes.")
+  (max-stats
+   (string "")
+   "Maximum statistics period.  Valid values are @samp{week},@samp{month},
+@samp{quarter} and @samp{year}.")
+  (mimetype
+   (mimetype-alist '((gif "image/gif")
+                     (html "text/html")
+                     (jpg "image/jpeg")
+                     (jpeg "image/jpeg")
+                     (pdf "application/pdf")
+                     (png "image/png")
+                     (svg "image/svg+xml")))
+   "Mimetype for the specified filename extension.")
+  (mimetype-file
+   (string "")
+   "Specifies the file to use for automatic mimetype lookup.")
+  (module-link
+   (string "")
+   "Text which will be used as the formatstring for a hyperlink when a
+submodule is printed in a directory listing.")
+  (nocache?
+   (boolean #f)
+   "If set to the value @samp{#t} caching will be disabled.")
+  (noplainemail?
+   (boolean #f)
+   "If set to @samp{#t} showing full author email addresses will be
+disabled.")
+  (noheader?
+   (boolean #f)
+   "Flag which, when set to @samp{#t}, will make cgit omit the standard
+header on all pages.")
+  ;; TODO: cgit expects a file name
+  ;; that should be created from a list of strings provided by the user.
+  ;;
+  ;; (project-list
+  ;;    (string "")
+  ;;    "A list of subdirectories inside of @code{repository-directory},
+  ;; relative to it, that should loaded as Git repositories.")
+  (readme
+   (string "")
+   "Text which will be used as default value for @code{cgit-repo-readme}.")
+  (remove-suffix?
+   (boolean #f)
+   "If set to @code{#t} and @code{repository-directory} is enabled, if any
+repositories are found with a suffix of @code{.git}, this suffix will be
+removed for the URL and name.")
+  (renamelimit
+   (integer -1)
+   "Maximum number of files to consider when detecting renames.")
+  (repository-sort
+   (string "")
+   "The way in which repositories in each section are sorted.")
+  (robots
+   (robots-list (list "noindex" "nofollow"))
+   "Text used as content for the @code{robots} meta-tag.")
+  (root-desc
+   (string "a fast webinterface for the git dscm")
+   "Text printed below the heading on the repository index page.")
+  (root-readme
+   (string "")
+   "The content of the file specified with this option will be included
+verbatim below thef \"about\" link on the repository index page.")
+  (root-title
+   (string "")
+   "Text printed as heading on the repository index page.")
+  (scan-hidden-path
+   (boolean #f)
+   "If set to @samp{#t} and repository-directory is enabled,
+repository-directory will recurse into directories whose name starts with a
+period.  Otherwise, repository-directory will stay away from such directories,
+considered as \"hidden\".  Note that this does not apply to the \".git\"
+directory in non-bare repos.")
+  (snapshots
+   (list '())
+   "Text which specifies the default set of snapshot formats that cgit
+generates links for.")
+  (repository-directory
+   (repository-directory "/srv/git")
+   "Name of the directory to scan for repositories (represents
+@code{scan-path}).")
+  (section
+   (string "")
+   "The name of the current repository section - all repositories defined
+after this option will inherit the current section name.")
+  (section-sort
+   (string "")
+   "Flag which, when set to @samp{1}, will sort the sections on the repository
+listing by name.")
+  (section-from-path
+   (integer 0)
+   "A number which, if defined prior to repository-directory, specifies how
+many path elements from each repo path to use as a default section name.")
+  (side-by-side-diffs?
+   (boolean #f)
+   "If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
+default.")
+  (source-filter
+   (string "")
+   "Specifies a command which will be invoked to format plaintext blobs in the
+tree view.")
+  (summary-branches
+   (integer 10)
+   "Specifies the number of branches to display in the repository \"summary\"
+view.")
+  (summary-log
+   (integer 10)
+   "Specifies the number of log entries to display in the repository
+\"summary\" view.")
+  (summary-tags
+   (integer 10)
+   "Specifies the number of tags to display in the repository \"summary\"
+view.")
+  (strict-export
+   (string "")
+   "Filename which, if specified, needs to be present within the repository
+for cgit to allow access to that repository.")
+  (virtual-root
+   (string "/")
+   "URL which, if specified, will be used as root for all cgit links.")
+  (repositories
+   (repository-cgit-configuration-list '())
+   "A list of @dfn{cgit-repo} records to use with config.")
+  (extra-options
+   (list '())
+   "Extra options will be appended to cgitrc file."))
+
+(define-configuration opaque-cgit-configuration
+  (cgit
+   (package cgit)
+   "The cgit package.")
+  (cgitrc
+   (string (configuration-missing-field 'opaque-cgit-configuration 'cgitrc))
+   "The contents of the @code{cgitrc} to use.")
+  (cache-root
+   (string "/var/cache/cgit")
+   "Path used to store the cgit cache entries.")
+  (nginx
+   (nginx-server-configuration-list (list %cgit-configuration-nginx))
+   "NGINX configuration."))
+
+(define (cgit-activation config)
+  "Return the activation gexp for CONFIG."
+  (let* ((opaque-config? (opaque-cgit-configuration? config))
+         (config-str
+          (if opaque-config?
+              (opaque-cgit-configuration-cgitrc config)
+              (with-output-to-string
+                (lambda ()
+                  (serialize-configuration config
+                                           cgit-configuration-fields))))))
+    #~(begin
+        (use-modules (guix build utils))
+        (mkdir-p #$(if opaque-config?
+                       (opaque-cgit-configuration-cache-root config)
+                       (cgit-configuration-cache-root config)))
+        (copy-file #$(plain-file "cgitrc" config-str) "/etc/cgitrc"))))
+
+(define (cgit-configuration-nginx-config config)
+  (if (opaque-cgit-configuration? config)
+      (opaque-cgit-configuration-nginx config)
+      (cgit-configuration-nginx config)))
+
+(define cgit-service-type
+  (service-type
+   (name 'cgit)
+   (extensions
+    (list (service-extension activation-service-type
+                             cgit-activation)
+          (service-extension nginx-service-type
+                             cgit-configuration-nginx-config)
+
+          ;; Make sure fcgiwrap is instantiated.
+          (service-extension fcgiwrap-service-type
+                             (const #t))))
+   (default-value (cgit-configuration))
+   (description
+    "Run the cgit web interface, which allows users to browse Git
+repositories.")))
+
+(define (generate-cgit-documentation)
+  (generate-documentation
+   `((cgit-configuration
+      ,cgit-configuration-fields
+      (repositories repository-cgit-configuration))
+     (repository-cgit-configuration
+      ,repository-cgit-configuration-fields))
+   'cgit-configuration))
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 7166ed3d4f..afead87ec7 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -38,26 +38,6 @@
             git-daemon-configuration
             git-daemon-configuration?
 
-            <cgit-configuration-file>
-            cgit-configuration-file
-            cgit-configuration-file?
-            cgit-configuration-file-css
-            cgit-configuration-file-logo
-            cgit-configuration-file-robots
-            cgit-configuration-file-virtual-root
-            cgit-configuration-file-repository-directory
-
-            <cgit-configuration>
-            cgit-configuration
-            cgit-configuration?
-            cgit-configuration-config-file
-            cgit-configuration-package
-
-            %cgit-configuration-nginx
-            cgit-configuration-nginx-config
-
-            cgit-service-type
-
             git-http-configuration
             git-http-configuration?
             git-http-nginx-location-configuration))
@@ -174,107 +154,6 @@ access to exported repositories under @file{/srv/git}."
 
 
 ;;;
-;;; Cgit
-;;;
-
-(define-record-type* <cgit-configuration-file>
-  cgit-configuration-file
-  make-cgit-configuration-file
-  cgit-configuration-file?
-  (css                  cgit-configuration-file-css                  ; string
-                        (default "/share/cgit/cgit.css"))
-  (logo                 cgit-configuration-file-logo                 ; string
-                        (default "/share/cgit/cgit.png"))
-  (robots               cgit-configuration-file-robots               ; list
-                        (default '("noindex" "nofollow")))
-  (virtual-root         cgit-configuration-file-virtual-root         ; string
-                        (default "/"))
-  (repository-directory cgit-configuration-file-repository-directory ; string
-                        (default "/srv/git")))
-
-(define (cgit-configuration-robots-string robots)
-  (string-join robots ", "))
-
-(define-gexp-compiler (cgit-configuration-file-compiler
-                       (file <cgit-configuration-file>) system target)
-  (match file
-    (($ <cgit-configuration-file> css logo
-                                  robots virtual-root repository-directory)
-     (apply text-file* "cgitrc"
-            (letrec-syntax ((option (syntax-rules ()
-                                      ((_ key value)
-                                       (if value
-                                           `(,key "=" ,value "\n")
-                                           '()))))
-                            (key/value (syntax-rules ()
-                                         ((_ (key value) rest ...)
-                                          (append (option key value)
-                                                  (key/value rest ...)))
-                                         ((_)
-                                          '()))))
-              (key/value ("css" css)
-                         ("logo" logo)
-                         ("robots" (cgit-configuration-robots-string robots))
-                         ("virtual-root" virtual-root)
-                         ("scan-path" repository-directory)))))))
-
-(define %cgit-configuration-nginx
-  (list
-   (nginx-server-configuration
-    (root cgit)
-    (locations
-     (list
-      (nginx-location-configuration
-       (uri "@cgit")
-       (body '("fastcgi_param SCRIPT_FILENAME $document_root/lib/cgit/cgit.cgi;"
-               "fastcgi_param PATH_INFO $uri;"
-               "fastcgi_param QUERY_STRING $args;"
-               "fastcgi_param HTTP_HOST $server_name;"
-               "fastcgi_pass 127.0.0.1:9000;")))))
-    (try-files (list "$uri" "@cgit"))
-    (listen '("80"))
-    (ssl-certificate #f)
-    (ssl-certificate-key #f))))
-
-(define-record-type* <cgit-configuration>
-  cgit-configuration make-cgit-configuration
-  cgit-configuration?
-  (config-file cgit-configuration-config-file
-               (default (cgit-configuration-file)))
-  (package cgit-configuration-package
-           (default cgit))
-  (nginx cgit-configuration-nginx
-         (default %cgit-configuration-nginx)))
-
-(define (cgit-activation config)
-  ;; Cgit compiled with default configuration path
-  #~(begin
-      (use-modules (guix build utils))
-      (mkdir-p "/var/cache/cgit")
-      (copy-file #$(cgit-configuration-config-file config) "/etc/cgitrc")))
-
-(define (cgit-configuration-nginx-config config)
-  (cgit-configuration-nginx config))
-
-(define cgit-service-type
-  (service-type
-   (name 'cgit)
-   (extensions
-    (list (service-extension activation-service-type
-                             cgit-activation)
-          (service-extension nginx-service-type
-                             cgit-configuration-nginx-config)
-
-          ;; Make sure fcgiwrap is instantiated.
-          (service-extension fcgiwrap-service-type
-                             (const #t))))
-   (default-value (cgit-configuration))
-   (description
-    "Run the Cgit web interface, which allows users to browse Git
-repositories.")))
-
-
-;;;
 ;;; HTTP access.  Add the result of calling
 ;;; git-http-nginx-location-configuration to an nginx-server-configuration's
 ;;; "locations" field.
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 9882cdbe28..8024739734 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
+;;; Copyright © 2017, 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;;
@@ -26,6 +26,7 @@
   #:use-module (gnu system vm)
   #:use-module (gnu services)
   #:use-module (gnu services version-control)
+  #:use-module (gnu services cgit)
   #:use-module (gnu services web)
   #:use-module (gnu services networking)
   #:use-module (gnu packages version-control)
diff --git a/guix/build-system/trivial.scm b/guix/build-system/trivial.scm
index 350b1df553..b50ef7cd92 100644
--- a/guix/build-system/trivial.scm
+++ b/guix/build-system/trivial.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,7 +36,7 @@
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
-                guile builder modules)
+                guile builder modules allowed-references)
   "Return a bag for NAME."
   (bag
     (name name)
@@ -51,19 +51,36 @@
     (build (if target trivial-cross-build trivial-build))
     (arguments `(#:guile ,guile
                  #:builder ,builder
-                 #:modules ,modules))))
+                 #:modules ,modules
+                 #:allowed-references ,allowed-references))))
 
 (define* (trivial-build store name inputs
                         #:key
                         outputs guile system builder (modules '())
-                        search-paths)
+                        search-paths allowed-references)
   "Run build expression BUILDER, an expression, for SYSTEM.  SOURCE is
 ignored."
+  (define canonicalize-reference
+    (match-lambda
+     ((? package? p)
+      (derivation->output-path (package-derivation store p system
+                                                   #:graft? #f)))
+     (((? package? p) output)
+      (derivation->output-path (package-derivation store p system
+                                                   #:graft? #f)
+                               output))
+     ((? string? output)
+      output)))
+
   (build-expression->derivation store name builder
                                 #:inputs inputs
                                 #:system system
                                 #:outputs outputs
                                 #:modules modules
+                                #:allowed-references
+                                (and allowed-references
+                                     (map canonicalize-reference
+                                          allowed-references))
                                 #:guile-for-build
                                 (guile-for-build store guile system)))
 
@@ -71,14 +88,29 @@ ignored."
                               #:key
                               target native-drvs target-drvs
                               outputs guile system builder (modules '())
-                              search-paths native-search-paths)
+                              search-paths native-search-paths
+                              allowed-references)
   "Run build expression BUILDER, an expression, for SYSTEM.  SOURCE is
 ignored."
+  (define canonicalize-reference
+    (match-lambda
+     ((? package? p)
+      (derivation->output-path (package-cross-derivation store p system)))
+     (((? package? p) output)
+      (derivation->output-path (package-cross-derivation store p system)
+                               output))
+     ((? string? output)
+      output)))
+
   (build-expression->derivation store name builder
                                 #:inputs (append native-drvs target-drvs)
                                 #:system system
                                 #:outputs outputs
                                 #:modules modules
+                                #:allowed-references
+                                (and allowed-references
+                                     (map canonicalize-reference
+                                          allowed-references))
                                 #:guile-for-build
                                 (guile-for-build store guile system)))
 
diff --git a/guix/build/download.scm b/guix/build/download.scm
index 1b630a9d6d..315a3554ec 100644
--- a/guix/build/download.scm
+++ b/guix/build/download.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -321,14 +321,6 @@ host name without trailing dot."
    ((uri? uri-or-string) uri-or-string)
    (else (error "Invalid URI" uri-or-string))))
 
-(define current-http-proxy
-  ;; XXX: Add a dummy definition for Guile < 2.0.10; this is used in
-  ;; 'open-socket-for-uri'.
-  (or (and=> (module-variable (resolve-interface '(web client))
-                              'current-http-proxy)
-             variable-ref)
-      (const #f)))
-
 (define* (open-socket-for-uri uri-or-string #:key timeout)
   "Return an open input/output port for a connection to URI.  When TIMEOUT is
 not #f, it must be a (possibly inexact) number denoting the maximum duration
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 0cb630cfb3..25726b885e 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
@@ -350,39 +350,6 @@ expansion-time error is raised if FIELD does not exist in TYPE."
 ;;; FFI.
 ;;;
 
-(define %libc-errno-pointer
-  ;; 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                                     ;for Guile < 2.0.12
-  (if %libc-errno-pointer
-      (let ((bv (pointer->bytevector %libc-errno-pointer (sizeof int))))
-        (lambda ()
-          "Return the current errno."
-          ;; XXX: We assume that nothing changes 'errno' while we're doing all this.
-          ;; In particular, that means that no async must be running here.
-
-          ;; Use one of the fixed-size native-ref procedures because they are
-          ;; optimized down to a single VM instruction, which reduces the risk
-          ;; that we fiddle with 'errno' (needed on Guile 2.0.5, libc 2.11.)
-          (let-syntax ((ref (lambda (s)
-                              (syntax-case s ()
-                                ((_ bv)
-                                 (case (sizeof int)
-                                   ((4)
-                                    #'(bytevector-s32-native-ref bv 0))
-                                   ((8)
-                                    #'(bytevector-s64-native-ref bv 0))
-                                   (else
-                                    (error "unsupported 'int' size"
-                                           (sizeof int)))))))))
-            (ref bv))))
-      (lambda () 0)))
-
 (define (call-with-restart-on-EINTR thunk)
   (let loop ()
     (catch 'system-error
@@ -406,17 +373,8 @@ the returned procedure is called."
     (lambda ()
       (let ((ptr (dynamic-func name (dynamic-link))))
         ;; 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))))))))
+        (pointer->procedure return-type ptr argument-types
+                            #:return-errno? #t)))
     (lambda args
       (lambda _
         (error (format #f "~a: syscall->procedure failed: ~s"
diff --git a/guix/hash.scm b/guix/hash.scm
index 44e4472580..773b9d4777 100644
--- a/guix/hash.scm
+++ b/guix/hash.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -159,7 +159,6 @@ data read from PORT.  The thunk always returns the same value."
 
   (define (unbuffered port)
     ;; Guile <= 2.0.9 does not support 'setvbuf' on custom binary input ports.
-    ;; If you get a wrong-type-arg error here, the fix is to upgrade Guile.  :-)
     (setvbuf port _IONBF)
     port)
 
diff --git a/guix/http-client.scm b/guix/http-client.scm
index bab31875d1..e8a2a23fc5 100644
--- a/guix/http-client.scm
+++ b/guix/http-client.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2012, 2015 Free Software Foundation, Inc.
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -69,158 +69,6 @@
   (reason http-get-error-reason))                 ; string
 
 
-(define-syntax when-guile<=2.0.5-or-otherwise-broken
-  (lambda (s)
-    (syntax-case s ()
-      ((_ body ...)
-       ;; Always emit BODY, regardless of VERSION, because sometimes this code
-       ;; might be compiled with a recent Guile and run with 2.0.5---e.g.,
-       ;; when using "guix pull".
-       #'(begin body ...)))))
-
-(when-guile<=2.0.5-or-otherwise-broken
- ;; Backport of Guile commits 312e79f8 ("Add HTTP Chunked Encoding support to
- ;; web modules."), 00d3ecf2 ("http: Do not buffer HTTP chunks."), and 53b8d5f
- ;; ("web: Gracefully handle premature EOF when reading chunk header.")
-
- (use-modules (ice-9 rdelim))
-
- (define %web-http
-   (resolve-module '(web http)))
-
- ;; Chunked Responses
- (define (read-chunk-header port)
-   "Read a chunk header from PORT and return the size in bytes of the
- upcoming chunk."
-   (match (read-line port)
-     ((? eof-object?)
-      ;; Connection closed prematurely: there's nothing left to read.
-      0)
-     (str
-      (let ((extension-start (string-index str
-                                           (lambda (c)
-                                             (or (char=? c #\;)
-                                                 (char=? c #\return))))))
-        (string->number (if extension-start       ; unnecessary?
-                            (substring str 0 extension-start)
-                            str)
-                        16)))))
-
- (define* (make-chunked-input-port port #:key (keep-alive? #f))
-   "Returns a new port which translates HTTP chunked transfer encoded
-data from PORT into a non-encoded format. Returns eof when it has
-read the final chunk from PORT. This does not necessarily mean
-that there is no more data on PORT. When the returned port is
-closed it will also close PORT, unless the KEEP-ALIVE? is true."
-   (define (close)
-     (unless keep-alive?
-       (close-port port)))
-
-   (define chunk-size 0)     ;size of the current chunk
-   (define remaining 0)      ;number of bytes left from the current chunk
-   (define finished? #f)     ;did we get all the chunks?
-
-   (define (read! bv idx to-read)
-     (define (loop to-read num-read)
-       (cond ((or finished? (zero? to-read))
-              num-read)
-             ((zero? remaining)                    ;get a new chunk
-              (let ((size (read-chunk-header port)))
-                (set! chunk-size size)
-                (set! remaining size)
-                (if (zero? size)
-                    (begin
-                      (set! finished? #t)
-                      num-read)
-                    (loop to-read num-read))))
-             (else                           ;read from the current chunk
-              (let* ((ask-for (min to-read remaining))
-                     (read    (get-bytevector-n! port bv (+ idx num-read)
-                                                 ask-for)))
-                (if (eof-object? read)
-                    (begin                         ;premature termination
-                      (set! finished? #t)
-                      num-read)
-                    (let ((left (- remaining read)))
-                      (set! remaining left)
-                      (when (zero? left)
-                        ;; We're done with this chunk; read CR and LF.
-                        (get-u8 port) (get-u8 port))
-                      (loop (- to-read read)
-                            (+ num-read read))))))))
-     (loop to-read 0))
-
-   (make-custom-binary-input-port "chunked input port" read! #f #f close))
-
- ;; Chunked encoding support in Guile <= 2.0.11 would load whole chunks in
- ;; memory---see <http://bugs.gnu.org/19939>.
- (when (module-variable %web-http 'read-chunk-body)
-   (module-set! %web-http 'make-chunked-input-port make-chunked-input-port))
-
- (define (make-delimited-input-port port len keep-alive?)
-   "Return an input port that reads from PORT, and makes sure that
-exactly LEN bytes are available from PORT.  Closing the returned port
-closes PORT, unless KEEP-ALIVE? is true."
-   (define bytes-read 0)
-
-   (define (fail)
-     ((@@ (web response) bad-response)
-      "EOF while reading response body: ~a bytes of ~a"
-      bytes-read len))
-
-   (define (read! bv start count)
-     ;; Read at most LEN bytes in total.  HTTP/1.1 doesn't say what to do
-     ;; when a server provides more than the Content-Length, but it seems
-     ;; wise to just stop reading at LEN.
-     (let ((count (min count (- len bytes-read))))
-       (let loop ((ret (get-bytevector-n! port bv start count)))
-         (cond ((eof-object? ret)
-                (if (= bytes-read len)
-                    0                              ; EOF
-                    (fail)))
-               ((and (zero? ret) (> count 0))
-                ;; Do not return zero since zero means EOF, so try again.
-                (loop (get-bytevector-n! port bv start count)))
-               (else
-                (set! bytes-read (+ bytes-read ret))
-                ret)))))
-
-   (define close
-     (and (not keep-alive?)
-          (lambda ()
-            (close-port port))))
-
-   (make-custom-binary-input-port "delimited input port" read! #f #f close))
-
- (define (read-header-line port)
-   "Read an HTTP header line and return it without its final CRLF or LF.
-Raise a 'bad-header' exception if the line does not end in CRLF or LF,
-or if EOF is reached."
-   (match (%read-line port)
-     (((? string? line) . #\newline)
-      ;; '%read-line' does not consider #\return a delimiter; so if it's
-      ;; there, remove it.  We are more tolerant than the RFC in that we
-      ;; tolerate LF-only endings.
-      (if (string-suffix? "\r" line)
-          (string-drop-right line 1)
-          line))
-     ((line . _)                                ;EOF or missing delimiter
-      ((@@ (web http) bad-header) 'read-header-line line))))
-
- (unless (guile-version>? "2.0.11")
-   ;; Guile <= 2.0.9 had a bug whereby 'response-body-port' would read more
-   ;; than what 'content-length' says.  See Guile commit 802a25b.
-   ;; Guile <= 2.0.11 had a bug whereby the 'close' method of the response
-   ;; body port would fail with wrong-arg-num.  See Guile commit 5a10e41.
-   (module-set! (resolve-module '(web response))
-                'make-delimited-input-port make-delimited-input-port)
-
-   ;; Guile <= 2.0.11 was affected by <http://bugs.gnu.org/22273>.  See Guile
-   ;; commit 4c7732c.
-   (when (module-variable %web-http 'read-line*)
-     (module-set! %web-http 'read-line* read-header-line))))
-
-
 (define* (http-fetch uri #:key port (text? #f) (buffered? #t)
                      keep-alive? (verify-certificate? #t)
                      (headers '((user-agent . "GNU Guile"))))
diff --git a/guix/import/cpan.scm b/guix/import/cpan.scm
index 2ef02c43a4..58c051e283 100644
--- a/guix/import/cpan.scm
+++ b/guix/import/cpan.scm
@@ -131,7 +131,11 @@ or #f on failure.  MODULE should be e.g. \"Test::Script\""
      ;; version is sometimes not quoted in the module json, so it gets
      ;; imported into Guile as a number, so convert it to a string.
      (number->string version))
-    (version version)))
+    (version
+     ;; Sometimes we get a "v" prefix.  Strip it.
+     (if (string-prefix? "v" version)
+         (string-drop version 1)
+         version))))
 
 (define (perl-package)
   "Return the 'perl' package.  This is a lazy reference so that we don't
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 8e3e49e444..95dc9746bd 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
@@ -494,19 +494,19 @@ must be a manifest-pattern."
 Remove MANIFEST entries that have the same name and output as ENTRIES."
   (define (same-entry? entry name output)
     (match entry
-      (($ <manifest-entry> entry-name _ entry-output _ ...)
+      (($ <manifest-entry> entry-name _ entry-output _)
        (and (equal? name entry-name)
             (equal? output entry-output)))))
 
   (make-manifest
-   (append entries
-           (fold (lambda (entry result)
-                   (match entry
-                     (($ <manifest-entry> name _ out _ ...)
-                      (filter (negate (cut same-entry? <> name out))
-                              result))))
-                 (manifest-entries manifest)
-                 entries))))
+   (fold (lambda (entry result)                   ;XXX: quadratic
+           (match entry
+             (($ <manifest-entry> name _ out _)
+              (cons entry
+                    (remove (cut same-entry? <> name out)
+                            result)))))
+         (manifest-entries manifest)
+         entries)))
 
 (define (manifest-lookup manifest pattern)
   "Return the first item of MANIFEST that matches PATTERN, or #f if there is
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 617e102d93..d8b80efe8e 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2013, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
@@ -247,11 +247,15 @@ specified in MANIFEST, a manifest object."
 description matches at least one of REGEXPS sorted by relevance, and the list
 of relevance scores."
   (let ((matches (fold-packages (lambda (package result)
-                                  (match (package-relevance package regexps)
-                                    ((? zero?)
-                                     result)
-                                    (score
-                                     (cons (list package score) result))))
+                                  (if (package-superseded package)
+                                      result
+                                      (match (package-relevance package
+                                                                regexps)
+                                        ((? zero?)
+                                         result)
+                                        (score
+                                         (cons (list package score)
+                                               result)))))
                                 '())))
     (unzip2 (sort matches
                   (lambda (m1 m2)
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 2fd2bf8104..8e1119fb49 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Nikita Karetnikov <nikita@karetnikov.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -212,15 +212,7 @@ provide."
            (begin
              (warning (G_ "while fetching ~a: server is somewhat slow~%")
                       (uri->string uri))
-             (warning (G_ "try `--no-substitutes' if the problem persists~%"))
-
-             ;; Before Guile v2.0.9-39-gfe51c7b, EINTR was reported to the user,
-             ;; and thus PORT had to be closed and re-opened.  This is not the
-             ;; case afterward.
-             (unless (or (guile-version>? "2.0.9")
-                         (version>? (version) "2.0.9.39"))
-               (when port
-                 (close-connection port))))
+             (warning (G_ "try `--no-substitutes' if the problem persists~%")))
            (begin
              (when (or (not port) (port-closed? port))
                (set! port (guix:open-connection-for-uri
@@ -571,10 +563,8 @@ initial connection on which HTTP requests are sent."
       ;; XXX: Do our own caching to work around inefficiencies when
       ;; communicating over TLS: <http://bugs.gnu.org/22966>.
       (let-values (((buffer get) (open-bytevector-output-port)))
-        ;; On Guile > 2.0.9, inherit the HTTP proxying property from P.
-        (when (module-variable (resolve-interface '(web http))
-                               'http-proxy-port?)
-          (set-http-proxy-port?! buffer (http-proxy-port? p)))
+        ;; Inherit the HTTP proxying property from P.
+        (set-http-proxy-port?! buffer (http-proxy-port? p))
 
         (for-each (cut write-request <> buffer)
                   (at-most 1000 requests))
diff --git a/m4/guix.m4 b/m4/guix.m4
index 721285b014..8e174e92e5 100644
--- a/m4/guix.m4
+++ b/m4/guix.m4
@@ -136,23 +136,6 @@ AC_DEFUN([GUIX_ASSERT_GUILE_FEATURES], [
   done
 ])
 
-dnl GUIX_CHECK_UNBUFFERED_CBIP
-dnl
-dnl Check whether 'setbvuf' works on custom binary input ports (CBIPs), as is
-dnl the case starting with Guile 2.0.10.
-AC_DEFUN([GUIX_CHECK_UNBUFFERED_CBIP], [
-  AC_CACHE_CHECK([whether Guile's custom binary input ports support 'setvbuf'],
-    [ac_cv_guix_cbips_support_setvbuf],
-    [if "$GUILE" -c "(use-modules (rnrs io ports))			\
-       (let ((p (make-custom-binary-input-port \"cbip\" pk #f #f #f)))	\
-         (setvbuf p _IONBF))" >&5 2>&1
-     then
-       ac_cv_guix_cbips_support_setvbuf=yes
-     else
-       ac_cv_guix_cbips_support_setvbuf=no
-     fi])
-])
-
 dnl GUIX_ASSERT_SYNTAX_OBJECT_EQUAL
 dnl
 dnl Guile 2.2.1 was a brown-paper-bag release where 'equal?' wouldn't work
diff --git a/po/guix/pt_BR.po b/po/guix/pt_BR.po
index 0c59e11d68..317f5213f7 100644
--- a/po/guix/pt_BR.po
+++ b/po/guix/pt_BR.po
@@ -2,14 +2,14 @@
 # Copyright (C) 2016 Free Software Foundation, Inc.
 # Copyright (C) 2016 Ludovic Courtès
 # This file is distributed under the same license as the guix package.
-# Rafael Fontenelle <rffontenelle@gmail.com>, 2013, 2016.
+# Rafael Fontenelle <rafaelff@gnome.org>, 2013, 2016, 2018.
 msgid ""
 msgstr ""
-"Project-Id-Version: guix 0.12.0\n"
+"Project-Id-Version: guix 0.14.0\n"
 "Report-Msgid-Bugs-To: ludo@gnu.org\n"
-"POT-Creation-Date: 2016-12-18 15:32+0100\n"
-"PO-Revision-Date: 2016-12-18 17:13-0200\n"
-"Last-Translator: Rafael Fontenelle <rffontenelle@gmail.com>\n"
+"POT-Creation-Date: 2017-11-28 08:56+0100\n"
+"PO-Revision-Date: 2018-02-24 07:29-0200\n"
+"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
 "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
@@ -19,140 +19,185 @@ msgstr ""
 "X-Generator: Virtaal 1.0.0-beta1\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
-#: gnu/packages.scm:79
+#: gnu.scm:82
+#, scheme-format
+msgid "module ~a not found"
+msgstr "módulo ~a não localizado"
+
+#: gnu.scm:100
+msgid ""
+"You may use @command{guix package --show=foo | grep location} to search\n"
+"for the location of package @code{foo}.\n"
+"If you get the line @code{location: gnu/packages/bar.scm:174:2},\n"
+"add @code{bar} to the @code{use-package-modules} form."
+msgstr ""
+"Você pode usara @command{guix package --show=foo | grep location} para pesquisar\n"
+"pela localização do pacote @code{foo}.\n"
+"Se você obtiver a linha @code{location: gnu/packages/bar.scm:174:2},\n"
+"adicione @code{bar} à forma @code{use-package-modules}."
+
+#: gnu.scm:108
+#, scheme-format
+msgid "Try adding @code{(use-package-modules ~a)}."
+msgstr "Tente adicionar @code{(use-package-modules ~a)}."
+
+#: gnu.scm:123
+#, scheme-format
+msgid ""
+"You may use @command{guix system search ~a} to search for a service\n"
+"matching @code{~a}.\n"
+"If you get the line @code{location: gnu/services/foo.scm:188:2},\n"
+"add @code{foo} to the @code{use-service-modules} form."
+msgstr ""
+"Você pode usar @command{guix system search ~a} para pesquisar por um serviço\n"
+"correspondendo a @code{~a}.\n"
+"Se você obtiver a linha @code{location: gnu/services/foo.scm:188:2},\n"
+"adicione @code{foo} à forma @code{use-service-modules}."
+
+#: gnu.scm:132
+#, scheme-format
+msgid "Try adding @code{(use-service-modules ~a)}."
+msgstr "Tente adicionar @code{(use-service-modules ~a)}."
+
+#: gnu/packages.scm:92
 #, scheme-format
 msgid "~a: patch not found"
 msgstr "~a: patch não localizado"
 
-#: gnu/packages.scm:95
+#: gnu/packages.scm:108
 #, scheme-format
 msgid "could not find bootstrap binary '~a' for system '~a'"
 msgstr "não foi possível localizar binário de inicialização \"~a\" para o sistema \"~a\""
 
-#: gnu/packages.scm:147
-#, scheme-format
-msgid "cannot access `~a': ~a~%"
-msgstr "não foi possível acessar \"~a\": ~a~%"
-
-#: gnu/packages.scm:301
+#: gnu/packages.scm:240
 #, scheme-format
 msgid "ambiguous package specification `~a'~%"
 msgstr "especificação ambígua de pacote \"~a\"~%"
 
-#: gnu/packages.scm:302
-#, scheme-format
-msgid "choosing ~a from ~a~%"
-msgstr "escolhendo ~a de ~a~%"
-
-#: gnu/packages.scm:306
+#: gnu/packages.scm:241
 #, scheme-format
-msgid "deprecated NAME-VERSION syntax; use NAME@VERSION instead~%"
-msgstr "sintaxe NOME-VERSÃO obsoleta; em vez disso, use NOME@VERSÃO~%"
+msgid "choosing ~a@~a from ~a~%"
+msgstr "escolhendo ~a@~a de ~a~%"
 
-#: gnu/packages.scm:311 guix/scripts/package.scm:272
+#: gnu/packages.scm:246 guix/scripts/package.scm:271
 #, scheme-format
 msgid "package '~a' has been superseded by '~a'~%"
 msgstr "pacote \"~a\" foi substituído por \"~a\"~%"
 
-#: gnu/packages.scm:318
+#: gnu/packages.scm:253
 #, scheme-format
 msgid "~A: package not found for version ~a~%"
 msgstr "~A: pacote não encontrado para versão ~a~%"
 
-#: gnu/packages.scm:328
+#: gnu/packages.scm:254
 #, scheme-format
 msgid "~A: unknown package~%"
 msgstr "~A: pacote desconhecido~%"
 
-#: gnu/packages.scm:356
+#: gnu/packages.scm:282
 #, scheme-format
 msgid "package `~a' lacks output `~a'~%"
 msgstr "pacote \"~a\" carece de mensagem de saída \"~a\"~%"
 
-#: gnu/services.scm:542
+#: gnu/services.scm:235
+#, scheme-format
+msgid "~a: no value specified for service of type '~a'"
+msgstr "~a: nenhum valor especificado para um serviço do tipo \"~a\""
+
+#: gnu/services.scm:650
 #, scheme-format
-msgid "no target of type '~a' for service ~s"
-msgstr "nenhum alvo do tipo \"~a\" para o serviço ~s"
+msgid "no target of type '~a' for service '~a'"
+msgstr "nenhum alvo do tipo \"~a\" para o serviço \"~a\""
 
-#: gnu/services.scm:553 gnu/services.scm:614
+#: gnu/services.scm:662 gnu/services.scm:723
 #, scheme-format
 msgid "more than one target service of type '~a'"
 msgstr "mais de um serviço alvo do tipo \"~a\""
 
-#: gnu/services.scm:604
+#: gnu/services.scm:713
 #, scheme-format
 msgid "service of type '~a' not found"
 msgstr "serviço do tipo \"~a\" não localizado"
 
-#: gnu/system.scm:522
+#: gnu/system.scm:305
+#, scheme-format
+msgid "unrecognized boot parameters for '~a'~%"
+msgstr "parâmetros de inicialização não reconhecidos para \"~a\"~%"
+
+#: gnu/system.scm:695
 #, scheme-format
 msgid "using a string for file '~a' is deprecated; use 'plain-file' instead~%"
 msgstr "usando um texto para arquivo \"~a\" está obsoleto; em vez disso, use \"plain-file\"~%"
 
-#: gnu/system.scm:538
+#: gnu/system.scm:711
 #, scheme-format
 msgid "using a monadic value for '~a' is deprecated; use 'plain-file' instead~%"
 msgstr "usando um valor monádico para \"~a\" está obsoleto; em vez disso, use \"plain-file\"~%"
 
-#: gnu/system.scm:680
+#: gnu/system.scm:856
 #, scheme-format
 msgid "~a: invalid locale name"
 msgstr "~a: nome de localidade inválido"
 
-#: gnu/system.scm:860
-msgid "/"
-msgstr "/"
-
-#: gnu/system.scm:862
-#, scheme-format
-msgid "unrecognized boot parameters for '~a'~%"
-msgstr "parâmetros de inicialização não reconhecidos para \"~a\"~%"
-
-#: gnu/services/shepherd.scm:165
+#: gnu/services/shepherd.scm:166
 #, scheme-format
 msgid "service '~a' provided more than once"
 msgstr "serviço \"~a\" fornecido mais de uma vez"
 
-#: gnu/services/shepherd.scm:180
+#: gnu/services/shepherd.scm:181
 #, scheme-format
 msgid "service '~a' requires '~a', which is not provided by any service"
 msgstr "serviço \"~a\" requer \"~a\", o que não é fornecido por nenhum serviço"
 
-#: gnu/system/shadow.scm:220
+#: gnu/system/shadow.scm:231
 #, scheme-format
 msgid "supplementary group '~a' of user '~a' is undeclared"
 msgstr "grupo suplementar \"~a\" do usuário \"~a\" não está declarado"
 
-#: gnu/system/shadow.scm:230
+#: gnu/system/shadow.scm:241
 #, scheme-format
 msgid "primary group '~a' of user '~a' is undeclared"
 msgstr "grupo primário \"~a\" do usuário \"~a\" não está declarado"
 
-#: guix/scripts.scm:53
+#: guix/scripts.scm:56
 #, scheme-format
 msgid "invalid argument: ~a~%"
 msgstr "argumento inválido: ~a~%"
 
-#: guix/scripts.scm:79 guix/scripts/download.scm:133 guix/scripts/gc.scm:164
+#: guix/scripts.scm:84 guix/scripts/download.scm:135
 #: guix/scripts/import/cran.scm:82 guix/scripts/import/elpa.scm:77
-#: guix/scripts/pull.scm:219 guix/scripts/lint.scm:1042
-#: guix/scripts/publish.scm:556 guix/scripts/edit.scm:81
-#: guix/scripts/graph.scm:436
+#: guix/scripts/publish.scm:844 guix/scripts/edit.scm:81
 #, scheme-format
 msgid "~A: unrecognized option~%"
 msgstr "~A: opção não reconhecida~%"
 
-#: guix/scripts/build.scm:121
+#: guix/scripts.scm:179
+#, scheme-format
+msgid "Your Guix installation is ~a day old.\n"
+msgid_plural "Your Guix installation is ~a days old.\n"
+msgstr[0] "Sua instalação do Guix tem ~a dia.\n"
+msgstr[1] "Sua instalação do Guix tem ~a dias.\n"
+
+#: guix/scripts.scm:184
+#, scheme-format
+msgid ""
+"Consider running 'guix pull' followed by\n"
+"'~a' to get up-to-date packages and security updates.\n"
+msgstr ""
+"Considere executar \"guix pull\" seguido de\n"
+"\"~a\" para obter pacotes atualizados e atualizações de segurança.\n"
+
+#: guix/scripts/build.scm:124
 #, scheme-format
 msgid "failed to create GC root `~a': ~a~%"
 msgstr "falha ao criar raiz de GC \"~a\": ~a~%"
 
-#: guix/scripts/build.scm:196
+#: guix/scripts/build.scm:206
 #, scheme-format
 msgid "invalid replacement specification: ~s~%"
 msgstr "especificação de substituição inválida: ~s~%"
 
-#: guix/scripts/build.scm:253
+#: guix/scripts/build.scm:263
 msgid ""
 "\n"
 "      --with-source=SOURCE\n"
@@ -162,7 +207,7 @@ msgstr ""
 "      --with-source=FONTE\n"
 "                         usa FONTE ao compilar o pacote correspondente"
 
-#: guix/scripts/build.scm:256
+#: guix/scripts/build.scm:266
 msgid ""
 "\n"
 "      --with-input=PACKAGE=REPLACEMENT\n"
@@ -172,7 +217,7 @@ msgstr ""
 "      --with-input=PACOTE=SUBSTITUIÇÃO\n"
 "                         substitui a dependência PACOTE por SUBSTITUIÇÃO"
 
-#: guix/scripts/build.scm:259
+#: guix/scripts/build.scm:269
 msgid ""
 "\n"
 "      --with-graft=PACKAGE=REPLACEMENT\n"
@@ -182,12 +227,12 @@ msgstr ""
 "      --with-graft=PACOTE=SUBSTITUIÇÃO\n"
 "                         insere SUBSTITUIÇÃO em pacotes referindo-se a PACOTE"
 
-#: guix/scripts/build.scm:284
+#: guix/scripts/build.scm:294
 #, scheme-format
 msgid "transformation '~a' had no effect on ~a~%"
 msgstr "a transformação \"~a\" não obteve efeito em ~a~%"
 
-#: guix/scripts/build.scm:302
+#: guix/scripts/build.scm:312
 msgid ""
 "\n"
 "  -L, --load-path=DIR    prepend DIR to the package module search path"
@@ -196,7 +241,7 @@ msgstr ""
 "  -L, --load-path=DIR    insere DIR no início do caminho de pesquisa do\n"
 "                         módulo do pacote"
 
-#: guix/scripts/build.scm:304
+#: guix/scripts/build.scm:314
 msgid ""
 "\n"
 "  -K, --keep-failed      keep build tree of failed builds"
@@ -204,7 +249,7 @@ msgstr ""
 "\n"
 "  -K, --keep-failed      mantém a árvore de compilado de pacotes falhos"
 
-#: guix/scripts/build.scm:306
+#: guix/scripts/build.scm:316
 msgid ""
 "\n"
 "  -k, --keep-going       keep going when some of the derivations fail"
@@ -212,7 +257,7 @@ msgstr ""
 "\n"
 "  -k, --keep-going       continua mesmo se algumas das derivações falharem"
 
-#: guix/scripts/build.scm:308
+#: guix/scripts/build.scm:318
 msgid ""
 "\n"
 "  -n, --dry-run          do not build the derivations"
@@ -220,7 +265,7 @@ msgstr ""
 "\n"
 "  -n, --dry-run          não compila as derivações"
 
-#: guix/scripts/build.scm:310
+#: guix/scripts/build.scm:320
 msgid ""
 "\n"
 "      --fallback         fall back to building when the substituter fails"
@@ -228,7 +273,7 @@ msgstr ""
 "\n"
 "      --fallback         volta para compilação quando o substituto falhar"
 
-#: guix/scripts/build.scm:312
+#: guix/scripts/build.scm:322
 msgid ""
 "\n"
 "      --no-substitutes   build instead of resorting to pre-built substitutes"
@@ -237,7 +282,7 @@ msgstr ""
 "      --no-substitutes   compila, em vez de recorrer a substitutos\n"
 "                         pré-construídos"
 
-#: guix/scripts/build.scm:314 guix/scripts/size.scm:220
+#: guix/scripts/build.scm:324 guix/scripts/size.scm:232
 msgid ""
 "\n"
 "      --substitute-urls=URLS\n"
@@ -247,7 +292,7 @@ msgstr ""
 "      --substitute-urls=URLS\n"
 "                         obtém substituto a partir das URLS se autorizadas"
 
-#: guix/scripts/build.scm:317
+#: guix/scripts/build.scm:327
 msgid ""
 "\n"
 "      --no-grafts        do not graft packages"
@@ -255,7 +300,7 @@ msgstr ""
 "\n"
 "      --no-grafts        não faz gráficos de pacotes"
 
-#: guix/scripts/build.scm:319
+#: guix/scripts/build.scm:329
 msgid ""
 "\n"
 "      --no-build-hook    do not attempt to offload builds via the build hook"
@@ -264,7 +309,7 @@ msgstr ""
 "      --no-build-hook    não tenta descarregar compilações via hook de\n"
 "                         compilação"
 
-#: guix/scripts/build.scm:321
+#: guix/scripts/build.scm:331
 msgid ""
 "\n"
 "      --max-silent-time=SECONDS\n"
@@ -275,7 +320,7 @@ msgstr ""
 "                         marca a compilação como falha após transcorridos\n"
 "                         SEGUNDOS de silêncio"
 
-#: guix/scripts/build.scm:324
+#: guix/scripts/build.scm:334
 msgid ""
 "\n"
 "      --timeout=SECONDS  mark the build as failed after SECONDS of activity"
@@ -285,7 +330,7 @@ msgstr ""
 "                         marca a compilação como falha após transcorridos\n"
 "                         SEGUNDOS de atividade"
 
-#: guix/scripts/build.scm:326
+#: guix/scripts/build.scm:336
 msgid ""
 "\n"
 "      --verbosity=LEVEL  use the given verbosity LEVEL"
@@ -293,7 +338,7 @@ msgstr ""
 "\n"
 "      --verbosity=NÍVEL  usa o NÍVEL de detalhamento dado"
 
-#: guix/scripts/build.scm:328
+#: guix/scripts/build.scm:338
 msgid ""
 "\n"
 "      --rounds=N         build N times in a row to detect non-determinism"
@@ -302,7 +347,7 @@ msgstr ""
 "      --rounds=N         compila N vezes de uma vez para detectar\n"
 "                         não determinismo"
 
-#: guix/scripts/build.scm:330
+#: guix/scripts/build.scm:340
 msgid ""
 "\n"
 "  -c, --cores=N          allow the use of up to N CPU cores for the build"
@@ -310,7 +355,7 @@ msgstr ""
 "\n"
 "  -c, --cores=N          permite uso de até N núcleos de CPU para compilação"
 
-#: guix/scripts/build.scm:332
+#: guix/scripts/build.scm:342
 msgid ""
 "\n"
 "  -M, --max-jobs=N       allow at most N build jobs"
@@ -318,12 +363,12 @@ msgstr ""
 "\n"
 "  -M, --max-jobs=N       permite no máximo N trabalhos de compilação"
 
-#: guix/scripts/build.scm:438 guix/scripts/build.scm:445
+#: guix/scripts/build.scm:448 guix/scripts/build.scm:455
 #, scheme-format
 msgid "not a number: '~a' option argument: ~a~%"
 msgstr "não é um número: argumento da opção \"~a\": ~a~%"
 
-#: guix/scripts/build.scm:465
+#: guix/scripts/build.scm:474
 msgid ""
 "Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n"
 "Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"
@@ -331,7 +376,7 @@ msgstr ""
 "Uso: guix build [OPÇÃO]... PACOTE-OU-DERIVAÇÃO...\n"
 "Compila o PACOTE-OU-DERIVAÇÃO dado e returna seus caminhos de saída.\n"
 
-#: guix/scripts/build.scm:467
+#: guix/scripts/build.scm:476
 msgid ""
 "\n"
 "  -e, --expression=EXPR  build the package or derivation EXPR evaluates to"
@@ -339,7 +384,7 @@ msgstr ""
 "\n"
 "  -e, --expression=EXPR  compila o pacote ou derivação que EXPR corresponder"
 
-#: guix/scripts/build.scm:469
+#: guix/scripts/build.scm:478
 msgid ""
 "\n"
 "  -f, --file=FILE        build the package or derivation that the code within\n"
@@ -349,7 +394,7 @@ msgstr ""
 "  -f, --file=ARQUIVO     compila o pacote ou derivação que o código dentro\n"
 "                         de ARQUIVO avaliar"
 
-#: guix/scripts/build.scm:472
+#: guix/scripts/build.scm:481
 msgid ""
 "\n"
 "  -S, --source           build the packages' source derivations"
@@ -357,7 +402,7 @@ msgstr ""
 "\n"
 "  -S, --source           compila as derivações de fontes do pacote"
 
-#: guix/scripts/build.scm:474
+#: guix/scripts/build.scm:483
 msgid ""
 "\n"
 "      --sources[=TYPE]   build source derivations; TYPE may optionally be one\n"
@@ -367,7 +412,7 @@ msgstr ""
 "      --sources[=TIPO]   compila derivações de fonte; como opção, TIPO pode\n"
 "                         um entre \"package\", \"all\" (padrão) ou \"transitive\""
 
-#: guix/scripts/build.scm:477
+#: guix/scripts/build.scm:486 guix/scripts/pack.scm:338
 msgid ""
 "\n"
 "  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""
@@ -375,7 +420,7 @@ msgstr ""
 "\n"
 "  -s, --system=SISTEMA   tenta compilar para SISTEMA (ex.: \"i686-linux\")"
 
-#: guix/scripts/build.scm:479
+#: guix/scripts/build.scm:488 guix/scripts/pack.scm:340
 msgid ""
 "\n"
 "      --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""
@@ -383,7 +428,7 @@ msgstr ""
 "\n"
 "      --target=TRIO      compilação cruzada para TRIO (ex: \"armel-linux-gnu\")"
 
-#: guix/scripts/build.scm:481
+#: guix/scripts/build.scm:490
 msgid ""
 "\n"
 "  -d, --derivations      return the derivation paths of the given packages"
@@ -391,7 +436,7 @@ msgstr ""
 "\n"
 "  -d, --derivations      retorna os caminhos de derivação dos pacotes dados"
 
-#: guix/scripts/build.scm:483
+#: guix/scripts/build.scm:492
 msgid ""
 "\n"
 "      --check            rebuild items to check for non-determinism issues"
@@ -400,7 +445,15 @@ msgstr ""
 "      --check            recompila itens para verificar questões de\n"
 "                         não determinismo"
 
-#: guix/scripts/build.scm:485
+#: guix/scripts/build.scm:494
+msgid ""
+"\n"
+"      --repair           repair the specified items"
+msgstr ""
+"\n"
+"      --repair           conserta os itens especificados"
+
+#: guix/scripts/build.scm:496
 msgid ""
 "\n"
 "  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
@@ -410,7 +463,7 @@ msgstr ""
 "  -r, --root=ARQUIVO     faz do ARQUIVO um link simbólico para o resultado\n"
 "                          e o registra, como um coletor de lixo"
 
-#: guix/scripts/build.scm:488
+#: guix/scripts/build.scm:499
 msgid ""
 "\n"
 "  -q, --quiet            do not show the build log"
@@ -418,7 +471,7 @@ msgstr ""
 "\n"
 "  -q, --quiet            não mostra o log de compilação"
 
-#: guix/scripts/build.scm:490
+#: guix/scripts/build.scm:501
 msgid ""
 "\n"
 "      --log-file         return the log file names for the given derivations"
@@ -427,15 +480,17 @@ msgstr ""
 "      --log-file         retorna o os nomes de arquivos de log para as\n"
 "                         derivações fornecidas"
 
-#: guix/scripts/build.scm:497 guix/scripts/download.scm:81
-#: guix/scripts/package.scm:419 guix/scripts/gc.scm:74
-#: guix/scripts/hash.scm:59 guix/scripts/import.scm:91
-#: guix/scripts/import/cran.scm:47 guix/scripts/pull.scm:83
-#: guix/scripts/substitute.scm:836 guix/scripts/system.scm:748
-#: guix/scripts/lint.scm:991 guix/scripts/publish.scm:74
-#: guix/scripts/edit.scm:44 guix/scripts/size.scm:228
-#: guix/scripts/graph.scm:416 guix/scripts/challenge.scm:182
-#: guix/scripts/container.scm:33 guix/scripts/container/exec.scm:43
+#: guix/scripts/build.scm:508 guix/scripts/download.scm:83
+#: guix/scripts/package.scm:425 guix/scripts/gc.scm:74
+#: guix/scripts/hash.scm:59 guix/scripts/import.scm:92
+#: guix/scripts/import/cran.scm:47 guix/scripts/pull.scm:110
+#: guix/scripts/substitute.scm:889 guix/scripts/system.scm:870
+#: guix/scripts/lint.scm:1090 guix/scripts/publish.scm:94
+#: guix/scripts/edit.scm:44 guix/scripts/size.scm:243
+#: guix/scripts/graph.scm:432 guix/scripts/challenge.scm:241
+#: guix/scripts/copy.scm:122 guix/scripts/pack.scm:349
+#: guix/scripts/weather.scm:156 guix/scripts/container.scm:33
+#: guix/scripts/container/exec.scm:43
 msgid ""
 "\n"
 "  -h, --help             display this help and exit"
@@ -443,15 +498,17 @@ msgstr ""
 "\n"
 "  -h, --help             exibe esta ajuda e sai"
 
-#: guix/scripts/build.scm:499 guix/scripts/download.scm:83
-#: guix/scripts/package.scm:421 guix/scripts/gc.scm:76
-#: guix/scripts/hash.scm:61 guix/scripts/import.scm:93
-#: guix/scripts/import/cran.scm:49 guix/scripts/pull.scm:85
-#: guix/scripts/substitute.scm:838 guix/scripts/system.scm:750
-#: guix/scripts/lint.scm:995 guix/scripts/publish.scm:76
-#: guix/scripts/edit.scm:46 guix/scripts/size.scm:230
-#: guix/scripts/graph.scm:418 guix/scripts/challenge.scm:184
-#: guix/scripts/container.scm:35 guix/scripts/container/exec.scm:45
+#: guix/scripts/build.scm:510 guix/scripts/download.scm:85
+#: guix/scripts/package.scm:427 guix/scripts/gc.scm:76
+#: guix/scripts/hash.scm:61 guix/scripts/import.scm:94
+#: guix/scripts/import/cran.scm:49 guix/scripts/pull.scm:112
+#: guix/scripts/substitute.scm:891 guix/scripts/system.scm:872
+#: guix/scripts/lint.scm:1094 guix/scripts/publish.scm:96
+#: guix/scripts/edit.scm:46 guix/scripts/size.scm:245
+#: guix/scripts/graph.scm:434 guix/scripts/challenge.scm:243
+#: guix/scripts/copy.scm:124 guix/scripts/pack.scm:351
+#: guix/scripts/weather.scm:158 guix/scripts/container.scm:35
+#: guix/scripts/container/exec.scm:45
 msgid ""
 "\n"
 "  -V, --version          display version information and exit"
@@ -459,7 +516,7 @@ msgstr ""
 "\n"
 "  -V, --version          exibe informações da versão e sai"
 
-#: guix/scripts/build.scm:526
+#: guix/scripts/build.scm:537
 #, scheme-format
 msgid ""
 "invalid argument: '~a' option argument: ~a, ~\n"
@@ -468,22 +525,27 @@ msgstr ""
 "argumento inválido: argumento da opção \"~a\": ~a, ~\n"
 "deve ser um entre \"package\", \"all\" ou \"transitive\"~%"
 
-#: guix/scripts/build.scm:573
+#: guix/scripts/build.scm:590
 #, scheme-format
 msgid "~s: not something we can build~%"
 msgstr "~s: não é algo que podemos compilar~%"
 
-#: guix/scripts/build.scm:627
+#: guix/scripts/build.scm:644
 #, scheme-format
 msgid "~a: warning: package '~a' has no source~%"
 msgstr "~a: aviso: pacote \"~a\" não possui fontes~%"
 
-#: guix/scripts/build.scm:661
+#: guix/scripts/build.scm:678
 #, scheme-format
 msgid "no build log for '~a'~%"
 msgstr "nenhum log de compilação para \"~a\"~%"
 
-#: guix/scripts/download.scm:67
+#: guix/discovery.scm:88
+#, scheme-format
+msgid "cannot access `~a': ~a~%"
+msgstr "não foi possível acessar \"~a\": ~a~%"
+
+#: guix/scripts/download.scm:69
 msgid ""
 "Usage: guix download [OPTION] URL\n"
 "Download the file at URL to the store or to the given file, and print its\n"
@@ -499,7 +561,7 @@ msgstr ""
 "Suporte a formatos: \"nix-base32\" (padrão), \"base32\" e \"base16\"\n"
 "(\"hex\" e \"hexadecimal\" também podem ser usados).\n"
 
-#: guix/scripts/download.scm:73 guix/scripts/hash.scm:54
+#: guix/scripts/download.scm:75 guix/scripts/hash.scm:54
 msgid ""
 "\n"
 "  -f, --format=FMT       write the hash in the given format"
@@ -507,7 +569,7 @@ msgstr ""
 "\n"
 "  -f, --format=FMT       escreve o hash no formato FMT dado"
 
-#: guix/scripts/download.scm:75
+#: guix/scripts/download.scm:77
 msgid ""
 "\n"
 "      --no-check-certificate\n"
@@ -517,7 +579,7 @@ msgstr ""
 "      --no-check-certificate\n"
 "                         não valida o certificado de servidores HTTPS "
 
-#: guix/scripts/download.scm:78
+#: guix/scripts/download.scm:80
 msgid ""
 "\n"
 "  -o, --output=FILE      download to FILE"
@@ -525,92 +587,97 @@ msgstr ""
 "\n"
 "  -o, --output=ARQUIVO   baixa para ARQUIVO"
 
-#: guix/scripts/download.scm:101 guix/scripts/hash.scm:82
+#: guix/scripts/download.scm:103 guix/scripts/hash.scm:82
 #, scheme-format
 msgid "unsupported hash format: ~a~%"
 msgstr "sem suporte ao formato de hash: ~a~%"
 
-#: guix/scripts/download.scm:136 guix/scripts/package.scm:879
-#: guix/scripts/publish.scm:558
+#: guix/scripts/download.scm:138 guix/scripts/package.scm:906
+#: guix/scripts/publish.scm:846
 #, scheme-format
 msgid "~A: extraneous argument~%"
 msgstr "~A: argumento estranho~%"
 
-#: guix/scripts/download.scm:144
+#: guix/scripts/download.scm:146
 #, scheme-format
 msgid "no download URI was specified~%"
 msgstr "nenhuma URI de download foi especificada~%"
 
-#: guix/scripts/download.scm:146
+#: guix/scripts/download.scm:151
 #, scheme-format
 msgid "~a: failed to parse URI~%"
 msgstr "~a: falha ao analisar URI~%"
 
-#: guix/scripts/download.scm:156
+#: guix/scripts/download.scm:161
 #, scheme-format
 msgid "~a: download failed~%"
 msgstr "~a: falha no download~%"
 
-#: guix/scripts/package.scm:107
+#: guix/scripts/package.scm:112
 #, scheme-format
 msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
 msgstr "Tente \"info '(guix) Invoking guix package'\" para mais informações.~%"
 
-#: guix/scripts/package.scm:129
+#: guix/scripts/package.scm:134
 #, scheme-format
 msgid "error: while creating directory `~a': ~a~%"
 msgstr "erro: ao criar diretório \"~a\": ~a~%"
 
-#: guix/scripts/package.scm:133
+#: guix/scripts/package.scm:138
 #, scheme-format
 msgid "Please create the `~a' directory, with you as the owner.~%"
 msgstr "Por favor, crie o diretório \"~a\", com você sendo o proprietário.~%"
 
-#: guix/scripts/package.scm:140
+#: guix/scripts/package.scm:145
 #, scheme-format
 msgid "error: directory `~a' is not owned by you~%"
 msgstr "erro: diretório \"~a\" não tem você como proprietário~%"
 
-#: guix/scripts/package.scm:143
+#: guix/scripts/package.scm:148
 #, scheme-format
 msgid "Please change the owner of `~a' to user ~s.~%"
 msgstr "Por favor, altere o proprietário d \"~a\" para o usuário ~s.~%"
 
-#: guix/scripts/package.scm:178
+#: guix/scripts/package.scm:183
 #, scheme-format
 msgid "not removing generation ~a, which is current~%"
 msgstr "não será removida a geração ~a, que é o atual~%"
 
 # geração, criação?
-#: guix/scripts/package.scm:185
+#: guix/scripts/package.scm:190
 #, scheme-format
 msgid "no matching generation~%"
 msgstr "nenhuma geração correspondente~%"
 
-#: guix/scripts/package.scm:188 guix/scripts/package.scm:699
-#: guix/scripts/system.scm:549
+#: guix/scripts/package.scm:193 guix/scripts/package.scm:716
+#: guix/scripts/system.scm:558
 #, scheme-format
 msgid "invalid syntax: ~a~%"
 msgstr "sintaxe inválida: ~a~%"
 
-#: guix/scripts/package.scm:214
+#: guix/scripts/package.scm:219
 #, scheme-format
 msgid "nothing to be done~%"
 msgstr "nada para ser feito~%"
 
-#: guix/scripts/package.scm:228
+#: guix/scripts/package.scm:233
 #, scheme-format
 msgid "~a package in profile~%"
 msgid_plural "~a packages in profile~%"
 msgstr[0] "~a pacote no perfil~%"
 msgstr[1] "~a pacotes no perfil~%"
 
-#: guix/scripts/package.scm:344
+#: guix/scripts/package.scm:313
+#, scheme-format
+msgid "package '~a' no longer exists~%"
+msgstr "o pacote \"~a\" não existe mais~%"
+
+#: guix/scripts/package.scm:351
 #, scheme-format
 msgid "The following environment variable definitions may be needed:~%"
 msgstr "As seguintes definições de variável de ambiente podem ser necessárias:~%"
 
-#: guix/scripts/package.scm:360
+#: guix/scripts/package.scm:366
 msgid ""
 "Usage: guix package [OPTION]...\n"
 "Install, remove, or upgrade packages in a single transaction.\n"
@@ -618,7 +685,7 @@ msgstr ""
 "Uso: guix package [OPÇÃO]...\n"
 "Instala, remove ou atualiza pacotes em uma única transação.\n"
 
-#: guix/scripts/package.scm:362
+#: guix/scripts/package.scm:368
 msgid ""
 "\n"
 "  -i, --install PACKAGE ...\n"
@@ -628,7 +695,7 @@ msgstr ""
 "  -i, --install PACOTE ...\n"
 "                         instala PACOTEs"
 
-#: guix/scripts/package.scm:365
+#: guix/scripts/package.scm:371
 msgid ""
 "\n"
 "  -e, --install-from-expression=EXP\n"
@@ -638,7 +705,7 @@ msgstr ""
 "  -e, --install-from-expression=EXP\n"
 "                         instala o pacote que EXPR corresponder"
 
-#: guix/scripts/package.scm:368
+#: guix/scripts/package.scm:374
 msgid ""
 "\n"
 "  -f, --install-from-file=FILE\n"
@@ -647,10 +714,10 @@ msgid ""
 msgstr ""
 "\n"
 "  -f, --install-from-file=ARQUIVO\n"
-"                         instala o pacote que o código dentro de\n"
-"                         ARQUIVO corresponder"
+"                         instala o pacote cujo código dentro do ARQUIVO\n"
+"                         corresponder"
 
-#: guix/scripts/package.scm:372
+#: guix/scripts/package.scm:378
 msgid ""
 "\n"
 "  -r, --remove PACKAGE ...\n"
@@ -660,7 +727,7 @@ msgstr ""
 "  -r, --remove PACOTE ...\n"
 "                         remove PACOTEs"
 
-#: guix/scripts/package.scm:375
+#: guix/scripts/package.scm:381
 msgid ""
 "\n"
 "  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
@@ -669,7 +736,7 @@ msgstr ""
 "  -u, --upgrade[=REGEXP] atualiza todos os pacotes instalados correspondendo\n"
 "                         à REGEXP"
 
-#: guix/scripts/package.scm:377
+#: guix/scripts/package.scm:383
 msgid ""
 "\n"
 "  -m, --manifest=FILE    create a new profile generation with the manifest\n"
@@ -679,7 +746,7 @@ msgstr ""
 "  -m, --manifest=ARQUIVO cria a geração de um novo perfil com o manifesto\n"
 "                         do ARQUIVO"
 
-#: guix/scripts/package.scm:380
+#: guix/scripts/package.scm:386
 msgid ""
 "\n"
 "      --do-not-upgrade[=REGEXP] do not upgrade any packages matching REGEXP"
@@ -687,7 +754,7 @@ msgstr ""
 "\n"
 "      --do-not-upgrade[=REGEXP] não atualiza pacotes correspondente a REGEXP"
 
-#: guix/scripts/package.scm:382
+#: guix/scripts/package.scm:388
 msgid ""
 "\n"
 "      --roll-back        roll back to the previous generation"
@@ -695,7 +762,7 @@ msgstr ""
 "\n"
 "      --roll-back        reverte para a geração anterior"
 
-#: guix/scripts/package.scm:384
+#: guix/scripts/package.scm:390
 msgid ""
 "\n"
 "      --search-paths[=KIND]\n"
@@ -705,7 +772,7 @@ msgstr ""
 "      --search-paths[=TIPO]\n"
 "                         exibe definições necessárias de variável de ambiente"
 
-#: guix/scripts/package.scm:387
+#: guix/scripts/package.scm:393
 msgid ""
 "\n"
 "  -l, --list-generations[=PATTERN]\n"
@@ -715,7 +782,7 @@ msgstr ""
 "  -l, --list-generations[=PADRÃO]\n"
 "                         lista criações correspondendo a PADRÃO"
 
-#: guix/scripts/package.scm:390
+#: guix/scripts/package.scm:396
 msgid ""
 "\n"
 "  -d, --delete-generations[=PATTERN]\n"
@@ -725,7 +792,7 @@ msgstr ""
 "  -d, --delete-generations[=PADRÃO]\n"
 "                         exclui gerações correspondendo a PADRÃO"
 
-#: guix/scripts/package.scm:393
+#: guix/scripts/package.scm:399
 msgid ""
 "\n"
 "  -S, --switch-generation=PATTERN\n"
@@ -735,7 +802,7 @@ msgstr ""
 "  -S, --switch-generations=PADRÃO\n"
 "                         alterna para a geração correspondendo a PADRÃO"
 
-#: guix/scripts/package.scm:396
+#: guix/scripts/package.scm:402
 msgid ""
 "\n"
 "  -p, --profile=PROFILE  use PROFILE instead of the user's default profile"
@@ -743,7 +810,7 @@ msgstr ""
 "\n"
 "  -p, --profile=PERFIL   usa PERFIL em vez do perfil padrão do usuário"
 
-#: guix/scripts/package.scm:399
+#: guix/scripts/package.scm:405
 msgid ""
 "\n"
 "      --bootstrap        use the bootstrap Guile to build the profile"
@@ -751,7 +818,7 @@ msgstr ""
 "\n"
 "      --bootstrap        usa a inicialização do Guile para compilar o perfil"
 
-#: guix/scripts/package.scm:401 guix/scripts/pull.scm:76
+#: guix/scripts/package.scm:407 guix/scripts/pull.scm:98
 msgid ""
 "\n"
 "      --verbose          produce verbose output"
@@ -759,7 +826,7 @@ msgstr ""
 "\n"
 "      --verbose          produz uma saída mais detalhada"
 
-#: guix/scripts/package.scm:404
+#: guix/scripts/package.scm:410
 msgid ""
 "\n"
 "  -s, --search=REGEXP    search in synopsis and description using REGEXP"
@@ -767,7 +834,7 @@ msgstr ""
 "\n"
 "  -s, --search=REGEXP    pesquisa na sinopse e descrição usando REGEXP"
 
-#: guix/scripts/package.scm:406
+#: guix/scripts/package.scm:412
 msgid ""
 "\n"
 "  -I, --list-installed[=REGEXP]\n"
@@ -777,7 +844,7 @@ msgstr ""
 "  -I, --list-installed[=REGEXP]\n"
 "                         lista pacotes instalados correspondentes a REGEXP"
 
-#: guix/scripts/package.scm:409
+#: guix/scripts/package.scm:415
 msgid ""
 "\n"
 "  -A, --list-available[=REGEXP]\n"
@@ -787,7 +854,7 @@ msgstr ""
 "  -A, --list-available[=REGEXP]\n"
 "                         lista pacotes disponíveis correspondentes a REGEXP"
 
-#: guix/scripts/package.scm:412
+#: guix/scripts/package.scm:418
 msgid ""
 "\n"
 "      --show=PACKAGE     show details about PACKAGE"
@@ -795,23 +862,33 @@ msgstr ""
 "\n"
 "      --show=PACOTE      mostra detalhes sobre o PACOTE"
 
-#: guix/scripts/package.scm:507
+#: guix/scripts/package.scm:470
+#, scheme-format
+msgid "upgrade regexp '~a' looks like a command-line option~%"
+msgstr "a regexp de atualização \"~a\" se parece com uma opção de linha de comando~%"
+
+#: guix/scripts/package.scm:473
+#, scheme-format
+msgid "is this intended?~%"
+msgstr "isso é intencional?~%"
+
+#: guix/scripts/package.scm:518
 #, scheme-format
 msgid "~a: unsupported kind of search path~%"
 msgstr "~a: sem suporte ao tipo de caminho de pesquisa~%"
 
 # geração, criação?
-#: guix/scripts/package.scm:790
+#: guix/scripts/package.scm:815
 #, scheme-format
 msgid "cannot switch to generation '~a'~%"
 msgstr "não foi possível alternar para a geração \"~a\"~%"
 
-#: guix/scripts/package.scm:806
+#: guix/scripts/package.scm:831
 #, scheme-format
 msgid "would install new manifest from '~a' with ~d entries~%"
 msgstr "instalaria novo manifesto a partir de \"~a\" com entradas ~d~%"
 
-#: guix/scripts/package.scm:808
+#: guix/scripts/package.scm:833
 #, scheme-format
 msgid "installing new manifest from '~a' with ~d entries~%"
 msgstr "instalando novo manifesto a partir de \"~a\" com entradas ~d~%"
@@ -934,20 +1011,20 @@ msgstr ""
 msgid "invalid amount of storage: ~a~%"
 msgstr "quantidade inválida de armazenamento: ~a~%"
 
-#: guix/scripts/gc.scm:191
+#: guix/scripts/gc.scm:185
 msgid "already ~h bytes available on ~a, nothing to do~%"
 msgstr "~h bytes já disponíveis em ~a, nada para fazer~%"
 
-#: guix/scripts/gc.scm:194
+#: guix/scripts/gc.scm:188
 msgid "freeing ~h bytes~%"
 msgstr "liberando ~h bytes~%"
 
-#: guix/scripts/gc.scm:206
+#: guix/scripts/gc.scm:200
 #, scheme-format
 msgid "extraneous arguments: ~{~a ~}~%"
 msgstr "argumentos estranhos: ~{~a ~}~%"
 
-#: guix/scripts/gc.scm:226 guix/scripts/gc.scm:229
+#: guix/scripts/gc.scm:220 guix/scripts/gc.scm:223
 msgid "freed ~h bytes~%"
 msgstr "~h bytes liberados~%"
 
@@ -981,23 +1058,18 @@ msgstr ""
 "\n"
 "  -r, --recursive        computa o hash no AQUIVO recursivamente"
 
-#: guix/scripts/hash.scm:109
-#, scheme-format
-msgid "unrecognized option: ~a~%"
-msgstr "opção não reconhecida: ~a~%"
-
-#: guix/scripts/hash.scm:152 guix/ui.scm:478
+#: guix/scripts/hash.scm:150 guix/ui.scm:326 guix/ui.scm:601 guix/ui.scm:654
 #, scheme-format
 msgid "~a~%"
 msgstr "~a~%"
 
-#: guix/scripts/hash.scm:155 guix/scripts/system.scm:879
-#: guix/scripts/system.scm:886 guix/scripts/system.scm:893
+#: guix/scripts/hash.scm:153 guix/scripts/system.scm:1022
+#: guix/scripts/system.scm:1031 guix/scripts/system.scm:1038
 #, scheme-format
 msgid "wrong number of arguments~%"
 msgstr "número errado de argumentos~%"
 
-#: guix/scripts/import.scm:85
+#: guix/scripts/import.scm:86
 msgid ""
 "Usage: guix import IMPORTER ARGS ...\n"
 "Run IMPORTER with ARGS.\n"
@@ -1005,21 +1077,21 @@ msgstr ""
 "Uso: guix import IMPORTADOR ARGUMENTOS ...\n"
 "Executa IMPORTADOR com ARGUMENTOS.\n"
 
-#: guix/scripts/import.scm:88
+#: guix/scripts/import.scm:89
 msgid "IMPORTER must be one of the importers listed below:\n"
 msgstr "IMPORTADOR deve ser um dos importadores listados abaixo:\n"
 
-#: guix/scripts/import.scm:102
+#: guix/scripts/import.scm:103
 #, scheme-format
 msgid "guix import: missing importer name~%"
 msgstr "guix: import: faltando o nome de um importador~%"
 
-#: guix/scripts/import.scm:122
+#: guix/scripts/import.scm:123
 #, scheme-format
 msgid "'~a' import failed~%"
 msgstr "importação de \"~a\" falhou~%"
 
-#: guix/scripts/import.scm:123
+#: guix/scripts/import.scm:124
 #, scheme-format
 msgid "~a: invalid importer~%"
 msgstr "~a: importador inválido~%"
@@ -1092,7 +1164,26 @@ msgstr ""
 msgid "failed to download package '~a'~%"
 msgstr "falha ao baixar localidade: \"~a\"~%"
 
-#: guix/scripts/pull.scm:74
+#: guix/scripts/pull.scm:60
+#, scheme-format
+msgid ""
+"Guile-Git is missing but it is now required by 'guix pull'.\n"
+"Install it by running:\n"
+"\n"
+"  guix package -i ~a\n"
+"  export GUILE_LOAD_PATH=$HOME/.guix-profile/share/guile/site/~a:$GUILE_LOAD_PATH\n"
+"  export GUILE_LOAD_COMPILED_PATH=$HOME/.guix-profile/lib/guile/~a/site-ccache:$GUILE_LOAD_COMPILED_PATH\n"
+"\n"
+msgstr ""
+"Guile-Git está faltando, mas agora é necessário por \"guix pull\".\n"
+"Instale-o executando:\n"
+"\n"
+"  guix package -i ~a\n"
+"  export GUILE_LOAD_PATH=$HOME/.guix-profile/share/guile/site/~a:$GUILE_LOAD_PATH\n"
+"  export GUILE_LOAD_COMPILED_PATH=$HOME/.guix-profile/lib/guile/~a/site-ccache:$GUILE_LOAD_COMPILED_PATH\n"
+"\n"
+
+#: guix/scripts/pull.scm:96
 msgid ""
 "Usage: guix pull [OPTION]...\n"
 "Download and deploy the latest version of Guix.\n"
@@ -1100,179 +1191,188 @@ msgstr ""
 "Uso: guix pull [OPÇÃO]...\n"
 "Baixa e implanta a última versão do Guix.\n"
 
-#: guix/scripts/pull.scm:78
+#: guix/scripts/pull.scm:100
 msgid ""
 "\n"
-"      --url=URL          download the Guix tarball from URL"
+"      --url=URL          download from the Git repository at URL"
 msgstr ""
 "\n"
-"      --url=URL          baixa o tarball do Guix a partir da URL"
+"      --url=URL          baixa do repositório Git na URL"
 
-#: guix/scripts/pull.scm:80
+#: guix/scripts/pull.scm:102
 msgid ""
 "\n"
-"      --bootstrap        use the bootstrap Guile to build the new Guix"
+"      --commit=COMMIT    download the specified COMMIT"
 msgstr ""
 "\n"
-"      --bootstrap        usa inicialização do Guile para compilar o novo Guix"
-
-#: guix/scripts/pull.scm:134
-msgid "tarball did not produce a single source directory"
-msgstr "tarball não produziu um diretório fonte"
+"      --commit=COMMIT    baixa o COMMIT especificado"
 
-#: guix/scripts/pull.scm:152
-#, scheme-format
-msgid "unpacking '~a'...~%"
-msgstr "desempacotando \"~a\"...~%"
+#: guix/scripts/pull.scm:104
+msgid ""
+"\n"
+"      --branch=BRANCH    download the tip of the specified BRANCH"
+msgstr ""
+"\n"
+"      --branch=RAMO    baixa a dica do RAMO especificado"
 
-#: guix/scripts/pull.scm:161
-msgid "failed to unpack source code"
-msgstr "falha ao desempacotar o código fonte"
+#: guix/scripts/pull.scm:106
+msgid ""
+"\n"
+"      --bootstrap        use the bootstrap Guile to build the new Guix"
+msgstr ""
+"\n"
+"      --bootstrap        usa inicialização do Guile para compilar o novo Guix"
 
-#: guix/scripts/pull.scm:204
+#: guix/scripts/pull.scm:192
 msgid "Guix already up to date\n"
 msgstr "Guix já está atualizado\n"
 
-#: guix/scripts/pull.scm:209
+#: guix/scripts/pull.scm:197
 #, scheme-format
 msgid "updated ~a successfully deployed under `~a'~%"
-msgstr "~a atualizado foi implantado com sucesso em \"~a\"~%"
+msgstr "~a atualizado foi implantado com sucesso sob \"~a\"~%"
 
-#: guix/scripts/pull.scm:212
+#: guix/scripts/pull.scm:200
 #, scheme-format
 msgid "failed to update Guix, check the build log~%"
 msgstr "falha ao atualizar Guix; verifique o log de compilação~%"
 
-#: guix/scripts/pull.scm:221
+#: guix/scripts/pull.scm:216
+#, scheme-format
+msgid "cannot enforce use of the Let's Encrypt certificates~%"
+msgstr "não foi possível forçar o uso de certificados Let's Encrypt~%"
+
+#: guix/scripts/pull.scm:218
+#, scheme-format
+msgid "please upgrade Guile-Git~%"
+msgstr "por favor, atualize o Guile-Git~%"
+
+#: guix/scripts/pull.scm:226
+#, scheme-format
+msgid "Git error ~a~%"
+msgstr "erro no Git ~a~%"
+
+#: guix/scripts/pull.scm:228
 #, scheme-format
-msgid "~A: unexpected argument~%"
-msgstr "~A: argumento inesperado~%"
+msgid "Git error: ~a~%"
+msgstr "erro no Git: ~a~%"
 
-#: guix/scripts/pull.scm:230
-msgid "failed to download up-to-date source, exiting\n"
-msgstr "falha ao baixar fonte atualizada; saindo\n"
+#: guix/scripts/pull.scm:262
+#, scheme-format
+msgid "Updating from Git repository at '~a'...~%"
+msgstr "Atualizando a partir do repositório Git \"~a\"...~%"
+
+#: guix/scripts/pull.scm:271
+#, scheme-format
+msgid "Building from Git commit ~a...~%"
+msgstr "Compilando a partir do commit Git ~a...~%"
 
-#: guix/scripts/substitute.scm:112
+#: guix/scripts/substitute.scm:125
 #, scheme-format
 msgid "authentication and authorization of substitutes disabled!~%"
 msgstr "autenticação e autorização de substitutos desabilitado!~%"
 
-#: guix/scripts/substitute.scm:187
+#: guix/scripts/substitute.scm:200
 #, scheme-format
 msgid "download from '~a' failed: ~a, ~s~%"
 msgstr "download de \"~a\" falhou: ~a, ~s~%"
 
-#: guix/scripts/substitute.scm:200
+#: guix/scripts/substitute.scm:213
 #, scheme-format
 msgid "while fetching ~a: server is somewhat slow~%"
 msgstr "enquanto obtinha ~a: servidor está um pouco lento~%"
 
-#: guix/scripts/substitute.scm:202
+#: guix/scripts/substitute.scm:215
 #, scheme-format
 msgid "try `--no-substitutes' if the problem persists~%"
-msgstr "Tente \"--no-substitutes\" se o problema persistir~%"
+msgstr "tente \"--no-substitutes\" se o problema persistir~%"
 
-#: guix/scripts/substitute.scm:220
+#: guix/scripts/substitute.scm:233
 #, scheme-format
 msgid "unsupported substitute URI scheme: ~a~%"
 msgstr "sem suporte ao esquema de URI de substituto: ~a~%"
 
-#: guix/scripts/substitute.scm:254
+#: guix/scripts/substitute.scm:268
 #, scheme-format
 msgid "while fetching '~a': ~a (~s)~%"
 msgstr "enquanto obtinha \"~a\": ~a (~s)~%"
 
-#: guix/scripts/substitute.scm:259
+#: guix/scripts/substitute.scm:273
 #, scheme-format
 msgid "ignoring substitute server at '~s'~%"
 msgstr "ignorando servidor substituto em \"~s\"~%"
 
-#: guix/scripts/substitute.scm:309
+#: guix/scripts/substitute.scm:323
 #, scheme-format
 msgid "signature version must be a number: ~s~%"
 msgstr "a versão de assinatura deve ser um número: ~s~%"
 
-#: guix/scripts/substitute.scm:313
+#: guix/scripts/substitute.scm:327
 #, scheme-format
 msgid "unsupported signature version: ~a~%"
 msgstr "sem suporte à versão da assinatura: ~a~%"
 
-#: guix/scripts/substitute.scm:321
+#: guix/scripts/substitute.scm:335
 #, scheme-format
 msgid "signature is not a valid s-expression: ~s~%"
 msgstr "a assinatura não é uma expressão-s válida: ~s~%"
 
-#: guix/scripts/substitute.scm:325
+#: guix/scripts/substitute.scm:339
 #, scheme-format
 msgid "invalid format of the signature field: ~a~%"
 msgstr "formato inválido do campo de assinatura: ~a~%"
 
-#: guix/scripts/substitute.scm:360
+#: guix/scripts/substitute.scm:374
 #, scheme-format
 msgid "invalid signature for '~a'~%"
 msgstr "assinatura inválida para \"~a\"~%"
 
-#: guix/scripts/substitute.scm:362
+#: guix/scripts/substitute.scm:376
 #, scheme-format
 msgid "hash mismatch for '~a'~%"
 msgstr "hash incompatível para \"~a\"~%"
 
-#: guix/scripts/substitute.scm:364
+#: guix/scripts/substitute.scm:378
 #, scheme-format
 msgid "'~a' is signed with an unauthorized key~%"
 msgstr "\"~a\" está assinado com uma chave não autorizada~%"
 
-#: guix/scripts/substitute.scm:366
+#: guix/scripts/substitute.scm:380
 #, scheme-format
 msgid "signature on '~a' is corrupt~%"
 msgstr "a assinatura em \"~a\" está corrompida~%"
 
-#: guix/scripts/substitute.scm:404
-#, scheme-format
-msgid "substitute at '~a' lacks a signature~%"
-msgstr "o substituto em \"~a\" carece de uma assinatura~%"
-
-#: guix/scripts/substitute.scm:411
-#, scheme-format
-msgid "Found valid signature for ~a~%"
-msgstr "Localizada assinatura válida para ~a~%"
-
-#: guix/scripts/substitute.scm:414
-#, scheme-format
-msgid "From ~a~%"
-msgstr "De ~a~%"
-
-#: guix/scripts/substitute.scm:454
+#: guix/scripts/substitute.scm:465
 #, scheme-format
 msgid "'~a' does not name a store item~%"
 msgstr "\"~a\" não é o nome de um item do armazenamento~%"
 
-#: guix/scripts/substitute.scm:600
+#: guix/scripts/substitute.scm:629
 #, scheme-format
 msgid "updating list of substitutes from '~a'... ~5,1f%"
 msgstr "atualizando a lista de substitutos de \"~a\"... ~5,1f%"
 
-#: guix/scripts/substitute.scm:655
+#: guix/scripts/substitute.scm:693
 #, scheme-format
 msgid "~s: unsupported server URI scheme~%"
 msgstr "~s: sem suporte ao esquema de URI de servidor~%"
 
-#: guix/scripts/substitute.scm:665
+#: guix/scripts/substitute.scm:703
 #, scheme-format
 msgid "'~a' uses different store '~a'; ignoring it~%"
-msgstr "\"~a\" usa um armazenamento diferente \"~a\""
+msgstr "\"~a\" usa um armazenamento diferente \"~a\"; ignorando-o~%"
 
-#: guix/scripts/substitute.scm:810
+#: guix/scripts/substitute.scm:863
 #, scheme-format
 msgid "host name lookup error: ~a~%"
 msgstr "erro na busca pelo nome da máquina: ~a~%"
 
-#: guix/scripts/substitute.scm:815
+#: guix/scripts/substitute.scm:868
 #, scheme-format
 msgid "TLS error in procedure '~a': ~a~%"
 msgstr "erro TLS no procedimento \"~a\": ~a~%"
 
-#: guix/scripts/substitute.scm:826
+#: guix/scripts/substitute.scm:879
 msgid ""
 "Usage: guix substitute [OPTION]...\n"
 "Internal tool to substitute a pre-built binary to a local build.\n"
@@ -1281,7 +1381,7 @@ msgstr ""
 "Ferramenta interna para substituir um binário pré-compilado para\n"
 "uma compilação local.\n"
 
-#: guix/scripts/substitute.scm:828
+#: guix/scripts/substitute.scm:881
 msgid ""
 "\n"
 "      --query            report on the availability of substitutes for the\n"
@@ -1292,7 +1392,7 @@ msgstr ""
 "                         nomes de arquivos de armazenamento passados na\n"
 "                         entrada padrão"
 
-#: guix/scripts/substitute.scm:831
+#: guix/scripts/substitute.scm:884
 msgid ""
 "\n"
 "      --substitute STORE-FILE DESTINATION\n"
@@ -1302,21 +1402,28 @@ msgstr ""
 "\n"
 "      --substitute ARQUIVO-ARMAZENAMENTO DESTINO\n"
 "                         baixa ARQUIVO-ARMAZENAMENTO e armazena-o como um\n"
-"                          Nar no arquivo DESTINO"
+"                         Nar no arquivo DESTINO"
 
-#. TRANSLATORS: The second part of this message looks like
-#. "(4.1MiB installed)"; it shows the size of the package once
-#. installed.
-#: guix/scripts/substitute.scm:904
+#: guix/scripts/substitute.scm:949
 #, scheme-format
-msgid "Downloading ~a~:[~*~; (~a installed)~]...~%"
-msgstr "Baixando ~a~:[~*~; (~a instalado)~]...~%"
+msgid "no valid substitute for '~a'~%"
+msgstr "nenhum substituto válido para \"~a\"~%"
 
-#: guix/scripts/substitute.scm:961
+#: guix/scripts/substitute.scm:956
+#, scheme-format
+msgid "Downloading ~a...~%"
+msgstr "Baixando ~a...~%"
+
+#: guix/scripts/substitute.scm:1012
 msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n"
 msgstr "ACL para importações de pacote parece não estar inicializado, substitutos podem estar indisponíveis\n"
 
-#: guix/scripts/substitute.scm:1057
+#: guix/scripts/substitute.scm:1066
+#, scheme-format
+msgid "~a: invalid URI~%"
+msgstr "~a: URI inválido~%"
+
+#: guix/scripts/substitute.scm:1126
 #, scheme-format
 msgid "~a: unrecognized options~%"
 msgstr "~a: opções desconhecidas~%"
@@ -1355,142 +1462,152 @@ msgstr ""
 msgid "wrong arguments"
 msgstr "argumentos errados"
 
-#: guix/scripts/system.scm:109
+#: guix/scripts/system.scm:135
 #, scheme-format
 msgid "failed to register '~a' under '~a'~%"
 msgstr "falha ao registrar \"~a\" sob \"~a\"~%"
 
-#: guix/scripts/system.scm:142
+#: guix/scripts/system.scm:174
 #, scheme-format
-msgid "failed to install GRUB on device '~a'~%"
-msgstr "falha ao instalar GRUB no dispositivo \"~a\"~%"
+msgid "failed to install bootloader ~a~%"
+msgstr "falha ao instalar carregador de inicialização ~a~%"
 
-#: guix/scripts/system.scm:160
+#: guix/scripts/system.scm:194
 #, scheme-format
 msgid "initializing the current root file system~%"
 msgstr "inicialização do sistema de arquivos raiz atual~%"
 
-#: guix/scripts/system.scm:174
+#: guix/scripts/system.scm:208
 #, scheme-format
 msgid "not running as 'root', so the ownership of '~a' may be incorrect!~%"
 msgstr "execução como não \"root\", então o dono de \"~a\" pode estar incorreto!~%"
 
-#: guix/scripts/system.scm:238
+#: guix/scripts/system.scm:253
 #, scheme-format
 msgid "while talking to shepherd: ~a~%"
 msgstr "enquanto falava com o shepherd: ~a~%"
 
-#: guix/scripts/system.scm:245
+#: guix/scripts/system.scm:260
 #, scheme-format
 msgid "service '~a' could not be found~%"
 msgstr "o serviço \"~a\" não pôde ser localizado~%"
 
-#: guix/scripts/system.scm:248
+#: guix/scripts/system.scm:263
 #, scheme-format
 msgid "service '~a' does not have an action '~a'~%"
 msgstr "o serviço \"~a\" não possui uma ação \"~a\"~%"
 
-#: guix/scripts/system.scm:252
+#: guix/scripts/system.scm:267
 #, scheme-format
 msgid "exception caught while executing '~a' on service '~a':~%"
 msgstr "exceção encontrada ao executar \"~a\" no serviço \"~a\":~%"
 
-#: guix/scripts/system.scm:260
+#: guix/scripts/system.scm:275
 #, scheme-format
 msgid "something went wrong: ~s~%"
 msgstr "algo deu errado: ~s~%"
 
-#: guix/scripts/system.scm:263
+#: guix/scripts/system.scm:278
 #, scheme-format
 msgid "shepherd error~%"
 msgstr "erro do shepherd~%"
 
-#: guix/scripts/system.scm:280
+#: guix/scripts/system.scm:295
 #, scheme-format
 msgid "failed to obtain list of shepherd services~%"
 msgstr "falha ao obter lista de serviços do shepherd~%"
 
-#: guix/scripts/system.scm:300
+#: guix/scripts/system.scm:315
 #, scheme-format
 msgid "unloading service '~a'...~%"
 msgstr "descarregando serviço \"~a\"...~%"
 
-#: guix/scripts/system.scm:308
+#: guix/scripts/system.scm:323
 #, scheme-format
 msgid "loading new services:~{ ~a~}...~%"
 msgstr "carregando novos serviços:~{ ~a~}...~%"
 
-#: guix/scripts/system.scm:332
+#: guix/scripts/system.scm:347
 #, scheme-format
 msgid "activating system...~%"
 msgstr "ativando sistema...~%"
 
 # geração, criação?
-#: guix/scripts/system.scm:425
+#: guix/scripts/system.scm:423
 #, scheme-format
 msgid "cannot switch to system generation '~a'~%"
 msgstr "não foi possível alternar para a geração do sistema \"~a\"~%"
 
-#: guix/scripts/system.scm:459
-#, scheme-format
-msgid "failed to re-install GRUB configuration file: '~a'~%"
-msgstr "falha ao reinstalar o arquivo de configuração do GRUB: \"~a\"~%"
-
-#: guix/scripts/system.scm:489
+#: guix/scripts/system.scm:494
 msgid "the DAG of services"
 msgstr "o DAG de serviços"
 
-#: guix/scripts/system.scm:502
+#: guix/scripts/system.scm:507
 msgid "the dependency graph of shepherd services"
 msgstr "o gráfico de dependência de serviços do shepherd"
 
-#: guix/scripts/system.scm:526
+#: guix/scripts/system.scm:531
 #, scheme-format
 msgid "  file name: ~a~%"
 msgstr "  nome de arquivo: ~a~%"
 
-#: guix/scripts/system.scm:527
+#: guix/scripts/system.scm:532
 #, scheme-format
 msgid "  canonical file name: ~a~%"
 msgstr "  nome de arquivo canônico: ~a~%"
 
 #. TRANSLATORS: Please preserve the two-space indentation.
-#: guix/scripts/system.scm:529
+#: guix/scripts/system.scm:534
 #, scheme-format
 msgid "  label: ~a~%"
 msgstr "  rótulo: ~a~%"
 
-#: guix/scripts/system.scm:530
+#: guix/scripts/system.scm:535
+#, scheme-format
+msgid "  bootloader: ~a~%"
+msgstr "  carregador de inicialização: ~a~%"
+
+#: guix/scripts/system.scm:536
 #, scheme-format
 msgid "  root device: ~a~%"
 msgstr "  dispositivo raiz: ~a~%"
 
-#: guix/scripts/system.scm:531
+#: guix/scripts/system.scm:540
 #, scheme-format
 msgid "  kernel: ~a~%"
 msgstr "  kernel: ~a~%"
 
-#: guix/scripts/system.scm:588
+#: guix/scripts/system.scm:600
+#, scheme-format
+msgid "~a: error: file system with label '~a' not found~%"
+msgstr "~a: erro: sistema de arquivos com rótulo \"~a\" não localizado~%"
+
+#: guix/scripts/system.scm:606
+#, scheme-format
+msgid "~a: error: file system with UUID '~a' not found~%"
+msgstr "~a: erro: sistema de arquivos com UUID \"~a\" não localizado~%"
+
+#: guix/scripts/system.scm:658
 #, scheme-format
 msgid "~a not found: 'guix pull' was never run~%"
 msgstr "~a não localizado: \"guix pull\" nunca foi executado~%"
 
-#: guix/scripts/system.scm:589
+#: guix/scripts/system.scm:659
 #, scheme-format
 msgid "Consider running 'guix pull' before 'reconfigure'.~%"
 msgstr "Considere executar \"guix pull\" antes de \"reconfigure\".~%"
 
-#: guix/scripts/system.scm:590
+#: guix/scripts/system.scm:660
 #, scheme-format
 msgid "Failing to do that may downgrade your system!~%"
 msgstr "Falhar em fazer isso pode fazer um downgrade de seu sistema!~%"
 
-#: guix/scripts/system.scm:661
+#: guix/scripts/system.scm:767
 #, scheme-format
 msgid "initializing operating system under '~a'...~%"
 msgstr "inicializando sistema operacional sob \"~a\"...~%"
 
-#: guix/scripts/system.scm:700
+#: guix/scripts/system.scm:812
 msgid ""
 "Usage: guix system [OPTION ...] ACTION [ARG ...] [FILE]\n"
 "Build the operating system declared in FILE according to ACTION.\n"
@@ -1500,63 +1617,67 @@ msgstr ""
 "Compilação do sistema operacional declarado em ARQUIVO de acordo com AÇÃO.\n"
 "Algumas AÇÕES fornecem suporte adicional a ARGUMENTOS.\n"
 
-#: guix/scripts/system.scm:704 guix/scripts/container.scm:28
+#: guix/scripts/system.scm:816 guix/scripts/container.scm:28
 msgid "The valid values for ACTION are:\n"
 msgstr "Os valores válidos para AÇÃO são:\n"
 
-#: guix/scripts/system.scm:706
+#: guix/scripts/system.scm:818
+msgid "   search           search for existing service types\n"
+msgstr "   search           pesquisa por tipos de serviços existentes\n"
+
+#: guix/scripts/system.scm:820
 msgid "   reconfigure      switch to a new operating system configuration\n"
 msgstr "   reconfigure      alterna para configuração de um novo sistema operacional\n"
 
-#: guix/scripts/system.scm:708
+#: guix/scripts/system.scm:822
 msgid "   roll-back        switch to the previous operating system configuration\n"
 msgstr "   roll-back        alterna para a configuração de sistema operacional anterior\n"
 
-#: guix/scripts/system.scm:710
+#: guix/scripts/system.scm:824
 msgid "   switch-generation switch to an existing operating system configuration\n"
 msgstr "   switch-generation alterna para uma configuração de sistema operacional existente\n"
 
-#: guix/scripts/system.scm:712
+#: guix/scripts/system.scm:826
 msgid "   list-generations list the system generations\n"
 msgstr "   list-generations lista as gerações do sistema\n"
 
-#: guix/scripts/system.scm:714
+#: guix/scripts/system.scm:828
 msgid "   build            build the operating system without installing anything\n"
 msgstr "   build            compila o sistema operacional sem instalador nada\n"
 
-#: guix/scripts/system.scm:716
+#: guix/scripts/system.scm:830
 msgid "   container        build a container that shares the host's store\n"
 msgstr ""
 "   container        compila um contêiner que compartilha o armazenamento\n"
 "                    da máquina\n"
 
-#: guix/scripts/system.scm:718
+#: guix/scripts/system.scm:832
 msgid "   vm               build a virtual machine image that shares the host's store\n"
 msgstr ""
 "   vm               compila uma imagem de máquina virtual que compartilha\n"
 "                    o armazenamento da máquina\n"
 
-#: guix/scripts/system.scm:720
+#: guix/scripts/system.scm:834
 msgid "   vm-image         build a freestanding virtual machine image\n"
 msgstr "   vm-image         compila uma imagem de máquina virtual independente\n"
 
-#: guix/scripts/system.scm:722
+#: guix/scripts/system.scm:836
 msgid "   disk-image       build a disk image, suitable for a USB stick\n"
 msgstr "   disk-image       compila uma imagem de disco, adequada para pendrive USB\n"
 
-#: guix/scripts/system.scm:724
+#: guix/scripts/system.scm:838
 msgid "   init             initialize a root file system to run GNU\n"
 msgstr "   init             inicializa um sistema de arquivos raiz para executar GNU\n"
 
-#: guix/scripts/system.scm:726
+#: guix/scripts/system.scm:840
 msgid "   extension-graph  emit the service extension graph in Dot format\n"
 msgstr "   extension-graph  emite o gráfico da extensão de serviço no formato Dot\n"
 
-#: guix/scripts/system.scm:728
+#: guix/scripts/system.scm:842
 msgid "   shepherd-graph   emit the graph of shepherd services in Dot format\n"
 msgstr "   shepherd-graph   emite o gráfico de serviços do shepherd no formato Dot\n"
 
-#: guix/scripts/system.scm:732
+#: guix/scripts/system.scm:846
 msgid ""
 "\n"
 "  -d, --derivation       return the derivation of the given system"
@@ -1564,7 +1685,7 @@ msgstr ""
 "\n"
 "  -d, --derivation       retorna a derivação do sistema dado"
 
-#: guix/scripts/system.scm:734
+#: guix/scripts/system.scm:848
 msgid ""
 "\n"
 "      --on-error=STRATEGY\n"
@@ -1574,7 +1695,19 @@ msgstr ""
 "      --on-error=ESTRATÉGIA\n"
 "                         aplica ESTRATÉGIA ao ocorrer um erro ao ler ARQUIVO"
 
-#: guix/scripts/system.scm:737
+#: guix/scripts/system.scm:851
+msgid ""
+"\n"
+"      --file-system-type=TYPE\n"
+"                         for 'disk-image', produce a root file system of TYPE\n"
+"                         (one of 'ext4', 'iso9660')"
+msgstr ""
+"\n"
+"      --file-system-type=TIPO\n"
+"                         para \"disk-image\", produz um sistema de arquivos\n"
+"                         raiz do TIPO (um entre \"ext4\", \"iso9660\")"
+
+#: guix/scripts/system.scm:855
 msgid ""
 "\n"
 "      --image-size=SIZE  for 'vm-image', produce an image of SIZE"
@@ -1582,15 +1715,15 @@ msgstr ""
 "\n"
 "      --image-size=TAM   para \"vm-image\", produz uma imagem de TAM"
 
-#: guix/scripts/system.scm:739
+#: guix/scripts/system.scm:857
 msgid ""
 "\n"
-"      --no-grub          for 'init', do not install GRUB"
+"      --no-bootloader    for 'init', do not install a bootloader"
 msgstr ""
 "\n"
-"      --no-grub          para \"init\", não instala GRUB"
+"      --no-bootloader    para \"init\", não instala um carregador de inic."
 
-#: guix/scripts/system.scm:741
+#: guix/scripts/system.scm:859
 msgid ""
 "\n"
 "      --share=SPEC       for 'vm', share host file system according to SPEC"
@@ -1599,7 +1732,20 @@ msgstr ""
 "      --share=ESPEC      para \"vm\", compartilha o sistema de arquivos do\n"
 "                         hospedeiro de acordo com ESPEC"
 
-#: guix/scripts/system.scm:743
+#: guix/scripts/system.scm:861
+msgid ""
+"\n"
+"  -r, --root=FILE        for 'vm', 'vm-image', 'disk-image', 'container',\n"
+"                         and 'build', make FILE a symlink to the result, and\n"
+"                         register it as a garbage collector root"
+msgstr ""
+"\n"
+"  -r, --root=ARQUIVO     para \"vm\", \"vm-image\", \"disk-image\", \"container\",\n"
+"                         e \"build\", faz do ARQUIVO um link simbólico para\n"
+"                         o resultado e o registra, como um coletor de lixo\n"
+"                         central"
+
+#: guix/scripts/system.scm:865
 msgid ""
 "\n"
 "      --expose=SPEC      for 'vm', expose host file system according to SPEC"
@@ -1608,7 +1754,7 @@ msgstr ""
 "      --expose=ESPEC     para \"vm\", expõe o sistema de arquivos do\n"
 "                         hospedeiro de acordo com ESPEC"
 
-#: guix/scripts/system.scm:745
+#: guix/scripts/system.scm:867
 msgid ""
 "\n"
 "      --full-boot        for 'vm', make a full boot sequence"
@@ -1617,45 +1763,49 @@ msgstr ""
 "      --full-boot        para \"vm\", faz uma sequência completa de\n"
 "                         inicialização"
 
-#: guix/scripts/system.scm:830
+#: guix/scripts/system.scm:959
 #, scheme-format
 msgid "no configuration file specified~%"
 msgstr "nenhum arquivo de configuração especificado~%"
 
-#: guix/scripts/system.scm:912
+#: guix/scripts/system.scm:1057
 #, scheme-format
 msgid "~a: unknown action~%"
 msgstr "~a: ação desconhecida~%"
 
-#: guix/scripts/system.scm:927
+#: guix/scripts/system.scm:1072
 #, scheme-format
 msgid "wrong number of arguments for action '~a'~%"
 msgstr "número errado de argumentos para a ação \"~a\"~%"
 
-#: guix/scripts/system.scm:932
+#: guix/scripts/system.scm:1077
 #, scheme-format
 msgid "guix system: missing command name~%"
 msgstr "guix system: faltando um nome de comando~%"
 
-#: guix/scripts/system.scm:934
+#: guix/scripts/system.scm:1079
 #, scheme-format
 msgid "Try 'guix system --help' for more information.~%"
 msgstr "Tente \"guix system --help\" para mais informações.~%"
 
-#: guix/scripts/lint.scm:133
+#: guix/scripts/system/search.scm:64 guix/ui.scm:1057 guix/ui.scm:1071
+msgid "unknown"
+msgstr "desconhecido"
+
+#: guix/scripts/lint.scm:138
 #, scheme-format
 msgid "Available checkers:~%"
 msgstr "Verificadores disponíveis:~%"
 
-#: guix/scripts/lint.scm:157
+#: guix/scripts/lint.scm:162
 msgid "description should not be empty"
 msgstr "a descrição deve não estar vazia"
 
-#: guix/scripts/lint.scm:167
+#: guix/scripts/lint.scm:172
 msgid "Texinfo markup in description is invalid"
-msgstr "Marcação Texinfo na descrição é inválida"
+msgstr "a marcação Texinfo na descrição é inválida"
 
-#: guix/scripts/lint.scm:177
+#: guix/scripts/lint.scm:182
 #, scheme-format
 msgid ""
 "description should not contain ~\n"
@@ -1666,15 +1816,15 @@ msgstr ""
 
 #. TRANSLATORS: '@code' is Texinfo markup and must be kept
 #. as is.
-#: guix/scripts/lint.scm:190
+#: guix/scripts/lint.scm:195
 msgid "use @code or similar ornament instead of quotes"
 msgstr "use @code ou ornamento similar em vez de aspas"
 
-#: guix/scripts/lint.scm:197
+#: guix/scripts/lint.scm:202
 msgid "description should start with an upper-case letter or digit"
 msgstr "a descrição deve iniciar com uma letra maiúscula ou dígito"
 
-#: guix/scripts/lint.scm:213
+#: guix/scripts/lint.scm:218
 #, scheme-format
 msgid ""
 "sentences in description should be followed ~\n"
@@ -1683,225 +1833,256 @@ msgstr ""
 "sentenças nas descrição devem ser seguidas ~\n"
 "por dois espaços; possível infração~p em ~{~a~^, ~}"
 
-#: guix/scripts/lint.scm:231
+#: guix/scripts/lint.scm:236
 #, scheme-format
 msgid "invalid description: ~s"
 msgstr "a descrição inválida: ~s"
 
-#: guix/scripts/lint.scm:256
+#: guix/scripts/lint.scm:281
 #, scheme-format
 msgid "'~a' should probably be a native input"
 msgstr "\"~a\" provavelmente é uma entrada nativa"
 
-#: guix/scripts/lint.scm:280
+#: guix/scripts/lint.scm:297
 #, scheme-format
 msgid "'~a' should probably not be an input at all"
 msgstr "\"~a\" provavelmente deve não ser uma entrada"
 
-#: guix/scripts/lint.scm:306
+#: guix/scripts/lint.scm:314
 msgid "synopsis should not be empty"
 msgstr "a sinopse deve não estar vazia"
 
-#: guix/scripts/lint.scm:314
+#: guix/scripts/lint.scm:322
 msgid "no period allowed at the end of the synopsis"
 msgstr "nenhum ponto permitido ao final da sinopse"
 
-#: guix/scripts/lint.scm:326
+#: guix/scripts/lint.scm:334
 msgid "no article allowed at the beginning of the synopsis"
 msgstr "nenhum artigo permitido no início da sinopse"
 
-#: guix/scripts/lint.scm:333
+#: guix/scripts/lint.scm:341
 msgid "synopsis should be less than 80 characters long"
 msgstr "a sinopse deve ser menor que 80 caracteres"
 
-#: guix/scripts/lint.scm:339
+#: guix/scripts/lint.scm:347
 msgid "synopsis should start with an upper-case letter or digit"
 msgstr "a sinopse deve iniciar com uma letra maiúscula ou dígito"
 
-#: guix/scripts/lint.scm:346
+#: guix/scripts/lint.scm:354
 msgid "synopsis should not start with the package name"
 msgstr "a sinopse deve não iniciar com o nome do pacote"
 
-#: guix/scripts/lint.scm:360
+#: guix/scripts/lint.scm:364
+msgid "Texinfo markup in synopsis is invalid"
+msgstr "Marcação Texinfo na sinopse é inválida"
+
+#: guix/scripts/lint.scm:383
 #, scheme-format
 msgid "invalid synopsis: ~s"
 msgstr "sinopse inválida: ~s"
 
-#: guix/scripts/lint.scm:459
+#: guix/scripts/lint.scm:502
 #, scheme-format
 msgid "URI ~a returned suspiciously small file (~a bytes)"
 msgstr "a URI ~a retornou um arquivo suspeitosamente pequeno (~a bytes)"
 
-#: guix/scripts/lint.scm:468 guix/scripts/lint.scm:480
+#: guix/scripts/lint.scm:512
+#, scheme-format
+msgid "permanent redirect from ~a to ~a"
+msgstr "redirecionamento permanente de ~a para ~a"
+
+#: guix/scripts/lint.scm:519
+#, scheme-format
+msgid "invalid permanent redirect from ~a"
+msgstr "redirecionamento permanente inválido de ~a"
+
+#: guix/scripts/lint.scm:526 guix/scripts/lint.scm:538
 #, scheme-format
 msgid "URI ~a not reachable: ~a (~s)"
 msgstr "a URI ~a não é alcançável: ~a (~s)"
 
-#: guix/scripts/lint.scm:487
+#: guix/scripts/lint.scm:545
 #, scheme-format
 msgid "URI ~a domain not found: ~a"
 msgstr "o domínio da URI ~a não foi localizado: ~a"
 
-#: guix/scripts/lint.scm:495
+#: guix/scripts/lint.scm:553
 #, scheme-format
 msgid "URI ~a unreachable: ~a"
 msgstr "URI ~a inalcançável: ~a"
 
-#: guix/scripts/lint.scm:504 guix/scripts/lint.scm:761
+#: guix/scripts/lint.scm:562
 #, scheme-format
 msgid "TLS certificate error: ~a"
 msgstr "erro de certificado TLS: ~a"
 
-#: guix/scripts/lint.scm:525
+#: guix/scripts/lint.scm:583
 msgid "invalid value for home page"
 msgstr "valor inválido para página inicial"
 
-#: guix/scripts/lint.scm:528
+#: guix/scripts/lint.scm:586
 #, scheme-format
 msgid "invalid home page URL: ~s"
 msgstr "URL de página inicial inválida: ~s"
 
-#: guix/scripts/lint.scm:548
+#: guix/scripts/lint.scm:606
 msgid "file names of patches should start with the package name"
 msgstr "nomes de arquivos de patches devem iniciar com o nome do pacote"
 
-#: guix/scripts/lint.scm:587
+#: guix/scripts/lint.scm:644
 #, scheme-format
 msgid "~a: ~a: proposed synopsis: ~s~%"
 msgstr "~a: ~a: sinopse proposta: ~s~%"
 
-#: guix/scripts/lint.scm:600
+#: guix/scripts/lint.scm:657
 #, scheme-format
 msgid "~a: ~a: proposed description:~%     \"~a\"~%"
 msgstr "~a: ~a: descrição proposta:~%     \"~a\"~%"
 
-#: guix/scripts/lint.scm:642
+#: guix/scripts/lint.scm:699
 msgid "all the source URIs are unreachable:"
 msgstr "todas as URIs fontes estão inalcançáveis:"
 
-#: guix/scripts/lint.scm:665
+#: guix/scripts/lint.scm:721
 msgid "the source file name should contain the package name"
 msgstr "o nome de arquivo fonte deve conter o nome do pacote"
 
-#: guix/scripts/lint.scm:681
+#: guix/scripts/lint.scm:737
 #, scheme-format
 msgid "URL should be 'mirror://~a/~a'"
 msgstr "a URL deve ser \"mirror://~a/~a\""
 
-#: guix/scripts/lint.scm:699 guix/scripts/lint.scm:703
+#: guix/scripts/lint.scm:755 guix/scripts/lint.scm:759
 #, scheme-format
 msgid "failed to create derivation: ~a"
 msgstr "falha ao criar a derivação: ~a"
 
-#: guix/scripts/lint.scm:717
+#: guix/scripts/lint.scm:773
 #, scheme-format
 msgid "failed to create derivation: ~s~%"
 msgstr "falha ao criar a derivação: ~s~%"
 
-#: guix/scripts/lint.scm:727
+#: guix/scripts/lint.scm:783
 msgid "invalid license field"
 msgstr "campo de licença inválido"
 
-#: guix/scripts/lint.scm:744
+#: guix/scripts/lint.scm:799
 #, scheme-format
-msgid "failed to retrieve CVE vulnerabilities from ~s: ~a (~s)~%"
-msgstr "falha ao obter vulnerabilidades CVE de ~s: ~a (~s)~%"
+msgid "~a: HTTP GET error for ~a: ~a (~s)~%"
+msgstr "~a: erro HTTP GET para ~a: ~a (~s)~%"
 
-#: guix/scripts/lint.scm:749 guix/scripts/lint.scm:758
-#: guix/scripts/lint.scm:763
+#: guix/scripts/lint.scm:809
 #, scheme-format
-msgid "assuming no CVE vulnerabilities~%"
-msgstr "presumindo haver nenhuma vulnerabilidade CVE~%"
+msgid "~a: host lookup failure: ~a~%"
+msgstr "~a: falha ao procurar o host: ~a~%"
 
-#: guix/scripts/lint.scm:756
+#: guix/scripts/lint.scm:814
 #, scheme-format
-msgid "failed to lookup NIST host: ~a~%"
-msgstr "falha ao procurar o servidor do NIST: ~a~%"
+msgid "~a: TLS certificate error: ~a"
+msgstr "~a: erro de certificado TLS: ~a"
+
+#: guix/scripts/lint.scm:829
+msgid "while retrieving CVE vulnerabilities"
+msgstr "ao obter vulnerabilidades CVE"
 
-#: guix/scripts/lint.scm:801
+#: guix/scripts/lint.scm:866
 #, scheme-format
 msgid "probably vulnerable to ~a"
 msgstr "provavelmente vulnerável a ~a"
 
-#: guix/scripts/lint.scm:816
+#: guix/scripts/lint.scm:873
+#, scheme-format
+msgid "while retrieving upstream info for '~a'"
+msgstr "ao obter informações do upstream para \"~a\""
+
+#: guix/scripts/lint.scm:881
+#, scheme-format
+msgid "can be upgraded to ~a"
+msgstr "pode ser atualizado para ~a"
+
+#: guix/scripts/lint.scm:896
 #, scheme-format
 msgid "tabulation on line ~a, column ~a"
 msgstr "tabulação na linha ~a, coluna ~a"
 
-#: guix/scripts/lint.scm:825
+#: guix/scripts/lint.scm:905
 #, scheme-format
 msgid "trailing white space on line ~a"
 msgstr "espaço ao final da linha ~a"
 
-#: guix/scripts/lint.scm:835
+#: guix/scripts/lint.scm:915
 #, scheme-format
 msgid "line ~a is way too long (~a characters)"
 msgstr "a linha ~a está grande demais (~a caracteres)"
 
-#: guix/scripts/lint.scm:846
+#: guix/scripts/lint.scm:926
 #, scheme-format
 msgid "line ~a: parentheses feel lonely, move to the previous or next line"
 msgstr "linha ~a: parênteses está solitário, mova-o para a linha anterior ou a seguinte"
 
-#: guix/scripts/lint.scm:901
+#: guix/scripts/lint.scm:996
 msgid "Validate package descriptions"
 msgstr "Valida descrições dos pacotes"
 
-#: guix/scripts/lint.scm:905
+#: guix/scripts/lint.scm:1000
 msgid "Validate synopsis & description of GNU packages"
 msgstr "Valida sinopse & descrição de pacotes GNU"
 
-#: guix/scripts/lint.scm:909
+#: guix/scripts/lint.scm:1004
 msgid "Identify inputs that should be native inputs"
 msgstr "Identifica entradas que devem ser nativas"
 
-#: guix/scripts/lint.scm:913
+#: guix/scripts/lint.scm:1008
 msgid "Identify inputs that should be inputs at all"
 msgstr "Identifica entradas que devem ser entradas"
 
-#: guix/scripts/lint.scm:917
+#: guix/scripts/lint.scm:1012
 msgid "Validate file names and availability of patches"
 msgstr "Valida nomes de arquivos e disponibilidade de patches"
 
-#: guix/scripts/lint.scm:921
+#: guix/scripts/lint.scm:1016
 msgid "Validate home-page URLs"
 msgstr "Valida URLs de site"
 
 #. TRANSLATORS: <license> is the name of a data type and must not be
 #. translated.
-#: guix/scripts/lint.scm:927
+#: guix/scripts/lint.scm:1022
 msgid "Make sure the 'license' field is a <license> or a list thereof"
 msgstr "Certifica que o campo \"license\" é um <license> ou uma lista disto"
 
-#: guix/scripts/lint.scm:932
+#: guix/scripts/lint.scm:1027
 msgid "Validate source URLs"
 msgstr "Valida URLs fonte"
 
-#: guix/scripts/lint.scm:936
+#: guix/scripts/lint.scm:1031
 msgid "Suggest 'mirror://' URLs"
 msgstr "Sugere URLs \"mirror://\""
 
-#: guix/scripts/lint.scm:940
+#: guix/scripts/lint.scm:1035
 msgid "Validate file names of sources"
 msgstr "Valida nomes de arquivos dos fontes"
 
-#: guix/scripts/lint.scm:944
+#: guix/scripts/lint.scm:1039
 msgid "Report failure to compile a package to a derivation"
 msgstr "Relata falha ao compilar um pacote para uma derivação"
 
-#: guix/scripts/lint.scm:948
+#: guix/scripts/lint.scm:1043
 msgid "Validate package synopses"
 msgstr "Valida sinopses do pacotes"
 
-#: guix/scripts/lint.scm:952
+#: guix/scripts/lint.scm:1047
 msgid "Check the Common Vulnerabilities and Exposures (CVE) database"
 msgstr "Verifica o banco de dados de Vulnerabilidades e Exposições Comuns (CVE)"
 
-#: guix/scripts/lint.scm:957
+#: guix/scripts/lint.scm:1052
+msgid "Check the package for new upstream releases"
+msgstr "Verifica o pacote por novos lançamentos do upstream"
+
+#: guix/scripts/lint.scm:1056
 msgid "Look for formatting issues in the source"
 msgstr "Procura por problemas de formatação no fonte"
 
-#: guix/scripts/lint.scm:985
+#: guix/scripts/lint.scm:1084
 msgid ""
 "Usage: guix lint [OPTION]... [PACKAGE]...\n"
 "Run a set of checkers on the specified package; if none is specified,\n"
@@ -1911,7 +2092,7 @@ msgstr ""
 "Executa uma série de verificadores no pacote especificado; se nenhum\n"
 "for especificado, executa-os em todos pacote.\n"
 
-#: guix/scripts/lint.scm:988
+#: guix/scripts/lint.scm:1087
 msgid ""
 "\n"
 "  -c, --checkers=CHECKER1,CHECKER2...\n"
@@ -1921,7 +2102,7 @@ msgstr ""
 "  -c, --checkers=CHECKER1,CHECKER2...\n"
 "                         executa apenas os verificadores especificados"
 
-#: guix/scripts/lint.scm:993
+#: guix/scripts/lint.scm:1092
 msgid ""
 "\n"
 "  -l, --list-checkers    display the list of available lint checkers"
@@ -1929,12 +2110,12 @@ msgstr ""
 "\n"
 "  -l, --list-checkers    exibe a lista de verificações lint disponíveis"
 
-#: guix/scripts/lint.scm:1013
+#: guix/scripts/lint.scm:1112
 #, scheme-format
 msgid "~a: invalid checker~%"
 msgstr "~a: verificador inválido~%"
 
-#: guix/scripts/publish.scm:58
+#: guix/scripts/publish.scm:68
 #, scheme-format
 msgid ""
 "Usage: guix publish [OPTION]...\n"
@@ -1943,15 +2124,15 @@ msgstr ""
 "Uso: guix publish [OPÇÃO]...\n"
 "Publica ~a por HTTP.\n"
 
-#: guix/scripts/publish.scm:60
+#: guix/scripts/publish.scm:70
 msgid ""
 "\n"
 "  -p, --port=PORT        listen on PORT"
 msgstr ""
 "\n"
-"  -p, --port=PORTA       Ouve na PORTA"
+"  -p, --port=PORTA       ouve na PORTA"
 
-#: guix/scripts/publish.scm:62
+#: guix/scripts/publish.scm:72
 msgid ""
 "\n"
 "      --listen=HOST      listen on the network interface for HOST"
@@ -1959,7 +2140,7 @@ msgstr ""
 "\n"
 "      --listen=MÁQUINA   ouve na interface de rede pela MÁQUINA"
 
-#: guix/scripts/publish.scm:64
+#: guix/scripts/publish.scm:74
 msgid ""
 "\n"
 "  -u, --user=USER        change privileges to USER as soon as possible"
@@ -1967,7 +2148,7 @@ msgstr ""
 "\n"
 "  -u, --user=USUÁRIO     altera privilégios para o USUÁRIO assim que possível"
 
-#: guix/scripts/publish.scm:66
+#: guix/scripts/publish.scm:76
 msgid ""
 "\n"
 "  -C, --compression[=LEVEL]\n"
@@ -1977,8 +2158,24 @@ msgstr ""
 "  -C, --compression[=NÍVEL]\n"
 "                         comprime pacotes no NÍVEL"
 
+#: guix/scripts/publish.scm:79
+msgid ""
+"\n"
+"  -c, --cache=DIRECTORY  cache published items to DIRECTORY"
+msgstr ""
+"\n"
+"  -c, --cache=DIRETÓRIO  itens de cache publicados para DIRETÓRIO"
+
+#: guix/scripts/publish.scm:81
+msgid ""
+"\n"
+"      --workers=N        use N workers to bake items"
+msgstr ""
+"\n"
+"      --workers=N        usa N trabalhos para preparar itens"
+
 # Abreviei segundos para a linha caber em 80 caracteres -- Rafael 
-#: guix/scripts/publish.scm:69
+#: guix/scripts/publish.scm:83
 msgid ""
 "\n"
 "      --ttl=TTL          announce narinfos can be cached for TTL seconds"
@@ -1986,7 +2183,31 @@ msgstr ""
 "\n"
 "      --ttl=TTL          anuncia que narinfos podem usar cache por TTL segs."
 
-#: guix/scripts/publish.scm:71
+#: guix/scripts/publish.scm:85
+msgid ""
+"\n"
+"      --nar-path=PATH    use PATH as the prefix for nar URLs"
+msgstr ""
+"\n"
+"      --nar-path=CAMINHO  usa CAMINHO como o prefixo para URLs nar"
+
+#: guix/scripts/publish.scm:87
+msgid ""
+"\n"
+"      --public-key=FILE  use FILE as the public key for signatures"
+msgstr ""
+"\n"
+"      --public-key=ARQUIVO  usa ARQUIVO como chave pública para assinaturas"
+
+#: guix/scripts/publish.scm:89
+msgid ""
+"\n"
+"      --private-key=FILE use FILE as the private key for signatures"
+msgstr ""
+"\n"
+"      --private-key=ARQUIVO  usa ARQUIVO como chave privada para assinaturas"
+
+#: guix/scripts/publish.scm:91
 msgid ""
 "\n"
 "  -r, --repl[=PORT]      spawn REPL server on PORT"
@@ -1994,37 +2215,37 @@ msgstr ""
 "\n"
 "  -r, --repl[=PORTA]      faz um servidor de REPL na PORTA"
 
-#: guix/scripts/publish.scm:87
+#: guix/scripts/publish.scm:107
 #, scheme-format
 msgid "lookup of host '~a' failed: ~a~%"
 msgstr "a procura da máquina \"~a\" falhou: ~a~%"
 
-#: guix/scripts/publish.scm:125
+#: guix/scripts/publish.scm:152
 #, scheme-format
 msgid "lookup of host '~a' returned nothing"
 msgstr "a procura da máquina \"~a\" retornou nada"
 
-#: guix/scripts/publish.scm:138
+#: guix/scripts/publish.scm:165
 #, scheme-format
 msgid "zlib support is missing; compression disabled~%"
 msgstr "suporte a zlib está faltando; compressão desabilitada~%"
 
-#: guix/scripts/publish.scm:145
+#: guix/scripts/publish.scm:179
 #, scheme-format
 msgid "~a: invalid duration~%"
 msgstr "~a: duração inválida~%"
 
-#: guix/scripts/publish.scm:544
+#: guix/scripts/publish.scm:832
 #, scheme-format
 msgid "user '~a' not found: ~a~%"
 msgstr "usuário \"~a\" não localizado: ~a~%"
 
-#: guix/scripts/publish.scm:581
+#: guix/scripts/publish.scm:873
 #, scheme-format
 msgid "server running as root; consider using the '--user' option!~%"
 msgstr "servidor executado como root; considere usar a opção \"--user\"!~%"
 
-#: guix/scripts/publish.scm:583
+#: guix/scripts/publish.scm:878
 #, scheme-format
 msgid "publishing ~a on ~a, port ~d~%"
 msgstr "publicando ~a em ~a, porta ~d~%"
@@ -2057,19 +2278,19 @@ msgstr "falha ao iniciar \"~a\": ~a~%"
 msgid "no available substitute information for '~a'~%"
 msgstr "nenhuma informação de substituto disponível para \"~a\"~%"
 
-#: guix/scripts/size.scm:85
+#: guix/scripts/size.scm:99
 msgid "store item"
 msgstr "item do armazenamento"
 
-#: guix/scripts/size.scm:85
+#: guix/scripts/size.scm:99
 msgid "total"
 msgstr "total"
 
-#: guix/scripts/size.scm:85
+#: guix/scripts/size.scm:99
 msgid "self"
 msgstr "próprio"
 
-#: guix/scripts/size.scm:96
+#: guix/scripts/size.scm:107
 #, scheme-format
 msgid "total: ~,1f MiB~%"
 msgstr "total: ~,1f MB~%"
@@ -2077,27 +2298,36 @@ msgstr "total: ~,1f MB~%"
 #. TRANSLATORS: This is the title of a graph, meaning that the graph
 #. represents a profile of the store (the "store" being the place where
 #. packages are stored.)
-#: guix/scripts/size.scm:209
+#: guix/scripts/size.scm:221
 msgid "store profile"
 msgstr "perfil do armazenamento"
 
-#: guix/scripts/size.scm:218
+#: guix/scripts/size.scm:230
 msgid ""
 "Usage: guix size [OPTION]... PACKAGE\n"
 "Report the size of PACKAGE and its dependencies.\n"
 msgstr ""
-"Uso: guix size [OPÇÃO]... PACOTES...\n"
+"Uso: guix size [OPÇÃO]... PACOTE...\n"
 "Relata o tamanho do PACOTE e suas dependências.\n"
 
-#: guix/scripts/size.scm:223
+#: guix/scripts/size.scm:235
 msgid ""
 "\n"
 "  -s, --system=SYSTEM    consider packages for SYSTEM--e.g., \"i686-linux\""
 msgstr ""
 "\n"
-"  -s, --system=SISTEMA   considera pacotes para SISTEMA (ex.: \"i686-linux\")"
+"  -s, --system=SISTEMA   considera pacotes para SISTEMA--ex.: \"i686-linux\""
+
+#. TRANSLATORS: "closure" and "self" must not be translated.
+#: guix/scripts/size.scm:238
+msgid ""
+"\n"
+"      --sort=KEY         sort according to KEY--\"closure\" or \"self\""
+msgstr ""
+"\n"
+"      --sort=CHAVE       ordena conforme a CHAVE--\"closure\" ou \"self\""
 
-#: guix/scripts/size.scm:225
+#: guix/scripts/size.scm:240
 msgid ""
 "\n"
 "  -m, --map-file=FILE    write to FILE a graphical map of disk usage"
@@ -2105,93 +2335,102 @@ msgstr ""
 "\n"
 "  -m, --map-file=ARQUIVO escreve para ARQUIVO um mapa gráfico do uso do disco"
 
-#: guix/scripts/size.scm:279
+#: guix/scripts/size.scm:271
+#, scheme-format
+msgid "~a: invalid sorting key~%"
+msgstr "~a: chave de ordenação inválida~%"
+
+#: guix/scripts/size.scm:306
 msgid "missing store item argument\n"
 msgstr "faltando argumento de item do armazenamento\n"
 
-#: guix/scripts/graph.scm:83
+#: guix/scripts/graph.scm:84
 #, scheme-format
 msgid "~a: invalid argument (package name expected)"
 msgstr "~a: argumento inválido (esperava-se nome de pacote)"
 
-#: guix/scripts/graph.scm:94
+#: guix/scripts/graph.scm:95
 msgid "the DAG of packages, excluding implicit inputs"
 msgstr "o DAG dos pacotes, excluindo entradas implícitas"
 
-#: guix/scripts/graph.scm:151
+#: guix/scripts/graph.scm:121
+msgid "the reverse DAG of packages"
+msgstr "o DAG reverso de pacotes"
+
+#: guix/scripts/graph.scm:171
 msgid "the DAG of packages, including implicit inputs"
 msgstr "o DAG dos pacotes, incluindo entradas implícitas"
 
-#: guix/scripts/graph.scm:161
+#: guix/scripts/graph.scm:181
 msgid "the DAG of packages and origins, including implicit inputs"
 msgstr "o DAG dos pacotes e origens, incluindo entradas implícitas"
 
-#: guix/scripts/graph.scm:192
+#: guix/scripts/graph.scm:211
 msgid "same as 'bag', but without the bootstrap nodes"
 msgstr "mesmo que \"bag\", mas sem o nós de inicialização"
 
-#: guix/scripts/graph.scm:238
+#: guix/scripts/graph.scm:253
 msgid "the DAG of derivations"
 msgstr "o DAG de derivações"
 
-#: guix/scripts/graph.scm:250
+#: guix/scripts/graph.scm:265
 msgid "unsupported argument for derivation graph"
 msgstr "sem suporte ao argumento para gráfico de derivação"
 
-#: guix/scripts/graph.scm:276
+#: guix/scripts/graph.scm:291
 msgid "unsupported argument for this type of graph"
 msgstr "sem suporte ao argumento para esse tipo de gráfico"
 
-#: guix/scripts/graph.scm:289
+#: guix/scripts/graph.scm:304
 #, scheme-format
 msgid "references for '~a' are not known~%"
 msgstr "referências para \"~a\" não são conhecidas~%"
 
-#: guix/scripts/graph.scm:296
+#: guix/scripts/graph.scm:311
 msgid "the DAG of run-time dependencies (store references)"
 msgstr "o DAG de dependências de tempo real (referências de armazenamento)"
 
-#: guix/scripts/graph.scm:312
+#: guix/scripts/graph.scm:327
 msgid "the DAG of referrers in the store"
 msgstr "o DAG de referências no armazenamento"
 
-#: guix/scripts/graph.scm:338
+#: guix/scripts/graph.scm:354
 #, scheme-format
 msgid "~a: unknown node type~%"
 msgstr "~a: tipo de nó desconhecido~%"
 
-#: guix/scripts/graph.scm:345
+#: guix/scripts/graph.scm:361
 #, scheme-format
 msgid "~a: unknown backend~%"
 msgstr "~a: backend desconhecido~%"
 
-#: guix/scripts/graph.scm:349
+#: guix/scripts/graph.scm:365
 msgid "The available node types are:\n"
 msgstr "Os tipos de nós disponíveis são:\n"
 
-#: guix/scripts/graph.scm:359
+#: guix/scripts/graph.scm:375
 msgid "The available backend types are:\n"
 msgstr "Os tipos de backends disponíveis são:\n"
 
 #. TRANSLATORS: Here 'dot' is the name of a program; it must not be
 #. translated.
-#: guix/scripts/graph.scm:403
+#: guix/scripts/graph.scm:419
 msgid ""
 "Usage: guix graph PACKAGE...\n"
-"Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"
+"Emit a representation of the dependency graph of PACKAGE...\n"
 msgstr ""
 "Uso: guix graph PACOTE...\n"
-"Emite uma representação em Graphviz (dot) das dependências do PACOTE...\n"
+"Emite uma representação do gráfico de dependências do PACOTE...\n"
 
-#: guix/scripts/graph.scm:405
+#: guix/scripts/graph.scm:421
 msgid ""
 "\n"
 "  -b, --backend=TYPE     produce a graph with the given backend TYPE"
 msgstr ""
 "\n"
-"  -b, --backend=TIPO     produz um grafo com backend do tipo TIPO"
+"  -b, --backend=TIPO     produz um grafo com backend do TIPO"
 
-#: guix/scripts/graph.scm:407
+#: guix/scripts/graph.scm:423
 msgid ""
 "\n"
 "      --list-backends    list the available graph backends"
@@ -2199,7 +2438,7 @@ msgstr ""
 "\n"
 "      --list-backends    lista os backends de gráficos disponíveis"
 
-#: guix/scripts/graph.scm:409
+#: guix/scripts/graph.scm:425
 msgid ""
 "\n"
 "  -t, --type=TYPE        represent nodes of the given TYPE"
@@ -2207,7 +2446,7 @@ msgstr ""
 "\n"
 "  -t, --type=TIPO        representa nós do TIPO dado"
 
-#: guix/scripts/graph.scm:411
+#: guix/scripts/graph.scm:427
 msgid ""
 "\n"
 "      --list-types       list the available graph types"
@@ -2215,7 +2454,7 @@ msgstr ""
 "\n"
 "      --list-types       lista os tipos de gráficos disponíveis"
 
-#: guix/scripts/graph.scm:413
+#: guix/scripts/graph.scm:429 guix/scripts/pack.scm:336
 msgid ""
 "\n"
 "  -e, --expression=EXPR  consider the package EXPR evaluates to"
@@ -2223,42 +2462,58 @@ msgstr ""
 "\n"
 "  -e, --expression=EXPR  considera o pacote que EXPR corresponder"
 
-#: guix/scripts/challenge.scm:105
+#: guix/scripts/challenge.scm:191
 #, scheme-format
-msgid "~a: no substitute at '~a'~%"
-msgstr "~a: nenhum substituto em \"~a\"'~%"
+msgid "  local hash: ~a~%"
+msgstr "  hash local: ~a~%"
 
-#: guix/scripts/challenge.scm:121
+#: guix/scripts/challenge.scm:192
 #, scheme-format
-msgid "no substitutes for '~a'~%"
-msgstr "nenhum substituto para \"~a\"'~%"
+msgid "  no local build for '~a'~%"
+msgstr "  nenhuma compilação local para \"~a\"~%"
 
-#: guix/scripts/challenge.scm:138 guix/scripts/challenge.scm:158
+#: guix/scripts/challenge.scm:194
 #, scheme-format
-msgid "no local build for '~a'~%"
-msgstr "nenhuma compilação local para \"~a\"~%"
+msgid "  ~50a: ~a~%"
+msgstr "  ~50a: ~a~%"
 
-#: guix/scripts/challenge.scm:155
+#: guix/scripts/challenge.scm:202
 #, scheme-format
 msgid "~a contents differ:~%"
-msgstr "conteúdo de ~a  diverge:~%"
+msgstr "conteúdo de ~a diverge:~%"
 
-#: guix/scripts/challenge.scm:157
+#: guix/scripts/challenge.scm:205
 #, scheme-format
-msgid "  local hash: ~a~%"
-msgstr "  hash local: ~a~%"
+msgid "could not challenge '~a': no local build~%"
+msgstr "não foi possível desafiar \"~a\": nenhuma compilação local~%"
 
-#: guix/scripts/challenge.scm:162
+#: guix/scripts/challenge.scm:207
 #, scheme-format
-msgid "  ~50a: ~a~%"
-msgstr "  ~50a: ~a~%"
+msgid "could not challenge '~a': no substitutes~%"
+msgstr "não foi possível desafiar \"~a\": nenhum substituto~%"
 
-#: guix/scripts/challenge.scm:166
+#: guix/scripts/challenge.scm:210
 #, scheme-format
-msgid "  ~50a: unavailable~%"
-msgstr "  ~50a: indisponível~%"
+msgid "~a contents match:~%"
+msgstr "conteúdo de ~a corresponde:~%"
+
+#: guix/scripts/challenge.scm:219
+msgid "~h store items were analyzed:~%"
+msgstr "~h itens de armazenamento foram analisados:~%"
 
-#: guix/scripts/challenge.scm:176
+#: guix/scripts/challenge.scm:220
+msgid "  - ~h (~,1f%) were identical~%"
+msgstr "  - ~h (~,1f%) eram idênticos~%"
+
+#: guix/scripts/challenge.scm:222
+msgid "  - ~h (~,1f%) differed~%"
+msgstr "  - ~h (~,1f%) divergiram~%"
+
+#: guix/scripts/challenge.scm:224
+msgid "  - ~h (~,1f%) were inconclusive~%"
+msgstr "  - ~h (~,1f%) foram inconclusivos~%"
+
+#: guix/scripts/challenge.scm:233
 msgid ""
 "Usage: guix challenge [PACKAGE...]\n"
 "Challenge the substitutes for PACKAGE... provided by one or more servers.\n"
@@ -2266,7 +2521,7 @@ msgstr ""
 "Uso: guix challenge [PACOTE...]\n"
 "Compara os substitutos por PACOTE... fornecido por um ou mais servidores.\n"
 
-#: guix/scripts/challenge.scm:178
+#: guix/scripts/challenge.scm:235
 msgid ""
 "\n"
 "      --substitute-urls=URLS\n"
@@ -2276,23 +2531,205 @@ msgstr ""
 "      --substitute-urls=URLS\n"
 "                         compara resultados da compilação com os de URLS"
 
-#: guix/gnu-maintenance.scm:555
+#: guix/scripts/challenge.scm:238
+msgid ""
+"\n"
+"      -v, --verbose      show details about successful comparisons"
+msgstr ""
+"\n"
+"      -v, --verbose      mostra detalhes sobre comparações bem-sucedidas"
+
+#: guix/scripts/copy.scm:59
+#, scheme-format
+msgid "~a: invalid TCP port number~%"
+msgstr "~a: número de porta TCP inválido~%"
+
+#: guix/scripts/copy.scm:61
+#, scheme-format
+msgid "~a: invalid SSH specification~%"
+msgstr "~a: especificação SSH inválida~%"
+
+#: guix/scripts/copy.scm:113
+msgid ""
+"Usage: guix copy [OPTION]... ITEMS...\n"
+"Copy ITEMS to or from the specified host over SSH.\n"
+msgstr ""
+"Uso: guix copy [OPÇÃO]... ITENS...\n"
+"Copia ITENS para ou da máquina especificada por SSH.\n"
+
+#: guix/scripts/copy.scm:115
+msgid ""
+"\n"
+"      --to=HOST          send ITEMS to HOST"
+msgstr ""
+"\n"
+"      --to=MÁQUINA       envia ITENS para MÁQUINA"
+
+#: guix/scripts/copy.scm:117
+msgid ""
+"\n"
+"      --from=HOST        receive ITEMS from HOST"
+msgstr ""
+"\n"
+"      --from=MÁQUINA     recebe ITENS da MÁQUINA"
+
+#: guix/scripts/copy.scm:168
+#, scheme-format
+msgid "use '--to' or '--from'~%"
+msgstr "use \"--to\" ou \"--from\"~%"
+
+#: guix/scripts/pack.scm:76
+#, scheme-format
+msgid "~a: compressor not found~%"
+msgstr "~a: compressor não encontrado~%"
+
+#: guix/scripts/pack.scm:318
+#, scheme-format
+msgid "~a: invalid symlink specification~%"
+msgstr "~a: especificação de link simbólico inválida~%"
+
+#: guix/scripts/pack.scm:328
+msgid ""
+"Usage: guix pack [OPTION]... PACKAGE...\n"
+"Create a bundle of PACKAGE.\n"
+msgstr ""
+"Uso: guix pack [OPÇÃO]... PACOTE...\n"
+"Cria um pacote de PACOTE.\n"
+
+#: guix/scripts/pack.scm:334
+msgid ""
+"\n"
+"  -f, --format=FORMAT    build a pack in the given FORMAT"
+msgstr ""
+"\n"
+"  -f, --format=FORMATO   compila um pacote no FORMATO dado"
+
+#: guix/scripts/pack.scm:342
+msgid ""
+"\n"
+"  -C, --compression=TOOL compress using TOOL--e.g., \"lzip\""
+msgstr ""
+"\n"
+"  -C, --compression=FERRAMENTA\n"
+"                         comprime usando FERRAMENTA--ex. \"lzip\""
+
+#: guix/scripts/pack.scm:344
+msgid ""
+"\n"
+"  -S, --symlink=SPEC     create symlinks to the profile according to SPEC"
+msgstr ""
+"\n"
+"  -S, --symlink=ESPEC    cria link simbólicos para o perfil conforme ESPEC"
+
+#: guix/scripts/pack.scm:346
+msgid ""
+"\n"
+"      --localstatedir    include /var/guix in the resulting pack"
+msgstr ""
+"\n"
+"      --localstatedir    inclui /var/guix no pacote resultante"
+
+#: guix/scripts/pack.scm:390
+#, scheme-format
+msgid "~a: unknown pack format"
+msgstr "~a: formato de pacote desconhecido"
+
+#: guix/scripts/weather.scm:74
+msgid "computing ~h package derivations for ~a...~%"
+msgstr "computando ~h derivações de pacote para ~a...~%"
+
+#: guix/scripts/weather.scm:110
+msgid "looking for ~h store items on ~a...~%"
+msgstr "procurando por ~h itens de armazenamento em ~a…~%"
+
+#: guix/scripts/weather.scm:120
+msgid "  ~2,1f% substitutes available (~h out of ~h)~%"
+msgstr "  ~2,1f% substitutos disponíveis (~h de ~h)~%"
+
+#: guix/scripts/weather.scm:126
+#, scheme-format
+msgid "  unknown substitute sizes~%"
+msgstr "  tamanhos de substituto desconhecido~%"
+
+#: guix/scripts/weather.scm:129
+msgid "  ~,1h MiB of nars (compressed)~%"
+msgstr "  ~,1h MiB de nars (comprimidos)~%"
+
+#: guix/scripts/weather.scm:130
+msgid "  at least ~,1h MiB of nars (compressed)~%"
+msgstr "  pelo menos ~,1h MiB de nars (comprimidos)~%"
+
+#: guix/scripts/weather.scm:132
+msgid "  ~,1h MiB on disk (uncompressed)~%"
+msgstr "  ~,1h MiB no disco (comprimidos)~%"
+
+#: guix/scripts/weather.scm:134
+msgid "  ~,3h seconds per request (~,1h seconds in total)~%"
+msgstr "  ~,3h segundos por requisição (~,1h segundos no total)~%"
+
+#: guix/scripts/weather.scm:136
+msgid "  ~,1h requests per second~%"
+msgstr "  ~,1h requisições por segundo~%"
+
+#: guix/scripts/weather.scm:145
+msgid ""
+"Usage: guix weather [OPTIONS]\n"
+"Report the availability of substitutes.\n"
+msgstr ""
+"Uso: guix weather [OPÇÕES]\n"
+"Relata a disponibilidade de substitutos.\n"
+
+#: guix/scripts/weather.scm:147
+msgid ""
+"\n"
+"      --substitute-urls=URLS\n"
+"                         check for available substitutes at URLS"
+msgstr ""
+"\n"
+"      --substitute-urls=URLS\n"
+"                         verifica por substitutos disponíveis nas URLS"
+
+#: guix/scripts/weather.scm:150
+msgid ""
+"\n"
+"  -m, --manifest=MANIFEST\n"
+"                         look up substitutes for packages specified in MANIFEST"
+msgstr ""
+"\n"
+"  -m, --manifest=MANIFESTO\n"
+"                         procura substitutos para os pacotes especificados\n"
+"                         no MANIFESTO"
+
+#: guix/scripts/weather.scm:153
+msgid ""
+"\n"
+"  -s, --system=SYSTEM    consider substitutes for SYSTEM--e.g., \"i686-linux\""
+msgstr ""
+"\n"
+"  -s, --system=SISTEMA   considera substitutos para SISTEMA--ex.: \"i686-linux\""
+
+#: guix/scripts/weather.scm:177
+#, scheme-format
+msgid "~a: invalid URL~%"
+msgstr "~a: URL inválido~%"
+
+#: guix/gnu-maintenance.scm:567
 msgid "Updater for GNU packages"
 msgstr "Atualizador para pacotes GNU"
 
-#: guix/gnu-maintenance.scm:562
-msgid "Updater for GNOME packages"
-msgstr "Atualizador para pacotes GNOME"
+#: guix/gnu-maintenance.scm:576
+msgid "Updater for GNU packages only available via FTP"
+msgstr "Atualizador para pacotes GNU só disponíveis via FTP"
 
-#: guix/gnu-maintenance.scm:569
+#: guix/gnu-maintenance.scm:585
 msgid "Updater for KDE packages"
 msgstr "Atualizador para pacotes KDE"
 
-#: guix/gnu-maintenance.scm:576
+#: guix/gnu-maintenance.scm:592
 msgid "Updater for X.org packages"
 msgstr "Atualizador para pacotes X.org"
 
-#: guix/gnu-maintenance.scm:583
+#: guix/gnu-maintenance.scm:599
 msgid "Updater for packages hosted on kernel.org"
 msgstr "Atualizador para pacotes hospedados no kernel.org"
 
@@ -2331,115 +2768,145 @@ msgstr ""
 msgid "~a: extraneous argument~%"
 msgstr "~a: argumento estranho~%"
 
-#: guix/scripts/container/exec.scm:80
+#: guix/scripts/container/exec.scm:87
 #, scheme-format
 msgid "no pid specified~%"
 msgstr "nenhum pid especificado~%"
 
-#: guix/scripts/container/exec.scm:83
+#: guix/scripts/container/exec.scm:90
 #, scheme-format
 msgid "no command specified~%"
 msgstr "nenhum comando foi especificado~%"
 
-#: guix/scripts/container/exec.scm:86
+#: guix/scripts/container/exec.scm:93
 #, scheme-format
 msgid "no such process ~d~%"
 msgstr "processo inexistente ~d~%"
 
-#: guix/scripts/container/exec.scm:94
+#: guix/scripts/container/exec.scm:105
 #, scheme-format
 msgid "exec failed with status ~d~%"
 msgstr "execução falhou com status ~d~%"
 
-#: guix/upstream.scm:212
+#: guix/upstream.scm:249
 #, scheme-format
 msgid "signature verification failed for `~a'~%"
 msgstr "verificação de assinatura falhou para \"~a\"~%"
 
-#: guix/upstream.scm:214
+#: guix/upstream.scm:251
 #, scheme-format
 msgid "(could be because the public key is not in your keyring)~%"
 msgstr "(pode ser porque a chave pública não está no seu chaveiro)~%"
 
-#: guix/upstream.scm:246
-msgid "gz"
-msgstr "gz"
-
-#: guix/upstream.scm:293
+#: guix/upstream.scm:330
 #, scheme-format
 msgid "~a: could not locate source file"
 msgstr "~a: não foi possível localizar um arquivo fonte"
 
-#: guix/upstream.scm:298
+#: guix/upstream.scm:335
 #, scheme-format
 msgid "~a: ~a: no `version' field in source; skipping~%"
-msgstr "~a: ~a: sem o campo \"version\" no fonte; pulando~%"
+msgstr "~a: ~a: sem o campo \"version\" no fonte; ignorando~%"
 
-#: guix/ui.scm:239
+#: guix/ui.scm:159
+#, scheme-format
+msgid "~a: unbound variable"
+msgstr "~a: variável não vinculada"
+
+#: guix/ui.scm:235
 msgid "entering debugger; type ',bt' for a backtrace\n"
 msgstr "entrando no depurador; digite \",bt\" para o \"backtrace\"\n"
 
-#: guix/ui.scm:255 guix/ui.scm:272
+#: guix/ui.scm:284
+#, scheme-format
+msgid "hint: ~a~%"
+msgstr "dica: ~a~%"
+
+#: guix/ui.scm:294 guix/ui.scm:342 guix/ui.scm:349
 #, scheme-format
 msgid "failed to load '~a': ~a~%"
 msgstr "falha ao carregar \"~a\": ~a~%"
 
-#: guix/ui.scm:258
+#: guix/ui.scm:301
+#, scheme-format
+msgid "~amissing closing parenthesis~%"
+msgstr "~afaltando parêntese de fechamento~%"
+
+#: guix/ui.scm:306 guix/ui.scm:322 guix/ui.scm:596
 #, scheme-format
 msgid "~a: error: ~a~%"
 msgstr "~a: erro: ~a~%"
 
-#: guix/ui.scm:261 guix/ui.scm:530
+#: guix/ui.scm:314
+msgid "Did you forget a @code{use-modules} form?"
+msgstr "Você se esqueceu de uma forma @code{use-modules}?"
+
+#: guix/ui.scm:316
+#, scheme-format
+msgid "Try adding @code{(use-modules ~a)}."
+msgstr "Tente adicionar @code{(use-modules ~a)}."
+
+#: guix/ui.scm:329 guix/ui.scm:657
 #, scheme-format
 msgid "exception thrown: ~s~%"
 msgstr "excepção lançada: ~s~%"
 
-#: guix/ui.scm:263 guix/ui.scm:281
+#: guix/ui.scm:333 guix/ui.scm:355
 #, scheme-format
 msgid "failed to load '~a':~%"
 msgstr "falha ao carregar \"~a\":~%"
 
-#: guix/ui.scm:275
+#: guix/ui.scm:345
 #, scheme-format
 msgid "~a: warning: ~a~%"
 msgstr "~a: aviso: ~a~%"
 
-#: guix/ui.scm:278
+#: guix/ui.scm:352
 #, scheme-format
 msgid "failed to load '~a': exception thrown: ~s~%"
 msgstr "falha ao carregar \"~a\": exceção lançada: ~s~%"
 
-#: guix/ui.scm:290
+#: guix/ui.scm:364
 #, scheme-format
 msgid "failed to install locale: ~a~%"
 msgstr "falha ao instalar localidade: ~a~%"
 
-#: guix/ui.scm:309
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
+#: guix/ui.scm:394
+msgid "(C)"
+msgstr "(C)"
+
+#: guix/ui.scm:395
+msgid "the Guix authors\n"
+msgstr "os autores do Guix\n"
+
+#: guix/ui.scm:396
 msgid ""
-"Copyright (C) 2016 the Guix authors\n"
 "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
 "This is free software: you are free to change and redistribute it.\n"
 "There is NO WARRANTY, to the extent permitted by law.\n"
 msgstr ""
-"Copyright (C) 2016 os autores do Guix\n"
 "Licença GPLv3+: GNU GPLv3 ou posterior <http://gnu.org/licenses/gpl.html>\n"
-"Esse é um software livre: você é livre para modificar ou redistribuí-lo .\n"
+"Esse é um software livre: você é livre para modificar ou redistribuí-lo.\n"
 "NÃO HÁ GARANTIA, na máxima extensão permitida pela lei.\n"
 
 #. TRANSLATORS: The placeholder indicates the bug-reporting address for this
 #. package.  Please add another line saying "Report translation bugs to
 #. ...\n" with the address for translation bugs (typically your translation
 #. team's web or email address).
-#: guix/ui.scm:321
+#: guix/ui.scm:408
 #, scheme-format
 msgid ""
 "\n"
 "Report bugs to: ~a."
 msgstr ""
 "\n"
-"Relate erros para: ~a."
+"Relate erros para: ~a.\n"
+"Relate erros de tradução para: ldpbr-translation@lists.sourceforge.net."
 
-#: guix/ui.scm:323
+#: guix/ui.scm:410
 #, scheme-format
 msgid ""
 "\n"
@@ -2448,7 +2915,7 @@ msgstr ""
 "\n"
 "Site do ~a: <~a>"
 
-#: guix/ui.scm:325
+#: guix/ui.scm:412
 msgid ""
 "\n"
 "General help using GNU software: <http://www.gnu.org/gethelp/>"
@@ -2456,199 +2923,231 @@ msgstr ""
 "\n"
 "Ajuda em geral usando softwares GNU: <http://www.gnu.org/gethelp/>"
 
-#: guix/ui.scm:370
+#: guix/ui.scm:457
 #, scheme-format
 msgid "'~a' is not a valid regular expression: ~a~%"
 msgstr "\"~a\" não é uma expressão regular válida: ~a~%"
 
-#: guix/ui.scm:376
+#: guix/ui.scm:463
 #, scheme-format
 msgid "~a: invalid number~%"
 msgstr "~a: número inválido~%"
 
-#: guix/ui.scm:393
+#: guix/ui.scm:480
 #, scheme-format
 msgid "invalid number: ~a~%"
 msgstr "número inválido: ~a~%"
 
-#: guix/ui.scm:416
+#: guix/ui.scm:503
 #, scheme-format
 msgid "unknown unit: ~a~%"
 msgstr "unidade desconhecida: ~a~%"
 
-#: guix/ui.scm:433
+#: guix/ui.scm:520
 #, scheme-format
 msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%"
 msgstr "~a:~a:~a: o pacote \"~a\" tem uma entrada inválida: ~s~%"
 
-#: guix/ui.scm:440
+#: guix/ui.scm:527
 #, scheme-format
 msgid "~a: ~a: build system `~a' does not support cross builds~%"
 msgstr "~a: ~a: o sistema de compilação de \"~a\" não oferece suporte a compilações cruzadas~%"
 
-#: guix/ui.scm:445
+#: guix/ui.scm:533
+#, scheme-format
+msgid "~s: invalid G-expression input~%"
+msgstr "~s: entrada de expressão G inválida~%"
+
+#: guix/ui.scm:536
 #, scheme-format
 msgid "profile '~a' does not exist~%"
 msgstr "o perfil \"~a\" não existe~%"
 
-#: guix/ui.scm:448
+#: guix/ui.scm:539
 #, scheme-format
 msgid "generation ~a of profile '~a' does not exist~%"
 msgstr "a geração ~a do perfil \"~a\" não existe~%"
 
-#: guix/ui.scm:455
+#: guix/ui.scm:548
+#, scheme-format
+msgid "   ... propagated from ~a@~a~%"
+msgstr "   ... propagado de ~a@~a~%"
+
+#: guix/ui.scm:553
+#, scheme-format
+msgid "profile contains conflicting entries for ~a:~a~%"
+msgstr "o perfil contém entradas conflitantes para ~a:~a~%"
+
+#: guix/ui.scm:556
+#, scheme-format
+msgid "  first entry: ~a@~a:~a ~a~%"
+msgstr "  primeira entrada: ~a@~a:~a ~a~%"
+
+#: guix/ui.scm:562
+#, scheme-format
+msgid "  second entry: ~a@~a:~a ~a~%"
+msgstr "  segunda entrada: ~a@~a:~a ~a~%"
+
+#: guix/ui.scm:573
 #, scheme-format
 msgid "corrupt input while restoring '~a' from ~s~%"
 msgstr "entrada corrompida ao restaurar \"~a\" de ~s~%"
 
-#: guix/ui.scm:457
+#: guix/ui.scm:575
 #, scheme-format
 msgid "corrupt input while restoring archive from ~s~%"
 msgstr "entrada corrompida ao restaurar um pacote de ~s~%"
 
-#: guix/ui.scm:460
+#: guix/ui.scm:578
 #, scheme-format
 msgid "failed to connect to `~a': ~a~%"
 msgstr "falha ao conectar em \"~a\": ~a~%"
 
-#: guix/ui.scm:465
+#: guix/ui.scm:583
 #, scheme-format
 msgid "build failed: ~a~%"
 msgstr "compilação falhou: ~a~%"
 
-#: guix/ui.scm:468
+#: guix/ui.scm:586
 #, scheme-format
 msgid "reference to invalid output '~a' of derivation '~a'~%"
 msgstr "referência a uma saída inválida \"~a\" da derivação \"~a\"~%"
 
-#: guix/ui.scm:472
+#: guix/ui.scm:590
 #, scheme-format
 msgid "file '~a' could not be found in these directories:~{ ~a~}~%"
 msgstr "o arquivo \"~a\" não pôde ser localizado nesses diretórios:~{ ~a~}~%"
 
-#: guix/ui.scm:484
+#: guix/ui.scm:607
 #, scheme-format
 msgid "~a: ~a~%"
 msgstr "~a: ~a~%"
 
-#: guix/ui.scm:519
+#: guix/ui.scm:642
 #, scheme-format
 msgid "failed to read expression ~s: ~s~%"
 msgstr "falha ao ler a expressão ~s: ~s~%"
 
-#: guix/ui.scm:525
+#: guix/ui.scm:648
 #, scheme-format
 msgid "failed to evaluate expression '~a':~%"
 msgstr "falha ao avaliar a expressão \"~a\":~%"
 
-#: guix/ui.scm:528
+#: guix/ui.scm:651
 #, scheme-format
 msgid "syntax error: ~a~%"
 msgstr "erro de sintaxe: ~a~%"
 
-#: guix/ui.scm:542
+#: guix/ui.scm:669
 #, scheme-format
 msgid "expression ~s does not evaluate to a package~%"
 msgstr "a expressão ~s não corresponde a um pacote~%"
 
-#: guix/ui.scm:604
+#: guix/ui.scm:688
+msgid "at least ~,1h MB needed but only ~,1h MB available in ~a~%"
+msgstr "pelo menos ~,1h MB necessário, mas apenas ~,1h MB disponível em ~a~%"
+
+#: guix/ui.scm:756
 #, scheme-format
 msgid "~:[The following derivation would be built:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following derivations would be built:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[A seguinte derivação seria compilada:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[As seguintes derivações seriam compiladas:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:609
+#. TRANSLATORS: "MB" is for "megabyte"; it should be
+#. translated to the corresponding abbreviation.
+#: guix/ui.scm:764
+msgid "~:[~,1h MB would be downloaded:~%~{   ~a~%~}~;~]"
+msgstr "~:[~,1h MB seria baixado:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:769
 #, scheme-format
 msgid "~:[The following file would be downloaded:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following files would be downloaded:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[O seguinte arquivo seria baixado:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[Os seguintes arquivos seriam baixados:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:615
+#: guix/ui.scm:776
 #, scheme-format
 msgid "~:[The following derivation will be built:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following derivations will be built:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[A seguinte derivação será compilada:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[As seguintes derivações serão compiladas:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:620
+#. TRANSLATORS: "MB" is for "megabyte"; it should be
+#. translated to the corresponding abbreviation.
+#: guix/ui.scm:784
+msgid "~:[~,1h MB will be downloaded:~%~{   ~a~%~}~;~]"
+msgstr "~:[~,1h MB será baixado:~%~{   ~a~%~}~;~]"
+
+#: guix/ui.scm:789
 #, scheme-format
 msgid "~:[The following file will be downloaded:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following files will be downloaded:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[O seguinte arquivo será baixado:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[Os seguintes arquivos serão baixados:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:675
+#: guix/ui.scm:849
 #, scheme-format
 msgid "The following package would be removed:~%~{~a~%~}~%"
 msgid_plural "The following packages would be removed:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote seria removido:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes seriam removidos:~%~{~a~%~}~%"
 
-#: guix/ui.scm:680
+#: guix/ui.scm:854
 #, scheme-format
 msgid "The following package will be removed:~%~{~a~%~}~%"
 msgid_plural "The following packages will be removed:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote será removido:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes serão removidos:~%~{~a~%~}~%"
 
-#: guix/ui.scm:693
+#: guix/ui.scm:867
 #, scheme-format
 msgid "The following package would be downgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages would be downgraded:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote sofreria um downgrade:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes sofreriam um downgrade:~%~{~a~%~}~%"
 
-#: guix/ui.scm:698
+#: guix/ui.scm:872
 #, scheme-format
 msgid "The following package will be downgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages will be downgraded:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote sofrerá um downgrade:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes sofrerão um downgrade:~%~{~a~%~}~%"
 
-#: guix/ui.scm:711
+#: guix/ui.scm:885
 #, scheme-format
 msgid "The following package would be upgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages would be upgraded:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote seria atualizado:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes seriam atualizados:~%~{~a~%~}~%"
 
-#: guix/ui.scm:716
+#: guix/ui.scm:890
 #, scheme-format
 msgid "The following package will be upgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages will be upgraded:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote será atualizado:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes serão atualizados:~%~{~a~%~}~%"
 
-#: guix/ui.scm:727
+#: guix/ui.scm:901
 #, scheme-format
 msgid "The following package would be installed:~%~{~a~%~}~%"
 msgid_plural "The following packages would be installed:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote seria instalado:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes seriam instalados:~%~{~a~%~}~%"
 
-#: guix/ui.scm:732
+#: guix/ui.scm:906
 #, scheme-format
 msgid "The following package will be installed:~%~{~a~%~}~%"
 msgid_plural "The following packages will be installed:~%~{~a~%~}~%"
 msgstr[0] "O seguinte pacote será instalado:~%~{~a~%~}~%"
 msgstr[1] "Os seguintes pacotes serão instalados:~%~{~a~%~}~%"
 
-#: guix/ui.scm:749
+#: guix/ui.scm:923
 msgid "<unknown location>"
 msgstr "<local desconhecido>"
 
-#: guix/ui.scm:768
-#, scheme-format
-msgid "failed to create configuration directory `~a': ~a~%"
-msgstr "falha ao criar o diretório de compilação \"~a\": ~a~%"
-
-#: guix/ui.scm:891 guix/ui.scm:905
-msgid "unknown"
-msgstr "desconhecido"
-
-#: guix/ui.scm:1063
+#: guix/ui.scm:1285
 #, scheme-format
 msgid "Generation ~a\t~a"
 msgstr "Geração ~a\t~a"
@@ -2656,28 +3155,28 @@ msgstr "Geração ~a\t~a"
 #. TRANSLATORS: The word "current" here is an adjective for
 #. "Generation", as in "current generation".  Use the appropriate
 #. gender where applicable.
-#: guix/ui.scm:1073
+#: guix/ui.scm:1295
 #, scheme-format
 msgid "~a\t(current)~%"
 msgstr "~a\t(atual)~%"
 
 # geração, criação?
-#: guix/ui.scm:1116
+#: guix/ui.scm:1338
 #, scheme-format
 msgid "switched from generation ~a to ~a~%"
 msgstr "trocado da geração ~a para ~a~%"
 
-#: guix/ui.scm:1132
+#: guix/ui.scm:1354
 #, scheme-format
 msgid "deleting ~a~%"
 msgstr "excluindo ~a~%"
 
-#: guix/ui.scm:1163
+#: guix/ui.scm:1385
 #, scheme-format
 msgid "Try `guix --help' for more information.~%"
 msgstr "Tente \"guix --help\" para mais informações.~%"
 
-#: guix/ui.scm:1191
+#: guix/ui.scm:1413
 msgid ""
 "Usage: guix COMMAND ARGS...\n"
 "Run COMMAND with ARGS.\n"
@@ -2685,33 +3184,34 @@ msgstr ""
 "Uso: guix COMANDO ARGUMENTOS...\n"
 "Executa COMANDO com ARGUMENTOS.\n"
 
-#: guix/ui.scm:1194
+#: guix/ui.scm:1416
 msgid "COMMAND must be one of the sub-commands listed below:\n"
 msgstr "COMANDO deve ser um dos subcomandos listados abaixo:\n"
 
-#: guix/ui.scm:1214
+#: guix/ui.scm:1436
 #, scheme-format
 msgid "guix: ~a: command not found~%"
 msgstr "guix: ~a: comando não encontrado~%"
 
-#: guix/ui.scm:1233
+#: guix/ui.scm:1466
 #, scheme-format
 msgid "guix: missing command name~%"
 msgstr "guix: faltando um nome de comando~%"
 
-#: guix/ui.scm:1241
+#: guix/ui.scm:1474
 #, scheme-format
 msgid "guix: unrecognized option '~a'~%"
 msgstr "guix: opção \"~a\" desconhecida~%"
 
-#: guix/http-client.scm:270
+#: guix/http-client.scm:269
 #, scheme-format
 msgid "following redirection to `~a'...~%"
 msgstr "seguindo redirecionamento para \"~a\"...~%"
 
-#: guix/http-client.scm:279
-msgid "download failed"
-msgstr "download falhou"
+#: guix/http-client.scm:281
+#, scheme-format
+msgid "~a: HTTP download failed: ~a (~s)"
+msgstr "~a: download HTTP falhou: ~a (~s)"
 
 #: guix/nar.scm:155
 msgid "signature is not a valid s-expression"
@@ -2755,133 +3255,200 @@ msgstr "arquivo importado carece de uma assinatura"
 msgid "invalid inter-file archive mark"
 msgstr "marca inválida de pacote interarquivo"
 
-#: nix/nix-daemon/guix-daemon.cc:61
+#: nix/nix-daemon/guix-daemon.cc:66
 msgid "guix-daemon -- perform derivation builds and store accesses"
 msgstr "guix-daemon -- realiza compilações de derivação e acessos a armazenamento"
 
-#: nix/nix-daemon/guix-daemon.cc:63
+#: nix/nix-daemon/guix-daemon.cc:68
 msgid "This program is a daemon meant to run in the background.  It serves requests sent over a Unix-domain socket.  It accesses the store, and builds derivations on behalf of its clients."
 msgstr "Esse programa é um daemon feito para executar em segundo plano. Ele atende a requisições enviadas por um soquete. Ele acessa o armazenamento e compila derivações em nome de seus clientes."
 
-#: nix/nix-daemon/guix-daemon.cc:87
+#: nix/nix-daemon/guix-daemon.cc:94
 msgid "SYSTEM"
 msgstr "SISTEMA"
 
-#: nix/nix-daemon/guix-daemon.cc:88
+#: nix/nix-daemon/guix-daemon.cc:95
 msgid "assume SYSTEM as the current system type"
 msgstr "presume SISTEMA como o tipo de sistema atual"
 
-#: nix/nix-daemon/guix-daemon.cc:89 nix/nix-daemon/guix-daemon.cc:92
+#: nix/nix-daemon/guix-daemon.cc:96 nix/nix-daemon/guix-daemon.cc:99
 msgid "N"
 msgstr "N"
 
-#: nix/nix-daemon/guix-daemon.cc:90
+#: nix/nix-daemon/guix-daemon.cc:97
 msgid "use N CPU cores to build each derivation; 0 means as many as available"
 msgstr "usa N núcleos de CPU para compilar cada derivação; 0 significa todos disponíveis"
 
-#: nix/nix-daemon/guix-daemon.cc:93
+#: nix/nix-daemon/guix-daemon.cc:100
 msgid "allow at most N build jobs"
 msgstr "permite no máximo N trabalhos de compilação"
 
-#: nix/nix-daemon/guix-daemon.cc:95
+#: nix/nix-daemon/guix-daemon.cc:101 nix/nix-daemon/guix-daemon.cc:103
+msgid "SECONDS"
+msgstr "SEGUNDOS"
+
+#: nix/nix-daemon/guix-daemon.cc:102
+msgid "mark builds as failed after SECONDS of activity"
+msgstr "marca compilações como falha após SEGUNDOS de atividade"
+
+#: nix/nix-daemon/guix-daemon.cc:104
+msgid "mark builds as failed after SECONDS of silence"
+msgstr "marca compilações como falha após SEGUNDOS de silêncio"
+
+#: nix/nix-daemon/guix-daemon.cc:106
 msgid "disable chroot builds"
 msgstr "desabilita compilações em chroot"
 
-#: nix/nix-daemon/guix-daemon.cc:96
+#: nix/nix-daemon/guix-daemon.cc:107
 msgid "DIR"
 msgstr "DIR"
 
-#: nix/nix-daemon/guix-daemon.cc:97
+#: nix/nix-daemon/guix-daemon.cc:108
 msgid "add DIR to the build chroot"
 msgstr "adiciona DIR ao chroot de compilação"
 
-#: nix/nix-daemon/guix-daemon.cc:98
+#: nix/nix-daemon/guix-daemon.cc:109
 msgid "GROUP"
 msgstr "GRUPO"
 
-#: nix/nix-daemon/guix-daemon.cc:99
+#: nix/nix-daemon/guix-daemon.cc:110
 msgid "perform builds as a user of GROUP"
 msgstr "realiza compilações como um usuário de GRUPO"
 
-#: nix/nix-daemon/guix-daemon.cc:101
+#: nix/nix-daemon/guix-daemon.cc:112
 msgid "do not use substitutes"
 msgstr "não usa substitutos"
 
-#: nix/nix-daemon/guix-daemon.cc:102
+#: nix/nix-daemon/guix-daemon.cc:113
 msgid "URLS"
 msgstr "URLS"
 
-#: nix/nix-daemon/guix-daemon.cc:103
+#: nix/nix-daemon/guix-daemon.cc:114
 msgid "use URLS as the default list of substitute providers"
 msgstr "usa URLS como lista padrão de fornecedores de substituto"
 
-#: nix/nix-daemon/guix-daemon.cc:105
+#: nix/nix-daemon/guix-daemon.cc:116
 msgid "do not use the 'build hook'"
 msgstr "não usa o \"hook de compilação\""
 
-#: nix/nix-daemon/guix-daemon.cc:107
+#: nix/nix-daemon/guix-daemon.cc:118
 msgid "cache build failures"
 msgstr "armazena em cache as falhas de compilação"
 
-#: nix/nix-daemon/guix-daemon.cc:109
+#: nix/nix-daemon/guix-daemon.cc:120
 msgid "build each derivation N times in a row"
 msgstr "compila cada derivação N vezes de uma vez"
 
-#: nix/nix-daemon/guix-daemon.cc:111
+#: nix/nix-daemon/guix-daemon.cc:122
 msgid "do not keep build logs"
 msgstr "não mantém logs de compilação"
 
-#: nix/nix-daemon/guix-daemon.cc:113
+#: nix/nix-daemon/guix-daemon.cc:124
 msgid "disable compression of the build logs"
 msgstr "desabilita compressão de logs de compilação"
 
-#: nix/nix-daemon/guix-daemon.cc:118
+#: nix/nix-daemon/guix-daemon.cc:129
 msgid "disable automatic file \"deduplication\" in the store"
 msgstr "desabilita \"deduplicação\" automática de arquivo no armazenamento"
 
-#: nix/nix-daemon/guix-daemon.cc:128
+#: nix/nix-daemon/guix-daemon.cc:139
 msgid "impersonate Linux 2.6"
 msgstr "personifica Linux 2.6"
 
-#: nix/nix-daemon/guix-daemon.cc:132
+#: nix/nix-daemon/guix-daemon.cc:143
 msgid "tell whether the GC must keep outputs of live derivations"
 msgstr "diz se o GC deve manter as saídas das derivações vivas"
 
-#: nix/nix-daemon/guix-daemon.cc:135
+#: nix/nix-daemon/guix-daemon.cc:146
 msgid "tell whether the GC must keep derivations corresponding to live outputs"
 msgstr "diz se o GC deve manter as derivações correspondentes às saídas vivas"
 
-#: nix/nix-daemon/guix-daemon.cc:138
+#: nix/nix-daemon/guix-daemon.cc:149
 msgid "SOCKET"
 msgstr "SOQUETE"
 
-#: nix/nix-daemon/guix-daemon.cc:139
+#: nix/nix-daemon/guix-daemon.cc:150
 msgid "listen for connections on SOCKET"
 msgstr "ouve conexões no SOQUETE"
 
-#: nix/nix-daemon/guix-daemon.cc:141
+#: nix/nix-daemon/guix-daemon.cc:152
 msgid "produce debugging output"
 msgstr "produz saída de depuração"
 
-#: nix/nix-daemon/guix-daemon.cc:201
-#, c-format
-msgid "error: %s: invalid number of rounds\n"
-msgstr "erro: %s: número inválido de vezes\n"
+#~ msgid "deprecated NAME-VERSION syntax; use NAME@VERSION instead~%"
+#~ msgstr "sintaxe NOME-VERSÃO obsoleta; em vez disso, use NOME@VERSÃO~%"
+
+#~ msgid "/"
+#~ msgstr "/"
+
+#~ msgid "unrecognized option: ~a~%"
+#~ msgstr "opção não reconhecida: ~a~%"
+
+#~ msgid "tarball did not produce a single source directory"
+#~ msgstr "tarball não produziu um diretório fonte"
+
+#~ msgid "unpacking '~a'...~%"
+#~ msgstr "desempacotando \"~a\"...~%"
+
+#~ msgid "failed to unpack source code"
+#~ msgstr "falha ao desempacotar o código fonte"
+
+#~ msgid "~A: unexpected argument~%"
+#~ msgstr "~A: argumento inesperado~%"
+
+#~ msgid "failed to download up-to-date source, exiting\n"
+#~ msgstr "falha ao baixar fonte atualizada; saindo\n"
+
+#~ msgid "substitute at '~a' lacks a signature~%"
+#~ msgstr "o substituto em \"~a\" carece de uma assinatura~%"
+
+#~ msgid "Found valid signature for ~a~%"
+#~ msgstr "Localizada assinatura válida para ~a~%"
+
+#~ msgid "From ~a~%"
+#~ msgstr "De ~a~%"
+
+#~ msgid "Downloading ~a~:[~*~; (~a installed)~]...~%"
+#~ msgstr "Baixando ~a~:[~*~; (~a instalado)~]...~%"
 
-#: nix/nix-daemon/guix-daemon.cc:220 nix/nix-daemon/guix-daemon.cc:396
-#, c-format
-msgid "error: %s\n"
-msgstr "erro: %s\n"
+#~ msgid "failed to install GRUB on device '~a'~%"
+#~ msgstr "falha ao instalar GRUB no dispositivo \"~a\"~%"
 
-#: nix/nix-daemon/guix-daemon.cc:281
-#, c-format
-msgid "error: libgcrypt version mismatch\n"
-msgstr "erro: versão do libgcrypt não confere\n"
+#~ msgid "failed to re-install GRUB configuration file: '~a'~%"
+#~ msgstr "falha ao reinstalar o arquivo de configuração do GRUB: \"~a\"~%"
 
-#: nix/nix-daemon/guix-daemon.cc:372
-#, c-format
-msgid "warning: daemon is running as root, so using `--build-users-group' is highly recommended\n"
-msgstr "aviso: daemon está sendo executado como root, então o uso de \"--build-users-group\" é fortemente recomendado\n"
+#~ msgid "assuming no CVE vulnerabilities~%"
+#~ msgstr "presumindo haver nenhuma vulnerabilidade CVE~%"
+
+#~ msgid "failed to lookup NIST host: ~a~%"
+#~ msgstr "falha ao procurar o servidor do NIST: ~a~%"
+
+#~ msgid "~a: no substitute at '~a'~%"
+#~ msgstr "~a: nenhum substituto em \"~a\"'~%"
+
+#~ msgid "Updater for GNOME packages"
+#~ msgstr "Atualizador para pacotes GNOME"
+
+#~ msgid "gz"
+#~ msgstr "gz"
+
+#~ msgid "failed to create configuration directory `~a': ~a~%"
+#~ msgstr "falha ao criar o diretório de compilação \"~a\": ~a~%"
+
+#~ msgid "download failed"
+#~ msgstr "download falhou"
+
+#~ msgid "error: %s: invalid number of rounds\n"
+#~ msgstr "erro: %s: número inválido de vezes\n"
+
+#~ msgid "error: %s\n"
+#~ msgstr "erro: %s\n"
+
+#~ msgid "error: libgcrypt version mismatch\n"
+#~ msgstr "erro: versão do libgcrypt não confere\n"
+
+#~ msgid "warning: daemon is running as root, so using `--build-users-group' is highly recommended\n"
+#~ msgstr "aviso: daemon está sendo executado como root, então o uso de \"--build-users-group\" é fortemente recomendado\n"
 
 #~ msgid "unsupported argument for reference graph"
 #~ msgstr "sem suporte ao argumento para gráfico de referência"
@@ -3295,9 +3862,6 @@ msgstr "aviso: daemon está sendo executado como root, então o uso de \"--build
 #~ msgid "failed to build the empty profile~%"
 #~ msgstr "falha ao compilar o perfil vazio~%"
 
-#~ msgid "looking for the latest release of GNU ~a..."
-#~ msgstr "procurando pelo último lançamento do GNU ~a..."
-
 #~ msgid "~a: note: using ~a but ~a is available upstream~%"
 #~ msgstr "~a: nota: usando ~a, mas ~a está disponível no upstream~%"
 
diff --git a/tests/guix-package.sh b/tests/guix-package.sh
index ffc8c64e24..760a2e4c9b 100644
--- a/tests/guix-package.sh
+++ b/tests/guix-package.sh
@@ -1,5 +1,5 @@
 # GNU Guix --- Functional package management for GNU
-# Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 # Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 #
 # This file is part of GNU Guix.
@@ -118,6 +118,22 @@ grep '^name: gnubg' "$tmpfile"
 
 rm -f "$tmpfile"
 
+# Make sure deprecated packages don't show up: <https://bugs.gnu.org/30566>.
+mkdir "$module_dir"
+cat > "$module_dir/foo.scm"<<EOF
+(define-module (foo)
+  #:use-module (guix packages)
+  #:use-module (gnu packages base))
+
+(define-public deprecated
+  (deprecated-package "fileutils" coreutils))
+EOF
+
+guix build -L "$module_dir" -e '(@ (foo) deprecated)' -n
+test "`guix package -L "$module_dir" -s ^fileutils$ | grep ^name:`" = ""
+
+rm -rf "$module_dir"
+
 # Make sure `--search' can display all the packages.
 guix package --search="" > /dev/null
 
diff --git a/tests/hash.scm b/tests/hash.scm
index b189e435c8..b4cf2b61d6 100644
--- a/tests/hash.scm
+++ b/tests/hash.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,13 +37,6 @@
   (base16-string->bytevector
    "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"))
 
-(define (supports-unbuffered-cbip?)
-  "Return #t if unbuffered custom binary input ports (CBIPs) are supported.
-In Guile <= 2.0.9, CBIPs were always fully buffered, so the
-'open-sha256-input-port' does not work there."
-  (false-if-exception
-   (setvbuf (make-custom-binary-input-port "foo" pk #f #f #f) _IONBF)))
-
 
 (test-begin "hash")
 
@@ -77,8 +70,6 @@ In Guile <= 2.0.9, CBIPs were always fully buffered, so the
     (equal? (sha256 contents)
             (call-with-input-file file port-sha256))))
 
-(test-skip (if (supports-unbuffered-cbip?) 0 4))
-
 (test-equal "open-sha256-input-port, empty"
   `("" ,%empty-sha256)
   (let-values (((port get)
diff --git a/tests/packages.scm b/tests/packages.scm
index 930374dabf..b2fa21a874 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -557,6 +557,24 @@
          (let ((p (pk 'drv d (derivation->output-path d))))
            (eq? 'hello (call-with-input-file p read))))))
 
+(test-assert "trivial with #:allowed-references"
+  (let* ((p (package
+              (inherit (dummy-package "trivial"))
+              (build-system trivial-build-system)
+              (arguments
+               `(#:guile ,%bootstrap-guile
+                 #:allowed-references (,%bootstrap-guile)
+                 #:builder
+                 (begin
+                   (mkdir %output)
+                   ;; The reference to itself isn't allowed so building it
+                   ;; should fail.
+                   (symlink %output (string-append %output "/self")))))))
+         (d (package-derivation %store p)))
+    (guard (c ((nix-protocol-error? c) #t))
+      (build-derivations %store (list d))
+      #f)))
+
 (test-assert "search paths"
   (let* ((p (make-prompt-tag "return-search-paths"))
          (s (build-system
diff --git a/tests/profiles.scm b/tests/profiles.scm
index 469dde2652..92eb08cb9e 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -148,6 +148,11 @@
            (_ #f))
          (equal? m3 m4))))
 
+(test-equal "manifest-add removes duplicates"    ;<https://bugs.gnu.org/30569>
+  (list guile-2.0.9)
+  (manifest-entries (manifest-add (manifest '())
+                                  (list guile-2.0.9 guile-2.0.9))))
+
 (test-assert "manifest-perform-transaction"
   (let* ((m0 (manifest (list guile-2.0.9 guile-2.0.9:debug)))
          (t1 (manifest-transaction