summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'gnu')
-rw-r--r--gnu/bootloader/u-boot.scm44
-rw-r--r--gnu/local.mk3
-rw-r--r--gnu/packages/admin.scm8
-rw-r--r--gnu/packages/android.scm66
-rw-r--r--gnu/packages/autotools.scm36
-rw-r--r--gnu/packages/bioinformatics.scm472
-rw-r--r--gnu/packages/bittorrent.scm30
-rw-r--r--gnu/packages/bootloaders.scm31
-rw-r--r--gnu/packages/certs.scm6
-rw-r--r--gnu/packages/code.scm53
-rw-r--r--gnu/packages/compression.scm9
-rw-r--r--gnu/packages/cpp.scm6
-rw-r--r--gnu/packages/cran.scm21
-rw-r--r--gnu/packages/cross-base.scm4
-rw-r--r--gnu/packages/django.scm23
-rw-r--r--gnu/packages/emacs.scm19
-rw-r--r--gnu/packages/finance.scm32
-rw-r--r--gnu/packages/game-development.scm8
-rw-r--r--gnu/packages/geo.scm10
-rw-r--r--gnu/packages/gimp.scm28
-rw-r--r--gnu/packages/gnunet.scm10
-rw-r--r--gnu/packages/golang.scm20
-rw-r--r--gnu/packages/graphics.scm88
-rw-r--r--gnu/packages/image-processing.scm5
-rw-r--r--gnu/packages/imagemagick.scm5
-rw-r--r--gnu/packages/linux.scm8
-rw-r--r--gnu/packages/monitoring.scm107
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/music.scm32
-rw-r--r--gnu/packages/orpheus.scm20
-rw-r--r--gnu/packages/package-management.scm6
-rw-r--r--gnu/packages/parallel.scm12
-rw-r--r--gnu/packages/patches/libsndfile-CVE-2017-12562.patch97
-rw-r--r--gnu/packages/patches/rct-add-missing-headers.patch43
-rw-r--r--gnu/packages/patches/rtags-separate-rct.patch72
-rw-r--r--gnu/packages/pulseaudio.scm10
-rw-r--r--gnu/packages/python.scm151
-rw-r--r--gnu/packages/shells.scm48
-rw-r--r--gnu/packages/shellutils.scm15
-rw-r--r--gnu/packages/slang.scm10
-rw-r--r--gnu/packages/spice.scm9
-rw-r--r--gnu/packages/statistics.scm27
-rw-r--r--gnu/packages/tryton.scm128
-rw-r--r--gnu/packages/version-control.scm6
-rw-r--r--gnu/packages/video.scm13
-rw-r--r--gnu/packages/virtualization.scm4
-rw-r--r--gnu/packages/wget.scm4
-rw-r--r--gnu/packages/wxwidgets.scm5
-rw-r--r--gnu/packages/xml.scm8
-rw-r--r--gnu/services.scm59
-rw-r--r--gnu/services/herd.scm9
-rw-r--r--gnu/services/shepherd.scm36
-rw-r--r--gnu/services/version-control.scm6
-rw-r--r--gnu/system.scm7
-rw-r--r--gnu/system/examples/desktop.tmpl4
-rw-r--r--gnu/system/examples/lightweight-desktop.tmpl2
-rw-r--r--gnu/system/install.scm75
-rw-r--r--gnu/tests/version-control.scm25
58 files changed, 1810 insertions, 289 deletions
diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm
index 397eb8181c..21d0aecce2 100644
--- a/gnu/bootloader/u-boot.scm
+++ b/gnu/bootloader/u-boot.scm
@@ -28,7 +28,12 @@
   #:use-module (guix records)
   #:use-module (guix utils)
   #:export (u-boot-bootloader
-            u-boot-beaglebone-black-bootloader))
+            u-boot-a20-olinuxino-lime-bootloader
+            u-boot-a20-olinuxino-lime2-bootloader
+            u-boot-a20-olinuxino-micro-bootloader
+            u-boot-banana-pi-m2-ultra-bootloader
+            u-boot-beaglebone-black-bootloader
+            u-boot-nintendo-nes-classic-edition-bootloader))
 
 (define install-u-boot
   #~(lambda (bootloader device mount-point)
@@ -50,6 +55,13 @@
         (write-file-on-device u-boot (* 1024 512)
                               device (* 768 512)))))
 
+(define install-allwinner-u-boot
+  #~(lambda (bootloader device mount-point)
+      (let ((u-boot (string-append bootloader
+                                   "/libexec/u-boot-sunxi-with-spl.bin")))
+        (write-file-on-device u-boot (stat:size (stat u-boot))
+                              device (* 8 1024)))))
+
 
 
 ;;;
@@ -68,3 +80,33 @@
    (inherit u-boot-bootloader)
    (package u-boot-beagle-bone-black)
    (installer install-beaglebone-black-u-boot)))
+
+(define u-boot-allwinner-bootloader
+  (bootloader
+   (inherit u-boot-bootloader)
+   (installer install-allwinner-u-boot)))
+
+(define u-boot-nintendo-nes-classic-edition-bootloader
+  (bootloader
+    (inherit u-boot-allwinner-bootloader)
+    (package u-boot-nintendo-nes-classic-edition)))
+
+(define u-boot-a20-olinuxino-lime-bootloader
+  (bootloader
+   (inherit u-boot-allwinner-bootloader)
+   (package u-boot-a20-olinuxino-lime)))
+
+(define u-boot-a20-olinuxino-lime2-bootloader
+  (bootloader
+   (inherit u-boot-allwinner-bootloader)
+   (package u-boot-a20-olinuxino-lime2)))
+
+(define u-boot-a20-olinuxino-micro-bootloader
+  (bootloader
+   (inherit u-boot-allwinner-bootloader)
+   (package u-boot-a20-olinuxino-micro)))
+
+(define u-boot-banana-pi-m2-ultra-bootloader
+  (bootloader
+   (inherit u-boot-allwinner-bootloader)
+   (package u-boot-banana-pi-m2-ultra)))
diff --git a/gnu/local.mk b/gnu/local.mk
index 865d1eae88..9c44b2cc42 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -836,6 +836,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/libsndfile-armhf-type-checks.patch	\
   %D%/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch	\
   %D%/packages/patches/libsndfile-CVE-2017-8362.patch		\
+  %D%/packages/patches/libsndfile-CVE-2017-12562.patch		\
   %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 		\
@@ -1037,6 +1038,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/raptor2-heap-overflow.patch		\
   %D%/packages/patches/ratpoison-shell.patch			\
   %D%/packages/patches/rcs-5.9.4-noreturn.patch			\
+  %D%/packages/patches/rct-add-missing-headers.patch		\
   %D%/packages/patches/readline-link-ncurses.patch		\
   %D%/packages/patches/readline-6.2-CVE-2014-2524.patch		\
   %D%/packages/patches/readline-7.0-mingw.patch			\
@@ -1049,6 +1051,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/rsync-CVE-2017-17433-fix-tests.patch			\
   %D%/packages/patches/rsync-CVE-2017-17434-pt1.patch			\
   %D%/packages/patches/rsync-CVE-2017-17434-pt2.patch			\
+  %D%/packages/patches/rtags-separate-rct.patch			\
   %D%/packages/patches/ruby-concurrent-ignore-broken-test.patch	\
   %D%/packages/patches/ruby-concurrent-test-arm.patch		\
   %D%/packages/patches/ruby-rack-ignore-failing-test.patch      \
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index b35d0256cc..3d3c626192 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -2095,7 +2095,7 @@ buffers.")
 (define-public intel-gpu-tools
   (package
     (name "intel-gpu-tools")
-    (version "1.18")
+    (version "1.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://cgit.freedesktop.org/xorg/app/"
@@ -2103,7 +2103,7 @@ buffers.")
                                   "intel-gpu-tools-" version ".tar.gz"))
               (sha256
                (base32
-                "0w7djk0y5w76hzn1b3cm39zd5c6w9za1wfn80wd857h0v313rzq3"))))
+                "1xfy4cgimyyn5qixlrfkadgnl9qwbk30vw8k80g8vjnrcc4hx986"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; many of the tests try to load kernel modules
@@ -2111,9 +2111,9 @@ buffers.")
        (modify-phases %standard-phases
          (add-after 'unpack 'autogen
            (lambda _
-             ;; Don't run configure in this phase
+             ;; Don't run configure in this phase.
              (setenv "NOCONFIGURE" "1")
-             (zero? (system* "sh" "autogen.sh")))))))
+             (invoke "sh" "autogen.sh"))))))
     (inputs
      `(("util-macros" ,util-macros)
        ("libdrm" ,libdrm)
diff --git a/gnu/packages/android.scm b/gnu/packages/android.scm
index ed71077d5e..6baefbca96 100644
--- a/gnu/packages/android.scm
+++ b/gnu/packages/android.scm
@@ -24,6 +24,7 @@
 
 (define-module (gnu packages android)
   #:use-module (guix packages)
+  #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
@@ -35,7 +36,8 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages ssh)
   #:use-module (gnu packages version-control)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages linux))
 
 ;; The Makefiles that we add are largely based on the Debian
 ;; packages.  They are licensed under GPL-2 and have copyright:
@@ -309,6 +311,33 @@ of device actions, such as installing and debugging apps, and it provides access
 to a Unix shell that can run commands on the connected device or emulator.")
     (license license:asl2.0)))
 
+(define-public mkbootimg
+  (package
+    (name "mkbootimg")
+    (version (android-platform-version))
+    (source (origin
+              (inherit (android-platform-system-core version))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-source
+           (lambda _ (chdir "mkbootimg") #t))
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "mkbootimg" bin)
+               #t))))))
+    (home-page "https://developer.android.com/studio/command-line/adb.html")
+    (synopsis "Tool to create Android boot images")
+    (description "This package provides a tool to create Android Boot
+Images.")
+    (license license:asl2.0)))
+
 (define-public android-udev-rules
   (package
     (name "android-udev-rules")
@@ -439,3 +468,38 @@ parts of the development workflow.  Repo is not meant to replace Git, only to
 make it easier to work with Git.  The repo command is an executable Python
 script that you can put anywhere in your path.")
     (license license:asl2.0)))
+
+(define-public abootimg
+  (package
+    (name "abootimg")
+    (version "0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://http.debian.net/debian/pool/main/a/abootimg/"
+                           "abootimg_" version ".orig.tar.gz"))
+       (sha256
+        (base32 "0sfc2k011l1ymv97821w89391gnqdh8pp0haz4sdcm5hx0axv2ba"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+        (replace 'configure
+          (lambda _
+            (setenv "CC" "gcc")
+            #t))
+        (replace 'install
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let* ((out (assoc-ref outputs "out"))
+                   (bin (string-append out "/bin")))
+              (install-file "abootimg" bin)
+              #t))))))
+    (inputs
+     `(("libblkid" ,util-linux)))
+    (home-page "https://ac100.grandou.net/abootimg")
+    (synopsis "Tool for manipulating Android Boot Images")
+    (description "This package provides a tool for manipulating old Android
+Boot Images.  @code{abootimg} can work directly on block devices, or, the
+safest way, on a file image.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/autotools.scm b/gnu/packages/autotools.scm
index b45800f0a1..355e66f42a 100644
--- a/gnu/packages/autotools.scm
+++ b/gnu/packages/autotools.scm
@@ -27,6 +27,7 @@
   #:use-module (guix licenses)
   #:use-module (gnu packages)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages man)
   #:use-module (gnu packages bash)
@@ -399,3 +400,38 @@ complexity of working with shared libraries across platforms.")
     (description (package-description libtool))
     (home-page (package-home-page libtool))
     (license lgpl2.1+)))
