summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am2
-rw-r--r--doc/guix.texi74
-rw-r--r--gnu-system.am16
-rw-r--r--gnu/build/install.scm3
-rw-r--r--gnu/packages/admin.scm10
-rw-r--r--gnu/packages/audacity.scm102
-rw-r--r--gnu/packages/audio.scm19
-rw-r--r--gnu/packages/bioinformatics.scm88
-rw-r--r--gnu/packages/check.scm45
-rw-r--r--gnu/packages/code.scm12
-rw-r--r--gnu/packages/databases.scm28
-rw-r--r--gnu/packages/gl.scm5
-rw-r--r--gnu/packages/gnome.scm45
-rw-r--r--gnu/packages/gnuzilla.scm9
-rw-r--r--gnu/packages/graphics.scm1
-rw-r--r--gnu/packages/ibus.scm92
-rw-r--r--gnu/packages/image.scm97
-rw-r--r--gnu/packages/linux.scm4
-rw-r--r--gnu/packages/lirc.scm61
-rw-r--r--gnu/packages/maths.scm7
-rw-r--r--gnu/packages/messaging.scm17
-rw-r--r--gnu/packages/nano.scm4
-rw-r--r--gnu/packages/ocr.scm93
-rw-r--r--gnu/packages/ocrad.scm46
-rw-r--r--gnu/packages/patches/audacity-fix-ffmpeg-binding.patch32
-rw-r--r--gnu/packages/patches/icecat-CVE-2015-0817.patch44
-rw-r--r--gnu/packages/patches/icecat-CVE-2015-0818-pt1.patch67
-rw-r--r--gnu/packages/patches/icecat-CVE-2015-0818-pt2.patch28
-rw-r--r--gnu/packages/patches/icecat-bug-1127780.patch25
-rw-r--r--gnu/packages/patches/icecat-bug-1144991.patch76
-rw-r--r--gnu/packages/patches/icecat-bug-1145870.patch43
-rw-r--r--gnu/packages/patches/icecat-bug-1146339.patch162
-rw-r--r--gnu/packages/patches/lirc-localstatedir.patch13
-rw-r--r--gnu/packages/patches/portaudio-audacity-compat.patch324
-rw-r--r--gnu/packages/python.scm57
-rw-r--r--gnu/packages/search.scm69
-rw-r--r--gnu/packages/ssh.scm9
-rw-r--r--gnu/packages/tor.scm6
-rw-r--r--gnu/packages/video.scm166
-rw-r--r--gnu/packages/xdisorg.scm10
-rw-r--r--gnu/packages/xorg.scm4
-rw-r--r--gnu/services/base.scm1
-rw-r--r--gnu/services/lirc.scm68
-rw-r--r--guix/build/gremlin.scm236
-rw-r--r--guix/elf.scm3
-rw-r--r--guix/gexp.scm59
-rw-r--r--nix/nix-daemon/guix-daemon.cc2
-rw-r--r--po/guix/POTFILES.in2
-rw-r--r--tests/gexp.scm26
-rw-r--r--tests/gremlin.scm57
-rw-r--r--tests/guix-daemon.sh4
-rw-r--r--tests/guix-system.sh2
-rw-r--r--tests/lint.scm3
53 files changed, 2364 insertions, 114 deletions
diff --git a/Makefile.am b/Makefile.am
index 4a1f8d0a88..cf709986ed 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -82,6 +82,7 @@ MODULES =					\
   guix/build/cvs.scm				\
   guix/build/svn.scm				\
   guix/build/syscalls.scm			\
+  guix/build/gremlin.scm			\
   guix/build/emacs-utils.scm			\
   guix/build/graft.scm				\
   guix/packages.scm				\
@@ -178,6 +179,7 @@ SCM_TESTS =					\
   tests/union.scm				\
   tests/profiles.scm				\
   tests/syscalls.scm				\
+  tests/gremlin.scm				\
   tests/lint.scm
 
 if HAVE_GUILE_JSON
diff --git a/doc/guix.texi b/doc/guix.texi
index 17365036e8..4e549ac2ef 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -154,6 +154,7 @@ Services
 * Base Services::               Essential system services.
 * Networking Services::         Network setup, SSH daemon, etc.
 * X Window::                    Graphical display.
+* Various Services::            Other services.
 
 Packaging Guidelines
 
@@ -2489,13 +2490,9 @@ Gexps are meant to be written to a file and run or manipulated by other
 processes.
 
 @item
-When a package or derivation is unquoted inside a gexp, the result is as
-if its output file name had been introduced.
-
-Actually this mechanism is not limited to package and derivation
-objects; @dfn{compilers} able to ``lower'' other high-level objects to
-derivations can be defined, such that these objects can also be inserted
-into gexps.
+When a high-level object such as a package or derivation is unquoted
+inside a gexp, the result is as if its output file name had been
+introduced.
 
 @item
 Gexps carry information about the packages or derivations they refer to,
@@ -2503,6 +2500,14 @@ and these dependencies are automatically added as inputs to the build
 processes that use them.
 @end itemize
 
+Actually this mechanism is not limited to package and derivation
+objects; @dfn{compilers} able to ``lower'' other high-level objects to
+derivations can be defined, such that these objects can also be inserted
+into gexps.  Another useful type of high-level object that can be
+inserted in a gexp is @dfn{local files}, which allows files from the
+local file system to be added to the store and referred to by
+derivations and such (see @code{local-file} below.)
+
 To illustrate the idea, here is an example of a gexp:
 
 @example
@@ -2562,24 +2567,24 @@ or more of the following forms:
 @table @code
 @item #$@var{obj}
 @itemx (ungexp @var{obj})
