summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2016-10-17 16:47:12 -0400
committerMark H Weaver <mhw@netris.org>2016-10-17 16:47:12 -0400
commitdcaf70897a0bad38a4638a2905aaa3c46b1f1402 (patch)
tree439c42bf27972a628ebc0fef11a63b9130ca19a5
parentbf62b8ff79f9d60136996b8251b6475965cf4994 (diff)
parent040b6299d505c034b4960c335434a500ae2f8187 (diff)
downloadguix-dcaf70897a0bad38a4638a2905aaa3c46b1f1402.tar.gz
Merge branch 'master' into core-updates
-rw-r--r--doc/guix.texi14
-rw-r--r--gnu/local.mk8
-rw-r--r--gnu/packages/audio.scm4
-rw-r--r--gnu/packages/bioinformatics.scm92
-rw-r--r--gnu/packages/cdrom.scm13
-rw-r--r--gnu/packages/emacs.scm71
-rw-r--r--gnu/packages/embedded.scm60
-rw-r--r--gnu/packages/finance.scm54
-rw-r--r--gnu/packages/game-development.scm4
-rw-r--r--gnu/packages/games.scm50
-rw-r--r--gnu/packages/gd.scm1
-rw-r--r--gnu/packages/glib.scm1
-rw-r--r--gnu/packages/gnome.scm28
-rw-r--r--gnu/packages/graphics.scm10
-rw-r--r--gnu/packages/guile.scm7
-rw-r--r--gnu/packages/image.scm21
-rw-r--r--gnu/packages/linux.scm16
-rw-r--r--gnu/packages/mail.scm48
-rw-r--r--gnu/packages/music.scm388
-rw-r--r--gnu/packages/networking.scm76
-rw-r--r--gnu/packages/node.scm34
-rw-r--r--gnu/packages/patches/artanis-fix-Makefile.in.patch70
-rw-r--r--gnu/packages/patches/freeimage-CVE-2016-5684.patch34
-rw-r--r--gnu/packages/patches/gcc-6-arm-none-eabi-multilib.patch206
-rw-r--r--gnu/packages/patches/gcc-6-cross-environment-variables.patch65
-rw-r--r--gnu/packages/patches/gd-CVE-2016-8670.patch38
-rw-r--r--gnu/packages/patches/hdf4-architectures.patch579
-rw-r--r--gnu/packages/patches/irrlicht-mesa-10.patch46
-rw-r--r--gnu/packages/patches/node-9077.patch30
-rw-r--r--gnu/packages/pdf.scm54
-rw-r--r--gnu/packages/photo.scm4
-rw-r--r--gnu/packages/python.scm87
-rw-r--r--gnu/packages/qt.scm6
-rw-r--r--gnu/packages/ruby.scm6
-rw-r--r--gnu/packages/serialization.scm9
-rw-r--r--gnu/packages/ssh.scm11
-rw-r--r--gnu/packages/terminals.scm14
-rw-r--r--gnu/packages/tls.scm18
-rw-r--r--gnu/packages/version-control.scm6
-rw-r--r--gnu/packages/webkit.scm4
-rw-r--r--gnu/services/sddm.scm2
-rw-r--r--guix/grafts.scm32
-rw-r--r--guix/import/utils.scm1
-rw-r--r--guix/packages.scm6
-rw-r--r--guix/scripts/graph.scm53
-rw-r--r--tests/grafts.scm62
-rw-r--r--tests/graph.scm22
-rw-r--r--tests/packages.scm106
48 files changed, 2324 insertions, 247 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index c6bc70fe6b..66316ecd84 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -5546,6 +5546,20 @@ example, the command below produces the reference graph of your profile
 @example
 guix graph -t references `readlink -f ~/.guix-profile`
 @end example
+
+@item referrers
+This is the graph of the @dfn{referrers} of a store item, as returned by
+@command{guix gc --referrers} (@pxref{Invoking guix gc}).
+
+This relies exclusively on local information from your store.  For
+instance, let us suppose that the current Inkscape is available in 10
+profiles on your machine; @command{guix graph -t referrers inkscape}
+will show a graph rooted at Inkscape and with those 10 profiles linked
+to it.
+
+It can help determine what is preventing a store item from being garbage
+collected.
+
 @end table
 
 The available options are the following:
diff --git a/gnu/local.mk b/gnu/local.mk
index 59d424aad2..1c91e79fea 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -6,6 +6,7 @@
 # Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
 # Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 # Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
+# Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
 #
 # This file is part of GNU Guix.
 #
@@ -456,6 +457,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/antiword-CVE-2014-8123.patch			\
   %D%/packages/patches/apr-skip-getservbyname-test.patch	\
   %D%/packages/patches/arb-ldconfig.patch			\
+  %D%/packages/patches/artanis-fix-Makefile.in.patch		\
   %D%/packages/patches/ath9k-htc-firmware-binutils.patch	\
   %D%/packages/patches/ath9k-htc-firmware-gcc.patch		\
   %D%/packages/patches/ath9k-htc-firmware-objcopy.patch		\
@@ -527,13 +529,17 @@ dist_patch_DATA =						\
   %D%/packages/patches/fltk-xfont-on-demand.patch		\
   %D%/packages/patches/fontforge-svg-modtime.patch		\
   %D%/packages/patches/freeimage-CVE-2015-0852.patch		\
+  %D%/packages/patches/freeimage-CVE-2016-5684.patch		\
   %D%/packages/patches/gawk-shell.patch				\
   %D%/packages/patches/gcc-arm-bug-71399.patch			\
   %D%/packages/patches/gcc-arm-link-spec-fix.patch		\
   %D%/packages/patches/gcc-cross-environment-variables.patch	\
   %D%/packages/patches/gcc-libvtv-runpath.patch			\
   %D%/packages/patches/gcc-5.0-libvtv-runpath.patch		\
+  %D%/packages/patches/gcc-6-arm-none-eabi-multilib.patch	\
+  %D%/packages/patches/gcc-6-cross-environment-variables.patch	\
   %D%/packages/patches/gd-CVE-2016-7568.patch			\
+  %D%/packages/patches/gd-CVE-2016-8670.patch			\
   %D%/packages/patches/gd-fix-gd2-read-test.patch		\
   %D%/packages/patches/gd-fix-tests-on-i686.patch		\
   %D%/packages/patches/gegl-CVE-2012-4433.patch			\
@@ -597,7 +603,6 @@ dist_patch_DATA =						\
   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
   %D%/packages/patches/ilmbase-fix-tests.patch			\
   %D%/packages/patches/inkscape-drop-wait-for-targets.patch	\
-  %D%/packages/patches/irrlicht-mesa-10.patch			\
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch	\
   %D%/packages/patches/jansson-CVE-2016-4425.patch		\
   %D%/packages/patches/jasper-CVE-2007-2721.patch		\
@@ -712,6 +717,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/ngircd-no-dns-in-tests.patch		\
   %D%/packages/patches/ninja-tests.patch			\
   %D%/packages/patches/ninja-zero-mtime.patch			\
+  %D%/packages/patches/node-9077.patch				\
   %D%/packages/patches/nss-pkgconfig.patch			\
   %D%/packages/patches/nvi-assume-preserve-path.patch		\
   %D%/packages/patches/nvi-dbpagesize-binpower.patch		\
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index 781e7fac29..811da498cc 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -910,7 +910,7 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
 (define-public guitarix
   (package
     (name "guitarix")
-    (version "0.35.1")
+    (version "0.35.2")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -918,7 +918,7 @@ patches that can be used with softsynths such as Timidity and WildMidi.")
                    version ".tar.xz"))
              (sha256
               (base32
-               "066qva1zk63qw60s0vbi9g9jh22ljw67p91pk82kv11gw24h3vg6"))))
+               "1qj3adjhg511jygbjkl9k5v0gcjmg6ifc479rspfyf45m383pp3p"))))
     (build-system waf-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 5fbfdf0b9b..43faaa078f 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -56,6 +56,8 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages groff)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages haskell)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages java)
@@ -7137,6 +7139,96 @@ ranges and it computes reads profiles and coverage profiles.  It also handles
 paired-end data.")
     (license license:gpl2+)))
 
+(define-public r-rcas
+  (package
+    (name "r-rcas")
+    (version "0.99.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/BIMSBbioinfo/RCAS/archive/v"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1ljgl2b4r6w2n0i9i04d9xaphajsvhfkjdj2i2z830nha4m3w8f0"))))
+    (build-system r-build-system)
+    (native-inputs
+     `(("r-knitr" ,r-knitr)
+       ("r-testthat" ,r-testthat)
+       ;; During vignette building knitr checks that "pandoc-citeproc"
+       ;; is in the PATH.
+       ("ghc-pandoc-citeproc" ,ghc-pandoc-citeproc)))
+    (propagated-inputs
+     `(("r-data-table" ,r-data-table)
+       ("r-biomart" ,r-biomart)
+       ("r-org-hs-eg-db" ,r-org-hs-eg-db)
+       ("r-org-ce-eg-db" ,r-org-ce-eg-db)
+       ("r-org-dm-eg-db" ,r-org-dm-eg-db)
+       ("r-org-mm-eg-db" ,r-org-mm-eg-db)
+       ("r-bsgenome-hsapiens-ucsc-hg19" ,r-bsgenome-hsapiens-ucsc-hg19)
+       ("r-bsgenome-mmusculus-ucsc-mm9" ,r-bsgenome-mmusculus-ucsc-mm9)
+       ("r-bsgenome-celegans-ucsc-ce10" ,r-bsgenome-celegans-ucsc-ce10)
+       ("r-bsgenome-dmelanogaster-ucsc-dm3" ,r-bsgenome-dmelanogaster-ucsc-dm3)
+       ("r-topgo" ,r-topgo)
+       ("r-dt" ,r-dt)
+       ("r-plotly" ,r-plotly)
+       ("r-motifrg" ,r-motifrg)
+       ("r-genomation" ,r-genomation)
+       ("r-genomicfeatures" ,r-genomicfeatures)
+       ("r-rtracklayer" ,r-rtracklayer)
+       ("r-rmarkdown" ,r-rmarkdown)))
+    (synopsis "RNA-centric annotation system")
+    (description
+     "RCAS aims to be a standalone RNA-centric annotation system that provides
+intuitive reports and publication-ready graphics.  This package provides the R
+library implementing most of the pipeline's features.")
+    (home-page "https://github.com/BIMSBbioinfo/RCAS")
+    (license license:expat)))
+
+(define-public rcas-web
+  (package
+    (name "rcas-web")
+    (version "0.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/BIMSBbioinfo/rcas-web/"
+                           "releases/download/v" version
+                           "/rcas-web-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0d3my0g8i7js59n184zzzjdki7hgmhpi4rhfvk7i6jsw01ba04qq"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-executable
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (json   (assoc-ref inputs "guile-json"))
+                    (redis  (assoc-ref inputs "guile-redis"))
+                    (path   (string-append
+                             json  "/share/guile/site/2.2:"
+                             redis "/share/guile/site/2.2")))
+               (wrap-program (string-append out "/bin/rcas-web")
+                 `("GUILE_LOAD_PATH" ":" = (,path))
+                 `("GUILE_LOAD_COMPILED_PATH" ":" = (,path))
+                 `("R_LIBS_SITE" ":" = (,(getenv "R_LIBS_SITE")))))
+             #t)))))
+    (inputs
+     `(("r" ,r)
+       ("r-rcas" ,r-rcas)
+       ("guile-next" ,guile-next)
+       ("guile-json" ,guile2.2-json)
+       ("guile-redis" ,guile2.2-redis)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "https://github.com/BIMSBbioinfo/rcas-web")
+    (synopsis "Web interface for RNA-centric annotation system (RCAS)")
+    (description "This package provides a simple web interface for the
+@dfn{RNA-centric annotation system} (RCAS).")
+    (license license:agpl3+)))
+
 (define-public emboss
   (package
     (name "emboss")
diff --git a/gnu/packages/cdrom.scm b/gnu/packages/cdrom.scm
index cdf0a4932e..1524ef530b 100644
--- a/gnu/packages/cdrom.scm
+++ b/gnu/packages/cdrom.scm
@@ -288,7 +288,7 @@ from an audio CD.")
 (define-public abcde
   (package
     (name "abcde")
-    (version "2.7.1")
+    (version "2.7.2")
     (home-page "https://abcde.einval.com/")
     (source (origin
               (method url-fetch)
@@ -296,7 +296,7 @@ from an audio CD.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0l7j0nk8p30s97285i418rv9ym9bgns7bn6l8gldw3mjhnby609l"))
+                "1pakpi41k8yd780mfp0snhia6mmwjwxk9lcrq6gynimch8b8hfda"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "Makefile"
@@ -314,7 +314,12 @@ from an audio CD.")
                (("^prefix = .*$")
                 (string-append "prefix = "
                                (assoc-ref outputs "out")
-                               "\n")))))
+                               "\n"))
+               (("^sysconfdir = .*$")
+                (string-append "sysconfdir = "
+                               (assoc-ref outputs "out")
+                               "/etc/\n")))
+             #t))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((wget   (assoc-ref inputs "wget"))
@@ -336,7 +341,7 @@ from an audio CD.")
                (for-each wrap
                          (find-files (string-append out "/bin")
                                      ".*"))))))