+
+(define-public pyconfigure
+  (package
+    (name "pyconfigure")
+    (version "0.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/pyconfigure/pyconfigure-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0kxi9bg7l6ric39vbz9ykz4a21xlihhh2zcc3297db8amvhqwhrp"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'patch-python
+           (lambda _
+             (substitute* "pyconf.in"
+               (("/usr/bin/env python") (which "python3")))
+             #t)))))
+    (inputs
+     `(("python" ,python-3)))
+    (synopsis "@command{configure} interface for Python-based packages")
+    (description
+     "GNU pyconfigure provides template files for easily implementing
+standards-compliant configure scripts and Makefiles for Python-based packages.
+It is designed to work alongside existing Python setup scripts, making it easy
+to integrate into existing projects.  Powerful and flexible Autoconf macros
+are available, allowing you to easily make adjustments to the installation
+procedure based on the capabilities of the target computer.")
+    (home-page "https://www.gnu.org/software/pyconfigure/manual/")
+    (license
+     (fsf-free
+      "https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html"))))
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index d3b137513c..12cfed68ad 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -1,10 +1,10 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2014, 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2015, 2016 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016 Raoul Bonnal <ilpuccio.febo@gmail.com>
 ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -71,6 +71,7 @@
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
+  #:use-module (gnu packages jemalloc)
   #:use-module (gnu packages ldc)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
@@ -3433,7 +3434,7 @@ sometimes better.  Khmer can also identify and fix problems with shotgun
 data.")
     ;; When building on i686, armhf and mips64el, we get the following error:
     ;; error: ['khmer', 'khmer.tests', 'oxli'] require 64-bit operating system
-    (supported-systems '("x86_64-linux"))
+    (supported-systems '("x86_64-linux" "aarch64-linux"))
     (license license:bsd-3)))
 
 (define-public kaiju
@@ -5562,6 +5563,11 @@ application of SortMeRNA is filtering rRNA from metatranscriptomic data.")
        (modify-phases %standard-phases
          (add-after 'unpack 'enter-source-dir
            (lambda _ (chdir "source") #t))
+         (add-after 'enter-source-dir 'make-reproducible
+           (lambda _
+             (substitute* "Makefile"
+               (("(COMPILATION_TIME_PLACE=\")(.*)(\")" _ pre mid post)
+                (string-append pre "Built with Guix" post)))))
          (add-after 'enter-source-dir 'do-not-use-bundled-htslib
            (lambda _
              (substitute* "Makefile"
@@ -11106,3 +11112,463 @@ for alignment.  Pseudoalignment of reads preserves the key information needed
 for quantification, and kallisto is therefore not only fast, but also as
 accurate as existing quantification tools.")
     (license license:bsd-2)))
+
+(define-public libgff
+  (package
+    (name "libgff")
+    (version "1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/Kingsford-Group/"
+                    "libgff/archive/v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0vc4nxyhlm6g9vvmx5l4lfs5pnvixsv1hiiy4kddf2y3p6jna8ls"))))
+    (build-system cmake-build-system)
+    (arguments `(#:tests? #f))          ; no tests included
+    (home-page "https://github.com/Kingsford-Group/libgff")
+    (synopsis "Parser library for reading/writing GFF files")
+    (description "This is a simple \"libraryfication\" of the GFF/GTF parsing
+code that is used in the Cufflinks codebase.  The goal of this library is to
+provide this functionality without the necessity of drawing in a heavy-weight
+dependency like SeqAn.")
+    (license (license:x11-style "http://www.boost.org/LICENSE_1_0.txt"))))
+
+(define-public libdivsufsort
+  (package
+    (name "libdivsufsort")
+    (version "2.0.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/y-256/libdivsufsort.git")
+                    (commit version)))
+              (sha256
+               (base32
+                "0fgdz9fzihlvjjrxy01md1bv9vh12rkgkwbm90b1hj5xpbaqp7z2"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f                      ; there are no tests
+       #:configure-flags
+       ;; Needed for rapmap and sailfish.
+       '("-DBUILD_DIVSUFSORT64=ON")))
+    (home-page "https://github.com/y-256/libdivsufsort")
+    (synopsis "Lightweight suffix-sorting library")
+    (description "libdivsufsort is a software library that implements a
+lightweight suffix array construction algorithm.  This library provides a
+simple and an efficient C API to construct a suffix array and a
+Burrows-Wheeler transformed string from a given string over a constant-size
+alphabet.  The algorithm runs in O(n log n) worst-case time using only 5n+O(1)
+bytes of memory space, where n is the length of the string.")
+    (license license:expat)))
+
+(define-public sailfish
+  (package
+    (name "sailfish")
+    (version "0.10.1")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append "https://github.com/kingsfordgroup/"
+                              "sailfish/archive/v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1inn60dxiwsz8g9w7kvfhjxj4bwfb0r12dyhpzzhfbig712dkmm0"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete bundled headers for eigen3.
+                  (delete-file-recursively "include/eigen3/")
+                  #t))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "-DBOOST_INCLUDEDIR="
+                            (assoc-ref %build-inputs "boost")
+                            "/include/")
+             (string-append "-DBOOST_LIBRARYDIR="
+                            (assoc-ref %build-inputs "boost")
+                            "/lib/")
+             (string-append "-DBoost_LIBRARIES="
+                            "-lboost_iostreams "
+                            "-lboost_filesystem "
+                            "-lboost_system "
+                            "-lboost_thread "
+                            "-lboost_timer "
+                            "-lboost_chrono "
+                            "-lboost_program_options")
+             "-DBoost_FOUND=TRUE"
+             ;; Don't download RapMap---we already have it!
+             "-DFETCHED_RAPMAP=1")
+       ;; Tests must be run after installation and the location of the test
+       ;; data file must be overridden.  But the tests fail.  It looks like
+       ;; they are not really meant to be run.
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         ;; Boost cannot be found, even though it's right there.
+         (add-after 'unpack 'do-not-look-for-boost
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               (("find_package\\(Boost 1\\.53\\.0") "#"))))
+         (add-after 'unpack 'do-not-assign-to-macro
+           (lambda _
+             (substitute* "include/spdlog/details/format.cc"
+               (("const unsigned CHAR_WIDTH = 1;") ""))))
+         (add-after 'unpack 'prepare-rapmap
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((src "external/install/src/rapmap/")
+                   (include "external/install/include/rapmap/")
+                   (rapmap (assoc-ref inputs "rapmap")))
+               (mkdir-p "/tmp/rapmap")
+               (system* "tar" "xf"
+                        (assoc-ref inputs "rapmap")
+                        "-C" "/tmp/rapmap"
+                        "--strip-components=1")
+               (mkdir-p src)
+               (mkdir-p include)
+               (for-each (lambda (file)
+                           (install-file file src))
+                         (find-files "/tmp/rapmap/src" "\\.(c|cpp)"))
+               (copy-recursively "/tmp/rapmap/include" include))))
+         (add-after 'unpack 'use-system-libraries
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* '("src/SailfishIndexer.cpp"
+                            "src/SailfishUtils.cpp"
+                            "src/SailfishQuantify.cpp"
+                            "src/FASTAParser.cpp"
+                            "include/PCA.hpp"
+                            "include/SailfishUtils.hpp"
+                            "include/SailfishIndex.hpp"
+                            "include/CollapsedEMOptimizer.hpp"
+                            "src/CollapsedEMOptimizer.cpp")
+               (("#include \"jellyfish/config.h\"") ""))
+             (substitute* "src/CMakeLists.txt"
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/include/jellyfish-2.2..")
+                (string-append (assoc-ref inputs "jellyfish")
+                               "/include/jellyfish-" ,(package-version jellyfish)))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libjellyfish-2.0.a")
+                (string-append (assoc-ref inputs "jellyfish")
+                               "/lib/libjellyfish-2.0.a"))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort.a")
+                (string-append (assoc-ref inputs "libdivsufsort")
+                               "/lib/libdivsufsort.so"))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort64.a")
+                (string-append (assoc-ref inputs "libdivsufsort")
+                               "/lib/libdivsufsort64.so")))
+             (substitute* "CMakeLists.txt"
+               ;; Don't prefer static libs
+               (("SET\\(CMAKE_FIND_LIBRARY_SUFFIXES.*") "")
+               (("find_package\\(Jellyfish.*") "")
+               (("ExternalProject_Add\\(libjellyfish") "message(")
+               (("ExternalProject_Add\\(libgff") "message(")
+               (("ExternalProject_Add\\(libsparsehash") "message(")
+               (("ExternalProject_Add\\(libdivsufsort") "message("))
+
+             ;; Ensure that Eigen headers can be found
+             (setenv "CPLUS_INCLUDE_PATH"
+                     (string-append (getenv "CPLUS_INCLUDE_PATH")
+                                    ":"
+                                    (assoc-ref inputs "eigen")
+                                    "/include/eigen3")))))))
+    (inputs
+     `(("boost" ,boost)
+       ("eigen" ,eigen)
+       ("jemalloc" ,jemalloc)
+       ("jellyfish" ,jellyfish)
+       ("sparsehash" ,sparsehash)
+       ("rapmap" ,(origin
+                    (method git-fetch)
+                    (uri (git-reference
+                          (url "https://github.com/COMBINE-lab/RapMap.git")
+                          (commit (string-append "sf-v" version))))
+                    (file-name (string-append "rapmap-sf-v" version "-checkout"))
+                    (sha256
+                     (base32
+                      "1hv79l5i576ykv5a1srj2p0q36yvyl5966m0fcy2lbi169ipjakf"))
+                    (modules '((guix build utils)))
+                    ;; These files are expected to be excluded.
+                    (snippet
+                     '(begin (delete-file-recursively "include/spdlog")
+                             (for-each delete-file '("include/xxhash.h"
+                                                     "src/xxhash.c"))))))
+       ("libdivsufsort" ,libdivsufsort)
+       ("libgff" ,libgff)
+       ("tbb" ,tbb)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://www.cs.cmu.edu/~ckingsf/software/sailfish")
+    (synopsis "Mapping-based isoform quantification from RNA-Seq reads")
+    (description "Sailfish is a tool for genomic transcript quantification
+from RNA-seq data.  It requires a set of target transcripts (either from a
+reference or de-novo assembly) to quantify.  All you need to run sailfish is a
+fasta file containing your reference transcripts and a (set of) fasta/fastq
+file(s) containing your reads.")
+    (license license:gpl3+)))
+
+(define libstadenio-for-salmon
+  (package
+    (name "libstadenio")
+    (version "1.14.8")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/COMBINE-lab/staden-io_lib.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1x8kxxqxl892vwfbprlbyfwkkv7c34ggkc94892x9x0g37x5nbwx"))))
+    (build-system gnu-build-system)
+    (arguments '(#:parallel-tests? #f)) ; not supported
+    (inputs
+     `(("zlib" ,zlib)))
+    (native-inputs
+     `(("perl" ,perl)))                 ; for tests
+    (home-page "https://github.com/COMBINE-lab/staden-io_lib")
+    (synopsis "General purpose trace and experiment file library")
+    (description "This package provides a library of file reading and writing
+code to provide a general purpose Trace file (and Experiment File) reading
+interface.
+
+The following file formats are supported:
+
+@enumerate
+@item SCF trace files
+@item ABI trace files
+@item ALF trace files
+@item ZTR trace files
+@item SFF trace archives
+@item SRF trace archives
+@item Experiment files
+@item Plain text files
+@item SAM/BAM sequence files
+@item CRAM sequence files
+@end enumerate\n")
+    (license license:bsd-3)))
+
+(define spdlog-for-salmon
+  (package
+    (name "spdlog")
+    (version "0.14.0")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/COMBINE-lab/spdlog.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "13730429gwlabi432ilpnja3sfvy0nn2719vnhhmii34xcdyc57q"))))
+    (build-system cmake-build-system)
+    (home-page "https://github.com/COMBINE-lab/spdlog")
+    (synopsis "Very fast C++ logging library")
+    (description "Spdlog is a very fast header-only C++ logging library with
+performance as its primary goal.")
+    (license license:expat)))
+
+;; This is a modified variant of bwa for use with Salmon. It installs a
+;; library to avoid having to build this as part of Salmon.
+(define bwa-for-salmon
+  (package (inherit bwa)
+    (name "bwa")
+    (version "0.7.12.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/COMBINE-lab/bwa.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append "bwa-for-salmon-" version "-checkout"))
+              (sha256
+               (base32
+                "1z2qa64y0c5hky10510x137mnzlhz6k8qf27csw4w9j6qihq95gb"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ;no "check" target
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lib (string-append out "/lib"))
+                    (doc (string-append out "/share/doc/bwa"))
+                    (man (string-append out "/share/man/man1"))
+                    (inc (string-append out "/include/bwa")))
+               (install-file "bwa" bin)
+               (install-file "README.md" doc)
+               (install-file "bwa.1" man)
+               (install-file "libbwa.a" lib)
+               (mkdir-p lib)
+               (mkdir-p inc)
+               (for-each (lambda (file)
+                           (install-file file inc))
+                         (find-files "." "\\.h$")))
+             #t))
+         ;; no "configure" script
+         (delete 'configure))))))
+
+(define-public salmon
+  (package
+    (name "salmon")
+    (version "0.9.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/COMBINE-lab/salmon.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1zi1ff4i7y2ykk0vdzysgwzzzv166vg2x77pj1mf4baclavxj87a"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete bundled headers for eigen3.
+                  (delete-file-recursively "include/eigen3/")
+                  #t))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list (string-append "-DBOOST_INCLUDEDIR="
+                            (assoc-ref %build-inputs "boost")
+                            "/include/")
+             (string-append "-DBOOST_LIBRARYDIR="
+                            (assoc-ref %build-inputs "boost")
+                            "/lib/")
+             (string-append "-DBoost_LIBRARIES="
+                            "-lboost_iostreams "
+                            "-lboost_filesystem "
+                            "-lboost_system "
+                            "-lboost_thread "
+                            "-lboost_timer "
+                            "-lboost_chrono "
+                            "-lboost_program_options")
+             "-DBoost_FOUND=TRUE"
+             "-DTBB_LIBRARIES=tbb tbbmalloc"
+             ;; Don't download RapMap---we already have it!
+             "-DFETCHED_RAPMAP=1")
+       #:phases
+       (modify-phases %standard-phases
+         ;; Boost cannot be found, even though it's right there.
+         (add-after 'unpack 'do-not-look-for-boost
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "CMakeLists.txt"
+               (("find_package\\(Boost 1\\.53\\.0") "#"))))
+         (add-after 'unpack 'do-not-phone-home
+           (lambda _
+             (substitute* "src/Salmon.cpp"
+               (("getVersionMessage\\(\\)") "\"\""))))
+         (add-after 'unpack 'prepare-rapmap
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((src "external/install/src/rapmap/")
+                   (include "external/install/include/rapmap/")
+                   (rapmap (assoc-ref inputs "rapmap")))
+               (mkdir-p src)
+               (mkdir-p include)
+               (for-each (lambda (file)
+                           (install-file file src))
+                         (find-files (string-append rapmap "/src") "\\.(c|cpp)"))
+               (copy-recursively (string-append rapmap "/include") include)
+               (for-each delete-file '("external/install/include/rapmap/xxhash.h"
+                                       "external/install/include/rapmap/FastxParser.hpp"
+                                       "external/install/include/rapmap/concurrentqueue.h"
+                                       "external/install/include/rapmap/FastxParserThreadUtils.hpp"
+                                       "external/install/src/rapmap/FastxParser.cpp"
+                                       "external/install/src/rapmap/xxhash.c")))))
+         (add-after 'unpack 'use-system-libraries
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "src/CMakeLists.txt"
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/include/jellyfish-2.2..")
+                (string-append (assoc-ref inputs "jellyfish")
+                               "/include/jellyfish-" ,(package-version jellyfish)))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libjellyfish-2.0.a")
+                (string-append (assoc-ref inputs "jellyfish")
+                               "/lib/libjellyfish-2.0.a"))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort.a")
+                (string-append (assoc-ref inputs "libdivsufsort")
+                               "/lib/libdivsufsort.so"))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libstaden-read.a")
+                (string-append (assoc-ref inputs "libstadenio-for-salmon")
+                               "/lib/libstaden-read.a"))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libbwa.a")
+                (string-append (assoc-ref inputs "bwa") "/lib/libbwa.a"))
+               (("\\$\\{GAT_SOURCE_DIR\\}/external/install/lib/libdivsufsort64.a")
+                (string-append (assoc-ref inputs "libdivsufsort")
+                               "/lib/libdivsufsort64.so")))
+             (substitute* "CMakeLists.txt"
+               ;; Don't prefer static libs
+               (("SET\\(CMAKE_FIND_LIBRARY_SUFFIXES.*") "")
+               (("set\\(TBB_LIBRARIES") "message(")
+               (("find_package\\(Jellyfish.*") "")
+               (("ExternalProject_Add\\(libcereal") "message(")
+               (("ExternalProject_Add\\(libbwa") "message(")
+               (("ExternalProject_Add\\(libjellyfish") "message(")
+               (("ExternalProject_Add\\(libgff") "message(")
+               (("ExternalProject_Add\\(libtbb") "message(")
+               (("ExternalProject_Add\\(libspdlog") "message(")
+               (("ExternalProject_Add\\(libdivsufsort") "message(")
+               (("ExternalProject_Add\\(libstadenio") "message(")
+               (("ExternalProject_Add_Step\\(") "message("))
+
+             ;; Ensure that all headers can be found
+             (setenv "CPLUS_INCLUDE_PATH"
+                     (string-append (getenv "CPLUS_INCLUDE_PATH")
+                                    ":"
+                                    (assoc-ref inputs "bwa")
+                                    "/include/bwa"
+                                    ":"
+                                    (assoc-ref inputs "eigen")
+                                    "/include/eigen3"))
+             (setenv "CPATH"
+                     (string-append (assoc-ref inputs "bwa")
+                                    "/include/bwa"
+                                    ":"
+                                    (assoc-ref inputs "eigen")
+                                    "/include/eigen3"))
+             #t))
+         ;; CMAKE_INSTALL_PREFIX does not exist when the tests are
+         ;; run.  It only exists after the install phase.
+         (add-after 'unpack 'fix-tests
+           (lambda _
+             (substitute* "src/CMakeLists.txt"
+               (("DTOPLEVEL_DIR=\\$\\{CMAKE_INSTALL_PREFIX")
+                "DTOPLEVEL_DIR=${GAT_SOURCE_DIR"))
+             #t)))))
+    (inputs
+     `(("boost" ,boost)
+       ("bwa" ,bwa-for-salmon)
+       ("bzip2" ,bzip2)
+       ("cereal" ,cereal)
+       ("eigen" ,eigen)
+       ("rapmap" ,(origin
+                    (method git-fetch)
+                    (uri (git-reference
+                          (url "https://github.com/COMBINE-lab/RapMap.git")
+                          (commit (string-append "salmon-v" version))))
+                    (file-name (string-append "rapmap-salmon-v" version "-checkout"))
+                    (sha256
+                     (base32
+                      "1yc12yqsz6f0r8sg1qnk57xg34aqwc9jbqq6gd5ys28xw3plj98p"))))
+       ("jemalloc" ,jemalloc)
+       ("jellyfish" ,jellyfish)
+       ("libgff" ,libgff)
+       ("tbb" ,tbb)
+       ("libdivsufsort" ,libdivsufsort)
+       ("libstadenio-for-salmon" ,libstadenio-for-salmon)
+       ("spdlog-for-salmon" ,spdlog-for-salmon)
+       ("xz" ,xz)
+       ("zlib" ,zlib)))
+    (home-page "https://github.com/COMBINE-lab/salmon")
+    (synopsis "Quantification from RNA-seq reads using lightweight alignments")
+    (description "Salmon is a program to produce highly-accurate,
+transcript-level quantification estimates from RNA-seq data.  Salmon achieves
+its accuracy and speed via a number of different innovations, including the
+use of lightweight alignments (accurate but fast-to-compute proxies for
+traditional read alignments) and massively-parallel stochastic collapsed
+variational inference.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm
index 053988c8db..3c9279df96 100644
--- a/gnu/packages/bittorrent.scm
+++ b/gnu/packages/bittorrent.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Tomáš Čech <sleep_walker@gnu.org>
-;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -340,14 +340,15 @@ downloads, download scheduling, download rate limiting.")
 (define-public mktorrent
   (package
     (name "mktorrent")
-    (version "1.0")
+    (version "1.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "mirror://sourceforge/mktorrent/mktorrent/"
-                                  version "/" name "-" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (uri (string-append "https://github.com/Rudde/mktorrent/archive/v"
+                                  version ".tar.gz"))
               (sha256
                (base32
-                "17qi3nfky240pq6qcmf5qg324mxm83vk9r3nvsdhsvinyqm5d3kg"))))
+                "1j9qc4fxa9isnaygqk6jazsiklqywl2wcs95b8dx01963407bx6h"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases (modify-phases %standard-phases
@@ -359,13 +360,14 @@ downloads, download scheduling, download rate limiting.")
                           "USE_LONG_OPTIONS=1"
                           "USE_PTHREADS=1")
        #:tests? #f))                            ; no tests
-    (home-page "http://mktorrent.sourceforge.net/")
+    (home-page "https://github.com/Rudde/mktorrent")
     (synopsis "Utility to create BitTorrent metainfo files")
-    (description "mktorrent is a simple command-line utility to create
-BitTorrent @dfn{metainfo} files, often known simply as @dfn{torrents}, from
-both single files and whole directories.  It can add multiple trackers and web
-seed URLs, and set the @code{private} flag to disallow advertisement through
-the distributed hash table (DHT) and Peer Exchange.  Hashing is multi-threaded
+    (description
+     "mktorrent is a simple command-line utility to create BitTorrent
+@dfn{metainfo} files, often known simply as @dfn{torrents}, from both single
+files and whole directories.  It can add multiple trackers and web seed URLs,
+and set the @code{private} flag to disallow advertisement through the
+distributed hash table (@dfn{DHT}) and Peer Exchange.  Hashing is multi-threaded
 and will take advantage of multiple processor cores where possible.")
     (license (list l:public-domain      ; sha1.*, used to build without OpenSSL
                    l:gpl2+))))          ; with permission to link with OpenSSL
@@ -373,7 +375,7 @@ and will take advantage of multiple processor cores where possible.")
 (define-public libtorrent-rasterbar
   (package
     (name "libtorrent-rasterbar")
-    (version "1.1.5")
+    (version "1.1.6")
     (source (origin
               (method url-fetch)
               (uri
@@ -383,7 +385,7 @@ and will take advantage of multiple processor cores where possible.")
                 "/libtorrent-rasterbar-" version ".tar.gz"))
               (sha256
                (base32
-                "0c398b7hsa5dvj4m0jc8h7mn0m3nawmagb6c5c7ml5c9hc338c8h"))))
+                "1vr1a7smkwh7dc7jb9n68i0cg59wxhgywxc9kxpbs8fi9c04vixp"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -399,7 +401,7 @@ and will take advantage of multiple processor cores where possible.")
               ("openssl" ,openssl)))
     (native-inputs `(("python" ,python-2)
                      ("pkg-config" ,pkg-config)))
-    (home-page "http://www.rasterbar.com/products/libtorrent/")
+    (home-page "https://www.libtorrent.org/")
     (synopsis "Feature complete BitTorrent implementation")
     (description
      "libtorrent-rasterbar is a feature complete C++ BitTorrent implementation
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index 79a3c5f8bc..f7aa21fa61 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -37,6 +37,7 @@
   #:use-module (gnu packages disk)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages man)
@@ -335,7 +336,7 @@ tree binary files.  These are board description files used by Linux and BSD.")
 (define u-boot
   (package
     (name "u-boot")
-    (version "2017.11")
+    (version "2018.01")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -343,11 +344,12 @@ tree binary files.  These are board description files used by Linux and BSD.")
                     "u-boot-" version ".tar.bz2"))
               (sha256
                (base32
-                "01bcsah5imy6m3fbjwhqywxg0pfk5fl8ks9ylb7kv3zmrb9qy0ba"))))
+                "1nidnnjprgxdhiiz7gmaj8cgcf52l5gbv64cmzjq4gmkjirmk3wk"))))
     (native-inputs
      `(("bc" ,bc)
-       ("dtc" ,dtc)
-       ("python-2" ,python-2)))
+       ;("dtc" ,dtc) ; they have their own incompatible copy.
+       ("python-2" ,python-2)
+       ("swig" ,swig)))
     (build-system  gnu-build-system)
     (home-page "http://www.denx.de/wiki/U-Boot/")
     (synopsis "ARM bootloader")