-Introduce a reference to @var{obj}.  @var{obj} may be a package or a
+Introduce a reference to @var{obj}.  @var{obj} may have one of the
+supported types, for example a package or a
 derivation, in which case the @code{ungexp} form is replaced by its
 output file name---e.g., @code{"/gnu/store/@dots{}-coreutils-8.22}.
 
-If @var{obj} is a list, it is traversed and any package or derivation
-references are substituted similarly.
+If @var{obj} is a list, it is traversed and references to supported
+objects are substituted similarly.
 
 If @var{obj} is another gexp, its contents are inserted and its
 dependencies are added to those of the containing gexp.
 
 If @var{obj} is another kind of object, it is inserted as is.
 
-@item #$@var{package-or-derivation}:@var{output}
-@itemx (ungexp @var{package-or-derivation} @var{output})
+@item #$@var{obj}:@var{output}
+@itemx (ungexp @var{obj} @var{output})
 This is like the form above, but referring explicitly to the
-@var{output} of @var{package-or-derivation}---this is useful when
-@var{package-or-derivation} produces multiple outputs (@pxref{Packages
-with Multiple Outputs}).
+@var{output} of @var{obj}---this is useful when @var{obj} produces
+multiple outputs (@pxref{Packages with Multiple Outputs}).
 
 @item #+@var{obj}
 @itemx #+@var{obj}:output
@@ -2664,6 +2669,20 @@ refer to.  Any reference to another store item will lead to a build error.
 The other arguments are as for @code{derivation} (@pxref{Derivations}).
 @end deffn
 
+@deffn {Scheme Procedure} local-file @var{file} [@var{name}] @
+   [#:recursive? #t]
+Return an object representing local file @var{file} to add to the store; this
+object can be used in a gexp.  @var{file} will be added to the store under @var{name}--by
+default the base name of @var{file}.
+
+When @var{recursive?} is true, the contents of @var{file} are added recursively; if @var{file}
+designates a flat file and @var{recursive?} is true, its contents are added, and its
+permission bits are kept.
+
+This is the declarative counterpart of the @code{interned-file} monadic
+procedure (@pxref{The Store Monad, @code{interned-file}}).
+@end deffn
+
 @deffn {Monadic Procedure} gexp->script @var{name} @var{exp}
 Return an executable script @var{name} that runs @var{exp} using
 @var{guile} with @var{modules} in its search path.
@@ -2701,8 +2720,9 @@ or a subset thereof.
 @deffn {Monadic Procedure} text-file* @var{name} @var{text} @dots{}
 Return as a monadic value a derivation that builds a text file
 containing all of @var{text}.  @var{text} may list, in addition to
-strings, packages, derivations, and store file names; the resulting
-store file holds references to all these.
+strings, objects of any type that can be used in a gexp: packages,
+derivations, local file objects, etc.  The resulting store file holds
+references to all these.
 
 This variant should be preferred over @code{text-file} anytime the file
 to create will reference items from the store.  This is typically the
@@ -4350,6 +4370,7 @@ declaration.
 * Base Services::               Essential system services.
 * Networking Services::         Network setup, SSH daemon, etc.
 * X Window::                    Graphical display.
+* Various Services::            Other services.
 @end menu
 
 @node Base Services
@@ -4686,6 +4707,25 @@ appropriate screen resolution; otherwise, it must be a list of
 resolutions---e.g., @code{((1024 768) (640 480))}.
 @end deffn
 
+@node Various Services
+@subsubsection Various Services
+
+The @code{(gnu services lirc)} module provides the following service.
+
+@deffn {Monadic Procedure} lirc-service [#:lirc lirc] @
+       [#:device #f] [#:driver #f] [#:config-file #f] @
+       [#:extra-options '()]
+Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
+decodes infrared signals from remote controls.
+
+Optionally, @var{device}, @var{driver} and @var{config-file}
+(configuration file name) may be specified.  See @command{lircd} manual
+for details.
+
+Finally, @var{extra-options} is a list of additional command-line options
+passed to @command{lircd}.
+@end deffn
+
 @node Setuid Programs
 @subsection Setuid Programs
 
diff --git a/gnu-system.am b/gnu-system.am
index 153d395b57..d3e4dafc4e 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -38,6 +38,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/asciidoc.scm			\
   gnu/packages/aspell.scm			\
   gnu/packages/attr.scm				\
+  gnu/packages/audacity.scm			\
   gnu/packages/audio.scm			\
   gnu/packages/autogen.scm			\
   gnu/packages/autotools.scm			\
@@ -146,6 +147,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/haskell.scm			\
   gnu/packages/hugs.scm				\
   gnu/packages/hurd.scm				\
+  gnu/packages/ibus.scm				\
   gnu/packages/icu4c.scm			\
   gnu/packages/idutils.scm			\
   gnu/packages/image.scm			\
@@ -180,6 +182,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/lightning.scm			\
   gnu/packages/links.scm			\
   gnu/packages/linux.scm			\
+  gnu/packages/lirc.scm				\
   gnu/packages/lisp.scm				\
   gnu/packages/llvm.scm				\
   gnu/packages/lout.scm				\
@@ -219,7 +222,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/packages/nutrition.scm			\
   gnu/packages/nvi.scm				\
   gnu/packages/ocaml.scm			\
-  gnu/packages/ocrad.scm			\
+  gnu/packages/ocr.scm				\
   gnu/packages/onc-rpc.scm			\
   gnu/packages/openbox.scm			\
   gnu/packages/openldap.scm			\
@@ -323,6 +326,7 @@ GNU_SYSTEM_MODULES =				\
   gnu/services/base.scm				\
   gnu/services/dbus.scm				\
   gnu/services/dmd.scm				\
+  gnu/services/lirc.scm				\
   gnu/services/networking.scm			\
   gnu/services/ssh.scm				\
   gnu/services/xorg.scm				\
@@ -366,6 +370,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/ath9k-htc-firmware-binutils.patch	\
   gnu/packages/patches/ath9k-htc-firmware-gcc.patch		\
   gnu/packages/patches/ath9k-htc-firmware-objcopy.patch		\
+  gnu/packages/patches/audacity-fix-ffmpeg-binding.patch	\
   gnu/packages/patches/automake-skip-amhello-tests.patch	\
   gnu/packages/patches/avahi-localstatedir.patch		\
   gnu/packages/patches/avrdude-fix-libusb.patch			\
@@ -432,6 +437,13 @@ dist_patch_DATA =						\
   gnu/packages/patches/guix-test-networking.patch		\
   gnu/packages/patches/gtkglext-disable-disable-deprecated.patch \
   gnu/packages/patches/hop-bigloo-4.0b.patch			\
+  gnu/packages/patches/icecat-bug-1127780.patch			\
+  gnu/packages/patches/icecat-bug-1144991.patch			\
+  gnu/packages/patches/icecat-bug-1145870.patch			\
+  gnu/packages/patches/icecat-bug-1146339.patch			\
+  gnu/packages/patches/icecat-CVE-2015-0817.patch		\
+  gnu/packages/patches/icecat-CVE-2015-0818-pt1.patch		\
+  gnu/packages/patches/icecat-CVE-2015-0818-pt2.patch		\
   gnu/packages/patches/irrlicht-mesa-10.patch			\
   gnu/packages/patches/jbig2dec-ignore-testtest.patch		\
   gnu/packages/patches/kmod-module-directory.patch		\
@@ -451,6 +463,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/libvpx-fix-armhf-link.patch		\
   gnu/packages/patches/libvpx-fix-ssse3-quantize.patch		\
   gnu/packages/patches/libvpx-vp9-out-of-bounds-access.patch	\
+  gnu/packages/patches/lirc-localstatedir.patch			\
   gnu/packages/patches/lm-sensors-hwmon-attrs.patch		\
   gnu/packages/patches/lua51-liblua-so.patch                    \
   gnu/packages/patches/luajit-no_ldconfig.patch			\
@@ -488,6 +501,7 @@ dist_patch_DATA =						\
   gnu/packages/patches/pingus-sdl-libs-config.patch		\
   gnu/packages/patches/plotutils-libpng-jmpbuf.patch		\
   gnu/packages/patches/polkit-drop-test.patch			\
+  gnu/packages/patches/portaudio-audacity-compat.patch		\
   gnu/packages/patches/procps-make-3.82.patch			\
   gnu/packages/patches/pulseaudio-fix-mult-test.patch		\
   gnu/packages/patches/pybugz-encode-error.patch		\
diff --git a/gnu/build/install.scm b/gnu/build/install.scm
index aa901f6971..51895d58ec 100644
--- a/gnu/build/install.scm
+++ b/gnu/build/install.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -118,6 +118,7 @@ STORE."
 
     (directory "/bin")
     (directory "/tmp" 0 0 #o1777)                 ; sticky bit
+    (directory "/var/tmp" 0 0 #o1777)
 
     (directory "/root" 0 0)                       ; an exception
     (directory "/home" 0 0)))
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 95b0c9f007..4d4cef7cf3 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -783,7 +783,15 @@ This package provides the 'wpa_supplicant' daemon and the 'wpa_cli' command.")
       CONFIG_CTRL_IFACE_DBUS_INTRO=y\n" port)
               (close-port port))
             #t)
-          ,phases))))))
+          (alist-cons-after
+           'install-man-pages 'install-dbus-conf
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (dir (string-append out "/etc/dbus-1/system.d")))
+               (mkdir-p dir)
+               (copy-file "dbus/dbus-wpa_supplicant.conf"
+                          (string-append dir "/wpa_supplicant.conf"))))
+           ,phases)))))))
 
 (define-public wakelan
   (package
diff --git a/gnu/packages/audacity.scm b/gnu/packages/audacity.scm
new file mode 100644
index 0000000000..4f7bc686e3
--- /dev/null
+++ b/gnu/packages/audacity.scm
@@ -0,0 +1,102 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages audacity)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages audio)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages mp3)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages pulseaudio)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages xiph)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages wxwidgets))
+
+(define-public audacity
+  (package
+    (name "audacity")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append
+         "mirror://sourceforge/audacity/audacity-minsrc-" version ".tar.xz"))
+       (sha256
+        (base32 "1cs2w3fwqylpqmfwkvlgdx5lhclpckfil7pqibl37qlbnf4qvndh"))
+       (patches (list (search-patch "audacity-fix-ffmpeg-binding.patch")))))
+    (build-system gnu-build-system)
+    (inputs
+     ;; TODO: Add portSMF and libwidgetextra once they're packaged.  In-tree
+     ;; versions shipping with Audacity are used for now.
+     `(("wxwidgets" ,wxwidgets-2)
+       ("gtk" ,gtk+-2)
+       ("alsa-lib" ,alsa-lib)
+       ("jack" ,jack-2)
+       ("expat" ,expat)
+       ("ffmpeg" ,ffmpeg)
+       ("lame" ,lame)
+       ("flac" ,flac)
+       ("libid3tag" ,libid3tag)
+       ("libmad" ,libmad)
+       ("libsbsms" ,libsbsms)
+       ("libsndfile" ,libsndfile)
+       ("soundtouch" ,soundtouch)
+       ("soxr" ,soxr)                   ;replaces libsamplerate
+       ("twolame" ,twolame)
+       ("vamp" ,vamp)
+       ("libvorbis" ,libvorbis)
+       ("lv2" ,lv2)
+       ("lilv" ,lilv)
+       ("portaudio" ,portaudio)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("python" ,python-2)
+       ("which" ,which)))
+    (arguments
+     '(#:configure-flags
+       (let ((libid3tag (assoc-ref %build-inputs "libid3tag"))
+             (libmad (assoc-ref %build-inputs "libmad")))
+         (list
+          ;; Loading FFmpeg dynamically is problematic.
+          "--disable-dynamic-loading"
+          ;; libid3tag and libmad provide no .pc files, so pkg-config fails to
+          ;; find them.  Force their inclusion.
+          (string-append "ID3TAG_CFLAGS=-I" libid3tag "/include")
+          (string-append "ID3TAG_LIBS=-L" libid3tag "/lib -lid3tag -lz")
+          (string-append "LIBMAD_CFLAGS=-I" libmad "/include")
+          (string-append "LIBMAD_LIBS=-L" libmad "/lib -lmad")))
+       ;; The test suite is not "well exercised" according to the developers,
+       ;; and fails with various errors.  See
+       ;; <http://sourceforge.net/p/audacity/mailman/message/33524292/>.
+       #:tests? #f))
+    (home-page "http://audacity.sourceforge.net/")
+    (synopsis "Software for recording and editing sounds")
+    (description
+     "Audacity is a multi-track audio editor designed for recording, playing
+and editing digital audio.  It features digital effects and spectrum analysis
+tools.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/audio.scm b/gnu/packages/audio.scm
index dec167f917..aa94dda7c7 100644
--- a/gnu/packages/audio.scm
+++ b/gnu/packages/audio.scm
@@ -1088,15 +1088,28 @@ portions of LAME.")
              (string-map (lambda (c) (if (char=? c #\.) #\_ c)) version)
              ".tgz"))
        (sha256
-        (base32 "0mwddk4qzybaf85wqfhxqlf0c5im9il8z03rd4n127k8y2jj9q4g"))))
+        (base32 "0mwddk4qzybaf85wqfhxqlf0c5im9il8z03rd4n127k8y2jj9q4g"))
+       (patches (list (search-patch "portaudio-audacity-compat.patch")))))
     (build-system gnu-build-system)
     (inputs
      ;; TODO: Add ASIHPI.
      `(("alsa-lib" ,alsa-lib)
        ("jack" ,jack-2)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
-    (arguments '(#:tests? #f))          ;no 'check' target
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
+    (arguments
+     '(#:phases
+       ;; Autoreconf is necessary because the audacity-compat patch modifies
+       ;; .in files.
+       (alist-cons-after
+        'unpack 'autoreconf
+        (lambda _
+          (zero? (system* "autoreconf" "-vif")))
+        %standard-phases)
+       #:tests? #f))                    ;no 'check' target
     (home-page "http://www.portaudio.com/")
     (synopsis "Audio I/O library")
     (description
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index ca8dcb761a..3725f3ffe5 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -19,6 +19,7 @@
 (define-module (gnu packages bioinformatics)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
@@ -401,6 +402,46 @@ files between different genome assemblies.  It supports most commonly used
 file formats including SAM/BAM, Wiggle/BigWig, BED, GFF/GTF, VCF.")
     (license license:gpl2+)))
 
+(define-public cutadapt
+  (package
+    (name "cutadapt")
+    (version "1.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/marcelm/cutadapt/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "161bp87y6gd6r5bmvjpn2b1k942i3fizfpa139f0jn6jv1wcp5h5"))))
+    (build-system python-build-system)
+    (arguments
+     ;; tests must be run after install
+     `(#:phases (alist-cons-after
+                 'install 'check
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (setenv "PYTHONPATH"
+                           (string-append
+                            (getenv "PYTHONPATH")
+                            ":" (assoc-ref outputs "out")
+                            "/lib/python"
+                            (string-take (string-take-right
+                                          (assoc-ref inputs "python") 5) 3)
+                            "/site-packages"))
+                   (zero? (system* "nosetests" "-P" "tests")))
+                 (alist-delete 'check %standard-phases))))
+    (native-inputs
+     `(("python-cython" ,python-cython)
+       ("python-nose" ,python-nose)
+       ("python-setuptools" ,python-setuptools)))
+    (home-page "https://code.google.com/p/cutadapt/")
+    (synopsis "Remove adapter sequences from nucleotide sequencing reads")
+    (description
+     "Cutadapt finds and removes adapter sequences, primers, poly-A tails and
+other types of unwanted sequence from high-throughput sequencing reads.")
+    (license license:expat)))
+
 (define-public flexbar
   (package
     (name "flexbar")
@@ -709,20 +750,25 @@ files and writing bioinformatics applications.")
             (chdir "pbtranscript-tofu/pbtranscript/")
             ;; Delete clutter
             (delete-file-recursively "dist/")
+            (delete-file-recursively "build/")
             (delete-file-recursively "setuptools_cython-0.2.1-py2.6.egg/")
             (delete-file-recursively "pbtools.pbtranscript.egg-info")
             (delete-file "Cython-0.20.1.tar.gz")
             (delete-file "setuptools_cython-0.2.1-py2.7.egg")
             (delete-file "setuptools_cython-0.2.1.tar.gz")
             (delete-file "setup.cfg")
+            (for-each delete-file
+                      (find-files "." "\\.so$"))
             ;; files should be writable for install phase
             (for-each (lambda (f) (chmod f #o755))
-                      (find-files "." "\\.py")))
+                      (find-files "." "\\.py$")))
           %standard-phases)))
       (inputs
        `(("python-cython" ,python2-cython)
          ("python-numpy" ,python2-numpy)
          ("python-bx-python" ,python2-bx-python)
+         ("python-networkx" ,python2-networkx)
+         ("python-scipy" ,python2-scipy)
          ("python-pbcore" ,python2-pbcore)))
       (native-inputs
        `(("python-nose" ,python2-nose)
@@ -929,3 +975,43 @@ chimeric (fusion) transcripts, and is also capable of mapping full-length RNA
 sequences.")
     ;; STAR is licensed under GPLv3 or later; htslib is MIT-licensed.
     (license license:gpl3+)))
+
+(define-public vcftools
+  (package
+    (name "vcftools")
+    (version "0.1.12b")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/vcftools/vcftools_"
+                     version ".tar.gz"))
+              (sha256
+               (base32
+                "148al9h7f8g8my2qdnpax51kdd2yjrivlx6frvakf4lz5r8j88wx"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; no "check" target
+       #:make-flags (list
+                     (string-append "PREFIX=" (assoc-ref %outputs "out"))
+                     (string-append "MANDIR=" (assoc-ref %outputs "out")
+                                    "/share/man/man1"))
+       #:phases
+       (alist-cons-after
+        'unpack 'patch-manpage-install
+        (lambda _
+          (substitute* "Makefile"
+            (("cp \\$\\{PREFIX\\}/cpp/vcftools.1") "cp ./cpp/vcftools.1")))
+        (alist-delete 'configure %standard-phases))))
+    (inputs
+     `(("perl" ,perl)
+       ("zlib" ,zlib)))
+    (home-page "http://vcftools.sourceforge.net/")
+    (synopsis "Tools for working with VCF files")
+    (description
+     "VCFtools is a program package designed for working with VCF files, such
+as those generated by the 1000 Genomes Project.  The aim of VCFtools is to
+provide easily accessible methods for working with complex genetic variation
+data in the form of VCF files.")
+    ;; The license is declared as LGPLv3 in the README and
+    ;; at http://vcftools.sourceforge.net/license.html
+    (license license:lgpl3)))
diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index afaf5571e5..3e686cc743 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
+;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,7 +24,9 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix git-download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system trivial))
 
 (define-public check
   (package
@@ -99,3 +102,43 @@ with a flexible variety of user interfaces.")
 unit testing.  Test output is in XML for automatic testing and GUI based for
 supervised tests.")
     (license lgpl2.1))) ; no copyright notices. LGPL2.1 is in the tarball
+
+(define-public catch-framework
+  (package
+    (name "catch")
+    (version "1.0.53")                  ;Sub-minor is the build number
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/philsquared/Catch")
+                    ;; Semi-arbitrary.  Contains mostly documentation fixes
+                    ;; since build 53.
+                    (commit "b9ec8a1")))
+              (file-name (string-append name "-" version))
+              (sha256
+               (base32
+                "05iijiwjwcjbza7qamwd32d0jypi0lpywmilmmj2xh280mcl4dbd"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder (begin
+                   (use-modules (guix build utils))
+                   (let* ((source (assoc-ref %build-inputs "source"))
+                          (output (assoc-ref %outputs "out"))
+                          (incdir (string-append output "/include"))
+                          (docdir (string-append output "/share/doc/catch-"
+                                                 ,version)))
+                     (begin
+                       (for-each mkdir-p (list incdir docdir))
+                       (copy-file (string-append source
+                                                 "/single_include/catch.hpp")
+                                  (string-append incdir
+                                                 "/catch.hpp"))
+                       (copy-recursively (string-append source "/docs")
+                                         docdir))))))
+    (home-page "http://catch-lib.net/")
+    (synopsis "Automated test framework for C++ and Objective-C")
+    (description
+     "Catch stands for C++ Automated Test Cases in Headers and is a
+multi-paradigm automated test framework for C++ and Objective-C.")
+    (license boost1.0)))
diff --git a/gnu/packages/code.scm b/gnu/packages/code.scm
index ad61b85afc..ed9ba0e31f 100644
--- a/gnu/packages/code.scm
+++ b/gnu/packages/code.scm
@@ -23,6 +23,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages emacs)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
@@ -86,21 +87,24 @@ highlighting your own code that seemed comprehensible when you wrote it.")
 (define-public global                             ; a global variable
   (package
     (name "global")
-    (version "6.3.4")
+    (version "6.4")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/global/global-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0hcplcayyjf42d8ygzla6142b5dq4ybq4wg3n3cgx3b5yfhvic85"))))
+               "13i4zwx6gaibc4j79wd0hgxysw8ibxz9c018zxhydnxlyadzcnri"))))
     (build-system gnu-build-system)
     (inputs `(("ncurses" ,ncurses)
-              ("libltdl" ,libltdl)))
+              ("libltdl" ,libltdl)
+              ("sqlite" ,sqlite)))
     (arguments
      `(#:configure-flags
        (list (string-append "--with-ncurses="
-                            (assoc-ref %build-inputs "ncurses")))
+                            (assoc-ref %build-inputs "ncurses"))
+             (string-append "--with-sqlite3="
+                            (assoc-ref %build-inputs "sqlite")))
 
        #:phases (alist-cons-after
                  'install 'post-install
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 5d6be59fe5..6498091aaf 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -38,7 +38,7 @@
   #:use-module (gnu packages python)
   #:use-module ((guix licenses)
                 #:select (gpl2 gpl3+ lgpl2.1+ lgpl3+ x11-style non-copyleft
-                          public-domain))
+                          bsd-2 public-domain))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
@@ -541,3 +541,29 @@ Driver.")
    (license lgpl2.1+) 
    ;; COPYING contains copy of lgpl2.1 - but copyright notices just say "LGPL"
    (home-page "http://www.unixodbc.org")))
+
+(define-public unqlite
+  (package
+    (name "unqlite")
+    (version "1.1.6")
+    (source (origin
+              (method url-fetch)
+              ;; Contains bug fixes against the official release, and has an
+              ;; autotooled build system.
+              (uri (string-append "https://github.com/aidin36/tocc/releases/"
+                                  "download/v1.0.0/"
+                                  "unqlite-unofficial-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1sbpvhg15gadq0mpcy16q7k3rkg4b4dicpnn5xifpkpn02sqik3s"))))
+    (build-system gnu-build-system)
+    (arguments `(#:tests? #f))          ;No check target
+    (home-page "http://www.unqlite.org")
+    (synopsis "In-memory key/value and document store")
+    (description
+     "UnQLite is an in-process software library which implements a
+self-contained, serverless, zero-configuration, transactional NoSQL
+database engine.  UnQLite is a document store database similar to
+MongoDB, Redis, CouchDB, etc. as well as a standard Key/Value store
+similar to BerkelyDB, LevelDB, etc.")
+    (license bsd-2)))
diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm
index e9b2c535a8..dc90a1231d 100644
--- a/gnu/packages/gl.scm
+++ b/gnu/packages/gl.scm
@@ -84,7 +84,10 @@ as ASCII text.")
 	      ("libxxf86vm" ,libxxf86vm)
 	      ("inputproto" ,inputproto)
 	      ("xinput" ,xinput)))
-    (propagated-inputs `(("glu" ,glu)))
+    (propagated-inputs
+     ;; Headers from Mesa and GLU are needed.
+     `(("glu" ,glu)
+       ("mesa" ,mesa)))
     (home-page "http://freeglut.sourceforge.net/")
     (synopsis "Alternative to the OpenGL Utility Toolkit (GLUT)")
     (description
diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 3b70e27816..0e674da899 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -1621,3 +1621,48 @@ library.")
     ;; This is the license of the rsvg bindings.  The license of each module
     ;; of gnome-python-desktop is given in 'COPYING'.
     (license license:lgpl2.1+)))
+
+(define-public gnome-mines
+  (package
+    (name "gnome-mines")
+    (version "3.14.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://gnome/sources/" name "/"
+                           (version-major+minor version) "/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0nbgvzlsznn3v83pdcx2d52r4ig1mvaijh633rjddx9rgq2ja7kv"))))
+    (build-system glib-or-gtk-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before configure patch-/bin/true
+                     (lambda _
+                       (substitute* "configure"
+                         (("/bin/true") (which "true")))))
+         (add-after install wrap-pixbuf
+                    ;; Use librsvg's loaders.cache to support SVG files.
+                    (lambda* (#:key inputs outputs #:allow-other-keys)
+                      (let* ((out    (assoc-ref outputs "out"))
+                             (prog   (string-append out "/bin/gnome-mines"))
+                             (rsvg   (assoc-ref inputs "librsvg"))
+                             (pixbuf (find-files rsvg "^loaders\\.cache$")))
+                        (wrap-program prog
+                          `("GDK_PIXBUF_MODULE_FILE" = ,pixbuf))))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("desktop-file-utils" ,desktop-file-utils)
+       ("intltool" ,intltool)
+       ("itstool" ,itstool)))
+    (inputs
+     `(("gtk+" ,gtk+)
+       ("librsvg" ,librsvg)))
+    (home-page "https://wiki.gnome.org/Apps/Mines")
+    (synopsis "Minesweeper game")
+    (description
+     "Mines (previously gnomine) is a puzzle game where you locate mines
+floating in an ocean using only your brain and a little bit of luck.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm
index 1d450cda64..1e9deb8bff 100644
--- a/gnu/packages/gnuzilla.scm
+++ b/gnu/packages/gnuzilla.scm
@@ -224,7 +224,14 @@ standards.")
                           version "/" name "-" version ".tar.bz2"))
       (sha256
        (base32
-        "1rr4axghaypdkrf60i1qp6dz4cd29ya02fs3vyffvp4x9kgcq2dd"))))
+        "1rr4axghaypdkrf60i1qp6dz4cd29ya02fs3vyffvp4x9kgcq2dd"))
+      (patches (map search-patch '("icecat-bug-1127780.patch"
+                                   "icecat-CVE-2015-0817.patch"
+                                   "icecat-bug-1144991.patch"
+                                   "icecat-CVE-2015-0818-pt1.patch"
+                                   "icecat-bug-1145870.patch"
+                                   "icecat-CVE-2015-0818-pt2.patch"
+                                   "icecat-bug-1146339.patch")))))
     (build-system gnu-build-system)
     (inputs
      `(("alsa-lib" ,alsa-lib)
diff --git a/gnu/packages/graphics.scm b/gnu/packages/graphics.scm
index c92dd1b354..f574628698 100644
--- a/gnu/packages/graphics.scm
+++ b/gnu/packages/graphics.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015 Tomáš Čech <sleep_walker@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
diff --git a/gnu/packages/ibus.scm b/gnu/packages/ibus.scm
new file mode 100644
index 0000000000..813d0040ee
--- /dev/null
+++ b/gnu/packages/ibus.scm
@@ -0,0 +1,92 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages ibus)
+  #:use-module (guix licenses)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system glib-or-gtk)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages iso-codes)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python))
+
+(define-public ibus
+  (package
+   (name "ibus")
+   (version "1.5.5")
+   (source (origin
+             (method url-fetch)
+             (uri (string-append "https://ibus.googlecode.com/files/ibus-"
+                                 version ".tar.gz"))
+             (sha256
+              (base32
+               "1v4a9xv2k26g6ggk4282ynfvh68j2r5hg1cdpvnryfa8c2pkdaq2"))))
+   (build-system glib-or-gtk-build-system)
+   (arguments
+    `(#:tests? #f  ; tests fail because there's no connection to dbus
+      #:make-flags
+      (list "CC=gcc"
+            (string-append "pyoverridesdir="
+                           (assoc-ref %outputs "out")
+                           "/lib/python2.7/site-packages/gi/overrides/"))
+      #:phases
+      (alist-cons-before
+       'configure 'disable-dconf-update
+       (lambda _
+         (substitute* "data/dconf/Makefile.in"
+           (("dconf update") "echo dconf update"))
+         #t)
+       (alist-cons-after
+        'wrap-program 'wrap-with-additional-paths
+        (lambda* (#:key outputs #:allow-other-keys)
+          ;; Make sure 'ibus-setup' runs with the correct PYTHONPATH and
+          ;; GI_TYPELIB_PATH.
+          (let ((out (assoc-ref outputs "out")))
+            (wrap-program (string-append out "/bin/ibus-setup")
+              `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))
+              `("GI_TYPELIB_PATH" ":" prefix
+                (,(getenv "GI_TYPELIB_PATH")
+                 ,(string-append out "/lib/girepository-1.0"))))))
+        %standard-phases))))
+   (inputs
+    `(("dbus" ,dbus)
+      ("dconf" ,dconf)
+      ("gconf" ,gconf)
+      ("glib" ,glib)
+      ("gtk2" ,gtk+-2)
+      ("intltool" ,intltool)
+      ("libnotify" ,libnotify)
+      ("iso-codes" ,iso-codes)
+      ("pygobject2" ,python2-pygobject)
+      ("python2" ,python-2)))
+   (native-inputs
+    `(("glib" ,glib "bin") ; for glib-genmarshal
+      ("gobject-introspection" ,gobject-introspection) ; for g-ir-compiler
+      ("pkg-config" ,pkg-config)))
+   (synopsis "Input method framework")
+   (description
+    "IBus is an input framework providing a full-featured and user-friendly
+input method user interface.  It comes with multilingual input support.  It
+may also simplify input method development.")
+   (home-page "http://ibus.googlecode.com/")
+   (license lgpl2.1+)))
diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm
index 11cb63a895..93dd2ac4e6 100644
--- a/gnu/packages/image.scm
+++ b/gnu/packages/image.scm
@@ -24,11 +24,13 @@
 (define-module (gnu packages image)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages doxygen)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages ghostscript)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -163,6 +165,65 @@ the W3C's XML-based Scaleable Vector Graphic (SVG) format.")
     ;; 'COPYING' is the GPLv2, but file headers say LGPLv2.0+.
     (license license:lgpl2.0+)))
 