-       #:tests? #f))
+       #:tests? #f)) ; no test target
 
     (inputs `(("wget" ,wget)
               ("which" ,which)
diff --git a/gnu/packages/emacs.scm b/gnu/packages/emacs.scm
index 1b345dba1f..6e9c181b21 100644
--- a/gnu/packages/emacs.scm
+++ b/gnu/packages/emacs.scm
@@ -12,7 +12,7 @@
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
-;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2016 Alex Vong <alexvong1995@gmail.com>
@@ -2981,6 +2981,54 @@ Lua programing language}.")
 news items, openrc and runscripts.")
     (license license:gpl2+)))
 
+(define-public emacs-evil
+  (package
+    (name "emacs-evil")
+    (version "1.2.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://bitbucket.org/lyro/evil/get/"
+                           version ".tar.bz2"))
+       (file-name (string-append name "-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "17cda9fnbq3gmjcxs3lyq64gxswrf37y864bm53rldwsk3khq2yi"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-undo-tree" ,emacs-undo-tree)
+       ("emacs-goto-chg" ,emacs-goto-chg)))
+    (home-page "https://bitbucket.com/lyro/evil")
+    (synopsis "Extensible Vi layer for Emacs")
+    (description
+     "Evil is an extensible vi layer for Emacs.  It emulates the
+main features of Vim, and provides facilities for writing custom
+extensions.")
+    (license license:gpl3+)))
+
+(define-public emacs-goto-chg
+  (package
+    (name "emacs-goto-chg")
+    (version "1.6")
+    (source
+     (origin
+       (method url-fetch)
+       ;; There is no versioned source.
+       (uri "https://www.emacswiki.org/emacs/download/goto-chg.el")
+       (sha256
+        (base32
+         "078d6p4br5vips7b9x4v6cy0wxf6m5ij9gpqd4g33bryn22gnpij"))))
+    (build-system emacs-build-system)
+    ;; There is no other home page.
+    (home-page "https://www.emacswiki.org/emacs/goto-chg.el")
+    (synopsis "Go to the last change in the Emacs buffer")
+    (description
+     "This package provides @code{M-x goto-last-change} command that goes to
+the point of the most recent edit in the current Emacs buffer.  When repeated,
+go to the second most recent edit, etc.  Negative argument, @kbd{C-u -}, is
+used for reverse direction.")
+    (license license:gpl2+)))
+
 (define-public emacs-writegood-mode
   (package
     (name "emacs-writegood-mode")
@@ -3183,3 +3231,24 @@ display and edit the text.
 
 This package contains the library runtime.")
     (license license:lgpl2.1+)))
+
+(define-public emacs-nginx-mode
+  (package
+    (name "emacs-nginx-mode")
+    (version "1.1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/ajc/nginx-mode/archive/v"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1lvkj07kq0jkskr2f61vqb5rlrbnaz9a76ikq40w6925i2r970rr"))))
+    (build-system emacs-build-system)
+    (home-page "https://github.com/ajc/nginx-mode")
+    (synopsis "Emacs major mode for editing nginx config files")
+    (description "This package provides an Emacs major mode for
+editing nginx config files.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/embedded.scm b/gnu/packages/embedded.scm
index 24eeef9fa7..a7af69f609 100644
--- a/gnu/packages/embedded.scm
+++ b/gnu/packages/embedded.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016 Theodoros Foradis <theodoros.for@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -24,9 +25,12 @@
   #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial)
+  #:use-module (guix build utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages texinfo))
 
@@ -97,6 +101,17 @@
               (variable "CROSS_LIBRARY_PATH")
               (files '("arm-none-eabi/lib"))))))))
 
+(define-public gcc-arm-none-eabi-6
+  (package
+    (inherit gcc-arm-none-eabi-4.9)
+    (version (package-version gcc-6))
+    (source (origin (inherit (package-source gcc-6))
+                    (patches
+                     (append
+                      (origin-patches (package-source gcc-6))
+                      (search-patches "gcc-6-cross-environment-variables.patch"
+                                      "gcc-6-arm-none-eabi-multilib.patch")))))))
+
 (define-public newlib-arm-none-eabi
   (package
     (name "newlib")
@@ -163,3 +178,48 @@ usable on embedded products.")
            "--enable-newlib-nano-formatted-io"
            "--disable-nls"))))
     (synopsis "Newlib variant for small systems with limited memory")))
+
+(define (arm-none-eabi-toolchain xgcc newlib)
+  "Produce a cross-compiler toolchain package with the compiler XGCC and the C
+library variant NEWLIB."
+  (let ((newlib-with-xgcc (package (inherit newlib)
+                            (native-inputs
+                             (alist-replace "xgcc" (list xgcc)
+                                            (package-native-inputs newlib))))))
+    (package
+      (name (string-append "arm-none-eabi"
+                           (if (string=? (package-name newlib-with-xgcc)
+                                         "newlib-nano")
+                               "-nano" "")
+                           "-toolchain"))
+      (version (package-version xgcc))
+      (source #f)
+      (build-system trivial-build-system)
+      (arguments '(#:builder (mkdir %output)))
+      (propagated-inputs
+       `(("binutils" ,(cross-binutils "arm-none-eabi"))
+         ("gcc" ,xgcc)
+         ("newlib" ,newlib-with-xgcc)))
+      (synopsis "Complete GCC tool chain for ARM bare metal development")
+      (description "This package provides a complete GCC tool chain for ARM
+bare metal development.  This includes the GCC arm-none-eabi cross compiler
+and newlib (or newlib-nano) as the C library.  The supported programming
+languages are C and C++.")
+      (home-page (package-home-page xgcc))
+      (license (package-license xgcc)))))
+
+(define-public arm-none-eabi-toolchain-4.9
+  (arm-none-eabi-toolchain gcc-arm-none-eabi-4.9
+                           newlib-arm-none-eabi))
+
+(define-public arm-none-eabi-nano-toolchain-4.9
+  (arm-none-eabi-toolchain gcc-arm-none-eabi-4.9
+                           newlib-nano-arm-none-eabi))
+
+(define-public arm-none-eabi-toolchain-6
+  (arm-none-eabi-toolchain gcc-arm-none-eabi-6
+                           newlib-arm-none-eabi))
+
+(define-public arm-none-eabi-nano-toolchain-6
+  (arm-none-eabi-toolchain gcc-arm-none-eabi-6
+                           newlib-nano-arm-none-eabi))
diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm
index 57c9f60bac..7924827822 100644
--- a/gnu/packages/finance.scm
+++ b/gnu/packages/finance.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2015, 2016 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,7 +42,8 @@
  #:use-module (gnu packages texinfo)
  #:use-module (gnu packages textutils)
  #:use-module (gnu packages tls)