@@ -363,10 +365,12 @@ also initializes the boards (RAM etc).")
                       `#f)))
     (package
       (inherit u-boot)
-      (name (string-append "u-boot-" (string-downcase board)))
+      (name (string-append "u-boot-"
+                           (string-replace-substring (string-downcase board)
+                                                     "_" "-")))
       (native-inputs
        `(,@(if (not same-arch?)
-             `(("cross-gcc" ,(cross-gcc triplet))
+             `(("cross-gcc" ,(cross-gcc triplet #:xgcc gcc-7))
                ("cross-binutils" ,(cross-binutils triplet)))
              '())
          ,@(package-native-inputs u-boot)))
@@ -423,6 +427,21 @@ also initializes the boards (RAM etc).")
 (define-public u-boot-odroid-c2
   (make-u-boot-package "odroid-c2" "aarch64-linux-gnu"))
 
+(define-public u-boot-banana-pi-m2-ultra
+  (make-u-boot-package "Bananapi_M2_Ultra" "arm-linux-gnueabihf"))
+
+(define-public u-boot-a20-olinuxino-lime
+  (make-u-boot-package "A20-OLinuXino-Lime" "arm-linux-gnueabihf"))
+
+(define-public u-boot-a20-olinuxino-lime2
+  (make-u-boot-package "A20-OLinuXino-Lime2" "arm-linux-gnueabihf"))
+
+(define-public u-boot-a20-olinuxino-micro
+  (make-u-boot-package "A20-OLinuXino_MICRO" "arm-linux-gnueabihf"))
+
+(define-public u-boot-nintendo-nes-classic-edition
+  (make-u-boot-package "Nintendo_NES_Classic_Edition" "arm-linux-gnueabihf"))
+
 (define-public vboot-utils
   (package
     (name "vboot-utils")
diff --git a/gnu/packages/certs.scm b/gnu/packages/certs.scm
index 30e53e3458..0f2f2d25ba 100644
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -75,7 +75,7 @@
 (define-public nss-certs
   (package
     (name "nss-certs")
-    (version "3.34.1")
+    (version "3.35")
     (source (origin
               (method url-fetch)
               (uri (let ((version-with-underscores
@@ -86,7 +86,7 @@
                       "nss-" version ".tar.gz")))
               (sha256
                (base32
-                "186x33wsk4mzjz7dzbn8p0py9a0nzkgzpfkdv4rlyy5gghv5vhd3"))))
+                "1ypn68z9ncbbshi3184ywrhx5i846lyd72gps1grzqzdkgh7s4pl"))))
     (build-system gnu-build-system)
     (outputs '("out"))
     (native-inputs
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index 042ea73a8c..a267688626 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -26,12 +26,13 @@
 (define-module (gnu packages code)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages cpp)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages gcc)
@@ -43,6 +44,7 @@
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages llvm)
+  #:use-module (gnu packages lua)
   #:use-module (gnu packages bash))
 
 ;;; Tools to deal with source code: metrics, cross-references, etc.
@@ -393,28 +395,43 @@ functionality such as HTML output.")
     (name "rtags")
     (version "2.16")
     (home-page "https://github.com/Andersbakken/rtags")
-    (source (origin
-              (method git-fetch)
-              (uri (git-reference
-                    (url home-page)
-                    (commit "8ef7554852541eced514c56d5e39d6073f7a2ef9")
-
-                    ;; FIXME: This fetches bundled copies of Lua, RCT, and
-                    ;; Selene.
-                    (recursive? #t)))
-              (sha256
-               (base32
-                "12r7lsqdmcbs9864a6dpblvifqvmfxhvxippyhfnnm2ai5ra80nc"))
-              (file-name (git-file-name name version))))
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append home-page "/archive/v" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (patches (search-patches "rtags-separate-rct.patch"))
+       (modules '((guix build utils)))
+       (snippet
+        ;; Part of spliting rct with rtags.
+        ;; Substitute #include "rct/header.h" with #include <rct/header.h>.
+        '(with-directory-excursion "src"
+           (delete-file-recursively "rct")        ;remove bundled copy
+           (let ((files (find-files "." ".*\\.cpp|.*\\.h")))
+             (substitute* files
+               (("#include ?\"rct/(.*.h)\"" all header)
+                (string-append "#include <rct/" header ">"))))))
+       (sha256
+        (base32
+         "17rkci3mmiw93qc32b9x76pg57b0lx80avr6wnmh190jx8n3v3wy"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:configure-flags '("-DBUILD_TESTING=FALSE"
-                           "-DRTAGS_NO_ELISP_FILES=1")
+     '(#:configure-flags
+       '("-DRTAGS_NO_ELISP_FILES=1"
+         "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
+         "-DCMAKE_CXX_FLAGS=-std=c++11"
+         "-DBUILD_TESTING=FALSE")
        #:tests? #f))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("clang" ,clang)
+     `(("bash-completion" ,bash-completion)
+       ("clang" ,clang)
        ("llvm" ,llvm)
-       ("bash-completion" ,bash-completion)))
+       ("lua" ,lua)
+       ("rct" ,rct)
+       ("selene" ,selene)))
     (synopsis "Indexer for the C language family with Emacs integration")
     (description
      "RTags is a client/server application that indexes C/C++ code and keeps a
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 65b7faaecb..e5746c8952 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -1311,10 +1311,11 @@ compresser/decompresser.")
        ("java-snappy" ,java-snappy)
        ("hamcrest" ,java-hamcrest-core)
        ("testng" ,java-testng)))
-    (synopsis "Java port of snappy")
-    (description "Iq80-snappy is a rewrite (port) of Snappy writen in pure
-Java.  This compression code produces a byte-for-byte exact copy of the output
-created by the original C++ code, and extremely fast.")
+    (synopsis "Java port of the Snappy (de)compressor")
+    (description
+     "Iq80-snappy is a port of the Snappy compressor and decompressor rewritten
+in pure Java.  This compression code produces a byte-for-byte exact copy of the
+output created by the original C++ code, and is extremely fast.")
     (license license:asl2.0)))
 
 (define-public java-jbzip2
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 7f711d5542..95e82fcb61 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -68,7 +68,7 @@ operating system functions.")
 
 (define-public rct
   (let* ((commit "b3e6f41d9844ef64420e628e0c65ed98278a843a")
-         (revision "1")
+         (revision "2")
          (version (git-version "0.0.0" revision commit)))
     (package
       (name "rct")
@@ -82,11 +82,13 @@ operating system functions.")
                 (sha256
                  (base32
                   "1m2931jacka27ghnpgf1z1plkkr64z0pga4r4zdrfpp2d7xnrdvb"))
+                (patches (search-patches "rct-add-missing-headers.patch"))
                 (file-name (git-file-name name version))))
       (build-system cmake-build-system)
       (arguments
        '(#:configure-flags
-         '("-DWITH_TESTS=ON")))           ; To run the test suite
+         '("-DWITH_TESTS=ON"            ; To run the test suite
+           "-DRCT_RTTI_ENABLED=ON")))
       (native-inputs
        `(("cppunit" ,cppunit)
          ("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index 62dc6a9bd7..cb39772ae5 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -1840,3 +1840,24 @@ plots in @code{ggplot2}.")
 attractive command line interfaces (CLIs).  It includes tools for drawing
 rules, boxes, trees, and Unicode symbols with ASCII alternatives.")
     (license license:expat)))
+
+(define-public r-argparser
+  (package
+    (name "r-argparser")
+    (version "0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "argparser" version))
+       (sha256
+        (base32
+         "0s1wxshx4jk69wfxhycx973q6y8cmqrfymyjklhq1i8xrj0kmmx9"))))
+    (build-system r-build-system)
+    (home-page "https://bitbucket.org/djhshih/argparser")
+    (synopsis "Command-line argument parser")
+    (description
+     "This package provides a cross-platform command-line argument parser
+written purely in R with no external dependencies.  It is useful with the
+Rscript front-end and facilitates turning an R script into an executable
+script.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/cross-base.scm b/gnu/packages/cross-base.scm
index 369083eab0..0f5997951c 100644
--- a/gnu/packages/cross-base.scm
+++ b/gnu/packages/cross-base.scm
@@ -202,7 +202,9 @@ target that libc."
               (patches
                (append
                 (origin-patches (package-source xgcc))
-                (cons (search-patch "gcc-cross-environment-variables.patch")
+                (cons (if (version>=? (package-version xgcc) "6.0")
+                          (search-patch "gcc-6-cross-environment-variables.patch")
+                          (search-patch "gcc-cross-environment-variables.patch"))
                       (cross-gcc-patches target))))
               (modules '((guix build utils)))
               (snippet
diff --git a/gnu/packages/django.scm b/gnu/packages/django.scm
index a413500486..936c15d2f7 100644
--- a/gnu/packages/django.scm
+++ b/gnu/packages/django.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 ng0 <contact.ng0@cryptolab.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -718,3 +719,25 @@ static files.")
 lower the barrier of entry, providing tools to enable teams to work towards
 higher quality while welcoming newcomers.")
     (license license:gpl3+)))
+
+(define-public python-django-tagging
+  (package
+    (name "python-django-tagging")
+    (version "0.4.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "django-tagging" version))
+       (sha256
+        (base32
+         "0s7b4v45j783yaxs7rni10k24san0ya77nqz4s7zdf3jhfpk42r1"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/Fantomas42/django-tagging")
+    (synopsis "Generic tagging application for Django")
+    (description "This package provides a generic tagging application for
+Django projects, which allows association of a number of tags with any
+@code{Model} instance and makes retrieval of tags simple.")
+    (license license:bsd-3)))
+
+(define-public python2-django-tagging
+  (package-with-python2 python-django-tagging))
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index c981200002..4464376a1f 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -4,7 +4,7 @@
 ;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014, 2015, 2016, 2017 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
-;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;; Copyright © 2016 Adriano Peluso <catonano@gmail.com>
@@ -3169,15 +3169,16 @@ perspective only its buffers are available by default.")
 (define-public emacs-request
   (package
     (name "emacs-request")
-    (version "0.2.0")
+    (version "0.3.0")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/tkf/emacs-request/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/tkf/emacs-request.git")
+                    (commit (string-append "v" version))))
+              (file-name (string-append name "-" version "-checkout"))
               (sha256
-               (base32 "0sll9g9x15jxrdr58pdxx4iz74rnjd43q521iqm890i6hmkrgwap"))))
+               (base32
+                "0wyxqbb35yqf6ci47531lk32d6fppamx9d8826kdz983vm87him7"))))
     (build-system emacs-build-system)
     (home-page "https://github.com/tkf/emacs-request")
     (synopsis "Package for speaking HTTP in Emacs Lisp")
@@ -6463,7 +6464,7 @@ It supports dired buffers and opens them in tree mode at destination.")
 It is meant to quickly generate linear ranges, e.g. 5, 6, 7, 8.  Some elisp
 proficiency is an advantage, since you can transform your numeric range with
 an elisp expression.")
-  (license license:gpl3+)))
+    (license license:gpl3+)))
 
 (define-public emacs-bash-completion
   (package
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index ce0172be06..c93f641933 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018 Adriano Peluso <catonano@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -720,3 +721,34 @@ agent.")
     (description "This package allows using KeepKey as a hardware SSH/GPG
 agent.")
     (license license:lgpl3)))
+
+(define-public python-stdnum
+  (package
+    (name "python-stdnum")
+    (version "1.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "python-stdnum" version))
+       (sha256
+        (base32
+         "0hvr47q32xbyiznpmbg4r8rcvxhnf0lwf33hcpnynyik57djy5np"))))
+    (build-system python-build-system)
+    (home-page
+     "https://arthurdejong.org/python-stdnum/")
+    (synopsis
+     "Python module to handle standardized number and code formats")
+    (description
+     "This is a Python library that aims to provide functions to handle,
+parse and validate standard numbers.
+The module supports more than 100 different number formats
+amongst which a great number of VAT and other tax numbers,
+personal identity and company identification codes,
+international standard numbers (ISBN, IBAN, EAN, etc.)
+and various other formats.
+The module also inclused implementations of the Verhoeff,
+Luhn and family of ISO/IEC 7064 check digit algorithms. ")
+    (license license:lgpl2.1+)))
+
+(define-public python2-stdnum
+  (package-with-python2 python-stdnum))
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index b719803934..0b08b04f51 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -112,7 +112,7 @@ is used in some video games and movies.")
 (define-public deutex
   (package
    (name "deutex")
-   (version "5.1.0")
+   (version "5.1.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://github.com/Doom-Utils/" name
@@ -120,7 +120,7 @@ is used in some video games and movies.")
                                 name "-" version ".tar.xz"))
             (sha256
              (base32
-              "0hwkm0q2w16ddmiwh7x3jcfp58zjb40a5dh7c3sybwm9bar37pn1"))))
+              "0yqzlb3imkdzy8yd7xc69xk9ajf4dhiz3a9ssphyf4c9rcr440wj"))))
    (build-system gnu-build-system)
    (native-inputs `(("asciidoc" ,asciidoc)))
    (home-page "https://github.com/Doom-Utils/deutex")
@@ -1069,6 +1069,10 @@ games.")
     (arguments
      `(#:scons ,scons-python2
        #:scons-flags (list "platform=x11"
+                           ,@(if (string-prefix? "aarch64" (or (%current-target-system)
+                                                               (%current-system)))
+                               `("CCFLAGS=-DNO_THREADS")
+                               '())
                            ;; Avoid using many of the bundled libs.
                            ;; Note: These options can be found in the SConstruct file.
                            "builtin_freetype=no"
diff --git a/gnu/packages/geo.scm b/gnu/packages/geo.scm
index 5a24ed6146..9c7f7c1158 100644
--- a/gnu/packages/geo.scm
+++ b/gnu/packages/geo.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -72,9 +73,6 @@ topology functions.")
                    license:zlib              ; tests/xmltester/tinyxml/*
                    license:public-domain)))) ; include/geos/timeval.h
 
-;;; FIXME GNOME Maps only runs within GNOME. On i3, it fails with this error:
-;;; (org.gnome.Maps:8568): GLib-GIO-ERROR **: Settings schema
-;;; 'org.gnome.desktop.interface' is not installed
 (define-public gnome-maps
   (package
     (name "gnome-maps")
@@ -122,13 +120,19 @@ topology functions.")
      `(("folks" ,folks)
        ("libchamplain" ,libchamplain)
        ("libgee" ,libgee)
+       ("libsecret" ,libsecret)
+       ("libsoup" ,libsoup)
+       ("libgweather" ,libgweather)
        ("libxml2" ,libxml2)
+       ("gdk-pixbuf" ,gdk-pixbuf)
+       ("glib-networking" ,glib-networking)
        ("geoclue" ,geoclue)
        ("geocode-glib" ,geocode-glib)
        ("gfbgraph" ,gfbgraph)
        ("gjs" ,gjs)
        ("glib" ,glib)
        ("gnome-online-accounts" ,gnome-online-accounts)
+       ("gsettings-desktop-schemas" ,gsettings-desktop-schemas)
        ("rest" ,rest)
        ("webkitgtk" ,webkitgtk)))
     (propagated-inputs
diff --git a/gnu/packages/gimp.scm b/gnu/packages/gimp.scm
index fc2c8ff516..c98f686d41 100644
--- a/gnu/packages/gimp.scm
+++ b/gnu/packages/gimp.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -43,29 +44,32 @@
 (define-public babl
   (package
     (name "babl")
-    (version "0.1.38")
+    (version "0.1.40")
     (source (origin
               (method url-fetch)
               (uri (list (string-append "https://download.gimp.org/pub/babl/"
-                                        "0.1/babl-" version ".tar.bz2")
-                         (string-append "http://ftp.gtk.org/pub/babl/0.1/babl-"
-                                        version ".tar.bz2")
-                         (string-append "ftp://ftp.gtk.org/pub/babl/0.1/babl-"
-                                        version ".tar.bz2")))
+                                        (version-major+minor version)
+                                        "/babl-" version ".tar.bz2")
+                         (string-append "http://ftp.gtk.org/pub/babl/"
+                                        (version-major+minor version)
+                                        "/babl-" version ".tar.bz2")
+                         (string-append "ftp://ftp.gtk.org/pub/babl/"
+                                        (version-major+minor version)
+                                        "/babl-" version ".tar.bz2")))
               (sha256
                (base32
-                "11pfbyzq20596p9sgwraxspg3djg1jzz6wvz4bapf0yyr97jiyd0"))))
+                "08cdl6rcfvkhqsnhb214xzr0wbrv0956xzlrzqxcb1k1madgjanh"))))
     (build-system gnu-build-system)
     (home-page "http://gegl.org/babl/")
     (synopsis "Image pixel format conversion library")
     (description
-     "Babl is a dynamic, any to any, pixel format translation library.
-It allows converting between different methods of storing pixels known as
-pixel formats that have with different bitdepths and other data
-representations, color models and component permutations.
+     "Babl is a dynamic, any-to-any pixel format translation library.
+It allows converting between different methods of storing pixels, known as
+@dfn{pixel formats}, that have different bit depths and other data
+representations, color models, and component permutations.
 
 A vocabulary to formulate new pixel formats from existing primitives is
-provided as well as the framework to add new color models and data types.")
+provided, as well as a framework to add new color models and data types.")
     (license license:lgpl3+)))
 
 (define-public gegl
diff --git a/gnu/packages/gnunet.scm b/gnu/packages/gnunet.scm
index 2d238febce..5e47f2ebfc 100644
--- a/gnu/packages/gnunet.scm
+++ b/gnu/packages/gnunet.scm
@@ -5,7 +5,7 @@
 ;;; Copyright © 2015, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
+;;; Copyright © 2016, 2017, 2018 ng0 <ng0@n0.is>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -205,7 +205,8 @@ authentication and support for SSL3 and TLS.")
       ("pkg-config" ,pkg-config)
       ("python" ,python-2)))
    (arguments
-    `(#:configure-flags (list "--disable-ntlm-wb")
+    `(#:configure-flags (list "--disable-ntlm-wb"
+                              "--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt")
       #:test-target "test"
       #:parallel-tests? #f
       #:phases
@@ -226,8 +227,7 @@ authentication and support for SSL3 and TLS.")
               (("/bin/sh") (which "sh")))
 
             ;; Make test output more verbose.