+(define-public leptonica
+  (package
+    (name "leptonica")
+    (version "1.71")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://www.leptonica.com/source/leptonica-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "0j5qgrff6im5n9waflbi7w643q1p6mahyf2z35gb4vj9h5p76pfc"))
+       (modules '((guix build utils)))
+       ;; zlib and openjpg should be under Libs, not Libs.private.  See:
+       ;; https://code.google.com/p/tesseract-ocr/issues/detail?id=1436
+       (snippet
+        '(substitute* "lept.pc.in"
+           (("^(Libs\\.private: .*)@ZLIB_LIBS@(.*)" all pre post)
+            (string-append pre post))
+           (("^(Libs\\.private: .*)@JPEG_LIBS@(.*)" all pre post)
+            (string-append pre post))
+           (("^Libs: .*" all)
+            (string-append all " @ZLIB_LIBS@ @JPEG_LIBS@"))))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("gnuplot" ,gnuplot)))           ;needed for test suite
+    (inputs
+     `(("giflib" ,giflib)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)
+       ("libwebp" ,libwebp)))
+    (propagated-inputs
+     `(("openjpeg" ,openjpeg)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; Prevent make from trying to regenerate config.h.in.
+         (add-after
+          unpack set-config-h-in-file-time
+          (lambda _
+            (set-file-time "config/config.h.in" (stat "configure"))))
+         (add-after
+          unpack patch-reg-wrapper
+          (lambda _
+            (substitute* "prog/reg_wrapper.sh"
+              ((" /bin/sh ")
+               (string-append " " (which "sh") " "))))))))
+    (home-page "http://www.leptonica.com/")
+    (synopsis "Library and tools for image processing and analysis")
+    (description
+     "Leptonica is a C library and set of command-line tools for efficient
+image processing and image analysis operations.  It supports rasterop, affine
+transformations, binary and grayscale morphology, rank order, and convolution,
+seedfill and connected components, image transformations combining changes in
+scale and pixel depth, and pixelwise masking, blending, enhancement, and
+arithmetic ops.")
+    (license license:bsd-2)))
+
 (define-public jbig2dec
   (package
     (name "jbig2dec")
@@ -475,3 +536,39 @@ algorithms and data structures.  It is particularly strong for
 multi-dimensional image processing.")
    (license license:expat)
    (home-page "https://hci.iwr.uni-heidelberg.de/vigra")))