- #:use-module (gnu packages upnp))
+ #:use-module (gnu packages upnp)
+ #:use-module (gnu packages gnuzilla))
 
 (define-public bitcoin-core
   (package
@@ -188,3 +190,53 @@ in ability, and easy to use.")
                     "file://src/wcwidth.cc"
                     "See src/wcwidth.cc in the distribution.")
                    license:gpl2+))))  ; lisp/*
+
+(define-public geierlein
+  (package
+    (name "geierlein")
+    (version "0.9.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/stesie/geierlein"
+                           "/archive/V" version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0b11fq8v5w8nxjb20jl4dsfhv76xky6n3sq3k3fbb0m2sq9ikikw"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; would require npm, python and a lot more
+       #:phases
+        (modify-phases %standard-phases
+          (delete 'configure)
+          (add-after 'unpack 'override-target-directory-and-tool-paths
+            (lambda* (#:key inputs outputs #:allow-other-keys)
+              (substitute* "Makefile"
+                (("prefix := .*")
+                 (string-append "prefix := " (assoc-ref outputs "out") "\n"))
+                ;; Required for tests, unused for now:
+                ;;(("PYTHON := .*")
+                ;; (string-append (which "python") "\n")))
+                (("INSTALL := .*")
+                 (string-append "INSTALL := " (which "install") "\n")))
+              (substitute* "bin/xgeierlein.in"
+                ;; Use icecat as XULRUNNER
+                (("^for search ")
+                 (string-append "XULRUNNER=" (which "icecat") "\n"
+                                "for search ")))
+              #t)))))
+    (inputs
+     `(("icecat" ,icecat)))
+    (home-page "http://stesie.github.io/geierlein/")
+    (synopsis "Free Elster client, for sending Germany VAT declarations")
+    (description
+     "Geierlein is a free Elster client, i.e. an application that
+allows to send VAT declarations to Germany's fiscal authorities.
+
+Currently it is *not* possible to send returns that are due annually
+(especially the income tax return) since the fiscal authority doesn't
+allow to do that off the ERiC library (which is proprietary however).
+It's not clear at the moment whether one day it will be possible to
+do so.")
+    (license license:agpl3+)))
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index 5e6cf0b234..de0b842b48 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -183,7 +183,9 @@ clone.")
                 "0k2fl5xk3ni2q8bsxl0551inx26ww3w6cp6hssvww0wfjdjcirsm"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:tests? #f)) ; no tests
+     '(#:configure-flags
+       (list "-DSFML_INSTALL_PKGCONFIG_FILES=TRUE")
+       #:tests? #f)) ; no tests
     (inputs
      `(("mesa" ,mesa)
        ("glew" ,glew)
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 72aff907ae..e4c34d08a5 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -545,7 +545,7 @@ are primarily in English, however some in other languages are provided.")
 (define-public irrlicht
   (package
     (name "irrlicht")
-    (version "1.8.1")
+    (version "1.8.4")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -554,10 +554,10 @@ are primarily in English, however some in other languages are provided.")
                     "/" version "/irrlicht-" version ".zip"))
               (sha256
                (base32
-                "0yz9lvsc8aqk8wj4rnpanxrw90gqpwn9w5hxp94r8hnm2q0vjjw1"))))
+                "0cz4z4dwrv5ypl19ll67wl6jjpy5k6ly4vr042w4br88qq5jhazl"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:phases (alist-cons-after
+     `(#:phases (alist-cons-after
                  'unpack 'fix-build-env
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let ((out (assoc-ref outputs "out")))
@@ -572,19 +572,13 @@ are primarily in English, however some in other languages are provided.")
                   (lambda* (#:key source #:allow-other-keys)
                     (and (zero? (system* "unzip" source))
                          ;; The actual source is buried a few directories deep.
-                         (chdir "irrlicht-1.8.1/source/Irrlicht/")))
-                  (alist-cons-after
-                   'unpack 'apply-patch/mesa-10-fix
-                   (lambda* (#:key inputs #:allow-other-keys)
-                     (zero? (system* "patch" "--force" "-p3" "-i"
-                                     (assoc-ref inputs "patch/mesa-10-fix"))))
-                   ;; No configure script
-                   (alist-delete 'configure %standard-phases))))
+                         (chdir (string-append "irrlicht-" ,version "/source/Irrlicht/"))))
+                  ;; No configure script
+                  (alist-delete 'configure %standard-phases)))
        #:tests? #f ; no check target
        #:make-flags '("CC=gcc" "sharedlib")))
     (native-inputs
-     `(("patch/mesa-10-fix" ,(search-patch "irrlicht-mesa-10.patch"))
-       ("unzip" ,unzip)))
+     `(("unzip" ,unzip)))
     (inputs
      `(("mesa" ,mesa)
        ("glu" ,glu)))
@@ -946,7 +940,7 @@ Protocol).")
 (define-public extremetuxracer
   (package
     (name "extremetuxracer")
-    (version "0.6.0")
+    (version "0.7.3")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -954,35 +948,13 @@ Protocol).")
                     version "/etr-" version ".tar.xz"))
               (sha256
                (base32
-                "0fl9pwkywqnsmgr6plfj9zb05xrdnl5xb2hcmbjk7ap9l4cjfca4"))))
+                "1lg3z7jhzmsjym53qss8mbydny8hafwjnfsc7x91hrr9zrkwblly"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("freetype" ,freetype)
-       ("mesa" ,mesa)
-       ("glu" ,glu)
-       ("libice" ,libice)
-       ("libpng" ,libpng)
-       ("sdl" ,sdl)
-       ("sdl-mixer" ,sdl-mixer)
-       ("sdl-image" ,sdl-image)
-       ("libsm" ,libsm)
-       ("libunwind" ,libunwind)
-       ("libx11" ,libx11)
-       ("libxext" ,libxext)
-       ("libxi" ,libxi)
-       ("libxmu" ,libxmu)
-       ("libxt" ,libxt)
-       ("tcl" ,tcl)
-       ("zlib" ,zlib)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'configure 'patch-makefile
-           (lambda _
-             (substitute* "Makefile"
-               (("CXXFLAGS =") "CXXFLAGS = ${CFLAGS}")))))))
+     `(("glu" ,glu)
+       ("sfml" ,sfml)))
     (synopsis "High speed arctic racing game based on Tux Racer")
     ;; Snarfed straight from Debian
     (description "Extreme Tux Racer, or etracer as it is called for short, is
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 6c94d35bdf..0241a81db9 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -51,6 +51,7 @@
               (base32
                "0g3xz8jpz1pl2zzmssglrpa9nxiaa7rmcmvgpbrjz8k9cyynqsvl"))
              (patches (search-patches "gd-CVE-2016-7568.patch"
+                                      "gd-CVE-2016-8670.patch"
                                       "gd-fix-gd2-read-test.patch"
                                       "gd-fix-tests-on-i686.patch"))))
     (build-system gnu-build-system)
diff --git a/gnu/packages/glib.scm b/gnu/packages/glib.scm
index 938cf3b736..9a1459ab09 100644
--- a/gnu/packages/glib.scm
+++ b/gnu/packages/glib.scm
@@ -140,6 +140,7 @@ shared NFS home directories.")
       (let ((version "1.10.12"))
         (origin
           (method url-fetch)
+          (inherit (package-source dbus))
           (uri (string-append
                 "https://dbus.freedesktop.org/releases/dbus/dbus-"
                 version ".tar.gz"))
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index b62a5f7f4d..a45f6589ac 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -5583,3 +5583,31 @@ handling the startup notification side.")
      "Calculator is an application that solves mathematical equations and
 is suitable as a default application in a Desktop environment.")
     (license license:gpl3)))
+
+(define-public xpad
+  (package
+    (name "xpad")
+    (version "4.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://launchpad.net/xpad/trunk/4.8.0/+download/"
+                           name "-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "17f915yyvfa2fsavq6wh0q0dfhib28b4k1gc0292b9xdlrvy7f22"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("gtksourceview" ,gtksourceview)
+       ("libsm" ,libsm)))
+    (home-page "https://wiki.gnome.org/Apps/Xpad")
+    (synopsis "Virtual sticky note")
+    (description
+     "Xpad is a sticky note that strives to be simple, fault tolerant,
+and customizable.  Xpad consists of independent pad windows, each is
+basically a text box in which notes can be written.")
+    (license license:gpl3+)))
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index 930e1985d5..64953414ed 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -142,20 +142,18 @@ application can be customized via its API for Python scripting.")
 (define-public assimp
   (package
     (name "assimp")
-    (version "3.2")
+    (version "3.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/assimp/assimp/archive/v"
-                                  version ".zip"))
-              (file-name (string-append name "-" version ".zip"))
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "11sfahmbwnjjpd8vpzdsng1bx5mb0cmaqb20dz6sdwapqanqwmar"))))
+                "1gy7zlgkf4nmyv8n674p3f30asis0gjz8icyy11i693n13ww71fk"))))
     (build-system cmake-build-system)
     (inputs
      `(("zlib" ,zlib)))
-    (native-inputs
-     `(("unzip" ,unzip)))
     (home-page "http://assimp.org/")
     (synopsis "Asset import library")
     (description
diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm
index aa2cdb10e0..691a7fe22e 100644
--- a/gnu/packages/guile.scm
+++ b/gnu/packages/guile.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016 Erik Edrosa <erik.edrosa@gmail.com>
 ;;; Copyright © 2016 Eraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -321,7 +322,8 @@ applicable."
                                   version ".tar.gz"))
               (sha256
                (base32
-                "19m3ak12cqk8js9d2mdg11kh4fjsq8frfpd10qw75h0zpr5cywpp"))))
+                "19m3ak12cqk8js9d2mdg11kh4fjsq8frfpd10qw75h0zpr5cywpp"))
+              (patches (search-patches "artanis-fix-Makefile.in.patch"))))
     (build-system gnu-build-system)
     ;; TODO: Add guile-dbi and guile-dbd optional dependencies.
     (inputs `(("guile" ,guile-2.0)))
@@ -335,8 +337,7 @@ applicable."
               (dir (string-append out "/share/guile/site/2.0")))
          ;; Don't use (%site-dir) for site paths.
          (list (string-append "MOD_PATH=" dir)
-               (string-append "MOD_COMPILED_PATH=" dir)
-               (string-append "DESTDIR=" out)))
+               (string-append "MOD_COMPILED_PATH=" dir)))
        #:test-target "test"
        #:phases
        (modify-phases %standard-phases
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 7f4327badc..4b05cca3b4 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -570,18 +570,19 @@ supplies a generic doubly-linked list and some string functions.")
             (sha256
              (base32
               "12bz57asdcfsz3zr9i9nska0fb6h3z2aizy412qjqkixkginbz7v"))
-            (patches (search-patches "freeimage-CVE-2015-0852.patch"))))
+            (patches (search-patches "freeimage-CVE-2015-0852.patch"
+                                     "freeimage-CVE-2016-5684.patch"))))
    (build-system gnu-build-system)
    (arguments
-    '(#:phases (alist-delete
-                'configure
-                (alist-cons-before
-                 'build 'patch-makefile
-                 (lambda* (#:key outputs #:allow-other-keys)
-                   (substitute* "Makefile.gnu"
-                     (("/usr") (assoc-ref outputs "out"))
-                     (("-o root -g root") "")))
-                 %standard-phases))
+    '(#:phases
+      (modify-phases %standard-phases
+        (delete 'configure)
+        (add-before 'build 'patch-makefile
+          (lambda* (#:key outputs #:allow-other-keys)
+            (substitute* "Makefile.gnu"
+              (("/usr") (assoc-ref outputs "out"))
+              (("-o root -g root") ""))
+            #t)))
       #:make-flags '("CC=gcc")
       #:tests? #f)) ; no check target
    (native-inputs
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index 6de5bc125f..53baa21fdd 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -322,26 +322,26 @@ It has been modified to remove all non-free binary blobs.")
 (define %intel-compatible-systems '("x86_64-linux" "i686-linux"))
 
 (define-public linux-libre
-  (make-linux-libre "4.8.1"
-                    "0l57ab8v52nvx4d898qfvkl7c6zlrm7qd080z6jg0bg0adn4w5lf"
+  (make-linux-libre "4.8.2"
+                    "111v014j9b2zgyhv8f0aka5lmyc3imdc5yag7azw6hv3vjqqkn67"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.24"
-                    "1wg1d9rq29612psr5v4krabx7nv1y1gzfshq7wpx6i1lpqf3lill"
+  (make-linux-libre "4.4.25"
+                    "1a677h8vvjkbzqwnklqnjvhq33lwig5z453dwi125zzzvawgr463"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.1
-  (make-linux-libre "4.1.33"
-                    "1s45vymx7zp7qwj4rx63dpj9xwm8hv5fd9nm27wqvmgnmd3q548h"
+  (make-linux-libre "4.1.34"
+                    "0dajsb363p9lgga22ml8gp9k9lxd8mvrzxk9y3h9c6hpzfcmqdqr"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 ;; Avoid rebuilding kernel variants when there is a minor version bump.
-(define %linux-libre-version "4.8.1")
-(define %linux-libre-hash "0l57ab8v52nvx4d898qfvkl7c6zlrm7qd080z6jg0bg0adn4w5lf")
+(define %linux-libre-version "4.8.2")
+(define %linux-libre-hash "111v014j9b2zgyhv8f0aka5lmyc3imdc5yag7azw6hv3vjqqkn67")
 
 (define-public linux-libre-arm-generic
   (make-linux-libre %linux-libre-version
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index baa5a96185..47c15497d4 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -443,6 +443,54 @@ attachments, create new maildirs, and so on.")
 @code{notmuch} mail.  It is written in Python using the @code{urwid} toolkit.")
     (license gpl3+)))
 
+(define-public notifymuch
+  (let
+      ((commit "9d4aaf54599282ce80643b38195ff501120807f0")
+       (revision "1"))
+    (package
+      (name "notifymuch")
+      (version (string-append "0.1-" revision "." (string-take commit 7)))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/kspi/notifymuch.git")
+               (commit commit)))
+         (sha256
+          (base32
+           "1lssr7iv43mp5v6nzrfbqlfzx8jcc7m636wlfyhhnd8ydd39n6k4"))
+         (file-name (string-append name "-" version "-checkout"))))
+      (build-system python-build-system)
+      (inputs
+       `(("python-notmuch" ,python-notmuch)
+         ("python-pygobject" ,python-pygobject)
+         ("gobject-introspection" ,gobject-introspection)
+         ("libnotify" ,libnotify)
+         ("gtk+" ,gtk+)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'wrap-binary
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin/notifymuch")))
+                 (wrap-program bin
+                   `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+                   `("GI_TYPELIB_PATH" ":" prefix
+                     (,(getenv "GI_TYPELIB_PATH")
+                      ,(string-append out "/lib/girepository-1.0")))))
+               #t)))))
+      (home-page "https://github.com/kspi/notifymuch")
+      (synopsis "Displays notifications for changes in the notmuch email database")
+      (description "notifymuch displays desktop notifications for messages in
+the notmuch database.  The notifications are sent using libnotify to a
+notification daemon.  The query to find messages to send a notification about
+is configurable, and a notification for the same message will not be send
+within a configurable period (defaults to 48 hours).  To use notifymuch, run
+@command{notifymuch} after new mail is indexed, this can be automated by
+invoking @command{notifymuch} from the post-new hook.")
+      (license gpl3))))
+
 (define-public notmuch
   (package
     (name "notmuch")
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 40f3948bb6..bbae98532d 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -1521,6 +1521,31 @@ synths, microtonal capabilities, custom envelopes, effects, etc.  Yoshimi
 improves on support for JACK features, such as JACK MIDI.")
     (license license:gpl2)))
 
+(define-public jack-keyboard
+  (package
+    (name "jack-keyboard")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/jack-keyboard/jack-keyboard/"
+                           version "/jack-keyboard-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0mzmg8aavybcfdlq2yd9d0vscqd6is5p6jzrgfpfm5j3xdcvh2s3"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("jack" ,jack-1)
+       ("lash" ,lash)
+       ("gtk+" ,gtk+-2)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (home-page "http://jack-keyboard.sourceforge.net/")
+    (synopsis "Virtual MIDI keyboard")
+    (description "Jack-keyboard is a virtual MIDI keyboard, a program that
+allows you to send JACK MIDI events (i.e. play) using your PC keyboard.")
+    (license license:bsd-2)))
+
 (define-public cursynth
   (package
     (name "cursynth")
@@ -1965,3 +1990,366 @@ CSV file in the format created by midicsv may be converted back into a
 standard MIDI file with the csvmidi program.")
     (home-page "http://www.fourmilab.ch/webtools/midicsv/")
     (license license:public-domain)))
+
+(define-public gx-guvnor-lv2
+  (let ((commit "9f528a7623a201383e119bb6a2df32b18396a9d5")
+        (revision "1"))
+    (package
+      (name "gx-guvnor-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxGuvnor.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "10zx84p2vd7i1yqc5ma9p17927265j4g0zfwv9rxladw0nm8y45k"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(;; The check target is used only to output a warning.
+         #:tests? #f
+         #:make-flags
+         (list (string-append "DESTDIR=" (assoc-ref %outputs "out")))
+         #:phases
+         (modify-phases %standard-phases
+           (replace 'configure
+             (lambda _
+               (substitute* "Makefile"
+                 (("INSTALL_DIR = .*") "INSTALL_DIR=/lib/lv2\n")
+                 ;; Avoid rebuilding everything
+                 (("install : all") "install:"))
+               #t)))))
+      (inputs
+       `(("lv2" ,lv2)))
+      (home-page "https://github.com/brummer10/GxGuvnor.lv2")
+      (synopsis "Overdrive/distortion pedal simulation")
+      (description "This package provides the LV2 plugin \"GxGuvnor\", a
+simulation of an overdrive or distortion pedal for guitars.")
+      ;; The LICENSE file says GPLv3 but the license headers in the files say
+      ;; GPLv2 or later.
+      (license license:gpl2+))))
+
+(define-public gx-vbass-preamp-lv2
+  (let ((commit "0e599abab10c7669dd444e5d06f671c2fc1b9c6c")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-vbass-preamp-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxVBassPreAmp.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1dzksdfrva666gpi62fd2ni9rhf18sl917f1894qr0b17pbdh9k1"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (home-page "https://github.com/brummer10/GxVBassPreAmp.lv2")
+      (synopsis "Simulation of the Vox Venue Bass 100 Pre Amp Section")
+      (description "This package provides the LV2 plugin \"GxVBassPreAmp\", a
+pre-amplifier simulation modelled after the 1984 Vox Venue Bass 100 Pre Amp
+Section."))))
+
+(define-public gx-overdriver-lv2
+  (let ((commit "ed71801987449414bf3adaa0dbfac68e8775f1ce")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-overdriver-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxOverDriver.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "13j614jh525fbkby79nnzwj0z1ac0c9wclyn5pfqvkmx6a7j24r8"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (home-page "https://github.com/brummer10/GxOverDriver.lv2")
+      (synopsis "Overdrive effect with level and tone control")
+      (description "This package provides the LV2 plugin \"GxOverDriver\", an
+overdrive effect."))))
+
+(define-public gx-tone-mender-lv2
+  (let ((commit "b6780b4a3e4782b3ed0e5882d6788f178aed138f")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-tone-mender-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxToneMender.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "07qdcfsvv2vdnfnjh91pfgvjdcs5y91nvwfm8c0z8fp6b4bk7a9q"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (home-page "https://github.com/brummer10/GxToneMender.lv2")
+      (synopsis "Clean boost with a 3-knob tonestack")
+      (description "This package provides the LV2 plugin \"GxToneMender\", a
+clean boost effect with a 3-knob tonestack."))))
+
+(define-public gx-push-pull-lv2
+  (let ((commit "7f76ae2068498643ac8671ee0930b13ee3fd8eb5")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-push-pull-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxPushPull.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "12f5hwck2irph0gjbj8xy8jqcqdwb8l1hlwf29k0clz52h1jhb5q"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (home-page "https://github.com/brummer10/GxPushPull.lv2")
+      (synopsis "Octave up push pull transistor fuzz simulation")
+      (description "This package provides the LV2 plugin \"GxPushPull\", a
+simulation of a push pull transistor fuzz effect with added high octave."))))
+
+(define-public gx-suppa-tone-bender-lv2
+  (let ((commit "4e6dc713ec24e7fcf5ea23b7e685af627c01b9c9")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-suppa-tone-bender-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxSuppaToneBender.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1i22xr252nkbazkwidll2zb3i96610gx65qn5djdkijlz7j77138"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (home-page "https://github.com/brummer10/GxSuppaToneBender.lv2")
+      (synopsis "Simulation of the Vox Suppa Tone Bender pedal")
+      (description "This package provides the LV2 plugin
+\"GxSuppaToneBender\", a simulation modelled after the Vox Suppa Tone Bender
+pedal."))))
+
+(define-public gx-saturator-lv2
+  (let ((commit "361399245d234b4d02f11f066d25ac15d90c6bf8")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-saturator-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxSaturator.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "13cf5gxr2wzp5954hdhbl79v98a665ll5434mb3668p4j33sv217"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments gx-guvnor-lv2)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'escape-shell-commands
+               (lambda _
+                 (substitute* "Makefile"
+                   (("cat ") "$(shell cat ")
+                   (("/dev/null") "/dev/null)")
+                   (("SSE_CFLAGS = \"\"") "SSE_CFLAGS ="))
+                 #t))))))
+      (home-page "https://github.com/brummer10/GxSaturator.lv2")
+      (synopsis "Saturation effect")
+      (description "This package provides the LV2 plugin \"GxSaturator\", a
+saturation effect."))))
+
+(define-public gx-hyperion-lv2
+  (let ((commit "7d993bc77f9946b3df0e481632c61b2dcbb6549f")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-hyperion-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxHyperion.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "12klcyc6l9v93ii3478mqz44jzvh5np1sk8zzdmz42jp0w8qd429"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments gx-guvnor-lv2)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'escape-shell-commands
+               (lambda _
+                 (substitute* "Makefile"
+                   (("cat ") "$(shell cat ")
+                   (("/dev/null") "/dev/null)")
+                   (("SSE_CFLAGS = \"\"") "SSE_CFLAGS ="))
+                 #t))))))
+      (home-page "https://github.com/brummer10/GxHyperion.lv2")
+      (synopsis "Simulation of the Hyperion Fuzz pedal")
+      (description "This package provides the LV2 plugin \"GxHyperion\", a
+simulation of the Hyperion Fuzz pedal."))))
+
+(define-public gx-voodoo-fuzz-lv2
+  (let ((commit "d2d6b27bc279f98c2fd11bbd58ffe2fb2c321ec4")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-voodoo-fuzz-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxVoodoFuzz.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1ji915bly588a8xwvwspvsqv0nh8ljgi6rky2mk1d9d6nz96jrbk"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments gx-guvnor-lv2)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'escape-shell-commands
+               (lambda _
+                 (substitute* "Makefile"
+                   (("cat ") "$(shell cat ")
+                   (("/dev/null") "/dev/null)")
+                   (("SSE_CFLAGS = \"\"") "SSE_CFLAGS ="))
+                 #t))))))
+      (home-page "https://github.com/brummer10/GxVoodoFuzz.lv2")
+      (synopsis "Fuzz effect modelled after the Voodoo Lab SuperFuzz")
+      (description "This package provides the LV2 plugin \"GxVoodooFuzz\", a
+simulation modelled after the Voodoo Lab SuperFuzz pedal.  It's basically a
+Bosstone circuit, followed by the tone control of the FoxToneMachine in
+parallel with a DarkBooster, followed by a volume control."))))
+
+(define-public gx-super-fuzz-lv2
+  (let ((commit "9800354caeb4082a64ca55b2daa9a9a1f79b8c21")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-super-fuzz-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxSuperFuzz.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "1jclp53p01h94cpx17wm4765r7klbr41g7bvq87l53qwlrgkc7a9"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments gx-guvnor-lv2)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'escape-shell-commands
+               (lambda _
+                 (substitute* "Makefile"
+                   (("cat ") "$(shell cat ")
+                   (("/dev/null") "/dev/null)")
+                   (("SSE_CFLAGS = \"\"") "SSE_CFLAGS ="))
+                 #t))))))
+      (home-page "https://github.com/brummer10/GxSuperFuzz.lv2")
+      (synopsis "Fuzz effect modelled after the UniVox SuperFuzz")
+      (description "This package provides the LV2 plugin \"GxVoodooFuzz\", an
+analog simulation of the UniVox SuperFuzz pedal.  In this simulation the trim
+pot, which is usualy in the housing, is exposed as a control parameter.  It
+adjusts the amount of harmonics."))))
+
+(define-public gx-vintage-fuzz-master-lv2
+  (let ((commit "c3ab9a3019a8381a398718b98615940b4a225b9e")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-vintage-fuzz-master-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0s1ghysggx6psalyhcpgjnmf38vama6jcqgbldqmxii5c2w2ybsc"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments gx-guvnor-lv2)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'escape-shell-commands
+               (lambda _
+                 (substitute* "Makefile"
+                   (("cat ") "$(shell cat ")
+                   (("/dev/null") "/dev/null)")
+                   (("SSE_CFLAGS = \"\"") "SSE_CFLAGS ="))
+                 #t))))))
+      (home-page "https://github.com/brummer10/GxVintageFuzzMaster.lv2")
+      (synopsis "Fuzz effect simulation of the vintage Fuzz Master")
+      (description "This package provides the LV2 plugin
+\"GxVintageFuzzMaster\", a simulation of the vintage Fuzz Master pedal."))))
+
+(define-public gx-slow-gear-lv2
+  (let ((commit "1071c2b2936ebad859242cb578af2f3415f8900f")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-slow-gear-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxSlowGear.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0c6099h5qkv7ilsvxxcrzwy1h6lkld1srh3fvbjxyw9q34kbqsyl"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments gx-guvnor-lv2)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'escape-shell-commands
+               (lambda _
+                 (substitute* "Makefile"
+                   (("cat ") "$(shell cat ")
+                   (("/dev/null") "/dev/null)")
+                   (("SSE_CFLAGS = \"\"") "SSE_CFLAGS ="))
+                 #t))))))
+      (home-page "https://github.com/brummer10/GxSlowGear.lv2")
+      (synopsis "Slow gear audio effect")
+      (description "This package provides the LV2 plugin \"GxSlowGear\", a
+slow gear audio effect to produce volume swells."))))
+
+(define-public gx-switchless-wah-lv2
+  (let ((commit "1d466240c482b7ce9136aee39044068ab96f1c92")
+        (revision "1"))
+    (package (inherit gx-guvnor-lv2)
+      (name "gx-switchless-wah-lv2")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/brummer10/GxSwitchlessWah.lv2")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0g6njgsm8s76n6yys09a8w77z93pjjgqq9hzhhsrl73hhvyr9qmy"))
+                (file-name (string-append name "-" version "-checkout"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments gx-guvnor-lv2)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'escape-shell-commands
+               (lambda _
+                 (substitute* "Makefile"
+                   (("cat ") "$(shell cat ")
+                   (("/dev/null") "/dev/null)")
+                   (("SSE_CFLAGS = \"\"") "SSE_CFLAGS ="))
+                 #t))))))
+      (home-page "https://github.com/brummer10/GxSwitchlessWah.lv2")
+      (synopsis "Wah emulation with switchless activation")
+      (description "This package provides the LV2 plugin \"GxSwitchlessWah\",
+a simulation of an analog Wah pedal with switchless activation."))))
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 1cf6b052b8..cc843c97ff 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -40,6 +40,7 @@
   #:use-module (gnu packages audio)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages code)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages flex)
@@ -54,7 +55,9 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages textutils)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages valgrind))
 
 (define-public macchanger
   (package
@@ -474,7 +477,7 @@ network frames.")
 (define-public httping
   (package
     (name "httping")
-    (version "2.4")
+    (version "2.5")
     (source
      (origin
        (method url-fetch)
@@ -482,7 +485,7 @@ network frames.")
                            version ".tgz"))
        (sha256
         (base32
-         "1110r3gpsj9xmybdw7w4zkhj3zmn5mnv2nq0ijbvrywbn019zdfs"))))
+         "1y7sbgkhgadmd93x1zafqc4yp26ssiv16ni5bbi9vmvvdl55m29y"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("gettext" ,gettext-minimal)))
@@ -857,3 +860,70 @@ other similar tasks that are particularly application specific so that the
 library remains flexible, portable, and easily embeddable.")
     (home-page "http://enet.bespin.org")
     (license license:expat)))
+
+(define-public sslh
+  (package
+    (name "sslh")
+    (version "1.18")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/yrutschle/sslh/archive/v"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1vzw7a7s9lhspbn5zn3hw8hir4pkjgbd68yys4hfsnjp1h7bzjpn"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(;; Tests dependencies.
+       ("lcov" ,lcov)
+       ("perl" ,perl)
+       ("perl-io-socket-inet6" ,perl-io-socket-inet6)
+       ("perl-socket6" ,perl-socket6)
+       ("psmisc" ,psmisc)
+       ("valgrind" ,valgrind)))
+    (inputs
+     `(("libcap" ,libcap)
+       ("libconfig" ,libconfig)
+       ("tcp-wrappers" ,tcp-wrappers)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ; no configure script
+         (add-before 'check 'fix-tests
+                     (lambda _
+                       (substitute* "./t"
+                         (("\"/tmp") "$ENV{\"TMPDIR\"} . \"")
+                         ;; The Guix build environment lacks ‘ip6-localhost’.
+                         (("ip6-localhost") "localhost"))
+                       #t))
+         ;; Many of these files are mentioned in the man page. Install them.
+         (add-after 'install 'install-documentation
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out"))
+                             (doc (string-append out "/share/doc/sslh")))
+                        (install-file "README.md" doc)
+                        (for-each
+                         (lambda (file)
+                           (install-file file (string-append doc "/examples")))
+                         (append (find-files "." "\\.cfg")
+                                 (find-files "scripts"))))
+                      #t)))
+       #:make-flags (list "CC=gcc"
+                          "USELIBCAP=1"
+                          "USELIBWRAP=1"
+                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:test-target "test"))
+    (home-page "http://www.rutschle.net/tech/sslh.shtml")
+    (synopsis "Applicative network protocol demultiplexer")
+    (description
+     "sslh is a network protocol demultiplexer.  It acts like a switchboard,
+accepting connections from clients on one port and forwarding them to different
+servers based on the contents of the first received data packet.  Detection of
+common protocols like HTTP(S), SSL, SSH, OpenVPN, tinc, and XMPP is already
+implemented, but any other protocol that matches a regular expression can be
+added.  sslh's name comes from its original application of serving both SSH and
+HTTPS on port 443, allowing SSH connections from inside corporate firewalls
+that block port 22.")
+    (license (list license:bsd-2        ; tls.[ch]
+                   license:gpl2+))))    ; everything else
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 887ef930ff..617dffc937 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -25,6 +25,7 @@
   #:use-module (guix derivations)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gcc)
@@ -37,14 +38,16 @@
 (define-public node
   (package
     (name "node")
-    (version "6.0.0")
+    (version "6.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://nodejs.org/dist/v" version
                                   "/node-v" version ".tar.gz"))
               (sha256
                (base32
-                "0cpw7ng193jgfbw2g1fd0kcglmjjkbj4xb89g00z8zz0lj0nvdbd"))))
+                "0lj3250hglz4w5ic4svd7wlg2r3qc49hnasvbva1v69l8yvx98m8"))
+              ;; https://github.com/nodejs/node/pull/9077
+              (patches (search-patches "node-9077.patch"))))
     (build-system gnu-build-system)
     (arguments
      ;; TODO: Package http_parser and add --shared-http-parser.
@@ -78,10 +81,10 @@
              ;; FIXME: These tests fail in the build container, but they don't
              ;; seem to be indicative of real problems in practice.
              (for-each delete-file
-                       '("test/parallel/test-cluster-master-error.js"
+                       '("test/parallel/test-dgram-membership.js"
+                         "test/parallel/test-cluster-master-error.js"
                          "test/parallel/test-cluster-master-kill.js"
                          "test/parallel/test-npm-install.js"
-                         "test/parallel/test-stdout-close-unref.js"
                          "test/sequential/test-child-process-emfile.js"))
              #t))
          (replace 'configure
@@ -101,22 +104,15 @@
                              (string-append (assoc-ref inputs "python")
                                             "/bin/python")
                              "configure" flags)))))
-         (replace 'patch-shebangs
-           (lambda* (#:key outputs #:allow-other-keys #:rest all)
-             ;; Work around <http://bugs.gnu.org/23723>.
-             (let* ((patch  (assoc-ref %standard-phases 'patch-shebangs))
-                    (npm    (string-append (assoc-ref outputs "out")
-                                           "/bin/npm"))
+         (add-after 'patch-shebangs 'patch-npm-shebang
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((bindir (string-append (assoc-ref outputs "out")
+                                           "/bin"))
+                    (npm    (string-append bindir "/npm"))
                     (target (readlink npm)))
-               (and (apply patch all)
-                    (with-directory-excursion (dirname npm)
-                      ;; Turn NPM into a symlink to TARGET again, which 'npm'
-                      ;; relies on for the resolution of relative file names
-                      ;; in JS files.
-                      (delete-file target)
-                      (rename-file npm target)
-                      (symlink target npm)
-                      #t))))))))
+               (with-directory-excursion bindir
+                 (patch-shebang target (list bindir))
+                 #t)))))))
     (native-inputs
      `(("python" ,python-2)
        ("perl" ,perl)
diff --git a/gnu/packages/patches/artanis-fix-Makefile.in.patch b/gnu/packages/patches/artanis-fix-Makefile.in.patch
new file mode 100644
index 0000000000..7e4800d364
--- /dev/null
+++ b/gnu/packages/patches/artanis-fix-Makefile.in.patch
@@ -0,0 +1,70 @@
+Applies until an Artanis release comes with the following patches
+applied:
+* <https://savannah.gnu.org/patch/?func=detailitem&item_id=9130>
+* <https://savannah.gnu.org/patch/?func=detailitem&item_id=9131>
+diff -ru artanis-0.1.2/Makefile.in artanis-0.1.2.1/Makefile.in
+--- artanis-0.1.2/Makefile.in	2016-02-10 12:35:18.800490571 -0200
++++ artanis-0.1.2.1/Makefile.in	2016-10-15 19:44:35.140907367 -0300
+@@ -19,9 +19,18 @@
+ MOD_OBJ := $(OBJ)/artanis
+ BIN := bin
+ TEMP_LIB_PATH := $(OBJ)
+-MOD_PATH := $(shell guile -c "(display (%site-dir))")
+ MOD_COMPILED_PATH := $(shell guile -c "(display (%site-ccache-dir))")
++
++ifdef DESTDIR
++INFO_DIR := $(DESTDIR)/share/info/
++MOD_PATH := $(DESTDIR)/$(shell guile -c "(display (%site-dir))")
+ MOD_TARGET_PATH := $(DESTDIR)/$(MOD_COMPILED_PATH)
++else
++INFO_DIR := $(PREFIX)/share/info/
++MOD_PATH := $(shell guile -c "(display (%site-dir))")
++MOD_TARGET_PATH := $(MOD_COMPILED_PATH)
++endif
++
+ GUILE_CFLAGS := -Wunsupported-warning -Wunbound-variable -Warity-mismatch -Wduplicate-case-datum -Wbad-case-datum -Wformat
+ GUILEC := GUILE_LOAD_COMPILED_PATH=$(TEMP_LIB_PATH) guild compile $(GUILE_CFLAGS)
+ ARTANIS_ETC := $(SRC)/etc/artanis
+@@ -36,7 +45,6 @@
+ GENDOCS :=$(BUILD_AUX)/gendocs.sh
+ CHK_TEXINFO := $(BUILD_AUX)/check_texinfo.scm
+ CP := cp -frd -P
+-INFO_DIR := $(PREFIX)/share/info/
+ TARBALL_NAME := artanis-$(VERSION)
+ TMP_DIR := $(shell mktemp -d)
+ ANN_GEN := $(BUILD_AUX)/announce-gen
+@@ -124,18 +132,29 @@
+ 	-rm -f config.{h,log}
+ 
+ install: $(ALL_TARGETS)
+-	mkdir -p $(DESTDIR)/$(MOD_PATH)
+-	$(CP) $(MOD) $(DESTDIR)/$(MOD_PATH)/
++	mkdir -p $(MOD_PATH)
++	$(CP) $(MOD) $(MOD_PATH)/
+ 	mkdir -p $(MOD_TARGET_PATH)/
+ 	$(CP) $(MOD_OBJ) $(MOD_TARGET_PATH)/
++
++ifdef DESTDIR
+ 	$(CP) $(ARTANIS_ETC) $(DESTDIR)/etc/
+ 	$(CP) $(ARTANIS_PAGES) $(DESTDIR)/etc/artanis/
+-	mkdir -p $(DESTDIR)/$(PREFIX)/bin/
+-	$(CP) $(BIN)/art $(DESTDIR)/$(PREFIX)/bin/
++	mkdir -p $(DESTDIR)/bin/
++	$(CP) $(BIN)/art $(DESTDIR)/bin/
+ 	mkdir -p $(DESTDIR)/etc/bash_completion.d/
+ 	$(CP) $(CMDCOMP) $(DESTDIR)/etc/bash_completion.d/
++else
++	$(CP) $(ARTANIS_ETC) $(PREFIX)/etc/
++	$(CP) $(ARTANIS_PAGES) $(PREFIX)/etc/artanis/
++	mkdir -p $(PREFIX)/bin/
++	$(CP) $(BIN)/art $(PREFIX)/bin/
++	mkdir -p $(PREFIX)/etc/bash_completion.d/
++	$(CP) $(CMDCOMP) $(PREFIX)/etc/bash_completion.d/
++endif
++
+ 	if [ -e /etc/bash.bashrc ]; then source /etc/bash.bashrc; fi
+-	if [ -e artanis.info ]; then mkdir -p $(DESTDIR)/$(INFO_DIR); $(CP) artanis.info $(DESTDIR)/$(INFO_DIR)/; fi
++	if [ -e artanis.info ]; then mkdir -p $(INFO_DIR); $(CP) artanis.info $(INFO_DIR)/; fi
+ 
+ distclean: distclean-mk clean clean-config clean-tarball
+ 	-rm -f $(BIN)/art
diff --git a/gnu/packages/patches/freeimage-CVE-2016-5684.patch b/gnu/packages/patches/freeimage-CVE-2016-5684.patch
new file mode 100644
index 0000000000..2fc02d7b0d
--- /dev/null
+++ b/gnu/packages/patches/freeimage-CVE-2016-5684.patch
@@ -0,0 +1,34 @@
+From: Debian Science Maintainers
+ <debian-science-maintainers@lists.alioth.debian.org>
+Date: Mon, 10 Oct 2016 08:22:44 +0100
+Subject: CVE-2016-5684
+
+---
+ Source/FreeImage/PluginXPM.cpp | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/Source/FreeImage/PluginXPM.cpp b/Source/FreeImage/PluginXPM.cpp
+index a698321..cc7bd07 100644
+--- a/Source/FreeImage/PluginXPM.cpp
++++ b/Source/FreeImage/PluginXPM.cpp
+@@ -181,6 +181,11 @@ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
+ 		}
+ 		free(str);
+ 
++		// check info string
++		if((width <= 0) || (height <= 0) || (colors <= 0) || (cpp <= 0)) {
++			throw "Improperly formed info string";
++		}
++
+         if (colors > 256) {
+ 			dib = FreeImage_AllocateHeader(header_only, width, height, 24, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK);
+ 		} else {
+@@ -193,7 +198,7 @@ Load(FreeImageIO *io, fi_handle handle, int page, int flags, void *data) {
+ 			FILE_RGBA rgba;
+ 
+ 			str = ReadString(io, handle);
+-			if(!str)
++			if(!str || (strlen(str) < (size_t)cpp))
+ 				throw "Error reading color strings";
+ 
+ 			std::string chrs(str,cpp); //create a string for the color chars using the first cpp chars
diff --git a/gnu/packages/patches/gcc-6-arm-none-eabi-multilib.patch b/gnu/packages/patches/gcc-6-arm-none-eabi-multilib.patch
new file mode 100644
index 0000000000..5c3e21975b
--- /dev/null
+++ b/gnu/packages/patches/gcc-6-arm-none-eabi-multilib.patch
@@ -0,0 +1,206 @@
+From Anatol Pomozov <anatol.pomozov@gmail.com>
+Taken from Arch Linux arm-none-eabi-gcc package.
+
+Modified version of ARM patch https://gcc.gnu.org/ml/gcc-patches/2012-05/msg00083/enable-with-multilib-list-for-arm.patch
+
+This patch enables the use of the "--with-multilib-list" flag, when
+configuring GCC 6.2.  It makes GCC 6 compatible with the configure flags used
+in the "gcc-arm-none-eabi-4.9" package.
+
+
+diff --git a/gcc/Makefile.in b/gcc/Makefile.in
+index 4ab7405..6e1ea2c 100644
+--- a/gcc/Makefile.in
++++ b/gcc/Makefile.in
+@@ -535,6 +535,7 @@ lang_opt_files=@lang_opt_files@ $(srcdir)/c-family/c.opt $(srcdir)/common.opt
+ lang_specs_files=@lang_specs_files@
+ lang_tree_files=@lang_tree_files@
+ target_cpu_default=@target_cpu_default@
++with_multilib_list=@with_multilib_list@
+ OBJC_BOEHM_GC=@objc_boehm_gc@
+ extra_modes_file=@extra_modes_file@
+ extra_opt_files=@extra_opt_files@
+diff --git a/gcc/config.gcc b/gcc/config.gcc
+index cb08a5c..7bded02 100644
+--- a/gcc/config.gcc
++++ b/gcc/config.gcc
+@@ -1072,7 +1072,7 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
+ 	case ${target} in
+ 	arm*-*-eabi*)
+ 	  tm_file="$tm_file newlib-stdint.h"
+-	  tmake_file="${tmake_file} arm/t-bpabi"
++	  tmake_file="${tmake_file} arm/t-bpabi arm/t-mlibs"
+ 	  use_gcc_stdint=wrap
+ 	  ;;
+ 	arm*-*-rtems*)
+@@ -3684,42 +3684,6 @@ case "${target}" in
+ 			exit 1
+ 		fi
+ 
+-		# Add extra multilibs
+-		if test "x$with_multilib_list" != x; then
+-			arm_multilibs=`echo $with_multilib_list | sed -e 's/,/ /g'`
+-			for arm_multilib in ${arm_multilibs}; do
+-				case ${arm_multilib} in
+-				aprofile)
+-				# Note that arm/t-aprofile is a
+-				# stand-alone make file fragment to be
+-				# used only with itself.  We do not
+-				# specifically use the
+-				# TM_MULTILIB_OPTION framework because
+-				# this shorthand is more
+-				# pragmatic. Additionally it is only
+-				# designed to work without any
+-				# with-cpu, with-arch with-mode
+-				# with-fpu or with-float options.
+-					if test "x$with_arch" != x \
+-					    || test "x$with_cpu" != x \
+-					    || test "x$with_float" != x \
+-					    || test "x$with_fpu" != x \
+-					    || test "x$with_mode" != x ; then
+-					    echo "Error: You cannot use any of --with-arch/cpu/fpu/float/mode with --with-multilib-list=aprofile" 1>&2
+-					    exit 1
+-					fi
+-					tmake_file="${tmake_file} arm/t-aprofile"
+-					break
+-					;;
+-				default)
+-					;;
+-				*)
+-					echo "Error: --with-multilib-list=${with_multilib_list} not supported." 1>&2
+-					exit 1
+-					;;
+-				esac
+-			done
+-		fi
+ 		;;
+ 
+ 	fr*-*-*linux*)
+diff --git a/gcc/config/arm/t-mlibs b/gcc/config/arm/t-mlibs
+new file mode 100644
+index 0000000..5720cf7
+--- /dev/null
++++ b/gcc/config/arm/t-mlibs
+@@ -0,0 +1,89 @@
++# A set of predefined MULTILIB which can be used for different ARM targets.
++# Via the configure option --with-multilib-list, user can customize the
++# final MULTILIB implementation.
++
++comma := ,
++space :=
++space +=
++
++MULTILIB_OPTIONS   = mthumb/marm
++MULTILIB_DIRNAMES  = thumb arm
++MULTILIB_OPTIONS  += march=armv6s-m/march=armv7-m/march=armv7e-m/march=armv7
++MULTILIB_DIRNAMES += armv6-m armv7-m armv7e-m armv7-ar
++MULTILIB_OPTIONS  += mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES += softfp fpu
++MULTILIB_OPTIONS  += mfpu=fpv4-sp-d16/mfpu=vfpv3-d16
++MULTILIB_DIRNAMES += fpv4-sp-d16 vfpv3-d16
++
++MULTILIB_MATCHES   = march?armv6s-m=mcpu?cortex-m0
++MULTILIB_MATCHES  += march?armv6s-m=mcpu?cortex-m0plus
++MULTILIB_MATCHES  += march?armv6s-m=mcpu?cortex-m1
++MULTILIB_MATCHES  += march?armv6s-m=march?armv6-m
++MULTILIB_MATCHES  += march?armv7-m=mcpu?cortex-m3
++MULTILIB_MATCHES  += march?armv7e-m=mcpu?cortex-m4
++MULTILIB_MATCHES  += march?armv7e-m=mcpu?cortex-m7
++MULTILIB_MATCHES  += march?armv7=march?armv7-r
++MULTILIB_MATCHES  += march?armv7=march?armv7-a
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r4
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r4f
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r5
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-r7
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a5
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a7
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a8
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a9
++MULTILIB_MATCHES  += march?armv7=mcpu?cortex-a15
++MULTILIB_MATCHES  += mfpu?fpv4-sp-d16=mfpu?fpv5-sp-d16
++MULTILIB_MATCHES  += mfpu?fpv4-sp-d16=mfpu?fpv5-d16
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3-fp16
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3-d16-fp16
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3xd
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv3xd-fp16
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv4
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?vfpv4-d16
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?neon
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?neon-fp16
++MULTILIB_MATCHES  += mfpu?vfpv3-d16=mfpu?neon-vfpv4
++
++MULTILIB_EXCEPTIONS =
++MULTILIB_REUSE =
++
++MULTILIB_REQUIRED  = mthumb
++MULTILIB_REQUIRED += marm
++MULTILIB_REQUIRED += mfloat-abi=hard
++
++MULTILIB_OSDIRNAMES  = mthumb=!thumb
++MULTILIB_OSDIRNAMES += marm=!arm
++MULTILIB_OSDIRNAMES += mfloat-abi.hard=!fpu
++
++ifneq (,$(findstring armv6-m,$(subst $(comma),$(space),$(with_multilib_list))))
++MULTILIB_REQUIRED   += mthumb/march=armv6s-m
++MULTILIB_OSDIRNAMES += mthumb/march.armv6s-m=!armv6-m
++endif
++
++ifneq (,$(findstring armv7-m,$(subst $(comma),$(space),$(with_multilib_list))))
++MULTILIB_REQUIRED   += mthumb/march=armv7-m
++MULTILIB_OSDIRNAMES += mthumb/march.armv7-m=!armv7-m
++endif
++
++ifneq (,$(findstring armv7e-m,$(subst $(comma),$(space),$(with_multilib_list))))
++MULTILIB_REQUIRED   += mthumb/march=armv7e-m
++MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=softfp/mfpu=fpv4-sp-d16
++MULTILIB_REQUIRED   += mthumb/march=armv7e-m/mfloat-abi=hard/mfpu=fpv4-sp-d16
++MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m=!armv7e-m
++MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.hard/mfpu.fpv4-sp-d16=!armv7e-m/fpu
++MULTILIB_OSDIRNAMES += mthumb/march.armv7e-m/mfloat-abi.softfp/mfpu.fpv4-sp-d16=!armv7e-m/softfp
++endif
++
++ifneq (,$(filter armv7 armv7-r armv7-a,$(subst $(comma),$(space),$(with_multilib_list))))
++MULTILIB_REQUIRED   += mthumb/march=armv7
++MULTILIB_REQUIRED   += mthumb/march=armv7/mfloat-abi=softfp/mfpu=vfpv3-d16
++MULTILIB_REQUIRED   += mthumb/march=armv7/mfloat-abi=hard/mfpu=vfpv3-d16
++MULTILIB_OSDIRNAMES += mthumb/march.armv7=!armv7-ar/thumb
++MULTILIB_OSDIRNAMES += mthumb/march.armv7/mfloat-abi.hard/mfpu.vfpv3-d16=!armv7-ar/thumb/fpu
++MULTILIB_OSDIRNAMES += mthumb/march.armv7/mfloat-abi.softfp/mfpu.vfpv3-d16=!armv7-ar/thumb/softfp
++MULTILIB_REUSE      += mthumb/march.armv7=marm/march.armv7
++MULTILIB_REUSE      += mthumb/march.armv7/mfloat-abi.softfp/mfpu.vfpv3-d16=marm/march.armv7/mfloat-abi.softfp/mfpu.vfpv3-d16
++MULTILIB_REUSE      += mthumb/march.armv7/mfloat-abi.hard/mfpu.vfpv3-d16=marm/march.armv7/mfloat-abi.hard/mfpu.vfpv3-d16
++endif
+diff --git a/gcc/configure b/gcc/configure
+index 9523773..24952e3 100755
+--- a/gcc/configure
++++ b/gcc/configure
+@@ -763,6 +763,7 @@ SET_MAKE
+ accel_dir_suffix
+ real_target_noncanonical
+ enable_as_accelerator
++with_multilib_list
+ REPORT_BUGS_TEXI
+ REPORT_BUGS_TO
+ PKGVERSION
+@@ -7462,6 +7463,7 @@ else
+ fi
+ 
+ 
++
+ # -------------------------
+ # Checks for other programs
+ # -------------------------
+diff --git a/gcc/configure.ac b/gcc/configure.ac
+index 68b0ee8..f8a1097 100644
+--- a/gcc/configure.ac
++++ b/gcc/configure.ac
+@@ -925,6 +925,7 @@ AC_ARG_WITH(multilib-list,
+ [AS_HELP_STRING([--with-multilib-list], [select multilibs (AArch64, SH and x86-64 only)])],
+ :,
+ with_multilib_list=default)
++AC_SUBST(with_multilib_list)
+ 
+ # -------------------------
+ # Checks for other programs
+
diff --git a/gnu/packages/patches/gcc-6-cross-environment-variables.patch b/gnu/packages/patches/gcc-6-cross-environment-variables.patch
new file mode 100644
index 0000000000..285e78f162
--- /dev/null
+++ b/gnu/packages/patches/gcc-6-cross-environment-variables.patch
@@ -0,0 +1,65 @@
+Search path environment variables for cross-compilers.  See the discussion
+at <http://gcc.gnu.org/ml/gcc/2013-02/msg00124.html>.
+
+Note: Touch 'C_INCLUDE_PATH' et al. rather than 'CPATH', as discussed
+at <http://bugs.gnu.org/22186>.
+
+--- a/gcc/incpath.c
++++ b/gcc/incpath.c
+@@ -461,8 +461,8 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 			 int stdinc, int cxx_stdinc, int verbose)
+ {
+   static const char *const lang_env_vars[] =
+-    { "C_INCLUDE_PATH", "CPLUS_INCLUDE_PATH",
+-      "OBJC_INCLUDE_PATH", "OBJCPLUS_INCLUDE_PATH" };
++    { "CROSS_C_INCLUDE_PATH", "CROSS_CPLUS_INCLUDE_PATH",
++      "CROSS_OBJC_INCLUDE_PATH", "CROSS_OBJCPLUS_INCLUDE_PATH" };
+   cpp_options *cpp_opts = cpp_get_options (pfile);
+   size_t idx = (cpp_opts->objc ? 2: 0);
+ 
+@@ -473,7 +473,7 @@ register_include_chains (cpp_reader *pfile, const char *sysroot,
+ 
+   /* CPATH and language-dependent environment variables may add to the
+      include chain.  */
+-  add_env_var_paths ("CPATH", BRACKET);
++  add_env_var_paths ("CROSS_CPATH", BRACKET);
+   add_env_var_paths (lang_env_vars[idx], SYSTEM);
+ 
+   target_c_incpath.extra_pre_includes (sysroot, iprefix, stdinc);
+diff --git a/gcc/system.h b/gcc/system.h
+index 42bc509..af3b9ad 100644
+--- a/gcc/system.h
++++ b/gcc/system.h
+@@ -1063,4 +1063,6 @@ helper_const_non_const_cast (const char *p)
+ /* Get definitions of HOST_WIDE_INT and HOST_WIDEST_INT.  */
+ #include "hwint.h"
+ 
++#define LIBRARY_PATH_ENV "CROSS_LIBRARY_PATH"
++
+ #endif /* ! GCC_SYSTEM_H */
+diff --git a/gcc/tlink.c b/gcc/tlink.c
+index bc358b8..ad6242f 100644
+--- a/gcc/tlink.c
++++ b/gcc/tlink.c
+@@ -458,7 +458,7 @@ recompile_files (void)
+   file *f;
+ 
+   putenv (xstrdup ("COMPILER_PATH="));
+-  putenv (xstrdup ("LIBRARY_PATH="));
++  putenv (xstrdup (LIBRARY_PATH_ENV "="));
+ 
+   while ((f = file_pop ()) != NULL)
+     {
+diff --git a/gcc/gcc.c b/gcc/gcc.c
+index 0f042b0..c23fb0b 100644
+--- a/gcc/gcc.c
++++ b/gcc/gcc.c
+@@ -4264,7 +4264,7 @@ process_command (unsigned int decoded_options_count,
+     }
+ 
+   temp = env.get (LIBRARY_PATH_ENV);
+-  if (temp && *cross_compile == '0')
++  if (temp)
+     {
+       const char *startp, *endp;
+       char *nstore = (char *) alloca (strlen (temp) + 3);
diff --git a/gnu/packages/patches/gd-CVE-2016-8670.patch b/gnu/packages/patches/gd-CVE-2016-8670.patch
new file mode 100644
index 0000000000..39ee99ac31
--- /dev/null
+++ b/gnu/packages/patches/gd-CVE-2016-8670.patch
@@ -0,0 +1,38 @@
+Fix CVE-2016-8670 (buffer overflow in dynamicGetbuf()):
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8670
+http://seclists.org/oss-sec/2016/q4/138
+
+Patch copied from upstream source repository:
+
+https://github.com/libgd/libgd/commit/53110871935244816bbb9d131da0bccff734bfe9
+
+From 53110871935244816bbb9d131da0bccff734bfe9 Mon Sep 17 00:00:00 2001
+From: "Christoph M. Becker" <cmbecker69@gmx.de>
+Date: Wed, 12 Oct 2016 11:15:32 +0200
+Subject: [PATCH] Avoid potentially dangerous signed to unsigned conversion
+
+We make sure to never pass a negative `rlen` as size to memcpy(). See
+also <https://bugs.php.net/bug.php?id=73280>.
+
+Patch provided by Emmanuel Law.
+---
+ src/gd_io_dp.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/gd_io_dp.c b/src/gd_io_dp.c
+index 135eda3..228bfa5 100644
+--- a/src/gd_io_dp.c
++++ b/src/gd_io_dp.c
+@@ -276,7 +276,7 @@ static int dynamicGetbuf(gdIOCtxPtr ctx, void *buf, int len)
+ 	if(remain >= len) {
+ 		rlen = len;
+ 	} else {
+-		if(remain == 0) {
++		if(remain <= 0) {
+ 			/* 2.0.34: EOF is incorrect. We use 0 for
+ 			 * errors and EOF, just like fileGetbuf,
+ 			 * which is a simple fread() wrapper.
+-- 
+2.10.1
+
diff --git a/gnu/packages/patches/hdf4-architectures.patch b/gnu/packages/patches/hdf4-architectures.patch
new file mode 100644
index 0000000000..5549f11277
--- /dev/null
+++ b/gnu/packages/patches/hdf4-architectures.patch
@@ -0,0 +1,579 @@
+Copied from Debian.
+
+Description: Support additional architectures.
+Author: Francesco Paolo Lovergine <frankie@debian.org>
+
+--- a/hdf/src/hdfi.h
++++ b/hdf/src/hdfi.h
+@@ -48,6 +48,7 @@
+ /*      8 - Cray IEEE                                                       */
+ /*          (i.e. Big-Endian, all 64-bit architecture w/IEEE Floats)        */
+ /*--------------------------------------------------------------------------*/
++#define     DFMT_S390           0x1111
+ #define     DFMT_SUN            0x1111 
+ #define     DFMT_SUN_INTEL      0x4441
+ #define     DFMT_ALLIANT        0x1111
+@@ -62,6 +63,7 @@
+ #define     DFMT_CTSS           0x3331
+ #define     DFMT_VAX            0x2221
+ #define     DFMT_MIPSEL         0x4441
++#define     DFMT_MIPSEB         0x1111
+ #define     DFMT_PC             0x4441
+ #define     DFMT_APPLE          0x1111
+ #define     DFMT_APPLE_INTEL    0x4441
+@@ -75,6 +77,12 @@
+ #define     DFMT_IA64           0x4441
+ #define     DFMT_LINUX64        0x4441
+ #define     DFMT_POWERPC64      0x1111
++#define     DFMT_POWERPC64LE    0x4441
++#define     DFMT_ARMV4L         0x4441
++#define     DFMT_AARCH64        0x4441
++#define     DFMT_X86_64         0x4441
++#define     DFMT_SH		0x4441
++#define     DFMT_SHEB		0x1111
+ 
+ /* I/O library constants */
+ #define UNIXUNBUFIO 1
+@@ -288,7 +296,7 @@ typedef int               hdf_pint_t;
+ 
+ #endif /* IBM6000 */
+ 
+-#if defined(HP9000) || (!defined(__convexc__) && (defined(hpux) || defined(__hpux)))
++#if defined(HP9000) || (!defined(__convexc__) && (defined(hpux) || defined(__hpux) || defined(__hppa__)))
+ 
+ #ifndef HP9000
+ #define HP9000
+@@ -347,6 +355,10 @@ typedef int               hdf_pint_t;
+ /*  what each does */
+ #define JMEMSYS         MEM_ANSI
+ 
++#ifdef __linux__
++#define FNAME_POST_UNDERSCORE
++#endif
++
+ #endif /* HP9000 */
+ 
+ 
+@@ -666,6 +678,410 @@ typedef int               hdf_pint_t;
+ #endif /* !(defined(__APPLE__)) */
+ 
+ /*-----------------------------------------------------*/
++#if defined (__linux__) && defined (__mc68000__)
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#define DF_MT             DFMT_MOTOROLA
++
++#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
++typedef void              VOID;
++#endif  /* end VOID */
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef char              int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++typedef long int          int32;
++typedef unsigned long int uint32;
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef long              intf;     /* size of INTEGERs in Fortran compiler */
++typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++
++#ifdef  HAVE_FMPOOL
++#define FILELIB PAGEBUFIO  /* enable page buffering */
++#else
++#define FILELIB UNIXBUFIO
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/m68k */
++
++#if defined (__linux__) && defined (__sparc__)
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#define DF_MT             DFMT_SUN
++
++#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
++typedef void              VOID;
++#endif  /* end VOID */
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef char              int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++#ifdef _LP64 /* 64-bit environment */
++typedef int               int32;
++typedef unsigned int      uint32;
++#else /* 32-bit environment */
++typedef long int          int32;
++typedef unsigned long int uint32;
++#endif
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef long              intf;     /* size of INTEGERs in Fortran compiler */
++#ifdef _LP64 /* 64-bit environment */
++typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
++#else /* 32-bit environment */
++typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
++#endif
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++
++#ifdef  HAVE_FMPOOL
++#define FILELIB PAGEBUFIO  /* enable page buffering */
++#else
++#define FILELIB UNIXBUFIO
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/Sparc */
++
++#if defined (__linux__) && defined (__powerpc__) && !defined(__powerpc64__)
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#define DF_MT             DFMT_MOTOROLA
++
++#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
++typedef void              VOID;
++#endif  /* end VOID */
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef signed char       int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++typedef long int          int32;
++typedef unsigned long int uint32;
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef long              intf;     /* size of INTEGERs in Fortran compiler */
++typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++
++#ifdef  HAVE_FMPOOL
++#define FILELIB PAGEBUFIO  /* enable page buffering */
++#else
++#define FILELIB UNIXBUFIO
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/powerpc */
++
++#if defined (__linux__) && defined (__s390__)
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#define DF_MT             DFMT_S390
++
++#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
++typedef void              VOID;
++#endif  /* end VOID */
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef signed char       int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++#ifdef _LP64 /* 64-bit environment */
++typedef int               int32;
++typedef unsigned int      uint32;
++#else /* 32-bit environment */
++typedef long int          int32;
++typedef unsigned long int uint32;
++#endif
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef long              intf;     /* size of INTEGERs in Fortran compiler */
++#ifdef _LP64 /* 64-bit environment */
++typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
++#else /* 32-bit environment */
++typedef int               hdf_pint_t;   /* an integer the same size as a pointer */
++#endif
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++
++#ifdef  HAVE_FMPOOL
++#define FILELIB PAGEBUFIO  /* enable page buffering */
++#else
++#define FILELIB UNIXBUFIO
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/s390 */
++
++#if defined (__linux__) && (defined (__MIPSEB__) || defined(__MIPSEL__))
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#if defined (__MIPSEB__)
++#define DF_MT             DFMT_MIPSEB
++#elif defined(__MIPSEL__)
++#define DF_MT		  DFMT_MIPSEL
++#endif
++
++#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
++typedef void              VOID;
++#endif  /* end VOID */
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef signed char       int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++typedef int          int32;
++typedef unsigned int uint32;
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef long              intf;     /* size of INTEGERs in Fortran compiler */
++typedef long int               hdf_pint_t;   /* an integer the same size as a pointer */
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++
++#ifdef  HAVE_FMPOOL
++#define FILELIB PAGEBUFIO  /* enable page buffering */
++#else
++#define FILELIB UNIXBUFIO
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/mips */
++
++#if defined (__linux__) && defined (__arm__)
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#define DF_MT             DFMT_ARMV4L
++
++#ifndef VOID    /* The stupid windows.h header file uses a #define instead of a typedef */
++typedef void              VOID;
++#endif  /* end VOID */
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef signed char       int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++typedef int          int32;
++typedef unsigned int uint32;
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef long              intf;     /* size of INTEGERs in Fortran compiler */
++typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++
++#ifdef  HAVE_FMPOOL
++#define FILELIB PAGEBUFIO  /* enable page buffering */
++#else
++#define FILELIB UNIXBUFIO
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/arm */
++
++#if defined (__linux__) && defined (__aarch64__)
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#define DF_MT             DFMT_AARCH64
++
++typedef void              VOID;
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef signed char       int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++typedef int               int32;
++typedef unsigned int      uint32;
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef int               intf;     /* size of INTEGERs in Fortran compiler */
++typedef long              hdf_pint_t;   /* an integer the same size as a pointer */
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++#define FILELIB UNIXBUFIO
++
++#ifndef BIG_LONGS
++#define BIG_LONGS
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/aarch64 */
++
+ #if defined(NEXT) || defined(NeXT)
+ 
+ #ifndef NEXT
+@@ -928,7 +1344,11 @@ Please check your Makefile.
+ 
+ #include <sys/file.h>               /* for unbuffered i/o stuff */
+ #include <sys/stat.h>
+-#define DF_MT             DFMT_POWERPC64
++#ifdef __LITTLE_ENDIAN__
++#define DF_MT DFMT_POWERPC64LE
++#else
++#define DF_MT DFMT_POWERPC64
++#endif
+ typedef void              VOID;
+ typedef void              *VOIDP;
+ typedef char              *_fcd;
+@@ -952,6 +1372,11 @@ typedef long              hdf_pint_t;
+ #define _fcdtocp(desc) (desc)
+ #define FILELIB UNIXBUFIO
+ 
++#ifndef BIG_LONGS
++#define BIG_LONGS
++#endif
++
++
+ /* JPEG #define's - Look in the JPEG docs before changing - (Q) */
+ 
+ /* Determine the memory manager we are going to use. Valid values are: */
+@@ -1097,6 +1522,8 @@ typedef long              hdf_pint_t;
+ #define _fcdtocp(desc) (desc)
+ #define FILELIB UNIXBUFIO
+ 
++#define BIG_LONGS
++
+ /* JPEG #define's - Look in the JPEG docs before changing - (Q) */
+ 
+ /* Determine the memory manager we are going to use. Valid values are: */
+@@ -1111,6 +1538,66 @@ typedef long              hdf_pint_t;
+ 
+ #endif /* IA64 */
+ 
++/* Renesas SuperH SH3(little/big)/SH4(little/big) */
++#if defined (__linux__) && defined(__sh__)
++
++#ifdef GOT_MACHINE
++If you get an error on this line more than one machine type has been defined.
++Please check your Makefile.
++#endif
++#define GOT_MACHINE 1
++
++#include <fcntl.h>
++#include <sys/types.h>      /* for unbuffered file I/O */
++#include <sys/stat.h>
++#include <unistd.h>
++#include <ctype.h>          /* for character macros */
++
++#if defined (__LITTLE_ENDIAN__)
++#define DF_MT             DFMT_SH
++#elif defined(__BIG_ENDIAN__)
++#define DF_MT		  DFMT_SHEB
++#endif
++
++#ifndef VOID /* The stupid windows.h header file uses a #define instead of a typedef */
++typedef void              VOID;
++#endif  /* end VOID */
++
++typedef void *            VOIDP;
++typedef char *            _fcd;
++typedef char              char8;
++typedef unsigned char     uchar8;
++typedef signed char       int8;
++typedef unsigned char     uint8;
++typedef short int         int16;
++typedef unsigned short int uint16;
++typedef long int          int32;
++typedef unsigned long int uint32;
++typedef int               intn;
++typedef unsigned int      uintn;
++typedef float             float32;
++typedef double            float64;
++typedef long              intf;
++typedef int               hdf_pint_t;
++#define FNAME_POST_UNDERSCORE
++#define _fcdtocp(desc) (desc)
++
++#ifdef  HAVE_FMPOOL
++#define FILELIB PAGEBUFIO  /* enable page buffering */
++#else
++#define FILELIB UNIXBUFIO
++#endif
++
++/* JPEG #define's - Look in the JPEG docs before changing - (Q) */
++/* Determine the memory manager we are going to use. Valid values are: */
++/*  MEM_DOS, MEM_ANSI, MEM_NAME, MEM_NOBS.  See the JPEG docs for details on */
++/*  what each does */
++#define JMEMSYS         MEM_ANSI
++#define HAVE_STDC
++#define INCLUDES_ARE_ANSI
++
++#endif /* Linux/sh */
++
+ #ifndef GOT_MACHINE
+ No machine type has been defined.  Your Makefile needs to have someing like
+ -DSUN or -DUNICOS in order for the HDF internal structures to be defined
+--- a/hdf/src/hconv.h
++++ b/hdf/src/hconv.h
+@@ -59,7 +59,7 @@
+ /* CONSTANT DEFINITIONS                                                      */
+ /*****************************************************************************/
+ /* Generally Big-Endian machines */
+-#if !defined(INTEL86) && !defined(MIPSEL) && !defined(DEC_ALPHA) && !defined(I860) && !defined(SUN386) && !(defined(__ia64) && !(defined(hpux) || defined(__hpux))) && !defined(__x86_64__)
++#if !defined(INTEL86) && !defined(MIPSEL) && !defined(DEC_ALPHA) && !defined(I860) && !defined(SUN386) && !(defined(__ia64) && !(defined(hpux) || defined(__hpux))) && !defined(__x86_64__) && !(defined(__powerpc__) && defined(__LITTLE_ENDIAN__)) && !defined(__aarch64__) && !defined(__ARM_EABI__)
+ #       define UI8_IN     DFKnb1b   /* Unsigned Integer, 8 bits */
+ #       define UI8_OUT    DFKnb1b
+ #       define SI16_IN    DFKnb2b   /* S = Signed */
diff --git a/gnu/packages/patches/irrlicht-mesa-10.patch b/gnu/packages/patches/irrlicht-mesa-10.patch
deleted file mode 100644
index b567c384a3..0000000000
--- a/gnu/packages/patches/irrlicht-mesa-10.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-Patch to work around incompatibility between irrlicht-1.8.1 and mesa-10.x.
-Upstream bug (fixed in trunk): http://sourceforge.net/p/irrlicht/bugs/429/
-Upstream fix: http://sourceforge.net/p/irrlicht/code/4810
-This patch copied from:
-http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/dev-games/irrlicht/files/irrlicht-1.8.1-mesa-10.x.patch?view=markup
-
-From 244d00280c1b082ca164f92337773e9e4e1a3898 Mon Sep 17 00:00:00 2001
-From: hiker <henrichsjoerg@mgail.com>
-Date: Wed, 26 Feb 2014 11:13:03 +1100
-Subject: [PATCH] Applied patch from jpirie for fixing mesa 10 compilation
- problems.
-
---- irrlicht-1.8.1/source/Irrlicht/COpenGLExtensionHandler.h
-+++ irrlicht-1.8.1/source/Irrlicht/COpenGLExtensionHandler.h
-@@ -21,6 +21,7 @@
- 	#endif

- 	#include <GL/gl.h>

- 	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)

-+		typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);

- 		#include "glext.h"

- 	#endif

- 	#include "wglext.h"

-@@ -35,6 +36,7 @@
- 	#endif

- 	#include <OpenGL/gl.h>

- 	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)

-+		typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);

- 		#include "glext.h"

- 	#endif

- #elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && !defined(_IRR_COMPILE_WITH_X11_DEVICE_)

-@@ -48,6 +50,7 @@
- 	#define NO_SDL_GLEXT

- 	#include <SDL/SDL_video.h>

- 	#include <SDL/SDL_opengl.h>

-+	typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);