-            (zero? (system* "make" "-C" "tests" "test"))
-            #t)))))
+            (invoke "make" "-C" "tests" "test"))))))
    (synopsis "Microfork of cURL with support for the HTTP/HTTPS/GnuTLS subset of cURL")
    (description
     "Gnurl is a microfork of cURL, a command line tool for transferring data
@@ -325,7 +325,7 @@ kinds of basic applications for the foundation of a GNU internet.")
        '(#:phases (modify-phases %standard-phases
                     (add-after 'unpack 'bootstrap
                       (lambda _
-                        (zero? (system* "autoreconf" "-vfi")))))))
+                        (invoke "autoreconf" "-vfi"))))))
       (native-inputs `(("pkg-config" ,pkg-config)
                        ("autoconf" ,(autoconf-wrapper))
                        ("automake" ,automake)))
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index e7c2d228cc..f21149a0ff 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016, 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Sergei Trofimovich <slyfox@inbox.ru>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -196,10 +197,10 @@
     (home-page "https://golang.org/")
     (synopsis "Compiler and libraries for Go, a statically-typed language")
     (description "Go, also commonly referred to as golang, is an imperative
-programming language.  Designed primarily for systems programming, it is a
-compiled, statically typed language in the tradition of C and C++, with
-garbage collection, various safety features and in the style of communicating
-sequential processes (CSP) concurrent programming features added.")
+programming language designed primarily for systems programming.  Go is a
+compiled, statically typed language in the tradition of C and C++, but adds
+garbage collection, various safety features, and concurrent programming features
+in the style of communicating sequential processes (@dfn{CSP}).")
     (supported-systems '("x86_64-linux" "i686-linux" "armhf-linux"))
     (license license:bsd-3)))
 
@@ -207,7 +208,7 @@ sequential processes (CSP) concurrent programming features added.")
   (package
     (inherit go-1.4)
     (name "go")
-    (version "1.9.2")
+    (version "1.9.3")
     (source
      (origin
        (method url-fetch)
@@ -215,7 +216,7 @@ sequential processes (CSP) concurrent programming features added.")
                            name version ".src.tar.gz"))
        (sha256
         (base32
-         "1p23n4xzbknl3bbhlckbvxbhpxknd5rn0i2szmn9i2dcz15ihpv6"))))
+         "1bj73hrr7jjdg0w6snwkqb5y3yrlks5nrs2lgnkyy0hyx7b0lgaf"))))
     (arguments
      (substitute-keyword-arguments (package-arguments go-1.4)
        ((#:phases phases)
@@ -300,13 +301,6 @@ sequential processes (CSP) concurrent programming features added.")
                  (substitute* "../misc/cgo/testcarchive/carchive_test.go"
                    (("#!/usr/bin/env") (string-append "#!" (which "env"))))
 
-                 ;; Escape braces in test data to workaround test failure. For
-                 ;; more information:
-                 ;; https://github.com/golang/go/issues/20007
-                 ;; FIXME: remove this once we upgrade to 1.9
-                 (substitute* "cmd/vet/testdata/copylock_func.go"
-                   (("struct\\{lock sync.Mutex\\}") "struct\\{lock sync.Mutex\\}"))
-
                  (substitute* "net/lookup_unix.go"
                    (("/etc/protocols") (string-append net-base "/etc/protocols")))
                  (substitute* "net/port_unix.go"
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index c47455c21e..af9c7a3c96 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,12 +42,16 @@
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages haskell)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages python)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages pdf)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages pulseaudio)  ;libsndfile, libsamplerate
   #:use-module (gnu packages compression)
@@ -686,3 +691,86 @@ your terminal.  It comes bundled with predefined styles:
 
 (define-public python2-pastel
   (package-with-python2 python-pastel))
+
+(define-public fgallery
+  (package
+    (name "fgallery")
+    (version "1.8.2")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append
+                "http://www.thregr.org/~wavexx/software/fgallery/releases/"
+                "fgallery-" version ".zip"))
+              (sha256
+               (base32
+                "18wlvqbxcng8pawimbc8f2422s8fnk840hfr6946lzsxr0ijakvf"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no tests
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out    (assoc-ref outputs "out"))
+                    (bin    (string-append out "/bin/"))
+                    (share  (string-append out "/share/fgallery"))
+                    (man    (string-append out "/share/man/man1"))
+                    (perl5lib (getenv "PERL5LIB"))
+                    (script (string-append share "/fgallery")))
+               (define (bin-directory input-name)
+                 (string-append (assoc-ref inputs input-name) "/bin"))
+
+               (mkdir-p man)
+               (copy-file "fgallery.1" (string-append man "/fgallery.1"))
+
+               (mkdir-p share)
+               (copy-recursively "." share)
+
+               ;; fgallery copies files from store when it is run. The
+               ;; read-only permissions from the store directories will cause
+               ;; fgallery to fail. Do not preserve file attributes when
+               ;; copying files to prevent it.
+               (substitute* script
+                 (("'cp'")
+                  "'cp', '--no-preserve=all'"))
+
+               (mkdir-p bin)
+               (symlink script (string-append out "/bin/fgallery"))
+
+               (wrap-program script
+                 `("PATH" ":" prefix
+                   ,(map bin-directory '("imagemagick"
+                                         "lcms"
+                                         "fbida"
+                                         "libjpeg"
+                                         "zip"
+                                         "jpegoptim"
+                                         "pngcrush"
+                                         "p7zip")))
+                 `("PERL5LIB" ":" prefix (,perl5lib)))
+               #t))))))
+    (native-inputs
+     `(("unzip" ,unzip)))
+    ;; TODO: Add missing optional dependency: facedetect.
+    (inputs
+     `(("imagemagick" ,imagemagick)
+       ("lcms" ,lcms)
+       ("fbida" ,fbida)
+       ("libjpeg" ,libjpeg)
+       ("zip" ,zip)
+       ("perl" ,perl)
+       ("perl-cpanel-json-xs" ,perl-cpanel-json-xs)
+       ("perl-image-exiftool" ,perl-image-exiftool)
+       ("jpegoptim" ,jpegoptim)
+       ("pngcrush" ,pngcrush)
+       ("p7zip" ,p7zip)))
+    (home-page "http://www.thregr.org/~wavexx/software/fgallery/")
+    (synopsis "Static photo gallery generator")
+    (description
+     "FGallery is a static, JavaScript photo gallery generator with minimalist
+look.  The result can be uploaded on any web server without additional
+requirements.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/image-processing.scm b/gnu/packages/image-processing.scm
index 4a8117fafb..6705a726cf 100644
--- a/gnu/packages/image-processing.scm
+++ b/gnu/packages/image-processing.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -85,7 +86,7 @@ licences similar to the Modified BSD licence."))))
 (define-public mia
   (package
     (name "mia")
-    (version "2.4.4")
+    (version "2.4.6")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/mia/mia/"
@@ -93,7 +94,7 @@ licences similar to the Modified BSD licence."))))
                                   "/mia-" version ".tar.xz"))
               (sha256
                (base32
-                "124gvf8nkls59mlnx8ynq00n9zrah7a54gsywafx7qmfr0y95ra7"))))
+                "0j4nd5z7i3v199jh7hqqhwd4g7snchizkc7rhzanpvngqg91m1pb"))))
     (build-system cmake-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/imagemagick.scm b/gnu/packages/imagemagick.scm
index 75a3fc5eb5..ba25a7f807 100644
--- a/gnu/packages/imagemagick.scm
+++ b/gnu/packages/imagemagick.scm
@@ -5,6 +5,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -164,7 +165,7 @@ script.")
 (define-public graphicsmagick
   (package
     (name "graphicsmagick")
-    (version "1.3.27")
+    (version "1.3.28")
     (source (origin
               (method url-fetch)
               (uri
@@ -176,7 +177,7 @@ script.")
                                  "/GraphicsMagick-" version ".tar.xz")))
               (sha256
                (base32
-                "0rq35p3rml10cxz2z4s7xcfsilhhk19mmy094g3ivz0fg797hcnh"))))
+                "0jlrrimrajcmwp7llivyj14qnzb1mpqd8vw95dl6zbx5m2lnhall"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 56de4cf82a..12e81a6965 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -674,7 +674,7 @@ slabtop, and skill.")
 (define-public usbutils
   (package
     (name "usbutils")
-    (version "008")
+    (version "009")
     (source
      (origin
       (method url-fetch)
@@ -682,7 +682,7 @@ slabtop, and skill.")
                           "usbutils-" version ".tar.xz"))
       (sha256
        (base32
-        "132clk14j4nm8crln2jymdbbc2vhzar2j2hnxyh05m79pbq1lx24"))))
+        "0q3iavmak2bs9xw486w4xfbjl0hbzii93ssgpr95mxmm9kjz1gwb"))))
     (build-system gnu-build-system)
     (inputs
      `(("libusb" ,libusb)
@@ -1433,7 +1433,7 @@ configuration and monitoring interfaces.")
 (define-public iw
   (package
     (name "iw")
-    (version "4.9")
+    (version "4.14")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1441,7 +1441,7 @@ configuration and monitoring interfaces.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "1klpvv98bnx1zm6aqalnri2vd7w80scmdaxr2qnblb6mz82whk1j"))))
+                "12ddd6vh6vs97135bnlyr0szv7hvpbnmfh48584frzab0z0725ph"))))
     (build-system gnu-build-system)
     (native-inputs `(("pkg-config" ,pkg-config)))
     (inputs `(("libnl" ,libnl)))
diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm
index f178232cc3..d7a1641ad8 100644
--- a/gnu/packages/monitoring.scm
+++ b/gnu/packages/monitoring.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org>
+;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,14 +23,19 @@
   #:use-module (guix download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system perl)
