summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/build/cross-toolchain.scm6
-rw-r--r--gnu/local.mk32
-rw-r--r--gnu/packages/acl.scm20
-rw-r--r--gnu/packages/admin.scm87
-rw-r--r--gnu/packages/algebra.scm91
-rw-r--r--gnu/packages/android.scm3
-rw-r--r--gnu/packages/apr.scm11
-rw-r--r--gnu/packages/aspell.scm5
-rw-r--r--gnu/packages/assembly.scm2
-rw-r--r--gnu/packages/attr.scm21
-rw-r--r--gnu/packages/audio.scm54
-rw-r--r--gnu/packages/autotools.scm85
-rw-r--r--gnu/packages/avr.scm2
-rw-r--r--gnu/packages/backup.scm41
-rw-r--r--gnu/packages/base.scm346
-rw-r--r--gnu/packages/bash.scm18
-rw-r--r--gnu/packages/bdw-gc.scm12
-rw-r--r--gnu/packages/bioinformatics.scm102
-rw-r--r--gnu/packages/boost.scm70
-rw-r--r--gnu/packages/bootstrap.scm46
-rw-r--r--gnu/packages/cdrom.scm28
-rw-r--r--gnu/packages/certs.scm12
-rw-r--r--gnu/packages/check.scm68
-rw-r--r--gnu/packages/chez.scm6
-rw-r--r--gnu/packages/ci.scm5
-rw-r--r--gnu/packages/cmake.scm212
-rw-r--r--gnu/packages/code.scm25
-rw-r--r--gnu/packages/commencement.scm182
-rw-r--r--gnu/packages/compression.scm201
-rw-r--r--gnu/packages/compton.scm2
-rw-r--r--gnu/packages/cross-base.scm86
-rw-r--r--gnu/packages/crypto.scm24
-rw-r--r--gnu/packages/cups.scm35
-rw-r--r--gnu/packages/curl.scm12
-rw-r--r--gnu/packages/databases.scm104
-rw-r--r--gnu/packages/debug.scm5
-rw-r--r--gnu/packages/dejagnu.scm13
-rw-r--r--gnu/packages/dictionaries.scm22
-rw-r--r--gnu/packages/dns.scm4
-rw-r--r--gnu/packages/docbook.scm40
-rw-r--r--gnu/packages/documentation.scm4
-rw-r--r--gnu/packages/elf.scm7
-rw-r--r--gnu/packages/emacs.scm67
-rw-r--r--gnu/packages/embedded.scm9
-rw-r--r--gnu/packages/emulators.scm15
-rw-r--r--gnu/packages/engineering.scm10
-rw-r--r--gnu/packages/enlightenment.scm5
-rw-r--r--gnu/packages/fonts.scm15
-rw-r--r--gnu/packages/fontutils.scm42
-rw-r--r--gnu/packages/fpga.scm6
-rw-r--r--gnu/packages/freedesktop.scm25
-rw-r--r--gnu/packages/ftp.scm10
-rw-r--r--gnu/packages/game-development.scm5
-rw-r--r--gnu/packages/games.scm127
-rw-r--r--gnu/packages/gawk.scm13
-rw-r--r--gnu/packages/gcc.scm326
-rw-r--r--gnu/packages/gdb.scm3
-rw-r--r--gnu/packages/geo.scm3
-rw-r--r--gnu/packages/gettext.scm7
-rw-r--r--gnu/packages/ghostscript.scm41
-rw-r--r--gnu/packages/gl.scm31
-rw-r--r--gnu/packages/glib.scm73
-rw-r--r--gnu/packages/gnome.scm76
-rw-r--r--gnu/packages/gnu-doc.scm12
-rw-r--r--gnu/packages/gnucash.scm68
-rw-r--r--gnu/packages/gnunet.scm5
-rw-r--r--gnu/packages/gnupg.scm12
-rw-r--r--gnu/packages/gnuzilla.scm104
-rw-r--r--gnu/packages/graphics.scm3
-rw-r--r--gnu/packages/graphviz.scm11
-rw-r--r--gnu/packages/gstreamer.scm33
-rw-r--r--gnu/packages/gtk.scm112
-rw-r--r--gnu/packages/guile.scm143
-rw-r--r--gnu/packages/haskell.scm8
-rw-r--r--gnu/packages/hurd.scm17
-rw-r--r--gnu/packages/icu4c.scm4
-rw-r--r--gnu/packages/image-processing.scm2
-rw-r--r--gnu/packages/image.scm22
-rw-r--r--gnu/packages/imagemagick.scm12
-rw-r--r--gnu/packages/irc.scm3
-rw-r--r--gnu/packages/java.scm27
-rw-r--r--gnu/packages/javascript.scm26
-rw-r--r--gnu/packages/kde-frameworks.scm3
-rw-r--r--gnu/packages/kerberos.scm8
-rw-r--r--gnu/packages/kodi.scm6
-rw-r--r--gnu/packages/ld-wrapper.in23
-rw-r--r--gnu/packages/libbsd.scm4
-rw-r--r--gnu/packages/libevent.scm6
-rw-r--r--gnu/packages/libffi.scm39
-rw-r--r--gnu/packages/libidn.scm4
-rw-r--r--gnu/packages/libreoffice.scm12
-rw-r--r--gnu/packages/libsigsegv.scm4
-rw-r--r--gnu/packages/libunistring.scm6
-rw-r--r--gnu/packages/libusb.scm6
-rw-r--r--gnu/packages/linux.scm340
-rw-r--r--gnu/packages/lisp.scm42
-rw-r--r--gnu/packages/lua.scm16
-rw-r--r--gnu/packages/lxde.scm5
-rw-r--r--gnu/packages/m4.scm26
-rw-r--r--gnu/packages/machine-learning.scm3
-rw-r--r--gnu/packages/mail.scm10
-rw-r--r--gnu/packages/make-bootstrap.scm185
-rw-r--r--gnu/packages/man.scm7
-rw-r--r--gnu/packages/markup.scm5
-rw-r--r--gnu/packages/mate.scm22
-rw-r--r--gnu/packages/maths.scm61
-rw-r--r--gnu/packages/messaging.scm16
-rw-r--r--gnu/packages/microcom.scm6
-rw-r--r--gnu/packages/monitoring.scm8
-rw-r--r--gnu/packages/mp3.scm12
-rw-r--r--gnu/packages/multiprecision.scm9
-rw-r--r--gnu/packages/music.scm53
-rw-r--r--gnu/packages/ncurses.scm66
-rw-r--r--gnu/packages/netpbm.scm3
-rw-r--r--gnu/packages/networking.scm10
-rw-r--r--gnu/packages/node.scm3
-rw-r--r--gnu/packages/nvi.scm3
-rw-r--r--gnu/packages/ocaml.scm56
-rw-r--r--gnu/packages/onc-rpc.scm8
-rw-r--r--gnu/packages/openldap.scm5
-rw-r--r--gnu/packages/package-management.scm4
-rw-r--r--gnu/packages/patches/alsa-lib-add-environment-variable.patch110
-rw-r--r--gnu/packages/patches/binutils-ld-new-dtags.patch16
-rw-r--r--gnu/packages/patches/boost-fix-icu-build.patch53
-rw-r--r--gnu/packages/patches/btrfs-progs-e-value-block.patch37
-rw-r--r--gnu/packages/patches/cmake-fix-tests.patch120
-rw-r--r--gnu/packages/patches/e2fsprogs-glibc-2.27.patch56
-rw-r--r--gnu/packages/patches/elogind-glibc-2.27.patch22
-rw-r--r--gnu/packages/patches/fontconfig-remove-debug-printf.patch18
-rw-r--r--gnu/packages/patches/gawk-shell.patch30
-rw-r--r--gnu/packages/patches/gcc-strmov-store-file-names.patch50
-rw-r--r--gnu/packages/patches/ghostscript-no-header-id.patch13
-rw-r--r--gnu/packages/patches/glib-respect-datadir.patch21
-rw-r--r--gnu/packages/patches/glibc-2.27-git-fixes.patch702
-rw-r--r--gnu/packages/patches/glibc-bootstrap-system.patch14
-rw-r--r--gnu/packages/patches/glibc-hidden-visibility-ldconfig.patch16
-rw-r--r--gnu/packages/patches/glibc-reinstate-prlimit64-fallback.patch127
-rw-r--r--gnu/packages/patches/graphite2-ffloat-store.patch34
-rw-r--r--gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch53
-rw-r--r--gnu/packages/patches/lcms-CVE-2016-10165.patch36
-rw-r--r--gnu/packages/patches/libgpg-error-aarch64-logging-fix.patch58
-rw-r--r--gnu/packages/patches/libtasn1-CVE-2017-10790.patch63
-rw-r--r--gnu/packages/patches/libtasn1-CVE-2018-6003.patch73
-rw-r--r--gnu/packages/patches/libvorbis-CVE-2017-14632.patch63
-rw-r--r--gnu/packages/patches/libvorbis-CVE-2017-14633.patch43
-rw-r--r--gnu/packages/patches/libxcb-python-3.5-compat.patch64
-rw-r--r--gnu/packages/patches/make-glibc-compat.patch52
-rw-r--r--gnu/packages/patches/patch-hurd-path-max.patch15
-rw-r--r--gnu/packages/patches/pcre2-CVE-2017-7186.patch68
-rw-r--r--gnu/packages/patches/pcre2-CVE-2017-8786.patch155
-rw-r--r--gnu/packages/patches/pulseaudio-glibc-2.27.patch67
-rw-r--r--gnu/packages/patches/pycairo-wscript.patch31
-rw-r--r--gnu/packages/patches/python-3-search-paths.patch13
-rw-r--r--gnu/packages/patches/qemu-glibc-2.27.patch55
-rw-r--r--gnu/packages/patches/tar-CVE-2016-6321.patch51
-rw-r--r--gnu/packages/patches/tar-remove-wholesparse-check.patch68
-rw-r--r--gnu/packages/patches/util-linux-CVE-2018-7738.patch49
-rw-r--r--gnu/packages/patches/util-linux-tests.patch8
-rw-r--r--gnu/packages/patches/xcb-proto-python3-print.patch75
-rw-r--r--gnu/packages/patches/xcb-proto-python3-whitespace.patch217
-rw-r--r--gnu/packages/pciutils.scm2
-rw-r--r--gnu/packages/pcre.scm7
-rw-r--r--gnu/packages/pdf.scm17
-rw-r--r--gnu/packages/perl.scm10
-rw-r--r--gnu/packages/php.scm3
-rw-r--r--gnu/packages/pkg-config.scm3
-rw-r--r--gnu/packages/plotutils.scm19
-rw-r--r--gnu/packages/pretty-print.scm8
-rw-r--r--gnu/packages/profiling.scm6
-rw-r--r--gnu/packages/pulseaudio.scm23
-rw-r--r--gnu/packages/python-crypto.scm3
-rw-r--r--gnu/packages/python.scm175
-rw-r--r--gnu/packages/qt.scm15
-rw-r--r--gnu/packages/ratpoison.scm8
-rw-r--r--gnu/packages/rdf.scm6
-rw-r--r--gnu/packages/robotics.scm10
-rw-r--r--gnu/packages/samba.scm6
-rw-r--r--gnu/packages/sawfish.scm20
-rw-r--r--gnu/packages/scanner.scm11
-rw-r--r--gnu/packages/scheme.scm29
-rw-r--r--gnu/packages/screen.scm6
-rw-r--r--gnu/packages/scribus.scm6
-rw-r--r--gnu/packages/sdl.scm17
-rw-r--r--gnu/packages/selinux.scm4
-rw-r--r--gnu/packages/serialization.scm8
-rw-r--r--gnu/packages/shells.scm9
-rw-r--r--gnu/packages/slang.scm3
-rw-r--r--gnu/packages/smalltalk.scm3
-rw-r--r--gnu/packages/ssh.scm47
-rw-r--r--gnu/packages/statistics.scm2
-rw-r--r--gnu/packages/storage.scm4
-rw-r--r--gnu/packages/sync.scm3
-rw-r--r--gnu/packages/syncthing.scm23
-rw-r--r--gnu/packages/tbb.scm8
-rw-r--r--gnu/packages/tcl.scm34
-rw-r--r--gnu/packages/terminals.scm6
-rw-r--r--gnu/packages/tex.scm225
-rw-r--r--gnu/packages/texinfo.scm4
-rw-r--r--gnu/packages/text-editors.scm12
-rw-r--r--gnu/packages/textutils.scm7
-rw-r--r--gnu/packages/tls.scm139
-rw-r--r--gnu/packages/unrtf.scm2
-rw-r--r--gnu/packages/version-control.scm56
-rw-r--r--gnu/packages/video.scm113
-rw-r--r--gnu/packages/virtualization.scm10
-rw-r--r--gnu/packages/vpn.scm3
-rw-r--r--gnu/packages/web.scm58
-rw-r--r--gnu/packages/webkit.scm50
-rw-r--r--gnu/packages/wget.scm4
-rw-r--r--gnu/packages/wine.scm3
-rw-r--r--gnu/packages/wm.scm23
-rw-r--r--gnu/packages/wxwidgets.scm3
-rw-r--r--gnu/packages/xdisorg.scm29
-rw-r--r--gnu/packages/xfce.scm3
-rw-r--r--gnu/packages/xiph.scm19
-rw-r--r--gnu/packages/xml.scm6
-rw-r--r--gnu/packages/xnee.scm5
-rw-r--r--gnu/packages/xorg.scm446
-rw-r--r--gnu/packages/zile.scm2
-rw-r--r--gnu/system.scm3
-rw-r--r--guix/build/ant-build-system.scm21
-rw-r--r--guix/build/asdf-build-system.scm2
-rw-r--r--guix/build/cargo-build-system.scm1
-rw-r--r--guix/build/cmake-build-system.scm5
-rw-r--r--guix/build/cvs.scm27
-rw-r--r--guix/build/dub-build-system.scm1
-rw-r--r--guix/build/emacs-build-system.scm1
-rw-r--r--guix/build/emacs-utils.scm2
-rw-r--r--guix/build/font-build-system.scm1
-rw-r--r--guix/build/glib-or-gtk-build-system.scm21
-rw-r--r--guix/build/gnu-build-system.scm311
-rw-r--r--guix/build/gnu-dist.scm17
-rw-r--r--guix/build/go-build-system.scm1
-rw-r--r--guix/build/gremlin.scm4
-rw-r--r--guix/build/haskell-build-system.scm1
-rw-r--r--guix/build/hg.scm30
-rw-r--r--guix/build/minify-build-system.scm1
-rw-r--r--guix/build/ocaml-build-system.scm1
-rw-r--r--guix/build/perl-build-system.scm17
-rw-r--r--guix/build/python-build-system.scm46
-rw-r--r--guix/build/r-build-system.scm1
-rw-r--r--guix/build/ruby-build-system.scm1
-rw-r--r--guix/build/scons-build-system.scm25
-rw-r--r--guix/build/svn.scm38
-rw-r--r--guix/build/texlive-build-system.scm11
-rw-r--r--guix/build/utils.scm47
-rw-r--r--guix/build/waf-build-system.scm1
-rw-r--r--guix/download.scm26
-rw-r--r--guix/gexp.scm44
-rw-r--r--guix/packages.scm134
-rw-r--r--guix/ui.scm18
-rw-r--r--tests/packages.scm77
-rw-r--r--tests/profiles.scm6
253 files changed, 5530 insertions, 4804 deletions
diff --git a/gnu/build/cross-toolchain.scm b/gnu/build/cross-toolchain.scm
index 450443ca63..d430b8afc4 100644
--- a/gnu/build/cross-toolchain.scm
+++ b/gnu/build/cross-toolchain.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;;
@@ -119,7 +119,7 @@ C_*INCLUDE_PATH."
         ;; libc is false, so we are building xgcc-sans-libc.
         ;; Add essential headers from mingw-w64.
         (let ((mingw-source (assoc-ref inputs "mingw-source")))
-          (system* "tar" "xvf" mingw-source)
+          (invoke "tar" "xvf" mingw-source)
           (let ((mingw-headers (unpacked-mingw-dir)))
             ;; We need _mingw.h which will gets built from _mingw.h.in by
             ;; mingw-w64's configure.  We cannot configure mingw-w64 until we
@@ -160,7 +160,7 @@ C_*INCLUDE_PATH."
   "Install a stripped GCC."
   ;; Unlike our 'strip' phase, this will do the right thing for
   ;; cross-compilers.
-  (zero? (system* "make" "install-strip")))
+  (invoke "make" "install-strip"))
 
 (define* (cross-gcc-build-phases target
                                  #:optional (phases %standard-phases))
diff --git a/gnu/local.mk b/gnu/local.mk
index 7734586f0a..2e266af44d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -560,6 +560,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/aegis-test-fixup-1.patch            	\
   %D%/packages/patches/aegis-test-fixup-2.patch            	\
   %D%/packages/patches/agg-am_c_prototype.patch			\
+  %D%/packages/patches/alsa-lib-add-environment-variable.patch \
   %D%/packages/patches/amule-crypto-6.patch			\
   %D%/packages/patches/ansible-wrap-program-hack.patch		\
   %D%/packages/patches/antiword-CVE-2014-8123.patch			\
@@ -579,9 +580,10 @@ dist_patch_DATA =						\
   %D%/packages/patches/azr3.patch				\
   %D%/packages/patches/bash-completion-directories.patch	\
   %D%/packages/patches/bazaar-CVE-2017-14176.patch		\
-  %D%/packages/patches/binutils-ld-new-dtags.patch		\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
   %D%/packages/patches/blast+-fix-makefile.patch		\
+  %D%/packages/patches/boost-fix-icu-build.patch		\
+  %D%/packages/patches/btrfs-progs-e-value-block.patch		\
   %D%/packages/patches/byobu-writable-status.patch		\
   %D%/packages/patches/cairo-CVE-2016-9082.patch			\
   %D%/packages/patches/calibre-no-updates-dialog.patch		\
@@ -606,7 +608,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/clisp-remove-failing-test.patch		\
   %D%/packages/patches/clucene-pkgconfig.patch			\
   %D%/packages/patches/clx-remove-demo.patch			\
-  %D%/packages/patches/cmake-fix-tests.patch			\
   %D%/packages/patches/coda-use-system-libs.patch		\
   %D%/packages/patches/cool-retro-term-dont-check-uninit-member.patch	\
   %D%/packages/patches/cool-retro-term-fix-array-size.patch	\
@@ -635,9 +636,11 @@ dist_patch_DATA =						\
   %D%/packages/patches/doc++-segfault-fix.patch			\
   %D%/packages/patches/doxygen-test.patch			\
   %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
+  %D%/packages/patches/e2fsprogs-glibc-2.27.patch		\
   %D%/packages/patches/eigen-arm-neon-fixes.patch		\
   %D%/packages/patches/elfutils-tests-ptrace.patch		\
   %D%/packages/patches/elixir-disable-failing-tests.patch	\
+  %D%/packages/patches/elogind-glibc-2.27.patch			\
   %D%/packages/patches/einstein-build.patch			\
   %D%/packages/patches/emacs-browse-at-remote-cgit-gnu.patch	\
   %D%/packages/patches/emacs-exec-path.patch			\
@@ -671,7 +674,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/fltk-xfont-on-demand.patch		\
   %D%/packages/patches/foomatic-filters-CVE-2015-8327.patch	\
   %D%/packages/patches/foomatic-filters-CVE-2015-8560.patch	\
-  %D%/packages/patches/fontconfig-remove-debug-printf.patch	\
   %D%/packages/patches/freeimage-CVE-2015-0852.patch		\
   %D%/packages/patches/freeimage-CVE-2016-5684.patch		\
   %D%/packages/patches/freeimage-fix-build-with-gcc-5.patch	\
@@ -713,7 +715,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/ghostscript-runpath.patch		\
   %D%/packages/patches/giflib-make-reallocarray-private.patch	\
   %D%/packages/patches/glib-networking-ssl-cert-file.patch	\
-  %D%/packages/patches/glib-respect-datadir.patch		\
   %D%/packages/patches/glib-tests-timer.patch			\
   %D%/packages/patches/glibc-CVE-2015-5180.patch		\
   %D%/packages/patches/glibc-CVE-2015-7547.patch		\
@@ -725,12 +726,15 @@ dist_patch_DATA =						\
   %D%/packages/patches/glibc-CVE-2017-1000366-pt3.patch		\
   %D%/packages/patches/glibc-allow-kernel-2.6.32.patch		\
   %D%/packages/patches/glibc-bootstrap-system.patch		\
+  %D%/packages/patches/glibc-hidden-visibility-ldconfig.patch	\
   %D%/packages/patches/glibc-ldd-x86_64.patch			\
   %D%/packages/patches/glibc-locales.patch			\
   %D%/packages/patches/glibc-memchr-overflow-i686.patch		\
   %D%/packages/patches/glibc-o-largefile.patch			\
+  %D%/packages/patches/glibc-reinstate-prlimit64-fallback.patch	\
   %D%/packages/patches/glibc-vectorized-strcspn-guards.patch	\
   %D%/packages/patches/glibc-versioned-locpath.patch		\
+  %D%/packages/patches/glibc-2.27-git-fixes.patch		\
   %D%/packages/patches/glusterfs-use-PATH-instead-of-hardcodes.patch		\
   %D%/packages/patches/glog-gcc-5-demangling.patch		\
   %D%/packages/patches/gmp-arm-asm-nothumb.patch		\
@@ -746,7 +750,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/gpm-glibc-2.26.patch			\
   %D%/packages/patches/gpsbabel-minizip.patch     		\
   %D%/packages/patches/gpsbabel-qstring.patch     		\
-  %D%/packages/patches/graphite2-ffloat-store.patch		\
   %D%/packages/patches/grep-timing-sensitive-test.patch		\
   %D%/packages/patches/groff-source-date-epoch.patch		\
   %D%/packages/patches/groovy-add-exceptionutilsgenerator.patch	\
@@ -755,6 +758,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/guile-1.8-cpp-4.5.patch			\
   %D%/packages/patches/guile-2.2-default-utf8.patch		\
   %D%/packages/patches/guile-default-utf8.patch			\
+  %D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch	\
   %D%/packages/patches/guile-linux-syscalls.patch		\
   %D%/packages/patches/guile-present-coding.patch		\
   %D%/packages/patches/guile-relocatable.patch			\
@@ -821,7 +825,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/kobodeluxe-midicon-segmentation-fault.patch	\
   %D%/packages/patches/kobodeluxe-graphics-window-signed-char.patch	\
   %D%/packages/patches/laby-make-install.patch			\
-  %D%/packages/patches/lcms-CVE-2016-10165.patch		\
   %D%/packages/patches/ldc-bootstrap-disable-tests.patch	\
   %D%/packages/patches/ldc-1.7.0-disable-phobos-tests.patch	\
   %D%/packages/patches/ledger-fix-uninitialized.patch		\
@@ -853,6 +856,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libgdata-glib-duplicate-tests.patch	\
   %D%/packages/patches/libgnome-encoding.patch			\
   %D%/packages/patches/libgnomeui-utf8.patch			\
+  %D%/packages/patches/libgpg-error-aarch64-logging-fix.patch	\
   %D%/packages/patches/libgxps-CVE-2017-11590.patch		\
   %D%/packages/patches/libffi-3.2.1-complex-alpha.patch		\
   %D%/packages/patches/libjxr-fix-function-signature.patch	\
@@ -872,8 +876,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/libssh-hostname-parser-bug.patch		\
   %D%/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch	\
   %D%/packages/patches/libtar-CVE-2013-4420.patch 		\
-  %D%/packages/patches/libtasn1-CVE-2017-10790.patch		\
-  %D%/packages/patches/libtasn1-CVE-2018-6003.patch		\
   %D%/packages/patches/libtheora-config-guess.patch		\
   %D%/packages/patches/libtiff-CVE-2017-9935.patch		\
   %D%/packages/patches/libtiff-CVE-2017-18013.patch		\
@@ -883,10 +885,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libutils-add-includes.patch		\
   %D%/packages/patches/libutils-remove-damaging-includes.patch	\
   %D%/packages/patches/libvdpau-va-gl-unbundle.patch		\
-  %D%/packages/patches/libvorbis-CVE-2017-14632.patch		\
-  %D%/packages/patches/libvorbis-CVE-2017-14633.patch		\
   %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
-  %D%/packages/patches/libxcb-python-3.5-compat.patch		\
   %D%/packages/patches/libxslt-generated-ids.patch		\
   %D%/packages/patches/libxt-guix-search-paths.patch		\
   %D%/packages/patches/lierolibre-check-unaligned-access.patch	\
@@ -912,6 +911,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/lxsession-use-gapplication.patch         \
   %D%/packages/patches/lyx-2.2.3-fix-test.patch			\
   %D%/packages/patches/mailutils-uninitialized-memory.patch	\
+  %D%/packages/patches/make-glibc-compat.patch			\
   %D%/packages/patches/make-impure-dirs.patch			\
   %D%/packages/patches/mars-install.patch			\
   %D%/packages/patches/mars-sfml-2.3.patch			\
@@ -982,8 +982,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/patchelf-rework-for-arm.patch		\
   %D%/packages/patches/patchutils-xfail-gendiff-tests.patch	\
   %D%/packages/patches/patch-hurd-path-max.patch		\
-  %D%/packages/patches/pcre2-CVE-2017-7186.patch		\
-  %D%/packages/patches/pcre2-CVE-2017-8786.patch		\
   %D%/packages/patches/perl-file-path-CVE-2017-6512.patch	\
   %D%/packages/patches/perl-autosplit-default-time.patch	\
   %D%/packages/patches/perl-dbd-mysql-CVE-2017-10788.patch	\
@@ -1021,8 +1019,8 @@ dist_patch_DATA =						\
   %D%/packages/patches/psm-ldflags.patch			\
   %D%/packages/patches/psm-repro.patch				\
   %D%/packages/patches/pulseaudio-fix-mult-test.patch		\
+  %D%/packages/patches/pulseaudio-glibc-2.27.patch		\
   %D%/packages/patches/pulseaudio-longer-test-timeout.patch	\
-  %D%/packages/patches/pycairo-wscript.patch			\
   %D%/packages/patches/pybugz-encode-error.patch		\
   %D%/packages/patches/pybugz-stty.patch			\
   %D%/packages/patches/pygpgme-disable-problematic-tests.patch  \
@@ -1063,6 +1061,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/python-unittest2-python3-compat.patch	\
   %D%/packages/patches/python-unittest2-remove-argparse.patch	\
   %D%/packages/patches/python-waitress-fix-tests.patch		\
+  %D%/packages/patches/qemu-glibc-2.27.patch 			\
   %D%/packages/patches/qt4-ldflags.patch			\
   %D%/packages/patches/qtbase-use-TZDIR.patch			\
   %D%/packages/patches/qtscript-disable-tests.patch		\
@@ -1112,7 +1111,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/t1lib-CVE-2010-2642.patch		\
   %D%/packages/patches/t1lib-CVE-2011-0764.patch		\
   %D%/packages/patches/t1lib-CVE-2011-1552+.patch		\
-  %D%/packages/patches/tar-CVE-2016-6321.patch			\
+  %D%/packages/patches/tar-remove-wholesparse-check.patch	\
   %D%/packages/patches/tar-skip-unreliable-tests.patch		\
   %D%/packages/patches/tclxml-3.2-install.patch			\
   %D%/packages/patches/tcsh-fix-autotest.patch			\
@@ -1148,7 +1147,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/unzip-overflow-long-fsize.patch		\
   %D%/packages/patches/unzip-remove-build-date.patch		\
   %D%/packages/patches/ustr-fix-build-with-gcc-5.patch		\
-  %D%/packages/patches/util-linux-CVE-2018-7738.patch		\
   %D%/packages/patches/util-linux-tests.patch			\
   %D%/packages/patches/upower-builddir.patch			\
   %D%/packages/patches/valgrind-enable-arm.patch		\
@@ -1183,8 +1181,6 @@ dist_patch_DATA =						\
   %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	\
   %D%/packages/patches/xdotool-fix-makefile.patch               \
   %D%/packages/patches/xf86-video-ark-remove-mibstore.patch	\
   %D%/packages/patches/xf86-video-ast-remove-mibstore.patch	\
diff --git a/gnu/packages/acl.scm b/gnu/packages/acl.scm
index 7880e533da..8d5f0117f5 100644
--- a/gnu/packages/acl.scm
+++ b/gnu/packages/acl.scm
@@ -1,8 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -47,8 +48,20 @@
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "tests"
+       #:modules ((ice-9 ftw)
+                  ,@%gnu-build-system-modules)
        #:phases
        (modify-phases %standard-phases
+         ;; XXX After repacking the sources the timestamps are reset to the
+         ;; epoch, which leads to a failure in gzipping the CHANGES file.
+         (add-after 'unpack 'ensure-no-mtimes-pre-1980
+           (lambda _
+             (let ((early-1980 315619200)) ; 1980-01-02 UTC
+               (ftw "." (lambda (file stat flag)
+                          (unless (<= early-1980 (stat:mtime stat))
+                            (utime file early-1980 early-1980))
+                          #t))
+               #t)))
          (add-after 'build 'patch-exec-bin-sh
            (lambda _
              (substitute* "test/run"
@@ -64,10 +77,11 @@
              ;; this user does not exist within Guix's build environment.
              (for-each (lambda (file)
                          (delete-file (string-append "test/" file)))
-                       '("setfacl-X.test" "cp.test" "misc.test"))))
+                       '("setfacl-X.test" "cp.test" "misc.test"))
+             #t))
          (replace 'install
            (lambda _
-             (zero? (system* "make" "install" "install-lib" "install-dev")))))))
+             (invoke "make" "install" "install-lib" "install-dev"))))))
     (inputs `(("attr" ,attr)))
     (native-inputs
      `(("gettext" ,gettext-minimal)
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 082ff7c2b4..437a183f7b 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -491,8 +491,8 @@ allow automatic login and starting any app.")
                           (output (assoc-ref %outputs "out"))
                           (etc    (string-append output "/etc")))
                      (setenv "PATH" (string-append xz "/bin"))
-                     (system* (string-append tar "/bin/tar") "xvf"
-                              source)
+                     (invoke (string-append tar "/bin/tar") "xvf"
+                             source)
                      (chdir ,(string-append "netbase-" version))
                      (mkdir-p etc)
                      (for-each copy-file
@@ -608,10 +608,10 @@ connection alive.")
 
 (define-public isc-dhcp
   (let* ((bind-major-version "9")
-         (bind-minor-version "9")
-         (bind-patch-version "11")
-         (bind-release-type "-P")         ; for patch release, use "-P"
-         (bind-release-version "1")      ; for patch release, e.g. "6"
+         (bind-minor-version "11")
+         (bind-patch-version "3")
+         (bind-release-type "")         ; for patch release, use "-P"
+         (bind-release-version "")      ; for patch release, e.g. "6"
          (bind-version (string-append bind-major-version
                                       "."
                                       bind-minor-version
@@ -621,14 +621,14 @@ connection alive.")
                                       bind-release-version)))
     (package
       (name "isc-dhcp")
-      (version "4.3.6-P1")
+      (version "4.4.1")
       (source (origin
                 (method url-fetch)
                 (uri (string-append "http://ftp.isc.org/isc/dhcp/"
                                     version "/dhcp-" version ".tar.gz"))
                 (sha256
                  (base32
-                  "1hx3az6ckvgvybr1ag4k9kqr8zfcpzcww4vpw5gz0mi8y2z7gl9g"))))
+                  "025nfqx4zwdgv4b3rkw26ihcj312vir08jk6yi57ndmb4a4m08ia"))))
       (build-system gnu-build-system)
       (arguments
        `(#:parallel-build? #f
@@ -674,16 +674,16 @@ connection alive.")
                                      sh " SHELL=" sh))))
 
                  (let ((bind-directory (string-append "bind-" ,bind-version)))
-                   (system* "tar" "xf" "bind.tar.gz")
+                   (invoke "tar" "xf" "bind.tar.gz")
                    (for-each patch-shebang
                              (find-files bind-directory ".*"))
-                   (zero? (system* "tar" "cf" "bind.tar.gz"
-                                   bind-directory
-                                   ;; avoid non-determinism in the archive
-                                   "--sort=name"
-                                   "--mtime=@0"
-                                   "--owner=root:0"
-                                   "--group=root:0"))))))
+                   (invoke "tar" "cf" "bind.tar.gz"
+                           bind-directory
+                           ;; avoid non-determinism in the archive
+                           "--sort=name"
+                           "--mtime=@0"
+                           "--owner=root:0"
+                           "--group=root:0")))))
            (add-after 'install 'post-install
              (lambda* (#:key inputs outputs #:allow-other-keys)
                ;; Install the dhclient script for GNU/Linux and make sure
@@ -709,7 +709,8 @@ connection alive.")
                      ,(map (lambda (dir)
                              (string-append dir "/bin:"
                                             dir "/sbin"))
-                           (list inetutils net-tools coreutils sed))))))))))
+                           (list inetutils net-tools coreutils sed))))
+                 #t))))))
 
       (native-inputs `(("perl" ,perl)))
 
@@ -727,7 +728,7 @@ connection alive.")
                                         "/bind-" bind-version ".tar.gz"))
                     (sha256
                      (base32
-                      "1a4g6nzzrbmhngdgvgv1jjq4fm06m8fwc2a0gskkchplxl7dva20"))))
+                      "1xbnb2b11274z9frc9y7nvkyxr52qx09bwb97gf9qzzcn8adx78d"))))
 
                 ;; When cross-compiling, we need the cross Coreutils and sed.
                 ;; Otherwise just use those from %FINAL-INPUTS.
@@ -742,7 +743,7 @@ connection alive.")
        "ISC's Dynamic Host Configuration Protocol (DHCP) distribution provides a
 reference implementation of all aspects of DHCP, through a suite of DHCP
 tools: server, client, and relay agent.")
-      (license license:isc)
+      (license license:mpl2.0)
       (properties '((cpe-name . "dhcp"))))))
 
 (define-public libpcap
@@ -903,13 +904,15 @@ at once based on a Perl regular expression.")
                 "0751mb9l2f0jrk3vj6q8ilanifd121dliwk0c34g8k0dlzsv3kd7"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile.in"
-                  (("-o \\$\\{LOG_OWN\\} -g \\$\\{LOG_GROUP\\}")
-                   ;; Don't try to chown root.
-                   "")
-                  (("mkdir -p \\$\\(ROTT_STATDIR\\)")
-                   ;; Don't attempt to create /var/lib/rottlog.
-                   "true")))))
+               '(begin
+                  (substitute* "Makefile.in"
+                    (("-o \\$\\{LOG_OWN\\} -g \\$\\{LOG_GROUP\\}")
+                     ;; Don't try to chown root.
+                     "")
+                    (("mkdir -p \\$\\(ROTT_STATDIR\\)")
+                     ;; Don't attempt to create /var/lib/rottlog.
+                     "true"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list "ROTT_ETCDIR=/etc/rottlog" ;rc file location
@@ -973,7 +976,9 @@ system administrator.")
                 "0yg62wq8rcrbr7qvh3wgfg2g4bwanbi50cr2lf2cfyy8dydx4qyq"))
               (modules '((guix build utils)))
               (snippet
-               '(delete-file-recursively "lib/zlib"))))
+               '(begin
+                  (delete-file-recursively "lib/zlib")
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -1412,9 +1417,11 @@ environment variable is set and output is to tty.")
                (base32
                 "1nwvjmx7kb14ni34c0b8x9a3791pc20gvhj7xaj66d8q4h6n0qf4"))
               (modules '((guix build utils)))
-              (snippet '(substitute* "tests/testsuite"
-                          (("#![[:blank:]]?/bin/sh")
-                           "#!$SHELL")))))
+              (snippet '(begin
+                          (substitute* "tests/testsuite"
+                            (("#![[:blank:]]?/bin/sh")
+                             "#!$SHELL"))
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1834,14 +1841,14 @@ done with the @code{auditctl} utility.")
               (modules '((guix build utils)))
               (snippet
                '(begin
-                  (map delete-file-recursively
-                       ;; Remove bundled lua, pcap, and pcre libraries.
-                       ;; FIXME: Remove bundled liblinear once packaged.
-                       '("liblua"
-                         "libpcap"
-                         "libpcre"
-                         ;; Remove pre-compiled binares.
-                         "mswin32"))
+                  (for-each delete-file-recursively
+                            ;; Remove bundled lua, pcap, and pcre libraries.
+                            ;; FIXME: Remove bundled liblinear once packaged.
+                            '("liblua"
+                              "libpcap"
+                              "libpcre"
+                              ;; Remove pre-compiled binares.
+                              "mswin32"))
                   #t))))
     (build-system gnu-build-system)
     (inputs
@@ -2146,7 +2153,9 @@ Kerberos and Heimdal and FAST is supported with recent MIT Kerberos.")
        (snippet
         ;; Remove binaries contained in the tarball which are only for the
         ;; target and can be regenerated anyway.
-        '(delete-file-recursively "bin"))
+        '(begin
+           (delete-file-recursively "bin")
+           #t))
        (file-name (string-append name "-" version ".tar.gz"))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index bf62144325..806dc45a24 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -521,31 +521,40 @@ a C program.")
     (license license:bsd-3)))
 
 (define-public fftw
-  ;; TODO: Make this 3.3.7 (see below) on the next upgrade cycle.
   (package
     (name "fftw")
-    (version "3.3.5")
+    (version "3.3.7")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://ftp.fftw.org/pub/fftw/fftw-"
                                  version".tar.gz"))
              (sha256
               (base32
-               "1kwbx92ps0r7s2mqy7lxbxanslxdzj7dp7r7gmdkzv1j8yqf3kwf"))))
+               "0wsms8narnbhfsa8chdflv2j9hzspvflblnqdn7hw8x5xdzrnq1v"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:configure-flags
-       '("--enable-shared" "--enable-openmp" "--enable-threads")
-       #:phases (alist-cons-before
-                 'build 'no-native
-                 (lambda _
-                   ;; By default '-mtune=native' is used.  However, that may
-                   ;; cause the use of ISA extensions (SSE2, etc.) that are
-                   ;; not necessarily available on the user's machine when
-                   ;; that package is built on a different machine.
-                   (substitute* (find-files "." "Makefile$")
-                     (("-mtune=native") "")))
-                 %standard-phases)))
+     `(#:configure-flags
+       '("--enable-shared" "--enable-openmp" "--enable-threads"
+         ,@(let ((system (or (%current-target-system) (%current-system))))
+             ;; Enable SIMD extensions for codelets.  See details at:
+             ;; <http://fftw.org/fftw3_doc/Installation-on-Unix.html>.
+             (cond
+              ((string-prefix? "x86_64" system)
+               '("--enable-sse2" "--enable-avx" "--enable-avx2"
+                 "--enable-avx512" "--enable-avx-128-fma"))
+              ((string-prefix? "i686" system)
+               '("--enable-sse2"))
+              ((string-prefix? "aarch64" system)
+               ;; Note that fftw supports NEON on 32-bit ARM only when
+               ;; compiled for single-precision.
+               '("--enable-neon"))
+              (else
+               '())))
+         ;; By default '-mtune=native' is used.  However, that may cause the
+         ;; use of ISA extensions (e.g. AVX) that are not necessarily
+         ;; available on the user's machine when that package is built on a
+         ;; different machine.
+         "ax_cv_c_flags__mtune_native=no")))
     (native-inputs `(("perl" ,perl)))
     (home-page "http://fftw.org")
     (synopsis "Computing the discrete Fourier transform")
@@ -561,8 +570,15 @@ cosine/ sine transforms or DCT/DST).")
     (name "fftwf")
     (arguments
      (substitute-keyword-arguments (package-arguments fftw)
-       ((#:configure-flags cf)
-        `(cons "--enable-float" ,cf))))
+       ((#:configure-flags fftw-configure-flags)
+        `(cons* "--enable-single"
+                ,@(if (string-prefix? "arm" (or (%current-target-system)
+                                                (%current-system)))
+                      ;; fftw supports NEON on 32-bit ARM only when compiled
+                      ;; for single-precision, so add it here.
+                      '("--enable-neon")
+                      '())
+                ,fftw-configure-flags))))
     (description
      (string-append (package-description fftw)
                     "  Single-precision version."))))
@@ -581,42 +597,6 @@ cosine/ sine transforms or DCT/DST).")
      (string-append (package-description fftw)
                     "  With OpenMPI parallelism support."))))
 
-(define-public fftw-3.3.7
-  ;; TODO: Make this the default 'fftw' on the next upgrade cycle.
-  (package
-    (inherit fftw)
-    (version "3.3.7")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "ftp://ftp.fftw.org/pub/fftw/fftw-"
-                                  version".tar.gz"))
-              (sha256
-               (base32
-                "0wsms8narnbhfsa8chdflv2j9hzspvflblnqdn7hw8x5xdzrnq1v"))))))
-
-(define-public fftw-avx
-  (package
-    (inherit fftw-3.3.7)
-    (name "fftw-avx")
-    (arguments
-     (substitute-keyword-arguments (package-arguments fftw-3.3.7)
-       ((#:configure-flags flags ''())
-        ;; Enable AVX & co.  See details at:
-        ;; <http://fftw.org/fftw3_doc/Installation-on-Unix.html>.
-        `(append '("--enable-avx" "--enable-avx2" "--enable-avx512"
-                   "--enable-avx-128-fma")
-                 ,flags))
-       ((#:substitutable? _ #f)
-        ;; To run the tests, we must have a CPU that supports all these
-        ;; extensions.  Since we cannot be sure that machines in the build
-        ;; farm support them, disable substitutes altogether.
-        #f)
-       ((#:phases _)
-        ;; Since we're not providing binaries, let '-mtune=native' through.
-        '%standard-phases)))
-    (synopsis "Computing the discrete Fourier transform (AVX2-optimized)")
-    (supported-systems '("x86_64-linux"))))
-
 (define-public java-la4j
   (package
     (name "java-la4j")
@@ -745,7 +725,8 @@ Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
                     ;; See
                     ;; https://bitbucket.org/eigen/eigen/commits/ea8c22ce6920e982d15245ee41d0531a46a28e5d
                     ((".*svd_preallocate[^\n]*" &)
-                     (string-append "//" & " // Not supported by BDCSVD")))))))
+                     (string-append "//" & " // Not supported by BDCSVD")))
+                  #t))))
     (build-system cmake-build-system)
     (arguments
      '(;; Turn off debugging symbols to save space.
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index d42a7aef1a..7618c0e1f6 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -663,7 +663,8 @@ file system.")
          (use-modules (guix build utils))
          (let ((source (assoc-ref %build-inputs "source")))
            (install-file (string-append source "/51-android.rules")
-                         (string-append %output "/lib/udev/rules.d"))))))
+                         (string-append %output "/lib/udev/rules.d"))
+           #t))))
     (home-page "https://github.com/M0Rf30/android-udev-rules")
     (synopsis "udev rules for Android devices")
     (description "Provides a set of udev rules to allow using Android devices
diff --git a/gnu/packages/apr.scm b/gnu/packages/apr.scm
index 62af24f0c7..8ccec08fa2 100644
--- a/gnu/packages/apr.scm
+++ b/gnu/packages/apr.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -87,11 +87,10 @@ around or take advantage of platform-specific deficiencies or features.")
                    (apr   (assoc-ref inputs  "apr"))
                    (expat (assoc-ref inputs  "expat")))
                (setenv "CONFIG_SHELL" (which "bash"))
-               (zero?
-                (system* "./configure"
-                         (string-append "--prefix=" out)
-                         (string-append "--with-apr=" apr)
-                         (string-append "--with-expat=" expat)))))))
+               (invoke "./configure"
+                       (string-append "--prefix=" out)
+                       (string-append "--with-apr=" apr)
+                       (string-append "--with-expat=" expat))))))
 
        ;; There are race conditions during 'make check'.  Typically, the
        ;; 'testall' executable is not built yet by the time 'make check' tries
diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm
index e1fe3db755..1e2149cd2c 100644
--- a/gnu/packages/aspell.scm
+++ b/gnu/packages/aspell.scm
@@ -55,7 +55,8 @@
                                               "/bin/aspell")))
                (wrap-program bin/aspell
                  '("ASPELL_CONF" "" =
-                   ("${ASPELL_CONF:-\"dict-dir ${GUIX_PROFILE:-$HOME/.guix-profile}/lib/aspell\"}")))))))))
+                   ("${ASPELL_CONF:-\"dict-dir ${GUIX_PROFILE:-$HOME/.guix-profile}/lib/aspell\"}")))
+               #t))))))
     (inputs `(("perl" ,perl)))
 
     (native-search-paths
@@ -101,7 +102,7 @@ dictionaries, including personal ones.")
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system* "./configure"))))))
+               (invoke "./configure")))))
        #:make-flags
        (let ((out (assoc-ref %outputs "out")))
          (list (string-append "dictdir=" out "/lib/aspell")
diff --git a/gnu/packages/assembly.scm b/gnu/packages/assembly.scm
index d682ddd033..763d183cf9 100644
--- a/gnu/packages/assembly.scm
+++ b/gnu/packages/assembly.scm
@@ -60,7 +60,7 @@
              #t))
          (add-after 'install 'install-info
            (lambda _
-             (zero? (system* "make" "install_doc")))))))
+             (invoke "make" "install_doc"))))))
     (home-page "http://www.nasm.us/")
     (synopsis "80x86 and x86-64 assembler")
     (description
diff --git a/gnu/packages/attr.scm b/gnu/packages/attr.scm
index fe102d211c..ff0a07aa67 100644
--- a/gnu/packages/attr.scm
+++ b/gnu/packages/attr.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2012, 2013, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,13 +43,14 @@
        (modify-phases %standard-phases
          (add-after 'configure 'patch-makefile-SHELL
            (lambda _
-             (patch-makefile-SHELL "include/buildmacros")))
+             (patch-makefile-SHELL "include/buildmacros")
+             #t))
          (replace 'install
            (lambda _
-             (zero? (system* "make"
-                             "install"
-                             "install-lib"
-                             "install-dev"))))
+             (invoke "make"
+                     "install"
+                     "install-lib"
+                     "install-dev")))
          (replace 'check
            (lambda* (#:key target #:allow-other-keys)
              ;; Use the right shell.
@@ -57,11 +59,14 @@
                 (which "sh")))
 
              ;; When building natively, run the tests.
+             ;;
+             ;; Note that we use system* and unconditionally return #t here
+             ;; to ignore the test result, because the tests will fail when
+             ;; the build is performed on a file system without support for
+             ;; extended attributes, and we wish to allow Guix to be built
+             ;; on such systems.
              (unless target
                (system* "make" "tests" "-C" "test"))
-
-             ;; XXX: Ignore the test result since this is
-             ;; dependent on the underlying file system.
              #t)))))
     (inputs
      ;; Perl is needed to run tests; remove it from cross builds.
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 97e2a49f6a..ef79eae8e2 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -213,7 +213,8 @@ streams from live audio.")
                     "libs/ardour/revision.cc"
                   (lambda (port)
                     (format port ,(string-append "#include \"ardour/revision.h\"
-namespace ARDOUR { const char* revision = \"" version "\" ; }")))))
+namespace ARDOUR { const char* revision = \"" version "\" ; }"))
+                    #t)))
               (sha256
                (base32
                 "0mla5lm51ryikc2rrk53max2m7a5ds6i1ai921l2h95wrha45nkr"))
@@ -515,7 +516,9 @@ tools (analyzer, mono/stereo tools, crossovers).")
               (modules '((guix build utils)))
               (snippet
                ;; remove prebuilt binaries
-               '(delete-file-recursively "linux_32bit"))))
+               '(begin
+                  (delete-file-recursively "linux_32bit")
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
@@ -1087,10 +1090,10 @@ also play midifiles using a Soundfont.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
+         (replace 'bootstrap
            (lambda _
              (substitute* "bootstrap" (("\r\n") "\n"))
-             (zero? (system* "sh" "bootstrap")))))))
+             (invoke "sh" "bootstrap"))))))
     (home-page "http://www.audiocoding.com/faad2.html")
     (synopsis "MPEG-4 and MPEG-2 AAC decoder")
     (description
@@ -1194,14 +1197,15 @@ PS, and DAB+.")
                      (setenv "PATH" (string-append
                                      (assoc-ref %build-inputs "bzip2") "/bin:"
                                      (assoc-ref %build-inputs "tar") "/bin"))
-                     (system* "tar" "xvf" (assoc-ref %build-inputs "source"))
+                     (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
                      (chdir "freepats")
                      ;; Use absolute pattern references
                      (substitute* "freepats.cfg"
                        (("Tone_000") (string-append out "/Tone_000"))
                        (("Drum_000") (string-append out "/Drum_000")))
                      (mkdir-p out)
-                     (copy-recursively "." out)))))
+                     (copy-recursively "." out)
+                     #t))))
     (native-inputs
      `(("tar" ,tar)
        ("bzip2" ,bzip2)))
@@ -1722,7 +1726,8 @@ included are the command line utilities @code{send_osc} and @code{dump_osc}.")
           (lambda* (#:key outputs #:allow-other-keys)
             (setenv "LDFLAGS"
                     (string-append "-Wl,-rpath="
-                                   (assoc-ref outputs "out") "/lib")))))))
+                                   (assoc-ref outputs "out") "/lib"))
+            #t)))))
     ;; required by lilv-0.pc
     (propagated-inputs
      `(("serd" ,serd)
@@ -2582,12 +2587,6 @@ Tracker 3 S3M and Impulse Tracker IT files.")
        ("automake" ,automake)
        ("libtool" ,libtool)
        ("file" ,file)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "sh" "bootstrap")))))))
     (home-page "http://www.surina.net/soundtouch/")
     (synopsis
      "Audio processing library for changing tempo, pitch and playback rate")
@@ -2850,8 +2849,10 @@ result.")
                     version ".tar.bz2"))
               (snippet
                ;; Don't optimize for a specific processor architecture.
-               '(substitute* "libs/Makefile"
-                  (("^CXXFLAGS \\+= -march=native") "")))
+               '(begin
+                  (substitute* "libs/Makefile"
+                    (("^CXXFLAGS \\+= -march=native") ""))
+                  #t))
               (modules '((guix build utils)))
               (sha256
                (base32
@@ -2895,8 +2896,10 @@ engine.")
                     version ".tar.bz2"))
               (snippet
                ;; Don't optimize for a specific processor architecture.
-               '(substitute* '("apps/Makefile" "libs/Makefile")
-                  (("^CXXFLAGS \\+= -march=native") "")))
+               '(begin
+                  (substitute* '("apps/Makefile" "libs/Makefile")
+                    (("^CXXFLAGS \\+= -march=native") ""))
+                  #t))
               (modules '((guix build utils)))
               (sha256
                (base32
@@ -2990,12 +2993,6 @@ point audio data.")
                "01xi3rvdmil9nawsha04iagjylqr1l9v9vlzk99scs8c207l58i4"))))
     (build-system gnu-build-system)
     ;; The source tarball is not bootstrapped.
-    (arguments
-     `(#:phases
-        (modify-phases %standard-phases
-          (add-after 'unpack 'bootstrap
-            (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
-    ;; Bootstrapping tools
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -3208,12 +3205,6 @@ mixers.")
                (base32
                 "1qinf41wl2ihx54zmmhanycihwjkn7dn1cicq6pp4rqbiv79b95x"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vif")))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -3433,7 +3424,7 @@ representations.")
          (list (string-append "cava_LDFLAGS = -L" lib " -Wl,-rpath " lib)))
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
+         (replace 'bootstrap
            (lambda* (#:key outputs #:allow-other-keys)
              (setenv "HOME" (getcwd))
              (invoke "sh" "autogen.sh")))
@@ -3479,7 +3470,8 @@ using ALSA, MPD, PulseAudio, or a FIFO buffer as its input.")
            (let ((file (assoc-ref %build-inputs "source"))
                  (out (string-append %output "/share/soundfonts")))
              (mkdir-p out)
-             (copy-file file (string-append out "/FluidR3Mono_GM.sf3"))))))
+             (copy-file file (string-append out "/FluidR3Mono_GM.sf3"))
+             #t))))
       (home-page  "https://github.com/musescore/MuseScore/tree/master/share/sound")
       (synopsis "Pro-quality GM soundfont")
       (description "Fluid-3 is Frank Wen's pro-quality GM soundfont.")
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index fd307a181a..7998dea504 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -3,11 +3,12 @@
 ;;; 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>
+;;; Copyright © 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -120,9 +121,9 @@ know anything about Autoconf or M4.")
                    (out  (assoc-ref outputs "out")))
                (setenv "CONFIG_SHELL" bash)
                (setenv "SHELL" bash)
-               (zero? (system* bash "./configure"
-                               (string-append "--prefix=" out)
-                               (string-append "--build=" build)))))))))))
+               (invoke bash "./configure"
+                       (string-append "--prefix=" out)
+                       (string-append "--build=" build))))))))))
 
 
 (define (make-autoconf-wrapper autoconf)
@@ -192,7 +193,8 @@ exec ~a --no-auto-compile \"$0\" \"$@\"
                        (patch-shebang "configure"))
                      (exit (status:exit-val result))))
                 port)))
-           (chmod (string-append bin "/autoconf") #o555)))))
+           (chmod (string-append bin "/autoconf") #o555)
+           #t))))
 
     ;; Do not show it in the UI since it's meant for internal use.
     (properties '((hidden? . #t)))))
@@ -248,14 +250,14 @@ output is indexed in many ways to simplify browsing.")
 (define-public automake
   (package
     (name "automake")
-    (version "1.15.1")
+    (version "1.16.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/automake/automake-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "1bzd9g32dfm4rsbw93ld9x7b5nc1y6i4m6zp032qf1i28a8s6sxg"))
+                "08g979ficj18i1w6w5219bgmns7czr03iadf20mk3lrzl8wbn1ax"))
              (patches
               (search-patches "automake-skip-amhello-tests.patch"))))
     (build-system gnu-build-system)
@@ -287,32 +289,33 @@ output is indexed in many ways to simplify browsing.")
                (setenv "CONFIG_SHELL" sh)
                #t)))
 
-           ;; Files like `install-sh', `mdate.sh', etc. must use
-           ;; #!/bin/sh, otherwise users could leak erroneous shebangs
-           ;; in the wild.  See <http://bugs.gnu.org/14201> for an
-           ;; example.
-           (add-after 'install 'unpatch-shebangs
-             (lambda* (#:key outputs #:allow-other-keys)
-               (let* ((out (assoc-ref outputs "out"))
-                      (dir (string-append out "/share")))
-                 (define (starts-with-shebang? file)
-                   (equal? (call-with-input-file file
-                             (lambda (p)
-                               (list (get-u8 p) (get-u8 p))))
-                           (map char->integer '(#\# #\!))))
+         ;; Files like `install-sh', `mdate.sh', etc. must use
+         ;; #!/bin/sh, otherwise users could leak erroneous shebangs
+         ;; in the wild.  See <http://bugs.gnu.org/14201> for an
+         ;; example.
+         (add-after 'install 'unpatch-shebangs
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dir (string-append out "/share")))
+               (define (starts-with-shebang? file)
+                 (equal? (call-with-input-file file
+                           (lambda (p)
+                             (list (get-u8 p) (get-u8 p))))
+                         (map char->integer '(#\# #\!))))
 
-                 (for-each (lambda (file)
-                             (when (and (starts-with-shebang? file)
-                                        (executable-file? file))
-                               (format #t "restoring shebang on `~a'~%"
-                                       file)
-                               (substitute* file
-                                 (("^#!.*/bin/sh")
-                                  "#!/bin/sh")
-                                 (("^#!.*/bin/env(.*)$" _ args)
-                                  (string-append "#!/usr/bin/env"
-                                                 args)))))
-                           (find-files dir ".*"))))))))
+               (for-each (lambda (file)
+                           (when (and (starts-with-shebang? file)
+                                      (executable-file? file))
+                             (format #t "restoring shebang on `~a'~%"
+                                     file)
+                             (substitute* file
+                               (("^#!.*/bin/sh")
+                                "#!/bin/sh")
+                               (("^#!.*/bin/env(.*)$" _ args)
+                                (string-append "#!/usr/bin/env"
+                                               args)))))
+                         (find-files dir ".*"))
+               #t))))))
     (home-page "https://www.gnu.org/software/automake/")
     (synopsis "Making GNU standards-compliant Makefiles")
     (description
@@ -322,21 +325,6 @@ 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.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/automake/automake-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "08g979ficj18i1w6w5219bgmns7czr03iadf20mk3lrzl8wbn1ax"))
-              (patches
-               (search-patches "automake-skip-amhello-tests.patch"))))))
-
 (define-public libtool
   (package
     (name "libtool")
@@ -353,6 +341,9 @@ Makefile, simplifying the entire process for the developer.")
     (propagated-inputs `(("m4" ,m4)))
     (native-inputs `(("m4" ,m4)
                      ("perl" ,perl)
+                     ;; XXX: this shouldn't be necessary, but without it test
+                     ;; 102 fails because it cannot find ltdl/libltdl.la.
+                     ("libltdl" ,libltdl)
                      ("help2man" ,help2man) ;because we modify ltmain.sh
                      ("automake" ,automake)      ;some tests rely on 'aclocal'
                      ("autoconf" ,autoconf-wrapper))) ;others on 'autom4te'
diff --git a/gnu/packages/avr.scm b/gnu/packages/avr.scm
index 4c7ebf5a8f..a84b43da6a 100644
--- a/gnu/packages/avr.scm
+++ b/gnu/packages/avr.scm
@@ -117,7 +117,7 @@ for use with GCC on Atmel AVR microcontrollers.")
       (version (package-version avr-gcc))
       (source #f)
       (build-system trivial-build-system)
-      (arguments '(#:builder (mkdir %output)))
+      (arguments '(#:builder (begin (mkdir %output) #t)))
       (propagated-inputs
        `(("avrdude" ,avrdude)
          ("binutils" ,avr-binutils)
diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm
index a3782e1296..8d988a08a2 100644
--- a/gnu/packages/backup.scm
+++ b/gnu/packages/backup.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -203,7 +204,6 @@ backups (called chunks) to allow easy burning to CD/DVD.")
         (base32
          "1km0mzfl6in7l5vz9kl09a88ajx562rw93ng9h2jqavrailvsbgd"))))
     (build-system gnu-build-system)
-    ;; TODO: Add -L/path/to/nettle in libarchive.pc.
     (inputs
      `(("zlib" ,zlib)
        ("nettle" ,nettle)
@@ -226,12 +226,33 @@ backups (called chunks) to allow easy burning to CD/DVD.")
              ;; the chroot's /etc/passwd doesn't have it.  Turn off those tests.
              ;;
              ;; The tests allow one to disable tests matching a globbing pattern.
-             (and (zero? (system* "make"
-                                  "libarchive_test" "bsdcpio_test" "bsdtar_test"))
-                  ;; XXX: This glob disables too much.
-                  (zero? (system* "./libarchive_test" "^test_*_disk*"))
-                  (zero? (system* "./bsdcpio_test" "^test_owner_parse"))
-                  (zero? (system* "./bsdtar_test"))))))
+             (invoke "make" "libarchive_test" "bsdcpio_test" "bsdtar_test")
+             ;; XXX: This glob disables too much.
+             (invoke "./libarchive_test" "^test_*_disk*")
+             (invoke "./bsdcpio_test" "^test_owner_parse")
+             (invoke "./bsdtar_test")))
+         (add-after 'install 'add--L-in-libarchive-pc
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out     (assoc-ref outputs "out"))
+                    (lib     (string-append out "/lib"))
+                    (nettle  (assoc-ref inputs "nettle"))
+                    (libxml2 (assoc-ref inputs "libxml2"))
+                    (xz      (assoc-ref inputs "xz"))
+                    (zlib    (assoc-ref inputs "zlib"))
+                    (bzip2   (assoc-ref inputs "bzip2")))
+               (substitute* (string-append lib "/pkgconfig/libarchive.pc")
+                 (("-lnettle")
+                  (string-append "-L" nettle "/lib -lnettle"))
+                 (("-lxml2")
+                  (string-append "-L" libxml2 "/lib -lxml2"))
+                 (("-llzma")
+                  (string-append "-L" xz "/lib -llzma"))
+                 (("-lz")
+                  (string-append "-L" zlib "/lib -lz"))
+                 (("-lbz2")
+                  (string-append "-L" bzip2 "/lib -lbz2")))
+               #t))))
+
        ;; libarchive/test/test_write_format_gnutar_filenames.c needs to be
        ;; compiled with C99 or C11 or a gnu variant.
        #:configure-flags '("CFLAGS=-O2 -g -std=c99")))
@@ -278,9 +299,6 @@ random access nor for in-place modification.")
      `(#:parallel-build? #f             ;race conditions
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (invoke "autoreconf")))
          (add-before 'build 'qualify-inputs
            (lambda* (#:key inputs #:allow-other-keys)
              ;; This script is full of pitfalls.  Fix some that particularly
@@ -468,7 +486,8 @@ detection, and lossless compression.")
            ;; Remove bundled shared libraries.
            (with-directory-excursion "src/borg/algorithms"
              (for-each delete-file-recursively
-                       (list "blake2" "lz4" "zstd")))))))
+                       (list "blake2" "lz4" "zstd")))
+           #t))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((srfi srfi-26) ; for cut
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index 07ae4b70ae..6d9f019857 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -2,16 +2,17 @@
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2014, 2015 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
-;;; Copyright © 2016 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2016, 2018 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -35,6 +36,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages bash)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages ed)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages multiprecision)
@@ -126,14 +128,14 @@ including, for example, recursive directory searching.")
 (define-public sed
   (package
    (name "sed")
-   (version "4.4")
+   (version "4.5")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/sed/sed-" version
                                 ".tar.xz"))
             (sha256
              (base32
-              "0fv88bcnraixc8jvpacvxshi30p5x9m7yb8ns1hfv07hmb2ypmnb"))))
+              "0h3b2jfj57wmz680vkbyavlsrkak556qhvs7m7fdlawwhg477bbs"))))
    (build-system gnu-build-system)
    (synopsis "Stream editor")
    (arguments
@@ -147,15 +149,9 @@ including, for example, recursive directory searching.")
             (substitute* "Makefile.in"
               (("^doc/sed\\.1:.*")
                "doc/sed.1:\n"))
-            #t))
-        (add-before 'patch-source-shebangs 'patch-test-suite
-          (lambda* (#:key inputs #:allow-other-keys)
-            (patch-makefile-SHELL "testsuite/Makefile.tests")
-            (substitute* '("testsuite/bsd.sh"
-                           "testsuite/bug-regex9.c")
-              (("/bin/sh")
-               (which "sh")))
             #t)))))
+   (native-inputs
+    `(("perl" ,perl)))                            ;for tests
    (description
     "Sed is a non-interactive, text stream editor.  It receives a text
 input from a file or from standard input and it then applies a series of text
@@ -168,20 +164,20 @@ implementation offers several extensions over the standard utility.")
 (define-public tar
   (package
    (name "tar")
-   (version "1.29")
+   (version "1.30")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/tar/tar-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "097hx7sbzp8qirl4m930lw84kn0wmxhmq7v1qpra3mrg0b8cyba0"))
-            (patches (search-patches "tar-CVE-2016-6321.patch"
-                                     "tar-skip-unreliable-tests.patch"))))
+              "1lyjyk8z8hdddsxw0ikchrsfg3i0x3fsh7l63a8jgaz1n7dr5gzi"))
+            (patches (search-patches "tar-skip-unreliable-tests.patch"
+                                     "tar-remove-wholesparse-check.patch"))))
    (build-system gnu-build-system)
    ;; Note: test suite requires ~1GiB of disk space.
    (arguments
-    '(#:phases (modify-phases %standard-phases
+    `(#:phases (modify-phases %standard-phases
                  (add-before 'build 'set-shell-file-name
                    (lambda* (#:key inputs #:allow-other-keys)
                      ;; Do not use "/bin/sh" to run programs.
@@ -189,7 +185,27 @@ implementation offers several extensions over the standard utility.")
                        (substitute* "src/system.c"
                          (("/bin/sh")
                           (string-append bash "/bin/sh")))
-                       #t))))))
+                       #t))))
+
+      ;; Work around a cross-compilation bug whereby libgnu.a would provide
+      ;; '__mktime_internal', which conflicts with the one in libc.a.
+      ,@(if (%current-target-system)
+            `(#:configure-flags '("gl_cv_func_working_mktime=yes"))
+            '())
+
+      ;; Test #92 "link mismatch" expects "a/z: Not linked to a/y" but gets
+      ;; "a/y: Not linked to a/z" and fails, presumably due to differences in
+      ;; the order in which 'diff' traverses directories.  That leads to a
+      ;; test failure even though conceptually the test passes.  Skip it.
+      ;; Test 117 and 118 are prone to race conditions too, particularly
+      ;; when cross-compiling, so we skip those as well.  All issues have
+      ;; been fixed upstream in these commits:
+      ;; <https://git.savannah.gnu.org/cgit/tar.git/commit/?id=847a36f>
+      ;; <https://git.savannah.gnu.org/cgit/tar.git/commit/?id=64b43fd>
+      #:make-flags (list (string-append
+                          "TESTSUITEFLAGS= -k '!link mismatch,"
+                          "!directory removed before reading,"
+                          "!explicitly named directory removed before reading'"))))
 
    ;; When cross-compiling, the 'set-shell-file-name' phase needs to be able
    ;; to refer to the target Bash.
@@ -211,16 +227,22 @@ standard utility.")
 (define-public patch
   (package
    (name "patch")
-    (version "2.7.5")
+    (version "2.7.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/patch/patch-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "16d2r9kpivaak948mxzc0bai45mqfw73m113wrkmbffnalv1b5gx"))
+                "1zfqy4rdcy279vwn2z1kbv19dcfw25d2aqy9nzvdkq5bjzd0nqdc"))
               (patches (search-patches "patch-hurd-path-max.patch"))))
    (build-system gnu-build-system)
+   (arguments
+    ;; Work around a cross-compilation bug whereby libpatch.a would provide
+    ;; '__mktime_internal', which conflicts with the one in libc.a.
+    (if (%current-target-system)
+        `(#:configure-flags '("gl_cv_func_working_mktime=yes"))
+        '()))
    (native-inputs `(("ed" ,ed)))
    (synopsis "Apply differences to originals, with optional backups")
    (description
@@ -304,14 +326,14 @@ used to apply commands with arbitrarily long arguments.")
 (define-public coreutils
   (package
    (name "coreutils")
-   (version "8.28")
+   (version "8.29")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/coreutils/coreutils-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0r8c1bgm68kl70j1lgd0rv12iykw6143k4m9a56xip9rc2hv25qi"))))
+              "0plm1zs9il6bb5mk881qvbghq4glc8ybbgakk2lfzb0w64fgml4j"))))
    (build-system gnu-build-system)
    (inputs `(("acl"  ,acl)                        ; TODO: add SELinux
              ("gmp"  ,gmp)                        ;bignums in 'expr', yay!
@@ -378,13 +400,17 @@ functionality beyond that which is outlined in the POSIX standard.")
             (sha256
              (base32
               "12f5zzyq2w56g95nni65hc0g5p7154033y2f3qmjvd016szn5qnn"))
-            (patches (search-patches "make-impure-dirs.patch"))))
+            (patches (search-patches "make-impure-dirs.patch"
+                                     "make-glibc-compat.patch"))))
    (build-system gnu-build-system)
    (native-inputs `(("pkg-config" ,pkg-config)))  ; to detect Guile
    (inputs `(("guile" ,guile-2.0)))
    (outputs '("out" "debug"))
    (arguments
-    '(#:phases
+    '(;; Work around faulty glob detection with glibc 2.27.  See
+      ;; <https://lists.nongnu.org/archive/html/bug-make/2017-11/msg00027.html>.
+      #:configure-flags '("make_cv_sys_gnu_glob=yes")
+      #:phases
       (modify-phases %standard-phases
         (add-before 'build 'set-default-shell
           (lambda* (#:key inputs #:allow-other-keys)
@@ -393,7 +419,8 @@ functionality beyond that which is outlined in the POSIX standard.")
               (substitute* "job.c"
                 (("default_shell =.*$")
                  (format #f "default_shell = \"~a/bin/sh\";\n"
-                         bash)))))))))
+                         bash)))
+              #t))))))
    (synopsis "Remake files automatically")
    (description
     "Make is a program that is used to control the production of
@@ -408,16 +435,15 @@ change.  GNU make offers many powerful extensions over the standard utility.")
 (define-public binutils
   (package
    (name "binutils")
-   (version "2.28.1")
+   (version "2.30")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/binutils/binutils-"
                                 version ".tar.bz2"))
             (sha256
              (base32
-              "1sj234nd05cdgga1r36zalvvdkvpfbr12g5mir2n8i1dwsdrj939"))
-            (patches (search-patches "binutils-ld-new-dtags.patch"
-                                     "binutils-loongson-workaround.patch"))))
+              "028cklfqaab24glva1ks2aqa1zxa6w6xmc8q34zs1sb7h22dxspg"))
+            (patches (search-patches "binutils-loongson-workaround.patch"))))
    (build-system gnu-build-system)
 
    ;; TODO: Add dependency on zlib + those for Gold.
@@ -426,6 +452,12 @@ change.  GNU make offers many powerful extensions over the standard utility.")
                           ;; on GCC when bootstrapping.
                           "LDFLAGS=-static-libgcc"
 
+                          ;; Turn on --enable-new-dtags by default to make the
+                          ;; linker set RUNPATH instead of RPATH on binaries.
+                          ;; This is important because RUNPATH can be overriden
+                          ;; using LD_LIBRARY_PATH at runtime.
+                          "--enable-new-dtags"
+
                           ;; Don't search under /usr/lib & co.
                           "--with-lib-path=/no-ld-lib-path"
 
@@ -512,7 +544,8 @@ wrapper for the cross-linker for that target, called 'TARGET-ld'."
                                                              target "-ld")
                                               "/bin/ld"))))
                        (chmod ld #o555)
-                       (compile-file ld #:output-file go))))))
+                       (compile-file ld #:output-file go)
+                       #t)))))
     (synopsis "The linker wrapper")
     (description
      "The linker wrapper (or 'ld-wrapper') wraps the linker to add any
@@ -526,38 +559,31 @@ store.")
 (define-public glibc/linux
   (package
    (name "glibc")
-   ;; Glibc has stable branches that continuously pick fixes for each supported
-   ;; release.  Unfortunately they do not do point-releases, so we are stuck
-   ;; with copying almost all patches, or use a snapshot of the release branch.
-   ;;
-   ;; This version number corresponds to the output of `git describe` and the
-   ;; archive can be generated by checking out the commit ID and running:
-   ;;  git archive --prefix=$(git describe)/ HEAD | xz > $(git describe).tar.xz
-   ;; See <https://bugs.gnu.org/29406> for details.
-   ;;
    ;; Note: Always use a dot after the minor version since various places rely
    ;; on "version-major+minor" to determine where locales are found.
-   (version "2.26.105-g0890d5379c")
-   (replacement glibc-2.26-patched)
+   (version "2.27")
    (source (origin
             (method url-fetch)
-            (uri (string-append "https://alpha.gnu.org/gnu/guix/mirror/"
-                                "glibc-" (version-major+minor version) "-"
-                                (caddr (string-split version #\.)) ".tar.xz"))
+            (uri (string-append "mirror://gnu/glibc/glibc-" version ".tar.xz"))
             (sha256
              (base32
-              "1jck0c1i248sn02rvsfjykk77qncma34bjq89dyy2irwm50d7s3g"))
+              "0wpwq7gsm7sd6ysidv0z575ckqdg13cr2njyfgrbgh4f65adwwji"))
             (snippet
              ;; Disable 'ldconfig' and /etc/ld.so.cache.  The latter is
              ;; required on LFS distros to avoid loading the distro's libc.so
              ;; instead of ours.
-             '(substitute* "sysdeps/unix/sysv/linux/configure"
-                (("use_ldconfig=yes")
-                 "use_ldconfig=no")))
+             '(begin
+                (substitute* "sysdeps/unix/sysv/linux/configure"
+                  (("use_ldconfig=yes")
+                   "use_ldconfig=no"))
+                #t))
             (modules '((guix build utils)))
             (patches (search-patches "glibc-ldd-x86_64.patch"
+                                     "glibc-2.27-git-fixes.patch"
+                                     "glibc-hidden-visibility-ldconfig.patch"
                                      "glibc-versioned-locpath.patch"
-                                     "glibc-o-largefile.patch"))))
+                                     "glibc-allow-kernel-2.6.32.patch"
+                                     "glibc-reinstate-prlimit64-fallback.patch"))))
    (build-system gnu-build-system)
 
    ;; Glibc's <limits.h> refers to <linux/limit.h>, for instance, so glibc
@@ -582,8 +608,7 @@ store.")
                  (guix build gnu-build-system))
 
       #:configure-flags
-      (list "--enable-add-ons"
-            "--sysconfdir=/etc"
+      (list "--sysconfdir=/etc"
 
             ;; Installing a locale archive with all the locales is to
             ;; expensive (~100 MiB), so we rely on users to install the
@@ -618,10 +643,7 @@ store.")
             ;; Use our Bash instead of /bin/sh.
             (string-append "BASH_SHELL="
                            (assoc-ref %build-inputs "bash")
-                           "/bin/bash")
-
-            ;; XXX: Work around "undefined reference to `__stack_chk_guard'".
-            "libc_cv_ssp=no" "libc_cv_ssp_strong=no")
+                           "/bin/bash"))
 
       #:tests? #f                                 ; XXX
       #:phases (modify-phases %standard-phases
@@ -685,7 +707,9 @@ store.")
                          ;; "bilingual" eval/exec magic at the top of the file.
                          "")
                         (("exec @PERL@")
-                         "exec perl")))))
+                         "exec perl"))
+
+                      #t)))
 
                  (add-after 'install 'move-static-libs
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -732,6 +756,7 @@ store.")
    ;; install the message catalogs, with 'msgfmt'.
    (native-inputs `(("texinfo" ,texinfo)
                     ("perl" ,perl)
+                    ("bison" ,bison)
                     ("gettext" ,gettext-minimal)))
 
    (native-search-paths
@@ -799,14 +824,13 @@ with the Linux kernel.")
                ;; Force mach/hurd/libpthread subdirs to build first in order to avoid
                ;; linking errors.
                ;; See <https://lists.gnu.org/archive/html/bug-hurd/2016-11/msg00045.html>
-               (let ((-j (list "-j" (number->string (parallel-job-count)))))
-                 (let-syntax ((make (syntax-rules ()
-                                      ((_ target)
-                                       (zero? (apply system* "make" target -j))))))
-                   (and (make "mach/subdir_lib")
-                        (make "hurd/subdir_lib")
-                        (make "libpthread/subdir_lib")
-                        (zero? (apply system* "make" -j)))))))))
+               (let ((flags (list "-j" (number->string (parallel-job-count)))))
+                 (define (make target)
+                   (apply invoke "make" target flags))
+                 (make "mach/subdir_lib")
+                 (make "hurd/subdir_lib")
+                 (make "libpthread/subdir_lib")
+                 (apply invoke "make" flags))))))
         ((#:configure-flags original-configure-flags)
         `(append (list "--host=i586-pc-gnu"
 
@@ -841,13 +865,25 @@ GLIBC/HURD for a Hurd host"
 ;; Below are old libc versions, which we use mostly to build locale data in
 ;; the old format (which the new libc cannot cope with.)
 
-(define glibc-2.26-patched
+(define-public glibc-2.26
   (package
     (inherit glibc)
+    ;; This version number corresponds to the output of `git describe` and the
+    ;; archive can be generated by checking out the commit ID and running:
+    ;;  git archive --prefix=$(git describe)/ HEAD | xz > $(git describe).tar.xz
+    ;; See <https://bugs.gnu.org/29406> for why this was necessary.
+    (version "2.26.105-g0890d5379c")
     (source (origin
               (inherit (package-source glibc))
-              (patches (cons (search-patch "glibc-allow-kernel-2.6.32.patch")
-                             (origin-patches (package-source glibc))))))))
+              (uri (string-append "https://alpha.gnu.org/gnu/guix/mirror/"
+                                  "glibc-" (version-major+minor version) "-"
+                                  (caddr (string-split version #\.)) ".tar.xz"))
+              (sha256
+               (base32
+                "1jck0c1i248sn02rvsfjykk77qncma34bjq89dyy2irwm50d7s3g"))
+              (patches (search-patches "glibc-ldd-x86_64.patch"
+                                       "glibc-versioned-locpath.patch"
+                                       "glibc-allow-kernel-2.6.32.patch"))))))
 
 (define-public glibc-2.25
   (package
@@ -862,7 +898,6 @@ GLIBC/HURD for a Hurd host"
                 "1813dzkgw6v8q8q1m4v96yfis7vjqc9pslqib6j9mrwh6fxxjyq6"))
               (patches (search-patches "glibc-ldd-x86_64.patch"
                                        "glibc-versioned-locpath.patch"
-                                       "glibc-o-largefile.patch"
                                        "glibc-vectorized-strcspn-guards.patch"
                                        "glibc-CVE-2017-1000366-pt1.patch"
                                        "glibc-CVE-2017-1000366-pt2.patch"
@@ -881,7 +916,6 @@ GLIBC/HURD for a Hurd host"
                 "1lxmprg9gm73gvafxd503x70z32phwjzcy74i0adfi6ixzla7m4r"))
               (patches (search-patches "glibc-ldd-x86_64.patch"
                                        "glibc-versioned-locpath.patch"
-                                       "glibc-o-largefile.patch"
                                        "glibc-vectorized-strcspn-guards.patch"
                                        "glibc-CVE-2015-5180.patch"
                                        "glibc-CVE-2017-1000366-pt1.patch"
@@ -901,7 +935,6 @@ GLIBC/HURD for a Hurd host"
                 "1s8krs3y2n6pzav7ic59dz41alqalphv7vww4138ag30wh0fpvwl"))
               (patches (search-patches "glibc-ldd-x86_64.patch"
                                        "glibc-versioned-locpath.patch"
-                                       "glibc-o-largefile.patch"
                                        "glibc-vectorized-strcspn-guards.patch"
                                        "glibc-CVE-2015-5180.patch"
                                        "glibc-CVE-2016-3075.patch"
@@ -923,6 +956,7 @@ GLIBC/HURD for a Hurd host"
                (base32
                 "0j49682pm2nh4qbdw35bas82p1pgfnz4d2l7iwfyzvrvj0318wzb"))
               (patches (search-patches "glibc-ldd-x86_64.patch"
+                                       "glibc-o-largefile.patch"
                                        "glibc-vectorized-strcspn-guards.patch"
                                        "glibc-CVE-2015-5180.patch"
                                        "glibc-CVE-2015-7547.patch"
@@ -965,8 +999,8 @@ the 'share/locale' sub-directory of this package.")
           `(modify-phases ,phases
              (replace 'build
                (lambda _
-                 (zero? (system* "make" "localedata/install-locales"
-                                 "-j" (number->string (parallel-job-count))))))
+                 (invoke "make" "localedata/install-locales"
+                         "-j" (number->string (parallel-job-count)))))
              (delete 'install)
              (delete 'move-static-libs)))
          ((#:configure-flags flags)
@@ -987,8 +1021,7 @@ the 'share/locale' sub-directory of this package.")
     (arguments
      `(#:modules ((guix build utils))
        #:builder (begin
-                   (use-modules (srfi srfi-1)
-                                (guix build utils))
+                   (use-modules (guix build utils))
 
                    (let* ((libc      (assoc-ref %build-inputs "glibc"))
                           (gzip      (assoc-ref %build-inputs "gzip"))
@@ -999,27 +1032,27 @@ the 'share/locale' sub-directory of this package.")
                      (setenv "PATH" (string-append libc "/bin:" gzip "/bin"))
 
                      (mkdir-p localedir)
-                     (every (lambda (locale)
-                              (define file
-                                ;; Use the "normalized codeset" by
-                                ;; default--e.g., "en_US.utf8".
-                                (string-append localedir "/" locale ".utf8"))
-
-                              (and (zero? (system* "localedef" "--no-archive"
-                                                   "--prefix" localedir
-                                                   "-i" locale
-                                                   "-f" "UTF-8" file))
-                                   (begin
-                                     ;; For backward compatibility with Guix
-                                     ;; <= 0.8.3, add "xx_YY.UTF-8".
-                                     (symlink (string-append locale ".utf8")
-                                              (string-append localedir "/"
-                                                             locale ".UTF-8"))
-                                     #t)))
-
-                            ;; These are the locales commonly used for
-                            ;; tests---e.g., in Guile's i18n tests.
-                            '("de_DE" "el_GR" "en_US" "fr_FR" "tr_TR"))))))
+                     (for-each (lambda (locale)
+                                 (define file
+                                   ;; Use the "normalized codeset" by
+                                   ;; default--e.g., "en_US.utf8".
+                                   (string-append localedir "/" locale ".utf8"))
+
+                                 (invoke "localedef" "--no-archive"
+                                         "--prefix" localedir
+                                         "-i" locale
+                                         "-f" "UTF-8" file)
+
+                                 ;; For backward compatibility with Guix
+                                 ;; <= 0.8.3, add "xx_YY.UTF-8".
+                                 (symlink (string-append locale ".utf8")
+                                          (string-append localedir "/"
+                                                         locale ".UTF-8")))
+
+                               ;; These are the locales commonly used for
+                               ;; tests---e.g., in Guile's i18n tests.
+                               '("de_DE" "el_GR" "en_US" "fr_FR" "tr_TR"))
+                     #t))))
     (inputs `(("glibc" ,glibc)
               ("gzip" ,gzip)))
     (synopsis "Small sample of UTF-8 locales")
@@ -1063,35 +1096,31 @@ command.")
                "--host=i586-pc-gnu"
                "--enable-obsolete-rpc"))
        ((#:phases _)
-        '(alist-replace
-          'install
-          (lambda* (#:key outputs #:allow-other-keys)
-            (and (zero? (system* "make" "install-headers"))
-
-                 ;; Make an empty stubs.h to work around not being able to
-                 ;; produce a valid stubs.h and causing the build to fail. See
-                 ;; <http://lists.gnu.org/archive/html/guix-devel/2014-04/msg00233.html>.
-                 (let ((out (assoc-ref outputs "out")))
-                   (close-port
-                    (open-output-file
-                     (string-append out "/include/gnu/stubs.h"))))))
-
-          ;; Nothing to build.
-          (alist-delete
-           'build
-
-           (alist-cons-before
-            'configure 'pre-configure
-            (lambda _
-              ;; Use the right 'pwd'.
-              (substitute* "configure"
-                (("/bin/pwd") "pwd")))
-            %standard-phases))))))))
+        '(modify-phases %standard-phases
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (invoke "make" "install-headers")
+
+               ;; Make an empty stubs.h to work around not being able to
+               ;; produce a valid stubs.h and causing the build to fail. See
+               ;; <http://lists.gnu.org/archive/html/guix-devel/2014-04/msg00233.html>.
+               (let ((out (assoc-ref outputs "out")))
+                 (close-port
+                  (open-output-file
+                   (string-append out "/include/gnu/stubs.h"))))
+               #t))
+           (delete 'build)              ; nothing to build
+           (add-before 'configure 'patch-configure-script
+             (lambda _
+               ;; Use the right 'pwd'.
+               (substitute* "configure"
+                 (("/bin/pwd") "pwd"))
+               #t))))))))
 
 (define-public tzdata
   (package
     (name "tzdata")
-    (version "2018c")
+    (version "2018d")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -1099,7 +1128,7 @@ command.")
                    version ".tar.gz"))
              (sha256
               (base32
-               "1xik57rdi7kqa0wb5jbz7vyjyxpr88lw1g4kscj0ylpgnzjc6998"))))
+               "0m6020dnk9r40z7k36jp13fa06xip3hn0fdx3nly66jzxgffs1ji"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f
@@ -1123,8 +1152,8 @@ command.")
        (modify-phases %standard-phases
          (replace 'unpack
            (lambda* (#:key source inputs #:allow-other-keys)
-             (and (zero? (system* "tar" "xvf" source))
-                  (zero? (system* "tar" "xvf" (assoc-ref inputs "tzcode"))))))
+             (invoke "tar" "xvf" source)
+             (invoke "tar" "xvf" (assoc-ref inputs "tzcode"))))
          (add-after 'install 'post-install
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Move data in the right place.
@@ -1139,7 +1168,8 @@ command.")
                (copy-recursively (string-append out "/share/zoneinfo-leaps")
                                  (string-append out "/share/zoneinfo/right"))
                (delete-file-recursively
-                (string-append out "/share/zoneinfo-leaps")))))
+                (string-append out "/share/zoneinfo-leaps"))
+               #t)))
          (delete 'configure))))
     (inputs `(("tzcode" ,(origin
                           (method url-fetch)
@@ -1148,7 +1178,7 @@ command.")
                                 version ".tar.gz"))
                           (sha256
                            (base32
-                            "0rg6s1vlgwd8sjhla55hx2h5m2xbx0shm347pkbg4vsaz707zyii"))))))
+                            "1nd882yhsazmcfqmcqyfig3axycryl30gmizgqhqsx5dpa2lxr3x"))))))
     (home-page "https://www.iana.org/time-zones")
     (synopsis "Database of current and historical time zones")
     (description "The Time Zone Database (often called tz or zoneinfo)
@@ -1164,63 +1194,7 @@ and daylight-saving rules.")
 ;;; will typically be obsolete and should never be referred to by a built
 ;;; package.
 (define-public tzdata-for-tests
-  (hidden-package (package (inherit tzdata)
-    (version "2017c")
-    (source
-      (origin
-        (method url-fetch)
-        (uri (string-append "https://www.iana.org/time-zones/repository"
-                            "/releases/tzdata" version ".tar.gz"))
-        (sha256
-         (base32
-          "02yrrfj0p7ar885ja41ylijzbr8wc6kz6kzlw8c670i9m693ym6n"))))
-    (arguments
-     '(#:tests? #f
-       #:make-flags (let ((out (assoc-ref %outputs "out"))
-                          (tmp (getenv "TMPDIR")))
-                      (list (string-append "TOPDIR=" out)
-                            (string-append "TZDIR=" out "/share/zoneinfo")
-
-                            ;; Discard zic, dump, and tzselect, already
-                            ;; provided by glibc.
-                            (string-append "ETCDIR=" tmp "/etc")
-
-                            ;; Likewise for the C library routines.
-                            (string-append "LIBDIR=" tmp "/lib")
-                            (string-append "MANDIR=" tmp "/man")
-
-                            "AWK=awk"
-                            "CC=gcc"))
-       #:modules ((guix build utils)
-                  (guix build gnu-build-system)
-                  (srfi srfi-1))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'unpack
-           (lambda* (#:key source inputs #:allow-other-keys)
-             (and (zero? (system* "tar" "xvf" source))
-                  (zero? (system* "tar" "xvf" (assoc-ref inputs "tzcode"))))))
-         (add-after 'install 'post-install
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; Move data in the right place.
-             (let ((out (assoc-ref outputs "out")))
-               (symlink (string-append out "/share/zoneinfo")
-                        (string-append out "/share/zoneinfo/posix"))
-               (delete-file-recursively
-                (string-append out "/share/zoneinfo-posix"))
-               (copy-recursively (string-append out "/share/zoneinfo-leaps")
-                                 (string-append out "/share/zoneinfo/right"))
-               (delete-file-recursively
-                (string-append out "/share/zoneinfo-leaps")))))
-         (delete 'configure))))
-    (inputs `(("tzcode" ,(origin
-                          (method url-fetch)
-                          (uri (string-append
-                                "http://www.iana.org/time-zones/repository/releases/tzcode"
-                                version ".tar.gz"))
-                          (sha256
-                           (base32
-                            "1dvrq0b2hz7cjqdyd7x21wpy4qcng3rvysr61ij0c2g64fyb9s41")))))))))
+  (hidden-package tzdata))
 
 (define-public libiconv
   (package
@@ -1237,9 +1211,11 @@ and daylight-saving rules.")
               (snippet
                ;; Work around "declared gets" error on glibc systems (fixed by
                ;; Gnulib commit 66712c23388e93e5c518ebc8515140fa0c807348.)
-               '(substitute* "srclib/stdio.in.h"
-                  (("^#undef gets") "")
-                  (("^_GL_WARN_ON_USE \\(gets.*") "")))))
+               '(begin
+                  (substitute* "srclib/stdio.in.h"
+                    (("^#undef gets") "")
+                    (("^_GL_WARN_ON_USE \\(gets.*") ""))
+                  #t))))
     (build-system gnu-build-system)
     (synopsis "Character set conversion library")
     (description
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index b98ffe1c12..64f7782f58 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -72,7 +72,14 @@
    (9 "0g1l56kvw61rpw7dqa9fcl9llkl693h73g631hrhxlm030ddssqb")
    (10 "01lfhrkdsdkdz8ypzapr614ras23x7ckjnr60aa5bzkaqprccrc4")
    (11 "038p7mhnq9m65g505hi3827jkf9f35nd1cy00w8mwafpyxp44mnx")
-   (12 "0gh6lbb1rwpk44pvbamm6vzdfi50xnwkqd9v7s8cjwk3pz973hps")))
+   (12 "0gh6lbb1rwpk44pvbamm6vzdfi50xnwkqd9v7s8cjwk3pz973hps")
+   (13 "1djkx0w9v62q78gz3jsvamj1jq53i6hbfrfhhsw86ihwpjnfy98v")
+   (14 "0z5ikcq9zyxw79d0z36r5p0mspnb5piavbv03jmlan1wnknmrxx7")
+   (15 "09n307fi1j257abhm295k6ksmnzw47ka2zhnr0i5lbdnpvn04xnk")
+   (16 "1cgi1y6mifm8hsgv4avj5ih76535js3qba1sqwbfvp7si76927sh")
+   (17 "0w6jpj2giakji1ir83rpkx1y7n7xqppah3j748m6dm38hywr0gvp")
+   (18 "1k58h4wxbsg7r4rwhrvzx5hfbapba2nxjysbhh6qp6ki5ys99i2v")
+   (19 "07n1i5610lbs672x1s8g82qn3qfj06s0ip3z80sri0g8vxp0s5r7")))
 
 (define (download-patches store count)
   "Download COUNT Bash patches into store.  Return a list of
@@ -93,9 +100,7 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
           1))
 
 (define-public bash
-  (let* ((cppflags (string-join '("-DSYS_BASHRC='\"/etc/bashrc\"'"
-                                  "-DSYS_BASH_LOGOUT='\"/etc/bash_logout\"'"
-                                  "-DDEFAULT_PATH_VALUE='\"/no-such-path\"'"
+  (let* ((cppflags (string-join '("-DDEFAULT_PATH_VALUE='\"/no-such-path\"'"
                                   "-DSTANDARD_UTILS_PATH='\"/no-such-path\"'"
                                   "-DNON_INTERACTIVE_LOGIN_SHELLS"
                                   "-DSSH_SOURCE_BASHRC")
@@ -160,7 +165,8 @@ number/base32-hash tuples, directly usable in the 'patch-series' form."
               ;; Add a `sh' -> `bash' link.
               (let ((out (assoc-ref outputs "out")))
                 (with-directory-excursion (string-append out "/bin")
-                  (symlink "bash" "sh")))))
+                  (symlink "bash" "sh")
+                  #t))))
 
           (add-after 'install 'move-development-files
             (lambda* (#:key outputs #:allow-other-keys)
diff --git a/gnu/packages/bdw-gc.scm b/gnu/packages/bdw-gc.scm
index f9fda96bb2..eba30217da 100644
--- a/gnu/packages/bdw-gc.scm
+++ b/gnu/packages/bdw-gc.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2016, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -30,14 +30,14 @@
 (define-public libgc
   (package
    (name "libgc")
-   (version "7.6.0")
+   (version "7.6.4")
    (source (origin
             (method url-fetch)
             (uri (string-append "http://www.hboehm.info/gc/gc_source/gc-"
                                 version ".tar.gz"))
             (sha256
              (base32
-              "143x7g0d0k6250ai6m2x3l4y352mzizi4wbgrmahxscv2aqjhjm1"))))
+              "076dzsqqyxd3nlzs0z277vvhqjp8nv5dqi763s0m90zr6ljiyk5r"))))
    (build-system gnu-build-system)
    (arguments
     `(#:configure-flags
@@ -91,7 +91,7 @@ C or C++ programs, though that is not its primary goal.")
 (define-public libatomic-ops
   (package
     (name "libatomic-ops")
-    (version "7.4.8")
+    (version "7.6.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -99,13 +99,13 @@ C or C++ programs, though that is not its primary goal.")
                     version "/libatomic_ops-" version ".tar.gz"))
               (sha256
                (base32
-                "0sj3plzpbqgxrqpjq3w2zi3zxxqqps71ncdwk5s1k30i9d9da1f4"))))
+                "0knxncsjhbknlyy6lx7ycxhpzfk3sykhvicgxyp0rmsxd1d3v0jv"))))
     (build-system gnu-build-system)
     (outputs '("out" "debug"))
     (synopsis "Accessing hardware atomic memory update operations")
     (description
      "This C library provides semi-portable access to hardware-provided atomic
-memory update operations on a number architectures.  These might allow you to
+memory update operations on a number of architectures.  These might allow you to
 write code that does more interesting things in signal handlers, write
 lock-free code, experiment with thread programming paradigms, etc.")
     (home-page "https://github.com/ivmai/libatomic_ops/")
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 3168291f48..abea913723 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -295,9 +295,10 @@ BAM files.")
                (base32
                 "1vgw2mwngq20c530zim52zvgmw1lci8rzl33pvh44xqk3xlzvjsa"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Delete bundled htslib.
-               '(delete-file-recursively "htslib-1.8"))))
+              (snippet '(begin
+                          ;; Delete bundled htslib.
+                          (delete-file-recursively "htslib-1.8")
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -1194,10 +1195,12 @@ errors at the end of reads.")
                 "0hwa5r9qbglppb7sz5z79rlmmddr3n51n468jb3wh8rwjgn3yr90"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile"
-                  ;; replace BUILD_HOST and BUILD_TIME for deterministic build
-                  (("-DBUILD_HOST=.*") "-DBUILD_HOST=\"\\\"guix\\\"\"")
-                  (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\"")))))
+               '(begin
+                  (substitute* "Makefile"
+                    ;; replace BUILD_HOST and BUILD_TIME for deterministic build
+                    (("-DBUILD_HOST=.*") "-DBUILD_HOST=\"\\\"guix\\\"\"")
+                    (("-DBUILD_TIME=.*") "-DBUILD_TIME=\"\\\"0\\\"\""))
+                  #t))))
     (build-system gnu-build-system)
     (inputs
      `(("perl" ,perl)
@@ -1391,10 +1394,12 @@ well as many of the command line options.")
                 "15z2w3bvnc0n4qmb9bd6d8ylc2h2nj883x2w9iixf4x3vki9b22i"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "setup.py"
-                  ;; remove dependency on outdated "distribute" module
-                  (("^from distribute_setup import use_setuptools") "")
-                  (("^use_setuptools\\(\\)") "")))))
+               '(begin
+                  (substitute* "setup.py"
+                    ;; remove dependency on outdated "distribute" module
+                    (("^from distribute_setup import use_setuptools") "")
+                    (("^use_setuptools\\(\\)") ""))
+                  #t))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ;tests fail because test data are not included
@@ -1426,9 +1431,11 @@ multiple sequence alignments.")
                (base32
                 "0dzap2axin9cbbl0d825w294bpn00zagfm1sigamm4v2pm5bj9lp"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Drop bundled htslib. TODO: Also remove samtools and bcftools.
-               '(delete-file-recursively "htslib"))))
+              (snippet '(begin
+                          ;; Drop bundled htslib. TODO: Also remove samtools
+                          ;; and bcftools.
+                          (delete-file-recursively "htslib")
+                          #t))))
     (build-system python-build-system)
     (arguments
      `(#:modules ((ice-9 ftw)
@@ -1800,9 +1807,10 @@ time.")
               ;; for download from Sourceforge, but it has not been merged.
               (patches (search-patches "crossmap-allow-system-pysam.patch"))
               (modules '((guix build utils)))
-              ;; remove bundled copy of pysam
-              (snippet
-               '(delete-file-recursively "lib/pysam"))))
+              (snippet '(begin
+                          ;; remove bundled copy of pysam
+                          (delete-file-recursively "lib/pysam")
+                          #t))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2
@@ -1911,7 +1919,8 @@ files.")
               (snippet
                '(begin
                   ;; Delete bundled libBigWig sources
-                  (delete-file-recursively "libBigWig")))))
+                  (delete-file-recursively "libBigWig")
+                  #t))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -3870,9 +3879,11 @@ sequences).")
                 "00fx14vpmgsijwxd1xql3if934l82v8ckqgjjyyhnr36qb9qrskv"))
               (modules '((guix build utils)))
               (snippet
-               ;; Delete bundled kseq.
-               ;; TODO: Also delete bundled murmurhash and open bloom filter.
-               '(delete-file "src/mash/kseq.h"))))
+               '(begin
+                  ;; Delete bundled kseq.
+                  ;; TODO: Also delete bundled murmurhash and open bloom filter.
+                  (delete-file "src/mash/kseq.h")
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; No tests.
@@ -4052,18 +4063,19 @@ assembled metagenomic sequence.")
                (base32
                 "1z3x0vd8ma7pdrnywj7i3kgwl89sdkwrrn62zl7r5calqaq2hyip"))
               (modules '((guix build utils)))
-              (snippet
-               '(substitute* "setup.py"
-                  ;; Use setuptools, or else the executables are not
-                  ;; installed.
-                  (("distutils.core") "setuptools")
-                  ;; use "gcc" instead of "cc" for compilation
-                  (("^defines")
-                   "cc.set_executables(
+              (snippet '(begin
+                          (substitute* "setup.py"
+                            ;; Use setuptools, or else the executables are not
+                            ;; installed.
+                            (("distutils.core") "setuptools")
+                            ;; use "gcc" instead of "cc" for compilation
+                            (("^defines")
+                             "cc.set_executables(
 compiler='gcc',
 compiler_so='gcc',
 linker_exe='gcc',
-linker_so='gcc -shared'); defines")))))
+linker_so='gcc -shared'); defines"))
+                          #t))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2 ; only Python 2 is supported
@@ -4864,7 +4876,8 @@ BAM and Wiggle files in both transcript-coordinate and genomic-coordinate.")
              (("^from distribute_setup import use_setuptools") "")
              (("^use_setuptools\\(\\)") "")
              ;; do not use bundled copy of pysam
-             (("^have_pysam = False") "have_pysam = True"))))))
+             (("^have_pysam = False") "have_pysam = True"))
+           #t))))
     (build-system python-build-system)
     (arguments `(#:python ,python-2))
     (inputs
@@ -4915,9 +4928,9 @@ distribution, coverage uniformity, strand specificity, etc.")
                        "Data2DB"
                        "PCL2Bin")))
            (modify-phases %standard-phases
-             (add-before 'configure 'bootstrap
+             (replace 'bootstrap
                (lambda _
-                 (zero? (system* "bash" "gen_auto"))))
+                 (invoke "bash" "gen_auto")))
              (add-after 'build 'build-additional-tools
                (lambda* (#:key make-flags #:allow-other-keys)
                  (every (lambda (dir)
@@ -5420,9 +5433,10 @@ structures, classes for genomic regions, mapped sequencing reads, etc.")
               (sha256
                (base32 "08r684l50pnxjpvmhzjgqq56yv9rfw90k8vx0nsrnrzk8mf9hsdq"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Remove bundled samtools.
-               '(delete-file-recursively "samtools"))))
+              (snippet '(begin
+                          ;; Remove bundled samtools.
+                          (delete-file-recursively "samtools")
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;no "check" target
@@ -5627,10 +5641,11 @@ writing files into the .sra format.")
                (out  (assoc-ref %outputs "out"))
                (doc  (assoc-ref %outputs "doc")))
            (setenv "PATH" (string-append tar "/bin:" bzip "/bin"))
-           (system* "tar" "xvf" (assoc-ref %build-inputs "source"))
+           (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
            (chdir (string-append "seqan-library-" ,version))
            (copy-recursively "include" (string-append out "/include"))
-           (copy-recursively "share"  (string-append doc "/share"))))))
+           (copy-recursively "share"  (string-append doc "/share"))
+           #t))))
     (native-inputs
      `(("source" ,source)
        ("tar" ,tar)
@@ -11043,11 +11058,6 @@ droplet sequencing.  It has been particularly tailored for Drop-seq.")
          (sha256
           (base32
            "0g38g8s3npr0gjm9fahlbhiskyfws9l5i0x1ml3rakzj7az5l9c9"))))
-      (arguments
-       `(#:phases
-         (modify-phases  %standard-phases
-           (add-after 'unpack 'bootstrap
-             (lambda _ (invoke "autoreconf" "-vif"))))))
       (native-inputs
        `(("autoconf" ,autoconf)
          ("automake" ,automake)
@@ -11961,7 +11971,8 @@ bytes of memory space, where n is the length of the string.")
                     (snippet
                      '(begin (delete-file-recursively "include/spdlog")
                              (for-each delete-file '("include/xxhash.h"
-                                                     "src/xxhash.c"))))))
+                                                     "src/xxhash.c"))
+                             #t))))
        ("libdivsufsort" ,libdivsufsort)
        ("libgff" ,libgff)
        ("tbb" ,tbb)
@@ -12686,7 +12697,8 @@ contains
        (snippet
         '(begin
            (for-each delete-file (find-files "jar/lib" "\\.jar$"))
-           (delete-file-recursively "3rdParty")))))
+           (delete-file-recursively "3rdParty")
+           #t))))
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f                      ; test data are not included
diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index cdfbda6740..d00f96de64 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -1,11 +1,13 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -41,7 +43,7 @@
 (define-public boost
   (package
     (name "boost")
-    (version "1.64.0")
+    (version "1.66.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -50,7 +52,8 @@
                     ".tar.bz2"))
               (sha256
                (base32
-                "0cikd35xfkpg9nnl76yqqnqxnf3hyfjjww8xjd4akflprsm5rk3v"))))
+                "1aaw48cmimsskzgiclwn0iifp62a5iw9cbqrhfari876af1828ap"))
+              (patches (search-patches "boost-fix-icu-build.patch"))))
     (build-system gnu-build-system)
     (inputs `(("icu4c" ,icu4c)
               ("zlib" ,zlib)))
@@ -65,22 +68,14 @@
 
              ;; Set the RUNPATH to $libdir so that the libs find each other.
              (string-append "linkflags=-Wl,-rpath="
-                            (assoc-ref %outputs "out") "/lib")
-
-             ;; Boost's 'context' library is not yet supported on mips64, so
-             ;; we disable it.  The 'coroutine' library depends on 'context',
-             ;; so we disable that too.
-             ,@(if (string-prefix? "mips64" (or (%current-target-system)
-                                                (%current-system)))
-                   '("--without-context"
-                     "--without-coroutine" "--without-coroutine2")
-                   '()))
+                            (assoc-ref %outputs "out") "/lib"))
        #:phases
        (modify-phases %standard-phases
-         (replace
-             'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
+         (delete 'bootstrap)
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((icu (assoc-ref inputs "icu4c"))
+                   (out (assoc-ref outputs "out")))
                (substitute* '("libs/config/configure"
                               "libs/spirit/classic/phoenix/test/runtest.sh"
                               "tools/build/doc/bjam.qbk"
@@ -92,19 +87,20 @@
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
 
-               (zero? (system* "./bootstrap.sh"
-                               (string-append "--prefix=" out)
-                               "--with-toolset=gcc")))))
-         (replace
-             'build
-           (lambda* (#:key outputs make-flags #:allow-other-keys)
-             (zero? (apply system* "./b2"
-                           (format #f "-j~a" (parallel-job-count))
-                           make-flags))))
-         (replace
-             'install
-           (lambda* (#:key outputs make-flags #:allow-other-keys)
-             (zero? (apply system* "./b2" "install" make-flags)))))))
+               (invoke "./bootstrap.sh"
+                       (string-append "--prefix=" out)
+                       ;; Auto-detection looks for ICU only in traditional
+                       ;; install locations.
+                       (string-append "--with-icu=" icu)
+                       "--with-toolset=gcc"))))
+         (replace 'build
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "./b2"
+                    (format #f "-j~a" (parallel-job-count))
+                    make-flags)))
+         (replace 'install
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "./b2" "install" make-flags))))))
 
     (home-page "https://www.boost.org")
     (synopsis "Peer-reviewed portable C++ source libraries")
@@ -114,20 +110,6 @@ across a broad spectrum of applications.")
     (license (license:x11-style "https://www.boost.org/LICENSE_1_0.txt"
                                 "Some components have other similar licences."))))
 
-(define-public boost-1.66
-  (package
-    (inherit boost)
-    (version "1.66.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "mirror://sourceforge/boost/boost/" version "/boost_"
-                    (string-map (lambda (x) (if (eq? x #\.) #\_ x)) version)
-                    ".tar.bz2"))
-              (sha256
-               (base32
-                "1aaw48cmimsskzgiclwn0iifp62a5iw9cbqrhfari876af1828ap"))))))
-
 (define-public boost-sync
   (let ((commit "c72891d9b90e2ceb466ec859f640cd012b2d8709")
         (version "1.55")
diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm
index b754b1f922..936d6c1a2a 100644
--- a/gnu/packages/bootstrap.scm
+++ b/gnu/packages/bootstrap.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -97,10 +97,10 @@
 (define* (package-from-tarball name source program-to-test description
                                #:key snippet)
   "Return a package that correspond to the extraction of SOURCE.
-PROGRAM-TO-TEST is a program to run after extraction of SOURCE, to
-check whether everything is alright.  If SNIPPET is provided, it is
-evaluated after extracting SOURCE.  SNIPPET should return true if
-successful, or false to signal an error."
+PROGRAM-TO-TEST is a program to run after extraction of SOURCE, to check
+whether everything is alright.  If SNIPPET is provided, it is evaluated after
+extracting SOURCE.  SNIPPET should raise an exception to signal an error; its
+return value is ignored."
   (package
     (name name)
     (version "0")
@@ -117,14 +117,14 @@ successful, or false to signal an error."
 
          (mkdir out)
          (copy-file tarball "binaries.tar.xz")
-         (system* xz "-d" "binaries.tar.xz")
+         (invoke xz "-d" "binaries.tar.xz")
          (let ((builddir (getcwd)))
            (with-directory-excursion out
-             (and (zero? (system* tar "xvf"
-                                  (string-append builddir "/binaries.tar")))
-                  ,@(if snippet (list snippet) '())
-                  (zero? (system* (string-append "bin/" ,program-to-test)
-                                  "--version"))))))))
+             (invoke tar "xvf"
+                     (string-append builddir "/binaries.tar"))
+             ,@(if snippet (list snippet) '())
+             (invoke (string-append "bin/" ,program-to-test)
+                     "--version"))))))
     (inputs
      `(("tar" ,(search-bootstrap-binary "tar" (%current-system)))
        ("xz"  ,(search-bootstrap-binary "xz" (%current-system)))
@@ -389,8 +389,7 @@ $out/bin/guile --version~%"
                            (if (not (elf-file? "bin/egrep"))
                              (substitute* '("bin/egrep" "bin/fgrep")
                                (("^exec grep") (string-append (getcwd) "/bin/grep"))))
-                           (chmod "bin" #o555)
-                           #t)))
+                           (chmod "bin" #o555))))
 
 (define %bootstrap-binutils
   (package-from-tarball "binutils-bootstrap"
@@ -445,18 +444,20 @@ $out/bin/guile --version~%"
 
          (mkdir out)
          (copy-file tarball "binaries.tar.xz")
-         (system* xz "-d" "binaries.tar.xz")
+         (invoke xz "-d" "binaries.tar.xz")
          (let ((builddir (getcwd)))
            (with-directory-excursion out
-             (system* tar "xvf"
-                      (string-append builddir
-                                     "/binaries.tar"))
+             (invoke tar "xvf"
+                     (string-append builddir
+                                    "/binaries.tar"))
              (chmod "lib" #o755)
 
              ;; Patch libc.so so it refers to the right path.
              (substitute* "lib/libc.so"
                (("/[^ ]+/lib/(libc|ld)" _ prefix)
-                (string-append out "/lib/" prefix))))))))
+                (string-append out "/lib/" prefix)))
+
+             #t)))))
     (inputs
      `(("tar" ,(search-bootstrap-binary "tar" (%current-system)))
        ("xz"  ,(search-bootstrap-binary "xz" (%current-system)))
@@ -517,12 +518,12 @@ $out/bin/guile --version~%"
 
          (mkdir out)
          (copy-file tarball "binaries.tar.xz")
-         (system* xz "-d" "binaries.tar.xz")
+         (invoke xz "-d" "binaries.tar.xz")
          (let ((builddir (getcwd))
                (bindir   (string-append out "/bin")))
            (with-directory-excursion out
-             (system* tar "xvf"
-                      (string-append builddir "/binaries.tar")))
+             (invoke tar "xvf"
+                     (string-append builddir "/binaries.tar")))
 
            (with-directory-excursion bindir
              (chmod "." #o755)
@@ -537,7 +538,8 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \
                          out libc libc libc
                          ,(glibc-dynamic-linker))))
 
-             (chmod "gcc" #o555))))))
+             (chmod "gcc" #o555)
+             #t)))))
     (inputs
      `(("tar" ,(search-bootstrap-binary "tar" (%current-system)))
        ("xz"  ,(search-bootstrap-binary "xz" (%current-system)))
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index 5f9117c637..5d45d07288 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -188,9 +188,11 @@ files.")
              (patches (search-patches "cdparanoia-fpic.patch"))
              (modules '((guix build utils)))
              (snippet
-              ;; Make libraries respect LDFLAGS.
-              '(substitute* '("paranoia/Makefile.in" "interface/Makefile.in")
-                 (("-Wl,-soname") "$(LDFLAGS) -Wl,-soname")))))
+              '(begin
+                 ;; Make libraries respect LDFLAGS.
+                 (substitute* '("paranoia/Makefile.in" "interface/Makefile.in")
+                   (("-Wl,-soname") "$(LDFLAGS) -Wl,-soname"))
+                 #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; there is no check target
@@ -449,9 +451,11 @@ the data.")
                 "0qrcvn7227qaayjcd5rm7z0k5q89qfy5qkdgwr5pd7ih0va8rmpz"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile"
-                  (("/usr/bin/install")
-                   "install")))))
+               '(begin
+                  (substitute* "Makefile"
+                    (("/usr/bin/install")
+                     "install"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f
@@ -479,11 +483,13 @@ from an audio CD.")
                 "1msm5snyckynbspz54p9krarn7v9izsi7qyyi2z5y4cinw36xv3h"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile"
-                  (("/usr/bin/install")
-                   "install")
-                  (("^etcdir = .*$")
-                   (string-append "etcdir = $(prefix)/etc\n"))))))
+               '(begin
+                  (substitute* "Makefile"
+                    (("/usr/bin/install")
+                     "install")
+                    (("^etcdir = .*$")
+                     (string-append "etcdir = $(prefix)/etc\n")))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index b4c09c7750..3f592cf17b 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -63,7 +63,8 @@
               (("crt") "pem"))
             (mkdir-p bin)
             (copy-file "certdata2pem.py"
-                       (string-append bin "/certdata2pem.py"))))))
+                       (string-append bin "/certdata2pem.py"))
+            #t))))
    (synopsis "Python script to extract .pem data from certificate collection")
    (description
     "certdata2pem.py is a Python script to transform X.509 certificate
@@ -121,7 +122,7 @@
                (mkdir-p certsdir)
                (with-directory-excursion "nss/lib/ckfw/builtins/"
                  ;; extract single certificates from blob
-                 (system* "certdata2pem.py" "certdata.txt")
+                 (invoke "certdata2pem.py" "certdata.txt")
                  ;; copy selected .pem files into the output
                  (for-each maybe-install-cert
                            (find-files "." ".*\\.pem")))
@@ -170,10 +171,9 @@ taken from the NSS package and thus ultimately from the Mozilla project.")
            ;; Create hash symlinks suitable for OpenSSL ('SSL_CERT_DIR' and
            ;; similar.)
            (chdir (string-append %output "/etc/ssl/certs"))
-           (unless (zero? (system* (string-append perl "/bin/perl")
-                                   (string-append openssl "/bin/c_rehash")
-                                   "."))
-             (error "'c_rehash' failed" openssl))))))
+           (invoke (string-append perl "/bin/perl")
+                   (string-append openssl "/bin/c_rehash")
+                   ".")))))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)))                           ;for 'c_rehash'
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index b9c10e5df2..3e959bde92 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -19,12 +19,12 @@
 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
-;;; Copyright © 2015, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
@@ -104,9 +104,11 @@ source code editors and IDEs.")
     (build-system gnu-build-system)
     (arguments '(#:phases
                  (modify-phases %standard-phases
-                   (add-before 'configure 'autoconf
-                     (lambda _
-                       (zero? (system* "autoreconf" "-vfi")))))))
+                   ;; XXX: The "bootstrap" phase detects the "bootstrap"
+                   ;; script, but fails to execute it, so we bootstrap
+                   ;; manually.
+                   (replace 'bootstrap
+                     (lambda _ (invoke "autoreconf" "-vfi"))))))
     (native-inputs
      `(("automake" ,automake)
        ("autoconf" ,autoconf)
@@ -187,13 +189,13 @@ supervised tests.")
                           (incdir (string-append output "/include"))
                           (docdir (string-append output "/share/doc/catch-"
                                                  ,version)))
-                     (begin
-                       (for-each mkdir-p (list incdir docdir))
-                       (install-file (string-append source
-                                                 "/single_include/catch.hpp")
-                                     incdir)
-                       (copy-recursively (string-append source "/docs")
-                                         docdir))))))
+                     (for-each mkdir-p (list incdir docdir))
+                     (install-file (string-append source
+                                                  "/single_include/catch.hpp")
+                                   incdir)
+                     (copy-recursively (string-append source "/docs")
+                                       docdir)
+                     #t))))
     (home-page "http://catch-lib.net/")
     (synopsis "Automated test framework for C++ and Objective-C")
     (description
@@ -617,14 +619,14 @@ standard library.")
 (define-public python-pytest
   (package
     (name "python-pytest")
-    (version "3.2.3")
+    (version "3.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest" version))
        (sha256
         (base32
-         "0g6w86ks73fnrnsyib9ii2rbyx830vn7aglsjqz9v1n2xwbndyi7"))))
+         "1q832zd07zak2lyxbycxjydh0jp7y3hvawjqzlvra6aghz8r3r7s"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -642,7 +644,11 @@ standard library.")
                                line)))
              #t)))))
     (propagated-inputs
-     `(("python-py" ,python-py)))
+     `(("python-attrs" ,python-attrs-bootstrap)
+       ("python-more-itertools" ,python-more-itertools)
+       ("python-pluggy" ,python-pluggy)
+       ("python-py" ,python-py)
+       ("python-six" ,python-six-bootstrap)))
     (native-inputs
      `(;; Tests need the "regular" bash since 'bash-final' lacks `compgen`.
        ("bash" ,bash)
@@ -656,20 +662,33 @@ standard library.")
      "Pytest is a testing tool that provides auto-discovery of test modules
 and functions, detailed info on failing assert statements, modular fixtures,
 and many external plugins.")
-    (license license:expat)))
+    (license license:expat)
+    (properties `((python2-variant . ,(delay python2-pytest))))))
 
 (define-public python2-pytest
-  (package-with-python2 python-pytest))
+  (let ((pytest (package-with-python2
+                 (strip-python2-variant python-pytest))))
+    (package
+      (inherit pytest)
+      (propagated-inputs
+       `(("python2-funcsigs" ,python2-funcsigs)
+         ,@(package-propagated-inputs pytest))))))
 
 (define-public python-pytest-bootstrap
   (package
-    (inherit python-pytest)
+    (inherit (strip-python2-variant python-pytest))
     (name "python-pytest-bootstrap")
     (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm)))
-    (arguments `(#:tests? #f))))
+    (arguments `(#:tests? #f))
+    (properties `((python2-variant . ,(delay python2-pytest-bootstrap))))))
 
 (define-public python2-pytest-bootstrap
-  (package-with-python2 python-pytest-bootstrap))
+  (let ((pytest (package-with-python2
+                 (strip-python2-variant python-pytest-bootstrap))))
+    (package (inherit pytest)
+             (propagated-inputs
+              `(("python2-funcsigs" ,python2-funcsigs-bootstrap)
+                ,@(package-propagated-inputs pytest))))))
 
 (define-public python-pytest-cov
   (package
@@ -1378,23 +1397,26 @@ normally the case.")
 (define-public python-hypothesis
   (package
     (name "python-hypothesis")
-    (version "3.1.0")
+    (version "3.52.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "hypothesis" version))
               (sha256
                (base32
-                "0qyqq9akm4vshhn8cngjc1qykcvsn7cz6dlm6njfsgpbraqrmbbw"))))
+                "0g54cypfi5qj6cgxfr7l1nb41r1cqhhngx4qxn4ga9h720rcsbr8"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-flake8" ,python-flake8)
        ("python-pytest" ,python-pytest-bootstrap)))
+    (propagated-inputs
+     `(("python-attrs" ,python-attrs-bootstrap)
+       ("python-coverage" ,python-coverage)))
     (synopsis "Library for property based testing")
     (description "Hypothesis is a library for testing your Python code against a
 much larger range of examples than you would ever want to write by hand.  It’s
 based on the Haskell library, Quickcheck, and is designed to integrate
 seamlessly into your existing Python unit testing work flow.")
-    (home-page "https://github.com/DRMacIver/hypothesis")
+    (home-page "https://github.com/HypothesisWorks/hypothesis-python")
     (license license:mpl2.0)
     (properties `((python2-variant . ,(delay python2-hypothesis))))))
 
diff --git a/gnu/packages/chez.scm b/gnu/packages/chez.scm
index bb7767670d..c8e76b8ab4 100644
--- a/gnu/packages/chez.scm
+++ b/gnu/packages/chez.scm
@@ -74,8 +74,10 @@
        (modules '((guix build utils)))
        (snippet
         ;; Fix compilation with glibc >= 2.26, which removed xlocale.h.
-        '(substitute* "c/expeditor.c"
-           (("xlocale\\.h") "locale.h")))))
+        '(begin
+           (substitute* "c/expeditor.c"
+             (("xlocale\\.h") "locale.h"))
+           #t))))
     (build-system gnu-build-system)
     (inputs
      `(("ncurses" ,ncurses)
diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm
index 733a8ca83e..ba95dc174b 100644
--- a/gnu/packages/ci.scm
+++ b/gnu/packages/ci.scm
@@ -147,9 +147,6 @@
                  (string-append "--docdir=" %output
                                 "/doc/hydra-" ,version)))
          #:phases (modify-phases %standard-phases
-                    (add-after
-                     'unpack 'bootstrap
-                     (lambda _ (zero? (system* "autoreconf" "-vfi"))))
                     (add-before
                      'check 'check-setup
                      (lambda _ (setenv "LOGNAME" "test.log")))
@@ -221,8 +218,6 @@ their dependencies.")
                (substitute* "build-aux/git-version-gen"
                  (("#!/bin/sh") (string-append "#!" (which "sh"))))
                #t))
-           (add-after 'patch-/bin/sh 'bootstrap
-             (lambda _ (zero? (system* "sh" "bootstrap"))))
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                ;; Wrap the 'cuirass' command to refer to the right modules.
diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 258ea9c638..06b1cab82c 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,57 +43,66 @@
 (define-public cmake
   (package
     (name "cmake")
-    (version "3.7.2")
+    (version "3.11.0")
     (source (origin
-             (method url-fetch)
-             (uri (string-append "https://www.cmake.org/files/v"
-                                 (version-major+minor version)
-                                 "/cmake-" version ".tar.gz"))
-             (sha256
-              (base32
-               "1q6a60695prpzzsmczm2xrgxdb61fyjznb04dr6yls6iwv24c4nw"))
-             (patches (search-patches "cmake-fix-tests.patch"))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 ;; Drop bundled software.
-                 (with-directory-excursion "Utilities"
-                   (for-each delete-file-recursively
-                             '("cmbzip2"
-                               ;"cmcompress"
-                               "cmcurl"
-                               "cmexpat"
-                               ;"cmjsoncpp"
-                               ;"cmlibarchive"
-                               "cmliblzma"
-                               "cmlibuv"
-                               "cmzlib"))
-                   #t)))))
+              (method url-fetch)
+              (uri (string-append "https://www.cmake.org/files/v"
+                                  (version-major+minor version)
+                                  "/cmake-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0sv5k9q6braa8hhw0y3w19avqn0xn5czv5jf5fz5blnlf7ivw4y3"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Drop bundled software.
+                  (with-directory-excursion "Utilities"
+                    (for-each delete-file-recursively
+                              '("cmbzip2"
+                                ;; "cmcompress"
+                                "cmcurl"
+                                "cmexpat"
+                                ;; "cmjsoncpp"
+                                ;; "cmlibarchive"
+                                "cmliblzma"
+                                ;; "cmlibuv"
+                                "cmzlib"))
+                    #t)))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
+       #:make-flags
+       (let ((skipped-tests
+              (list "BundleUtilities" ; This test fails on Guix.
+                    "CTestTestSubdir" ; This test fails to build 2 of the 3 tests.
+                    ;; These tests requires network access.
+                    "CTestCoverageCollectGCOV"
+                    "CTestTestUpload")))
+         (list
+          (string-append
+           ;; These arguments apply for the tests only.
+           "ARGS=-j " (number->string (parallel-job-count))
+           " --output-on-failure"
+           " --exclude-regex ^\\(" (string-join skipped-tests "\\|") "\\)$")))
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'patch-bin-sh
            (lambda _
-           ;; Replace "/bin/sh" by the right path in... a lot of
-           ;; files.
-           (substitute*
-               '("Modules/CompilerId/Xcode-3.pbxproj.in"
-                 "Modules/CompilerId/Xcode-1.pbxproj.in"
-                 "Modules/CompilerId/Xcode-2.pbxproj.in"
-                 "Modules/CPack.RuntimeScript.in"
-                 "Source/cmakexbuild.cxx"
-                 "Source/cmGlobalXCodeGenerator.cxx"
-                 "Source/CTest/cmCTestBatchTestHandler.cxx"
-                 "Source/cmLocalUnixMakefileGenerator3.cxx"
-                 "Source/cmExecProgramCommand.cxx"
-                 "Utilities/Release/release_cmake.cmake"
-                 "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
-                 "Tests/CMakeLists.txt"
-                 "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
+             ;; Replace "/bin/sh" by the right path in... a lot of
+             ;; files.
+             (substitute*
+                 '("Modules/CompilerId/Xcode-3.pbxproj.in"
+                   "Modules/CPack.RuntimeScript.in"
+                   "Source/cmakexbuild.cxx"
+                   "Source/cmGlobalXCodeGenerator.cxx"
+                   "Source/cmLocalUnixMakefileGenerator3.cxx"
+                   "Source/cmExecProgramCommand.cxx"
+                   "Utilities/Release/release_cmake.cmake"
+                   "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
+                   "Tests/CMakeLists.txt"
+                   "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
                (("/bin/sh") (which "sh")))
-           #t))
+             #t))
          (add-before 'configure 'set-paths
            (lambda _
              ;; Help cmake's bootstrap process to find system libraries
@@ -103,43 +113,37 @@
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system*
-                       "./configure"
-                       (string-append "--prefix=" out)
-                       "--system-libs"
-                       "--no-system-jsoncpp" ; FIXME: Circular dependency.
-                       ;; By default, the man pages and other docs land
-                       ;; in PREFIX/man and PREFIX/doc, but we want them
-                       ;; in share/{man,doc}.  Note that unlike
-                       ;; autoconf-generated configure scripts, cmake's
-                       ;; configure prepends "PREFIX/" to what we pass
-                       ;; to --mandir and --docdir.
-                       "--mandir=share/man"
-                       ,(string-append
-                         "--docdir=share/doc/cmake-"
-                         (version-major+minor version)))))))
-         (add-before 'check 'set-test-environment
-           (lambda _
-             ;; Get verbose output from failed tests.
-             (setenv "CTEST_OUTPUT_ON_FAILURE" "TRUE")
-             ;; Run tests in parallel.
-             (setenv "CTEST_PARALLEL_LEVEL"
-                     (number->string (parallel-job-count)))
-             #t)))))
+               (invoke
+                "./configure" "--verbose"
+                (string-append "--parallel=" (number->string (parallel-job-count)))
+                (string-append "--prefix=" out)
+                "--system-libs"
+                "--no-system-jsoncpp" ; FIXME: Circular dependency.
+                ;; By default, the man pages and other docs land
+                ;; in PREFIX/man and PREFIX/doc, but we want them
+                ;; in share/{man,doc}.  Note that unlike
+                ;; autoconf-generated configure scripts, cmake's
+                ;; configure prepends "PREFIX/" to what we pass
+                ;; to --mandir and --docdir.
+                "--mandir=share/man"
+                ,(string-append
+                  "--docdir=share/doc/cmake-"
+                  (version-major+minor version)))))))))
     (inputs
-     `(("file"       ,file)
-       ("curl"       ,curl)
-       ("zlib"       ,zlib)
-       ("expat"      ,expat)
-       ("bzip2"      ,bzip2)
-       ("ncurses"    ,ncurses) ; required for ccmake
-       ("libuv"      ,libuv)
-       ("libarchive" ,libarchive)))
+     `(("bzip2" ,bzip2)
+       ("curl" ,curl)
+       ("expat" ,expat)
+       ("file" ,file)
+       ("libarchive" ,libarchive)
+       ("libuv" ,libuv)
+       ("ncurses" ,ncurses) ; required for ccmake
+       ("rhash" ,rhash)
+       ("zlib" ,zlib)))
     (native-search-paths
      (list (search-path-specification
-             (variable "CMAKE_PREFIX_PATH")
-             (files '("")))))
-    (home-page "https://www.cmake.org/")
+            (variable "CMAKE_PREFIX_PATH")
+            (files '("")))))
+    (home-page "https://cmake.org/")
     (synopsis "Cross-platform build system")
     (description
      "CMake is a family of tools designed to build, test and package software.
@@ -152,62 +156,6 @@ and workspaces that can be used in the compiler environment of your choice.")
                    license:expat             ; cmjsoncpp is dual MIT/public domain
                    license:public-domain)))) ; cmlibarchive/archive_getdate.c
 
-;; Recent Ceph requires Boost 1.66, which in turn requires CMake 3.11 for
-;; its updated "FindBoost.cmake" facility.
-(define-public cmake-3.11
-  (package
-    (inherit cmake)
-    (version "3.11.0-rc2")
-    (source (origin
-              (inherit (package-source cmake))
-              (uri (string-append "https://www.cmake.org/files/v"
-                                  (version-major+minor version)
-                                  "/cmake-" version ".tar.gz"))
-              (sha256
-               (base32
-                "14p6ais19nfcwl914n4n5rbzaqwafv3qkg6nd8jw54ykn6lz6mf3"))
-              (snippet
-               '(begin
-                  ;; Drop bundled software.
-                  (with-directory-excursion "Utilities"
-                    (for-each delete-file-recursively
-                              '("cmbzip2"
-                                "cmcurl"
-                                "cmexpat"
-                                "cmliblzma"
-                                "cmzlib"))
-                    #t)))))
-    (build-system gnu-build-system)
-    (arguments
-     (substitute-keyword-arguments (package-arguments cmake)
-       ((#:make-flags flags ''()) `(cons (string-append
-                                          "ARGS=-j "
-                                          (number->string (parallel-job-count))
-                                          " --output-on-failure")
-                                         ,flags))
-       ((#:phases phases)
-        `(modify-phases ,phases
-           (replace 'patch-bin-sh
-             (lambda _
-               (substitute*
-                   '("Modules/CompilerId/Xcode-3.pbxproj.in"
-                     "Modules/CPack.RuntimeScript.in"
-                     "Source/cmakexbuild.cxx"
-                     "Source/cmGlobalXCodeGenerator.cxx"
-                     "Source/cmLocalUnixMakefileGenerator3.cxx"
-                     "Source/cmExecProgramCommand.cxx"
-                     "Utilities/Release/release_cmake.cmake"
-                     "Utilities/cmlibarchive/libarchive/archive_write_set_format_shar.c"
-                     "Tests/CMakeLists.txt"
-                     "Tests/RunCMake/File_Generate/RunCMakeTest.cmake")
-                 (("/bin/sh") (which "sh")))
-               #t))
-           ;; This is now passed through #:make-flags.
-           (delete 'set-test-environment)))))
-    (inputs
-     `(("rhash" ,rhash)
-       ,@(package-inputs cmake)))))
-
 (define-public emacs-cmake-mode
   (package
     (inherit cmake)
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 4f132b9f13..a8c85fdb5e 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -420,7 +420,8 @@ functionality such as HTML output.")
            (let ((files (find-files "." ".*\\.cpp|.*\\.h")))
              (substitute* files
                (("#include ?\"rct/(.*.h)\"" all header)
-                (string-append "#include <rct/" header ">"))))))
+                (string-append "#include <rct/" header ">")))
+             #t)))
        (sha256
         (base32
          "0scjbp1z201q8njvrxqz7lk2m9b6k2rxd5q1shrng6532r7ndif2"))))
@@ -498,7 +499,8 @@ importantly we give you proper follow-symbol and find-references support.")
            (install-files '("AUTHORS" "BUGS" "ChangeLog" "README") doc)
            (install-files '("colormake" "colormake-short" "clmake"
                             "clmake-short" "colormake.pl")
-                          bin)))))
+                          bin)
+           #t))))
     (home-page "http://bre.klaki.net/programs/colormake/")
     (synopsis "Wrapper around @command{make} to produce colored output")
     (description "This package provides a wrapper around @command{make} to
@@ -629,15 +631,16 @@ the C, C++, C++/CLI, Objective‑C, C#, and Java programming languages.")
                      "0f9655vqdvfwbxvs1gpa7py8k1z71aqh8hp73f65vazwbfz436wa"))))
    (build-system gnu-build-system)
    (arguments
-    `(#:phases (alist-cons-after
-                'unpack 'fix-docdir
-                (lambda _
-                  ;; Although indent uses a modern autoconf in which docdir
-                  ;; defaults to PREFIX/share/doc, the doc/Makefile.am
-                  ;; overrides this to be in PREFIX/doc.  Fix this.
-                  (substitute* "doc/Makefile.in"
-                    (("^docdir = .*$") "docdir = @docdir@\n")))
-                %standard-phases)))
+    `(#:phases
+      (modify-phases %standard-phases
+        (add-after 'unpack 'fix-docdir
+          (lambda _
+            ;; Although indent uses a modern autoconf in which docdir
+            ;; defaults to PREFIX/share/doc, the doc/Makefile.am
+            ;; overrides this to be in PREFIX/doc.  Fix this.
+            (substitute* "doc/Makefile.in"
+              (("^docdir = .*$") "docdir = @docdir@\n"))
+            #t)))))
    (synopsis "Code reformatter")
    (description
     "Indent is a program that makes source code easier to read by
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index 9f3e1e52a7..e998e9981e 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -90,12 +91,14 @@
              `(modify-phases ,phases
                 (replace 'build
                   (lambda _
-                    (zero? (system* "./build.sh"))))
+                    (invoke "./build.sh")
+                    #t))
                 (replace 'install
                   (lambda* (#:key outputs #:allow-other-keys)
                     (let* ((out (assoc-ref outputs "out"))
                            (bin (string-append out "/bin")))
-                      (install-file "make" bin)))))))))
+                      (install-file "make" bin)
+                      #t))))))))
      (native-inputs '())                          ; no need for 'pkg-config'
      (inputs %bootstrap-inputs))))
 
@@ -183,28 +186,12 @@
                     ,cf)))))
      (inputs %boot0-inputs))))
 
-;; gcc-4.9 was fixed late in the core-update cycle and so this GCC is only
-;; needed to prevent a full world rebuild, and can be replaced with gcc-4.9.
-(define gcc-for-libstdc++
-  (package (inherit gcc-4.9)
-    (version "4.9.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://gnu/gcc/gcc-"
-                                  version "/gcc-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc"))
-              (patches (search-patches "gcc-arm-bug-71399.patch"
-                                       "gcc-libvtv-runpath.patch"
-                                       "gcc-fix-texi2pod.patch"))))))
-
 (define libstdc++-boot0
   ;; GCC's libcc1 is always built as a shared library (the top-level
   ;; 'Makefile.def' forcefully adds --enable-shared) and thus needs to refer
   ;; to libstdc++.so.  We cannot build libstdc++-5.3 because it relies on
   ;; C++14 features missing in some of our bootstrap compilers.
-  (let ((lib (package-with-bootstrap-guile (make-libstdc++ gcc-for-libstdc++))))
+  (let ((lib (package-with-bootstrap-guile (make-libstdc++ gcc-4.9))))
     (package
       (inherit lib)
       (name "libstdc++-boot0")
@@ -262,42 +249,40 @@
                                 "--(with-system-zlib|enable-languages.*)" <>)
                               ,flags)))
             ((#:phases phases)
-             `(alist-cons-after
-               'unpack 'unpack-gmp&co
-               (lambda* (#:key inputs #:allow-other-keys)
-                 (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
-                       (mpfr (assoc-ref %build-inputs "mpfr-source"))
-                       (mpc  (assoc-ref %build-inputs "mpc-source")))
-
-                   ;; To reduce the set of pre-built bootstrap inputs, build
-                   ;; GMP & co. from GCC.
-                   (for-each (lambda (source)
-                               (or (zero? (system* "tar" "xvf" source))
-                                   (error "failed to unpack tarball"
-                                          source)))
-                             (list gmp mpfr mpc))
-
-                   ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
-                   ,@(map (lambda (lib)
-                            ;; Drop trailing letters, as gmp-6.0.0a unpacks
-                            ;; into gmp-6.0.0.
-                            `(symlink ,(string-trim-right
-                                        (package-full-name lib "-")
-                                        char-set:letter)
-                                      ,(package-name lib)))
-                          (list gmp-6.0 mpfr mpc))))
-               (alist-cons-after
-                'install 'symlink-libgcc_eh
-                (lambda* (#:key outputs #:allow-other-keys)
-                  (let ((out (assoc-ref outputs "lib")))
-                    ;; Glibc wants to link against libgcc_eh, so provide
-                    ;; it.
-                    (with-directory-excursion
-                        (string-append out "/lib/gcc/"
-                                       ,(boot-triplet)
-                                       "/" ,(package-version gcc))
-                      (symlink "libgcc.a" "libgcc_eh.a"))))
-                ,phases))))))
+             `(modify-phases ,phases
+                (add-after 'unpack 'unpack-gmp&co
+                  (lambda* (#:key inputs #:allow-other-keys)
+                    (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                          (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                          (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                      ;; To reduce the set of pre-built bootstrap inputs, build
+                      ;; GMP & co. from GCC.
+                      (for-each (lambda (source)
+                                  (invoke "tar" "xvf" source))
+                                (list gmp mpfr mpc))
+
+                      ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                      ,@(map (lambda (lib)
+                               ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                               ;; into gmp-6.0.0.
+                               `(symlink ,(string-trim-right
+                                           (package-full-name lib "-")
+                                           char-set:letter)
+                                         ,(package-name lib)))
+                             (list gmp-6.0 mpfr mpc))
+                      #t)))
+                (add-after 'install 'symlink-libgcc_eh
+                  (lambda* (#:key outputs #:allow-other-keys)
+                    (let ((out (assoc-ref outputs "lib")))
+                      ;; Glibc wants to link against libgcc_eh, so provide
+                      ;; it.
+                      (with-directory-excursion
+                          (string-append out "/lib/gcc/"
+                                         ,(boot-triplet)
+                                         "/" ,(package-version gcc))
+                        (symlink "libgcc.a" "libgcc_eh.a"))
+                      #t))))))))
 
      (inputs `(("gmp-source" ,(package-source gmp-6.0))
                ("mpfr-source" ,(package-source mpfr))
@@ -332,7 +317,8 @@
                            (lambda _
                              (substitute* "Configure"
                                (("^libswanted=(.*)pthread" _ before)
-                                (string-append "libswanted=" before)))))))
+                                (string-append "libswanted=" before)))
+                             #t))))
                      ;; Do not configure with '-Dusethreads' since pthread
                      ;; support is missing.
                      ((#:configure-flags configure-flags)
@@ -512,32 +498,33 @@ the bootstrap environment."
                             "--enable-obsolete-rpc")
                       ,flags))
             ((#:phases phases)
-             `(alist-cons-before
-               'configure 'pre-configure
-               (lambda* (#:key inputs #:allow-other-keys)
-                 ;; Don't clobber CPATH with the bootstrap libc.
-                 (setenv "NATIVE_CPATH" (getenv "CPATH"))
-                 (unsetenv "CPATH")
-
-                 ;; Tell 'libpthread' where to find 'libihash' on Hurd systems.
-                 ,@(if (hurd-triplet? (%current-system))
-                       `((substitute* "libpthread/Makefile"
-                           (("LDLIBS-pthread.so =.*")
-                            (string-append "LDLIBS-pthread.so = "
-                                           (assoc-ref %build-inputs "kernel-headers")
-                                           "/lib/libihash.a\n"))))
-                       '())
-
-                 ;; 'rpcgen' needs native libc headers to be built.
-                 (substitute* "sunrpc/Makefile"
-                   (("sunrpc-CPPFLAGS =.*" all)
-                    (string-append "CPATH = $(NATIVE_CPATH)\n"
-                                   "export CPATH\n"
-                                   all "\n"))))
-               ,phases)))))
+             `(modify-phases ,phases
+                (add-before 'configure 'pre-configure
+                  (lambda* (#:key inputs #:allow-other-keys)
+                    ;; Don't clobber CPATH with the bootstrap libc.
+                    (setenv "NATIVE_CPATH" (getenv "CPATH"))
+                    (unsetenv "CPATH")
+
+                    ;; Tell 'libpthread' where to find 'libihash' on Hurd systems.
+                    ,@(if (hurd-triplet? (%current-system))
+                          `((substitute* "libpthread/Makefile"
+                              (("LDLIBS-pthread.so =.*")
+                               (string-append "LDLIBS-pthread.so = "
+                                              (assoc-ref %build-inputs "kernel-headers")
+                                              "/lib/libihash.a\n"))))
+                          '())
+
+                    ;; 'rpcgen' needs native libc headers to be built.
+                    (substitute* "sunrpc/Makefile"
+                      (("sunrpc-CPPFLAGS =.*" all)
+                       (string-append "CPATH = $(NATIVE_CPATH)\n"
+                                      "export CPATH\n"
+                                      all "\n")))
+                    #t)))))))
      (propagated-inputs `(("kernel-headers" ,(kernel-headers-boot0))))
      (native-inputs
-      `(("texinfo" ,texinfo-boot0)
+      `(("bison" ,bison-boot0)
+        ("texinfo" ,texinfo-boot0)
         ("perl" ,perl-boot0)))
      (inputs
       `(;; The boot inputs.  That includes the bootstrap libc.  We don't want
@@ -599,7 +586,9 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                                                            triplet "-" tool)
                                             tool))
                                  '("ar" "ranlib"))
-                       (for-each wrap-program '("gcc" "g++")))))))
+                       (for-each wrap-program '("gcc" "g++")))
+
+                     #t))))
     (native-inputs
      `(("binutils" ,binutils)
        ("gcc" ,gcc)
@@ -652,7 +641,8 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                   ;; Build only the tools.
                   (add-after 'unpack 'chdir
                              (lambda _
-                               (chdir "gettext-tools")))
+                               (chdir "gettext-tools")
+                               #t))
 
                   ;; Some test programs require pthreads, which we don't have.
                   (add-before 'configure 'no-test-programs
@@ -923,14 +913,13 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
 (define grep-final
   ;; The final grep.  Gzip holds a reference to it (via zgrep), so it must be
   ;; built before gzip.
-  (package-with-bootstrap-guile
-   (package-with-explicit-inputs (package
-                                   (inherit grep)
-                                   (inputs '())   ;no PCRE support
-                                   (native-inputs `(("perl" ,perl-boot0))))
-                                 %boot5-inputs
-                                 (current-source-location)
-                                 #:guile guile-final)))
+  (let ((grep (package-with-bootstrap-guile
+               (package-with-explicit-inputs grep %boot5-inputs
+                                             (current-source-location)
+                                             #:guile guile-final))))
+    (package/inherit grep
+                     (inputs (alist-delete "pcre" (package-inputs grep)))
+                     (native-inputs `(("perl" ,perl-boot0))))))
 
 (define %boot6-inputs
   ;; Now use the final Coreutils.
@@ -938,6 +927,14 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
     ("grep" ,grep-final)
     ,@%boot5-inputs))
 
+(define sed-final
+  ;; The final sed.
+  (let ((sed (package-with-bootstrap-guile
+              (package-with-explicit-inputs sed %boot6-inputs
+                                            (current-source-location)
+                                            #:guile guile-final))))
+    (package/inherit sed (native-inputs `(("perl" ,perl-boot0))))))
+
 (define-public %final-inputs
   ;; Final derivations used as implicit inputs by 'gnu-build-system'.  We
   ;; still use 'package-with-bootstrap-guile' so that the bootstrap tools are
@@ -956,9 +953,9 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
                ("file" ,file)
                ("diffutils" ,diffutils)
                ("patch" ,patch)
-               ("sed" ,sed)
                ("findutils" ,findutils)
                ("gawk" ,gawk)))
+      ("sed" ,sed-final)
       ("grep" ,grep-final)
       ("coreutils" ,coreutils-final)
       ("make" ,gnu-make-final)
@@ -1029,7 +1026,8 @@ COREUTILS-FINAL vs. COREUTILS, etc."
                                                    "libc-debug")))
                      (union-build (assoc-ref %outputs "static")
                                   (list (assoc-ref %build-inputs
-                                                   "libc-static")))))))
+                                                   "libc-static")))
+                     #t))))
 
     (native-search-paths (package-native-search-paths gcc))
     (search-paths (package-search-paths gcc))
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index a428e6c535..9921cd575c 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
@@ -13,7 +13,7 @@
 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
@@ -98,9 +98,8 @@
                ,@(if (%current-target-system)
                      `((setenv "CHOST" ,(%current-target-system)))
                      '())
-               (zero?
-                (system* "./configure"
-                         (string-append "--prefix=" out)))))))))
+               (invoke "./configure"
+                       (string-append "--prefix=" out))))))))
     (home-page "https://zlib.net/")
     (synopsis "Compression library")
     (description
@@ -128,7 +127,7 @@ in compression.")
            (lambda _ (chdir "contrib/minizip") #t))
          (add-after 'enter-source 'autoreconf
            (lambda _
-             (zero? (system* "autoreconf" "-vif")))))))
+             (invoke "autoreconf" "-vif"))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -185,7 +184,7 @@ utility.  Instead of being written in Java, FastJar is written in C.")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'autoconf
-          (lambda _ (zero? (system* "sh" "autoreconf" "-vfi")))))))
+          (lambda _ (invoke "sh" "autoreconf" "-vfi"))))))
    (native-inputs
     `(("autoconf" ,autoconf)
       ("automake" ,automake)
@@ -202,14 +201,14 @@ adding and extracting files to/from a tar archive.")
 (define-public gzip
   (package
    (name "gzip")
-   (version "1.8")
+   (version "1.9")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gzip/gzip-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1lxv3p4iyx7833mlihkn5wfwmz4cys5nybwpz3dfawag8kn6f5zz"))))
+              "16h8g4acy7fgfxcjacr3wijjsnixwsfd2jhz3zwdi2qrzi262l5f"))))
    (build-system gnu-build-system)
    (synopsis "General file (de)compression (using lzw)")
    (arguments
@@ -252,35 +251,48 @@ file; as a result, it is often used in conjunction with \"tar\", resulting in
        (modify-phases %standard-phases
          (replace 'configure
            (lambda* (#:key target #:allow-other-keys)
-             (if ,(%current-target-system)
-                 ;; Cross-compilation: use the cross tools.
-                 (substitute* (find-files "." "Makefile")
-                   (("CC=.*$")
-                    (string-append "CC = " target "-gcc\n"))
-                   (("AR=.*$")
-                    (string-append "AR = " target "-ar\n"))
-                   (("RANLIB=.*$")
-                    (string-append "RANLIB = " target "-ranlib\n"))
-                   (("^all:(.*)test" _ prerequisites)
-                    ;; Remove 'all' -> 'test' dependency.
-                    (string-append "all:" prerequisites "\n")))
-                 #t)))
+             (when ,(%current-target-system)
+               ;; Cross-compilation: use the cross tools.
+               (substitute* (find-files "." "Makefile")
+                 (("CC=.*$")
+                  (string-append "CC = " target "-gcc\n"))
+                 (("AR=.*$")
+                  (string-append "AR = " target "-ar\n"))
+                 (("RANLIB=.*$")
+                  (string-append "RANLIB = " target "-ranlib\n"))
+                 (("^all:(.*)test" _ prerequisites)
+                  ;; Remove 'all' -> 'test' dependency.
+                  (string-append "all:" prerequisites "\n"))))
+             #t))
          (add-before 'build 'build-shared-lib
            (lambda* (#:key inputs #:allow-other-keys)
              (patch-makefile-SHELL "Makefile-libbz2_so")
-             (zero? (system* "make" "-f" "Makefile-libbz2_so"))))
+             (invoke "make" "-f" "Makefile-libbz2_so")))
          (add-after 'install 'install-shared-lib
            (lambda* (#:key outputs #:allow-other-keys)
+             ;; The Makefile above does not have an 'install' target, nor does
+             ;; it create all the (un)versioned symlinks, so we handle it here.
              (let* ((out    (assoc-ref outputs "out"))
-                    (libdir (string-append out "/lib")))
-               (for-each (lambda (file)
-                           (let ((base (basename file)))
-                             (format #t "installing `~a' to `~a'~%"
-                                     base libdir)
-                             (copy-file file
-                                        (string-append libdir "/" base))))
-                         (find-files "." "^libbz2\\.so")))
-             #t))
+                    (libdir (string-append out "/lib"))
+                    ;; Find the actual library (e.g. "libbz2.so.1.0.6").
+                    (lib (string-drop
+                          (car (find-files
+                                "."
+                                (lambda (file stat)
+                                  (and (string-prefix? "./libbz2.so" file)
+                                       (eq? 'regular (stat:type stat))))))
+                          2))
+                    (soversion (string-drop lib (string-length "libbz2.so."))))
+               (install-file lib libdir)
+               (with-directory-excursion libdir
+                 ;; Create symlinks libbz2.so.1 -> libbz2.so.1.0, etc.
+                 (let loop ((base "libbz2.so")
+                            (numbers (string-split soversion #\.)))
+                   (unless (null? numbers)
+                     (let ((so-file (string-append base "." (car numbers))))
+                       (symlink so-file base)
+                       (loop so-file (cdr numbers))))))
+               #t)))
          (add-after 'install-shared-lib 'patch-scripts
            (lambda* (#:key outputs inputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out")))
@@ -477,14 +489,14 @@ some compression ratio).")
 (define-public lzip
   (package
     (name "lzip")
-    (version "1.19")
+    (version "1.20")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://savannah/lzip/lzip-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "1abbch762gv8rjr579q3qyyk6c80plklbv2mw4x0vg71dgsw9bgz"))))
+               "0319q59kb8g324wnj7xzbr7vvlx5bcs13lr34j0zb3kqlyjq2fy9"))))
     (build-system gnu-build-system)
     (home-page "https://www.nongnu.org/lzip/lzip.html")
     (synopsis "Lossless data compressor based on the LZMA algorithm")
@@ -943,10 +955,11 @@ tarballs.")
                  (base32
                   "1qxxsasvwbbbh6dl3138y9h3fg0q2v7xdk5jjc690bdg7g1wrj6n"))
                 (modules '((guix build utils)))
-                (snippet
-                 ;; This is a recursive submodule that is unnecessary for this
-                 ;; package, so delete it.
-                 '(delete-file-recursively "brotli/terryfy"))))
+                (snippet '(begin
+                            ;; This is a recursive submodule that is
+                            ;; unnecessary for this package, so delete it.
+                            (delete-file-recursively "brotli/terryfy")
+                            #t))))
       (build-system gnu-build-system)
       (native-inputs
        `(("autoconf" ,autoconf)
@@ -957,7 +970,7 @@ tarballs.")
                     (add-after 'unpack 'autogen
                       (lambda _
                         (mkdir "m4")
-                        (zero? (system* "autoreconf" "-vfi")))))))
+                        (invoke "autoreconf" "-vfi"))))))
       (home-page "https://github.com/bagder/libbrotli/")
       (synopsis "Implementation of the Brotli compression algorithm")
       (description
@@ -1005,7 +1018,9 @@ respectively, based on the reference implementation from Google.")
        (file-name (string-append name "-" version ".tar.gz"))
        (snippet
         ;; This file isn't freely distributable and has no effect on building.
-        '(delete-file "xdelta3/draft-korn-vcdiff.txt"))))
+        '(begin
+           (delete-file "xdelta3/draft-korn-vcdiff.txt")
+           #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -1014,9 +1029,9 @@ respectively, based on the reference implementation from Google.")
      `(#:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-build-directory
-           (lambda _ (chdir "xdelta3")))
+           (lambda _ (chdir "xdelta3") #t))
          (add-after 'enter-build-directory 'autoconf
-           (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
+           (lambda _ (invoke "autoreconf" "-vfi"))))))
     (home-page "http://xdelta.org")
     (synopsis "Delta encoder for binary files")
     (description "xdelta encodes only the differences between two binary files
@@ -1177,7 +1192,7 @@ install: libbitshuffle.so
          (add-before 'build 'build-jni
            (lambda _
              ;; Rebuild one of the binaries we removed earlier
-             (system* "javac" "src/main/java/org/xerial/snappy/OSInfo.java"
+             (invoke "javac" "src/main/java/org/xerial/snappy/OSInfo.java"
                       "-d" "lib")
              ;; Link to the dynamic bitshuffle and snappy, not the static ones
              (substitute* "Makefile.common"
@@ -1264,7 +1279,7 @@ compresser/decompresser.")
          (add-before 'build 'build-jni
            (lambda _
              ;; Rebuild one of the binaries we removed earlier
-             (system* "javac" "src/main/java/org/xerial/snappy/OSInfo.java"
+             (invoke "javac" "src/main/java/org/xerial/snappy/OSInfo.java"
                       "-d" "lib")
              ;; Link to the dynamic snappy, not the static ones
              (substitute* "Makefile.common"
@@ -1281,7 +1296,7 @@ compresser/decompresser.")
                (("NAME\\): \\$\\(SNAPPY_OBJ\\)")
                 "NAME): $(SNAPPY_OBJ)\n\t@mkdir -p $(@D)"))
              ;; Finally we can run the Makefile to build the dynamic library.
-             (zero? (system* "make" "native"))))
+             (invoke "make" "native")))
          ;; Once we have built the shared library, we need to place it in the
          ;; "build" directory so it can be added to the jar file.
          (add-after 'build-jni 'copy-jni
@@ -1320,16 +1335,15 @@ compresser/decompresser.")
          (replace 'check
            (lambda _
              (define (test class)
-               (zero? (system* "java" "-cp" (string-append (getenv "CLASSPATH")
-                                                           ":build/classes"
-                                                           ":build/test-classes")
-                               "-Dtest.resources.dir=src/test/resources"
-                               "org.testng.TestNG" "-testclass"
-                               class)))
-             (system* "ant" "compile-tests")
-             (and
-               (test "org.iq80.snappy.SnappyFramedStreamTest")
-               (test "org.iq80.snappy.SnappyStreamTest"))))
+               (invoke "java" "-cp" (string-append (getenv "CLASSPATH")
+                                                   ":build/classes"
+                                                   ":build/test-classes")
+                       "-Dtest.resources.dir=src/test/resources"
+                       "org.testng.TestNG" "-testclass"
+                       class))
+             (invoke "ant" "compile-tests")
+             (test "org.iq80.snappy.SnappyFramedStreamTest")
+             (test "org.iq80.snappy.SnappyStreamTest")))
          (add-before 'build 'remove-hadoop-dependency
            (lambda _
              ;; We don't have hadoop
@@ -1425,22 +1439,22 @@ It can be used as a replacement for the Apache @code{CBZip2InputStream} /
        (modify-phases %standard-phases
          (replace 'configure
            (lambda* (#:key system outputs #:allow-other-keys)
-             (zero? (system* "cp"
-                             (let ((system ,(or (%current-target-system)
-                                                (%current-system))))
-                               (cond
-                                ((string-prefix? "x86_64" system)
-                                 "makefile.linux_amd64_asm")
-                                ((string-prefix? "i686" system)
-                                 "makefile.linux_x86_asm_gcc_4.X")
-                                (else
-                                 "makefile.linux_any_cpu_gcc_4.X")))
-                             "makefile.machine"))))
+             (invoke "cp"
+                     (let ((system ,(or (%current-target-system)
+                                        (%current-system))))
+                       (cond
+                        ((string-prefix? "x86_64" system)
+                         "makefile.linux_amd64_asm")
+                        ((string-prefix? "i686" system)
+                         "makefile.linux_x86_asm_gcc_4.X")
+                        (else
+                         "makefile.linux_any_cpu_gcc_4.X")))
+                     "makefile.machine")))
          (replace 'check
            (lambda _
-             (and (zero? (system* "make" "test"))
-                  (zero? (system* "make" "test_7z"))
-                  (zero? (system* "make" "test_7zr"))))))))
+             (invoke "make" "test")
+             (invoke "make" "test_7z")
+             (invoke "make" "test_7zr"))))))
     (inputs
      (let ((system (or (%current-target-system)
                        (%current-system))))
@@ -1473,7 +1487,9 @@ handles the 7z format which features very high compression ratios.")
                 (modules '((guix build utils)))
                 (snippet
                  ;; Remove pre-compiled object.
-                 '(delete-file "gzstream.o"))))
+                 '(begin
+                    (delete-file "gzstream.o")
+                    #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -1510,7 +1526,9 @@ functionality in a C++ iostream.")
        (modules '((guix build utils)))
        (snippet
         ;; Delete irrelevant pre-compiled binaries.
-        '(for-each delete-file (find-files "." "\\.exe$")))))
+        '(begin
+           (for-each delete-file (find-files "." "\\.exe$"))
+           #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -1619,7 +1637,7 @@ or junctions, and always follows hard links.")
              #t))
          (replace 'check
            (lambda _
-            (zero? (system* "./run-tests.sh")))))))
+             (invoke "./run-tests.sh"))))))
     (home-page "https://github.com/twogood/unshield")
     (synopsis "Extract CAB files from InstallShield installers")
     (description
@@ -1685,7 +1703,7 @@ speed.")
          (delete 'configure)            ; no configure script
          (add-before 'check 'compile-tests
            (lambda* (#:key make-flags #:allow-other-keys)
-             (zero? (apply system* "make" "tests" make-flags))))
+             (apply invoke "make" "tests" make-flags)))
          (add-after 'install 'install-documentation
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -1729,14 +1747,11 @@ the actual decompression, the other input and output.")
                       (list "-f" "unix/Makefile"
                             (string-append "prefix=" out)
                             (string-append "MANDIR=" out "/share/man/man1")))
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
          (replace 'build
            (lambda* (#:key (make-flags '()) #:allow-other-keys)
-             (zero? (apply system* "make" "generic_gcc" make-flags))))
+             (apply invoke "make" "generic_gcc" make-flags)))
          (delete 'configure))))
     (home-page "http://www.info-zip.org/Zip.html")
     (synopsis "Compression and file packing utility")
@@ -1758,7 +1773,6 @@ Compression ratios of 2:1 to 3:1 are common for text files.")
 (define-public unzip
   (package (inherit zip)
     (name "unzip")
-    (replacement unzip/fixed)
     (version "6.0")
     (source
      (origin
@@ -1786,13 +1800,20 @@ Compression ratios of 2:1 to 3:1 are common for text files.")
     (arguments
      `(#:phases (modify-phases %standard-phases
                   (delete 'configure)
+                  (add-after 'unpack 'fortify
+                    (lambda _
+                      ;; Mitigate CVE-2018-1000035, an exploitable buffer overflow.
+                      ;; This environment variable is recommended in 'unix/Makefile'
+                      ;; for passing flags to the C compiler.
+                      (setenv "LOCAL_UNZIP" "-D_FORTIFY_SOURCE=1")
+                      #t))
                   (replace 'build
                     (lambda* (#:key make-flags #:allow-other-keys)
-                      (zero? (apply system* "make"
-                                    `("-j" ,(number->string
-                                             (parallel-job-count))
-                                      ,@make-flags
-                                      "generic_gcc"))))))
+                      (apply invoke "make"
+                             `("-j" ,(number->string
+                                      (parallel-job-count))
+                               ,@make-flags
+                               "generic_gcc")))))
        #:make-flags (list "-f" "unix/Makefile"
                           (string-append "prefix=" %output)
                           (string-append "MANDIR=" %output "/share/man/man1"))))
@@ -1809,20 +1830,6 @@ recreates the stored directory structure by default.")
     (license (license:non-copyleft "file://LICENSE"
                                    "See LICENSE in the distribution."))))
 
-(define unzip/fixed
-  (package/inherit unzip
-    (arguments
-      (substitute-keyword-arguments (package-arguments unzip)
-        ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'unpack 'fortify
-               (lambda _
-                 ;; Mitigate CVE-2018-1000035, an exploitable buffer overflow.
-                 ;; This environment variable is recommended in 'unix/Makefile'
-                 ;; for passing flags to the C compiler.
-                 (setenv "LOCAL_UNZIP" "-D_FORTIFY_SOURCE=1")
-                 #t))))))))
-
 (define-public zziplib
   (package
     (name "zziplib")
diff --git a/gnu/packages/compton.scm b/gnu/packages/compton.scm
index 323807091a..dec9a94eba 100644
--- a/gnu/packages/compton.scm
+++ b/gnu/packages/compton.scm
@@ -67,7 +67,7 @@
          ("libdrm" ,libdrm)
          ("pkg-config" ,pkg-config)
          ("python" ,python)
-         ("xproto" ,xproto)))
+         ("xorgproto" ,xorgproto)))
       (arguments
        `(#:make-flags (list
                        "CC=gcc"
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 0f5997951c..bbd779ae4e 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -1,8 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -181,8 +182,10 @@ base compiler and using LIBC (which may be either a libc package or #f.)"
 (define (cross-gcc-snippet target)
   "Return GCC snippet needed for TARGET."
   (cond ((target-mingw? target)
-         '(copy-recursively "libstdc++-v3/config/os/mingw32-w64"
-                            "libstdc++-v3/config/os/newlib"))
+         '(begin
+            (copy-recursively "libstdc++-v3/config/os/mingw32-w64"
+                              "libstdc++-v3/config/os/newlib")
+            #t))
         (else #f)))
 
 (define* (cross-gcc target
@@ -291,8 +294,8 @@ target that libc."
               (setenv "ARCH" ,(system->linux-architecture target))
               (format #t "`ARCH' set to `~a' (cross compiling)~%" (getenv "ARCH"))
 
-              (and (zero? (system* "make" ,(system->defconfig target)))
-                   (zero? (system* "make" "mrproper" "headers_check"))))
+              (invoke "make" ,(system->defconfig target))
+              (invoke "make" "mrproper" "headers_check"))
             ,phases))))
       (native-inputs `(("cross-gcc" ,xgcc)
                        ("cross-binutils" ,xbinutils)
@@ -314,14 +317,14 @@ target that libc."
        `(#:modules ((guix build gnu-build-system)
                     (guix build utils)
                     (srfi srfi-26))
-         #:phases (alist-cons-before
-                   'configure 'set-cross-headers-path
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     (let* ((mach (assoc-ref inputs "cross-gnumach-headers"))
-                            (cpath (string-append mach "/include")))
-                       (for-each (cut setenv <> cpath)
-                                 ',%gcc-cross-include-paths)))
-                   %standard-phases)
+         #:phases (modify-phases %standard-phases
+                    (add-before 'configure 'set-cross-headers-path
+                      (lambda* (#:key inputs #:allow-other-keys)
+                        (let* ((mach (assoc-ref inputs "cross-gnumach-headers"))
+                               (cpath (string-append mach "/include")))
+                          (for-each (cut setenv <> cpath)
+                                    ',%gcc-cross-include-paths)
+                          #t))))
          #:configure-flags (list ,(string-append "--target=" target))
          ,@(package-arguments mig)))
 
@@ -352,16 +355,16 @@ target that libc."
                         (srfi srfi-26))
              ,@(package-arguments glibc/hurd-headers))
          ((#:phases phases)
-          `(alist-cons-before
-            'pre-configure 'set-cross-headers-path
-            (lambda* (#:key inputs #:allow-other-keys)
-              (let* ((mach (assoc-ref inputs "gnumach-headers"))
-                     (hurd (assoc-ref inputs "hurd-headers"))
-                     (cpath (string-append mach "/include:"
-                                           hurd "/include")))
-                (for-each (cut setenv <> cpath)
-                          ',%gcc-cross-include-paths)))
-            ,phases))))
+          `(modify-phases ,phases
+             (add-before 'pre-configure 'set-cross-headers-path
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let* ((mach (assoc-ref inputs "gnumach-headers"))
+                        (hurd (assoc-ref inputs "hurd-headers"))
+                        (cpath (string-append mach "/include:"
+                                              hurd "/include")))
+                   (for-each (cut setenv <> cpath)
+                             ',%gcc-cross-include-paths)
+                   #t)))))))
 
       (propagated-inputs `(("gnumach-headers" ,xgnumach-headers)
                            ("hurd-headers" ,xhurd-headers)))
@@ -382,14 +385,14 @@ target that libc."
                       (srfi srfi-26))
            ,@(package-arguments hurd-minimal))
          ((#:phases phases)
-          `(alist-cons-before
-            'configure 'set-cross-headers-path
-            (lambda* (#:key inputs #:allow-other-keys)
-              (let* ((glibc-headers (assoc-ref inputs "cross-glibc-hurd-headers"))
-                    (cpath (string-append glibc-headers "/include")))
-                (for-each (cut setenv <> cpath)
-                          ',%gcc-cross-include-paths)))
-            ,phases))))
+          `(modify-phases ,phases
+             (add-before 'configure 'set-cross-headers-path
+               (lambda* (#:key inputs #:allow-other-keys)
+                 (let* ((glibc-headers (assoc-ref inputs "cross-glibc-hurd-headers"))
+                        (cpath (string-append glibc-headers "/include")))
+                   (for-each (cut setenv <> cpath)
+                             ',%gcc-cross-include-paths)
+                   #t)))))))
 
       (inputs `(("cross-glibc-hurd-headers" ,xglibc/hurd-headers)))
 
@@ -456,17 +459,16 @@ XBINUTILS and the cross tool chain."
               `(cons ,(string-append "--host=" target)
                    ,flags))
              ((#:phases phases)
-              `(alist-cons-before
-                'configure 'set-cross-kernel-headers-path
-                (lambda* (#:key inputs #:allow-other-keys)
-                  (let* ((kernel (assoc-ref inputs "kernel-headers"))
-                         (cpath (string-append kernel "/include")))
-                    (for-each (cut setenv <> cpath)
-                              ',%gcc-cross-include-paths)
-                    (setenv "CROSS_LIBRARY_PATH"
-                            (string-append kernel "/lib")) ;for Hurd's libihash
-                    #t))
-                ,phases))))
+              `(modify-phases ,phases
+                 (add-before 'configure 'set-cross-kernel-headers-path
+                   (lambda* (#:key inputs #:allow-other-keys)
+                     (let* ((kernel (assoc-ref inputs "kernel-headers"))
+                            (cpath (string-append kernel "/include")))
+                       (for-each (cut setenv <> cpath)
+                                 ',%gcc-cross-include-paths)
+                       (setenv "CROSS_LIBRARY_PATH"
+                               (string-append kernel "/lib")) ; for Hurd's libihash
+                       #t)))))))
 
           ;; Shadow the native "kernel-headers" because glibc's recipe expects the
           ;; "kernel-headers" input to point to the right thing.
diff --git a/gnu/packages/crypto.scm b/gnu/packages/crypto.scm
index f96fe04900..5b2e3c106e 100644
--- a/gnu/packages/crypto.scm
+++ b/gnu/packages/crypto.scm
@@ -183,7 +183,8 @@ OpenBSD tool of the same name.")
            (substitute* "src/crypto.cpp"
              (("argon2/argon2.h") "argon2.h"))
            (substitute* "configure.ac"
-             (("src/argon2/Makefile") ""))))
+             (("src/argon2/Makefile") ""))
+           #t))
        (sha256
         (base32
          "09yvkmbqbym3b5md4n96qc1s9sf2n8ji404hagih45rmsj49599x"))))
@@ -228,9 +229,11 @@ communication.")
          "1906254dg5hwljh0h4gyrw09ms3b57dlhjfzhfzffv50yzpkl837"))
        (modules '((guix build utils)))
        ;; Remove bundled dependencies in favour of proper inputs.
-       (snippet '(for-each delete-file-recursively
-                           (find-files "internal" "^tinyxml2-[0-9]"
-                                       #:directories? #t)))))
+       (snippet '(begin
+                   (for-each delete-file-recursively
+                             (find-files "internal" "^tinyxml2-[0-9]"
+                                         #:directories? #t))
+                   #t))))
     (build-system cmake-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)
@@ -272,8 +275,10 @@ the wrong hands.")
          "1dmgjcf7mnwc6h72xkvpaqpzxw8vmlnsmzz0s27pg0giwzm3sp0i"))
        (modules '((guix build utils)))
        ;; Create relative symbolic links instead of absolute ones to /lib/*
-       (snippet '(substitute* "Makefile" (("\\$\\(LNS\\) \\$\\(LIBDIR\\)/")
-                                          "$(LNS) ")))))
+       (snippet '(begin
+                   (substitute* "Makefile" (("\\$\\(LNS\\) \\$\\(LIBDIR\\)/")
+                                            "$(LNS) "))
+                   #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -648,12 +653,7 @@ data on your platform, so the seed itself will be as random as possible.
                ;; fat only checks for Intel optimisations
                '("--enable-fat")
                '())
-           "--disable-native") ; don't optimise at build time.
-         #:phases
-         (modify-phases %standard-phases
-           (add-after 'unpack 'bootstrap
-             (lambda _
-               (invoke "sh" "autogen.sh"))))))
+           "--disable-native")))                 ;don't optimise at build time
       (home-page "https://blake2.net/")
       (synopsis "Library implementing the BLAKE2 family of hash functions")
       (description
diff --git a/gnu/packages/cups.scm b/gnu/packages/cups.scm
index d6722702d8..a9cc3acba0 100644
--- a/gnu/packages/cups.scm
+++ b/gnu/packages/cups.scm
@@ -50,7 +50,7 @@
 (define-public cups-filters
   (package
     (name "cups-filters")
-    (version "1.17.9")
+    (version "1.20.1")
     (source(origin
               (method url-fetch)
               (uri
@@ -58,7 +58,7 @@
                               "cups-filters-" version ".tar.xz"))
               (sha256
                (base32
-                "0i7mvvnq7ayhxn1ajci8h7l3cijzwr9d50p58h0rbsh9hf63zblq"))
+                "0qix1whz5n4ijnl6d44f1v8nzkpv99wqjyrby8vx6xnpskw5hsxk"))
               (modules '((guix build utils)))
               (snippet
                ;; install backends, banners and filters to cups-filters output
@@ -79,7 +79,8 @@
                   ;; output directory, not CUPS's prefix.
                   (substitute* "configure"
                     (("\\{CUPS_DATADIR\\}/data")
-                     "{prefix}/share/cups/data"))))))
+                     "{prefix}/share/cups/data"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (list (string-append "PREFIX=" %output))
@@ -197,7 +198,8 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
            (lambda _
              (substitute* "Makedefs.in"
                (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
-               (("/bin/sh") (which "sh")))))
+               (("/bin/sh") (which "sh")))
+             #t))
          ;; Make the compressed manpages writable so that the
          ;; reset-gzip-timestamps phase does not error out.
          (add-before 'reset-gzip-timestamps 'make-manpages-writable
@@ -205,12 +207,14 @@ filters for the PDF-centric printing workflow introduced by OpenPrinting.")
              (let* ((out (assoc-ref outputs "out"))
                     (man (string-append out "/share/man")))
                (for-each (lambda (file) (chmod file #o644))
-                         (find-files man "\\.gz")))))
+                         (find-files man "\\.gz"))
+               #t)))
          (add-before 'build 'patch-tests
            (lambda _
              (substitute* "test/ippserver.c"
                (("#  else /\\* HAVE_AVAHI \\*/")
-                "#elif defined(HAVE_AVAHI)")))))))
+                "#elif defined(HAVE_AVAHI)"))
+             #t)))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
@@ -248,7 +252,8 @@ device-specific programs to convert and print many types of files.")
            (lambda _
              (substitute* "Makedefs.in"
                (("INITDIR.*=.*@INITDIR@") "INITDIR = @prefix@/@INITDIR@")
-               (("/bin/sh") (which "sh")))))
+               (("/bin/sh") (which "sh")))
+             #t))
          (add-before 'check 'patch-tests
            (lambda _
              (let ((filters (assoc-ref %build-inputs "cups-filters"))
@@ -306,7 +311,8 @@ device-specific programs to convert and print many types of files.")
                  (("cupsFileFind\\(\"cat\", \"/bin\"")
                   (string-append "cupsFileFind(\"cat\", \"" catpath "\""))
                  (("cupsFileFind\\(\"cat\", \"/bin:/usr/bin\"")
-                  (string-append "cupsFileFind(\"cat\", \"" catpath "\""))))))
+                  (string-append "cupsFileFind(\"cat\", \"" catpath "\"")))
+               #t)))
          ;; Make the compressed manpages writable so that the
          ;; reset-gzip-timestamps phase does not error out.
          (add-before 'reset-gzip-timestamps 'make-manpages-writable
@@ -314,7 +320,8 @@ device-specific programs to convert and print many types of files.")
              (let* ((out (assoc-ref outputs "out"))
                     (man (string-append out "/share/man")))
                (for-each (lambda (file) (chmod file #o644))
-                         (find-files man "\\.gz")))))
+                         (find-files man "\\.gz"))
+               #t)))
          (add-after 'install 'install-cups-filters-symlinks
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -360,7 +367,9 @@ device-specific programs to convert and print many types of files.")
                (let ((data "/share/cups/data"))
                  (delete-file-recursively (string-append out data))
                  (symlink (string-append cups-filters data)
-                          (string-append out data)))))))))
+                          (string-append out data)))
+
+               #t))))))
     (inputs
      `(("avahi" ,avahi)
        ("gnutls" ,gnutls)
@@ -381,8 +390,10 @@ device-specific programs to convert and print many types of files.")
               (modules '((guix build utils)))
               (snippet
                ;; Fix type mismatch.
-               '(substitute* "prnt/hpcups/genPCLm.cpp"
-                  (("boolean") "bool")))))
+               '(begin
+                  (substitute* "prnt/hpcups/genPCLm.cpp"
+                    (("boolean") "bool"))
+                  #t))))
     (build-system gnu-build-system)
     (home-page "http://hplipopensource.com/")
     (synopsis "HP Printer Drivers")
diff --git a/gnu/packages/curl.scm b/gnu/packages/curl.scm
index 16cbdcd7df..65bc698389 100644
--- a/gnu/packages/curl.scm
+++ b/gnu/packages/curl.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Roel Janssen <roel@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -44,12 +44,13 @@
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages ssh)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages web))
 
 (define-public curl
   (package
    (name "curl")
-   (version "7.57.0")
+   (version "7.59.0")
    (replacement curl-7.60.0)
    (source (origin
             (method url-fetch)
@@ -57,7 +58,7 @@
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0y3qbjjcxhcvm1yawp3spfssjbskv0g6gyzld6ckif5pf8ygvxpm"))))
+              "1z310hrjm2vmbcpkyp81dcmj9rk127zkjyawpy2pah0nz6yslkp4"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                             ;1.2 MiB of man3 pages
@@ -66,6 +67,7 @@
              ("libidn" ,libidn)
              ("libssh2" ,libssh2)
              ("openldap" ,openldap)
+             ("nghttp2" ,nghttp2 "lib")
              ("zlib" ,zlib)))
    (native-inputs
      `(("perl" ,perl)
@@ -125,7 +127,7 @@
            ;; The top-level "make check" does "make -C tests quiet-test", which
            ;; is too quiet.  Use the "test" target instead, which is more
            ;; verbose.
-           (zero? (system* "make" "-C" "tests" "test")))))))
+           (invoke "make" "-C" "tests" "test"))))))
    (synopsis "Command line tool for transferring data with URL syntax")
    (description
     "curl is a command line tool for transferring data with URL syntax,
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 51b0d7e253..77ed2fdddc 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.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>
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013, 2017 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014, 2016 David Thompson <davet@gnu.org>
@@ -163,14 +163,14 @@ either single machines or networked clusters.")
 (define-public gdbm
   (package
     (name "gdbm")
-    (version "1.13")
+    (version "1.14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/gdbm/gdbm-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0lx201q20dvc70f8a3c9s7s18z15inlxvbffph97ngvrgnyjq9cx"))))
+                "0pxwz3jlwvglq2mrbxvrjgr8pa0aj73p3v9sxmdlj570zw0gzknd"))))
     (arguments `(#:configure-flags '("--enable-libgdbm-compat")))
     (build-system gnu-build-system)
     (home-page "http://www.gnu.org.ua/software/gdbm")
@@ -254,23 +254,22 @@ standard Go idioms.")
                  (("docdir[[:blank:]]*=.*")
                   (string-append "docdir = " doc "/share/doc/bdb")))
 
-               (zero?
-                (system* "./dist/configure"
-                         (string-append "--prefix=" out)
-                         (string-append "CONFIG_SHELL=" (which "bash"))
-                         (string-append "SHELL=" (which "bash"))
+               (invoke "./dist/configure"
+                       (string-append "--prefix=" out)
+                       (string-append "CONFIG_SHELL=" (which "bash"))
+                       (string-append "SHELL=" (which "bash"))
 
-                         ;; Remove 7 MiB of .a files.
-                         "--disable-static"
+                       ;; Remove 7 MiB of .a files.
+                       "--disable-static"
 
-                         ;; The compatibility mode is needed by some packages,
-                         ;; notably iproute2.
-                         "--enable-compat185"
+                       ;; The compatibility mode is needed by some packages,
+                       ;; notably iproute2.
+                       "--enable-compat185"
 
-                         ;; The following flag is needed so that the inclusion
-                         ;; of db_cxx.h into C++ files works; it leads to
-                         ;; HAVE_CXX_STDHEADERS being defined in db_cxx.h.
-                         "--enable-cxx"))))))))
+                       ;; The following flag is needed so that the inclusion
+                       ;; of db_cxx.h into C++ files works; it leads to
+                       ;; HAVE_CXX_STDHEADERS being defined in db_cxx.h.
+                       "--enable-cxx")))))))
     (synopsis "Berkeley database")
     (description
      "Berkeley DB is an embeddable database allowing developers the choice of
@@ -308,28 +307,27 @@ SQL, Key/Value, XML/XQuery or Java Object storage for their data model.")
                  (("docdir[[:blank:]]*=.*")
                   (string-append "docdir = " doc "/share/doc/bdb")))
 
-               (zero?
-                (system* "./dist/configure"
-                         (string-append "--prefix=" out)
-                         (string-append "CONFIG_SHELL=" (which "bash"))
-                         (string-append "SHELL=" (which "bash"))
+               (invoke "./dist/configure"
+                       (string-append "--prefix=" out)
+                       (string-append "CONFIG_SHELL=" (which "bash"))
+                       (string-append "SHELL=" (which "bash"))
 
-                         ;; Bdb doesn't recognize aarch64 as an architecture.
-                         ,@(if (string=? "aarch64-linux" (%current-system))
-                               '("--build=aarch64-unknown-linux-gnu")
-                               '())
+                       ;; Bdb doesn't recognize aarch64 as an architecture.
+                       ,@(if (string=? "aarch64-linux" (%current-system))
+                             '("--build=aarch64-unknown-linux-gnu")
+                             '())
 
-                         ;; Remove 7 MiB of .a files.
-                         "--disable-static"
+                       ;; Remove 7 MiB of .a files.
+                       "--disable-static"
 
-                         ;; The compatibility mode is needed by some packages,
-                         ;; notably iproute2.
-                         "--enable-compat185"
+                       ;; The compatibility mode is needed by some packages,
+                       ;; notably iproute2.
+                       "--enable-compat185"
 
-                         ;; The following flag is needed so that the inclusion
-                         ;; of db_cxx.h into C++ files works; it leads to
-                         ;; HAVE_CXX_STDHEADERS being defined in db_cxx.h.
-                         "--enable-cxx"))))))))))
+                       ;; The following flag is needed so that the inclusion
+                       ;; of db_cxx.h into C++ files works; it leads to
+                       ;; HAVE_CXX_STDHEADERS being defined in db_cxx.h.
+                       "--enable-cxx")))))))))
 
 (define-public es-dump-restore
   (package
@@ -439,7 +437,8 @@ applications.")
                                 (string-append "src/third_party/" dir)))
                             '("pcre-8.41" "scons-2.5.0" "snappy-1.1.3"
                               "valgrind-3.11.0" "wiredtiger"
-                              "yaml-cpp-0.5.3" "zlib-1.2.8"))))
+                              "yaml-cpp-0.5.3" "zlib-1.2.8"))
+                  #t))
               (patches
                (list
                 (search-patch "mongodb-support-unknown-linux-distributions.patch")))))
@@ -596,7 +595,8 @@ RDBMS systems (which are deep in functionality).")
                      (substitute* "cmake/boost.cmake"
                        (("59")
                         ,(match (string-split (package-version boost) #\.)
-                           ((_ minor . _) minor))))))
+                           ((_ minor . _) minor))))
+                     #t))
                   (add-after
                    'install 'remove-extra-binaries
                    (lambda* (#:key outputs #:allow-other-keys)
@@ -682,7 +682,8 @@ Language.")
               (with-directory-excursion out
                 (for-each delete-file-recursively
                           '("data" "mysql-test" "sql-bench"
-                            "share/man/man1/mysql-test-run.pl.1")))))))))
+                            "share/man/man1/mysql-test-run.pl.1")))
+              #t))))))
     (native-inputs
      `(("bison" ,bison)
        ("perl" ,perl)))
@@ -726,10 +727,10 @@ as a drop-in replacement of MySQL.")
                        #t))
          (add-after 'build 'build-contrib
            (lambda _
-             (zero? (system* "make" "-C" "contrib"))))
+             (invoke "make" "-C" "contrib")))
          (add-after 'install 'install-contrib
            (lambda _
-             (zero? (system* "make" "-C" "contrib" "install")))))))
+             (invoke "make" "-C" "contrib" "install"))))))
     (inputs
      `(("readline" ,readline)
        ("libuuid" ,util-linux)
@@ -1007,7 +1008,7 @@ for example from a shell script.")
 (define-public sqlite
   (package
    (name "sqlite")
-   (version "3.21.0")
+   (version "3.23.0")
    (source (origin
             (method url-fetch)
             (uri (let ((numeric-version
@@ -1019,11 +1020,11 @@ for example from a shell script.")
                                             (map (cut string-pad <> 2 #\0)
                                                  other-digits))
                                            6 #\0))))))
-                   (string-append "https://sqlite.org/2017/sqlite-autoconf-"
+                   (string-append "https://sqlite.org/2018/sqlite-autoconf-"
                                   numeric-version ".tar.gz")))
             (sha256
              (base32
-              "1qxvzdjwzw6k0kqjfabj86rnq87xdbwbca7laxxdhnh0fmkm3pfp"))))
+              "0jbf78g3cm5wq77k7sfg8fb6rz44hnp9hs7p5d66fwd000c1lwdp"))))
    (build-system gnu-build-system)
    (inputs `(("readline" ,readline)))
    (arguments
@@ -1628,12 +1629,7 @@ trees (LSM), for sustained throughput under random insert workloads.")
        #:configure-flags
        (list (string-append "--with-libwiredtiger-prefix="
                             (assoc-ref %build-inputs "wiredtiger")))
-       #:make-flags '("GUILE_AUTO_COMPILE=0")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (invoke "sh" "bootstrap"))))))
+       #:make-flags '("GUILE_AUTO_COMPILE=0")))
     ;; TODO: Remove microkanren.scm when we have a separate package
     ;; for it.
     (native-inputs
@@ -1941,10 +1937,12 @@ etc., and an SQL engine for performing simple SQL queries.")
               (modules '((guix build utils)))
               (snippet
                ;; Delete bundled lmdb source files.
-               '(for-each delete-file (list "lib/lmdb.h"
-                                            "lib/mdb.c"
-                                            "lib/midl.c"
-                                            "lib/midl.h")))))
+               '(begin
+                  (for-each delete-file (list "lib/lmdb.h"
+                                              "lib/mdb.c"
+                                              "lib/midl.c"
+                                              "lib/midl.h"))
+                  #t))))
     (build-system python-build-system)
     (inputs
      `(("lmdb" ,lmdb)))
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index af9f9f1ae1..7cb162918a 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -300,10 +300,7 @@ down the road.")
                             (which "sh"))))))
              (add-before 'configure 'repack-make
                (lambda _
-                 (zero? (system* "tar" "cJf" "./make.tar.xz" ,make-dir))))
-             (add-after 'unpack 'bootstrap
-               (lambda _
-                 (zero? (system* "autoreconf" "-vfi"))))))))
+                 (zero? (system* "tar" "cJf" "./make.tar.xz" ,make-dir))))))))
       (home-page "https://github.com/losalamos/stress-make")
       (synopsis "Expose race conditions in Makefiles")
       (description
diff --git a/gnu/packages/dejagnu.scm b/gnu/packages/dejagnu.scm
index 05825bad8f..f2aca50f1a 100644
--- a/gnu/packages/dejagnu.scm
+++ b/gnu/packages/dejagnu.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flasher.co.il>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,11 +58,10 @@
 
                   ;; The test-suite needs to have a non-empty stdin:
                   ;; <http://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html>.
-                  (zero?
-                   (system "make check < /dev/zero")))
-                 (begin
-                   (display "test suite cannot be run, skipping\n")
-                   #t))))
+                  (unless (zero? (system "make check < /dev/zero"))
+                    (error "make check failed")))
+                 (display "test suite cannot be run, skipping\n"))
+             #t))
          (add-after 'install 'post-install
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Use the right `expect' binary.
@@ -71,7 +71,8 @@
                  (("^mypath.*$" all)
                   (string-append all
                                  "export PATH="
-                                 expect "/bin:$PATH\n")))))))))
+                                 expect "/bin:$PATH\n")))
+               #t))))))
     (home-page
      "https://www.gnu.org/software/dejagnu/")
     (synopsis "GNU software testing framework")
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index 55f250182d..ec85831d64 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -63,7 +63,7 @@
                           (gz     (assoc-ref %build-inputs "gzip"))
                           (texi   (assoc-ref %build-inputs "texinfo")))
                      (setenv "PATH" (string-append gz "/bin"))
-                     (system* (string-append tar "/bin/tar") "xvf" source)
+                     (invoke (string-append tar "/bin/tar") "xvf" source)
 
                      (chdir (string-append "vera-" ,version))
                      (mkdir-p info)
@@ -71,14 +71,12 @@
 
                      ;; XXX: Use '--force' because the document is unhappy
                      ;; with Texinfo 5 (yes, documents can be unhappy.)
-                     (and (zero?
-                           (system* (string-append texi "/bin/makeinfo")
-                                    "vera.texi" "--force" "-o"
-                                    (string-append info "/vera.info")))
-                          (zero?
-                           (system* (string-append texi "/bin/makeinfo")
-                                    "vera.texi" "--force" "--html" "-o"
-                                    (string-append html "/vera.html"))))))
+                     (invoke (string-append texi "/bin/makeinfo")
+                             "vera.texi" "--force" "-o"
+                             (string-append info "/vera.info"))
+                     (invoke (string-append texi "/bin/makeinfo")
+                             "vera.texi" "--force" "--html" "-o"
+                             (string-append html "/vera.html"))))
       #:modules ((guix build utils))))
     (native-inputs `(("texinfo" ,texinfo)
                      ("tar" ,tar)
@@ -113,9 +111,9 @@ acronyms distributed as an info document.")
                      (set-path-environment-variable "PATH" '("bin")
                                                     (list tar xz))
                      (mkdir-p datadir)
-                     (zero? (system* "tar" "-C" datadir
-                                     "--strip-components=1"
-                                     "-xvf" src))))
+                     (invoke "tar" "-C" datadir
+                             "--strip-components=1"
+                             "-xvf" src)))
        #:modules ((guix build utils))))
     (native-inputs
      `(("tar" ,tar)
diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm
index 5e0cd34fdd..96fbf5a19c 100644
--- a/gnu/packages/dns.scm
+++ b/gnu/packages/dns.scm
@@ -176,7 +176,9 @@ high-volume and high-reliability applications. The name BIND stands for
               (snippet
                ;; Delete bundled libltdl. XXX: This package also bundles
                ;; a modified libevent that cannot currently be removed.
-               '(delete-file-recursively "libltdl"))))
+               '(begin
+                  (delete-file-recursively "libltdl")
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/docbook.scm b/gnu/packages/docbook.scm
index d56dc49198..1c00e56d6d 100644
--- a/gnu/packages/docbook.scm
+++ b/gnu/packages/docbook.scm
@@ -58,11 +58,12 @@
                           (dtd    (string-append out "/xml/dtd/docbook")))
                      (mkdir-p dtd)
                      (with-directory-excursion dtd
-                       (system* unzip source))
+                       (invoke unzip source))
                      (substitute* (string-append out "/xml/dtd/docbook/catalog.xml")
                        (("uri=\"") 
                         (string-append 
-                         "uri=\"file://" dtd "/")))))
+                         "uri=\"file://" dtd "/")))
+                     #t))
                  #:modules ((guix build utils))))
     (native-inputs `(("unzip" ,unzip)))
     (home-page "http://docbook.org")
@@ -127,7 +128,7 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                (dtd    (string-append (assoc-ref %outputs "out")
                                       "/xml/dtd/docbook")))
            (mkdir-p dtd)
-           (zero? (system* unzip source "-d" dtd))))))))
+           (invoke unzip source "-d" dtd)))))))
 
 (define-public docbook-xsl
   (package
@@ -154,7 +155,7 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                           (out    (assoc-ref %outputs "out"))
                           (xsl    (string-append out "/xml/xsl")))
                      (setenv "PATH" (string-append bzip2 "/bin" ":" xz "/bin"))
-                     (system* (string-append tar "/bin/tar") "xvf" source)
+                     (invoke (string-append tar "/bin/tar") "xvf" source)
 
                      (mkdir-p xsl)
                      (copy-recursively name-version
@@ -163,8 +164,9 @@ by no means limited to these applications.)  This package provides XML DTDs.")
                      (substitute* (string-append xsl "/" name-version "/catalog.xml")
                        (("rewritePrefix=\"./")
                         (string-append "rewritePrefix=\"file://" xsl "/"
-                                       name-version "/")))))
-                 #:modules ((guix build utils))))
+                                       name-version "/")))
+                     #t))
+       #:modules ((guix build utils))))
     (native-inputs `(("bzip2" ,bzip2)
                      ("xz" ,xz)
                      ("tar" ,tar)))
@@ -236,19 +238,19 @@ by no means limited to these applications.)  This package provides XML DTDs.")
        #:use-setuptools? #f
        #:tests? #f                      ;no 'test' command
        #:phases
-       (alist-cons-after
-        'wrap 'set-path
-        (lambda* (#:key inputs outputs #:allow-other-keys)
-          (let ((out (assoc-ref outputs "out")))
-            ;; dblatex executes helper programs at runtime.
-            (wrap-program (string-append out "/bin/dblatex")
-                          `("PATH" ":" prefix
-                            ,(map (lambda (input)
-                                    (string-append (assoc-ref inputs input)
-                                                   "/bin"))
-                                  '("libxslt" "texlive"
-                                    "imagemagick" "inkscape"))))))
-        %standard-phases)))
+       (modify-phases %standard-phases
+         (add-after 'wrap 'set-path
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; dblatex executes helper programs at runtime.
+               (wrap-program (string-append out "/bin/dblatex")
+                 `("PATH" ":" prefix
+                   ,(map (lambda (input)
+                           (string-append (assoc-ref inputs input)
+                                          "/bin"))
+                         '("libxslt" "texlive"
+                           "imagemagick" "inkscape"))))
+               #t))))))
     (home-page "http://dblatex.sourceforge.net")
     (synopsis "DocBook to LaTeX Publishing")
     (description
diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm
index eebd38243b..e36200bbab 100644
--- a/gnu/packages/documentation.scm
+++ b/gnu/packages/documentation.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
@@ -59,7 +59,7 @@
      `(#:tests? #f                     ; no 'check' target
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
+         (replace 'bootstrap
            (lambda _
              (invoke "autoconf")))
          ;; Some XML-related binaries are required for asciidoc's proper usage.
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm
index f77a4e1b72..eaa9ab5f51 100644
--- a/gnu/packages/elf.scm
+++ b/gnu/packages/elf.scm
@@ -98,13 +98,12 @@ Executable and Linkable Format (@dfn{ELF}).  This includes @command{ld},
              ;; variables passed as arguments.
              (let ((out (assoc-ref outputs "out")))
                (setenv "CONFIG_SHELL" (which "bash"))
-               (zero?
-                (system* "./configure"
-                         (string-append "--prefix=" out)
+               (invoke "./configure"
+                       (string-append "--prefix=" out)
                        ,@(if (string=? "aarch64-linux"
                                        (%current-system))
                              '("--host=aarch64-unknown-linux-gnu")
-                             '())))))))))
+                             '()))))))))
     (home-page "http://www.mr511.de/software/english.html")
     (synopsis "ELF object file access library")
     (description "Libelf is a C library to access ELF object files.")
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index fc7f52a327..8c28b252dc 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -156,7 +156,8 @@
                      (list line
                            "\"~/.guix-profile/include\""
                            "\"/var/guix/profiles/system/profile/include\"")
-                     " ")))))))
+                     " ")))
+                 #t))))
     (build-system glib-or-gtk-build-system)
     (arguments
      `(#:phases
@@ -166,7 +167,8 @@
              ;; Use `pwd', not `/bin/pwd'.
              (substitute* (find-files "." "^Makefile\\.in$")
                (("/bin/pwd")
-                "pwd"))))
+                "pwd"))
+             #t))
          (add-after 'install 'install-site-start
            ;; Use 'guix-emacs' in "site-start.el".  This way, Emacs packages
            ;; provided by Guix and installed in
@@ -542,7 +544,7 @@ operations.")
                 (source   (assoc-ref %build-inputs "source"))
                 (lisp-dir (string-append %output "/share/emacs/site-lisp")))
            (setenv "PATH" PATH)
-           (system* tar "xvf" source)
+           (invoke tar "xvf" source)
 
            (install-file (string-append ,name "-" ,version "/magit-svn.el")
                          lisp-dir)
@@ -552,7 +554,8 @@ operations.")
                (emacs-generate-autoloads ,name lisp-dir)
                (setenv "EMACSLOADPATH"
                        (string-append ":" magit ":" dash ":" with-editor))
-               (emacs-batch-eval '(byte-compile-file "magit-svn.el"))))))))
+               (emacs-batch-eval '(byte-compile-file "magit-svn.el"))))
+           #t))))
     (home-page "https://github.com/magit/magit-svn")
     (synopsis "Git-SVN extension to Magit")
     (description
@@ -882,21 +885,23 @@ provides an optional IDE-like error list.")
                 "08f9lj77jlk96grqgjsv63s2i8ywvp4wvnmgmhnslwyx2lsdxza3"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile"
-                  (("/usr/bin/install-info")
-                   ;; No need to use 'install-info' since it would create a
-                   ;; useless 'dir' file.
-                   "true")
-                  (("^INFODIR=.*")
-                   ;; Install Info files to $out/share/info, not $out/info.
-                   "INFODIR := $(PREFIX)/share/info\n")
-                  (("/site-lisp/emms")
-                   ;; Install directly in share/emacs/site-lisp, not in a
-                   ;; sub-directory.
-                   "/site-lisp")
-                  (("^all: (.*)\n" _ rest)
-                   ;; Build 'emms-print-metadata'.
-                   (string-append "all: " rest " emms-print-metadata\n"))))))
+               '(begin
+                  (substitute* "Makefile"
+                    (("/usr/bin/install-info")
+                     ;; No need to use 'install-info' since it would create a
+                     ;; useless 'dir' file.
+                     "true")
+                    (("^INFODIR=.*")
+                     ;; Install Info files to $out/share/info, not $out/info.
+                     "INFODIR := $(PREFIX)/share/info\n")
+                    (("/site-lisp/emms")
+                     ;; Install directly in share/emacs/site-lisp, not in a
+                     ;; sub-directory.
+                     "/site-lisp")
+                    (("^all: (.*)\n" _ rest)
+                     ;; Build 'emms-print-metadata'.
+                     (string-append "all: " rest " emms-print-metadata\n")))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:modules ((guix build gnu-build-system)
@@ -1056,9 +1061,11 @@ within a specified width.  It is useful for displaying long track titles.")
               (modules '((guix build utils)))
               (snippet
                ;; We don't want to build and install the PDF.
-               '(substitute* "doc/Makefile.in"
-                  (("^doc_DATA = .*$")
-                   "doc_DATA =\n")))))
+               '(begin
+                  (substitute* "doc/Makefile.in"
+                    (("^doc_DATA = .*$")
+                     "doc_DATA =\n"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -2821,7 +2828,8 @@ SuperCollider is a platform for audio synthesis and algorithmic composition.")
         '(begin
            (for-each delete-file '("dot-emacs.el" "Makefile"))
            (install-file "6.945-config/mit-scheme-doc.el" ".")
-           (delete-file-recursively "6.945-config")))
+           (delete-file-recursively "6.945-config")
+           #t))
        (file-name (string-append name "-" version ".tar.bz2"))
        (method url-fetch)
        (uri (string-append "http://groups.csail.mit.edu/mac/users/gjs/"
@@ -3998,7 +4006,8 @@ programming language.")
                   (substitute* "lisp/Makefile"
                     (("^\tjulia-mode.elc\\\\\n") "")
                     (("^all: \\$\\(ELC\\) ess-custom.el julia-mode.el")
-                     "all: $(ELC) ess-custom.el"))))))
+                     "all: $(ELC) ess-custom.el"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      (let ((base-directory "/share/emacs/site-lisp/guix.d/ess"))
@@ -5291,7 +5300,8 @@ mode-line.")
                   ;; warnings about a missing directory.
                   (substitute* "yasnippet.el"
                     (("^ +'yas-installed-snippets-dir\\)\\)\n")
-                     "))\n"))))))
+                     "))\n"))
+                  #t))))
     (build-system emacs-build-system)
     (home-page "https://github.com/joaotavora/yasnippet")
     (synopsis "Yet another snippet extension for Emacs")
@@ -5335,7 +5345,8 @@ abbreviation and automatically expand it into function templates.")
                                          dir)))
                        (scandir "." (lambda (fname)
                                       (and (string-match "-mode$" fname)
-                                           (directory-exists? fname)))))))))
+                                           (directory-exists? fname))))))
+           #t)))
       (home-page "https://github.com/AndreaCrotti/yasnippet-snippets")
       (synopsis "Collection of YASnippet snippets for many languages")
       (description
@@ -7299,7 +7310,7 @@ for external literate programming tools for exporting, weaving and tangling.")
          (setenv "PATH" (string-append
                          (assoc-ref %build-inputs "tar") "/bin" ":"
                          (assoc-ref %build-inputs "gzip") "/bin"))
-         (system* "tar" "xvf" (assoc-ref %build-inputs "source"))
+         (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
          (chdir (string-append "eless" "-" ,version))
          (substitute* "eless" (("/usr/bin/env bash")
                                (string-append (assoc-ref %build-inputs "bash")
@@ -7666,7 +7677,7 @@ Features:
          (setenv "PATH" (string-append
                          (assoc-ref %build-inputs "tar") "/bin" ":"
                          (assoc-ref %build-inputs "gzip") "/bin"))
-         (system* "tar" "xvf" (assoc-ref %build-inputs "source"))
+         (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
          (chdir (string-append ,name "-" ,version))
          ;; Patch shebangs
          (substitute* "epipe"
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 9e91ef49df..4caf29437f 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -251,7 +251,8 @@ library variant NEWLIB."
            (match %build-inputs
              (((names . directories) ...)
               (union-build (assoc-ref %outputs "out")
-                           directories))))))
+                           directories)
+              #t)))))
       (propagated-inputs
        `(("binutils" ,(cross-binutils "arm-none-eabi"))
          ("libstdc++" ,(make-libstdc++-arm-none-eabi xgcc newlib-with-xgcc))
@@ -610,7 +611,7 @@ micro-controller.")
     (version (package-version propeller-gcc))
     (source #f)
     (build-system trivial-build-system)
-    (arguments '(#:builder (mkdir %output)))
+    (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
      `(("binutils" ,propeller-binutils)
        ("libc" ,proplib)
@@ -785,7 +786,7 @@ two-thirds of the opcodes in the P2 instruction set.")
     (version (package-version propeller-gcc))
     (source #f)
     (build-system trivial-build-system)
-    (arguments '(#:builder (mkdir %output)))
+    (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
      `(("toolchain" ,propeller-toolchain)
        ("openspin" ,openspin)
@@ -830,7 +831,7 @@ simulator.")
              (lambda _
                (substitute* "opcodes/Makefile.in"
                  (("guile\\{,-\\}1.8") "guile"))
-               (zero? (system* "which" "guile")))))))
+               (invoke "which" "guile"))))))
       (native-inputs
        `(("cgen"
           ,(origin
diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index c354386bd7..48f359c5bf 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -418,11 +418,13 @@ Super Game Boy, BS-X Satellaview, and Sufami Turbo.")
               (modules '((guix build utils)))
               (snippet
                ;; Make sure we don't use the bundled software.
-               '(for-each
-                 (lambda (subdir)
-                   (let ((lib-subdir (string-append "src/third-party/" subdir)))
-                     (delete-file-recursively lib-subdir)))
-                 '("libpng" "lzma" "sqlite3" "zlib")))))
+               '(begin
+                  (for-each
+                   (lambda (subdir)
+                     (let ((lib-subdir (string-append "src/third-party/" subdir)))
+                       (delete-file-recursively lib-subdir)))
+                   '("libpng" "lzma" "sqlite3" "zlib"))
+                  #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no "test" target
@@ -1015,7 +1017,8 @@ towards a working Mupen64Plus for casual users.")
               (snippet
                '(begin
                   ;; We don't need libretro for the GNU/Linux build.
-                  (delete-file-recursively "libretro")))))
+                  (delete-file-recursively "libretro")
+                  #t))))
     (build-system cmake-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index f16ef2cebd..13d24997ed 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -329,7 +329,9 @@ featuring various improvements and bug fixes.")))
                 "0x37vfp6k0d2z3gnig0hbicvi0jp8v267xjnn3z8jdllpiaa6p3k"))
               (snippet
                ;; Remove a non-free file.
-               '(delete-file "doc/psfig.sty"))
+               '(begin
+                  (delete-file "doc/psfig.sty")
+                  #t))
               (patches (search-patches "fastcap-mulSetup.patch"
                                        "fastcap-mulGlobal.patch"))))
     (build-system gnu-build-system)
@@ -1096,7 +1098,8 @@ bindings for Python, Java, OCaml and more.")
                   (substitute* "libr/parse/p/Makefile"
                     (("LDFLAGS\\+=") "LDFLAGS+=-Wl,-rpath=$(LIBDIR) "))
                   (substitute* "libr/bin/p/Makefile"
-                    (("LDFLAGS\\+=") "LDFLAGS+=-Wl,-rpath=$(LIBDIR) "))))))
+                    (("LDFLAGS\\+=") "LDFLAGS+=-Wl,-rpath=$(LIBDIR) "))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f; tests require git and network access
@@ -1201,7 +1204,8 @@ high-performance parallel differential evolution (DE) optimization algorithm.")
                     (("src/ciderlib/input/Makefile") "")
                     (("src/ciderlib/support/Makefile") "")
                     (("src/ciderlib/oned/Makefile") "")
-                    (("src/ciderlib/twod/Makefile") ""))))))
+                    (("src/ciderlib/twod/Makefile") ""))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(;; No tests for libngspice exist.
diff --git a/gnu/packages/enlightenment.scm b/gnu/packages/enlightenment.scm
index 54205978a5..d749ada9f0 100644
--- a/gnu/packages/enlightenment.scm
+++ b/gnu/packages/enlightenment.scm
@@ -78,7 +78,6 @@
      `(("pkg-config" ,pkg-config)))
     (inputs
      `(("alsa-lib" ,alsa-lib)
-       ("compositeproto" ,compositeproto)
        ("curl" ,curl)
        ("ghostscript" ,ghostscript)
        ("giflib" ,giflib)
@@ -110,12 +109,10 @@
        ("openjpeg" ,openjpeg-1)
        ("poppler" ,poppler)
        ("printproto" ,printproto)
-       ("scrnsaverproto" ,scrnsaverproto)
        ("wayland-protocols" ,wayland-protocols)
-       ("xextproto" ,xextproto)
        ("xinput" ,xinput)
        ("xpr" ,xpr)
-       ("xproto" ,xproto)))
+       ("xorgproto" ,xorgproto)))
     (propagated-inputs
      ;; All these inputs are in package config files in section
      ;; Requires.private.
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 19597f0519..031df7faa7 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -137,7 +137,8 @@ TrueType (TTF) files.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((conf-dir (string-append (assoc-ref outputs "out")
                                             "/share/fontconfig/conf.avail")))
-               (copy-recursively "fontconfig" conf-dir)))))))
+               (copy-recursively "fontconfig" conf-dir)
+               #t))))))
     (home-page "https://dejavu-fonts.github.io/")
     (synopsis "Vera font family derivate with additional characters")
     (description "DejaVu provides an expanded version of the Vera font family
@@ -406,14 +407,15 @@ for long periods of working with computers (8 or more hours per day).")
                                     (string-append (assoc-ref %outputs out)
                                                    "/share/fonts/opentype")))))
            (setenv "PATH" PATH)
-           (system* tar "xvf" (assoc-ref %build-inputs "source"))
+           (invoke tar "xvf" (assoc-ref %build-inputs "source"))
            (chdir (string-append "source-han-sans-" ,version "R"))
            (install-opentype-fonts "OTC" "out")
            (install-opentype-fonts "SubsetOTF/CN" "cn")
            (install-opentype-fonts "SubsetOTF/JP" "jp")
            (install-opentype-fonts "SubsetOTF/KR" "kr")
            (install-opentype-fonts "SubsetOTF/TW" "tw")
-           (for-each delete-file (find-files %output "\\.zip$"))))))
+           (for-each delete-file (find-files %output "\\.zip$"))
+           #t))))
     (native-inputs
      `(("gzip" ,gzip)
        ("tar" ,tar)))
@@ -948,7 +950,7 @@ vector graphics.")
                (src-pcf-dir (string-append "tamzen-font-Tamzen-"
                                             ,version "/pcf")))
            (setenv "PATH" PATH)
-           (system* tar "xvf" (assoc-ref %build-inputs "source"))
+           (invoke tar "xvf" (assoc-ref %build-inputs "source"))
            (mkdir-p font-dir)
            (mkdir-p psf-dir)
            (chdir src-pcf-dir)
@@ -1167,7 +1169,7 @@ itself."))))
                          (otf-dir (string-append %output
                                                  "/share/fonts/opentype")))
                      (setenv "PATH" PATH)
-                     (system* "unzip" (assoc-ref %build-inputs "source"))
+                     (invoke "unzip" (assoc-ref %build-inputs "source"))
 
                      (mkdir-p ttf-dir)
                      (mkdir-p otf-dir)
@@ -1176,7 +1178,8 @@ itself."))))
                                (find-files "." "\\.ttf$"))
                      (for-each (lambda (otf)
                                  (install-file otf otf-dir))
-                               (find-files "." "\\.otf$"))))))
+                               (find-files "." "\\.otf$"))
+                     #t))))
     (native-inputs `(("unzip" ,unzip)))
     (home-page "http://www.impallari.com/dosis")
     (synopsis "Very simple, rounded, sans serif family")
diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm
index 27c88f9331..f7dc2e7634 100644
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@ -28,6 +28,7 @@
   #:use-module (gnu packages compression)
   #:use-module (gnu packages check)
   #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages autotools)
@@ -53,14 +54,14 @@
 (define-public freetype
   (package
    (name "freetype")
-   (version "2.8.1")
-   (replacement freetype/fixed)
+   (version "2.9")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://savannah/freetype/freetype-"
                                 version ".tar.bz2"))
             (sha256 (base32
-                     "0y3xrimgp0k39gwq1vdi7b7wjy0z9fhwmzafisxqfardw015yhz5"))))
+                     "12jcdz1in20yaa55izxalg3hm1pf7nydfrzps5bzb4zgihybmzz6"))
+            (patches (search-patches "freetype-CVE-2018-6942.patch"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("pkg-config" ,pkg-config)))
@@ -79,13 +80,6 @@ anti-aliased glyph bitmap generation with 256 gray levels.")
    (license license:freetype)           ; some files have other licenses
    (home-page "https://www.freetype.org/")))
 
-(define freetype/fixed
-  (package/inherit freetype
-                   (source
-                    (origin
-                      (inherit (package-source freetype))
-                      (patches (search-patches "freetype-CVE-2018-6942.patch"))))))
-
 (define-public ttfautohint
   (package
     (name "ttfautohint")
@@ -238,18 +232,19 @@ fonts to/from the WOFF2 format.")
 (define-public fontconfig
   (package
    (name "fontconfig")
-   (version "2.12.6")
+   (version "2.13.0")
    (source (origin
             (method url-fetch)
             (uri (string-append
                    "https://www.freedesktop.org/software/fontconfig/release/fontconfig-"
                    version ".tar.bz2"))
-            (patches (search-patches "fontconfig-remove-debug-printf.patch"))
             (sha256 (base32
-                     "05zh65zni11kgnhg726gjbrd55swspdvhqbcnj5a5xh8gn03036g"))))
+                     "1fgf28zgsqh7x6dw30n6zi9z679gx6dyfyahp55z7dsm454yipci"))))
    (build-system gnu-build-system)
+   ;; In Requires or Requires.private of fontconfig.pc.
    (propagated-inputs `(("expat" ,expat)
-                        ("freetype" ,freetype)))
+                        ("freetype" ,freetype)
+                        ("libuuid" ,util-linux)))
    (inputs `(("gs-fonts" ,gs-fonts)))
    (native-inputs
     `(("gperf" ,gperf)
@@ -274,9 +269,9 @@ fonts to/from the WOFF2 format.")
         (replace 'install
                  (lambda _
                    ;; Don't try to create /var/cache/fontconfig.
-                   (zero? (system* "make" "install"
-                                   "fc_cachedir=$(TMPDIR)"
-                                   "RUN_FC_CACHE_TEST=false")))))))
+                   (invoke "make" "install"
+                           "fc_cachedir=$(TMPDIR)"
+                           "RUN_FC_CACHE_TEST=false"))))))
    (synopsis "Library for configuring and customizing font access")
    (description
     "Fontconfig can discover new fonts when installed automatically;
@@ -378,16 +373,15 @@ applications should be.")
 (define-public graphite2
   (package
    (name "graphite2")
-   (version "1.3.10")
+   (version "1.3.11")
    (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/silnrsi/graphite/releases/"
                            "download/" version "/" name "-" version ".tgz"))
-       (patches (search-patches "graphite2-ffloat-store.patch"))
        (sha256
         (base32
-         "1bm1rl2ww0m8rvmknh8fpajyz9xqv43qs9qrzf7xd5gaz6rf7zch"))))
+         "0z5dcgh8r3678awq6fb8igik7xmar5m6z9xxwpkkhradhk8jxfds"))))
    (build-system cmake-build-system)
    (native-inputs
     `(("python" ,python-2) ; because of "import imap" in tests
@@ -495,11 +489,6 @@ smooth contours with constant curvature at the spline joins.")
     (native-inputs `(("autoconf" ,autoconf)
                      ("automake" ,automake)
                      ("libtool" ,libtool)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _ (zero? (system* "autoreconf" "-vi")))))))
     (synopsis "Unicode names and annotation list")
     (description
      "LibUniNamesList holds www.unicode.org Nameslist.txt data which can be
@@ -561,7 +550,8 @@ definitions.")
                           "libxml2" "zlib" "libspiro" "freetype"
                           "pango" "cairo" "fontconfig")))
                 ;; Checks for potrace program at runtime
-                `("PATH" ":" prefix (,potrace)))))))
+                `("PATH" ":" prefix (,potrace)))
+              #t))))
 
       ;; Skip test 40 "FontForge .sfd file open check" to work around
       ;; <https://github.com/fontforge/fontforge/issues/3246>.
diff --git a/gnu/packages/fpga.scm b/gnu/packages/fpga.scm
index 60c5f96a87..0a5568a016 100644
--- a/gnu/packages/fpga.scm
+++ b/gnu/packages/fpga.scm
@@ -131,8 +131,10 @@ For synthesis, the compiler generates netlists in the desired format.")
               (file-name (string-append name "-" version "-checkout.tar.gz"))
               (modules '((guix build utils)))
               (snippet
-                '(substitute* "Makefile"
-                   (("ABCREV = .*") "ABCREV = default\n")))))
+               '(begin
+                  (substitute* "Makefile"
+                    (("ABCREV = .*") "ABCREV = default\n"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 57af63cfc2..9a01c78a1d 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
@@ -38,6 +38,7 @@
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (gnu packages)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
@@ -236,6 +237,7 @@ the freedesktop.org XDG Base Directory specification.")
               (sha256
                (base32
                 "1qcxian48z2dj5gfmp7brrngdydqf2jm00f4rjr5sy1myh8fy931"))
+              (patches (search-patches "elogind-glibc-2.27.patch"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -243,7 +245,8 @@ the freedesktop.org XDG Base Directory specification.")
                   (substitute* "Makefile.am"
                     ;; Avoid validation against DTD because the DTDs for
                     ;; both doctype 4.2 and 4.5 are needed.
-                    (("XSLTPROC_FLAGS = ") "XSLTPROC_FLAGS = --novalid"))))))
+                    (("XSLTPROC_FLAGS = ") "XSLTPROC_FLAGS = --novalid"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ;FIXME: "make check" in the "po" directory fails.
@@ -274,11 +277,12 @@ the freedesktop.org XDG Base Directory specification.")
              ;; Fix compilation with glibc >= 2.26, which removed xlocale.h.
              ;; This can be removed for elogind 234.
              (substitute* "src/basic/parse-util.c"
-               (("xlocale\\.h") "locale.h"))))
-         (add-before 'configure 'autogen
+               (("xlocale\\.h") "locale.h"))
+             #t))
+         (replace 'bootstrap
            (lambda _
-             (and (zero? (system* "intltoolize" "--force" "--automake"))
-                  (zero? (system* "autoreconf" "-vif")))))
+             (invoke "intltoolize" "--force" "--automake")
+             (invoke "autoreconf" "-vif")))
          (add-before 'build 'fix-service-file
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Fix the file name of the 'elogind' binary in the D-Bus
@@ -286,7 +290,8 @@ the freedesktop.org XDG Base Directory specification.")
              (substitute* "src/login/org.freedesktop.login1.service"
                (("^Exec=.*")
                 (string-append "Exec=" (assoc-ref %outputs "out")
-                               "/libexec/elogind/elogind\n")))))
+                               "/libexec/elogind/elogind\n")))
+             #t))
          (add-after 'install 'add-libcap-to-search-path
            (lambda* (#:key inputs outputs #:allow-other-keys)
              ;; Add a missing '-L' for libcap in libelogind.la.  See
@@ -793,7 +798,7 @@ which speak the Mobile Interface Broadband Model (MBIM) protocol.")
 (define-public libqmi
   (package
     (name "libqmi")
-    (version "1.14.2")
+    (version "1.20.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -801,8 +806,10 @@ which speak the Mobile Interface Broadband Model (MBIM) protocol.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0h009bzss4bal47nk21lyp4s3mmlcivhhaaj7r9229qvx85bi0v2"))))
+                "1d3fca477sdwbv4bsq1cl98qc8sixrzp0gqjcmjj8mlwfk9qqhi1"))))
     (build-system gnu-build-system)
+    (inputs
+     `(("libgudev" ,libgudev)))
     (native-inputs
      `(("glib:bin" ,glib "bin") ; for glib-mkenums
        ("pkg-config" ,pkg-config)
diff --git a/gnu/packages/ftp.scm b/gnu/packages/ftp.scm
index 7a52af4033..cb837e554e 100644
--- a/gnu/packages/ftp.scm
+++ b/gnu/packages/ftp.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -112,7 +112,8 @@ reliability in mind.")
                   ;; This is free software, avoid any confusion.
                   (substitute* (find-files "." "\\.c$")
                     (("a freeware program")
-                     "free software"))))))
+                     "free software"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -156,11 +157,6 @@ FTP browser, as well as non-interactive commands such as 'ncftpput' and
      `(("automake" ,automake)
        ("autoconf" ,autoconf)
        ("gettext" ,gettext-minimal)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _ (zero? (system* "autoreconf" "-vfi")))))))
     (home-page "http://weex.sourceforge.net/")
     (synopsis "Non-interactive client for FTP synchronization")
     (description
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index bdbfda0169..be7b758f91 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -960,11 +960,6 @@ painted with a mouse.")
         (base32
          "0w0pamjc3vj0jr718hysrw8x076fq6n9rd6wcb36sn2jd0lqvi98"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _ (zero? (system* "sh" "bootstrap")))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 3e848369b7..26a77e2404 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
-;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
@@ -190,11 +190,13 @@ settings to tweak as well.")
               (modules '((guix build utils)))
               (snippet
                ;; Import cmath header for the std::pow function.
-               '(for-each (lambda (file)
-                            (substitute* file
-                              (("#include <math.h>")
-                               "#include <cmath>")))
-                          (find-files "src")))))
+               '(begin
+                  (for-each (lambda (file)
+                              (substitute* file
+                                (("#include <math.h>")
+                                 "#include <cmath>")))
+                            (find-files "src"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
@@ -684,9 +686,11 @@ watch your CPU playing while enjoying a cup of tea!")
               "151v6nign86m1a2vqz27krsccpc9m4d1jax4y43v2fa82wfj9qp0"))
             (modules '((guix build utils)))
             (snippet
-             '(substitute* "src/version.c"
-                           (("__DATE__") "")
-                           (("__TIME__") "")))))
+             '(begin
+                (substitute* "src/version.c"
+                  (("__DATE__") "")
+                  (("__TIME__") ""))
+                #t))))
    (build-system gnu-build-system)
    (arguments
     '(#:configure-flags '("--disable-cpu-opt")
@@ -918,7 +922,9 @@ can be explored and changed freely.")
        (modules '((guix build utils)))
        (snippet
         ;; Unbundle fonts.
-        '(delete-file-recursively "fonts"))))
+        '(begin
+           (delete-file-recursively "fonts")
+           #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:make-flags '("CC=gcc")
@@ -974,15 +980,15 @@ that beneath its ruins lay buried an ancient evil.")
         ;; In the future, if someone tries to make a graphical variant of
         ;; this package, they can deal with that mess themselves. :)
         '(begin
-           (for-each
-            (lambda (subdir)
-              (let ((lib-subdir (string-append "lib/" subdir)))
-                (delete-file-recursively lib-subdir)))
-            '("fonts" "icons" "sounds" "tiles"))
+           (for-each (lambda (subdir)
+                       (let ((lib-subdir (string-append "lib/" subdir)))
+                         (delete-file-recursively lib-subdir)))
+                     '("fonts" "icons" "sounds" "tiles"))
            (substitute* "lib/Makefile"
              ;; And don't try to invoke makefiles in the directories we removed
              (("gamedata customize help screens fonts tiles sounds icons user")
-              "gamedata customize help screens user"))))))
+              "gamedata customize help screens user"))
+           #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                                 ;no check target
@@ -1197,7 +1203,8 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
                                  (assoc-ref %build-inputs "bash")
                                  (assoc-ref %build-inputs "engine")
                                  (assoc-ref %build-inputs "data"))
-                         (chmod port #o777)))))
+                         (chmod port #o777)))
+                     #t))
        #:modules ((guix build utils))))
     (inputs `(("engine" ,freedink-engine)
               ("data" ,freedink-data)
@@ -1303,11 +1310,13 @@ destroy, the better your score.  The person with the highest score wins.")
                ;; We do not provide `ncurses.h' within an `ncursesw'
                ;; sub-directory, so patch the source accordingly.  See
                ;; <http://bugs.gnu.org/19018>.
-               '(for-each (lambda (file)
-                            (substitute* file
-                              (("ncursesw/ncurses.h")
-                               "ncurses.h")))
-                          (find-files "." "configure$|\\.c$")))))
+               '(begin
+                  (for-each (lambda (file)
+                              (substitute* file
+                                (("ncursesw/ncurses.h")
+                                 "ncurses.h")))
+                            (find-files "." "configure$|\\.c$"))
+                  #t))))
     (build-system gnu-build-system)
     (inputs `(("ncurses" ,ncurses)
               ("perl" ,perl)))
@@ -1454,10 +1463,11 @@ match, cannon keep, and grave-itation pit.")
                                                          "gzip")
                                               "/bin")))
                      (setenv "PATH" path)
-                     (system* tar "xvf" (assoc-ref %build-inputs "source"))
+                     (invoke tar "xvf" (assoc-ref %build-inputs "source"))
                      (chdir (string-append "minetest_game-" ,version))
                      (mkdir-p install-dir)
-                     (copy-recursively "." install-dir)))))
+                     (copy-recursively "." install-dir)
+                     #t))))
     (synopsis "Main game data for the Minetest game engine")
     (description
      "Game data for the Minetest infinite-world block sandox game.")
@@ -1995,7 +2005,9 @@ world}, @uref{http://evolonline.org, Evol Online} and
              (modules '((guix build utils)))
              (snippet
               ;; The DOS port contains proprietary software.
-              '(delete-file-recursively "os/dos"))))
+              '(begin
+                 (delete-file-recursively "os/dos")
+                 #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f              ; no "check" target
@@ -2608,18 +2620,19 @@ Red Eclipse provides fast paced and accessible gameplay.")
                           (bin     (string-append out "/bin"))
                           (doc     (string-append out
                                                   "/share/doc/grue-hunter")))
-                     (begin
-                       (copy-file tarball "grue-hunter.tar.gz")
-                       (zero? (system* gzip "-d" "grue-hunter.tar.gz"))
-                       (zero? (system* tar "xvf"  "grue-hunter.tar"))
-
-                       (mkdir-p bin)
-                       (copy-file "grue-hunter/gh.pl"
-                                  (string-append bin "/grue-hunter"))
-                       (patch-shebang (string-append bin "/grue-hunter")
-                                      (list perl))
-
-                       (install-file "grue-hunter/AGPLv3.txt" doc))))))
+                     (copy-file tarball "grue-hunter.tar.gz")
+                     (invoke gzip "-d" "grue-hunter.tar.gz")
+                     (invoke tar "xvf" "grue-hunter.tar")
+
+                     (mkdir-p bin)
+                     (copy-file "grue-hunter/gh.pl"
+                                (string-append bin "/grue-hunter"))
+                     (patch-shebang (string-append bin "/grue-hunter")
+                                    (list perl))
+
+                     (install-file "grue-hunter/AGPLv3.txt" doc)
+
+                     #t))))
     (inputs `(("perl" ,perl)
               ("tar" ,tar)
               ("gzip" ,gzip)
@@ -2845,7 +2858,8 @@ safety of the Chromium vessel.")
            (substitute* "Makefile"
              ;; Do not rely on $(GPERF) being an absolute file name
              (("\\[ -x \\$\\(GPERF\\) \\]")
-              "$(GPERF) --version >/dev/null 2>&1"))))
+              "$(GPERF) --version >/dev/null 2>&1"))
+           #t))
        (patches (search-patches "tuxpaint-stamps-path.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -2925,11 +2939,12 @@ your child be creative.")
                            (string-append
                             (assoc-ref %build-inputs "tar") "/bin" ":"
                             (assoc-ref %build-inputs "gzip") "/bin"))
-                   (system* "tar" "xvf" (assoc-ref %build-inputs "source"))
+                   (invoke "tar" "xvf" (assoc-ref %build-inputs "source"))
                    (chdir (string-append ,name "-" ,version))
                    (let ((dir (string-append %output "/share/tuxpaint/stamps")))
                      (mkdir-p dir)
-                     (copy-recursively "stamps" dir)))))
+                     (copy-recursively "stamps" dir))
+                   #t)))
     (home-page (package-home-page tuxpaint))
     (synopsis "Stamp images for Tux Paint")
     (description
@@ -4060,14 +4075,13 @@ fight against their plot and save his fellow rabbits from slavery.")
        (modules '((guix build utils)))
        (snippet
         #~(begin
-            (for-each
-             (lambda (name)
-               (let* ((dir (string-append "binaries/data/mods/" name))
-                      (file (string-append dir "/" name ".zip"))
-                      (unzip #$(file-append unzip "/bin/unzip")))
-                 (system* unzip "-d" dir file)
-                 (delete-file file)))
-             '("mod" "public"))
+            (for-each (lambda (name)
+                        (let* ((dir (string-append "binaries/data/mods/" name))
+                               (file (string-append dir "/" name ".zip"))
+                               (unzip #$(file-append unzip "/bin/unzip")))
+                          (invoke unzip "-d" dir file)
+                          (delete-file file)))
+                      '("mod" "public"))
             #t))))
     (build-system trivial-build-system)
     (native-inputs `(("tar" ,tar)
@@ -4083,7 +4097,7 @@ fight against their plot and save his fellow rabbits from slavery.")
                (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
            (setenv "PATH" xz-path)
            (mkdir out)
-           (zero? (system* tar "xvf" source "-C" out "--strip=3"))))))
+           (invoke tar "xvf" source "-C" out "--strip=3")))))
     (synopsis "Data files for 0ad")
     (description "0ad-data provides the data files required by the game 0ad.")
     (home-page "https://play0ad.com")
@@ -4302,10 +4316,12 @@ Crowther & Woods, its original authors, in 1995.  It has been known as
          "0v2qgdfpvdzd1bcbp9v8pfahj1bgczsq2d4xfhh5wg11jgjcwz03"))
        (modules '((guix build utils)))
        (snippet
-        '(substitute* '("src/music.h" "src/tSDL.h")
-           (("#elif defined(__FreeBSD__)" line)
-            (string-append
-             line " || defined(__GNUC__)"))))))
+        '(begin
+           (substitute* '("src/music.h" "src/tSDL.h")
+             (("#elif defined(__FreeBSD__)" line)
+              (string-append
+               line " || defined(__GNUC__)")))
+           #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("unzip" ,unzip)))
@@ -4645,8 +4661,6 @@ elements to achieve a simple goal in the most complex way possible.")
                                (string-append "PIONEER_DATA_DIR="
                                               %output "/share/games/pioneer"))
        #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
-                    (lambda _ (zero? (system* "sh" "bootstrap"))))
                   (add-before 'bootstrap 'fix-lua-check
                     (lambda _
                       (substitute* "configure.ac"
@@ -4790,7 +4804,8 @@ You can save humanity and get programming skills!")
                   (delete-file-recursively "bzip2")
                   (delete-file-recursively "game-music-emu")
                   (delete-file-recursively "jpeg-6b")
-                  (delete-file-recursively "zlib")))))
+                  (delete-file-recursively "zlib")
+                  #t))))
     (arguments
      '(#:tests? #f
        #:configure-flags
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
index e318993ace..487020ad3b 100644
--- a/gnu/packages/gawk.scm
+++ b/gnu/packages/gawk.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,18 +30,16 @@
 (define-public gawk
   (package
    (name "gawk")
-   (version "4.1.4")
+   (version "4.2.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gawk/gawk-" version
                                 ".tar.xz"))
             (sha256
-             (base32 "0rn2mmjxm767zliqzd67j7h2ncjn4j0321c60y9fy3grs3i89qak"))))
+             (base32 "0lam2zf3n7ak4pig8w46lhx9hzx50kj2v2yj1616mm26wy2rf4fi"))))
    (build-system gnu-build-system)
    (arguments
-    `(#:parallel-tests? #f                ; test suite fails in parallel
-
-      #:phases (modify-phases %standard-phases
+    `(#:phases (modify-phases %standard-phases
                  (add-before 'configure 'set-shell-file-name
                    (lambda* (#:key inputs #:allow-other-keys)
                      ;; Refer to the right shell.
@@ -56,7 +55,9 @@
                              '((substitute* "extension/Makefile.in"
                                  (("^.*: check-for-shared-lib-support" match)
                                   (string-append "### " match))))
-                             '()))))
+                             '())
+
+                       #t)))
 
                  (add-before 'check 'adjust-test-infrastructure
                    (lambda _
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index ba2fce6d37..5012d9a913 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Carlos Sánchez de La Lama <csanchezdll@gmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -144,11 +145,11 @@ where the OS part is overloaded to denote a specific ABI---into GCC
                (method url-fetch)
                (uri (string-append "mirror://gnu/gcc/gcc-"
                                    version "/gcc-" version ".tar.bz2"))
-               (patches (search-patches "gcc-4-compile-with-gcc-5.patch"))
                (sha256
                 (base32
                  "10k2k71kxgay283ylbbhhs51cl55zn2q38vj5pk4k950qdnirrlj"))
-               (patches (search-patches "gcc-fix-texi2pod.patch"))))
+               (patches (search-patches "gcc-4-compile-with-gcc-5.patch"
+                                        "gcc-fix-texi2pod.patch"))))
       (build-system gnu-build-system)
 
       ;; Separate out the run-time support libraries because all the
@@ -200,131 +201,131 @@ where the OS part is overloaded to denote a specific ABI---into GCC
          #:tests? #f
 
          #:phases
-         (alist-cons-before
-          'configure 'pre-configure
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((libdir ,(libdir))
-                  (libc   (assoc-ref inputs "libc")))
-              (when libc
-                ;; The following is not performed for `--without-headers'
-                ;; cross-compiler builds.
-
-                ;; Join multi-line definitions of GLIBC_DYNAMIC_LINKER* into a
-                ;; single line, to allow the next step to work properly.
-                (for-each
-                 (lambda (x)
-                   (substitute* (find-files "gcc/config"
-                                            "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$")
-                     (("(#define (GLIBC|GNU_USER)_DYNAMIC_LINKER.*)\\\\\n$" _ line)
-                      line)))
-                 '(1 2 3))
-
-                ;; Fix the dynamic linker's file name.
-                (substitute* (find-files "gcc/config"
-                                         "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$")
-                  (("#define (GLIBC|GNU_USER)_DYNAMIC_LINKER([^ \t]*).*$"
-                    _ gnu-user suffix)
-                   (format #f "#define ~a_DYNAMIC_LINKER~a \"~a\"~%"
-                           gnu-user suffix
-                           (string-append libc ,(glibc-dynamic-linker)))))
-
-                ;; Tell where to find libstdc++, libc, and `?crt*.o', except
-                ;; `crt{begin,end}.o', which come with GCC.
-                (substitute* (find-files "gcc/config"
-                                         "^gnu-user.*\\.h$")
-                  (("#define GNU_USER_TARGET_LIB_SPEC (.*)$" _ suffix)
-                   ;; Help libgcc_s.so be found (see also below.)  Always use
-                   ;; '-lgcc_s' so that libgcc_s.so is always found by those
-                   ;; programs that use 'pthread_cancel' (glibc dlopens
-                   ;; libgcc_s.so when pthread_cancel support is needed, but
-                   ;; having it in the application's RUNPATH isn't enough; see
-                   ;; <http://sourceware.org/ml/libc-help/2013-11/msg00023.html>.)
-                   ;;
-                   ;; NOTE: The '-lgcc_s' added below needs to be removed in a
-                   ;; later phase of %gcc-static.  If you change the string
-                   ;; below, make sure to update the relevant code in
-                   ;; %gcc-static package as needed.
-                   (format #f "#define GNU_USER_TARGET_LIB_SPEC \
+         (modify-phases %standard-phases
+           (add-before 'configure 'pre-configure
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((libdir ,(libdir))
+                     (libc   (assoc-ref inputs "libc")))
+                 (when libc
+                       ;; The following is not performed for `--without-headers'
+                       ;; cross-compiler builds.
+
+                       ;; Join multi-line definitions of GLIBC_DYNAMIC_LINKER* into a
+                       ;; single line, to allow the next step to work properly.
+                       (for-each
+                        (lambda (x)
+                          (substitute* (find-files "gcc/config"
+                                                   "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$")
+                            (("(#define (GLIBC|GNU_USER)_DYNAMIC_LINKER.*)\\\\\n$" _ line)
+                             line)))
+                        '(1 2 3))
+
+                       ;; Fix the dynamic linker's file name.
+                       (substitute* (find-files "gcc/config"
+                                                "^(linux|gnu|sysv4)(64|-elf|-eabi)?\\.h$")
+                         (("#define (GLIBC|GNU_USER)_DYNAMIC_LINKER([^ \t]*).*$"
+                           _ gnu-user suffix)
+                          (format #f "#define ~a_DYNAMIC_LINKER~a \"~a\"~%"
+                                  gnu-user suffix
+                                  (string-append libc ,(glibc-dynamic-linker)))))
+
+                       ;; Tell where to find libstdc++, libc, and `?crt*.o', except
+                       ;; `crt{begin,end}.o', which come with GCC.
+                       (substitute* (find-files "gcc/config"
+                                                "^gnu-user.*\\.h$")
+                         (("#define GNU_USER_TARGET_LIB_SPEC (.*)$" _ suffix)
+                          ;; Help libgcc_s.so be found (see also below.)  Always use
+                          ;; '-lgcc_s' so that libgcc_s.so is always found by those
+                          ;; programs that use 'pthread_cancel' (glibc dlopens
+                          ;; libgcc_s.so when pthread_cancel support is needed, but
+                          ;; having it in the application's RUNPATH isn't enough; see
+                          ;; <http://sourceware.org/ml/libc-help/2013-11/msg00023.html>.)
+                          ;;
+                          ;; NOTE: The '-lgcc_s' added below needs to be removed in a
+                          ;; later phase of %gcc-static.  If you change the string
+                          ;; below, make sure to update the relevant code in
+                          ;; %gcc-static package as needed.
+                          (format #f "#define GNU_USER_TARGET_LIB_SPEC \
 \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
-                           libc libc libdir suffix))
-                  (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line)
-                   (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
+                                  libc libc libdir suffix))
+                         (("#define GNU_USER_TARGET_STARTFILE_SPEC.*$" line)
+                          (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
 #define STANDARD_STARTFILE_PREFIX_2 \"\"
 ~a"
-                           libc line)))
-
-              ;; The rs6000 (a.k.a. powerpc) config in GCC does not use
-              ;; GNU_USER_* defines.  Do the above for this case.
-              (substitute*
-                  "gcc/config/rs6000/sysv4.h"
-                (("#define LIB_LINUX_SPEC (.*)$" _ suffix)
-                 (format #f "#define LIB_LINUX_SPEC \
+                                  libc line)))
+
+                       ;; The rs6000 (a.k.a. powerpc) config in GCC does not use
+                       ;; GNU_USER_* defines.  Do the above for this case.
+                       (substitute*
+                           "gcc/config/rs6000/sysv4.h"
+                         (("#define LIB_LINUX_SPEC (.*)$" _ suffix)
+                          (format #f "#define LIB_LINUX_SPEC \
 \"-L~a/lib %{!static:-rpath=~a/lib %{!static-libgcc:-rpath=~a/lib -lgcc_s}} \" ~a"
-                         libc libc libdir suffix))
-                (("#define	STARTFILE_LINUX_SPEC.*$" line)
-                 (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
+                                  libc libc libdir suffix))
+                         (("#define	STARTFILE_LINUX_SPEC.*$" line)
+                          (format #f "#define STANDARD_STARTFILE_PREFIX_1 \"~a/lib\"
 #define STANDARD_STARTFILE_PREFIX_2 \"\"
 ~a"
-                         libc line))))
-
-              ;; Don't retain a dependency on the build-time sed.
-              (substitute* "fixincludes/fixincl.x"
-                (("static char const sed_cmd_z\\[\\] =.*;")
-                 "static char const sed_cmd_z[] = \"sed\";"))
-
-              ;; Aarch64 support didn't land in GCC until the 4.8 series.
-              (when (file-exists? "gcc/config/aarch64")
-                ;; Force Aarch64 libdir to be /lib and not /lib64
-                (substitute* "gcc/config/aarch64/t-aarch64-linux"
-                  (("lib64") "lib")))
-
-              (when (file-exists? "libbacktrace")
-                ;; GCC 4.8+ comes with libbacktrace.  By default it builds
-                ;; with -Werror, which fails with a -Wcast-qual error in glibc
-                ;; 2.21's stdlib-bsearch.h.  Remove -Werror.
-                (substitute* "libbacktrace/configure"
-                  (("WARN_FLAGS=(.*)-Werror" _ flags)
-                   (string-append "WARN_FLAGS=" flags)))
-
-                (when (file-exists? "libsanitizer/libbacktrace")
-                  ;; Same in libsanitizer's bundled copy (!) found in 4.9+.
-                  (substitute* "libsanitizer/libbacktrace/Makefile.in"
-                    (("-Werror")
-                     ""))))
-
-              ;; Add a RUNPATH to libstdc++.so so that it finds libgcc_s.
-              ;; See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354>
-              ;; and <http://bugs.gnu.org/20358>.
-              (substitute* "libstdc++-v3/src/Makefile.in"
-                (("^OPT_LDFLAGS = ")
-                 "OPT_LDFLAGS = -Wl,-rpath=$(libdir) "))
-
-              ;; Move libstdc++*-gdb.py to the "lib" output to avoid a
-              ;; circularity between "out" and "lib".  (Note:
-              ;; --with-python-dir is useless because it imposes $(prefix) as
-              ;; the parent directory.)
-              (substitute* "libstdc++-v3/python/Makefile.in"
-                (("pythondir = .*$")
-                 (string-append "pythondir = " libdir "/share"
-                                "/gcc-$(gcc_version)/python\n")))
-
-              ;; Avoid another circularity between the outputs: this #define
-              ;; ends up in auto-host.h in the "lib" output, referring to
-              ;; "out".  (This variable is used to augment cpp's search path,
-              ;; but there's nothing useful to look for here.)
-              (substitute* "gcc/config.in"
-                (("PREFIX_INCLUDE_DIR")
-                 "PREFIX_INCLUDE_DIR_isnt_necessary_here"))))
-
-          (alist-cons-after
-           'configure 'post-configure
-           (lambda _
-             ;; Don't store configure flags, to avoid retaining references to
-             ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'.
-             (substitute* "Makefile"
-               (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
-                "TOPLEVEL_CONFIGURE_ARGUMENTS=\n")))
-           %standard-phases))))
+                                  libc line))))
+
+                 ;; Don't retain a dependency on the build-time sed.
+                 (substitute* "fixincludes/fixincl.x"
+                   (("static char const sed_cmd_z\\[\\] =.*;")
+                    "static char const sed_cmd_z[] = \"sed\";"))
+
+                 ;; Aarch64 support didn't land in GCC until the 4.8 series.
+                 (when (file-exists? "gcc/config/aarch64")
+                       ;; Force Aarch64 libdir to be /lib and not /lib64
+                       (substitute* "gcc/config/aarch64/t-aarch64-linux"
+                         (("lib64") "lib")))
+
+                 (when (file-exists? "libbacktrace")
+                       ;; GCC 4.8+ comes with libbacktrace.  By default it builds
+                       ;; with -Werror, which fails with a -Wcast-qual error in glibc
+                       ;; 2.21's stdlib-bsearch.h.  Remove -Werror.
+                       (substitute* "libbacktrace/configure"
+                         (("WARN_FLAGS=(.*)-Werror" _ flags)
+                          (string-append "WARN_FLAGS=" flags)))
+
+                       (when (file-exists? "libsanitizer/libbacktrace")
+                             ;; Same in libsanitizer's bundled copy (!) found in 4.9+.
+                             (substitute* "libsanitizer/libbacktrace/Makefile.in"
+                               (("-Werror")
+                                ""))))
+
+                 ;; Add a RUNPATH to libstdc++.so so that it finds libgcc_s.
+                 ;; See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=32354>
+                 ;; and <http://bugs.gnu.org/20358>.
+                 (substitute* "libstdc++-v3/src/Makefile.in"
+                   (("^OPT_LDFLAGS = ")
+                    "OPT_LDFLAGS = -Wl,-rpath=$(libdir) "))
+
+                 ;; Move libstdc++*-gdb.py to the "lib" output to avoid a
+                 ;; circularity between "out" and "lib".  (Note:
+                 ;; --with-python-dir is useless because it imposes $(prefix) as
+                 ;; the parent directory.)
+                 (substitute* "libstdc++-v3/python/Makefile.in"
+                   (("pythondir = .*$")
+                    (string-append "pythondir = " libdir "/share"
+                                   "/gcc-$(gcc_version)/python\n")))
+
+                 ;; Avoid another circularity between the outputs: this #define
+                 ;; ends up in auto-host.h in the "lib" output, referring to
+                 ;; "out".  (This variable is used to augment cpp's search path,
+                 ;; but there's nothing useful to look for here.)
+                 (substitute* "gcc/config.in"
+                   (("PREFIX_INCLUDE_DIR")
+                    "PREFIX_INCLUDE_DIR_isnt_necessary_here"))
+                 #t)))
+
+           (add-after 'configure 'post-configure
+             (lambda _
+               ;; Don't store configure flags, to avoid retaining references to
+               ;; build-time dependencies---e.g., `--with-ppl=/gnu/store/xxx'.
+               (substitute* "Makefile"
+                 (("^TOPLEVEL_CONFIGURE_ARGUMENTS=(.*)$" _ rest)
+                  "TOPLEVEL_CONFIGURE_ARGUMENTS=\n"))
+               #t)))))
 
       (native-search-paths
        ;; Use the language-specific variables rather than 'CPATH' because they
@@ -369,13 +370,15 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(for-each
-                  (lambda (dir)
-                    (substitute* (string-append "libgcc/config/"
-                                                dir "/linux-unwind.h")
-                      (("struct ucontext") "ucontext_t")))
-                  '("aarch64" "alpha" "bfin" "i386" "m68k"
-                    "pa" "sh" "tilepro" "xtensa")))))
+               '(begin
+                  (for-each
+                   (lambda (dir)
+                     (substitute* (string-append "libgcc/config/"
+                                                 dir "/linux-unwind.h")
+                       (("struct ucontext") "ucontext_t")))
+                   '("aarch64" "alpha" "bfin" "i386" "m68k"
+                     "pa" "sh" "tilepro" "xtensa"))
+                  #t))))
     (supported-systems %supported-systems)
     (inputs
      `(("isl" ,isl-0.11)
@@ -401,13 +404,15 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This is required for building with glibc-2.26.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(for-each
-                  (lambda (dir)
-                    (substitute* (string-append "libgcc/config/"
-                                                dir "/linux-unwind.h")
-                      (("struct ucontext") "ucontext_t")))
-                  '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
-                    "pa" "sh" "tilepro" "xtensa")))))
+               '(begin
+                  (for-each
+                   (lambda (dir)
+                     (substitute* (string-append "libgcc/config/"
+                                                 dir "/linux-unwind.h")
+                       (("struct ucontext") "ucontext_t")))
+                   '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
+                     "pa" "sh" "tilepro" "xtensa"))
+                  #t))))
     ;; Override inherited texinfo-5 with latest version.
     (native-inputs `(("perl" ,perl)   ;for manpages
                      ("texinfo" ,texinfo)))))
@@ -439,9 +444,11 @@ Go.  It also includes runtime support libraries for these languages.")
                ;;
                ;;   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67590
                ;;   http://cgit.openembedded.org/openembedded-core/commit/?id=f6e47aa9b12f9ab61530c40e0343f451699d9077
-               '(substitute* "libcc1/configure"
-                  (("\\$gcc_cv_objdump -T")
-                   "$OBJDUMP_FOR_TARGET -T")))))
+               '(begin
+                  (substitute* "libcc1/configure"
+                    (("\\$gcc_cv_objdump -T")
+                     "$OBJDUMP_FOR_TARGET -T"))
+                  #t))))
     (inputs
      `(("isl" ,isl)
        ,@(package-inputs gcc-4.7)))))
@@ -467,13 +474,15 @@ Go.  It also includes runtime support libraries for these languages.")
               ;; This can be removed when gcc-6.5.0 is released.
               ;; https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81712
               (snippet
-               '(for-each
-                  (lambda (dir)
-                    (substitute* (string-append "libgcc/config/"
-                                                dir "/linux-unwind.h")
-                      (("struct ucontext") "ucontext_t")))
-                  '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
-                    "pa" "sh" "tilepro" "xtensa")))))
+               '(begin
+                  (for-each
+                   (lambda (dir)
+                     (substitute* (string-append "libgcc/config/"
+                                                 dir "/linux-unwind.h")
+                       (("struct ucontext") "ucontext_t")))
+                   '("aarch64" "alpha" "bfin" "i386" "m68k" "nios2"
+                     "pa" "sh" "tilepro" "xtensa"))
+                  #t))))
     (inputs
      `(("isl" ,isl)
        ,@(package-inputs gcc-4.7)))
@@ -522,7 +531,8 @@ using compilers other than GCC."
        #:phases (alist-cons-before
                  'configure 'chdir
                  (lambda _
-                   (chdir "libstdc++-v3"))
+                   (chdir "libstdc++-v3")
+                   #t)
                  %standard-phases)
        #:configure-flags `("--disable-libstdcxx-pch"
                            ,(string-append "--with-gxx-include-dir="
@@ -769,7 +779,8 @@ as the 'native-search-paths' field."
        #:phases (modify-phases %standard-phases
                   (add-before 'configure 'chdir
                               (lambda _
-                                (chdir "libstdc++-v3")))
+                                (chdir "libstdc++-v3")
+                                #t))
                   (add-before 'configure 'set-xsl-directory
                               (lambda* (#:key inputs #:allow-other-keys)
                                 (let ((docbook (assoc-ref inputs "docbook-xsl")))
@@ -778,22 +789,23 @@ as the 'native-search-paths' field."
                                     (("@XSL_STYLE_DIR@")
                                      (string-append
                                       docbook "/xml/xsl/"
-                                      (strip-store-file-name docbook)))))))
+                                      (strip-store-file-name docbook))))
+                                  #t)))
                   (replace 'build
                            (lambda _
                              ;; XXX: There's also a 'doc-info' target, but it
                              ;; relies on docbook2X, which itself relies on
                              ;; DocBook 4.1.2, which is not really usable
                              ;; (lacks a catalog.xml.)
-                             (zero? (system* "make"
-                                             "doc-html"
-                                             "doc-man"))))
+                             (invoke "make"
+                                     "doc-html"
+                                     "doc-man")))
                   (replace 'install
                            (lambda* (#:key outputs #:allow-other-keys)
                              (let ((out (assoc-ref outputs "out")))
-                               (zero? (system* "make"
-                                               "doc-install-html"
-                                               "doc-install-man"))))))))))
+                               (invoke "make"
+                                       "doc-install-html"
+                                       "doc-install-man")))))))))
 
 (define-public libstdc++-doc-4.9
   (make-libstdc++-doc gcc-4.9))
@@ -907,9 +919,9 @@ effective code.")
                   (delete 'check)
                   (replace 'build
                            (lambda _
-                             (zero? (system* "make"
-                                             "gnu-c-manual.info"
-                                             "gnu-c-manual.html"))))
+                             (invoke "make"
+                                     "gnu-c-manual.info"
+                                     "gnu-c-manual.html")))
                   (replace 'install
                            (lambda* (#:key outputs #:allow-other-keys)
                              (let* ((out (assoc-ref outputs "out"))
diff --git a/gnu/packages/gdb.scm b/gnu/packages/gdb.scm
index ac0068f175..36ccb79d67 100644
--- a/gnu/packages/gdb.scm
+++ b/gnu/packages/gdb.scm
@@ -57,7 +57,8 @@
                    'configure 'post-configure
                    (lambda _
                      (for-each patch-makefile-SHELL
-                               (find-files "." "Makefile\\.in"))))
+                               (find-files "." "Makefile\\.in"))
+                     #t))
                   (add-after
                    'install 'remove-libs-already-in-binutils
                    (lambda* (#:key inputs outputs #:allow-other-keys)
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 2b655c22cf..4ba09f2a90 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -215,7 +215,8 @@ and driving.")
              (("^all-am: .*$")
               "all-am: Makefile $(LTLIBRARIES) $(HEADERS) geo_config.h\n")
              (("^install-data-am: .*$")
-              "install-data-am: install-includeHEADERS"))))))
+              "install-data-am: install-includeHEADERS"))
+           #t))))
     (build-system gnu-build-system)
     (inputs
      `(("libjpeg-turbo" ,libjpeg-turbo)
diff --git a/gnu/packages/gettext.scm b/gnu/packages/gettext.scm
index f14ca27810..9b45e84559 100644
--- a/gnu/packages/gettext.scm
+++ b/gnu/packages/gettext.scm
@@ -89,14 +89,17 @@
 
                (substitute* "gettext-tools/src/project-id"
                  (("/bin/pwd")
-                  "pwd"))))))
+                  "pwd"))
+
+               #t))))
         (add-before 'configure 'link-expat
          (lambda _
            ;; Gettext defaults to opening expat via dlopen on
            ;; "Linux".  Change to link directly.
            (substitute* "gettext-tools/configure"
              (("LIBEXPAT=\"-ldl\"") "LIBEXPAT=\"-ldl -lexpat\"")
-             (("LTLIBEXPAT=\"-ldl\"") "LTLIBEXPAT=\"-ldl -lexpat\"")))))
+             (("LTLIBEXPAT=\"-ldl\"") "LTLIBEXPAT=\"-ldl -lexpat\""))
+           #t)))
 
        ;; When tests fail, we want to know the details.
        #:make-flags '("VERBOSE=yes")))
diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm
index 6d2dd4c008..0a6043ba65 100644
--- a/gnu/packages/ghostscript.scm
+++ b/gnu/packages/ghostscript.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,14 +44,13 @@
 (define-public lcms
   (package
    (name "lcms")
-   (version "2.8")
+   (version "2.9")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://sourceforge/lcms/lcms/" version
                                 "/lcms2-" version ".tar.gz"))
-            (patches (search-patches "lcms-CVE-2016-10165.patch"))
             (sha256 (base32
-                     "08pvl289g0mbznzx5l6ibhaldsgx41kwvdn2c974ga9fkli2pl36"))))
+                     "083xisy6z01zhm7p7rgk4bx9d6zlr8l20qkfv1g29ylnhgwzvij8"))))
    (build-system gnu-build-system)
    (inputs `(("libjpeg-8" ,libjpeg-8)
              ("libtiff" ,libtiff)
@@ -132,7 +132,7 @@ printing, and psresize, for adjusting page sizes.")
 (define-public ghostscript
   (package
     (name "ghostscript")
-    (version "9.22")
+    (version "9.23")
     (source
       (origin
         (method url-fetch)
@@ -142,7 +142,7 @@ printing, and psresize, for adjusting page sizes.")
                             "/ghostscript-" version ".tar.xz"))
         (sha256
          (base32
-          "1fyi4yvdj39bjgs10klr31cda1fbx1ar7a7b7yz7v68gykk65y61"))
+          "1ng8d9fm5lza7k1f7ybc791275c07z5hcmpkrl2i226nshkxrkhz"))
         (patches (search-patches "ghostscript-runpath.patch"
                                  "ghostscript-no-header-creationdate.patch"
                                  "ghostscript-no-header-id.patch"
@@ -152,10 +152,11 @@ printing, and psresize, for adjusting page sizes.")
           ;; Remove bundled libraries. The bundled OpenJPEG is a patched fork so
           ;; we leave it, at least for now.
           ;; TODO Try unbundling ijs, which is developed alongside Ghostscript.
+          ;; Likewise for the thread-safe lcms2 fork called "lcms2art".
          '(begin
             (for-each delete-file-recursively '("freetype" "jbig2dec" "jpeg"
-                                                "lcms2" "libpng"
-                                                "tiff" "zlib"))))))
+                                                "libpng" "tiff" "zlib"))
+            #t))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))                  ;19 MiB of HTML/PS doc + examples
     (arguments
@@ -179,13 +180,6 @@ printing, and psresize, for adjusting page sizes.")
                    '()))
        #:phases
        (modify-phases %standard-phases
-        (add-after 'unpack 'fix-doc-dir
-          (lambda _
-            ;; Honor --docdir.
-            (substitute* "Makefile.in"
-              (("^docdir=.*$") "docdir = @docdir@\n")
-              (("^exdir=.*$") "exdir = $(docdir)/examples\n"))
-            #t))
         (add-after 'configure 'remove-doc-reference
           (lambda _
             ;; Don't retain a reference to the 'doc' output in 'gs'.
@@ -194,6 +188,10 @@ printing, and psresize, for adjusting page sizes.")
             (substitute* "base/gscdef.c"
               (("GS_DOCDIR")
                "\"~/.guix-profile/share/doc/ghostscript\""))
+            ;; The docdir default changed in 9.23 and a compatibility
+            ;; symlink was added from datadir->docdir.  Remove it.
+            (substitute* "base/unixinst.mak"
+              (("ln -s \\$\\(DESTDIR\\)\\$\\(docdir\\).*") ""))
             #t))
          (add-after 'configure 'patch-config-files
            (lambda _
@@ -213,11 +211,11 @@ printing, and psresize, for adjusting page sizes.")
            (lambda _
              ;; Build 'libgs.so', but don't build the statically-linked 'gs'
              ;; binary (saves 22 MiB).
-             (zero? (system* "make" "so" "-j"
-                             (number->string (parallel-job-count))))))
+             (invoke "make" "so" "-j"
+                     (number->string (parallel-job-count)))))
          (replace 'install
            (lambda _
-             (zero? (system* "make" "soinstall"))))
+             (invoke "make" "soinstall")))
          (add-after 'install 'create-gs-symlink
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -233,13 +231,11 @@ printing, and psresize, for adjusting page sizes.")
        ;; these libraries.
        ,@(if (%current-target-system)
              `(("zlib/native" ,zlib)
-               ("libjpeg/native" ,libjpeg)
-               ("lcms2/native" ,lcms))
+               ("libjpeg/native" ,libjpeg))
              '())))
     (inputs
      `(("freetype" ,freetype)
        ("jbig2dec" ,jbig2dec)
-       ("lcms2" ,lcms)
        ("libjpeg" ,libjpeg)
        ("libpaper" ,libpaper)
        ("libpng" ,libpng)
@@ -294,7 +290,7 @@ output file formats and printers.")
             (substitute* "autogen.sh"
               (("^.*\\$srcdir/configure.*") "")
               (("^ + && echo Now type.*$")  ""))
-            (zero? (system* "bash" "autogen.sh")))))))
+            (invoke "bash" "autogen.sh"))))))
    (synopsis "IJS driver framework for inkjet and other raster devices")
    (description
     "IJS is a protocol for transmission of raster page images.  This package
@@ -335,7 +331,8 @@ architecture.")
               (for-each
                 (lambda (file)
                   (copy-file file (string-append dir "/" file)))
-                (find-files "." "pfb|afm"))))))))
+                (find-files "." "pfb|afm"))
+              #t))))))
    (synopsis "Free replacements for the PostScript fonts")
    (description
     "Ghostscript fonts provides fonts and font metrics customarily distributed with
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index 2e71216f2a..503308ac16 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -106,7 +106,7 @@ as ASCII text.")
               ("libxi" ,libxi)
               ("libxrandr" ,libxrandr)
               ("libxxf86vm" ,libxxf86vm)
-              ("inputproto" ,inputproto)
+              ("xorgproto" ,xorgproto)
               ("xinput" ,xinput)))
     (propagated-inputs
      ;; Headers from Mesa and GLU are needed.
@@ -242,19 +242,17 @@ also known as DXTn or DXTC) for Mesa.")
                          "mesa-skip-disk-cache-test.patch"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("glproto" ,glproto)
-        ;; The following are in the Requires.private field of gl.pc.
+      `(;; The following are in the Requires.private field of gl.pc.
         ("libdrm" ,libdrm)
         ("libvdpau" ,libvdpau)
         ("libx11" ,libx11)
         ("libxdamage" ,libxdamage)
         ("libxfixes" ,libxfixes)
         ("libxshmfence" ,libxshmfence)
-        ("libxxf86vm" ,libxxf86vm)))
+        ("libxxf86vm" ,libxxf86vm)
+        ("xorgproto" ,xorgproto)))
     (inputs
       `(("expat" ,expat)
-        ("dri2proto" ,dri2proto)
-        ("dri3proto" ,dri3proto)
         ("libelf" ,libelf)    ;required for r600 when using llvm
         ("libva" ,(force libva-without-mesa))
         ("libxml2" ,libxml2)
@@ -266,7 +264,6 @@ also known as DXTn or DXTC) for Mesa.")
             (_
              `()))
         ("makedepend" ,makedepend)
-        ("presentproto" ,presentproto)
         ("wayland" ,wayland)
         ("wayland-protocols" ,wayland-protocols)))
     (native-inputs
@@ -418,10 +415,11 @@ from software emulation to complete hardware acceleration for modern GPUs.")
          (delete 'build)
          (delete 'check)
          (replace 'install
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (copy-recursively "include" (string-append
-                                                 (assoc-ref outputs "out")
-                                                 "/include")))))))))
+           (lambda* (#:key outputs #:allow-other-keys)
+             (copy-recursively "include" (string-append
+                                          (assoc-ref outputs "out")
+                                          "/include"))
+             #t)))))))
 
 ;;; The mesa-demos distribution contains non-free files, many files with no
 ;;; clear license information, and many demos that aren't useful for most
@@ -458,7 +456,8 @@ from software emulation to complete hardware acceleration for modern GPUs.")
                (lambda (file)
                  (copy-file file (string-append out "/bin/" (basename file))))
                '("src/xdemos/glxdemo" "src/xdemos/glxgears"
-                 "src/xdemos/glxinfo" "src/xdemos/glxheads"))))))))
+                 "src/xdemos/glxinfo" "src/xdemos/glxheads"))
+              #t))))))
     (home-page "http://mesa3d.org/")
     (synopsis "Utility tools for Mesa")
     (description
@@ -480,9 +479,11 @@ glxgears, glxheads, and glxinfo.")
                 "0r37fg2s1f0jrvwh6c8cz5x6v4wqmhq42qm15cs9qs349q5c6wn5"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "config/Makefile.linux"
-                  (("= cc") "= gcc")
-                  (("/lib64") "/lib")))))
+               '(begin
+                  (substitute* "config/Makefile.linux"
+                    (("= cc") "= gcc")
+                    (("/lib64") "/lib"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases (delete 'configure))
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 30a22d7d59..6ea73ac12e 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -2,10 +2,10 @@
 ;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2018 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>
@@ -35,6 +35,7 @@
   #:use-module (gnu packages enlightenment)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gperf)
@@ -78,7 +79,7 @@
 (define dbus
   (package
     (name "dbus")
-    (version "1.12.2")
+    (version "1.12.6")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -86,7 +87,7 @@
                     version ".tar.gz"))
               (sha256
                (base32
-                "121xm3cy48vbv6nv522lfkk4zyiqc1g6v4lb3344gc3h2w4vaar7"))
+                "05picaq8j60wlwyi84qvw5liw3nd0cws9va3krnc3pms0wm906v2"))
               (patches (search-patches "dbus-helper-search-path.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -112,10 +113,10 @@
          (replace 'install
                   (lambda _
                     ;; Don't try to create /var and /etc.
-                    (system* "make"
-                             "localstatedir=/tmp/dummy"
-                             "sysconfdir=/tmp/dummy"
-                             "install"))))))
+                    (invoke "make"
+                            "localstatedir=/tmp/dummy"
+                            "sysconfdir=/tmp/dummy"
+                            "install"))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
@@ -148,7 +149,7 @@ shared NFS home directories.")
 (define glib
   (package
    (name "glib")
-   (version "2.54.2")
+   (version "2.56.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/"
@@ -156,9 +157,8 @@ shared NFS home directories.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "0v4ffl172kbqgxrhgxyafhpw36bq3iklb2zjqyl6jcfkmb2yb2dv"))
-            (patches (search-patches "glib-respect-datadir.patch"
-                                     "glib-tests-timer.patch"))))
+              "1iqgi90fmpl3l23jm2iv44qp7hqsxvnv7978s18933bvx4bnxvzc"))
+            (patches (search-patches "glib-tests-timer.patch"))))
    (build-system gnu-build-system)
    (outputs '("out"           ; everything
               "bin"           ; glib-mkenums, gtester, etc.; depends on Python
@@ -184,6 +184,9 @@ shared NFS home directories.")
       (modify-phases %standard-phases
         (add-before 'build 'pre-build
           (lambda* (#:key inputs outputs #:allow-other-keys)
+            ;; For building deterministic pyc files
+            (setenv "DETERMINISTIC_BUILD" "1")
+
             ;; For tests/gdatetime.c.
             (setenv "TZDIR"
                     (string-append (assoc-ref inputs "tzdata")
@@ -197,7 +200,8 @@ shared NFS home directories.")
                            "glib/tests/utils.c"
                            "tests/spawn-test.c")
               (("/bin/sh")
-               (string-append (assoc-ref inputs "bash") "/bin/sh")))))
+               (string-append (assoc-ref inputs "bash") "/bin/sh")))
+            #t))
         (add-before 'check 'disable-failing-tests
           (lambda _
             (let ((disable
@@ -235,6 +239,7 @@ shared NFS home directories.")
                      ("gio/tests/contenttype.c"
                       (;; XXX: requires shared-mime-info.
                        "/contenttype/guess"
+                       "/contenttype/guess_svg_from_data"
                        "/contenttype/subtype"
                        "/contenttype/list"
                        "/contenttype/icon"
@@ -260,7 +265,8 @@ shared NFS home directories.")
                      ("gio/tests/gdbus-unix-addresses.c"
                       (;; Requires /etc/machine-id.
                        "/gdbus/x11-autolaunch")))))
-              (and-map (lambda (x) (apply disable x)) failing-tests)))))
+              (for-each (lambda (x) (apply disable x)) failing-tests)
+              #t))))
 
       ;; Note: `--docdir' and `--htmldir' are not honored, so work around it.
       #:configure-flags (list (string-append "--with-html-dir="
@@ -296,18 +302,20 @@ dynamic loading, and an object system.")
 (define gobject-introspection
   (package
     (name "gobject-introspection")
-    (version "1.54.1")
+    (version "1.56.0")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnome/sources/"
                    "gobject-introspection/" (version-major+minor version)
                    "/gobject-introspection-" version ".tar.xz"))
              (sha256
-              (base32 "0zl7pfkzkm07733391b4f3cwjbnvb1nwvpmajf5bajh6bxgfv3dq"))
+              (base32 "1y50pbn5qqbcv2h9rkz96wvv5jls2gma9bkqjq6wapmaszx5jw0d"))
              (modules '((guix build utils)))
              (snippet
-              '(substitute* "tools/g-ir-tool-template.in"
-                 (("#!/usr/bin/env @PYTHON@") "#!@PYTHON@")))
+              '(begin
+                 (substitute* "tools/g-ir-tool-template.in"
+                   (("#!/usr/bin/env @PYTHON@") "#!@PYTHON@"))
+                 #t))
              (patches (search-patches
                        "gobject-introspection-cc.patch"
                        "gobject-introspection-girepository.patch"
@@ -331,7 +339,10 @@ dynamic loading, and an object system.")
             (files '("lib/girepository-1.0")))))
     (search-paths native-search-paths)
     (arguments
-     `(;; The patch 'gobject-introspection-absolute-shlib-path.patch' causes
+     `(;; The build system has at least one race condition involving Gio-2.0.gir
+       ;; which causes intermittent failures, as of 1.56.0.
+       #:parallel-build? #f
+       ;; The patch 'gobject-introspection-absolute-shlib-path.patch' causes
        ;; some tests to fail.
        #:tests? #f))
     (home-page "https://wiki.gnome.org/GObjectIntrospection")
@@ -369,13 +380,14 @@ bindings to call into the C library.")
        ("perl-xml-parser" ,perl-xml-parser)
        ("perl" ,perl)))
     (arguments
-     `(#:phases (alist-cons-after
-                 'unpack 'patch-file-references
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (let ((file (assoc-ref inputs "file")))
-                     (substitute* "intltool-update.in"
-                       (("`file") (string-append "`" file "/bin/file")))))
-                 %standard-phases)))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-file-references
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((file (assoc-ref inputs "file")))
+               (substitute* "intltool-update.in"
+                 (("`file") (string-append "`" file "/bin/file")))
+               #t))))))
     (home-page "https://launchpad.net/intltool/+download")
     (synopsis "Tools to centralise translations of different file formats")
     (description
@@ -418,7 +430,8 @@ The intltool collection can be used to do these things:
              (let ((prog (string-append (assoc-ref outputs "out")
                                         "/bin/itstool")))
                (wrap-program prog
-                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))))))))
+                 `("PYTHONPATH" = (,(getenv "PYTHONPATH"))))
+               #t))))))
     (home-page "http://www.itstool.org")
     (synopsis "Tool to translate XML documents with PO files")
     (description
@@ -596,7 +609,11 @@ useful for C++.")
          "1zdzznrj2s1gsrv2z4r0n88fzba8zjc1n2r313xi77lhl1daja56"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("which" ,which)
+     `(;; Use gcc-7 to work around an internal compiler error that happens
+       ;; when using gcc-5.5.0.  FIXME: Try removing this when the default
+       ;; compiler is no longer gcc-5.5.0.
+       ("gcc" ,gcc-7)
+       ("which" ,which)
        ;for tests: dbus-run-session and glib-compile-schemas
        ("dbus" ,dbus)
        ("glib-bin" ,glib "bin")
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index befb7dc9ac..d04f40548f 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -80,6 +80,7 @@
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages game-development)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnupg)
@@ -2118,7 +2119,7 @@ editors, IDEs, etc.")
     (arguments
       `(#:configure-flags '("CXXFLAGS=-Wformat=0")
         #:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
+                   (replace 'bootstrap
                     (lambda _
                       (setenv "NOCONFIGURE" "true")
                       (zero? (system* "sh" "autogen.sh")))))))
@@ -2546,12 +2547,11 @@ libxml to ease remote use of the RESTful API.")
              #t))
          (replace 'install
            (lambda _
-             (zero?
-              (system* "make"
-                       ;; Install vala bindings into $out.
-                       (string-append "vapidir=" %output
-                                      "/share/vala/vapi")
-                       "install")))))))
+             (invoke "make"
+                     ;; Install vala bindings into $out.
+                     (string-append "vapidir=" %output
+                                    "/share/vala/vapi")
+                     "install"))))))
     (native-inputs
      `(("glib:bin" ,glib "bin")                   ; for glib-mkenums
        ("gobject-introspection" ,gobject-introspection)
@@ -2872,7 +2872,8 @@ output devices.")
          (add-before 'configure 'patch-/bin/true
                      (lambda _
                        (substitute* "configure"
-                         (("/bin/true") (which "true"))))))))
+                         (("/bin/true") (which "true")))
+                       #t)))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("gobject-introspection" ,gobject-introspection)
@@ -3558,7 +3559,8 @@ as possible!")
                           (("@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))))))
     (native-search-paths
      (list (search-path-specification
             (variable "GRL_PLUGIN_PATH")
@@ -3659,7 +3661,7 @@ for application developers.")
        ("clutter" ,clutter)
        ("clutter-gtk" ,clutter-gtk)
        ("clutter-gst" ,clutter-gst)
-       ("xproto" ,xproto)
+       ("xorgproto" ,xorgproto)
        ("libxxf86vm" ,libxxf86vm)
        ("libxtst" ,libxtst)
        ("libxrandr" ,libxrandr)
@@ -4617,6 +4619,14 @@ configuration program to choose applications starting on login.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
+         (add-after 'set-paths 'work-around-gcc-7-include-path-issue
+           ;; FIXME: Work around a problem with gcc-7 includes (see
+           ;; <https://bugs.gnu.org/30756>).  Note that we use gcc-7
+           ;; to work around an internal compiler error in gcc-5.
+           (lambda _
+             (unsetenv "C_INCLUDE_PATH")
+             (unsetenv "CPLUS_INCLUDE_PATH")
+             #t))
          (add-before
           'check 'pre-check
           (lambda _
@@ -4634,7 +4644,11 @@ configuration program to choose applications starting on login.")
               ((".*expect\\(datestr\\).*") ""))
             #t)))))
     (native-inputs
-     `(("glib:bin" ,glib "bin")       ; for glib-compile-resources
+     `(("gcc" ,gcc-7) ; FIXME: Work around an internal compiler error in
+                      ; gcc-5.  Try removing this when our default compiler is
+                      ; no longer gcc-5.5.0, and also remove the
+                      ; 'work-around-gcc-7-include-path-issue' phase above.
+       ("glib:bin" ,glib "bin")       ; for glib-compile-resources
        ("pkg-config" ,pkg-config)
        ("xmllint" ,libxml2)
        ;; For testing
@@ -4887,7 +4901,7 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
 (define-public evolution-data-server
   (package
     (name "evolution-data-server")
-    (version "3.26.6")
+    (version "3.28.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -4895,7 +4909,7 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "1v0hwlrlm23bz5dmamdavm771f4gs64fyq82argrc0nwgn2a2fp4"))))
+                "12b9lfgwd57rzn9394xrbvl9ym5aqldpz9v7c9a421dsv8dgq13b"))))
     (build-system cmake-build-system)
     (arguments
      '(;; XXX FIXME: 11/85 tests are failing.
@@ -4913,8 +4927,12 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
                "-DENABLE_GOOGLE_AUTH=OFF"     ;disable Google authentication
                "-DENABLE_VALA_BINDINGS=ON"
                ;; FIXME: Building against ICU 60 requires C++11 or higher.  Remove
-               ;; this when our default compiler is >= GCC6.
-               "-DCMAKE_CXX_FLAGS=-std=gnu++11"
+               ;; "-std=gnu++11" when our default compiler is >= GCC6.
+               ;; FIXME: Temporarily use "-DU_USING_ICU_NAMESPACE=1" until
+               ;; evolution-data-server has been updated to qualify ICU types
+               ;; explicitly, as required by ICU 61 and later.  See:
+               ;; <https://ssl.icu-project.org/repos/icu/trunk/icu4c/readme.html#RecBuild>
+               "-DCMAKE_CXX_FLAGS=-std=gnu++11 -DU_USING_ICU_NAMESPACE=1"
                (string-append "-DCMAKE_INSTALL_RPATH=" lib ";"
                               (string-append lib "/evolution-data-server;")
                               (string-join runpaths ";"))
@@ -4953,9 +4971,11 @@ Exchange, Last.fm, IMAP/SMTP, Jabber, SIP and Kerberos.")
      `(("bdb" ,bdb)
        ("gcr" ,gcr)
        ("gnome-online-accounts" ,gnome-online-accounts)
+       ("json-glib" ,json-glib)
        ("libgweather" ,libgweather)
        ("mit-krb5" ,mit-krb5)
-       ("openldap" ,openldap)))
+       ("openldap" ,openldap)
+       ("webkitgtk" ,webkitgtk)))
     (synopsis "Store address books and calendars")
     (home-page "https://wiki.gnome.org/Apps/Evolution")
     (description
@@ -5052,7 +5072,8 @@ users.")
                  (substitute* "src/nm-session-monitor.c"
                    (("systemd") "elogind"))
                  (substitute* "./src/nm-logging.c"
-                   (("systemd") "elogind"))))))
+                   (("systemd") "elogind"))
+                 #t))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc")) ; 8 MiB of gtk-doc HTML
@@ -5980,7 +6001,7 @@ associations for GNOME.")
     (version (package-version gnome-shell))
     (source #f)
     (build-system trivial-build-system)
-    (arguments '(#:builder (mkdir %output)))
+    (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
      ;; TODO: Add more packages according to:
      ;;       <https://packages.debian.org/jessie/gnome-core>.
@@ -6054,7 +6075,7 @@ documents and diagrams, playing media, scanning, and much more.")
       (arguments
        '(#:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'bootstrap
+           (replace 'bootstrap
              (lambda _
                ;; The build system cleverly detects that we're not building from
                ;; a release tarball and turns on -Werror for GCC.
@@ -6402,12 +6423,6 @@ functionality and behavior.")
                (base32
                 "0igxpngnkf1wpsg872a9jg3c9f5z8afm312yfbillz16mk8w39cw"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vif")))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -6444,10 +6459,7 @@ like GNOME, Unity, Budgie, Pantheon, XFCE, Mate, etc.")
              (substitute* '("Makefile.am")
                (("\\$\\(DESTDIR\\)/usr/share")
                 "$(datadir)"))
-             #t))
-         (add-after 'patch-makefile.am 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vif")))))))
+             #t)))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)))
@@ -6496,12 +6508,6 @@ simple and consistent.")
                (base32
                 "1ya1cqvv8q847c0rpcg6apzky87q3h04y8jz5nmi52qk6kg8si0b"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vif")))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)))
diff --git a/gnu/packages/gnu-doc.scm b/gnu/packages/gnu-doc.scm
index a1890a6cc6..b64d8ac454 100644
--- a/gnu/packages/gnu-doc.scm
+++ b/gnu/packages/gnu-doc.scm
@@ -85,12 +85,12 @@ list.")
             (setenv "PATH" (string-append gzip "/bin"
                                           ":" texinfo "/bin"))
             (mkdir-p info-dir)
-            (system* "makeinfo" "--output" info-dir
-                     (string-append source "/maintain.texi"))
-            (system* "makeinfo" "--output" info-dir
-                     (string-append source "/standards.texi"))
-            (system* "gzip" (string-append info-dir "/maintain.info"))
-            (system* "gzip" (string-append info-dir "/standards.info"))))))
+            (invoke "makeinfo" "--output" info-dir
+                    (string-append source "/maintain.texi"))
+            (invoke "makeinfo" "--output" info-dir
+                    (string-append source "/standards.texi"))
+            (invoke "gzip" (string-append info-dir "/maintain.info"))
+            (invoke "gzip" (string-append info-dir "/standards.info"))))))
     (home-page "https://www.gnu.org/prep/standards/")
     (synopsis "GNU coding standards and maintainer information")
     (description "The GNU Coding Standards were written by Richard Stallman
diff --git a/gnu/packages/gnucash.scm b/gnu/packages/gnucash.scm
index 25200e3f99..fc8a9b6bfc 100644
--- a/gnu/packages/gnucash.scm
+++ b/gnu/packages/gnucash.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Chris Marusich <cmmarusich@gmail.com>
@@ -25,9 +25,12 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system glib-or-gtk)
+  #:use-module (guix build-system cmake)
   #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gnome)
@@ -47,7 +50,7 @@
 (define-public gnucash
   (package
     (name "gnucash")
-    (version "2.6.19")
+    (version "3.0")
     (source
      (origin
       (method url-fetch)
@@ -55,34 +58,47 @@
                           version "/gnucash-" version ".tar.bz2"))
       (sha256
        (base32
-        "1lbz7ygqlxbndxir5ay59bmmrqv9qvc6pgb5jwgdbhkf4ikr7f2h"))
-      (patches (search-patches "gnucash-price-quotes-perl.patch"))))
-    (build-system glib-or-gtk-build-system)
+        "1ffvf1rryg5yin86fnf1zvy6hnpwzrjarbdfmjmrf2mqlmv48xac"))
+
+      ;; TODO: rebase this patch
+;      (patches (search-patches "gnucash-price-quotes-perl.patch"))
+      ))
+    (build-system cmake-build-system)
     (inputs
-     `(("guile" ,guile-2.0)
+     `(("guile" ,guile-2.2)
+       ("boost" ,boost)
        ("icu4c" ,icu4c)
        ("glib" ,glib)
-       ("gtk" ,gtk+-2)
-       ("goffice" ,goffice-0.8)
+       ("gtk" ,gtk+)
        ("libgnomecanvas" ,libgnomecanvas)
        ("libxml2" ,libxml2)
        ("libxslt" ,libxslt)
-       ("webkitgtk" ,webkitgtk/gtk+-2)
+       ("webkitgtk" ,webkitgtk)
        ("aqbanking" ,aqbanking)
        ("perl-date-manip" ,perl-date-manip)
        ("perl-finance-quote" ,perl-finance-quote)))
     (native-inputs
      `(("glib" ,glib "bin") ; glib-compile-schemas, etc.
        ("intltool" ,intltool)
+       ("googlemock" ,(package-source googletest))
+       ("googletest" ,googletest)
        ("gnucash-docs" ,gnucash-docs)
        ("pkg-config" ,pkg-config)))
     (outputs '("out" "doc"))
     (arguments
-     `(#:tests? #f ;FIXME: failing at /qof/gnc-date/qof print date dmy buff
-       #:configure-flags '("--disable-dbi"
-                           "--enable-aqbanking")
+     `(#:test-target "check"
+       #:configure-flags
+       (list "-DWITH_OFX=OFF"  ; libofx is not available yet
+             "-DWITH_SQL=OFF") ; without dbi.h
        #:phases
        (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-gmock
+           (lambda* (#:key inputs #:allow-other-keys)
+             (mkdir "gmock")
+             (invoke "tar" "xf" (assoc-ref inputs "googlemock")
+                     "-C" "gmock" "--strip-components=1")
+             (setenv "GMOCK_ROOT" (string-append (getcwd) "/gmock/googlemock"))
+             #t))
          ;; There are about 100 megabytes of documentation.
          (add-after
           'install 'install-docs
@@ -142,7 +158,7 @@ financial calculations or scheduled transactions.")
                            version "/gnucash-docs-" version ".tar.gz"))
        (sha256
         (base32
-         "1ix99d5c1ppamn5ajamjfxpx6l25bv81nkg777rp1sl0glaib116"))))
+         "0yq65s3z3dwdwdf2nq1d1w9ckdjdyjwkfpmvhzyib54b66q65xh5"))))
     (build-system gnu-build-system)
     ;; These are native-inputs because they are only required for building the
     ;; documentation.
@@ -168,22 +184,23 @@ to be read using the GNOME Yelp program.")
 (define-public gwenhywfar
   (package
     (name "gwenhywfar")
-    (version "4.15.3")
+    (version "4.20.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://www.aquamaniac.de/sites/download/download.php?"
-                           "package=01&release=201&file=01"))
+       (uri (string-append "https://www.aquamaniac.de/sites/download/"
+                           "download.php?package=01&release=208&file=02&"
+                           "dummy=gwenhywfar-" version ".tar.gz"))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0fp67s932x66xfljb26zbrn8ambbc5y5c3hllr6l284nr63qf3ka"))))
+         "1c0g3f8jk6j693774ifslx2ds4ksabgbbalhhm9gk20kpamxm22s"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (list "--disable-network-checks"
-             ;; Both GTK+2 and QT4 are supported.
-             "--with-guis=gtk2"
+             ;; GTK+3, GTK+2 and QT4 are supported.
+             "--with-guis=gtk3"
              (string-append "--with-openssl-includes="
                             (assoc-ref %build-inputs "openssl") "/include")
              (string-append "--with-openssl-libs="
@@ -192,7 +209,7 @@ to be read using the GNOME Yelp program.")
      `(("libgcrypt" ,libgcrypt)
        ("gnutls" ,gnutls)
        ("openssl" ,openssl)
-       ("gtk+" ,gtk+-2)))
+       ("gtk+" ,gtk+)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (home-page "http://www.aquamaniac.de/sites/aqbanking/index.php")
@@ -207,16 +224,17 @@ applications and libraries.  It is used by AqBanking.")
 (define-public aqbanking
   (package
     (name "aqbanking")
-    (version "5.6.12")
+    (version "5.7.8")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "http://www.aquamaniac.de/sites/download/download.php?"
-                           "package=03&release=208&file=01"))
+       (uri (string-append "https://www.aquamaniac.de/sites/download/"
+                           "download.php?package=03&release=217&file=02&"
+                           "dummy=aqbanking-" version ".tar.gz"))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "08jbwmiv6f3v8iqdr44x4szna496fqcjfi6mlx04cnbx91m70lh6"))))
+         "0s67mysskbiw1h1p0np4ph4351r7wq3nc873vylam7lsqi66xy0n"))))
     (build-system gnu-build-system)
     (arguments
      `(;; Parallel building fails because aqhbci is required before it's
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index 1286f4d462..7335742e20 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -321,11 +321,6 @@ kinds of basic applications for the foundation of a GNU internet.")
                  (base32
                   "0k6mn28isjlxrnvbnblab3nh2xqx1b7san8k98kc35ap9lq0iz8w"))))
       (build-system gnu-build-system)
-      (arguments
-       '(#:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'bootstrap
-                      (lambda _
-                        (invoke "autoreconf" "-vfi"))))))
       (native-inputs `(("pkg-config" ,pkg-config)
                        ("autoconf" ,autoconf-wrapper)
                        ("automake" ,automake)))
diff --git a/gnu/packages/gnupg.scm b/gnu/packages/gnupg.scm
index a389186746..dbbe8368a8 100644
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@ -70,7 +70,7 @@
 (define-public libgpg-error
   (package
     (name "libgpg-error")
-    (version "1.27")
+    (version "1.28")
     (source
      (origin
       (method url-fetch)
@@ -78,7 +78,8 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1li95ni122fzinzlmxbln63nmgij63irxfvi52ws4zfbzv3am4sg"))))
+        "0jfsfnh9bxlxiwxws60yah4ybjw2hshmvqp31pri4m4h8ivrbnry"))
+      (patches (search-patches "libgpg-error-aarch64-logging-fix.patch"))))
     (build-system gnu-build-system)
     (home-page "https://gnupg.org")
     (synopsis "Library of error values for GnuPG components")
@@ -108,14 +109,14 @@ Daemon and possibly more in the future.")
 (define-public libgcrypt
   (package
     (name "libgcrypt")
-    (version "1.8.1")
+    (version "1.8.2")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnupg/libgcrypt/libgcrypt-"
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1cvqd9jk5qshbh48yh3ixw4zyr4n5k50r3475rrh20xfn7w7aa3s"))))
+               "01sca9m8hm6b5v8hmqsfdjhyz013869p1f0fxw9ln52qfnp4q1n8"))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("libgpg-error-host" ,libgpg-error)))
@@ -369,7 +370,8 @@ libskba (working with X.509 certificates and CMS data).")
          (add-after 'unpack 'patch-check-sh
            (lambda _
              (substitute* "checks/Makefile.in"
-               (("/bin/sh") (which "sh"))))))))))
+               (("/bin/sh") (which "sh")))
+             #t)))))))
 
 (define-public gpgme
   (package
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 84b535d19d..cca0edbbf3 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -77,8 +77,10 @@
              (modules '((guix build utils)))
              (snippet
               ;; Fix incompatibility with Perl 5.22+.
-              '(substitute* '("js/src/config/milestone.pl")
-                 (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE")))))
+              '(begin
+                 (substitute* '("js/src/config/milestone.pl")
+                   (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE"))
+                 #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)
@@ -96,7 +98,9 @@
        (modify-phases %standard-phases
          (add-after 'unpack 'delete-timedout-test
            ;; This test times out on slower hardware.
-           (lambda _ (delete-file "js/src/jit-test/tests/basic/bug698584.js")))
+           (lambda _
+             (delete-file "js/src/jit-test/tests/basic/bug698584.js")
+             #t))
          (add-before 'configure 'chdir
            (lambda _
              (chdir "js/src")
@@ -107,12 +111,11 @@
              (let ((out (assoc-ref outputs "out")))
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
-               (zero? (system*
-                       "./configure" (string-append "--prefix=" out)
-                                     ,@(if (string=? "aarch64-linux"
-                                                     (%current-system))
-                                         '("--host=aarch64-unknown-linux-gnu")
-                                         '())))))))))
+               (invoke "./configure" (string-append "--prefix=" out)
+                       ,@(if (string=? "aarch64-linux"
+                                       (%current-system))
+                             '("--host=aarch64-unknown-linux-gnu")
+                             '()))))))))
     (home-page
      "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey")
     (synopsis "Mozilla javascript engine")
@@ -136,8 +139,10 @@ in C/C++.")
               (patches (search-patches "mozjs24-aarch64-support.patch"))
               (snippet
                ;; Fix incompatibility with Perl 5.22+.
-               '(substitute* '("js/src/config/milestone.pl")
-                  (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE")))))
+               '(begin
+                  (substitute* '("js/src/config/milestone.pl")
+                    (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE"))
+                  #t))))
     (arguments
       (substitute-keyword-arguments (package-arguments mozjs)
         ((#:phases phases)
@@ -148,15 +153,15 @@ in C/C++.")
                   ;; configure fails if it is followed by SHELL and CONFIG_SHELL
                   (setenv "SHELL" (which "sh"))
                   (setenv "CONFIG_SHELL" (which "sh"))
-                  (zero? (system* "./configure"
-                                  (string-append "--prefix=" out)
-                                  "--with-system-nspr"
-                                  "--enable-system-ffi"
-                                  "--enable-threadsafe"
-                                  ,@(if (string=? "aarch64-linux"
-                                                  (%current-system))
-                                      '("--host=aarch64-unknown-linux-gnu")
-                                      '()))))))))))
+                  (invoke "./configure"
+                          (string-append "--prefix=" out)
+                          "--with-system-nspr"
+                          "--enable-system-ffi"
+                          "--enable-threadsafe"
+                          ,@(if (string=? "aarch64-linux"
+                                          (%current-system))
+                                '("--host=aarch64-unknown-linux-gnu")
+                                '())))))))))
     (inputs
      `(("libffi" ,libffi)
        ("zlib" ,zlib)))))
@@ -220,23 +225,23 @@ in C/C++.")
                (chdir "js/src")
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
-               (zero? (system* "./configure"
-                               (string-append "--prefix=" out)
-                               "--enable-ctypes"
-                               "--enable-gcgenerational"
-                               "--enable-optimize"
-                               "--enable-pie"
-                               "--enable-readline"
-                               "--enable-shared-js"
-                               "--enable-system-ffi"
-                               "--enable-threadsafe"
-                               "--enable-xterm-updates"
-                               "--with-system-icu"
-                               "--with-system-nspr"
-                               "--with-system-zlib"
+               (invoke "./configure"
+                       (string-append "--prefix=" out)
+                       "--enable-ctypes"
+                       "--enable-gcgenerational"
+                       "--enable-optimize"
+                       "--enable-pie"
+                       "--enable-readline"
+                       "--enable-shared-js"
+                       "--enable-system-ffi"
+                       "--enable-threadsafe"
+                       "--enable-xterm-updates"
+                       "--with-system-icu"
+                       "--with-system-nspr"
+                       "--with-system-zlib"
 
-                               ;; Intl API requires bundled ICU.
-                               "--without-intl-api"))))))))
+                       ;; Intl API requires bundled ICU.
+                       "--without-intl-api")))))))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
@@ -340,7 +345,7 @@ in the Mozilla clients.")
              (setenv "DOMSUF" "(none)")
              (setenv "USE_IP" "TRUE")
              (setenv "IP_ADDRESS" "127.0.0.1")
-             (zero? (system* "./nss/tests/all.sh"))))
+             (invoke "./nss/tests/all.sh")))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
@@ -660,19 +665,6 @@ security standards.")
                          #t))
               #t)))
          (add-after
-          'unpack 'use-skia-by-default
-          (lambda _
-            ;; Use the bundled Skia library by default, since IceCat appears
-            ;; to be far more stable when using it than when using our system
-            ;; Cairo.
-            (let ((out (open "browser/app/profile/icecat.js"
-                              (logior O_WRONLY O_APPEND))))
-              (format out "~%// Use Skia by default~%")
-              (format out "pref(~s, ~s);~%" "gfx.canvas.azure.backends" "skia")
-              (format out "pref(~s, ~s);~%" "gfx.content.azure.backends" "skia")
-              (close-port out))
-            #t))
-         (add-after
           'unpack 'link-libxul-with-libraries
           (lambda _
             ;; libxul.so dynamically opens libraries, so here we explicitly
@@ -708,9 +700,9 @@ security standards.")
               (chdir "../build")
               (format #t "build directory: ~s~%" (getcwd))
               (format #t "configure flags: ~s~%" flags)
-              (zero? (apply system* bash
-                            (string-append srcdir "/configure")
-                            flags)))))
+              (apply invoke bash
+                     (string-append srcdir "/configure")
+                     flags))))
          (add-before 'configure 'install-desktop-entry
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the '.desktop' file.
@@ -765,7 +757,8 @@ security standards.")
                       (copy-file file (string-append icons "/icecat.png"))))
                   '("default16.png" "default22.png" "default24.png"
                     "default32.png" "default48.png" "content/icon64.png"
-                    "mozicon128.png" "default256.png"))))))
+                    "mozicon128.png" "default256.png"))
+                 #t))))
          ;; This fixes the file chooser crash that happens with GTK 3.
          (add-after 'install 'wrap-program
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -774,7 +767,8 @@ security standards.")
                     (gtk (assoc-ref inputs "gtk+"))
                     (gtk-share (string-append gtk "/share")))
                (wrap-program (car (find-files lib "^icecat$"))
-                 `("XDG_DATA_DIRS" ":" prefix (,gtk-share)))))))))
+                 `("XDG_DATA_DIRS" ":" prefix (,gtk-share)))
+               #t))))))
     (home-page "https://www.gnu.org/software/gnuzilla/")
     (synopsis "Entirely free browser derived from Mozilla Firefox")
     (description
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index fe717d0c20..439170c007 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -339,7 +339,8 @@ graphics.")
                   ;; and <https://github.com/openexr/openexr/pull/184>.
                   (substitute* "IlmImf/Makefile.in"
                     (("ImfIO\\.h")
-                     "ImfIO.h ImfStdIO.h"))))
+                     "ImfIO.h ImfStdIO.h"))
+                  #t))
               (patches (search-patches "openexr-missing-samples.patch"))))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/graphviz.scm b/gnu/packages/graphviz.scm
index 8d8bd54560..11997598c1 100644
--- a/gnu/packages/graphviz.scm
+++ b/gnu/packages/graphviz.scm
@@ -150,11 +150,12 @@ visualization tool suite.")
                "07mqx09jxh8cv9753y2d2jsv7wp8vjmrd7zcfpbrddz3wc9kx705"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (alist-cons-before
-                 'check 'pre-check
-                 (lambda _
-                   (chmod "test/boolean/test.sh" #o777))
-                 %standard-phases)
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'pre-check
+           (lambda _
+             (chmod "test/boolean/test.sh" #o777)
+             #t)))
 
        ;; Some data files used by the test suite are missing.
        ;; See <http://sourceforge.net/p/gts/bugs/41/>.
diff --git a/gnu/packages/gstreamer.scm b/gnu/packages/gstreamer.scm
index 0f1e1ff1a2..951ca93fbf 100644
--- a/gnu/packages/gstreamer.scm
+++ b/gnu/packages/gstreamer.scm
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2014 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2015, 2016 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -87,7 +87,8 @@
              (substitute* '("testsuite/test-limits.c"
                             "testsuite/exec_opcodes_sys.c")
                (("if \\(error\\) return 1;")
-                "if (error) return 77;")))))))
+                "if (error) return 77;"))
+             #t)))))
     (home-page "https://gstreamer.freedesktop.org/modules/orc.html")
     (synopsis "Oil runtime compiler")
     (description
@@ -101,7 +102,7 @@ arrays of data.")
 (define-public gstreamer
   (package
     (name "gstreamer")
-    (version "1.12.5")
+    (version "1.14.1")
     (source
      (origin
       (method url-fetch)
@@ -110,7 +111,7 @@ arrays of data.")
             version ".tar.xz"))
       (sha256
        (base32
-        "0slwqav7bqasg4a9f033kv6ki3yz0wyr3k0w9jr80s1jba20sxcz"))))
+        "0v0qqfj6klkirhbcxwgw1sq6x67456ckjadlhnzsji0m4q6jpn18"))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -149,7 +150,7 @@ This package provides the core library and elements.")
 (define-public gst-plugins-base
   (package
     (name "gst-plugins-base")
-    (version "1.12.5")
+    (version "1.14.1")
     (source
      (origin
       (method url-fetch)
@@ -157,7 +158,7 @@ This package provides the core library and elements.")
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "0bkikdax4v3iv9sqrrwbavqw7kg7lh0vas08ad1nya7kcmdz5ncg"))))
+        "1d8d1gfd4jnymyhb0f1pxdhapsx4v1nilk03bndmv0id131wf9hh"))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (propagated-inputs
@@ -204,7 +205,7 @@ for the GStreamer multimedia library.")
 (define-public gst-plugins-good
   (package
     (name "gst-plugins-good")
-    (version "1.12.5")
+    (version "1.14.1")
     (source
      (origin
       (method url-fetch)
@@ -213,7 +214,7 @@ for the GStreamer multimedia library.")
             name "-" version ".tar.xz"))
       (sha256
        (base32
-        "0mam03i38j6iws815fky9sm1ayik1d9a8pnfvschrr06pqxv511c"))))
+        "0wlim4kapb2vc11fcjdlx31zn5ja3xw3kq1jflvk4sknvcnhdv1l"))))
     (build-system gnu-build-system)
     (inputs
      `(("aalib" ,aalib)
@@ -263,14 +264,14 @@ developers consider to have good quality code and correct functionality.")
 (define-public gst-plugins-bad
   (package
     (name "gst-plugins-bad")
-    (version "1.12.5")
+    (version "1.14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gstreamer.freedesktop.org/src/"
                                   name "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "10bx1h996nn45r3d53bgkfx0rfa3hqz0f4zx634wz3nffnkjzy20"))))
+                "06nn43f65mr872apljfiq8jnmwa8r7z26n1frprgvaijh28ccxra"))))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
@@ -339,7 +340,7 @@ par compared to the rest.")
 (define-public gst-plugins-ugly
   (package
     (name "gst-plugins-ugly")
-    (version "1.12.5")
+    (version "1.14.1")
     (source
      (origin
        (method url-fetch)
@@ -347,7 +348,7 @@ par compared to the rest.")
                            name "/" name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0vpr1rv99v7k2s78k15prdw453nq1va4rkli46yhm6s3i00lnwk7"))))
+         "1lz1kx9h5mlp9ahmgavv99nkg6j0rrjks2ws820yym1zn45l7wng"))))
     (build-system gnu-build-system)
     (inputs
      `(("gst-plugins-base" ,gst-plugins-base)
@@ -377,7 +378,7 @@ distribution problems in some jurisdictions, e.g. due to patent threats.")
 (define-public gst-libav
   (package
     (name "gst-libav")
-    (version "1.12.5")
+    (version "1.14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -385,7 +386,7 @@ distribution problems in some jurisdictions, e.g. due to patent threats.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0y1qawf21407smvpc6kc2q6f17y9hdki4skn1yrwbl1n75gqcaw1"))))
+                "1782crqgl1bqlkr67s0qmb3ihcjdjpljd6kynqs9zyzjs810my7g"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--with-system-libav")
@@ -415,7 +416,7 @@ compression formats through the use of the libav library.")
 (define-public python-gst
   (package
     (name "python-gst")
-    (version "1.12.5")
+    (version "1.14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -423,7 +424,7 @@ compression formats through the use of the libav library.")
                     "gst-python-" version ".tar.xz"))
               (sha256
                (base32
-                "1x8g9mdkf6hzhlkx6nhrrp607p8g4zkhl3crs8vh504zpbbf71ip"))))
+                "1ls7j5iy7irinf7d7nm6r4qw3d1ddpr8fm4k5n6zfhz3am4p1ihv"))))
     (build-system gnu-build-system)
     (arguments
      ;; XXX: Factorize python-sitedir with python-build-system.
diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm
index 97fccdc917..41b908050d 100644
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
@@ -18,6 +18,7 @@
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -55,6 +56,7 @@
   #:use-module (gnu packages enchant)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages fribidi)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
@@ -132,7 +134,7 @@ tools have full access to view and control running applications.")
     `(("ghostscript" ,ghostscript)
       ("libspectre" ,libspectre)
       ("poppler" ,poppler)
-      ("xextproto" ,xextproto)
+      ("xorgproto" ,xorgproto)
       ("zlib" ,zlib)))
    (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -175,7 +177,7 @@ affine transformation (scale, rotation, shear, etc.).")
 (define-public harfbuzz
   (package
    (name "harfbuzz")
-   (version "1.7.3")
+   (version "1.7.6")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://www.freedesktop.org/software/"
@@ -183,7 +185,7 @@ affine transformation (scale, rotation, shear, etc.).")
                                  version ".tar.bz2"))
              (sha256
               (base32
-               "1zh5n3q3mb6y6kr5m7zz1ags9z1vjwai57d6warx8qhzfrwn8lyd"))))
+               "16rf7qwgy1gza74v2ws79zdwwb1lpvgz2abwwm8ws9j82cwysyys"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "bin")) ; 160K, only hb-view depend on cairo
@@ -197,7 +199,8 @@ affine transformation (scale, rotation, shear, etc.).")
    (native-inputs
     `(("gobject-introspection" ,gobject-introspection)
       ("pkg-config" ,pkg-config)
-      ("python" ,python-2))) ; incompatible with Python 3 (print syntax)
+      ("python" ,python-wrapper)
+      ("which" ,which)))
    (arguments
     `(#:configure-flags `("--with-graphite2"
                           "--with-gobject"
@@ -213,7 +216,7 @@ affine transformation (scale, rotation, shear, etc.).")
 (define-public pango
   (package
    (name "pango")
-   (version "1.40.14")
+   (version "1.42.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnome/sources/pango/"
@@ -221,13 +224,18 @@ affine transformation (scale, rotation, shear, etc.).")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "1qqpd8x1pl483ynj3mc5q4n8y2pxqhg2bv19vd94r7mzlzm1pbwh"))))
+              "0illn78nfwpa8y5knh9ir74wa1skc2hi8f3ny19zgpyf7n5dh94r"))))
    (build-system gnu-build-system)
    (propagated-inputs
+    ;; These are all in Requires or Requires.private of the '.pc' files.
     `(("cairo" ,cairo)
+      ("fontconfig" ,fontconfig)
+      ("freetype" ,freetype)
+      ("glib" ,glib)
       ("harfbuzz" ,harfbuzz)))
    (inputs
-    `(("zlib" ,zlib)
+    `(("fribidi" ,fribidi)
+      ("zlib" ,zlib)
 
       ;; Some packages, such as Openbox, expect Pango to be built with the
       ;; optional libxft support.
@@ -506,8 +514,10 @@ in the GNOME project.")
                       (find-files librsvg "^libpixbufloader-.*\\.so$")))
                     (gdk-pixbuf-query-loaders
                      (string-append out "/bin/gdk-pixbuf-query-loaders")))
-               (zero? (apply system* `(,gdk-pixbuf-query-loaders
-                                       "--update-cache" ,@loaders)))))))))
+               (apply invoke
+                      gdk-pixbuf-query-loaders
+                      "--update-cache"
+                      loaders)))))))
     (synopsis
      "GNOME image loading and manipulation library, with SVG support")))
 
@@ -537,7 +547,7 @@ in the GNOME project.")
                  (lambda _
                    ;; Don't fail on missing  '/etc/machine-id'.
                    (setenv "DBUS_FATAL_WARNINGS" "0")
-                   (zero? (system* "dbus-launch" "make" "check")))))))
+                   (invoke "dbus-launch" "make" "check"))))))
    (propagated-inputs
     ;; atspi-2.pc refers to all these.
     `(("dbus" ,dbus)
@@ -576,7 +586,7 @@ is part of the GNOME accessibility project.")
                  ;; Run test-suite under a dbus session.
                  (lambda _
                    (setenv "DBUS_FATAL_WARNINGS" "0")
-                   (zero? (system* "dbus-launch" "make" "check")))))))
+                   (invoke "dbus-launch" "make" "check"))))))
    (propagated-inputs
     `(("at-spi2-core" ,at-spi2-core))) ; required by atk-bridge-2.0.pc
    (inputs
@@ -639,7 +649,8 @@ is part of the GNOME accessibility project.")
        (lambda _
          ;; FIXME: re-enable tests requiring an X server
          (substitute* "gtk/Makefile.in"
-           (("SUBDIRS = theme-bits . tests") "SUBDIRS = theme-bits .")))
+           (("SUBDIRS = theme-bits . tests") "SUBDIRS = theme-bits ."))
+         #t)
        %standard-phases)))
    (native-search-paths
     (list (search-path-specification
@@ -838,16 +849,18 @@ exceptions, macros, and a dynamic programming environment.")
                 (patches (search-patches "guile-rsvg-pkgconfig.patch"))
                 (modules '((guix build utils)))
                 (snippet
-                 '(substitute* (find-files "." "Makefile\\.am")
-                    (("/share/guile/site")
-                     "/share/guile/site/@GUILE_EFFECTIVE_VERSION@")))
+                 '(begin
+                    (substitute* (find-files "." "Makefile\\.am")
+                      (("/share/guile/site")
+                       "/share/guile/site/@GUILE_EFFECTIVE_VERSION@"))
+                    #t))
                 (file-name (string-append name "-" version ".tar.gz"))))
       (build-system gnu-build-system)
       (arguments
        `(#:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'bootstrap
+                    (replace 'bootstrap
                       (lambda _
-                        (zero? (system* "autoreconf" "-vfi")))))))
+                        (invoke "autoreconf" "-vfi"))))))
       (native-inputs `(("pkg-config" ,pkg-config)
                        ("autoconf" ,autoconf)
                        ("automake" ,automake)
@@ -878,9 +891,11 @@ images onto Cairo surfaces.")
               (patches (search-patches "guile-present-coding.patch"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile.in"
-                  (("godir = .*$")
-                   "godir = $(moddir)\n")))))
+               '(begin
+                  (substitute* "Makefile.in"
+                    (("godir = .*$")
+                     "godir = $(moddir)\n"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1157,32 +1172,22 @@ printing and other features typical of a source code editor.")
 (define-public python-pycairo
   (package
     (name "python-pycairo")
-    (version "1.10.0")
+    (version "1.16.3")
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "http://cairographics.org/releases/pycairo-"
-                          version ".tar.bz2"))
+      (uri (string-append "https://github.com/pygobject/pycairo/releases/download/v"
+                          version "/pycairo-" version ".tar.gz"))
       (sha256
        (base32
-        "1gjkf8x6hyx1skq3hhwcbvwifxvrf9qxis5vx8x5igmmgs70g94s"))
-      (patches (search-patches "pycairo-wscript.patch"))))
-    (build-system waf-build-system)
+        "1xq1bwhyi5imca5kvd28szh2rdzi8g0kaspwaqgsbczqskjj3csv"))))
+    (build-system python-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("python-waf" ,python-waf)))
+       ("python-pytest" ,python-pytest)))
     (propagated-inputs                  ;pycairo.pc references cairo
      `(("cairo" ,cairo)))
-    (arguments
-     `(#:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-before
-          'configure 'patch-waf
-          (lambda* (#:key inputs #:allow-other-keys)
-            ;; The bundled `waf' doesn't work with python-3.4.x.
-            (copy-file (assoc-ref %build-inputs "python-waf") "./waf"))))))
-    (home-page "http://cairographics.org/pycairo/")
+    (home-page "https://cairographics.org/pycairo/")
     (synopsis "Python bindings for cairo")
     (description
      "Pycairo is a set of Python bindings for the Cairo graphics library.")
@@ -1190,26 +1195,15 @@ printing and other features typical of a source code editor.")
     (properties `((python2-variant . ,(delay python2-pycairo))))))
 
 (define-public python2-pycairo
-  (package (inherit (strip-python2-variant python-pycairo))
-    (name "python2-pycairo")
-    (version "1.10.0")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (string-append "http://cairographics.org/releases/py2cairo-"
-                          version ".tar.bz2"))
-      (sha256
-       (base32
-        "0cblk919wh6w0pgb45zf48xwxykfif16qk264yga7h9fdkq3j16k"))))
-    (arguments
-     `(#:python ,python-2
-       ,@(substitute-keyword-arguments (package-arguments python-pycairo)
-           ((#:phases phases)
-            `(modify-phases ,phases (delete 'patch-waf)))
-           ((#:native-inputs native-inputs)
-            `(alist-delete "python-waf" ,native-inputs)))))
-    ;; Dual-licensed under LGPL 2.1 or Mozilla Public License 1.1
-    (license (list license:lgpl2.1 license:mpl1.1))))
+  (let ((pycairo (package-with-python2
+                  (strip-python2-variant python-pycairo))))
+    (package
+      (inherit pycairo)
+      (propagated-inputs
+       `(("python2-funcsigs" ,python2-funcsigs)
+         ,@(package-propagated-inputs pycairo)))
+      ;; Dual-licensed under LGPL 2.1 or Mozilla Public License 1.1
+      (license (list license:lgpl2.1 license:mpl1.1)))))
 
 (define-public python2-pygtk
   (package
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index 8c704bebcc..4fdd404de5 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -15,7 +15,7 @@
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017 Nils Gillmann <ng0@n0.is>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Pierre-Antoine Rouby <pierre-antoine.rouby@inria.fr>
@@ -186,23 +186,24 @@ without requiring the source code to be rewritten.")
    (outputs '("out" "debug"))
 
    (arguments
-    `(#:configure-flags '("--disable-static")     ;saves 3MiB
-      #:phases (alist-cons-before
-                'configure 'pre-configure
-                (lambda* (#:key inputs #:allow-other-keys)
-                  ;; Tell (ice-9 popen) the file name of Bash.
-                  (let ((bash (assoc-ref inputs "bash")))
-                    (substitute* "module/ice-9/popen.scm"
-                      ;; If bash is #f allow fallback for user to provide
-                      ;; "bash" in PATH.  This happens when cross-building to
-                      ;; MinGW for which we do not have Bash yet.
-                      (("/bin/sh")
-                       ,@(if (target-mingw?)
-                             '((if bash
-                                   (string-append bash "/bin/bash")
-                                   "bash"))
-                             '((string-append bash "/bin/bash")))))))
-                %standard-phases)))
+    `(#:configure-flags '("--disable-static") ; saves 3 MiB
+      #:phases
+      (modify-phases %standard-phases
+        (add-before 'configure 'pre-configure
+          (lambda* (#:key inputs #:allow-other-keys)
+            ;; Tell (ice-9 popen) the file name of Bash.
+            (let ((bash (assoc-ref inputs "bash")))
+              (substitute* "module/ice-9/popen.scm"
+                ;; If bash is #f allow fallback for user to provide
+                ;; "bash" in PATH.  This happens when cross-building to
+                ;; MinGW for which we do not have Bash yet.
+                (("/bin/sh")
+                 ,@(if (target-mingw?)
+                       '((if bash
+                             (string-append bash "/bin/bash")
+                             "bash"))
+                       '((string-append bash "/bin/bash")))))
+              #t))))))
 
    (native-search-paths
     (list (search-path-specification
@@ -242,8 +243,10 @@ without requiring the source code to be rewritten.")
               ;; Remove the pre-built object files.  Instead, build everything
               ;; from source, at the expense of significantly longer build
               ;; times (almost 3 hours on a 4-core Intel i5).
-              (snippet '(for-each delete-file
-                                  (find-files "prebuilt" "\\.go$")))))
+              (snippet '(begin
+                          (for-each delete-file
+                                    (find-files "prebuilt" "\\.go$"))
+                          #t))))
     (properties '((timeout . 72000)               ;20 hours
                   (max-silent-time . 36000)))     ;10 hours (needed on ARM
                                                   ;  when heavily loaded)
@@ -279,10 +282,9 @@ without requiring the source code to be rewritten.")
   (package
     (inherit guile-2.2)
     (properties '((hidden? . #t)            ;people should install 'guile-2.2'
-                  (timeout . 72000)            ;20 hours
-                  (max-silent-time . 36000)))  ;10 hours (needed on ARM
-                                               ;  when heavily loaded)
-    (replacement #f)))
+                  (timeout . 72000)             ;20 hours
+                  (max-silent-time . 36000))))) ;10 hours (needed on ARM
+                                                ;  when heavily loaded)
 
 (define-public guile-2.2.2
   ;; Keep it so that, when 'guix' runs on 2.2.2, 'guix pull' compiles objects
@@ -527,7 +529,8 @@ program can be installed in one go.")
                                       post)))
                     (substitute* "artanis/artanis.scm"
                       (("[[:punct:][:space:]]+->json-string[[:punct:][:space:]]+")
-                       ""))))))
+                       ""))
+                    #t))))
       (build-system gnu-build-system)
       ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
       (inputs `(("guile" ,guile-2.2)
@@ -829,7 +832,8 @@ for Guile\".")
                      "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
                   (substitute* '("Makefile.in" "json/Makefile.in")
                     (("moddir =.*/share/guile/site" all)
-                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
+                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
+                  #t))))
     (build-system gnu-build-system)
     (native-inputs `(("guile" ,guile-2.2)))
     (home-page "https://savannah.nongnu.org/projects/guile-json/")
@@ -908,16 +912,15 @@ specification.  These are the main features:
                          ;; Install source module.
                          (copy-file file dest-file)
                          ;; Install compiled module.
-                         (unless (zero? (system* guild "compile"
-                                                 "-L" source
-                                                 "-o" go-file
-                                                 file))
-                           (error (format #f "Failed to compile ~s to ~s!"
-                                          file go-file)))))
+                         (invoke guild "compile"
+                                 "-L" source
+                                 "-o" go-file
+                                 file)))
                      scm-files)
 
            ;; Also copy over the README.
            (install-file "README.org" doc)
+
            #t))))
     (inputs
      `(("guile" ,guile-2.2)))
@@ -1066,12 +1069,10 @@ understand, extend, and port to host languages other than Scheme.")
                                 (copy-file src-file
                                            dest-file)
                                 ;; Install compiled module.
-                                (unless (zero? (system* guild "compile"
-                                                        "-L" (getcwd)
-                                                        "-o" go-file
-                                                        src-file))
-                                  (error (format #f "Failed to compile ~s to ~s!"
-                                                 src-file dest-file)))))))
+                                (invoke guild "compile"
+                                        "-L" (getcwd)
+                                        "-o" go-file
+                                        src-file)))))
                          '(("irregex-guile.scm" "/rx/irregex")
                            ("irregex.scm" "/rx/source/irregex")
                            ;; Not really reachable via guile's packaging system,
@@ -1114,6 +1115,15 @@ inspired by the SCSH regular expression system.")
                (base32
                 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj"))))
     (build-system trivial-build-system)
+    (inputs
+     `(("guile" ,guile-2.2)
+       ;; patch-and-repack doesn't work for git checkouts,
+       ;; so we must apply the patch manually.
+       ("patch" ,patch)
+       ("patch-file" ,(search-patch
+                       "guile-gdbm-ffi-support-gdbm-1.14.patch"))))
+    (propagated-inputs
+     `(("gdbm" ,gdbm)))
     (arguments
      `(#:modules
        ((guix build utils))
@@ -1146,7 +1156,7 @@ inspired by the SCSH regular expression system.")
                  (string-append module-dir "/gdbm.go"))
                 (compile-file
                  (lambda (in-file out-file)
-                   (system* guild "compile" "-o" out-file in-file))))
+                   (invoke guild "compile" "-o" out-file in-file))))
            ;; Switch directory for compiling and installing
            (chdir source)
 
@@ -1166,12 +1176,18 @@ inspired by the SCSH regular expression system.")
               (format #f "(dynamic-link \"~a/lib/libgdbm.so\")"
                       (assoc-ref %build-inputs "gdbm"))))
 
+           ;; Apply the patch to add support for gdbm-1.14.
+           (let ((patch-command (string-append (assoc-ref %build-inputs "patch")
+                                               "/bin/patch"))
+                 (patch-file (assoc-ref %build-inputs "patch-file")))
+             (with-directory-excursion (dirname gdbm.scm-dest)
+               (format #t "applying '~a'...~%" patch-file)
+               (invoke patch-command "--force" "--input" patch-file)))
+
            ;; compile to the destination
-           (compile-file gdbm.scm-dest gdbm.go-dest)))))
-    (inputs
-     `(("guile" ,guile-2.2)))
-    (propagated-inputs
-     `(("gdbm" ,gdbm)))
+           (compile-file gdbm.scm-dest gdbm.go-dest)
+
+           #t))))
     (home-page "https://github.com/ijp/guile-gdbm")
     (synopsis "Guile bindings to the GDBM library via Guile's FFI")
     (description
@@ -1208,9 +1224,11 @@ Guile's foreign function interface.")
                 (modules '((guix build utils)))
                 (snippet
                  ;; Upgrade 'Makefile.am' to the current way of doing things.
-                 '(substitute* "Makefile.am"
-                    (("TESTS_ENVIRONMENT")
-                     "TEST_LOG_COMPILER")))))
+                 '(begin
+                    (substitute* "Makefile.am"
+                      (("TESTS_ENVIRONMENT")
+                       "TEST_LOG_COMPILER"))
+                    #t))))
 
       (build-system gnu-build-system)
       (native-inputs
@@ -1356,7 +1374,8 @@ above command-line parameters.")
                                  "redis/Makefile.in"
                                  "redis/commands/Makefile.in")
                     (("moddir =.*/share/guile/site" all)
-                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
+                     (string-append all "/@GUILE_EFFECTIVE_VERSION@")))
+                  #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("guile" ,guile-2.2)))
@@ -1472,7 +1491,8 @@ users and in some situations.")
                     (("godir = .*$")
                      (string-append
                       "godir = "
-                      "$(prefix)/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))))))
+                      "$(prefix)/lib/guile/@GUILE_EFFECTIVE_VERSION@/site-ccache\n")))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -1739,7 +1759,8 @@ you send to a FIFO file.")
                      "ac_subst_vars='GUILE_EFFECTIVE_VERSION\n"))
                   (substitute* "Makefile.in"
                     (("/site/2.0")
-                     "/site/@GUILE_EFFECTIVE_VERSION@"))))))
+                     "/site/@GUILE_EFFECTIVE_VERSION@"))
+                  #t))))
     (build-system gnu-build-system)
     (inputs
      `(("guile" ,guile-2.2)))
@@ -1849,12 +1870,7 @@ dictionary and suggesting spelling corrections.")
                 (file-name (string-append name "-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
-       '(#:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'bootstrap
-                      (lambda _
-                        (zero? (system* "sh" "bootstrap")))))
-
-         #:configure-flags
+       '(#:configure-flags
          ;; Add -I to match 'bash.pc' of Bash 4.4.
          (list (string-append "CPPFLAGS=-I"
                               (assoc-ref %build-inputs "bash:include")
@@ -1984,10 +2000,6 @@ is not available for Guile 2.0.")
       (build-system gnu-build-system)
       (arguments
        `(#:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'bootstrap
-                      (lambda _
-                        (zero? (system* "autoreconf" "-vfi"))))
-
                     ;; FIXME: On i686, bytestructures miscalculates the offset
                     ;; of the 'old-file' and 'new-file' fields within the
                     ;; '%diff-delta' structure.  See
@@ -2037,8 +2049,8 @@ manipulate repositories of the Git version control system.")
      `(("pkg-config" ,pkg-config)))
     (inputs
      `(("guile" ,guile-2.2)))
-      (synopsis "General-purpose syntax highlighter for GNU Guile")
-      (description "Guile-syntax-highlight is a general-purpose syntax
+    (synopsis "General-purpose syntax highlighter for GNU Guile")
+    (description "Guile-syntax-highlight is a general-purpose syntax
 highlighting library for GNU Guile.  It can parse code written in various
 programming languages into a simple s-expression that can be converted to
 HTML (via SXML) or any other format for rendering.")
@@ -2057,11 +2069,6 @@ HTML (via SXML) or any other format for rendering.")
                (base32
                 "1mzmapln79vv10qxaggz9qwcdbag3jnrj19xx8bgkmxss8h03sv3"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _ (zero? (system* "sh" "bootstrap.sh")))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index c8fade065d..83e71ce869 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -283,9 +283,11 @@ top of CLISP.")
                   (mkdir-p libtinfo-dir)
                   (symlink
                    (string-append ncurses-lib "/libncursesw.so."
-                                  ;; Extract "6.0" from "6.0-20170930".
+                                  ;; Extract "6.0" from "6.0-20170930" if a
+                                  ;; dash-separated version tag exists.
                                   ,(let* ((v (package-version ncurses))
-                                          (d (string-index v #\-)))
+                                          (d (or (string-index v #\-)
+                                                 (string-length v))))
                                      (version-major+minor (string-take v d))))
                    (string-append libtinfo-dir "/libtinfo.so.5"))
 
@@ -1823,7 +1825,7 @@ bindings are a direct translation of the C bindings.")
        ("ghc-utf8-string" ,ghc-utf8-string)
        ("libx11" ,libx11)
        ("libxft" ,libxft)
-       ("xproto" ,xproto)))
+       ("xorgproto" ,xorgproto)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (build-system haskell-build-system)
diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm
index a29e5bafd2..d6c1fb5e64 100644
--- a/gnu/packages/hurd.scm
+++ b/gnu/packages/hurd.scm
@@ -60,8 +60,7 @@
        (modify-phases %standard-phases
          (replace 'install
            (lambda _
-             (zero?
-              (system* "make" "install-data"))))
+             (invoke "make" "install-data")))
          (delete 'build))
 
       ;; GNU Mach supports only IA32 currently, so cheat so that we can at
@@ -128,7 +127,7 @@ communication.")
        (modify-phases %standard-phases
          (replace 'install
            (lambda _
-             (zero? (system* "make" "install-headers" "no_deps=t"))))
+             (invoke "make" "install-headers" "no_deps=t")))
          (delete 'build))
 
        #:configure-flags '(;; Pretend we're on GNU/Hurd; 'configure' wants
@@ -179,7 +178,7 @@ Library and other user programs.")
                  #t)))
            (replace 'build
              (lambda _
-               (zero? (system* "make" "-Clibihash" "libihash.a"))))))))
+               (invoke "make" "-Clibihash" "libihash.a")))))))
     (home-page "https://www.gnu.org/software/hurd/hurd.html")
     (synopsis "GNU Hurd libraries")
     (description
@@ -201,7 +200,8 @@ Library for GNU/Hurd.")
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs `(("gnumach-headers" ,gnumach-headers)
               ("hurd-headers" ,hurd-headers)
               ("hurd-minimal" ,hurd-minimal)))
@@ -229,10 +229,9 @@ Hurd-minimal package which are needed for both glibc and GCC.")
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((out  (assoc-ref outputs "out"))
                              (boot (string-append out "/boot")))
-                        (and (zero? (system* "make" "gnumach.gz"))
-                             (begin
-                               (install-file "gnumach.gz" boot)
-                               #t))))))))
+                        (invoke "make" "gnumach.gz")
+                        (install-file "gnumach.gz" boot)
+                        #t))))))
     (native-inputs
      `(("mig" ,mig)
        ("perl" ,perl)))
diff --git a/gnu/packages/icu4c.scm b/gnu/packages/icu4c.scm
index 57e8fffb35..c4d3703794 100644
--- a/gnu/packages/icu4c.scm
+++ b/gnu/packages/icu4c.scm
@@ -32,7 +32,7 @@
 (define-public icu4c
   (package
    (name "icu4c")
-   (version "60.2")
+   (version "61.1")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -42,7 +42,7 @@
                   (string-map (lambda (x) (if (char=? x #\.) #\_ x)) version)
                   "-src.tgz"))
             (sha256
-             (base32 "065l3n0q9wqaw8dz20x82srshhm6i987fr9ync5xf9mr6n7ylwzh"))))
+             (base32 "1vxgkx0cyvdy00a9yd5khkx14r5kcndkax2wa99klm52x2dgh1yh"))))
    (build-system gnu-build-system)
    (inputs
     `(("perl" ,perl)))
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index c69629e4a9..8f80b75af4 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -169,7 +169,7 @@ of external libraries that provide additional functionality.")
        #:tests? #f))                              ;XXX: no "test" target
     (inputs
      `(("libXt" ,libxt)
-       ("xproto" ,xproto)
+       ("xorgproto" ,xorgproto)
        ("libX11" ,libx11)
        ("libxml2" ,libxml2)
        ("mesa" ,mesa)
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index d6c39e5c7e..37d51f1e51 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -395,7 +395,6 @@ extracting icontainer icon files.")
   (package
    (name "libtiff")
    (version "4.0.9")
-   (replacement libtiff/fixed)
    (source
      (origin
        (method url-fetch)
@@ -403,7 +402,9 @@ extracting icontainer icon files.")
                            version ".tar.gz"))
        (sha256
         (base32
-         "1kfg4q01r4mqn7dj63ifhi6pmqzbf4xax6ni6kkk81ri5kndwyvf"))))
+         "1kfg4q01r4mqn7dj63ifhi6pmqzbf4xax6ni6kkk81ri5kndwyvf"))
+       (patches (search-patches "libtiff-CVE-2017-9935.patch"
+                                "libtiff-CVE-2017-18013.patch"))))
    (build-system gnu-build-system)
    (outputs '("out"
               "doc"))                           ;1.3 MiB of HTML documentation
@@ -425,17 +426,6 @@ collection of tools for doing simple manipulations of TIFF images.")
                                   "See COPYRIGHT in the distribution."))
    (home-page "http://www.simplesystems.org/libtiff/")))
 
-(define libtiff/fixed
-  (package
-    (inherit libtiff)
-    (source
-      (origin
-        (inherit (package-source libtiff))
-        (patches
-          (append (origin-patches (package-source libtiff))
-                  (search-patches "libtiff-CVE-2017-9935.patch"
-                                  "libtiff-CVE-2017-18013.patch")))))))
-
 (define-public leptonica
   (package
     (name "leptonica")
@@ -593,7 +583,8 @@ error-resilience, a Java-viewer for j2k-images, ...")
          (add-after 'unpack 'disable-html-doc-gen
            (lambda _
              (substitute* "doc/Makefile.in"
-               (("^all: allhtml manpages") ""))))
+               (("^all: allhtml manpages") ""))
+             #t))
          (add-after 'install 'install-manpages
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((bin (assoc-ref outputs "bin"))
@@ -606,7 +597,8 @@ error-resilience, a Java-viewer for j2k-images, ...")
                              (copy-file file
                                         (string-append
                                          man1dir "/" base))))
-                         (find-files "doc" "\\.1"))))))))
+                         (find-files "doc" "\\.1"))
+               #t))))))
     (synopsis "Tools and library for working with GIF images")
     (description
      "GIFLIB is a library for reading and writing GIF images.  It is API and
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index d4edbec31d..e80da6d848 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -77,7 +77,8 @@
                         (let ((doc (assoc-ref outputs "doc")))
                           (string-append "DOCUMENTATION_PATH = "
                                          doc "/share/doc/"
-                                         ,name "-" ,version "\n"))))))
+                                         ,name "-" ,version "\n"))))
+                     #t))
                   (add-before
                    'configure 'strip-configure-xml
                    (lambda _
@@ -87,7 +88,8 @@
                        ;; include --docdir, and thus retain a reference to the
                        ;; 'doc' output.
                        (("@CONFIGURE_ARGS@")
-                        "not recorded")))))))
+                        "not recorded"))
+                     #t)))))
     ;; TODO: Add Jasper etc.
     (inputs `(("fftw" ,fftw)
               ("graphviz" ,graphviz)
@@ -144,7 +146,8 @@ text, lines, polygons, ellipses and Bézier curves.")
                 (("my \\$INC_magick = .*")
                  "my $INC_magick = `pkg-config --cflags ImageMagick`;\n")
                 (("my \\$LIBS_magick = .*")
-                 "my $LIBS_magick = `pkg-config --libs ImageMagick`;\n")))))
+                 "my $LIBS_magick = `pkg-config --libs ImageMagick`;\n"))
+              #t)))
          (add-before
           'check 'skip-mpeg-tests
           (lambda _
@@ -152,7 +155,8 @@ text, lines, polygons, ellipses and Bézier curves.")
             ;; MPEG.  Has been reported elsewhere,
             ;; http://www.imagemagick.org/discourse-server/viewtopic.php?f=7&t=25036,
             ;; so skip for now.
-            (delete-file "t/mpeg/read.t"))))))
+            (delete-file "t/mpeg/read.t")
+            #t)))))
     (home-page "http://search.cpan.org/dist/PerlMagick")
     (synopsis "Perl interface to ImageMagick")
     (description "This Perl extension allows the reading, manipulation and
diff --git a/gnu/packages/irc.scm b/gnu/packages/irc.scm
index 219e803089..2b266748ae 100644
--- a/gnu/packages/irc.scm
+++ b/gnu/packages/irc.scm
@@ -80,7 +80,8 @@
          '(begin
             (delete-file-recursively "data/scripts")
             (substitute* "data/CMakeLists.txt"
-              (("NOT WIN32") "WIN32"))))))
+              (("NOT WIN32") "WIN32"))
+            #t))))
     (build-system cmake-build-system)
     (arguments
       ;; The three binaries are not mutually exlusive, and are all built
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 1efa657816..5511c04a08 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -551,9 +551,10 @@ machine.")))
                "--disable-gjdoc")
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'bootstrap
-             (lambda _
-               (zero? (system* "autoreconf" "-vif"))))
+           ;; XXX The bootstrap phase executes autogen.sh, which fails after
+           ;; complaining about the lack of gettext.
+           (replace 'bootstrap
+             (lambda _ (invoke "autoreconf" "-vif")))
            (add-after 'unpack 'remove-unsupported-annotations
              (lambda _
                (substitute* (find-files "java" "\\.java$")
@@ -622,10 +623,12 @@ machine.")))
                 "0bg9sb4f7qbq77c0zf9m17p47ga0kf0r9622g9p12ysg26jd1ksg"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile.in"
-                  ;; do not leak information about the build host
-                  (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
-                   "DISTRIBUTION_ID=\"\\\"guix\\\"\"")))))
+               '(begin
+                  (substitute* "Makefile.in"
+                    ;; do not leak information about the build host
+                    (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
+                     "DISTRIBUTION_ID=\"\\\"guix\\\"\""))
+                  #t))))
     (build-system gnu-build-system)
     (outputs '("out"   ; Java Runtime Environment
                "jdk"   ; Java Development Kit
@@ -968,10 +971,12 @@ bootstrapping purposes.")
                   "1w331rdqx1dcx2xb0fmjmrkdc71xqn20fxsgw8by4xhiblh88khh"))
                 (modules '((guix build utils)))
                 (snippet
-                 '(substitute* "Makefile.in"
-                    ;; do not leak information about the build host
-                    (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
-                     "DISTRIBUTION_ID=\"\\\"guix\\\"\"")))))
+                 '(begin
+                    (substitute* "Makefile.in"
+                      ;; do not leak information about the build host
+                      (("DISTRIBUTION_ID=\"\\$\\(DIST_ID\\)\"")
+                       "DISTRIBUTION_ID=\"\\\"guix\\\"\""))
+                    #t))))
       (build-system gnu-build-system)
       (outputs '("out"   ; Java Runtime Environment
                  "jdk"   ; Java Development Kit
diff --git a/gnu/packages/javascript.scm b/gnu/packages/javascript.scm
index e2742faa11..3a9e88ad08 100644
--- a/gnu/packages/javascript.scm
+++ b/gnu/packages/javascript.scm
@@ -61,10 +61,10 @@
                                %build-inputs))
          (let ((install-directory (string-append %output "/share/fonts/mathjax")))
            (mkdir-p install-directory)
-           (zero? (system* "tar" "-C" install-directory "-xvf"
-                           (assoc-ref %build-inputs "source")
-                           ,(string-append "MathJax-" version "/fonts")
-                           "--strip" "2"))))))
+           (invoke "tar" "-C" install-directory "-xvf"
+                   (assoc-ref %build-inputs "source")
+                   ,(string-append "MathJax-" version "/fonts")
+                   "--strip" "2")))))
     (native-inputs
      `(("gzip" ,gzip)
        ("tar" ,tar)))
@@ -95,10 +95,10 @@
           (list (assoc-ref %build-inputs "glibc-utf8-locales")))
          (setenv "LANG" "en_US.UTF-8")
          (let ((install-directory (string-append %output "/share/javascript/mathjax")))
-           (system* "tar" "xvf" (assoc-ref %build-inputs "source")
-                    ,(string-append "MathJax-" (package-version font-mathjax)
-                                    "/unpacked")
-                    "--strip" "2")
+           (invoke "tar" "xvf" (assoc-ref %build-inputs "source")
+                   ,(string-append "MathJax-" (package-version font-mathjax)
+                                   "/unpacked")
+                   "--strip" "2")
            (mkdir-p install-directory)
            (symlink (string-append (assoc-ref %build-inputs "font-mathjax")
                                    "/share/fonts/mathjax")
@@ -119,7 +119,9 @@
                         (dump-port minified port)))))
                  (else
                   (install-file file (dirname installed))))))
-            (find-files "."))))))
+            (find-files "."))
+
+           #t))))
     (native-inputs
      `(("font-mathjax" ,font-mathjax)
        ("glibc-utf8-locales" ,glibc-utf8-locales)
@@ -160,9 +162,9 @@ be able to view it naturally and easily.")))
                                %build-inputs))
          (let ((install-directory (string-append %output
                                                  "/share/javascript/respond/")))
-           (system* "tar" "xvf"
-                    (assoc-ref %build-inputs "source")
-                    "--strip" "1")
+           (invoke "tar" "xvf"
+                   (assoc-ref %build-inputs "source")
+                   "--strip" "1")
            (mkdir-p install-directory)
            (let* ((file "src/respond.js")
                   (installed (string-append install-directory "respond.min.js")))
diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm
index fdba670b0b..7dc2cf37fe 100644
--- a/gnu/packages/kde-frameworks.scm
+++ b/gnu/packages/kde-frameworks.scm
@@ -117,7 +117,8 @@
              (substitute* "modules/ECMGeneratePriFile.cmake"
                ;; Install pri-files into lib/qt5/mkspecs
                (("set\\(ECM_MKSPECS_INSTALL_DIR mkspecs/modules")
-                "set(ECM_MKSPECS_INSTALL_DIR lib/qt5/mkspecs/modules"))))
+                "set(ECM_MKSPECS_INSTALL_DIR lib/qt5/mkspecs/modules"))
+             #t))
          ;; install and check phase are swapped to prevent install from failing
          ;; after testsuire has run
          (add-after 'install 'check-post-install
diff --git a/gnu/packages/kerberos.scm b/gnu/packages/kerberos.scm
index 4ef604d02a..6877f5b873 100644
--- a/gnu/packages/kerberos.scm
+++ b/gnu/packages/kerberos.scm
@@ -147,9 +147,11 @@ secure manner through client-server mutual authentication via tickets.")
                                        "heimdal-CVE-2017-11103.patch"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "configure"
-                  (("User=.*$") "User=Guix\n")
-                  (("Date=.*$") "Date=2017\n")))))
+               '(begin
+                  (substitute* "configure"
+                    (("User=.*$") "User=Guix\n")
+                    (("Date=.*$") "Date=2017\n"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags (list
diff --git a/gnu/packages/kodi.scm b/gnu/packages/kodi.scm
index ad66a846d4..6f8571d22a 100644
--- a/gnu/packages/kodi.scm
+++ b/gnu/packages/kodi.scm
@@ -146,8 +146,6 @@ generator library for C++.")
        '(#:tests? #f
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'bootstrap
-             (lambda _ (zero? (system* "autoreconf" "-vif"))))
            (delete 'configure)
            (delete 'build)
            (replace 'install
@@ -183,8 +181,6 @@ generator library for C++.")
        '(#:tests? #f
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'bootstrap
-             (lambda _ (zero? (system* "autoreconf" "-vif"))))
            (delete 'configure)
            (delete 'build)
            (replace 'install
@@ -220,8 +216,6 @@ generator library for C++.")
        '(#:tests? #f
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'bootstrap
-             (lambda _ (zero? (system* "autoreconf" "-vif"))))
            (delete 'configure)
            (delete 'build)
            (replace 'install
diff --git a/gnu/packages/ld-wrapper.in b/gnu/packages/ld-wrapper.in
index 82bd2196cf..16780c58f6 100644
--- a/gnu/packages/ld-wrapper.in
+++ b/gnu/packages/ld-wrapper.in
@@ -15,7 +15,7 @@ main="(@ (gnu build-support ld-wrapper) ld-wrapper)"
 exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line)))" "$@"
 !#
 ;;; 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.
 ;;;
@@ -81,7 +81,19 @@ exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line))
 
 (define %allow-impurities?
   ;; Whether to allow references to libraries outside the store.
-  (getenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES"))
+  ;; Allow them by default for convenience.
+  (let ((value (getenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES")))
+    (or (not value)
+        (let ((value (string-downcase value)))
+          (cond ((member value '("yes" "y" "t" "true" "1"))
+                 #t)
+                ((member value '("no" "n" "f" "false" "0"))
+                 #f)
+                (else
+                 (format (current-error-port)
+                         "ld-wrapper: ~s: invalid value for \
+'GUIX_LD_WRAPPER_ALLOW_IMPURITIES'~%"
+                         value)))))))
 
 (define %debug?
   ;; Whether to emit debugging output.
@@ -217,8 +229,8 @@ exec @GUILE@ -c "(load-compiled \"@SELF@.go\") (apply $main (cdr (command-line))
                        (begin
                          (format (current-error-port)
                                  "ld-wrapper: error: attempt to use \
-impure library ~s~%"
-                                 file)
+library outside of ~a: ~s~%"
+                                 %store-directory file)
                          (exit 1)))))
               '()
               library-files))
@@ -270,7 +282,8 @@ impure library ~s~%"
               "ld-wrapper: libraries linked: ~s~%" libs)
       (format (current-error-port)
               "ld-wrapper: invoking `~a' with ~s~%"
-              %real-ld args))
+              %real-ld args)
+      (force-output (current-error-port)))
     (apply execl %real-ld (basename %real-ld) args)))
 
 ;;; ld-wrapper.scm ends here
diff --git a/gnu/packages/libbsd.scm b/gnu/packages/libbsd.scm
index 3bfa2a3fec..58b0be872c 100644
--- a/gnu/packages/libbsd.scm
+++ b/gnu/packages/libbsd.scm
@@ -25,14 +25,14 @@
 (define-public libbsd
   (package
     (name "libbsd")
-    (version "0.8.3")
+    (version "0.8.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://libbsd.freedesktop.org/releases/"
                                   "libbsd-" version ".tar.xz"))
               (sha256
                (base32
-                "1a1l7afchlvvj2zfi7ajcg26bbkh5i98y2v5h9j5p1px9m7n6jwk"))))
+                "0c9bl49zs0xdddcwj5dh0lay9sxi2m1yi74848g8p87mb87g2j7m"))))
     (build-system gnu-build-system)
     (synopsis "Utility functions from BSD systems")
     (description "This library provides useful functions commonly found on BSD
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index d6b70a4f17..983c8625e4 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -121,14 +121,14 @@ limited support for fork events.")
 (define-public libuv
   (package
     (name "libuv")
-    (version "1.18.0")
+    (version "1.19.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dist.libuv.org/dist/v" version
                                   "/libuv-v" version ".tar.gz"))
               (sha256
                (base32
-                "125bzmzc32m52hd9iv8jvjlc7r3gadxgvp31a2fz2wlil16p7r2l"))))
+                "1msk9ac1z69whww88ibrwjqkd1apdla6l77cm2fwy5kigq0z5g3w"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -136,7 +136,7 @@ limited support for fork events.")
                     (lambda _
                       ;; Fashionable people don't run 'make dist' these days, so
                       ;; we need to do that ourselves.
-                      (zero? (system* "sh" "autogen.sh")))))
+                      (invoke "sh" "autogen.sh"))))
 
        ;; XXX: Some tests want /dev/tty, attempt to make connections, etc.
        #:tests? #f))
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm
index 80a21c0264..0d54c305b2 100644
--- a/gnu/packages/libffi.scm
+++ b/gnu/packages/libffi.scm
@@ -36,29 +36,28 @@
   #:use-module (guix build-system ruby))
 
 (define-public libffi
-  (let ((post-install-phase
-         ;; Keep headers where libffi.pc expects them, but also make them
-         ;; available in $includedir where some users expect them.
-         '(lambda* (#:key outputs #:allow-other-keys)
-            (define out (assoc-ref outputs "out"))
-            (symlink (string-append out "/lib/libffi-3.2.1/include")
-                     (string-append out "/include")))))
-   (package
+  (package
     (name "libffi")
     (version "3.2.1")
     (source (origin
-             (method url-fetch)
-             (uri
-              (string-append "ftp://sourceware.org/pub/libffi/"
-                             name "-" version ".tar.gz"))
-             (sha256
-              (base32
-               "0dya49bnhianl0r65m65xndz6ls2jn1xngyn72gd28ls3n7bnvnh"))
-             (patches (search-patches "libffi-3.2.1-complex-alpha.patch"))))
+              (method url-fetch)
+              (uri
+               (string-append "ftp://sourceware.org/pub/libffi/"
+                              name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0dya49bnhianl0r65m65xndz6ls2jn1xngyn72gd28ls3n7bnvnh"))
+              (patches (search-patches "libffi-3.2.1-complex-alpha.patch"))))
     (build-system gnu-build-system)
-    (arguments `(#:phases (alist-cons-after 'install 'post-install
-                                            ,post-install-phase
-                                            %standard-phases)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'post-install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (define out (assoc-ref outputs "out"))
+             (symlink (string-append out "/lib/libffi-3.2.1/include")
+                      (string-append out "/include"))
+             #t)))))
     (outputs '("out" "debug"))
     (synopsis "Foreign function call interface library")
     (description
@@ -75,7 +74,7 @@ conversions for values passed between the two languages.")
     (home-page "http://sources.redhat.com/libffi/")
 
     ;; See <https://github.com/atgreen/libffi/blob/master/LICENSE>.
-    (license expat))))
+    (license expat)))
 
 (define-public python-cffi
   (package
diff --git a/gnu/packages/libidn.scm b/gnu/packages/libidn.scm
index c2290b53af..249c3f8458 100644
--- a/gnu/packages/libidn.scm
+++ b/gnu/packages/libidn.scm
@@ -32,14 +32,14 @@
 (define-public libidn
   (package
    (name "libidn")
-   (version "1.33")
+   (version "1.34")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/libidn/libidn-" version
                                 ".tar.gz"))
             (sha256
              (base32
-              "068fjg2arlppjqqpzd714n1lf6gxkpac9v5yyvp1qwmv6nvam9s4"))
+              "0g3fzypp0xjcgr90c5cyj57apx1cmy0c6y9lvw2qdcigbyby469p"))
             (modules '((guix build utils)))
             (snippet
              '(begin
diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm
index a763b5f95c..1faab302a0 100644
--- a/gnu/packages/libreoffice.scm
+++ b/gnu/packages/libreoffice.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Andy Wingo <wingo@igalia.com>
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;;
@@ -705,12 +705,6 @@ Zoner Draw version 4 and 5.")
        ("libtool" ,libtool)))
     (inputs
      `(("perl" ,perl)))
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (invoke "autoreconf" "-vfi") #t)))))
     (native-search-paths (list (search-path-specification
                                 (variable "DICPATH")
                                 (files '("share/hunspell")))))
@@ -752,8 +746,8 @@ word compounding or character encoding.")
                           (doc      (string-append out "/share/doc/"
                                                    ,name))
                           (unzip    (assoc-ref %build-inputs "unzip")))
-                     (system* (string-append unzip "/bin/unzip")
-                              (assoc-ref %build-inputs "source"))
+                     (invoke (string-append unzip "/bin/unzip")
+                             (assoc-ref %build-inputs "source"))
                      (for-each (cut install-file <> hunspell)
                                (find-files "."
                                            ,(string-append variant
diff --git a/gnu/packages/libsigsegv.scm b/gnu/packages/libsigsegv.scm
index 2a44819820..7f63bb26c4 100644
--- a/gnu/packages/libsigsegv.scm
+++ b/gnu/packages/libsigsegv.scm
@@ -26,14 +26,14 @@
 (define-public libsigsegv
   (package
    (name "libsigsegv")
-   (version "2.11")
+   (version "2.12")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/libsigsegv/libsigsegv-"
                   version ".tar.gz"))
             (sha256
-             (base32 "063swdvq7mbmc1clv0rnh20grwln1zfc2qnm0sa1hivcxyr2wz6x"))))
+             (base32 "1dlhqf4igzpqayms25lkhycjq1ccavisx8cnb3y4zapbkqsszq9s"))))
    (build-system gnu-build-system)
    (home-page "https://www.gnu.org/software/libsigsegv/")
    (synopsis "Library for handling page faults")
diff --git a/gnu/packages/libunistring.scm b/gnu/packages/libunistring.scm
index 1d421fb17d..6a3afd4f05 100644
--- a/gnu/packages/libunistring.scm
+++ b/gnu/packages/libunistring.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
@@ -32,7 +32,7 @@
 (define-public libunistring
   (package
    (name "libunistring")
-   (version "0.9.8")
+   (version "0.9.9")
    (source (origin
             (method url-fetch)
             (uri (string-append
@@ -40,7 +40,7 @@
                   version ".tar.xz"))
             (sha256
              (base32
-              "101gjj9q39pjlcaixylya6is5i7vlbnxr1w5w6raqvvhab7ki4vv"))
+              "0cx8v6862w7vvacbkcvg49kfx731ckdgaybmzw1zav71zkn97nd4"))
             (modules '((guix build utils)))
             (snippet
              '(begin
diff --git a/gnu/packages/libusb.scm b/gnu/packages/libusb.scm
index bd79972a6e..62c936c191 100644
--- a/gnu/packages/libusb.scm
+++ b/gnu/packages/libusb.scm
@@ -338,12 +338,6 @@ devices.")
                (base32
                 "0qdgyj9rgb7n0nk3ghfswrhzzknxqn4ibn3wj8g4r828pw07451w"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vfi")))))))
     (inputs
      `(("libusb" ,libusb)
        ("udev" ,eudev)))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 800b8f8881..839a14e6c3 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014, 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
@@ -160,13 +160,13 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
 (define-public linux-libre-headers
   (package
     (name "linux-libre-headers")
-    (version "4.9.59")
+    (version "4.14.26")
     (source (origin
              (method url-fetch)
              (uri (linux-libre-urls version))
              (sha256
               (base32
-               "0z8hq8a6ic38xh33idzl0k0yi4isgd7ncl2g1d6mzf9ixw5krhvc"))))
+               "1m2zr17wpasg5riysbaa4g5i492jzr93py2jm088ki818s4a9cm3"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)))
     (arguments
@@ -186,29 +186,29 @@ defconfig.  Return the appropriate make target if applicable, otherwise return
                                     (%current-system)))))
                (setenv "ARCH" arch)
                (format #t "`ARCH' set to `~a'~%" (getenv "ARCH"))
-               (and (zero? (system* "make" defconfig))
-                    (zero? (system* "make" "mrproper" "headers_check"))))))
+               (invoke "make" defconfig)
+               (invoke "make" "mrproper" "headers_check"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (and (zero? (system* "make"
-                                    (string-append "INSTALL_HDR_PATH=" out)
-                                    "headers_install"))
-                    (begin
-                      (mkdir (string-append out "/include/config"))
-                      (call-with-output-file
-                          (string-append out
-                                         "/include/config/kernel.release")
-                        (lambda (p)
-                          (format p "~a-default~%" ,version)))
-
-                      ;; Remove the '.install' and '..install.cmd' files; the
-                      ;; latter contains store paths, which pulls in bootstrap
-                      ;; binaries in the build environment, and prevents bit
-                      ;; reproducibility for the bootstrap binaries.
-                      (for-each delete-file (find-files out "\\.install"))
-
-                      #t))))))
+               (invoke "make"
+                       (string-append "INSTALL_HDR_PATH=" out)
+                       "headers_install")
+
+               (mkdir (string-append out "/include/config"))
+               (call-with-output-file
+                   (string-append out
+                                  "/include/config/kernel.release")
+                 (lambda (p)
+                   (format p "~a-default~%" ,version)))
+
+               ;; Remove the '.install' and '..install.cmd' files; the
+               ;; latter contains store paths, which pulls in bootstrap
+               ;; binaries in the build environment, and prevents bit
+               ;; reproducibility for the bootstrap binaries.
+               (for-each delete-file (find-files out "\\.install"))
+
+               #t))))
        #:allowed-references ()
        #:tests? #f))
     (home-page "https://www.gnu.org/software/linux-libre/")
@@ -559,7 +559,7 @@ providing the system administrator with some help in common tasks.")
 (define-public util-linux
   (package
     (name "util-linux")
-    (version "2.31")
+    (version "2.32")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/utils/"
@@ -567,14 +567,15 @@ providing the system administrator with some help in common tasks.")
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "12nw108xjhm63sh2n5a0qs33vpvbvb6rln96l9j50p7wykf7rgpr"))
+                "0d2758kjll5xqm5fpp3sww1h66aahx161sf2b60jxqv4qymrfwvc"))
               (patches (search-patches "util-linux-tests.patch"))
               (modules '((guix build utils)))
               (snippet
-               ;; We take the 'logger' program from GNU Inetutils and 'kill'
-               ;; from GNU Coreutils.
+               ;; We take 'nologin' from Shadow, the 'logger' program from
+               ;; GNU Inetutils and 'kill' from GNU Coreutils.
                '(begin
                   (substitute* "configure"
+                    (("build_nologin=yes") "build_nologin=no")
                     (("build_logger=yes") "build_logger=no")
                     (("build_kill=yes") "build_kill=no"))
                   #t))))
@@ -646,32 +647,6 @@ block devices, UUIDs, TTYs, and many other tools.")
     (license (list license:gpl3+ license:gpl2+ license:gpl2 license:lgpl2.0+
                    license:bsd-4 license:public-domain))))
 
-;; The patch 'util-linux-CVE-2018-7738.patch' fixes a security bug in
-;; the Bash completions for `mount`. Since this bug doesn't affect
-;; other programs that link against libraries from util-linux, we don't
-;; need to use a graft to make the fix available. Instead, users
-;; installing util-linux will get the fix in this newer version, and
-;; (@ (gnu system) %base-packages) takes care to use this package.
-;; This solution was suggested here:
-;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30827#13>
-(define-public util-linux-2.31.1
-  (package
-    (inherit util-linux)
-    (name "util-linux")
-    ;; XXX Don't update this without also updating %base-packages!
-    (version "2.31.1")
-    (source (origin
-              (inherit (package-source util-linux))
-              (uri (string-append "mirror://kernel.org/linux/utils/"
-                                  name "/v" (version-major+minor version) "/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "04fzrnrr3pvqskvjn9f81y0knh0jvvqx4lmbz5pd4lfdm5pv2l8s"))
-              (patches
-                (append (origin-patches (package-source util-linux))
-                        (search-patches "util-linux-CVE-2018-7738.patch")))))))
-
 (define-public ddate
   (package
     (name "ddate")
@@ -769,7 +744,8 @@ slabtop, and skill.")
                    name "-" version ".tar.xz"))
              (sha256
               (base32
-               "00ilv65dzcgiap435j89xk86shf7rrav3wsik7cahy789qijdcn9"))))
+               "00ilv65dzcgiap435j89xk86shf7rrav3wsik7cahy789qijdcn9"))
+             (patches (search-patches "e2fsprogs-glibc-2.27.patch"))))
     (build-system gnu-build-system)
     (inputs `(("util-linux" ,util-linux)))
     (native-inputs `(("pkg-config" ,pkg-config)
@@ -817,18 +793,18 @@ slabtop, and skill.")
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (lib (string-append out "/lib")))
-                 (and (zero? (system* "make" "install-libs"))
-
-                      ;; Make the .a writable so that 'strip' works.
-                      ;; Failing to do that, due to debug symbols, we
-                      ;; retain a reference to the final
-                      ;; linux-libre-headers, which refer to the
-                      ;; bootstrap binaries.
-                      (let ((archives (find-files lib "\\.a$")))
-                        (for-each (lambda (file)
-                                    (chmod file #o666))
-                                  archives)
-                        #t))))))))
+                 (invoke "make" "install-libs")
+
+                 ;; Make the .a writable so that 'strip' works.
+                 ;; Failing to do that, due to debug symbols, we
+                 ;; retain a reference to the final
+                 ;; linux-libre-headers, which refer to the
+                 ;; bootstrap binaries.
+                 (let ((archives (find-files lib "\\.a$")))
+                   (for-each (lambda (file)
+                               (chmod file #o666))
+                             archives))
+                 #t))))))
     (home-page "http://e2fsprogs.sourceforge.net/")
     (synopsis "Creating and checking ext2/ext3/ext4 file systems")
     (description
@@ -871,7 +847,8 @@ slabtop, and skill.")
            (with-directory-excursion bin
              (copy-file e2fsck "e2fsck")
              (remove-store-references "e2fsck")
-             (chmod "e2fsck" #o555))))))
+             (chmod "e2fsck" #o555))
+           #t))))
     (home-page (package-home-page e2fsprogs))
     (synopsis "Statically-linked e2fsck command from e2fsprogs")
     (description "This package provides statically-linked e2fsck command taken
@@ -998,8 +975,15 @@ intercept and print the system calls executed by the program.")
                    version ".tar.bz2"))
              (sha256
               (base32
-               "096pwrnhj36yndldvs2pj4r871zhcgisks0is78f1jkjn9sd4b2z"))))
+               "096pwrnhj36yndldvs2pj4r871zhcgisks0is78f1jkjn9sd4b2z"))
+             (patches (search-patches "alsa-lib-add-environment-variable.patch"))))
     (build-system gnu-build-system)
+    (native-search-paths
+     (list (search-path-specification
+             (variable "ALSA_PLUGIN_DIR")
+             (file-type 'regular)
+             (separator #f)                         ;single entry
+             (files '("lib/alsa-lib")))))
     (home-page "https://www.alsa-project.org/")
     (synopsis "The Advanced Linux Sound Architecture libraries")
     (description
@@ -1306,7 +1290,8 @@ inadequately in modern network environments, and both should be deprecated.")
                  ;; think about adding them later.
                  (substitute* '("config.make" "config.h")
                    (("^.*HAVE_(AFDECnet|HWSTRIP|HWTR|SELINUX|AFBLUETOOTH)[ =]1.*$")
-                    "")))))
+                    ""))
+                 #t)))
            (add-after 'install 'remove-redundant-commands
              (lambda* (#:key outputs #:allow-other-keys)
                ;; Remove commands and man pages redundant with Inetutils.
@@ -1358,7 +1343,8 @@ configuration (iptunnel, ipmaddr).")
                               (substitute* "Make.Rules"
                                 (("LDFLAGS := #-g")
                                  (string-append "LDFLAGS := -Wl,-rpath="
-                                                %output "/lib"))))))
+                                                %output "/lib")))
+                              #t)))
                  #:tests? #f                      ; no 'check' target
                  #:make-flags (list "lib=lib"
                                     (string-append "prefix="
@@ -1394,7 +1380,7 @@ Linux-based operating systems.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
+         (add-before 'bootstrap 'patch-stuff
            (lambda _
              ;; Fix "field ‘ip6’ has incomplete type" errors.
              (substitute* "libbridge/libbridge.h"
@@ -1407,7 +1393,7 @@ Linux-based operating systems.")
                (("\\$\\(MAKE\\) \\$\\(MFLAGS\\) -C \\$\\$x ;")
                 "$(MAKE) $(MFLAGS) -C $$x || exit 1;"))
 
-             (zero? (system* "autoreconf" "-vf")))))
+             #t)))
        #:tests? #f))                              ; no 'check' target
 
     (home-page
@@ -1715,16 +1701,19 @@ UnionFS-FUSE additionally supports copy-on-write.")
     (source (origin (inherit (package-source fuse))
               (modules '((guix build utils)))
               (snippet
-               ;; Normally libfuse invokes mount(8) so that /etc/mtab is
-               ;; updated.  Change calls to 'mtab_needs_update' to 0 so that
-               ;; it doesn't do that, allowing us to remove the dependency on
-               ;; util-linux (something that is useful in initrds.)
-               '(substitute* '("lib/mount_util.c"
-                               "util/mount_util.c")
-                  (("mtab_needs_update[[:blank:]]*\\([a-z_]+\\)")
-                   "0")
-                  (("/bin/")
-                   "")))))))
+               '(begin
+                  ;; Normally libfuse invokes mount(8) so that /etc/mtab is
+                  ;; updated.  Change calls to 'mtab_needs_update' to 0 so
+                  ;; that it doesn't do that, allowing us to remove the
+                  ;; dependency on util-linux (something that is useful in
+                  ;; initrds.)
+                  (substitute* '("lib/mount_util.c"
+                                 "util/mount_util.c")
+                    (("mtab_needs_update[[:blank:]]*\\([a-z_]+\\)")
+                     "0")
+                    (("/bin/")
+                     ""))
+                  #t))))))
 
 (define-public unionfs-fuse/static
   (package (inherit unionfs-fuse)
@@ -1733,11 +1722,13 @@ UnionFS-FUSE additionally supports copy-on-write.")
     (source (origin (inherit (package-source unionfs-fuse))
               (modules '((guix build utils)))
               (snippet
-               ;; Add -ldl to the libraries, because libfuse.a needs that.
-               '(substitute* "src/CMakeLists.txt"
-                  (("target_link_libraries(.*)\\)" _ libs)
-                   (string-append "target_link_libraries"
-                                  libs " dl)"))))))
+               '(begin
+                  ;; Add -ldl to the libraries, because libfuse.a needs that.
+                  (substitute* "src/CMakeLists.txt"
+                    (("target_link_libraries(.*)\\)" _ libs)
+                     (string-append "target_link_libraries"
+                                    libs " dl)")))
+                  #t))))
     (arguments
      '(#:tests? #f
        #:configure-flags '("-DCMAKE_EXE_LINKER_FLAGS=-static")
@@ -1899,7 +1890,8 @@ system.")
                   (substitute* '("src/unicode_start" "src/unicode_stop")
                     ;; Assume the Coreutils are in $PATH.
                     (("/usr/bin/tty")
-                     "tty"))))))
+                     "tty"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1912,7 +1904,8 @@ system.")
                  (("gzip")
                   (string-append gzip "/bin/gzip"))
                  (("bzip2")
-                  (string-append bzip2 "/bin/bzip2"))))))
+                  (string-append bzip2 "/bin/bzip2")))
+               #t)))
          (add-after 'install 'post-install
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Make sure these programs find their comrades.
@@ -1921,7 +1914,8 @@ system.")
                (for-each (lambda (prog)
                            (wrap-program (string-append bin "/" prog)
                              `("PATH" ":" prefix (,bin))))
-                         '("unicode_start" "unicode_stop"))))))))
+                         '("unicode_start" "unicode_stop"))
+               #t))))))
     (inputs `(("check" ,check)
               ("gzip" ,gzip)
               ("bzip2" ,bzip2)
@@ -1975,7 +1969,7 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
 (define-public kmod
   (package
     (name "kmod")
-    (version "24")
+    (version "25")
     (source (origin
               (method url-fetch)
               (uri
@@ -1983,7 +1977,7 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
                               "kmod-" version ".tar.xz"))
               (sha256
                (base32
-                "15xkkkzvca9flvkm48gkh8y8f13vlm3sl7nz9ydc7b3jy4fqs2v1"))
+                "1kgixs4m3jvwk7fb3d18n6j77qhgi9qfv4csj35rs5ancr4ycrbi"))
               (patches (search-patches "kmod-module-directory.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -1992,19 +1986,20 @@ to use Linux' inotify mechanism, which allows file accesses to be monitored.")
      `(("xz" ,xz)
        ("zlib" ,zlib)))
     (arguments
-     `(#:tests? #f ; FIXME: Investigate test failures
+     `(#:tests? #f                      ; FIXME: Investigate test failures
        #:configure-flags '("--with-xz" "--with-zlib")
-       #:phases (alist-cons-after
-                 'install 'install-modprobe&co
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (let* ((out (assoc-ref outputs "out"))
-                          (bin (string-append out "/bin")))
-                     (for-each (lambda (tool)
-                                 (symlink "kmod"
-                                          (string-append bin "/" tool)))
-                               '("insmod" "rmmod" "lsmod" "modprobe"
-                                 "modinfo" "depmod"))))
-                 %standard-phases)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-modprobe&co
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (for-each (lambda (tool)
+                           (symlink "kmod"
+                                    (string-append bin "/" tool)))
+                         '("insmod" "rmmod" "lsmod" "modprobe"
+                           "modinfo" "depmod"))
+               #t))))))
     (home-page "https://www.kernel.org/")
     (synopsis "Kernel module tools")
     (description "Kmod is a set of tools to handle common tasks with Linux
@@ -2034,21 +2029,20 @@ from the module-init-tools project.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
-         (add-before 'configure 'bootstrap
+         (add-before 'bootstrap 'patch-file-names
            (lambda* (#:key inputs #:allow-other-keys)
             (substitute* "man/make.sh"
               (("/usr/bin/xsltproc")
                 (string-append (assoc-ref inputs "xsltproc")
                                "/bin/xsltproc")))
-            ;; Manual pages are regenerated here.
-            (zero? (system* "./autogen.sh"))))
+            #t))
          (add-after 'install 'build-hwdb
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Build OUT/etc/udev/hwdb.bin.  This allows 'lsusb' and
              ;; similar tools to display product names.
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system* (string-append out "/bin/udevadm")
-                               "hwdb" "--update"))))))
+               (invoke (string-append out "/bin/udevadm")
+                       "hwdb" "--update")))))
        #:configure-flags (list "--enable-manpages")))
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -2101,7 +2095,8 @@ time.")
                     (("confdir = .*$")
                      "confdir = @sysconfdir@\n")
                     (("DEFAULT_SYS_DIR = @DEFAULT_SYS_DIR@")
-                     "DEFAULT_SYS_DIR = @sysconfdir@"))))
+                     "DEFAULT_SYS_DIR = @sysconfdir@"))
+                  #t))
               (patches (search-patches "lvm2-static-link.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -2219,6 +2214,11 @@ interface.")
     (arguments
      '(#:phases (modify-phases %standard-phases
                   (delete 'configure)
+                  (add-after 'unpack 'gzip-determinism
+                    (lambda _
+                      (substitute* "Makefile"
+                        (("gzip") "gzip --no-name"))
+                      #t))
                   (add-before
                    'build 'no-werror-no-ldconfig
                    (lambda _
@@ -2286,10 +2286,17 @@ compliance.")
                 "1f9mcp78sdd4sci6v32vxfcl1rfjpv205jisz1p93kkfnaisy7ip"))
 
               ;; We're building 'regulatory.bin' by ourselves.
-              (snippet '(delete-file "regulatory.bin"))))
+              (snippet '(begin
+                          (delete-file "regulatory.bin")
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
+                  (add-after 'unpack 'gzip-determinism
+                    (lambda _
+                      (substitute* "Makefile"
+                        (("gzip") "gzip --no-name"))
+                      #t))
                   (delete 'configure))
 
        ;; The 'all' target of the makefile depends on $(REGDB_CHANGED), which
@@ -2765,7 +2772,8 @@ also contains the libsysfs library.")
               "includedir = @includedir@"))
            (substitute* "configure"
              (("includedir='(\\$\\{prefix\\}/include)'" all orig)
-              (string-append "includedir='" orig "/sysfs'")))))))
+              (string-append "includedir='" orig "/sysfs'")))
+           #t))))
     (synopsis "System utilities based on Linux sysfs (version 1.x)")))
 
 (define-public cpufrequtils
@@ -3182,16 +3190,15 @@ write access to exFAT devices.")
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
+                  (replace 'bootstrap
                     (lambda _
                       ;; The tarball was not generated with 'make dist' so we
                       ;; need to bootstrap things ourselves.
                       (substitute* "autogen.sh"
                         (("/bin/sh") (which "sh")))
-                      (and (zero? (system* "./autogen.sh"))
-                           (begin
-                             (patch-makefile-SHELL "Makefile.include.in")
-                             #t)))))
+                      (invoke "./autogen.sh")
+                      (patch-makefile-SHELL "Makefile.include.in")
+                      #t)))
 
        ;; Make sure programs find libgpm.so.
        #:configure-flags (list (string-append "LDFLAGS=-Wl,-rpath="
@@ -3215,7 +3222,7 @@ and copy/paste text in the console and in xterm.")
 (define-public btrfs-progs
   (package
     (name "btrfs-progs")
-    (version "4.14.1")
+    (version "4.15.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://kernel.org/linux/kernel/"
@@ -3223,14 +3230,15 @@ and copy/paste text in the console and in xterm.")
                                   "btrfs-progs-v" version ".tar.xz"))
               (sha256
                (base32
-                "1palnddw3d50kyflwk1j4xapbc6jniid6j5i9dsr8l8a7nkv7ich"))))
+                "15izak6jg6pqr6ha9447cdrdj9k6kfiarvwlrj53cpvrsv02l437"))
+              (patches (search-patches "btrfs-progs-e-value-block.patch"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "static"))      ; static versions of the binaries in "out"
     (arguments
      '(#:phases (modify-phases %standard-phases
                  (add-after 'build 'build-static
-                   (lambda _ (zero? (system* "make" "static"))))
+                   (lambda _ (invoke "make" "static")))
                  (add-after 'install 'install-bash-completion
                    (lambda* (#:key outputs #:allow-other-keys)
                      (let* ((out (assoc-ref outputs "out"))
@@ -3243,9 +3251,9 @@ and copy/paste text in the console and in xterm.")
                    (let ((staticbin (string-append (assoc-ref %outputs "static")
                                                   "/bin")))
                      (lambda _
-                       (zero? (system* "make"
-                                       (string-append "bindir=" staticbin)
-                                       "install-static"))))))
+                       (invoke "make"
+                               (string-append "bindir=" staticbin)
+                               "install-static")))))
        #:test-target "test"
        #:parallel-tests? #f)) ; tests fail when run in parallel
     (inputs `(("e2fsprogs" ,e2fsprogs)
@@ -3264,7 +3272,9 @@ and copy/paste text in the console and in xterm.")
                      ("docbook-xsl" ,docbook-xsl)
                      ;; For tests.
                      ("acl" ,acl)
-                     ("which" ,which)))
+                     ("which" ,which)
+                     ;; The tests need 'grep' with perl regexp support.
+                     ("grep" ,grep)))
     (home-page "https://btrfs.wiki.kernel.org/")
     (synopsis "Create and manage btrfs copy-on-write file systems")
     (description "Btrfs is a @dfn{copy-on-write} (CoW) file system for Linux
@@ -3297,7 +3307,8 @@ repair and easy administration.")
            (mkdir-p (dirname target))
            (copy-file source target)
            (remove-store-references target)
-           (chmod target #o555)))))
+           (chmod target #o555)
+           #t))))
     (home-page (package-home-page btrfs-progs))
     (synopsis "Statically-linked btrfs command from btrfs-progs")
     (description "This package provides the statically-linked @command{btrfs}
@@ -3321,9 +3332,6 @@ from the btrfs-progs package.  It is meant to be used in initrds.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vif"))))
          (add-after 'install 'install-headers
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -3375,14 +3383,16 @@ disks and SD cards.  This package provides the userland utilities.")
      '(#:phases (modify-phases %standard-phases
                   (add-after 'unpack 'enter-subdirectory
                     (lambda _
-                      (chdir "tools/laptop/freefall")))
+                      (chdir "tools/laptop/freefall")
+                      #t))
                   (delete 'configure)
                   (add-before 'build 'increase-timeout
                     (lambda _
                       ;; The default of 2 seconds is too low: it assumes an
                       ;; open lid and AC power without actually checking.
                       (substitute* "freefall.c"
-                        (("alarm\\(2\\)") "alarm(5)")))))
+                        (("alarm\\(2\\)") "alarm(5)"))
+                      #t)))
        #:make-flags (list (string-append "PREFIX="
                                          (assoc-ref %outputs "out"))
                           "CC=gcc")
@@ -3412,9 +3422,10 @@ feature, and a laptop with an accelerometer.  It has no effect on SSDs.")
               (modules '((guix build utils)))
               ;; Fix erroneous man page location in Makefile leading to
               ;; a compilation failure.
-              (snippet
-               '(substitute* "CMakeLists.txt"
-                  (("thinkfan\\.1") "src/thinkfan.1")))))
+              (snippet '(begin
+                          (substitute* "CMakeLists.txt"
+                            (("thinkfan\\.1") "src/thinkfan.1"))
+                          #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((guix build cmake-build-system)
@@ -3465,11 +3476,12 @@ from userspace.")
                (base32
                 "1mb228p80hv97pgk3myyvgp975r9mxq56c6bdn1n24kngcfh4niy"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Install under $prefix.
-               '(substitute* '("src/Makefile.in" "ntfsprogs/Makefile.in")
-                  (("/sbin")
-                   "@sbindir@")))))
+              (snippet '(begin
+                          ;; Install under $prefix.
+                          (substitute* '("src/Makefile.in" "ntfsprogs/Makefile.in")
+                            (("/sbin")
+                             "@sbindir@"))
+                          #t))))
     (build-system gnu-build-system)
     (inputs `(("util-linux" ,util-linux)
               ("fuse" ,fuse)))                    ;libuuid
@@ -3524,11 +3536,11 @@ The package provides additional NTFS tools.")
        (modify-phases %standard-phases
          (replace 'build
            (lambda _
-             (zero? (system* "ninja"
-                             "-j" (number->string (parallel-job-count))))))
+             (invoke "ninja"
+                     "-j" (number->string (parallel-job-count)))))
          (replace 'install
            (lambda _
-             (zero? (system* "ninja" "install")))))))
+             (invoke "ninja" "install"))))))
     (native-inputs
      `(("ninja" ,ninja)
        ("pkg-config" ,pkg-config)
@@ -3580,13 +3592,7 @@ The following service daemons are also provided:
     (build-system gnu-build-system)
     (arguments
      `(;; Avoid using OpenSSL, curl, and libxml2, reducing the closure by 166 MiB.
-       #:configure-flags '("--without-nistbeacon")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (invoke "sh" "autogen.sh")
-             #t)))))
+       #:configure-flags '("--without-nistbeacon")))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -3783,9 +3789,12 @@ the default @code{nsswitch} and the experimental @code{umich_ldap}.")
               (file-name (string-append name "-" version ".tar.gz"))
               (modules '((guix build utils)))
               (snippet
-               ;; The snapshots lack a .git directory, breaking ‘git describe’.
-               `(substitute* "Makefile"
-                  (("\"unknown\"") (string-append "\"v" ,version "\""))))))
+               `(begin
+                  ;; The snapshots lack a .git directory,
+                  ;; breaking ‘git describe’.
+                  (substitute* "Makefile"
+                    (("\"unknown\"") (string-append "\"v" ,version "\"")))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -4333,24 +4342,23 @@ userspace queueing component and the logging subsystem.")
                         (setenv "PATH"
                                 (string-append (getenv "PATH") ":/bin"))
 
-                        (zero? (system* "make" "check" "-C" "tests"
-                                        ;;"V=1"
-                                        "-j" (number->string n))))))
+                        (invoke "make" "check" "-C" "tests"
+                                ;;"V=1"
+                                "-j" (number->string n)))))
                   (replace 'install
                     (lambda* (#:key outputs #:allow-other-keys)
                       ;; The 'install' rule does nearly nothing.
-                      (let ((out (assoc-ref outputs "out")))
-                        (and (zero?
-                              ;; TODO: 'make install-care' (does not even
-                              ;; build currently.)
-                              (system* "make" "-C" "src" "install"
-                                       (string-append "PREFIX=" out)))
-                             (let ((man1 (string-append out
-                                                        "/share/man/man1")))
-                               (mkdir-p man1)
-                               (copy-file "doc/proot/man.1"
-                                          (string-append man1 "/proot.1"))
-                               #t))))))))
+                      (let* ((out (assoc-ref outputs "out"))
+                             (man1 (string-append out "/share/man/man1")))
+                        ;; TODO: 'make install-care' (does not even
+                        ;; build currently.)
+                        (invoke "make" "-C" "src" "install"
+                                (string-append "PREFIX=" out))
+
+                        (mkdir-p man1)
+                        (copy-file "doc/proot/man.1"
+                                   (string-append man1 "/proot.1"))
+                        #t))))))
     (native-inputs `(("which" ,which)
 
                      ;; For 'mcookie', used by some of the tests.
diff --git a/gnu/packages/lisp.scm b/gnu/packages/lisp.scm
index 1f8e6ab427..258e9827a5 100644
--- a/gnu/packages/lisp.scm
+++ b/gnu/packages/lisp.scm
@@ -189,8 +189,10 @@ interface to the Tk widget system.")
        (modules '((guix build utils)))
        (snippet
         ;; Add ecl-bundle-systems to 'default-system-source-registry'.
-        `(substitute* "contrib/asdf/asdf.lisp"
-           ,@(asdf-substitutions name)))))
+        `(begin
+           (substitute* "contrib/asdf/asdf.lisp"
+             ,@(asdf-substitutions name))
+           #t))))
     (build-system gnu-build-system)
     ;; src/configure uses 'which' to confirm the existence of 'gzip'.
     (native-inputs `(("which" ,which)))
@@ -313,8 +315,10 @@ an interpreter, a compiler, a debugger, and much more.")
        (modules '((guix build utils)))
        (snippet
         ;; Add sbcl-bundle-systems to 'default-system-source-registry'.
-        `(substitute* "contrib/asdf/asdf.lisp"
-           ,@(asdf-substitutions name)))))
+        `(begin
+           (substitute* "contrib/asdf/asdf.lisp"
+             ,@(asdf-substitutions name))
+           #t))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     ;; Bootstrap with CLISP.
@@ -607,10 +611,11 @@ The core is 12 builtin special forms and 33 builtin functions.")
        (snippet
         '(begin
            (substitute* "src/unix.c"
-               (("\\{ \"LUSH_DATE\", __DATE__ \\},") "")
-               (("\\{ \"LUSH_TIME\", __TIME__ \\},") ""))
-             (substitute* "src/main.c"
-               (("\" \\(built \" __DATE__ \"\\)\"") ""))))
+             (("\\{ \"LUSH_DATE\", __DATE__ \\},") "")
+             (("\\{ \"LUSH_TIME\", __TIME__ \\},") ""))
+           (substitute* "src/main.c"
+             (("\" \\(built \" __DATE__ \"\\)\"") ""))
+           #t))
        (sha256
         (base32
          "02pkfn3nqdkm9fm44911dbcz0v3r0l53vygj8xigl6id5g3iwi4k"))))
@@ -909,7 +914,8 @@ ANSI-compliant Common Lisp implementations.")
              (delete-file-recursively "demo")
              (delete-file "test/trapezoid.lisp")
              (substitute* "clx.asd"
-               (("\\(:file \"trapezoid\"\\)") ""))))))
+               (("\\(:file \"trapezoid\"\\)") ""))
+             #t))))
       (build-system asdf-build-system/sbcl)
       (home-page "http://www.cliki.net/portable-clx")
       (synopsis "X11 client library for Common Lisp")
@@ -1037,12 +1043,12 @@ productive, customizable lisp based systems.")
              (rename-file "contrib" "slynk/contrib")
              ;; Move slynk's contents into the base directory for easier
              ;; access
-             (for-each
-              (lambda (file)
-                (unless (string-prefix? "." file)
-                  (rename-file (string-append "slynk/" file)
-                               (string-append "./" (basename file)))))
-              (scandir "slynk"))))))
+             (for-each (lambda (file)
+                         (unless (string-prefix? "." file)
+                           (rename-file (string-append "slynk/" file)
+                                        (string-append "./" (basename file)))))
+                       (scandir "slynk"))
+             #t))))
       (build-system asdf-build-system/sbcl)
       (arguments
        `(#:tests? #f ; No test suite
@@ -1214,7 +1220,8 @@ multiple inspectors with independent history.")
                          (assoc-ref %outputs "image")
                          "/bin/slynk")
                         %outputs
-                        #:dependencies ',slynk-systems)))))))
+                        #:dependencies ',slynk-systems))
+         #t)))))
 
 (define-public ecl-slynk
   (package
@@ -1236,7 +1243,8 @@ multiple inspectors with independent history.")
          (match %build-inputs
            (((names . paths) ...)
             (union-build (assoc-ref %outputs "out")
-                         paths))))))))
+                         paths)
+            #t)))))))
 
 (define-public sbcl-stumpwm+slynk
   (package
diff --git a/gnu/packages/lua.scm b/gnu/packages/lua.scm
index 69180abeac..82ea6e02de 100644
--- a/gnu/packages/lua.scm
+++ b/gnu/packages/lua.scm
@@ -73,10 +73,10 @@
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system* "make" "install"
-                               (string-append "INSTALL_TOP=" out)
-                               (string-append "INSTALL_MAN=" out
-                                              "/share/man/man1")))))))))
+               (invoke "make" "install"
+                       (string-append "INSTALL_TOP=" out)
+                       (string-append "INSTALL_MAN=" out
+                                      "/share/man/man1"))))))))
     (home-page "https://www.lua.org/")
     (synopsis "Embeddable scripting language")
     (description
@@ -174,8 +174,8 @@ language.")
            (lambda _
              (setenv "LUA_CPATH" "src/?.so;;")
              (setenv "LUA_PATH"  "src/?.lua;;")
-             (and (zero? (system* "lua" "tests/test.lua"))
-                  (zero? (system* "lua" "tests/test-lom.lua"))))))))
+             (invoke "lua" "tests/test.lua")
+             (invoke "lua" "tests/test-lom.lua"))))))
     (inputs
      `(("lua" ,lua-5.1)
        ("expat" ,expat)))
@@ -210,8 +210,8 @@ language.")
              (setenv "LUA_CPATH" (string-append "src/?.so." ,version ";;"))
              (setenv "LUA_PATH"  "src/?.lua;;")
              (when (zero? (primitive-fork))
-               (system* "lua" "test/testsrvr.lua"))
-             (zero? (system* "lua" "test/testclnt.lua")))))))
+               (invoke "lua" "test/testsrvr.lua"))
+             (invoke "lua" "test/testclnt.lua"))))))
     (inputs
      `(("lua" ,lua-5.1)))
     (home-page "http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/")
diff --git a/gnu/packages/lxde.scm b/gnu/packages/lxde.scm
index b62cb1f141..9a0d8e957d 100644
--- a/gnu/packages/lxde.scm
+++ b/gnu/packages/lxde.scm
@@ -363,7 +363,8 @@ in LXDE.")
                    (and (string-suffix? ".c" file)
                         (file-exists? (c->vala file))))))
            (for-each delete-file
-                     (find-files "." generated-c-file?))))))
+                     (find-files "." generated-c-file?))
+           #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -447,7 +448,7 @@ in LXDE.")
     (version (package-version lxde-common))
     (source #f)
     (build-system trivial-build-system)
-    (arguments '(#:builder (mkdir %output)))
+    (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
      ;; TODO:
      ;; lxshortcut, lxsession-edit
diff --git a/gnu/packages/m4.scm b/gnu/packages/m4.scm
index 32e7c2ae42..b223ce91d1 100644
--- a/gnu/packages/m4.scm
+++ b/gnu/packages/m4.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,18 +41,19 @@
       ;; proceeds and fails, unsurprisingly.
       #:tests? ,(not (%current-target-system))
 
-      #:phases (alist-cons-before
-                'check 'pre-check
-                (lambda* (#:key inputs #:allow-other-keys)
-                  ;; Fix references to /bin/sh.
-                  (let ((bash (assoc-ref inputs "bash")))
-                    (for-each patch-shebang
-                              (find-files "tests" "\\.sh$"))
-                    (substitute* (find-files "tests"
-                                             "posix_spawn")
-                      (("/bin/sh")
-                       (format #f "~a/bin/sh" bash)))))
-                %standard-phases)))
+      #:phases
+      (modify-phases %standard-phases
+        (add-before 'check 'pre-check
+          (lambda* (#:key inputs #:allow-other-keys)
+            ;; Fix references to /bin/sh.
+            (let ((bash (assoc-ref inputs "bash")))
+              (for-each patch-shebang
+                        (find-files "tests" "\\.sh$"))
+              (substitute* (find-files "tests"
+                                       "posix_spawn")
+                (("/bin/sh")
+                 (format #f "~a/bin/sh" bash)))
+              #t))))))
    (synopsis "Macro processor")
    (description
     "GNU M4 is an implementation of the M4 macro language, which features
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index f0d35484ea..fb511b4949 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -409,7 +409,8 @@ sample proximities between pairs of cases.")
                            (display line out))
                          (loop (read-line in 'concat) skip-next?)))))))
            (for-each delete-ifdefs (find-files "src/shogun/kernel/"
-                                               "^Kernel\\.(cpp|h)"))))))
+                                               "^Kernel\\.(cpp|h)"))
+           #t))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ;no check target
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index a5f152532c..b55d9eb3c5 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -137,9 +137,11 @@
              (snippet
               ;; For a rebuild of the Flex/Bison byproducts touched by the
               ;; patch above.
-              '(for-each delete-file
-                         '("mh/mh_alias_lex.c"
-                           "libmailutils/cfg/parser.c")))))
+              '(begin
+                 (for-each delete-file
+                           '("mh/mh_alias_lex.c"
+                             "libmailutils/cfg/parser.c"))
+                 #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -1831,7 +1833,7 @@ in Perl.")
            (mkdir-p bin)
            (with-directory-excursion bin
              (copy-file source "mb2md.gz")
-             (system* (string-append gzip "/bin/gzip") "-d" "mb2md.gz")
+             (invoke (string-append gzip "/bin/gzip") "-d" "mb2md.gz")
              (substitute* "mb2md"
                (("#!/usr/bin/perl")
                 (string-append "#!/usr/bin/perl -I " perl5lib)))
diff --git a/gnu/packages/make-bootstrap.scm b/gnu/packages/make-bootstrap.scm
index 99488fb4c4..475749bbf6 100644
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@ -1,6 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -143,24 +145,24 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                  (arguments
                   (substitute-keyword-arguments (package-arguments bzip2)
                     ((#:phases phases)
-                     `(alist-cons-before
-                       'build 'dash-static
-                       (lambda _
-                         (substitute* "Makefile"
-                           (("^LDFLAGS[[:blank:]]*=.*$")
-                            "LDFLAGS = -static")))
-                       ,phases))))))
+                     `(modify-phases ,phases
+                        (add-before 'build 'dash-static
+                          (lambda _
+                            (substitute* "Makefile"
+                              (("^LDFLAGS[[:blank:]]*=.*$")
+                               "LDFLAGS = -static"))
+                            #t))))))))
         (xz (package (inherit xz)
               (arguments
                `(#:strip-flags '("--strip-all")
-                 #:phases (alist-cons-before
-                           'configure 'static-executable
-                           (lambda _
-                             ;; Ask Libtool for a static executable.
-                             (substitute* "src/xz/Makefile.in"
-                               (("^xz_LDADD =")
-                                "xz_LDADD = -all-static")))
-                           %standard-phases)))))
+                 #:phases (modify-phases %standard-phases
+                            (add-before 'configure 'static-executable
+                              (lambda _
+                                ;; Ask Libtool for a static executable.
+                                (substitute* "src/xz/Makefile.in"
+                                  (("^xz_LDADD =")
+                                   "xz_LDADD = -all-static"))
+                                #t)))))))
         (gawk (package (inherit gawk)
                 (source (origin (inherit (package-source gawk))
                           (patches (cons (search-patch "gawk-shell.patch")
@@ -175,28 +177,30 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
 
                    ,@(substitute-keyword-arguments (package-arguments gawk)
                        ((#:phases phases)
-                        `(alist-cons-before
-                          'configure 'no-export-dynamic
-                          (lambda _
-                            ;; Since we use `-static', remove
-                            ;; `-export-dynamic'.
-                            (substitute* "configure"
-                              (("-Wl,-export-dynamic") "")))
-                          ,phases)))))
+                        `(modify-phases ,phases
+                           (add-before 'configure 'no-export-dynamic
+                             (lambda _
+                               ;; Since we use `-static', remove
+                               ;; `-export-dynamic'.
+                               (substitute* "configure"
+                                 (("-Wl,-export-dynamic") ""))
+                               #t)))))))
                 (inputs (if (%current-target-system)
                             `(("bash" ,static-bash))
                             '()))))
 	(tar (package (inherit tar)
 	       (arguments
-		'(#:phases (modify-phases %standard-phases
-			     (add-before 'build 'set-shell-file-name
-			       (lambda _
-				 ;; Do not use "/bin/sh" to run programs; see
-                                 ;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg02272.html>.
-				 (substitute* "src/system.c"
-				   (("/bin/sh") "sh")
-				   (("execv ") "execvp "))
-				 #t)))))))
+                (substitute-keyword-arguments (package-arguments tar)
+                  ((#:phases phases)
+                   `(modify-phases ,phases
+                      (replace 'set-shell-file-name
+                        (lambda _
+                          ;; Do not use "/bin/sh" to run programs; see
+                          ;; <http://lists.gnu.org/archive/html/guix-devel/2016-09/msg02272.html>.
+                          (substitute* "src/system.c"
+                            (("/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
@@ -306,19 +310,19 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                                   ((#:configure-flags flags _ ...)
                                    flags)))
        #:strip-flags '("--strip-all")
-       #:phases (alist-cons-before
-                 'configure 'all-static
-                 (lambda _
-                   ;; The `-all-static' libtool flag can only be passed
-                   ;; after `configure', since configure tests don't use
-                   ;; libtool, and only for executables built with libtool.
-                   (substitute* '("binutils/Makefile.in"
-                                  "gas/Makefile.in"
-                                  "ld/Makefile.in")
-                     (("^LDFLAGS =(.*)$" line)
-                      (string-append line
-                                     "\nAM_LDFLAGS = -static -all-static\n"))))
-                 %standard-phases)))))
+       #:phases (modify-phases %standard-phases
+                  (add-before 'configure 'all-static
+                    (lambda _
+                      ;; The `-all-static' libtool flag can only be passed
+                      ;; after `configure', since configure tests don't use
+                      ;; libtool, and only for executables built with libtool.
+                      (substitute* '("binutils/Makefile.in"
+                                     "gas/Makefile.in"
+                                     "ld/Makefile.in")
+                        (("^LDFLAGS =(.*)$" line)
+                         (string-append line
+                                        "\nAM_LDFLAGS = -static -all-static\n")))
+                      #t)))))))
 
 (define %binutils-static-stripped
   ;; The subset of Binutils that we need.
@@ -424,18 +428,18 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                       (remove (cut string-match "--(.*plugin|enable-languages)" <>)
                               ,flags)))
             ((#:phases phases)
-             `(alist-cons-after
-               'pre-configure 'remove-lgcc_s
-               (lambda _
-                 ;; Remove the '-lgcc_s' added to GNU_USER_TARGET_LIB_SPEC in
-                 ;; the 'pre-configure phase of our main gcc package, because
-                 ;; that shared library is not present in this static gcc.  See
-                 ;; <https://lists.gnu.org/archive/html/guix-devel/2015-01/msg00008.html>.
-                 (substitute* (cons "gcc/config/rs6000/sysv4.h"
-                                    (find-files "gcc/config"
-                                                "^gnu-user.*\\.h$"))
-                   ((" -lgcc_s}}") "}}")))
-               ,phases)))))
+             `(modify-phases ,phases
+                (add-after 'pre-configure 'remove-lgcc_s
+                  (lambda _
+                    ;; Remove the '-lgcc_s' added to GNU_USER_TARGET_LIB_SPEC in
+                    ;; the 'pre-configure phase of our main gcc package, because
+                    ;; that shared library is not present in this static gcc.  See
+                    ;; <https://lists.gnu.org/archive/html/guix-devel/2015-01/msg00008.html>.
+                    (substitute* (cons "gcc/config/rs6000/sysv4.h"
+                                       (find-files "gcc/config"
+                                                   "^gnu-user.*\\.h$"))
+                      ((" -lgcc_s}}") "}}"))
+                    #t)))))))
      (native-inputs
       (if (%current-target-system)
           `(;; When doing a Canadian cross, we need GMP/MPFR/MPC both
@@ -493,12 +497,14 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
                              (string-append includedir "/c++"))
 
            ;; For native builds, check whether the binaries actually work.
-           ,(if (%current-target-system)
-                '#t
-                '(every (lambda (prog)
-                          (zero? (system* (string-append gcc "/bin/" prog)
-                                          "--version")))
-                        '("gcc" "g++" "cpp")))))))
+           ,@(if (%current-target-system)
+                 '()
+                 '((for-each (lambda (prog)
+                               (invoke (string-append gcc "/bin/" prog)
+                                       "--version"))
+                             '("gcc" "g++" "cpp"))))
+
+           #t))))
     (inputs `(("gcc" ,%gcc-static)))))
 
 (define %guile-static
@@ -586,21 +592,22 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
            (mkdir (string-append out "/bin"))
            (copy-file guile1 guile2)
 
-           ;; Does the relocated Guile work?
-           (and ,(if (%current-target-system)
-                     #t
-                     '(zero? (system* guile2 "--version")))
-                (begin
-                  ;; Strip store references.
-                  (remove-store-references guile2)
-
-                  ;; Does the stripped Guile work?  If it aborts, it could be
-                  ;; that it tries to open iconv descriptors and fails because
-                  ;; libc's iconv data isn't available (see
-                  ;; `guile-default-utf8.patch'.)
-                  ,(if (%current-target-system)
-                       #t
-                       '(zero? (system* guile2 "--version")))))))))
+           ;; Verify that the relocated Guile works.
+           ,@(if (%current-target-system)
+                 '()
+                 '((invoke guile2 "--version")))
+
+           ;; Strip store references.
+           (remove-store-references guile2)
+
+           ;; Verify that the stripped Guile works.  If it aborts, it could be
+           ;; that it tries to open iconv descriptors and fails because libc's
+           ;; iconv data isn't available (see `guile-default-utf8.patch'.)
+           ,@(if (%current-target-system)
+                 '()
+                 '((invoke guile2 "--version")))
+
+           #t))))
     (inputs `(("guile" ,%guile-static)))
     (outputs '("out"))
     (synopsis "Minimal statically-linked and relocatable Guile")))
@@ -627,17 +634,17 @@ for `sh' in $PATH, and without nscd, and with static NSS modules."
              (mkdir out)
              (set-path-environment-variable "PATH" '("bin") (list tar xz))
              (with-directory-excursion input
-               (zero? (system* "tar" "cJvf"
-                               (string-append out "/"
-                                              ,name "-" ,version
-                                              "-"
-                                              ,(or (%current-target-system)
-                                                   (%current-system))
-                                              ".tar.xz")
-                               "."
-                               ;; avoid non-determinism in the archive
-                               "--sort=name" "--mtime=@0"
-                               "--owner=root:0" "--group=root:0"))))))))))
+               (invoke "tar" "cJvf"
+                       (string-append out "/"
+                                      ,name "-" ,version
+                                      "-"
+                                      ,(or (%current-target-system)
+                                           (%current-system))
+                                      ".tar.xz")
+                       "."
+                       ;; avoid non-determinism in the archive
+                       "--sort=name" "--mtime=@0"
+                       "--owner=root:0" "--group=root:0")))))))))
 
 (define %bootstrap-binaries-tarball
   ;; A tarball with the statically-linked bootstrap binaries.
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index ca6fd351d5..58e26d82ff 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -79,7 +79,8 @@ a flexible and convenient way.")
                              (("#! /bin/sh")
                               (string-append "#!" (which "sh")))))
                          (remove file-is-directory?
-                                 (find-files "src/tests" ".*"))))))
+                                 (find-files "src/tests" ".*")))
+               #t)))
          (add-after 'unpack 'patch-iconv-path
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/man.c"
@@ -189,7 +190,7 @@ Linux kernel and C library interfaces employed by user-space programs.")
 (define-public help2man
   (package
     (name "help2man")
-    (version "1.47.5")
+    (version "1.47.6")
     (source
      (origin
       (method url-fetch)
@@ -197,7 +198,7 @@ Linux kernel and C library interfaces employed by user-space programs.")
                           version ".tar.xz"))
       (sha256
        (base32
-        "1cb14kp380jzk1yi4i7x9d8qplc8c5mgcbgycgs9ggpx34jhp9kw"))))
+        "0vz4dlrvy4vc6l7w0a7n668pfa0rdm73wr2gar58wqranyah46yr"))))
     (build-system gnu-build-system)
     (arguments `(;; There's no `check' target.
                  #:tests? #f))
diff --git a/gnu/packages/markup.scm b/gnu/packages/markup.scm
index fc8e2ceaa7..bce411d0bd 100644
--- a/gnu/packages/markup.scm
+++ b/gnu/packages/markup.scm
@@ -86,14 +86,15 @@ processing library written in C.")
                                       "/bin/unzip")))
            (mkdir-p out)
            (with-directory-excursion out
-             (system* unzip source)
+             (invoke unzip source)
              (mkdir "bin")
              (mkdir-p "share/doc")
              (rename-file "Markdown_1.0.1/Markdown.pl" "bin/markdown")
              (rename-file "Markdown_1.0.1/Markdown Readme.text"
                           "share/doc/README")
              (patch-shebang "bin/markdown" (list perlbd))
-             (delete-file-recursively "Markdown_1.0.1"))))))
+             (delete-file-recursively "Markdown_1.0.1"))
+           #t))))
     (native-inputs `(("unzip" ,unzip)))
     (inputs `(("perl" ,perl)))
     (home-page "http://daringfireball.net/projects/markdown")
diff --git a/gnu/packages/mate.scm b/gnu/packages/mate.scm
index c3a4edd1ea..88f64fdb66 100644
--- a/gnu/packages/mate.scm
+++ b/gnu/packages/mate.scm
@@ -923,12 +923,7 @@ icons on the MATE desktop.  It works on local and remote file systems.")
        ("intltool" ,intltool)
        ("yelp-tools" ,yelp-tools)
        ("desktop-file-utils" ,desktop-file-utils)
-       ("kbproto" ,kbproto)
-       ("randrproto" ,randrproto)
-       ("renderproto" ,renderproto)
-       ("scrnsaverproto" ,scrnsaverproto)
-       ("xextpro" ,xextproto)
-       ("xproto" ,xproto)
+       ("xorgproto" ,xorgproto)
        ("xmodmap" ,xmodmap)
        ("gobject-introspection" ,gobject-introspection)))
     (inputs
@@ -1142,7 +1137,7 @@ can be used as backgrounds in the MATE Desktop environment.")
        ("libxtst" ,libxtst)
        ("libx11" ,libx11)
        ("mate-panel" ,mate-panel)
-       ("xproto" ,xproto)))
+       ("xorgproto" ,xorgproto)))
     (home-page "https://mate-desktop.org/")
     (synopsis "Tool for MATE on Netbooks")
     (description
@@ -1194,15 +1189,10 @@ Re-decorates windows on un-maximise.
        ("autoconf" ,autoconf-wrapper)
        ("gettext" ,gettext-minimal)
        ("intltool" ,intltool)
-       ("kbproto" ,kbproto)
        ("mate-common" ,mate-common)
        ("pkg-config" ,pkg-config)
-       ("randrproto" ,randrproto)
-       ("renderproto" ,renderproto)
-       ("scrnsaverproto" ,scrnsaverproto)
        ("which" ,which)
-       ("xextpro" ,xextproto)
-       ("xproto" ,xproto)))
+       ("xorgproto" ,xorgproto)))
     (inputs
      `(("cairo" ,cairo)
        ("dconf" ,dconf)
@@ -1256,8 +1246,7 @@ can be used as backgrounds in the MATE Desktop environment.")
        ("libsm" ,libsm)
        ("pkg-config" ,pkg-config)
        ("scrollkeeper" ,scrollkeeper)
-       ("xextpro" ,xextproto)
-       ("xproto" ,xproto)
+       ("xorgproto" ,xorgproto)
        ("yelp-tools" ,yelp-tools)))
     (inputs
      `(("atk" ,atk)
@@ -1534,7 +1523,8 @@ used to bring up authentication dialogs.")
          (match %build-inputs
            (((names . directories) ...)
             (union-build (assoc-ref %outputs "out")
-                         directories))))))
+                         directories)
+            #t)))))
     (inputs
      ;; TODO: Add more packages
      `(("at-spi2-core"              ,at-spi2-core)
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index a36d2333e6..09d2780ced 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -179,9 +179,11 @@ interactive dialogs to guide them.")
        (modules '((guix build utils)))
        (snippet
         ;; Make sure we don't use the bundled software.
-        '(for-each (lambda (d)
-                     (delete-file-recursively (string-append "libcoda/" d)))
-                   '("zlib" "pcre" "expat")))))
+        '(begin
+           (for-each (lambda (d)
+                       (delete-file-recursively (string-append "libcoda/" d)))
+                     '("zlib" "pcre" "expat"))
+           #t))))
     (native-inputs
      `(("fortran" ,gfortran)
        ("python" ,python)
@@ -844,7 +846,8 @@ extremely large and complex data collections.")
           (for-each delete-file
                     (list "SZip.tar.gz" "ZLib.tar.gz" "JPEG8d.tar.gz"
                           "HDF4.tar.gz" "HDF5.tar.gz"))
-          (delete-file-recursively ,(string-append "hdfjava-" version "/lib"))))))
+          (delete-file-recursively ,(string-append "hdfjava-" version "/lib"))
+          #t))))
    (build-system gnu-build-system)
    (native-inputs
     `(("jdk" ,icedtea "jdk")
@@ -1247,7 +1250,9 @@ online as well as original implementations of various other algorithms.")
               (modules '((guix build utils)))
               (snippet
                ;; Make sure we don't use the bundled software.
-               '(delete-file-recursively "ThirdParty"))))
+               '(begin
+                  (delete-file-recursively "ThirdParty")
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -1500,7 +1505,9 @@ Open CASCADE library.")
       (modules '((guix build utils)))
       (snippet
        ;; Remove non-free METIS code
-       '(delete-file-recursively "contrib/Metis"))))
+       '(begin
+          (delete-file-recursively "contrib/Metis")
+          #t))))
     (build-system cmake-build-system)
     (propagated-inputs
      `(("fltk" ,fltk)
@@ -2110,7 +2117,8 @@ void mc64ad_ (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
                    (let ((line (read-line in 'concat)))
                     (unless (regexp-exec rx line)
                       (display line out)
-                      (loop)))))))))))
+                      (loop))))
+                 #t)))))))
     (build-system cmake-build-system)
     (native-inputs
      `(("tcsh" ,tcsh)))
@@ -2167,7 +2175,8 @@ void mc64ad_dist (int *a, int *b, int *c, int *d, int *e, double *f, int *g,
 }\n" port)))
            (substitute* "SRC/util.c"    ;adjust default algorithm
              (("RowPerm[[:blank:]]*=[[:blank:]]*LargeDiag")
-              "RowPerm = NOROWPERM"))))
+              "RowPerm = NOROWPERM"))
+           #t))
        (patches (search-patches "superlu-dist-scotchmetis.patch"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -3038,7 +3047,9 @@ Fresnel integrals, and similar related functions as well.")
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled metis source
-        '(delete-file-recursively "metis-5.1.0"))))
+        '(begin
+           (delete-file-recursively "metis-5.1.0")
+           #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f  ;no "check" target
@@ -3234,19 +3245,21 @@ specifications.")
         "12pj1idjz31r7c2mb5w03vy1cmvycvbkx9z29s40qdmkp1i7q6i0"))
       (modules '((guix build utils)))
       (snippet
-       '(substitute* (list "lp_solve/ccc" "lpsolve55/ccc")
-          (("^c=cc") "c=gcc")
-          ;; Pretend to be on a 64 bit platform to obtain a common directory
-          ;; name for the build results on all architectures; nothing else
-          ;; seems to depend on it.
-          (("^PLATFORM=.*$") "PLATFORM=ux64\n")
-
-          ;; The check for 'isnan' as it is written fails with
-          ;; "non-floating-point argument in call to function
-          ;; ‘__builtin_isnan’", which leads to the 'NOISNAN' cpp macro
-          ;; definition, which in turn leads to bad things.  Fix the feature
-          ;; test.
-          (("isnan\\(0\\)") "isnan(0.)")))))
+       '(begin
+          (substitute* (list "lp_solve/ccc" "lpsolve55/ccc")
+            (("^c=cc") "c=gcc")
+            ;; Pretend to be on a 64 bit platform to obtain a common directory
+            ;; name for the build results on all architectures; nothing else
+            ;; seems to depend on it.
+            (("^PLATFORM=.*$") "PLATFORM=ux64\n")
+
+            ;; The check for 'isnan' as it is written fails with
+            ;; "non-floating-point argument in call to function
+            ;; ‘__builtin_isnan’", which leads to the 'NOISNAN' cpp macro
+            ;; definition, which in turn leads to bad things.  Fix the feature
+            ;; test.
+            (("isnan\\(0\\)") "isnan(0.)"))
+          #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f                      ; no check target
@@ -3304,7 +3317,9 @@ revised simplex and the branch-and-bound methods.")
        (modules '((guix build utils)))
        (snippet
         ;; Remove bundled sources: UMFPACK, TBB, muParser, and boost
-        '(delete-file-recursively "bundled"))))
+        '(begin
+           (delete-file-recursively "bundled")
+           #t))))
     (build-system cmake-build-system)
     (inputs
      `(("tbb" ,tbb)
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 14783d802a..407d7ee317 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -1175,7 +1175,9 @@ into existing applications.")
          "1lw6807qrbmvzbrjn1rna1dhir2k70xpcjvyjn45y35hav333a42"))
        ;; psycmp3 currently depends on MP3::List and rxaudio (shareware),
        ;; we can add it back when this is no longer the case.
-       (snippet '(delete-file "contrib/psycmp3"))))
+       (snippet '(begin
+                   (delete-file "contrib/psycmp3")
+                   #t))))
     (build-system perl-build-system)
     (inputs
      `(("perl-curses" ,perl-curses)
@@ -1480,12 +1482,6 @@ is also scriptable and extensible via Guile.")
                (base32
                 "0iaj56fkd5bjvqpvq3324ni895rmbj1akbfqipjydnghfwaym4z6"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'bootstrap
-           (lambda _
-             (zero? (system* "./bootstrap.sh")))))))
     (inputs
      `(("expat" ,expat)
        ("openssl" ,openssl)))
@@ -1515,12 +1511,6 @@ manual SSL certificate verification.")
                (base32
                 "0vxfcyfnhnlaj6spm2b0ljw5i3knbphy6mvzpl5zv9b52ny4b08m"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-before 'configure 'bootstrap
-           (lambda _
-             (zero? (system* "./bootstrap.sh")))))))
     (inputs
      `(("expat" ,expat)
        ("openssl" ,openssl)))
diff --git a/gnu/packages/microcom.scm b/gnu/packages/microcom.scm
index dcb864808f..67fd5fe355 100644
--- a/gnu/packages/microcom.scm
+++ b/gnu/packages/microcom.scm
@@ -39,12 +39,6 @@
                (base32
                 "080ci5589bpyy5kcl51csmvpw9zysify189hw6awx69pi3cjnxly"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-i")))))))
     (inputs `(("readline" ,readline)))
     (native-inputs `(("automake" ,automake)
                      ("autoconf" ,autoconf)))
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index 31ec88db81..bbfa4957fc 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -55,9 +55,11 @@
               (modules '((guix build utils)))
               (snippet
                ;; Ensure reproducibility.
-               '(substitute* (find-files "cgi" "\\.c$")
-                  (("__DATE__") "\"1970-01-01\"")
-                  (("__TIME__") "\"00:00:00\"")))))
+               '(begin
+                  (substitute* (find-files "cgi" "\\.c$")
+                    (("__DATE__") "\"1970-01-01\"")
+                    (("__TIME__") "\"00:00:00\""))
+                  #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("unzip" ,unzip)))
diff --git a/gnu/packages/mp3.scm b/gnu/packages/mp3.scm
index 48bf33235f..22aef058f4 100644
--- a/gnu/packages/mp3.scm
+++ b/gnu/packages/mp3.scm
@@ -120,7 +120,7 @@ versions of ID3v2.")
               "0yfhqwk0w8q2hyv1jib1008jvzmwlpsxvc8qjllhna6p1hycqj97"))
             (modules '((guix build utils)))
             ;; Don't use bundled zlib
-            (snippet '(delete-file-recursively "zlib"))
+            (snippet '(begin (delete-file-recursively "zlib") #t))
             (patches (search-patches "id3lib-CVE-2007-4460.patch"))))
    (build-system gnu-build-system)
    (inputs `(("zlib" ,zlib)))
@@ -192,10 +192,12 @@ Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.")
                 "042f1czcs9n2sbqvg4rsvfwlqib2gk976mfa2kxlfjghx5laqf04"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile"
-                  (("/bin/rm") "rm")
-                  (("/usr/bin/install") "install")
-                  (("man/man1") "share/man/man1")))))
+               '(begin
+                  (substitute* "Makefile"
+                    (("/bin/rm") "rm")
+                    (("/usr/bin/install") "install")
+                    (("man/man1") "share/man/man1"))
+                  #t))))
     (build-system gnu-build-system)
     (outputs '("out" "gui"))                      ;GTK+ interface in "gui"
     (arguments
diff --git a/gnu/packages/multiprecision.scm b/gnu/packages/multiprecision.scm
index 6f5c802ad4..e185a98359 100644
--- a/gnu/packages/multiprecision.scm
+++ b/gnu/packages/multiprecision.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -91,13 +92,13 @@ algebra.")
 (define-public mpfr
   (package
    (name "mpfr")
-   (version "3.1.6")
+   (version "4.0.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/mpfr/mpfr-" version
                                 ".tar.xz"))
             (sha256 (base32
-                     "0l598h9klpgkz2bp0rxiqb90mkqh9f2f81n5rpy191j00hdaqqks"))))
+                     "0vp1lrc08gcmwdaqck6bpzllkrykvp06vz5gnqpyw0v3h9h4m1v7"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
    (propagated-inputs `(("gmp" ,gmp)))            ; <mpfr.h> refers to <gmp.h>
@@ -112,14 +113,14 @@ correct rounding.")
 (define-public mpc
   (package
    (name "mpc")
-   (version "1.0.3")
+   (version "1.1.0")
    (source (origin
             (method url-fetch)
             (uri (string-append
                   "mirror://gnu/mpc/mpc-" version ".tar.gz"))
             (sha256
               (base32
-                "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))
+                "0biwnhjm3rx3hc0rfpvyniky4lpzsvdcwhmcn7f0h4iw2hwcb1b9"))))
    (build-system gnu-build-system)
    (outputs '("out" "debug"))
    (propagated-inputs `(("gmp" ,gmp)              ; <mpc.h> refers to both
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 7ae0d9a36f..ff347284a5 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -203,29 +203,31 @@ score, keyboard, guitar, drum and controller views.")
                   "1hximk3q0p8nw8is5w7215xgkb7k4flnfyr0pdz9svfwvcm05w1i"))
                 (modules '((guix build utils)))
                 (snippet
-                  '(for-each
+                 '(begin
+                    (for-each
                      (lambda (dir)
                        (delete-file-recursively
-                         (string-append "3rdparty/" dir)))
+                        (string-append "3rdparty/" dir)))
                      (list
-                       ;; TODO: The following dependencies are still bundled:
-                       ;; - "qxt": Appears to be unmaintained upstream.
-                       ;; - "qsqlite"
-                       ;; - "qtsingleapplication"
-                       ;; - "qocoa"
-                       ;; - "qtiocompressor"
-                       ;; - "gmock": The tests crash when using our googletest
-                       ;;   package instead of the bundled gmock.
-                       "SPMediaKeyTap"
-                       "fancytabwidget"
-                       "google-breakpad"
-                       "libmygpo-qt"
-                       "libmygpo-qt5"
-                       "libprojectm"
-                       "qtwin"
-                       "sha2" ;; Replaced by openssl.
-                       "taglib"
-                       "tinysvcmdns")))
+                      ;; TODO: The following dependencies are still bundled:
+                      ;; - "qxt": Appears to be unmaintained upstream.
+                      ;; - "qsqlite"
+                      ;; - "qtsingleapplication"
+                      ;; - "qocoa"
+                      ;; - "qtiocompressor"
+                      ;; - "gmock": The tests crash when using our googletest
+                      ;;   package instead of the bundled gmock.
+                      "SPMediaKeyTap"
+                      "fancytabwidget"
+                      "google-breakpad"
+                      "libmygpo-qt"
+                      "libmygpo-qt5"
+                      "libprojectm"
+                      "qtwin"
+                      "sha2" ;; Replaced by openssl.
+                      "taglib"
+                      "tinysvcmdns"))
+                    #t))
                 (patches (search-patches "clementine-use-openssl.patch"
                                          "clementine-remove-crypto++-dependency.patch"))))
       (build-system cmake-build-system)
@@ -2627,7 +2629,8 @@ of tools for manipulating and accessing your music.")
                '(begin
                   (delete-file-recursively "resources/music")
                   (substitute* "CMakeLists.txt"
-                    (("add_subdirectory\\(resources/music\\)") ""))))))
+                    (("add_subdirectory\\(resources/music\\)") ""))
+                  #t))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no check target
@@ -2665,9 +2668,11 @@ for improved Amiga ProTracker 2/3 compatibility.")
               (modules '((guix build utils)))
               (snippet
                ;; Remove use of __DATE__ and __TIME__ for reproducibility.
-               `(substitute* "schism/version.c"
-                  (("Schism Tracker built %s %s.*$")
-                   (string-append "Schism Tracker version " ,version "\");"))))))
+               `(begin
+                  (substitute* "schism/version.c"
+                    (("Schism Tracker built %s %s.*$")
+                     (string-append "Schism Tracker version " ,version "\");")))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index 1f1b97f5f9..2f628a6fe9 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
@@ -40,7 +40,7 @@
 (define-public ncurses
   (package
     (name "ncurses")
-    (version "6.0-20170930")
+    (version "6.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/ncurses/ncurses-"
@@ -48,7 +48,7 @@
                                   ".tar.gz"))
               (sha256
                (base32
-                "0q3jck7lna77z5r42f13c4xglc7azd19pxfrjrpgp2yf615w4lgm"))))
+                "05qdmbmrrn88ii9f66rkcmcyzp1kb1ymkx7g040lfkd1nkp7w1da"))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                ;1 MiB of man pages
@@ -56,7 +56,8 @@
      (let ((patch-makefile-phase
             '(lambda _
                (for-each patch-makefile-SHELL
-                         (find-files "." "Makefile.in"))))
+                         (find-files "." "Makefile.in"))
+               #t))
            (configure-phase
             ;; The 'configure' script does not understand '--docdir', so we must
             ;; override that and use '--mandir' instead.
@@ -64,21 +65,27 @@
                        #:allow-other-keys)
                (let ((out (assoc-ref outputs "out"))
                      (doc (assoc-ref outputs "doc")))
-                 (zero? (apply system* "./configure"
-                               (string-append "SHELL=" (which "sh"))
-                               (string-append "--build=" build)
-                               (string-append "--prefix=" out)
-                               (string-append "--mandir=" doc "/share/man")
-                               (if target
-                                   (cons (string-append "--host=" target)
-                                         configure-flags)
-                                   configure-flags))))))
+                 (apply invoke "./configure"
+                        (string-append "SHELL=" (which "sh"))
+                        (string-append "--build=" build)
+                        (string-append "--prefix=" out)
+                        (string-append "--mandir=" doc "/share/man")
+                        (if target
+                            (cons (string-append "--host=" target)
+                                  configure-flags)
+                            configure-flags))
+                 #t)))
            (apply-rollup-patch-phase
+            ;; Ncurses distributes "stable" patchsets to be applied on top
+            ;; of the release tarball.  These are only available as shell
+            ;; scripts(!) so we decompress and apply them in a phase.
+            ;; See <https://invisible-mirror.net/archives/ncurses/6.1/README>.
             '(lambda* (#:key inputs native-inputs #:allow-other-keys)
                (copy-file (assoc-ref (or native-inputs inputs) "rollup-patch")
                           (string-append (getcwd) "/rollup-patch.sh.bz2"))
-               (and (zero? (system* "bzip2" "-d" "rollup-patch.sh.bz2"))
-                    (zero? (system* "sh" "rollup-patch.sh")))))
+               (invoke "bzip2" "-d" "rollup-patch.sh.bz2")
+               (invoke "sh" "rollup-patch.sh")
+               #t))
            (remove-shebang-phase
             '(lambda _
                ;; To avoid retaining a reference to the bootstrap Bash via the
@@ -149,7 +156,8 @@
                                            (when (file-exists? packagew.pc)
                                              (symlink packagew.pc package.pc))))
                                        '())))
-                             '("curses" "ncurses" "form" "panel" "menu")))))))
+                             '("curses" "ncurses" "form" "panel" "menu")))
+                 #t))))
        `(#:configure-flags
          ,(cons*
            'quasiquote
@@ -170,12 +178,17 @@
               ;; correct RUNPATH.
               ,(list 'unquote '(string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out")
                                               "/lib"))
+
+              ;; Starting from ncurses 6.1, "make install" runs "install -s"
+              ;; by default, which doesn't work for cross-compiled binaries
+              ;; because it invokes 'strip' instead of 'TRIPLET-strip'.  Work
+              ;; around this.
+              ,@(if (%current-target-system) '("--disable-stripping") '())
+
               ;; MinGW: Use term-driver created for the MinGW port.
               ,@(if (target-mingw?) '("--enable-term-driver") '()))))
          #:tests? #f                  ; no "check" target
          #:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'apply-rollup-patch
-                      ,apply-rollup-patch-phase)
                     (replace 'configure ,configure-phase)
                     (add-after 'install 'post-install
                       ,post-install-phase)
@@ -185,22 +198,7 @@
                       ,remove-shebang-phase)))))
     (self-native-input? #t)           ; for `tic'
     (native-inputs
-     `(("pkg-config" ,pkg-config)
-
-       ;; Ncurses distributes "stable" patchsets to be applied on top
-       ;; of the release tarball.  These are only available as shell
-       ;; scripts(!) so we decompress and apply them in a phase.
-       ;; See <https://invisible-mirror.net/archives/ncurses/6.0/README>.
-       ("rollup-patch"
-        ,(origin
-           (method url-fetch)
-           (uri (string-append
-                 "https://invisible-mirror.net/archives/ncurses/"
-                 (car (string-split version #\-))
-                 "/ncurses-" version "-patch.sh.bz2"))
-           (sha256
-            (base32
-             "08a1pp8wnj1fwpa1pz3fgrmd6xwp21idniswqz8lx3w3z2nb4ydi"))))))
+     `(("pkg-config" ,pkg-config)))
     (native-search-paths
      (list (search-path-specification
             (variable "TERMINFO_DIRS")
diff --git a/gnu/packages/netpbm.scm b/gnu/packages/netpbm.scm
index 2d76d7e067..e5246660a2 100644
--- a/gnu/packages/netpbm.scm
+++ b/gnu/packages/netpbm.scm
@@ -94,7 +94,8 @@
                   (("^DATE=.*")
                    "DATE=\"Thu Jan 01 00:00:00+0000 1970\"\n")
                   (("^USER=.*")
-                   "USER=Guix\n"))))))
+                   "USER=Guix\n"))
+                #t))))
 
    (build-system gnu-build-system)
    (inputs `(("ghostscript" ,ghostscript)
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index a662842739..bddd4bc857 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -405,9 +405,11 @@ Ethernet devices.")
                 "045cbsq9ps32j24v8y5hpyqxnqn9mpaf3mgvirlhgpqyb9jsia0c"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Main.h"
-                  (("#include <stdio.h>")
-                   "#include <stdio.h>\n#include <stdlib.h>")))))
+               '(begin
+                  (substitute* "Main.h"
+                    (("#include <stdio.h>")
+                     "#include <stdio.h>\n#include <stdlib.h>"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f                                ; no "check" target
@@ -1595,8 +1597,6 @@ interface and a programmable text output for scripting.")
        (modify-phases %standard-phases
          (add-after 'unpack 'chdir
            (lambda _ (chdir "libnet") #t))
-         (add-after 'chdir 'bootstrap
-           (lambda _ (zero? (system* "autoreconf" "-vif"))))
          (add-before 'build 'build-doc
            (lambda* (#:key make-flags #:allow-other-keys)
              (zero? (apply system* "make" "-C" "doc" "doc"
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 6a3a510ff2..1a79066eac 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -68,7 +68,8 @@
                     (("deps/http_parser/http_parser.gyp") "")
                     (("deps/uv/include/\\*.h") "")
                     (("deps/uv/uv.gyp") "")
-                    (("deps/zlib/zlib.gyp") ""))))))
+                    (("deps/zlib/zlib.gyp") ""))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      ;; TODO: Purge the bundled copies from the source.
diff --git a/gnu/packages/nvi.scm b/gnu/packages/nvi.scm
index 5f829aa6ee..ea02762a9b 100644
--- a/gnu/packages/nvi.scm
+++ b/gnu/packages/nvi.scm
@@ -50,7 +50,8 @@
                conf-wrap)
              (newline conf-wrap)
              (close-output-port conf-wrap)
-             (chmod "configure" #o0755)))))
+             (chmod "configure" #o0755)
+             #t))))
 
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/ocaml.scm b/gnu/packages/ocaml.scm
index c55276aa9d..864038fe99 100644
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@ -100,7 +100,8 @@
                 ;; in OCaml's directory in the store, which is read-only.
                 (substitute* "Makefile"
                   (("--prefix")
-                   "--libdir $(LIBDIR) --prefix")))))))
+                   "--libdir $(LIBDIR) --prefix"))
+                #t)))))
 
 ;; They also require almost the same set of arguments
 (define janestreet-arguments
@@ -398,19 +399,20 @@ syntax of OCaml.")
                            (mandir (string-append out "/share/man")))
                       ;; Custom configure script doesn't recognize
                       ;; --prefix=<PREFIX> syntax (with equals sign).
-                      (zero? (system* "./configure"
-                                      "--prefix" out
-                                      "--mandir" mandir)))))
+                      (invoke "./configure"
+                              "--prefix" out
+                              "--mandir" mandir))))
          (replace 'build
                   (lambda _
-                    (zero? (system* "make" "-j" (number->string
-                                                 (parallel-job-count))
-                                    "world.opt"))))
+                    (invoke "make" "-j" (number->string
+                                         (parallel-job-count))
+                            "world.opt")))
          ;; Required for findlib to find camlp5's libraries
          (add-after 'install 'install-meta
            (lambda* (#:key outputs #:allow-other-keys)
              (install-file "etc/META" (string-append (assoc-ref outputs "out")
-                                                     "/lib/ocaml/camlp5/")))))))
+                                                     "/lib/ocaml/camlp5/"))
+             #t)))))
     (home-page "http://camlp5.gforge.inria.fr/")
     (synopsis "Pre-processor Pretty Printer for OCaml")
     (description
@@ -782,7 +784,8 @@ libpanel, librsvg and quartz.")
             ;; Without the '-fix' argument, the html file produced does not
             ;; have functioning internal hyperlinks.
             (substitute* "doc/Makefile"
-              (("hevea unison") "hevea -fix unison"))))))
+              (("hevea unison") "hevea -fix unison"))
+            #t))))
     (build-system gnu-build-system)
     (outputs '("out"
                "doc"))                  ; 1.9 MiB of documentation
@@ -874,7 +877,7 @@ to the other.")
                    'configure
                    (lambda* (#:key inputs outputs #:allow-other-keys)
                      (let ((out (assoc-ref outputs "out")))
-                       (system*
+                       (invoke
                         "./configure"
                         "-bindir" (string-append out "/bin")
                         "-config" (string-append out "/etc/ocamfind.conf")
@@ -884,14 +887,15 @@ to the other.")
                   (replace 'install
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
-                        (zero? (system* "make" "install"
-                                        (string-append "OCAML_CORE_STDLIB="
-                                                       out "/lib/ocaml/site-lib"))))))
+                        (invoke "make" "install"
+                                (string-append "OCAML_CORE_STDLIB="
+                                               out "/lib/ocaml/site-lib")))))
                   (add-after 'install 'remove-camlp4
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let ((out (assoc-ref outputs "out")))
                         (delete-file-recursively
-                          (string-append out "/lib/ocaml/site-lib/camlp4"))))))))
+                         (string-append out "/lib/ocaml/site-lib/camlp4"))
+                        #t))))))
     (home-page "http://projects.camlcity.org/projects/findlib.html")
     (synopsis "Management tool for OCaml libraries")
     (description
@@ -2197,17 +2201,19 @@ file (POSIX like) and filename.")
                 "1ln7vc7ip6s5xbi20mhnn087xi4a2m5vqawx0703qqnfkzhmslqy"))
             (modules '((guix build utils)))
             (snippet
-             '(substitute* "test/test-main/Test.ml"
-                ;; most of these tests fail because ld cannot find crti.o, but according
-                ;; to the log file, the environment variables {LD_,}LIBRARY_PATH
-                ;; are set correctly whene LD_LIBRARY_PATH is defined beforhand.
-                (("TestBaseCompat.tests;") "")
-                (("TestExamples.tests;") "")
-                (("TestFull.tests;") "")
-                (("TestPluginDevFiles.tests;") "")
-                (("TestPluginInternal.tests;") "")
-                (("TestPluginOCamlbuild.tests;") "")
-                (("TestPluginOMake.tests;") "")))))
+             '(begin
+                (substitute* "test/test-main/Test.ml"
+                  ;; most of these tests fail because ld cannot find crti.o, but according
+                  ;; to the log file, the environment variables {LD_,}LIBRARY_PATH
+                  ;; are set correctly whene LD_LIBRARY_PATH is defined beforhand.
+                  (("TestBaseCompat.tests;") "")
+                  (("TestExamples.tests;") "")
+                  (("TestFull.tests;") "")
+                  (("TestPluginDevFiles.tests;") "")
+                  (("TestPluginInternal.tests;") "")
+                  (("TestPluginOCamlbuild.tests;") "")
+                  (("TestPluginOMake.tests;") ""))
+                #t))))
     (build-system ocaml-build-system)
     (native-inputs
      `(("ocamlify" ,ocamlify)
diff --git a/gnu/packages/onc-rpc.scm b/gnu/packages/onc-rpc.scm
index 44400ebe57..64887212d3 100644
--- a/gnu/packages/onc-rpc.scm
+++ b/gnu/packages/onc-rpc.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -113,12 +113,6 @@ universal addresses.")
                (base32
                 "1y6kmxmv1difzvdhx7grqzw0j2v2b74mg4kjb803m8jcgkqqx8m5"))))
     (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (invoke "sh" "autogen.sh"))))))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
diff --git a/gnu/packages/openldap.scm b/gnu/packages/openldap.scm
index 3e3b2d8928..d952f412e2 100644
--- a/gnu/packages/openldap.scm
+++ b/gnu/packages/openldap.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -40,7 +41,7 @@
 (define-public openldap
   (package
    (name "openldap")
-   (version "2.4.45")
+   (version "2.4.46")
    (source (origin
             (method url-fetch)
 
@@ -57,7 +58,7 @@
                         "openldap-release/openldap-" version ".tgz")))
             (sha256
              (base32
-              "091qvwk5dkcpp17ziabcnh3rg3m7qwzw2pihfcd1d5fdxgywzmnd"))))
+              "0bab1km8f2nan1x0zgwliknbxg0zlf2pafxrr867kblrdfwdr44s"))))
    (build-system gnu-build-system)
    (inputs `(("bdb" ,bdb-5.3)
              ("cyrus-sasl" ,cyrus-sasl)
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 1356480b81..ea79de9021 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -144,7 +144,7 @@
                     (ice-9 rdelim))
 
          #:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'bootstrap
+                    (replace 'bootstrap
                       (lambda _
                         ;; Make sure 'msgmerge' can modify the PO files.
                         (for-each (lambda (po)
@@ -157,7 +157,7 @@
                           (lambda (port)
                             (display ,version port)))
 
-                        (zero? (system* "sh" "bootstrap"))))
+                        (invoke "sh" "bootstrap")))
                     (add-before 'check 'copy-bootstrap-guile
                       (lambda* (#:key system inputs #:allow-other-keys)
                         ;; Copy the bootstrap guile tarball in the store used
diff --git a/gnu/packages/patches/alsa-lib-add-environment-variable.patch b/gnu/packages/patches/alsa-lib-add-environment-variable.patch
new file mode 100644
index 0000000000..a468a7fc4f
--- /dev/null
+++ b/gnu/packages/patches/alsa-lib-add-environment-variable.patch
@@ -0,0 +1,110 @@
+From 1822fb453128a1b5de93b4c590cd272d6488a077 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <julien@lepiller.eu>
+Date: Fri, 25 May 2018 19:26:58 +0200
+Subject: [PATCH] Add support for a ALSA_PLUGIN_DIR environment variable.
+
+If it is not set, default to previous behavior.
+---
+ src/control/control.c |  6 +++++-
+ src/dlmisc.c          |  9 +++++++--
+ src/pcm/pcm.c         |  9 +++++++--
+ src/pcm/pcm_rate.c    | 13 +++++++++----
+ 4 files changed, 28 insertions(+), 9 deletions(-)
+
+diff --git a/src/control/control.c b/src/control/control.c
+index 11f7815..9dba7dd 100644
+--- a/src/control/control.c
++++ b/src/control/control.c
+@@ -1331,7 +1331,11 @@ static int snd_ctl_open_conf(snd_ctl_t **ctlp, const char *name,
+ 			build_in++;
+ 		}
+ 		if (*build_in == NULL) {
+-			buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32);
++			char* plugdir = ALSA_PLUGIN_DIR;
++			char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++			if(envplugdir != NULL)
++				plugdir = envplugdir;
++			buf1 = malloc(strlen(str) + strlen(plugdir) + 32);
+ 			if (buf1 == NULL) {
+ 				err = -ENOMEM;
+ 				goto _err;
+diff --git a/src/dlmisc.c b/src/dlmisc.c
+index 3757d33..92aa864 100644
+--- a/src/dlmisc.c
++++ b/src/dlmisc.c
+@@ -82,9 +82,14 @@ void *snd_dlopen(const char *name, int mode, char *errbuf, size_t errbuflen)
+ 	char *filename = NULL;
+ 
+ 	if (name && name[0] != '/') {
+-		filename = alloca(sizeof(ALSA_PLUGIN_DIR) + 1 + strlen(name) + 1);
++		char* plugdir = ALSA_PLUGIN_DIR;
++		char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++		if(envplugdir != NULL)
++			plugdir = envplugdir;
++
++		filename = malloc(strlen(plugdir) + 1 + strlen(name) + 1);
+ 		if (filename) {
+-			strcpy(filename, ALSA_PLUGIN_DIR);
++			strcpy(filename, plugdir);
+ 			strcat(filename, "/");
+ 			strcat(filename, name);
+ 			handle = dlopen(filename, mode);
+diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c
+index 11aec80..590e8b6 100644
+--- a/src/pcm/pcm.c
++++ b/src/pcm/pcm.c
+@@ -2496,13 +2496,18 @@ static int snd_pcm_open_conf(snd_pcm_t **pcmp, const char *name,
+ 			build_in++;
+ 		}
+ 		if (*build_in == NULL) {
+-			buf1 = malloc(strlen(str) + sizeof(ALSA_PLUGIN_DIR) + 32);
++			char* plugdir = ALSA_PLUGIN_DIR;
++			char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++			if(envplugdir != NULL)
++				plugdir = envplugdir;
++			buf1 = malloc(strlen(str) + strlen(plugdir) + 32);
++
+ 			if (buf1 == NULL) {
+ 				err = -ENOMEM;
+ 				goto _err;
+ 			}
+ 			lib = buf1;
+-			sprintf(buf1, "%s/libasound_module_pcm_%s.so", ALSA_PLUGIN_DIR, str);
++			sprintf(buf1, "%s/libasound_module_pcm_%s.so", plugdir, str);
+ 		}
+ 	}
+ #ifndef PIC
+diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c
+index 4e0c7ca..8694a38 100644
+--- a/src/pcm/pcm_rate.c
++++ b/src/pcm/pcm_rate.c
+@@ -1260,7 +1260,8 @@ static const char *const default_rate_plugins[] = {
+ 
+ static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_config_t *converter_conf, int verbose)
+ {
+-	char open_name[64], open_conf_name[64], lib_name[128], *lib = NULL;
++	char open_name[64], open_conf_name[64], *lib = NULL;
++	char *buf1;
+ 	snd_pcm_rate_open_func_t open_func;
+ 	snd_pcm_rate_open_conf_func_t open_conf_func;
+ 	int err;
+@@ -1268,9 +1269,13 @@ static int rate_open_func(snd_pcm_rate_t *rate, const char *type, const snd_conf
+ 	snprintf(open_name, sizeof(open_name), "_snd_pcm_rate_%s_open", type);
+ 	snprintf(open_conf_name, sizeof(open_conf_name), "_snd_pcm_rate_%s_open_conf", type);
+ 	if (!is_builtin_plugin(type)) {
+-		snprintf(lib_name, sizeof(lib_name),
+-				 "%s/libasound_module_rate_%s.so", ALSA_PLUGIN_DIR, type);
+-		lib = lib_name;
++		char* plugdir = ALSA_PLUGIN_DIR;
++		char* envplugdir = getenv("ALSA_PLUGIN_DIR");
++		if(envplugdir != NULL)
++			plugdir = envplugdir;
++		buf1 = malloc(strlen(type) + strlen(plugdir) + 32);
++		sprintf(buf1, "%s/libasound_module_rate_%s.so", plugdir, type);
++		lib = buf1;
+ 	}
+ 
+ 	rate->rate_min = SND_PCM_PLUGIN_RATE_MIN;
+-- 
+2.17.0
+
diff --git a/gnu/packages/patches/binutils-ld-new-dtags.patch b/gnu/packages/patches/binutils-ld-new-dtags.patch
deleted file mode 100644
index 5f7a03fc38..0000000000
--- a/gnu/packages/patches/binutils-ld-new-dtags.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-Turn on --enable-new-dtags by default to make the linker set RUNPATH
-instead of RPATH on binaries.  This is important because RUNPATH can
-be overriden using LD_LIBRARY_PATH at runtime.
-
-Patch from Nixpkgs by Eelco Dolstra <eelco.dolstra@logicblox.com>.
-
---- binutils/ld/ldmain.c
-+++ binutils/ld/ldmain.c
-@@ -296,6 +296,7 @@ main (int argc, char **argv)
-
-   link_info.allow_undefined_version = TRUE;
-   link_info.keep_memory = TRUE;
-+  link_info.new_dtags = TRUE;
-   link_info.combreloc = TRUE;
-   link_info.strip_discarded = TRUE;
-   link_info.callbacks = &link_callbacks;
diff --git a/gnu/packages/patches/boost-fix-icu-build.patch b/gnu/packages/patches/boost-fix-icu-build.patch
new file mode 100644
index 0000000000..556f91b8f7
--- /dev/null
+++ b/gnu/packages/patches/boost-fix-icu-build.patch
@@ -0,0 +1,53 @@
+Pass -std=c++11 when compiling files that include the ICU headers.  Without
+this flag, compilation fails and causes Boost's build system to remove ICU
+support.  Note that $(pkg-config --variable=CXXFLAGS icu-uc) includes
+"-std=c++11", but Boost's build system does not use 'pkg-config'.
+
+--- boost_1_66_0/libs/locale/build/Jamfile.v2.orig	2017-12-13 18:56:44.000000000 -0500
++++ boost_1_66_0/libs/locale/build/Jamfile.v2	2018-04-08 15:18:58.673025760 -0400
+@@ -65,8 +65,8 @@
+ 
+ if $(ICU_LINK)
+ {
+-    ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <runtime-link>shared ;
+-    ICU64_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin64 <runtime-link>shared ;
++    ICU_OPTS = <include>$(ICU_PATH)/include <cxxflags>-std=c++11 <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <runtime-link>shared ;
++    ICU64_OPTS = <include>$(ICU_PATH)/include <cxxflags>-std=c++11 <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin64 <runtime-link>shared ;
+ }
+ else
+ {
+@@ -121,6 +121,7 @@
+     explicit icuuc icudt icuin ;
+ 
+     ICU_OPTS =   <include>$(ICU_PATH)/include 
++      <cxxflags>-std=c++11
+       <library>icuuc/<link>shared/<runtime-link>shared 
+       <library>icudt/<link>shared/<runtime-link>shared 
+       <library>icuin/<link>shared/<runtime-link>shared
+@@ -180,6 +181,7 @@
+     explicit icuuc_64 icudt_64 icuin_64 ;
+ 
+     ICU64_OPTS =   <include>$(ICU_PATH)/include 
++      <cxxflags>-std=c++11
+       <library>icuuc_64/<link>shared/<runtime-link>shared 
+       <library>icudt_64/<link>shared/<runtime-link>shared 
+       <library>icuin_64/<link>shared/<runtime-link>shared
+--- boost_1_66_0/libs/regex/build/Jamfile.v2.orig	2017-12-13 18:56:48.000000000 -0500
++++ boost_1_66_0/libs/regex/build/Jamfile.v2	2018-04-08 15:20:40.865532505 -0400
+@@ -44,7 +44,7 @@
+ 
+    if $(ICU_LINK)
+    {
+-      ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
++      ICU_OPTS = <include>$(ICU_PATH)/include <cxxflags>-std=c++11 <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <define>BOOST_HAS_ICU=1 <runtime-link>shared ;
+    }
+    else
+    {
+@@ -78,6 +78,7 @@
+ 
+       ICU_OPTS = 
+          <include>$(ICU_PATH)/include 
++         <cxxflags>-std=c++11
+          <runtime-link>shared:<library>icuuc/<link>shared
+          <runtime-link>shared:<library>icudt/<link>shared
+          <runtime-link>shared:<library>icuin/<link>shared
diff --git a/gnu/packages/patches/btrfs-progs-e-value-block.patch b/gnu/packages/patches/btrfs-progs-e-value-block.patch
new file mode 100644
index 0000000000..6365146431
--- /dev/null
+++ b/gnu/packages/patches/btrfs-progs-e-value-block.patch
@@ -0,0 +1,37 @@
+From c78f59a971ce4b543f3177e383b677862b2d9fb5 Mon Sep 17 00:00:00 2001
+From: Qu Wenruo <wqu@suse.com>
+Date: Wed, 14 Mar 2018 08:56:57 +0800
+Subject: [PATCH] btrfs-progs: convert/ext2: Remove check for
+ ext2_ext_attr_entry->e_value_block
+
+In latest e2fsprogs (1.44.0) definition of ext2_ext_attr_entry has
+removed member e_value_block, as currently ext* doesn't support it set
+anyway.
+
+So remove such check so that we can pass compile.
+
+Issue: #110
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=199071
+Signed-off-by: Qu Wenruo <wqu@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+---
+ convert/source-ext2.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/convert/source-ext2.c b/convert/source-ext2.c
+index b1492c78..070126ec 100644
+--- a/convert/source-ext2.c
++++ b/convert/source-ext2.c
+@@ -422,8 +422,7 @@ static int ext2_xattr_check_entry(struct ext2_ext_attr_entry *entry,
+ {
+ 	size_t value_size = entry->e_value_size;
+ 
+-	if (entry->e_value_block != 0 || value_size > size ||
+-	    entry->e_value_offs + value_size > size)
++	if (value_size > size || entry->e_value_offs + value_size > size)
+ 		return -EIO;
+ 	return 0;
+ }
+-- 
+2.16.3
+
diff --git a/gnu/packages/patches/cmake-fix-tests.patch b/gnu/packages/patches/cmake-fix-tests.patch
deleted file mode 100644
index 732b0023ab..0000000000
--- a/gnu/packages/patches/cmake-fix-tests.patch
+++ /dev/null
@@ -1,120 +0,0 @@
-From af0a62dadfb3db25880bc653e2e4c97435a604c9 Mon Sep 17 00:00:00 2001
-From: Efraim Flashner <efraim@flashner.co.il>
-Date: Mon, 29 Aug 2016 20:07:58 +0300
-Subject: [PATCH] cmake-fix-tests
-
----
- Tests/CMakeLists.txt | 83 ++++++++++++++++++++++++++++------------------------
- 1 file changed, 44 insertions(+), 39 deletions(-)
-
-diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
-index f21e430..56014a2 100644
---- a/Tests/CMakeLists.txt
-+++ b/Tests/CMakeLists.txt
-@@ -416,10 +416,12 @@ if(BUILD_TESTING)
-   endif()
- 
-   # run test for BundleUtilities on supported platforms/compilers
--  if(MSVC OR
--     MINGW OR
--     CMAKE_SYSTEM_NAME MATCHES "Linux" OR
--     CMAKE_SYSTEM_NAME MATCHES "Darwin")
-+#  if(MSVC OR
-+#     MINGW OR
-+#     CMAKE_SYSTEM_NAME MATCHES "Linux" OR
-+#     CMAKE_SYSTEM_NAME MATCHES "Darwin")
-+# This test fails on Guix: skip it.
-+  if(FALSE)
-   if(NOT "${CMAKE_GENERATOR}" STREQUAL "Watcom WMake")
- 
-     add_test(BundleUtilities ${CMAKE_CTEST_COMMAND}
-@@ -2481,30 +2483,32 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
-     PASS_REGULAR_EXPRESSION "Could not find executable"
-     FAIL_REGULAR_EXPRESSION "SegFault")
- 
--  configure_file(
--    "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in"
--    "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake"
--    @ONLY ESCAPE_QUOTES)
--  add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND}
--    -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V
--    --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log"
--    )
--  set_tests_properties(CTestTestUpload PROPERTIES
--    PASS_REGULAR_EXPRESSION "Upload\\.xml")
--
--  configure_file(
--    "${CMake_SOURCE_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake.in"
--    "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake"
--    @ONLY ESCAPE_QUOTES)
--  add_test(CTestCoverageCollectGCOV ${CMAKE_CTEST_COMMAND}
--    -C \${CTEST_CONFIGURATION_TYPE}
--    -S "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake" -VV
--    --output-log "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/testOut.log"
--    )
--  set_tests_properties(CTestCoverageCollectGCOV PROPERTIES
--    PASS_REGULAR_EXPRESSION
--    "PASSED with correct output.*Testing/CoverageInfo/main.cpp.gcov")
--  set_property(TEST CTestCoverageCollectGCOV PROPERTY ENVIRONMENT CTEST_PARALLEL_LEVEL=)
-+# This test requires network connectivity: skip it.
-+#  configure_file(
-+#    "${CMake_SOURCE_DIR}/Tests/CTestTestUpload/test.cmake.in"
-+#    "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake"
-+#    @ONLY ESCAPE_QUOTES)
-+#  add_test(CTestTestUpload ${CMAKE_CTEST_COMMAND}
-+#    -S "${CMake_BINARY_DIR}/Tests/CTestTestUpload/test.cmake" -V
-+#    --output-log "${CMake_BINARY_DIR}/Tests/CTestTestUpload/testOut.log"
-+#    )
-+#  set_tests_properties(CTestTestUpload PROPERTIES
-+#    PASS_REGULAR_EXPRESSION "Upload\\.xml")
-+
-+# This test times out
-+#  configure_file(
-+#    "${CMake_SOURCE_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake.in"
-+#    "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake"
-+#    @ONLY ESCAPE_QUOTES)
-+#  add_test(CTestCoverageCollectGCOV ${CMAKE_CTEST_COMMAND}
-+#    -C \${CTEST_CONFIGURATION_TYPE}
-+#    -S "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/test.cmake" -VV
-+#    --output-log "${CMake_BINARY_DIR}/Tests/CTestCoverageCollectGCOV/testOut.log"
-+#    )
-+#  set_tests_properties(CTestCoverageCollectGCOV PROPERTIES
-+#    PASS_REGULAR_EXPRESSION
-+#    "PASSED with correct output.*Testing/CoverageInfo/main.cpp.gcov")
-+#  set_property(TEST CTestCoverageCollectGCOV PROPERTY ENVIRONMENT CTEST_PARALLEL_LEVEL=)
- 
-   configure_file(
-     "${CMake_SOURCE_DIR}/Tests/CTestTestEmptyBinaryDirectory/test.cmake.in"
-@@ -2860,17 +2864,18 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
-   set_tests_properties(CTestTestStopTime PROPERTIES
-     PASS_REGULAR_EXPRESSION "The stop time has been passed")
- 
--  configure_file(
--    "${CMake_SOURCE_DIR}/Tests/CTestTestSubdir/test.cmake.in"
--    "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/test.cmake"
--    @ONLY ESCAPE_QUOTES)
--  add_test(CTestTestSubdir ${CMAKE_CTEST_COMMAND}
--    -S "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/test.cmake" -V
--    --output-log "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/testOutput.log"
--    )
--  #make sure all 3 subdirs were added
--  set_tests_properties(CTestTestSubdir PROPERTIES
--    PASS_REGULAR_EXPRESSION "0 tests failed out of 3")
-+# This test fails to build 2 of the 3 tests
-+#  configure_file(
-+#    "${CMake_SOURCE_DIR}/Tests/CTestTestSubdir/test.cmake.in"
-+#    "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/test.cmake"
-+#    @ONLY ESCAPE_QUOTES)
-+#  add_test(CTestTestSubdir ${CMAKE_CTEST_COMMAND}
-+#    -S "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/test.cmake" -V
-+#    --output-log "${CMake_BINARY_DIR}/Tests/CTestTestSubdir/testOutput.log"
-+#    )
-+#  #make sure all 3 subdirs were added
-+#  set_tests_properties(CTestTestSubdir PROPERTIES
-+#    PASS_REGULAR_EXPRESSION "0 tests failed out of 3")
- 
-   configure_file(
-     "${CMake_SOURCE_DIR}/Tests/CTestTestTimeout/test.cmake.in"
--- 
-2.9.3
-
diff --git a/gnu/packages/patches/e2fsprogs-glibc-2.27.patch b/gnu/packages/patches/e2fsprogs-glibc-2.27.patch
new file mode 100644
index 0000000000..f0bc7130c0
--- /dev/null
+++ b/gnu/packages/patches/e2fsprogs-glibc-2.27.patch
@@ -0,0 +1,56 @@
+Copied from:
+https://github.com/openwrt/openwrt/blob/58a95f0f8ff768b43d68eed2b6a786e0f40f723b/tools/e2fsprogs/patches/005-misc-rename-copy_file_range-to-copy_file_chunk.patch
+
+From 01551bdba16ab16512a01affe02ade32c41ede8a Mon Sep 17 00:00:00 2001
+From: Palmer Dabbelt <palmer@dabbelt.com>
+Date: Fri, 29 Dec 2017 10:19:51 -0800
+Subject: [PATCH] misc: rename copy_file_range to copy_file_chunk
+
+As of 2.27, glibc will have a copy_file_range library call to wrap the
+new copy_file_range system call.  This conflicts with the function in
+misc/create_inode.c, which this patch renames _copy_file_range.
+
+Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com>
+Signed-off-by: Theodore Ts'o <tytso@mit.edu>
+---
+ misc/create_inode.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/misc/create_inode.c
++++ b/misc/create_inode.c
+@@ -392,7 +392,7 @@ static ssize_t my_pread(int fd, void *bu
+ }
+ #endif /* !defined HAVE_PREAD64 && !defined HAVE_PREAD */
+ 
+-static errcode_t copy_file_range(ext2_filsys fs, int fd, ext2_file_t e2_file,
++static errcode_t copy_file_chunk(ext2_filsys fs, int fd, ext2_file_t e2_file,
+ 				 off_t start, off_t end, char *buf,
+ 				 char *zerobuf)
+ {
+@@ -466,7 +466,7 @@ static errcode_t try_lseek_copy(ext2_fil
+ 
+ 		data_blk = data & ~(fs->blocksize - 1);
+ 		hole_blk = (hole + (fs->blocksize - 1)) & ~(fs->blocksize - 1);
+-		err = copy_file_range(fs, fd, e2_file, data_blk, hole_blk, buf,
++		err = copy_file_chunk(fs, fd, e2_file, data_blk, hole_blk, buf,
+ 				      zerobuf);
+ 		if (err)
+ 			return err;
+@@ -516,7 +516,7 @@ static errcode_t try_fiemap_copy(ext2_fi
+ 		}
+ 		for (i = 0, ext = ext_buf; i < fiemap_buf->fm_mapped_extents;
+ 		     i++, ext++) {
+-			err = copy_file_range(fs, fd, e2_file, ext->fe_logical,
++			err = copy_file_chunk(fs, fd, e2_file, ext->fe_logical,
+ 					      ext->fe_logical + ext->fe_length,
+ 					      buf, zerobuf);
+ 			if (err)
+@@ -569,7 +569,7 @@ static errcode_t copy_file(ext2_filsys f
+ 		goto out;
+ #endif
+ 
+-	err = copy_file_range(fs, fd, e2_file, 0, statbuf->st_size, buf,
++	err = copy_file_chunk(fs, fd, e2_file, 0, statbuf->st_size, buf,
+ 			      zerobuf);
+ out:
+ 	ext2fs_free_mem(&zerobuf);
diff --git a/gnu/packages/patches/elogind-glibc-2.27.patch b/gnu/packages/patches/elogind-glibc-2.27.patch
new file mode 100644
index 0000000000..4ade587b5e
--- /dev/null
+++ b/gnu/packages/patches/elogind-glibc-2.27.patch
@@ -0,0 +1,22 @@
+Look for memfd_create in sys/mman.h instead of linux/memfd.h.
+Needed to build with glibc-2.27.
+
+--- a/configure.ac	1969-12-31 19:00:00.000000000 -0500
++++ b/configure.ac	2018-03-27 23:54:15.414589005 -0400
+@@ -360,7 +360,7 @@
+ # ------------------------------------------------------------------------------
+ 
+ AC_CHECK_HEADERS([sys/capability.h], [], [AC_MSG_ERROR([*** POSIX caps headers not found])])
+-AC_CHECK_HEADERS([linux/memfd.h], [], [])
++AC_CHECK_HEADERS([sys/mman.h], [], [])
+ 
+ AC_CHECK_HEADERS([printf.h], [have_printf_h=yes], [have_printf_h=no])
+ AS_IF([test x$have_printf_h = xyes], [
+@@ -395,6 +395,7 @@
+                 [], [], [[
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <sys/mman.h>
+ #include <sys/mount.h>
+ #include <fcntl.h>
+ #include <sched.h>
diff --git a/gnu/packages/patches/fontconfig-remove-debug-printf.patch b/gnu/packages/patches/fontconfig-remove-debug-printf.patch
deleted file mode 100644
index 04924a45a4..0000000000
--- a/gnu/packages/patches/fontconfig-remove-debug-printf.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-Fontconfig 2.12.5 and 2.12.6 was released with a stray debugging statement.
-See <https://lists.freedesktop.org/archives/fontconfig/2017-October/006079.html>.
-
-Patch copied from upstream source repository:
-https://cgit.freedesktop.org/fontconfig/commit/?id=b56207a069be2574df455ede0a6ab61f44d5ca2b
-
-diff --git a/fc-query/fc-query.c b/fc-query/fc-query.c
-index 842a8b6..6cd5abd 100644
---- a/fc-query/fc-query.c
-+++ b/fc-query/fc-query.c
-@@ -170,7 +170,6 @@ main (int argc, char **argv)
- 	    FcPattern *pat;
- 
- 	    id = ((instance_num << 16) + face_num);
--	    printf("id %d\n", id);
- 	    if (FT_New_Face (ftLibrary, argv[i], id, &face))
- 	      break;
- 	    num_faces = face->num_faces;
diff --git a/gnu/packages/patches/gawk-shell.patch b/gnu/packages/patches/gawk-shell.patch
index 80e9c65475..46ca5e451f 100644
--- a/gnu/packages/patches/gawk-shell.patch
+++ b/gnu/packages/patches/gawk-shell.patch
@@ -4,31 +4,39 @@ absolute file name of `sh'.
 
 --- gawk-4.1.3/io.c	2015-05-19 15:37:20.000000000 +0200
 +++ gawk-4.1.3/io.c	2015-06-09 18:39:36.918414881 +0200
-@@ -1945,7 +1945,7 @@ two_way_open(const char *str, struct red
+@@ -2025,7 +2025,7 @@
  
- 			signal(SIGPIPE, SIG_DFL);
+ 		set_sigpipe_to_default();
  
--			execl("/bin/sh", "sh", "-c", str, NULL);
-+			execlp("sh", "sh", "-c", str, NULL);
- 			_exit(errno == ENOENT ? 127 : 126);
+-		execl("/bin/sh", "sh", "-c", command, NULL);
++		execlp("sh", "sh", "-c", command, NULL);
+ 		_exit(errno == ENOENT ? 127 : 126);
+ 
+ 	case -1:
+@@ -2077,7 +2077,7 @@
  
- 		case -1:
-@@ -2129,7 +2129,7 @@ use_pipes:
+ 		signal(SIGPIPE, SIG_DFL);
+ 
+-		execl("/bin/sh", "sh", "-c", command, NULL);
++		execlp("sh", "sh", "-c", command, NULL);
+ 		_exit(errno == ENOENT ? 127 : 126);
+ 
+ 	case -1:
+@@ -2422,7 +2422,7 @@
  			fatal(_("close of pipe failed (%s)"), strerror(errno));
  		/* stderr does NOT get dup'ed onto child's stdout */
- 		signal(SIGPIPE, SIG_DFL);
+ 		set_sigpipe_to_default();
 -		execl("/bin/sh", "sh", "-c", str, NULL);
 +		execlp("sh", "sh", "-c", str, NULL);
  		_exit(errno == ENOENT ? 127 : 126);
  	}
  #endif /* NOT __EMX__, NOT __MINGW32__ */
-@@ -2323,7 +2323,7 @@ gawk_popen(const char *cmd, struct redir
+@@ -2659,7 +2659,7 @@
  		if (close(p[0]) == -1 || close(p[1]) == -1)
  			fatal(_("close of pipe failed (%s)"), strerror(errno));
- 		signal(SIGPIPE, SIG_DFL);
+ 		set_sigpipe_to_default();
 -		execl("/bin/sh", "sh", "-c", cmd, NULL);
 +		execlp("sh", "sh", "-c", cmd, NULL);
  		_exit(errno == ENOENT ? 127 : 126);
  	}
  #endif /* NOT __EMX__, NOT __MINGW32__ */
-
diff --git a/gnu/packages/patches/gcc-strmov-store-file-names.patch b/gnu/packages/patches/gcc-strmov-store-file-names.patch
index 7951b87616..9f9162855d 100644
--- a/gnu/packages/patches/gcc-strmov-store-file-names.patch
+++ b/gnu/packages/patches/gcc-strmov-store-file-names.patch
@@ -2,23 +2,43 @@ Make sure that statements such as:
 
   strcpy (dst, "/gnu/store/…");
 
+or
+
+  static const char str[] = "/gnu/store/…";
+  …
+  strcpy (dst, str);
+
 do not result in chunked /gnu/store strings that are undetectable by
-Guix's GC and its grafting code.  See <http://bugs.gnu.org/24703>.
+Guix's GC and its grafting code.  See <https://bugs.gnu.org/24703>
+and <https://bugs.gnu.org/30395>.
+
 
 --- gcc-5.3.0/gcc/builtins.c	2016-10-18 10:50:46.080616285 +0200
 +++ gcc-5.3.0/gcc/builtins.c	2016-11-09 15:26:43.693042737 +0100
-@@ -3192,6 +3192,42 @@ determine_block_size (tree len, rtx len_
+@@ -3192,6 +3192,54 @@ determine_block_size (tree len, rtx len_
  			  GET_MODE_MASK (GET_MODE (len_rtx)));
  }
  
++extern void debug_tree (tree);
++
 +/* Return true if STR contains the string "/gnu/store".  */
 +
-+static bool
++bool
 +store_reference_p (tree str)
 +{
++  if (getenv ("GUIX_GCC_DEBUG") != NULL)
++    debug_tree (str);
++
 +  if (TREE_CODE (str) == ADDR_EXPR)
 +    str = TREE_OPERAND (str, 0);
 +
++  if (TREE_CODE (str) == VAR_DECL
++      && TREE_STATIC (str)
++      && TREE_READONLY (str))
++    /* STR may be a 'static const' variable whose initial value
++       is a string constant.  See <https://bugs.gnu.org/30395>.  */
++    str = DECL_INITIAL (str);
++
 +  if (TREE_CODE (str) != STRING_CST)
 +    return false;
 +
@@ -57,10 +77,32 @@ Guix's GC and its grafting code.  See <http://bugs.gnu.org/24703>.
 +  /* Do not emit block moves, which translate to the 'movabs' instruction on
 +     x86_64, when SRC refers to store items.  That way, store references
 +     remain visible to the Guix GC and grafting code.  See
-+     <http://bugs.gnu.org/24703>.  */
++     <https://bugs.gnu.org/24703>.  */
 +  if (store_reference_p (src))
 +    return NULL_RTX;
 +
    /* If DEST is not a pointer type, call the normal function.  */
    if (dest_align == 0)
      return NULL_RTX;
+
+--- gcc-5.5.0/gcc/gimple-fold.c	2018-03-20 11:36:16.709442004 +0100
++++ gcc-5.5.0/gcc/gimple-fold.c	2018-03-20 11:46:43.838487065 +0100
+@@ -769,6 +769,8 @@ var_decl_component_p (tree var)
+   return SSA_VAR_P (inner);
+ }
+ 
++extern bool store_reference_p (tree);
++
+ /* Fold function call to builtin mem{{,p}cpy,move}.  Return
+    false if no simplification can be made.
+    If ENDP is 0, return DEST (like memcpy).
+@@ -1099,6 +1101,9 @@ gimple_fold_builtin_memory_op (gimple_st
+       if (!srctype)
+ 	return false;
+ 
++      if (store_reference_p (src))
++        return false;
++
+       src_align = get_pointer_alignment (src);
+       dest_align = get_pointer_alignment (dest);
+       if (dest_align < TYPE_ALIGN (desttype)
diff --git a/gnu/packages/patches/ghostscript-no-header-id.patch b/gnu/packages/patches/ghostscript-no-header-id.patch
index 19b71aadb5..da1aa5530f 100644
--- a/gnu/packages/patches/ghostscript-no-header-id.patch
+++ b/gnu/packages/patches/ghostscript-no-header-id.patch
@@ -9,7 +9,7 @@ See: https://bugs.ghostscript.com/show_bug.cgi?id=698208
 diff -ur orig/gnu-ghostscript-9.14.0/devices/vector/gdevpdf.c gnu-ghostscript-9.14.0/devices/vector/gdevpdf.c
 --- orig/gnu-ghostscript-9.14.0/devices/vector/gdevpdf.c	2017-07-09 23:30:28.960479189 +0200
 +++ gnu-ghostscript-9.14.0/devices/vector/gdevpdf.c	2017-07-09 23:34:34.306524488 +0200
-@@ -1580,8 +1580,11 @@
+@@ -1785,8 +1785,11 @@
       * +1 for the linearisation dict and +1 for the primary hint stream.
       */
      linear_params->FirsttrailerOffset = gp_ftell_64(linear_params->Lin_File.file);
@@ -23,10 +23,10 @@ diff -ur orig/gnu-ghostscript-9.14.0/devices/vector/gdevpdf.c gnu-ghostscript-9.
      fwrite(LDict, strlen(LDict), 1, linear_params->Lin_File.file);
  
      /* Write document catalog (Part 4) */
-@@ -2102,8 +2105,11 @@
-      * in the missing values.
-      */
-     code = gp_fseek_64(linear_params->sfile, linear_params->FirsttrailerOffset, SEEK_SET);
+@@ -2321,8 +2324,11 @@
+     if (code != 0)
+         return_error(gs_error_ioerror);
+ 
 -    gs_sprintf(LDict, "\ntrailer\n<</Size %ld/Info %d 0 R/Root %d 0 R/ID[%s%s]/Prev %"PRId64">>\nstartxref\r\n0\n%%%%EOF\n",
 -        linear_params->LastResource + 3, pdev->ResourceUsage[linear_params->Info_id].NewObjectNumber, pdev->ResourceUsage[linear_params->Catalog_id].NewObjectNumber, fileID, fileID, mainxref);
 +    gs_sprintf(LDict, "\ntrailer\n<</Size %ld/Info %d 0 R/Root %d 0 R",
@@ -37,7 +37,7 @@ diff -ur orig/gnu-ghostscript-9.14.0/devices/vector/gdevpdf.c gnu-ghostscript-9.
      fwrite(LDict, strlen(LDict), 1, linear_params->sfile);
  
      code = gp_fseek_64(linear_params->sfile, pdev->ResourceUsage[HintStreamObj].LinearisedOffset, SEEK_SET);
-@@ -2674,10 +2680,12 @@
+@@ -3016,10 +3022,12 @@
              stream_puts(s, "trailer\n");
              pprintld3(s, "<< /Size %ld /Root %ld 0 R /Info %ld 0 R\n",
                    pdev->next_id, Catalog_id, Info_id);
@@ -54,4 +54,3 @@ diff -ur orig/gnu-ghostscript-9.14.0/devices/vector/gdevpdf.c gnu-ghostscript-9.
              if (pdev->OwnerPassword.size > 0) {
                  pprintld1(s, "/Encrypt %ld 0 R ", Encrypt_id);
              }
-Nur in gnu-ghostscript-9.14.0/devices/vector: gdevpdf.c.orig.
diff --git a/gnu/packages/patches/glib-respect-datadir.patch b/gnu/packages/patches/glib-respect-datadir.patch
deleted file mode 100644
index 309ce9fc0b..0000000000
--- a/gnu/packages/patches/glib-respect-datadir.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-On Guix, Python modules are in a different output from the executables,
-so searching "../share/glib-2.0" will not work.
-
-This patch restores behaviour prior to this commit:
-<https://git.gnome.org/browse/glib/commit/?id=fe2a9887a8ccb14f2386e01b14834e97a33bc2d7>
-
---- a/gio/gdbus-2.0/codegen/gdbus-codegen.in
-+++ b/gio/gdbus-2.0/codegen/gdbus-codegen.in
-@@ -25,9 +25,12 @@
- 
- srcdir = os.getenv('UNINSTALLED_GLIB_SRCDIR', None)
- filedir = os.path.dirname(__file__)
-+datadir = os.path.join('@datadir@', 'glib-2.0')
- 
- if srcdir is not None:
-     path = os.path.join(srcdir, 'gio', 'gdbus-2.0')
-+elif os.path.exists(os.path.join(datadir, 'codegen')):
-+    path = datadir
- elif os.path.basename(filedir) == 'bin':
-     # Make the prefix containing gdbus-codegen 'relocatable' at runtime by
-     # adding /some/prefix/bin/../share/glib-2.0 to the python path
diff --git a/gnu/packages/patches/glibc-2.27-git-fixes.patch b/gnu/packages/patches/glibc-2.27-git-fixes.patch
new file mode 100644
index 0000000000..4ed67c7c25
--- /dev/null
+++ b/gnu/packages/patches/glibc-2.27-git-fixes.patch
@@ -0,0 +1,702 @@
+These commits are cherry-picked from the "release/2.27/master" branch.
+
+https://sourceware.org/git/?p=glibc.git;a=shortlog;h=refs/heads/release/2.27/master
+
+Currently, we have the following (with NEWS and ChangeLog entries omitted).
+
+56170e064e2b21ce204f0817733e92f1730541ea
+516fa6080481a1433c173320b1c1432868e1e38a
+f36553bf6a4f69070f99badbdab5802b43e6e211
+7c6304182b9f422b782ace1cdd3efbde056aec36
+78a90c2f74a2012dd3eff302189e47ff6779a757
+1e52d8e65a58c49a48549053a1b89c06240e0c6c
+55ad82e45c313454de657931898e974a7a036cad
+
+From 56170e064e2b21ce204f0817733e92f1730541ea Mon Sep 17 00:00:00 2001
+From: Igor Gnatenko <ignatenko@redhat.com>
+Date: Wed, 7 Feb 2018 13:53:10 +0100
+Subject: [PATCH] Linux: use reserved name __key in pkey_get [BZ #22797]
+
+_key is not reserved name and we should avoid using that. It seems that
+it was simple typo when pkey_* was implemented.
+
+(cherry picked from commit 388ff7bd0d57d7061fdd39a2f26f65687e8058da)
+
+diff --git a/sysdeps/unix/sysv/linux/bits/mman-shared.h b/sysdeps/unix/sysv/linux/bits/mman-shared.h
+index 7715e680ca..d15ba95c9d 100644
+--- a/sysdeps/unix/sysv/linux/bits/mman-shared.h
++++ b/sysdeps/unix/sysv/linux/bits/mman-shared.h
+@@ -61,7 +61,7 @@ int pkey_set (int __key, unsigned int __access_rights) __THROW;
+ 
+ /* Return the access rights for the current thread for KEY, which must
+    have been allocated using pkey_alloc.  */
+-int pkey_get (int _key) __THROW;
++int pkey_get (int __key) __THROW;
+ 
+ /* Free an allocated protection key, which must have been allocated
+    using pkey_alloc.  */
+
+From 516fa6080481a1433c173320b1c1432868e1e38a Mon Sep 17 00:00:00 2001
+From: "Dmitry V. Levin" <ldv@altlinux.org>
+Date: Fri, 29 Dec 2017 23:19:32 +0000
+Subject: [PATCH] linux/aarch64: sync sys/ptrace.h with Linux 4.15 [BZ #22433]
+
+Remove compat-specific constants that were never exported by kernel
+headers under these names.  Before linux commit v3.7-rc1~16^2~1 they
+were exported with COMPAT_ prefix, and since that commit they are not
+exported at all.
+
+* sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h (__ptrace_request):
+Remove arm-specific PTRACE_GET_THREAD_AREA, PTRACE_GETHBPREGS,
+and PTRACE_SETHBPREGS.
+
+(cherry picked from commit 2fd4bbaa1446f1be700e10c526cf585a796c4991)
+
+diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
+index 4be45b95ff..444edbb702 100644
+--- a/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
++++ b/sysdeps/unix/sysv/linux/aarch64/sys/ptrace.h
+@@ -78,18 +78,10 @@ enum __ptrace_request
+   PTRACE_DETACH = 17,
+ #define PT_DETACH PTRACE_DETACH
+ 
+-  PTRACE_GET_THREAD_AREA = 22,
+-
+   /* Continue and stop at the next entry to or return from syscall.  */
+   PTRACE_SYSCALL = 24,
+ #define PT_SYSCALL PTRACE_SYSCALL
+ 
+-  /* Get all hardware breakpoint registers.  */
+-  PTRACE_GETHBPREGS = 29,
+-
+-  /* Set all hardware breakpoint registers.  */
+-  PTRACE_SETHBPREGS = 30,
+-
+   /* Set ptrace filter options.  */
+   PTRACE_SETOPTIONS = 0x4200,
+ #define PT_SETOPTIONS PTRACE_SETOPTIONS
+
+From f36553bf6a4f69070f99badbdab5802b43e6e211 Mon Sep 17 00:00:00 2001
+From: Mike FABIAN <mfabian@redhat.com>
+Date: Mon, 19 Feb 2018 21:59:30 +0100
+Subject: [PATCH] =?UTF-8?q?Add=20missing=20=E2=80=9Creorder-end=E2=80=9D?=
+ =?UTF-8?q?=20in=20LC=5FCOLLATE=20of=20et=5FEE=20[BZ=20#22517]?=
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+	[BZ #22517]
+	* localedata/locales/et_EE (LC_COLLATE): add missing “reorder-end”
+
+(cherry picked from commit 7ec5f9465e732e668d0dc94ac078ba68056d6d0a)
+
+diff --git a/localedata/locales/et_EE b/localedata/locales/et_EE
+index 9cb55b568f..bab7493c98 100644
+--- a/localedata/locales/et_EE
++++ b/localedata/locales/et_EE
+@@ -103,6 +103,8 @@ reorder-after <w>
+ <U00FC> <u-diaresis>;<BAS>;<MIN>;IGNORE % ü
+ <U00DC> <u-diaresis>;<BAS>;<CAP>;IGNORE % Ü
+ 
++reorder-end
++
+ END LC_COLLATE
+ 
+ LC_CTYPE
+
+From 7c6304182b9f422b782ace1cdd3efbde056aec36 Mon Sep 17 00:00:00 2001
+From: DJ Delorie <dj@redhat.com>
+Date: Thu, 1 Mar 2018 23:20:45 -0500
+Subject: [PATCH] [BZ #22342] Fix netgroup cache keys.
+
+Unlike other nscd caches, the netgroup cache contains two types of
+records - those for "iterate through a netgroup" (i.e. setnetgrent())
+and those for "is this user in this netgroup" (i.e. innetgr()),
+i.e. full and partial records.  The timeout code assumes these records
+have the same key for the group name, so that the collection of records
+that is "this netgroup" can be expired as a unit.
+
+However, the keys are not the same, as the in-netgroup key is generated
+by nscd rather than being passed to it from elsewhere, and is generated
+without the trailing NUL.  All other keys have the trailing NUL, and as
+noted in the linked BZ, debug statements confirm that two keys for the
+same netgroup are added to the cache with two different lengths.
+
+The result of this is that as records in the cache expire, the purge
+code only cleans out one of the two types of entries, resulting in
+stale, possibly incorrect, and possibly inconsistent cache data.
+
+The patch simply includes the existing NUL in the computation for the
+key length ('key' points to the char after the NUL, and 'group' to the
+first char of the group, so 'key-group' includes the first char to the
+NUL, inclusive).
+
+	[BZ #22342]
+	* nscd/netgroupcache.c (addinnetgrX): Include trailing NUL in
+	key value.
+
+Reviewed-by: Carlos O'Donell <carlos@redhat.com>
+(cherry picked from commit 1c81d55fc4b07b51adf68558ba74ce975153e580)
+
+diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
+index b832c9315f..2f187b208c 100644
+--- a/nscd/netgroupcache.c
++++ b/nscd/netgroupcache.c
+@@ -480,7 +480,7 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
+ {
+   const char *group = key;
+   key = (char *) rawmemchr (key, '\0') + 1;
+-  size_t group_len = key - group - 1;
++  size_t group_len = key - group;
+   const char *host = *key++ ? key : NULL;
+   if (host != NULL)
+     key = (char *) rawmemchr (key, '\0') + 1;
+
+From 78a90c2f74a2012dd3eff302189e47ff6779a757 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@linux-m68k.org>
+Date: Fri, 2 Mar 2018 23:07:14 +0100
+Subject: [PATCH] Fix multiple definitions of __nss_*_database (bug 22918)
+
+(cherry picked from commit eaf6753f8aac33a36deb98c1031d1bad7b593d2d)
+
+diff --git a/nscd/gai.c b/nscd/gai.c
+index d081747797..576fd0045b 100644
+--- a/nscd/gai.c
++++ b/nscd/gai.c
+@@ -45,3 +45,6 @@
+ #ifdef HAVE_LIBIDN
+ # include <libidn/idn-stub.c>
+ #endif
++
++/* Some variables normally defined in libc.  */
++service_user *__nss_hosts_database attribute_hidden;
+diff --git a/nss/nsswitch.c b/nss/nsswitch.c
+index d5e655974f..b0f0c11a3e 100644
+--- a/nss/nsswitch.c
++++ b/nss/nsswitch.c
+@@ -62,7 +62,7 @@ static service_library *nss_new_service (name_database *database,
+ 
+ /* Declare external database variables.  */
+ #define DEFINE_DATABASE(name)						      \
+-  extern service_user *__nss_##name##_database attribute_hidden;	      \
++  service_user *__nss_##name##_database attribute_hidden;		      \
+   weak_extern (__nss_##name##_database)
+ #include "databases.def"
+ #undef DEFINE_DATABASE
+diff --git a/nss/nsswitch.h b/nss/nsswitch.h
+index eccb535ef5..63573b9ebc 100644
+--- a/nss/nsswitch.h
++++ b/nss/nsswitch.h
+@@ -226,10 +226,10 @@ libc_hidden_proto (__nss_hostname_digits_dots)
+ #define MAX_NR_ADDRS    48
+ 
+ /* Prototypes for __nss_*_lookup2 functions.  */
+-#define DEFINE_DATABASE(arg)				    \
+-  service_user *__nss_##arg##_database attribute_hidden;    \
+-  int __nss_##arg##_lookup2 (service_user **, const char *, \
+-			     const char *, void **);	    \
++#define DEFINE_DATABASE(arg)						      \
++  extern service_user *__nss_##arg##_database attribute_hidden;		      \
++  int __nss_##arg##_lookup2 (service_user **, const char *,		      \
++			     const char *, void **);			      \
+   libc_hidden_proto (__nss_##arg##_lookup2)
+ #include "databases.def"
+ #undef DEFINE_DATABASE
+diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c
+index f509534ca9..8c64ac59ff 100644
+--- a/posix/tst-rfc3484-2.c
++++ b/posix/tst-rfc3484-2.c
+@@ -58,6 +58,7 @@ _res_hconf_init (void)
+ #undef	USE_NSCD
+ #include "../sysdeps/posix/getaddrinfo.c"
+ 
++service_user *__nss_hosts_database attribute_hidden;
+ 
+ /* This is the beginning of the real test code.  The above defines
+    (among other things) the function rfc3484_sort.  */
+diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c
+index ae44087a10..1c61aaf844 100644
+--- a/posix/tst-rfc3484-3.c
++++ b/posix/tst-rfc3484-3.c
+@@ -58,6 +58,7 @@ _res_hconf_init (void)
+ #undef	USE_NSCD
+ #include "../sysdeps/posix/getaddrinfo.c"
+ 
++service_user *__nss_hosts_database attribute_hidden;
+ 
+ /* This is the beginning of the real test code.  The above defines
+    (among other things) the function rfc3484_sort.  */
+diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c
+index 7f191abbbc..8f45848e44 100644
+--- a/posix/tst-rfc3484.c
++++ b/posix/tst-rfc3484.c
+@@ -58,6 +58,7 @@ _res_hconf_init (void)
+ #undef	USE_NSCD
+ #include "../sysdeps/posix/getaddrinfo.c"
+ 
++service_user *__nss_hosts_database attribute_hidden;
+ 
+ /* This is the beginning of the real test code.  The above defines
+    (among other things) the function rfc3484_sort.  */
+
+From 1e52d8e65a58c49a48549053a1b89c06240e0c6c Mon Sep 17 00:00:00 2001
+From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
+Date: Fri, 17 Nov 2017 16:04:29 -0200
+Subject: [PATCH] i386: Fix i386 sigaction sa_restorer initialization
+ (BZ#21269)
+
+This patch fixes the i386 sa_restorer field initialization for sigaction
+syscall for kernel with vDSO.  As described in bug report, i386 Linux
+(and compat on x86_64) interprets SA_RESTORER clear with nonzero
+sa_restorer as a request for stack switching if the SS segment is 'funny'.
+This means that anything that tries to mix glibc's signal handling with
+segmentation (for instance through modify_ldt syscall) is randomly broken
+depending on what values lands in sa_restorer.
+
+The testcase added  is based on Linux test tools/testing/selftests/x86/ldt_gdt.c,
+more specifically in do_multicpu_tests function.  The main changes are:
+
+  - C11 atomics instead of plain access.
+
+  - Remove x86_64 support which simplifies the syscall handling and fallbacks.
+
+  - Replicate only the test required to trigger the issue.
+
+Checked on i686-linux-gnu.
+
+	[BZ #21269]
+	* sysdeps/unix/sysv/linux/i386/Makefile (tests): Add tst-bz21269.
+	* sysdeps/unix/sysv/linux/i386/sigaction.c (SET_SA_RESTORER): Clear
+	sa_restorer for vDSO case.
+	* sysdeps/unix/sysv/linux/i386/tst-bz21269.c: New file.
+
+(cherry picked from commit 68448be208ee06e76665918b37b0a57e3e00c8b4)
+
+diff --git a/sysdeps/unix/sysv/linux/i386/Makefile b/sysdeps/unix/sysv/linux/i386/Makefile
+index 4080b8c966..da716e2c1b 100644
+--- a/sysdeps/unix/sysv/linux/i386/Makefile
++++ b/sysdeps/unix/sysv/linux/i386/Makefile
+@@ -3,6 +3,9 @@ default-abi := 32
+ 
+ ifeq ($(subdir),misc)
+ sysdep_routines += ioperm iopl vm86
++
++tests += tst-bz21269
++$(objpfx)tst-bz21269: $(shared-thread-library)
+ endif
+ 
+ ifeq ($(subdir),elf)
+diff --git a/sysdeps/unix/sysv/linux/i386/sigaction.c b/sysdeps/unix/sysv/linux/i386/sigaction.c
+index a5eb9e0d3e..177ff60ee6 100644
+--- a/sysdeps/unix/sysv/linux/i386/sigaction.c
++++ b/sysdeps/unix/sysv/linux/i386/sigaction.c
+@@ -42,7 +42,6 @@ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
+ #endif
+ extern void restore (void) asm ("__restore") attribute_hidden;
+ 
+-
+ /* If ACT is not NULL, change the action for SIG to *ACT.
+    If OACT is not NULL, put the old action for SIG in *OACT.  */
+ int
+@@ -65,6 +64,8 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
+ 	  kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
+ 			      ? &restore_rt : &restore);
+ 	}
++      else
++	kact.sa_restorer = NULL;
+     }
+ 
+   /* XXX The size argument hopefully will have to be changed to the
+diff --git a/sysdeps/unix/sysv/linux/i386/tst-bz21269.c b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c
+new file mode 100644
+index 0000000000..353e36507d
+--- /dev/null
++++ b/sysdeps/unix/sysv/linux/i386/tst-bz21269.c
+@@ -0,0 +1,233 @@
++/* Test for i386 sigaction sa_restorer handling (BZ#21269)
++   Copyright (C) 2017 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++/* This is based on Linux test tools/testing/selftests/x86/ldt_gdt.c,
++   more specifically in do_multicpu_tests function.  The main changes
++   are:
++
++   - C11 atomics instead of plain access.
++   - Remove x86_64 support which simplifies the syscall handling
++     and fallbacks.
++   - Replicate only the test required to trigger the issue for the
++     BZ#21269.  */
++
++#include <stdatomic.h>
++
++#include <asm/ldt.h>
++#include <linux/futex.h>
++
++#include <setjmp.h>
++#include <signal.h>
++#include <errno.h>
++#include <sys/syscall.h>
++#include <sys/mman.h>
++
++#include <support/xunistd.h>
++#include <support/check.h>
++#include <support/xthread.h>
++
++static int
++xset_thread_area (struct user_desc *u_info)
++{
++  long ret = syscall (SYS_set_thread_area, u_info);
++  TEST_VERIFY_EXIT (ret == 0);
++  return ret;
++}
++
++static void
++xmodify_ldt (int func, const void *ptr, unsigned long bytecount)
++{
++  TEST_VERIFY_EXIT (syscall (SYS_modify_ldt, 1, ptr, bytecount) == 0);
++}
++
++static int
++futex (int *uaddr, int futex_op, int val, void *timeout, int *uaddr2,
++	int val3)
++{
++  return syscall (SYS_futex, uaddr, futex_op, val, timeout, uaddr2, val3);
++}
++
++static void
++xsethandler (int sig, void (*handler)(int, siginfo_t *, void *), int flags)
++{
++  struct sigaction sa = { 0 };
++  sa.sa_sigaction = handler;
++  sa.sa_flags = SA_SIGINFO | flags;
++  TEST_VERIFY_EXIT (sigemptyset (&sa.sa_mask) == 0);
++  TEST_VERIFY_EXIT (sigaction (sig, &sa, 0) == 0);
++}
++
++static jmp_buf jmpbuf;
++
++static void
++sigsegv_handler (int sig, siginfo_t *info, void *ctx_void)
++{
++  siglongjmp (jmpbuf, 1);
++}
++
++/* Points to an array of 1024 ints, each holding its own index.  */
++static const unsigned int *counter_page;
++static struct user_desc *low_user_desc;
++static struct user_desc *low_user_desc_clear; /* Used to delete GDT entry.  */
++static int gdt_entry_num;
++
++static void
++setup_counter_page (void)
++{
++  long page_size = sysconf (_SC_PAGE_SIZE);
++  TEST_VERIFY_EXIT (page_size > 0);
++  unsigned int *page = xmmap (NULL, page_size, PROT_READ | PROT_WRITE,
++			      MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1);
++  for (int i = 0; i < (page_size / sizeof (unsigned int)); i++)
++    page[i] = i;
++  counter_page = page;
++}
++
++static void
++setup_low_user_desc (void)
++{
++  low_user_desc = xmmap (NULL, 2 * sizeof (struct user_desc),
++			 PROT_READ | PROT_WRITE,
++			 MAP_ANONYMOUS | MAP_PRIVATE | MAP_32BIT, -1);
++
++  low_user_desc->entry_number    = -1;
++  low_user_desc->base_addr       = (unsigned long) &counter_page[1];
++  low_user_desc->limit           = 0xffff;
++  low_user_desc->seg_32bit       = 1;
++  low_user_desc->contents        = 0;
++  low_user_desc->read_exec_only  = 0;
++  low_user_desc->limit_in_pages  = 1;
++  low_user_desc->seg_not_present = 0;
++  low_user_desc->useable         = 0;
++
++  xset_thread_area (low_user_desc);
++
++  low_user_desc_clear = low_user_desc + 1;
++  low_user_desc_clear->entry_number = gdt_entry_num;
++  low_user_desc_clear->read_exec_only = 1;
++  low_user_desc_clear->seg_not_present = 1;
++}
++
++/* Possible values of futex:
++   0: thread is idle.
++   1: thread armed.
++   2: thread should clear LDT entry 0.
++   3: thread should exit.  */
++static atomic_uint ftx;
++
++static void *
++threadproc (void *ctx)
++{
++  while (1)
++    {
++      futex ((int *) &ftx, FUTEX_WAIT, 1, NULL, NULL, 0);
++      while (atomic_load (&ftx) != 2)
++	{
++	  if (atomic_load (&ftx) >= 3)
++	    return NULL;
++	}
++
++      /* clear LDT entry 0.  */
++      const struct user_desc desc = { 0 };
++      xmodify_ldt (1, &desc, sizeof (desc));
++
++      /* If ftx == 2, set it to zero,  If ftx == 100, quit.  */
++      if (atomic_fetch_add (&ftx, -2) != 2)
++	return NULL;
++    }
++}
++
++
++/* As described in testcase, for historical reasons x86_32 Linux (and compat
++   on x86_64) interprets SA_RESTORER clear with nonzero sa_restorer as a
++   request for stack switching if the SS segment is 'funny' (this is default
++   scenario for vDSO system).  This means that anything that tries to mix
++   signal handling with segmentation should explicit clear the sa_restorer.
++
++   This testcase check if sigaction in fact does it by changing the local
++   descriptor table (LDT) through the modify_ldt syscall and triggering
++   a synchronous segfault on iret fault by trying to install an invalid
++   segment.  With a correct zeroed sa_restorer it should not trigger an
++   'real' SEGSEGV and allows the siglongjmp in signal handler.  */
++
++static int
++do_test (void)
++{
++  setup_counter_page ();
++  setup_low_user_desc ();
++
++  pthread_t thread;
++  unsigned short orig_ss;
++
++  xsethandler (SIGSEGV, sigsegv_handler, 0);
++  /* 32-bit kernels send SIGILL instead of SIGSEGV on IRET faults.  */
++  xsethandler (SIGILL, sigsegv_handler, 0);
++
++  thread = xpthread_create (0, threadproc, 0);
++
++  asm volatile ("mov %%ss, %0" : "=rm" (orig_ss));
++
++  for (int i = 0; i < 5; i++)
++    {
++      if (sigsetjmp (jmpbuf, 1) != 0)
++	continue;
++
++      /* Make sure the thread is ready after the last test. */
++      while (atomic_load (&ftx) != 0)
++	;
++
++      struct user_desc desc = {
++	.entry_number       = 0,
++	.base_addr          = 0,
++	.limit              = 0xffff,
++	.seg_32bit          = 1,
++	.contents           = 0,
++	.read_exec_only     = 0,
++	.limit_in_pages     = 1,
++	.seg_not_present    = 0,
++	.useable            = 0
++      };
++
++      xmodify_ldt (0x11, &desc, sizeof (desc));
++
++      /* Arm the thread.  */
++      ftx = 1;
++      futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0);
++
++      asm volatile ("mov %0, %%ss" : : "r" (0x7));
++
++      /* Fire up thread modify_ldt call.  */
++      atomic_store (&ftx, 2);
++
++      while (atomic_load (&ftx) != 0)
++	;
++
++      /* On success, modify_ldt will segfault us synchronously and we will
++	 escape via siglongjmp.  */
++      support_record_failure ();
++    }
++
++  atomic_store (&ftx, 100);
++  futex ((int*) &ftx, FUTEX_WAKE, 0, NULL, NULL, 0);
++
++  xpthread_join (thread);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
+
+From 55ad82e45c313454de657931898e974a7a036cad Mon Sep 17 00:00:00 2001
+From: Andrew Senkevich <andrew.n.senkevich@gmail.com>
+Date: Fri, 23 Mar 2018 16:19:45 +0100
+Subject: [PATCH] Fix i386 memmove issue (bug 22644).
+
+	[BZ #22644]
+	* sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S: Fixed
+	branch conditions.
+	* string/test-memmove.c (do_test2): New testcase.
+
+(cherry picked from commit cd66c0e584c6d692bc8347b5e72723d02b8a8ada)
+
+diff --git a/string/test-memmove.c b/string/test-memmove.c
+index edc7a4c3bf..64e3651ba4 100644
+--- a/string/test-memmove.c
++++ b/string/test-memmove.c
+@@ -24,6 +24,7 @@
+ # define TEST_NAME "memmove"
+ #endif
+ #include "test-string.h"
++#include <support/test-driver.h>
+ 
+ char *simple_memmove (char *, const char *, size_t);
+ 
+@@ -245,6 +246,60 @@ do_random_tests (void)
+     }
+ }
+ 
++static void
++do_test2 (void)
++{
++  size_t size = 0x20000000;
++  uint32_t * large_buf;
++
++  large_buf = mmap ((void*) 0x70000000, size, PROT_READ | PROT_WRITE,
++		    MAP_PRIVATE | MAP_ANON, -1, 0);
++
++  if (large_buf == MAP_FAILED)
++    error (EXIT_UNSUPPORTED, errno, "Large mmap failed");
++
++  if ((uintptr_t) large_buf > 0x80000000 - 128
++      || 0x80000000 - (uintptr_t) large_buf > 0x20000000)
++    {
++      error (0, 0, "Large mmap allocated improperly");
++      ret = EXIT_UNSUPPORTED;
++      munmap ((void *) large_buf, size);
++      return;
++    }
++
++  size_t bytes_move = 0x80000000 - (uintptr_t) large_buf;
++  size_t arr_size = bytes_move / sizeof (uint32_t);
++  size_t i;
++
++  FOR_EACH_IMPL (impl, 0)
++    {
++      for (i = 0; i < arr_size; i++)
++        large_buf[i] = (uint32_t) i;
++
++      uint32_t * dst = &large_buf[33];
++
++#ifdef TEST_BCOPY
++      CALL (impl, (char *) large_buf, (char *) dst, bytes_move);
++#else
++      CALL (impl, (char *) dst, (char *) large_buf, bytes_move);
++#endif
++
++      for (i = 0; i < arr_size; i++)
++	{
++	  if (dst[i] != (uint32_t) i)
++	    {
++	      error (0, 0,
++		     "Wrong result in function %s dst \"%p\" src \"%p\" offset \"%zd\"",
++		     impl->name, dst, large_buf, i);
++	      ret = 1;
++	      break;
++	    }
++	}
++    }
++
++  munmap ((void *) large_buf, size);
++}
++
+ int
+ test_main (void)
+ {
+@@ -284,6 +339,9 @@ test_main (void)
+     }
+ 
+   do_random_tests ();
++
++  do_test2 ();
++
+   return ret;
+ }
+ 
+diff --git a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
+index 9c3bbe7e17..9aa17de99c 100644
+--- a/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
++++ b/sysdeps/i386/i686/multiarch/memcpy-sse2-unaligned.S
+@@ -72,7 +72,7 @@ ENTRY (MEMCPY)
+ 	cmp	%edx, %eax
+ 
+ # ifdef USE_AS_MEMMOVE
+-	jg	L(check_forward)
++	ja	L(check_forward)
+ 
+ L(mm_len_0_or_more_backward):
+ /* Now do checks for lengths. We do [0..16], [16..32], [32..64], [64..128]
+@@ -81,7 +81,7 @@ L(mm_len_0_or_more_backward):
+ 	jbe	L(mm_len_0_16_bytes_backward)
+ 
+ 	cmpl	$32, %ecx
+-	jg	L(mm_len_32_or_more_backward)
++	ja	L(mm_len_32_or_more_backward)
+ 
+ /* Copy [0..32] and return.  */
+ 	movdqu	(%eax), %xmm0
+@@ -92,7 +92,7 @@ L(mm_len_0_or_more_backward):
+ 
+ L(mm_len_32_or_more_backward):
+ 	cmpl	$64, %ecx
+-	jg	L(mm_len_64_or_more_backward)
++	ja	L(mm_len_64_or_more_backward)
+ 
+ /* Copy [0..64] and return.  */
+ 	movdqu	(%eax), %xmm0
+@@ -107,7 +107,7 @@ L(mm_len_32_or_more_backward):
+ 
+ L(mm_len_64_or_more_backward):
+ 	cmpl	$128, %ecx
+-	jg	L(mm_len_128_or_more_backward)
++	ja	L(mm_len_128_or_more_backward)
+ 
+ /* Copy [0..128] and return.  */
+ 	movdqu	(%eax), %xmm0
+@@ -132,7 +132,7 @@ L(mm_len_128_or_more_backward):
+ 	add	%ecx, %eax
+ 	cmp	%edx, %eax
+ 	movl	SRC(%esp), %eax
+-	jle	L(forward)
++	jbe	L(forward)
+ 	PUSH (%esi)
+ 	PUSH (%edi)
+ 	PUSH (%ebx)
+@@ -269,7 +269,7 @@ L(check_forward):
+ 	add	%edx, %ecx
+ 	cmp	%eax, %ecx
+ 	movl	LEN(%esp), %ecx
+-	jle	L(forward)
++	jbe	L(forward)
+ 
+ /* Now do checks for lengths. We do [0..16], [0..32], [0..64], [0..128]
+ 	separately.  */
diff --git a/gnu/packages/patches/glibc-bootstrap-system.patch b/gnu/packages/patches/glibc-bootstrap-system.patch
index 2f8e7da7e1..addeed6dbd 100644
--- a/gnu/packages/patches/glibc-bootstrap-system.patch
+++ b/gnu/packages/patches/glibc-bootstrap-system.patch
@@ -15,16 +15,16 @@ instead uses the hard-coded absolute file name of `bash'.
      }
    else if (pid < (pid_t) 0)
 
---- b/libio/iopopen.c	2012-06-30 21:12:34.000000000 +0200
-+++ b/libio/iopopen.c	2012-12-19 12:52:29.000000000 +0100
-@@ -226,7 +226,7 @@ _IO_new_proc_open (fp, command, mode)
- 	    _IO_close (fd);
+--- a/libio/iopopen.c
++++ b/libio/iopopen.c
+@@ -145,7 +145,7 @@ _IO_new_proc_open (fp, command, mode)
+ 	    __close_nocancel (fd);
  	}
  
--      _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0);
+-      execl ("/bin/sh", "sh", "-c", command, (char *) 0);
 +      execlp ("sh", "sh", "-c", command, (char *) 0);
-       _IO__exit (127);
+       _exit (127);
      }
-   _IO_close (child_end);
+   __close_nocancel (child_end);
 
 
diff --git a/gnu/packages/patches/glibc-hidden-visibility-ldconfig.patch b/gnu/packages/patches/glibc-hidden-visibility-ldconfig.patch
new file mode 100644
index 0000000000..c796946d7e
--- /dev/null
+++ b/gnu/packages/patches/glibc-hidden-visibility-ldconfig.patch
@@ -0,0 +1,16 @@
+Fix a regression in glibc 2.27 when built without ldconfig.  See
+<https://sourceware.org/bugzilla/show_bug.cgi?id=22977> for details.
+
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+index 6137304b0b..7d630f36d8 100644
+--- a/include/libc-symbols.h
++++ b/include/libc-symbols.h
+@@ -508,7 +508,7 @@ for linking")
+ # ifndef __ASSEMBLER__
+ #  if !defined SHARED && IS_IN (libc) && !defined LIBC_NONSHARED \
+       && (!defined PIC || !defined NO_HIDDEN_EXTERN_FUNC_IN_PIE) \
+-      && !defined NO_HIDDEN
++      && !defined NO_HIDDEN && defined USE_LDCONFIG
+ #   define __hidden_proto_hiddenattr(attrs...) \
+   __attribute__ ((visibility ("hidden"), ##attrs))
+ #   define hidden_proto(name, attrs...) \
diff --git a/gnu/packages/patches/glibc-reinstate-prlimit64-fallback.patch b/gnu/packages/patches/glibc-reinstate-prlimit64-fallback.patch
new file mode 100644
index 0000000000..ccc153c12a
--- /dev/null
+++ b/gnu/packages/patches/glibc-reinstate-prlimit64-fallback.patch
@@ -0,0 +1,127 @@
+This patch reinstates fallback code when the 'prlimit64' system call is
+missing by reverting the relevant part of this upstream commit:
+
+  commit 695d7d138eda449678a1650a8b8b58181033353f
+  Author: Joseph Myers <joseph@codesourcery.com>
+  Date:   Tue May 9 14:05:09 2017 +0000
+
+      Assume prlimit64 is available.
+
+The fallback code is useful on systems that lack 'prlimit64', such as the
+2.6.32-on-steroid kernel found on RHEL 6:
+
+  <https://lists.gnu.org/archive/html/guix-devel/2018-03/msg00349.html>
+
+diff --git a/sysdeps/unix/sysv/linux/getrlimit64.c b/sysdeps/unix/sysv/linux/getrlimit64.c
+index 37c173286f..56af3c0646 100644
+--- b/sysdeps/unix/sysv/linux/getrlimit64.c
++++ a/sysdeps/unix/sysv/linux/getrlimit64.c
+@@ -35,7 +35,40 @@
+ int
+ __getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits)
+ {
+-  return INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, rlimits);
++#ifdef __NR_prlimit64
++  int res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, NULL, rlimits);
++  if (res == 0 || errno != ENOSYS)
++    return res;
++#endif
++
++/* The fallback code only makes sense if the platform supports either
++   __NR_ugetrlimit and/or __NR_getrlimit.  */
++#if defined (__NR_ugetrlimit) || defined (__NR_getrlimit)
++# ifndef __NR_ugetrlimit
++#  define __NR_ugetrlimit __NR_getrlimit
++# endif
++# if __RLIM_T_MATCHES_RLIM64_T
++#  define rlimits32 (*rlimits)
++# else
++  struct rlimit rlimits32;
++# endif
++
++  if (INLINE_SYSCALL_CALL (ugetrlimit, resource, &rlimits32) < 0)
++    return -1;
++
++# if !__RLIM_T_MATCHES_RLIM64_T
++  if (rlimits32.rlim_cur == RLIM_INFINITY)
++    rlimits->rlim_cur = RLIM64_INFINITY;
++  else
++    rlimits->rlim_cur = rlimits32.rlim_cur;
++  if (rlimits32.rlim_max == RLIM_INFINITY)
++    rlimits->rlim_max = RLIM64_INFINITY;
++  else
++    rlimits->rlim_max = rlimits32.rlim_max;
++# endif /* !__RLIM_T_MATCHES_RLIM64_T */
++#endif /* defined (__NR_ugetrlimit) || defined (__NR_getrlimit)  */
++
++  return 0;
+ }
+ libc_hidden_def (__getrlimit64)
+ 
+diff --git a/sysdeps/unix/sysv/linux/setrlimit.c b/sysdeps/unix/sysv/linux/setrlimit.c
+index 01812ac355..8773c78236 100644
+--- b/sysdeps/unix/sysv/linux/setrlimit.c
++++ a/sysdeps/unix/sysv/linux/setrlimit.c
+@@ -34,6 +34,7 @@
+ int
+ __setrlimit (enum __rlimit_resource resource, const struct rlimit *rlim)
+ {
++# ifdef __NR_prlimit64
+   struct rlimit64 rlim64;
+ 
+   if (rlim->rlim_cur == RLIM_INFINITY)
+@@ -45,7 +46,11 @@
+   else
+     rlim64.rlim_max = rlim->rlim_max;
+ 
+-  return INLINE_SYSCALL_CALL (prlimit64, 0, resource, &rlim64, NULL);
++  int res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, &rlim64, NULL);
++  if (res == 0 || errno != ENOSYS)
++    return res;
++# endif
++  return INLINE_SYSCALL_CALL (setrlimit, resource, rlim);
+ }
+ 
+ # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+diff --git a/sysdeps/unix/sysv/linux/setrlimit64.c b/sysdeps/unix/sysv/linux/setrlimit64.c
+index 2dd129d99e..db1960fc18 100644
+--- b/sysdeps/unix/sysv/linux/setrlimit64.c
++++ a/sysdeps/unix/sysv/linux/setrlimit64.c
+@@ -36,7 +36,36 @@
+ int
+ __setrlimit64 (enum __rlimit_resource resource, const struct rlimit64 *rlimits)
+ {
+-  return INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL);
++  int res;
++
++#ifdef __NR_prlimit64
++  res = INLINE_SYSCALL_CALL (prlimit64, 0, resource, rlimits, NULL);
++  if (res == 0 || errno != ENOSYS)
++    return res;
++#endif
++
++/* The fallback code only makes sense if the platform supports
++   __NR_setrlimit.  */
++#ifdef __NR_setrlimit
++# if !__RLIM_T_MATCHES_RLIM64_T
++  struct rlimit rlimits32;
++
++  if (rlimits->rlim_cur >= RLIM_INFINITY)
++    rlimits32.rlim_cur = RLIM_INFINITY;
++  else
++    rlimits32.rlim_cur = rlimits->rlim_cur;
++  if (rlimits->rlim_max >= RLIM_INFINITY)
++    rlimits32.rlim_max = RLIM_INFINITY;
++  else
++    rlimits32.rlim_max = rlimits->rlim_max;
++# else
++#  define rlimits32 (*rlimits)
++# endif
++
++  res = INLINE_SYSCALL_CALL (setrlimit, resource, &rlimits32);
++#endif
++
++  return res;
+ }
+ weak_alias (__setrlimit64, setrlimit64)
+ 
diff --git a/gnu/packages/patches/graphite2-ffloat-store.patch b/gnu/packages/patches/graphite2-ffloat-store.patch
deleted file mode 100644
index f6ee56973e..0000000000
--- a/gnu/packages/patches/graphite2-ffloat-store.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Fix test failures of awamicmp1 and awamicmp2.
-
-Debian bug report:
-
-https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855814
-
-Patch adapted from upstream source repository:
-
-https://github.com/silnrsi/graphite/commit/f7bbdd87d510d587c872e314d6458160c0069c65
-
-From f7bbdd87d510d587c872e314d6458160c0069c65 Mon Sep 17 00:00:00 2001
-From: Martin Hosken <martin_hosken@sil.org>
-Date: Tue, 14 Feb 2017 17:00:03 +0000
-Subject: [PATCH] try -ffloat-store for fp stability. Remove nested const to
- work around VS bug
-
----
- src/CMakeLists.txt    | 2 +-
- src/inc/locale2lcid.h | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index 4f1e7e5..5b61b5c 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -108,7 +108,7 @@ set_target_properties(graphite2 PROPERTIES  PUBLIC_HEADER "${GRAPHITE_HEADERS}"
- 
- if  (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
-     set_target_properties(graphite2 PROPERTIES 
--        COMPILE_FLAGS   "-Wall -Wextra -Wno-unknown-pragmas -Wendif-labels -Wshadow -Wctor-dtor-privacy -Wnon-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector"
-+        COMPILE_FLAGS   "-Wall -Wextra -Wno-unknown-pragmas -Wendif-labels -Wshadow -Wctor-dtor-privacy -Wnon-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector -ffloat-store"
-         LINK_FLAGS      "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}" 
-         LINKER_LANGUAGE C)
-     if (CMAKE_COMPILER_IS_GNUCXX)
diff --git a/gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch b/gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch
new file mode 100644
index 0000000000..e6b578bdb7
--- /dev/null
+++ b/gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch
@@ -0,0 +1,53 @@
+From 1da99396dc65993ba34ac0370ca5d6acda6a3322 Mon Sep 17 00:00:00 2001
+From: Mark H Weaver <mhw@netris.org>
+Date: Sun, 18 Mar 2018 07:02:37 -0400
+Subject: [PATCH] Add support for gdbm-1.14.
+
+As of gdbm-1.14, 'gdbm_errno' no longer exists as a binary interface.
+It has been replaced by 'gdbm_errno_location', a function that returns
+int*.  We now use this new interface if it's available.
+---
+ gdbm.scm | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/gdbm.scm b/gdbm.scm
+index b92992f..4d38cc3 100644
+--- a/gdbm.scm
++++ b/gdbm.scm
+@@ -17,6 +17,9 @@
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+ 
++;; Modified by Mark H Weaver <mhw@netris.org> in March 2018 to support
++;; gdbm-1.14 with its new 'gdbm_errno_location' interface.
++
+ (define-module (gdbm)
+   #:use-module (system foreign)
+   #:use-module (rnrs bytevectors)
+@@ -151,10 +154,21 @@
+ 
+ ;;; errors
+ 
+-(define %errno (dynamic-pointer "gdbm_errno" libgdbm))
++(define %list-int
++  (list int))
++
++(define (dereference-int ptr)
++  (apply (lambda (errno) errno)
++         (parse-c-struct ptr %list-int)))
++
++(define %errno-location
++  (or (false-if-exception
++       (let ((func (dynamic-func "gdbm_errno_location" libgdbm)))
++         (pointer->procedure '* func '())))
++      (const (dynamic-pointer "gdbm_errno" libgdbm))))
+ 
+ (define (gdbm-errno)
+-  (pointer-address (dereference-pointer %errno)))
++  (dereference-int (%errno-location)))
+ 
+ (define (gdbm-error)
+   (error (pointer->string (%gdbm-strerror (gdbm-errno)))))
+-- 
+2.16.2
+
diff --git a/gnu/packages/patches/lcms-CVE-2016-10165.patch b/gnu/packages/patches/lcms-CVE-2016-10165.patch
deleted file mode 100644
index fa4d75c9ee..0000000000
--- a/gnu/packages/patches/lcms-CVE-2016-10165.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Fix CVE-2016-10165, an out-of-bounds heap read in Type_MLU_Read():
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10165
-http://seclists.org/oss-sec/2016/q3/288
-https://bugzilla.redhat.com/show_bug.cgi?id=1367357
-https://security-tracker.debian.org/tracker/CVE-2016-10165
-
-Patch copied from upstream source repository:
-
-https://github.com/mm2/Little-CMS/commit/5ca71a7bc18b6897ab21d815d15e218e204581e2
-
-From 5ca71a7bc18b6897ab21d815d15e218e204581e2 Mon Sep 17 00:00:00 2001
-From: Marti <marti.maria@tktbrainpower.com>
-Date: Mon, 15 Aug 2016 23:31:39 +0200
-Subject: [PATCH] Added an extra check to MLU bounds
-
-Thanks to Ibrahim el-sayed for spotting the bug
----
- src/cmstypes.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/cmstypes.c b/src/cmstypes.c
-index cb61860..c7328b9 100644
---- a/src/cmstypes.c
-+++ b/src/cmstypes.c
-@@ -1460,6 +1460,7 @@ void *Type_MLU_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsU
- 
-         // Check for overflow
-         if (Offset < (SizeOfHeader + 8)) goto Error;
-+        if ((Offset + Len) > SizeOfTag + 8) goto Error;
- 
-         // True begin of the string
-         BeginOfThisString = Offset - SizeOfHeader - 8;
--- 
-2.11.0
-
diff --git a/gnu/packages/patches/libgpg-error-aarch64-logging-fix.patch b/gnu/packages/patches/libgpg-error-aarch64-logging-fix.patch
new file mode 100644
index 0000000000..d848d639b2
--- /dev/null
+++ b/gnu/packages/patches/libgpg-error-aarch64-logging-fix.patch
@@ -0,0 +1,58 @@
+https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgpg-error.git;a=patch;h=791177de023574223eddf7288eb7c5a0721ac623
+
+From 791177de023574223eddf7288eb7c5a0721ac623 Mon Sep 17 00:00:00 2001
+From: Werner Koch <wk@gnupg.org>
+Date: Sun, 18 Mar 2018 17:39:43 +0100
+Subject: [PATCH] core: Fix regression on arm64 due to invalid use of va_list.
+
+* src/logging.c (_gpgrt_log_printhex): Provide a dummy arg instead of
+NULL.
+--
+
+Fix
+Suggested-by: Jakub Wilk <jwilk@jwilk.net>
+
+Signed-off-by: Werner Koch <wk@gnupg.org>
+---
+ src/logging.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/src/logging.c b/src/logging.c
+index 1a4f620..d01f974 100644
+--- a/src/logging.c
++++ b/src/logging.c
+@@ -1090,9 +1090,10 @@ _gpgrt_log_flush (void)
+ 
+ 
+ /* Print a hexdump of (BUFFER,LENGTH).  With FMT passed as NULL print
+- * just the raw dump, with FMT being an empty string, print a trailing
+- * linefeed, otherwise print an entire debug line with the expanded
+- * FMT followed by a possible wrapped hexdump and a final LF.  */
++ * just the raw dump (in this case ARG_PTR is not used), with FMT
++ * being an empty string, print a trailing linefeed, otherwise print
++ * an entire debug line with the expanded FMT followed by a possible
++ * wrapped hexdump and a final LF.  */
+ void
+ _gpgrt_logv_printhex (const void *buffer, size_t length,
+                       const char *fmt, va_list arg_ptr)
+@@ -1150,7 +1151,16 @@ _gpgrt_log_printhex (const void *buffer, size_t length,
+       va_end (arg_ptr);
+     }
+   else
+-    _gpgrt_logv_printhex (buffer, length, NULL, NULL);
++    {
++      /* va_list is not necessary a pointer and thus we can't use NULL
++       * because that would conflict with platforms using a straight
++       * struct for it (e.g. arm64).  We use a dummy variable instead;
++       * the static is a simple way zero it out so to not get
++       * complains about uninitialized use.  */
++      static va_list dummy_argptr;
++
++      _gpgrt_logv_printhex (buffer, length, NULL, dummy_argptr);
++    }
+ }
+ 
+ 
+-- 
+2.8.0.rc3
+
diff --git a/gnu/packages/patches/libtasn1-CVE-2017-10790.patch b/gnu/packages/patches/libtasn1-CVE-2017-10790.patch
deleted file mode 100644
index 6cec0c8030..0000000000
--- a/gnu/packages/patches/libtasn1-CVE-2017-10790.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-Fix CVE-2017-10790:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-10790
-
-Patch copied from upstream source repository:
-
-https://git.savannah.nongnu.org/cgit/libtasn1.git/commit/?id=d8d805e1f2e6799bb2dff4871a8598dc83088a39
-
-From d8d805e1f2e6799bb2dff4871a8598dc83088a39 Mon Sep 17 00:00:00 2001
-From: Nikos Mavrogiannopoulos <nmav@redhat.com>
-Date: Thu, 22 Jun 2017 16:31:37 +0200
-Subject: [PATCH] _asn1_check_identifier: safer access to values read
-
-Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
----
- lib/parser_aux.c | 17 ++++++++++++-----
- 1 file changed, 12 insertions(+), 5 deletions(-)
-
-diff --git a/lib/parser_aux.c b/lib/parser_aux.c
-index 976ab38..786ea64 100644
---- a/lib/parser_aux.c
-+++ b/lib/parser_aux.c
-@@ -955,7 +955,7 @@ _asn1_check_identifier (asn1_node node)
- 	  if (p2 == NULL)
- 	    {
- 	      if (p->value)
--		_asn1_strcpy (_asn1_identifierMissing, p->value);
-+		_asn1_str_cpy (_asn1_identifierMissing, sizeof(_asn1_identifierMissing), (char*)p->value);
- 	      else
- 		_asn1_strcpy (_asn1_identifierMissing, "(null)");
- 	      return ASN1_IDENTIFIER_NOT_FOUND;
-@@ -968,9 +968,15 @@ _asn1_check_identifier (asn1_node node)
- 	  if (p2 && (type_field (p2->type) == ASN1_ETYPE_DEFAULT))
- 	    {
- 	      _asn1_str_cpy (name2, sizeof (name2), node->name);
--	      _asn1_str_cat (name2, sizeof (name2), ".");
--	      _asn1_str_cat (name2, sizeof (name2), (char *) p2->value);
--	      _asn1_strcpy (_asn1_identifierMissing, p2->value);
-+	      if (p2->value)
-+	        {
-+	          _asn1_str_cat (name2, sizeof (name2), ".");
-+	          _asn1_str_cat (name2, sizeof (name2), (char *) p2->value);
-+	          _asn1_str_cpy (_asn1_identifierMissing, sizeof(_asn1_identifierMissing), (char*)p2->value);
-+	        }
-+	      else
-+		_asn1_strcpy (_asn1_identifierMissing, "(null)");
-+
- 	      p2 = asn1_find_node (node, name2);
- 	      if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID) ||
- 		  !(p2->type & CONST_ASSIGN))
-@@ -990,7 +996,8 @@ _asn1_check_identifier (asn1_node node)
- 		  _asn1_str_cpy (name2, sizeof (name2), node->name);
- 		  _asn1_str_cat (name2, sizeof (name2), ".");
- 		  _asn1_str_cat (name2, sizeof (name2), (char *) p2->value);
--		  _asn1_strcpy (_asn1_identifierMissing, p2->value);
-+		  _asn1_str_cpy (_asn1_identifierMissing, sizeof(_asn1_identifierMissing), (char*)p2->value);
-+
- 		  p2 = asn1_find_node (node, name2);
- 		  if (!p2 || (type_field (p2->type) != ASN1_ETYPE_OBJECT_ID)
- 		      || !(p2->type & CONST_ASSIGN))
--- 
-2.13.3
-
diff --git a/gnu/packages/patches/libtasn1-CVE-2018-6003.patch b/gnu/packages/patches/libtasn1-CVE-2018-6003.patch
deleted file mode 100644
index 3e6140518d..0000000000
--- a/gnu/packages/patches/libtasn1-CVE-2018-6003.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Fix CVE-2018-6003:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6003
-https://lists.gnu.org/archive/html/help-libtasn1/2018-01/msg00000.html
-
-Patch copied from upstream source repository:
-
-https://gitlab.com/gnutls/libtasn1/commit/c593ae84cfcde8fea45787e53950e0ac71e9ca97
-
-From c593ae84cfcde8fea45787e53950e0ac71e9ca97 Mon Sep 17 00:00:00 2001
-From: Nikos Mavrogiannopoulos <nmav@redhat.com>
-Date: Thu, 4 Jan 2018 10:52:05 +0100
-Subject: [PATCH] _asn1_decode_simple_ber: restrict the levels of recursion to 3
-
-On indefinite string decoding, setting a maximum level of recursions
-protects the BER decoder from a stack exhaustion due to large amounts
-of recursion.
-
-Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
----
- lib/decoding.c | 21 +++++++++++++++++++--
- 1 file changed, 19 insertions(+), 2 deletions(-)
-
-diff --git a/lib/decoding.c b/lib/decoding.c
-index 2240b09..0ee35d3 100644
---- a/lib/decoding.c
-+++ b/lib/decoding.c
-@@ -45,6 +45,13 @@
- 
- #define DECODE_FLAG_HAVE_TAG 1
- #define DECODE_FLAG_INDEFINITE (1<<1)
-+/* On indefinite string decoding, allow this maximum levels
-+ * of recursion. Allowing infinite recursion, makes the BER
-+ * decoder susceptible to stack exhaustion due to that recursion.
-+ */
-+#define DECODE_FLAG_LEVEL1 (1<<2)
-+#define DECODE_FLAG_LEVEL2 (1<<3)
-+#define DECODE_FLAG_LEVEL3 (1<<4)
- 
- #define DECR_LEN(l, s) do { \
- 	  l -= s; \
-@@ -2216,7 +2223,8 @@ _asn1_decode_simple_ber (unsigned int etype, const unsigned char *der,
-     }
- 
-   /* indefinite constructed */
--  if (((dflags & DECODE_FLAG_INDEFINITE) || class == ASN1_CLASS_STRUCTURED) && ETYPE_IS_STRING(etype))
-+  if ((((dflags & DECODE_FLAG_INDEFINITE) || class == ASN1_CLASS_STRUCTURED) && ETYPE_IS_STRING(etype)) &&
-+      !(dflags & DECODE_FLAG_LEVEL3))
-     {
-       len_len = 1;
- 
-@@ -2236,8 +2244,17 @@ _asn1_decode_simple_ber (unsigned int etype, const unsigned char *der,
-       do
-         {
-           unsigned tmp_len;
-+          unsigned flags = DECODE_FLAG_HAVE_TAG;
-+
-+          if (dflags & DECODE_FLAG_LEVEL1)
-+                flags |= DECODE_FLAG_LEVEL2;
-+          else if (dflags & DECODE_FLAG_LEVEL2)
-+		flags |= DECODE_FLAG_LEVEL3;
-+	  else
-+		flags |= DECODE_FLAG_LEVEL1;
- 
--          result = asn1_decode_simple_ber(etype, p, der_len, &out, &out_len, &tmp_len);
-+          result = _asn1_decode_simple_ber(etype, p, der_len, &out, &out_len, &tmp_len,
-+                                           flags);
-           if (result != ASN1_SUCCESS)
-             {
-               warn();
---
-libgit2 0.26.0
-
diff --git a/gnu/packages/patches/libvorbis-CVE-2017-14632.patch b/gnu/packages/patches/libvorbis-CVE-2017-14632.patch
deleted file mode 100644
index 99debf2104..0000000000
--- a/gnu/packages/patches/libvorbis-CVE-2017-14632.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-Fix CVE-2017-14632:
-
-https://gitlab.xiph.org/xiph/vorbis/issues/2328
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14632
-
-Patch copied from upstream source repository:
-
-https://gitlab.xiph.org/xiph/vorbis/commit/c1c2831fc7306d5fbd7bc800324efd12b28d327f
-
-From c1c2831fc7306d5fbd7bc800324efd12b28d327f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
-Date: Wed, 15 Nov 2017 18:22:59 +0100
-Subject: [PATCH] CVE-2017-14632: vorbis_analysis_header_out: Don't clear opb
- if not initialized
-
-If the number of channels is not within the allowed range
-we call oggback_writeclear altough it's not initialized yet.
-
-This fixes
-
-    =23371== Invalid free() / delete / delete[] / realloc()
-    ==23371==    at 0x4C2CE1B: free (vg_replace_malloc.c:530)
-    ==23371==    by 0x829CA31: oggpack_writeclear (in /usr/lib/x86_64-linux-gnu/libogg.so.0.8.2)
-    ==23371==    by 0x84B96EE: vorbis_analysis_headerout (info.c:652)
-    ==23371==    by 0x9FBCBCC: ??? (in /usr/lib/x86_64-linux-gnu/sox/libsox_fmt_vorbis.so)
-    ==23371==    by 0x4E524F1: ??? (in /usr/lib/x86_64-linux-gnu/libsox.so.2.0.1)
-    ==23371==    by 0x4E52CCA: sox_open_write (in /usr/lib/x86_64-linux-gnu/libsox.so.2.0.1)
-    ==23371==    by 0x10D82A: open_output_file (sox.c:1556)
-    ==23371==    by 0x10D82A: process (sox.c:1753)
-    ==23371==    by 0x10D82A: main (sox.c:3012)
-    ==23371==  Address 0x68768c8 is 488 bytes inside a block of size 880 alloc'd
-    ==23371==    at 0x4C2BB1F: malloc (vg_replace_malloc.c:298)
-    ==23371==    by 0x4C2DE9F: realloc (vg_replace_malloc.c:785)
-    ==23371==    by 0x4E545C2: lsx_realloc (in /usr/lib/x86_64-linux-gnu/libsox.so.2.0.1)
-    ==23371==    by 0x9FBC9A0: ??? (in /usr/lib/x86_64-linux-gnu/sox/libsox_fmt_vorbis.so)
-    ==23371==    by 0x4E524F1: ??? (in /usr/lib/x86_64-linux-gnu/libsox.so.2.0.1)
-    ==23371==    by 0x4E52CCA: sox_open_write (in /usr/lib/x86_64-linux-gnu/libsox.so.2.0.1)
-    ==23371==    by 0x10D82A: open_output_file (sox.c:1556)
-    ==23371==    by 0x10D82A: process (sox.c:1753)
-    ==23371==    by 0x10D82A: main (sox.c:3012)
-
-as seen when using the testcase from CVE-2017-11333 with
-008d23b782be09c8d75ba8190b1794abd66c7121 applied. However the error was
-there before.
----
- lib/info.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/lib/info.c b/lib/info.c
-index 7bc4ea4..8d0b2ed 100644
---- a/lib/info.c
-+++ b/lib/info.c
-@@ -589,6 +589,7 @@ int vorbis_analysis_headerout(vorbis_dsp_state *v,
-   private_state *b=v->backend_state;
- 
-   if(!b||vi->channels<=0||vi->channels>256){
-+    b = NULL;
-     ret=OV_EFAULT;
-     goto err_out;
-   }
--- 
-2.15.1
-
diff --git a/gnu/packages/patches/libvorbis-CVE-2017-14633.patch b/gnu/packages/patches/libvorbis-CVE-2017-14633.patch
deleted file mode 100644
index ec6bf5265c..0000000000
--- a/gnu/packages/patches/libvorbis-CVE-2017-14633.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-Fix CVE-2017-14633:
-
-https://gitlab.xiph.org/xiph/vorbis/issues/2329
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-14633
-
-Patch copied from upstream source repository:
-
-https://gitlab.xiph.org/xiph/vorbis/commit/a79ec216cd119069c68b8f3542c6a425a74ab993
-
-From a79ec216cd119069c68b8f3542c6a425a74ab993 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
-Date: Tue, 31 Oct 2017 18:32:46 +0100
-Subject: [PATCH] CVE-2017-14633: Don't allow for more than 256 channels
-
-Otherwise
-
- for(i=0;i<vi->channels;i++){
-      /* the encoder setup assumes that all the modes used by any
-         specific bitrate tweaking use the same floor */
-      int submap=info->chmuxlist[i];
-
-overreads later in mapping0_forward since chmuxlist is a fixed array of
-256 elements max.
----
- lib/info.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lib/info.c b/lib/info.c
-index fe759ed..7bc4ea4 100644
---- a/lib/info.c
-+++ b/lib/info.c
-@@ -588,7 +588,7 @@ int vorbis_analysis_headerout(vorbis_dsp_state *v,
-   oggpack_buffer opb;
-   private_state *b=v->backend_state;
- 
--  if(!b||vi->channels<=0){
-+  if(!b||vi->channels<=0||vi->channels>256){
-     ret=OV_EFAULT;
-     goto err_out;
-   }
--- 
-2.15.1
-
diff --git a/gnu/packages/patches/libxcb-python-3.5-compat.patch b/gnu/packages/patches/libxcb-python-3.5-compat.patch
deleted file mode 100644
index f652498aad..0000000000
--- a/gnu/packages/patches/libxcb-python-3.5-compat.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-Fix compatibility issue with Python 3.5.
-
-Patch copied from upstream source repository:
-
-https://cgit.freedesktop.org/xcb/libxcb/commit/?id=8740a288ca468433141341347aa115b9544891d3
-
-From 8740a288ca468433141341347aa115b9544891d3 Mon Sep 17 00:00:00 2001
-From: Thomas Klausner <wiz@NetBSD.org>
-Date: Thu, 19 May 2016 17:31:18 +0200
-Subject: [PATCH] Fix inconsistent use of tabs vs. space.
-
-Needed for at least python-3.5.x.
-
-Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
-Signed-off-by: Uli Schlachter <psychon@znc.in>
----
- src/c_client.py | 14 +++++++-------
- 1 file changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/src/c_client.py b/src/c_client.py
-index 57de3fb..043338d 100644
---- a/src/c_client.py
-+++ b/src/c_client.py
-@@ -1364,7 +1364,7 @@ def _c_serialize(context, self):
-             _c('    unsigned int xcb_align_to = 0;')
-         if self.is_switch:
-             _c('    unsigned int xcb_padding_offset = %d;',
--	       self.get_align_offset() )
-+               self.get_align_offset() )
-         prefix = [('_aux', '->', self)]
-         aux_ptr = 'xcb_out'
- 
-@@ -1390,7 +1390,7 @@ def _c_serialize(context, self):
-         _c('    unsigned int xcb_align_to = 0;')
-         if self.is_switch:
-             _c('    unsigned int xcb_padding_offset = %d;',
--	       self.get_align_offset() )
-+               self.get_align_offset() )
- 
-     elif 'sizeof' == context:
-         param_names = [p[2] for p in params]
-@@ -1930,14 +1930,14 @@ def _c_accessors_list(self, field):
-                     # from the request size and divide that by the member size
-                     return '(((R->length * 4) - sizeof('+ self.c_type + '))/'+'sizeof('+field.type.member.c_wiretype+'))'
-                 else:
--		    # use the accessor to get the start of the list, then
--		    # compute the length of it by subtracting it from
-+                    # use the accessor to get the start of the list, then
-+                    # compute the length of it by subtracting it from
-                     # the adress of the first byte after the end of the
-                     # request
--		    after_end_of_request = '(((char*)R) + R->length * 4)'
--		    start_of_list = '%s(R)' % (field.c_accessor_name)
-+                    after_end_of_request = '(((char*)R) + R->length * 4)'
-+                    start_of_list = '%s(R)' % (field.c_accessor_name)
-                     bytesize_of_list = '%s - (char*)(%s)' % (after_end_of_request, start_of_list)
--		    return '(%s) / sizeof(%s)' % (bytesize_of_list, field.type.member.c_wiretype)
-+                    return '(%s) / sizeof(%s)' % (bytesize_of_list, field.type.member.c_wiretype)
-             else:
-                 raise Exception(
-                     "lengthless lists with varsized members are not supported. Fieldname '%s'"
--- 
-2.11.1
-
diff --git a/gnu/packages/patches/make-glibc-compat.patch b/gnu/packages/patches/make-glibc-compat.patch
new file mode 100644
index 0000000000..9ce7f2b5bf
--- /dev/null
+++ b/gnu/packages/patches/make-glibc-compat.patch
@@ -0,0 +1,52 @@
+Work with the new glob interface in glibc 2.27.
+
+Taken from this upstream commit:
+https://git.savannah.gnu.org/cgit/make.git/commit/?id=193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4
+
+diff --git a/dir.c b/dir.c
+index adbb8a9..c343e4c 100644
+--- a/dir.c
++++ b/dir.c
+@@ -1299,15 +1299,40 @@ local_stat (const char *path, struct stat *buf)
+ }
+ #endif
+ 
++/* Similarly for lstat.  */
++#if !defined(lstat) && !defined(WINDOWS32) || defined(VMS)
++# ifndef VMS
++#  ifndef HAVE_SYS_STAT_H
++int lstat (const char *path, struct stat *sbuf);
++#  endif
++# else
++    /* We are done with the fake lstat.  Go back to the real lstat */
++#   ifdef lstat
++#     undef lstat
++#   endif
++# endif
++# define local_lstat lstat
++#elif defined(WINDOWS32)
++/* Windows doesn't support lstat().  */
++# define local_lstat local_stat
++#else
++static int
++local_lstat (const char *path, struct stat *buf)
++{
++  int e;
++  EINTRLOOP (e, lstat (path, buf));
++  return e;
++}
++#endif
++
+ void
+ dir_setup_glob (glob_t *gl)
+ {
+   gl->gl_opendir = open_dirstream;
+   gl->gl_readdir = read_dirstream;
+   gl->gl_closedir = free;
++  gl->gl_lstat = local_lstat;
+   gl->gl_stat = local_stat;
+-  /* We don't bother setting gl_lstat, since glob never calls it.
+-     The slot is only there for compatibility with 4.4 BSD.  */
+ }
+ 
+ void
diff --git a/gnu/packages/patches/patch-hurd-path-max.patch b/gnu/packages/patches/patch-hurd-path-max.patch
index 81e37930c2..1845a5803b 100644
--- a/gnu/packages/patches/patch-hurd-path-max.patch
+++ b/gnu/packages/patches/patch-hurd-path-max.patch
@@ -13,7 +13,7 @@ Subject: [PATCH] Do not rely on PATH_MAX when reading a symlink target.
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/src/util.c b/src/util.c
-index 82a7e37..c4c0f9d 100644
+index 1cc08ba..67dbd3a 100644
 --- a/src/util.c
 +++ b/src/util.c
 @@ -460,12 +460,12 @@ move_file (char const *from, bool *from_needs_removal,
@@ -31,18 +31,19 @@ index 82a7e37..c4c0f9d 100644
  	    size += i;
  	  if (i != 0 || close (fd) != 0)
  	    read_fatal ();
-@@ -610,9 +610,9 @@ copy_file (char const *from, char const *to, struct stat *tost,
+@@ -610,10 +610,10 @@ copy_file (char const *from, char const *to, struct stat *tost,
  
    if (S_ISLNK (mode))
      {
--      char *buffer = xmalloc (PATH_MAX);
+-      char *buffer = xmalloc (PATH_MAX + 1);
 +      char *buffer = xmalloc (tost->st_size + 1);
+       ssize_t r;
  
--      if (safe_readlink (from, buffer, PATH_MAX) < 0)
-+      if (safe_readlink (from, buffer, tost->st_size) < 0)
+-      if ((r = safe_readlink (from, buffer, PATH_MAX)) < 0)
++      if ((r = safe_readlink (from, buffer, tost->st_size)) < 0)
  	pfatal ("Can't read %s %s", "symbolic link", from);
+       buffer[r] = '\0';
        if (safe_symlink (buffer, to) != 0)
- 	pfatal ("Can't create %s %s", "symbolic link", to);
 -- 
-2.4.2
+2.16.2
 
diff --git a/gnu/packages/patches/pcre2-CVE-2017-7186.patch b/gnu/packages/patches/pcre2-CVE-2017-7186.patch
deleted file mode 100644
index 5c16955aaa..0000000000
--- a/gnu/packages/patches/pcre2-CVE-2017-7186.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-Patch for <https://nvd.nist.gov/vuln/detail?vulnId=CVE-2017-7186>
-taken from <https://vcs.pcre.org/pcre2?view=revision&revision=670>.
-
---- trunk/src/pcre2_internal.h	2016/11/19 12:46:24	600
-+++ trunk/src/pcre2_internal.h	2017/02/24 18:25:32	670
-@@ -1774,10 +1774,17 @@
- /* UCD access macros */
- 
- #define UCD_BLOCK_SIZE 128
--#define GET_UCD(ch) (PRIV(ucd_records) + \
-+#define REAL_GET_UCD(ch) (PRIV(ucd_records) + \
-         PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \
-         UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE])
- 
-+#if PCRE2_CODE_UNIT_WIDTH == 32
-+#define GET_UCD(ch) ((ch > MAX_UTF_CODE_POINT)? \
-+  PRIV(dummy_ucd_record) : REAL_GET_UCD(ch))
-+#else
-+#define GET_UCD(ch) REAL_GET_UCD(ch)
-+#endif
-+
- #define UCD_CHARTYPE(ch)    GET_UCD(ch)->chartype
- #define UCD_SCRIPT(ch)      GET_UCD(ch)->script
- #define UCD_CATEGORY(ch)    PRIV(ucp_gentype)[UCD_CHARTYPE(ch)]
-@@ -1834,6 +1841,9 @@
- #define _pcre2_default_compile_context PCRE2_SUFFIX(_pcre2_default_compile_context_)
- #define _pcre2_default_match_context   PCRE2_SUFFIX(_pcre2_default_match_context_)
- #define _pcre2_default_tables          PCRE2_SUFFIX(_pcre2_default_tables_)
-+#if PCRE2_CODE_UNIT_WIDTH == 32
-+#define _pcre2_dummy_ucd_record        PCRE2_SUFFIX(_pcre2_dummy_ucd_record_)
-+#endif
- #define _pcre2_hspace_list             PCRE2_SUFFIX(_pcre2_hspace_list_)
- #define _pcre2_vspace_list             PCRE2_SUFFIX(_pcre2_vspace_list_)
- #define _pcre2_ucd_caseless_sets       PCRE2_SUFFIX(_pcre2_ucd_caseless_sets_)
-@@ -1858,6 +1868,9 @@
- extern const uint32_t                  PRIV(vspace_list)[];
- extern const uint32_t                  PRIV(ucd_caseless_sets)[];
- extern const ucd_record                PRIV(ucd_records)[];
-+#if PCRE2_CODE_UNIT_WIDTH == 32
-+extern const ucd_record                PRIV(dummy_ucd_record)[];
-+#endif
- extern const uint8_t                   PRIV(ucd_stage1)[];
- extern const uint16_t                  PRIV(ucd_stage2)[];
- extern const uint32_t                  PRIV(ucp_gbtable)[];
-
---- trunk/src/pcre2_ucd.c	2015/07/17 15:44:51	316
-+++ trunk/src/pcre2_ucd.c	2017/02/24 18:25:32	670
-@@ -41,6 +41,20 @@
- 
- const char *PRIV(unicode_version) = "8.0.0";
- 
-+/* If the 32-bit library is run in non-32-bit mode, character values
-+greater than 0x10ffff may be encountered. For these we set up a
-+special record. */
-+
-+#if PCRE2_CODE_UNIT_WIDTH == 32
-+const ucd_record PRIV(dummy_ucd_record)[] = {{
-+  ucp_Common,    /* script */
-+  ucp_Cn,        /* type unassigned */
-+  ucp_gbOther,   /* grapheme break property */
-+  0,             /* case set */
-+  0,             /* other case */
-+  }};
-+#endif
-+
- /* When recompiling tables with a new Unicode version, please check the
- types in this structure definition from pcre2_internal.h (the actual
- field names will be different):
diff --git a/gnu/packages/patches/pcre2-CVE-2017-8786.patch b/gnu/packages/patches/pcre2-CVE-2017-8786.patch
deleted file mode 100644
index 6071d58f07..0000000000
--- a/gnu/packages/patches/pcre2-CVE-2017-8786.patch
+++ /dev/null
@@ -1,155 +0,0 @@
-Fix CVE-2017-8786:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8786
-https://bugs.exim.org/show_bug.cgi?id=2079
-https://blogs.gentoo.org/ago/2017/04/29/libpcre-heap-based-buffer-overflow-write-in-pcre2test-c/
-
-Patch copied from upstream source repository:
-
-https://vcs.pcre.org/pcre2?view=revision&revision=696
-https://vcs.pcre.org/pcre2?view=revision&revision=697
-
---- trunk/doc/pcre2api.3	2017/03/21 16:48:40	695
-+++ trunk/doc/pcre2api.3	2017/03/21 17:46:21	696
-@@ -1,4 +1,4 @@
--.TH PCRE2API 3 "24 December 2016" "PCRE2 10.23"
-+.TH PCRE2API 3 "21 March 2017" "PCRE2 10.30"
- .SH NAME
- PCRE2 - Perl-compatible regular expressions (revised API)
- .sp
-@@ -2633,8 +2633,8 @@
- A text message for an error code from any PCRE2 function (compile, match, or
- auxiliary) can be obtained by calling \fBpcre2_get_error_message()\fP. The code
- is passed as the first argument, with the remaining two arguments specifying a
--code unit buffer and its length, into which the text message is placed. Note
--that the message is returned in code units of the appropriate width for the
-+code unit buffer and its length in code units, into which the text message is
-+placed. The message is returned in code units of the appropriate width for the
- library that is being used.
- .P
- The returned message is terminated with a trailing zero, and the function
-@@ -3321,6 +3321,6 @@
- .rs
- .sp
- .nf
--Last updated: 23 December 2016
--Copyright (c) 1997-2016 University of Cambridge.
-+Last updated: 21 March 2017
-+Copyright (c) 1997-2017 University of Cambridge.
- .fi
---- trunk/src/pcre2_error.c	2017/03/21 16:48:40	695
-+++ trunk/src/pcre2_error.c	2017/03/21 17:46:21	696
-@@ -271,7 +271,7 @@
- Arguments:
-   enumber       error number
-   buffer        where to put the message (zero terminated)
--  size          size of the buffer
-+  size          size of the buffer in code units
- 
- Returns:        length of message if all is well
-                 negative on error
---- trunk/src/pcre2test.c	2017/03/21 17:46:21	696
-+++ trunk/src/pcre2test.c	2017/03/21 18:36:13	697
-@@ -1017,9 +1017,9 @@
-   if (test_mode == PCRE8_MODE) \
-     r = pcre2_get_error_message_8(a,G(b,8),G(G(b,8),_size)); \
-   else if (test_mode == PCRE16_MODE) \
--    r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size)); \
-+    r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size/2)); \
-   else \
--    r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size))
-+    r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size/4))
- 
- #define PCRE2_GET_OVECTOR_COUNT(a,b) \
-   if (test_mode == PCRE8_MODE) \
-@@ -1399,6 +1399,9 @@
- 
- /* ----- Common macros for two-mode cases ----- */
- 
-+#define BYTEONE (BITONE/8)
-+#define BYTETWO (BITTWO/8)
-+
- #define CASTFLD(t,a,b) \
-   ((test_mode == G(G(PCRE,BITONE),_MODE))? (t)(G(a,BITONE)->b) : \
-     (t)(G(a,BITTWO)->b))
-@@ -1481,9 +1484,9 @@
- 
- #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \
-   if (test_mode == G(G(PCRE,BITONE),_MODE)) \
--    r = G(pcre2_get_error_message_,BITONE)(a,G(b,BITONE),G(G(b,BITONE),_size)); \
-+    r = G(pcre2_get_error_message_,BITONE)(a,G(b,BITONE),G(G(b,BITONE),_size/BYTEONE)); \
-   else \
--    r = G(pcre2_get_error_message_,BITTWO)(a,G(b,BITTWO),G(G(b,BITTWO),_size))
-+    r = G(pcre2_get_error_message_,BITTWO)(a,G(b,BITTWO),G(G(b,BITTWO),_size/BYTETWO))
- 
- #define PCRE2_GET_OVECTOR_COUNT(a,b) \
-   if (test_mode == G(G(PCRE,BITONE),_MODE)) \
-@@ -1904,7 +1907,7 @@
- #define PCRE2_DFA_MATCH(a,b,c,d,e,f,g,h,i,j) \
-   a = pcre2_dfa_match_16(G(b,16),(PCRE2_SPTR16)c,d,e,f,G(g,16),h,i,j)
- #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \
--  r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size))
-+  r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size/2))
- #define PCRE2_GET_OVECTOR_COUNT(a,b) a = pcre2_get_ovector_count_16(G(b,16))
- #define PCRE2_GET_STARTCHAR(a,b) a = pcre2_get_startchar_16(G(b,16))
- #define PCRE2_JIT_COMPILE(r,a,b) r = pcre2_jit_compile_16(G(a,16),b)
-@@ -2000,7 +2003,7 @@
- #define PCRE2_DFA_MATCH(a,b,c,d,e,f,g,h,i,j) \
-   a = pcre2_dfa_match_32(G(b,32),(PCRE2_SPTR32)c,d,e,f,G(g,32),h,i,j)
- #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \
--  r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size))
-+  r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size/4))
- #define PCRE2_GET_OVECTOR_COUNT(a,b) a = pcre2_get_ovector_count_32(G(b,32))
- #define PCRE2_GET_STARTCHAR(a,b) a = pcre2_get_startchar_32(G(b,32))
- #define PCRE2_JIT_COMPILE(r,a,b) r = pcre2_jit_compile_32(G(a,32),b)
---- trunk/src/pcre2test.c	2017/03/21 16:48:40	695
-+++ trunk/src/pcre2test.c	2017/03/21 17:46:21	696
-@@ -2889,7 +2889,7 @@
-   {
-   if (pbuffer32 != NULL) free(pbuffer32);
-   pbuffer32_size = 4*len + 4;
--  if (pbuffer32_size < 256) pbuffer32_size = 256;
-+  if (pbuffer32_size < 512) pbuffer32_size = 512;
-   pbuffer32 = (uint32_t *)malloc(pbuffer32_size);
-   if (pbuffer32 == NULL)
-     {
-@@ -7600,7 +7600,8 @@
-   int errcode;
-   char *endptr;
- 
--/* Ensure the relevant non-8-bit buffer is available. */
-+/* Ensure the relevant non-8-bit buffer is available. Ensure that it is at 
-+least 128 code units, because it is used for retrieving error messages. */
- 
- #ifdef SUPPORT_PCRE2_16
-   if (test_mode == PCRE16_MODE)
-@@ -7620,7 +7621,7 @@
- #ifdef SUPPORT_PCRE2_32
-   if (test_mode == PCRE32_MODE)
-     {
--    pbuffer32_size = 256;
-+    pbuffer32_size = 512;
-     pbuffer32 = (uint32_t *)malloc(pbuffer32_size);
-     if (pbuffer32 == NULL)
-       {
---- trunk/testdata/testinput2	2017/03/21 16:48:40	695
-+++ trunk/testdata/testinput2	2017/03/21 17:46:21	696
-@@ -5017,4 +5017,6 @@
- 
- /(?<!\1((?U)1((?U))))(*F)/never_backslash_c,alt_bsux,anchored,extended
- 
-+/\g{3/
-+
- # End of testinput2 
---- trunk/testdata/testoutput2	2017/03/21 16:48:40	695
-+++ trunk/testdata/testoutput2	2017/03/21 17:46:21	696
-@@ -15570,6 +15570,9 @@
- 
- /(?<!\1((?U)1((?U))))(*F)/never_backslash_c,alt_bsux,anchored,extended
- 
-+/\g{3/
-+Failed: error 157 at offset 2: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
-+
- # End of testinput2 
- Error -63: PCRE2_ERROR_BADDATA (unknown error number)
- Error -62: bad serialized data
diff --git a/gnu/packages/patches/pulseaudio-glibc-2.27.patch b/gnu/packages/patches/pulseaudio-glibc-2.27.patch
new file mode 100644
index 0000000000..79d86abeee
--- /dev/null
+++ b/gnu/packages/patches/pulseaudio-glibc-2.27.patch
@@ -0,0 +1,67 @@
+Copied from:
+https://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/?id=dfb0460fb4743aec047cdf755a660a9ac2d0f3fb
+
+
+From dfb0460fb4743aec047cdf755a660a9ac2d0f3fb Mon Sep 17 00:00:00 2001
+From: Tanu Kaskinen <tanuk@iki.fi>
+Date: Wed, 24 Jan 2018 03:51:49 +0200
+Subject: [PATCH] memfd-wrappers: only define memfd_create() if not already
+ defined
+
+glibc 2.27 is to be released soon, and it will provide memfd_create().
+If glibc provides the function, we must not define it ourselves,
+otherwise building fails due to conflict between the two implementations
+of the same function.
+
+BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104733
+---
+ configure.ac                   | 3 +++
+ src/pulsecore/memfd-wrappers.h | 7 ++++---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 0084c86e..0eb44b08 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -610,6 +610,9 @@ AS_IF([test "x$enable_memfd" = "xyes" && test "x$HAVE_MEMFD" = "x0"],
+     [AC_MSG_ERROR([*** Your Linux kernel does not support memfd shared memory.
+                   *** Use linux v3.17 or higher for such a feature.])])
+ 
++AS_IF([test "x$HAVE_MEMFD" = "x1"],
++    AC_CHECK_FUNCS([memfd_create]))
++
+ AC_SUBST(HAVE_MEMFD)
+ AM_CONDITIONAL([HAVE_MEMFD], [test "x$HAVE_MEMFD" = x1])
+ AS_IF([test "x$HAVE_MEMFD" = "x1"], AC_DEFINE([HAVE_MEMFD], 1, [Have memfd shared memory.]))
+diff --git a/src/pulsecore/memfd-wrappers.h b/src/pulsecore/memfd-wrappers.h
+index 3bed9b2b..c7aadfd3 100644
+--- a/src/pulsecore/memfd-wrappers.h
++++ b/src/pulsecore/memfd-wrappers.h
+@@ -20,13 +20,14 @@
+   License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
+ ***/
+ 
+-#ifdef HAVE_MEMFD
++#if defined(HAVE_MEMFD) && !defined(HAVE_MEMFD_CREATE)
+ 
+ #include <sys/syscall.h>
+ #include <fcntl.h>
+ 
+ /*
+- * No glibc wrappers exist for memfd_create(2), so provide our own.
++ * Before glibc version 2.27 there was no wrapper for memfd_create(2),
++ * so we have to provide our own.
+  *
+  * Also define memfd fcntl sealing macros. While they are already
+  * defined in the kernel header file <linux/fcntl.h>, that file as
+@@ -63,6 +64,6 @@ static inline int memfd_create(const char *name, unsigned int flags) {
+ #define F_SEAL_WRITE    0x0008  /* prevent writes */
+ #endif
+ 
+-#endif /* HAVE_MEMFD */
++#endif /* HAVE_MEMFD && !HAVE_MEMFD_CREATE */
+ 
+ #endif
+-- 
+2.16.2
+
diff --git a/gnu/packages/patches/pycairo-wscript.patch b/gnu/packages/patches/pycairo-wscript.patch
deleted file mode 100644
index c49f0afcb3..0000000000
--- a/gnu/packages/patches/pycairo-wscript.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Update the wscript to work with waf-1.8.8.  Based on:
-http://cgit.freedesktop.org/pycairo/commit/?id=c57cd129407c904f8c2f752a59d0183df7b01a5e
-
-
---- pycairo-1.10.0.orig/wscript	2011-04-18 15:42:29.000000000 +0800
-+++ pycairo-1.10.0/wscript	2015-04-20 13:01:45.383756898 +0800
-@@ -13,18 +13,18 @@
- 
- def options(ctx):
-   print('  %s/options()' %d)
--  ctx.tool_options('gnu_dirs')
--  ctx.tool_options('compiler_cc')
--  ctx.tool_options('python') # options for disabling pyc or pyo compilation
-+  ctx.load('gnu_dirs')
-+  ctx.load('compiler_c')
-+  ctx.load('python') # options for disabling pyc or pyo compilation
- 
- 
- def configure(ctx):
-   print('  %s/configure()' %d)
- 
-   env = ctx.env
--  ctx.check_tool('gnu_dirs')
--  ctx.check_tool('compiler_cc')
--  ctx.check_tool('python')
-+  ctx.load('gnu_dirs')
-+  ctx.load('compiler_c')
-+  ctx.load('python')
-   ctx.check_python_version((3,1,0))
-   ctx.check_python_headers()
-   ctx.check_cfg(package='cairo', atleast_version=cairo_version_required,
diff --git a/gnu/packages/patches/python-3-search-paths.patch b/gnu/packages/patches/python-3-search-paths.patch
index 7feddb8e30..73e3f4ccf5 100644
--- a/gnu/packages/patches/python-3-search-paths.patch
+++ b/gnu/packages/patches/python-3-search-paths.patch
@@ -3,17 +3,14 @@ looking for headers and libraries.
 
 --- setup.py	2015-10-07 23:32:58.891329173 +0200
 +++ setup.py	2015-10-07 23:46:29.653349924 +0200
-@@ -507,11 +507,8 @@ class PyBuildExt(build_ext):
+@@ -575,8 +575,8 @@
          # if a file is found in one of those directories, it can
          # be assumed that no additional -I,-L directives are needed.
          if not cross_compiling:
--            lib_dirs = self.compiler.library_dirs + [
--                '/lib64', '/usr/lib64',
--                '/lib', '/usr/lib',
--                ]
--            inc_dirs = self.compiler.include_dirs + ['/usr/include']
+-            lib_dirs = self.compiler.library_dirs + system_lib_dirs
+-            inc_dirs = self.compiler.include_dirs + system_include_dirs
 +            lib_dirs = os.getenv('LIBRARY_PATH', '').split(os.pathsep)
 +            inc_dirs = os.getenv('C_INCLUDE_PATH', '').split(os.pathsep)
          else:
-             lib_dirs = self.compiler.library_dirs[:]
-             inc_dirs = self.compiler.include_dirs[:]
+             # Add the sysroot paths. 'sysroot' is a compiler option used to
+             # set the logical path of the standard system headers and
diff --git a/gnu/packages/patches/qemu-glibc-2.27.patch b/gnu/packages/patches/qemu-glibc-2.27.patch
new file mode 100644
index 0000000000..b1f354ac1c
--- /dev/null
+++ b/gnu/packages/patches/qemu-glibc-2.27.patch
@@ -0,0 +1,55 @@
+From 75e5b70e6b5dcc4f2219992d7cffa462aa406af0 Mon Sep 17 00:00:00 2001
+From: Paolo Bonzini <pbonzini@redhat.com>
+Date: Tue, 28 Nov 2017 11:51:27 +0100
+Subject: [PATCH] memfd: fix configure test
+MIME-Version: 1.0
+Content-Type: text/plain; charset=utf8
+Content-Transfer-Encoding: 8bit
+
+Recent glibc added memfd_create in sys/mman.h.  This conflicts with
+the definition in util/memfd.c:
+
+    /builddir/build/BUILD/qemu-2.11.0-rc1/util/memfd.c:40:12: error: static declaration of memfd_create follows non-static declaration
+
+Fix the configure test, and remove the sys/memfd.h inclusion since the
+file actually does not exist---it is a typo in the memfd_create(2) man
+page.
+
+Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+---
+ configure    | 2 +-
+ util/memfd.c | 4 +---
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/configure b/configure
+index 9c8aa5a..99ccc17 100755
+--- a/configure
++++ b/configure
+@@ -3923,7 +3923,7 @@ fi
+ # check if memfd is supported
+ memfd=no
+ cat > $TMPC << EOF
+-#include <sys/memfd.h>
++#include <sys/mman.h>
+ 
+ int main(void)
+ {
+diff --git a/util/memfd.c b/util/memfd.c
+index 4571d1a..412e94a 100644
+--- a/util/memfd.c
++++ b/util/memfd.c
+@@ -31,9 +31,7 @@
+ 
+ #include "qemu/memfd.h"
+ 
+-#ifdef CONFIG_MEMFD
+-#include <sys/memfd.h>
+-#elif defined CONFIG_LINUX
++#if defined CONFIG_LINUX && !defined CONFIG_MEMFD
+ #include <sys/syscall.h>
+ #include <asm/unistd.h>
+ 
+-- 
+1.8.3.1
+
diff --git a/gnu/packages/patches/tar-CVE-2016-6321.patch b/gnu/packages/patches/tar-CVE-2016-6321.patch
deleted file mode 100644
index b79be9bc94..0000000000
--- a/gnu/packages/patches/tar-CVE-2016-6321.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-Fix CVE-2016-6321:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6321
-https://security-tracker.debian.org/tracker/CVE-2016-6321
-
-Patch adapted from upstream source repository (the changes to 'NEWS'
-don't apply to the Tar 1.29 release tarball).
-
-http://git.savannah.gnu.org/cgit/tar.git/commit/?id=7340f67b9860ea0531c1450e5aa261c50f67165d
-
-From 7340f67b9860ea0531c1450e5aa261c50f67165d Mon Sep 17 00:00:00 2001
-From: Paul Eggert <eggert@Penguin.CS.UCLA.EDU>
-Date: Sat, 29 Oct 2016 21:04:40 -0700
-Subject: [PATCH] When extracting, skip ".." members
-
-* NEWS: Document this.
-* src/extract.c (extract_archive): Skip members whose names
-contain "..".
----
- NEWS          | 8 +++++++-
- src/extract.c | 8 ++++++++
- 2 files changed, 15 insertions(+), 1 deletion(-)
-
-diff --git a/src/extract.c b/src/extract.c
-index f982433..7904148 100644
---- a/src/extract.c
-+++ b/src/extract.c
-@@ -1629,12 +1629,20 @@ extract_archive (void)
- {
-   char typeflag;
-   tar_extractor_t fun;
-+  bool skip_dotdot_name;
- 
-   fatal_exit_hook = extract_finish;
- 
-   set_next_block_after (current_header);
- 
-+  skip_dotdot_name = (!absolute_names_option
-+		      && contains_dot_dot (current_stat_info.orig_file_name));
-+  if (skip_dotdot_name)
-+    ERROR ((0, 0, _("%s: Member name contains '..'"),
-+	    quotearg_colon (current_stat_info.orig_file_name)));
-+
-   if (!current_stat_info.file_name[0]
-+      || skip_dotdot_name
-       || (interactive_option
- 	  && !confirm ("extract", current_stat_info.file_name)))
-     {
--- 
-2.11.0
-
diff --git a/gnu/packages/patches/tar-remove-wholesparse-check.patch b/gnu/packages/patches/tar-remove-wholesparse-check.patch
new file mode 100644
index 0000000000..41f53e86aa
--- /dev/null
+++ b/gnu/packages/patches/tar-remove-wholesparse-check.patch
@@ -0,0 +1,68 @@
+This patch is needed in order to build Guix on a Btrfs file system.
+
+
+From da922703282b0d3b8837a99a9c7fdd32f1d20d49 Mon Sep 17 00:00:00 2001
+From: Mark H Weaver <mhw@netris.org>
+Date: Tue, 9 Jan 2018 20:16:14 -0500
+Subject: [PATCH] Remove nonportable check for files containing only zeroes.
+
+This check benefitted only one unlikely case (large files containing
+only zeroes, on systems that do not support SEEK_HOLE) and was based
+on an assumption about file system behavior that is not mandated by
+POSIX and no longer holds in practice, namely that for sufficiently
+large files, (st_blocks == 0) implies that the file contains only
+zeroes.  Examples of file systems that violate this assumption include
+Linux's /proc file system and Btrfs.
+
+* src/sparse.c (sparse_scan_file_wholesparse): Remove this function.
+(sparse_scan_file_seek): Remove the initial check for files containing
+only zeroes.
+---
+ src/sparse.c | 24 ------------------------
+ 1 file changed, 24 deletions(-)
+
+diff --git a/src/sparse.c b/src/sparse.c
+index d41c0ea..3de6560 100644
+--- a/src/sparse.c
++++ b/src/sparse.c
+@@ -261,26 +261,6 @@ sparse_scan_file_raw (struct tar_sparse_file *file)
+   return tar_sparse_scan (file, scan_end, NULL);
+ }
+ 
+-static bool
+-sparse_scan_file_wholesparse (struct tar_sparse_file *file)
+-{
+-  struct tar_stat_info *st = file->stat_info;
+-  struct sp_array sp = {0, 0};
+-
+-  /* Note that this function is called only for truly sparse files of size >= 1
+-     block size (checked via ST_IS_SPARSE before).  See the thread
+-     http://www.mail-archive.com/bug-tar@gnu.org/msg04209.html for more info */
+-  if (ST_NBLOCKS (st->stat) == 0)
+-    {
+-      st->archive_file_size = 0;
+-      sp.offset = st->stat.st_size;
+-      sparse_add_map (st, &sp);
+-      return true;
+-    }
+-
+-  return false;
+-}
+-
+ #ifdef SEEK_HOLE
+ /* Try to engage SEEK_HOLE/SEEK_DATA feature. */
+ static bool
+@@ -343,10 +323,6 @@ sparse_scan_file_seek (struct tar_sparse_file *file)
+ static bool
+ sparse_scan_file (struct tar_sparse_file *file)
+ {
+-  /* always check for completely sparse files */
+-  if (sparse_scan_file_wholesparse (file))
+-    return true;
+-
+   switch (hole_detection)
+     {
+     case HOLE_DETECTION_DEFAULT:
+-- 
+2.15.1
+
diff --git a/gnu/packages/patches/util-linux-CVE-2018-7738.patch b/gnu/packages/patches/util-linux-CVE-2018-7738.patch
deleted file mode 100644
index 080e2f56ba..0000000000
--- a/gnu/packages/patches/util-linux-CVE-2018-7738.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-Fix CVE-2018-7738:
-
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7738
-
-Patch copied from upstream source repository:
-
-https://github.com/karelzak/util-linux/commit/75f03badd7ed9f1dd951863d75e756883d3acc55
-
-From 75f03badd7ed9f1dd951863d75e756883d3acc55 Mon Sep 17 00:00:00 2001
-From: Karel Zak <kzak@redhat.com>
-Date: Thu, 16 Nov 2017 16:27:32 +0100
-Subject: [PATCH] bash-completion: (umount) use findmnt, escape a space in
- paths
-
- # mount /dev/sdc1 /mnt/test/foo\ bar
- # umount <tab>
-
-has to return "/mnt/test/foo\ bar".
-
-Changes:
-
- * don't use mount | awk output, we have findmnt
- * force compgen use \n as entries separator
-
-Addresses: https://github.com/karelzak/util-linux/issues/539
-Signed-off-by: Karel Zak <kzak@redhat.com>
----
- bash-completion/umount | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/bash-completion/umount b/bash-completion/umount
-index d76cb9fff..98c90d61a 100644
---- a/bash-completion/umount
-+++ b/bash-completion/umount
-@@ -40,9 +40,10 @@ _umount_module()
- 			return 0
- 			;;
- 	esac
--	local DEVS_MPOINTS
--	DEVS_MPOINTS="$(mount | awk '{print $1, $3}')"
--	COMPREPLY=( $(compgen -W "$DEVS_MPOINTS" -- $cur) )
--	return 0
-+
-+	local oldifs=$IFS
-+	IFS=$'\n'
-+	COMPREPLY=( $( compgen -W '$(findmnt -lno TARGET | sed "s/\([[:blank:]]\)/\\\\\1/g")' -- "$cur" ) )
-+	IFS=$oldifs
- }
- complete -F _umount_module umount
diff --git a/gnu/packages/patches/util-linux-tests.patch b/gnu/packages/patches/util-linux-tests.patch
index f436299b7f..bb5be66515 100644
--- a/gnu/packages/patches/util-linux-tests.patch
+++ b/gnu/packages/patches/util-linux-tests.patch
@@ -5,14 +5,14 @@ using 'getpwnam' in libmount.  This doesn't work in the chroot because
 
 --- util-linux-2.25.2/tests/ts/libmount/optstr	2015-01-23 13:58:41.181151194 +0100
 +++ util-linux-2.25.2/tests/ts/libmount/optstr	2015-01-23 13:58:42.829161716 +0100
-@@ -84,10 +84,6 @@ ts_init_subtest "apply-user"	# add user,
- ts_valgrind $TESTPROG --apply --user "noexec,nosuid,loop=/dev/looop0" 0x408 &> $TS_OUTPUT
+@@ -108,10 +108,6 @@
+ ts_run $TESTPROG --apply --user "noexec,nosuid,loop=/dev/looop0" 0x408 &> $TS_OUTPUT
  ts_finalize_subtest
  
 -ts_init_subtest "fix"
--ts_valgrind $TESTPROG --fix "uid=root,gid=root" &> $TS_OUTPUT
+-ts_run $TESTPROG --fix "uid=root,gid=root" &> $TS_OUTPUT
 -ts_finalize_subtest
 -
  ts_init_subtest "deduplicate"
- ts_valgrind $TESTPROG --dedup bbb,ccc,AAA,xxx,AAA=a,AAA=bbb,ddd,AAA=ccc,fff=eee AAA &> $TS_OUTPUT
+ ts_run $TESTPROG --dedup bbb,ccc,AAA,xxx,AAA=a,AAA=bbb,ddd,AAA=ccc,fff=eee AAA &> $TS_OUTPUT
  ts_finalize_subtest
diff --git a/gnu/packages/patches/xcb-proto-python3-print.patch b/gnu/packages/patches/xcb-proto-python3-print.patch
deleted file mode 100644
index 7d5dc9bc27..0000000000
--- a/gnu/packages/patches/xcb-proto-python3-print.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-Patch copied from upstream source repository:
-
-https://cgit.freedesktop.org/xcb/proto/commit/?id=bea5e1c85bdc0950913790364e18228f20395a3d
-
-From bea5e1c85bdc0950913790364e18228f20395a3d Mon Sep 17 00:00:00 2001
-From: Thomas Klausner <wiz@NetBSD.org>
-Date: Thu, 19 May 2016 17:30:05 +0200
-Subject: [PATCH] print() is a function and needs parentheses.
-
-Fixes build with python-3.x.
-
-Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
-Signed-off-by: Uli Schlachter <psychon@znc.in>
----
- xcbgen/xtypes.py | 12 ++++++------
- 1 file changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py
-index c3b5758..b83b119 100644
---- a/xcbgen/xtypes.py
-+++ b/xcbgen/xtypes.py
-@@ -501,7 +501,7 @@ class ComplexType(Type):
-                 int(required_start_align_element.get('align', "4"), 0),
-                 int(required_start_align_element.get('offset', "0"), 0))
-             if verbose_align_log:
--                print "Explicit start-align for %s: %s\n" % (self, self.required_start_align)
-+                print ("Explicit start-align for %s: %s\n" % (self, self.required_start_align))
- 
-     def resolve(self, module):
-         if self.resolved:
-@@ -592,7 +592,7 @@ class ComplexType(Type):
-                 if verbose_align_log:
-                     print ("calc_required_start_align: %s has start-align %s"
-                         % (str(self), str(self.required_start_align)))
--                    print "Details:\n" + str(log)
-+                    print ("Details:\n" + str(log))
-                 if self.required_start_align.offset != 0:
-                     print (("WARNING: %s\n\thas start-align with non-zero offset: %s"
-                         + "\n\tsuggest to add explicit definition with:"
-@@ -619,12 +619,12 @@ class ComplexType(Type):
-             for offset in range(0,align):
-                 align_candidate = Alignment(align, offset)
-                 if verbose_align_log:
--                    print "trying %s for %s" % (str(align_candidate), str(self))
-+                    print ("trying %s for %s" % (str(align_candidate), str(self)))
-                 my_log = AlignmentLog()
-                 if self.is_possible_start_align(align_candidate, callstack, my_log):
-                     log.append(my_log)
-                     if verbose_align_log:
--                        print "found start-align %s for %s" % (str(align_candidate), str(self))
-+                        print ("found start-align %s for %s" % (str(align_candidate), str(self)))
-                     return align_candidate
-                 else:
-                     my_ok_count = my_log.ok_count()
-@@ -641,7 +641,7 @@ class ComplexType(Type):
-         # none of the candidates applies
-         # this type has illegal internal aligns for all possible start_aligns
-         if verbose_align_log:
--            print "didn't find start-align for %s" % str(self)
-+            print ("didn't find start-align for %s" % str(self))
-         log.append(best_log)
-         return None
- 
-@@ -900,7 +900,7 @@ class SwitchType(ComplexType):
-     # aux function for unchecked_get_alignment_after
-     def get_align_for_selected_case_field(self, case_field, start_align, callstack, log):
-         if verbose_align_log:
--            print "get_align_for_selected_case_field: %s, case_field = %s" % (str(self), str(case_field))
-+            print ("get_align_for_selected_case_field: %s, case_field = %s" % (str(self), str(case_field)))
-         total_align = start_align
-         for field in self.bitcases:
-             my_callstack = callstack[:]
--- 
-2.11.1
-
diff --git a/gnu/packages/patches/xcb-proto-python3-whitespace.patch b/gnu/packages/patches/xcb-proto-python3-whitespace.patch
deleted file mode 100644
index f0509138b2..0000000000
--- a/gnu/packages/patches/xcb-proto-python3-whitespace.patch
+++ /dev/null
@@ -1,217 +0,0 @@
-Fixes compatibility issue with python > 3.5.
-
-Patch copied from upstream source repository:
-
-https://cgit.freedesktop.org/xcb/proto/commit/?id=ea7a3ac6c658164690e0febb55f4467cb9e0bcac
-
-From ea7a3ac6c658164690e0febb55f4467cb9e0bcac Mon Sep 17 00:00:00 2001
-From: Thomas Klausner <wiz@NetBSD.org>
-Date: Thu, 19 May 2016 17:30:04 +0200
-Subject: [PATCH] Make whitespace use consistent.
-
-At least python-3.5.x complains about this forcefully.
-
-Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
-Signed-off-by: Uli Schlachter <psychon@znc.in>
----
- xcbgen/align.py | 96 ++++++++++++++++++++++++++++-----------------------------
- 1 file changed, 48 insertions(+), 48 deletions(-)
-
-diff --git a/xcbgen/align.py b/xcbgen/align.py
-index 5e31838..d4c12ee 100644
---- a/xcbgen/align.py
-+++ b/xcbgen/align.py
-@@ -16,12 +16,12 @@ class Alignment(object):
-         return self.align == other.align and self.offset == other.offset
- 
-     def __str__(self):
--	return "(align=%d, offset=%d)" % (self.align, self.offset)
-+        return "(align=%d, offset=%d)" % (self.align, self.offset)
- 
-     @staticmethod
-     def for_primitive_type(size):
--	# compute the required start_alignment based on the size of the type
--	if size % 8 == 0:
-+        # compute the required start_alignment based on the size of the type
-+        if size % 8 == 0:
-             # do 8-byte primitives require 8-byte alignment in X11?
-             return Alignment(8,0)
-         elif size % 4 == 0:
-@@ -33,7 +33,7 @@ class Alignment(object):
- 
- 
-     def align_after_fixed_size(self, size):
--	new_offset = (self.offset + size) % self.align
-+        new_offset = (self.offset + size) % self.align
-         return Alignment(self.align, new_offset)
- 
- 
-@@ -41,7 +41,7 @@ class Alignment(object):
-         '''
-         Assuming the given external_align, checks whether
-         self is fulfilled for all cases.
--	Returns True if yes, False otherwise.
-+        Returns True if yes, False otherwise.
-         '''
-         if self.align == 1 and self.offset == 0:
-             # alignment 1 with offset 0 is always fulfilled
-@@ -55,9 +55,9 @@ class Alignment(object):
-             # the external align guarantees less alignment -> not guaranteed
-             return False
- 
--	if external_align.align % self.align != 0:
-+        if external_align.align % self.align != 0:
-             # the external align cannot be divided by our align
--	    # -> not guaranteed
-+            # -> not guaranteed
-             # (this can only happen if there are alignments that are not
-             # a power of 2, which is highly discouraged. But better be
-             # safe and check for it)
-@@ -72,7 +72,7 @@ class Alignment(object):
- 
-     def combine_with(self, other):
-         # returns the alignment that is guaranteed when
--	# both, self or other, can happen
-+        # both, self or other, can happen
-         new_align = gcd(self.align, other.align)
-         new_offset_candidate1 = self.offset % new_align
-         new_offset_candidate2 = other.offset % new_align
-@@ -83,8 +83,8 @@ class Alignment(object):
-             new_align = gcd(new_align, offset_diff)
-             new_offset_candidate1 = self.offset % new_align
-             new_offset_candidate2 = other.offset % new_align
--	    assert new_offset_candidate1 == new_offset_candidate2
--	    new_offset = new_offset_candidate1
-+            assert new_offset_candidate1 == new_offset_candidate2
-+            new_offset = new_offset_candidate1
-         # return the result
-         return Alignment(new_align, new_offset)
- 
-@@ -92,44 +92,44 @@ class Alignment(object):
- class AlignmentLog(object):
- 
-     def __init__(self):
--	self.ok_list = []
--	self.fail_list = []
--	self.verbosity = 1
-+        self.ok_list = []
-+        self.fail_list = []
-+        self.verbosity = 1
- 
-     def __str__(self):
--	result = ""
-+        result = ""
- 
--	# output the OK-list
--	for (align_before, field_name, type_obj, callstack, align_after) in self.ok_list:
--	    stacksize = len(callstack)
-+        # output the OK-list
-+        for (align_before, field_name, type_obj, callstack, align_after) in self.ok_list:
-+            stacksize = len(callstack)
-             indent = '  ' * stacksize
--	    if self.ok_callstack_is_relevant(callstack):
-+            if self.ok_callstack_is_relevant(callstack):
-                 if field_name is None or field_name == "":
--	            result += ("    %sok: %s:\n\t%sbefore: %s, after: %s\n"
--		        % (indent, str(type_obj), indent, str(align_before), str(align_after)))
--	        else:
--		    result += ("    %sok: field \"%s\" in %s:\n\t%sbefore: %s, after: %s\n"
--		        % (indent, str(field_name), str(type_obj),
--		           indent, str(align_before), str(align_after)))
-+                    result += ("    %sok: %s:\n\t%sbefore: %s, after: %s\n"
-+                        % (indent, str(type_obj), indent, str(align_before), str(align_after)))
-+                else:
-+                    result += ("    %sok: field \"%s\" in %s:\n\t%sbefore: %s, after: %s\n"
-+                        % (indent, str(field_name), str(type_obj),
-+                           indent, str(align_before), str(align_after)))
-                 if self.verbosity >= 1:
--		    result += self.callstack_to_str(indent, callstack)
-+                    result += self.callstack_to_str(indent, callstack)
- 
--	# output the fail-list
--	for (align_before, field_name, type_obj, callstack, reason) in self.fail_list:
--	    stacksize = len(callstack)
-+        # output the fail-list
-+        for (align_before, field_name, type_obj, callstack, reason) in self.fail_list:
-+            stacksize = len(callstack)
-             indent = '  ' * stacksize
--	    if field_name is None or field_name == "":
--	        result += ("    %sfail: align %s is incompatible with\n\t%s%s\n\t%sReason: %s\n"
--		    % (indent, str(align_before), indent, str(type_obj), indent, reason))
--	    else:
--		result += ("    %sfail: align %s is incompatible with\n\t%sfield \"%s\" in %s\n\t%sReason: %s\n"
--		    % (indent, str(align_before), indent, str(field_name), str(type_obj), indent, reason))
-+            if field_name is None or field_name == "":
-+                result += ("    %sfail: align %s is incompatible with\n\t%s%s\n\t%sReason: %s\n"
-+                    % (indent, str(align_before), indent, str(type_obj), indent, reason))
-+            else:
-+                result += ("    %sfail: align %s is incompatible with\n\t%sfield \"%s\" in %s\n\t%sReason: %s\n"
-+                    % (indent, str(align_before), indent, str(field_name), str(type_obj), indent, reason))
- 
-             if self.verbosity >= 1:
--	        result += self.callstack_to_str(indent, callstack)
-+                result += self.callstack_to_str(indent, callstack)
- 
- 
--	return result
-+        return result
- 
- 
-     def callstack_to_str(self, indent, callstack):
-@@ -137,41 +137,41 @@ class AlignmentLog(object):
-         for stack_elem in callstack:
-             result += "\t  %s%s\n" % (indent, str(stack_elem))
-         result += "\t%s]\n" % indent
--	return result
-+        return result
- 
- 
-     def ok_callstack_is_relevant(self, ok_callstack):
-         # determine whether an ok callstack is relevant for logging
--	if self.verbosity >= 2:
--	    return True
-+        if self.verbosity >= 2:
-+            return True
- 
-         # empty callstacks are always relevant
--	if len(ok_callstack) == 0:
-+        if len(ok_callstack) == 0:
-             return True
- 
--	# check whether the ok_callstack is a subset or equal to a fail_callstack
-+        # check whether the ok_callstack is a subset or equal to a fail_callstack
-         for (align_before, field_name, type_obj, fail_callstack, reason) in self.fail_list:
-             if len(ok_callstack) <= len(fail_callstack):
-                 zipped = zip(ok_callstack, fail_callstack[:len(ok_callstack)])
--		is_subset = all([i == j for i, j in zipped])
--		if is_subset:
-+                is_subset = all([i == j for i, j in zipped])
-+                if is_subset:
-                     return True
- 
-         return False
- 
- 
-     def ok(self, align_before, field_name, type_obj, callstack, align_after):
--	self.ok_list.append((align_before, field_name, type_obj, callstack, align_after))
-+        self.ok_list.append((align_before, field_name, type_obj, callstack, align_after))
- 
-     def fail(self, align_before, field_name, type_obj, callstack, reason):
--	self.fail_list.append((align_before, field_name, type_obj, callstack, reason))
-+        self.fail_list.append((align_before, field_name, type_obj, callstack, reason))
- 
-     def append(self, other):
--	self.ok_list.extend(other.ok_list)
--	self.fail_list.extend(other.fail_list)
-+        self.ok_list.extend(other.ok_list)
-+        self.fail_list.extend(other.fail_list)
- 
-     def ok_count(self):
--	return len(self.ok_list)
-+        return len(self.ok_list)
- 
- 
- 
--- 
-2.11.1
-
diff --git a/gnu/packages/pciutils.scm b/gnu/packages/pciutils.scm
index e77aa3f288..d972761586 100644
--- a/gnu/packages/pciutils.scm
+++ b/gnu/packages/pciutils.scm
@@ -72,7 +72,7 @@
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Install the commands, library, and .pc files.
-             (zero? (system* "make" "install" "install-lib")))))
+             (invoke "make" "install" "install-lib"))))
 
        ;; Make sure programs have an RPATH so they can find libpciutils.so.
        #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
diff --git a/gnu/packages/pcre.scm b/gnu/packages/pcre.scm
index ee853d5015..5719b7bb45 100644
--- a/gnu/packages/pcre.scm
+++ b/gnu/packages/pcre.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -75,7 +76,7 @@ POSIX regular expression API.")
 (define-public pcre2
   (package
     (name "pcre2")
-    (version "10.23")
+    (version "10.31")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/pcre/pcre2/"
@@ -83,9 +84,7 @@ POSIX regular expression API.")
 
               (sha256
                (base32
-                "0vn5g0mkkp99mmzpissa06hpyj6pk9s4mlwbjqrjvw3ihy8rpiyz"))
-              (patches (search-patches "pcre2-CVE-2017-7186.patch"
-                                       "pcre2-CVE-2017-8786.patch"))))
+                "1b389pzw91k1hzydsh4smdsxyppwz4pv74m3nrvy8rda0j3m6zg0"))))
    (build-system gnu-build-system)
    (inputs `(("bzip2" ,bzip2)
              ("readline" ,readline)
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index fd494739c3..84f17ad553 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -79,14 +79,14 @@
 (define-public poppler
   (package
    (name "poppler")
-   (version "0.62.0")
+   (version "0.63.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://poppler.freedesktop.org/poppler-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1ii9ly1pngyvs0aiq2wxpya08hidpl54y7nsb8b1vxnnskgp76jv"))))
+              "04d1z1ygyb3llzc6s6c99wxafvljj2sc5b76djif34f7mzfqmk17"))))
    (build-system cmake-build-system)
    ;; FIXME:
    ;;  use libcurl:        no
@@ -659,12 +659,14 @@ line tools for batch rendering @command{pdfdraw}, rewriting files
             (snippet
              ;; Replace shebang with the bi-lingual shell/Perl trick to remove
              ;; dependency on Perl.
-             '(substitute* "qpdf/fix-qdf"
-                (("#!/usr/bin/env perl")
-                 "\
+             '(begin
+                (substitute* "qpdf/fix-qdf"
+                  (("#!/usr/bin/env perl")
+                   "\
 eval '(exit $?0)' && eval 'exec perl -wS \"$0\" ${1+\"$@\"}'
   & eval 'exec perl -wS \"$0\" $argv:q'
-    if 0;\n")))))
+    if 0;\n"))
+                #t))))
    (build-system gnu-build-system)
    (arguments
     `(#:disallowed-references (,perl)
@@ -678,7 +680,8 @@ eval '(exit $?0)' && eval 'exec perl -wS \"$0\" ${1+\"$@\"}'
             (substitute* (append
                           '("qtest/bin/qtest-driver")
                           (find-files "." "\\.test"))
-              (("/usr/bin/env") (which "env"))))))))
+              (("/usr/bin/env") (which "env")))
+            #t)))))
    (native-inputs
     `(("pkg-config" ,pkg-config)
       ("perl" ,perl)))
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index f6c8f7dbcd..b810037ee1 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
-;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2016, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
@@ -111,7 +111,7 @@
          (replace 'configure
            (lambda* (#:key configure-flags #:allow-other-keys)
              (format #t "Perl configure flags: ~s~%" configure-flags)
-             (zero? (apply system* "./Configure" configure-flags))))
+             (apply invoke "./Configure" configure-flags)))
          (add-before
           'strip 'make-shared-objects-writable
           (lambda* (#:key outputs #:allow-other-keys)
@@ -121,7 +121,8 @@
                    (lib (string-append out "/lib")))
               (for-each (lambda (dso)
                           (chmod dso #o755))
-                        (find-files lib "\\.so$")))))
+                        (find-files lib "\\.so$"))
+              #t)))
 
          (add-after 'install 'remove-extra-references
            (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -7838,7 +7839,8 @@ TODO: {
     local $TODO = \"/proc/cpuinfo doesn't always report 'model name' or 'machine' ...\";
     $type = &Sys::CPU::cpu_type();
     ok( defined($type), \"CPU Type:  $type\" );
-}~%")))))))
+}~%")))
+                  #t))))
     (build-system perl-build-system)
     (synopsis "Perl extension for getting CPU information")
     (description
diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm
index ca0ea4a384..90e6ab1c1c 100644
--- a/gnu/packages/php.scm
+++ b/gnu/packages/php.scm
@@ -86,7 +86,8 @@
                               "pcre/pcrelib"
                               "sqlite3/libsqlite"
                               "xmlrpc/libxmlrpc"
-                              "zip/lib"))))))
+                              "zip/lib"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
diff --git a/gnu/packages/pkg-config.scm b/gnu/packages/pkg-config.scm
index 12f17f1e3c..6fc19a975d 100644
--- a/gnu/packages/pkg-config.scm
+++ b/gnu/packages/pkg-config.scm
@@ -96,7 +96,8 @@ instance.")))
                      ;; expect it.
                      (mkdir-p (string-append out "/share"))
                      (symlink (string-append in "/share/aclocal")
-                              (string-append out "/share/aclocal"))))))
+                              (string-append out "/share/aclocal"))
+                     #t))))
     (native-inputs `(("pkg-config" ,%pkg-config)))
 
     ;; Ignore native inputs, and set `PKG_CONFIG_PATH' for target inputs.
diff --git a/gnu/packages/plotutils.scm b/gnu/packages/plotutils.scm
index 0dcd6f7b88..4eb68c0270 100644
--- a/gnu/packages/plotutils.scm
+++ b/gnu/packages/plotutils.scm
@@ -61,9 +61,11 @@
               ;; that, libplot.la ends up containing just "-lXaw" (without
               ;; "-L/path/to/Xaw"), due to the fact that there is no
               ;; libXaw.la, which forces us to propagate libXaw.
-              '(substitute* "configure"
-                 (("-lXaw")
-                  "-lXaw7")))))
+              '(begin
+                 (substitute* "configure"
+                   (("-lXaw")
+                    "-lXaw7"))
+                 #t))))
     (build-system gnu-build-system)
     (inputs `(("libpng" ,libpng)
               ("libx11" ,libx11)
@@ -98,7 +100,8 @@ scientific data.")
                   ;; Use the standard location for modules.
                   (substitute* "Makefile.in"
                     (("godir = .*$")
-                     "godir = $(moddir)\n"))))))
+                     "godir = $(moddir)\n"))
+                  #t))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("guile" ,guile-2.2)))
@@ -124,9 +127,11 @@ using the Cairo drawing library.")
               (modules '((guix build utils)))
               (snippet
                ;; Install binaries in the right place.
-               '(substitute* "src/Makefile"
-                  (("INSTALLBIN =.*$")
-                   (string-append "INSTALLBIN = $(out)/bin"))))))
+               '(begin
+                  (substitute* "src/Makefile"
+                    (("INSTALLBIN =.*$")
+                     (string-append "INSTALLBIN = $(out)/bin")))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f
diff --git a/gnu/packages/pretty-print.scm b/gnu/packages/pretty-print.scm
index cc3431b674..ad429854a2 100644
--- a/gnu/packages/pretty-print.scm
+++ b/gnu/packages/pretty-print.scm
@@ -55,9 +55,11 @@
               (modules '((guix build utils)))
               (snippet
                ;; Remove timestamp from the installed 'README' file.
-               '(substitute* "etc/README.in"
-                  (("@date@")
-                   "1st of some month, sometime after 1970")))
+               '(begin
+                  (substitute* "etc/README.in"
+                    (("@date@")
+                     "1st of some month, sometime after 1970"))
+                  #t))
               (patches (search-patches
                         "a2ps-CVE-2001-1593.patch"
                         "a2ps-CVE-2014-0466.patch"))))
diff --git a/gnu/packages/profiling.scm b/gnu/packages/profiling.scm
index d6f3aede28..b2def45ccf 100644
--- a/gnu/packages/profiling.scm
+++ b/gnu/packages/profiling.scm
@@ -350,8 +350,10 @@ different kinds of performance behavior.")
               (modules '((guix build utils)))
               (snippet
                ;; Remove bundled software.
-               '(for-each delete-file-recursively
-                          '("vendor/opari2" "vendor/cube")))))
+               '(begin
+                  (for-each delete-file-recursively
+                            '("vendor/opari2" "vendor/cube"))
+                  #t))))
     (build-system gnu-build-system)
     (inputs
      `(("mpi" ,mpi)
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index 43816e09f8..bac92eafa9 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -135,10 +135,13 @@ rates.")
              (snippet
               ;; Disable console-kit support by default since it's deprecated
               ;; anyway.
-              '(substitute* "src/daemon/default.pa.in"
-                 (("load-module module-console-kit" all)
-                  (string-append "#" all "\n"))))
+              '(begin
+                 (substitute* "src/daemon/default.pa.in"
+                   (("load-module module-console-kit" all)
+                    (string-append "#" all "\n")))
+                 #t))
              (patches (search-patches
+                       "pulseaudio-glibc-2.27.patch"
                        "pulseaudio-fix-mult-test.patch"
                        "pulseaudio-longer-test-timeout.patch"))))
     (build-system gnu-build-system)
@@ -150,6 +153,13 @@ rates.")
                                               (assoc-ref %outputs "out")
                                               "/lib/udev/rules.d"))
        #:phases (modify-phases %standard-phases
+                 (replace 'bootstrap
+                   ;; TODO: Remove this custom bootstrap phase when
+                   ;; pulseaudio-glibc-2.27.patch is removed.
+                   (lambda _
+                     (patch-shebang "git-version-gen")
+                     (setenv "NOCONFIGURE" "1")
+                     (invoke "bash" "bootstrap.sh")))
                  (add-before 'check 'pre-check
                    (lambda _
                      ;; 'tests/lock-autospawn-test.c' wants to create a file
@@ -177,7 +187,12 @@ rates.")
        ("eudev" ,eudev)           ;for the detection of hardware audio devices
        ("check" ,check)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ;; TODO: Remove "autoconf", "automake", and "libtool" from
+       ;; native-inputs when pulseaudio-glibc-2.27.patch is removed.
+       ("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
     (propagated-inputs
      ;; 'libpulse*.la' contain `-lgdbm' and `-lcap', so propagate them.
      `(("libcap" ,libcap)
diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index 40172bbfe3..b7cd51e868 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -614,7 +614,8 @@ PKCS#8, PKCS#12, PKCS#5, X.509 and TSP.")
        (uri (pypi-uri "PyNaCl" version))
        (modules '((guix build utils)))
        ;; Remove bundled libsodium
-       (snippet '(delete-file-recursively "src/libsodium"))
+       (snippet '(begin (delete-file-recursively "src/libsodium")
+                        #t))
        (sha256
         (base32
          "01vjq0pxyw1mxaqy013hzs8nknmvg3kpzlzmh69jxznyipgvria5"))))
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 39a367aec8..86ddb4c6df 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -30,7 +30,7 @@
 ;;; Copyright © 2016, 2017 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016, 2017 Alex Vong <alexvong1995@gmail.com>
-;;; Copyright © 2016, 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2016, 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
@@ -142,7 +142,7 @@
 
 (define-public python-2.7
   (package
-    (name "python")
+    (name "python2")
     (version "2.7.14")
     (source
      (origin
@@ -342,7 +342,8 @@ data types.")
 
 (define-public python-3.6
   (package (inherit python-2)
-    (version "3.6.3")
+    (name "python")
+    (version "3.6.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
@@ -355,7 +356,7 @@ data types.")
               (patch-flags '("-p0"))
               (sha256
                (base32
-                "1nl1raaagr4car787a2hmjv2dw6gqny53xfd6wisbgx4r5kxk9yd"))
+                "19l7inxm056jjw33zz97z0m02hsi7jnnx5kyb76abj5ml4xhad7l"))
               (snippet
                '(begin
                   (for-each delete-file
@@ -363,8 +364,75 @@ data types.")
                               "Lib/ctypes/test/test_win32.py" ; fails on aarch64
                               "Lib/test/test_fcntl.py")) ; fails on aarch64
                   #t))))
-    (arguments (substitute-keyword-arguments (package-arguments python-2)
-                 ((#:tests? _) #t)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments python-2)
+       ((#:tests? _) #t)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'unpack 'patch-timestamp-for-pyc-files
+             (lambda _
+               ;; We set DETERMINISTIC_BUILD to only override the mtime when
+               ;; building with Guix, lest we break auto-compilation in
+               ;; environments.
+               (setenv "DETERMINISTIC_BUILD" "1")
+               (substitute* "Lib/py_compile.py"
+                 (("source_stats\\['mtime'\\]")
+                  "(1 if 'DETERMINISTIC_BUILD' in os.environ else source_stats['mtime'])"))
+
+               ;; Use deterministic hashes for strings, bytes, and datetime
+               ;; objects.
+               (setenv "PYTHONHASHSEED" "0")
+
+               ;; Reset mtime when validating bytecode header.
+               (substitute* "Lib/importlib/_bootstrap_external.py"
+                 (("source_mtime = int\\(source_stats\\['mtime'\\]\\)")
+                  "source_mtime = 1"))
+               #t))
+           ;; These tests fail because of our change to the bytecode
+           ;; validation.  They fail because expected exceptions do not get
+           ;; thrown.  This seems to be no problem.
+           (add-after 'unpack 'disable-broken-bytecode-tests
+             (lambda _
+               (substitute* "Lib/test/test_importlib/source/test_file_loader.py"
+                 (("test_bad_marshal")
+                  "disable_test_bad_marshal")
+                 (("test_no_marshal")
+                  "disable_test_no_marshal")
+                 (("test_non_code_marshal")
+                  "disable_test_non_code_marshal"))
+               #t))
+           ;; Unset DETERMINISTIC_BUILD to allow for tests that check that
+           ;; stale pyc files are rebuilt.
+           (add-before 'check 'allow-non-deterministic-compilation
+             (lambda _ (unsetenv "DETERMINISTIC_BUILD") #t))
+           ;; We need to rebuild all pyc files for three different
+           ;; optimization levels to replace all files that were not built
+           ;; deterministically.
+
+           ;; FIXME: Without this phase we have close to 2000 files that
+           ;; differ across different builds of this package.  With this phase
+           ;; there are about 500 files left that differ.
+           (add-after 'install 'rebuild-bytecode
+             (lambda* (#:key outputs #:allow-other-keys)
+               (setenv "DETERMINISTIC_BUILD" "1")
+               (let ((out (assoc-ref outputs "out")))
+                 (for-each
+                  (lambda (opt)
+                    (format #t "Compiling with optimization level: ~a\n"
+                            (if (null? opt) "none" (car opt)))
+                    (for-each (lambda (file)
+                                (apply invoke
+                                       `(,(string-append out "/bin/python3")
+                                         ,@opt
+                                         "-m" "compileall"
+                                         "-f" ; force rebuild
+                                         ;; Don't build lib2to3, because it's Python 2 code.
+                                         ;; Also don't build obviously broken test code.
+                                         "-x" "(lib2to3|test/bad.*)"
+                                         ,file)))
+                              (find-files out "\\.py$")))
+                  (list '() '("-O") '("-OO")))
+                 #t)))))))
     (native-search-paths
      (list (search-path-specification
             (variable "PYTHONPATH")
@@ -383,7 +451,7 @@ data types.")
 
 (define-public python2-minimal
   (package (inherit python-2)
-    (name "python-minimal")
+    (name "python2-minimal")
     (outputs '("out"))
 
     ;; Keep zlib, which is used by 'pip' (via the 'zipimport' module), which
@@ -1075,7 +1143,7 @@ from the Python interpreter, or as a small part of a larger application.")
        (modify-phases %standard-phases
          (replace 'check
            (lambda _
-             (zero? (system* "py.test" "-v")))))))
+             (invoke "py.test" "-v"))))))
     (native-inputs
      `(("python-py" ,python-py)
        ("python-pytest" ,python-pytest-bootstrap)))
@@ -1092,6 +1160,16 @@ Python file, so it can be easily copied into your project.")
 (define-public python2-six
   (package-with-python2 python-six))
 
+(define-public python-six-bootstrap
+  (package
+    (inherit python-six)
+    (name "python-six-bootstrap")
+    (native-inputs `())
+    (arguments `(#:tests? #f))))
+
+(define-public python2-six-bootstrap
+  (package-with-python2 python-six-bootstrap))
+
 (define-public python-schedule
   (package
     (name "python-schedule")
@@ -1646,6 +1724,15 @@ matching them against a list of media-ranges.")
      "Backport of @code{funcsigs} which was introduced in Python 3.3.")
     (license license:asl2.0)))
 
+(define-public python2-funcsigs-bootstrap
+  (package
+    (inherit python2-funcsigs)
+    (name "python2-funcsigs-bootstrap")
+    (native-inputs `())
+    (arguments
+     `(#:tests? #f
+       ,@(package-arguments python2-funcsigs)))))
+
 (define-public python-pafy
   (package
     (name "python-pafy")
@@ -1673,14 +1760,14 @@ matching them against a list of media-ranges.")
 (define-public python-py
   (package
     (name "python-py")
-    (version "1.4.34")
+    (version "1.5.3")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "py" version))
        (sha256
         (base32
-         "1qyd5z0hv8ymxy84v5vig3vps2fvhcf4bdlksb3r03h549fmhb8g"))))
+         "10gq2lckvgwlk9w6yzijhzkarx44hsaknd0ypa08wlnpjnsgmj99"))))
     (build-system python-build-system)
     (arguments
      ;; FIXME: "ImportError: 'test' module incorrectly imported from
@@ -1688,7 +1775,7 @@ matching them against a list of media-ranges.")
      ;; Expected '/tmp/guix-build-python-py-1.4.31.drv-0/py-1.4.31/py'.
      ;; Is this module globally installed?"
      '(#:tests? #f))
-    (home-page "http://pylib.readthedocs.org/")
+    (home-page "http://pylib.readthedocs.io/")
     (synopsis "Python library for parsing, I/O, instrospection, and logging")
     (description
      "Py is a Python library for file name parsing, .ini file parsing, I/O,
@@ -3263,7 +3350,8 @@ that client code uses to construct the grammar directly in Python code.")
            ;; input since it would create a circular dependency: Extend the
            ;; test for Python 3, where it is already dropped, to Python 2.
            (substitute* "numpydoc/tests/test_plot_directive.py"
-             (("3") "2"))))))
+             (("3") "2"))
+           #t))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-sphinx" ,python-sphinx)))
@@ -5371,13 +5459,14 @@ so it might be a tiny bit slower.")
        (modify-phases %standard-phases
          (replace 'build
            (lambda _
-             (zero? (system* "python" "waf-light" "configure" "build"))))
+             (invoke "python" "waf-light" "configure" "build")))
          (replace 'check
            (lambda _
-             (zero? (system* "python" "waf" "--version"))))
+             (invoke "python" "waf" "--version")))
          (replace 'install
            (lambda _
-             (copy-file "waf" %output))))))
+             (copy-file "waf" %output)
+             #t)))))
     (home-page "https://waf.io/")
     (synopsis "Python-based build system")
     (description
@@ -6184,14 +6273,14 @@ designed to efficiently cope with extremely large amounts of data.")
 (define-public python-pyasn1
   (package
     (name "python-pyasn1")
-    (version "0.2.3")
+    (version "0.4.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pyasn1" version))
        (sha256
         (base32
-         "1b86yx23c1x74clai05a5ma8c8nfmhlx3j1mxq0ff657i2ylx33k"))))
+         "05bxnr4wmrg62m4qr1pg1p3z7bhwrv74jll3k42pgxwl36kv0n6j"))))
     (build-system python-build-system)
     (home-page "http://pyasn1.sourceforge.net/")
     (synopsis "ASN.1 types and codecs")
@@ -7577,14 +7666,14 @@ library as well as on the command line.")
 (define-public python-pluggy
   (package
    (name "python-pluggy")
-   (version "0.3.1")
+   (version "0.6.0")
    (source
     (origin
      (method url-fetch)
      (uri (pypi-uri "pluggy" version))
      (sha256
       (base32
-       "18qfzfm40bgx672lkg8q9x5hdh76n7vax99aank7vh2nw21wg70m"))))
+       "1zqckndfn85l1cd8pndw212zg1bq9fkg1nnj32kp2mppppsyg2kz"))))
    (build-system python-build-system)
    (synopsis "Plugin and hook calling mechanism for Python")
    (description "Pluggy is an extraction of the plugin manager as used by
@@ -10778,13 +10867,12 @@ and bit flag values.")
   (package
     (name "python-attrs")
     (version "17.4.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (pypi-uri "attrs" version))
-       (sha256
-        (base32
-         "1jafnn1kzd6qhxgprhx6y6ik1r5m2rilx25syzcmq03azp660y8w"))))
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "attrs" version))
+              (sha256
+               (base32
+                "1jafnn1kzd6qhxgprhx6y6ik1r5m2rilx25syzcmq03azp660y8w"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-coverage" ,python-coverage)
@@ -10803,6 +10891,16 @@ protocols.")
 (define-public python2-attrs
   (package-with-python2 python-attrs))
 
+(define-public python-attrs-bootstrap
+  (package
+    (inherit python-attrs)
+    (name "python-attrs-bootstrap")
+    (native-inputs `())
+    (arguments `(#:tests? #f))))
+
+(define-public python2-attrs-bootstrap
+  (package-with-python2 python-attrs-bootstrap))
+
 (define-public python2-cliapp
   (package
     (name "python2-cliapp")
@@ -13177,6 +13275,31 @@ file system events on Linux.")
          "0svc9nla3b9145d6b7fb9dizx412l3difzqw0ilh9lz52nsixw8j"))
        (file-name (string-append name "-" version ".tar.gz"))))))
 
+(define-public python-more-itertools
+  (package
+    (name "python-more-itertools")
+    (version "4.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "more-itertools" version))
+       (sha256
+        (base32
+         "0i3ch700g5fyjp692gprlnzbysl8w0sa2vijbp3s40drvk67xkn9"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six-bootstrap)))
+    (home-page "https://github.com/erikrose/more-itertools")
+    (synopsis "More routines for operating on iterables, beyond itertools")
+    (description "Python's built-in @code{itertools} module implements a
+number of iterator building blocks inspired by constructs from APL, Haskell,
+and SML.  @code{more-itertools} includes additional building blocks for
+working with iterables.")
+    (license license:expat)))
+
+(define-public python2-more-itertools
+  (package-with-python2 python-more-itertools))
+
 (define-public python-latexcodec
   (package
     (name "python-latexcodec")
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index c3d0bff2f1..309fcc46ca 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Quiliro <quiliro@fsfla.org>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
@@ -145,7 +145,8 @@ system, and the core design of Django is reused in Grantlee.")
                         "qtcanvas3d/examples/canvas3d/3rdparty"))
                 ;; Tests depend on this example, which depends on the 3rd party code.
                 (substitute* "qtmultimedia/examples/multimedia/multimedia.pro"
-                  (("spectrum") "#"))))))
+                  (("spectrum") "#"))
+                #t))))
     (build-system gnu-build-system)
     (propagated-inputs
      `(("mesa" ,mesa)))
@@ -185,7 +186,7 @@ system, and the core design of Django is reused in Grantlee.")
        ("libxslt" ,libxslt)
        ("libxtst" ,libxtst)
        ("mtdev" ,mtdev)
-       ("mysql" ,mysql)
+       ("mariadb" ,mariadb)
        ("nss" ,nss)
        ("openssl" ,openssl)
        ("postgresql" ,postgresql)
@@ -287,7 +288,8 @@ developers using C++ or QML, a CSS & JavaScript like language.")
              (modules '((guix build utils)))
              (snippet
               ;; Remove webkit module, which is not built.
-              '(delete-file-recursively "src/3rdparty/webkit"))))
+              '(begin (delete-file-recursively "src/3rdparty/webkit")
+                      #t))))
     (inputs `(,@(alist-delete "harfbuzz"
                               (alist-delete "libjpeg" (package-inputs qt)))
               ("libjepg" ,libjpeg-8)
@@ -426,7 +428,7 @@ developers using C++ or QML, a CSS & JavaScript like language.")
        ("libxslt" ,libxslt)
        ("libxtst" ,libxtst)
        ("mtdev" ,mtdev)
-       ("mysql" ,mysql)
+       ("mariadb" ,mariadb)
        ("nss" ,nss)
        ("openssl" ,openssl)
        ("pcre2" ,pcre2)
@@ -1810,7 +1812,8 @@ This package provides the Python bindings.")))
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs
      `(("python-pyqt" ,python-pyqt)
        ("python-qscintilla" ,python-qscintilla)))
diff --git a/gnu/packages/ratpoison.scm b/gnu/packages/ratpoison.scm
index 19321872c5..fefde982bc 100644
--- a/gnu/packages/ratpoison.scm
+++ b/gnu/packages/ratpoison.scm
@@ -64,10 +64,10 @@
                                                 "/share/xsessions/")))
                         (mkdir-p dst)
                         (copy-file (assoc-ref inputs rpd)
-                                   (string-append dst rpd))))))))
+                                   (string-append dst rpd))
+                        #t))))))
     (inputs
-     `(("inputproto" ,inputproto)
-       ("fontconfig" ,fontconfig)
+     `(("fontconfig" ,fontconfig)
        ("freetype" ,freetype)
        ("libXft" ,libxft)
        ("libXi" ,libxi)
@@ -77,7 +77,7 @@
        ("libXtst" ,libxtst)
        ("libX11" ,libx11)
        ("readline" ,readline)
-       ("xextproto" ,xextproto)))
+       ("xorgproto" ,xorgproto)))
     (native-inputs
      `(("perl" ,perl)
        ("pkg-config" ,pkg-config)
diff --git a/gnu/packages/rdf.scm b/gnu/packages/rdf.scm
index 249bf3094f..973fef72f0 100644
--- a/gnu/packages/rdf.scm
+++ b/gnu/packages/rdf.scm
@@ -248,7 +248,8 @@ and triple stores.")
           (lambda* (#:key outputs #:allow-other-keys)
             (setenv "LDFLAGS"
                     (string-append "-Wl,-rpath="
-                                   (assoc-ref outputs "out") "/lib")))))))
+                                   (assoc-ref outputs "out") "/lib"))
+            #t)))))
     (home-page "http://drobilla.net/software/serd/")
     (synopsis "Library for RDF syntax supporting Turtle and NTriples")
     (description
@@ -281,7 +282,8 @@ ideal (e.g. in LV2 implementations or embedded applications).")
           (lambda* (#:key outputs #:allow-other-keys)
             (setenv "LDFLAGS"
                     (string-append "-Wl,-rpath="
-                                   (assoc-ref outputs "out") "/lib")))))))
+                                   (assoc-ref outputs "out") "/lib"))
+            #t)))))
     (inputs
      `(("serd" ,serd)))
     (native-inputs
diff --git a/gnu/packages/robotics.scm b/gnu/packages/robotics.scm
index 9b30b90da2..389bb5a028 100644
--- a/gnu/packages/robotics.scm
+++ b/gnu/packages/robotics.scm
@@ -91,10 +91,12 @@ hundred times faster than real-time.")
                 (modules '((guix build utils)))
                 (snippet
                  ;; Add missing Qt5::Network.
-                 '(substitute* "targets/playground/CMakeLists.txt"
-                    (("target_link_libraries(.*)\\$\\{EXTRA_LIBS\\}" _ middle)
-                     (string-append "target_link_libraries" middle
-                                    " Qt5::Network ${EXTRA_LIBS}"))))))
+                 '(begin
+                    (substitute* "targets/playground/CMakeLists.txt"
+                      (("target_link_libraries(.*)\\$\\{EXTRA_LIBS\\}" _ middle)
+                       (string-append "target_link_libraries" middle
+                                      " Qt5::Network ${EXTRA_LIBS}")))
+                    #t))))
       (build-system cmake-build-system)
       (arguments
        '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")))
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 2f69fab690..37576ee9f6 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -112,7 +112,8 @@ the Linux kernel CIFS client.")
            (lambda* (#:key outputs #:allow-other-keys)
              (substitute* '("Makefile" "test/Makefile")
                (("/usr/lib")
-                (string-append (assoc-ref outputs "out") "/lib")))))
+                (string-append (assoc-ref outputs "out") "/lib")))
+             #t))
          (replace 'build
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "make" "libiniparser.so.1"
@@ -136,7 +137,8 @@ the Linux kernel CIFS client.")
                (for-each (install html)
                          (find-files "html" ".*"))
                (for-each (install doc)
-                         '("AUTHORS" "INSTALL" "LICENSE" "README.md"))))))))
+                         '("AUTHORS" "INSTALL" "LICENSE" "README.md"))
+               #t))))))
     (home-page "https://github.com/ndevilla/iniparser")
     (synopsis "Standalone ini file parsing library")
     (description
diff --git a/gnu/packages/sawfish.scm b/gnu/packages/sawfish.scm
index ede725877d..8795d8d9fb 100644
--- a/gnu/packages/sawfish.scm
+++ b/gnu/packages/sawfish.scm
@@ -47,13 +47,6 @@
                (base32
                 "1bmcjl1x1rdh514q9z3hzyjmjmwwwkziipjpjsl301bwmiwrd8a8"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
-                    (lambda _
-                      ;; The 0.92.6 tarball was not produced by 'make dist'
-                      ;; and lacks generated files.  Sadness.
-                      (zero? (system* "autoreconf" "-vfi")))))))
     (native-inputs
      `(("makeinfo"   ,texinfo)
        ("pkg-config" ,pkg-config)
@@ -94,10 +87,12 @@ implementing both small and large scale systems.")
                 "0qslm2isyv22hffdpw0nh7xk8jw8cj3h5y7d40c9h5r833w7j6sz"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "Makefile.in"
-                  (("installdir=\\$\\(repexecdir\\)")
-                   ;; Install libraries for librep to $out/lib/rep.
-                   "installdir=$(libdir)/rep")))))
+               '(begin
+                  (substitute* "Makefile.in"
+                    (("installdir=\\$\\(repexecdir\\)")
+                     ;; Install libraries for librep to $out/lib/rep.
+                     "installdir=$(libdir)/rep"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments '(#:tests? #f)) ; no tests
     (native-inputs
@@ -134,7 +129,8 @@ backend of Sawfish.")
                      "REP_DL_LOAD_PATH=$(REP_DL_LOAD_PATH):"))
                   (substitute* "src/Makefile.in"
                     ;; Install libraries for librep to $out/lib/rep.
-                    (("\\$\\(repexecdir\\)") "$(libdir)/rep"))))))
+                    (("\\$\\(repexecdir\\)") "$(libdir)/rep"))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
diff --git a/gnu/packages/scanner.scm b/gnu/packages/scanner.scm
index f44f037efb..33a573d531 100644
--- a/gnu/packages/scanner.scm
+++ b/gnu/packages/scanner.scm
@@ -45,9 +45,11 @@
              (snippet
               ;; Generated HTML files and udev rules normally embed a
               ;; timestamp.  Work around that to build things reproducibly.
-              '(substitute* "tools/sane-desc.c"
-                 (("asctime \\(localtime \\(&current_time\\)\\)")
-                  "\"1970-01-01\"")))))
+              '(begin
+                 (substitute* "tools/sane-desc.c"
+                   (("asctime \\(localtime \\(&current_time\\)\\)")
+                    "\"1970-01-01\""))
+                 #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -81,7 +83,8 @@
                (copy-file "tools/udev/libsane.rules"
                           (string-append out
                                          "/lib/udev/rules.d/"
-                                         "60-libsane.rules"))))))))
+                                         "60-libsane.rules"))
+               #t))))))
     (home-page "http://www.sane-project.org")
     (synopsis
      "Raster image scanner library and drivers, without scanner support")
diff --git a/gnu/packages/scheme.scm b/gnu/packages/scheme.scm
index daa46f7101..dba5067e9e 100644
--- a/gnu/packages/scheme.scm
+++ b/gnu/packages/scheme.scm
@@ -212,8 +212,10 @@ features an integrated Emacs-like editor and a large runtime library.")
              ;; Remove bundled libraries.
              (modules '((guix build utils)))
              (snippet
-              '(for-each delete-file-recursively
-                         '("gc" "gmp" "libuv")))))
+              '(begin
+                 (for-each delete-file-recursively
+                           '("gc" "gmp" "libuv"))
+                 #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -613,9 +615,10 @@ threads.")
        (origin
          (method url-fetch/tarbomb)
          (modules '((guix build utils)))
-         (snippet
-          ;; Remove binary code
-          '(delete-file-recursively "scmutils/mit-scheme"))
+         (snippet '(begin
+                     ;; Remove binary code
+                     (delete-file-recursively "scmutils/mit-scheme")
+                     #t))
          (uri (string-append "http://groups.csail.mit.edu/mac/users/gjs/6946"
                              "/scmutils-tarballs/" name "-" version
                              "-x86-64-gnu-linux.tar.gz"))
@@ -803,13 +806,12 @@ engineering.")
              (setenv "PATH" (string-append gzip "/bin"
                                            ":" texinfo "/bin"))
              (mkdir-p info-dir)
-             (and (zero?
-                   (system* "makeinfo" "--output"
-                            (string-append info-dir "/sicp.info")
-                            (string-append source "/sicp-pocket.texi")))
-                  (every zero?
-                         (map (cut system* "gzip" "-9n" <>)
-                              (find-files info-dir))))))))
+             (invoke "makeinfo" "--output"
+                     (string-append info-dir "/sicp.info")
+                     (string-append source "/sicp-pocket.texi"))
+             (for-each (cut invoke "gzip" "-9n" <>)
+                       (find-files info-dir))
+             #t))))
       (home-page "https://sarabander.github.io/sicp")
       (synopsis "Structure and Interpretation of Computer Programs")
       (description "Structure and Interpretation of Computer Programs (SICP) is
@@ -848,7 +850,8 @@ metalinguistic abstraction, recursion, interpreters, and modular programming.")
                                        "/rx")))
              (chdir (assoc-ref %build-inputs "source"))
              (mkdir-p share)
-             (copy-recursively "." share)))))
+             (copy-recursively "." share)
+             #t))))
       (native-inputs
        `(("source" ,source)
          ("scheme48" ,scheme48)))
diff --git a/gnu/packages/screen.scm b/gnu/packages/screen.scm
index 5622d37877..940afcc2d5 100644
--- a/gnu/packages/screen.scm
+++ b/gnu/packages/screen.scm
@@ -87,7 +87,8 @@ view to show two terminals at once.")
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (install-file "dtach" (string-append out "/bin"))
-               (install-file "dtach.1" (string-append out "/share/man/man1"))))))
+               (install-file "dtach.1" (string-append out "/share/man/man1"))
+               #t))))
        ;; No check target.
        #:tests? #f))
     (home-page "http://dtach.sourceforge.net/")
@@ -124,7 +125,8 @@ controlling terminal and attach to it later.")
           (lambda* (#:key inputs #:allow-other-keys)
             (let ((libc   (assoc-ref inputs "libc"))) ;implicit input
               (substitute* "usr/bin/byobu.in"
-                (("locale") (string-append libc "/bin/locale"))))))
+                (("locale") (string-append libc "/bin/locale")))
+              #t)))
          (add-after
           'install 'wrap-python-scripts
           (lambda* (#:key inputs outputs #:allow-other-keys)
diff --git a/gnu/packages/scribus.scm b/gnu/packages/scribus.scm
index 860d346778..6cf382e0bb 100644
--- a/gnu/packages/scribus.scm
+++ b/gnu/packages/scribus.scm
@@ -75,8 +75,10 @@
        (snippet
         ;; Fix typo.  Equivalent to patch at
         ;; https://bugs.scribus.net/view.php?id=14850
-        '(substitute* "cmake/modules/FindLIBPODOFO.cmake"
-           (("find_package\\(OPENSSL\\)") "find_package(OpenSSL)")))))
+        '(begin
+           (substitute* "cmake/modules/FindLIBPODOFO.cmake"
+             (("find_package\\(OPENSSL\\)") "find_package(OpenSSL)"))
+           #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f                      ;no test target
diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index 7ed4e5ca6e..43cf2795dd 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -324,7 +324,8 @@ If PACKAGES are not specified, all SDL packages are used."
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs (map (lambda (package)
                    (list (package-name package) package))
                  packages))
@@ -369,9 +370,10 @@ directory.")
                (string-append "http://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-"
                               version ".tar.gz"))
               (modules '((guix build utils)))
-              (snippet
-               ;; Remove bundled libraries.
-               '(delete-file-recursively "external"))
+              (snippet '(begin
+                          ;; Remove bundled libraries.
+                          (delete-file-recursively "external")
+                          #t))
               (sha256
                (base32
                 "1fw3kkqi5346ai5if4pxrcbhs5c4vv3a4smgz6fl6kyaxwkmwqaf"))))
@@ -388,9 +390,10 @@ directory.")
               (string-append "https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-"
                              version ".tar.gz"))
              (modules '((guix build utils)))
-             (snippet
-              ;; Remove bundled libraries.
-              '(delete-file-recursively "external"))
+             (snippet (begin
+                        ;; Remove bundled libraries.
+                        '(delete-file-recursively "external")
+                        #t))
              (sha256
               (base32
                "0xljwcpvd2knrjdfag5b257xqayplz55mqlszrqp0kpnphh5xnrl"))))
diff --git a/gnu/packages/selinux.scm b/gnu/packages/selinux.scm
index 3db1b458c7..9562123bda 100644
--- a/gnu/packages/selinux.scm
+++ b/gnu/packages/selinux.scm
@@ -157,10 +157,10 @@ module into a binary representation.")
                #t))
            (add-after 'build 'pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
-               (zero? (apply system* "make" "pywrap" make-flags))))
+               (apply invoke "make" "pywrap" make-flags)))
            (add-after 'install 'install-pywrap
              (lambda* (#:key make-flags #:allow-other-keys)
-               (zero? (apply system* "make" "install-pywrap" make-flags))))))))
+               (apply invoke "make" "install-pywrap" make-flags)))))))
     ;; These libraries are in "Requires.private" in libselinux.pc.
     (propagated-inputs
      `(("libsepol" ,libsepol)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index d46c8698f4..3064e385e2 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -113,10 +113,10 @@ such as compact binary encodings, XML, or JSON.")
          "cpp-" version "/msgpack-" version ".tar.gz"))
        (snippet
         '(let ((p (open-file "msgpack.pc.in" "a")))
-           (begin
-             (display
-              (string-append "Requires: " "zlib" "\n") p)
-             (close-output-port p))))
+           (display
+            (string-append "Requires: " "zlib" "\n") p)
+           (close-output-port p)
+           #t))
        (sha256
         (base32
          "18hzmyfg3mvnp7ab03nqdzzvqagkl42gygjpi4zv4i7aca2dmwf0"))))
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index 0446bf95ba..bbf44e246c 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -103,9 +103,10 @@ direct descendant of NetBSD's Almquist Shell (@command{ash}).")
                 "0nhc3yc5lnnan7zmxqqxm07rdpwjww5ijy45ll2njdc6fnfb2az4"))
               (modules '((guix build utils)))
               ;; Don't try to install /etc/fish/config.fish.
-              (snippet
-               '(substitute* "Makefile.in"
-                  ((".*INSTALL.*sysconfdir.*fish.*") "")))))
+              (snippet '(begin
+                          (substitute* "Makefile.in"
+                            ((".*INSTALL.*sysconfdir.*fish.*") ""))
+                          #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("doxygen" ,doxygen)))
@@ -264,7 +265,7 @@ written by Paul Haahr and Byron Rakitzis.")
               (substitute* "tests/syntax.at"
                 (("; other_script.csh") "; /bin/sh other_script.csh"))
               ;; Now, let's generate the test suite and patch it
-              (system* "make" "tests/testsuite")
+              (invoke "make" "tests/testsuite")
 
               ;; This file is ISO-8859-1 encoded.
               (with-fluids ((%default-port-encoding #f))
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index abc00c1a89..f9956d0113 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -51,7 +51,8 @@
                   (substitute* "src/Makefile.in"
                     (("/bin/ln") "ln"))
                   (substitute* "configure"
-                    (("-ltermcap") ""))))))
+                    (("-ltermcap") ""))
+                  #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:parallel-tests? #f
diff --git a/gnu/packages/smalltalk.scm b/gnu/packages/smalltalk.scm
index a0d6c86dff..c0c53a5291 100644
--- a/gnu/packages/smalltalk.scm
+++ b/gnu/packages/smalltalk.scm
@@ -100,7 +100,8 @@ such as ones for networking and GUI programming.")
               "ux_version = \"GNU\";\n"))
            (substitute* "unix/vm/config.cmake"
              (("\\(VM_BUILD_STRING.*")
-              "(VM_BUILD_STRING \\\"Built with GNU Guix\\\")"))))))
+              "(VM_BUILD_STRING \\\"Built with GNU Guix\\\")"))
+           #t))))
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("dbus" ,dbus)
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 533f3c4189..dd8518002d 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -116,11 +116,24 @@ remote applications.")
    ;; zlib libraries, so we need to propagate the inputs.
    (propagated-inputs `(("libgcrypt" ,libgcrypt)
                         ("zlib" ,zlib)))
-   (arguments '(#:configure-flags `("--with-libgcrypt")
-                #:phases (modify-phases %standard-phases
-                           (add-before 'configure 'autoreconf
-                             (lambda _
-                               (zero? (system* "autoreconf" "-v")))))))
+   (arguments `(#:configure-flags `("--with-libgcrypt")
+                #:phases
+                ;; FIXME: In the next core-updates cycle, replace the entire
+                ;; following ,(...) form with its first 'modify-phases'
+                ;; subform.  The change made here is only strictly needed on
+                ;; MIPS, but should work on any system.  For now, we apply it
+                ;; only to MIPS to avoid forcing thousands of rebuilds on
+                ;; other systems.
+                ,(if (string-prefix? "mips" (or (%current-target-system)
+                                                (%current-system)))
+                     '(modify-phases %standard-phases
+                        (replace 'bootstrap
+                          (lambda _
+                            (invoke "autoreconf" "-v"))))
+                     '(modify-phases %standard-phases
+                        (add-before 'configure 'autoreconf
+                          (lambda _
+                            (invoke "autoreconf" "-v")))))))
    (native-inputs `(("autoconf" ,autoconf)
                     ("automake" ,automake)))
    (synopsis "Client-side C library implementing the SSH2 protocol")
@@ -187,17 +200,16 @@ a server that supports the SSH-2 protocol.")
         (replace 'install
          (lambda* (#:key outputs (make-flags '()) #:allow-other-keys)
            ;; install without host keys and system configuration files
-           (and (zero? (apply system* "make" "install-nosysconf" make-flags))
-                (begin
-                  (install-file "contrib/ssh-copy-id"
-                                (string-append (assoc-ref outputs "out")
-                                               "/bin/"))
-                  (chmod (string-append (assoc-ref outputs "out")
-                                        "/bin/ssh-copy-id") #o555)
-                  (install-file "contrib/ssh-copy-id.1"
-                                (string-append (assoc-ref outputs "out")
-                                               "/share/man/man1/"))
-                  #t)))))))
+           (apply invoke "make" "install-nosysconf" make-flags)
+           (install-file "contrib/ssh-copy-id"
+                         (string-append (assoc-ref outputs "out")
+                                        "/bin/"))
+           (chmod (string-append (assoc-ref outputs "out")
+                                 "/bin/ssh-copy-id") #o555)
+           (install-file "contrib/ssh-copy-id.1"
+                         (string-append (assoc-ref outputs "out")
+                                        "/share/man/man1/"))
+           #t)))))
    (synopsis "Client and server for the secure shell (ssh) protocol")
    (description
     "The SSH2 protocol implemented in OpenSSH is standardised by the
@@ -493,7 +505,8 @@ basis for almost any application.")
                     (("localhost") "127.0.0.1"))
 
                   (substitute* "src/testsuite/login-auth-test"
-                    (("/bin/cat") "cat"))))))
+                    (("/bin/cat") "cat"))
+                  #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("m4" ,m4)
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index 38d253b1ce..d95b041843 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -627,7 +627,7 @@ curves, Cox models, and parametric accelerated failure time models.")
     (name "r")
     (source #f)
     (build-system trivial-build-system)
-    (arguments '(#:builder (mkdir %output)))
+    (arguments '(#:builder (begin (mkdir %output) #t)))
     (propagated-inputs
      `(("r-minimal" ,r-minimal)
        ("r-boot" ,r-boot)
diff --git a/gnu/packages/storage.scm b/gnu/packages/storage.scm
index 2ba6b856fb..11f6f9d7e8 100644
--- a/gnu/packages/storage.scm
+++ b/gnu/packages/storage.scm
@@ -29,7 +29,6 @@
   #:use-module (gnu packages bdw-gc)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
-  #:use-module (gnu packages cmake)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages cryptsetup)
@@ -116,7 +115,6 @@
        ;; <https://bugs.gnu.org/29674> for details. Disable tests until
        ;; resolved.
        #:tests? #f
-       #:cmake ,cmake-3.11
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-source
@@ -317,7 +315,7 @@
        ("python2-testtools" ,python2-testtools)
        ("python2-tox" ,python2-tox)))
     (inputs
-     `(("boost" ,boost-1.66)
+     `(("boost" ,boost)
        ("curl" ,curl)
        ("cryptsetup" ,cryptsetup)
        ("expat" ,expat)
diff --git a/gnu/packages/sync.scm b/gnu/packages/sync.scm
index 3656f5855e..df1b963878 100644
--- a/gnu/packages/sync.scm
+++ b/gnu/packages/sync.scm
@@ -58,7 +58,8 @@
            ;; qtsingleapplication have not yet been packaged, but all are
            ;; explicitly used from the 3rdparty folder during build.
            ;; We can also remove the macgoodies folder
-           (delete-file-recursively "src/3rdparty/qtmacgoodies")))))
+           (delete-file-recursively "src/3rdparty/qtmacgoodies")
+           #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/syncthing.scm b/gnu/packages/syncthing.scm
index e29405a27b..b650bedf25 100644
--- a/gnu/packages/syncthing.scm
+++ b/gnu/packages/syncthing.scm
@@ -40,8 +40,9 @@
                 "1wz6cwq3la5676z1c20sh4fykmjwhs410xzcnb2jfyzaldf57cwj"))
               (modules '((guix build utils)))
               ;; Delete bundled ("vendored") free software source code.
-              (snippet
-                '(delete-file-recursively "vendor"))))
+              (snippet '(begin
+                          (delete-file-recursively "vendor")
+                          #t))))
     (build-system go-build-system)
     ;; The primary Syncthing executable goes to "out", while the auxiliary
     ;; server programs and utility tools go to "utils".  This reduces the size
@@ -335,7 +336,8 @@ structs in the Go programming language.")
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs (map (lambda (package)
                    (list (package-name package) package))
                  packages))
@@ -774,7 +776,8 @@ environment")
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs (map (lambda (package)
                    (list (package-name package) package))
                  packages))
@@ -895,7 +898,8 @@ generation.")
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs (map (lambda (package)
                    (list (package-name package) package))
                  packages))
@@ -925,7 +929,8 @@ libraries are in the same directory.")
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs (map (lambda (package)
                    (list (package-name package) package))
                  packages))
@@ -950,7 +955,8 @@ libraries are in the same directory.")
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs (map (lambda (package)
                    (list (package-name package) package))
                  packages))
@@ -1402,7 +1408,8 @@ Prometheus HTTP API.")
                    (match %build-inputs
                      (((names . directories) ...)
                       (union-build (assoc-ref %outputs "out")
-                                   directories))))))
+                                   directories)
+                      #t)))))
     (inputs (map (lambda (package)
                    (list (package-name package) package))
                  packages))
diff --git a/gnu/packages/tbb.scm b/gnu/packages/tbb.scm
index 9a5d5dedd3..ee21a61895 100644
--- a/gnu/packages/tbb.scm
+++ b/gnu/packages/tbb.scm
@@ -40,9 +40,11 @@
                 "1i3zy87gyzw22fvajm039w6g822qzqn7jbmznc8y8c57qpqnf330"))
               (modules '((guix build utils)))
               (snippet
-               '(substitute* "build/common.inc"
-                  (("export tbb_build_prefix.+$")
-                   "export tbb_build_prefix?=guix\n")))))
+               '(begin
+                  (substitute* "build/common.inc"
+                    (("export tbb_build_prefix.+$")
+                     "export tbb_build_prefix?=guix\n"))
+                  #t))))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index 8988cdc3b1..97e1427bec 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
@@ -39,14 +39,14 @@
 (define-public tcl
   (package
     (name "tcl")
-    (version "8.6.7")
+    (version "8.6.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/tcl/Tcl/"
                                   version "/tcl" version "-src.tar.gz"))
               (sha256
                (base32
-                "19bb09l55alz4jb38961ikd5116q80s51bjvzqy44ckkwf28ysvw"))))
+                "0sprsg7wnraa4cbwgbcliylm6p0rspfymxn8ww02pr4ca70v0g64"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -55,16 +55,15 @@
                  (add-after 'install 'install-private-headers
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Private headers are needed by Expect.
-                     (and (zero? (system* "make"
-                                          "install-private-headers"))
-                          (let ((bin (string-append (assoc-ref outputs "out")
-                                                    "/bin")))
-                            ;; Create a tclsh -> tclsh8.6 symlink.
-                            ;; Programs such as Ghostscript rely on it.
-                            (with-directory-excursion bin
-                              (symlink (car (find-files "." "tclsh"))
-                                       "tclsh"))
-                            #t)))))
+                     (invoke "make" "install-private-headers")
+                     (let ((bin (string-append (assoc-ref outputs "out")
+                                               "/bin")))
+                       ;; Create a tclsh -> tclsh8.6 symlink.
+                       ;; Programs such as Ghostscript rely on it.
+                       (with-directory-excursion bin
+                         (symlink (car (find-files "." "tclsh"))
+                                  "tclsh"))
+                       #t))))
 
        ;; By default, man pages are put in PREFIX/man, but we want them in
        ;; PREFIX/share/man.  The 'validate-documentation-location' phase is
@@ -100,7 +99,7 @@
     (inputs
      `(;; TODO: Add these optional dependencies.
        ;; ("libX11" ,libX11)
-       ;; ("xproto" ,xproto)
+       ;; ("xorgproto" ,xorgproto)
        ;; ("tk" ,tk)
        ("tcl" ,tcl)))
     (arguments
@@ -135,14 +134,14 @@ X11 GUIs.")
 (define-public tk
   (package
     (name "tk")
-    (version "8.6.7")
+    (version "8.6.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/tcl/Tcl/"
                                  version "/tk" version "-src.tar.gz"))
              (sha256
               (base32
-               "1aipcf6qmbgi15av8yrpp2hx6vdwr684r6739p8cgdzrajiy4786"))
+               "0cvvznjwfn0i9vj9cw3wg8svx25ha34gg57m4xd1k5fyinhbrrs9"))
              (patches (search-patches "tk-find-library.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -150,7 +149,8 @@ X11 GUIs.")
                   (add-before
                    'configure 'pre-configure
                    (lambda _
-                     (chdir "unix")))
+                     (chdir "unix")
+                     #t))
                   (add-after
                    'install 'add-fontconfig-flag
                    (lambda* (#:key inputs outputs #:allow-other-keys)
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index e8b0357206..399a633269 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -238,7 +238,8 @@ compatibility to existing emulators like xterm, gnome-terminal, konsole, etc.")
                      "")
                     ;; Replace the call to 'sd_booted' by the truth value.
                     (("sd_booted\\(\\)")
-                     "1"))))))
+                     "1"))
+                  #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -557,7 +558,8 @@ embedded kernel situations.")
                        "app/qml/ApplicationSettings.qml"))
                     ;; Final substitution for default scanline and pixel fonts
                     (substitute* "app/qml/ApplicationSettings.qml"
-                      (("COMMODORE_PET") "PROGGY_TINY"))))))
+                      (("COMMODORE_PET") "PROGGY_TINY"))
+                    #t))))
       (build-system gnu-build-system)
       (inputs
        `(("qtbase" ,qtbase)
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 35b6b3f8d4..b6bc9dda62 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -491,7 +491,7 @@ converters, will completely supplant the older patterns.")
                                       cwd "/config")))
              (mkdir "build")
              (with-directory-excursion "build"
-               (zero? (system* "inimf" "mf.mf")))))
+               (invoke "inimf" "mf.mf"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out  (assoc-ref outputs "out"))
@@ -579,17 +579,18 @@ documents.")
                        (string-append (getcwd) ":"
                                       mf "/share/texmf-dist/metafont/base")))
              (mkdir "build")
-             (every (lambda (font)
-                      (format #t "building font ~a\n" font)
-                      (zero? (system* "mf" "-progname=mf"
-                                      "-output-directory=build"
-                                      (string-append "\\"
-                                                     "mode:=ljfour; "
-                                                     "mag:=1; "
-                                                     "batchmode; "
-                                                     "input "
-                                                     (basename font ".mf")))))
-                    (find-files "." "cm(.*[0-9]+.*|inch)\\.mf$"))))
+             (for-each (lambda (font)
+                         (format #t "building font ~a\n" font)
+                         (invoke "mf" "-progname=mf"
+                                 "-output-directory=build"
+                                 (string-append "\\"
+                                                "mode:=ljfour; "
+                                                "mag:=1; "
+                                                "batchmode; "
+                                                "input "
+                                                (basename font ".mf"))))
+                       (find-files "." "cm(.*[0-9]+.*|inch)\\.mf$"))
+             #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -648,13 +649,13 @@ display, and mathematical fonts in a range of styles, based on Monotype Modern
                        (string-append (getcwd) ":"
                                       mf "/share/texmf-dist/metafont/base")))
              (mkdir "build")
-             (zero? (system* "mf" "-progname=mf"
-                             "-output-directory=build"
-                             (string-append "\\"
-                                            "mode:=ljfour; "
-                                            "mag:=1; "
-                                            "batchmode; "
-                                            "input manfnt")))))
+             (invoke "mf" "-progname=mf"
+                     "-output-directory=build"
+                     (string-append "\\"
+                                    "mode:=ljfour; "
+                                    "mag:=1; "
+                                    "batchmode; "
+                                    "input manfnt"))))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -714,20 +715,21 @@ fonts.")
                                       (assoc-ref inputs "texlive-fonts-cm")
                                       "/share/texmf-dist/fonts/source/public/cm")))
              (mkdir "build")
-             (every (lambda (font)
-                      (format #t "building font ~a\n" font)
-                      (zero? (system* "mf" "-progname=mf"
-                                      "-output-directory=build"
-                                      (string-append "\\"
-                                                     "mode:=ljfour; "
-                                                     "mag:=1; "
-                                                     "batchmode; "
-                                                     "input " font))))
-                    '("icmcsc10" "icmex10" "icmmi8" "icmsy8" "icmtt8"
-                      "ilasy8" "ilcmss8" "ilcmssb8" "ilcmssi8"
-                      "lasy5" "lasy6" "lasy7" "lasy8" "lasy9" "lasy10" "lasyb10"
-                      "lcircle10" "lcirclew10" "lcmss8" "lcmssb8" "lcmssi8"
-                      "line10" "linew10"))))
+             (for-each (lambda (font)
+                         (format #t "building font ~a\n" font)
+                         (invoke "mf" "-progname=mf"
+                                 "-output-directory=build"
+                                 (string-append "\\"
+                                                "mode:=ljfour; "
+                                                "mag:=1; "
+                                                "batchmode; "
+                                                "input " font)))
+                       '("icmcsc10" "icmex10" "icmmi8" "icmsy8" "icmtt8"
+                         "ilasy8" "ilcmss8" "ilcmssb8" "ilcmssi8"
+                         "lasy5" "lasy6" "lasy7" "lasy8" "lasy9" "lasy10" "lasyb10"
+                         "lcircle10" "lcirclew10" "lcmss8" "lcmssb8" "lcmssi8"
+                         "line10" "linew10"))
+             #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -796,19 +798,20 @@ symbol fonts.")
                                       (assoc-ref inputs "texlive-fonts-cm")
                                       "/share/texmf-dist/fonts/source/public/cm")))
              (mkdir "build")
-             (every (lambda (font)
-                      (format #t "building font ~a\n" (basename font ".mf"))
-                      (with-directory-excursion (dirname font)
-                        (zero? (system* "mf" "-progname=mf"
-                                        "-output-directory=../build"
-                                        (string-append "\\"
-                                                       "mode:=ljfour; "
-                                                       "mag:=1; "
-                                                       "nonstopmode; "
-                                                       "input "
-                                                       (getcwd) "/"
-                                                       (basename font ".mf"))))))
-                    (find-files "." "[0-9]+\\.mf$"))))
+             (for-each (lambda (font)
+                         (format #t "building font ~a\n" (basename font ".mf"))
+                         (with-directory-excursion (dirname font)
+                           (invoke "mf" "-progname=mf"
+                                   "-output-directory=../build"
+                                   (string-append "\\"
+                                                  "mode:=ljfour; "
+                                                  "mag:=1; "
+                                                  "nonstopmode; "
+                                                  "input "
+                                                  (getcwd) "/"
+                                                  (basename font ".mf")))))
+                       (find-files "." "[0-9]+\\.mf$"))
+             #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -969,37 +972,35 @@ book).")
 
                (mkdir "build")
                (mkdir "web2c")
-               (and (invoke "luatex" "-ini" "-interaction=batchmode"
-                            "-output-directory=build" "unpack.ins")
-                    (invoke "tex" "-ini" "-interaction=batchmode"
-                            "-output-directory=web2c" "tex.ini")
-                    ;; LaTeX, pdfetex/pdftex, and XeTeX require e-TeX, which
-                    ;; is enabled only in extended mode (activated with a
-                    ;; leading asterisk).  We should not use luatex here,
-                    ;; because that would make the generated format files
-                    ;; incompatible with any other TeX engine.
-                    (every
-                     (lambda (format)
-                       (invoke "latex" "-ini" "-interaction=batchmode"
-                               "-output-directory=web2c"
-                               "-translate-file=cp227.tcx"
-                               (string-append "*" format ".ini")))
-                     '("latex"
-                       "pdflatex"
-                       "pdfetex"))
-                    (every
-                     (lambda (format)
-                       (invoke format "-ini" "-interaction=batchmode"
-                               "-output-directory=web2c"
-                               (string-append "*" format ".ini")))
-                     '("xetex"
-                       "xelatex"))
-                    (every
-                     (lambda (format)
-                       (invoke "luatex" "-ini" "-interaction=batchmode"
-                               "-output-directory=web2c"
-                               (string-append format ".ini")))
-                     '("dviluatex" "dvilualatex" "luatex" "lualatex")))))
+               (invoke "luatex" "-ini" "-interaction=batchmode"
+                       "-output-directory=build" "unpack.ins")
+               (invoke "tex" "-ini" "-interaction=batchmode"
+                       "-output-directory=web2c" "tex.ini")
+               ;; LaTeX, pdfetex/pdftex, and XeTeX require e-TeX, which
+               ;; is enabled only in extended mode (activated with a
+               ;; leading asterisk).  We should not use luatex here,
+               ;; because that would make the generated format files
+               ;; incompatible with any other TeX engine.
+               (for-each (lambda (format)
+                           (invoke "latex" "-ini" "-interaction=batchmode"
+                                   "-output-directory=web2c"
+                                   "-translate-file=cp227.tcx"
+                                   (string-append "*" format ".ini")))
+                         '("latex"
+                           "pdflatex"
+                           "pdfetex"))
+               (for-each (lambda (format)
+                           (invoke format "-ini" "-interaction=batchmode"
+                                   "-output-directory=web2c"
+                                   (string-append "*" format ".ini")))
+                         '("xetex"
+                           "xelatex"))
+               (for-each (lambda (format)
+                           (invoke "luatex" "-ini" "-interaction=batchmode"
+                                   "-output-directory=web2c"
+                                   (string-append format ".ini")))
+                         '("dviluatex" "dvilualatex" "luatex" "lualatex"))
+               #t))
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
@@ -2934,16 +2935,17 @@ in SGML; use maths minus in text as appropriate; simple Young tableaux.")
                                       (assoc-ref inputs "texlive-fonts-cm")
                                       "/share/texmf-dist/fonts/source/public/cm")))
              (mkdir "build")
-             (every (lambda (font)
-                      (format #t "building font ~a\n" font)
-                      (invoke "mf" "-progname=mf"
-                              "-output-directory=build"
-                              (string-append "\\"
-                                             "mode:=ljfour; "
-                                             "mag:=1; "
-                                             "batchmode; "
-                                             "input " (basename font ".mf"))))
-                    (find-files "." "[0-9]+\\.mf$"))))
+             (for-each (lambda (font)
+                         (format #t "building font ~a\n" font)
+                         (invoke "mf" "-progname=mf"
+                                 "-output-directory=build"
+                                 (string-append "\\"
+                                                "mode:=ljfour; "
+                                                "mag:=1; "
+                                                "batchmode; "
+                                                "input " (basename font ".mf"))))
+                       (find-files "." "[0-9]+\\.mf$"))
+             #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -3016,16 +3018,17 @@ texlive-2017.1/Master/texmf-dist/doc/fonts/ec/copyrite.txt"))))
                                       (assoc-ref inputs "texlive-fonts-cm")
                                       "/share/texmf-dist/fonts/source/public/cm")))
              (mkdir "build")
-             (every (lambda (font)
-                      (format #t "building font ~a\n" font)
-                      (invoke "mf" "-progname=mf"
-                              "-output-directory=build"
-                              (string-append "\\"
-                                             "mode:=ljfour; "
-                                             "mag:=1; "
-                                             "batchmode; "
-                                             "input " (basename font ".mf"))))
-                    (find-files "." "[0-9]+\\.mf$"))))
+             (for-each (lambda (font)
+                         (format #t "building font ~a\n" font)
+                         (invoke "mf" "-progname=mf"
+                                 "-output-directory=build"
+                                 (string-append "\\"
+                                                "mode:=ljfour; "
+                                                "mag:=1; "
+                                                "batchmode; "
+                                                "input " (basename font ".mf"))))
+                       (find-files "." "[0-9]+\\.mf$"))
+             #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
@@ -3539,9 +3542,10 @@ TeX metrics (VF and TFM files) and macros for use with LaTeX.")
                                       "/share/texmf-dist/"))
                (unzip  (string-append (assoc-ref %build-inputs "unzip")
                                       "/bin/unzip")))
-           (system* unzip (assoc-ref %build-inputs "source"))
+           (invoke unzip (assoc-ref %build-inputs "source"))
            (mkdir-p target)
-           (copy-recursively "iwona" target)))))
+           (copy-recursively "iwona" target)
+           #t))))
     (native-inputs
      `(("unzip" ,unzip)))
     (home-page "http://jmn.pl/en/kurier-i-iwona/")
@@ -3948,7 +3952,7 @@ directly generate PDF documents instead of DVI.")
             (lambda* (#:key outputs #:allow-other-keys)
               (let ((share (string-append (assoc-ref outputs "out") "/share")))
                 (mkdir-p share)
-                (system* "mv" "texmf-dist" share))))
+                (invoke "mv" "texmf-dist" share))))
           (add-after 'install 'texmf-config
             (lambda* (#:key inputs outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
@@ -3976,9 +3980,9 @@ directly generate PDF documents instead of DVI.")
                 ;; http://slackbuilds.org/repository/13.37/office/texlive/
                 (setenv "PATH" (string-append (getenv "PATH") ":" texbin))
                 (setenv "TEXMFCNF" texmfroot)
-                (system* "updmap-sys" "--nohash" "--syncwithtrees")
-                (system* "mktexlsr")
-                (system* "fmtutil-sys" "--all")))))))
+                (invoke "updmap-sys" "--nohash" "--syncwithtrees")
+                (invoke "mktexlsr")
+                (invoke "fmtutil-sys" "--all")))))))
    (properties `((max-silent-time . 9600))) ; don't time out while grafting
    (synopsis "TeX Live, a package of the TeX typesetting system")
    (description
@@ -4041,7 +4045,8 @@ This package contains the complete tree of texmf-dist data.")
                    (for-each
                      (lambda (name)
                        (symlink (string-append texmf "/share/" name) name))
-                     '("texmf-dist" "texmf-var"))))))))
+                     '("texmf-dist" "texmf-var"))))
+               #t))))
    (synopsis "TeX Live, a package of the TeX typesetting system")
    (description
     "TeX Live provides a comprehensive TeX document production system.
@@ -4224,12 +4229,12 @@ PDF documents.")
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (zero? (system* "qmake"
-                               (string-append "PREFIX=" out)
-                               (string-append "DESKTOPDIR=" out
-                                              "/share/applications")
-                               (string-append "ICONDIR=" out "/share/pixmaps")
-                               "texmaker.pro"))))))))
+               (invoke "qmake"
+                       (string-append "PREFIX=" out)
+                       (string-append "DESKTOPDIR=" out
+                                      "/share/applications")
+                       (string-append "ICONDIR=" out "/share/pixmaps")
+                       "texmaker.pro")))))))
     (inputs
      `(("poppler-qt5" ,poppler-qt5)
        ("qtbase" ,qtbase)
diff --git a/gnu/packages/texinfo.scm b/gnu/packages/texinfo.scm
index 4acc2b811f..109a24bf62 100644
--- a/gnu/packages/texinfo.scm
+++ b/gnu/packages/texinfo.scm
@@ -142,7 +142,9 @@ is on expressing the content semantically, avoiding physical markup commands.")
                ;; timestamp so we don't trigger the rule to update PO files,
                ;; which would require Gettext.
                ;; See <http://bugs.gnu.org/18247>.
-               '(utime "texi2html.pl" 0 0 0 0))))
+               '(begin
+                  (utime "texi2html.pl" 0 0 0 0)
+                  #t))))
     (build-system gnu-build-system)
     (inputs `(("perl" ,perl)))
     (arguments
diff --git a/gnu/packages/text-editors.scm b/gnu/packages/text-editors.scm
index d12e3d706f..2536754eb7 100644
--- a/gnu/packages/text-editors.scm
+++ b/gnu/packages/text-editors.scm
@@ -212,7 +212,9 @@ compiled, requires few libraries, and starts up quickly. ")
               (modules '((guix build utils)))
 
               ;; Remove pre-built binaries.
-              (snippet '(delete-file-recursively "bin"))))
+              (snippet '(begin
+                          (delete-file-recursively "bin")
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
@@ -248,10 +250,10 @@ Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings.  e3 can be used on
                (base32
                 "06w86xk7sjl2x2h3z6msn8kpmwj05qdimcym77wzhz5s94dzh1bl"))
               (modules '((guix build utils)))
-              (snippet
-               '(begin
-                  (substitute* "GNUmakefile"
-                    (("/usr/bin/") ""))))))
+              (snippet '(begin
+                          (substitute* "GNUmakefile"
+                            (("/usr/bin/") ""))
+                          #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm
index a06bf31176..5734bf62d6 100644
--- a/gnu/packages/textutils.scm
+++ b/gnu/packages/textutils.scm
@@ -93,10 +93,9 @@ to DOS format and vice versa.")
         (base32
          "0r4yhf7i7zp2nl2apyzz7r3i2in12n385hmr8zcfr18ly0ly530q"))
        (modules '((guix build utils)))
-       (snippet
-        `(begin
-           (delete-file "tests/Recode.c")
-           #t))))
+       (snippet '(begin
+                   (delete-file "tests/Recode.c")
+                   #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("python" ,python-2)
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 5e17a15db6..618b1a15f7 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
-;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2015, 2016, 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2018 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
@@ -65,8 +65,7 @@
 (define-public libtasn1
   (package
     (name "libtasn1")
-    (version "4.12")
-    (replacement libtasn1/fixed)
+    (version "4.13")
     (source
      (origin
       (method url-fetch)
@@ -74,8 +73,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "0ls7jdq3y5fnrwg0pzhq11m21r8pshac2705bczz6mqjc8pdllv7"))
-      (patches (search-patches "libtasn1-CVE-2017-10790.patch"))))
+        "1jlc1iahj8k3haz28j55nzg7sgni5h41vqy461i1bpbx6668wlky"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)))
     (home-page "https://www.gnu.org/software/libtasn1/")
@@ -87,14 +85,6 @@ networking, allowing for formal validation of data according to some
 specifications.")
     (license license:lgpl2.0+)))
 
-(define libtasn1/fixed
-  (package
-    (inherit libtasn1)
-    (source (origin
-              (inherit (package-source libtasn1))
-              (patches (search-patches "libtasn1-CVE-2017-10790.patch"
-                                       "libtasn1-CVE-2018-6003.patch"))))))
-
 (define-public asn1c
   (package
     (name "asn1c")
@@ -165,7 +155,7 @@ living in the same process.")
 (define-public gnutls
   (package
     (name "gnutls")
-    (version "3.5.13")
+    (version "3.5.18")
     (source (origin
              (method url-fetch)
              (uri
@@ -179,7 +169,7 @@ living in the same process.")
                               "gnutls-skip-pkgconfig-test.patch"))
              (sha256
               (base32
-               "15ihq6p0hnnhs8cnjrkj40dmlcaa1jjg8xg0g2ydbnlqs454ixbr"))))
+               "0d02x28fwkkx7xzn7807nww6idchizzq3plx8sfcyiw7wzclh8mf"))))
     (build-system gnu-build-system)
     (arguments
      `(; Ensure we don't keep a reference to this buggy software.
@@ -265,8 +255,7 @@ required structures.")
 (define-public openssl
   (package
    (name "openssl")
-   (replacement openssl-1.0.2o)
-   (version "1.0.2n")
+   (version "1.0.2o")
    (source (origin
              (method url-fetch)
              (uri (list (string-append "https://www.openssl.org/source/openssl-"
@@ -278,14 +267,7 @@ required structures.")
                                        "/" name "-" version ".tar.gz")))
              (sha256
               (base32
-               "1zm82pyq5a9jm10q6iv7d3dih3xwjds4x30fqph3k317byvsn2rp"))
-             (snippet
-              '(begin
-                 ;; Remove ELF files.  'substitute*' can't read them.
-                 (delete-file "test/ssltest_old")
-                 (delete-file "test/v3ext")
-                 (delete-file "test/x509aux")
-                 #t))
+               "0kcy13l701054nhpbd901mz32v1kn4g311z0nifd83xs2jbmqgzc"))
              (patches (search-patches "openssl-runpath.patch"
                                       "openssl-c-rehash-in.patch"))))
    (build-system gnu-build-system)
@@ -318,26 +300,25 @@ required structures.")
          'configure
          (lambda* (#:key outputs #:allow-other-keys)
            (let ((out (assoc-ref outputs "out")))
-             (zero?
-              (system* "./config"
-                       "shared"                   ;build shared libraries
-                       "--libdir=lib"
-
-                       ;; The default for this catch-all directory is
-                       ;; PREFIX/ssl.  Change that to something more
-                       ;; conventional.
-                       (string-append "--openssldir=" out
-                                      "/share/openssl-" ,version)
-
-                       (string-append "--prefix=" out)
-
-                       ;; XXX FIXME: Work around a code generation bug in GCC
-                       ;; 4.9.3 on ARM when compiled with -mfpu=neon.  See:
-                       ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66917>
-                       ,@(if (and (not (%current-target-system))
-                                  (string-prefix? "armhf" (%current-system)))
-                             '("-mfpu=vfpv3")
-                             '()))))))
+             (invoke "./config"
+                     "shared"                 ;build shared libraries
+                     "--libdir=lib"
+
+                     ;; The default for this catch-all directory is
+                     ;; PREFIX/ssl.  Change that to something more
+                     ;; conventional.
+                     (string-append "--openssldir=" out
+                                    "/share/openssl-" ,version)
+
+                     (string-append "--prefix=" out)
+
+                     ;; XXX FIXME: Work around a code generation bug in GCC
+                     ;; 4.9.3 on ARM when compiled with -mfpu=neon.  See:
+                     ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66917>
+                     ,@(if (and (not (%current-target-system))
+                                (string-prefix? "armhf" (%current-system)))
+                           '("-mfpu=vfpv3")
+                           '())))))
         (add-after
          'install 'make-libraries-writable
          (lambda* (#:key outputs #:allow-other-keys)
@@ -410,27 +391,6 @@ required structures.")
    (license license:openssl)
    (home-page "https://www.openssl.org/")))
 
-(define openssl-1.0.2o
-  (package
-    (inherit openssl)
-    (name "openssl")
-    (version "1.0.2o")
-    (source (origin
-              (inherit (package-source openssl))
-              (uri (list (string-append "https://www.openssl.org/source/openssl-"
-                                        version ".tar.gz")
-                         (string-append "ftp://ftp.openssl.org/source/"
-                                        name "-" version ".tar.gz")
-                         (string-append "ftp://ftp.openssl.org/source/old/"
-                                        (string-trim-right version char-set:letter)
-                                        "/" name "-" version ".tar.gz")))
-              (sha256
-               (base32
-                "0kcy13l701054nhpbd901mz32v1kn4g311z0nifd83xs2jbmqgzc"))
-              ;; Erase the inherited snippet, which isn't applicable to
-              ;; OpenSSL 1.0.2o.
-              (snippet #f)))))
-
 (define-public openssl-next
   (package
     (inherit openssl)
@@ -464,27 +424,26 @@ required structures.")
              (lambda* (#:key outputs #:allow-other-keys)
                (let* ((out (assoc-ref outputs "out"))
                       (lib (string-append out "/lib")))
-                 (zero?
-                  (system* "./config"
-                           "shared"                   ;build shared libraries
-                           "--libdir=lib"
-
-                           ;; The default for this catch-all directory is
-                           ;; PREFIX/ssl.  Change that to something more
-                           ;; conventional.
-                           (string-append "--openssldir=" out
-                                          "/share/openssl-" ,version)
-
-                           (string-append "--prefix=" out)
-                           (string-append "-Wl,-rpath," lib)
-
-                           ;; XXX FIXME: Work around a code generation bug in GCC
-                           ;; 4.9.3 on ARM when compiled with -mfpu=neon.  See:
-                           ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66917>
-                           ,@(if (and (not (%current-target-system))
-                                      (string-prefix? "armhf" (%current-system)))
-                                 '("-mfpu=vfpv3")
-                                 '()))))))
+                 (invoke "./config"
+                         "shared"       ;build shared libraries
+                         "--libdir=lib"
+
+                         ;; The default for this catch-all directory is
+                         ;; PREFIX/ssl.  Change that to something more
+                         ;; conventional.
+                         (string-append "--openssldir=" out
+                                        "/share/openssl-" ,version)
+
+                         (string-append "--prefix=" out)
+                         (string-append "-Wl,-rpath," lib)
+
+                         ;; XXX FIXME: Work around a code generation bug in GCC
+                         ;; 4.9.3 on ARM when compiled with -mfpu=neon.  See:
+                         ;; <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66917>
+                         ,@(if (and (not (%current-target-system))
+                                    (string-prefix? "armhf" (%current-system)))
+                               '("-mfpu=vfpv3")
+                               '())))))
 
            ;; XXX: Duplicate this phase to make sure 'version' evaluates
            ;; in the current scope and not the inherited one.
@@ -654,14 +613,14 @@ certificates for free.")
 (define-public perl-net-ssleay
   (package
     (name "perl-net-ssleay")
-    (version "1.82")
+    (version "1.85")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/M/MI/MIKEM/"
                                   "Net-SSLeay-" version ".tar.gz"))
               (sha256
                (base32
-                "1rf78z1macgmp6mwd7c2xq4yfw6wpf28hfwfz1d5wslqr4cwb5aq"))))
+                "1j5h4ycm8538397l204d2d5fkm9595aj174pj7bkpbhwzfwqi0cx"))))
     (build-system perl-build-system)
     (inputs `(("openssl" ,openssl)))
     (arguments
diff --git a/gnu/packages/unrtf.scm b/gnu/packages/unrtf.scm
index 3a15171a57..1d21a81a0e 100644
--- a/gnu/packages/unrtf.scm
+++ b/gnu/packages/unrtf.scm
@@ -61,7 +61,7 @@
                                          #$grep "/bin:" #$sed "/bin:"
                                          #$coreutils "/bin:"
                                          (getenv "PATH")))
-                  (zero? (system* "autoreconf" "-vfi"))))))
+                  (invoke "autoreconf" "-vfi")))))
     (build-system gnu-build-system)
     (home-page "https://www.gnu.org/software/unrtf/")
     (synopsis "Convert Rich Text Format documents to other formats")
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 603e8a46dd..9ad4f3faca 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
-;;; 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, 2014 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
@@ -347,7 +347,9 @@ as well as the classic centralized workflow.")
               (wrap-program git-sm
                 `("PATH" ":" prefix
                   (,(string-append (assoc-ref inputs "perl")
-                                   "/bin")))))))
+                                   "/bin"))))
+
+              #t)))
         (add-after 'split 'install-man-pages
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
@@ -355,7 +357,7 @@ as well as the classic centralized workflow.")
                    (manpages (assoc-ref inputs "git-manpages")))
               (mkdir-p man)
               (with-directory-excursion man
-                (zero? (system* "tar" "xvf" manpages)))))))))
+                (invoke "tar" "xvf" manpages))))))))
 
    (native-search-paths
     ;; For HTTPS access, Git needs a single-file certificate bundle, specified
@@ -392,7 +394,9 @@ everything from small to very large projects with speed and efficiency.")
               (patches (search-patches "libgit2-0.25.1-mtime-0.patch"))
 
               ;; Remove bundled software.
-              (snippet '(delete-file-recursively "deps"))
+              (snippet '(begin
+                          (delete-file-recursively "deps")
+                          #t))
               (modules '((guix build utils)))))
     (build-system cmake-build-system)
     (outputs '("out" "debug"))
@@ -1138,23 +1142,21 @@ following features:
            (lambda* (#:key outputs #:allow-other-keys)
              ;; Follow the instructions from 'subversion/bindings/swig/INSTALL'.
              (let ((out (assoc-ref outputs "out")))
-               (and (zero? (system* "make" "swig-pl-lib"))
-                    ;; FIXME: Test failures.
-                    ;; (zero? (system* "make" "check-swig-pl"))
-                    (zero? (system* "make" "install-swig-pl-lib"))
-
-                    ;; Set the right installation prefix.
-                    (with-directory-excursion
-                        "subversion/bindings/swig/perl/native"
-                      (and (zero?
-                            (system* "perl" "Makefile.PL"
-                                     "NO_PERLLOCAL=1"
-                                     (string-append "PREFIX=" out)))
-                           (zero?
-                            (system* "make" "install"
-                                     (string-append "OTHERLDFLAGS="
-                                                    "-Wl,-rpath="
-                                                    out "/lib"))))))))))))
+               (invoke "make" "swig-pl-lib")
+               ;; FIXME: Test failures.
+               ;; (invoke "make" "check-swig-pl")
+               (invoke "make" "install-swig-pl-lib")
+
+               ;; Set the right installation prefix.
+               (with-directory-excursion
+                   "subversion/bindings/swig/perl/native"
+                 (invoke "perl" "Makefile.PL"
+                         "NO_PERLLOCAL=1"
+                         (string-append "PREFIX=" out))
+                 (invoke "make" "install"
+                         (string-append "OTHERLDFLAGS="
+                                        "-Wl,-rpath="
+                                        out "/lib")))))))))
     (native-inputs
       `(("pkg-config" ,pkg-config)
         ;; For the Perl bindings.
@@ -1578,11 +1580,6 @@ output of the 'git' command.")
                (base32
                 "1ydis4y0amkgfr4y60sn076f1l41ya2kn89kfd9fqf44f9ccgb5r"))))
     (build-system gnu-build-system)
-    (arguments
-     '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
-                    (lambda _
-                      (zero? (system* "autoreconf" "-vfi")))))))
     (native-inputs `(("autoconf" ,autoconf)
                      ("automake" ,automake)))
     (home-page "https://github.com/0-wiz-0/findnewest/releases")
@@ -1655,7 +1652,7 @@ repository\" with git-annex.")
 (define-public fossil
   (package
     (name "fossil")
-    (version "2.4")
+    (version "2.5")
     (source
      (origin
        (method url-fetch)
@@ -1669,7 +1666,7 @@ repository\" with git-annex.")
               "fossil-src-" version ".tar.gz")))
        (sha256
         (base32
-         "0add35lk2ac4qg29d7ygj7pskv8lfln33f3kgf6x3548msv9hd6j"))))
+         "1lxawkhr1ki9fqw8076fxib2b1w673449yzb6vxjshqzh5h77c7r"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("tcl" ,tcl)                     ;for configuration only
@@ -1761,7 +1758,8 @@ be served with a HTTP file server of your choice.")
              (("__TIME__") "\"00:00:00\""))
            (substitute* "src/impossible.h"
              (("__DATE__") "\"\"")
-             (("__TIME__") "\"\""))))))
+             (("__TIME__") "\"\""))
+           #t))))
     (build-system haskell-build-system)
     (arguments
      `(#:configure-flags '("-fpkgconfig" "-fcurl" "-flibiconv" "-fthreaded"
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 317710c76b..dc71780514 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -155,22 +155,22 @@
                     (let ((out     (assoc-ref outputs "out"))
                           (ncurses (assoc-ref inputs "ncurses")))
                       (setenv "CONFIG_SHELL" (which "bash"))
-                      (zero? (system* "./configure"
-                                      (string-append "--prefix=" out)
-                                      (string-append "--build=" build)
-                                      ;; The ancient config.guess is unable to
-                                      ;; guess the host triplet on mips64el.
-                                      ,@(if (string=? "mips64el-linux"
-                                                      (%current-system))
-                                            '("--host=mips64el-unknown-linux-gnu")
-                                            '())
-                                      ;; The same is also true with aarch64.
-                                      ,@(if (string=? "aarch64-linux"
-                                                      (%current-system))
-                                            '("--host=aarch64-unknown-linux-gnu")
-                                            '())
-                                      (string-append "--with-ncurses="
-                                                     ncurses)))))))))
+                      (invoke "./configure"
+                              (string-append "--prefix=" out)
+                              (string-append "--build=" build)
+                              ;; The ancient config.guess is unable to
+                              ;; guess the host triplet on mips64el.
+                              ,@(if (string=? "mips64el-linux"
+                                              (%current-system))
+                                    '("--host=mips64el-unknown-linux-gnu")
+                                    '())
+                              ;; The same is also true with aarch64.
+                              ,@(if (string=? "aarch64-linux"
+                                              (%current-system))
+                                    '("--host=aarch64-unknown-linux-gnu")
+                                    '())
+                              (string-append "--with-ncurses="
+                                             ncurses))))))))
     (home-page "http://aa-project.sourceforge.net/aalib/")
     (synopsis "ASCII-art library")
     (description
@@ -208,9 +208,8 @@ old-fashioned output methods with powerful ascii-art renderer.")
                  (modify-phases %standard-phases
                    ;; XXX We need to run ./bootstrap because of the build
                    ;; system fixes above.
-                   (add-after
-                    'unpack 'bootstrap
-                    (lambda _ (zero? (system* "sh" "bootstrap")))))))
+                   (replace 'bootstrap
+                     (lambda _ (invoke "sh" "bootstrap"))))))
     (home-page "http://liba52.sourceforge.net/")
     (synopsis "ATSC A/52 stream decoder")
     (description "liba52 is a library for decoding ATSC A/52 streams.  The
@@ -306,15 +305,15 @@ H.264 (MPEG-4 AVC) video streams.")
         (base32
          "0hknnnnx9661igm1r73dc7aqxnnrl5a8yvyvr1nhd9ymn2klwpl5"))
        (modules '((guix build utils)))
-       (snippet
-        '(begin
-           ;; Delete bundled libraries.
-           (for-each delete-file-recursively
-                     '("lib/libebml"
-                       "lib/libmatroska"
-                       "lib/nlohmann-json"
-                       "lib/pugixml"
-                       "lib/utf8-cpp"))))))
+       (snippet '(begin
+                   ;; Delete bundled libraries.
+                   (for-each delete-file-recursively
+                             '("lib/libebml"
+                               "lib/libmatroska"
+                               "lib/nlohmann-json"
+                               "lib/pugixml"
+                               "lib/utf8-cpp"))
+                   #t))))
     (build-system gnu-build-system)
     (inputs
      `(("boost" ,boost)
@@ -390,10 +389,9 @@ and creating Matroska files from other media files (@code{mkvmerge}).")
          (base32
           "0qx8mavwdzdpkkby7n29i9av7zsnklavacwfz537mf62q2pzjnbf"))
         (modules '((guix build utils)))
-        (snippet
-         '(begin
-            (delete-file-recursively "source/compat/getopt")
-            #t))))
+        (snippet '(begin
+                    (delete-file-recursively "source/compat/getopt")
+                    #t))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; tests are skipped if cpu-optimized code isn't built
@@ -579,7 +577,8 @@ libebml is a C++ library to read and write EBML files.")
             (let ((out (assoc-ref outputs "out")))
               (substitute* "va/drm/va_drm_auth_x11.c"
                 (("\"libva-x11\\.so\\.%d\"")
-                 (string-append "\"" out "/lib/libva-x11.so.%d\"")))))))
+                 (string-append "\"" out "/lib/libva-x11.so.%d\"")))
+              #t))))
        ;; Most drivers are in mesa's $prefix/lib/dri, so use that.  (Can be
        ;; overridden at run-time via LIBVA_DRIVERS_PATH.)
        #:configure-flags
@@ -751,13 +750,13 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
                 (("#! /bin/sh") (string-append "#!" (which "sh"))))
               (setenv "SHELL" (which "bash"))
               (setenv "CONFIG_SHELL" (which "bash"))
-              (zero? (apply system*
-                            "./configure"
-                            (string-append "--prefix=" out)
-                            ;; Add $libdir to the RUNPATH of all the binaries.
-                            (string-append "--extra-ldflags=-Wl,-rpath="
-                                           out "/lib")
-                            configure-flags)))))
+              (apply invoke
+                     "./configure"
+                     (string-append "--prefix=" out)
+                     ;; Add $libdir to the RUNPATH of all the binaries.
+                     (string-append "--extra-ldflags=-Wl,-rpath="
+                                    out "/lib")
+                     configure-flags))))
          (add-before
           'check 'set-ld-library-path
           (lambda _
@@ -1079,7 +1078,8 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
           'configure 'setup-waf
           (lambda* (#:key inputs #:allow-other-keys)
             (copy-file (assoc-ref inputs "waf") "waf")
-            (setenv "CC" "gcc"))))
+            (setenv "CC" "gcc")
+            #t)))
        #:configure-flags (list "--enable-libmpv-shared"
                                "--enable-cdda"
                                "--enable-dvdread"
@@ -1835,10 +1835,11 @@ from sites like Twitch.tv and pipes them into a video player of choice.")
                (base32
                 "10m3ry0b2pvqx3bk34qh5dq337nn8pkc2gzfyhsj4nv9abskln47"))
               (modules '((guix build utils)))
-              (snippet
-               ;; As of glibc 2.26, <xlocale.h> no longer is.
-               '(substitute* "src/framework/mlt_property.h"
-                  (("xlocale\\.h") "locale.h")))))
+              (snippet '(begin
+                          ;; As of glibc 2.26, <xlocale.h> no longer is.
+                          (substitute* "src/framework/mlt_property.h"
+                            (("xlocale\\.h") "locale.h"))
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no tests
@@ -1975,9 +1976,9 @@ and JACK.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("dri2proto" ,dri2proto)
-       ("libx11" ,libx11 "out")
-       ("libxext" ,libxext)))
+     `(("libx11" ,libx11 "out")
+       ("libxext" ,libxext)
+       ("xorgproto" ,xorgproto)))
     (home-page "https://wiki.freedesktop.org/www/Software/VDPAU/")
     (synopsis "Video Decode and Presentation API")
     (description "VDPAU is the Video Decode and Presentation API for UNIX.  It
@@ -2024,7 +2025,8 @@ implementation.")
           "1x2ag1f2fwa4yh1g5spv99w9x1m33hbxlqwyhm205ssq0ra234bx"))
         (patches (search-patches "libvdpau-va-gl-unbundle.patch"))
         (modules '((guix build utils)))
-        (snippet '(delete-file-recursively "3rdparty"))))
+        (snippet '(begin (delete-file-recursively "3rdparty")
+                         #t))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f)) ; Tests require a running X11 server, with VA-API support.
@@ -2291,7 +2293,7 @@ supported players in addition to this package.")
      `(#:tests? #f             ;tests require Ruby and claim to be unsupported
        #:phases
        (modify-phases %standard-phases
-         (add-before 'patch-source-shebangs 'bootstrap-gtk
+         (replace 'bootstrap
            ;; Run bootstrap ahead of time so that shebangs get patched.
            (lambda _
              (setenv "CONFIG_SHELL" (which "sh"))
@@ -2536,10 +2538,11 @@ many codecs and formats supported by libmediainfo.")
                (base32
                 "0f5kxpayqn3yhabqrd2cqlc74i6x2xr01jfkank1lcilxnfyrsnq"))
               (modules '((guix build utils)))
-              (snippet
-               ;; As of glibc 2.26, <xlocale.h> no longer is.
-               '(substitute* "liveMedia/include/Locale.hh"
-                  (("xlocale\\.h") "locale.h")))))
+              (snippet '(begin
+                          ;; As of glibc 2.26, <xlocale.h> no longer is.
+                          (substitute* "liveMedia/include/Locale.hh"
+                            (("xlocale\\.h") "locale.h"))
+                          #t))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -2810,7 +2813,7 @@ It counts more than 100 plugins.")
        ("sqlite" ,sqlite)))
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
+                  (replace 'bootstrap
                     (lambda _
                       (patch-shebang "version.sh")
                       (invoke "autoreconf" "-vfi"))))
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 421825f22c..05d2ab0b87 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2016, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
@@ -30,6 +30,7 @@
   #:use-module (gnu packages admin)
   #:use-module (gnu packages attr)
   #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
@@ -38,6 +39,7 @@
   #:use-module (gnu packages dns)
   #:use-module (gnu packages docbook)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
@@ -199,6 +201,8 @@ exec smbd $@")))
     (native-inputs `(("gettext" ,gettext-minimal)
                      ("glib:bin" ,glib "bin") ; gtester, etc.
                      ("perl" ,perl)
+                     ("flex" ,flex)
+                     ("bison" ,bison)
                      ("pkg-config" ,pkg-config)
                      ("python-wrapper" ,python-wrapper)
                      ("texinfo" ,texinfo)))
@@ -256,7 +260,9 @@ server and embedded PowerPC, and S390 guests.")
                                  version ".tar.xz"))
              (sha256
               (base32
-               "17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))))
+               "17w21spvaxaidi2am5lpsln8yjpyp2zi3s3gc6nsxj5arlgamzgw"))
+             (patches
+              (search-patches "qemu-glibc-2.27.patch"))))
     ;; qemu-minimal-2.10 needs Python 2. Remove below once no longer necessary.
     (native-inputs `(("python-2" ,python-2)
                      ,@(fold alist-delete (package-native-inputs qemu)
diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index c93960bc05..fb06196ec4 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -65,7 +65,8 @@
                   (substitute* "lib/Makefile.in"
                     (("getopt1?\\.(c|h|\\$\\(OBJEXT\\))") ""))
                   (for-each delete-file
-                            '("lib/getopt.h" "lib/getopt.c"))))))
+                            '("lib/getopt.h" "lib/getopt.c"))
+                  #t))))
     (build-system gnu-build-system)
     (home-page "http://software.schmorp.de/pkg/gvpe.html")
     (inputs `(("openssl" ,openssl)
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 9f1609591b..e03231347a 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Aljosha Papsch <misc@rpapsch.de>
-;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2018 Raoul Jean Pierre Bonnal <ilpuccio.febo@gmail.com>
@@ -414,12 +414,7 @@ APIs.")
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no tests included
-       #:make-flags (list "CC=gcc")
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (zero? (system* "autoreconf" "-vif")))))))
+       #:make-flags (list "CC=gcc")))
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)
@@ -575,7 +570,8 @@ It aims to conform to RFC 7159.")
 
                  ;; Don't try to build with -Werror.
                  (substitute* (find-files "." "Makefile\\.in")
-                   (("-Werror") ""))))))))
+                   (("-Werror") ""))
+                 #t))))))
 
 (define-public qjson
   (package
@@ -849,7 +845,7 @@ UTS#46.")
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
-                  (add-after 'unpack 'bootstrap
+                  (replace 'bootstrap
                     (lambda* (#:key inputs #:allow-other-keys)
                       ;; configure.in and Makefile.am aren't in the root of the
                       ;; source tree.
@@ -2731,16 +2727,18 @@ used by the HTTP protocol (and then some more).")
 (define-public perl-http-message
   (package
     (name "perl-http-message")
-    (version "6.11")
+    (version "6.15")
     (source (origin
              (method url-fetch)
              (uri (string-append
-                   "mirror://cpan/authors/id/E/ET/ETHER/HTTP-Message-"
+                   "mirror://cpan/authors/id/O/OA/OALDERS/HTTP-Message-"
                    version ".tar.gz"))
              (sha256
               (base32
-               "06yq6cjx4vzl4if4ykap77xsrrd8aa7ish90k7cqi8g6g83nicz7"))))
+               "11fbvisyvi6bw8z9iq9fm9mraf69qyds09fblhl9gyvg7ccll93v"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-try-tiny" ,perl-try-tiny)))
     (propagated-inputs
      `(("perl-encode-locale" ,perl-encode-locale)
        ("perl-http-date" ,perl-http-date)
@@ -4032,11 +4030,7 @@ and vice-versa.")
                 "1bgg2kbj311pqdzw2v33za7k66g1rv44kkvvnz2gnpaasi9k0ii8"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; tests require bundling googletest sources
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-          (lambda _ (zero? (system* "sh" "autogen.sh")))))))
+     `(#:tests? #f))         ;tests require bundling googletest sources
     ;; The release tarball lacks the generated files.
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -4844,10 +4838,11 @@ config files---you only have to specify the www root.")
                (base32
                 "1w84y61f3ldg2f28q6qlyr1scn3mcx0bsbq3i5xi5w193wh3xa2q"))
               (modules '((guix build utils)))
-              (snippet
-               '(substitute* "src/error.h"
-                  (("__DATE__") "\"1970-01-01\"")
-                  (("__TIME__") "\"00:00:00\"")))))
+              (snippet '(begin
+                          (substitute* "src/error.h"
+                            (("__DATE__") "\"1970-01-01\"")
+                            (("__TIME__") "\"00:00:00\""))
+                          #t))))
     (build-system gnu-build-system)
     (inputs
      ;; TODO: Add dependency on geoip-tools.
@@ -4877,9 +4872,10 @@ on the fly.")
         (base32
          "0mn5s6p68n32xzadz6ds5i6bp44dyxzkq68r1yljlv470jr84bql"))
        (modules '((guix build utils)))
-       (snippet
-        ;; Remove non-free IETF RFC documentation.
-        '(delete-file-recursively "doc"))))
+       (snippet '(begin
+                   ;; Remove non-free IETF RFC documentation.
+                   (delete-file-recursively "doc")
+                   #t))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -5013,9 +5009,10 @@ functions of Tidy.")
        (uri (string-append "https://www.hiawatha-webserver.org/files/"
                            "hiawatha-" version ".tar.gz"))
        (modules '((guix build utils)))
-       (snippet
-        ;; We use our packaged mbedtls, so delete the included copy.
-        '(delete-file-recursively "mbedtls"))
+       (snippet '(begin
+                   ;; We use our packaged mbedtls, so delete the included copy.
+                   (delete-file-recursively "mbedtls")
+                   #t))
        (sha256
         (base32
          "0x2zfc8kc6c7rl4gwymwmg13w1c60biv6c6c9fvzpnl59bc9jgin"))))
@@ -5547,8 +5544,8 @@ named elements: the @code{status}, the @code{headers}, and the @code{body}.")
             "PATH" '("bin") (map (match-lambda ((_ . input) input))
                                  %build-inputs))
            (mkdir-p share-rss-bridge)
-           (system* "tar" "xvf" (assoc-ref %build-inputs "source")
-                    "--strip-components" "1" "-C" share-rss-bridge)
+           (invoke "tar" "xvf" (assoc-ref %build-inputs "source")
+                   "--strip-components" "1" "-C" share-rss-bridge)
            #t))))
     (home-page "https://github.com/RSS-Bridge/rss-bridge")
     (synopsis "Generate Atom feeds for social networking websites")
@@ -6338,7 +6335,8 @@ features include:
               "if(isset($_SERVER['CACHE_DIR']))
 $cachepath = $_SERVER['CACHE_DIR'];
 else
-die('You need to set the CACHE_DIR variable first.');"))))))
+die('You need to set the CACHE_DIR variable first.');"))
+           #t))))
     (home-page "https://framagit.org/Deevad/cat-avatar-generator")
     (synopsis "Random avatar generator")
     (description "Cat avatar generator is a generator of cat pictures optimised
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index d90124ff17..d1abb0b687 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -100,7 +100,8 @@
                     (string-append (getenv "C_INCLUDE_PATH")
                                    ":"
                                    (assoc-ref inputs "gst-plugins-base")
-                                   "/include/gstreamer-1.0")))))))
+                                   "/include/gstreamer-1.0"))
+            #t)))))
     (native-inputs
      `(("bison" ,bison)
        ("gettext" ,gettext-minimal)
@@ -148,50 +149,3 @@ HTML/CSS applications to full-fledged web browsers.")
                    license:lgpl2.1+
                    license:bsd-2
                    license:bsd-3))))
-
-;; Latest release of the stable 2.4 series, with WebKit1 support.
-(define-public webkitgtk-2.4
-  (package (inherit webkitgtk)
-    (name "webkitgtk")
-    (version "2.4.11")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://www.webkitgtk.org/releases/"
-                                  name "-" version ".tar.xz"))
-              (sha256
-               (base32
-                "1xsvnvyvlywwyf6m9ainpsg87jkxjmd37q6zgz9cxb7v3c2ym2jq"))))
-    (build-system gnu-build-system)
-    (arguments
-     '(#:tests? #f ; no tests
-       ;; FIXME: Disabling parallel building is a quick hack to avoid the
-       ;; failure described in
-       ;; https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00837.html
-       ;; A more structural fix is needed.
-       #:parallel-build? #f
-       #:phases (modify-phases %standard-phases
-                  (add-after
-                   'unpack 'set-gcc
-                   (lambda _ (setenv "CC" "gcc") #t)))))
-    (native-inputs
-     `(("flex" ,flex)
-       ("which" ,which)
-       ,@(package-native-inputs webkitgtk)))))
-
-;; Last GTK+2 port, required by GnuCash.
-(define-public webkitgtk/gtk+-2
-  (package (inherit webkitgtk-2.4)
-    (name "webkitgtk-gtk2")
-    (arguments
-     `(;; FIXME: Disabling parallel building is a quick hack to avoid the
-       ;; failure described in
-       ;; https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00837.html
-       ;; A more structural fix is needed.
-       #:parallel-build? #f
-       #:configure-flags
-       '("--enable-webkit2=no"
-         "--with-gtk=2.0")
-       ,@(package-arguments webkitgtk-2.4)))
-    (propagated-inputs
-     `(("gtk+-2" ,gtk+-2)
-       ("libsoup" ,libsoup)))))
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index 82ddbde4f1..bd43e372cf 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;;
@@ -140,7 +140,7 @@ online pastebin services.")
    (build-system gnu-build-system)
    (arguments
     `(#:phases (modify-phases %standard-phases
-      (add-after 'unpack 'bootstrap
+      (replace 'bootstrap
         (lambda _
           ;; Make sure all the files are writable so that ./bootstrap
           ;; can proceed.
diff --git a/gnu/packages/wine.scm b/gnu/packages/wine.scm
index d9346e2524..83c74d6e31 100644
--- a/gnu/packages/wine.scm
+++ b/gnu/packages/wine.scm
@@ -257,7 +257,8 @@ integrate Windows applications into your desktop.")
                                       "/patches/gitapply.sh") (("/usr/bin/env") env))
           (mkdir-p wine-staging)
           (copy-recursively (string-append "wine-staging-" ,version)
-                            wine-staging)))))
+                            wine-staging)
+          #t))))
    (home-page "https://github.com/wine-staging")
    (synopsis "Patchset for Wine")
    (description
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index 1b3d44d54c..a3705c9d91 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2016 doncatnip <gnopap@gmail.com>
 ;;; Copyright © 2016 Ivan Vilata i Balaguer <ivan@selidor.net>
@@ -356,13 +356,7 @@ prompt.")
          "0zh7il2y6dmzym3w6r9xii5dma8pjjjlq4dm5iby7m3gvplj4q9p"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f                      ; no tests included
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'bootstrap
-           (lambda _
-             (invoke "autoreconf" "-vfi")
-             #t)))))
+     `(#:tests? #f))                              ;no tests included
     (inputs
      `(("cairo" ,cairo)
        ("libev" ,libev)
@@ -681,6 +675,19 @@ experience.")
              (sha256
               (base32
                "0kwpbls9h1alxcmvxh5g9qb995fds5b2ngcr44w0ibazkyls2pdc"))
+             (modules '((guix build utils)
+                        (srfi srfi-19)))
+             (snippet '(begin
+                         ;; Remove non-reproducible timestamp and use the date
+                         ;; of the source file instead.
+                         (substitute* "common/version.c"
+                           (("__DATE__ \" \" __TIME__")
+                            (date->string
+                             (time-utc->date
+                              (make-time time-utc 0
+                                         (stat:mtime (stat "awesome.c"))))
+                             "\"~c\"")))
+                         #t))
              (patches (search-patches "awesome-reproducible-png.patch"))))
     (build-system cmake-build-system)
     (native-inputs `(("asciidoc" ,asciidoc)
diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm
index ad264a24e8..f1a61329e8 100644
--- a/gnu/packages/wxwidgets.scm
+++ b/gnu/packages/wxwidgets.scm
@@ -184,7 +184,8 @@ and many other languages.")
               ;; setup.py tries to keep its own license the same as wxwidget's
               ;; license (which it expects under $WXWIN/docs).
               (("'preamble.txt', 'licence.txt', 'licendoc.txt', 'lgpl.txt'")
-                ""))))))
+               ""))
+            #t))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index f1149b2c89..0bc007e80b 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015, 2016 Alex Kost <alezost@gmail.com>
-;;; Copyright © 2013, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Alexander I.Grafov <grafov@gmail.com>
 ;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
@@ -92,11 +92,13 @@
                 "1i3f1agixxbfy4kxikb2b241p7c2lg73cl9wqfvlwz3q6zf5faxv"))
               (modules '((guix build utils)))
               (snippet
-               ;; Do not record a timestamp and file name in gzipped man
-               ;; pages (this is equivalent to 'gzip --no-name'.)
-               '(substitute* "setup.py"
-                  (("gzip\\.open\\(gzfile, 'w', 9\\)")
-                   "gzip.GzipFile('', 'wb', 9, open(gzfile, 'wb'), 0.)")))))
+               '(begin
+                  ;; Do not record a timestamp and file name in gzipped man
+                  ;; pages (this is equivalent to 'gzip --no-name'.)
+                  (substitute* "setup.py"
+                    (("gzip\\.open\\(gzfile, 'w', 9\\)")
+                     "gzip.GzipFile('', 'wb', 9, open(gzfile, 'wb'), 0.)"))
+                  #t))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2     ;incompatible with python 3
@@ -138,12 +140,7 @@ program.")
            "0n7pczk9vv30zf8qfln8ba3hnif9yfdxg0m84djac469wc28hnya"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f     ; There is no test suite
-       #:phases
-       (modify-phases %standard-phases
-         ;; Since version 0.13, bootstrapped releases are no longer available.
-         (add-after 'unpack 'bootstrap
-           (lambda _ (zero? (system* "autoreconf" "-v")))))))
+     '(#:tests? #f))                              ;there is no test suite
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)))
@@ -629,9 +626,7 @@ things less distracting.")
        ("libxi" ,libxi)
        ("libxtst" ,libxtst)))
     (native-inputs
-     `(("inputproto" ,inputproto)
-       ("xextproto" ,xextproto)
-       ("xproto" ,xproto)))
+     `(("xorgproto" ,xorgproto)))
     (synopsis "Tools to automate tasks in X such as detecting on screen images")
     (description
      "Xautomation can control X from the command line for scripts, and
@@ -1260,7 +1255,9 @@ program for X11.  It was designed to be fast, tiny and scriptable in any languag
               (modules '((guix build utils)))
               (snippet
                ;; Drop bundled m4.
-               '(delete-file-recursively "m4"))))
+               '(begin
+                  (delete-file-recursively "m4")
+                  #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm
index 8721fd91ad..134d601881 100644
--- a/gnu/packages/xfce.scm
+++ b/gnu/packages/xfce.scm
@@ -718,7 +718,8 @@ on your desktop.")
          (match %build-inputs
            (((names . directories) ...)
             (union-build (assoc-ref %outputs "out")
-                         directories))))))
+                         directories)
+            #t)))))
     (inputs
      `(("exo"                  ,exo)
        ("garcon"               ,garcon)
diff --git a/gnu/packages/xiph.scm b/gnu/packages/xiph.scm
index d3a590bc58..a9f4a2ab87 100644
--- a/gnu/packages/xiph.scm
+++ b/gnu/packages/xiph.scm
@@ -80,17 +80,14 @@ periodic timestamps for seeking.")
 (define libvorbis
   (package
    (name "libvorbis")
-   (version "1.3.5")
-   (replacement libvorbis-1.3.6)
+   (version "1.3.6")
    (source (origin
             (method url-fetch)
             (uri (string-append "http://downloads.xiph.org/releases/vorbis/"
                                 "libvorbis-" version ".tar.xz"))
-            (patches (search-patches "libvorbis-CVE-2017-14633.patch"
-                                     "libvorbis-CVE-2017-14632.patch"))
             (sha256
              (base32
-              "1lg1n3a6r41492r7in0fpvzc7909mc5ir9z0gd3qh2pz4yalmyal"))))
+              "05dlzjkdpv46zb837wysxqyn8l636x3dw8v8ymlrwz2fg1dbn05g"))))
    (build-system gnu-build-system)
    (propagated-inputs `(("libogg" ,libogg)))
    (arguments `(#:configure-flags '("LDFLAGS=-lm")
@@ -106,18 +103,6 @@ polyphonic) audio and music at fixed and variable bitrates from 16 to
                                "See COPYING in the distribution."))
    (home-page "https://xiph.org/vorbis/")))
 
-;; For CVE-2018-5146.
-(define-public libvorbis-1.3.6
-  (package/inherit libvorbis
-    (version "1.3.6")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://downloads.xiph.org/releases/vorbis/"
-                                  "libvorbis-" version ".tar.xz"))
-              (sha256
-               (base32
-                "05dlzjkdpv46zb837wysxqyn8l636x3dw8v8ymlrwz2fg1dbn05g"))))))
-
 (define libtheora
   (package
     (name "libtheora")
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index f3866f3d83..d0184c45d1 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -120,14 +120,14 @@ hierarchical form with variable field lengths.")
 (define-public libxml2
   (package
     (name "libxml2")
-    (version "2.9.7")
+    (version "2.9.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "034hylzspvkm0p4bczqbf8q05a7r2disr8dz725x4bin61ymwg7n"))))
+               "0ci7is75bwqqw2p32vxvrk6ds51ik7qgx73m920rakv5jlayax0b"))))
     (build-system gnu-build-system)
     (home-page "http://www.xmlsoft.org/")
     (synopsis "C parser for XML")
@@ -1248,7 +1248,7 @@ files.  It is designed to be fast and to handle large input files.")
      `(#:phases
        (modify-phases %standard-phases
          ;; Bootstrapping is required in order to fix the test driver script.
-         (add-after 'unpack 'bootstrap
+         (replace 'bootstrap
            (lambda _
              (zero? (system* "bash" "bootstrap")))))))
     (native-inputs
diff --git a/gnu/packages/xnee.scm b/gnu/packages/xnee.scm
index fc5130c0ec..5cd20cbef1 100644
--- a/gnu/packages/xnee.scm
+++ b/gnu/packages/xnee.scm
@@ -40,14 +40,11 @@
     (build-system gnu-build-system)
     (inputs
      `(("gtk+" ,gtk+-2)
-       ("inputproto" ,inputproto)
        ("libx11" ,libx11)
        ("libxext" ,libxext)
        ("libxi" ,libxi)
        ("libxtst" ,libxtst)
-       ("recordproto" ,recordproto)
-       ("xextproto" ,xextproto)
-       ("xproto" ,xproto)))
+       ("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.gnu.org/software/xnee/")
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 8848df041e..3ee5f07f35 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -1,8 +1,8 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 ;;; Copyright © 2015 Cyrill Schenkel <cyrill.schenkel@gmail.com>
@@ -119,7 +119,7 @@
       `(("pkg-config" ,pkg-config)))
     (inputs
       `(("xorg-cf-files" ,xorg-cf-files)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -137,10 +137,10 @@
                  (substitute* '("mingw.cf" "Imake.tmpl" "nto.cf" "os2.cf"
                                 "linux.cf" "Amoeba.cf" "cygwin.cf")
                    (("/bin/sh") (which "bash")))
-                 (and (zero? (system* "./configure"
-                                      (string-append "SHELL=" (which "bash"))
-                                      (string-append "--prefix=" out)))
-                      (zero? (system* "make" "install"))))))))))
+                 (invoke "./configure"
+                         (string-append "SHELL=" (which "bash"))
+                         (string-append "--prefix=" out))
+                 (invoke "make" "install"))))))))
     (home-page "https://www.x.org/")
     (synopsis "Source code configuration and build system")
     (description
@@ -169,7 +169,7 @@ autotools system.")
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("xproto" ,xproto)))
+     `(("xorgproto" ,xorgproto)))
     (home-page "https://www.x.org/")
     (synopsis "Symlink directory into tree")
     (description "Create a shadow directory of symbolic links to another
@@ -203,6 +203,27 @@ converts X font from Bitmap Distribution Format to Portable Compiled Format
 which can be read by any architecture.")
     (license license:x11)))
 
+(define-public xorgproto
+  (package
+    (name "xorgproto")
+    (version "2018.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://xorg/individual/proto/"
+                                  name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "180mqkp70i44rkmj430pmn9idssvffrgv4y5h19fm698a7h8bs7y"))))
+    (build-system gnu-build-system)
+    (propagated-inputs
+     ;; To get util-macros in (almost?) all package inputs.
+     `(("util-macros" ,util-macros)))
+    (home-page "https://cgit.freedesktop.org/xorg/proto/xorgproto")
+    (synopsis "Xorg protocol headers")
+    (description
+     "This package provides the headers and specification documents defining
+the core protocol and (many) extensions for the X Window System.")
+    (license license:x11)))
 
 (define-public bigreqsproto
   (package
@@ -225,8 +246,8 @@ which can be read by any architecture.")
     (description
      "Big Requests Extension defines a protocol to enable the use of
 requests that exceed 262140 bytes in length.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public compositeproto
   (package
@@ -244,7 +265,7 @@ requests that exceed 262140 bytes in length.")
             "1z0crmf669hirw4s7972mmp8xig80kfndja9h559haqbpvq5k4q4"))))
     (build-system gnu-build-system)
     (inputs
-      `(("fixesproto" ,fixesproto)))
+      `(("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -252,8 +273,8 @@ requests that exceed 262140 bytes in length.")
     (description
      "Composite Extension contains header files and documentation for
 the damage protocol.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public damageproto
   (package
@@ -276,8 +297,8 @@ the damage protocol.")
     (description
      "Damage Extension contains header files and documentation for
 the damage protocol.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public dmxproto
   (package
@@ -301,8 +322,8 @@ the damage protocol.")
      "DMX (Distributed Multihead X) Extension defines a protocol for clients
 to access a front-end proxy X server that controls multiple back-end X
 servers making up a large display.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public dri2proto
   (package
@@ -325,7 +346,8 @@ servers making up a large display.")
      "Direct Rendering Infrastructure 2 Extension defines a protocol to
 securely allow user applications to access the video hardware without
 requiring data to be passed through the X server.")
-    (license license:x11)))
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public dri3proto
   (package
@@ -350,7 +372,8 @@ translate between direct rendered buffers and X pixmaps.  When combined with
 the Present extension, a complete direct rendering solution for OpenGL is
 provided.")
     (license (license:x11-style "file://dri3proto.h"
-                                "See 'dri3proto.h' in the distribution."))))
+                                "See 'dri3proto.h' in the distribution."))
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public %app-defaults-dir "/lib/X11/app-defaults")
 
@@ -425,10 +448,12 @@ Resources file.")
     (modules '((guix build utils)))
     (snippet
      ;; Do not include timestamps in '.pcf.gz' files.
-     '(substitute* "Makefile.in"
-        (("^COMPRESS = (.*)$" _ rest)
-         (string-append "COMPRESS = " (string-trim-right rest)
-                        " --no-name\n"))))))
+     '(begin
+        (substitute* "Makefile.in"
+          (("^COMPRESS = (.*)$" _ rest)
+           (string-append "COMPRESS = " (string-trim-right rest)
+                          " --no-name\n")))
+        #t))))
 
 (define-syntax-rule (xorg-font-origin font version hash)
   "Expand to the 'origin' form for the given Xorg font package."
@@ -888,8 +913,8 @@ For example: '6x10', '9x15bold', etc.")
     (description
      "Fonts Extension contains header files and documentation for
 the fonts protocol.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public glproto
   (package
@@ -912,8 +937,8 @@ the fonts protocol.")
     (description
      "OpenGL Extension defines a protocol for the client to send 3D
 rendering commands to the X server.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public iceauth
   (package
@@ -965,8 +990,8 @@ authentication records.")
     (description
      "Input Extension defines a protocol to provide additional input
 devices management such as graphic tablets.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public kbproto
   (package
@@ -989,8 +1014,8 @@ devices management such as graphic tablets.")
     (description
      "X Keyboard (XKB) Extension defines a protocol to provide a number
 of new capabilities and controls for text keyboards.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 ;; requires applewmproto, which compiles only on macos
 ;; (define-public libapplewm
@@ -1012,10 +1037,9 @@ of new capabilities and controls for text keyboards.")
             "00djlxas38kbsrglcmwmxfbmxjdchlbj95pqwjvdg8jn5rns6zf9"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xextproto" ,xextproto)
+      `(("xorgproto" ,xorgproto)
         ("libxext" ,libxext)
-        ("libx11" ,libx11)
-        ("dmxproto" ,dmxproto)))
+        ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1039,7 +1063,7 @@ of new capabilities and controls for text keyboards.")
                 "1ir0j92mnd1nk37mrv9bz5swnccqldicgszvfsh62jd14q6k115q"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("xproto" ,xproto)))
+    (inputs `(("xorgproto" ,xorgproto)))
     (home-page "https://www.x.org/")
     (synopsis "Xorg shared memory fences library")
     (description
@@ -1067,7 +1091,7 @@ synchronization between the X server and direct-rendering clients.")
     (build-system gnu-build-system)
     (inputs
       `(("zlib" ,zlib)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1093,8 +1117,7 @@ synchronization between the X server and direct-rendering clients.")
     (build-system gnu-build-system)
     (inputs
       `(("xtrans" ,xtrans)
-        ("xproto" ,xproto)
-        ("fontsproto" ,fontsproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1223,10 +1246,9 @@ hit when running single-threaded.")
             "1p0flwb67xawyv6yhri9w17m1i4lji5qnd0gq8v1vsfb8zw7rw15"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xextproto" ,xextproto)
+      `(("xorgproto" ,xorgproto)
         ("libxext" ,libxext)
-        ("libx11" ,libx11)
-        ("windowswmproto" ,windowswmproto)))
+        ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1256,10 +1278,9 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
     (build-system gnu-build-system)
     (propagated-inputs
      ;; xcomposite.pc refers to all these.
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libxfixes" ,libxfixes)
-        ("libx11" ,libx11)
-        ("compositeproto" ,compositeproto)))
+        ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1286,7 +1307,7 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
     (build-system gnu-build-system)
     (inputs
       `(("libbsd" ,libbsd)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1317,7 +1338,7 @@ with the Cygwin XWin server when running X11 in a rootless mode.")
         ("fontconfig" ,fontconfig)))
     (inputs
       `(("libx11" ,libx11)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1371,7 +1392,7 @@ configuration files.")
     (build-system gnu-build-system)
     (inputs
       `(("libxt" ,libxt)
-        ("xproto" ,xproto)
+        ("xorgproto" ,xorgproto)
         ("libxext" ,libxext)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -1404,7 +1425,7 @@ treat it as part of their software base when porting.")
     (inputs
       `(("gettext" ,gettext-minimal)
         ("libxt" ,libxt)
-        ("xproto" ,xproto)
+        ("xorgproto" ,xorgproto)
         ("libxext" ,libxext)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -1430,10 +1451,9 @@ treat it as part of their software base when porting.")
             "1m0jr0lbz9ixpp9ihk68349q0i7ry2379lnfzdy4mrl86ijc2xgz"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libxext" ,libxext)
-        ("libx11" ,libx11)
-        ("resourceproto" ,resourceproto)))
+        ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1461,7 +1481,7 @@ treat it as part of their software base when porting.")
       `(("libxext" ,libxext)
         ("libx11" ,libx11)))
     (propagated-inputs
-      `(("scrnsaverproto" ,scrnsaverproto)))
+      `(("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1486,7 +1506,7 @@ treat it as part of their software base when porting.")
             "0zn7aqj8x0951d8zb2h2andldvwkzbsc4cs7q023g6nzq6vd9v4f"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xf86dgaproto" ,xf86dgaproto)))
+      `(("xorgproto" ,xorgproto)))
     (inputs
       `(("libx11" ,libx11)
         ("libxext" ,libxext)))
@@ -1546,7 +1566,7 @@ input from UTF-8 into the locale's encoding.")
             "09alw99r6y2bbd1dc786n3jfgv4j520apblyn7cw6jkjydshba7p"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)))
+      `(("xorgproto" ,xorgproto)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg makedepend utility")
@@ -1572,7 +1592,7 @@ input from UTF-8 into the locale's encoding.")
     (build-system gnu-build-system)
     (inputs
       `(("zlib" ,zlib)
-        ("xproto" ,xproto)
+        ("xorgproto" ,xorgproto)
         ("freetype" ,freetype)
         ("libfontenc" ,libfontenc)))
     (native-inputs
@@ -1608,7 +1628,8 @@ window contents from a pixmap in a well defined fashion, synchronizing
 with the display refresh and potentially using a more efficient
 mechanism than copying the contents of the source pixmap.")
     (license (license:x11-style "file://presentproto.h"
-                                "See 'presentproto.h' in the distribution."))))
+                                "See 'presentproto.h' in the distribution."))
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public printproto
   (package
@@ -1656,7 +1677,8 @@ network-transparent printing system.")
      "Resize and Rotate Extension defines a protocol for clients to
 dynamically change X screens, so as to resize, rotate and reflect the root
 window of a screen.")
-    (license license:x11)))
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 
 (define-public recordproto
@@ -1680,8 +1702,8 @@ window of a screen.")
     (description
      "Record Extension defines a protocol for the recording and playback
 of user actions in the X Window System.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public renderproto
   (package
@@ -1704,8 +1726,8 @@ of user actions in the X Window System.")
     (description
      "Rendering Extension defines a protcol for a digital image composition
 as the foundation of a new rendering model within the X Window System.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public resourceproto
   (package
@@ -1728,8 +1750,8 @@ as the foundation of a new rendering model within the X Window System.")
     (description
      "Resource Extension defines a protocol that allows a client to
 query the X server about its usage of various resources.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public scrnsaverproto
   (package
@@ -1752,8 +1774,8 @@ query the X server about its usage of various resources.")
     (description
      "Screen Saver Extension defines a protocol to control screensaver
 features and to query screensaver info on specific windows.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public sessreg
   (package
@@ -1771,7 +1793,7 @@ features and to query screensaver info on specific windows.")
             "1qd66mg2bnppqz4xgdjzif2488zl82vx2c26ld3nb8pnyginm9vq"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)))
+      `(("xorgproto" ,xorgproto)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -1849,7 +1871,7 @@ management to participate in an X11R6 session.")
 (define-public util-macros
   (package
     (name "util-macros")
-    (version "1.19.1")
+    (version "1.19.2")
     (source
       (origin
         (method url-fetch)
@@ -1859,25 +1881,26 @@ management to participate in an X11R6 session.")
                ".tar.bz2"))
         (sha256
           (base32
-            "19h6wflpmh7xxqr6lk5z8pds6r9r0dn7ijbvaacymx2q0m05km0q"))))
+            "04p7ydqxgq37jklnfj18b70zsifiz4h50wvrk94i2112mmv37r6p"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (arguments
-     `(#:phases (alist-cons-after
-                 'unpack 'fix-makefile-in
-                 (lambda _
-                   (substitute* "Makefile.in"
-                     ;; Install xorg-macros.pc in PREFIX/lib/pkgconfig,
-                     ;; not PREFIX/share/pkgconfig.
-                     (("\\$\\(datadir\\)/pkgconfig") "$(libdir)/pkgconfig")))
-                 (alist-cons-after
-                  'install 'post-install-cleanup
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let ((out (assoc-ref outputs "out")))
-                      (with-directory-excursion out
-                        (delete-file "share/util-macros/INSTALL")
-                        (rmdir "share/util-macros"))))
-                  %standard-phases))))
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-makefile-in
+           (lambda _
+             (substitute* "Makefile.in"
+               ;; Install xorg-macros.pc in PREFIX/lib/pkgconfig,
+               ;; not PREFIX/share/pkgconfig.
+               (("\\$\\(datadir\\)/pkgconfig") "$(libdir)/pkgconfig"))
+             #t))
+         (add-after 'install 'post-install-cleanup
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (with-directory-excursion out
+                 (delete-file "share/util-macros/INSTALL")
+                 (rmdir "share/util-macros"))
+               #t))))))
     (home-page "https://www.x.org/wiki/")
     (synopsis "Xorg autoconf macros")
     (description
@@ -1908,8 +1931,8 @@ generate new versions of their configure scripts with autoconf.")
     (description
      "Video Extension provides a protocol for a video output mechanism,
 mainly to rescale video playback in the video controller hardware.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public windowswmproto
   (package
@@ -1934,8 +1957,8 @@ mainly to rescale video playback in the video controller hardware.")
 an X11 server and the Microsoft Windows native window manager.  WindowsWM
 is only intended to be used on Cygwin when running a rootless XWin
 server.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public x11perf
   (package
@@ -2089,7 +2112,7 @@ emulate a TI-30 or an HP-10C.")
 (define-public xcb-proto
   (package
     (name "xcb-proto")
-    (version "1.12")
+    (version "1.13")
     (source
       (origin
         (method url-fetch)
@@ -2099,10 +2122,7 @@ emulate a TI-30 or an HP-10C.")
                ".tar.bz2"))
         (sha256
           (base32
-           "01j91946q8f34l1mbvmmgvyc393sm28ym4lxlacpiav4qsjan8jr"))
-        (patches
-         (search-patches "xcb-proto-python3-whitespace.patch"
-                         "xcb-proto-python3-print.patch"))))
+           "1qdxw9syhbvswiqj5dvj278lrmfhs81apzmvx6205s4vcqg7563v"))))
     (build-system gnu-build-system)
     (native-inputs
       `(("pkg-config" ,pkg-config) ("python" ,python-minimal-wrapper)))
@@ -2142,8 +2162,8 @@ generators in individual language bindings.")
     (description
      "XC-MISC Extension defines a protocol that provides Xlib two ways
 to query the server for available resource IDs.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public xcmsdb
   (package
@@ -2250,7 +2270,7 @@ X server: 'handhelds', 'redglass' and 'whiteglass'.")
             "0ldgrj4w2fa8jng4b3f3biaj0wyn8zvya88pnk70d7k12pcqw8rh"))))
     (build-system gnu-build-system)
     (inputs
-      `(("inputproto" ,inputproto)
+      `(("xorgproto" ,xorgproto)
         ("libx11" ,libx11)
         ("libxxf86vm" ,libxxf86vm)
         ("libxxf86dga" ,libxxf86dga)
@@ -2319,7 +2339,7 @@ DRI (Direct Rendering Infrastructure) drivers.")
     (inputs
       `(("libxrender" ,libxrender)
         ("libxrandr" ,libxrandr)
-        ("xproto" ,xproto)
+        ("xorgproto" ,xorgproto)
         ("libx11" ,libx11)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -2359,8 +2379,8 @@ usage.")
 Extended-Visual-Information, Generic Event Extension, LBX, MIT-SHM,
 MIT-SUNDRY-NONSTANDARD, Multi-Buffering, SECURITY, SHAPE, SYNC, TOG-CUP,
 XC-APPGROUP, XTEST.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public libevdev
   (package
@@ -2666,7 +2686,7 @@ as USB mice.")
             "180l2yw8c63cbcs3zk729vx439aig1d7yicpyxj0nmfl4y0kpskj"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
-              ("xxf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (arguments `(#:configure-flags `("--disable-glamor"))) ; TODO: Enable glamor
@@ -2767,11 +2787,7 @@ framebuffer device.")
        `(#:configure-flags
          (list (string-append "--with-xorg-conf-dir="
                               (assoc-ref %outputs "out")
-                              "/share/X11/xorg.conf.d"))
-         #:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'bootstrap
-                      (lambda _
-                        (zero? (system* "autoreconf" "-vfi")))))))
+                              "/share/X11/xorg.conf.d"))))
       (home-page "https://www.x.org/wiki/")
       (synopsis "Adreno video driver for X server")
       (description
@@ -2854,7 +2870,7 @@ compositing.  Both support Xv overlay and dynamic rotation with XRandR.")
           (base32
            "1lkpspvrvrp9s539bhfdjfh4andaqyk63l6zjn8m3km95smk6a45"))))
     (build-system gnu-build-system)
-    (inputs `(("xf86dgaproto" ,xf86dgaproto)
+    (inputs `(("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -2927,9 +2943,11 @@ X server.")
       (arguments
        '(#:configure-flags '("--with-default-accel=uxa")
          #:phases (modify-phases %standard-phases
-                    (add-after 'unpack 'bootstrap
+                    (add-before 'bootstrap 'pre-bootstrap
                       (lambda _
-                        (zero? (system* "autoreconf" "-vfi")))))))
+                        ;; Inhibit autogen.sh from running configure.
+                        (setenv "NOCONFIGURE" "1")
+                        #t)))))
       (home-page "https://www.x.org/wiki/")
       (synopsis "Intel video driver for X server")
       (description
@@ -2955,7 +2973,7 @@ It supports a variety of Intel graphics chipsets.")
         (patches (search-patches "xf86-video-mach64-glibc-2.20.patch"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
-              ("xf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -2986,7 +3004,7 @@ the same level of support for generic VGA or 8514/A adapters.")
            "08ll52hlar9z446v0wwca5qkj3hxhswwm7vvcgic9xv4cf7csqxn"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
-              ("xf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3010,7 +3028,7 @@ the same level of support for generic VGA or 8514/A adapters.")
           (base32
             "1whb2kgyqaxdjim27ya404acz50izgmafwnb6y9m89q5n6b97y3j"))))
     (build-system gnu-build-system)
-    (inputs `(("xf86dgaproto" ,xf86dgaproto)
+    (inputs `(("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3117,7 +3135,7 @@ graphics cards.")
               ("libxext" ,libxext)
               ("libxvmc" ,libxvmc)
               ("mesa" ,mesa)
-              ("xf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -3144,12 +3162,10 @@ UniChrome Pro and Chrome9 integrated graphics processors.")
                 "14jc24znnahhmz4kqalafmllsg8awlz0y6gpgdpk5ih38ph851mi"))))
     (build-system gnu-build-system)
     (inputs
-      `(("fontsproto" ,fontsproto)
-        ("libxfont" ,libxfont2)
+      `(("libxfont" ,libxfont2)
         ("spice-protocol" ,spice-protocol)
-        ("xf86dgaproto" ,xf86dgaproto)
         ("xorg-server" ,xorg-server)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (synopsis "Qxl video driver for X server")
@@ -3175,7 +3191,7 @@ This driver is intended for the spice qxl virtio device.")
            "1pkpka5m4cd6iy0f8iqnmg6xci14nb6887ilvxzn3xrsgx8j3nl4"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
-              ("xf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3202,7 +3218,7 @@ This driver is intended for ATI Rage 128 based cards.")
            "11pcrsdpdrwk0mrgv83s5nsx8a9i4lhmivnal3fjbrvi3zdw94rc"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
-              ("xf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3254,8 +3270,7 @@ Xorg X server.")
            "03f1abjjf68y8y1iz768rn95va9d33wmbwfbsqrgl6k0gi0bf9jj"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
-              ("xf86dgaproto" ,xf86dgaproto)
-              ("xf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -3331,7 +3346,7 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
            "0hia45z4jc472fxp00803nznizcn4h1ybp63jcsb4lmd9vhqxx2c"))))
     (build-system gnu-build-system)
     (inputs `(("mesa" ,mesa)
-              ("xf86driproto" ,xf86driproto)
+              ("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3357,7 +3372,7 @@ This driver supports SiS chipsets of 300/315/330/340 series.")
            "0cb161lvdgi6qnf1sfz722qn38q7kgakcvj7b45ba3i0020828r0"))
         (patches (search-patches "xf86-video-tga-remove-mibstore.patch"))))
     (build-system gnu-build-system)
-    (inputs `(("xf86dgaproto" ,xf86dgaproto)
+    (inputs `(("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3383,7 +3398,7 @@ X server.")
           (base32
            "0gxcar434kx813fxdpb93126lhmkl3ikabaljhcj5qn3fkcijlcy"))))
     (build-system gnu-build-system)
-    (inputs `(("xf86dgaproto" ,xf86dgaproto)
+    (inputs `(("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3477,7 +3492,7 @@ xf86-video-voodoo/patch/?id=9172ae566a0e85313fc80ab62b4455393eefe593")
                    "0rndmxf5b8j3hjnhrwrnzsq5024fli134fj1mprhkcrvax2zq8db"))
                  (file-name "xf86-video-voodoo-pcitag.patch"))))))
     (build-system gnu-build-system)
-    (inputs `(("xf86dgaproto" ,xf86dgaproto)
+    (inputs `(("xorgproto" ,xorgproto)
               ("xorg-server" ,xorg-server)))
     (native-inputs `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3511,8 +3526,8 @@ xf86-video-voodoo/patch/?id=9172ae566a0e85313fc80ab62b4455393eefe593")
     (description
      "XFree86 Bigfont Extension contains header files and documentation
 for the XF86BigFontProto protocol.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public xf86dgaproto
   (package
@@ -3534,8 +3549,8 @@ for the XF86BigFontProto protocol.")
     (description
      "XFree86 Direct Graphic Access Extension defines a protocol for
 direct linear framebuffer access.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public xf86driproto
   (package
@@ -3558,8 +3573,8 @@ direct linear framebuffer access.")
      "XFree86 Direct Rendering Infrastructure Extension defines a
 protocol to allow user applications to access the video hardware without
 requiring data to be passed through the X server.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public xf86vidmodeproto
   (package
@@ -3581,8 +3596,8 @@ requiring data to be passed through the X server.")
     (description
      "XFree86 Video Mode Extension defines a protocol for dynamically
 configuring modelines and gamma.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public xgamma
   (package
@@ -3668,8 +3683,8 @@ This extension provides a common network protocol for querying information
 which may be provided by different underlying screen combination
 technologies in the X server, such as the original Xinerama multiplexer, or
 alternative implementations like XRandR or TwinView.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public xinput
   (package
@@ -3693,7 +3708,7 @@ alternative implementations like XRandR or TwinView.")
         ("libxext" ,libxext)
         ("libxi" ,libxi)
         ("libx11" ,libx11)
-        ("inputproto" ,inputproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3719,7 +3734,7 @@ alternative implementations like XRandR or TwinView.")
           "0djp7bb0ch2ddwmc1bkg4fddxdvamiiz375x0r0ni5dcb37w93bl"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libxkbfile" ,libxkbfile)
         ("libx11" ,libx11)))
     (native-inputs
@@ -3798,9 +3813,8 @@ requested commands if they occur.")
     (build-system gnu-build-system)
     (inputs
       `(("libxt" ,libxt)
-        ("xproto" ,xproto)
         ("libxaw" ,libxaw)
-        ("inputproto" ,inputproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -3947,7 +3961,7 @@ running on X server.")
          "0s6kxgv78chkwsqmhw929f4pf91gq63f4yvixxnan1h00cx0pf49"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xproto" ,xproto)
+     `(("xorgproto" ,xorgproto)
        ("libx11" ,libx11)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -4043,7 +4057,7 @@ containing one glyph per cell.")
         (patches (search-patches "xmodmap-asprintf.patch"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -4106,7 +4120,7 @@ refers to the included common xorg.css stylesheet.")
             "07qy9lwjvxighcmg6qvjkgagad3wwvidrfx0jz85lgynz3qy0dmr"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libxmu" ,libxmu)
         ("libx11" ,libx11)))
     (native-inputs
@@ -4135,7 +4149,7 @@ it for output on various types of printers.")
             "06sjgahjiz85v0k0pmv5x05chc591xynl5ah1bqzz1bdr0lgnanj"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -4164,7 +4178,7 @@ an X server.")
     (inputs
       `(("libxrender" ,libxrender)
         ("libxrandr" ,libxrandr)
-        ("xproto" ,xproto)
+        ("xorgproto" ,xorgproto)
         ("libx11" ,libx11)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -4251,7 +4265,7 @@ up your screen.")
             "0my987wjvra7l92ry6q44ky383yg3phzxhdbn3lqhapm1ll9bzg4"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libxmu" ,libxmu)
         ("libxext" ,libxext)
         ("libx11" ,libx11)))
@@ -4367,7 +4381,7 @@ extension.")
     (inputs
       `(("libxt" ,libxt)
         ("libxkbfile" ,libxkbfile)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4399,7 +4413,7 @@ dump and twice whenthe dump is completed.")
     (build-system gnu-build-system)
     (inputs
       `(("libx11" ,libx11)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4426,7 +4440,7 @@ Various information is displayed depending on which options are selected.")
             "1a8hdgy40smvblnh3s9f0vkqckl68nmivx7d48zk34m8z18p16cr"))))
     (build-system gnu-build-system)
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libx11" ,libx11)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
@@ -4453,7 +4467,7 @@ formatted dump file, such as produced by xwd.")
             "1c76zcjs39ljil6f6jpx1x17c8fnvwazz7zvl3vbjfcrlmm7rjmv"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xproto" ,xproto)))
+     `(("xorgproto" ,xorgproto)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4480,7 +4494,7 @@ formatted dump file, such as produced by xwd.")
             "1ki4wiq2iivx5g4w5ckzbjbap759kfqd72yg18m3zpbb4hqkybxs"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xextproto" ,xextproto)))
+      `(("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4489,8 +4503,8 @@ formatted dump file, such as produced by xwd.")
      "Fixes Extension makes changes to many areas of the protocol to resolve
 issues raised by application interaction with core protocol mechanisms that
 cannot be adequately worked around on the client side of the wire.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 (define-public libxdamage
   (package
@@ -4509,9 +4523,8 @@ cannot be adequately worked around on the client side of the wire.")
     (build-system gnu-build-system)
     (propagated-inputs
       ;; These are all in the Requires or Requires.private field of xdamage.pc
-      `(("damageproto" ,damageproto)
-        ("libxfixes" ,libxfixes)
-        ("xproto" ,xproto)
+      `(("libxfixes" ,libxfixes)
+        ("xorgproto" ,xorgproto)
         ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -4537,7 +4550,7 @@ cannot be adequately worked around on the client side of the wire.")
             "0dbfn5bznnrhqzvkrcmw4c44yvvpwdcsrvzxf4rk27r36b9x865m"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xextproto" ,xextproto)))
+      `(("xorgproto" ,xorgproto)))
     (inputs
       `(("libxau" ,libxau)
         ("libx11" ,libx11)))
@@ -4566,7 +4579,7 @@ cannot be adequately worked around on the client side of the wire.")
             "1qlqfvzw45gdzk9xirgwlp2qgj0hbsyiqj8yh8zml2bk2ygnjibs"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xineramaproto" ,xineramaproto)))
+      `(("xorgproto" ,xorgproto)))
     (inputs
       `(("libxext" ,libxext)
         ("libx11" ,libx11)))
@@ -4622,10 +4635,9 @@ cannot be adequately worked around on the client side of the wire.")
             "0j89cnb06g8x79wmmnwzykgkkfdhin9j7hjpvsxwlr3fz1wmjvf0"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("renderproto" ,renderproto)))
+      `(("xorgproto" ,xorgproto)))
     (inputs
-      `(("xproto" ,xproto)
-        ("libx11" ,libx11)))
+      `(("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4649,11 +4661,10 @@ cannot be adequately worked around on the client side of the wire.")
             "012jpyj7xfm653a9jcfqbzxyywdmwb2b5wr1dwylx14f3f54jma6"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("recordproto" ,recordproto)
-        ("libxi" ,libxi)))
+     `(("libxi" ,libxi)
+       ("xorgproto" ,xorgproto)))
     (inputs
-      `(("libx11" ,libx11)
-        ("inputproto" ,inputproto)))
+      `(("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4687,10 +4698,9 @@ protocol and arbitrary X extension protocol.")
             "125hn06bd3d8y97hm2pbf5j55gg4r2hpd3ifad651i4sr7m16v6j"))))
     (build-system gnu-build-system)
     (propagated-inputs
-     `(("videoproto" ,videoproto)))
+     `(("xorgproto" ,xorgproto)))
     (inputs
-      `(("xproto" ,xproto)
-        ("libxext" ,libxext)
+      `(("libxext" ,libxext)
         ("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
@@ -4723,7 +4733,8 @@ protocol and arbitrary X extension protocol.")
                                           "/bin/mkfontdir")
                `("PATH" ":" prefix
                  (,(string-append (assoc-ref inputs "mkfontscale")
-                                  "/bin")))))))))
+                                  "/bin"))))
+             #t)))))
     (inputs
       `(("mkfontscale" ,mkfontscale)))
     (native-inputs
@@ -4736,7 +4747,6 @@ server core font system.  The current implementation is a simple wrapper
 script around the mkfontscale program.")
     (license license:x11)))
 
-
 (define-public xproto
   (package
     (name "xproto")
@@ -4765,30 +4775,8 @@ the X Window System Core Protocol, Version 11.
 It also includes a number of headers that aren't purely protocol related,
 but are depended upon by many other X Window System packages to provide
 common definitions and porting layer.")
-    (license license:x11)))
-
-(define-public xorgproto
-  (package
-    (name "xorgproto")
-    (version "2018.4")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "mirror://xorg/individual/proto/"
-                                  name "-" version ".tar.bz2"))
-              (sha256
-               (base32
-                "180mqkp70i44rkmj430pmn9idssvffrgv4y5h19fm698a7h8bs7y"))))
-    (build-system gnu-build-system)
-    (propagated-inputs
-     ;; To get util-macros in (almost?) all package inputs.
-     `(("util-macros" ,util-macros)))
-    (home-page "https://cgit.freedesktop.org/xorg/proto/xorgproto")
-    (synopsis "Xorg protocol headers")
-    (description
-     "This package provides the headers and specification documents defining
-the core protocol and (many) extensions for the X Window System.")
-    (license license:x11)))
-
+    (license license:x11)
+    (properties `((superseded . ,xorgproto)))))
 
 ;; packages of height 2 in the propagated-inputs tree
 
@@ -4808,7 +4796,7 @@ the core protocol and (many) extensions for the X Window System.")
             "00p2b6bsg6kcdbb39bv46339qcywxfl4hsrz8asm4hy6q7r34w4g"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xproto" ,xproto)))
+      `(("xorgproto" ,xorgproto)))
     (inputs
       `(("libbsd" ,libbsd)
         ("xtrans" ,xtrans)))
@@ -4836,7 +4824,7 @@ the core protocol and (many) extensions for the X Window System.")
             "1wm4pv12f36cwzhldpp7vy3lhm3xdcnp4f184xkxsp7b18r7gm7x"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("xproto" ,xproto)))
+      `(("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4862,10 +4850,9 @@ an X Window System display.")
             "1miana3y4hwdqdparsccmygqr3ic3hs5jrqfzp70hvi2zwxd676y"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("fixesproto" ,fixesproto)))
+      `(("xorgproto" ,xorgproto)))
     (inputs
-      `(("xproto" ,xproto)
-        ("libx11" ,libx11)))
+      `(("libx11" ,libx11)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4889,10 +4876,9 @@ an X Window System display.")
             "0hiji1bvpl78aj3a3141hkk353aich71wv8l5l2z51scfy878zqs"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("fontsproto" ,fontsproto)
-        ("freetype" ,freetype)
+      `(("freetype" ,freetype)
         ("libfontenc" ,libfontenc)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (inputs
       `(("zlib" ,zlib)
         ("xtrans" ,xtrans)))
@@ -4937,12 +4923,10 @@ new API's in libXft, or the legacy API's in libX11.")
             "0idg1wc01hndvaa820fvfs7phvd1ymf0lldmq6386i7rhkzvirn2"))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("inputproto" ,inputproto)
+      `(("xorgproto" ,xorgproto)
         ("libx11" ,libx11)
         ("libxext" ,libxext)
         ("libxfixes" ,libxfixes)))
-    (inputs
-      `(("xproto" ,xproto)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4970,8 +4954,7 @@ new API's in libXft, or the legacy API's in libX11.")
       `(("libx11" ,libx11)
         ("libxext" ,libxext)
         ("libxrender" ,libxrender)
-        ("randrproto" ,randrproto)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
        `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -4998,7 +4981,7 @@ new API's in libXft, or the legacy API's in libX11.")
     (propagated-inputs
       `(("libxv" ,libxv)))
     (inputs
-      `(("xproto" ,xproto)
+      `(("xorgproto" ,xorgproto)
         ("libxext" ,libxext)
         ("libx11" ,libx11)))
     (native-inputs
@@ -5025,7 +5008,7 @@ new API's in libXft, or the legacy API's in libX11.")
     (build-system gnu-build-system)
     (propagated-inputs
       `(("libxext" ,libxext)
-        ("xf86vidmodeproto" ,xf86vidmodeproto)))
+        ("xorgproto" ,xorgproto)))
     (inputs
       `(("libx11" ,libx11)))
     (native-inputs
@@ -5043,7 +5026,7 @@ protocol.")
 (define-public libxcb
   (package
     (name "libxcb")
-    (version "1.12")
+    (version "1.13")
     (source
       (origin
         (method url-fetch)
@@ -5051,9 +5034,7 @@ protocol.")
                             name "-" version ".tar.bz2"))
         (sha256
           (base32
-           "0nvv0la91cf8p5qqlb3r5xnmg1jn2wphn4fb5jfbr6byqsvv3psa"))
-        (patches
-         (search-patches "libxcb-python-3.5-compat.patch"))))
+           "1ahxhmdqp4bhb90zmc275rmf5wixqra4bnw9pqnzyl1w3598g30q"))))
     (build-system gnu-build-system)
     (propagated-inputs
       `(("libpthread-stubs" ,libpthread-stubs)
@@ -5115,31 +5096,13 @@ over Xlib, including:
             (file-name "xorg-server-use-intel-only-on-pre-gen4.diff"))))))
     (build-system gnu-build-system)
     (propagated-inputs
-      `(("dri2proto" ,dri2proto)
-        ("dri3proto" ,dri3proto)
-        ("fontsproto" ,fontsproto)
-        ("inputproto" ,inputproto)
-        ("kbproto" ,kbproto)
-        ("libpciaccess" ,libpciaccess)
+      `(("libpciaccess" ,libpciaccess)
         ("mesa" ,mesa)
         ("pixman" ,pixman)
-        ("presentproto" ,presentproto)
-        ("randrproto" ,randrproto)
-        ("renderproto" ,renderproto)
-        ("resourceproto" ,resourceproto)
-        ("scrnsaverproto" ,scrnsaverproto)
-        ("videoproto" ,videoproto)
-        ("xextproto" ,xextproto)
-        ("xineramaproto" ,xineramaproto)
-        ("xf86driproto" ,xf86driproto)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (inputs
-      `(("bigreqsproto" ,bigreqsproto)
-        ("compositeproto" ,compositeproto)
-        ("damageproto" ,damageproto)
-        ("udev" ,eudev)
+      `(("udev" ,eudev)
         ("dbus" ,dbus)
-        ("dmxproto" ,dmxproto)
         ("libdmx" ,libdmx)
         ("libepoxy" ,libepoxy)
         ("libgcrypt" ,libgcrypt)
@@ -5154,11 +5117,6 @@ over Xlib, including:
         ("libxshmfence" ,libxshmfence)
         ("libxt" ,libxt)
         ("libxv" ,libxv)
-        ("recordproto" ,recordproto)
-        ("xcmiscproto" ,xcmiscproto)
-        ("xf86bigfontproto" ,xf86bigfontproto)
-        ("xf86dgaproto" ,xf86dgaproto)
-        ("xf86vidmodeproto" ,xf86vidmodeproto)
         ("xkbcomp" ,xkbcomp)
         ("xkeyboard-config" ,xkeyboard-config)
         ("xtrans" ,xtrans)
@@ -5299,12 +5257,10 @@ draggable titlebars and borders.")
                                               (assoc-ref %outputs "doc")
                                               "/share/man"))))
     (propagated-inputs
-      `(("kbproto" ,kbproto)
+      `(("xorgproto" ,xorgproto)
         ("libxcb" ,libxcb)))
     (inputs
-      `(("inputproto" ,inputproto)
-        ("xextproto" ,xextproto)
-        ("xtrans" ,xtrans)))
+      `(("xtrans" ,xtrans)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -5333,7 +5289,7 @@ draggable titlebars and borders.")
       `(("libx11" ,libx11)
         ("libxrender" ,libxrender)
         ("libxfixes" ,libxfixes)
-        ("xproto" ,xproto)))
+        ("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
 ;; TODO: add XCURSOR_PATH=.../share/icons to profile search paths, so
@@ -5407,7 +5363,7 @@ draggable titlebars and borders.")
         ("libxpm" ,libxpm)
         ("libxt" ,libxt)))
     (inputs
-      `(("xproto" ,xproto)))
+      `(("xorgproto" ,xorgproto)))
     (native-inputs
       `(("pkg-config" ,pkg-config)))
     (home-page "https://www.x.org/wiki/")
@@ -5436,7 +5392,7 @@ Intrinsics (Xt) Library.")
      `(("libxt" ,libxt)
        ("libxmu" ,libxmu)
        ("libxext" ,libxext)
-       ("xproto" ,xproto)))
+       ("xorgproto" ,xorgproto)))
     (native-inputs
      `(("bison" ,bison)
        ("pkg-config" ,pkg-config)))
@@ -5659,7 +5615,7 @@ The XCB util-wm module provides the following libraries:
                 "1vw2wlg74ig52naw0cha3pgzcwwk25l834j42cg8m5zmybp3a213"))))
     (build-system gnu-build-system)
     (inputs
-     `(("xproto" ,xproto)
+     `(("xorgproto" ,xorgproto)
        ("libx11" ,libx11)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
@@ -5799,7 +5755,7 @@ to answer a question.  Xmessage can also exit after a specified time.")
        ("libX11" ,libx11)
        ("libXext" ,libxext)
        ("libXt" ,libxt)
-       ("xproto" ,xproto)
+       ("xorgproto" ,xorgproto)
        ("libXaw" ,libxaw)))
     (home-page "https://invisible-island.net/xterm/")
     (synopsis "Terminal emulator for the X Window System")
diff --git a/gnu/packages/zile.scm b/gnu/packages/zile.scm
index fd3d168b3d..858117de28 100644
--- a/gnu/packages/zile.scm
+++ b/gnu/packages/zile.scm
@@ -114,7 +114,7 @@ default Emacs configuration, but it carries a much lighter feature set.")
        (substitute-keyword-arguments (package-arguments zile)
          ((#:phases phases)
           `(modify-phases ,phases
-             (add-after 'unpack 'bootstrap
+             (replace 'bootstrap
                (lambda _
                  ;; Make sure all the files are writable so that ./bootstrap
                  ;; can proceed.
diff --git a/gnu/system.scm b/gnu/system.scm
index 288c1e8801..c53bccf82c 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -524,8 +524,7 @@ explicitly appear in OS."
   ;; required for basic administrator tasks.
   (cons* procps psmisc which less zile nano
          pciutils usbutils
-         ;; temporary package to fix CVE-2018-7738 without a graft
-         util-linux-2.31.1
+         util-linux
          inetutils isc-dhcp
          (@ (gnu packages admin) shadow)          ;for 'passwd'
 
diff --git a/guix/build/ant-build-system.scm b/guix/build/ant-build-system.scm
index 6ce813a001..d081a2b313 100644
--- a/guix/build/ant-build-system.scm
+++ b/guix/build/ant-build-system.scm
@@ -166,12 +166,26 @@ to the default GNU unpack strategy."
                                       "/share/java")
                        source-dir test-dir main-class test-include test-exclude))
   (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
-  (setenv "CLASSPATH" (generate-classpath inputs)))
+  (setenv "CLASSPATH" (generate-classpath inputs))
+  #t)
 
 (define* (build #:key (make-flags '()) (build-target "jar")
                 #:allow-other-keys)
   (zero? (apply system* `("ant" ,build-target ,@make-flags))))
 
+(define* (generate-jar-indices #:key outputs #:allow-other-keys)
+  "Generate file \"META-INF/INDEX.LIST\".  This file does not use word wraps
+and is preferred over \"META-INF/MAINFEST.MF\", which does use word wraps,
+by Java when resolving dependencies.  So we make sure to create it so that
+grafting works - and so that the garbage collector doesn't collect
+dependencies of this jar file."
+  (define (generate-index jar)
+    (invoke "jar" "-i" jar))
+  (every (match-lambda
+           ((output . directory)
+            (every generate-index (find-files directory "\\.jar$"))))
+         outputs))
+
 (define* (strip-jar-timestamps #:key outputs
                                #:allow-other-keys)
   "Unpack all jar archives, reset the timestamp of all contained files, and
@@ -228,11 +242,14 @@ repack them.  This is necessary to ensure that archives are reproducible."
 (define %standard-phases
   (modify-phases gnu:%standard-phases
     (replace 'unpack unpack)
+    (delete 'bootstrap)
     (replace 'configure configure)
     (replace 'build build)
     (replace 'check check)
     (replace 'install install)
-    (add-after 'install 'strip-jar-timestamps strip-jar-timestamps)))
+    (add-after 'install 'generate-jar-indices generate-jar-indices)
+    (add-after 'generate-jar-indices 'strip-jar-timestamps
+               strip-jar-timestamps)))
 
 (define* (ant-build #:key inputs (phases %standard-phases)
                     #:allow-other-keys #:rest args)
diff --git a/guix/build/asdf-build-system.scm b/guix/build/asdf-build-system.scm
index c5e820a00a..dd6373b33a 100644
--- a/guix/build/asdf-build-system.scm
+++ b/guix/build/asdf-build-system.scm
@@ -220,6 +220,7 @@ valid."
 
 (define %standard-phases/source
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (delete 'configure)
     (delete 'check)
     (delete 'build)
@@ -227,6 +228,7 @@ valid."
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (delete 'configure)
     (delete 'install)
     (replace 'build build)
diff --git a/guix/build/cargo-build-system.scm b/guix/build/cargo-build-system.scm
index 139b40321f..f52444f61c 100644
--- a/guix/build/cargo-build-system.scm
+++ b/guix/build/cargo-build-system.scm
@@ -172,6 +172,7 @@ SRC-NAME as if it was part of the directory DIR-NAME with name
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (replace 'configure configure)
     (replace 'build build)
     (replace 'check check)
diff --git a/guix/build/cmake-build-system.scm b/guix/build/cmake-build-system.scm
index c82d9fef87..9b1112f2d6 100644
--- a/guix/build/cmake-build-system.scm
+++ b/guix/build/cmake-build-system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
@@ -73,7 +73,7 @@
                         '())
                   ,@configure-flags)))
       (format #t "running 'cmake' with arguments ~s~%" args)
-      (zero? (apply system* "cmake" args)))))
+      (apply invoke "cmake" args))))
 
 (define* (check #:key (tests? #t) (parallel-tests? #t) (test-target "test")
                 #:allow-other-keys)
@@ -86,6 +86,7 @@
   ;; Everything is as with the GNU Build System except for the `configure'
   ;; and 'check' phases.
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (replace 'check check)
     (replace 'configure configure)))
 
diff --git a/guix/build/cvs.scm b/guix/build/cvs.scm
index 9976e624b3..7111043747 100644
--- a/guix/build/cvs.scm
+++ b/guix/build/cvs.scm
@@ -55,19 +55,20 @@ Return #t on success, #f otherwise."
   ;; Use "-z0" because enabling compression leads to hangs during checkout on
   ;; certain repositories, such as
   ;; ":pserver:anonymous@cvs.savannah.gnu.org:/sources/gnustandards".
-  (and (zero? (system* cvs-command "-z0"
-                       "-d" cvs-root-directory
-                       "checkout"
-                       (if (string-match "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" revision)
-                           "-D" "-r")
-                       revision
-                       module))
-       ;; Copy rather than rename in case MODULE and DIRECTORY are on
-       ;; different devices.
-       (copy-recursively module directory)
+  (invoke cvs-command "-z0"
+          "-d" cvs-root-directory
+          "checkout"
+          (if (string-match "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" revision)
+              "-D" "-r")
+          revision
+          module)
 
-       (with-directory-excursion directory
-         (for-each delete-file-recursively (find-cvs-directories)))
-       #t))
+  ;; Copy rather than rename in case MODULE and DIRECTORY are on
+  ;; different devices.
+  (copy-recursively module directory)
+
+  (with-directory-excursion directory
+    (for-each delete-file-recursively (find-cvs-directories)))
+  #t)
 
 ;;; cvs.scm ends here
diff --git a/guix/build/dub-build-system.scm b/guix/build/dub-build-system.scm
index ed86635708..9a72e3d544 100644
--- a/guix/build/dub-build-system.scm
+++ b/guix/build/dub-build-system.scm
@@ -121,6 +121,7 @@
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (replace 'configure configure)
     (replace 'build build)
     (replace 'check check)
diff --git a/guix/build/emacs-build-system.scm b/guix/build/emacs-build-system.scm
index 094b04750a..47a9eda9e6 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -270,6 +270,7 @@ second hyphen.  This corresponds to 'name-version' as used in ELPA packages."
   (modify-phases gnu:%standard-phases
     (replace 'unpack unpack)
     (add-after 'unpack 'set-emacs-load-path set-emacs-load-path)
+    (delete 'bootstrap)
     (delete 'configure)
     ;; Move the build phase after install: the .el files are byte compiled
     ;; directly in the store.
diff --git a/guix/build/emacs-utils.scm b/guix/build/emacs-utils.scm
index a98e7a6343..fdacd30dd6 100644
--- a/guix/build/emacs-utils.scm
+++ b/guix/build/emacs-utils.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;;
diff --git a/guix/build/font-build-system.scm b/guix/build/font-build-system.scm
index f2a646f6f4..6726595fe1 100644
--- a/guix/build/font-build-system.scm
+++ b/guix/build/font-build-system.scm
@@ -59,6 +59,7 @@ archive, or a font file."
 (define %standard-phases
   (modify-phases gnu:%standard-phases
     (replace 'unpack unpack)
+    (delete 'bootstrap)
     (delete 'configure)
     (delete 'check)
     (delete 'build)
diff --git a/guix/build/glib-or-gtk-build-system.scm b/guix/build/glib-or-gtk-build-system.scm
index b6291e735b..ba680fd1a9 100644
--- a/guix/build/glib-or-gtk-build-system.scm
+++ b/guix/build/glib-or-gtk-build-system.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -202,16 +203,16 @@ add a dependency of that output on GLib and GTK+."
 (define* (compile-glib-schemas #:key outputs #:allow-other-keys)
   "Implement phase \"glib-or-gtk-compile-schemas\": compile \"glib\" schemas
 if needed."
-  (every (match-lambda
-          ((output . directory)
-           (let ((schemasdir (string-append directory
-                                            "/share/glib-2.0/schemas")))
-             (if (and (directory-exists? schemasdir)
-                      (not (file-exists?
-                            (string-append schemasdir "/gschemas.compiled"))))
-                 (zero? (system* "glib-compile-schemas" schemasdir))
-                 #t))))
-         outputs))
+  (for-each (match-lambda
+              ((output . directory)
+               (let ((schemasdir (string-append directory
+                                                "/share/glib-2.0/schemas")))
+                 (when (and (directory-exists? schemasdir)
+                            (not (file-exists?
+                                  (string-append schemasdir "/gschemas.compiled"))))
+                   (invoke "glib-compile-schemas" schemasdir)))))
+            outputs)
+  #t)
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
diff --git a/guix/build/gnu-build-system.scm b/guix/build/gnu-build-system.scm
index 7b43361f99..be5ad78b93 100644
--- a/guix/build/gnu-build-system.scm
+++ b/guix/build/gnu-build-system.scm
@@ -1,5 +1,6 @@
 ;;; 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 © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,10 +27,13 @@
   #:use-module (ice-9 format)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (srfi srfi-26)
   #:use-module (rnrs io ports)
   #:export (%standard-phases
             %license-file-regexp
+            dump-file-contents
             gnu-build))
 
 ;; Commentary:
@@ -83,6 +87,9 @@ See https://reproducible-builds.org/specs/source-date-epoch/."
       (#f                                         ; not cross compiling
        '())))
 
+  ;; Tell 'ld-wrapper' to disallow non-store libraries.
+  (setenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES" "no")
+
   ;; When cross building, $PATH must refer only to native (host) inputs since
   ;; target inputs are not executable.
   (set-path-environment-variable "PATH" '("bin" "sbin")
@@ -152,12 +159,50 @@ working directory."
         ;; Preserve timestamps (set to the Epoch) on the copied tree so that
         ;; things work deterministically.
         (copy-recursively source "."
-                          #:keep-mtime? #t)
-        #t)
-      (and (if (string-suffix? ".zip" source)
-               (zero? (system* "unzip" source))
-               (zero? (system* "tar" "xvf" source)))
-           (chdir (first-subdirectory ".")))))
+                          #:keep-mtime? #t))
+      (begin
+        (if (string-suffix? ".zip" source)
+            (invoke "unzip" source)
+            (invoke "tar" "xvf" source))
+        (chdir (first-subdirectory "."))))
+  #t)
+
+(define %bootstrap-scripts
+  ;; Typical names of Autotools "bootstrap" scripts.
+  '("bootstrap" "bootstrap.sh" "autogen.sh"))
+
+(define* (bootstrap #:key (bootstrap-scripts %bootstrap-scripts)
+                    #:allow-other-keys)
+  "If the code uses Autotools and \"configure\" is missing, run
+\"autoreconf\".  Otherwise do nothing."
+  ;; Note: Run that right after 'unpack' so that the generated files are
+  ;; visible when the 'patch-source-shebangs' phase runs.
+  (if (not (file-exists? "configure"))
+
+      ;; First try one of the BOOTSTRAP-SCRIPTS.  If none exists, and it's
+      ;; clearly an Autoconf-based project, run 'autoreconf'.  Otherwise, do
+      ;; nothing (perhaps the user removed or overrode the 'configure' phase.)
+      (let ((script (find file-exists? bootstrap-scripts)))
+        ;; GNU packages often invoke the 'git-version-gen' script from
+        ;; 'configure.ac' so make sure it has a valid shebang.
+        (false-if-file-not-found
+         (patch-shebang "build-aux/git-version-gen"))
+
+        (if script
+            (let ((script (string-append "./" script)))
+              (format #t "running '~a'~%" script)
+              (if (executable-file? script)
+                  (begin
+                    (patch-shebang script)
+                    (invoke script))
+                  (invoke "sh" script)))
+            (if (or (file-exists? "configure.ac")
+                    (file-exists? "configure.in"))
+                (invoke "autoreconf" "-vif")
+                (format #t "no 'configure.ac' or anything like that, \
+doing nothing~%"))))
+      (format #t "GNU build system bootstrapping not needed~%"))
+  #t)
 
 ;; See <http://bugs.gnu.org/17840>.
 (define* (patch-usr-bin-file #:key native-inputs inputs
@@ -184,7 +229,8 @@ $CONFIG_SHELL, but some don't, such as `mkinstalldirs' or Automake's
                         (lambda (file stat)
                           ;; Filter out symlinks.
                           (eq? 'regular (stat:type stat)))
-                        #:stat lstat)))
+                        #:stat lstat))
+  #t)
 
 (define (patch-generated-file-shebangs . rest)
   "Patch shebangs in generated files, including `SHELL' variables in
@@ -199,7 +245,9 @@ makefiles."
                         #:stat lstat))
 
   ;; Patch `SHELL' in generated makefiles.
-  (for-each patch-makefile-SHELL (find-files "." "^(GNU)?[mM]akefile$")))
+  (for-each patch-makefile-SHELL (find-files "." "^(GNU)?[mM]akefile$"))
+
+  #t)
 
 (define* (configure #:key build target native-inputs inputs outputs
                     (configure-flags '()) out-of-source?
@@ -279,33 +327,61 @@ makefiles."
     ;; Call `configure' with a relative path.  Otherwise, GCC's build system
     ;; (for instance) records absolute source file names, which typically
     ;; contain the hash part of the `.drv' file, leading to a reference leak.
-    (zero? (apply system* bash
-                  (string-append srcdir "/configure")
-                  flags))))
+    (apply invoke bash
+           (string-append srcdir "/configure")
+           flags)))
 
 (define* (build #:key (make-flags '()) (parallel-build? #t)
                 #:allow-other-keys)
-  (zero? (apply system* "make"
-                `(,@(if parallel-build?
-                        `("-j" ,(number->string (parallel-job-count)))
-                        '())
-                  ,@make-flags))))
+  (apply invoke "make"
+         `(,@(if parallel-build?
+                 `("-j" ,(number->string (parallel-job-count)))
+                 '())
+           ,@make-flags)))
+
+(define* (dump-file-contents directory file-regexp
+                             #:optional (port (current-error-port)))
+  "Dump to PORT the contents of files in DIRECTORY that match FILE-REGEXP."
+  (define (dump file)
+    (let ((prefix (string-append "\n--- " file " ")))
+      (display (if (< (string-length prefix) 78)
+                   (string-pad-right prefix 78 #\-)
+                   prefix)
+               port)
+      (display "\n\n" port)
+      (call-with-input-file file
+        (lambda (log)
+          (dump-port log port)))
+      (display "\n" port)))
+
+  (for-each dump (find-files directory file-regexp)))
+
+(define %test-suite-log-regexp
+  ;; Name of test suite log files as commonly found in GNU-based build systems
+  ;; and CMake.
+  "^(test-?suite\\.log|LastTestFailed\\.log)$")
 
 (define* (check #:key target (make-flags '()) (tests? (not target))
                 (test-target "check") (parallel-tests? #t)
+                (test-suite-log-regexp %test-suite-log-regexp)
                 #:allow-other-keys)
   (if tests?
-      (zero? (apply system* "make" test-target
-                    `(,@(if parallel-tests?
-                            `("-j" ,(number->string (parallel-job-count)))
-                            '())
-                      ,@make-flags)))
-      (begin
-        (format #t "test suite not run~%")
-        #t)))
+      (guard (c ((invoke-error? c)
+                 ;; Dump the test suite log to facilitate debugging.
+                 (display "\nTest suite failed, dumping logs.\n"
+                          (current-error-port))
+                 (dump-file-contents "." test-suite-log-regexp)
+                 (raise c)))
+        (apply invoke "make" test-target
+               `(,@(if parallel-tests?
+                       `("-j" ,(number->string (parallel-job-count)))
+                       '())
+                 ,@make-flags)))
+      (format #t "test suite not run~%"))
+  #t)
 
 (define* (install #:key (make-flags '()) #:allow-other-keys)
-  (zero? (apply system* "make" "install" make-flags)))
+  (apply invoke "make" "install" make-flags))
 
 (define* (patch-shebangs #:key inputs outputs (patch-shebangs? #t)
                          #:allow-other-keys)
@@ -371,10 +447,8 @@ makefiles."
     (let ((debug (debug-file file)))
       (mkdir-p (dirname debug))
       (copy-file file debug)
-      (and (zero? (system* strip-command "--only-keep-debug" debug))
-           (begin
-             (chmod debug #o400)
-             #t))))
+      (invoke strip-command "--only-keep-debug" debug)
+      (chmod debug #o400)))
 
   (define (add-debug-link file)
     ;; Add a debug link in FILE (info "(binutils) strip").
@@ -384,10 +458,10 @@ makefiles."
     ;; `bfd_fill_in_gnu_debuglink_section' function.)  No reference to
     ;; DEBUG-OUTPUT is kept because bfd keeps only the basename of the debug
     ;; file.
-    (zero? (system* objcopy-command "--enable-deterministic-archives"
-                    (string-append "--add-gnu-debuglink="
-                                   (debug-file file))
-                    file)))
+    (invoke objcopy-command "--enable-deterministic-archives"
+            (string-append "--add-gnu-debuglink="
+                           (debug-file file))
+            file))
 
   (define (strip-dir dir)
     (format #t "stripping binaries in ~s with ~s and flags ~s~%"
@@ -397,17 +471,29 @@ makefiles."
               debug-output objcopy-command))
 
     (for-each (lambda (file)
-                (and (or (elf-file? file) (ar-file? file))
-                     (or (not debug-output)
-                         (make-debug-file file))
-
-                     ;; Ensure the file is writable.
-                     (begin (make-file-writable file) #t)
-
-                     (zero? (apply system* strip-command
-                                   (append strip-flags (list file))))
-                     (or (not debug-output)
-                         (add-debug-link file))))
+                (when (or (elf-file? file) (ar-file? file))
+                  ;; If an error occurs while processing a file, issue a
+                  ;; warning and continue to the next file.
+                  (guard (c ((invoke-error? c)
+                             (format (current-error-port)
+                                     "warning: ~a: program ~s exited\
+~@[ with non-zero exit status ~a~]\
+~@[ terminated by signal ~a~]~%"
+                                     file
+                                     (invoke-error-program c)
+                                     (invoke-error-exit-status c)
+                                     (invoke-error-term-signal c))))
+                    (when debug-output
+                      (make-debug-file file))
+
+                    ;; Ensure the file is writable.
+                    (make-file-writable file)
+
+                    (apply invoke strip-command
+                           (append strip-flags (list file)))
+
+                    (when debug-output
+                      (add-debug-link file)))))
               (find-files dir
                           (lambda (file stat)
                             ;; Ignore symlinks such as:
@@ -415,15 +501,17 @@ makefiles."
                             (eq? 'regular (stat:type stat)))
                           #:stat lstat)))
 
-  (or (not strip-binaries?)
-      (every strip-dir
-             (append-map (match-lambda
-                          ((_ . dir)
-                           (filter-map (lambda (d)
-                                         (let ((sub (string-append dir "/" d)))
-                                           (and (directory-exists? sub) sub)))
-                                       strip-directories)))
-                         outputs))))
+  (when strip-binaries?
+    (for-each
+     strip-dir
+     (append-map (match-lambda
+                   ((_ . dir)
+                    (filter-map (lambda (d)
+                                  (let ((sub (string-append dir "/" d)))
+                                    (and (directory-exists? sub) sub)))
+                                strip-directories)))
+                 outputs)))
+  #t)
 
 (define* (validate-runpath #:key
                            (validate-runpath? #t)
@@ -466,10 +554,11 @@ phase after stripping."
                                  (filter-map (sub-directory output)
                                              elf-directories)))
                               outputs)))
-        (every* validate dirs))
-      (begin
-        (format (current-error-port) "skipping RUNPATH validation~%")
-        #t)))
+        (unless (every* validate dirs)
+          (error "RUNPATH validation failed")))
+      (format (current-error-port) "skipping RUNPATH validation~%"))
+
+  #t)
 
 (define* (validate-documentation-location #:key outputs
                                           #:allow-other-keys)
@@ -549,47 +638,45 @@ DOCUMENTATION-COMPRESSOR-FLAGS."
               (apply throw args))))))
 
   (define (maybe-compress-directory directory regexp)
-    (or (not (directory-exists? directory))
-        (match (find-files directory regexp)
-          (()                                     ;nothing to compress
-           #t)
-          ((files ...)                            ;one or more files
-           (format #t
-                   "compressing documentation in '~a' with ~s and flags ~s~%"
-                   directory documentation-compressor
-                   documentation-compressor-flags)
-           (call-with-values
-               (lambda ()
-                 (partition symbolic-link? files))
-             (lambda (symlinks regular-files)
-               ;; Compress the non-symlink files, and adjust symlinks to refer
-               ;; to the compressed files.  Leave files that have hard links
-               ;; unchanged ('gzip' would refuse to compress them anyway.)
-               ;; Also, do not retarget symbolic links pointing to other
-               ;; symbolic links, since these are not compressed.
-               (and (every retarget-symlink
-                           (filter (lambda (symlink)
-                                     (and (not (points-to-symlink? symlink))
-                                          (string-match regexp symlink)))
-                                   symlinks))
-                    (zero?
-                     (apply system* documentation-compressor
-                            (append documentation-compressor-flags
-                                    (remove has-links? regular-files)))))))))))
+    (when (directory-exists? directory)
+      (match (find-files directory regexp)
+        (()                                     ;nothing to compress
+         #t)
+        ((files ...)                            ;one or more files
+         (format #t
+                 "compressing documentation in '~a' with ~s and flags ~s~%"
+                 directory documentation-compressor
+                 documentation-compressor-flags)
+         (call-with-values
+             (lambda ()
+               (partition symbolic-link? files))
+           (lambda (symlinks regular-files)
+             ;; Compress the non-symlink files, and adjust symlinks to refer
+             ;; to the compressed files.  Leave files that have hard links
+             ;; unchanged ('gzip' would refuse to compress them anyway.)
+             ;; Also, do not retarget symbolic links pointing to other
+             ;; symbolic links, since these are not compressed.
+             (for-each retarget-symlink
+                       (filter (lambda (symlink)
+                                 (and (not (points-to-symlink? symlink))
+                                      (string-match regexp symlink)))
+                               symlinks))
+             (apply invoke documentation-compressor
+                    (append documentation-compressor-flags
+                            (remove has-links? regular-files)))))))))
 
   (define (maybe-compress output)
-    (and (maybe-compress-directory (string-append output "/share/man")
-                                   "\\.[0-9]+$")
-         (maybe-compress-directory (string-append output "/share/info")
-                                   "\\.info(-[0-9]+)?$")))
+    (maybe-compress-directory (string-append output "/share/man")
+                              "\\.[0-9]+$")
+    (maybe-compress-directory (string-append output "/share/info")
+                              "\\.info(-[0-9]+)?$"))
 
   (if compress-documentation?
       (match outputs
         (((names . directories) ...)
-         (every maybe-compress directories)))
-      (begin
-        (format #t "not compressing documentation~%")
-        #t)))
+         (for-each maybe-compress directories)))
+      (format #t "not compressing documentation~%"))
+  #t)
 
 (define* (delete-info-dir-file #:key outputs #:allow-other-keys)
   "Delete any 'share/info/dir' file from OUTPUTS."
@@ -672,6 +759,7 @@ which cannot be found~%"
   (let-syntax ((phases (syntax-rules ()
                          ((_ p ...) `((p . ,p) ...)))))
     (phases set-SOURCE-DATE-EPOCH set-paths install-locale unpack
+            bootstrap
             patch-usr-bin-file
             patch-source-shebangs configure patch-generated-file-shebangs
             build check install
@@ -704,17 +792,26 @@ in order.  Return #t if all the PHASES succeeded, #f otherwise."
 
   ;; The trick is to #:allow-other-keys everywhere, so that each procedure in
   ;; PHASES can pick the keyword arguments it's interested in.
-  (every (match-lambda
-          ((name . proc)
-           (let ((start (current-time time-monotonic)))
-             (format #t "starting phase `~a'~%" name)
-             (let ((result (apply proc args))
-                   (end    (current-time time-monotonic)))
-               (format #t "phase `~a' ~:[failed~;succeeded~] after ~,1f seconds~%"
-                       name result
-                       (elapsed-time end start))
-
-               ;; Dump the environment variables as a shell script, for handy debugging.
-               (system "export > $NIX_BUILD_TOP/environment-variables")
-               result))))
-         phases))
+  (for-each (match-lambda
+              ((name . proc)
+               (let ((start (current-time time-monotonic)))
+                 (format #t "starting phase `~a'~%" name)
+                 (let ((result (apply proc args))
+                       (end    (current-time time-monotonic)))
+                   (format #t "phase `~a' ~:[failed~;succeeded~] after ~,1f seconds~%"
+                           name result
+                           (elapsed-time end start))
+
+                   ;; Issue a warning unless the result is #t.
+                   (unless (eqv? result #t)
+                     (format (current-error-port) "\
+## WARNING: phase `~a' returned `~s'.  Return values other than #t
+## are deprecated.  Please migrate this package so that its phase
+## procedures report errors by raising an exception, and otherwise
+## always return #t.~%"
+                             name result))
+
+                   ;; Dump the environment variables as a shell script, for handy debugging.
+                   (system "export > $NIX_BUILD_TOP/environment-variables")
+                   result))))
+            phases))
diff --git a/guix/build/gnu-dist.scm b/guix/build/gnu-dist.scm
index ad69c6cf16..bf1c63cb85 100644
--- a/guix/build/gnu-dist.scm
+++ b/guix/build/gnu-dist.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,24 +42,22 @@
                                     (begin
                                       (format #t "bootstrapping with `~a'...~%"
                                               file)
-                                      (zero?
-                                       (system* (string-append "./" file))))
+                                      (invoke (string-append "./" file)))
                                     (try-files files ...
                                                (else fallback ...)))))))
     (try-files "bootstrap" "bootstrap.sh" "autogen" "autogen.sh"
                (else
                 (format #t "bootstrapping with `autoreconf'...~%")
-                (zero? (system* "autoreconf" "-vfi"))))))
+                (invoke "autoreconf" "-vfi")))))
 
 (define* (build #:key build-before-dist? make-flags (dist-target "distcheck")
                 #:allow-other-keys
                 #:rest args)
-  (and (or (not build-before-dist?)
-           (let ((build (assq-ref %standard-phases 'build)))
-             (apply build args)))
-       (begin
-         (format #t "building target `~a'~%" dist-target)
-         (zero? (apply system* "make" dist-target make-flags)))))
+  (when build-before-dist?
+    (let ((build (assq-ref %standard-phases 'build)))
+      (apply build args)))
+  (format #t "building target `~a'~%" dist-target)
+  (apply invoke "make" dist-target make-flags))
 
 (define* (install-dist #:key outputs #:allow-other-keys)
   (let* ((out      (assoc-ref outputs "out"))
diff --git a/guix/build/go-build-system.scm b/guix/build/go-build-system.scm
index 3114067aa9..7c833a616f 100644
--- a/guix/build/go-build-system.scm
+++ b/guix/build/go-build-system.scm
@@ -261,6 +261,7 @@ files in OUTPUTS."
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (delete 'configure)
     (delete 'patch-generated-file-shebangs)
     (replace 'unpack unpack)
diff --git a/guix/build/gremlin.scm b/guix/build/gremlin.scm
index fed529b193..bb019967e5 100644
--- a/guix/build/gremlin.scm
+++ b/guix/build/gremlin.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -35,7 +35,7 @@
 
             elf-dynamic-info
             elf-dynamic-info?
-            elf-dynamic-info-sopath
+            elf-dynamic-info-soname
             elf-dynamic-info-needed
             elf-dynamic-info-rpath
             elf-dynamic-info-runpath
diff --git a/guix/build/haskell-build-system.scm b/guix/build/haskell-build-system.scm
index 3afc37e16d..268d59c1be 100644
--- a/guix/build/haskell-build-system.scm
+++ b/guix/build/haskell-build-system.scm
@@ -266,6 +266,7 @@ given Haskell package."
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (add-before 'configure 'setup-compiler setup-compiler)
     (add-before 'install 'haddock haddock)
     (add-after 'install 'register register)
diff --git a/guix/build/hg.scm b/guix/build/hg.scm
index ae4574de57..ea51eb670b 100644
--- a/guix/build/hg.scm
+++ b/guix/build/hg.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -33,19 +34,20 @@
   "Fetch CHANGESET from URL into DIRECTORY.  CHANGESET must be a valid
 Mercurial changeset identifier.  Return #t on success, #f otherwise."
 
-  (and (zero? (system* hg-command
-                       "clone" url
-                       "--rev" changeset
-                       ;; Disable TLS certificate verification.  The hash of
-                       ;; the checkout is known in advance anyway.
-                       "--insecure"
-                       directory))
-       (with-directory-excursion directory
-         (begin
-           ;; The contents of '.hg' vary as a function of the current
-           ;; status of the Mercurial repo.  Since we want a fixed
-           ;; output, this directory needs to be taken out.
-           (delete-file-recursively ".hg")
-           #t))))
+  (invoke hg-command
+          "clone" url
+          "--rev" changeset
+          ;; Disable TLS certificate verification.  The hash of
+          ;; the checkout is known in advance anyway.
+          "--insecure"
+          directory)
+
+  ;; The contents of '.hg' vary as a function of the current
+  ;; status of the Mercurial repo.  Since we want a fixed
+  ;; output, this directory needs to be taken out.
+  (with-directory-excursion directory
+    (delete-file-recursively ".hg"))
+
+  #t)
 
 ;;; hg.scm ends here
diff --git a/guix/build/minify-build-system.scm b/guix/build/minify-build-system.scm
index 3580deda07..563def88e9 100644
--- a/guix/build/minify-build-system.scm
+++ b/guix/build/minify-build-system.scm
@@ -60,6 +60,7 @@
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (delete 'configure)
     (replace 'build build)
     (delete 'check)
diff --git a/guix/build/ocaml-build-system.scm b/guix/build/ocaml-build-system.scm
index f77251ca09..d10431d8ef 100644
--- a/guix/build/ocaml-build-system.scm
+++ b/guix/build/ocaml-build-system.scm
@@ -103,6 +103,7 @@
   ;; Everything is as with the GNU Build System except for the `configure'
   ;; , `build', `check' and `install' phases.
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (add-before 'configure 'ocaml-findlib-environment
                 ocaml-findlib-environment)
     (add-before 'install 'prepare-install prepare-install)
diff --git a/guix/build/perl-build-system.scm b/guix/build/perl-build-system.scm
index b2024e4406..c5f5baa3a9 100644
--- a/guix/build/perl-build-system.scm
+++ b/guix/build/perl-build-system.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,7 +50,7 @@
                    "INSTALLDIRS=site" "NO_PERLLOCAL=1" ,@make-maker-flags))
                 (else (error "no Build.PL or Makefile.PL found")))))
     (format #t "running `perl' with arguments ~s~%" args)
-    (zero? (apply system* "perl" args))))
+    (apply invoke "perl" args)))
 
 (define-syntax-rule (define-w/gnu-fallback* (name args ...) body ...)
   (define* (name args ... #:rest rest)
@@ -58,24 +59,24 @@
         (apply (assoc-ref gnu:%standard-phases 'name) rest))))
 
 (define-w/gnu-fallback* (build)
-  (zero? (system* "./Build")))
+  (invoke "./Build"))
 
 (define-w/gnu-fallback* (check #:key target
                                (tests? (not target)) (test-flags '())
                                #:allow-other-keys)
   (if tests?
-      (zero? (apply system* "./Build" "test" test-flags))
-      (begin
-        (format #t "test suite not run~%")
-        #t)))
+      (apply invoke "./Build" "test" test-flags)
+      (format #t "test suite not run~%"))
+  #t)
 
 (define-w/gnu-fallback* (install)
-  (zero? (system* "./Build" "install")))
+  (invoke "./Build" "install"))
 
 (define %standard-phases
   ;; Everything is as with the GNU Build System except for the `configure',
   ;; `build', `check', and `install' phases.
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (replace 'install install)
     (replace 'check check)
     (replace 'build build)
diff --git a/guix/build/python-build-system.scm b/guix/build/python-build-system.scm
index dd07986b94..376ea81f1a 100644
--- a/guix/build/python-build-system.scm
+++ b/guix/build/python-build-system.scm
@@ -1,9 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -120,14 +121,15 @@
          (format #t "running \"python setup.py\" with command ~s and parameters ~s~%"
                 command params)
          (if use-setuptools?
-             (zero? (apply system* "python" "-c" setuptools-shim
-                           command params))
-             (zero? (apply system* "python" "./setup.py" command params))))
+             (apply invoke "python" "-c" setuptools-shim
+                    command params)
+             (apply invoke "python" "./setup.py" command params)))
       (error "no setup.py found")))
 
 (define* (build #:key use-setuptools? #:allow-other-keys)
   "Build a given Python package."
-  (call-setuppy "build" '() use-setuptools?))
+  (call-setuppy "build" '() use-setuptools?)
+  #t)
 
 (define* (check #:key tests? test-target use-setuptools? #:allow-other-keys)
   "Run the test suite of a given Python package."
@@ -137,15 +139,12 @@
       ;; (given with `package_dir`). This will by copied to the output, too,
       ;; so we need to remove.
       (let ((before (find-files "build" "\\.egg-info$" #:directories? #t)))
-        (if (call-setuppy test-target '() use-setuptools?)
-            (let* ((after (find-files "build" "\\.egg-info$" #:directories? #t))
-                   (inter (lset-difference eqv? after before)))
-              (for-each delete-file-recursively inter)
-              #t)
-            #f))
-      (begin
-        (format #t "test suite not run~%")
-        #t)))
+        (call-setuppy test-target '() use-setuptools?)
+        (let* ((after (find-files "build" "\\.egg-info$" #:directories? #t))
+               (inter (lset-difference string=? after before)))
+          (for-each delete-file-recursively inter)))
+      (format #t "test suite not run~%"))
+  #t)
 
 (define (get-python-version python)
   (let* ((version     (last (string-split python #\-)))
@@ -182,7 +181,8 @@ when running checks after installing the package."
                                     "--root=/")
                              '())
                          configure-flags)))
-    (call-setuppy "install" params use-setuptools?)))
+    (call-setuppy "install" params use-setuptools?)
+    #t))
 
 (define* (wrap #:key inputs outputs #:allow-other-keys)
   (define (list-of-files dir)
@@ -211,7 +211,8 @@ when running checks after installing the package."
                 (let ((files (list-of-files dir)))
                   (for-each (cut wrap-program <> var)
                             files)))
-              bindirs)))
+              bindirs)
+    #t))
 
 (define* (rename-pth-file #:key name inputs outputs #:allow-other-keys)
   "Rename easy-install.pth to NAME.pth to avoid conflicts between packages
@@ -243,10 +244,21 @@ installed with setuptools."
                #t))
     #t))
 
+(define* (enable-bytecode-determinism #:rest _)
+  "Improve determinism of pyc files."
+  ;; Set DETERMINISTIC_BUILD to override the embedded mtime in pyc files.
+  (setenv "DETERMINISTIC_BUILD" "1")
+  ;; Use deterministic hashes for strings, bytes, and datetime objects.
+  (setenv "PYTHONHASHSEED" "0")
+  #t)
+
 (define %standard-phases
   ;; 'configure' phase is not needed.
   (modify-phases gnu:%standard-phases
     (add-after 'unpack 'ensure-no-mtimes-pre-1980 ensure-no-mtimes-pre-1980)
+    (add-after 'ensure-no-mtimes-pre-1980 'enable-bytecode-determinism
+      enable-bytecode-determinism)
+    (delete 'bootstrap)
     (delete 'configure)
     (replace 'install install)
     (replace 'check check)
diff --git a/guix/build/r-build-system.scm b/guix/build/r-build-system.scm
index 24aa73d4f2..5e18939d22 100644
--- a/guix/build/r-build-system.scm
+++ b/guix/build/r-build-system.scm
@@ -99,6 +99,7 @@
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (delete 'configure)
     (delete 'build)
     (delete 'check) ; tests must be run after installation
diff --git a/guix/build/ruby-build-system.scm b/guix/build/ruby-build-system.scm
index 09ae2390a5..abef6937bc 100644
--- a/guix/build/ruby-build-system.scm
+++ b/guix/build/ruby-build-system.scm
@@ -308,6 +308,7 @@ extended with definitions for VARS."
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (delete 'configure)
     (replace 'unpack unpack)
     (add-before 'build 'extract-gemspec extract-gemspec)
diff --git a/guix/build/scons-build-system.scm b/guix/build/scons-build-system.scm
index a8760968d8..eb013f03b6 100644
--- a/guix/build/scons-build-system.scm
+++ b/guix/build/scons-build-system.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,27 +32,27 @@
 (define* (build #:key outputs (scons-flags '()) (parallel-build? #t) #:allow-other-keys)
   (let ((out (assoc-ref outputs "out")))
     (mkdir-p out)
-    (zero? (apply system* "scons"
-                  (append (if parallel-build?
-                              (list "-j" (number->string
-                                          (parallel-job-count)))
-                              (list))
-                          scons-flags)))))
+    (apply invoke "scons"
+           (append (if parallel-build?
+                       (list "-j" (number->string
+                                   (parallel-job-count)))
+                       (list))
+                   scons-flags))))
 
 (define* (check #:key tests? test-target (scons-flags '()) #:allow-other-keys)
   "Run the test suite of a given SCons application."
-  (cond (tests?
-         (zero? (apply system* "scons" test-target scons-flags)))
-        (else
-         (format #t "test suite not run~%")
-         #t)))
+  (if tests?
+      (apply invoke "scons" test-target scons-flags)
+      (format #t "test suite not run~%"))
+  #t)
 
 (define* (install #:key outputs (scons-flags '()) #:allow-other-keys)
   "Install a given SCons application."
-  (zero? (apply system* "scons" "install" scons-flags)))
+  (apply invoke "scons" "install" scons-flags))
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (delete 'configure)
     (replace 'build build)
     (replace 'check check)
diff --git a/guix/build/svn.scm b/guix/build/svn.scm
index 31c30edaf5..252d1d4ee5 100644
--- a/guix/build/svn.scm
+++ b/guix/build/svn.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Sree Harsha Totakura <sreeharsha@totakura.in>
+;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,23 +35,24 @@
                     (password #f))
   "Fetch REVISION from URL into DIRECTORY.  REVISION must be an integer, and a
 valid Subversion revision.  Return #t on success, #f otherwise."
-  (and (zero? (apply system* svn-command
-                     "checkout" "--non-interactive"
-                     ;; Trust the server certificate.  This is OK as we
-                     ;; verify the checksum later.  This can be removed when
-                     ;; ca-certificates package is added.
-                     "--trust-server-cert" "-r" (number->string revision)
-                     `(,@(if (and user-name password)
-                             (list (string-append "--username=" user-name)
-                                   (string-append "--password=" password))
-                             '())
-                       ,url ,directory)))
-       (with-directory-excursion directory
-         (begin
-           ;; The contents of '.svn' vary as a function of the current status
-           ;; of the repo.  Since we want a fixed output, this directory needs
-           ;; to be taken out.
-           (delete-file-recursively ".svn")
-           #t))))
+  (apply invoke svn-command
+         "checkout" "--non-interactive"
+         ;; Trust the server certificate.  This is OK as we
+         ;; verify the checksum later.  This can be removed when
+         ;; ca-certificates package is added.
+         "--trust-server-cert" "-r" (number->string revision)
+         `(,@(if (and user-name password)
+                 (list (string-append "--username=" user-name)
+                       (string-append "--password=" password))
+                 '())
+           ,url ,directory))
+
+  ;; The contents of '.svn' vary as a function of the current status
+  ;; of the repo.  Since we want a fixed output, this directory needs
+  ;; to be taken out.
+  (with-directory-excursion directory
+    (delete-file-recursively ".svn"))
+
+  #t)
 
 ;;; svn.scm ends here
diff --git a/guix/build/texlive-build-system.scm b/guix/build/texlive-build-system.scm
index f6b9b96b87..1c393ecd9d 100644
--- a/guix/build/texlive-build-system.scm
+++ b/guix/build/texlive-build-system.scm
@@ -34,11 +34,11 @@
 ;; Code:
 
 (define (compile-with-latex format file)
-  (zero? (system* format
-                  "-interaction=batchmode"
-                  "-output-directory=build"
-                  (string-append "&" format)
-                  file)))
+  (invoke format
+          "-interaction=batchmode"
+          "-output-directory=build"
+          (string-append "&" format)
+          file))
 
 (define* (configure #:key inputs #:allow-other-keys)
   (let* ((out       (string-append (getcwd) "/.texlive-union"))
@@ -81,6 +81,7 @@
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (replace 'configure configure)
     (replace 'build build)
     (delete 'check)
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index d7ed3d5177..c58a1afd1c 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -1,8 +1,8 @@
 ;;; 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 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
-;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2018 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +23,8 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
   #:use-module (srfi srfi-60)
   #:use-module (ice-9 ftw)
   #:use-module (ice-9 match)
@@ -61,6 +63,7 @@
             delete-file-recursively
             file-name-predicate
             find-files
+            false-if-file-not-found
 
             search-path-as-list
             set-path-environment-variable
@@ -85,7 +88,14 @@
             fold-port-matches
             remove-store-references
             wrap-program
+
             invoke
+            invoke-error?
+            invoke-error-program
+            invoke-error-arguments
+            invoke-error-exit-status
+            invoke-error-term-signal
+            invoke-error-stop-signal
 
             locale-category->string))
 
@@ -396,6 +406,15 @@ also be included.  If FAIL-ON-ERROR? is true, raise an exception upon error."
                             stat)
           string<?)))
 
+(define-syntax-rule (false-if-file-not-found exp)
+  "Evaluate EXP but return #f if it raises to 'system-error with ENOENT."
+  (catch 'system-error
+    (lambda () exp)
+    (lambda args
+      (if (= ENOENT (system-error-errno args))
+          #f
+          (apply throw args)))))
+
 
 ;;;
 ;;; Search paths.
@@ -581,13 +600,25 @@ Where every <*-phase-name> is an expression evaluating to a symbol, and
     ((_ phases (add-after old-phase-name new-phase-name new-phase))
      (alist-cons-after old-phase-name new-phase-name new-phase phases))))
 
+(define-condition-type &invoke-error &error
+  invoke-error?
+  (program      invoke-error-program)
+  (arguments    invoke-error-arguments)
+  (exit-status  invoke-error-exit-status)
+  (term-signal  invoke-error-term-signal)
+  (stop-signal  invoke-error-stop-signal))
+
 (define (invoke program . args)
-  "Invoke PROGRAM with the given ARGS.  Raise an error if the exit
-code is non-zero; otherwise return #t."
-  (let ((status (apply system* program args)))
-    (unless (zero? status)
-      (error (format #f "program ~s exited with non-zero code" program)
-             status))
+  "Invoke PROGRAM with the given ARGS.  Raise an exception
+if the exit code is non-zero; otherwise return #t."
+  (let ((code (apply system* program args)))
+    (unless (zero? code)
+      (raise (condition (&invoke-error
+                         (program program)
+                         (arguments args)
+                         (exit-status (status:exit-val code))
+                         (term-signal (status:term-sig code))
+                         (stop-signal (status:stop-sig code))))))
     #t))
 
 
diff --git a/guix/build/waf-build-system.scm b/guix/build/waf-build-system.scm
index 85f0abcfd6..f0364e867d 100644
--- a/guix/build/waf-build-system.scm
+++ b/guix/build/waf-build-system.scm
@@ -70,6 +70,7 @@
 
 (define %standard-phases
   (modify-phases gnu:%standard-phases
+    (delete 'bootstrap)
     (replace 'configure configure)
     (replace 'build build)
     (replace 'check check)
diff --git a/guix/download.scm b/guix/download.scm
index 7aa6c03665..66d97eed44 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -512,12 +512,14 @@ own.  This helper makes it easier to deal with \"tar bombs\"."
     ;; Use ungrafted tar/gzip so that the resulting tarball doesn't depend on
     ;; whether grafts are enabled.
     (gexp->derivation (or name file-name)
-                      #~(begin
-                          (mkdir #$output)
-                          (setenv "PATH" (string-append #$gzip "/bin"))
-                          (chdir #$output)
-                          (zero? (system* (string-append #$tar "/bin/tar")
-                                          "xf" #$drv)))
+                      (with-imported-modules '((guix build utils))
+                        #~(begin
+                            (use-modules (guix build utils))
+                            (mkdir #$output)
+                            (setenv "PATH" (string-append #$gzip "/bin"))
+                            (chdir #$output)
+                            (invoke (string-append #$tar "/bin/tar")
+                                    "xf" #$drv)))
                       #:graft? #f
                       #:local-build? #t)))
 
@@ -545,11 +547,13 @@ own.  This helper makes it easier to deal with \"zip bombs\"."
     ;; Use ungrafted unzip so that the resulting tarball doesn't depend on
     ;; whether grafts are enabled.
     (gexp->derivation (or name file-name)
-                      #~(begin
-                          (mkdir #$output)
-                          (chdir #$output)
-                          (zero? (system* (string-append #$unzip "/bin/unzip")
-                                          #$drv)))
+                      (with-imported-modules '((guix build utils))
+                        #~(begin
+                            (use-modules (guix build utils))
+                            (mkdir #$output)
+                            (chdir #$output)
+                            (invoke (string-append #$unzip "/bin/unzip")
+                                    #$drv)))
                       #:graft? #f
                       #:local-build? #t)))
 
diff --git a/guix/gexp.scm b/guix/gexp.scm
index dd5eb81bd3..c6d70e4e36 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -1075,6 +1075,8 @@ last one is created from the given <scheme-file> object."
   "Return a derivation that builds a tree containing the `.go' files
 corresponding to MODULES.  All the MODULES are built in a context where
 they can refer to each other."
+  (define total (length modules))
+
   (mlet %store-monad ((modules (imported-modules modules
                                                  #:system system
                                                  #:guile guile
@@ -1088,36 +1090,42 @@ they can refer to each other."
          (primitive-load (ungexp %utils-module))  ;for 'mkdir-p'
 
          (use-modules (ice-9 ftw)
+                      (ice-9 format)
+                      (srfi srfi-1)
                       (srfi srfi-26)
                       (system base compile))
 
          (define (regular? file)
            (not (member file '("." ".."))))
 
-         (define (process-directory directory output)
+         (define (process-entry entry output processed)
+           (if (file-is-directory? entry)
+               (let ((output (string-append output "/" (basename entry))))
+                 (mkdir-p output)
+                 (process-directory entry output processed))
+               (let* ((base   (basename entry ".scm"))
+                      (output (string-append output "/" base ".go")))
+                 (format #t "[~2@a/~2@a] Compiling '~a'...~%"
+                         (+ 1 processed) (ungexp total) entry)
+                 (compile-file entry
+                               #:output-file output
+                               #:opts %auto-compilation-options)
+                 (+ 1 processed))))
+
+         (define (process-directory directory output processed)
            (let ((entries (map (cut string-append directory "/" <>)
                                (scandir directory regular?))))
-             (for-each (lambda (entry)
-                         (if (file-is-directory? entry)
-                             (let ((output (string-append output "/"
-                                                          (basename entry))))
-                               (mkdir-p output)
-                               (process-directory entry output))
-                             (let* ((base   (string-drop-right
-                                             (basename entry)
-                                             4)) ;.scm
-                                    (output (string-append output "/" base
-                                                           ".go")))
-                               (compile-file entry
-                                             #:output-file output
-                                             #:opts
-                                             %auto-compilation-options))))
-                       entries)))
+             (fold (cut process-entry <> output <>)
+                   processed
+                   entries)))
+
+         (setvbuf (current-output-port)
+                  (cond-expand (guile-2.2 'line) (else _IOLBF)))
 
          (set! %load-path (cons (ungexp modules) %load-path))
          (mkdir (ungexp output))
          (chdir (ungexp modules))
-         (process-directory "." (ungexp output)))))
+         (process-directory "." (ungexp output) 0))))
 
     ;; TODO: Pass MODULES as an environment variable.
     (gexp->derivation name build
diff --git a/guix/packages.scm b/guix/packages.scm
index e0ab72086c..a6f9936d63 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2017, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
@@ -520,9 +520,9 @@ specifies modules in scope when evaluating SNIPPET."
               ;; Use '--force' so that patches that do not apply perfectly are
               ;; rejected.  Use '--no-backup-if-mismatch' to prevent making
               ;; "*.orig" file if a patch is applied with offset.
-              (zero? (system* (string-append #+patch "/bin/patch")
-                              "--force" "--no-backup-if-mismatch"
-                              #+@flags "--input" patch)))
+              (invoke (string-append #+patch "/bin/patch")
+                      "--force" "--no-backup-if-mismatch"
+                      #+@flags "--input" patch))
 
             (define (first-file directory)
               ;; Return the name of the first file in DIRECTORY.
@@ -547,64 +547,74 @@ specifies modules in scope when evaluating SNIPPET."
                                           #+decomp "/bin"))
 
             ;; SOURCE may be either a directory or a tarball.
-            (and (if (file-is-directory? #+source)
-                     (let* ((store     (%store-directory))
-                            (len       (+ 1 (string-length store)))
-                            (base      (string-drop #+source len))
-                            (dash      (string-index base #\-))
-                            (directory (string-drop base (+ 1 dash))))
-                       (mkdir directory)
-                       (copy-recursively #+source directory)
-                       #t)
-                     #+(if (string=? decompression-type "unzip")
-                           #~(zero? (system* "unzip" #+source))
-                           #~(zero? (system* (string-append #+tar "/bin/tar")
-                                             "xvf" #+source))))
-                 (let ((directory (first-file ".")))
-                   (format (current-error-port)
-                           "source is under '~a'~%" directory)
-                   (chdir directory)
-
-                   (and (every apply-patch '#+patches)
-                        #+@(if snippet
-                               #~((let ((module (make-fresh-user-module)))
-                                    (module-use-interfaces!
-                                     module
-                                     (map resolve-interface '#+modules))
-                                    ((@ (system base compile) compile)
-                                     '#+snippet
-                                     #:to 'value
-                                     #:opts %auto-compilation-options
-                                     #:env module)))
-                               #~())
-
-                        (begin (chdir "..") #t)
-
-                        (unless tar-supports-sort?
-                          (call-with-output-file ".file_list"
-                            (lambda (port)
-                              (for-each (lambda (name)
-                                          (format port "~a~%" name))
-                                        (find-files directory
-                                                    #:directories? #t
-                                                    #:fail-on-error? #t)))))
-                        (zero? (apply system*
-                                      (string-append #+tar "/bin/tar")
-                                      "cvf" #$output
-                                      ;; The bootstrap xz does not support
-                                      ;; threaded compression (introduced in
-                                      ;; 5.2.0), but it ignores the extra flag.
-                                      (string-append "--use-compress-program="
-                                                     #+xz "/bin/xz --threads=0")
-                                      ;; avoid non-determinism in the archive
-                                      "--mtime=@0"
-                                      "--owner=root:0"
-                                      "--group=root:0"
-                                      (if tar-supports-sort?
-                                          `("--sort=name"
-                                            ,directory)
-                                          '("--no-recursion"
-                                            "--files-from=.file_list"))))))))))
+            (if (file-is-directory? #+source)
+                (let* ((store     (%store-directory))
+                       (len       (+ 1 (string-length store)))
+                       (base      (string-drop #+source len))
+                       (dash      (string-index base #\-))
+                       (directory (string-drop base (+ 1 dash))))
+                  (mkdir directory)
+                  (copy-recursively #+source directory))
+                #+(if (string=? decompression-type "unzip")
+                      #~(invoke "unzip" #+source)
+                      #~(invoke (string-append #+tar "/bin/tar")
+                                "xvf" #+source)))
+
+            (let ((directory (first-file ".")))
+              (format (current-error-port)
+                      "source is under '~a'~%" directory)
+              (chdir directory)
+
+              (for-each apply-patch '#+patches)
+
+              (let ((result #+(if snippet
+                                  #~(let ((module (make-fresh-user-module)))
+                                      (module-use-interfaces!
+                                       module
+                                       (map resolve-interface '#+modules))
+                                      ((@ (system base compile) compile)
+                                       '#+snippet
+                                       #:to 'value
+                                       #:opts %auto-compilation-options
+                                       #:env module))
+                                  #~#t)))
+                ;; Issue a warning unless the result is #t.
+                (unless (eqv? result #t)
+                  (format (current-error-port) "\
+## WARNING: the snippet returned `~s'.  Return values other than #t
+## are deprecated.  Please migrate this package so that its snippet
+## reports errors by raising an exception, and otherwise returns #t.~%"
+                          result))
+                (unless result
+                  (error "snippet returned false")))
+
+              (chdir "..")
+
+              (unless tar-supports-sort?
+                (call-with-output-file ".file_list"
+                  (lambda (port)
+                    (for-each (lambda (name)
+                                (format port "~a~%" name))
+                              (find-files directory
+                                          #:directories? #t
+                                          #:fail-on-error? #t)))))
+              (apply invoke
+                     (string-append #+tar "/bin/tar")
+                     "cvf" #$output
+                     ;; The bootstrap xz does not support
+                     ;; threaded compression (introduced in
+                     ;; 5.2.0), but it ignores the extra flag.
+                     (string-append "--use-compress-program="
+                                    #+xz "/bin/xz --threads=0")
+                     ;; avoid non-determinism in the archive
+                     "--mtime=@0"
+                     "--owner=root:0"
+                     "--group=root:0"
+                     (if tar-supports-sort?
+                         `("--sort=name"
+                           ,directory)
+                         '("--no-recursion"
+                           "--files-from=.file_list")))))))
 
     (let ((name (tarxz-name original-file-name)))
       (gexp->derivation name build
diff --git a/guix/ui.scm b/guix/ui.scm
index 8d351607d8..45f438fc45 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2013 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2013, 2018 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
@@ -41,6 +41,12 @@
   #:use-module ((guix licenses) #:select (license? license-name))
   #:use-module ((guix build syscalls)
                 #:select (free-disk-space terminal-columns))
+  #:use-module ((guix build utils)
+                #:select (invoke-error? invoke-error-program
+                                        invoke-error-arguments
+                                        invoke-error-exit-status
+                                        invoke-error-term-signal
+                                        invoke-error-stop-signal))
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-11)
   #:use-module (srfi srfi-19)
@@ -670,6 +676,16 @@ or remove one of them from the profile.")
 directories:~{ ~a~}~%")
                     (file-search-error-file-name c)
                     (file-search-error-search-path c)))
+            ((invoke-error? c)
+             (leave (G_ "program exited\
+~@[ with non-zero exit status ~a~]\
+~@[ terminated by signal ~a~]\
+~@[ stopped by signal ~a~]: ~s~%")
+                    (invoke-error-exit-status c)
+                    (invoke-error-term-signal c)
+                    (invoke-error-stop-signal c)
+                    (cons (invoke-error-program c)
+                          (invoke-error-arguments c))))
             ((and (error-location? c) (message-condition? c))
              (format (current-error-port)
                      (G_ "~a: error: ~a~%")
diff --git a/tests/packages.scm b/tests/packages.scm
index 9e19c3992e..f1e7d3119b 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -407,18 +407,23 @@
                                                         (%current-system)))))
                     (arguments
                      `(#:guile ,%bootstrap-guile
+                       #:modules ((guix build utils))
                        #:builder
-                       (let ((tar    (assoc-ref %build-inputs "tar"))
-                             (xz     (assoc-ref %build-inputs "xz"))
-                             (source (assoc-ref %build-inputs "source")))
-                         (and (zero? (system* tar "xvf" source
-                                              "--use-compress-program" xz))
-                              (string=? "guile" (readlink "bin/guile-rocks"))
-                              (file-exists? "bin/scripts/compile.scm")
-                              (let ((out (assoc-ref %outputs "out")))
-                                (call-with-output-file out
-                                  (lambda (p)
-                                    (display "OK" p))))))))))
+                       (begin
+                         (use-modules (guix build utils))
+                         (let ((tar    (assoc-ref %build-inputs "tar"))
+                               (xz     (assoc-ref %build-inputs "xz"))
+                               (source (assoc-ref %build-inputs "source")))
+                           (invoke tar "xvf" source
+                                   "--use-compress-program" xz)
+                           (unless (and (string=? "guile" (readlink "bin/guile-rocks"))
+                                        (file-exists? "bin/scripts/compile.scm"))
+                             (error "the snippet apparently failed"))
+                           (let ((out (assoc-ref %outputs "out")))
+                             (call-with-output-file out
+                               (lambda (p)
+                                 (display "OK" p))))
+                           #t))))))
          (drv    (package-derivation %store package))
          (out    (derivation->output-path drv)))
     (and (build-derivations %store (list (pk 'snippet-drv drv)))
@@ -486,7 +491,8 @@
                    (mkdir %output)
                    (call-with-output-file (string-append %output "/test")
                      (lambda (p)
-                       (display '(hello guix) p))))))))
+                       (display '(hello guix) p)))
+                   #t)))))
          (d (package-derivation %store p)))
     (and (build-derivations %store (list d))
          (let ((p (pk 'drv d (derivation->output-path d))))
@@ -500,8 +506,10 @@
               (source #f)
               (arguments
                `(#:guile ,%bootstrap-guile
-                 #:builder (copy-file (assoc-ref %build-inputs "input")
-                                      %output)))
+                 #:builder (begin
+                             (copy-file (assoc-ref %build-inputs "input")
+                                        %output)
+                             #t)))
               (inputs `(("input" ,i)))))
          (d (package-derivation %store p)))
     (and (build-derivations %store (list d))
@@ -516,8 +524,10 @@
               (source i)
               (arguments
                `(#:guile ,%bootstrap-guile
-                 #:builder (copy-file (assoc-ref %build-inputs "source")
-                                      %output)))))
+                 #:builder (begin
+                             (copy-file (assoc-ref %build-inputs "source")
+                                        %output)
+                             #t)))))
          (d (package-derivation %store p)))
     (and (build-derivations %store (list d))
          (let ((p (derivation->output-path d)))
@@ -530,11 +540,14 @@
               (source #f)
               (arguments
                `(#:guile ,%bootstrap-guile
+                 #:modules ((guix build utils))
                  #:builder
-                 (let ((out  (assoc-ref %outputs "out"))
-                       (bash (assoc-ref %build-inputs "bash")))
-                   (zero? (system* bash "-c"
-                                   (format #f "echo hello > ~a" out))))))
+                 (begin
+                   (use-modules (guix build utils))
+                   (let ((out  (assoc-ref %outputs "out"))
+                         (bash (assoc-ref %build-inputs "bash")))
+                     (invoke bash "-c"
+                             (format #f "echo hello > ~a" out))))))
               (inputs `(("bash" ,(search-bootstrap-binary "bash"
                                                           (%current-system)))))))
          (d (package-derivation %store p)))
@@ -554,7 +567,8 @@
                    (mkdir %output)
                    ;; The reference to itself isn't allowed so building it
                    ;; should fail.
-                   (symlink %output (string-append %output "/self")))))))
+                   (symlink %output (string-append %output "/self"))
+                   #t)))))
          (d (package-derivation %store p)))
     (guard (c ((nix-protocol-error? c) #t))
       (build-derivations %store (list d))
@@ -766,7 +780,9 @@
                 (inherit p1r) (name "p1") (replacement p1r)
                 (arguments
                  `(#:guile ,%bootstrap-guile
-                   #:builder (mkdir (assoc-ref %outputs "out"))))))
+                   #:builder (begin
+                               (mkdir (assoc-ref %outputs "out"))
+                               #t)))))
          (p2r (dummy-package "P2"
                 (build-system trivial-build-system)
                 (inputs `(("p1" ,p1)))
@@ -786,7 +802,8 @@
                                (mkdir out)
                                (chdir out)
                                (symlink (assoc-ref %build-inputs "p1")
-                                        "p1"))))))
+                                        "p1")
+                               #t)))))
          (p3  (dummy-package "p3"
                 (build-system trivial-build-system)
                 (inputs `(("p2" ,p2)))
@@ -796,7 +813,8 @@
                                (mkdir out)
                                (chdir out)
                                (symlink (assoc-ref %build-inputs "p2")
-                                        "p2")))))))
+                                        "p2")
+                               #t))))))
     (lset= equal?
            (package-grafts %store p3)
            (list (graft
@@ -990,7 +1008,8 @@
                                 (call-with-output-file
                                     (string-append out "/xml/bar/baz/catalog.xml")
                                   (lambda (port)
-                                    (display "xml? wat?!" port)))))))
+                                    (display "xml? wat?!" port)))
+                                #t))))
                (synopsis #f) (description #f)
                (home-page #f) (license #f)))
          (p2 (package
@@ -1001,7 +1020,9 @@
                (build-system trivial-build-system)
                (arguments
                 `(#:guile ,%bootstrap-guile
-                  #:builder (mkdir (assoc-ref %outputs "out"))))
+                  #:builder (begin
+                              (mkdir (assoc-ref %outputs "out"))
+                              #t)))
                (native-search-paths (package-native-search-paths libxml2))
                (synopsis #f) (description #f)
                (home-page #f) (license #f)))
@@ -1043,7 +1064,9 @@
                (build-system trivial-build-system)
                (arguments
                 `(#:guile ,%bootstrap-guile
-                  #:builder (mkdir (assoc-ref %outputs "out"))))
+                  #:builder (begin
+                              (mkdir (assoc-ref %outputs "out"))
+                              #t)))
                (native-search-paths (package-native-search-paths git))))
          (prof1 (run-with-store %store
                   (profile-derivation
diff --git a/tests/profiles.scm b/tests/profiles.scm
index c668c2b831..3a59a0cc4f 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -498,7 +498,8 @@
                           (mkdir (string-append out "/etc"))
                           (call-with-output-file (string-append out "/etc/foo")
                             (lambda (port)
-                              (display "foo!" port))))))))
+                              (display "foo!" port)))
+                          #t)))))
        (entry ->   (package->manifest-entry thing))
        (drv        (profile-derivation (manifest (list entry))
                                        #:hooks '()
@@ -527,7 +528,8 @@
                           (symlink "foo" (string-append out "/etc"))
                           (call-with-output-file (string-append out "/etc/bar")
                             (lambda (port)
-                              (display "foo!" port))))))))
+                              (display "foo!" port)))
+                          #t)))))
        (entry ->   (package->manifest-entry thing))
        (drv        (profile-derivation (manifest (list entry))
                                        #:hooks '()