- 	#include "glext.h"

- #else

- 	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)

-@@ -60,6 +63,7 @@
- 	#include <GL/gl.h>

- 	#include <GL/glx.h>

- 	#if defined(_IRR_OPENGL_USE_EXTPOINTER_)

-+	typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);

- 	#include "glext.h"

- 	#undef GLX_ARB_get_proc_address // avoid problems with local glxext.h

- 	#include "glxext.h"

diff --git a/gnu/packages/patches/node-9077.patch b/gnu/packages/patches/node-9077.patch
new file mode 100644
index 0000000000..e57f5caac7
--- /dev/null
+++ b/gnu/packages/patches/node-9077.patch
@@ -0,0 +1,30 @@
+From fc164acbbb700fd50ab9c04b47fc1b2687e9c0f4 Mon Sep 17 00:00:00 2001
+From: "Bradley T. Hughes" <bradleythughes@fastmail.fm>
+Date: Thu, 13 Oct 2016 07:38:38 +0000
+Subject: [PATCH] build: add -DZLIB_CONST when building with --shared-zlib
+
+Commit 782620f added the define only when building with the bundled
+zlib. Using a shared zlib results in build breakage:
+
+../src/inspector_agent.cc:179:16: error: assigning to 'Bytef *' (aka 'unsigned char *') from incompatible type
+      'const uint8_t *' (aka 'const unsigned char *')
+  strm.next_in = PROTOCOL_JSON + 3;
+               ^ ~~~~~~~~~~~~~~~~~
+1 error generated.
+---
+ node.gyp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/node.gyp b/node.gyp
+index fa98547..d799ba1 100644
+--- a/node.gyp
++++ b/node.gyp
+@@ -480,6 +480,8 @@
+         }],
+         [ 'node_shared_zlib=="false"', {
+           'dependencies': [ 'deps/zlib/zlib.gyp:zlib' ],
++        }, {
++          'defines': [ 'ZLIB_CONST' ],
+         }],
+ 
+         [ 'node_shared_http_parser=="false"', {
diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm
index 6f779feccb..8bfe2c1a89 100644
--- a/gnu/packages/pdf.scm
+++ b/gnu/packages/pdf.scm
@@ -8,6 +8,7 @@
 ;;; Coypright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Coypright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Coypright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Coypright © 2016 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -46,6 +47,11 @@
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages backup)
   #:use-module (gnu packages lesstif)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages gl)
+  #:use-module (gnu packages photo)
   #:use-module (gnu packages image)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages qt)
@@ -697,3 +703,51 @@ such as smooth alpha-blended slide transitions.  It provides additional tools
 such as zooming, highlighting an area of the screen, and a tool to navigate
 the PDF pages.")
     (license license:gpl2)))