+  #:use-module (guix build-system python)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages django)
   #:use-module (gnu packages gd)
   #:use-module (gnu packages image)
   #:use-module (gnu packages mail)
-  #:use-module (gnu packages perl))
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-web)
+  #:use-module (gnu packages time))
 
 (define-public nagios
   (package
@@ -156,3 +162,102 @@ HTTP.  Features:
 @item Supports IPv6.
 @end itemize")
     (license license:gpl2)))
+
+(define-public python-whisper
+  (package
+    (name "python-whisper")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "whisper" version))
+       (sha256
+        (base32
+         "1v1bi3fl1i6p4z4ki692bykrkw6907dn3mfq0151f70lvi3zpns3"))))
+    (build-system python-build-system)
+    (home-page "http://graphiteapp.org/")
+    (synopsis "Fixed size round-robin style database for Graphite")
+    (description "Whisper is one of three components within the Graphite
+project.  Whisper is a fixed-size database, similar in design and purpose to
+RRD (round-robin-database).  It provides fast, reliable storage of numeric
+data over time.  Whisper allows for higher resolution (seconds per point) of
+recent data to degrade into lower resolutions for long-term retention of
+historical data.")
+    (license license:asl2.0)))
+
+(define-public python2-whisper
+  (package-with-python2 python-whisper))
+
+(define-public python2-carbon
+  (package
+    (name "python2-carbon")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "carbon" version))
+       (sha256
+        (base32
+         "142smpmgbnjinvfb6s4ijazish4vfgzyd8zcmdkh55y051fkixkn"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2   ; only supports Python 2
+       #:phases
+       (modify-phases %standard-phases
+         ;; Don't install to /opt
+         (add-after 'unpack 'do-not-install-to-/opt
+           (lambda _ (setenv "GRAPHITE_NO_PREFIX" "1") #t)))))
+    (propagated-inputs
+     `(("python2-whisper" ,python2-whisper)
+       ("python2-configparser" ,python2-configparser)
+       ("python2-txamqp" ,python2-txamqp)))
+    (home-page "http://graphiteapp.org/")
+    (synopsis "Backend data caching and persistence daemon for Graphite")
+    (description "Carbon is a backend data caching and persistence daemon for
+Graphite.  Carbon is responsible for receiving metrics over the network,
+caching them in memory for \"hot queries\" from the Graphite-Web application,
+and persisting them to disk using the Whisper time-series library.")
+    (license license:asl2.0)))
+
+(define-public python2-graphite-web
+  (package
+    (name "python2-graphite-web")
+    (version "1.0.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "graphite-web" version))
+       (sha256
+        (base32
+         "0q8bwlj75jqyzmazfsi5sa26xl58ssa8wdxm2l4j0jqyn8xpfnmc"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2               ; only supports Python 2
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'relax-requirements
+           (lambda _
+             (substitute* "setup.py"
+               (("0.4.3") ,(package-version python2-django-tagging))
+               (("<1.9.99") (string-append "<="
+                             ,(package-version python2-django))))
+             #t))
+         ;; Don't install to /opt
+         (add-after 'unpack 'do-not-install-to-/opt
+           (lambda _ (setenv "GRAPHITE_NO_PREFIX" "1") #t)))))
+    (propagated-inputs
+     `(("python2-cairocffi" ,python2-cairocffi)
+       ("python2-pytz" ,python2-pytz)
+       ("python2-whisper" ,python2-whisper)
+       ("python2-django" ,python2-django)
+       ("python2-django-tagging" ,python2-django-tagging)
+       ("python2-scandir" ,python2-scandir)
+       ("python2-urllib3" ,python2-urllib3)
+       ("python2-pyparsing" ,python2-pyparsing)
+       ("python2-txamqp" ,python2-txamqp)))
+    (home-page "http://graphiteapp.org/")
+    (synopsis "Scalable realtime graphing system")
+    (description "Graphite is a scalable real-time graphing system that does
+two things: store numeric time-series data, and render graphs of this data on
+demand.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index 30a496ab88..82681aa68a 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -88,7 +88,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.20.13")
+    (version "0.20.15")
     (source (origin
               (method url-fetch)
               (uri
@@ -97,7 +97,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "0h7z90dnpwlyad4kfi1ja9v9vzqic0xg93iy4q0dwlhav0scbha6"))))
+                "0h7bm561i8p0bjp1hy8fsiy5zj7db24zyv6ypfihwf35wrklz766"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index b7dc7d9aaa..e399c0293d 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -134,11 +134,13 @@
               (sha256
                (base32
                 "1cs3z6frx2ch7rm5ammx9p0rxcjrbj1vq14hvcbimpaw39rdsn3d"))))
-    (build-system gnu-build-system)
+    (build-system scons-build-system)
     (arguments
      `(#:tests? #f  ;no tests
+       #:scons-flags
+       (list (string-append "prefix=" (assoc-ref %outputs "out")))
+       #:scons ,scons-python2
        #:phases
-       ;; TODO: Add scons-build-system and use it here.
        (modify-phases %standard-phases
          (delete 'configure)
          (add-after 'unpack 'scons-propagate-environment
@@ -161,26 +163,18 @@
                                " or \"score/\" in file"
                                " or \"Documentation/\" in file")))
              #t))
-         (replace 'build (lambda _ (zero? (system* "scons"))))
-         (replace 'install
+         (add-after 'install 'fix-directory-permissions
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
-               (and
-                (zero? (system* "scons"
-                                (string-append "prefix=" out)
-                                "install"))
-                ;; Fix directory permissions
-                (begin
-                  (chmod (string-append out "/share/Aria/Documentation") #o555)
-                  (chmod (string-append out "/share/Aria/score") #o555)
-                  #t))))))))
+               (chmod (string-append out "/share/Aria/Documentation") #o555)
+               (chmod (string-append out "/share/Aria/score") #o555)
+               #t))))))
     (inputs
      `(("wxwidgets" ,wxwidgets)
        ("glib" ,glib)
        ("alsa-lib" ,alsa-lib)))
     (native-inputs
-     `(("scons" ,scons)
-       ("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)))
     (home-page "http://ariamaestosa.sourceforge.net/")
     (synopsis "MIDI sequencer and editor")
     (description
@@ -1187,6 +1181,14 @@ add_library( rapidjson INTERFACE IMPORTED )"))
                              "exclude:Score/ViewFilter/ViewFilter"
                              "exclude:Formats/PowerTabOldImport/Directions"
                              ))))
+         ;; FIXME: This bug has been fixed upstream, but no release has been
+         ;; made yet.  See https://github.com/powertab/powertabeditor/issues/257
+         (add-after 'unpack 'fix-boost-bug
+           (lambda _
+             (substitute* "source/score/voiceutils.cpp"
+               (("boost::rational<int> duration\\(4, pos.getDurationType\\(\\)\\);")
+                "boost::rational<int> duration(4, static_cast<int>(pos.getDurationType()));"))
+             #t))
          (add-before 'configure 'remove-third-party-libs
            (lambda* (#:key inputs #:allow-other-keys)
              ;; Link with required static libraries, because we're not
diff --git a/gnu/packages/orpheus.scm b/gnu/packages/orpheus.scm
index d672ebce75..d981be279c 100644
--- a/gnu/packages/orpheus.scm
+++ b/gnu/packages/orpheus.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2014 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2014, 2018 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,7 +27,8 @@
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages base)
   #:use-module (gnu packages xiph)
-  #:use-module (gnu packages xml))
+  #:use-module (gnu packages xml)
+  #:use-module (ice-9 match))
 
 (define-public orpheus
   (package
@@ -62,13 +63,14 @@
                (setenv "CONFIG_SHELL" (which "bash"))
                (setenv "SHELL" (which "bash"))
                (setenv "LIBS" "-logg")     ;doesn't declare its use of libogg
-               (zero?
-                (system* "./configure" (string-append "--prefix=" out)
-                                       ,@(if (string=? "mips64el-linux"
-                                                       (%current-system))
-                                             '("--host=mips64el-unknown-linux-gnu")
-                                             '())
-                         )))))
+               (invoke "./configure"
+                       (string-append "--prefix=" out)
+                       ,@(match (%current-system)
+                                ("mips64el-linux"
+                                 '("--host=mips64el-unknown-linux-gnu"))
+                                ("aarch64-linux"
+                                 '("--build=aarch64-unknown-linux-gnu"))
+                                (_ `()))))))
          (add-after 'configure 'configure-players
            (lambda* (#:key inputs #:allow-other-keys)
              ;; To avoid propagating the mpg321 and vorbis-tools inputs, we can
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index bf1ce4b248..77fefe5e0f 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -87,8 +87,8 @@
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "0.14.0")
-        (commit "0dcf675c56a4649ccef657e78849e91f9f9b4c0a")
-        (revision 6))
+        (commit "33988f9b5876e4b44cabe1997a91eb604931c1ca")
+        (revision 7))
     (package
       (name "guix")
 
@@ -104,7 +104,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "0kqpdg8ydxm67cdlrqsdrpzv0qdvnfln0ixsjrmdw2pcngh6wn56"))
+                  "0sfr32yhkm87apgpp6mjr6r43sp4l0ih35q4pmhwzfnj2bimmzhk"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
diff --git a/gnu/packages/parallel.scm b/gnu/packages/parallel.scm
index 1d2b75f8fe..95f0d6227a 100644
--- a/gnu/packages/parallel.scm
+++ b/gnu/packages/parallel.scm
@@ -47,7 +47,7 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20171222")
+    (version "20180122")
     (source
      (origin
       (method url-fetch)
@@ -55,7 +55,7 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1p3r6dlhy49q3y468kf65nqdp0knqw41vwga9rprrvi04kywgj4v"))))
+        "1wkbppb4mc56grl6jsp803sf0hm7mg5ff7qmxalp7sd0vxqw41p9"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -76,10 +76,10 @@
              #t))
          (add-after 'install 'post-install-test
            (lambda* (#:key outputs #:allow-other-keys)
-             (zero? (system* (string-append
-                              (assoc-ref outputs "out") "/bin/parallel")
-                             "echo"
-                             ":::" "1" "2" "3")))))))
+             (invoke (string-append
+                      (assoc-ref outputs "out") "/bin/parallel")
+                     "echo"
+                     ":::" "1" "2" "3"))))))
     (inputs
      `(("perl" ,perl)
        ("procps" ,procps)))
diff --git a/gnu/packages/patches/libsndfile-CVE-2017-12562.patch b/gnu/packages/patches/libsndfile-CVE-2017-12562.patch
new file mode 100644
index 0000000000..58cb242b10
--- /dev/null
+++ b/gnu/packages/patches/libsndfile-CVE-2017-12562.patch
@@ -0,0 +1,97 @@
+Fix CVE-2017-12562:
+
+https://github.com/erikd/libsndfile/issues/292
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-12562
+
+Patch copied from upstream source repository:
+
+https://github.com/erikd/libsndfile/commit/cf7a8182c2642c50f1cf90dddea9ce96a8bad2e8
+
+From cf7a8182c2642c50f1cf90dddea9ce96a8bad2e8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?J=C3=B6rn=20Heusipp?= <osmanx@problemloesungsmaschine.de>
+Date: Wed, 14 Jun 2017 12:25:40 +0200
+Subject: [PATCH] src/common.c: Fix heap buffer overflows when writing strings
+ in binheader
+
+Fixes the following problems:
+ 1. Case 's' only enlarges the buffer by 16 bytes instead of size bytes.
+ 2. psf_binheader_writef() enlarges the header buffer (if needed) prior to the
+    big switch statement by an amount (16 bytes) which is enough for all cases
+    where only a single value gets added. Cases 's', 'S', 'p' however
+    additionally write an arbitrary length block of data and again enlarge the
+    buffer to the required amount. However, the required space calculation does
+    not take into account the size of the length field which gets output before
+    the data.
+ 3. Buffer size requirement calculation in case 'S' does not account for the
+    padding byte ("size += (size & 1) ;" happens after the calculation which
+    uses "size").
+ 4. Case 'S' can overrun the header buffer by 1 byte when no padding is
+    involved
+    ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ;" while
+    the buffer is only guaranteed to have "size" space available).
+ 5. "psf->header.ptr [psf->header.indx] = 0 ;" in case 'S' always writes 1 byte
+    beyond the space which is guaranteed to be allocated in the header buffer.
+ 6. Case 's' can overrun the provided source string by 1 byte if padding is
+    involved ("memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ;"
+    where "size" is "strlen (strptr) + 1" (which includes the 0 terminator,
+    plus optionally another 1 which is padding and not guaranteed to be
+    readable via the source string pointer).
+
+Closes: https://github.com/erikd/libsndfile/issues/292
+---
+ src/common.c | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+diff --git a/src/common.c b/src/common.c
+index 1a6204ca..6b2a2ee9 100644
+--- a/src/common.c
++++ b/src/common.c
+@@ -681,16 +681,16 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
+ 					/* Write a C string (guaranteed to have a zero terminator). */
+ 					strptr = va_arg (argptr, char *) ;
+ 					size = strlen (strptr) + 1 ;
+-					size += (size & 1) ;
+ 
+-					if (psf->header.indx + (sf_count_t) size >= psf->header.len && psf_bump_header_allocation (psf, 16))
++					if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1)))
+ 						return count ;
+ 
+ 					if (psf->rwf_endian == SF_ENDIAN_BIG)
+-						header_put_be_int (psf, size) ;
++						header_put_be_int (psf, size + (size & 1)) ;
+ 					else
+-						header_put_le_int (psf, size) ;
++						header_put_le_int (psf, size + (size & 1)) ;
+ 					memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size) ;
++					size += (size & 1) ;
+ 					psf->header.indx += size ;
+ 					psf->header.ptr [psf->header.indx - 1] = 0 ;
+ 					count += 4 + size ;
+@@ -703,16 +703,15 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
+ 					*/
+ 					strptr = va_arg (argptr, char *) ;
+ 					size = strlen (strptr) ;
+-					if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size))
++					if (psf->header.indx + 4 + (sf_count_t) size + (sf_count_t) (size & 1) > psf->header.len && psf_bump_header_allocation (psf, 4 + size + (size & 1)))
+ 						return count ;
+ 					if (psf->rwf_endian == SF_ENDIAN_BIG)
+ 						header_put_be_int (psf, size) ;
+ 					else
+ 						header_put_le_int (psf, size) ;
+-					memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + 1) ;
++					memcpy (&(psf->header.ptr [psf->header.indx]), strptr, size + (size & 1)) ;
+ 					size += (size & 1) ;
+ 					psf->header.indx += size ;
+-					psf->header.ptr [psf->header.indx] = 0 ;
+ 					count += 4 + size ;
+ 					break ;
+ 
+@@ -724,7 +723,7 @@ psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
+ 					size = (size & 1) ? size : size + 1 ;
+ 					size = (size > 254) ? 254 : size ;
+ 
+-					if (psf->header.indx + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, size))
++					if (psf->header.indx + 1 + (sf_count_t) size > psf->header.len && psf_bump_header_allocation (psf, 1 + size))
+ 						return count ;
+ 
+ 					header_put_byte (psf, size) ;
diff --git a/gnu/packages/patches/rct-add-missing-headers.patch b/gnu/packages/patches/rct-add-missing-headers.patch
new file mode 100644
index 0000000000..4d133aa249
--- /dev/null
+++ b/gnu/packages/patches/rct-add-missing-headers.patch
@@ -0,0 +1,43 @@
+From: fis <ybbs.daans@hotmail.com>
+Date: Sat, 20 Jan 2018 07:42:38 +0800
+Subject: [PATCH] rct.cmake: Add missing headers.
+
+---
+ rct.cmake | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/rct.cmake b/rct.cmake
+index 323e7b9..3e0ac6b 100644
+--- a/rct.cmake
++++ b/rct.cmake
+@@ -339,7 +339,27 @@ if (NOT RCT_NO_INSTALL)
+     rct/Timer.h
+     rct/Value.h
+     rct/WriteLocker.h
++    rct/CpuUsage.h
++    rct/DataFile.h
++    rct/Date.h
++    rct/EmbeddedLinkedList.h
++    rct/FinishMessage.h
++    rct/Flags.h
++    rct/Hash.h
++    rct/LinkedList.h
++    rct/Map.h
++    rct/MemoryMappedFile.h
++    rct/OnDestruction.h
++    rct/QuitMessage.h
++    rct/ResponseMessage.h
++    rct/ScriptEngine.h
++    rct/StackBuffer.h
++    rct/WindowsUnicodeConversion.h
+     DESTINATION include/rct)
+
++  install(FILES
++    json/json.hpp
++    DESTINATION include/rct/json)
++
+   install(EXPORT "rct" DESTINATION lib/cmake)
+ endif ()
+--
+2.13.6
+
diff --git a/gnu/packages/patches/rtags-separate-rct.patch b/gnu/packages/patches/rtags-separate-rct.patch
new file mode 100644
index 0000000000..533e28b02e
--- /dev/null
+++ b/gnu/packages/patches/rtags-separate-rct.patch
@@ -0,0 +1,72 @@
+Unbundle RCT and use our own copy.
+
+--- rtags-2.16/src/CMakeLists.txt	2018-01-23 10:36:17.645855140 +0100
++++ rtags-2.16/src/CMakeLists.txt	2018-01-23 10:38:14.605234740 +0100
+@@ -105,12 +105,6 @@ if (LUA_ENABLED)
+         CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DCMAKE_GENERATOR=${CMAKE_GENERATOR})
+ endif ()
+ 
+-set(RCT_RTTI_ENABLED 1)
+-set(RCT_NO_INSTALL 1)
+-set(RCT_NO_LIBRARY 1)
+-# Everyting which as been set either in rct/rct.cmake or rct/compiler.cmake
+-# doesn't need to be set in this file again.
+-include(rct/rct.cmake)
+ 
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wstrict-aliasing=2 -Wcast-qual -fPIC")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wstrict-aliasing=2 -Wcast-qual -fPIC")
+@@ -128,8 +122,7 @@ add_definitions(
+     "-DRTAGS_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
+     "-DCLANG_LIBDIR=${LIBCLANG_LIBDIR}"
+     "-DCLANG_VERSION=${LIBCLANG_VERSION_STRING}"
+-    "-DOS_${CMAKE_SYSTEM_NAME}"
+-    ${RCT_DEFINITIONS})
++    "-DOS_${CMAKE_SYSTEM_NAME}")
+ 
+ if (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+     add_definitions(-D__LONG_LONG_SUPPORTED)
+@@ -172,8 +165,7 @@ set(RTAGS_SOURCES
+     Symbol.cpp
+     SymbolInfoJob.cpp
+     Token.cpp
+-    TokensJob.cpp
+-    ${RCT_SOURCES})
++    TokensJob.cpp)
+ 
+ if (LUA_ENABLED)
+     list(APPEND RTAGS_SOURCES AST.cpp)
+@@ -195,10 +187,10 @@ endif ()
+ 
+ include_directories(
+     ${CMAKE_CURRENT_LIST_DIR}
+-    ${RCT_INCLUDE_DIRS}
+     ${CMAKE_CURRENT_LIST_DIR}/selene/include
+     ${CMAKE_CURRENT_BINARY_DIR}/lua-prefix/src/lua-build
+-    ${CMAKE_CURRENT_LIST_DIR}/lua/src)
++    ${CMAKE_CURRENT_LIST_DIR}/lua/src
++    ${CMAKE_CURRENT_BINARY_DIR}/include)
+ 
+ if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
+     set(START_GROUP "")
+@@ -223,17 +215,17 @@ else ()
+ endif()
+ 
+ # RCT_LIBRARIES and stdc++ library must be at the end
+-set(RTAGS_LIBRARIES ${RTAGS_LIBRARIES} -lstdc++ ${RCT_LIBRARIES})
++set(RTAGS_LIBRARIES ${RTAGS_LIBRARIES} -lstdc++)
+ add_executable(rc rc.cpp)
+-target_link_libraries(rc ${RTAGS_LIBRARIES})
++target_link_libraries(rc ${RTAGS_LIBRARIES} rct)
+ 
+ add_executable(rdm rdm.cpp)
+-target_link_libraries(rdm ${RTAGS_LIBRARIES})
++target_link_libraries(rdm ${RTAGS_LIBRARIES} rct)
+ 
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
+ 
+ add_executable(rp rp.cpp)
+-target_link_libraries(rp ${RTAGS_LIBRARIES})
++target_link_libraries(rp ${RTAGS_LIBRARIES} rct)
+ 
+ if (CYGWIN)
+     EnsureLibraries(rdm rct)
diff --git a/gnu/packages/pulseaudio.scm b/gnu/packages/pulseaudio.scm
index 4fcf3889c7..249afd3f68 100644
--- a/gnu/packages/pulseaudio.scm
+++ b/gnu/packages/pulseaudio.scm
@@ -47,6 +47,7 @@
 (define-public libsndfile
   (package
     (name "libsndfile")
+    (replacement libsndfile/fixed)
     (version "1.0.28")
     (source (origin
              (method url-fetch)
@@ -80,6 +81,15 @@ SPARC.  Hopefully the design of the library will also make it easy to extend
 for reading and writing new sound file formats.")
     (license l:gpl2+)))
 
+(define libsndfile/fixed
+  (package
+    (inherit libsndfile)
+    (source (origin
+              (inherit (package-source libsndfile))
+              (patches (append
+                         (origin-patches (package-source libsndfile))
+                         (search-patches "libsndfile-CVE-2017-12562.patch")))))))
+
 (define-public libsamplerate
   (package
     (name "libsamplerate")                     ; aka. Secret Rabbit Code (SRC)
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 4d60e910ec..439c05b665 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -36,7 +36,7 @@
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
-;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
+;;; Copyright © 2017, 2018 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
@@ -45,6 +45,7 @@
 ;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
 ;;; Copyright © 2017 Muriithi Frederick Muriuki <fredmanglis@gmail.com>
 ;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
+;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -7645,6 +7646,35 @@ alternative when librabbitmq is not available.")
                    #:tests? #f
                    ,@(package-arguments amqp))))))
 
+(define-public python-txamqp
+  (package
+    (name "python-txamqp")
+    (version "0.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "txAMQP" version))
+       (sha256
+        (base32
+         "1r43a66dd547mz40ikymm8y3d480cidy560fj81qc0jk4lncgmmr"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six)
+       ("python-twisted" ,python-twisted)))
+    (home-page "https://github.com/txamqp/txamqp")
+    (synopsis "Communicate with AMQP peers and brokers using Twisted")
+    (description
+     "This package provides a Python library for communicating with AMQP peers
+and brokers using the asynchronous networking framework Twisted.  It contains
+all the necessary code to connect, send and receive messages to/from an
+AMQP-compliant peer or broker (Qpid, OpenAMQ, RabbitMQ) using Twisted.  It
+also includes support for using Thrift RPC over AMQP in Twisted
+applications.")
+    (license license:asl2.0)))
+
+(define-public python2-txamqp
+  (package-with-python2 python-txamqp))
+
 (define-public python-kombu
   (package
     (name "python-kombu")
@@ -8111,15 +8141,14 @@ is made as zipfile like as possible.")
 (define-public python-magic
   (package
     (name "python-magic")
-    (version "0.4.3")
+    (version "0.4.15")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://github.com/ahupp/python-magic/archive/"
-                           version ".tar.gz"))
+       (uri (pypi-uri "python-magic" version))
        (sha256
         (base32
-         "17bgy92i7sb021f2s4mw1dcvpm6p1mi9jihridwy1pyn8mzvpjgk"))
+         "1mgwig9pnzgkf86q9ji9pnc99bngms15lfszq5rgqb9db07mqxpk"))
        (file-name (string-append name "-" version "-checkout"))))
     (build-system python-build-system)
     (arguments
@@ -8137,31 +8166,33 @@ is made as zipfile like as possible.")
      ;; expected.
      '(#:tests? #f
        #:phases (modify-phases %standard-phases
-         ;; Replace a specific method call with a hard-coded
-         ;; path to the necessary libmagic.so file in the
-         ;; store.  If we don't do this, then the method call
-         ;; will fail to find the libmagic.so file, which in
-         ;; turn will cause any application using
-         ;; python-magic to fail.
-         (add-before 'build 'hard-code-path-to-libmagic
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((file (assoc-ref inputs "file")))
-               (substitute* "magic.py"
-                 (("ctypes.util.find_library\\('magic'\\)")
-                  (string-append "'" file "/lib/libmagic.so'")))
-           #t)))
-         (add-before 'install 'disable-egg-compression
-           (lambda _
-             (let ((port (open-file "setup.cfg" "a")))
-               (display "\n[easy_install]\nzip_ok = 0\n"
-                        port)
-               (close-port port)
-               #t))))))
+                  ;; Replace a specific method call with a hard-coded
+                  ;; path to the necessary libmagic.so file in the
+                  ;; store.  If we don't do this, then the method call
+                  ;; will fail to find the libmagic.so file, which in
+                  ;; turn will cause any application using
+                  ;; python-magic to fail.
+                  (add-before 'build 'hard-code-path-to-libmagic
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((file (assoc-ref inputs "file")))
+                        (substitute* "magic.py"
+                          (("ctypes.util.find_library\\('magic'\\)")
+                           (string-append "'" file "/lib/libmagic.so'")))
+                        #t)))
+                  (add-before 'install 'disable-egg-compression
+                    (lambda _
+                      (let ((port (open-file "setup.cfg" "a")))
+                        (display "\n[easy_install]\nzip_ok = 0\n"
+                                 port)
+                        (close-port port)
+                        #t))))))
     (inputs
      ;; python-magic needs to be able to find libmagic.so.
      `(("file" ,file)))