+
+(define-public libwebp
+  (package
+    (name "libwebp")
+    (version "0.4.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://downloads.webmproject.org/releases/webp/libwebp-" version
+             ".tar.gz"))
+       (sha256
+        (base32 "1i4hfczjm3b1qj1g4cc9hgb69l47f3nkgf6hk7nz4dm9zmc0vgpg"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("freeglut" ,freeglut)
+       ("giflib" ,giflib)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libtiff" ,libtiff)))
+    (arguments
+     '(#:configure-flags '("--enable-libwebpmux"
+                           "--enable-libwebpdemux"
+                           "--enable-libwebpdecoder")))
+    (home-page "https://developers.google.com/speed/webp/")
+    (synopsis "Lossless and lossy image compression")
+    (description
+     "WebP is a new image format that provides lossless and lossy compression
+for images. WebP lossless images are 26% smaller in size compared to
+PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at
+equivalent SSIM index. WebP supports lossless transparency (also known as
+alpha channel) with just 22% additional bytes. Transparency is also supported
+with lossy compression and typically provides 3x smaller file sizes compared
+to PNG when lossy compression is acceptable for the red/green/blue color
+channels.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index bd9ae0e08d..c48fefa7c2 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -198,7 +198,7 @@ for SYSTEM, or #f if there is no configuration for SYSTEM."
      #f)))
 
 (define-public linux-libre
-  (let* ((version "3.18.9")
+  (let* ((version "3.18.10")
          (build-phase
           '(lambda* (#:key system inputs #:allow-other-keys #:rest args)
              ;; Apply the neat patch.
@@ -271,7 +271,7 @@ for SYSTEM, or #f if there is no configuration for SYSTEM."
              (uri (linux-libre-urls version))
              (sha256
               (base32
-               "0n3p9ci8w71hd168df7xlccafxzb3agr8rk3xmvnj7dnbfiddqv6"))))
+               "0ckbi94b56klp59wsfcmlkbyrj7hj7kb7ys2jjsrqsk39dd77zg5"))))
     (build-system gnu-build-system)
     (native-inputs `(("perl" ,perl)
                      ("bc" ,bc)
diff --git a/gnu/packages/lirc.scm b/gnu/packages/lirc.scm
new file mode 100644
index 0000000000..c070e1aaa4
--- /dev/null
+++ b/gnu/packages/lirc.scm
@@ -0,0 +1,61 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages lirc)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages linux)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu packages python))
+
+(define-public lirc
+  (package
+    (name "lirc")
+    (version "0.9.2a")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/lirc/lirc-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "011nwpxm5d12rsapljg3pjf9pgb0j8ngmc3zg69q4kv61hkx2zim"))
+              (patches (list (search-patch "lirc-localstatedir.patch")))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags '("--localstatedir=/var")))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libx11" ,libx11)
+       ("alsa-lib" ,alsa-lib)
+       ("python" ,python)))
+    (home-page "http://www.lirc.org/")
+    (synopsis "Linux Infrared Remote Control")
+    (description
+     "LIRC allows computers to send and receive IR signals of many commonly
+used remote controls.  The most important part of LIRC is the 'lircd' daemon
+that decodes IR signals received by the device drivers.  The second daemon
+program 'lircmd' allows to translate IR signals to mouse movements.  The
+user space applications allow you to control your computer with a remote
+control: you can send X events to applications, start programs and much more
+on just one button press.")
+    (license license:gpl2+)))
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 49667cc71b..417af4a91b 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1033,11 +1033,14 @@ constant parts of it.")
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f  ;no "check" target
-       #:substitutable? #f ;force local build because of CPU detection
        #:make-flags
        (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
              "SHELL=bash"
-             "NO_LAPACK=1")
+             "NO_LAPACK=1"
+             ;; Build the library for all supported CPUs.  This allows
+             ;; switching CPU targets at runtime with the environment variable
+             ;; OPENBLAS_CORETYPE=<type>, where "type" is a supported CPU type.
+             "DYNAMIC_ARCH=1")
        ;; no configure script
        #:phases (alist-delete 'configure %standard-phases)))
     (inputs
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 462c500248..fd857b1ec3 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -201,7 +201,22 @@ dictionaries.  HexChat can be extended with multiple addons.")
         'configure 'post-configure
         (lambda _
           (substitute* "src/ngircd/Makefile"
-            (("/bin/sh") (which "sh"))))
+            (("/bin/sh") (which "sh")))
+          ;; The default getpid.sh does a sloppy grep over 'ps -ax' output,
+          ;; which fails arbitrarily.
+          (with-output-to-file "src/testsuite/getpid.sh"
+            (lambda ()
+              (display
+               (string-append
+                "#!" (which "sh") "\n"
+                "ps -C \"$1\" -o pid=\n"))))
+          ;; Our variant of getpid.sh does not work for interpreter names if a
+          ;; shebang script is run directly as "./foo", so patch cases where
+          ;; the test suite relies on this.
+          (substitute* "src/testsuite/start-server.sh"
+            ;; It runs 'getpid.sh sh' to test if it works at all.  Run it on
+            ;; 'make' instead.
+            (("getpid.sh sh") "getpid.sh make")))
         %standard-phases)))
     (home-page "http://ngircd.barton.de/")
     (synopsis "Lightweight Internet Relay Chat server for small networks")
diff --git a/gnu/packages/nano.scm b/gnu/packages/nano.scm
index 1bb6fea889..150e1e0641 100644
--- a/gnu/packages/nano.scm
+++ b/gnu/packages/nano.scm
@@ -27,7 +27,7 @@
 (define-public nano
   (package
     (name "nano")
-    (version "2.3.6")
+    (version "2.4.0")
     (source
      (origin
       (method url-fetch)
@@ -35,7 +35,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "0d4ml0v9yi37pjs211xs38w9whsj6530wz3kmrvwgh8jigqz6jx7"))))
+        "1gbm9bcv4k55y01r5q8a8a9s3yrrgq3z5jxxiij3wl404r8gnxjh"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gnu-gettext)
diff --git a/gnu/packages/ocr.scm b/gnu/packages/ocr.scm
new file mode 100644
index 0000000000..32da42b95f
--- /dev/null
+++ b/gnu/packages/ocr.scm
@@ -0,0 +1,93 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages ocr)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system gnu)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages pkg-config))
+
+(define-public ocrad
+  (package
+    (name "ocrad")
+    (version "0.24")
+    (source (origin
+             (method url-fetch)
+             (uri (string-append "mirror://gnu/ocrad/ocrad-"
+                                 version ".tar.lz"))
+             (sha256
+              (base32
+               "0hhlx072d00bi9qia0nj5izsq4qkscpfz2mpbyfc72msl3hfvslv"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("lzip" ,lzip)))
+    (home-page "http://www.gnu.org/software/ocrad/")
+    (synopsis "Optical character recognition based on feature extraction")
+    (description
+     "GNU Ocrad is an optical character recognition program based on a
+feature extraction method.  It can read images in PBM, PGM or PPM formats and
+it produces text in 8-bit or UTF-8 formats.")
+    (license license:gpl3+)))
+
+(define-public tesseract-ocr
+  (package
+    (name "tesseract-ocr")
+    (version "3.02.02")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://tesseract-ocr.googlecode.com/files/tesseract-ocr-"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0g81m9y4iydp7kgr56mlkvjdwpp3mb01q385yhdnyvra7z5kkk96"))
+       (modules '((guix build utils)))
+       ;; Leptonica added a pkg-config file in the meanwhile.
+       (snippet
+        '(substitute* "tesseract.pc.in"
+           (("^# Requires: lept  ## .*")
+            "Requires: lept\n")))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)))
+    (propagated-inputs
+     `(("leptonica" ,leptonica)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after
+          unpack autogen
+          (lambda _
+            (zero? (system* "sh" "autogen.sh")))))
+       #:configure-flags
+       (let ((leptonica (assoc-ref %build-inputs "leptonica")))
+         (list (string-append "LIBLEPT_HEADERSDIR=" leptonica "/include")))))
+    (home-page "https://code.google.com/p/tesseract-ocr/")
+    (synopsis "Optical character recognition engine")
+    (description
+     "Tesseract is an optical character recognition (OCR) engine with very
+high accuracy.  It supports many languages, output text formatting, hOCR
+positional information and page layout analysis.  Several image formats are
+supported through the Leptonica library.  It can also detect whether text is
+monospaced or proportional.")
+    (license license:asl2.0)))
diff --git a/gnu/packages/ocrad.scm b/gnu/packages/ocrad.scm
deleted file mode 100644
index 8ad4f32670..0000000000
--- a/gnu/packages/ocrad.scm
+++ /dev/null
@@ -1,46 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu packages ocrad)
-  #:use-module (guix licenses)
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system gnu)
-  #:use-module ((gnu packages compression)
-                #:select (lzip)))
-
-(define-public ocrad
-  (package
-    (name "ocrad")
-    (version "0.24")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "mirror://gnu/ocrad/ocrad-"
-                                 version ".tar.lz"))
-             (sha256
-              (base32
-               "0hhlx072d00bi9qia0nj5izsq4qkscpfz2mpbyfc72msl3hfvslv"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("lzip" ,lzip)))
-    (home-page "http://www.gnu.org/software/ocrad/")
-    (synopsis "Optical character recognition based on feature extraction")
-    (description
-     "GNU Ocrad is an optical character recognition program based on a
-feature extraction method.  It can read images in PBM, PGM or PPM formats and
-it produces text in 8-bit or UTF-8 formats.")
-    (license gpl3+)))
diff --git a/gnu/packages/patches/audacity-fix-ffmpeg-binding.patch b/gnu/packages/patches/audacity-fix-ffmpeg-binding.patch
new file mode 100644
index 0000000000..d6d65338d9
--- /dev/null
+++ b/gnu/packages/patches/audacity-fix-ffmpeg-binding.patch
@@ -0,0 +1,32 @@
+This resolves some "declaration of C function conflicts with previous
+declaration" errors during compilation.
+
+--- a/src/FFmpeg.h	2015-02-21 00:33:33.853857529 +0100
++++ b/src/FFmpeg.h	2015-02-21 00:35:09.626497205 +0100
+@@ -688,7 +688,7 @@
+    FFMPEG_FUNCTION_WITH_RETURN(
+       AVOutputFormat*,
+       av_oformat_next,
+-      (AVOutputFormat *f),
++      (const AVOutputFormat *f),
+       (f)
+    );
+    FFMPEG_FUNCTION_WITH_RETURN(
+@@ -755,7 +755,7 @@
+    FFMPEG_FUNCTION_WITH_RETURN(
+       int,
+       av_fifo_size,
+-      (AVFifoBuffer *f),
++      (const AVFifoBuffer *f),
+       (f)
+    );
+    FFMPEG_FUNCTION_WITH_RETURN(
+@@ -801,7 +801,7 @@
+    FFMPEG_FUNCTION_WITH_RETURN(
+       AVDictionaryEntry *,
+       av_dict_get,
+-      (AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags),
++      (const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags),
+       (m, key, prev, flags)
+    );
+    FFMPEG_FUNCTION_WITH_RETURN(
diff --git a/gnu/packages/patches/icecat-CVE-2015-0817.patch b/gnu/packages/patches/icecat-CVE-2015-0817.patch
new file mode 100644
index 0000000000..bb530a535d
--- /dev/null
+++ b/gnu/packages/patches/icecat-CVE-2015-0817.patch
@@ -0,0 +1,44 @@
+From cedbdf8290018fbef65458e9e438c72adf2c2775 Mon Sep 17 00:00:00 2001
+From: Steve Fink <sfink@mozilla.com>
+Date: Thu, 19 Mar 2015 15:46:24 -0700
+Subject: [PATCH] Bug 1145255. r=luke, a=lmandel
+
+---
+ js/src/jit/AsmJS.cpp | 13 +++++++++++--
+ 1 file changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/js/src/jit/AsmJS.cpp b/js/src/jit/AsmJS.cpp
+index 302b5ab..1b8eed6 100644
+--- a/js/src/jit/AsmJS.cpp
++++ b/js/src/jit/AsmJS.cpp
+@@ -14,6 +14,7 @@
+ 
+ #include "jsmath.h"
+ #include "jsprf.h"
++#include "jsutil.h"
+ #include "jsworkers.h"
+ #include "prmjtime.h"
+ 
+@@ -3432,9 +3433,17 @@ FoldMaskedArrayIndex(FunctionCompiler &f, ParseNode **indexExpr, int32_t *mask,
+     if (IsLiteralOrConstInt(f, maskNode, &mask2)) {
+         // Flag the access to skip the bounds check if the mask ensures that an 'out of
+         // bounds' access can not occur based on the current heap length constraint.
+-        if (mask2 == 0 ||
+-            CountLeadingZeroes32(f.m().minHeapLength() - 1) <= CountLeadingZeroes32(mask2)) {
++        if (mask2 == 0) {
+             *needsBoundsCheck = NO_BOUNDS_CHECK;
++        } else {
++            uint32_t minHeap = f.m().minHeapLength();
++            uint32_t minHeapZeroes = CountLeadingZeroes32(minHeap - 1);
++            uint32_t maskZeroes = CountLeadingZeroes32(mask2);
++            if ((minHeapZeroes < maskZeroes) ||
++                (IsPowerOfTwo(minHeap) && minHeapZeroes == maskZeroes))
++            {
++                *needsBoundsCheck = NO_BOUNDS_CHECK;
++            }
+         }
+         *mask &= mask2;
+         *indexExpr = indexNode;
+-- 
+2.2.1
+
diff --git a/gnu/packages/patches/icecat-CVE-2015-0818-pt1.patch b/gnu/packages/patches/icecat-CVE-2015-0818-pt1.patch
new file mode 100644
index 0000000000..5d396eed6b
--- /dev/null
+++ b/gnu/packages/patches/icecat-CVE-2015-0818-pt1.patch
@@ -0,0 +1,67 @@
+From 79dddb16aaa58f5b5cef49dac6d234f500af3baf Mon Sep 17 00:00:00 2001
+From: Olli Pettay <Olli.Pettay@helsinki.fi>
+Date: Thu, 19 Mar 2015 21:53:32 -0400
+Subject: [PATCH] Bug 1144988 - Don't let other pages to load while doing
+ scroll-to-anchor. r=bz, a=lmandel
+
+---
+ docshell/base/nsDocShell.cpp | 23 ++++++++++++++---------
+ docshell/base/nsDocShell.h   |  1 +
+ 2 files changed, 15 insertions(+), 9 deletions(-)
+
+diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
+index 887c910..14ff3f2 100644
+--- a/docshell/base/nsDocShell.cpp
++++ b/docshell/base/nsDocShell.cpp
+@@ -4204,8 +4204,8 @@ nsDocShell::IsPrintingOrPP(bool aDisplayErrorDialog)
+ bool
+ nsDocShell::IsNavigationAllowed(bool aDisplayPrintErrorDialog)
+ {
+-  bool isAllowed = !IsPrintingOrPP(aDisplayPrintErrorDialog) && !mFiredUnloadEvent;
+-  if (!isAllowed) {
++  bool isAllowed = !IsPrintingOrPP(aDisplayPrintErrorDialog) &&
++                   !mFiredUnloadEvent && !mBlockNavigation;  if (!isAllowed) {
+     return false;
+   }
+   if (!mContentViewer) {
+@@ -9321,13 +9321,18 @@ nsDocShell::InternalLoad(nsIURI * aURI,
+             GetCurScrollPos(ScrollOrientation_X, &cx);
+             GetCurScrollPos(ScrollOrientation_Y, &cy);
+ 
+-            // ScrollToAnchor doesn't necessarily cause us to scroll the window;
+-            // the function decides whether a scroll is appropriate based on the
+-            // arguments it receives.  But even if we don't end up scrolling,
+-            // ScrollToAnchor performs other important tasks, such as informing
+-            // the presShell that we have a new hash.  See bug 680257.
+-            rv = ScrollToAnchor(curHash, newHash, aLoadType);
+-            NS_ENSURE_SUCCESS(rv, rv);
++            {
++                AutoRestore<bool> scrollingToAnchor(mBlockNavigation);
++                mBlockNavigation = true;
++
++                // ScrollToAnchor doesn't necessarily cause us to scroll the window;
++                // the function decides whether a scroll is appropriate based on the
++                // arguments it receives.  But even if we don't end up scrolling,
++                // ScrollToAnchor performs other important tasks, such as informing
++                // the presShell that we have a new hash.  See bug 680257.
++                rv = ScrollToAnchor(curHash, newHash, aLoadType);
++                NS_ENSURE_SUCCESS(rv, rv);
++            }
+ 
+             // Reset mLoadType to its original value once we exit this block,
+             // because this short-circuited load might have started after a
+diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
+index c191777..be353ee 100644
+--- a/docshell/base/nsDocShell.h
++++ b/docshell/base/nsDocShell.h
+@@ -835,6 +835,7 @@ protected:
+     bool                       mInPrivateBrowsing;
+     bool                       mUseRemoteTabs;
+     bool                       mDeviceSizeIsPageSize;
++    bool                       mBlockNavigation;
+ 
+     // Because scriptability depends on the mAllowJavascript values of our
+     // ancestors, we cache the effective scriptability and recompute it when
+-- 
+2.2.1
+
diff --git a/gnu/packages/patches/icecat-CVE-2015-0818-pt2.patch b/gnu/packages/patches/icecat-CVE-2015-0818-pt2.patch
new file mode 100644
index 0000000000..4eac5df4db
--- /dev/null
+++ b/gnu/packages/patches/icecat-CVE-2015-0818-pt2.patch
@@ -0,0 +1,28 @@
+From 83364c747c421b191f9d4012896a9e5a1d5223ad Mon Sep 17 00:00:00 2001
+From: Kyle Huey <khuey@kylehuey.com>
+Date: Fri, 20 Mar 2015 19:15:13 -0700
+Subject: [PATCH] Bug 1144988. r=bz a=lmandel
+
+---
+ docshell/base/nsDocShell.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
+index 4cddcef..bdf88a5cf 100644
+--- a/docshell/base/nsDocShell.cpp
++++ b/docshell/base/nsDocShell.cpp
+@@ -1322,9 +1322,10 @@ nsDocShell::LoadURI(nsIURI * aURI,
+     
+     // Note: we allow loads to get through here even if mFiredUnloadEvent is
+     // true; that case will get handled in LoadInternal or LoadHistoryEntry.
+-    if (IsPrintingOrPP()) {
++    if (IsPrintingOrPP() || mBlockNavigation) {
+       return NS_OK; // JS may not handle returning of an error code
+     }
++
+     nsCOMPtr<nsIURI> referrer;
+     nsCOMPtr<nsIInputStream> postStream;
+     nsCOMPtr<nsIInputStream> headersStream;
+-- 
+2.2.1
+
diff --git a/gnu/packages/patches/icecat-bug-1127780.patch b/gnu/packages/patches/icecat-bug-1127780.patch
new file mode 100644
index 0000000000..c433616087
--- /dev/null
+++ b/gnu/packages/patches/icecat-bug-1127780.patch
@@ -0,0 +1,25 @@
+From cf1de3d04302841aaa05aed8364da3399cbca9b4 Mon Sep 17 00:00:00 2001
+From: Bobby Holley <bobbyholley@gmail.com>
+Date: Tue, 17 Feb 2015 17:47:12 -0500
+Subject: [PATCH] Bug 1127780 - Add null check. r=bz, a=bkerensa
+
+---
+ js/xpconnect/wrappers/XrayWrapper.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/js/xpconnect/wrappers/XrayWrapper.h b/js/xpconnect/wrappers/XrayWrapper.h
+index ead095f1..cc8c580 100644
+--- a/js/xpconnect/wrappers/XrayWrapper.h
++++ b/js/xpconnect/wrappers/XrayWrapper.h
+@@ -131,7 +131,7 @@ class XrayWrapper : public Base {
+     {
+         if (!Base::getPrototypeOf(cx, wrapper, protop))
+             return false;
+-        if (WrapperFactory::IsXrayWrapper(protop))
++        if (!protop || WrapperFactory::IsXrayWrapper(protop))
+             return true;
+ 
+         protop.set(JS_GetObjectPrototype(cx, wrapper));
+-- 
+2.2.1
+
diff --git a/gnu/packages/patches/icecat-bug-1144991.patch b/gnu/packages/patches/icecat-bug-1144991.patch
new file mode 100644
index 0000000000..5632e37eb3
--- /dev/null
+++ b/gnu/packages/patches/icecat-bug-1144991.patch
@@ -0,0 +1,76 @@
+From ae49ed04f54c2f78d6ba7e545e0099602a3270fa Mon Sep 17 00:00:00 2001
+From: Boris Zbarsky <bzbarsky@mit.edu>
+Date: Thu, 19 Mar 2015 18:58:44 -0400
+Subject: [PATCH] Bug 1144991 - Be a bit more restrictive about when a
+ URI_IS_UI_RESOURCE source is allowed to link to a URI_IS_UI_RESOURCE URI that
+ doesn't have the same scheme. r=bholley, a=abillings
+
+---
+ caps/src/nsScriptSecurityManager.cpp | 38 +++++++++++++++++++++++++-----------
+ 1 file changed, 27 insertions(+), 11 deletions(-)
+
+diff --git a/caps/src/nsScriptSecurityManager.cpp b/caps/src/nsScriptSecurityManager.cpp
+index 3587358..6577b95 100644
+--- a/caps/src/nsScriptSecurityManager.cpp
++++ b/caps/src/nsScriptSecurityManager.cpp
+@@ -770,12 +770,31 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
+     NS_ENSURE_SUCCESS(rv, rv);
+     if (hasFlags) {
+         if (aFlags & nsIScriptSecurityManager::ALLOW_CHROME) {
++
++            // For now, don't change behavior for resource:// or moz-icon:// and
++            // just allow them.
+             if (!targetScheme.EqualsLiteral("chrome")) {
+-                // for now don't change behavior for resource: or moz-icon:
+                 return NS_OK;
+             }
+ 
+-            // allow load only if chrome package is whitelisted
++            // Allow a URI_IS_UI_RESOURCE source to link to a URI_IS_UI_RESOURCE
++            // target if ALLOW_CHROME is set.
++            //
++            // ALLOW_CHROME is a flag that we pass on all loads _except_ docshell
++            // loads (since docshell loads run the loaded content with its origin
++            // principal). So we're effectively allowing resource://, chrome://,
++            // and moz-icon:// source URIs to load resource://, chrome://, and
++            // moz-icon:// files, so long as they're not loading it as a document.
++            bool sourceIsUIResource;
++            rv = NS_URIChainHasFlags(sourceBaseURI,
++                                     nsIProtocolHandler::URI_IS_UI_RESOURCE,
++                                     &sourceIsUIResource);
++            NS_ENSURE_SUCCESS(rv, rv);
++            if (sourceIsUIResource) {
++                return NS_OK;
++            }
++
++            // Allow the load only if the chrome package is whitelisted.
+             nsCOMPtr<nsIXULChromeRegistry> reg(do_GetService(
+                                                  NS_CHROMEREGISTRY_CONTRACTID));
+             if (reg) {
+@@ -787,17 +806,14 @@ nsScriptSecurityManager::CheckLoadURIWithPrincipal(nsIPrincipal* aPrincipal,
+             }
+         }
+ 
+-        // resource: and chrome: are equivalent, securitywise
+-        // That's bogus!!  Fix this.  But watch out for
+-        // the view-source stylesheet?
+-        bool sourceIsChrome;
+-        rv = NS_URIChainHasFlags(sourceBaseURI,
+-                                 nsIProtocolHandler::URI_IS_UI_RESOURCE,
+-                                 &sourceIsChrome);
+-        NS_ENSURE_SUCCESS(rv, rv);
+-        if (sourceIsChrome) {
++        // Special-case the hidden window: it's allowed to load
++        // URI_IS_UI_RESOURCE no matter what.  Bug 1145470 tracks removing this.
++        nsAutoCString sourceSpec;
++        if (NS_SUCCEEDED(sourceBaseURI->GetSpec(sourceSpec)) &&
++            sourceSpec.EqualsLiteral("resource://gre-resources/hiddenWindow.html")) {
+             return NS_OK;
+         }
++
+         if (reportErrors) {
+             ReportError(nullptr, errorTag, sourceURI, aTargetURI);
+         }
+-- 
+2.2.1
+
diff --git a/gnu/packages/patches/icecat-bug-1145870.patch b/gnu/packages/patches/icecat-bug-1145870.patch
new file mode 100644
index 0000000000..34a018c697
--- /dev/null
+++ b/gnu/packages/patches/icecat-bug-1145870.patch
@@ -0,0 +1,43 @@
+From a40e2ebc2ab57dacb539d4e49ed4193764ff7112 Mon Sep 17 00:00:00 2001
+From: Kyle Huey <khuey@kylehuey.com>
+Date: Fri, 20 Mar 2015 19:05:56 -0700
+Subject: [PATCH] Bug 1145870. r=bz a=lmandel
+
+---
+ docshell/base/nsDocShell.cpp | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
+index 14ff3f2..4cddcef 100644
+--- a/docshell/base/nsDocShell.cpp
++++ b/docshell/base/nsDocShell.cpp
+@@ -8900,6 +8900,8 @@ nsDocShell::InternalLoad(nsIURI * aURI,
+ 
+     NS_ENSURE_TRUE(!mIsBeingDestroyed, NS_ERROR_NOT_AVAILABLE);
+ 
++    NS_ENSURE_TRUE(!mBlockNavigation, NS_ERROR_UNEXPECTED);
++
+     // wyciwyg urls can only be loaded through history. Any normal load of
+     // wyciwyg through docshell is  illegal. Disallow such loads.
+     if (aLoadType & LOAD_CMD_NORMAL) {
+@@ -12570,7 +12572,7 @@ nsDocShell::OnLinkClick(nsIContent* aContent,
+ {
+   NS_ASSERTION(NS_IsMainThread(), "wrong thread");
+ 
+-  if (!IsOKToLoadURI(aURI)) {
++  if (!IsOKToLoadURI(aURI) || mBlockNavigation) {
+     return NS_OK;
+   }
+ 
+@@ -12626,7 +12628,7 @@ nsDocShell::OnLinkClickSync(nsIContent *aContent,
+     *aRequest = nullptr;
+   }
+ 
+-  if (!IsOKToLoadURI(aURI)) {
++  if (!IsOKToLoadURI(aURI) || mBlockNavigation) {
+     return NS_OK;
+   }
+ 
+-- 
+2.2.1
+
diff --git a/gnu/packages/patches/icecat-bug-1146339.patch b/gnu/packages/patches/icecat-bug-1146339.patch
new file mode 100644
index 0000000000..9d858523b9
--- /dev/null
+++ b/gnu/packages/patches/icecat-bug-1146339.patch
@@ -0,0 +1,162 @@
+From 4ca86283a71427f27e810d77c8e75418f6428457 Mon Sep 17 00:00:00 2001
+From: Olli Pettay <Olli.Pettay@helsinki.fi>
+Date: Mon, 23 Mar 2015 22:23:53 -0400
+Subject: [PATCH] Bug 1146339 - Do anchor scrolling right before dispatching
+ popstate/hashchange. r=bz, a=lmandel
+
+---
+ docshell/base/nsDocShell.cpp | 64 +++++++++++++++++++++-----------------------
+ docshell/base/nsDocShell.h   |  1 -
+ 2 files changed, 30 insertions(+), 35 deletions(-)
+
+diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
+index bdf88a5cf..efb6a6e 100644
+--- a/docshell/base/nsDocShell.cpp
++++ b/docshell/base/nsDocShell.cpp
+@@ -1322,7 +1322,7 @@ nsDocShell::LoadURI(nsIURI * aURI,
+     
+     // Note: we allow loads to get through here even if mFiredUnloadEvent is
+     // true; that case will get handled in LoadInternal or LoadHistoryEntry.
+-    if (IsPrintingOrPP() || mBlockNavigation) {
++    if (IsPrintingOrPP()) {
+       return NS_OK; // JS may not handle returning of an error code
+     }
+ 
+@@ -4206,7 +4206,8 @@ bool
+ nsDocShell::IsNavigationAllowed(bool aDisplayPrintErrorDialog)
+ {
+   bool isAllowed = !IsPrintingOrPP(aDisplayPrintErrorDialog) &&
+-                   !mFiredUnloadEvent && !mBlockNavigation;  if (!isAllowed) {
++                   !mFiredUnloadEvent;
++  if (!isAllowed) {
+     return false;
+   }
+   if (!mContentViewer) {
+@@ -8901,8 +8902,6 @@ nsDocShell::InternalLoad(nsIURI * aURI,
+ 
+     NS_ENSURE_TRUE(!mIsBeingDestroyed, NS_ERROR_NOT_AVAILABLE);
+ 
+-    NS_ENSURE_TRUE(!mBlockNavigation, NS_ERROR_UNEXPECTED);
+-
+     // wyciwyg urls can only be loaded through history. Any normal load of
+     // wyciwyg through docshell is  illegal. Disallow such loads.
+     if (aLoadType & LOAD_CMD_NORMAL) {
+@@ -9324,19 +9323,6 @@ nsDocShell::InternalLoad(nsIURI * aURI,
+             GetCurScrollPos(ScrollOrientation_X, &cx);
+             GetCurScrollPos(ScrollOrientation_Y, &cy);
+ 
+-            {
+-                AutoRestore<bool> scrollingToAnchor(mBlockNavigation);
+-                mBlockNavigation = true;
+-
+-                // ScrollToAnchor doesn't necessarily cause us to scroll the window;
+-                // the function decides whether a scroll is appropriate based on the
+-                // arguments it receives.  But even if we don't end up scrolling,
+-                // ScrollToAnchor performs other important tasks, such as informing
+-                // the presShell that we have a new hash.  See bug 680257.
+-                rv = ScrollToAnchor(curHash, newHash, aLoadType);
+-                NS_ENSURE_SUCCESS(rv, rv);
+-            }
+-
+             // Reset mLoadType to its original value once we exit this block,
+             // because this short-circuited load might have started after a
+             // normal, network load, and we don't want to clobber its load type.
+@@ -9424,16 +9410,6 @@ nsDocShell::InternalLoad(nsIURI * aURI,
+                     mOSHE->SetCacheKey(cacheKey);
+             }
+ 
+-            /* restore previous position of scroller(s), if we're moving
+-             * back in history (bug 59774)
+-             */
+-            if (mOSHE && (aLoadType == LOAD_HISTORY || aLoadType == LOAD_RELOAD_NORMAL))
+-            {
+-                nscoord bx, by;
+-                mOSHE->GetScrollPosition(&bx, &by);
+-                SetCurScrollPosEx(bx, by);
+-            }
+-
+             /* Restore the original LSHE if we were loading something
+              * while short-circuited load was initiated.
+              */
+@@ -9471,12 +9447,36 @@ nsDocShell::InternalLoad(nsIURI * aURI,
+ 
+             SetDocCurrentStateObj(mOSHE);
+ 
++            // Inform the favicon service that the favicon for oldURI also
++            // applies to aURI.
++            CopyFavicon(currentURI, aURI, mInPrivateBrowsing);
++
++            nsRefPtr<nsGlobalWindow> win = mScriptGlobal ?
++              mScriptGlobal->GetCurrentInnerWindowInternal() : nullptr;
++
++            // ScrollToAnchor doesn't necessarily cause us to scroll the window;
++            // the function decides whether a scroll is appropriate based on the
++            // arguments it receives.  But even if we don't end up scrolling,
++            // ScrollToAnchor performs other important tasks, such as informing
++            // the presShell that we have a new hash.  See bug 680257.
++            rv = ScrollToAnchor(curHash, newHash, aLoadType);
++            NS_ENSURE_SUCCESS(rv, rv);
++
++            /* restore previous position of scroller(s), if we're moving
++             * back in history (bug 59774)
++             */
++            if (mOSHE && (aLoadType == LOAD_HISTORY ||
++                          aLoadType == LOAD_RELOAD_NORMAL)) {
++              nscoord bx, by;
++              mOSHE->GetScrollPosition(&bx, &by);
++              SetCurScrollPosEx(bx, by);
++            }
++
+             // Dispatch the popstate and hashchange events, as appropriate.
+             //
+             // The event dispatch below can cause us to re-enter script and
+             // destroy the docshell, nulling out mScriptGlobal. Hold a stack
+             // reference to avoid null derefs. See bug 914521.
+-            nsRefPtr<nsGlobalWindow> win = mScriptGlobal;
+             if (win) {
+                 // Fire a hashchange event URIs differ, and only in their hashes.
+                 bool doHashchange = sameExceptHashes && !curHash.Equals(newHash);
+@@ -9492,10 +9492,6 @@ nsDocShell::InternalLoad(nsIURI * aURI,
+                 }
+             }
+ 
+-            // Inform the favicon service that the favicon for oldURI also
+-            // applies to aURI.
+-            CopyFavicon(currentURI, aURI, mInPrivateBrowsing);
+-
+             return NS_OK;
+         }
+     }
+@@ -12573,7 +12569,7 @@ nsDocShell::OnLinkClick(nsIContent* aContent,
+ {
+   NS_ASSERTION(NS_IsMainThread(), "wrong thread");
+ 
+-  if (!IsOKToLoadURI(aURI) || mBlockNavigation) {
++  if (!IsOKToLoadURI(aURI)) {
+     return NS_OK;
+   }
+ 
+@@ -12629,7 +12625,7 @@ nsDocShell::OnLinkClickSync(nsIContent *aContent,
+     *aRequest = nullptr;
+   }
+ 
+-  if (!IsOKToLoadURI(aURI) || mBlockNavigation) {
++  if (!IsOKToLoadURI(aURI)) {
+     return NS_OK;
+   }
+ 
+diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
+index be353ee..c191777 100644
+--- a/docshell/base/nsDocShell.h
++++ b/docshell/base/nsDocShell.h
+@@ -835,7 +835,6 @@ protected:
+     bool                       mInPrivateBrowsing;
+     bool                       mUseRemoteTabs;
+     bool                       mDeviceSizeIsPageSize;
+-    bool                       mBlockNavigation;
+ 
+     // Because scriptability depends on the mAllowJavascript values of our
+     // ancestors, we cache the effective scriptability and recompute it when
+-- 
+2.2.1
+
diff --git a/gnu/packages/patches/lirc-localstatedir.patch b/gnu/packages/patches/lirc-localstatedir.patch
new file mode 100644
index 0000000000..43a41a743f
--- /dev/null
+++ b/gnu/packages/patches/lirc-localstatedir.patch
@@ -0,0 +1,13 @@
+Do not try to create $localstatedir as we cannot do this when it is /var.
+
+--- lirc-0.9.2a/daemons/Makefile.in
++++ lirc-0.9.2a/daemons/Makefile.in
+@@ -790,9 +790,6 @@
+ 	uninstall-local uninstall-sbinPROGRAMS
+ 
+ 
+-install-exec-local:
+-	test -d  $(DESTDIR)$(varrundir)/$(PACKAGE) \
+-		 || mkdir -p $(DESTDIR)$(varrundir)/$(PACKAGE)
+ uninstall-local:
+ 	-$(RM) $(DESTDIR)$(varrundir)/$(PACKAGE)/lircd
diff --git a/gnu/packages/patches/portaudio-audacity-compat.patch b/gnu/packages/patches/portaudio-audacity-compat.patch
new file mode 100644
index 0000000000..9f239ada35
--- /dev/null
+++ b/gnu/packages/patches/portaudio-audacity-compat.patch
@@ -0,0 +1,324 @@
+Description: Add features needed to make portmixer work with audacity.
+Author: Audacity Team
+Last-Update: 2011-12-07
+
+See <http://music.columbia.edu/pipermail/portaudio/2015-March/016611.html>.
+
+--- a/include/pa_win_ds.h
++++ b/include/pa_win_ds.h
+@@ -89,6 +89,21 @@
+ 

+ }PaWinDirectSoundStreamInfo;

+ 

++/** Retrieve the GUID of the input device.

++

++ @param stream The stream to query.

++

++ @return A pointer to the GUID, or NULL if none.

++*/

++LPGUID PaWinDS_GetStreamInputGUID( PaStream* s );

++

++/** Retrieve the GUID of the output device.

++

++ @param stream The stream to query.

++

++ @return A pointer to the GUID, or NULL if none.

++*/

++LPGUID PaWinDS_GetStreamOutputGUID( PaStream* s );

+ 

+ 

+ #ifdef __cplusplus

+--- a/include/portaudio.h
++++ b/include/portaudio.h
+@@ -1146,6 +1146,15 @@
+ signed long Pa_GetStreamWriteAvailable( PaStream* stream );
+ 
+ 
++/** Retrieve the host type handling an open stream.
++
++ @return Returns a non-negative value representing the host API type
++ handling an open stream or, a PaErrorCode (which are always negative)
++ if PortAudio is not initialized or an error is encountered.
++*/
++PaHostApiTypeId Pa_GetStreamHostApiType( PaStream* stream );
++
++
+ /* Miscellaneous utilities */
+ 
+ 
+--- /dev/null
++++ b/include/pa_unix_oss.h
+@@ -0,0 +1,104 @@
++#ifndef PA_UNIX_OSS_H
++#define PA_UNIX_OSS_H
++
++/*
++ * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $
++ * PortAudio Portable Real-Time Audio Library
++ * OSS-specific extensions
++ *
++ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files
++ * (the "Software"), to deal in the Software without restriction,
++ * including without limitation the rights to use, copy, modify, merge,
++ * publish, distribute, sublicense, and/or sell copies of the Software,
++ * and to permit persons to whom the Software is furnished to do so,
++ * subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * Any person wishing to distribute modifications to the Software is
++ * requested to send the modifications to the original developer so that
++ * they can be incorporated into the canonical version.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
++ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
++ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++
++/** @file
++ * OSS-specific PortAudio API extension header file.
++ */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++const char *PaOSS_GetStreamInputDevice( PaStream *s );
++
++const char *PaOSS_GetStreamOutputDevice( PaStream *s );
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
++#ifndef PA_UNIX_OSS_H
++#define PA_UNIX_OSS_H
++
++/*
++ * $Id: portaudio.patch,v 1.10 2009-06-30 04:52:59 llucius Exp $
++ * PortAudio Portable Real-Time Audio Library
++ * OSS-specific extensions
++ *
++ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files
++ * (the "Software"), to deal in the Software without restriction,
++ * including without limitation the rights to use, copy, modify, merge,
++ * publish, distribute, sublicense, and/or sell copies of the Software,
++ * and to permit persons to whom the Software is furnished to do so,
++ * subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * Any person wishing to distribute modifications to the Software is
++ * requested to send the modifications to the original developer so that
++ * they can be incorporated into the canonical version.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
++ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
++ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++
++/** @file
++ * OSS-specific PortAudio API extension header file.
++ */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++const char *PaOSS_GetStreamInputDevice( PaStream *s );
++
++const char *PaOSS_GetStreamOutputDevice( PaStream *s );
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+--- a/src/common/pa_front.c
++++ b/src/common/pa_front.c
+@@ -1216,8 +1216,10 @@
+                                   hostApiInputParametersPtr, hostApiOutputParametersPtr,
+                                   sampleRate, framesPerBuffer, streamFlags, streamCallback, userData );
+ 
+-    if( result == paNoError )
++    if( result == paNoError ) {
+         AddOpenStream( *stream );
++        PA_STREAM_REP(*stream)->hostApiType = hostApi->info.type;
++    }
+ 
+ 
+     PA_LOGAPI(("Pa_OpenStream returned:\n" ));
+@@ -1729,6 +1731,32 @@
+     return result;
+ }
+ 
++PaHostApiTypeId Pa_GetStreamHostApiType( PaStream* stream )
++{
++    PaError error = PaUtil_ValidateStreamPointer( stream );
++    PaHostApiTypeId result;
++
++#ifdef PA_LOG_API_CALLS
++    PaUtil_DebugPrint("Pa_GetStreamHostApiType called:\n" );
++    PaUtil_DebugPrint("\tPaStream* stream: 0x%p\n", stream );
++#endif
++
++    if( error == paNoError )
++    {
++        result = PA_STREAM_REP(stream)->hostApiType;
++    }
++    else
++    {
++        result = (PaHostApiTypeId) error;
++    }
++
++#ifdef PA_LOG_API_CALLS
++    PaUtil_DebugPrint("Pa_GetStreamHostApiType returned:\n" );
++    PaUtil_DebugPrint("\tPaError: %d ( %s )\n\n", result, Pa_GetErrorText( result ) );
++#endif
++
++    return result;
++}
+ 
+ PaError Pa_GetSampleSize( PaSampleFormat format )
+ {
+--- a/src/common/pa_stream.c
++++ b/src/common/pa_stream.c
+@@ -93,6 +93,8 @@
+     streamRepresentation->streamInfo.inputLatency = 0.;
+     streamRepresentation->streamInfo.outputLatency = 0.;
+     streamRepresentation->streamInfo.sampleRate = 0.;
++
++    streamRepresentation->hostApiType = 0;
+ }
+ 
+ 
+--- a/src/common/pa_stream.h
++++ b/src/common/pa_stream.h
+@@ -152,6 +152,7 @@
+     PaStreamFinishedCallback *streamFinishedCallback;
+     void *userData;
+     PaStreamInfo streamInfo;
++    PaHostApiTypeId hostApiType;
+ } PaUtilStreamRepresentation;
+ 
+ 
+--- a/src/hostapi/coreaudio/pa_mac_core_blocking.c
++++ b/src/hostapi/coreaudio/pa_mac_core_blocking.c
+@@ -66,6 +66,9 @@
+ #ifdef MOSX_USE_NON_ATOMIC_FLAG_BITS

+ # define OSAtomicOr32( a, b ) ( (*(b)) |= (a) )

+ # define OSAtomicAnd32( a, b ) ( (*(b)) &= (a) )

++#elif MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_3

++# define OSAtomicOr32( a, b ) BitOrAtomic( a, (UInt32 *) b )

++# define OSAtomicAnd32( a, b ) BitAndAtomic( a, (UInt32 *) b )

+ #else

+ # include <libkern/OSAtomic.h>

+ #endif

+--- a/src/hostapi/alsa/pa_linux_alsa.c
++++ b/src/hostapi/alsa/pa_linux_alsa.c
+@@ -611,6 +611,7 @@
+     StreamDirection streamDir;
+ 
+     snd_pcm_channel_area_t *channelAreas;  /* Needed for channel adaption */
++    int card;
+ } PaAlsaStreamComponent;
+ 
+ /* Implementation specific stream structure */
+@@ -1806,6 +1807,7 @@
+ {
+     PaError result = paNoError;
+     PaSampleFormat userSampleFormat = params->sampleFormat, hostSampleFormat = paNoError;
++    snd_pcm_info_t* pcmInfo;
+     assert( params->channelCount > 0 );
+ 
+     /* Make sure things have an initial value */
+@@ -1826,6 +1828,9 @@
+     self->device = params->device;
+ 
+     PA_ENSURE( AlsaOpen( &alsaApi->baseHostApiRep, params, streamDir, &self->pcm ) );
++
++    snd_pcm_info_alloca( &pcmInfo );
++    self->card = snd_pcm_info_get_card( pcmInfo );
+     self->nfds = alsa_snd_pcm_poll_descriptors_count( self->pcm );
+ 
+     PA_ENSURE( hostSampleFormat = PaUtil_SelectClosestAvailableFormat( GetAvailableFormats( self->pcm ), userSampleFormat ) );
+@@ -4519,9 +4524,7 @@
+     /* XXX: More descriptive error? */
+     PA_UNLESS( stream->capture.pcm, paDeviceUnavailable );
+ 
+-    alsa_snd_pcm_info_alloca( &pcmInfo );
+-    PA_ENSURE( alsa_snd_pcm_info( stream->capture.pcm, pcmInfo ) );
+-    *card = alsa_snd_pcm_info_get_card( pcmInfo );
++    *card = stream->capture.card;
+ 
+ error:
+     return result;
+@@ -4537,9 +4540,7 @@
+     /* XXX: More descriptive error? */
+     PA_UNLESS( stream->playback.pcm, paDeviceUnavailable );
+ 
+-    alsa_snd_pcm_info_alloca( &pcmInfo );
+-    PA_ENSURE( alsa_snd_pcm_info( stream->playback.pcm, pcmInfo ) );
+-    *card = alsa_snd_pcm_info_get_card( pcmInfo );
++    *card = stream->playback.card;
+ 
+ error:
+     return result;
+--- a/src/hostapi/oss/pa_unix_oss.c
++++ b/src/hostapi/oss/pa_unix_oss.c
+@@ -2028,3 +2028,26 @@
+ #endif
+ }
+ 
++const char *PaOSS_GetStreamInputDevice( PaStream* s )
++{
++    PaOssStream *stream = (PaOssStream*)s;
++
++    if( stream->capture )
++    {
++      return stream->capture->devName;
++    }
++
++   return NULL;
++}
++
++const char *PaOSS_GetStreamOutputDevice( PaStream* s )
++{
++    PaOssStream *stream = (PaOssStream*)s;
++
++    if( stream->playback )
++    {
++      return stream->playback->devName;
++    }
++
++   return NULL;
++}
+--- a/configure.in
++++ b/configure.in
+@@ -365,6 +365,7 @@
+                    DLL_LIBS="$DLL_LIBS -lossaudio"
+                    LIBS="$LIBS -lossaudio"
+            fi
++           INCLUDES="$INCLUDES pa_unix_oss.h"
+            AC_DEFINE(PA_USE_OSS,1)
+         fi
+ 
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 23afec7950..c5cae6de45 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -2837,6 +2837,34 @@ PNG, PostScript, PDF, and SVG file output.")
 (define-public python2-cairocffi
   (package-with-python2 python-cairocffi))
 
+(define-public python-decorator
+  (package
+    (name "python-decorator")
+    (version "3.4.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://pypi.python.org/packages/source/d/decorator/decorator-"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0i2bnlkh0p9gs76hb28mafandcrig2fmv56w9ai6mshxwqn0083k"))))
+    (build-system python-build-system)
+    (arguments '(#:tests? #f)) ; no test target
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)))
+    (home-page "http://pypi.python.org/pypi/decorator/")
+    (synopsis "Python module to simplify usage of decorators")
+    (description
+      "The aim of the decorator module is to simplify the usage of decorators
+for the average programmer, and to popularize decorators usage giving examples
+of useful decorators, such as memoize, tracing, redirecting_stdout, locked,
+etc.  The core of this module is a decorator factory.")
+    (license license:expat)))
+
+(define-public python2-decorator
+  (package-with-python2 python-decorator))
+
 (define-public python-ipython
   (package
     (name "python-ipython")
@@ -3307,6 +3335,35 @@ interfaces in an easy and portable manner.")
 (define-public python2-netifaces
   (package-with-python2 python-netifaces))
 
+(define-public python-networkx
+  (package
+    (name "python-networkx")
+    (version "1.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://pypi.python.org/packages/source/n/networkx/networkx-"
+             version ".tar.gz"))
+       (sha256
+        (base32 "0n8wy0yq1kmdq4wh68mlhwhkndvwzx48lg41a1z0sxxms0wfp033"))))
+    (build-system python-build-system)
+    ;; python-decorator is needed at runtime
+    (propagated-inputs
+     `(("python-decorator" ,python-decorator)))
+    (native-inputs
+     `(("python-setuptools" ,python-setuptools)
+       ("python-nose" ,python-nose)))
+    (home-page "http://networkx.github.io/")
+    (synopsis "Python module for creating and manipulating graphs and networks")
+    (description
+      "NetworkX is a Python package for the creation, manipulation, and study
+of the structure, dynamics, and functions of complex networks.")
+    (license bsd-3)))
+
+(define-public python2-networkx
+  (package-with-python2 python-networkx))
+
 (define-public snakemake
   (package
     (name "snakemake")
diff --git a/gnu/packages/search.scm b/gnu/packages/search.scm
index f56a85e005..d1133248df 100644
--- a/gnu/packages/search.scm
+++ b/gnu/packages/search.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -18,11 +19,13 @@
 
 (define-module (gnu packages search)
   #:use-module ((guix licenses)
-                #:select (gpl2+ bsd-3 x11))
+                #:select (gpl2+ gpl3+ bsd-3 x11))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages linux)
   #:export (xapian))
 
@@ -55,4 +58,68 @@ rich set of boolean query operators.")
     (home-page "http://xapian.org/")
     (license (list gpl2+ bsd-3 x11))))
 
+(define-public libtocc
+  (package
+    (name "libtocc")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/aidin36/tocc/releases/download/"
+                           "v" version "/tocc-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1kd2jd74m8ksc8s7hh0haz0q0c3n0mr39bbky262kk4l58f1g068"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("catch" ,catch-framework)))
+    (inputs `(("unqlite" ,unqlite)))
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-before
+                   configure chdir-source
+                   (lambda _ (chdir "libtocc/src")))
+                  (replace
+                   check
+                   (lambda _
+                     (with-directory-excursion "../tests"
+                       (and (zero? (system* "./configure"
+                                            (string-append "CONFIG_SHELL="
+                                                           (which "sh"))
+                                            (string-append "SHELL="
+                                                           (which "sh"))
+                                            "CPPFLAGS=-I../src"
+                                            "LDFLAGS=-L../src/.libs"))
+                            (zero? (system* "make"))
+                            (zero? (system* "./libtocctests")))))))))
+    (home-page "http://t-o-c-c.com/")
+    (synopsis "Tool for Obsessive Compulsive Classifiers")
+    (description
+     "libtocc is the engine of the Tocc project, a tag-based file management
+system.  The goal of Tocc is to provide a better system for classifying files
+that is more flexible than classic file systems that are based on a tree of
+files and directories.")
+    (license gpl3+)))
+
+(define-public tocc
+  (package
+    (name "tocc")
+    (version (package-version libtocc))
+    (source (package-source libtocc))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libtocc" ,libtocc)
+       ("unqlite" ,unqlite)))
+    (arguments
+     `(#:tests? #f                      ;No tests
+       #:phases (modify-phases %standard-phases
+                  (add-after
+                   unpack chdir-source
+                   (lambda _ (chdir "cli/src"))))))
+    (home-page "http://t-o-c-c.com/")
+    (synopsis "Command-line interface to libtocc")
+    (description
+     "Tocc is a tag-based file management system.  This package contains the
+command line tool for interacting with libtocc.")
+    (license gpl3+)))
+
 ;;; search.scm ends here
diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm
index 10697850f4..29251291dc 100644
--- a/gnu/packages/ssh.scm
+++ b/gnu/packages/ssh.scm
@@ -122,7 +122,7 @@ a server that supports the SSH-2 protocol.")
 (define-public openssh
   (package
    (name "openssh")
-   (version "6.7p1")
+   (version "6.8p1")
    (source (origin
             (method url-fetch)
             (uri (let ((tail (string-append name "-" version ".tar.gz")))
@@ -131,7 +131,7 @@ a server that supports the SSH-2 protocol.")
                          (string-append "ftp://ftp2.fr.openbsd.org/pub/OpenBSD/OpenSSH/portable/"
                                         tail))))
             (sha256 (base32
-                     "01smf9pvn2sk5qs80gkmc9acj07ckawi1b3xxyysp3c5mr73ky5j"))))
+                     "03hnrqvjq6ghg1mp3gkarfxh6g3x1n1vjrzpbc5lh9717vklrxiz"))))
    (build-system gnu-build-system)
    (inputs `(("groff" ,groff)
              ("openssl" ,openssl)
@@ -149,9 +149,10 @@ a server that supports the SSH-2 protocol.")
        (alist-cons-before
         'check 'patch-tests
         (lambda _
-          ;; remove tests that require the user sshd
+          ;; remove 't-exec' regress target which requires user 'sshd'
           (substitute* "regress/Makefile"
-            (("t10 t-exec") "t10")))
+            (("^(REGRESS_TARGETS=.*) t-exec(.*)" all pre post)
+             (string-append pre post))))
        (alist-replace
         'install
         (lambda* (#:key (make-flags '()) #:allow-other-keys)
diff --git a/gnu/packages/tor.scm b/gnu/packages/tor.scm
index 73becbba92..dcb6dab83e 100644
--- a/gnu/packages/tor.scm
+++ b/gnu/packages/tor.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -32,14 +32,14 @@
 (define-public tor
   (package
     (name "tor")
-    (version "0.2.5.10")
+    (version "0.2.5.11")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://www.torproject.org/dist/tor-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0fx8qnwh2f8ykfx0np4hyznjfi4xfy96z59pk96y3zyjvjjh5pdk"))))
+               "0sb7ai8r9c0nvdagjrbfqpri6x4njfxv954fxrjv46rzkkpgmq5f"))))
     (build-system gnu-build-system)
     (inputs
      `(("zlib" ,zlib)
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index a7f39b8249..bc589a6edb 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -24,12 +24,14 @@
   #:use-module ((guix licenses)
                 #:select (gpl2 gpl2+ gpl3+ lgpl2.1+ bsd-3 public-domain
                                fsf-free isc))
+  #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system waf)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages audio)
@@ -56,6 +58,7 @@
   #:use-module (gnu packages lua)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages ocr)
   #:use-module (gnu packages openssl)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
@@ -69,6 +72,7 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages web)
+  #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xiph)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -90,6 +94,13 @@
                (base32
                 "0czccp4fcpf2ykp16xcrzdfmnircz1ynhls334q374xknd5747d2"))))
     (build-system gnu-build-system)
+    (arguments `(#:configure-flags
+                 '(;; FIXME: liba52-0.7.4's config.guess fails on mips64el.
+                   ,@(if (%current-target-system)
+                         '()
+                         (let ((triplet
+                                (nix-system->gnu-triplet (%current-system))))
+                           (list (string-append "--build=" triplet)))))))
     (home-page "http://liba52.sourceforge.net/")
     (synopsis "ATSC A/52 stream decoder")
     (description "liba52 is a library for decoding ATSC A/52 streams.  The
@@ -195,6 +206,35 @@ developed according to the official standards for DV video: IEC 61834 and
 SMPTE 314M.")
     (license lgpl2.1+)))
 
+(define-public libva
+  (package
+    (name "libva")
+    (version "1.5.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://www.freedesktop.org/software/vaapi/releases/libva/libva-"
+             version".tar.bz2"))
+       (sha256
+        (base32 "01d01mm9fgpwzqycmjjcj3in3vvzcibi3f64icsw2sksmmgb4495"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libdrm" ,libdrm)
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxfixes" ,libxfixes)
+       ("mesa" ,mesa)))
+    (home-page "http://www.freedesktop.org/wiki/Software/vaapi/")
+    (synopsis "Video acceleration library")
+    (description "The main motivation for VA-API (Video Acceleration API) is
+to enable hardware accelerated video decode/encode at various
+entry-points (VLD, IDCT, Motion Compensation etc.) for prevailing coding
+standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
+    (license expat)))
+
 (define-public ffmpeg
   (package
     (name "ffmpeg")
@@ -636,6 +676,91 @@ several areas.")
     ;; is under lgpl3+, thus the whole project becomes gpl3+.
     (license gpl3+)))
 
+(define-public mpv
+  (package
+    (name "mpv")
+    (version "0.8.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/mpv-player/mpv/archive/v" version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "1kw9hr957cxqgm2i94bgqc6sskm6bwhm0akzckilhs460b43h409"))
+              (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system waf-build-system)
+    (native-inputs
+     `(("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-docutils" ,python-docutils)))
+    ;; Missing features: libguess, LIRC, Wayland, VDPAU, V4L2
+    (inputs
+     `(("alsa-lib" ,alsa-lib)
+       ("enca" ,enca)
+       ("ffmpeg" ,ffmpeg)
+       ("jack" ,jack-2)
+       ("ladspa" ,ladspa)
+       ("lcms" ,lcms)
+       ("libass" ,libass)
+       ("libbluray" ,libbluray)
+       ("libcaca" ,libcaca)
+       ("libbs2b" ,libbs2b)
+       ("libcdio-paranoia" ,libcdio-paranoia)
+       ("libdvdread" ,libdvdread)
+       ("libdvdnav" ,libdvdnav)
+       ("libjpeg" ,libjpeg)
+       ("libva" ,libva)
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxinerama" ,libxinerama)
+       ("libxrandr" ,libxrandr)
+       ("libxscrnsaver" ,libxscrnsaver)
+       ("libxv" ,libxv)
+       ("lua" ,lua)
+       ("mesa" ,mesa)
+       ("mpg123" ,mpg123)
+       ("pulseaudio" ,pulseaudio)
+       ("rsound" ,rsound)
+       ("samba" ,samba)
+       ("vapoursynth" ,vapoursynth)
+       ("waf" ,(origin
+                 (method url-fetch)
+                 ;; Keep this in sync with the version in the bootstrap.py
+                 ;; script of the source tarball.
+                 (uri "http://www.freehackers.org/~tnagy/release/waf-1.8.4")
+                 (sha256
+                  (base32
+                   "1a7skwgpl91adhcwlmdr76xzdpidh91hvcmj34zz6548bpx3a87h"))))
+       ("youtube-dl" ,youtube-dl)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before
+          configure setup-waf
+          (lambda* (#:key inputs #:allow-other-keys)
+            (copy-file (assoc-ref inputs "waf") "waf")
+            (setenv "CC" "gcc")))
+         (add-before
+          configure patch-wscript
+          (lambda* (#:key inputs #:allow-other-keys)
+            (substitute* "wscript"
+              ;; XXX Remove this when our Samba package provides a .pc file.
+              (("check_pkg_config\\('smbclient'\\)")
+               "check_cc(lib='smbclient')")
+              ;; XXX Remove this when our Lua package provides a .pc file.
+              (("check_lua")
+               "check_cc(lib='lua')")))))
+       ;; No check function defined.
+       #:tests? #f))
+    (home-page "http://mpv.io/")
+    (synopsis "Audio and video player")
+    (description "mpv is a general-purpose audio and video player.  It is a
+fork of mplayer2 and MPlayer.  It shares some features with the former
+projects while introducing many more.")
+    (license gpl2+)))
+
 (define-public libvpx
   (package
     (name "libvpx")
@@ -1065,6 +1190,47 @@ capabilities.")
             (alist-delete 'install
                %standard-phases)))))))))
 
+(define-public vapoursynth
+  (package
+    (name "vapoursynth")
+    (version "26")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/vapoursynth/vapoursynth/archive/R"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1qbg5kg0kgrxldd0ckn1s7vy7vx2ig8nqzv6djp38fxccpzw3x9k"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("cython" ,python-cython)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("python" ,python)
+       ("yasm" ,yasm)))
+    (inputs
+     `(("ffmpeg" ,ffmpeg)
+       ("libass" ,libass)
+       ("tesseract-ocr" ,tesseract-ocr)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after
+          unpack autogen
+          (lambda _
+            (zero? (system* "sh" "autogen.sh")))))))
+    (home-page "http://www.vapoursynth.com/")
+    (synopsis "Video processing framework")
+    (description "VapourSynth is a C++ library and Python module for video
+manipulation.  It aims to be a modern rewrite of Avisynth, supporting
+multithreading, generalized colorspaces, per frame properties, and videos with
+format changes.")
+    ;; As seen from the source files.
+    (license lgpl2.1+)))
+
 (define-public xvid
   (package
     (name "xvid")
diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm
index 99e2fce926..bf15b38f09 100644
--- a/gnu/packages/xdisorg.scm
+++ b/gnu/packages/xdisorg.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
@@ -26,6 +26,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (gnu packages)
   #:use-module (gnu packages compression)
@@ -442,6 +443,13 @@ transparent text on your screen.")
     (inputs
      `(("libx11" ,libx11)
        ("guile" ,guile-2.0)))
+    (arguments `(#:configure-flags
+                 '(;; FIXME: xbindkeys-1.8.6's config.guess fails on mips64el.
+                   ,@(if (%current-target-system)
+                         '()
+                         (let ((triplet
+                                (nix-system->gnu-triplet (%current-system))))
+                           (list (string-append "--build=" triplet)))))))
     (home-page "http://www.nongnu.org/xbindkeys/")
     (synopsis "Associate a combination of keys with a shell command")
     (description
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 776c858c16..cfb4cc1643 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -4884,14 +4884,14 @@ user-friendly mechanism to start the X server.")
 (define-public xterm
   (package
     (name "xterm")
-    (version "315")
+    (version "317")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://ftp.invisible-island.net/xterm/"
                                   "xterm-" version ".tgz"))
               (sha256
                (base32
-                "00kxg36hzp011x98ib6x503pbhj1ldh6hb82l5x3a68s554h1rpy"))))
+                "0v9mirqws1vb8wxbdgn1w166ln7xmapg1913c7kzjs3mwkdv1rfj"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-wide-chars" "--enable-256-color"
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index a9126032bb..24e6d32359 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -640,6 +640,7 @@ passed to @command{guix-daemon}."
 
   (with-monad %store-monad
     (return (service
+             (documentation "Run the Guix daemon.")
              (provision '(guix-daemon))
              (requirement '(user-processes))
              (start
diff --git a/gnu/services/lirc.scm b/gnu/services/lirc.scm
new file mode 100644
index 0000000000..857f362db7
--- /dev/null
+++ b/gnu/services/lirc.scm
@@ -0,0 +1,68 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services lirc)
+  #:use-module (gnu services)
+  #:use-module (gnu packages lirc)
+  #:use-module (guix monads)
+  #:use-module (guix store)
+  #:use-module (guix gexp)
+  #:export (lirc-service))
+
+;;; Commentary:
+;;;
+;;; LIRC services.
+;;;
+;;; Code:
+
+(define* (lirc-service #:key (lirc lirc)
+                       device driver config-file
+                       (extra-options '()))
+  "Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
+decodes infrared signals from remote controls.
+
+The daemon will use specified @var{device}, @var{driver} and
+@var{config-file} (configuration file name).
+
+Finally, @var{extra-options} is a list of additional command-line options
+passed to @command{lircd}."
+  (with-monad %store-monad
+    (return
+     (service
+      (provision '(lircd))
+      (documentation "Run the LIRC daemon.")
+      (requirement '(user-processes))
+      (start #~(make-forkexec-constructor
+                (list (string-append #$lirc "/sbin/lircd")
+                      "--nodaemon"
+                      #$@(if device
+                             #~("--device" #$device)
+                             #~())
+                      #$@(if driver
+                             #~("--driver" #$driver)
+                             #~())
+                      #$@(if config-file
+                             #~(#$config-file)
+                             #~())
+                      #$@extra-options)))
+      (stop #~(make-kill-destructor))
+      (activate #~(begin
+                    (use-modules (guix build utils))
+                    (mkdir-p "/var/run/lirc")))))))
+
+;;; lirc.scm ends here
diff --git a/guix/build/gremlin.scm b/guix/build/gremlin.scm
new file mode 100644
index 0000000000..e8429129e1
--- /dev/null
+++ b/guix/build/gremlin.scm
@@ -0,0 +1,236 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix build gremlin)
+  #:use-module (guix elf)
+  #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-26)
+  #:use-module (system foreign)
+  #:use-module (rnrs bytevectors)
+  #:use-module (rnrs io ports)
+  #:export (elf-dynamic-info
+            elf-dynamic-info?
+            elf-dynamic-info-sopath
+            elf-dynamic-info-needed
+            elf-dynamic-info-rpath
+            elf-dynamic-info-runpath
+
+            validate-needed-in-runpath))
+
+;;; Commentary:
+;;;
+;;; A gremlin is sort-of like an elf, you know, and this module provides tools
+;;; to deal with dynamic-link information from ELF files.
+;;;
+;;; Code:
+
+(define (dynamic-link-segment elf)
+  "Return the 'PT_DYNAMIC' segment of ELF--i.e., the segment that contains
+dynamic linking information."
+  (find (lambda (segment)
+          (= (elf-segment-type segment) PT_DYNAMIC))
+        (elf-segments elf)))
+
+(define (word-reader size byte-order)
+  "Return a procedure to read a word of SIZE bytes according to BYTE-ORDER."
+  (case size
+    ((8)
+     (lambda (bv index)
+       (bytevector-u64-ref bv index byte-order)))
+    ((4)
+     (lambda (bv index)
+       (bytevector-u32-ref bv index byte-order)))))
+
+
+;; Dynamic entry:
+;;
+;; typedef struct
+;; {
+;;   Elf64_Sxword       d_tag;   /* Dynamic entry type */
+;;   union
+;;     {
+;;       Elf64_Xword d_val;      /* Integer value */
+;;       Elf64_Addr d_ptr;       /* Address value */
+;;     } d_un;
+;; } Elf64_Dyn;
+
+(define (raw-dynamic-entries elf segment)
+  "Return as a list of type/value pairs all the dynamic entries found in
+SEGMENT, the 'PT_DYNAMIC' segment of ELF.  In the result, each car is a DT_
+value, and the interpretation of the cdr depends on the type."
+  (define start
+    (elf-segment-offset segment))
+  (define bytes
+    (elf-bytes elf))
+  (define word-size
+    (elf-word-size elf))
+  (define byte-order
+    (elf-byte-order elf))
+  (define read-word
+    (word-reader word-size byte-order))
+
+  (let loop ((offset 0)
+             (result '()))
+    (if (>= offset (elf-segment-memsz segment))
+        (reverse result)
+        (let ((type  (read-word bytes (+ start offset)))
+              (value (read-word bytes (+ start offset word-size))))
+          (if (= type DT_NULL)                    ;finished?
+              (reverse result)
+              (loop (+ offset (* 2 word-size))
+                    (alist-cons type value result)))))))
+
+(define (vma->offset elf vma)
+  "Convert VMA, a virtual memory address, to an offset within ELF.
+
+Do that by looking at the loadable program segment (PT_LOAD) of ELF that
+contains VMA and by taking into account that segment's virtual address and
+offset."
+  ;; See 'offset_from_vma' in Binutils.
+  (define loads
+    (filter (lambda (segment)
+              (= (elf-segment-type segment) PT_LOAD))
+            (elf-segments elf)))
+
+  (let ((load (find (lambda (segment)
+                      (let ((vaddr (elf-segment-vaddr segment)))
+                        (and (>= vma vaddr)
+                             (< vma (+ (elf-segment-memsz segment)
+                                       vaddr)))))
+                    loads)))
+    (+ (- vma (elf-segment-vaddr load))
+       (elf-segment-offset load))))
+
+(define (dynamic-entries elf segment)
+  "Return all the dynamic entries found in SEGMENT, the 'PT_DYNAMIC' segment
+of ELF, as a list of type/value pairs.  The type is a DT_ value, and the value
+may be a string or an integer depending on the entry type (for instance, the
+value of DT_NEEDED entries is a string.)"
+  (define entries
+    (raw-dynamic-entries elf segment))
+
+  (define string-table-offset
+    (any (match-lambda
+            ((type . value)
+             (and (= type DT_STRTAB) value))
+            (_ #f))
+         entries))
+
+  (define (interpret-dynamic-entry type value)
+    (cond ((memv type (list DT_NEEDED DT_SONAME DT_RPATH DT_RUNPATH))
+           (if string-table-offset
+               (pointer->string
+                (bytevector->pointer (elf-bytes elf)
+                                     (vma->offset
+                                      elf
+                                      (+ string-table-offset value))))
+               value))
+          (else
+           value)))
+
+  (map (match-lambda
+         ((type . value)
+          (cons type (interpret-dynamic-entry type value))))
+       entries))
+
+
+;;;
+;;; High-level interface.
+;;;
+
+(define-record-type <elf-dynamic-info>
+  (%elf-dynamic-info soname needed rpath runpath)
+  elf-dynamic-info?
+  (soname    elf-dynamic-info-soname)
+  (needed    elf-dynamic-info-needed)
+  (rpath     elf-dynamic-info-rpath)
+  (runpath   elf-dynamic-info-runpath))
+
+(define search-path->list
+  (let ((not-colon (char-set-complement (char-set #\:))))
+    (lambda (str)
+      "Split STR on ':' characters."
+      (string-tokenize str not-colon))))
+
+(define (elf-dynamic-info elf)
+  "Return dynamic-link information for ELF as an <elf-dynamic-info> object, or
+#f if ELF lacks dynamic-link information."
+  (match (dynamic-link-segment elf)
+    (#f #f)
+    ((? elf-segment? dynamic)
+     (let ((entries (dynamic-entries elf dynamic)))
+       (%elf-dynamic-info (assv-ref entries DT_SONAME)
+                          (filter-map (match-lambda
+                                        ((type . value)
+                                         (and (= type DT_NEEDED) value))
+                                        (_ #f))
+                                      entries)
+                          (or (and=> (assv-ref entries DT_RPATH)
+                                     search-path->list)
+                              '())
+                          (or (and=> (assv-ref entries DT_RUNPATH)
+                                     search-path->list)
+                              '()))))))
+
+(define %libc-libraries
+  ;; List of libraries as of glibc 2.21 (there are more but those are
+  ;; typically mean to be LD_PRELOADed and thus do not appear as NEEDED.)
+  '("libanl.so"
+    "libcrypt.so"
+    "libc.so"
+    "libdl.so"
+    "libm.so"
+    "libpthread.so"
+    "libresolv.so"
+    "librt.so"
+    "libutil.so"))
+
+(define (libc-library? lib)
+  "Return #t if LIB is one of the libraries shipped with the GNU C Library."
+  (find (lambda (libc-lib)
+          (string-prefix? libc-lib lib))
+        %libc-libraries))
+
+(define* (validate-needed-in-runpath file
+                                     #:key (always-found? libc-library?))
+  "Return #t if all the libraries listed as FILE's 'DT_NEEDED' entries are
+present in its RUNPATH, or if FILE lacks dynamic-link information.  Return #f
+otherwise.  Libraries whose name matches ALWAYS-FOUND? are considered to be
+always available."
+  (let* ((elf     (call-with-input-file file
+                    (compose parse-elf get-bytevector-all)))
+         (dyninfo (elf-dynamic-info elf)))
+    (when dyninfo
+      (let* ((runpath   (elf-dynamic-info-runpath dyninfo))
+             (needed    (remove always-found?
+                                (elf-dynamic-info-needed dyninfo)))
+             (not-found (remove (cut search-path runpath <>)
+                                needed)))
+        (for-each (lambda (lib)
+                    (format (current-error-port)
+                            "error: '~a' depends on '~a', which cannot \
+be found in RUNPATH ~s~%"
+                            file lib runpath))
+                  not-found)
+        ;; (when (null? not-found)
+        ;;   (format (current-error-port) "~a is OK~%" file))
+        (null? not-found)))))
+
+;;; gremlin.scm ends here
diff --git a/guix/elf.scm b/guix/elf.scm
index a4b0e819a5..4283dbd2e4 100644
--- a/guix/elf.scm
+++ b/guix/elf.scm
@@ -1,6 +1,6 @@
 ;;; Guile ELF reader and writer
 
-;; Copyright (C)  2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+;; Copyright (C)  2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
 
 ;;;; This library is free software; you can redistribute it and/or
 ;;;; modify it under the terms of the GNU Lesser General Public
@@ -571,6 +571,7 @@
      ((4) parse-elf32-program-header)
      ((8) parse-elf64-program-header)
      (else (error "unhandled pointer size")))
+   n
    (elf-bytes elf)
    (+ (elf-phoff elf) (* n (elf-phentsize elf)))
    (elf-byte-order elf)))
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 01290dba18..de8b7bbb46 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -31,6 +31,8 @@
 
             gexp-input
             gexp-input?
+            local-file
+            local-file?
 
             gexp->derivation
             gexp->file
@@ -135,6 +137,37 @@ cross-compiling.)"
 
 
 ;;;
+;;; Local files.
+;;;
+
+(define-record-type <local-file>
+  (%local-file file name recursive?)
+  local-file?
+  (file       local-file-file)                    ;string
+  (name       local-file-name)                    ;string
+  (recursive? local-file-recursive?))             ;Boolean
+
+(define* (local-file file #:optional (name (basename file))
+                     #:key (recursive? #t))
+  "Return an object representing local file FILE to add to the store; this
+object can be used in a gexp.  FILE will be added to the store under NAME--by
+default the base name of FILE.
+
+When RECURSIVE? is true, the contents of FILE are added recursively; if FILE
+designates a flat file and RECURSIVE? is true, its contents are added, and its
+permission bits are kept.
+
+This is the declarative counterpart of the 'interned-file' monadic procedure."
+  (%local-file file name recursive?))
+
+(define-gexp-compiler (local-file-compiler (file local-file?) system target)
+  ;; "Compile" FILE by adding it to the store.
+  (match file
+    (($ <local-file> file name recursive?)
+     (interned-file file name #:recursive? recursive?))))
+
+
+;;;
 ;;; Inputs & outputs.
 ;;;
 
@@ -171,12 +204,12 @@ the cross-compilation target triplet."
   (with-monad %store-monad
     (sequence %store-monad
               (map (match-lambda
-                    ((and ((? struct? thing) sub-drv ...) input)
-                     (mlet* %store-monad ((lower -> (lookup-compiler thing))
-                                          (drv (lower thing system target)))
-                       (return `(,drv ,@sub-drv))))
-                    (input
-                     (return input)))
+                     (((? struct? thing) sub-drv ...)
+                      (mlet* %store-monad ((lower -> (lookup-compiler thing))
+                                           (drv (lower thing system target)))
+                        (return `(,drv ,@sub-drv))))
+                     (input
+                      (return input)))
                    inputs))))
 
 (define* (lower-reference-graphs graphs #:key system target)
@@ -453,8 +486,13 @@ and in the current monad setting (system type, etc.)"
         (($ <gexp-input> (? struct? thing) output n?)
          (let ((lower  (lookup-compiler thing))
                (target (if (or n? native?) #f target)))
-           (mlet %store-monad ((drv (lower thing system target)))
-             (return (derivation->output-path drv output)))))
+           (mlet %store-monad ((obj (lower thing system target)))
+             ;; OBJ must be either a derivation or a store file name.
+             (return (match obj
+                       ((? derivation? drv)
+                        (derivation->output-path drv output))
+                       ((? string? file)
+                        file))))))
         (($ <gexp-input> x)
          (return x))
         (x
@@ -809,8 +847,9 @@ its search path."
 
 (define* (text-file* name #:rest text)
   "Return as a monadic value a derivation that builds a text file containing
-all of TEXT.  TEXT may list, in addition to strings, packages, derivations,
-and store file names; the resulting store file holds references to all these."
+all of TEXT.  TEXT may list, in addition to strings, objects of any type that
+can be used in a gexp: packages, derivations, local file objects, etc.  The
+resulting store file holds references to all these."
   (define builder
     (gexp (call-with-output-file (ungexp output "out")
             (lambda (port)
diff --git a/nix/nix-daemon/guix-daemon.cc b/nix/nix-daemon/guix-daemon.cc
index ca39c2f497..f096ed5a97 100644
--- a/nix/nix-daemon/guix-daemon.cc
+++ b/nix/nix-daemon/guix-daemon.cc
@@ -310,7 +310,7 @@ main (int argc, char *argv[])
 	  if (subs == "default")
 	    {
 	      string subst =
-		settings.nixLibexecDir + "/guix/substitute-binary";
+		settings.nixLibexecDir + "/guix/substitute";
 	      setenv ("NIX_SUBSTITUTERS", subst.c_str (), 1);
 	    }
 	}
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index 619f6f99fc..39115f970b 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -9,7 +9,7 @@ guix/scripts/package.scm
 guix/scripts/gc.scm
 guix/scripts/hash.scm
 guix/scripts/pull.scm
-guix/scripts/substitute-binary.scm
+guix/scripts/substitute.scm
 guix/scripts/authenticate.scm
 guix/scripts/system.scm
 guix/scripts/lint.scm
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 0540969503..f81ef39860 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -97,6 +97,18 @@
                               %store (package-source coreutils))))
                  (gexp->sexp* exp)))))
 
+(test-assert "one local file"
+  (let* ((file  (search-path %load-path "guix.scm"))
+         (local (local-file file))
+         (exp   (gexp (display (ungexp local))))
+         (intd  (add-to-store %store (basename file) #t
+                              "sha256" file)))
+    (and (gexp? exp)
+         (match (gexp-inputs exp)
+           (((x "out"))
+            (eq? x local)))
+         (equal? `(display ,intd) (gexp->sexp* exp)))))
+
 (test-assert "same input twice"
   (let ((exp (gexp (begin
                      (display (ungexp coreutils))
@@ -336,6 +348,20 @@
     (mlet %store-monad ((drv mdrv))
       (return (string=? system (derivation-system drv))))))
 
+(test-assertm "gexp->derivation, local-file"
+  (mlet* %store-monad ((file ->  (search-path %load-path "guix.scm"))
+                       (intd     (interned-file file))
+                       (local -> (local-file file))
+                       (exp ->   (gexp (begin
+                                         (stat (ungexp local))
+                                         (symlink (ungexp local)
+                                                  (ungexp output)))))
+                       (drv      (gexp->derivation "local-file" exp)))
+    (mbegin %store-monad
+      (built-derivations (list drv))
+      (return (string=? (readlink (derivation->output-path drv))
+                        intd)))))
+
 (test-assertm "gexp->derivation, cross-compilation"
   (mlet* %store-monad ((target -> "mips64el-linux")
                        (exp    -> (gexp (list (ungexp coreutils)
diff --git a/tests/gremlin.scm b/tests/gremlin.scm
new file mode 100644
index 0000000000..225a72ff9f
--- /dev/null
+++ b/tests/gremlin.scm
@@ -0,0 +1,57 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-gremlin)
+  #:use-module (guix elf)
+  #:use-module (guix build utils)
+  #:use-module (guix build gremlin)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-64)
+  #:use-module (rnrs io ports)
+  #:use-module (ice-9 match))
+
+(define %guile-executable
+  (match (command-line)
+    ((program . _)
+     (and (file-exists? program) (elf-file? program)
+          program))
+    (_
+     #f)))
+
+(define read-elf
+  (compose parse-elf get-bytevector-all))
+
+
+(test-begin "gremlin")
+
+(unless %guile-executable (test-skip 1))
+(test-assert "elf-dynamic-info-needed, executable"
+  (let* ((elf     (call-with-input-file %guile-executable read-elf))
+         (dyninfo (elf-dynamic-info elf)))
+    (or (not dyninfo)                             ;static executable
+        (lset<= string=?
+                (list (string-append "libguile-" (effective-version))
+                      "libgc" "libunistring" "libffi")
+                (map (lambda (lib)
+                       (string-take lib (string-contains lib ".so")))
+                     (elf-dynamic-info-needed dyninfo))))))
+
+(test-end "gremlin")
+
+
+(exit (= (test-runner-fail-count (test-runner-current)) 0))
diff --git a/tests/guix-daemon.sh b/tests/guix-daemon.sh
index a73c9e22e3..87f17def12 100644
--- a/tests/guix-daemon.sh
+++ b/tests/guix-daemon.sh
@@ -17,7 +17,7 @@
 # along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 #
-# Test the daemon and its interaction with 'guix substitute-binary'.
+# Test the daemon and its interaction with 'guix substitute'.
 #
 
 set -e
@@ -51,7 +51,7 @@ Deriver: $drv
 EOF
 
 # Remove the cached narinfo.
-rm -f "$XDG_CACHE_HOME/guix/substitute-binary/$hash_part"
+rm -f "$XDG_CACHE_HOME/guix/substitute/$hash_part"
 
 # Make sure we see the substitute.
 guile -c '
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index 76e722fbc1..1b77d1a0db 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -17,7 +17,7 @@
 # along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 #
-# Test the daemon and its interaction with 'guix substitute-binary'.
+# Test the daemon and its interaction with 'guix substitute'.
 #
 
 set -e
diff --git a/tests/lint.scm b/tests/lint.scm
index c0599224b7..2312b80934 100644
--- a/tests/lint.scm
+++ b/tests/lint.scm
@@ -18,8 +18,7 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
-
-(define-module (test-packages)
+(define-module (test-lint)
   #:use-module (guix tests)
   #:use-module (guix download)
   #:use-module (guix build-system gnu)