+
+(define-public fbida
+  (package
+    (name "fbida")
+    (version "2.12")
+    (home-page "https://www.kraxel.org/blog/linux/fbida/")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.kraxel.org/releases/fbida/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0bw224vb7jh0lrqaf4jgxk48xglvxs674qcpj5y0axyfbh896cfk"))))
+    (build-system gnu-build-system)
+    (arguments
+      '(#:phases (alist-cons-after
+                  'unpack 'patch-ldconfig
+                  (lambda _
+                   (substitute* "mk/Autoconf.mk"
+                    (("/sbin/ldconfig -p") "echo lib")) #t)
+                  (alist-delete 'configure %standard-phases))
+        #:tests? #f
+        #:make-flags (list "CC=gcc"
+                           (string-append "prefix=" (assoc-ref %outputs "out")))))
+    (inputs `(("libjpeg" ,libjpeg)
+              ("curl" ,curl)
+              ("libtiff" ,libtiff)
+              ("libudev" ,eudev)
+              ("libwebp" ,libwebp)
+              ("libdrm" ,libdrm)
+              ("imagemagick" ,imagemagick)
+              ("giflib" ,giflib)
+              ("glib" ,glib)
+              ("cairo-xcb" ,cairo-xcb)
+              ("freetype" ,freetype)
+              ("fontconfig" ,fontconfig)
+              ("libexif" ,libexif)
+              ("mesa" ,mesa)
+              ("libepoxy" ,libepoxy)
+              ("libpng" ,libpng)
+              ("poppler" ,poppler)))
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (synopsis "Framebuffer and drm-based image viewer")
+    (description
+      "fbida contains a few applications for viewing and editing images on
+the framebuffer.")
+
+    (license license:gpl2+)))
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index 8eb5337b6a..f4d110edbc 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -51,14 +51,14 @@
 (define-public libraw
   (package
     (name "libraw")
-    (version "0.17.0")
+    (version "0.17.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://www.libraw.org/data/LibRaw-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "043kckxjqanw8dl3m9f6kvsf0l20ywxmgxd1xb0slj6m8l4w4hz6"))))
+                "0p6imxpsfn82i0i9w27fnzq6q6gwzvb9f7sygqqakv36fqnc9c4j"))))
     (build-system gnu-build-system)
     (home-page "http://www.libraw.org")
     (synopsis "Raw image decoder")
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index e0ead5075c..0e648cd724 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -785,7 +785,7 @@ concepts.")
     (arguments '(#:test-target "check"))
     (native-inputs
      `(("python-pbr" ,python-pbr)))
-    (home-page "http://code.google.com/p/pylockfile/")
+    (home-page "https://launchpad.net/pylockfile")
     (synopsis "Platform-independent file locking module")
     (description
      "The lockfile package exports a LockFile class which provides a simple
@@ -922,7 +922,7 @@ etc.).  The package is structured to make adding new modules easy.")
      `(("python-pycrypto" ,python-pycrypto)))
     (arguments
      `(#:tests? #f))                      ;TODO: tests require pytest
-    (home-page "http://bitbucket.org/kang/python-keyring-lib")
+    (home-page "https://github.com/jaraco/keyring")
     (synopsis "Store and access your passwords safely")
     (description
      "The Python keyring lib provides a easy way to access the system keyring
@@ -1737,9 +1737,6 @@ supports coverage of subprocesses.")
       (native-inputs `(("python2-setuptools" ,python2-setuptools)
                        ,@(package-native-inputs base))))))
 
-(define-public python2-pytest-runner
-  (package-with-python2 python-pytest-runner))
-
 (define-public python-pytest-mock
   (package
     (name "python-pytest-mock")
@@ -1789,7 +1786,15 @@ same arguments.")
        (uri (pypi-uri "pytest-xdist" version ".zip"))
        (sha256
         (base32
-         "08rn2l39ds60xshs4js787l84pfckksqklfq2wq9x8ig2aci2pja"))))
+         "08rn2l39ds60xshs4js787l84pfckksqklfq2wq9x8ig2aci2pja"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove pre-compiled .pyc files from source.
+           (for-each delete-file-recursively
+                     (find-files "." "__pycache__" #:directories? #t))
+           (for-each delete-file (find-files "." "\\.pyc$"))
+           #t))))
     (build-system python-build-system)
     (native-inputs
      `(("unzip" ,unzip)
@@ -5776,9 +5781,6 @@ reading and writing MessagePack data.")
     (native-inputs
      `(("python2-setuptools" ,python2-setuptools)))))
 
-(define-public python2-msgpack
-  (package-with-python2 python-msgpack))
-
 (define-public python-netaddr
   (package
     (name "python-netaddr")
@@ -6033,15 +6035,14 @@ designed to efficently cope with extremely large amounts of data.")
 (define-public python-pyasn1
   (package
     (name "python-pyasn1")
-    (version "0.1.8")
+    (version "0.1.9")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pypi.python.org/packages/source/p/"
-                           "pyasn1/pyasn1-" version ".tar.gz"))
+       (uri (pypi-uri "pyasn1" version))
        (sha256
         (base32
-         "0iw31d9l0zwx35szkzq72hiw002wnqrlrsi9dpbrfngcl1ybwcsx"))))
+         "0zraxni14bqi20kr4bi6nwsh32aibz0fq0xaczfisw0zdpcsqg45"))))
     (build-system python-build-system)
     (home-page "http://pyasn1.sourceforge.net/")
     (synopsis "ASN.1 types and codecs")
@@ -6285,15 +6286,14 @@ message digests and key derivation functions.")
 (define-public python-pyopenssl
   (package
     (name "python-pyopenssl")
-    (version "16.0.0")
+    (version "16.1.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://pypi.python.org/packages/source/p/"
-                           "pyOpenSSL/pyOpenSSL-" version ".tar.gz"))
+       (uri (pypi-uri "pyOpenSSL" version))
        (sha256
         (base32
-         "0zfijaxlq4vgi6jz0d4i5xq9ygqnyps6br7lmigjhqnh8gp10g9n"))))
+         "0prm06zz7hl6bk5s2lqzw25lq6smayfv2fgiliw2rbqxlyiavxw8"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-cryptography" ,python-cryptography)
@@ -6684,7 +6684,13 @@ that have uses outside of the Zope framework.")
                            "/zope.testing/zope.testing-" version ".tar.gz"))
        (sha256
         (base32
-         "1yvglxhzvhl45mndvn9gskx2ph30zz1bz7rrlyfs62fv2pvih90s"))))
+         "1yvglxhzvhl45mndvn9gskx2ph30zz1bz7rrlyfs62fv2pvih90s"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Remove pre-compiled .pyc files backup files from source.
+           (for-each delete-file (find-files "." "(\\.pyc|~)$"))
+           #t))))
     (build-system python-build-system)
     (native-inputs
      `(("python-zope-exceptions" ,python-zope-exceptions)))
@@ -7010,14 +7016,14 @@ timestamps.")
 (define-public python-werkzeug
   (package
     (name "python-werkzeug")
-    (version "0.11.5")
+    (version "0.11.11")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "Werkzeug" version))
        (sha256
         (base32
-         "0r41xqp4cypzcgsf6zbspbqd272wnzf20igb4w4b5wzfhgqh9nxg"))))
+         "1rgpq8a2qv26d75v9j3b074inirlyy6y4b5x4rxblp202jy4cb77"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-pytest" ,python-pytest)))
@@ -8884,6 +8890,36 @@ library.")
       (native-inputs `(("python2-setuptools" ,python2-setuptools)
                        ,@(package-native-inputs responses))))))
 
+(define-public python-whoosh
+  (package
+    (name "python-whoosh")
+    (version "2.7.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "Whoosh" version))
+       (sha256
+        (base32
+         "10qsqdjpbc85fykc1vgcs8xwbgn4l2l52c8d83xf1q59pwyn79bw"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-pytest" ,python-pytest)))
+    (home-page "http://bitbucket.org/mchaput/whoosh")
+    (synopsis "Full text indexing, search, and spell checking library")
+    (description
+     "Whoosh is a fast, pure-Python full text indexing, search, and spell
+checking library.")
+    (license license:bsd-2)))
+
+(define-public python2-whoosh
+  (let ((whoosh (package-with-python2 (strip-python2-variant python-whoosh))))
+    (package (inherit whoosh)
+      (propagated-inputs
+       `(("python2-backport-ssl-match-hostname"
+          ,python2-backport-ssl-match-hostname)
+          ,@(package-propagated-inputs whoosh))))))
+
 (define-public python-pathlib
   (package
     (name "python-pathlib")
@@ -8910,7 +8946,12 @@ be done easily through operators, attribute accesses, and method calls.
 comparing Windows paths ignores casing.
 @item Well-defined semantics, eliminating any inconsistencies or
 ambiguities (forward vs. backward slashes, etc.).
-@end enumerate\n")
+@end enumerate
+
+Note: In Python 3.4, pathlib is now part of the standard library.  For other
+Python versions please consider python-pathlib2 instead, which tracks the
+standard library module.  This module (python-pathlib) isn't maintained
+anymore.")
     (license license:expat)))
 
 (define-public python2-pathlib
@@ -9886,14 +9927,14 @@ until the object is actually required, and caches the result of said call.")
 (define-public python-dnspython
   (package
   (name "python-dnspython")
-  (version "1.14.0")
+  (version "1.15.0")
   (source (origin
             (method url-fetch)
             (uri (string-append "http://www.dnspython.org/kits/"
                                 version "/dnspython-" version ".tar.gz"))
             (sha256
              (base32
-              "1z472r63gdqsxhsxj3plr5vs478yf4303vrqxxpsccc940g441hl"))))
+              "0jr4v2pd90i6l1xxbss2m05psbjaxvyvvvpq44wycijpfgjqln8i"))))
   (build-system python-build-system)
   (arguments '(#:tests? #f)) ; XXX: requires internet access
   (native-inputs
diff --git a/gnu/packages/qt.scm b/gnu/packages/qt.scm
index a482d7572a..a1e5fdef96 100644
--- a/gnu/packages/qt.scm
+++ b/gnu/packages/qt.scm
@@ -61,7 +61,7 @@
 (define-public qt
   (package
     (name "qt")
-    (version "5.6.1-1")
+    (version "5.6.2")
     (source (origin
              (method url-fetch)
              (uri
@@ -73,7 +73,7 @@
                  version ".tar.xz"))
              (sha256
                (base32
-                 "1nrn2wivjwdxc9q03gpsi336gcl9l2axi0xjbzsha5v6akmsf26f"))
+                 "1cw93mrlkqbwndfqyjpsvjzkpzi39px2is040xvk18mvg3y1prl3"))
              (modules '((guix build utils)))
              (snippet
               '(begin
@@ -203,7 +203,7 @@
                        "-no-avx2"
                        "-no-mips_dsp"
                        "-no-mips_dspr2"))))))))