-    (home-page "https://github.com/ahupp/python-magic")
-    (synopsis "File type identification using libmagic")
+    (home-page
+     "https://github.com/ahupp/python-magic")
+    (synopsis
+     "File type identification using libmagic")
     (description
      "This module uses ctypes to access the libmagic file type
 identification library.  It makes use of the local magic database and
@@ -9250,21 +9281,20 @@ and/or Xon/Xoff.  The port is accessed in RAW mode.")
 (define-public python-kivy
   (package
     (name "python-kivy")
-    (version "1.9.1")
+    (version "1.10.0")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "kivy" version))
+       (uri (pypi-uri "Kivy" version))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0zk3g1j1z0lzcm9d0k1lprrs95zr8n8k5pdg3p5qlsn26jz4bg19"))))
+         "1394zh6kvf7k5d8vlzxcsfcailr3q59xwg9b1n7qaf25bvyq1h98"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f              ; Tests require many optional packages
        #:phases
        (modify-phases %standard-phases
-         (replace 'build (lambda _ (zero? (system* "make" "force"))))
          (add-after 'patch-generated-file-shebangs 'set-sdl-paths
            (lambda* (#:key inputs #:allow-other-keys)
              (setenv "KIVY_SDL2_PATH"
@@ -9272,7 +9302,8 @@ and/or Xon/Xoff.  The port is accessed in RAW mode.")
                                     "/include/SDL2"))
              #t)))))
     (native-inputs
-     `(("pkg-config" ,pkg-config)
+     `(("git" ,git)
+       ("pkg-config" ,pkg-config)
        ("python-cython" ,python-cython)))
     (inputs
      `(("gstreamer" ,gstreamer)
@@ -11134,18 +11165,20 @@ information.")
 (define-public python-relatorio
   (package
     (name "python-relatorio")
-    (version "0.6.4")
+    (version "0.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "relatorio" version))
        (sha256
         (base32
-         "0lincq79mzgazwd9gh41dybjh9c3n87r83pl8nk3j79aihyfk84z"))))
+         "1na6hlhz1awi1hbjg1gyclq0khz42iz90wvdjw7mmj655788bpxx"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-lxml" ,python-lxml)
        ("python-genshi" ,python-genshi)))
+    (native-inputs
+     `(("python-magic" ,python-magic)))
     (home-page "https://relatorio.tryton.org/")
     (synopsis "Templating library able to output ODT and PDF files")
     (description "Relatorio is a templating library which provides a way to
@@ -12348,7 +12381,7 @@ not actively maintained and works only with Python 2 and NumPy < 1.9.")
 (define-public python2-mmtk
   (package
     (name "python2-mmtk")
-    (version "2.7.10")
+    (version "2.7.11")
     (source
      (origin
        (method url-fetch)
@@ -12357,7 +12390,7 @@ not actively maintained and works only with Python 2 and NumPy < 1.9.")
        (file-name (string-append "MMTK-" version ".tar.gz"))
        (sha256
         (base32
-         "1k4gsd50zja89dbzgy3aji7h4zpvbvdfrds7rxr3whqrsgcffnir"))))
+         "1d0nnjx4lwsvh8f99vv1r6gi50d93yba0adkz8b4zgv4za4c5862"))))
     (build-system python-build-system)
     (native-inputs
      `(("netcdf" ,netcdf)))
@@ -12385,3 +12418,49 @@ and normal mode analysis, but also basic routines for implementing new methods
 for simulation and analysis.  The library is currently not actively maintained
 and works only with Python 2 and NumPy < 1.9.")
     (license license:cecill-c)))
+
+(define-public python-phonenumbers
+  (package
+    (name "python-phonenumbers")
+    (version "8.8.9")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "phonenumbers" version))
+       (sha256
+        (base32
+         "1lhhxmx3hk0b5891nc0p82dl5bq2w9cqbawmh8j5zy587af2j6fq"))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/daviddrysdale/python-phonenumbers")
+    (synopsis
+     "Python library for dealing with international phone numbers")
+    (description
+     "This package provides a Python port of Google's libphonenumber library.")
+    (license license:asl2.0)))
+
+(define-public python2-phonenumbers
+  (package-with-python2 python-phonenumbers))
+
+(define-public python-yapf
+  (package
+    (name "python-yapf")
+    (version "0.20.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "yapf" version))
+       (sha256
+        (base32
+         "0s7l6afzxvpx39kzd0lwshlaxw8m4fwh4iy0rlmav4vipr3g46dx"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/google/yapf")
+    (synopsis "Formatter for Python code")
+    (description "YAPF is a formatter for Python code.  It's based off of
+@dfn{clang-format}, developed by Daniel Jasper.  In essence, the algorithm
+takes the code and reformats it to the best formatting that conforms to the
+style guide, even if the original code didn't violate the style guide.")
+    (license license:asl2.0)))
+
+(define-public python2-yapf
+  (package-with-python2 python-yapf))
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index e374c41b95..5df9644dfc 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -7,7 +7,7 @@
 ;;; Copyright © 2016 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017, 2018 ng0 <ng0@n0.is>
-;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -644,3 +644,49 @@ Korn Shell programming language and a successor to the Public Domain Korn
 Shell (pdksh).")
     (license (list miros
                    isc)))) ; strlcpy.c
+
+(define-public oil-shell
+  (package
+    (name "oil-shell")
+    (version "0.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.oilshell.org/download/oil-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "0j4fyn6xjaf29xqyzm09ahazmq9v1hkxv4kps7n3lzdfr32a4kk9"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ; the tests are not distributed in the tarballs
+       #:strip-binaries? #f ; the binaries cannot be stripped
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-compiler-invocation
+           (lambda _
+             (substitute* "configure"
+               ((" cc ") " gcc "))
+             #t))
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (setenv "CC" "gcc")
+               ;; The configure script doesn't recognize CONFIG_SHELL.
+               (setenv "CONFIG_SHELL" (which "sh"))
+               (invoke "./configure" (string-append "--prefix=" out)
+                       "--with-readline"))))
+         (add-before 'install 'make-destination
+           (lambda _
+             ;; The build scripts don't create the destination directory.
+             (mkdir-p (string-append (assoc-ref %outputs "out") "/bin")))))))
+    (inputs
+     `(("readline" ,readline)))
+    (synopsis "Bash-compatible Unix shell")
+    (description "Oil is a Unix / POSIX shell, compatible with Bash.  It
+implements the Oil language, which is a new shell language to which Bash can be
+automatically translated.  The Oil language is a superset of Bash.  It also
+implements the OSH language, a statically-parseable language based on Bash as it
+is commonly written.")
+    (home-page "https://www.oilshell.org/")
+    (license (list psfl ; The Oil sources include a patched Python 2 source tree
+                   asl2.0))))
diff --git a/gnu/packages/shellutils.scm b/gnu/packages/shellutils.scm
index 2d515ec7a5..650fe98ef3 100644
--- a/gnu/packages/shellutils.scm
+++ b/gnu/packages/shellutils.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016, 2017 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
 ;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -112,16 +113,16 @@ are already there.")
     (native-inputs
       `(("go" ,go)
         ("which" ,which)))
-    (home-page "http://direnv.net/")
+    (home-page "https://direnv.net/")
     (synopsis "Environment switcher for the shell")
-    (description "direnv can hook into bash, zsh, tcsh and fish shell to load
+    (description
+     "direnv can hook into the bash, zsh, tcsh, and fish shells to load
 or unload environment variables depending on the current directory.  This
-allows project-specific environment variables without using the ~/.profile
-file.
+allows project-specific environment variables without using @file{~/.profile}.
 
-Before each prompt, direnv checks for the existence of a .envrc file in the
-current and parent directories.  This file is then used to alter the
-environmental variables of the current shell.")
+Before each prompt, direnv checks for the existence of a @file{.envrc} file in
+the current and parent directories.  This file is then used to alter the
+environment variables of the current shell.")
     (license expat)))
 
 (define-public fzy
diff --git a/gnu/packages/slang.scm b/gnu/packages/slang.scm
index 953291be26..b0a7ff0cfc 100644
--- a/gnu/packages/slang.scm
+++ b/gnu/packages/slang.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -79,14 +80,14 @@ slsh, which is part of the S-Lang distribution.")
 (define-public newt
   (package
     (name "newt")
-    (version "0.52.18")
+    (version "0.52.20")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://pagure.io/releases/"
                                   name "/" name "-" version ".tar.gz"))
               (sha256
                (base32
-                "07n9f2mqsjfj35wx5ldhvl9sqcjqpcl0g4fdd9mawmny9rihw6vp"))))
+                "1g3dpfnvaw7vljbr7nzq1rl88d6r8cmrvvng9inphgzwxxmvlrld"))))
     (build-system gnu-build-system)
     (outputs '("out" "python"))
     (inputs
@@ -100,8 +101,9 @@ slsh, which is part of the S-Lang distribution.")
        ;; Set the correct RUNPATH in binaries.
        (list (string-append "LDFLAGS=-Wl,-rpath=" %output "/lib"))
        #:make-flags
-       ;; configure does not allow us to override this variable from the
-       ;; command-line.  Fortunately, the Makefile does, so provide it here.
+       ;; configure uses a hard-coded search of /usr/include/python* to set
+       ;; this variable, and does not allow us to override it from the
+       ;; command line.  Fortunately, the Makefile does, so provide it here.
        (list (string-append "PYTHONVERS=python"
                             ,(version-major+minor (package-version python))))
        #:phases
diff --git a/gnu/packages/spice.scm b/gnu/packages/spice.scm
index 10f7c6bc57..58450e6a3e 100644
--- a/gnu/packages/spice.scm
+++ b/gnu/packages/spice.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 David Craven <david@craven.ch>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -142,7 +143,7 @@ which allows users to view a desktop computing environment.")
 (define-public spice-gtk
   (package
     (name "spice-gtk")
-    (version "0.33")
+    (version "0.34")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -150,7 +151,7 @@ which allows users to view a desktop computing environment.")
                 "spice-gtk-" version ".tar.bz2"))
               (sha256
                (base32
-                "0fdgx9k4vgmasp8i2n0swrkapq8f212igcg7wsgvr3mbhsvk7bvx"))))
+                "1vknp72pl6v6nf3dphhwp29hk6gv787db2pmyg4m312z2q0hwwp9"))))
     (build-system gnu-build-system)
     (propagated-inputs
       `(("gstreamer" ,gstreamer)
@@ -239,7 +240,7 @@ which allows users to view a desktop computing environment.")
 environments which allows you to view a computing 'desktop' environment
 not only on the machine where it is running, but from anywhere on the
 Internet and from a wide variety of machine architectures.")
-    (home-page "http://www.spice-space.org")
+    (home-page "https://www.spice-space.org")
     (license (list license:lgpl2.1+ license:lgpl2.0+))))
 
 (define-public spice-vdagent
@@ -290,7 +291,7 @@ Internet and from a wide variety of machine architectures.")
     (synopsis "Spice agent for Linux")
     (description "Spice-vdagent enables sharing the clipboard and guest display
 resolution scaling on graphical console window resize.")
-    (home-page "http://www.spice-space.org")
+    (home-page "https://www.spice-space.org")
     (license license:gpl3+)))
 
 (define-public virt-viewer
diff --git a/gnu/packages/statistics.scm b/gnu/packages/statistics.scm
index f6bc819011..6802b7b383 100644
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Vicente Vera Parra <vicentemvp@gmail.com>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
@@ -30,6 +30,7 @@
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix hg-download)
+  #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system r)
@@ -5509,3 +5510,27 @@ positioning methods that can be re-used across several different plots.  There
 are heuristics for examining @code{trellis} and @code{ggplot} objects and
 inferring an appropriate positioning method.")
     (license license:gpl3)))
+
+(define-public r-catterplots
+  (let ((commit "40063ec57f9515d231508f135ca0ec769614efb9")
+        (revision "2"))
+    (package
+      (name "r-catterplots")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/Gibbsdavidl/CatterPlots.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "1wl80pgbz8d9kfpffvkh439hlgz2qldm9m75wqjfrgrg8lcjzrxg"))))
+      (build-system r-build-system)
+      (propagated-inputs
+       `(("r-png" ,r-png)))
+      (home-page "https://github.com/Gibbsdavidl/CatterPlots")
+      (synopsis "Scatter plots with cat shaped points")
+      (description "Did you ever wish you could make scatter plots with cat
+shaped points?  Now you can!")
+      (license license:asl2.0))))
diff --git a/gnu/packages/tryton.scm b/gnu/packages/tryton.scm
index aa7af669c8..30f38e62e7 100644
--- a/gnu/packages/tryton.scm
+++ b/gnu/packages/tryton.scm
@@ -21,6 +21,7 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages check)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages finance)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-web)
@@ -29,24 +30,23 @@
   #:use-module (guix download)
   #:use-module (guix build-system python))
 
-(define-public trytond
+(define-public python-trytond
   (package
-    (name "trytond")
-    (version "4.4.1")
+    (name "python-trytond")
+    (version "4.6.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://downloads.tryton.org/4.4/trytond-"
-             version ".tar.gz"))
+       (uri (pypi-uri "trytond" version))
        (sha256
         (base32
-         "15gm34qwj5fpnkqvrxzndl8653zbczhsa76dm1gi4cqj1r29bbpr"))))
+         "0asc3pd37h8ky8j66iqxr0fv0k6mpjcwxwm0xgm5hrdi32l5cdda"))))
     (build-system python-build-system)
     (inputs
      `(("python-dateutil" ,python-dateutil)
        ("python-genshi" ,python-genshi)
        ("python-polib" ,python-polib)
+       ("python-magic" ,python-magic)
        ;; there's no python-mysql in Guix right now
        ;; so python-psycopg2 (postgresql) only for now
        ("python-psycopg2" ,python-psycopg2)
@@ -62,7 +62,8 @@
        (modify-phases %standard-phases
          (add-before 'check 'preparations
            (lambda _
-             (setenv "DB_NAME" ":memory:"))))))
+             (setenv "DB_NAME" ":memory:")
+             #t)))))
     (home-page "https://www.tryton.org/")
     (synopsis "Server component of Tryton")
     (description "Tryton is a three-tier high-level general purpose
@@ -74,16 +75,14 @@ and security.")
 (define-public tryton
   (package
     (name "tryton")
-    (version "4.4.0")
+    (version "4.6.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://downloads.tryton.org/4.4/tryton-"
-             version ".tar.gz"))
+       (uri (pypi-uri "tryton" version))
        (sha256
         (base32
-         "1lklcz5fs6rkrd7z2m2f5gz4fdwzkgnhg2hyvzp20kdsvi33bq2j"))))
+         "0bamr040np02gfjk8c734rw3mbgg75irfgpdcl2npgkdzyw1ksf9"))))
     (build-system python-build-system)
     (inputs
      `(("python2-chardet" ,python2-chardet)
@@ -95,3 +94,106 @@ and security.")
     (synopsis "Client component of Tryton")
     (description "This package is the client component of Tryton.")
     (license license:gpl3+)))
+
+(define-public python-trytond-country
+  (package
+  (name "python-trytond-country")
+  (version "4.6.0")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (pypi-uri "trytond_country" version))
+      (sha256
+        (base32
+          "11c9mw2scbjn7c6yhlwh5ml266f0s31lh4jwj6gh7vl1shs3isr3"))))
+  (build-system python-build-system)
+  (arguments
+   `(#:phases
+     (modify-phases %standard-phases
+       (add-before 'check 'preparations
+         (lambda _
+           (setenv "DB_NAME" ":memory:")
+           #t)))))
+  (propagated-inputs
+   `(("python-trytond" ,python-trytond)
+     ("python-wrapt" ,python-wrapt)
+     ("python-werkzeug" ,python-werkzeug)
+     ("python-sql" ,python-sql)
+     ("python-polib" ,python-polib)
+     ("python-dateutil" ,python-dateutil)
+     ("python-genshi" ,python-genshi)
+     ("python-relatorio" ,python-relatorio)
+     ("python-magic" ,python-magic)))
+  (home-page "http://www.tryton.org/")
+  (synopsis "Tryton module with countries")
+  (description "This package provides a Tryton module with countries.")
+  (license license:gpl3+)))
+
+(define-public python-trytond-party
+  (package
+    (name "python-trytond-party")
+    (version "4.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "trytond_party" version))
+       (sha256
+        (base32
+         "0fbf4kxywiglcdsx9ppjg7nxw87915mb6bpn1jn652gk949rdww5"))))
+    (build-system python-build-system)
+    ;; XXX The tests seem to require Proteus. But Proteus tests seem to
+    ;; require trytond-party.
+    (arguments
+     '(#:tests? #f))
+    (propagated-inputs
+     `(("python-trytond" ,python-trytond)
+       ("python-trytond-country" ,python-trytond-country)
+       ("python-stdnum" ,python-stdnum)
+       ("python-sql" ,python-sql)
+       ("python-wrapt" ,python-wrapt)
+       ("python-werkzeug" ,python-werkzeug)
+       ("python-polib" ,python-polib)
+       ("python-dateutil" ,python-dateutil)
+       ("python-genshi" ,python-genshi)
+       ("python-relatorio" ,python-relatorio)
+       ("python-magic" ,python-magic)
+       ("python-phonenumbers" ,python-phonenumbers)))
+    (home-page "http://www.tryton.org/")
+    (synopsis
+     "Tryton module for parties and addresses")
+    (description
+     "This package provides a Tryton module for (counter)parties and
+addresses.")
+    (license license:gpl3+)))
+
+(define-public python-proteus
+  (package
+    (name "python-proteus")
+    (version "4.6.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "proteus" version))
+       (sha256
+        (base32
+         "0flkf1vxbhz51b7bq31dn7q9mlkli3pmpbzfhsxfqpf6laghbkqg"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-dateutil" ,python-dateutil)
+       ("python-trytond-party" ,python-trytond-party)
+       ("python-trytond-country" ,python-trytond-country)
+       ("python-trytond" ,python-trytond)
+       ("python-stdnum" ,python-stdnum)
+       ("python-sql" ,python-sql)
+       ("python-wrapt" ,python-wrapt)
+       ("python-werkzeug" ,python-werkzeug)
+       ("python-polib" ,python-polib)
+       ("python-genshi" ,python-genshi)
+       ("python-relatorio" ,python-relatorio)
+       ("python-magic" ,python-magic)))
+    (home-page "http://www.tryton.org/")
+    (synopsis
+     "Library to access a Tryton server as a client")
+    (description
+     "This package provides a library to access Tryton server as a client.")
+    (license license:lgpl3+)))
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index d35ec558a9..9c214b8cf3 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -138,14 +138,14 @@ as well as the classic centralized workflow.")
    (name "git")
    ;; XXX When updating Git, check if the special 'git:src' input to cgit needs
    ;; to be updated as well.
-   (version "2.16.0")
+   (version "2.16.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1y1hdr8ydff5q7y762cwfdgaxam4mxvir6nrw3g51mmkcr77c40d"))))
+              "06gay8k29glg4giwphjalcc1fknxw4bmxkmbr3ic3gzxy8vl7bfg"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -158,7 +158,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "0k5bviwff2q3vri8v6n2a71sxm83gcskzy6wr2z01pb7xfk28hl9"))))))
+            "1ympib7kd818v4wjgfrhxjrmv91n50lgxxg0i9gcqihgy3divrlp"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 79eb0b5f54..2311359278 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -523,10 +523,10 @@ SMPTE 314M.")
     (inputs
      `(("libebml" ,libebml)))
     (home-page "https://www.matroska.org")
-    (synopsis "C++ libary to parse Matroska files (.mkv and .mka)")
+    (synopsis "C++ library to parse Matroska files (.mkv and .mka)")
     (description
      "Matroska aims to become the standard of multimedia container formats.
-It is based on EBML (Extensible Binary Meta Language), a binary derivative
+It is based on @dfn{EBML} (Extensible Binary Meta Language), a binary derivative
 of XML.  EBML enables the Matroska Development Team to gain significant
 advantages in terms of future format extensibility, without breaking file
 support in old parsers.
@@ -1150,7 +1150,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2018.01.18")
+    (version "2018.01.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://yt-dl.org/downloads/"
@@ -1158,7 +1158,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "16mdy83s8h1hw1qdbcv6anrgg9zxfw1da22fxjx53pr2x0ywwbsf"))))
+                "14ggjxnhc2sxc93h7d5k3z4n35n5q3ffsif97np0ar93x5z3zgn5"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -1181,11 +1181,12 @@ access to mpv's powerful playback capabilities.")
                           (("'etc/")
                            (string-append "'" prefix "/etc/"))
                           (("'share/")
-                           (string-append "'" prefix "/share/")))))))))
+                           (string-append "'" prefix "/share/")))
+                        #t))))))
     (synopsis "Download videos from YouTube.com and other sites")
     (description
      "Youtube-dl is a small command-line program to download videos from
-YouTube.com and a few more sites.")
+YouTube.com and many more sites.")
     (home-page "https://yt-dl.org")
     (license license:public-domain)))
 
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index a5ce3f6fa8..f4fd4c336a 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -728,7 +728,7 @@ Machine Protocol.")
 (define-public lookingglass
   (package
    (name "lookingglass")
-   (version "a9")
+   (version "a10")
    (source
     (origin
      (method url-fetch)
@@ -737,7 +737,7 @@ Machine Protocol.")
      (file-name (string-append name "-" version))
      (sha256
       (base32
-       "015chy4x94x4dd5831d7n0gada8rhahmdx7bdbdhajlzivi3kjcw"))))
+       "0zlxg9ibzr0a598wr5nl1pb4l7mzsqn8ip72v4frph0vwsm5il6c"))))
    (build-system gnu-build-system)
    (inputs `(("fontconfig" ,fontconfig)
              ("glu" ,glu)
diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm
index 3dcf00b9be..c6a319965a 100644
--- a/gnu/packages/wget.scm
+++ b/gnu/packages/wget.scm
@@ -44,7 +44,7 @@
 (define-public wget
   (package
     (name "wget")
-    (version "1.19.2")
+    (version "1.19.4")
     (source
      (origin
       (method url-fetch)
@@ -52,7 +52,7 @@
                           version ".tar.lz"))
       (sha256
        (base32
-        "01yzal7xm85543x02bij3capnigr063d6c5vc039f8n5s9d796nm"))))
+        "16jmcqcasx3q9k4azssryli9qyxfq0sfijw998g8zp58cnwzzh1g"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
diff --git a/gnu/packages/wxwidgets.scm b/gnu/packages/wxwidgets.scm
index 4804e345c2..84446d8ef0 100644
--- a/gnu/packages/wxwidgets.scm
+++ b/gnu/packages/wxwidgets.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
+;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -199,7 +200,7 @@ and many other languages.")
 (define-public wxsvg
   (package
     (name "wxsvg")
-    (version "1.5.11")
+    (version "1.5.12")
     (source
      (origin
        (method url-fetch)
@@ -207,7 +208,7 @@ and many other languages.")
                             version "/wxsvg-" version ".tar.bz2"))
        (sha256
         (base32
-         "0m3ff8mjiq4hvy8rmxyc9fkpf24xwxhvr3a6jmvr2q5zc41xhz7x"))))
+         "1hn3h9kzsjs4wimlpknzjfgn7q0n792hh7v3mshjgsjxdcrckzan"))))
     (build-system glib-or-gtk-build-system)
     (inputs
      `(("wxwidgets" ,wxwidgets-3.1)
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 200de67f61..03bb7cef7e 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -90,10 +90,10 @@ things the parser might find in the XML document (like start tags).")
          "005a0ipqnfbsq47zrc61zszi439jw32q5xd6dc1jyb3lc0zl266q"))))
     (build-system gnu-build-system)
     (home-page "https://matroska-org.github.io/libebml/")
-    (synopsis "C++ libary to parse EBML files")
-    (description "libebml is a C++ library to read and write EBML (Extensible
-Binary Meta Language) files.  EBML was designed to be a simplified binary
-extension of XML for the purpose of storing and manipulating data in a
+    (synopsis "C++ library to parse EBML files")
+    (description "libebml is a C++ library to read and write @dfn{EBML}
+(Extensible Binary Meta Language) files.  EBML was designed to be a simplified
+binary extension of XML for the purpose of storing and manipulating data in a
 hierarchical form with variable field lengths.")
     (license license:lgpl2.1)))
 
diff --git a/gnu/services.scm b/gnu/services.scm
index 15fc6dcb49..b020d971fd 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -24,6 +24,7 @@
   #:use-module (guix records)
   #:use-module (guix profiles)
   #:use-module (guix discovery)
+  #:use-module (guix combinators)
   #:use-module (guix sets)
   #:use-module (guix ui)
   #:use-module ((guix utils) #:select (source-properties->location))
@@ -66,6 +67,7 @@
             simple-service
             modify-services
             service-back-edges
+            instantiate-missing-services
             fold-services
 
             service-error?
@@ -630,6 +632,18 @@ kernel."
   (service      ambiguous-target-service-error-service)
   (target-type  ambiguous-target-service-error-target-type))
 
+(define (missing-target-error service target-type)
+  (raise
+   (condition (&missing-target-service-error
+               (service service)
+               (target-type target-type))
+              (&message
+               (message
+                (format #f (G_ "no target of type '~a' for service '~a'")
+                        (service-type-name target-type)
+                        (service-type-name
+                         (service-kind service))))))))
+
 (define (service-back-edges services)
   "Return a procedure that, when passed a <service>, returns the list of
 <service> objects that depend on it."
@@ -642,16 +656,7 @@ kernel."
           ((target)
            (vhash-consq target service edges))
           (()
-           (raise
-            (condition (&missing-target-service-error
-                        (service service)
-                        (target-type target-type))
-                       (&message
-                        (message
-                         (format #f (G_ "no target of type '~a' for service '~a'")
-                                 (service-type-name target-type)
-                                 (service-type-name
-                                  (service-kind service))))))))
+           (missing-target-error service target-type))
           (x
            (raise
             (condition (&ambiguous-target-service-error
@@ -669,6 +674,38 @@ kernel."
     (lambda (node)
       (reverse (vhash-foldq* cons '() node edges)))))
 
+(define (instantiate-missing-services services)
+  "Return SERVICES, a list, augmented with any services targeted by extensions
+and missing from SERVICES.  Only service types with a default value can be
+instantiated; other missing services lead to a
+'&missing-target-service-error'."
+  (define (adjust-service-list svc result instances)
+    (fold2 (lambda (extension result instances)
+             (define target-type
+               (service-extension-target extension))
+
+             (match (vhash-assq target-type instances)
+               (#f
+                (let ((default (service-type-default-value target-type)))
+                  (if (eq? &no-default-value default)
+                      (missing-target-error svc target-type)
+                      (let ((new (service target-type)))
+                        (values (cons new result)
+                                (vhash-consq target-type new instances))))))
+               (_
+                (values result instances))))
+           result
+           instances
+           (service-type-extensions (service-kind svc))))
+
+  (let ((instances (fold (lambda (service result)
+                           (vhash-consq (service-kind service) service
+                                        result))
+                         vlist-null services)))
+    (fold2 adjust-service-list
+           services instances
+           services)))
+
 (define* (fold-services services
                         #:key (target-type system-service-type))
   "Fold SERVICES by propagating their extensions down to the root of type
diff --git a/gnu/services/herd.scm b/gnu/services/herd.scm
index 5c894af6fd..d882c232cf 100644
--- a/gnu/services/herd.scm
+++ b/gnu/services/herd.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -83,7 +83,12 @@ return the socket."
 (define-syntax-rule (with-shepherd connection body ...)
   "Evaluate BODY... with CONNECTION bound to an open socket to PID 1."
   (let ((connection (open-connection)))
-    body ...))
+    (dynamic-wind
+      (const #t)
+      (lambda ()
+        body ...)
+      (lambda ()
+        (close-port connection)))))
 
 (define-condition-type &shepherd-error &error
   shepherd-error?)
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 7281746ab2..f7c6983cb0 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -66,7 +66,7 @@
 
 
 (define (shepherd-boot-gexp services)
-  (mlet %store-monad ((shepherd-conf (shepherd-configuration-file services)))
+  (with-monad %store-monad
     (return #~(begin
                 ;; Keep track of the booted system.
                 (false-if-exception (delete-file "/run/booted-system"))
@@ -84,7 +84,8 @@
 
                 ;; Start shepherd.
                 (execl #$(file-append shepherd "/bin/shepherd")
-                       "shepherd" "--config" #$shepherd-conf)))))
+                       "shepherd" "--config"
+                       #$(shepherd-configuration-file services))))))
 
 (define shepherd-root-service-type
   (service-type
@@ -203,25 +204,24 @@ stored."
 
 (define (shepherd-service-file service)
   "Return a file defining SERVICE."
-  (gexp->file (shepherd-service-file-name service)
-              (with-imported-modules %default-imported-modules
-                #~(begin
-                    (use-modules #$@(shepherd-service-modules service))
-
-                    (make <service>
-                      #:docstring '#$(shepherd-service-documentation service)
-                      #:provides '#$(shepherd-service-provision service)
-                      #:requires '#$(shepherd-service-requirement service)
-                      #:respawn? '#$(shepherd-service-respawn? service)
-                      #:start #$(shepherd-service-start service)
-                      #:stop #$(shepherd-service-stop service))))))
+  (scheme-file (shepherd-service-file-name service)
+               (with-imported-modules %default-imported-modules
+                 #~(begin
+                     (use-modules #$@(shepherd-service-modules service))
+
+                     (make <service>
+                       #:docstring '#$(shepherd-service-documentation service)
+                       #:provides '#$(shepherd-service-provision service)
+                       #:requires '#$(shepherd-service-requirement service)
+                       #:respawn? '#$(shepherd-service-respawn? service)
+                       #:start #$(shepherd-service-start service)
+                       #:stop #$(shepherd-service-stop service))))))
 
 (define (shepherd-configuration-file services)
   "Return the shepherd configuration file for SERVICES."
   (assert-valid-graph services)
 
-  (mlet %store-monad ((files (mapm %store-monad
-                                   shepherd-service-file services)))
+  (let ((files (map shepherd-service-file services)))
     (define config
       #~(begin
           (use-modules (srfi srfi-34)
@@ -252,7 +252,7 @@ stored."
                                        (filter shepherd-service-auto-start?
                                                services)))))))
 
-    (gexp->file "shepherd.conf" config)))
+    (scheme-file "shepherd.conf" config)))
 
 (define* (shepherd-service-lookup-procedure services
                                             #:optional
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
index 6bf656949a..7166ed3d4f 100644
--- a/gnu/services/version-control.scm
+++ b/gnu/services/version-control.scm
@@ -263,7 +263,11 @@ access to exported repositories under @file{/srv/git}."
     (list (service-extension activation-service-type
                              cgit-activation)
           (service-extension nginx-service-type
-                             cgit-configuration-nginx-config)))
+                             cgit-configuration-nginx-config)
+
+          ;; Make sure fcgiwrap is instantiated.
+          (service-extension fcgiwrap-service-type
+                             (const #t))))
    (default-value (cgit-configuration))
    (description
     "Run the Cgit web interface, which allows users to browse Git
diff --git a/gnu/system.scm b/gnu/system.scm
index 680a2f64f5..71beee8259 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
@@ -492,8 +492,9 @@ a container or that of a \"bare metal\" system."
 (define* (operating-system-services os #:key container?)
   "Return all the services of OS, including \"internal\" services that do not
 explicitly appear in OS."
-  (append (operating-system-user-services os)
-          (essential-services os #:container? container?)))
+  (instantiate-missing-services
+   (append (operating-system-user-services os)
+           (essential-services os #:container? container?))))
 
 
 ;;;
diff --git a/gnu/system/examples/desktop.tmpl b/gnu/system/examples/desktop.tmpl
index 2131d1f18f..e8740407d0 100644
--- a/gnu/system/examples/desktop.tmpl
+++ b/gnu/system/examples/desktop.tmpl
@@ -48,8 +48,8 @@
 
   ;; Add GNOME and/or Xfce---we can choose at the log-in
   ;; screen with F1.  Use the "desktop" services, which
-  ;; include the X11 log-in service, networking with Wicd,
-  ;; and more.
+  ;; include the X11 log-in service, networking with
+  ;; NetworkManager, and more.
   (services (cons* (gnome-desktop-service)
                    (xfce-desktop-service)
                    %desktop-services))
diff --git a/gnu/system/examples/lightweight-desktop.tmpl b/gnu/system/examples/lightweight-desktop.tmpl
index d13c04c76c..65a8ee1809 100644
--- a/gnu/system/examples/lightweight-desktop.tmpl
+++ b/gnu/system/examples/lightweight-desktop.tmpl
@@ -47,7 +47,7 @@
                    %base-packages))
 
   ;; Use the "desktop" services, which include the X11
-  ;; log-in service, networking with Wicd, and more.
+  ;; log-in service, networking with NetworkManager, and more.
   (services %desktop-services)
 
   ;; Allow resolution of '.local' host names with mDNS.
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 1cc3db1160..e4b2e82378 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -44,7 +44,12 @@
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-26)
   #:export (installation-os
-            beaglebone-black-installation-os))
+            a20-olinuxino-lime-installation-os
+            a20-olinuxino-lime2-emmc-installation-os
+            a20-olinuxino-micro-installation-os
+            banana-pi-m2-ultra-installation-os
+            beaglebone-black-installation-os
+            nintendo-nes-classic-edition-installation-os))
 
 ;;; Commentary:
 ;;;
@@ -376,28 +381,66 @@ You have been warned.  Thanks for being so brave.\x1b[0m
                      nvi                          ;:wq!
                      %base-packages))))
 
-(define beaglebone-black-installation-os
+(define* (agetty-default-service #:optional (tty "ttyS0"))
+  "Return an agetty-service on the given TTY"
+  (agetty-service (agetty-configuration
+                   (extra-options '("-L"))
+                   (baud-rate "115200")
+                   (term "vt100")
+                   (tty tty))))
+
+(define* (embedded-installation-os bootloader bootloader-target tty
+                                   #:key (extra-modules '()))
+  "Return an installation os for embedded systems.
+The initrd gets the extra modules EXTRA-MODULES.
+A getty is provided on TTY.
+The bootloader BOOTLOADER is installed to BOOTLOADER-TARGET."
   (operating-system
     (inherit installation-os)
     (bootloader (bootloader-configuration
-                 (bootloader u-boot-beaglebone-black-bootloader)
-                 (target "/dev/sda")))
+                 (bootloader bootloader)
+                 (target bootloader-target)))
     (kernel linux-libre)
     (initrd (lambda (fs . rest)
               (apply base-initrd fs
-                     ;; This module is required to mount the sd card.
-                     #:extra-modules (list "omap_hsmmc")
+                     #:extra-modules extra-modules
                      rest)))
-    (services (append
-               ;; mingetty does not work on serial lines.
-               ;; Use agetty with board-specific serial parameters.
-               (list (agetty-service
-                      (agetty-configuration
-                       (extra-options '("-L"))
-                       (baud-rate "115200")
-                       (term "vt100")
-                       (tty "ttyO0"))))
-               (operating-system-user-services installation-os)))))
+    (services (cons* (agetty-default-service tty)
+                     (operating-system-user-services installation-os)))))
+
+(define beaglebone-black-installation-os
+  (embedded-installation-os u-boot-beaglebone-black-bootloader
+                            "/dev/sda"
+                            "ttyO0"
+                            #:extra-modules
+                            ;; This module is required to mount the sd card.
+                            '("omap_hsmmc")))
+
+
+(define a20-olinuxino-lime-installation-os
+  (embedded-installation-os u-boot-a20-olinuxino-lime-bootloader
+                            "/dev/mmcblk0" ; SD card storage
+                            "ttyS0"))
+
+(define a20-olinuxino-lime2-emmc-installation-os
+  (embedded-installation-os u-boot-a20-olinuxino-lime2-bootloader
+                            "/dev/mmcblk1" ; eMMC storage
+                            "ttyS0"))
+
+(define a20-olinuxino-micro-installation-os
+  (embedded-installation-os u-boot-a20-olinuxino-micro-bootloader
+                            "/dev/mmcblk0" ; SD card storage
+                            "ttyS0"))
+
+(define banana-pi-m2-ultra-installation-os
+  (embedded-installation-os u-boot-banana-pi-m2-ultra-bootloader
+                            "/dev/mmcblk1" ; eMMC storage
+                            "ttyS0"))
+
+(define nintendo-nes-classic-edition-installation-os
+  (embedded-installation-os u-boot-nintendo-nes-classic-edition-bootloader
+                            "/dev/mmcblk0" ; SD card (solder it yourself)
+                            "ttyS0"))
 
 ;; Return the default os here so 'guix system' can consume it directly.
 installation-os
diff --git a/gnu/tests/version-control.scm b/gnu/tests/version-control.scm
index 7367861b05..9882cdbe28 100644
--- a/gnu/tests/version-control.scm
+++ b/gnu/tests/version-control.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
-;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -88,8 +88,6 @@
   (let ((base-os
          (simple-operating-system
           (dhcp-client-service)
-          (service nginx-service-type)
-          (service fcgiwrap-service-type)
           (service cgit-service-type
                    (cgit-configuration
                     (nginx %cgit-configuration-nginx)))
@@ -130,8 +128,25 @@ HTTP-PORT."
 
           (test-begin "cgit")
 
+          ;; XXX: Shepherd reads the config file *before* binding its control
+          ;; socket, so /var/run/shepherd/socket might not exist yet when the
+          ;; 'marionette' service is started.
+          (test-assert "shepherd socket ready"
+            (marionette-eval
+             `(begin
+                (use-modules (gnu services herd))
+                (let loop ((i 10))
+                  (cond ((file-exists? (%shepherd-socket-file))
+                         #t)
+                        ((> i 0)
+                         (sleep 1)
+                         (loop (- i 1)))
+                        (else
+                         'failure))))
+             marionette))
+
           ;; Wait for nginx to be up and running.
-          (test-eq "service running"
+          (test-eq "nginx running"
             'running!
             (marionette-eval
              '(begin
@@ -141,7 +156,7 @@ HTTP-PORT."
              marionette))
 
           ;; Wait for fcgiwrap to be up and running.
-          (test-eq "service running"
+          (test-eq "fcgiwrap running"
             'running!
             (marionette-eval
              '(begin