-    (home-page "http://qt-project.org/")
+    (home-page "https://www.qt.io/")
     (synopsis "Cross-platform GUI library")
     (description "Qt is a cross-platform application and UI framework for
 developers using C++ or QML, a CSS & JavaScript like language.")
diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm
index 23d22a3721..60f1992281 100644
--- a/gnu/packages/ruby.scm
+++ b/gnu/packages/ruby.scm
@@ -423,13 +423,13 @@ expectations and mocks frameworks.")
 (define-public bundler
   (package
     (name "bundler")
-    (version "1.13.2")
+    (version "1.13.5")
     (source (origin
               (method url-fetch)
               (uri (rubygems-uri "bundler" version))
               (sha256
                (base32
-                "05gwyhfn103vrmrw13r3n78bcl75mrj82ipsbazcl08wg1bql7x6"))))
+                "0fxr7aq7qhlga423mygy7q96cwxmvqlcy676v2x5swlw8rlha2in"))))
     (build-system ruby-build-system)
     (arguments
      '(#:tests? #f)) ; avoid dependency cycles
@@ -2477,6 +2477,8 @@ a native C extension.")
                (substitute* "Rakefile"
                  (("FileList\\[`git ls-files`\\.split\\(/\\\\n/\\)\\]")
                   (string-append "FileList" files))))
+             (substitute* "Gemfile"
+               ((".*json-java.*") "\n"))
              #t)))))
     (native-inputs
      `(("ruby-permutation" ,ruby-permutation)
diff --git a/gnu/packages/serialization.scm b/gnu/packages/serialization.scm
index 4a3278fb9f..31444509f1 100644
--- a/gnu/packages/serialization.scm
+++ b/gnu/packages/serialization.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,7 +38,7 @@
 (define-public cereal
   (package
     (name "cereal")
-    (version "1.1.2")
+    (version "1.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/USCiLab/cereal/archive/v"
@@ -45,7 +46,7 @@
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "13bvsfzvm7yyp97k20iznq2j14dj3qiczvpq7g8897njw46psq25"))))
+                "0kj32h3j2128anig0g9gzw82kfyd5xqfkwq6vdyv900jx8i1qckx"))))
     (build-system cmake-build-system)
     (arguments
      `(;; The only included tests are portability tests requiring
@@ -153,7 +154,7 @@ serialization.")
 (define-public jsoncpp
   (package
     (name "jsoncpp")
-    (version "1.7.4")
+    (version "1.7.7")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -162,7 +163,7 @@ serialization.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0sgp6nc4c6pfn92f369v08zdwpqswn9j2ihy59bpwwl0grkx1p0h"))))
+                "15wg14480lrbrhc2myk9rwpwb2gzix9bk80p4y7gxg3zrzml0xh8"))))
     (build-system cmake-build-system)
     (home-page "https://github.com/open-source-parsers/jsoncpp")
     (synopsis "C++ library for interacting with JSON")
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index c551f18481..9fd1506dbd 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -37,6 +37,7 @@
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages nettle)
+  #:use-module (gnu packages mit-krb5)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:autoload   (gnu packages protobuf) (protobuf)
@@ -126,15 +127,21 @@ a server that supports the SSH-2 protocol.")
    (inputs `(("groff" ,groff)
              ("openssl" ,openssl)
              ("pam" ,linux-pam)
+             ("mit-krb5" ,mit-krb5)
              ("zlib" ,zlib)
              ("xauth" ,xauth)))                   ;for 'ssh -X' and 'ssh -Y'
    (arguments
     `(#:test-target "tests"
-      #:configure-flags '("--sysconfdir=/etc/ssh"
+      #:configure-flags  `("--sysconfdir=/etc/ssh"
 
-                          ;; Default value of 'PATH' used by sshd.
+                           ;; Default value of 'PATH' used by sshd.
                           "--with-default-path=/run/current-system/profile/bin"
 
+                          ;; configure needs to find krb5-config
+                          ,(string-append "--with-kerberos5="
+                                          (assoc-ref %build-inputs "mit-krb5")
+                                          "/bin")
+
                           ;; Enable PAM support in sshd.
                           "--with-pam")
 
diff --git a/gnu/packages/terminals.scm b/gnu/packages/terminals.scm
index 5bea5ab536..97dd0a82bd 100644
--- a/gnu/packages/terminals.scm
+++ b/gnu/packages/terminals.scm
@@ -88,7 +88,7 @@ configureable through a graphical wizard.")
 (define-public termite
   (package
     (name "termite")
-    (version "11")
+    (version "12")
     (source
       (origin
         (method git-fetch)
@@ -99,11 +99,13 @@ configureable through a graphical wizard.")
               (recursive? #t)))
         (file-name (string-append name "-" version "-checkout"))
         (sha256
-          (base32
-            "1cw4yw7n9m2si8b7zcfyz9pyihncabxm5g39v1mxslfajxgwzmd8"))))
+         (base32
+          "0s6dyg3vcqk5qcx90bs24wdnd3p56rdjdcanx4pcxvp6ksjl61jz"))))
     (build-system gnu-build-system)
     (arguments
-      `(#:phases (alist-delete 'configure %standard-phases)
+      `(#:phases
+        (modify-phases %standard-phases
+          (delete 'configure))
         #:tests? #f
         ;; This sets the destination when installing the necessary terminal
         ;; capability data, which are not provided by 'ncurses'.  See
@@ -263,7 +265,7 @@ multi-seat support, a replacement for @command{mingetty}, and more.")
 (define-public picocom
   (package
     (name "picocom")
-    (version "2.1")
+    (version "2.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -272,7 +274,7 @@ multi-seat support, a replacement for @command{mingetty}, and more.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1v891cx18vx3lnpfaq90f5y6njgigkn4qsikhrmyzshnz32jy5bb"))))
+                "1knl6dglnrynx1fhy21nylw56i1q3dkizkgxzkq42mb7ilah8f9y"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags '("CC=gcc")
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 2e3a11b51b..e965ca92cd 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -426,16 +426,13 @@ security, and applying best practice development processes.")
 (define-public python-acme
   (package
     (name "python-acme")
-    (version "0.8.1")
+    (version "0.9.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                     "https://pypi.python.org/packages/"
-                     "f5/7a/11a99b5d1d1c692f6eed27cfab69e6ba4d2f0c2a461d2607e6a930ff2c68/"
-                     "acme-" version ".tar.gz"))
+              (uri (pypi-uri "acme" version))
       (sha256
         (base32
-         "17vx2miczpd8ww4xizmc0nca2c7jf04wnhfnswx2bxhb537lmsnk"))))
+         "16a02bb0apnk1bm68bcabdmmwd6rnvnjzanrmcb46bpbapwz3vx6"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -488,16 +485,13 @@ security, and applying best practice development processes.")
 (define-public certbot
   (package
     (name "certbot")
-    (version "0.8.1")
+    (version "0.9.3")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                     "https://pypi.python.org/packages/"
-                     "a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/"
-                     name "-" version ".tar.gz"))
+              (uri (pypi-uri name version))
               (sha256
                (base32
-                "0w972cf2mk74aji5d8dylg3jw6wczg01gb4asf3ndv8c64yxza3c"))))
+                "1c7k4lfq5j78d1rvrwrb9082ngwibz92cwkf4kazaa9b76w9q538"))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index a4db4e774a..4ca5a97311 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -313,7 +313,7 @@ everything from small to very large projects with speed and efficiency.")
 (define-public libgit2
   (package
     (name "libgit2")
-    (version "0.24.1")
+    (version "0.24.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/libgit2/libgit2/"
@@ -321,7 +321,7 @@ everything from small to very large projects with speed and efficiency.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1ppyfwxc276d2p2pwbzlmvs2bkgng425rl8k2rf9nsq66jxqq6b0"))))
+                "1rkmfjiv5h80ycra42w9idbcrgj9rz581k5c06badys3650agw00"))))
     (build-system cmake-build-system)
     (arguments
      `(#:phases
@@ -344,7 +344,7 @@ everything from small to very large projects with speed and efficiency.")
        ("openssl" ,openssl)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
-    (home-page "http://libgit2.github.com/")
+    (home-page "https://libgit2.github.com/")
     (synopsis "Library providing Git core methods")
     (description
      "Libgit2 is a portable, pure C implementation of the Git core methods
diff --git a/gnu/packages/webkit.scm b/gnu/packages/webkit.scm
index cd3dd876cb..fde5ff2c6f 100644
--- a/gnu/packages/webkit.scm
+++ b/gnu/packages/webkit.scm
@@ -53,14 +53,14 @@
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.14.0")
+    (version "2.14.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "02paj0anbnqn1z3hn5c4csmq9nga995rzagiplj3sjk2dj1ss4q5"))))
+                "1dffnz20psgc604azhbzn9a6cdhafar9dw74w3bbwrfy531pcb9f"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no tests
diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm
index ef1e78e9bf..5bb58bd6f0 100644
--- a/gnu/services/sddm.scm
+++ b/gnu/services/sddm.scm
@@ -29,7 +29,7 @@
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:export (sddm-configuration
-            sddm-confiugration?
+            sddm-configuration?
             sddm-service-type
             sddm-service))
 
diff --git a/guix/grafts.scm b/guix/grafts.scm
index 53e697688a..80ae27e9b0 100644
--- a/guix/grafts.scm
+++ b/guix/grafts.scm
@@ -227,17 +227,33 @@ resulting list of grafts.
 
 This is a monadic procedure in %STATE-MONAD where the state is a vhash mapping
 derivations to the corresponding set of grafts."
+  (define (graft-origin? drv graft)
+    ;; Return true if DRV corresponds to the origin of GRAFT.
+    (match graft
+      (($ <graft> (? derivation? origin) output)
+       (match (assoc-ref (derivation->output-paths drv) output)
+         ((? string? result)
+          (string=? result
+                    (derivation->output-path origin output)))
+         (_
+          #f)))
+      (_
+       #f)))
+
   (define (dependency-grafts item)
     (let-values (((drv output) (item->deriver store item)))
       (if drv
-          (cumulative-grafts store drv grafts references
-                             #:outputs (list output)
-                             #:guile guile
-                             #:system system)
+          ;; If GRAFTS already contains a graft from DRV, do not override it.
+          (if (find (cut graft-origin? drv <>) grafts)
+              (state-return grafts)
+              (cumulative-grafts store drv grafts references
+                                 #:outputs (list output)
+                                 #:guile guile
+                                 #:system system))
           (state-return grafts))))
 
   (define (return/cache cache value)
-    (mbegin %store-monad
+    (mbegin %state-monad
       (set-current-state (vhash-consq drv value cache))
       (return value)))
 
@@ -250,10 +266,8 @@ derivations to the corresponding set of grafts."
          (()                                      ;no dependencies
           (return/cache cache grafts))
          (deps                                    ;one or more dependencies
-          (mlet %state-monad ((grafts (mapm %state-monad dependency-grafts deps))
-                              (cache  (current-state)))
-            (let* ((grafts     (delete-duplicates (concatenate grafts) equal?))
-                   (origins    (map graft-origin-file-name grafts)))
+          (mlet %state-monad ((grafts (mapm %state-monad dependency-grafts deps)))
+            (let ((grafts (delete-duplicates (concatenate grafts) equal?)))
               (match (filter (lambda (graft)
                                (member (graft-origin-file-name graft) deps))
                              grafts)
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index e4059ca114..057c2d9c7d 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -26,7 +26,6 @@
   #:use-module (guix utils)
   #:use-module (ice-9 match)
   #:use-module (ice-9 regex)
-  #:use-module (json)
   #:use-module (srfi srfi-1)
   #:export (factorize-uri
 
diff --git a/guix/packages.scm b/guix/packages.scm
index 88b21f709d..beb958f156 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -919,7 +919,8 @@ and return it."
             (cached (=> %graft-cache) package system
                     (let ((orig (package-derivation store package system
                                                     #:graft? #f))
-                          (new  (package-derivation store replacement system)))
+                          (new  (package-derivation store replacement system
+                                                    #:graft? #t)))
                       (graft
                         (origin orig)
                         (replacement new)))))))
@@ -935,7 +936,8 @@ and return it."
            (let ((orig (package-cross-derivation store package target system
                                                  #:graft? #f))
                  (new  (package-cross-derivation store replacement
-                                                 target system)))
+                                                 target system
+                                                 #:graft? #t)))
              (graft
                (origin orig)
                (replacement new))))))
diff --git a/guix/scripts/graph.scm b/guix/scripts/graph.scm
index 782fca5d63..2f70d64c90 100644
--- a/guix/scripts/graph.scm
+++ b/guix/scripts/graph.scm
@@ -42,6 +42,7 @@
             %bag-emerged-node-type
             %derivation-node-type
             %reference-node-type
+            %referrer-node-type
             %node-types
 
             guix-graph))
@@ -257,6 +258,24 @@ derivation graph")))))))
 ;;; DAG of residual references (aka. run-time dependencies).
 ;;;
 
+(define ensure-store-items
+  ;; Return a list of store items as a monadic value based on the given
+  ;; argument, which may be a store item or a package.
+  (match-lambda
+    ((? package? package)
+     ;; Return the output file names of PACKAGE.
+     (mlet %store-monad ((drv (package->derivation package)))
+       (return (match (derivation->output-paths drv)
+                 (((_ . file-names) ...)
+                  file-names)))))
+    ((? store-path? item)
+     (with-monad %store-monad
+       (return (list item))))
+    (x
+     (raise
+      (condition (&message (message "unsupported argument for \
+this type of graph")))))))
+
 (define (references* item)
   "Return as a monadic value the references of ITEM, based either on the
 information available in the local store or using information about
@@ -275,24 +294,27 @@ substitutes."
   (node-type
    (name "references")
    (description "the DAG of run-time dependencies (store references)")
-   (convert (match-lambda
-              ((? package? package)
-               ;; Return the output file names of PACKAGE.
-               (mlet %store-monad ((drv (package->derivation package)))
-                 (return (match (derivation->output-paths drv)
-                           (((_ . file-names) ...)
-                            file-names)))))
-              ((? store-path? item)
-               (with-monad %store-monad
-                 (return (list item))))
-              (x
-               (raise
-                (condition (&message (message "unsupported argument for \
-reference graph")))))))
+   (convert ensure-store-items)
    (identifier (lift1 identity %store-monad))
    (label store-path-package-name)
    (edges references*)))
 
+(define non-derivation-referrers
+  (let ((referrers (store-lift referrers)))
+    (lambda (item)
+      "Return the referrers of ITEM, except '.drv' files."
+      (mlet %store-monad ((items (referrers item)))
+        (return (remove derivation-path? items))))))
+
+(define %referrer-node-type
+  (node-type
+   (name "referrers")
+   (description "the DAG of referrers in the store")
+   (convert ensure-store-items)
+   (identifier (lift1 identity %store-monad))
+   (label store-path-package-name)
+   (edges non-derivation-referrers)))
+
 
 ;;;
 ;;; List of node types.
@@ -305,7 +327,8 @@ reference graph")))))))
         %bag-with-origins-node-type
         %bag-emerged-node-type
         %derivation-node-type
-        %reference-node-type))
+        %reference-node-type
+        %referrer-node-type))
 
 (define (lookup-node-type name)
   "Return the node type called NAME.  Raise an error if it is not found."
diff --git a/tests/grafts.scm b/tests/grafts.scm
index f2ff839fd8..4eff06b4b3 100644
--- a/tests/grafts.scm
+++ b/tests/grafts.scm
@@ -218,4 +218,66 @@
          (let ((out (derivation->output-path grafted)))
            (file-is-directory? (string-append out "/" repl))))))
 
+(test-assert "graft-derivation, grafts are not shadowed"
+  ;; We build a DAG as below, where dotted arrows represent replacements and
+  ;; solid arrows represent dependencies:
+  ;;
+  ;;  P1  ·············>  P1R
+  ;;  |\__________________.
+  ;;  v                   v
+  ;;  P2  ·············>  P2R
+  ;;  |
+  ;;  v
+  ;;  P3
+  ;;
+  ;; We want to make sure that the two grafts we want to apply to P3 are
+  ;; honored and not shadowed by other computed grafts.
+  (let* ((p1     (build-expression->derivation
+                  %store "p1"
+                  '(mkdir (assoc-ref %outputs "out"))))
+         (p1r    (build-expression->derivation
+                  %store "P1"
+                  '(let ((out (assoc-ref %outputs "out")))
+                     (mkdir out)
+                     (call-with-output-file (string-append out "/replacement")
+                       (const #t)))))
+         (p2     (build-expression->derivation
+                  %store "p2"
+                  `(let ((out (assoc-ref %outputs "out")))
+                     (mkdir out)
+                     (chdir out)
+                     (symlink (assoc-ref %build-inputs "p1") "p1"))
+                  #:inputs `(("p1" ,p1))))
+         (p2r    (build-expression->derivation
+                  %store "P2"
+                  `(let ((out (assoc-ref %outputs "out")))
+                     (mkdir out)
+                     (chdir out)
+                     (symlink (assoc-ref %build-inputs "p1") "p1")
+                     (call-with-output-file (string-append out "/replacement")
+                       (const #t)))
+                  #:inputs `(("p1" ,p1))))
+         (p3     (build-expression->derivation
+                  %store "p3"
+                  `(let ((out (assoc-ref %outputs "out")))
+                     (mkdir out)
+                     (chdir out)
+                     (symlink (assoc-ref %build-inputs "p2") "p2"))
+                  #:inputs `(("p2" ,p2))))
+         (p1g    (graft
+                   (origin p1)
+                   (replacement p1r)))
+         (p2g    (graft
+                   (origin p2)
+                   (replacement (graft-derivation %store p2r (list p1g)))))
+         (p3d    (graft-derivation %store p3 (list p1g p2g))))
+    (and (build-derivations %store (list p3d))
+         (let ((out (derivation->output-path (pk p3d))))
+           ;; Make sure OUT refers to the replacement of P2, which in turn
+           ;; refers to the replacement of P1, as specified by P1G and P2G.
+           ;; It used to be the case that P2G would be shadowed by a simple
+           ;; P2->P2R graft, which is not what we want.
+           (and (file-exists? (string-append out "/p2/replacement"))
+                (file-exists? (string-append out "/p2/p1/replacement")))))))
+
 (test-end)
diff --git a/tests/graph.scm b/tests/graph.scm
index 1ce06cc817..f2e441cee6 100644
--- a/tests/graph.scm
+++ b/tests/graph.scm
@@ -232,6 +232,28 @@ edges."
                           (list out txt))
                   (equal? edges `((,out ,txt)))))))))))
 
+(test-assert "referrer DAG"
+  (let-values (((backend nodes+edges) (make-recording-backend)))
+    (run-with-store %store
+      (mlet* %store-monad ((txt   (text-file "referrer-node" (random-text)))
+                           (drv   (gexp->derivation "referrer"
+                                                    #~(symlink #$txt #$output)))
+                           (out -> (derivation->output-path drv)))
+        ;; We should see only TXT and OUT, with an edge from the former to the
+        ;; latter.
+        (mbegin %store-monad
+          (built-derivations (list drv))
+          (export-graph (list txt) 'port
+                        #:node-type %referrer-node-type
+                        #:backend backend)
+          (let-values (((nodes edges) (nodes+edges)))
+            (return
+             (and (equal? (match nodes
+                            (((ids labels) ...)
+                             ids))
+                          (list txt out))
+                  (equal? edges `((,txt ,out)))))))))))
+
 (test-assert "node-edges"
   (run-with-store %store
     (let ((packages (fold-packages cons '())))
diff --git a/tests/packages.scm b/tests/packages.scm
index b8e1f111cd..5f5fb5de87 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -662,22 +662,25 @@
                     (origin (package-derivation %store dep))
                     (replacement (package-derivation %store new)))))))
 
-(test-assert "package-grafts, indirect grafts, cross"
-  (let* ((new    (dummy-package "dep"
-                   (arguments '(#:implicit-inputs? #f))))
-         (dep    (package (inherit new) (version "0.0")))
-         (dep*   (package (inherit dep) (replacement new)))
-         (dummy  (dummy-package "dummy"
-                   (arguments '(#:implicit-inputs? #f))
-                   (inputs `(("dep" ,dep*)))))
-         (target "mips64el-linux-gnu"))
-    ;; XXX: There might be additional grafts, for instance if the distro
-    ;; defines replacements for core packages like Perl.
-    (member (graft
-              (origin (package-cross-derivation %store dep target))
-              (replacement
-               (package-cross-derivation %store new target)))
-            (package-grafts %store dummy #:target target))))
+;; XXX: This test would require building the cross toolchain just to see if it
+;; needs grafting, which is obviously too expensive, and thus disabled.
+;;
+;; (test-assert "package-grafts, indirect grafts, cross"
+;;   (let* ((new    (dummy-package "dep"
+;;                    (arguments '(#:implicit-inputs? #f))))
+;;          (dep    (package (inherit new) (version "0.0")))
+;;          (dep*   (package (inherit dep) (replacement new)))
+;;          (dummy  (dummy-package "dummy"
+;;                    (arguments '(#:implicit-inputs? #f))
+;;                    (inputs `(("dep" ,dep*)))))
+;;          (target "mips64el-linux-gnu"))
+;;     ;; XXX: There might be additional grafts, for instance if the distro
+;;     ;; defines replacements for core packages like Perl.
+;;     (member (graft
+;;               (origin (package-cross-derivation %store dep target))
+;;               (replacement
+;;                (package-cross-derivation %store new target)))
+;;             (package-grafts %store dummy #:target target))))
 
 (test-assert "package-grafts, indirect grafts, propagated inputs"
   (let* ((new   (dummy-package "dep"
@@ -719,6 +722,77 @@
                                                          (replacement #f))))
                     (replacement (package-derivation %store new)))))))
 
+(test-assert "replacement also grafted"
+  ;; We build a DAG as below, where dotted arrows represent replacements and
+  ;; solid arrows represent dependencies:
+  ;;
+  ;;  P1  ·············>  P1R
+  ;;  |\__________________.
+  ;;  v                   v
+  ;;  P2  ·············>  P2R
+  ;;  |
+  ;;  v
+  ;;  P3
+  ;;
+  ;; We want to make sure that:
+  ;;   grafts(P3) = (P1,P1R) + (P2, grafted(P2R, (P1,P1R)))
+  ;; where:
+  ;;   (A,B) is a graft to replace A by B
+  ;;   grafted(DRV,G) denoted DRV with graft G applied
+  (let* ((p1r (dummy-package "P1"
+                (build-system trivial-build-system)
+                (arguments
+                 `(#:guile ,%bootstrap-guile
+                   #:builder (let ((out (assoc-ref %outputs "out")))
+                               (mkdir out)
+                               (call-with-output-file
+                                   (string-append out "/replacement")
+                                 (const #t)))))))
+         (p1  (package
+                (inherit p1r) (name "p1") (replacement p1r)
+                (arguments
+                 `(#:guile ,%bootstrap-guile
+                   #:builder (mkdir (assoc-ref %outputs "out"))))))
+         (p2r (dummy-package "P2"
+                (build-system trivial-build-system)
+                (inputs `(("p1" ,p1)))
+                (arguments
+                 `(#:guile ,%bootstrap-guile
+                   #:builder (let ((out (assoc-ref %outputs "out")))
+                               (mkdir out)
+                               (chdir out)
+                               (symlink (assoc-ref %build-inputs "p1") "p1")
+                               (call-with-output-file (string-append out "/replacement")
+                                 (const #t)))))))
+         (p2  (package
+                (inherit p2r) (name "p2") (replacement p2r)
+                (arguments
+                 `(#:guile ,%bootstrap-guile
+                   #:builder (let ((out (assoc-ref %outputs "out")))
+                               (mkdir out)
+                               (chdir out)
+                               (symlink (assoc-ref %build-inputs "p1")
+                                        "p1"))))))
+         (p3  (dummy-package "p3"
+                (build-system trivial-build-system)
+                (inputs `(("p2" ,p2)))
+                (arguments
+                 `(#:guile ,%bootstrap-guile
+                   #:builder (let ((out (assoc-ref %outputs "out")))
+                               (mkdir out)
+                               (chdir out)
+                               (symlink (assoc-ref %build-inputs "p2")
+                                        "p2")))))))
+    (lset= equal?
+           (package-grafts %store p3)
+           (list (graft
+                   (origin (package-derivation %store p1 #:graft? #f))
+                   (replacement (package-derivation %store p1r)))
+                 (graft
+                   (origin (package-derivation %store p2 #:graft? #f))
+                   (replacement
+                    (package-derivation %store p2r #:graft? #t)))))))
+
 ;;; XXX: Nowadays 'graft-derivation' needs to build derivations beforehand to
 ;;; find out about their run-time dependencies, so this test is no longer
 ;;; applicable since it would trigger a full rebuild.