~ruther/guix-local

abcf4858cda9ded59671681ab9820b5358d8bb16 — Mark H Weaver 9 years ago 82adf49 + bfb48f4
Merge branch 'master' into core-updates
100 files changed, 4550 insertions(+), 2802 deletions(-)

M .mailmap
M Makefile.am
M doc/guix.texi
M gnu/local.mk
M gnu/packages/admin.scm
M gnu/packages/astronomy.scm
M gnu/packages/audio.scm
M gnu/packages/autogen.scm
M gnu/packages/bash.scm
M gnu/packages/bioinformatics.scm
M gnu/packages/bootstrap.scm
M gnu/packages/calendar.scm
M gnu/packages/ccache.scm
M gnu/packages/certs.scm
M gnu/packages/check.scm
M gnu/packages/databases.scm
M gnu/packages/dav.scm
M gnu/packages/dejagnu.scm
M gnu/packages/emacs.scm
A gnu/packages/embedded.scm
M gnu/packages/fonts.scm
M gnu/packages/fontutils.scm
A gnu/packages/fpga.scm
M gnu/packages/freeipmi.scm
M gnu/packages/games.scm
M gnu/packages/gcc.scm
M gnu/packages/gdb.scm
M gnu/packages/gnome.scm
M gnu/packages/gnupg.scm
M gnu/packages/gnuzilla.scm
M gnu/packages/guile.scm
M gnu/packages/haskell.scm
M gnu/packages/image.scm
M gnu/packages/irc.scm
M gnu/packages/libupnp.scm
M gnu/packages/linux.scm
M gnu/packages/lisp.scm
M gnu/packages/lynx.scm
M gnu/packages/mail.scm
M gnu/packages/man.scm
M gnu/packages/maths.scm
M gnu/packages/messaging.scm
M gnu/packages/music.scm
M gnu/packages/ncdu.scm
A gnu/packages/patches/clx-remove-demo.patch
A gnu/packages/patches/hdf-eos5-build-shared.patch
A gnu/packages/patches/hdf-eos5-fix-szip.patch
A gnu/packages/patches/hdf-eos5-fortrantests.patch
A gnu/packages/patches/hdf-eos5-remove-gctp.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt1.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt2.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt3.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt4.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt5.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt6.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt7.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt8.patch
D gnu/packages/patches/icecat-CVE-2016-2818-pt9.patch
D gnu/packages/patches/icecat-CVE-2016-2819.patch
D gnu/packages/patches/icecat-CVE-2016-2821.patch
D gnu/packages/patches/icecat-CVE-2016-2824.patch
D gnu/packages/patches/icecat-CVE-2016-2828.patch
D gnu/packages/patches/icecat-CVE-2016-2831.patch
R gnu/packages/patches/{icecat-avoid-bundled-includes => icecat-avoid-bundled-libraries}.patch
A gnu/packages/patches/libupnp-CVE-2016-6255.patch
A gnu/packages/patches/qemu-CVE-2016-8576.patch
A gnu/packages/patches/qemu-CVE-2016-8577.patch
A gnu/packages/patches/qemu-CVE-2016-8578.patch
D gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch
D gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch
D gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch
D gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch
D gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch
D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch
D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch
D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch
D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch
M gnu/packages/python.scm
M gnu/packages/qemu.scm
M gnu/packages/ruby.scm
M gnu/packages/samba.scm
M gnu/packages/scanner.scm
M gnu/packages/ssh.scm
M gnu/packages/statistics.scm
M gnu/packages/tbb.scm
M gnu/packages/video.scm
M gnu/packages/web.scm
M gnu/services/xorg.scm
A guix/build-system/asdf.scm
A guix/build/asdf-build-system.scm
M guix/build/bournish.scm
M guix/build/graft.scm
A guix/build/lisp-utils.scm
M guix/import/github.scm
M guix/licenses.scm
M guix/scripts/substitute.scm
M guix/scripts/system.scm
M guix/utils.scm
M po/guix/de.po
M tests/utils.scm
M .mailmap => .mailmap +4 -4
@@ 30,10 30,10 @@ Ludovic Courtès <ludo@gnu.org> <ludovic.courtes@inria.fr>
Mathieu Lirzin <mthl@gnu.org> <mthl@openmailbox.org>
Mathieu Lirzin <mthl@gnu.org> <mathieu.lirzin@openmailbox.org>
Nikita Karetnikov <nikita@karetnikov.org> <nikita.karetnikov@gmail.com>
ng0 <ngillmann@runbox.com> <ng0@we.make.ritual.n0.is>
ng0 <ngillmann@runbox.com> <niasterisk@grrlz.net>
ng0 <ngillmann@runbox.com> <ng@niasterisk.space>
ng0 <ngillmann@runbox.com> <ng0@libertad.pw>
ng0 <ng0@we.make.ritual.n0.is> <ngillmann@runbox.com>
ng0 <ng0@we.make.ritual.n0.is> <niasterisk@grrlz.net>
ng0 <ng0@we.make.ritual.n0.is> <ng@niasterisk.space>
ng0 <ng0@we.make.ritual.n0.is> <ng0@libertad.pw>
Pjotr Prins <pjotr.public01@thebird.nl>
Pjotr Prins <pjotr.public01@thebird.nl> <pjotr.public12@thebird.nl>
Raimon Grau <raimonster@gmail.com> <raimon@3scale.net>

M Makefile.am => Makefile.am +3 -0
@@ 63,6 63,7 @@ MODULES =					\
  guix/build-system/ant.scm			\
  guix/build-system/cmake.scm			\
  guix/build-system/emacs.scm			\
  guix/build-system/asdf.scm			\
  guix/build-system/glib-or-gtk.scm		\
  guix/build-system/gnu.scm			\
  guix/build-system/haskell.scm			\


@@ 84,6 85,7 @@ MODULES =					\
  guix/build/download.scm			\
  guix/build/cmake-build-system.scm		\
  guix/build/emacs-build-system.scm		\
  guix/build/asdf-build-system.scm		\
  guix/build/git.scm				\
  guix/build/hg.scm				\
  guix/build/glib-or-gtk-build-system.scm	\


@@ 106,6 108,7 @@ MODULES =					\
  guix/build/syscalls.scm                       \
  guix/build/gremlin.scm			\
  guix/build/emacs-utils.scm			\
  guix/build/lisp-utils.scm			\
  guix/build/graft.scm				\
  guix/build/bournish.scm			\
  guix/build/qt-utils.scm			\

M doc/guix.texi => doc/guix.texi +58 -1
@@ 2697,7 2697,7 @@ one @i{via} its @code{Requires} field.

Another example where @code{propagated-inputs} is useful is for languages
that lack a facility to record the run-time search path akin to the
@code{RUNPATH} of ELF files; this includes Guile, Python, Perl, GHC, and
@code{RUNPATH} of ELF files; this includes Guile, Python, Perl, and
more.  To ensure that libraries written in those languages can find
library code they depend on at run time, run-time dependencies must be
listed in @code{propagated-inputs} rather than @code{inputs}.


@@ 2967,6 2967,63 @@ that should be run during the @code{build} phase.  By default the

@end defvr

@defvr {Scheme Variable} asdf-build-system/source
@defvrx {Scheme Variable} asdf-build-system/sbcl
@defvrx {Scheme Variable} asdf-build-system/ecl

These variables, exported by @code{(guix build-system asdf)}, implement
build procedures for Common Lisp packages using
@url{https://common-lisp.net/project/asdf/, ``ASDF''}. ASDF is a system
definition facility for Common Lisp programs and libraries.

The @code{asdf-build-system/source} system installs the packages in
source form, and can be loaded using any common lisp implementation, via
ASDF.  The others, such as @code{asdf-build-system/sbcl}, install binary
systems in the format which a particular implementation understands.
These build systems can also be used to produce executable programs, or
lisp images which contain a set of packages pre-loaded.

The build system uses naming conventions.  For binary packages, the
package itself as well as its run-time dependencies should begin their
name with the lisp implementation, such as @code{sbcl-} for
@code{asdf-build-system/sbcl}.  Beginning the input name with this
prefix will allow the build system to encode its location into the
resulting library, so that the input can be found at run-time.

If dependencies are used only for tests, it is convenient to use a
different prefix in order to avoid having a run-time dependency on such
systems.  For example,

@example
(define-public sbcl-bordeaux-threads
  (package
    ...
    (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam)))
    ...))
@end example

Additionally, the corresponding source package should be labeled using
the same convention as python packages (see @ref{Python Modules}), using
the @code{cl-} prefix.

For binary packages, each system should be defined as a Guix package.
If one package @code{origin} contains several systems, package variants
can be created in order to build all the systems.  Source packages,
which use @code{asdf-build-system/source}, may contain several systems.

In order to create executable programs and images, the build-side
procedures @code{build-program} and @code{build-image} can be used.
They should be called in a build phase after the @code{create-symlinks}
phase, so that the system which was just built can be used within the
resulting image.  @code{build-program} requires a list of Common Lisp
expressions to be passed as the @code{#:entry-program} argument.

If the system is not defined within its own @code{.asd} file of the same
name, then the @code{#:asd-file} parameter should be used to specify
which file the system is defined in.

@end defvr

@defvr {Scheme Variable} cmake-build-system
This variable is exported by @code{(guix build-system cmake)}.  It
implements the build procedure for packages using the

M gnu/local.mk => gnu/local.mk +12 -24
@@ 111,6 111,7 @@ GNU_SYSTEM_MODULES =				\
  %D%/packages/education.scm			\
  %D%/packages/elf.scm				\
  %D%/packages/elixir.scm			\
  %D%/packages/embedded.scm			\
  %D%/packages/emacs.scm			\
  %D%/packages/enchant.scm			\
  %D%/packages/engineering.scm			\


@@ 128,6 129,7 @@ GNU_SYSTEM_MODULES =				\
  %D%/packages/fltk.scm				\
  %D%/packages/fonts.scm			\
  %D%/packages/fontutils.scm			\
  %D%/packages/fpga.scm				\
  %D%/packages/freedesktop.scm			\
  %D%/packages/freeipmi.scm			\
  %D%/packages/ftp.scm				\


@@ 477,6 479,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/clang-libc-search-path.patch		\
  %D%/packages/patches/clang-3.8-libc-search-path.patch		\
  %D%/packages/patches/clucene-pkgconfig.patch			\
  %D%/packages/patches/clx-remove-demo.patch			\
  %D%/packages/patches/cmake-fix-tests.patch			\
  %D%/packages/patches/cpio-CVE-2016-2037.patch			\
  %D%/packages/patches/cpufrequtils-fix-aclocal.patch		\


@@ 570,27 573,17 @@ dist_patch_DATA =						\
  %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
  %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
  %D%/packages/patches/hdf5-config-date.patch			\
  %D%/packages/patches/hdf-eos5-build-shared.patch 		\
  %D%/packages/patches/hdf-eos5-remove-gctp.patch		\
  %D%/packages/patches/hdf-eos5-fix-szip.patch			\
  %D%/packages/patches/hdf-eos5-fortrantests.patch		\
  %D%/packages/patches/higan-remove-march-native-flag.patch	\
  %D%/packages/patches/hop-bigloo-4.0b.patch			\
  %D%/packages/patches/hop-linker-flags.patch			\
  %D%/packages/patches/hydra-disable-darcs-test.patch		\
  %D%/packages/patches/hypre-doc-tables.patch			\
  %D%/packages/patches/hypre-ldflags.patch			\
  %D%/packages/patches/icecat-avoid-bundled-includes.patch	\
  %D%/packages/patches/icecat-CVE-2016-2818-pt1.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt2.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt3.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt4.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt5.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt6.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt7.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt8.patch		\
  %D%/packages/patches/icecat-CVE-2016-2818-pt9.patch		\
  %D%/packages/patches/icecat-CVE-2016-2819.patch		\
  %D%/packages/patches/icecat-CVE-2016-2821.patch		\
  %D%/packages/patches/icecat-CVE-2016-2824.patch		\
  %D%/packages/patches/icecat-CVE-2016-2828.patch		\
  %D%/packages/patches/icecat-CVE-2016-2831.patch		\
  %D%/packages/patches/icecat-avoid-bundled-libraries.patch	\
  %D%/packages/patches/icu4c-CVE-2014-6585.patch		\
  %D%/packages/patches/icu4c-CVE-2015-1270.patch		\
  %D%/packages/patches/icu4c-CVE-2015-4760.patch		\


@@ 656,6 649,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/libtiff-oob-write-in-nextdecode.patch	\
  %D%/packages/patches/libtool-skip-tests2.patch		\
  %D%/packages/patches/libunwind-CVE-2015-3239.patch		\
  %D%/packages/patches/libupnp-CVE-2016-6255.patch		\
  %D%/packages/patches/libvpx-CVE-2016-2818.patch		\
  %D%/packages/patches/libwmf-CAN-2004-0941.patch		\
  %D%/packages/patches/libwmf-CVE-2006-3376.patch		\


@@ 787,6 781,9 @@ dist_patch_DATA =						\
  %D%/packages/patches/python-paste-remove-website-test.patch	\
  %D%/packages/patches/python-paste-remove-timing-test.patch	\
  %D%/packages/patches/python2-pygobject-2-gi-info-type-error-domain.patch \
  %D%/packages/patches/qemu-CVE-2016-8576.patch			\
  %D%/packages/patches/qemu-CVE-2016-8577.patch			\
  %D%/packages/patches/qemu-CVE-2016-8578.patch			\
  %D%/packages/patches/qt4-ldflags.patch			\
  %D%/packages/patches/quickswitch-fix-dmenu-check.patch	\
  %D%/packages/patches/rapicorn-isnan.patch			\


@@ 875,15 872,6 @@ dist_patch_DATA =						\
  %D%/packages/patches/wordnet-CVE-2008-2149.patch			\
  %D%/packages/patches/wordnet-CVE-2008-3908-pt1.patch			\
  %D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch			\
  %D%/packages/patches/wpa-supplicant-CVE-2015-5310.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2015-5314.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2015-5315.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2015-5316.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2016-4476.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch	\
  %D%/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch	\
  %D%/packages/patches/xdotool-fix-makefile.patch               \
  %D%/packages/patches/xf86-video-ark-remove-mibstore.patch	\
  %D%/packages/patches/xf86-video-ast-remove-mibstore.patch	\

M gnu/packages/admin.scm => gnu/packages/admin.scm +2 -12
@@ 862,7 862,7 @@ commands and their arguments.")
(define-public wpa-supplicant-minimal
  (package
    (name "wpa-supplicant-minimal")
    (version "2.5")
    (version "2.6")
    (source (origin
              (method url-fetch)
              (uri (string-append


@@ 871,17 871,7 @@ commands and their arguments.")
                    ".tar.gz"))
              (sha256
               (base32
                "05mkp5bx1c3z7h5biddsv0p49gkrq9ksany3anp4wdiv92p5prfc"))
              (patches
               (search-patches "wpa-supplicant-CVE-2015-5310.patch"
                               "wpa-supplicant-CVE-2015-5314.patch"
                               "wpa-supplicant-CVE-2015-5315.patch"
                               "wpa-supplicant-CVE-2015-5316.patch"
                               "wpa-supplicant-CVE-2016-4476.patch"
                               "wpa-supplicant-CVE-2016-4477-pt1.patch"
                               "wpa-supplicant-CVE-2016-4477-pt2.patch"
                               "wpa-supplicant-CVE-2016-4477-pt3.patch"
                               "wpa-supplicant-CVE-2016-4477-pt4.patch"))))
                "0l0l5gz3d5j9bqjsbjlfcv4w4jwndllp9fmyai4x9kg6qhs6v4xl"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (alist-replace

M gnu/packages/astronomy.scm => gnu/packages/astronomy.scm +3 -3
@@ 87,7 87,7 @@ systems in a FITS image header.")
(define-public gnuastro
  (package
    (name "gnuastro")
    (version "0.1")
    (version "0.2")
    (source
     (origin
       (method url-fetch)


@@ 95,14 95,14 @@ systems in a FITS image header.")
                           version ".tar.gz"))
       (sha256
        (base32
         "105s007kw8l3jwwhvh8k9lgbpfbf7sqh2wpxmvpv3qdr6nh9lnjg"))))
         "0099g7zqg1gr9y94ybhyjgx9pkn9zv4rj1xb00fkybfw8w6ij9iv"))))
    (inputs
     `(("cfitsio" ,cfitsio)
       ("gsl" ,gsl)
       ("libjpeg" ,libjpeg-8)
       ("wcslib" ,wcslib)))
    (build-system gnu-build-system)
    (home-page "http://www.gnu.org/software/gnuastro")
    (home-page "https://www.gnu.org/software/gnuastro")
    (synopsis "Astronomical data manipulation programs")
    (description "The GNU Astronomy Utilities (Gnuastro) is a suite of
programs for the manipulation and analysis of astronomical data.")

M gnu/packages/audio.scm => gnu/packages/audio.scm +36 -3
@@ 40,6 40,7 @@
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages avahi)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages backup)
  #:use-module (gnu packages base)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages check)


@@ 179,7 180,7 @@ streams from live audio.")
(define-public ardour
  (package
    (name "ardour")
    (version "5.3")
    (version "5.4")
    (source (origin
              (method git-fetch)
              (uri (git-reference


@@ 193,10 194,10 @@ streams from live audio.")
                    "libs/ardour/revision.cc"
                  (lambda (port)
                    (format port "#include \"ardour/revision.h\"
namespace ARDOUR { const char* revision = \"5.3\" ; }"))))
namespace ARDOUR { const char* revision = \"5.4\" ; }"))))
              (sha256
               (base32
                "0xdyc3syxg4drg7rafadhlrn6nycg169ay6q5xhga19kcwy6qmqm"))
                "1yrg0d86k9fqw7lmzjglilbadb4cjqxqkf6ii4bjs6rihj6b0qrf"))
              (file-name (string-append name "-" version))))
    (build-system waf-build-system)
    (arguments


@@ 242,6 243,7 @@ namespace ARDOUR { const char* revision = \"5.3\" ; }"))))
       ("readline" ,readline)
       ("redland" ,redland)
       ("rubberband" ,rubberband)
       ("libarchive" ,libarchive)
       ("taglib" ,taglib)
       ("python-rdflib" ,python-rdflib)))
    (native-inputs


@@ 336,6 338,37 @@ tools (analyzer, mono/stereo tools, crossovers).")
    ;; The plugins are released under LGPLv2.1+
    (license (list license:lgpl2.1+ license:gpl2+))))

(define-public infamous-plugins
  (package
    (name "infamous-plugins")
    (version "0.2.02")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/ssj71/infamousPlugins/"
                                  "archive/v" version ".tar.gz"))
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "0qm3ak07vc1l3f5c3c2lq9gkfknlxwn8ks03cysw1pk8hj7dwnv6"))))
    (build-system cmake-build-system)
    ;; There are no tests
    (arguments `(#:tests? #f))
    (inputs
     `(("cairo" ,cairo)
       ("fftwf" ,fftwf)
       ("lv2" ,lv2)
       ("ntk" ,ntk)
       ("zita-resampler" ,zita-resampler)))
    (native-inputs
     `(("pkg-config" ,pkg-config)))
    (home-page "http://ssj71.github.io/infamousPlugins")
    (synopsis "LV2 plugins for live use")
    (description
     "The infamous plugins are a collection of LV2 audio plugins for live
performances.  The plugins include a cellular automaton synthesizer, an
envelope follower, distortion effects, tape effects and more.")
    (license license:gpl2+)))

(define-public csound
  (package
    (name "csound")

M gnu/packages/autogen.scm => gnu/packages/autogen.scm +5 -4
@@ 31,7 31,7 @@
(define-public autogen
  (package
    (name "autogen")
    (version "5.18.10")
    (version "5.18.12")
    (source
     (origin
      (method url-fetch)


@@ 39,7 39,7 @@
                          "/autogen-" version ".tar.xz"))
      (sha256
       (base32
        "0j61mf3qab5ya7w5xsp7xalrby00cv92g462bxffl104ql18w92f"))))
        "1n5zq4872sakvz9c7ncsdcfp0z8rsybsxvbmhkpbd19ii0pacfxy"))))
    (build-system gnu-build-system)
    (native-inputs `(("perl" ,perl)     ;for doc generator mdoc
                     ("pkg-config" ,pkg-config)))


@@ 55,8 55,9 @@
                 (append (find-files "agen5/test" "\\.test$")
                         (find-files "autoopts/test" "\\.(test|in)$"))
                 (("/bin/sh") sh)
                 (("/usr/bin/tr") "tr"))))))))
    (home-page "http://www.gnu.org/software/autogen/")
                 (("/usr/bin/tr") "tr"))
               #t))))))
    (home-page "https://www.gnu.org/software/autogen/")
    (synopsis "Automated program generator")
    (description
     "AutoGen is a program to ease the maintenance of programs that contain

M gnu/packages/bash.scm => gnu/packages/bash.scm +3 -3
@@ 238,7 238,7 @@ without modification.")
(define-public bash-completion
  (package
    (name "bash-completion")
    (version "2.3")
    (version "2.4")
    (source (origin
              (method url-fetch)
              (uri (string-append


@@ 246,7 246,7 @@ without modification.")
                    version "/" name "-" version ".tar.xz"))
              (sha256
               (base32
                "1sg82nmsr00ig37skln2qvmi8mgbxgdvycm3ygzs8gbz66pq3q5j"))
                "1xlhd09sb2w3bw8qaypxgkr0782w082mcbx8zf7yzjgy0996pxy0"))
              (patches
               (search-patches "bash-completion-directories.patch"))))
    (build-system gnu-build-system)


@@ 279,7 279,7 @@ without modification.")
    (description
     "This package provides extensions that allow Bash to provide adapted
completion for many common commands.")
    (home-page "http://bash-completion.alioth.debian.org/")
    (home-page "https://github.com/scop/bash-completion")
    (license gpl2+)))

(define-public bash-tap

M gnu/packages/bioinformatics.scm => gnu/packages/bioinformatics.scm +54 -4
@@ 1972,7 1972,25 @@ trees (phylogenies) and characters.")
  (let ((base (package-with-python2 (strip-python2-variant python-dendropy))))
    (package
      (inherit base)
      ;; Do not use same source as 'python-dendropy' because the patched
      ;; failing tests do not occur on Python 2.
      (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "DendroPy" (package-version base)))
         (sha256
          (base32
           "1jfz7gp18wph311w1yygbvjanb3n5mdqal439bb6myw41dwb5m63"))))
      (arguments
       `(#:python ,python-2
         #:phases
           (modify-phases %standard-phases
             (replace 'check
               ;; There is currently a test failure that only happens on some
               ;; systems, and only using "setup.py test"
               (lambda _ (zero? (system* "nosetests")))))))
      (native-inputs `(("python2-setuptools" ,python2-setuptools)
                       ("python2-nose" ,python2-nose)
                       ,@(package-native-inputs base))))))




@@ 2019,7 2037,7 @@ identify enrichments with functional annotations of the genome.")
(define-public diamond
  (package
    (name "diamond")
    (version "0.8.22")
    (version "0.8.23")
    (source (origin
              (method url-fetch)
              (uri (string-append


@@ 2028,7 2046,7 @@ identify enrichments with functional annotations of the genome.")
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "0lbqa07c5z8pr4dvdrc14rqc4311kq69j1ldry9glfc8hg3x1kd1"))))
                "0xpcq3fbk4c52xbpgyk5brl58rljvl83bg8nkxy8vs00pxanm7i2"))))
    (build-system cmake-build-system)
    (arguments
     '(#:tests? #f ; no "check" target


@@ 5576,7 5594,7 @@ track.  The database is exposed as a @code{TxDb} object.")
(define-public vsearch
  (package
    (name "vsearch")
    (version "2.1.2")
    (version "2.3.0")
    (source
     (origin
       (method url-fetch)


@@ 5586,7 5604,7 @@ track.  The database is exposed as a @code{TxDb} object.")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "1zzfj6ydsfzljyswlwqknpp8s2cf31vimi1aqf9ljsbagjyizc58"))
         "1r8fk3whkil348y5hfsd4r56qjmchhq4nxm6s7ra5rlisw0mf9fy"))
       (modules '((guix build utils)))
       (snippet
        '(begin


@@ 6929,6 6947,38 @@ elegans (Worm) as provided by UCSC (ce6, May 2008) and stored in Biostrings
objects.")
    (license license:artistic2.0)))

(define-public r-bsgenome-celegans-ucsc-ce10
  (package
    (name "r-bsgenome-celegans-ucsc-ce10")
    (version "1.4.0")
    (source (origin
              (method url-fetch)
              ;; We cannot use bioconductor-uri here because this tarball is
              ;; located under "data/annotation/" instead of "bioc/".
              (uri (string-append "http://www.bioconductor.org/packages/"
                                  "release/data/annotation/src/contrib/"
                                  "BSgenome.Celegans.UCSC.ce10_"
                                  version ".tar.gz"))
              (sha256
               (base32
                "1zaym97jk4npxk14ifvwz2rvhm4zx9xgs33r9vvx9rlynp0gydrk"))))
    (properties
     `((upstream-name . "BSgenome.Celegans.UCSC.ce10")))
    (build-system r-build-system)
    ;; As this package provides little more than a very large data file it
    ;; doesn't make sense to build substitutes.
    (arguments `(#:substitutable? #f))
    (propagated-inputs
     `(("r-bsgenome" ,r-bsgenome)))
    (home-page
     "http://www.bioconductor.org/packages/BSgenome.Celegans.UCSC.ce10/")
    (synopsis "Full genome sequences for Worm")
    (description
     "This package provides full genome sequences for Caenorhabditis
elegans (Worm) as provided by UCSC (ce10, Oct 2010) and stored in Biostrings
objects.")
    (license license:artistic2.0)))

(define-public r-bsgenome-dmelanogaster-ucsc-dm3
  (package
    (name "r-bsgenome-dmelanogaster-ucsc-dm3")

M gnu/packages/bootstrap.scm => gnu/packages/bootstrap.scm +1 -0
@@ 171,6 171,7 @@ successful, or false to signal an error."

        ;; XXX: This one is used bare-bones, without a libc, so add a case
        ;; here just so we can keep going.
        ((string=? system "arm-eabi") "no-ld.so")
        ((string=? system "xtensa-elf") "no-ld.so")
        ((string=? system "avr") "no-ld.so")
        ((string=? system "i686-mingw") "no-ld.so")

M gnu/packages/calendar.scm => gnu/packages/calendar.scm +2 -2
@@ 84,13 84,13 @@ data units.")
(define-public khal
  (package
    (name "khal")
    (version "0.8.3")
    (version "0.8.4")
    (source (origin
             (method url-fetch)
             (uri (pypi-uri "khal" version))
             (sha256
              (base32
               "1qryqs5d8jsl7j22pjjfkfdi4m8m3nn3n44b890pq85xkw599ihy"))))
               "03vy4dp9n43w51mwqjjy08dr5nj7wxqnb085visz3j43vzm42p1f"))))
    (build-system python-build-system)
    (arguments
     `(#:phases (modify-phases %standard-phases

M gnu/packages/ccache.scm => gnu/packages/ccache.scm +2 -2
@@ 29,7 29,7 @@
(define-public ccache
  (package
    (name "ccache")
    (version "3.3.1")
    (version "3.3.2")
    (source
     (origin
      (method url-fetch)


@@ 37,7 37,7 @@
                          version ".tar.xz"))
      (sha256
       (base32
        "1ij1p8arz72fw67gx65ngb7jmg30ynjxk7i8dmikjxkdri4pmn66"))))
        "0c25l78hi36682l9cyxca78i8sdkmgmv9afip1s21y6q4g5qaxlh"))))
    (build-system gnu-build-system)
    (native-inputs `(("perl" ,perl)     ;for test.sh
                     ("which" ,(@ (gnu packages base) which))))

M gnu/packages/certs.scm => gnu/packages/certs.scm +2 -2
@@ 73,7 73,7 @@
(define-public nss-certs
  (package
    (name "nss-certs")
    (version "3.26")
    (version "3.27.1")
    (source (origin
              (method url-fetch)
              (uri (let ((version-with-underscores


@@ 84,7 84,7 @@
                      "nss-" version ".tar.gz")))
              (sha256
               (base32
                "0r65s5q8kk0vr48s0zr8xi610k7h072lgkkpp4z6jlxr19bkly4i"))))
                "0sraxk26swlgl7rl742rkfp5k251v5z3lqw9k8ikin0cjfhkfdpx"))))
    (build-system gnu-build-system)
    (outputs '("out"))
    (native-inputs

M gnu/packages/check.scm => gnu/packages/check.scm +7 -5
@@ 26,6 26,7 @@
  #:use-module (gnu packages)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages python)
  #:use-module (guix utils)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix download)


@@ 155,14 156,15 @@ multi-paradigm automated test framework for C++ and Objective-C.")
(define-public cmocka
  (package
    (name "cmocka")
    (version "1.0.1")
    (version "1.1.0")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://cmocka.org/files/1.0/cmocka-"
              (uri (string-append "https://cmocka.org/files/"
                                  (version-major+minor version) "/cmocka-"
                                  version ".tar.xz"))
              (sha256
               (base32
                "0fvm6rdalqcxckbddch8ycdw6n2ckldblv117n09chi2l7bm0q5k"))))
                "0c0k8ax16fgh39nsva09q4jsh83g9nxihkwj9d5666763fzx6q79"))))
    (build-system cmake-build-system)
    (arguments
     `(#:tests? #f)) ; No test target


@@ 178,13 180,13 @@ format.")
(define-public cppcheck
  (package
    (name "cppcheck")
    (version "1.72")
    (version "1.76")
    (source (origin
      (method url-fetch)
      (uri (string-append "https://github.com/danmar/cppcheck/archive/"
                          version ".tar.gz"))
      (sha256
       (base32 "0zxaixhqi4vmj7xj56gzadggcbjhbjjm6abyr86qlan23sg98667"))
       (base32 "14d0ikcmq1xcqy9f1vq1jbn5ifl0jiy3rycqdcg7v8hil48m59z8"))
      (file-name (string-append name "-" version ".tar.gz"))))
    (build-system cmake-build-system)
    (home-page "http://cppcheck.sourceforge.net")

M gnu/packages/databases.scm => gnu/packages/databases.scm +68 -14
@@ 12,6 12,7 @@
;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
;;; Copyright © 2016 David Craven <david@craven.ch>
;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 34,11 35,13 @@
  #:use-module (gnu packages avahi)
  #:use-module (gnu packages bash)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages crypto)
  #:use-module (gnu packages gettext)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages language)
  #:use-module (gnu packages linux)
  #:use-module (gnu packages tcl)
  #:use-module (gnu packages tls)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages ncurses)


@@ 541,32 544,32 @@ is in the public domain.")
(define-public tdb
  (package
    (name "tdb")
    (version "1.3.9")
    (version "1.3.11")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://www.samba.org/ftp/tdb/tdb-"
                                  version ".tar.gz"))
              (sha256
               (base32
                "1ll4q17scax1arg12faj8p25jq1f7q9irc3pwla0ziymwqkgf0bi"))))
                "0i1l38h0vyck6zkcj4fn2l03spadlmyr1qa1xpdp9dy2ccbm3s1r"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (alist-replace
                 'configure
                 (lambda* (#:key outputs #:allow-other-keys)
                   (let ((out (assoc-ref outputs "out")))
                     ;; The 'configure' script is a wrapper for Waf and
                     ;; doesn't recognize things like '--enable-fast-install'.
                     (zero? (system* "./configure"
                                     (string-append "--prefix=" out)))))
                 %standard-phases)))
     '(#:phases
       (modify-phases %standard-phases
         (replace 'configure
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((out (assoc-ref outputs "out")))
               ;; The 'configure' script is a wrapper for Waf and
               ;; doesn't recognize things like '--enable-fast-install'.
               (zero? (system* "./configure"
                               (string-append "--prefix=" out)))))))))
    (native-inputs
     `(;; TODO: Build the documentation.
       ;; ("docbook-xsl" ,docbook-xsl)
       ;; ("libxml2" ,libxml2)
       ;; ("libxslt" ,libxslt)
       ("python" ,python-2)))                     ;for the Waf build system
    (home-page "http://tdb.samba.org/")
    (home-page "https://tdb.samba.org/")
    (synopsis "Trivial database")
    (description
     "TDB is a Trivial Database.  In concept, it is very much like GDBM,


@@ 951,14 954,14 @@ similar to BerkeleyDB, LevelDB, etc.")
(define-public redis
  (package
    (name "redis")
    (version "3.2.3")
    (version "3.2.4")
    (source (origin
              (method url-fetch)
              (uri (string-append "http://download.redis.io/releases/redis-"
                                  version".tar.gz"))
              (sha256
               (base32
                "05az2g3gna5lkhh6x1a5m6yardbiig1l4ysggldlk5if8ww9qkk7"))))
                "1wb9jd692a0y52bkkxr6815kk4g039mirjdrvqx24265lv2l5l1a"))))
    (build-system gnu-build-system)
    (arguments
     '(#:tests? #f ; tests related to master/slave and replication fail


@@ 966,6 969,7 @@ similar to BerkeleyDB, LevelDB, etc.")
                  (delete 'configure))
       #:make-flags `("CC=gcc"
                      "MALLOC=libc"
                      "LDFLAGS=-ldl"
                      ,(string-append "PREFIX="
                                      (assoc-ref %outputs "out")))))
    (synopsis "Key-value cache and store")


@@ 1154,3 1158,53 @@ can autogenerate peewee models using @code{pwiz}, a model generator.")

(define-public python2-peewee
  (package-with-python2 python-peewee))

(define-public sqlcipher
  (package
    (name "sqlcipher")
    (version "3.3.1")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://github.com/sqlcipher/" name
                           "/archive/v" version ".tar.gz"))
       (sha256
        (base32 "1gv58dlbpzrmznly52yqbxgvii0ib88zr3aszla1bsypwjr6flff"))
       (file-name (string-append name "-" version ".tar.gz"))))
    (build-system gnu-build-system)
    (inputs
     `(("libcrypto" ,openssl)
       ("libtcl8.6" ,tcl))) ; required for running the tests
    (native-inputs
     `(("tcl" ,tcl)))
    (arguments
     '(#:configure-flags
       '("--enable-tempstore=yes"
         "CFLAGS=-DSQLITE_HAS_CODEC -DSQLITE_ENABLE_FTS3"
         "LDFLAGS=-lcrypto -ltcl8.6"
         "--disable-tcl")
       ;; tests cannot be run from the Makefile
       ;; see: <https://github.com/sqlcipher/sqlcipher/issues/172>
       #:test-target "testfixture"
       #:phases
       (modify-phases %standard-phases
         (add-before 'check 'build-test-runner
           (assoc-ref %standard-phases 'check))
         (replace 'check
           (lambda _
             (zero?
              (system* "./testfixture" "test/crypto.test")))))))
    (home-page "https://www.zetetic.net/sqlcipher/")
    (synopsis
     "Library providing transparent encryption of SQLite database files")
    (description "SQLCipher is an implementation of SQLite, extended to
provide transparent 256-bit AES encryption of database files.  Pages are
encrypted before being written to disk and are decrypted when read back.  It’s
well suited for protecting embedded application databases and for mobile
development.")
    ;; The source files
    ;; src/{crypto.c,crypto_impl.c,crypto.h,crypto_cc.c,crypto_libtomcrypt.c},
    ;; src/{crypto_openssl.c,sqlcipher.h}, tool/crypto-speedtest.tcl,
    ;; test/crypto.test are licensed under a 3-clause BSD license. All other
    ;; source files are in the public domain.
    (license (list license:public-domain license:bsd-3))))

M gnu/packages/dav.scm => gnu/packages/dav.scm +2 -2
@@ 52,13 52,13 @@ clients.")
(define-public vdirsyncer
  (package
    (name "vdirsyncer")
    (version "0.12.1")
    (version "0.13.1")
    (source (origin
             (method url-fetch)
             (uri (pypi-uri name version))
             (sha256
              (base32
               "1y3xpl83p4y1m5ks44drhwpygzwbjwhraycrhxlkhwk8bhnsifrz"))))
               "1c4kipcc7dx1rn5j1a1x7wckz09mm9ihwakf3ramwn1y78q5zanb"))))
    (build-system python-build-system)
    (arguments
      `(#:phases (modify-phases %standard-phases

M gnu/packages/dejagnu.scm => gnu/packages/dejagnu.scm +37 -38
@@ 1,5 1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Efraim Flashner <efraim@flasher.co.il>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 26,7 27,7 @@
(define-public dejagnu
  (package
    (name "dejagnu")
    (version "1.5.3")
    (version "1.6")
    (source
     (origin
      (method url-fetch)


@@ 34,50 35,48 @@
                          version ".tar.gz"))
      (sha256
       (base32
        "069z3qrdv35cm2sbnfr5yjzplrqj9f61cchxis7j9mm19hv8x6q9"))))
        "0qypaakd2065jgpcv84zcsibl8gph3p334gb2qdmhsrbirhlmdh0"))))
    (build-system gnu-build-system)
    (inputs `(("expect" ,expect)))
    (arguments
     '(#:phases (alist-replace
                 'check
                 (lambda _
                   ;; Note: The test-suite *requires* /dev/pts among the
                   ;; `build-chroot-dirs' of the build daemon when
                   ;; building in a chroot.  See
                   ;; <http://thread.gmane.org/gmane.linux.distributions.nixos/1036>
                   ;; for details.
                   (if (and (directory-exists? "/dev/pts")
                            (directory-exists? "/proc"))
                       (begin
                        ;; Provide `runtest' with a log name, otherwise
                        ;; it tries to run `whoami', which fails when in
                        ;; a chroot.
                        (setenv "LOGNAME" "guix-builder")
     '(#:phases
       (modify-phases %standard-phases
         (replace 'check
           (lambda _
             ;; Note: The test-suite *requires* /dev/pts among the
             ;; `build-chroot-dirs' of the build daemon when
             ;; building in a chroot.  See
             ;; <http://thread.gmane.org/gmane.linux.distributions.nixos/1036>
             ;; for details.
             (if (and (directory-exists? "/dev/pts")
                      (directory-exists? "/proc"))
                 (begin
                  ;; Provide `runtest' with a log name, otherwise it
                  ;; tries to run `whoami', which fails when in a chroot.
                  (setenv "LOGNAME" "guix-builder")

                        ;; The test-suite needs to have a non-empty stdin:
                        ;; <http://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html>.
                        (zero?
                         (system "make check < /dev/zero")))
                       (begin
                         (display "test suite cannot be run, skipping\n")
                         #t)))
                 (alist-cons-after
                  'install 'post-install
                  (lambda* (#:key inputs outputs #:allow-other-keys)
                    ;; Use the right `expect' binary.
                    (let ((out    (assoc-ref outputs "out"))
                          (expect (assoc-ref inputs "expect")))
                      (substitute* (string-append out "/bin/runtest")
                        (("^mypath.*$" all)
                         (string-append all
                                        "export PATH="
                                        expect "/bin:$PATH\n")))))
                  %standard-phases))))
                  ;; The test-suite needs to have a non-empty stdin:
                  ;; <http://lists.gnu.org/archive/html/bug-dejagnu/2003-06/msg00002.html>.
                  (zero?
                   (system "make check < /dev/zero")))
                 (begin
                   (display "test suite cannot be run, skipping\n")
                   #t))))
         (add-after 'install 'post-install
           (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; Use the right `expect' binary.
             (let ((out    (assoc-ref outputs "out"))
                   (expect (assoc-ref inputs "expect")))
               (substitute* (string-append out "/bin/runtest")
                 (("^mypath.*$" all)
                  (string-append all
                                 "export PATH="
                                 expect "/bin:$PATH\n")))))))))
    (home-page
     "http://www.gnu.org/software/dejagnu/")
     "https://www.gnu.org/software/dejagnu/")
    (synopsis "GNU software testing framework")
    (description
     "DejaGnu is a framework for testing software.  In effect, it serves as
a front-end for all tests written for a program.  Thus, each program can have
multiple test suites, which are then all managed by a single harness.")
    (license gpl2+)))
    (license gpl3+)))

M gnu/packages/emacs.scm => gnu/packages/emacs.scm +13 -38
@@ 266,14 266,14 @@ editor (without an X toolkit)" )
(define-public geiser
  (package
    (name "geiser")
    (version "0.8.1")
    (version "0.9")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://savannah/geiser/" version
                                 "/geiser-" version ".tar.gz"))
             (sha256
              (base32
               "163zh8qf1q8l485d94a51a9xixirj8r2xvrbgxyw06vkaqrz5qvc"))))
               "1n772ysl1dmn0vy3gk230ymyjm14h93zw99y6h2rqp1ixy7v43dm"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (alist-cons-after


@@ 298,34 298,8 @@ metadata.")
    (license license:bsd-3)))

(define-public geiser-next
  ;; Geiser's upcoming version supports guile-next, and 0.8.1 does not.
  ;; When the next Geiser release comes out, we can remove this.
  (let ((commit "2e335695fc1a4a0b520b50deb761b958194cbec4"))
    (package
      (inherit geiser)
      (name "geiser-next")
      (version (string-append "0.8.1-1"
                              (string-take commit 7)))
      (source (origin
                (method git-fetch)
                (uri (git-reference
                      (url "git://git.sv.gnu.org/geiser.git")
                      (commit commit)))
                (sha256
                 (base32
                  "00rmpn8zncq1fiah5m12l26z0s28bh7ql63kxdvksqdgfrisnmgf"))))
      (native-inputs
       `(("autoconf" ,autoconf)
         ("automake" ,automake)
         ("texinfo" ,texinfo)
         ,@(package-native-inputs geiser)))
      (arguments
       (substitute-keyword-arguments (package-arguments geiser)
         ((#:phases phases)
          `(modify-phases ,phases
             (add-after 'unpack 'autogen
               (lambda _
                 (zero? (system* "sh" "autogen.sh")))))))))))
  ;; This has become "geiser".
  (deprecated-package "geiser-next" geiser))

(define-public paredit
  (package


@@ 424,7 398,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
(define-public emacs-with-editor
  (package
    (name "emacs-with-editor")
    (version "2.5.2")
    (version "2.5.6")
    (source (origin
              (method url-fetch)
              (uri (string-append


@@ 433,7 407,7 @@ configuration files, such as .gitattributes, .gitignore, and .git/config.")
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "0k57f2wqng7510nzyzgjgbapplia23l3zrphl816nfm4s58sy1ka"))))
                "14vypqj3wqym5yd0nggfm1xdgq5hv1kwxkg6i8ymlpxcdfxj45w7"))))
    (build-system emacs-build-system)
    (propagated-inputs
     `(("emacs-dash" ,emacs-dash)))


@@ 2156,7 2130,7 @@ dark background.")
(define-public emacs-smartparens
  (package
    (name "emacs-smartparens")
    (version "1.7.1")
    (version "1.8.0")
    (source (origin
              (method url-fetch)
              (uri (string-append


@@ 2165,7 2139,7 @@ dark background.")
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "1b47ppkzsj8j8a2p0bmvq05rhm2d2lsm3wlc0sg542r4zr6nji8s"))))
                "0xsqiklg0q4w6gj0js1hvsz4lkypvcx6c9kzb1mz232gwlqx1azw"))))
    (build-system emacs-build-system)
    (propagated-inputs `(("emacs-dash" ,emacs-dash)))
    (home-page "https://github.com/Fuco1/smartparens")


@@ 2185,15 2159,16 @@ well as completely new features.")
(define-public emacs-hl-todo
  (package
    (name "emacs-hl-todo")
    (version "1.7.0")
    (version "1.7.1")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://raw.githubusercontent.com/tarsius/hl-todo/"
                    version "/hl-todo.el"))
              (file-name (string-append "hl-todo-" version ".el"))
              (sha256
               (base32
                "18zydm43zajlglhgr0bhdkd4pln27amd063k2ql6p1mvyam3j8ia"))))
                "0flhz9vy8w1vvwwji92pi5k4659hl368bakj2qf2zfd26z8x583h"))))
    (build-system emacs-build-system)
    (home-page "https://github.com/tarsius/hl-todo")
    (synopsis "Emacs mode to highlight TODO and similar keywords")


@@ 2258,7 2233,7 @@ fully-functional one.")
(define-public emacs-hydra
  (package
    (name "emacs-hydra")
    (version "0.13.0")
    (version "0.13.6")
    (source
     (origin
       (method url-fetch)


@@ 2267,7 2242,7 @@ fully-functional one.")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "19ynkjlg3jj7x90xxbz885324h6nkxmzlb2c2c95xkr20zckn0lk"))))
         "0575vh858gm35p57s49dy6pc2ij46dmj9zaa4z0cp98sqra3j3l0"))))
    (build-system emacs-build-system)
    (home-page "https://github.com/abo-abo/hydra")
    (synopsis "Make Emacs bindings that stick around")

A gnu/packages/embedded.scm => gnu/packages/embedded.scm +165 -0
@@ 0,0 1,165 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 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 embedded)
  #:use-module (guix utils)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix svn-download)
  #:use-module (guix git-download)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages)
  #:use-module (gnu packages cross-base)
  #:use-module (gnu packages flex)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages texinfo))

;; We must not use the released GCC sources here, because the cross-compiler
;; does not produce working binaries.  Instead we take the very same SVN
;; revision from the branch that is used for a release of the "GCC ARM
;; embedded" project on launchpad.
;; See https://launchpadlibrarian.net/218827644/release.txt
(define-public gcc-arm-none-eabi-4.9
  (let ((xgcc (cross-gcc "arm-none-eabi"
                         (cross-binutils "arm-none-eabi")))
        (revision "1")
        (svn-revision 227977))
    (package (inherit xgcc)
      (version (string-append (package-version xgcc) "-"
                              revision "." (number->string svn-revision)))
      (source
       (origin
         (method svn-fetch)
         (uri (svn-reference
               (url "svn://gcc.gnu.org/svn/gcc/branches/ARM/embedded-4_9-branch/")
               (revision svn-revision)))
         (file-name (string-append "gcc-arm-embedded-" version "-checkout"))
         (sha256
          (base32
           "113r98kygy8rrjfv2pd3z6zlfzbj543pq7xyq8bgh72c608mmsbr"))
         (patches (origin-patches (package-source xgcc)))))
      (native-inputs
       `(("flex" ,flex)
         ,@(package-native-inputs xgcc)))
      (arguments
       (substitute-keyword-arguments (package-arguments xgcc)
         ((#:phases phases)
          `(modify-phases ,phases
             (add-after 'unpack 'fix-genmultilib
               (lambda _
                 (substitute* "gcc/genmultilib"
                   (("#!/bin/sh") (string-append "#!" (which "sh"))))
                 #t))))
         ((#:configure-flags flags)
          ;; The configure flags are largely identical to the flags used by the
          ;; "GCC ARM embedded" project.
          `(append (list "--enable-multilib"
                         "--with-newlib"
                         "--with-multilib-list=armv6-m,armv7-m,armv7e-m"
                         "--with-host-libstdcxx=-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm"
                         "--enable-plugins"
                         "--disable-decimal-float"
                         "--disable-libffi"
                         "--disable-libgomp"
                         "--disable-libmudflap"
                         "--disable-libquadmath"
                         "--disable-libssp"
                         "--disable-libstdcxx-pch"
                         "--disable-nls"
                         "--disable-shared"
                         "--disable-threads"
                         "--disable-tls")
                   (delete "--disable-multilib" ,flags)))))
      (native-search-paths
       (list (search-path-specification
              (variable "CROSS_C_INCLUDE_PATH")
              (files '("arm-none-eabi/include")))
             (search-path-specification
              (variable "CROSS_CPLUS_INCLUDE_PATH")
              (files '("arm-none-eabi/include")))
             (search-path-specification
              (variable "CROSS_LIBRARY_PATH")
              (files '("arm-none-eabi/lib"))))))))

(define-public newlib-arm-none-eabi
  (package
    (name "newlib")
    (version "2.4.0")
    (source (origin
              (method url-fetch)
              (uri (string-append "ftp://sourceware.org/pub/newlib/newlib-"
                                  version ".tar.gz"))
              (sha256
               (base32
                "01i7qllwicf05vsvh39qj7qp5fdifpvvky0x95hjq39mbqiksnsl"))))
    (build-system gnu-build-system)
    (arguments
     `(#:out-of-source? #t
       ;; The configure flags are identical to the flags used by the "GCC ARM
       ;; embedded" project.
       #:configure-flags '("--target=arm-none-eabi"
                           "--enable-newlib-io-long-long"
                           "--enable-newlib-register-fini"
                           "--disable-newlib-supplied-syscalls"
                           "--disable-nls")
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'fix-references-to-/bin/sh
           (lambda _
             (substitute* '("libgloss/arm/cpu-init/Makefile.in"
                            "libgloss/arm/Makefile.in"
                            "libgloss/libnosys/Makefile.in"
                            "libgloss/Makefile.in")
               (("/bin/sh") (which "sh")))
             #t)))))
    (native-inputs
     `(("xbinutils" ,(cross-binutils "arm-none-eabi"))
       ("xgcc" ,gcc-arm-none-eabi-4.9)
       ("texinfo" ,texinfo)))
    (home-page "http://www.sourceware.org/newlib/")
    (synopsis "C library for use on embedded systems")
    (description "Newlib is a C library intended for use on embedded
systems.  It is a conglomeration of several library parts that are easily
usable on embedded products.")
    (license (license:non-copyleft
              "https://www.sourceware.org/newlib/COPYING.NEWLIB"))))

(define-public newlib-nano-arm-none-eabi
  (package (inherit newlib-arm-none-eabi)
    (name "newlib-nano")
    (arguments
     (substitute-keyword-arguments (package-arguments newlib-arm-none-eabi)
       ;; The configure flags are identical to the flags used by the "GCC ARM
       ;; embedded" project.  They optimize newlib for use on small embedded
       ;; systems with limited memory.
       ((#:configure-flags flags)
        ''("--target=arm-none-eabi"
           "--enable-multilib"
           "--disable-newlib-supplied-syscalls"
           "--enable-newlib-reent-small"
           "--disable-newlib-fvwrite-in-streamio"
           "--disable-newlib-fseek-optimization"
           "--disable-newlib-wide-orient"
           "--enable-newlib-nano-malloc"
           "--disable-newlib-unbuf-stream-opt"
           "--enable-lite-exit"
           "--enable-newlib-global-atexit"
           "--enable-newlib-nano-formatted-io"
           "--disable-nls"))))
    (synopsis "Newlib variant for small systems with limited memory")))

M gnu/packages/fonts.scm => gnu/packages/fonts.scm +5 -19
@@ 704,18 704,11 @@ symbols unable to be displayed properly.")
  (package
    (name "font-un")
    (version "1.0.2-080608")
    ;; The upstream server at kldp.net is serving us broken MIME.
    ;; See <http://bugs.gnu.org/22908>.
    (source (origin
              (method url-fetch)
              (uri (list
                    (string-append
                     "http://krosos.sdf.org/static/unix/"
                     "un-fonts-core-" version ".tar.gz")
                    ;; XXX: The upstream server at kldp.net
                    (string-append
                     "https://kldp.net/projects/unfonts/download/4695?filename="
                     "un-fonts-core-" version ".tar.gz")))
              (uri (string-append
                    "https://kldp.net/unfonts/release/2607-"
                    "un-fonts-core-" version ".tar.gz"))
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32


@@ 838,22 831,15 @@ glyph designs, not just an added slant.")
                                                             "unzip")
                                                  "/bin"))
                         (font-dir (string-append %output
                                                  "/share/fonts/truetype"))
                         (doc-dir  (string-append %output "/share/doc/"
                                                  ,name "-" ,version)))
                                                  "/share/fonts/truetype")))
                     (setenv "PATH" PATH)
                     (system* "unzip" (assoc-ref %build-inputs "source"))

                     (mkdir-p font-dir)
                     (mkdir-p doc-dir)
                     (for-each (lambda (ttf)
                                 (copy-file ttf
                                            (string-append font-dir "/" ttf)))
                               (find-files "." "\\.ttf$"))
                     (for-each (lambda (doc)
                                 (copy-file doc
                                            (string-append doc-dir "/" doc)))
                               (find-files "." "\\.txt$"))))))
                               (find-files "." "\\.ttf$"))))))
    (native-inputs
     `(("source" ,source)
       ("unzip" ,unzip)))

M gnu/packages/fontutils.scm => gnu/packages/fontutils.scm +6 -7
@@ 465,7 465,7 @@ smooth contours with constant curvature at the spline joins.")
(define-public libuninameslist
  (package
    (name "libuninameslist")
    (version "0.5.20150701")
    (version "20160701")
    (source
     (origin
       (method url-fetch)


@@ 474,17 474,16 @@ smooth contours with constant curvature at the spline joins.")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "1j6147l100rppw7axlrkdx0p35fax6bz2zh1xgpg7a3b4pmqaj3v"))))
         "12xxb301a66dh282pywpy00wxiaq5z8z20qm3pr2vql04r2g8d0x"))))
    (build-system gnu-build-system)
    (native-inputs `(("autoconf" ,autoconf)
                     ("automake" ,automake)
                     ("libtool" ,libtool)))
    (arguments
     `(#:phases (alist-cons-after
                 'unpack 'bootstrap
                 (lambda _
                   (zero? (system* "autoreconf" "-vi")))
                 %standard-phases)))
     `(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'bootstrap
           (lambda _ (zero? (system* "autoreconf" "-vi")))))))
    (synopsis "Unicode names and annotation list")
    (description
     "LibUniNamesList holds www.unicode.org Nameslist.txt data which can be

A gnu/packages/fpga.scm => gnu/packages/fpga.scm +311 -0
@@ 0,0 1,311 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.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 fpga)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system cmake)
  #:use-module (gnu packages)
  #:use-module (gnu packages pkg-config)
  #:use-module (gnu packages tcl)
  #:use-module (gnu packages readline)
  #:use-module (gnu packages python)
  #:use-module (gnu packages bison)
  #:use-module (gnu packages flex)
  #:use-module (gnu packages gtk)
  #:use-module (gnu packages libffi)
  #:use-module (gnu packages zip)
  #:use-module (gnu packages perl)
  #:use-module (gnu packages ghostscript)
  #:use-module (gnu packages gperf)
  #:use-module (gnu packages gawk)
  #:use-module (gnu packages version-control)
  #:use-module (gnu packages libftdi))

(define-public abc
 (let ((commit "5ae4b975c49c")
       (revision "1"))
  (package
    (name "abc")
    (version (string-append "0.0-" revision "-" (string-take commit 9)))
    (source (origin
              (method url-fetch)
              (uri
               (string-append "https://bitbucket.org/alanmi/abc/get/" commit ".zip"))
              (file-name (string-append name "-" version "-checkout.zip"))
              (sha256
                (base32
                   "1syygi1x40rdryih3galr4q8yg1w5bvdzl75hd27v1xq0l5bz3d0"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("unzip" ,unzip)))
    (inputs
     `(("readline" ,readline)))
    (arguments
     `(#:tests? #f ; no check target
       #:phases
       (modify-phases %standard-phases
         (delete 'configure)
         (replace 'install
           (lambda* (#:key outputs #:allow-other-keys)
             (let* ((out (assoc-ref outputs "out"))
                    (out-bin (string-append out "/bin")))
               (install-file "abc" out-bin)))))))
    (home-page "http://people.eecs.berkeley.edu/~alanmi/abc/")
    (synopsis "Sequential logic synthesis and formal verification")
    (description "ABC is a program for sequential logic synthesis and
formal verification.")
    (license
      (license:non-copyleft "https://fedoraproject.org/wiki/Licensing:MIT#Modern_Variants")))))

(define-public iverilog
  (package
    (name "iverilog")
    (version "10.1.1")
    (source (origin
              (method url-fetch)
              (uri
               (string-append "ftp://ftp.icarus.com/pub/eda/verilog/v10/"
                              "verilog-" version ".tar.gz"))
              (sha256
                (base32
                   "1nnassxvq30rnn0r2p85rkb2zwxk97p109y13x3vr365wzgpbapx"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("flex" ,flex)
       ("bison" ,bison)
       ("ghostscript" ,ghostscript))) ; ps2pdf
    (home-page "http://iverilog.icarus.com/")
    (synopsis "FPGA Verilog simulation and synthesis tool")
    (description "Icarus Verilog is a Verilog simulation and synthesis tool.
It operates as a compiler, compiling source code written in Verilog
(IEEE-1364) into some target format.
For batch simulation, the compiler can generate an intermediate form
called vvp assembly.
This intermediate form is executed by the ``vvp'' command.
For synthesis, the compiler generates netlists in the desired format.")
    ;; GPL2 only because of:
    ;; - ./driver/iverilog.man.in
    ;; - ./iverilog-vpi.man.in
    ;; - ./tgt-fpga/iverilog-fpga.man
    ;; - ./vvp/vvp.man.in
    ;; Otherwise would be GPL2+.
    ;; You have to accept both GPL2 and LGPL2.1+.
    (license (list license:gpl2 license:lgpl2.1+))))

(define-public yosys
  (package
    (name "yosys")
    (version "0.6")
    (source (origin
              (method url-fetch)
              (uri
               (string-append "https://github.com/cliffordwolf/yosys/archive/"
                              name "-" version ".tar.gz"))
              (sha256
                (base32
                   "02j0c0m9dfyjccynalf0aggj6gy20k7iphpkg5cn6sdirlkv8gmx"))
              (file-name (string-append name "-" version "-checkout.tar.gz"))
              (modules '((guix build utils)))
              (snippet
                '(substitute* "Makefile"
                   (("ABCREV = .*") "ABCREV = default\n")))))
    (build-system gnu-build-system)
    (arguments
     `(#:test-target "test"
       #:make-flags (list "CC=gcc"
                          "CXX=g++"
                          (string-append "PREFIX=" %output))
       #:phases
       (modify-phases %standard-phases
         (replace 'configure
           (lambda* (#:key inputs (make-flags '()) #:allow-other-keys)
             (zero? (apply system* "make" "config-gcc" make-flags))))
         (add-after 'configure 'prepare-abc
           (lambda* (#:key inputs #:allow-other-keys)
             (let* ((sourceabc (assoc-ref inputs "abc"))
                    (sourcebin (string-append sourceabc "/bin"))
                    (source (string-append sourcebin "/abc")))
                   (mkdir-p "abc")
                   (call-with-output-file "abc/Makefile"
                     (lambda (port)
                       (format port ".PHONY: all\nall:\n\tcp -f abc abc-default\n")))
                   (copy-file source "abc/abc")
                   (zero? (system* "chmod" "+w" "abc/abc")))))
          (add-before 'check 'fix-iverilog-references
             (lambda* (#:key inputs native-inputs #:allow-other-keys)
               (let* ((xinputs (or native-inputs inputs))
                      (xdirname (assoc-ref xinputs "iverilog"))
                      (iverilog (string-append xdirname "/bin/iverilog")))
                     (substitute* '("./manual/CHAPTER_StateOfTheArt/synth.sh"
                                    "./manual/CHAPTER_StateOfTheArt/validate_tb.sh"
                                    "./techlibs/ice40/tests/test_bram.sh"
                                    "./techlibs/ice40/tests/test_ffs.sh"
                                    "./techlibs/xilinx/tests/bram1.sh"
                                    "./techlibs/xilinx/tests/bram2.sh"
                                    "./tests/bram/run-single.sh"
                                    "./tests/realmath/run-test.sh"
                                    "./tests/simple/run-test.sh"
                                    "./tests/techmap/mem_simple_4x1_runtest.sh"
                                    "./tests/tools/autotest.sh"
                                    "./tests/vloghtb/common.sh")
                        (("if ! which iverilog") "if ! true")
                        (("iverilog ") (string-append iverilog " "))
                        (("iverilog_bin=\".*\"") (string-append "iverilog_bin=\""
                                                                iverilog "\"")))
                     #t))))))
    ;; TODO add xdot [patch the path to it here] as soon as I find out where it is.
    (native-inputs
     `(("pkg-config" ,pkg-config)
       ("python" ,python)
       ("bison" ,bison)
       ("flex" ,flex)
       ("gawk" , gawk) ; for the tests and "make" progress pretty-printing
       ("tcl" ,tcl) ; tclsh for the tests
       ("iverilog" ,iverilog))) ; for the tests
    (inputs
     `(("tcl" ,tcl)
       ("readline" ,readline)
       ("libffi" ,libffi)
       ("abc" ,abc)))
    (home-page "http://www.clifford.at/yosys/")
    (synopsis "FPGA Verilog RTL synthesizer")
    (description "Yosys synthesizes Verilog-2005.")
    (license license:isc)))

(define-public icestorm
  (let ((commit "12b2295c9087d94b75e374bb205ae4d76cf17e2f")
        (revision "1"))
   (package
    (name "icestorm")
    (version (string-append "0.0-" revision "-" (string-take commit 9)))
    (source (origin
              (method git-fetch)
              (uri (git-reference
                     (url "https://github.com/cliffordwolf/icestorm.git")
                     (commit commit)))
              (file-name (string-append name "-" version "-checkout"))
              (sha256
                (base32
                   "1mmzlqvap6w8n4qzv3idvy51arkgn03692ssplwncy3akjrbsd2b"))))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f ; no unit tests that don't need an FPGA exist.
       #:make-flags (list "CC=gcc" "CXX=g++"
                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
       #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'remove-usr-local
            (lambda _
              (substitute* "iceprog/Makefile"
                (("-I/usr/local/include") "")
                (("-L/usr/local/lib") ""))
              #t))
          (delete 'configure))))
    (inputs
     `(("libftdi" ,libftdi)))
    (native-inputs
     `(("python-3" ,python)
       ("pkg-config" ,pkg-config)))
    (home-page "http://www.clifford.at/icestorm/")
    (synopsis "Project IceStorm - Lattice iCE40 FPGAs bitstream tools")
    (description "Project IceStorm - Lattice iCE40 FPGAs Bitstream Tools.
Includes the actual FTDI connector.")
    (license license:isc))))

(define-public arachne-pnr
  (let ((commit "52e69ed207342710080d85c7c639480e74a021d7")
        (revision "1"))
   (package
    (name "arachne-pnr")
    (version (string-append "0.0-" revision "-" (string-take commit 9)))
    (source (origin
              (method git-fetch)
              (uri (git-reference
                     (url "https://github.com/cseed/arachne-pnr.git")
                     (commit commit)))
              (file-name (string-append name "-" version "-checkout"))
              (sha256
                (base32
                   "15bdw5yxj76lxrwksp6liwmr6l1x77isf4bs50ys9rsnmiwh8c3w"))))
    (build-system gnu-build-system)
    (arguments
     `(#:test-target "test"
       #:phases (modify-phases %standard-phases
       (replace 'configure
         (lambda* (#:key outputs inputs #:allow-other-keys)
           (substitute* '("Makefile")
             (("DESTDIR = .*") (string-append "DESTDIR = "
                                             (assoc-ref outputs "out")
                                             "\n"))
             (("ICEBOX = .*") (string-append "ICEBOX = "
                                             (assoc-ref inputs "icestorm")
                                             "/share/icebox\n")))
           (substitute* '("./tests/fsm/generate.py"
                          "./tests/combinatorial/generate.py")
             (("#!/usr/bin/python") "#!/usr/bin/python2"))
           #t)))))
    (inputs
     `(("icestorm" ,icestorm)))
    (native-inputs
     `(("git" ,git)  ; for determining its own version string
       ("yosys" ,yosys) ; for tests
       ("perl" ,perl) ; for shasum
       ("python-2" ,python-2))) ; for tests
    (home-page "https://github.com/cseed/arachne-pnr")
    (synopsis "Place-and-Route tool for FPGAs")
    (description "Arachne-PNR is a Place-and-Route Tool For FPGAs.")
    (license license:gpl2))))

(define-public gtkwave
  (package
    (name "gtkwave")
    (version "3.3.76")
    (source (origin
              (method url-fetch)
              (uri (string-append "http://gtkwave.sourceforge.net/"
                                  name "-" version ".tar.gz"))
              (sha256
               (base32
                "1vlvavszb1jwwiixiagld88agjrjg0ix8qa4xnxj4ziw0q87jbmn"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("gperf" ,gperf)
       ("pkg-config" ,pkg-config)))
    (inputs
     `(("tcl" ,tcl)
       ("tk" ,tk)
       ("gtk+-2" ,gtk+-2)))
    (arguments
     `(#:configure-flags
       (list (string-append "--with-tcl="
                            (assoc-ref %build-inputs "tcl")
                            "/lib")
             (string-append "--with-tk="
                            (assoc-ref %build-inputs "tk")
                            "/lib"))))

    (synopsis "Waveform viewer for FPGA simulator trace files")
    (description "This package is a waveform viewer for FPGA
simulator trace files (FST).")
    (home-page "http://gtkwave.sourceforge.net/")
    ;; Exception against free government use in tcl_np.c and tcl_np.h
    (license (list license:gpl2+ license:expat license:tcl/tk))))

M gnu/packages/freeipmi.scm => gnu/packages/freeipmi.scm +3 -3
@@ 28,19 28,19 @@
(define-public freeipmi
  (package
    (name "freeipmi")
    (version "1.5.3")
    (version "1.5.4")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/freeipmi/freeipmi-"
                                 version ".tar.gz"))
             (sha256
              (base32
               "0s4q7imc4r3g9lkd92bnvw70679q83b0irrlw895i5nc05dj4djx"))))
               "1m8zvnyjyjap07vvc5z90nyghabbb6bjcyyc7qswj66qsmssf135"))))
    (build-system gnu-build-system)
    (inputs
     `(("readline" ,readline)
       ("libgcrypt" ,libgcrypt)))
    (home-page "http://www.gnu.org/software/freeipmi/")
    (home-page "https://www.gnu.org/software/freeipmi/")
    (synopsis "Platform management, including sensor and power monitoring")
    (description
     "GNU FreeIPMI is a collection of in-band and out-of-band IPMI software

M gnu/packages/games.scm => gnu/packages/games.scm +13 -11
@@ 179,8 179,10 @@ scriptable with Guile.")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "http://abbaye-for-linux.googlecode.com/files/"
                           "abbaye-for-linux-src-" version ".tar.gz"))
       (uri (string-append "https://storage.googleapis.com/"
                           "google-code-archive-downloads/v2/code.google.com/"
                           "abbaye-for-linux/abbaye-for-linux-src-"
                           version ".tar.gz"))
       (sha256
        (base32
         "1wgvckgqa2084rbskxif58wbb83xbas8s1i8s7d57xbj08ryq8rk"))))


@@ 427,7 429,7 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
(define-public xboard
  (package
    (name "xboard")
    (version "4.9.0")
    (version "4.9.1")
    (source
     (origin
       (method url-fetch)


@@ 435,14 437,15 @@ exec ~a/bin/freedink -refdir ~a/share/dink\n"
                           ".tar.gz"))
       (sha256
        (base32
         "1av6r3s5vyclwf3c9i1pkr2442ryrf4ixhhf2i44a4j1xyhlp5jb"))))
         "1mkh36xnnacnz9r00b5f9ld9309k32jv6mcavklbdnca8bl56bib"))))
    (build-system gnu-build-system)
    (inputs
     `(("gtk+" ,gtk+-2)
       ("librsvg" ,librsvg)))
    (native-inputs `(("texinfo" ,texinfo)
                     ("pkg-config" ,pkg-config)))
    (home-page "http://www.gnu.org/software/xboard")
    (native-inputs
     `(("texinfo" ,texinfo)
       ("pkg-config" ,pkg-config)))
    (home-page "https://www.gnu.org/software/xboard")
    (synopsis "Graphical user interface for chess programs")
    (description "GNU XBoard is a graphical board for all varieties of chess,
including international chess, xiangqi (Chinese chess), shogi (Japanese chess)


@@ 2784,12 2787,11 @@ auto mapper with a VT100 map display.")
    (source
     (origin (method url-fetch)
             (uri (string-append
                   "https://github.com/sgimenez/laby/tarball/"
                   name "-" version))
             (file-name (string-append name "-" version ".tar.gz"))
                   "https://github.com/sgimenez/laby/archive/"
                   name "-" version ".tar.gz"))
             (sha256
              (base32
               "113ip48308ps3lsw427xswgx3wdanils43nyal9n4jr6bcx1bj2j"))
               "0gyrfa95l1qka7gbjf7l6mk7mbfvph00l0c995ia272qdw7rjhyf"))
             (patches (search-patches "laby-make-install.patch"))))
    (build-system gnu-build-system)
    (inputs

M gnu/packages/gcc.scm => gnu/packages/gcc.scm +7 -0
@@ 566,6 566,13 @@ as the 'native-search-paths' field."
                (("libgcj(_bc)?_la_LDFLAGS =" ldflags _)
                 (string-append ldflags " -Wl,-rpath=$(libdir)")))))
           (add-after
            'unpack 'patch-testsuite
            ;; dejagnu-1.6 removes the 'absolute' command
            (lambda _
              (substitute* "libjava/testsuite/lib/libjava.exp"
                (("absolute") "file normalize"))
              #t))
           (add-after
            'install 'install-javac-and-javap-wrappers
            (lambda _
              (let* ((javac  (assoc-ref %build-inputs "javac.in"))

M gnu/packages/gdb.scm => gnu/packages/gdb.scm +3 -3
@@ 37,14 37,14 @@
(define-public gdb
  (package
    (name "gdb")
    (version "7.11.1")
    (version "7.12")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://gnu/gdb/gdb-"
                                 version ".tar.xz"))
             (sha256
              (base32
               "0w7wi1llznlqdqk2lmzygz2xylb2c9mh580s9i0rypkmwfj6s8g9"))))
               "152g2qa8337cxif3lkvabjcxfd9jphfb2mza8f1p2c4bjk2z6kw3"))))
    (build-system gnu-build-system)
    (arguments
     `(#:tests? #f ; FIXME "make check" fails on single-processor systems.


@@ 95,7 95,7 @@
    (native-inputs
      `(("texinfo" ,texinfo)
        ("pkg-config" ,pkg-config)))
    (home-page "http://www.gnu.org/software/gdb/")
    (home-page "https://www.gnu.org/software/gdb/")
    (synopsis "The GNU debugger")
    (description
     "GDB is the GNU debugger.  With it, you can monitor what a program is

M gnu/packages/gnome.scm => gnu/packages/gnome.scm +1 -0
@@ 5094,6 5094,7 @@ software that do not provide their own configuration interface.")
       ("gvfs"                      ,gvfs)
       ("hicolor-icon-theme"        ,hicolor-icon-theme)
       ("nautilus"                  ,nautilus)
       ("pinentry-gnome3"           ,pinentry-gnome3)
       ("pulseaudio"                ,pulseaudio)
       ("shared-mime-info"          ,shared-mime-info)
       ("totem"                     ,totem)

M gnu/packages/gnupg.scm => gnu/packages/gnupg.scm +21 -4
@@ 7,7 7,8 @@
;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;; Copyright © 2016 Nils Gillmann <ng0@libertad.pw>
;;; Copyright © 2016 Christopher Baines <mail@cbaines.net>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 606,7 607,7 @@ including tools for signing keys, keyring analysis, and party preparation.
    (synopsis "GnuPG's interface to passphrase input")
    (description
     "Pinentry provides a console that allows users to enter a passphrase when
@code{gpg} or @code{gpg2} is run and needs it.")
@code{gpg} is run and needs it.")
    (license license:gpl2+)))

(define-public pinentry-gtk2


@@ 619,7 620,23 @@ including tools for signing keys, keyring analysis, and party preparation.
       ,@(package-inputs pinentry-tty)))
    (description
     "Pinentry provides a console and a GTK+ GUI that allows users to enter a
passphrase when @code{gpg} or @code{gpg2} is run and needs it.")))
passphrase when @code{gpg} is run and needs it.")))

(define-public pinentry-gnome3
  (package
    (inherit pinentry-tty)
    (name "pinentry-gnome3")
    (inputs
     `(("gtk+" ,gtk+-2)
       ("gcr" ,gcr)
       ("glib" ,glib)
       ,@(package-inputs pinentry-tty)))
    (arguments
     `(#:configure-flags '("--enable-pinentry-gnome3")))
    (description
     "Pinentry provides a console and a GUI designed for use with GNOME@tie{}3
that allows users to enter a passphrase when required by @code{gpg} or other
software.")))

(define-public pinentry-qt
  (package


@@ 632,7 649,7 @@ passphrase when @code{gpg} or @code{gpg2} is run and needs it.")))
     `(#:configure-flags '("CXXFLAGS=-std=gnu++11")))
  (description
   "Pinentry provides a console and a Qt GUI that allows users to enter a
passphrase when @code{gpg} or @code{gpg2} is run and needs it.")))
passphrase when @code{gpg} is run and needs it.")))

(define-public pinentry
  (package (inherit pinentry-gtk2)

M gnu/packages/gnuzilla.scm => gnu/packages/gnuzilla.scm +86 -27
@@ 28,6 28,7 @@
  #:use-module (guix packages)
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages base)
  #:use-module (gnu packages databases)
  #:use-module (gnu packages glib)
  #:use-module (gnu packages gstreamer)


@@ 185,7 186,7 @@ in the Mozilla clients.")
(define-public nss
  (package
    (name "nss")
    (version "3.26")
    (version "3.27.1")
    (source (origin
              (method url-fetch)
              (uri (let ((version-with-underscores


@@ 196,7 197,7 @@ in the Mozilla clients.")
                      "nss-" version ".tar.gz")))
              (sha256
               (base32
                "0r65s5q8kk0vr48s0zr8xi610k7h072lgkkpp4z6jlxr19bkly4i"))
                "0sraxk26swlgl7rl742rkfp5k251v5z3lqw9k8ikin0cjfhkfdpx"))
              ;; Create nss.pc and nss-config.
              (patches (search-patches "nss-pkgconfig.patch"))))
    (build-system gnu-build-system)


@@ 290,38 291,71 @@ PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other security
standards.")
    (license license:mpl2.0)))

(define (mozilla-patch file-name changeset hash)
  "Return an origin for CHANGESET from the mozilla-esr45 repository."
  (origin
    (method url-fetch)
    (uri (string-append "https://hg.mozilla.org/releases/mozilla-esr45/raw-rev/"
                        changeset))
    (sha256 (base32 hash))
    (file-name file-name)))

(define-public icecat
  (package
    (name "icecat")
    (version "38.8.0-gnu2")
    (version "45.3.0-gnu1-beta")
    (source
     (origin
      (method url-fetch)
      (uri (string-append "mirror://gnu/gnuzilla/"
                          version "/"
                          name "-" version ".tar.bz2"))
      (uri (list (string-append "mirror://gnu/gnuzilla/" version "/"
                                name "-" version ".tar.bz2")
                 ;; XXX Temporary URI for 45.3 beta release.
                 ;;     Remove when no longer needed.
                 (string-append "http://jenkins.trisquel.info/icecat/binaries/"
                                "icecat-45.3.0-gnu1.tar.bz2")))
      (sha256
       (base32
        "1yb7a1zsqpra9cgq8hrzrbm5v31drb9367cwvwiksz0ngqy342hb"))
      (patches (search-patches
                "icecat-avoid-bundled-includes.patch"
                "icecat-CVE-2016-2818-pt1.patch"
                "icecat-CVE-2016-2818-pt2.patch"
                "icecat-CVE-2016-2818-pt3.patch"
                "icecat-CVE-2016-2818-pt4.patch"
                "icecat-CVE-2016-2818-pt5.patch"
                "icecat-CVE-2016-2818-pt6.patch"
                "icecat-CVE-2016-2818-pt7.patch"
                "icecat-CVE-2016-2818-pt8.patch"
                "icecat-CVE-2016-2818-pt9.patch"
                "icecat-CVE-2016-2819.patch"
                "icecat-CVE-2016-2821.patch"
                "icecat-CVE-2016-2824.patch"
                "icecat-CVE-2016-2828.patch"
                "icecat-CVE-2016-2831.patch"))
        "1hk5lwaqm8nkfm43sq521mzyrx0x3iiwvlcy62m7cq7grz9wixp6"))
      (patches
       `(,(search-patch "icecat-avoid-bundled-libraries.patch")
         ,(mozilla-patch "icecat-CVE-2016-5250.patch"     "6711ccb0184e" "1p0s91rw1j7ib6hy9gh5p0l33rja32rfgygh29jw4wq1hxfql8rk")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt1.patch" "b08f28db372e" "0fmifimavawbff700rzjibsnr16am6902gp965scvi1iy78754ia")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt2.patch" "a49fd7eb57ba" "1dyh0pjdmf64sjbj1x0mdjwfispacx9yny1kx9nzpf85myryr640")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt3.patch" "9707c3423a1e" "12nn8av0akza4ml1is9mfy8f7368mrkxsl32ly97r4irzh0iryh1")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt4.patch" "9d632865560a" "1msp1wqv0c317wqkm82hd9ajbg4a5mcr8pld5j8cx37ccv7f21g3")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt5.patch" "90697781ec9f" "1h6gcrw5ykf7r59phxqkhpfs7jsgzqn509qm43sj7mbpcvqvk5mg")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt6.patch" "dd9eb81853b9" "1lyqnn40sayziych8gqd5aj7il3zajf318y8ddj8dzz3c8id5dzc")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt7.patch" "d91fc76079e0" "022lhixa8dxa6ny9a4bh2di282i0lhyq0glqr9n4q3r8msfmf0ba")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt8.patch" "3e37ba5e0867" "1w8lncxaayq4xndhyp1hwlv00zggbayljq6rlypb8kdwgzfpi77w")
         ,(mozilla-patch "icecat-CVE-2016-5257-pt9.patch" "3c4958a98908" "16bc6ai5qddnpm3yw24lry5s7i05xs0ycixzxiir4wmcgwcaayiy")
         ,(mozilla-patch "icecat-CVE-2016-5261.patch"     "bc2f5467b33d" "0i4b8ydmqg4blx541f56g9qrlm7gp6ih4cs7ixbds724cwk83b9f")
         ,(mozilla-patch "icecat-CVE-2016-5270.patch"     "7cd50d56bb61" "15nbp5axr59mczxgf37nli37jbw0jdknmxz7z71772pzjd2z07r9")
         ,(mozilla-patch "icecat-CVE-2016-5272.patch"     "6e43a01fee3c" "025xp1wdnz1gc5l2rsgbrwsh1pbysjiyfgz0g6rvr390r7ag1n74")
         ,(mozilla-patch "icecat-CVE-2016-5274.patch"     "10c9453407de" "1wqh6hj0dpa7r3hhlyrflcv3r3cg0xq4rb0zvhysi6l7lwb8q51r")
         ,(mozilla-patch "icecat-CVE-2016-5276.patch"     "fc818ab03f15" "1q64ipl172dcmyy9p8p3l3ljpdh1q1jg48lai0qn2xgknl7sdpks")
         ,(mozilla-patch "icecat-CVE-2016-5277.patch"     "7b668c5cec92" "1qmchn6qifgjakzac6i4hgnivy062pzgz9p1l11c1m3an1rh0isg")
         ,(mozilla-patch "icecat-CVE-2016-5278.patch"     "fd5052e343df" "1nzmzlnsz61w9aw4mjvgmlkz88aqv1w858rr0mbv07hwyrljfi84")
         ,(mozilla-patch "icecat-CVE-2016-5280.patch"     "30673bc9730b" "1qz1684v1rp86ngadcaqd68iqf472flnrnk971ryg4fbsyy8g1za")
         ,(mozilla-patch "icecat-CVE-2016-5281-pt1.patch" "61405f1fd1df" "1fgmq67arwsl1nrl133fcb5cz6jbbcfjvbv8cd8cadhapin971a7")
         ,(mozilla-patch "icecat-CVE-2016-5281-pt2.patch" "7776b6ec7b92" "1f7k8f4lk7nyghwajsxf6nb7yvzsaw3jwpa3316znsva12m548mn")
         ,(mozilla-patch "icecat-CVE-2016-5284-pt1.patch" "55e768767416" "1gg7m12njbkn1jqf2gp2y7zd9ik3xhqkjb7znczna4l438h7ki83")
         ,(mozilla-patch "icecat-CVE-2016-5284-pt2.patch" "3c42249975a5" "0gnanndkmhsp49rldv4kh0smkdcs7616v46hn567kfw8yfwqvnli")
         ,(mozilla-patch "icecat-CVE-2016-5284-pt3.patch" "126e5d574811" "13gr08bzqy23adz0ciihb7cy9wdnkcn71i77a3y5b5apm6k54mwi")
         ,(mozilla-patch "icecat-CVE-2016-5284-pt4.patch" "7b8bd7aae1a8" "0mq5gpq6ni8czfcs1rif4is0igh0054aw41ga0jqkq58g7lavkrf")
         ,(mozilla-patch "icecat-CVE-2016-5284-pt5.patch" "0799490f4e6f" "1ypv6i48nabbhcqbach8fbgz9bmnhm7q5z9dnfid44z8g54l3f33")
         ,(mozilla-patch "icecat-CVE-2016-5284-pt6.patch" "fc990e4ae8bc" "1s2cj505ajwwiy4xvn5zlmyzqpgahxmqqvis0a6xm6mjbjh02gm4")
         ,(mozilla-patch "icecat-bug-1251088.patch"       "5ffa912ed83e" "0v5lpv3c89c2d4y5acn0kyijv096axdnrvaj5ya5yypzfcaqxv24")
         ,(mozilla-patch "icecat-bug-1292590.patch"       "d4b5b8f3e373" "0w8cxn6ryhgxryy8k8i06yw4mknv509ns9ff1avd0hmgxa83mcdp")
         ,(mozilla-patch "icecat-bug-1298169.patch"       "adce603ae36d" "0mgs85cwx61bk17r7npl311l4m8yn4667wyhgjmm2ajiys6nn0yl")
         ,(mozilla-patch "icecat-bug-1301496.patch"       "97268426bb6f" "1z7hg796cgag025gm9pp2szz7w870s7naagdri1dlsilj797v8hr")
         ,(mozilla-patch "icecat-bug-1299519.patch"       "fc055950b6b8" "05iml5k3rzc653jk4imd111sh18625jxfxkcj12kjdihl0gdr4x4")
         ,(mozilla-patch "icecat-bug-1303710.patch"       "6f845c23565b" "01dlbnmpsnwr448fajs276y62gl03r74k1hxnwsg6ihwhnfdvn5a")
         ,(mozilla-patch "icecat-bug-1301343.patch"       "e5d51ca7a3c0" "0hshcz24hc6pkz5pcqxhajm17ibwrlfn1s00frfnpjjy56vacfz0")
         ,(mozilla-patch "icecat-bug-1299686.patch"       "576f1725a57e" "1lic9d3r8r1vcniw1g3ca71390lw3dmwjsw55dp6z96hyjbcq3fd")))
      (modules '((guix build utils)))
      (snippet
       '(begin
          (use-modules (ice-9 ftw))
          ;; Remove bundled libraries that we don't use, since they may
          ;; contain unpatched security flaws, they waste disk space and
          ;; network bandwidth, and may cause confusion.


@@ 358,6 392,12 @@ standards.")
                      "gfx/cairo"
                      "js/src/ctypes/libffi"
                      "db/sqlite3"))
          ;; Delete .pyc files, typically present in icecat source tarballs
          (for-each delete-file (find-files "." "\\.pyc$"))
          ;; Delete obj-* directories, found in icecat-45.3.0-gnu1-beta
          (for-each delete-file-recursively
                    (scandir "." (lambda (name)
                                   (string-prefix? "obj-" name))))
          #t))))
    (build-system gnu-build-system)
    (inputs


@@ 391,7 431,21 @@ standards.")
       ("mit-krb5" ,mit-krb5)
       ("nspr" ,nspr)
       ("nss" ,nss)
       ("sqlite" ,sqlite)

       ;; XXX Work around the fact that our 'sqlite' package was not built
       ;;     with -DSQLITE_ENABLE_DBSTAT_VTAB.
       ("sqlite" ,(package
                    (inherit sqlite)
                    (arguments
                     `(#:configure-flags
                       ;; Add -DSQLITE_SECURE_DELETE, -DSQLITE_ENABLE_UNLOCK_NOTIFY and
                       ;; -DSQLITE_ENABLE_DBSTAT_VTAB to CFLAGS.  GNU Icecat will refuse
                       ;; to use the system SQLite unless these options are enabled.
                       (list (string-append "CFLAGS=-O2 -DSQLITE_SECURE_DELETE "
                                            "-DSQLITE_ENABLE_UNLOCK_NOTIFY "
                                            "-DSQLITE_ENABLE_DBSTAT_VTAB"))))))
       ;;("sqlite" ,sqlite)

       ("startup-notification" ,startup-notification)
       ("unzip" ,unzip)
       ("yasm" ,yasm)


@@ 401,7 455,8 @@ standards.")
     `(("perl" ,perl)
       ("python" ,python-2) ; Python 3 not supported
       ("python2-pysqlite" ,python2-pysqlite)
       ("pkg-config" ,pkg-config)))
       ("pkg-config" ,pkg-config)
       ("which" ,which)))
    (arguments
     `(#:tests? #f          ; no check target
       #:out-of-source? #t  ; must be built outside of the source directory


@@ 432,6 487,11 @@ standards.")
                           "--disable-debug"
                           "--disable-debug-symbols"

                           ;; Temporary hack to work around missing
                           ;; "unofficial" branding in
                           ;; icecat-45.3.0-gnu1-beta.
                           "--enable-official-branding"

                           ;; Avoid bundled libraries.
                           "--with-system-zlib"
                           "--with-system-bz2"


@@ 597,5 657,4 @@ features built-in privacy-protecting features.")
    (properties
     `((ftp-directory . "/gnu/gnuzilla")
       (cpe-name . "firefox_esr")
       (cpe-version . ,(string-drop-right version
                                          (string-length "-gnu1")))))))
       (cpe-version . ,(first (string-split version #\-)))))))

M gnu/packages/guile.scm => gnu/packages/guile.scm +1 -0
@@ 219,6 219,7 @@ without requiring the source code to be rewritten.")
              (snippet '(for-each delete-file
                                  (find-files "prebuilt" "\\.go$")))))
    (synopsis "Snapshot of what will become version 2.2 of GNU Guile")
    (properties '((timeout . 72000)))  ; 20 hours
    (native-search-paths
     (list (search-path-specification
            (variable "GUILE_LOAD_PATH")

M gnu/packages/haskell.scm => gnu/packages/haskell.scm +198 -2
@@ 1170,12 1170,10 @@ version 1.3).")
    (build-system haskell-build-system)
    (inputs
     `(("ghc-blaze-builder" ,ghc-blaze-builder)
       ("ghc-directory" ,ghc-directory)
       ("ghc-network" ,ghc-network)
       ("ghc-random" ,ghc-random)
       ("ghc-stm" ,ghc-stm)
       ("ghc-text" ,ghc-text)
       ("ghc-transformers" ,ghc-transformers)
       ("ghc-zlib" ,ghc-zlib)))
    (native-inputs
     `(("ghc-quickcheck" ,ghc-quickcheck)


@@ 6320,6 6318,204 @@ definition lists, tables, and other features.  A compatibility mode is
provided for those who need a drop-in replacement for Markdown.pl.")
    (license license:gpl2+)))

(define-public ghc-hs-bibutils
  (package
    (name "ghc-hs-bibutils")
    (version "5.5")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://hackage.haskell.org/package/hs-bibutils/hs-bibutils-"
             version ".tar.gz"))
       (sha256
        (base32
         "0pf5lh179rw9jkmw16ss3kiwydlj6zgfk868mjl5s57kx55z7ycm"))))
    (build-system haskell-build-system)
    (inputs `(("ghc-syb" ,ghc-syb)))
    (home-page "https://hackage.haskell.org/package/hs-bibutils")
    (synopsis "Haskell bindings to bibutils")
    (description
     "This package provides Haskell bindings to @code{bibutils}, a library
that interconverts between various bibliography formats using a common
MODS-format XML intermediate.")
    (license license:gpl2+)))

(define-public ghc-rfc5051
  (package
    (name "ghc-rfc5051")
    (version "0.1.0.3")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://hackage.haskell.org/package/rfc5051/"
                           "rfc5051-" version ".tar.gz"))
       (sha256
        (base32
         "0av4c3qvwbkbzrjrrg601ay9pds7wscqqp2lc2z78mv2lllap3g3"))))
    (build-system haskell-build-system)
    (home-page "http://hackage.haskell.org/package/rfc5051")
    (synopsis "Simple unicode collation as per RFC5051")
    (description
     "This library implements @code{unicode-casemap}, the simple, non
locale-sensitive unicode collation algorithm described in RFC 5051.  Proper
unicode collation can be done using @code{text-icu}, but that is a big
dependency that depends on a large C library, and @code{rfc5051} might be
better for some purposes.")
    (license license:bsd-3)))

(define-public ghc-conduit-extra
  (package
    (name "ghc-conduit-extra")
    (version "1.1.13.2")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://hackage.haskell.org/package/"
                           "conduit-extra/conduit-extra-"
                           version ".tar.gz"))
       (sha256
        (base32
         "108vsn9dpsfwvar7nssw6wkqy26rxlf3p4ran6swa5xh8l6d5k4z"))))
    (build-system haskell-build-system)
    (inputs
     `(("ghc-conduit" ,ghc-conduit)
       ("ghc-exceptions" ,ghc-exceptions)
       ("ghc-monad-control" ,ghc-monad-control)
       ("ghc-text" ,ghc-text)
       ("ghc-transformers-base" ,ghc-transformers-base)
       ("ghc-async" ,ghc-async)
       ("ghc-attoparsec" ,ghc-attoparsec)
       ("ghc-blaze-builder" ,ghc-blaze-builder)
       ("ghc-network" ,ghc-network)
       ("ghc-primitive" ,ghc-primitive)
       ("ghc-resourcet" ,ghc-resourcet)
       ("ghc-stm" ,ghc-stm)
       ("ghc-streaming-commons" ,ghc-streaming-commons)
       ("ghc-hspec" ,ghc-hspec)
       ("ghc-bytestring-builder" ,ghc-bytestring-builder)
       ("ghc-quickcheck" ,ghc-quickcheck)))
    (native-inputs
     `(("hspec-discover" ,hspec-discover)))
    (home-page "http://github.com/snoyberg/conduit")
    (synopsis "Conduit adapters for common libraries")
    (description
     "The @code{conduit} package itself maintains relative small dependencies.
The purpose of this package is to collect commonly used utility functions
wrapping other library dependencies, without depending on heavier-weight
dependencies.  The basic idea is that this package should only depend on
@code{haskell-platform} packages and @code{conduit}.")
    (license license:expat)))

(define-public ghc-xml-types
  (package
    (name "ghc-xml-types")
    (version "0.3.6")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://hackage.haskell.org/package/xml-types/"
                           "xml-types-" version ".tar.gz"))
       (sha256
        (base32
         "1jgqxsa9p2q3h6nymbfmvhldqrqlwrhrzmwadlyc0li50x0d8dwr"))))
    (build-system haskell-build-system)
    (inputs `(("ghc-text" ,ghc-text)))
    (home-page "https://john-millikin.com/software/haskell-xml/")
    (synopsis "Basic types for representing XML")
    (description "This package provides basic types for representing XML
documents.")
    (license license:expat)))

(define-public ghc-xml-conduit
  (package
    (name "ghc-xml-conduit")
    (version "1.3.5")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://hackage.haskell.org/package/xml-conduit/"
                           "xml-conduit-" version ".tar.gz"))
       (sha256
        (base32
         "10yw8jiksw21jgwqjjd1ixflavcblisgkp9qq3ba05vadc35lqr5"))))
    (build-system haskell-build-system)
    (inputs
     `(("ghc-conduit" ,ghc-conduit)
       ("ghc-conduit-extra" ,ghc-conduit-extra)
       ("ghc-resourcet" ,ghc-resourcet)
       ("ghc-text" ,ghc-text)
       ("ghc-xml-types" ,ghc-xml-types)
       ("ghc-attoparsec" ,ghc-attoparsec)
       ("ghc-blaze-builder" ,ghc-blaze-builder)
       ("ghc-blaze-markup" ,ghc-blaze-markup)
       ("ghc-blaze-html" ,ghc-blaze-html)
       ("ghc-data-default" ,ghc-data-default)
       ("ghc-monad-control" ,ghc-monad-control)
       ("ghc-hspec" ,ghc-hspec)
       ("ghc-hunit" ,ghc-hunit)))
    (home-page "http://github.com/snoyberg/xml")
    (synopsis "Utilities for dealing with XML with the conduit package")
    (description
     "This package provides pure-Haskell utilities for dealing with XML with
the @code{conduit} package.")
    (license license:expat)))

(define-public ghc-pandoc-citeproc
  (package
    (name "ghc-pandoc-citeproc")
    (version "0.10")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://hackage.haskell.org/package/"
                           "pandoc-citeproc/pandoc-citeproc-"
                           version ".tar.gz"))
       (sha256
        (base32
         "00mprphppk51ylsrkg817mbk23f9fsfvkwzbys9qqbcjbrxi2r94"))))
    (build-system haskell-build-system)
    (arguments
     `(#:phases
       (modify-phases %standard-phases
         ;; Tests need to be run after installation.
         (delete 'check)
         (add-after 'install 'post-install-check
           (assoc-ref %standard-phases 'check)))))
    (inputs
     `(("ghc-mtl" ,ghc-mtl)
       ("ghc-pandoc-types" ,ghc-pandoc-types)
       ("ghc-pandoc" ,ghc-pandoc)
       ("ghc-tagsoup" ,ghc-tagsoup)
       ("ghc-aeson" ,ghc-aeson)
       ("ghc-text" ,ghc-text)
       ("ghc-vector" ,ghc-vector)
       ("ghc-xml-conduit" ,ghc-xml-conduit)
       ("ghc-unordered-containers" ,ghc-unordered-containers)
       ("ghc-data-default" ,ghc-data-default)
       ("ghc-setenv" ,ghc-setenv)
       ("ghc-split" ,ghc-split)
       ("ghc-yaml" ,ghc-yaml)
       ("ghc-hs-bibutils" ,ghc-hs-bibutils)
       ("ghc-rfc5051" ,ghc-rfc5051)
       ("ghc-syb" ,ghc-syb)
       ("ghc-parsec" ,ghc-parsec)
       ("ghc-old-locale" ,ghc-old-locale)
       ("ghc-aeson-pretty" ,ghc-aeson-pretty)
       ("ghc-attoparsec" ,ghc-attoparsec)
       ("ghc-temporary" ,ghc-temporary)))
    (home-page "https://github.com/jgm/pandoc-citeproc")
    (synopsis "Library for using pandoc with citeproc")
    (description
     "The @code{pandoc-citeproc} library exports functions for using the
citeproc system with pandoc.  It relies on @code{citeproc-hs}, a library for
rendering bibliographic reference citations into a variety of styles using a
macro language called @dfn{Citation Style Language} (CSL).  This package also
contains an executable @code{pandoc-citeproc}, which works as a pandoc filter,
and also has a mode for converting bibliographic databases a YAML format
suitable for inclusion in pandoc YAML metadata.")
    (license license:bsd-3)))

(define-public ghc-union-find
  (package
    (name "ghc-union-find")

M gnu/packages/image.scm => gnu/packages/image.scm +4 -1
@@ 636,12 636,15 @@ graphics image formats like PNG, BMP, JPEG, TIFF and others.")
                             "/lib/python2.7/site-packages")
              ;; OpenEXR is not enabled by default.
              "-DWITH_OPENEXR=1"
              ;; Fix rounding error on 32-bit machines
              "-DCMAKE_C_FLAGS=-ffloat-store"
              ;; The header files of ilmbase are not found when included
              ;; by the header files of openexr, and an explicit flag
              ;; needs to be set.
              (string-append "-DCMAKE_CXX_FLAGS=-I"
                             (assoc-ref %build-inputs "ilmbase")
                             "/include/OpenEXR"))))
                             "/include/OpenEXR"
                             " -ffloat-store"))))
   (synopsis "Computer vision library")
   (description
    "VIGRA stands for Vision with Generic Algorithms.  It is an image

M gnu/packages/irc.scm => gnu/packages/irc.scm +40 -2
@@ 3,7 3,7 @@
;;; Copyright © 2014 Kevin Lemonnier <lemonnierk@ulrar.net>
;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 26,6 26,7 @@
  #:use-module (guix packages)
  #:use-module (guix build-system cmake)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system python)
  #:use-module (gnu packages)
  #:use-module (gnu packages aspell)
  #:use-module (gnu packages autogen)


@@ 48,7 49,8 @@
  #:use-module (gnu packages python)
  #:use-module (gnu packages qt)
  #:use-module (gnu packages tcl)
  #:use-module (gnu packages tls))
  #:use-module (gnu packages tls)
  #:use-module (gnu packages web))

(define-public quassel
  (package


@@ 291,3 293,39 @@ and extensible with plugins and scripts.")
    (description
     "sic is a simple IRC client, even more minimalistic than ii.")
    (license license:expat)))

(define-public limnoria
  (package
    (name "limnoria")
    (version "2016.08.07")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "limnoria" version))
       (sha256
        (base32
         "0w1d98hfhn4iqrczam7zahhqsvxa79n3xfcrm4jwkg5lba4f9ccm"))))
    (build-system python-build-system)
    (inputs
     `(("python-pytz" ,python-pytz)
       ("python-chardet" ,python-chardet)
       ("python-dateutil" ,python-dateutil)
       ("python-gnupg" ,python-gnupg)
       ("python-feedparser" ,python-feedparser)
       ("python-sqlalchemy" ,python-sqlalchemy)
       ("python-socksipy-branch" ,python-socksipy-branch)
       ("python-ecdsa" ,python-ecdsa)))
    (native-inputs
     `(("python-mock" ,python-mock)))
    ;; Despite the existence of a test folder there is no test phase.
    ;; We need to package https://github.com/ProgVal/irctest and write
    ;; our own testphase.
    (arguments
     `(#:tests? #f))
    (home-page "https://github.com/ProgVal/Limnoria")
    (synopsis "Modified version of Supybot (an IRC bot and framework)")
    (description
     "Modified version of Supybot with Python 3 and IRCv3 support,
embedded web server, translations (fr, fi, it, hu, de), and many
other enhancements and bug fixes.")
    (license license:bsd-3)))

M gnu/packages/libupnp.scm => gnu/packages/libupnp.scm +2 -0
@@ 17,6 17,7 @@
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages libupnp)
  #:use-module (gnu packages)
  #:use-module (guix licenses)
  #:use-module (guix packages)
  #:use-module (guix download)


@@ 31,6 32,7 @@
      (method url-fetch)
      (uri (string-append "mirror://sourceforge/pupnp/pupnp/libUPnP%20"
                          version "/" name "-" version ".tar.bz2"))
      (patches (search-patches "libupnp-CVE-2016-6255.patch"))
      (sha256
       (base32
        "0qrsdsb1qm85hc4jy04qph895613d148f0x1mmk6z99y3q43fdgf"))))

M gnu/packages/linux.scm => gnu/packages/linux.scm +61 -17
@@ 34,6 34,7 @@

(define-module (gnu packages linux)
  #:use-module (gnu packages)
  #:use-module (gnu packages acl)
  #:use-module (gnu packages admin)
  #:use-module (gnu packages algebra)
  #:use-module (gnu packages attr)


@@ 321,14 322,14 @@ It has been modified to remove all non-free binary blobs.")
(define %intel-compatible-systems '("x86_64-linux" "i686-linux"))

(define-public linux-libre
  (make-linux-libre "4.8"
                    "0fnax2qb597zg2gchab9n9fn7551vccmqfcvq5k3ckz24y50yknm"
  (make-linux-libre "4.8.1"
                    "0l57ab8v52nvx4d898qfvkl7c6zlrm7qd080z6jg0bg0adn4w5lf"
                    %intel-compatible-systems
                    #:configuration-file kernel-config))

(define-public linux-libre-4.4
  (make-linux-libre "4.4.23"
                    "07akixpxlcrpfsadnppyk2hbggqf7j2hzlkg56k0yh3dhyglxv86"
  (make-linux-libre "4.4.24"
                    "1wg1d9rq29612psr5v4krabx7nv1y1gzfshq7wpx6i1lpqf3lill"
                    %intel-compatible-systems
                    #:configuration-file kernel-config))



@@ 339,8 340,8 @@ It has been modified to remove all non-free binary blobs.")
                    #:configuration-file kernel-config))

;; Avoid rebuilding kernel variants when there is a minor version bump.
(define %linux-libre-version "4.7.6")
(define %linux-libre-hash "0716lpzq3w2pdc0nrrx06gqzdfzhkrjq7g37v4ws9wjlzak8hkvy")
(define %linux-libre-version "4.8.1")
(define %linux-libre-hash "0l57ab8v52nvx4d898qfvkl7c6zlrm7qd080z6jg0bg0adn4w5lf")

(define-public linux-libre-arm-generic
  (make-linux-libre %linux-libre-version


@@ 1657,14 1658,14 @@ time.")
(define-public lvm2
  (package
    (name "lvm2")
    (version "2.02.109")
    (version "2.02.166")
    (source (origin
              (method url-fetch)
              (uri (string-append "ftp://sources.redhat.com/pub/lvm2/releases/LVM2."
                                  version ".tgz"))
              (sha256
               (base32
                "1rv5ivg0l1w3nwzwdkqixm96h5bzg7ib4rr196ysb2lw42jmpjbv"))
                "150v0mawd2swdvypcmkjd3h3s4n5i1220h6sxx94a8jvp1kb0871"))
              (modules '((guix build utils)))
              (snippet
               '(begin


@@ 1683,16 1684,27 @@ time.")
    (inputs
     `(("udev" ,eudev)))
    (arguments
     '(#:phases (alist-cons-after
                 'configure 'set-makefile-shell
                 (lambda _
                   ;; Use 'sh', not 'bash', so that '. lib/utils.sh' works as
                   ;; expected.
                   (setenv "SHELL" (which "sh"))
     '(#:phases
       (modify-phases %standard-phases
         (add-after 'configure 'set-makefile-shell
           (lambda _
             ;; Use 'sh', not 'bash', so that '. lib/utils.sh' works as
             ;; expected.
             (setenv "SHELL" (which "sh"))

                   ;; Replace /bin/sh with the right file name.
                   (patch-makefile-SHELL "make.tmpl"))
                 %standard-phases)
             ;; Replace /bin/sh with the right file name.
             (patch-makefile-SHELL "make.tmpl")
             #t))
         (add-before 'strip 'make-objects-writable
           (lambda* (#:key outputs #:allow-other-keys)
             ;; Make compiled objects writable so they can be stripped.
             (let ((out (assoc-ref outputs "out")))
               (for-each (lambda (file)
                           (chmod file #o755))
                         (append
                           (find-files (string-append out "/lib"))
                           (find-files (string-append out "/sbin"))))
               #t))))

       #:configure-flags (list (string-append "--sysconfdir="
                                              (assoc-ref %outputs "out")


@@ 2996,3 3008,35 @@ and other hardware errors on x86 systems.  It can also perform user-defined
tasks, such as bringing bad pages off-line, when configurable error thresholds
are exceeded.")
    (license license:gpl2)))

(define-public mtd-utils
  (package
    (name "mtd-utils")
    (version "1.5.2")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "ftp://ftp.infradead.org/pub/mtd-utils/"
                    "mtd-utils-" version ".tar.bz2"))
              (sha256
               (base32
                "007lhsd8yb34l899r4m37whhzdw815cz4fnjbpnblfha524p7dax"))))
    (inputs
     `(("acl" ,acl)
       ("libuuid" ,util-linux)
       ("lzo", lzo)
       ("zlib" ,zlib)))
    (build-system gnu-build-system)
    (arguments
     `(#:test-target "tests"
       #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out")))
       #:phases (modify-phases %standard-phases
                  (delete 'configure))))
    (synopsis "MTD Flash Storage Utilities")
    (description "This package provides utilities for testing, partitioning, etc
of flash storage.")
    (home-page "http://www.linux-mtd.infradead.org/")
    (license
      (list license:gpl2 ; Almost everything is gpl2 or gpl2+
            license:mpl1.1 ; All ftl* files
            license:expat)))) ; libiniparser

M gnu/packages/lisp.scm => gnu/packages/lisp.scm +582 -2
@@ 33,6 33,8 @@
  #:use-module (guix git-download)
  #:use-module (guix utils)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system asdf)
  #:use-module (guix build-system trivial)
  #:use-module (gnu packages base)
  #:use-module (gnu packages multiprecision)
  #:use-module (gnu packages bdw-gc)


@@ 47,6 49,17 @@
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-1))

(define (asdf-substitutions lisp)
  ;; Prepend XDG_DATA_DIRS/LISP-bundle-systems to ASDF's
  ;; 'default-system-source-registry'.
  `((("\\(,dir \"systems/\"\\)\\)")
     (format #f
             "(,dir \"~a-bundle-systems\")))

      ,@(loop :for dir :in (xdg-data-dirs \"common-lisp/\")
              :collect `(:directory (,dir \"systems\"))"
             ,lisp))))

(define-public gcl
  (package
    (name "gcl")


@@ 112,7 125,12 @@ interface to the Tk widget system.")
             "https://common-lisp.net/project/ecl/static/files/release/"
             name "-" version ".tgz"))
       (sha256
        (base32 "16ab8qs3awvdxy8xs8jy82v8r04x4wr70l9l2j45vgag18d2nj1d"))))
        (base32 "16ab8qs3awvdxy8xs8jy82v8r04x4wr70l9l2j45vgag18d2nj1d"))
       (modules '((guix build utils)))
       (snippet
        ;; Add ecl-bundle-systems to 'default-system-source-registry'.
        `(substitute* "contrib/asdf/asdf.lisp"
           ,@(asdf-substitutions name)))))
    (build-system gnu-build-system)
    ;; src/configure uses 'which' to confirm the existence of 'gzip'.
    (native-inputs `(("which" ,which)))


@@ 153,6 171,10 @@ interface to the Tk widget system.")
                 `("LIBRARY_PATH" suffix ,library-directories)
                 `("LD_LIBRARY_PATH" suffix ,library-directories)))))
         (add-after 'wrap 'check (assoc-ref %standard-phases 'check)))))
    (native-search-paths
     (list (search-path-specification
            (variable "XDG_DATA_DIRS")
            (files '("share")))))
    (home-page "http://ecls.sourceforge.net/")
    (synopsis "Embeddable Common Lisp")
    (description "ECL is an implementation of the Common Lisp language as


@@ 226,7 248,12 @@ an interpreter, a compiler, a debugger, and much more.")
       (uri (string-append "mirror://sourceforge/sbcl/sbcl/" version "/sbcl-"
                           version "-source.tar.bz2"))
       (sha256
        (base32 "0fjdqnb2rsm2vi9794ywp27jr239ddvzc4xfr0dk49jd4v7p2kc5"))))
        (base32 "0fjdqnb2rsm2vi9794ywp27jr239ddvzc4xfr0dk49jd4v7p2kc5"))
       (modules '((guix build utils)))
       (snippet
        ;; Add sbcl-bundle-systems to 'default-system-source-registry'.
        `(substitute* "contrib/asdf/asdf.lisp"
           ,@(asdf-substitutions name)))))
    (build-system gnu-build-system)
    (outputs '("out" "doc"))
    ;; Bootstrap with CLISP.


@@ 315,6 342,10 @@ an interpreter, a compiler, a debugger, and much more.")
               #t))))
         ;; No 'check' target, though "make.sh" (build phase) runs tests.
         #:tests? #f))
    (native-search-paths
     (list (search-path-specification
            (variable "XDG_DATA_DIRS")
            (files '("share")))))
    (home-page "http://www.sbcl.org/")
    (synopsis "Common Lisp implementation")
    (description "Steel Bank Common Lisp (SBCL) is a high performance Common


@@ 492,3 523,552 @@ simple, elegant Scheme dialect.  It is a lisp-1 with lexical scope.
The core is 12 builtin special forms and 33 builtin functions.")
      (home-page "https://github.com/JeffBezanson/femtolisp")
      (license license:bsd-3))))

(define-public sbcl-alexandria
  (let ((revision "1")
        (commit "926a066611b7b11cb71e26c827a271e500888c30"))
    (package
      (name "sbcl-alexandria")
      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
      (source
       (origin
         (method git-fetch)
         (uri (git-reference
               (url "https://gitlab.common-lisp.net/alexandria/alexandria.git")
               (commit commit)))
         (sha256
          (base32
           "18yncicdkh294j05rhgm23gzi36y9qy6vrfba8vg69jrxjp1hx8l"))
         (file-name (string-append "alexandria-" version "-checkout"))))
      (build-system asdf-build-system/sbcl)
      (synopsis "Collection of portable utilities for Common Lisp")
      (description
       "Alexandria is a collection of portable utilities.  It does not contain
conceptual extensions to Common Lisp.  It is conservative in scope, and
portable between implementations.")
      (home-page "https://common-lisp.net/project/alexandria/")
      (license license:public-domain))))

(define-public cl-alexandria
  (sbcl-package->cl-source-package sbcl-alexandria))

(define-public ecl-alexandria
  (sbcl-package->ecl-package sbcl-alexandria))

(define-public sbcl-fiveam
  (package
    (name "sbcl-fiveam")
    (version "1.2")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://github.com/sionescu/fiveam/archive/v"
             version ".tar.gz"))
       (sha256
        (base32 "0f48pcbhqs3wwwzjl5nk57d4hcbib4l9xblxc66b8c2fhvhmhxnv"))
       (file-name (string-append "fiveam-" version ".tar.gz"))))
    (inputs `(("sbcl-alexandria" ,sbcl-alexandria)))
    (build-system asdf-build-system/sbcl)
    (synopsis "Common Lisp testing framework")
    (description "FiveAM is a simple (as far as writing and running tests
goes) regression testing framework.  It has been designed with Common Lisp's
interactive development model in mind.")
    (home-page "https://common-lisp.net/project/fiveam/")
    (license license:bsd-3)))

(define-public cl-fiveam
  (sbcl-package->cl-source-package sbcl-fiveam))

(define-public ecl-fiveam
  (sbcl-package->ecl-package sbcl-fiveam))

(define-public sbcl-bordeaux-threads
  (package
    (name "sbcl-bordeaux-threads")
    (version "0.8.5")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/sionescu/bordeaux-threads/archive/v"
                    version ".tar.gz"))
              (sha256
               (base32 "10ryrcx832fwqdawb6jmknymi7wpdzhi30qzx7cbrk0cpnka71w2"))
              (file-name
               (string-append "bordeaux-threads-" version ".tar.gz"))))
    (inputs `(("sbcl-alexandria" ,sbcl-alexandria)))
    (native-inputs `(("tests:cl-fiveam" ,sbcl-fiveam)))
    (build-system asdf-build-system/sbcl)
    (synopsis "Portable shared-state concurrency library for Common Lisp")
    (description "BORDEAUX-THREADS is a proposed standard for a minimal
MP/Threading interface.  It is similar to the CLIM-SYS threading and lock
support.")
    (home-page "https://common-lisp.net/project/bordeaux-threads/")
    (license license:x11)))

(define-public cl-bordeaux-threads
  (sbcl-package->cl-source-package sbcl-bordeaux-threads))

(define-public ecl-bordeaux-threads
  (sbcl-package->ecl-package sbcl-bordeaux-threads))

(define-public sbcl-trivial-gray-streams
  (let ((revision "1")
        (commit "0483ade330508b4b2edeabdb47d16ec9437ee1cb"))
    (package
      (name "sbcl-trivial-gray-streams")
      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
      (source
       (origin
         (method git-fetch)
         (uri
          (git-reference
           (url "https://github.com/trivial-gray-streams/trivial-gray-streams.git")
           (commit commit)))
         (sha256
          (base32 "0m3rpf2x0zmdk3nf1qfa01j6a55vj7gkwhyw78qslcgbjlgh8p4d"))
         (file-name
          (string-append "trivial-gray-streams-" version "-checkout"))))
      (build-system asdf-build-system/sbcl)
      (synopsis "Compatibility layer for Gray streams implementations")
      (description "Gray streams is an interface proposed for inclusion with
ANSI CL by David N. Gray.  The proposal did not make it into ANSI CL, but most
popular CL implementations implement it.  This package provides an extremely
thin compatibility layer for gray streams.")
      (home-page "http://www.cliki.net/trivial-gray-streams")
      (license license:x11))))

(define-public cl-trivial-gray-streams
  (sbcl-package->cl-source-package sbcl-trivial-gray-streams))

(define-public ecl-trivial-gray-streams
  (sbcl-package->ecl-package sbcl-trivial-gray-streams))

(define-public sbcl-flexi-streams
  (package
    (name "sbcl-flexi-streams")
    (version "1.0.12")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://github.com/edicl/flexi-streams/archive/v"
             version ".tar.gz"))
       (sha256
        (base32 "16grnxvs7vqm5s6myf8a5s7vwblzq1kgwj8i7ahz8vwvihm9gzfi"))
       (file-name (string-append "flexi-streams-" version ".tar.gz"))))
    (build-system asdf-build-system/sbcl)
    (inputs `(("sbcl-trivial-gray-streams" ,sbcl-trivial-gray-streams)))
    (synopsis "Implementation of virtual bivalent streams for Common Lisp")
    (description "Flexi-streams is an implementation of \"virtual\" bivalent
streams that can be layered atop real binary or bivalent streams and that can
be used to read and write character data in various single- or multi-octet
encodings which can be changed on the fly.  It also supplies in-memory binary
streams which are similar to string streams.")
    (home-page "http://weitz.de/flexi-streams/")
    (license license:bsd-3)))

(define-public cl-flexi-streams
  (sbcl-package->cl-source-package sbcl-flexi-streams))

(define-public ecl-flexi-streams
  (sbcl-package->ecl-package sbcl-flexi-streams))

(define-public sbcl-cl-ppcre
  (package
    (name "sbcl-cl-ppcre")
    (version "2.0.11")
    (source
     (origin
       (method url-fetch)
       (uri (string-append
             "https://github.com/edicl/cl-ppcre/archive/v"
             version ".tar.gz"))
       (sha256
        (base32 "1i7daxf0wnydb0pgwiym7qh2wy70n14lxd6dyv28sy0naa8p31gd"))
       (file-name (string-append "cl-ppcre-" version ".tar.gz"))))
    (build-system asdf-build-system/sbcl)
    (native-inputs `(("tests:cl-flexi-streams" ,sbcl-flexi-streams)))
    (synopsis "Portable regular expression library for Common Lisp")
    (description "CL-PPCRE is a portable regular expression library for Common
Lisp, which is compatible with perl.  It is pretty fast, thread-safe, and
compatible with ANSI-compliant Common Lisp implementations.")
    (home-page "http://weitz.de/cl-ppcre/")
    (license license:bsd-2)))

(define-public cl-ppcre
  (sbcl-package->cl-source-package sbcl-cl-ppcre))

(define-public ecl-cl-ppcre
  (sbcl-package->ecl-package sbcl-cl-ppcre))

(define-public sbcl-clx
  (let ((revision "1")
        (commit "1c62774b03c1cf3fe6e5cb532df8b14b44c96b95"))
    (package
      (name "sbcl-clx")
      (version (string-append "0.0.0-" revision "." (string-take commit 7)))
      (source
       (origin
         (method git-fetch)
         (uri
          (git-reference
           (url "https://github.com/sharplispers/clx.git")
           (commit commit)))
         (sha256
          (base32 "0qffag03ns52kwq9xjns2qg1yr0bf3ba507iwq5cmx5xz0b0rmjm"))
         (file-name (string-append "clx-" version "-checkout"))
         (patches
          (list
           (search-patch "clx-remove-demo.patch")))
         (modules '((guix build utils)))
         (snippet
          '(begin
             ;; These removed files cause the compiled system to crash when
             ;; loading.
             (delete-file-recursively "demo")
             (delete-file "test/trapezoid.lisp")
             (substitute* "clx.asd"
               (("\\(:file \"trapezoid\"\\)") ""))))))
      (build-system asdf-build-system/sbcl)
      (arguments
       '(#:special-dependencies '("sb-bsd-sockets")))
      (home-page "http://www.cliki.net/portable-clx")
      (synopsis "X11 client library for Common Lisp")
      (description "CLX is an X11 client library for Common Lisp.  The code was
originally taken from a CMUCL distribution, was modified somewhat in order to
make it compile and run under SBCL, then a selection of patches were added
from other CLXes around the net.")
      (license license:x11))))

(define-public cl-clx
  (sbcl-package->cl-source-package sbcl-clx))

(define-public ecl-clx
  (sbcl-package->ecl-package sbcl-clx))

(define-public sbcl-stumpwm
  (package
    (name "sbcl-stumpwm")
    (version "0.9.9")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://github.com/stumpwm/stumpwm/archive/"
                    version ".tar.gz"))
              (sha256
               (base32 "1fqabij4zcsqg1ywgdv2irp1ys23dwc8ms9ai55lb2i47hgv7z3x"))
              (file-name (string-append "stumpwm-" version ".tar.gz"))))
    (build-system asdf-build-system/sbcl)
    (inputs `(("sbcl-cl-ppcre" ,sbcl-cl-ppcre)
              ("sbcl-clx" ,sbcl-clx)))
    (outputs '("out" "bin"))
    (arguments
     '(#:special-dependencies '("sb-posix")
       #:phases
       (modify-phases %standard-phases
         (add-after 'create-symlinks 'build-program
           (lambda* (#:key lisp outputs inputs #:allow-other-keys)
             (build-program
              lisp
              (string-append (assoc-ref outputs "bin") "/bin/stumpwm")
              #:inputs inputs
              #:entry-program '((stumpwm:stumpwm) 0))))
         (add-after 'build-program 'create-desktop-file
           (lambda* (#:key outputs lisp binary? #:allow-other-keys)
             (let ((output (or (assoc-ref outputs "bin")
                               (assoc-ref outputs "out")))
                   (xsessions "/share/xsessions"))
               (mkdir-p (string-append output xsessions))
               (with-output-to-file
                   (string-append output xsessions
                                  "/stumpwm.desktop")
                 (lambda _
                   (format #t
                    "[Desktop Entry]~@
                     Name=stumpwm~@
                     Comment=The Stump Window Manager~@
                     Exec=~a/bin/stumpwm~@
                     TryExec=~@*~a/bin/stumpwm~@
                     Icon=~@
                     Type=Application~%"
                    output)))
               #t))))))
    (synopsis "Window manager written in Common Lisp")
    (description "Stumpwm is a window manager written entirely in Common Lisp.
It attempts to be highly customizable while relying entirely on the keyboard
for input.  These design decisions reflect the growing popularity of
productive, customizable lisp based systems.")
    (home-page "http://github.com/stumpwm/stumpwm")
    (license license:gpl2+)
    (properties `((ecl-variant . ,(delay ecl-stumpwm))))))

(define-public cl-stumpwm
  (sbcl-package->cl-source-package sbcl-stumpwm))

(define-public ecl-stumpwm
  (let ((base (sbcl-package->ecl-package sbcl-stumpwm)))
    (package
      (inherit base)
      (outputs '("out"))
      (arguments '()))))

(define sbcl-slynk-boot0
  (let ((revision "1")
        (commit "5706cd45d484a4f25795abe8e643509d31968aa2"))
    (package
      (name "sbcl-slynk")
      (version (string-append "1.0.0-beta-" revision "." (string-take commit 7)))
      (source
       (origin
         (method git-fetch)
         (uri
          (git-reference
           (url "https://github.com/joaotavora/sly.git")
           (commit commit)))
         (sha256
          (base32 "0h4gg3sndl2bf6jdnx9nrf14p9hhi43hagrl0f4v4l11hczl8w81"))
         (file-name (string-append "slynk-" version "-checkout"))
         (modules '((guix build utils)
                    (ice-9 ftw)))
         (snippet
          '(begin
             ;; Move the contribs into the main source directory for easier
             ;; access
             (substitute* "slynk/slynk.asd"
               (("\\.\\./contrib")
                "contrib")
               (("\\(defsystem :slynk-util")
                "(defsystem :slynk-util :depends-on (:slynk)"))
             (substitute* "contrib/slynk-trace-dialog.lisp"
               (("\\(slynk::reset-inspector\\)") ; Causes problems on load
                "nil"))
             (substitute* "contrib/slynk-profiler.lisp"
               (("slynk:to-line")
                "slynk-pprint-to-line"))
             (rename-file "contrib" "slynk/contrib")
             ;; Move slynk's contents into the base directory for easier
             ;; access
             (for-each
              (lambda (file)
                (unless (string-prefix? "." file)
                  (rename-file (string-append "slynk/" file)
                               (string-append "./" (basename file)))))
              (scandir "slynk"))))))
      (build-system asdf-build-system/sbcl)
      (arguments
       `(#:tests? #f)) ; No test suite
      (synopsis "Common Lisp IDE for Emacs")
      (description "SLY is a fork of SLIME.  It also features a completely
redesigned REPL based on Emacs's own full-featured comint.el, live code
annotations, and a consistent interactive button interface.  Everything can be
copied to the REPL.  One can create multiple inspectors with independent
history.")
      (home-page "https://github.com/joaotavora/sly")
      (license license:public-domain)
      (properties `((cl-source-variant . ,(delay cl-slynk)))))))

(define-public cl-slynk
  (sbcl-package->cl-source-package sbcl-slynk-boot0))

(define ecl-slynk-boot0
  (sbcl-package->ecl-package sbcl-slynk-boot0))

(define sbcl-slynk-arglists
  (package
    (inherit sbcl-slynk-boot0)
    (name "sbcl-slynk-arglists")
    (inputs `(("sbcl-slynk" ,sbcl-slynk-boot0)))
    (arguments
     `(#:asd-file "slynk.asd"
       ,@(package-arguments sbcl-slynk-boot0)))))

(define ecl-slynk-arglists
  (sbcl-package->ecl-package sbcl-slynk-arglists))

(define sbcl-slynk-util
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-util")))

(define ecl-slynk-util
  (sbcl-package->ecl-package sbcl-slynk-util))

(define sbcl-slynk-fancy-inspector
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-fancy-inspector")
    (inputs `(("sbcl-slynk-util" ,sbcl-slynk-util)
              ,@(package-inputs sbcl-slynk-arglists)))))

(define ecl-slynk-fancy-inspector
  (sbcl-package->ecl-package sbcl-slynk-fancy-inspector))

(define sbcl-slynk-package-fu
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-package-fu")))

(define ecl-slynk-package-fu
  (sbcl-package->ecl-package sbcl-slynk-package-fu))

(define sbcl-slynk-mrepl
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-mrepl")))

(define ecl-slynk-mrepl
  (sbcl-package->ecl-package sbcl-slynk-mrepl))

(define sbcl-slynk-trace-dialog
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-trace-dialog")))

(define ecl-slynk-trace-dialog
  (sbcl-package->ecl-package sbcl-slynk-trace-dialog))

(define sbcl-slynk-profiler
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-profiler")))

(define ecl-slynk-profiler
  (sbcl-package->ecl-package sbcl-slynk-profiler))

(define sbcl-slynk-stickers
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-stickers")))

(define ecl-slynk-stickers
  (sbcl-package->ecl-package sbcl-slynk-stickers))

(define sbcl-slynk-indentation
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-indentation")))

(define ecl-slynk-indentation
  (sbcl-package->ecl-package sbcl-slynk-indentation))

(define sbcl-slynk-retro
  (package
    (inherit sbcl-slynk-arglists)
    (name "sbcl-slynk-retro")))

(define ecl-slynk-retro
  (sbcl-package->ecl-package sbcl-slynk-retro))

(define slynk-systems
  '("slynk"
    "slynk-util"
    "slynk-arglists"
    "slynk-fancy-inspector"
    "slynk-package-fu"
    "slynk-mrepl"
    "slynk-profiler"
    "slynk-trace-dialog"
    "slynk-stickers"
    "slynk-indentation"
    "slynk-retro"))

(define-public sbcl-slynk
  (package
    (inherit sbcl-slynk-boot0)
    (inputs
     `(("slynk" ,sbcl-slynk-boot0)
       ("slynk-util" ,sbcl-slynk-util)
       ("slynk-arglists" ,sbcl-slynk-arglists)
       ("slynk-fancy-inspector" ,sbcl-slynk-fancy-inspector)
       ("slynk-package-fu" ,sbcl-slynk-package-fu)
       ("slynk-mrepl" ,sbcl-slynk-mrepl)
       ("slynk-profiler" ,sbcl-slynk-profiler)
       ("slynk-trace-dialog" ,sbcl-slynk-trace-dialog)
       ("slynk-stickers" ,sbcl-slynk-stickers)
       ("slynk-indentation" ,sbcl-slynk-indentation)
       ("slynk-retro" ,sbcl-slynk-retro)))
    (native-inputs `(("sbcl" ,sbcl)))
    (build-system trivial-build-system)
    (source #f)
    (outputs '("out" "image"))
    (arguments
     `(#:modules ((guix build union)
                  (guix build utils)
                  (guix build lisp-utils))
       #:builder
       (begin
         (use-modules (ice-9 match)
                      (srfi srfi-1)
                      (guix build union)
                      (guix build lisp-utils))

         (union-build
          (assoc-ref %outputs "out")
          (filter-map
           (match-lambda
             ((name . path)
              (if (string-prefix? "slynk" name) path #f)))
           %build-inputs))

         (prepend-to-source-registry
          (string-append (assoc-ref %outputs "out") "//"))
         (build-image "sbcl"
                      (string-append
                       (assoc-ref %outputs "image")
                       "/bin/slynk")
                      #:inputs %build-inputs
                      #:dependencies ',slynk-systems))))))

(define-public ecl-slynk
  (package
    (inherit sbcl-slynk)
    (name "ecl-slynk")
    (inputs
     (map (match-lambda
            ((name pkg . _)
             (list name (sbcl-package->ecl-package pkg))))
          (package-inputs sbcl-slynk)))
    (native-inputs '())
    (outputs '("out"))
    (arguments
     '(#:modules ((guix build union))
       #:builder
       (begin
         (use-modules (ice-9 match)
                      (guix build union))
         (match %build-inputs
           (((names . paths) ...)
            (union-build (assoc-ref %outputs "out")
                         paths))))))))

(define-public sbcl-stumpwm+slynk
  (package
    (inherit sbcl-stumpwm)
    (name "sbcl-stumpwm-with-slynk")
    (outputs '("out"))
    (native-inputs
     `(("stumpwm" ,sbcl-stumpwm)
       ("slynk" ,sbcl-slynk)))
    (arguments
     (substitute-keyword-arguments (package-arguments sbcl-stumpwm)
       ((#:phases phases)
        `(modify-phases ,phases
           (replace 'build-program
             (lambda* (#:key lisp inputs outputs #:allow-other-keys)
               (let* ((out (assoc-ref outputs "out"))
                      (program (string-append out "/bin/stumpwm")))
                 (build-program lisp program
                                #:inputs inputs
                                #:entry-program '((stumpwm:stumpwm) 0)
                                #:dependencies '("stumpwm"
                                                 ,@slynk-systems))
                 ;; Remove unneeded file.
                 (delete-file (string-append out "/bin/stumpwm-exec.fasl"))
                 #t)))
           (delete 'copy-source)
           (delete 'build)
           (delete 'check)
           (delete 'link-dependencies)
           (delete 'cleanup)
           (delete 'create-symlinks)))))))

M gnu/packages/lynx.scm => gnu/packages/lynx.scm +19 -15
@@ 1,5 1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 33,14 34,15 @@
(define-public lynx
  (package
    (name "lynx")
    (version "2.8.8rel.2")
    (version "2.8.9dev.9")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "http://invisible-mirror.net/archives/lynx/tarballs"
                    "/lynx" version ".tar.bz2"))
              (sha256
               (base32 "1rxysl08acqll5b87368f04kckl8sggy1qhnq59gsxyny1ffg039"))))
               (base32
                "1m72ga89hywm097kazcm8w6sqrfjnl83gh31pkbhk4zhzhfpzxgh"))))
    (build-system gnu-build-system)
    (native-inputs `(("pkg-config" ,pkg-config)
                     ("perl" ,perl)))


@@ 53,19 55,21 @@
              ("gzip" ,gzip)
              ("bzip2" ,bzip2)))
    (arguments
     `(#:configure-flags '("--with-pkg-config"
                           "--with-screen=ncurses"
                           "--with-zlib"
                           "--with-bzlib"
                           "--with-gnutls"
                           ;; "--with-socks5"    ; XXX TODO
                           "--enable-widec"
                           "--enable-ascii-ctypes"
                           "--enable-local-docs"
                           "--enable-htmlized-cfg"
                           "--enable-gzip-help"
                           "--enable-nls"
                           "--enable-ipv6")
     `(#:configure-flags
       (let ((gnutls (assoc-ref %build-inputs "gnutls")))
         `("--with-pkg-config"
           "--with-screen=ncurses"
           "--with-zlib"
           "--with-bzlib"
           ,(string-append "--with-gnutls=" gnutls)
           ;; "--with-socks5"    ; XXX TODO
           "--enable-widec"
           "--enable-ascii-ctypes"
           "--enable-local-docs"
           "--enable-htmlized-cfg"
           "--enable-gzip-help"
           "--enable-nls"
           "--enable-ipv6"))
       #:tests? #f  ; no check target
       #:phases (alist-replace
                 'install

M gnu/packages/mail.scm => gnu/packages/mail.scm +2 -2
@@ 302,7 302,7 @@ and corrections.  It is based on a Bayesian filter.")
(define-public offlineimap
  (package
    (name "offlineimap")
    (version "7.0.7")
    (version "7.0.8")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/OfflineIMAP/offlineimap/"


@@ 310,7 310,7 @@ and corrections.  It is based on a Bayesian filter.")
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "1719xnw0xah5knypd5vrpsxi337576q1r8axpziw8wa7zms7abl0"))))
                "0smxh5ag3cbn92kp49jq950j5m2pivs9kr04prpd1lw62hy7gnhr"))))
    (build-system python-build-system)
    (inputs `(("python2-pysqlite" ,python2-pysqlite)
              ("python2-six" ,python2-six)))

M gnu/packages/man.scm => gnu/packages/man.scm +2 -2
@@ 134,7 134,7 @@ the traditional flat-text whatis databases.")
(define-public man-pages
  (package
    (name "man-pages")
    (version "4.06")
    (version "4.08")
    (source (origin
              (method url-fetch)
              (uri


@@ 147,7 147,7 @@ the traditional flat-text whatis databases.")
                    "man-pages-" version ".tar.xz")))
              (sha256
               (base32
                "0vv056k9yyf05dqal9m2pq3pv9c8lnp7i5rjxvcnic6aq7vyrafb"))))
                "1d32ki8nkwd2xiln619jihqn7s15ydrg7386n4hxq530sys7svic"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (alist-delete 'configure %standard-phases)

M gnu/packages/maths.scm => gnu/packages/maths.scm +37 -0
@@ 14,6 14,7 @@
;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 483,6 484,42 @@ extremely large and complex data collections.")
    (license (license:x11-style
              "http://www.hdfgroup.org/ftp/HDF5/current/src/unpacked/COPYING"))))

(define-public hdf-eos5
  (package
    (name "hdf-eos5")
    (version "1.15")
    (source (origin
              (method url-fetch)
              (uri (string-append "ftp://edhs1.gsfc.nasa.gov\
/edhs/hdfeos5/latest_release/HDF-EOS5." version ".tar.Z"))
              (sha256
               (base32
                "1p83333nzzy8rn5chxlm0hrkjjnhh2w1ji8ac0f9q4xzg838i58i"))
              (patches (search-patches "hdf-eos5-build-shared.patch"
                                       "hdf-eos5-remove-gctp.patch"
                                       "hdf-eos5-fix-szip.patch"
                                       "hdf-eos5-fortrantests.patch"))))
    (native-inputs
     `(("gfortran" ,gfortran)))
    (build-system gnu-build-system)
    (inputs
     `(("hdf5" ,hdf5)
       ("zlib" ,zlib)
       ("gctp" ,gctp)))
    (arguments
     `(#:configure-flags '("--enable-install-include" "--enable-shared"
                           "CC=h5cc -Df2cFortran" "LIBS=-lgctp")
       #:parallel-tests? #f))
    (synopsis "HDF5-based data format for NASA's Earth Observing System")
    (description
     "HDF-EOS5 is a software library built on HDF5 to support the construction
of data structures used in NASA's Earth Observing System (Grid, Point and
Swath).")
    (home-page "http://www.hdfeos.org/software/library.php#HDF-EOS5")

    ;; Source files carry a permissive license header.
    (license (license:non-copyleft home-page))))

(define-public hdf5-parallel-openmpi
  (package (inherit hdf5)
    (name "hdf5-parallel-openmpi")

M gnu/packages/messaging.scm => gnu/packages/messaging.scm +56 -2
@@ 6,6 6,7 @@
;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 32,6 33,7 @@
  #:use-module (guix build-system glib-or-gtk)
  #:use-module (guix build-system python)
  #:use-module (gnu packages)
  #:use-module (gnu packages aidc)
  #:use-module (gnu packages autotools)
  #:use-module (gnu packages avahi)
  #:use-module (gnu packages check)


@@ 166,14 168,14 @@ identi.ca and status.net).")
(define-public hexchat
  (package
    (name "hexchat")
    (version "2.12.1")
    (version "2.12.2")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
                                  version ".tar.xz"))
              (sha256
               (base32
                "0svwz9ldrry1sn35jywgpacjj1cf3xl3k74ynwn8rjvxs73b00aj"))))
                "1xnclfbrgbkqndxygi5f27q00jd7yy54jbd1061jmhxa6wzpibbd"))))
    (build-system gnu-build-system)
    (native-inputs `(("pkg-config" ,pkg-config)
                     ("intltool" ,intltool)))


@@ 661,6 663,58 @@ protocols.")
instant messenger with audio and video chat capabilities.")
   (home-page "http://utox.org/")
   (license license:gpl3)))
 
(define-public qtox
  (package
    (name "qtox")
    (version "1.5.1")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "https://github.com/qTox/qTox/archive/v"
                           version ".tar.gz"))
       (sha256
        (base32 "0y15mc39x54k1kz36cw9412kl1p1p6nzlx97gagv4gg3vybfhbjv"))
       (file-name (string-append name "-" version ".tar.gz"))))
    (inputs
     `(("ffmpeg" ,ffmpeg)
       ("glib" ,glib)
       ("gtk+" ,gtk+-2)
       ("libsodium" ,libsodium)
       ("libtoxcore" ,libtoxcore)
       ("libvpx" ,libvpx)
       ("libxscrnsaver" ,libxscrnsaver)
       ("libx11" ,libx11)
       ("openal" ,openal)
       ("qrencode" ,qrencode)
       ("qt" ,qt)
       ("sqlcipher" ,sqlcipher)))
    (native-inputs
     `(("pkg-config" ,pkg-config)
       ("qmake" ,qt)))
    (build-system gnu-build-system)
    (arguments
     '(#:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'fix-reproducibility-issues
           (lambda _
             (substitute* "src/main.cpp"
               (("__DATE__") "\"\"")
               (("__TIME__") "\"\"")
               (("TIMESTAMP") "\"\""))
             #t))
         (replace 'configure
           (lambda* (#:key outputs #:allow-other-keys)
             (zero?
              (system* "qmake"
                       (string-append "PREFIX="
                                      (assoc-ref outputs "out")))))))))
    (home-page "https://qtox.github.io/")
    (synopsis "Tox chat client using Qt")
    (description "qTox is a Tox client that follows the Tox design
guidelines.  It provides an easy to use application that allows you to
connect with friends and family without anyone else listening in.")
    (license license:gpl3+)))

(define-public pybitmessage
  (package

M gnu/packages/music.scm => gnu/packages/music.scm +51 -5
@@ 1318,14 1318,14 @@ browser.")
(define-public drumstick
  (package
    (name "drumstick")
    (version "1.0.2")
    (version "1.1.0")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/drumstick/"
                                  version "/drumstick-" version ".tar.bz2"))
              (sha256
               (base32
                "0l47gy9yywrc860db5g3wdqg8yc8qdb2lqq6wvw1dfim5j0vbail"))))
                "13pkfqrav30bbcddgf1imd7jk6lpqbxkz1qv31718pdl446jq7df"))))
    (build-system cmake-build-system)
    (arguments
     `(#:tests? #f  ; no test target


@@ 1457,7 1457,7 @@ capabilities, custom envelopes, effects, etc.")
(define-public yoshimi
  (package
    (name "yoshimi")
    (version "1.3.8.2")
    (version "1.4.1")
    (source (origin
              (method url-fetch)
              (uri (string-append "mirror://sourceforge/yoshimi/"


@@ 1465,7 1465,7 @@ capabilities, custom envelopes, effects, etc.")
                                  "/yoshimi-" version ".tar.bz2"))
              (sha256
               (base32
                "0wl4ln6v1nkkx56kfah23chyrhga2vi93i82g0s200c4s4184xr8"))))
                "133sx42wb66g803pcrgdwph40wh94knvab3yfqkgm0001jv4v14y"))))
    (build-system cmake-build-system)
    (arguments
     `(#:tests? #f ; there are no tests


@@ 1485,7 1485,17 @@ capabilities, custom envelopes, effects, etc.")
              (("-msse -msse2 -mfpmath=sse") "")
              (("-march=(athlon64|core2)" flag)
               (string-append flag " -msse -msse2 -mfpmath=sse")))
            #t)))))
            #t))
         ;; Yoshimi tries to find ncurses with pkg-config, but our ncurses
         ;; package does not install .pc files.
         (add-after 'unpack 'find-ncurses
           (lambda _
             (substitute* "src/CMakeLists.txt"
               (("LIBNCURSES REQUIRED") "LIBNCURSES")
               (("NCURSES REQUIRED") "NCURSES")
               (("FATAL_ERROR \"libncurses") "STATUS \"libncurses")
               (("\\$\\{NCURSES_LIBRARIES\\}") "ncurses"))
             #t)))))
    (inputs
     `(("boost" ,boost)
       ("fftwf" ,fftwf)


@@ 1575,6 1585,42 @@ JACK for audio and ALSA sequencer for MIDI as multimedia infrastructures and
follows a traditional multi-track tape recorder control paradigm.")
    (license license:gpl2+)))

(define-public gxtuner
  (package
    (name "gxtuner")
    (version "2.3")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/brummer10/gxtuner/"
                                  "archive/v" version ".tar.gz"))
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "1abpxiydn4c9wssz6895hnad9ipkcy3rkgzbnanvwb46nm44x6if"))))
    (build-system gnu-build-system)
    (arguments
     `(#:make-flags
       (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
             (string-append "INCLUDE_L_DIR="
                            (assoc-ref %build-inputs "zita-resampler")
                            "/include/"))
       #:phases
       (modify-phases %standard-phases
         (delete 'configure))))
    (inputs
     `(("gtk+" ,gtk+-2)
       ("jack" ,jack-1)
       ("fftwf" ,fftwf)
       ("cairo" ,cairo)
       ("zita-resampler" ,zita-resampler)))
    (native-inputs
     `(("pkg-config" ,pkg-config)))
    (home-page "https://github.com/brummer10/gxtuner")
    (synopsis "Guitar tuner")
    (description "GXtuner is a simple guitar tuner for JACK with an
analogue-like user interface.")
    (license license:gpl2+)))

(define-public pianobar
  (package
    (name "pianobar")

M gnu/packages/ncdu.scm => gnu/packages/ncdu.scm +5 -5
@@ 27,14 27,14 @@
(define-public ncdu
  (package
    (name "ncdu")
    (version "1.11")
    (version "1.12")
    (source (origin
              (method url-fetch)
              (uri (string-append "http://dev.yorhel.nl/download/ncdu-"
              (uri (string-append "https://dev.yorhel.nl/download/ncdu-"
                                  version ".tar.gz"))
              (sha256
               (base32
                "0yxv87hpal05p6nii6rlnai5a8958689l9vz020w4qvlwiragbnh"))))
                "16j9fyw73y1lk05a35i4q9i66laklgsx41lz5rxfr8m28x3lw3l2"))))
    (build-system gnu-build-system)
    (inputs `(("ncurses" ,ncurses)))
    (synopsis "Ncurses based disk usage analyzer")


@@ 44,6 44,6 @@ to do with a simple SSH connection. ncdu aims to be fast, simple and easy to
use, and should be able to run in any minimal POSIX-like environment with
ncurses installed.")
    (license (x11-style
              (string-append "http://g.blicky.net/ncdu.git/plain/COPYING?id=v"
              (string-append "https://g.blicky.net/ncdu.git/plain/COPYING?id=v"
                             version)))
    (home-page "http://dev.yorhel.nl/ncdu")))
    (home-page "https://dev.yorhel.nl/ncdu")))

A gnu/packages/patches/clx-remove-demo.patch => gnu/packages/patches/clx-remove-demo.patch +27 -0
@@ 0,0 1,27 @@
--- a/clx.asd	2016-02-16 00:06:48.161596976 -0500
+++ b/clx.asd	2016-02-16 00:06:54.793774658 -0500
@@ -79,24 +79,6 @@
                (:file "xtest")
                (:file "screensaver")
                (:file "xinerama")))
-     (:module demo
-	      :default-component-class example-source-file
-	      :components
-	      ((:file "bezier")
-	       ;; KLUDGE: this requires "bezier" for proper operation,
-	       ;; but we don't declare that dependency here, because
-	       ;; asdf doesn't load example files anyway.
-	       (:file "beziertest")
-	       (:file "clclock")
-               (:file "clipboard")
-	       (:file "clx-demos")
-	       (:file "gl-test")
-	       ;; FIXME: compiling this generates 30-odd spurious code
-	       ;; deletion notes.  Find out why, and either fix or
-	       ;; workaround the problem.
-	       (:file "mandel")
-	       (:file "menu")
-	       (:file "zoid")))
      (:module test
 	      :default-component-class example-source-file
 	      :components

A gnu/packages/patches/hdf-eos5-build-shared.patch => gnu/packages/patches/hdf-eos5-build-shared.patch +31 -0
@@ 0,0 1,31 @@
Make shared library linking work.
---
 src/Makefile.in | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/src/Makefile.in b/src/Makefile.in
index 86880e5..24efffe 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -72,7 +72,7 @@ LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
 	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
 	$(AM_CFLAGS) $(CFLAGS) -DH5_USE_16_API
 CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+LINK = HDF5_USE_SHLIB=yes $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 SOURCES = $(libhe5_hdfeos_la_SOURCES)
 DIST_SOURCES = $(libhe5_hdfeos_la_SOURCES)
@@ -124,9 +124,6 @@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
 INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 
-# Set LDFLAGS to allow the HDF-EOS library to use extern variables from
-# HDF5
-LDFLAGS = -Wl,-single_module
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
 LIBTOOL = @LIBTOOL@
-- 
2.10.0


A gnu/packages/patches/hdf-eos5-fix-szip.patch => gnu/packages/patches/hdf-eos5-fix-szip.patch +30 -0
@@ 0,0 1,30 @@
Ill-placed #endif causes missing symbol errors when compiling without
szip.  Reported to upstream maintainer.
---
 src/EHapi.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/EHapi.c b/src/EHapi.c
index 46a9b5c..208f447 100755
--- a/src/EHapi.c
+++ b/src/EHapi.c
@@ -11379,6 +11379,7 @@ int HE5_szip_can_encode(void )
   return(-1);
 }
 
+#endif /* H5_HAVE_FILTER_SZIP */
 
 
 /*----------------------------------------------------------------------------|
@@ -11509,8 +11510,6 @@ HE5_EHHEisHE5(char *filename)
     }
 }
 
-#endif /* H5_HAVE_FILTER_SZIP */
-
 
 #ifndef __cplusplus
 
-- 
2.10.0


A gnu/packages/patches/hdf-eos5-fortrantests.patch => gnu/packages/patches/hdf-eos5-fortrantests.patch +156 -0
@@ 0,0 1,156 @@
Fix fortran line length/indentation issues in Fortran test programs.
Reported to upstream maintainer.

diff --git a/samples/he5_gd_writedataF_32.f b/samples/he5_gd_writedataF_32.f
index 515edf9..9c86299 100755
--- a/samples/he5_gd_writedataF_32.f
+++ b/samples/he5_gd_writedataF_32.f
@@ -77,26 +77,26 @@ c           ------------------------------
 
 		attr4 = "ABCDEFGH"
 		count(1) = 8
-		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR"
+     &               ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_gdwrattr():  ',status
 
 		attr4 = "111"
 		count(1) = 3
-		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1"
+     &               ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_gdwrgattr():  ',status
 
 		attr4 = "222222"
 		count(1) = 6
-		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2"
+     &               ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_ehwrglatt():  ',status
 
 		attr5 = "abcdefgh111111111111"
 		count(1) = 20
-		status = he5_gdwrlattr(gdid,"Vegetation","LocalAttribute_0",
-	1	HE5T_NATIVE_CHAR,count,attr5)
+		status = he5_gdwrlattr(gdid,"Vegetation"
+     &               ,"LocalAttribute_0",HE5T_NATIVE_CHAR,count,attr5)
 	write(*,*) 'Status returned by he5_gdwrlattr():  ',status
 
 		 endif
diff --git a/samples/he5_gd_writedataF_64.f b/samples/he5_gd_writedataF_64.f
index eff04f5..62a7398 100755
--- a/samples/he5_gd_writedataF_64.f
+++ b/samples/he5_gd_writedataF_64.f
@@ -77,26 +77,26 @@ c           ------------------------------
 
 		attr4 = "ABCDEFGH"
 		count(1) = 8
-		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+		status = he5_gdwrattr(gdid,"GLOBAL_CHAR_ATTR"
+     &               ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_gdwrattr():  ',status
 
 		attr4 = "111"
 		count(1) = 3
-		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+		status = he5_gdwrgattr(gdid,"GLOBAL_CHAR_ATTR_1"
+     &               ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_gdwrgattr():  ',status
 
 		attr4 = "222222"
 		count(1) = 6
-		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+		status = he5_ehwrglatt(gdfid,"GLOBAL_CHAR_ATTR_2"
+     &               ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_ehwrglatt():  ',status
 
 		attr5 = "abcdefgh111111111111"
 		count(1) = 20
-		status = he5_gdwrlattr(gdid,"Vegetation","LocalAttribute_0",
-	1	HE5T_NATIVE_CHAR,count,attr5)
+		status = he5_gdwrlattr(gdid,"Vegetation"
+     &               ,"LocalAttribute_0",HE5T_NATIVE_CHAR,count,attr5)
 	write(*,*) 'Status returned by he5_gdwrlattr():  ',status
 
 		 endif
diff --git a/samples/he5_sw_writedataF_32.f b/samples/he5_sw_writedataF_32.f
index 7abab9b..fedd49a 100755
--- a/samples/he5_sw_writedataF_32.f
+++ b/samples/he5_sw_writedataF_32.f
@@ -173,20 +173,21 @@ c     Write Global Attribute
 c     ----------------------
 			attr4 = "ABCDEFGH"
 			count(1) = 8
-			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR"
+     &                       ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_swwrattr():  ',status
 
 			attr4 = "111"
 			count(1) = 3
-			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1"
+     &                       ,HE5T_NATIVE_CHAR,count,attr4)
 	write(*,*) 'Status returned by he5_swwrgattr():  ',status
 
 			attr4 = "222222"
 			count(1) = 6
-			status = he5_ehwrglatt(swfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+			status = he5_ehwrglatt(swfid
+     &                       ,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR
+     &                       ,count,attr4)
 	write(*,*) 'Status returned by he5_ehwrglatt():  ',status
 
 c     Write Local Attribute
diff --git a/samples/he5_sw_writedataF_64.f b/samples/he5_sw_writedataF_64.f
index 79e34bd..e5d74cb 100755
--- a/samples/he5_sw_writedataF_64.f
+++ b/samples/he5_sw_writedataF_64.f
@@ -162,25 +162,27 @@ c     Write Global Attribute
 c     ----------------------
 			attr4 = "ABCDEFGH"
 			count(1) = 8
-			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+			status = he5_swwrattr(swid,"GLOBAL_CHAR_ATTR"
+     &                       ,HE5T_NATIVE_CHAR,count,attr4)
 
 			attr4 = "111"
 			count(1) = 3		
-			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+			status = he5_swwrgattr(swid,"GLOBAL_CHAR_ATTR_1"
+     &                       ,HE5T_NATIVE_CHAR,count,attr4)
 
 			attr4 = "222222"
 			count(1) = 6
-			status = he5_ehwrglatt(swfid,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR,
-	1	count,attr4)
+			status = he5_ehwrglatt(swfid
+     &                       ,"GLOBAL_CHAR_ATTR_2",HE5T_NATIVE_CHAR
+     &                       ,count,attr4)
 
 c     Write Local Attribute
 c     ---------------------
 			attr5 = "abababababababababab"
 			count(1) = 20
-			status = he5_swwrlattr(swid,"Density","LocalAttribute_0",
-	1	HE5T_NATIVE_CHAR,count,attr5)
+			status = he5_swwrlattr(swid,"Density"
+     &                       ,"LocalAttribute_0",HE5T_NATIVE_CHAR,count
+     &                       ,attr5)
 
 	      
 		 endif
-- 
2.10.0


A gnu/packages/patches/hdf-eos5-remove-gctp.patch => gnu/packages/patches/hdf-eos5-remove-gctp.patch +55 -0
@@ 0,0 1,55 @@
Don't build/install/use bundled gctp code/headers.

* cproj.h, proj.h: part of GCTP, therefore already present.
* HE5_config.h, tutils.h: used for library building and testing.

diff --git a/Makefile.in b/Makefile.in
index f160d0d..367b537 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -206,7 +206,7 @@ LIBGCTP = $(top_builddir)/gctp/src/libGctp.la
 @TESTDRIVERS_CONDITIONAL_TRUE@TESTDRIVERS = testdrivers
 @INSTALL_INCLUDE_CONDITIONAL_FALSE@INCLUDE = 
 @INSTALL_INCLUDE_CONDITIONAL_TRUE@INCLUDE = include
-SUBDIRS = gctp src $(INCLUDE) samples $(TESTDRIVERS)
+SUBDIRS = src $(INCLUDE) samples $(TESTDRIVERS)
 all: all-recursive
 
 .SUFFIXES:
diff --git a/samples/Makefile.in b/samples/Makefile.in
index 59331dd..64fda89 100644
--- a/samples/Makefile.in
+++ b/samples/Makefile.in
@@ -206,7 +206,6 @@ he5_gd_datainfo_SOURCES = he5_gd_datainfo.c
 he5_gd_datainfo_OBJECTS = he5_gd_datainfo.$(OBJEXT)
 he5_gd_datainfo_LDADD = $(LDADD)
 am__DEPENDENCIES_1 = $(top_builddir)/src/libhe5_hdfeos.la
-am__DEPENDENCIES_2 = $(top_builddir)/gctp/src/libGctp.la
 he5_gd_datainfo_DEPENDENCIES = $(am__DEPENDENCIES_1) \
 	$(am__DEPENDENCIES_2)
 he5_gd_defexternalfld_SOURCES = he5_gd_defexternalfld.c
@@ -1093,7 +1092,7 @@ sharedstatedir = @sharedstatedir@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
 LIBHDFEOS5 = $(top_builddir)/src/libhe5_hdfeos.la
-LIBGCTP = $(top_builddir)/gctp/src/libGctp.la
+LIBGCTP =
 
 # Boilerplate definitions file
 
diff --git a/include/Makefile.in b/include/Makefile.in
index a572128..64dabb5 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -190,8 +190,7 @@ LIBGCTP = $(top_builddir)/gctp/src/libGctp.la
 # Boilerplate include
 
 # Headers to install
-include_HEADERS = HE5_GctpFunc.h HE5_HdfEosDef.h HE5_config.h cproj.h ease.h \
-                  isin.h proj.h tutils.h cfortHdf.h
+include_HEADERS = HE5_GctpFunc.h HE5_HdfEosDef.h ease.h isin.h cfortHdf.h
 
 all: HE5_config.h
 	$(MAKE) $(AM_MAKEFLAGS) all-am
-- 
2.10.0

D gnu/packages/patches/icecat-CVE-2016-2818-pt1.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt1.patch +0 -62
@@ 1,62 0,0 @@
  changeset:   312039:4290826b078c
  user:        Timothy Nikkel <tnikkel@gmail.com>
  Date:        Fri May 13 06:09:38 2016 +0200
  summary:     Bug 1261230. r=mats, a=ritu

diff -r 45a59425b498 -r 4290826b078c layout/generic/nsSubDocumentFrame.cpp
--- a/layout/generic/nsSubDocumentFrame.cpp	Tue May 10 14:12:20 2016 +0200
+++ b/layout/generic/nsSubDocumentFrame.cpp	Fri May 13 06:09:38 2016 +0200
@@ -132,6 +132,7 @@
     nsCOMPtr<nsIDocument> oldContainerDoc;
     nsView* detachedViews =
       frameloader->GetDetachedSubdocView(getter_AddRefs(oldContainerDoc));
+    frameloader->SetDetachedSubdocView(nullptr, nullptr);
     if (detachedViews) {
       if (oldContainerDoc == aContent->OwnerDoc()) {
         // Restore stashed presentation.
@@ -142,7 +143,6 @@
         frameloader->Hide();
       }
     }
-    frameloader->SetDetachedSubdocView(nullptr, nullptr);
   }
 
   nsContentUtils::AddScriptRunner(new AsyncFrameInit(this));
@@ -936,13 +936,16 @@
     if (!mPresShell->IsDestroying()) {
       mPresShell->FlushPendingNotifications(Flush_Frames);
     }
+
+    // Either the frame has been constructed by now, or it never will be,
+    // either way we want to clear the stashed views.
+    mFrameLoader->SetDetachedSubdocView(nullptr, nullptr);
+
     nsSubDocumentFrame* frame = do_QueryFrame(mFrameElement->GetPrimaryFrame());
     if ((!frame && mHideViewerIfFrameless) ||
         mPresShell->IsDestroying()) {
       // Either the frame element has no nsIFrame or the presshell is being
-      // destroyed. Hide the nsFrameLoader, which destroys the presentation,
-      // and clear our references to the stashed presentation.
-      mFrameLoader->SetDetachedSubdocView(nullptr, nullptr);
+      // destroyed. Hide the nsFrameLoader, which destroys the presentation.
       mFrameLoader->Hide();
     }
     return NS_OK;
@@ -968,7 +971,7 @@
   // Detach the subdocument's views and stash them in the frame loader.
   // We can then reattach them if we're being reframed (for example if
   // the frame has been made position:fixed).
-  nsFrameLoader* frameloader = FrameLoader();
+  RefPtr<nsFrameLoader> frameloader = FrameLoader();
   if (frameloader) {
     nsView* detachedViews = ::BeginSwapDocShellsForViews(mInnerView->GetFirstChild());
     frameloader->SetDetachedSubdocView(detachedViews, mContent->OwnerDoc());
@@ -977,7 +980,7 @@
     // safely determine whether the frame is being reframed or destroyed.
     nsContentUtils::AddScriptRunner(
       new nsHideViewer(mContent,
-                       mFrameLoader,
+                       frameloader,
                        PresContext()->PresShell(),
                        (mDidCreateDoc || mCallingShow)));
   }

D gnu/packages/patches/icecat-CVE-2016-2818-pt2.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt2.patch +0 -29
@@ 1,29 0,0 @@
  changeset:   312044:09418166fd77
  user:        Jon Coppeard <jcoppeard@mozilla.com>
  Date:        Wed May 11 10:14:45 2016 +0100
  summary:     Bug 1264575 - Add missing pre-barrier in Ion r=jandem a=ritu

diff -r 9cc65cca1f71 -r 09418166fd77 js/src/jit-test/tests/self-hosting/bug1264575.js
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/js/src/jit-test/tests/self-hosting/bug1264575.js	Wed May 11 10:14:45 2016 +0100
@@ -0,0 +1,7 @@
+function f(x, [y]) {}
+f(0, []);
+// jsfunfuzz-generated
+let i = 0;
+for (var z of [0, 0, 0]) {
+    verifyprebarriers();
+}
diff -r 9cc65cca1f71 -r 09418166fd77 js/src/jit/MCallOptimize.cpp
--- a/js/src/jit/MCallOptimize.cpp	Mon May 16 15:11:24 2016 -0400
+++ b/js/src/jit/MCallOptimize.cpp	Wed May 11 10:14:45 2016 +0100
@@ -2263,7 +2263,8 @@
 
     callInfo.setImplicitlyUsedUnchecked();
 
-    MStoreFixedSlot* store = MStoreFixedSlot::New(alloc(), callInfo.getArg(0), slot, callInfo.getArg(2));
+    MStoreFixedSlot* store =
+        MStoreFixedSlot::NewBarriered(alloc(), callInfo.getArg(0), slot, callInfo.getArg(2));
     current->add(store);
     current->push(store);
 

D gnu/packages/patches/icecat-CVE-2016-2818-pt3.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt3.patch +0 -18
@@ 1,18 0,0 @@
  changeset:   312051:9ec3d076fbee
  parents:     312049:e0a272d5e162 
  user:        Eric Faust <efaustbmo@gmail.com>
  Date:        Wed May 04 15:54:43 2016 -0700
  summary:     Bug 1269729 - Handle another OOM case on ARM. (r=jolesen) a=ritu

diff -r e0a272d5e162 -r 9ec3d076fbee js/src/jit/arm/CodeGenerator-arm.cpp
--- a/js/src/jit/arm/CodeGenerator-arm.cpp	Tue May 17 08:26:37 2016 -0400
+++ b/js/src/jit/arm/CodeGenerator-arm.cpp	Wed May 04 15:54:43 2016 -0700
@@ -1116,7 +1116,7 @@
     for (int32_t i = 0; i < cases; i++) {
         CodeLabel cl;
         masm.writeCodePointer(cl.dest());
-        ool->addCodeLabel(cl);
+        masm.propagateOOM(ool->addCodeLabel(cl));
     }
     addOutOfLineCode(ool, mir);
 }

D gnu/packages/patches/icecat-CVE-2016-2818-pt4.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt4.patch +0 -61
@@ 1,61 0,0 @@
  changeset:   312055:b74f1ab939d2
  user:        Olli Pettay <Olli.Pettay@helsinki.fi>
  Date:        Mon May 16 21:42:24 2016 +0300
  summary:     Bug 1273202, make sure to not keep objects alive too long because of some useless event dispatching, r=jwatt a=ritu

diff -r 072992bf176d -r b74f1ab939d2 dom/html/HTMLInputElement.cpp
--- a/dom/html/HTMLInputElement.cpp	Sun May 15 17:03:06 2016 +0300
+++ b/dom/html/HTMLInputElement.cpp	Mon May 16 21:42:24 2016 +0300
@@ -1168,7 +1168,7 @@
     mFileList->Disconnect();
   }
   if (mNumberControlSpinnerIsSpinning) {
-    StopNumberControlSpinnerSpin();
+    StopNumberControlSpinnerSpin(eDisallowDispatchingEvents);
   }
   DestroyImageLoadingContent();
   FreeData();
@@ -3721,7 +3721,7 @@
 }
 
 void
-HTMLInputElement::StopNumberControlSpinnerSpin()
+HTMLInputElement::StopNumberControlSpinnerSpin(SpinnerStopState aState)
 {
   if (mNumberControlSpinnerIsSpinning) {
     if (nsIPresShell::GetCapturingContent() == this) {
@@ -3732,11 +3732,16 @@
 
     mNumberControlSpinnerIsSpinning = false;
 
-    FireChangeEventIfNeeded();
+    if (aState == eAllowDispatchingEvents) {
+      FireChangeEventIfNeeded();
+    }
 
     nsNumberControlFrame* numberControlFrame =
       do_QueryFrame(GetPrimaryFrame());
     if (numberControlFrame) {
+      MOZ_ASSERT(aState == eAllowDispatchingEvents,
+                 "Shouldn't have primary frame for the element when we're not "
+                 "allowed to dispatch events to it anymore.");
       numberControlFrame->SpinnerStateChanged();
     }
   }
diff -r 072992bf176d -r b74f1ab939d2 dom/html/HTMLInputElement.h
--- a/dom/html/HTMLInputElement.h	Sun May 15 17:03:06 2016 +0300
+++ b/dom/html/HTMLInputElement.h	Mon May 16 21:42:24 2016 +0300
@@ -721,7 +721,12 @@
   HTMLInputElement* GetOwnerNumberControl();
 
   void StartNumberControlSpinnerSpin();
-  void StopNumberControlSpinnerSpin();
+  enum SpinnerStopState {
+    eAllowDispatchingEvents,
+    eDisallowDispatchingEvents
+  };
+  void StopNumberControlSpinnerSpin(SpinnerStopState aState =
+                                      eAllowDispatchingEvents);
   void StepNumberControlForUserEvent(int32_t aDirection);
 
   /**

D gnu/packages/patches/icecat-CVE-2016-2818-pt5.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt5.patch +0 -266
@@ 1,266 0,0 @@
  changeset:   312063:88bea96c802a
  user:        Andrea Marchesini <amarchesini@mozilla.com>
  Date:        Tue May 10 10:52:19 2016 +0200
  summary:     Bug 1267130 - Improve the URL segment calculation, r=valentin a=ritu

diff -r 28dcecced055 -r 88bea96c802a netwerk/base/nsStandardURL.cpp
--- a/netwerk/base/nsStandardURL.cpp	Wed May 18 11:55:29 2016 +1200
+++ b/netwerk/base/nsStandardURL.cpp	Tue May 10 10:52:19 2016 +0200
@@ -475,19 +475,28 @@
 }
 
 uint32_t
-nsStandardURL::AppendSegmentToBuf(char *buf, uint32_t i, const char *str, URLSegment &seg, const nsCString *escapedStr, bool useEscaped)
+nsStandardURL::AppendSegmentToBuf(char *buf, uint32_t i, const char *str,
+                                  const URLSegment &segInput, URLSegment &segOutput,
+                                  const nsCString *escapedStr,
+                                  bool useEscaped, int32_t *diff)
 {
-    if (seg.mLen > 0) {
+    MOZ_ASSERT(segInput.mLen == segOutput.mLen);
+
+    if (diff) *diff = 0;
+
+    if (segInput.mLen > 0) {
         if (useEscaped) {
-            seg.mLen = escapedStr->Length();
-            memcpy(buf + i, escapedStr->get(), seg.mLen);
+            MOZ_ASSERT(diff);
+            segOutput.mLen = escapedStr->Length();
+            *diff = segOutput.mLen - segInput.mLen;
+            memcpy(buf + i, escapedStr->get(), segOutput.mLen);
+        } else {
+            memcpy(buf + i, str + segInput.mPos, segInput.mLen);
         }
-        else
-            memcpy(buf + i, str + seg.mPos, seg.mLen);
-        seg.mPos = i;
-        i += seg.mLen;
+        segOutput.mPos = i;
+        i += segOutput.mLen;
     } else {
-        seg.mPos = i;
+        segOutput.mPos = i;
     }
     return i;
 }
@@ -598,6 +607,20 @@
         }
     }
 
+    // We must take a copy of every single segment because they are pointing to
+    // the |spec| while we are changing their value, in case we must use
+    // encoded strings.
+    URLSegment username(mUsername);
+    URLSegment password(mPassword);
+    URLSegment host(mHost);
+    URLSegment path(mPath);
+    URLSegment filepath(mFilepath);
+    URLSegment directory(mDirectory);
+    URLSegment basename(mBasename);
+    URLSegment extension(mExtension);
+    URLSegment query(mQuery);
+    URLSegment ref(mRef);
+
     //
     // generate the normalized URL string
     //
@@ -607,9 +630,10 @@
     char *buf;
     mSpec.BeginWriting(buf);
     uint32_t i = 0;
+    int32_t diff = 0;
 
     if (mScheme.mLen > 0) {
-        i = AppendSegmentToBuf(buf, i, spec, mScheme);
+        i = AppendSegmentToBuf(buf, i, spec, mScheme, mScheme);
         net_ToLowerCase(buf + mScheme.mPos, mScheme.mLen);
         i = AppendToBuf(buf, i, "://", 3);
     }
@@ -619,15 +643,22 @@
 
     // append authority
     if (mUsername.mLen > 0) {
-        i = AppendSegmentToBuf(buf, i, spec, mUsername, &encUsername, useEncUsername);
-        if (mPassword.mLen >= 0) {
+        i = AppendSegmentToBuf(buf, i, spec, username, mUsername,
+                               &encUsername, useEncUsername, &diff);
+        ShiftFromPassword(diff);
+        if (password.mLen >= 0) {
             buf[i++] = ':';
-            i = AppendSegmentToBuf(buf, i, spec, mPassword, &encPassword, useEncPassword);
+            i = AppendSegmentToBuf(buf, i, spec, password, mPassword,
+                                   &encPassword, useEncPassword, &diff);
+            ShiftFromHost(diff);
         }
         buf[i++] = '@';
     }
-    if (mHost.mLen > 0) {
-        i = AppendSegmentToBuf(buf, i, spec, mHost, &encHost, useEncHost);
+    if (host.mLen > 0) {
+        i = AppendSegmentToBuf(buf, i, spec, host, mHost, &encHost, useEncHost,
+                               &diff);
+        ShiftFromPath(diff);
+
         net_ToLowerCase(buf + mHost.mPos, mHost.mLen);
         MOZ_ASSERT(mPort >= -1, "Invalid negative mPort");
         if (mPort != -1 && mPort != mDefaultPort) {
@@ -652,21 +683,23 @@
     }
     else {
         uint32_t leadingSlash = 0;
-        if (spec[mPath.mPos] != '/') {
+        if (spec[path.mPos] != '/') {
             LOG(("adding leading slash to path\n"));
             leadingSlash = 1;
             buf[i++] = '/';
             // basename must exist, even if empty (bugs 113508, 429347)
             if (mBasename.mLen == -1) {
-                mBasename.mPos = i;
-                mBasename.mLen = 0;
+                mBasename.mPos = basename.mPos = i;
+                mBasename.mLen = basename.mLen = 0;
             }
         }
 
         // record corrected (file)path starting position
         mPath.mPos = mFilepath.mPos = i - leadingSlash;
 
-        i = AppendSegmentToBuf(buf, i, spec, mDirectory, &encDirectory, useEncDirectory);
+        i = AppendSegmentToBuf(buf, i, spec, directory, mDirectory,
+                               &encDirectory, useEncDirectory, &diff);
+        ShiftFromBasename(diff);
 
         // the directory must end with a '/'
         if (buf[i-1] != '/') {
@@ -674,7 +707,9 @@
             mDirectory.mLen++;
         }
 
-        i = AppendSegmentToBuf(buf, i, spec, mBasename, &encBasename, useEncBasename);
+        i = AppendSegmentToBuf(buf, i, spec, basename, mBasename,
+                               &encBasename, useEncBasename, &diff);
+        ShiftFromExtension(diff);
 
         // make corrections to directory segment if leadingSlash
         if (leadingSlash) {
@@ -687,18 +722,24 @@
 
         if (mExtension.mLen >= 0) {
             buf[i++] = '.';
-            i = AppendSegmentToBuf(buf, i, spec, mExtension, &encExtension, useEncExtension);
+            i = AppendSegmentToBuf(buf, i, spec, extension, mExtension,
+                                   &encExtension, useEncExtension, &diff);
+            ShiftFromQuery(diff);
         }
         // calculate corrected filepath length
         mFilepath.mLen = i - mFilepath.mPos;
 
         if (mQuery.mLen >= 0) {
             buf[i++] = '?';
-            i = AppendSegmentToBuf(buf, i, spec, mQuery, &encQuery, useEncQuery);
+            i = AppendSegmentToBuf(buf, i, spec, query, mQuery,
+                                   &encQuery, useEncQuery,
+                                   &diff);
+            ShiftFromRef(diff);
         }
         if (mRef.mLen >= 0) {
             buf[i++] = '#';
-            i = AppendSegmentToBuf(buf, i, spec, mRef, &encRef, useEncRef);
+            i = AppendSegmentToBuf(buf, i, spec, ref, mRef, &encRef, useEncRef,
+                                   &diff);
         }
         // calculate corrected path length
         mPath.mLen = i - mPath.mPos;
@@ -953,6 +994,39 @@
 #undef GOT_PREF
 }
 
+#define SHIFT_FROM(name, what)                    \
+void                                              \
+nsStandardURL::name(int32_t diff)                 \
+{                                                 \
+    if (!diff) return;                            \
+    if (what.mLen >= 0) {                         \
+        CheckedInt<int32_t> pos = what.mPos;      \
+        pos += diff;                              \
+        MOZ_ASSERT(pos.isValid());                \
+        what.mPos = pos.value();                  \
+    }
+
+#define SHIFT_FROM_NEXT(name, what, next)         \
+    SHIFT_FROM(name, what)                        \
+    next(diff);                                   \
+}
+
+#define SHIFT_FROM_LAST(name, what)               \
+    SHIFT_FROM(name, what)                        \
+}
+
+SHIFT_FROM_NEXT(ShiftFromAuthority, mAuthority, ShiftFromUsername)
+SHIFT_FROM_NEXT(ShiftFromUsername, mUsername, ShiftFromPassword)
+SHIFT_FROM_NEXT(ShiftFromPassword, mPassword, ShiftFromHost)
+SHIFT_FROM_NEXT(ShiftFromHost, mHost, ShiftFromPath)
+SHIFT_FROM_NEXT(ShiftFromPath, mPath, ShiftFromFilepath)
+SHIFT_FROM_NEXT(ShiftFromFilepath, mFilepath, ShiftFromDirectory)
+SHIFT_FROM_NEXT(ShiftFromDirectory, mDirectory, ShiftFromBasename)
+SHIFT_FROM_NEXT(ShiftFromBasename, mBasename, ShiftFromExtension)
+SHIFT_FROM_NEXT(ShiftFromExtension, mExtension, ShiftFromQuery)
+SHIFT_FROM_NEXT(ShiftFromQuery, mQuery, ShiftFromRef)
+SHIFT_FROM_LAST(ShiftFromRef, mRef)
+
 //----------------------------------------------------------------------------
 // nsStandardURL::nsISupports
 //----------------------------------------------------------------------------
diff -r 28dcecced055 -r 88bea96c802a netwerk/base/nsStandardURL.h
--- a/netwerk/base/nsStandardURL.h	Wed May 18 11:55:29 2016 +1200
+++ b/netwerk/base/nsStandardURL.h	Tue May 10 10:52:19 2016 +0200
@@ -77,6 +77,7 @@
 
         URLSegment() : mPos(0), mLen(-1) {}
         URLSegment(uint32_t pos, int32_t len) : mPos(pos), mLen(len) {}
+        URLSegment(const URLSegment& aCopy) : mPos(aCopy.mPos), mLen(aCopy.mLen) {}
         void Reset() { mPos = 0; mLen = -1; }
         // Merge another segment following this one to it if they're contiguous
         // Assumes we have something like "foo;bar" where this object is 'foo' and right
@@ -177,7 +178,10 @@
     bool     NormalizeIDN(const nsCSubstring &host, nsCString &result);
     void     CoalescePath(netCoalesceFlags coalesceFlag, char *path);
 
-    uint32_t AppendSegmentToBuf(char *, uint32_t, const char *, URLSegment &, const nsCString *esc=nullptr, bool useEsc = false);
+    uint32_t AppendSegmentToBuf(char *, uint32_t, const char *,
+                                const URLSegment &input, URLSegment &output,
+                                const nsCString *esc=nullptr,
+                                bool useEsc = false, int32_t* diff = nullptr);
     uint32_t AppendToBuf(char *, uint32_t, const char *, uint32_t);
 
     nsresult BuildNormalizedSpec(const char *spec);
@@ -216,17 +220,17 @@
     const nsDependentCSubstring Ref()       { return Segment(mRef); }
 
     // shift the URLSegments to the right by diff
-    void ShiftFromAuthority(int32_t diff) { mAuthority.mPos += diff; ShiftFromUsername(diff); }
-    void ShiftFromUsername(int32_t diff)  { mUsername.mPos += diff; ShiftFromPassword(diff); }
-    void ShiftFromPassword(int32_t diff)  { mPassword.mPos += diff; ShiftFromHost(diff); }
-    void ShiftFromHost(int32_t diff)      { mHost.mPos += diff; ShiftFromPath(diff); }
-    void ShiftFromPath(int32_t diff)      { mPath.mPos += diff; ShiftFromFilepath(diff); }
-    void ShiftFromFilepath(int32_t diff)  { mFilepath.mPos += diff; ShiftFromDirectory(diff); }
-    void ShiftFromDirectory(int32_t diff) { mDirectory.mPos += diff; ShiftFromBasename(diff); }
-    void ShiftFromBasename(int32_t diff)  { mBasename.mPos += diff; ShiftFromExtension(diff); }
-    void ShiftFromExtension(int32_t diff) { mExtension.mPos += diff; ShiftFromQuery(diff); }
-    void ShiftFromQuery(int32_t diff)     { mQuery.mPos += diff; ShiftFromRef(diff); }
-    void ShiftFromRef(int32_t diff)       { mRef.mPos += diff; }
+    void ShiftFromAuthority(int32_t diff);
+    void ShiftFromUsername(int32_t diff);
+    void ShiftFromPassword(int32_t diff);
+    void ShiftFromHost(int32_t diff);
+    void ShiftFromPath(int32_t diff);
+    void ShiftFromFilepath(int32_t diff);
+    void ShiftFromDirectory(int32_t diff);
+    void ShiftFromBasename(int32_t diff);
+    void ShiftFromExtension(int32_t diff);
+    void ShiftFromQuery(int32_t diff);
+    void ShiftFromRef(int32_t diff);
 
     // fastload helper functions
     nsresult ReadSegment(nsIBinaryInputStream *, URLSegment &);

D gnu/packages/patches/icecat-CVE-2016-2818-pt6.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt6.patch +0 -17
@@ 1,17 0,0 @@
  changeset:   312067:380ddd689680
  user:        Timothy Nikkel <tnikkel@gmail.com>
  Date:        Tue May 10 22:58:26 2016 -0500
  summary:     Bug 1261752. Part 1. r=mats a=ritu

diff -r 02df988a56ae -r 380ddd689680 view/nsViewManager.cpp
--- a/view/nsViewManager.cpp	Thu May 26 10:06:15 2016 -0700
+++ b/view/nsViewManager.cpp	Tue May 10 22:58:26 2016 -0500
@@ -416,7 +416,7 @@
   if (aWidget->NeedsPaint()) {
     // If an ancestor widget was hidden and then shown, we could
     // have a delayed resize to handle.
-    for (nsViewManager *vm = this; vm;
+    for (RefPtr<nsViewManager> vm = this; vm;
          vm = vm->mRootView->GetParent()
            ? vm->mRootView->GetParent()->GetViewManager()
            : nullptr) {

D gnu/packages/patches/icecat-CVE-2016-2818-pt7.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt7.patch +0 -33
@@ 1,33 0,0 @@
  changeset:   312068:73cc9a2d8fc1
  user:        Timothy Nikkel <tnikkel@gmail.com>
  Date:        Tue May 10 22:58:47 2016 -0500
  summary:     Bug 1261752. Part 2. r=mats a=ritu

diff -r 380ddd689680 -r 73cc9a2d8fc1 view/nsViewManager.cpp
--- a/view/nsViewManager.cpp	Tue May 10 22:58:26 2016 -0500
+++ b/view/nsViewManager.cpp	Tue May 10 22:58:47 2016 -0500
@@ -372,7 +372,7 @@
     }
   }
   if (rootShell->GetViewManager() != this) {
-    return; // 'this' might have been destroyed
+    return; // presentation might have been torn down
   }
   if (aFlushDirtyRegion) {
     nsAutoScriptBlocker scriptBlocker;
@@ -1069,6 +1069,7 @@
   if (mPresShell) {
     mPresShell->GetPresContext()->RefreshDriver()->RevokeViewManagerFlush();
 
+    RefPtr<nsViewManager> strongThis(this);
     CallWillPaintOnObservers();
 
     ProcessPendingUpdatesForView(mRootView, true);
@@ -1085,6 +1086,7 @@
 
   if (mHasPendingWidgetGeometryChanges) {
     mHasPendingWidgetGeometryChanges = false;
+    RefPtr<nsViewManager> strongThis(this);
     ProcessPendingUpdatesForView(mRootView, false);
   }
 }

D gnu/packages/patches/icecat-CVE-2016-2818-pt8.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt8.patch +0 -267
@@ 1,267 0,0 @@
  changeset:   312069:3c2bd9158ad3
  user:        Timothy Nikkel <tnikkel@gmail.com>
  Date:        Tue May 10 22:58:47 2016 -0500
  summary:     Bug 1261752. Part 3. r=mats a=ritu

diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 layout/forms/nsComboboxControlFrame.cpp
--- a/layout/forms/nsComboboxControlFrame.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/layout/forms/nsComboboxControlFrame.cpp	Tue May 10 22:58:47 2016 -0500
@@ -1417,7 +1417,11 @@
     // The popup's visibility doesn't update until the minimize animation has
     // finished, so call UpdateWidgetGeometry to update it right away.
     nsViewManager* viewManager = mDropdownFrame->GetView()->GetViewManager();
-    viewManager->UpdateWidgetGeometry();
+    viewManager->UpdateWidgetGeometry(); // might destroy us
+  }
+
+  if (!weakFrame.IsAlive()) {
+    return consume;
   }
 
   return consume;
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 view/nsViewManager.cpp
--- a/view/nsViewManager.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/view/nsViewManager.cpp	Tue May 10 22:58:47 2016 -0500
@@ -670,15 +670,16 @@
 
 void nsViewManager::WillPaintWindow(nsIWidget* aWidget)
 {
-  if (aWidget) {
-    nsView* view = nsView::GetViewFor(aWidget);
-    LayerManager *manager = aWidget->GetLayerManager();
+  RefPtr<nsIWidget> widget(aWidget);
+  if (widget) {
+    nsView* view = nsView::GetViewFor(widget);
+    LayerManager* manager = widget->GetLayerManager();
     if (view &&
         (view->ForcedRepaint() || !manager->NeedsWidgetInvalidation())) {
       ProcessPendingUpdates();
       // Re-get the view pointer here since the ProcessPendingUpdates might have
       // destroyed it during CallWillPaintOnObservers.
-      view = nsView::GetViewFor(aWidget);
+      view = nsView::GetViewFor(widget);
       if (view) {
         view->SetForcedRepaint(false);
       }
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/PuppetWidget.cpp
--- a/widget/PuppetWidget.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/widget/PuppetWidget.cpp	Tue May 10 22:58:47 2016 -0500
@@ -823,6 +823,8 @@
   mDirtyRegion.SetEmpty();
   mPaintTask.Revoke();
 
+  RefPtr<PuppetWidget> strongThis(this);
+
   mAttachedWidgetListener->WillPaintWindow(this);
 
   if (mAttachedWidgetListener) {
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/cocoa/nsChildView.mm
--- a/widget/cocoa/nsChildView.mm	Tue May 10 22:58:47 2016 -0500
+++ b/widget/cocoa/nsChildView.mm	Tue May 10 22:58:47 2016 -0500
@@ -3716,6 +3716,8 @@
 
 - (void)viewWillDraw
 {
+  nsAutoRetainCocoaObject kungFuDeathGrip(self);
+
   if (mGeckoChild) {
     // The OS normally *will* draw our NSWindow, no matter what we do here.
     // But Gecko can delete our parent widget(s) (along with mGeckoChild)
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/gonk/nsWindow.cpp
--- a/widget/gonk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/widget/gonk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
@@ -196,7 +196,7 @@
         return;
     }
 
-    nsWindow *targetWindow = (nsWindow *)sTopWindows[0];
+    RefPtr<nsWindow> targetWindow = (nsWindow *)sTopWindows[0];
     while (targetWindow->GetLastChild())
         targetWindow = (nsWindow *)targetWindow->GetLastChild();
 
@@ -205,15 +205,15 @@
         listener->WillPaintWindow(targetWindow);
     }
 
-    LayerManager* lm = targetWindow->GetLayerManager();
-    if (mozilla::layers::LayersBackend::LAYERS_CLIENT == lm->GetBackendType()) {
-      // No need to do anything, the compositor will handle drawing
-    } else {
-        NS_RUNTIMEABORT("Unexpected layer manager type");
-    }
-
     listener = targetWindow->GetWidgetListener();
     if (listener) {
+        LayerManager* lm = targetWindow->GetLayerManager();
+        if (mozilla::layers::LayersBackend::LAYERS_CLIENT == lm->GetBackendType()) {
+            // No need to do anything, the compositor will handle drawing
+        } else {
+            NS_RUNTIMEABORT("Unexpected layer manager type");
+        }
+
         listener->DidPaintWindow();
     }
 }
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/gtk/nsWindow.cpp
--- a/widget/gtk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/widget/gtk/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
@@ -469,6 +469,12 @@
     }
 }
 
+nsIWidgetListener*
+nsWindow::GetListener()
+{
+    return mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
+}
+
 nsresult
 nsWindow::DispatchEvent(WidgetGUIEvent* aEvent, nsEventStatus& aStatus)
 {
@@ -481,8 +487,7 @@
     aEvent->refPoint.y = GdkCoordToDevicePixels(aEvent->refPoint.y);
 
     aStatus = nsEventStatus_eIgnore;
-    nsIWidgetListener* listener =
-        mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
+    nsIWidgetListener* listener = GetListener();
     if (listener) {
       aStatus = listener->HandleEvent(aEvent, mUseAttachedEvents);
     }
@@ -2119,8 +2124,7 @@
     if (!mGdkWindow || mIsFullyObscured || !mHasMappedToplevel)
         return FALSE;
 
-    nsIWidgetListener *listener =
-        mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
+    nsIWidgetListener *listener = GetListener();
     if (!listener)
         return FALSE;
 
@@ -2149,6 +2153,8 @@
         clientLayers->SendInvalidRegion(region);
     }
 
+    RefPtr<nsWindow> strongThis(this);
+
     // Dispatch WillPaintWindow notification to allow scripts etc. to run
     // before we paint
     {
@@ -2161,8 +2167,7 @@
 
         // Re-get the listener since the will paint notification might have
         // killed it.
-        listener =
-            mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
+        listener = GetListener();
         if (!listener)
             return FALSE;
     }
@@ -2223,6 +2228,13 @@
     // If this widget uses OMTC...
     if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT) {
         listener->PaintWindow(this, region);
+
+        // Re-get the listener since the will paint notification might have
+        // killed it.
+        listener = GetListener();
+        if (!listener)
+            return TRUE;
+
         listener->DidPaintWindow();
         return TRUE;
     }
@@ -2307,6 +2319,13 @@
       if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_BASIC) {
         AutoLayerManagerSetup setupLayerManager(this, ctx, layerBuffering);
         painted = listener->PaintWindow(this, region);
+
+        // Re-get the listener since the will paint notification might have
+        // killed it.
+        listener = GetListener();
+        if (!listener)
+            return TRUE;
+
       }
     }
 
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/gtk/nsWindow.h
--- a/widget/gtk/nsWindow.h	Tue May 10 22:58:47 2016 -0500
+++ b/widget/gtk/nsWindow.h	Tue May 10 22:58:47 2016 -0500
@@ -359,6 +359,7 @@
                                    GdkWindow** aWindow, gint* aButton,
                                    gint* aRootX, gint* aRootY);
     void               ClearCachedResources();
+    nsIWidgetListener* GetListener();
 
     GtkWidget          *mShell;
     MozContainer       *mContainer;
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/qt/nsWindow.cpp
--- a/widget/qt/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/widget/qt/nsWindow.cpp	Tue May 10 22:58:47 2016 -0500
@@ -857,18 +857,28 @@
 
 // EVENTS
 
+nsIWidgetListener*
+nsWindow::GetPaintListener()
+{
+    return mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
+}
+
 void
 nsWindow::OnPaint()
 {
     LOGDRAW(("nsWindow::%s [%p]\n", __FUNCTION__, (void *)this));
-    nsIWidgetListener* listener =
-        mAttachedWidgetListener ? mAttachedWidgetListener : mWidgetListener;
+    nsIWidgetListener* listener = GetPaintListener();
     if (!listener) {
         return;
     }
 
     listener->WillPaintWindow(this);
 
+    nsIWidgetListener* listener = GetPaintListener();
+    if (!listener) {
+        return;
+    }
+
     switch (GetLayerManager()->GetBackendType()) {
         case mozilla::layers::LayersBackend::LAYERS_CLIENT: {
             nsIntRegion region(nsIntRect(0, 0, mWidget->width(), mWidget->height()));
@@ -879,6 +889,11 @@
             NS_ERROR("Invalid layer manager");
     }
 
+    nsIWidgetListener* listener = GetPaintListener();
+    if (!listener) {
+        return;
+    }
+
     listener->DidPaintWindow();
 }
 
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/qt/nsWindow.h
--- a/widget/qt/nsWindow.h	Tue May 10 22:58:47 2016 -0500
+++ b/widget/qt/nsWindow.h	Tue May 10 22:58:47 2016 -0500
@@ -254,6 +254,7 @@
         bool needDispatch;
     } MozCachedMoveEvent;
 
+    nsIWidgetListener* GetPaintListener();
     bool               CheckForRollup(double aMouseX, double aMouseY, bool aIsWheel);
     void*              SetupPluginPort(void);
     nsresult           SetWindowIconList(const nsTArray<nsCString> &aIconList);
diff -r 73cc9a2d8fc1 -r 3c2bd9158ad3 widget/windows/nsWindowGfx.cpp
--- a/widget/windows/nsWindowGfx.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/widget/windows/nsWindowGfx.cpp	Tue May 10 22:58:47 2016 -0500
@@ -298,6 +298,8 @@
     clientLayerManager->SendInvalidRegion(region);
   }
 
+  RefPtr<nsWindow> strongThis(this);
+
   nsIWidgetListener* listener = GetPaintListener();
   if (listener) {
     listener->WillPaintWindow(this);

D gnu/packages/patches/icecat-CVE-2016-2818-pt9.patch => gnu/packages/patches/icecat-CVE-2016-2818-pt9.patch +0 -188
@@ 1,188 0,0 @@
  changeset:   312075:ee870911fabb
  user:        Timothy Nikkel <tnikkel@gmail.com>
  Date:        Wed May 04 16:12:48 2016 -0500
  summary:     Bug 1265577. r=mats, a=lizzard

diff -r 751208d22b91 -r ee870911fabb dom/base/nsFrameLoader.cpp
--- a/dom/base/nsFrameLoader.cpp	Thu May 26 17:07:49 2016 -0400
+++ b/dom/base/nsFrameLoader.cpp	Wed May 04 16:12:48 2016 -0500
@@ -155,7 +155,7 @@
 nsFrameLoader::nsFrameLoader(Element* aOwner, bool aNetworkCreated)
   : mOwnerContent(aOwner)
   , mAppIdSentToPermissionManager(nsIScriptSecurityManager::NO_APP_ID)
-  , mDetachedSubdocViews(nullptr)
+  , mDetachedSubdocFrame(nullptr)
   , mIsPrerendered(false)
   , mDepthTooGreat(false)
   , mIsTopLevelContent(false)
@@ -2507,18 +2507,18 @@
 }
 
 void
-nsFrameLoader::SetDetachedSubdocView(nsView* aDetachedViews,
-                                     nsIDocument* aContainerDoc)
+nsFrameLoader::SetDetachedSubdocFrame(nsIFrame* aDetachedFrame,
+                                      nsIDocument* aContainerDoc)
 {
-  mDetachedSubdocViews = aDetachedViews;
+  mDetachedSubdocFrame = aDetachedFrame;
   mContainerDocWhileDetached = aContainerDoc;
 }
 
-nsView*
-nsFrameLoader::GetDetachedSubdocView(nsIDocument** aContainerDoc) const
+nsIFrame*
+nsFrameLoader::GetDetachedSubdocFrame(nsIDocument** aContainerDoc) const
 {
   NS_IF_ADDREF(*aContainerDoc = mContainerDocWhileDetached);
-  return mDetachedSubdocViews;
+  return mDetachedSubdocFrame.GetFrame();
 }
 
 void
diff -r 751208d22b91 -r ee870911fabb dom/base/nsFrameLoader.h
--- a/dom/base/nsFrameLoader.h	Thu May 26 17:07:49 2016 -0400
+++ b/dom/base/nsFrameLoader.h	Wed May 04 16:12:48 2016 -0500
@@ -23,6 +23,7 @@
 #include "mozilla/Attributes.h"
 #include "FrameMetrics.h"
 #include "nsStubMutationObserver.h"
+#include "nsIFrame.h"
 
 class nsIURI;
 class nsSubDocumentFrame;
@@ -197,23 +198,23 @@
   void SetRemoteBrowser(nsITabParent* aTabParent);
 
   /**
-   * Stashes a detached view on the frame loader. We do this when we're
+   * Stashes a detached nsIFrame on the frame loader. We do this when we're
    * destroying the nsSubDocumentFrame. If the nsSubdocumentFrame is
-   * being reframed we'll restore the detached view when it's recreated,
+   * being reframed we'll restore the detached nsIFrame when it's recreated,
    * otherwise we'll discard the old presentation and set the detached
-   * subdoc view to null. aContainerDoc is the document containing the
+   * subdoc nsIFrame to null. aContainerDoc is the document containing the
    * the subdoc frame. This enables us to detect when the containing
    * document has changed during reframe, so we can discard the presentation 
    * in that case.
    */
-  void SetDetachedSubdocView(nsView* aDetachedView,
-                             nsIDocument* aContainerDoc);
+  void SetDetachedSubdocFrame(nsIFrame* aDetachedFrame,
+                              nsIDocument* aContainerDoc);
 
   /**
-   * Retrieves the detached view and the document containing the view,
-   * as set by SetDetachedSubdocView().
+   * Retrieves the detached nsIFrame and the document containing the nsIFrame,
+   * as set by SetDetachedSubdocFrame().
    */
-  nsView* GetDetachedSubdocView(nsIDocument** aContainerDoc) const;
+  nsIFrame* GetDetachedSubdocFrame(nsIDocument** aContainerDoc) const;
 
   /**
    * Applies a new set of sandbox flags. These are merged with the sandbox
@@ -326,12 +327,12 @@
   nsRefPtr<nsFrameMessageManager> mMessageManager;
   nsCOMPtr<nsIInProcessContentFrameMessageManager> mChildMessageManager;
 private:
-  // Stores the root view of the subdocument while the subdocument is being
+  // Stores the root frame of the subdocument while the subdocument is being
   // reframed. Used to restore the presentation after reframing.
-  nsView* mDetachedSubdocViews;
+  nsWeakFrame mDetachedSubdocFrame;
   // Stores the containing document of the frame corresponding to this
   // frame loader. This is reference is kept valid while the subframe's
-  // presentation is detached and stored in mDetachedSubdocViews. This
+  // presentation is detached and stored in mDetachedSubdocFrame. This
   // enables us to detect whether the frame has moved documents during
   // a reframe, so that we know not to restore the presentation.
   nsCOMPtr<nsIDocument> mContainerDocWhileDetached;
diff -r 751208d22b91 -r ee870911fabb layout/generic/nsSubDocumentFrame.cpp
--- a/layout/generic/nsSubDocumentFrame.cpp	Thu May 26 17:07:49 2016 -0400
+++ b/layout/generic/nsSubDocumentFrame.cpp	Wed May 04 16:12:48 2016 -0500
@@ -130,13 +130,16 @@
   nsRefPtr<nsFrameLoader> frameloader = FrameLoader();
   if (frameloader) {
     nsCOMPtr<nsIDocument> oldContainerDoc;
-    nsView* detachedViews =
-      frameloader->GetDetachedSubdocView(getter_AddRefs(oldContainerDoc));
-    frameloader->SetDetachedSubdocView(nullptr, nullptr);
-    if (detachedViews) {
-      if (oldContainerDoc == aContent->OwnerDoc()) {
+    nsIFrame* detachedFrame =
+      frameloader->GetDetachedSubdocFrame(getter_AddRefs(oldContainerDoc));
+    frameloader->SetDetachedSubdocFrame(nullptr, nullptr);
+    MOZ_ASSERT(oldContainerDoc || !detachedFrame);
+    if (oldContainerDoc) {
+      nsView* detachedView =
+        detachedFrame ? detachedFrame->GetView() : nullptr;
+      if (detachedView && oldContainerDoc == aContent->OwnerDoc()) {
         // Restore stashed presentation.
-        ::InsertViewsInReverseOrder(detachedViews, mInnerView);
+        ::InsertViewsInReverseOrder(detachedView, mInnerView);
         ::EndSwapDocShellsForViews(mInnerView->GetFirstChild());
       } else {
         // Presentation is for a different document, don't restore it.
@@ -252,11 +255,12 @@
     nsRefPtr<nsFrameLoader> frameloader = FrameLoader();
     if (frameloader) {
       nsCOMPtr<nsIDocument> oldContainerDoc;
-      nsView* detachedViews =
-        frameloader->GetDetachedSubdocView(getter_AddRefs(oldContainerDoc));
-      if (detachedViews) {
-        nsSize size = detachedViews->GetBounds().Size();
-        nsPresContext* presContext = detachedViews->GetFrame()->PresContext();
+      nsIFrame* detachedFrame =
+        frameloader->GetDetachedSubdocFrame(getter_AddRefs(oldContainerDoc));
+      nsView* view = detachedFrame ? detachedFrame->GetView() : nullptr;
+      if (view) {
+        nsSize size = view->GetBounds().Size();
+        nsPresContext* presContext = detachedFrame->PresContext();
         return nsIntSize(presContext->AppUnitsToDevPixels(size.width),
                          presContext->AppUnitsToDevPixels(size.height));
       }
@@ -939,7 +943,7 @@
 
     // Either the frame has been constructed by now, or it never will be,
     // either way we want to clear the stashed views.
-    mFrameLoader->SetDetachedSubdocView(nullptr, nullptr);
+    mFrameLoader->SetDetachedSubdocFrame(nullptr, nullptr);
 
     nsSubDocumentFrame* frame = do_QueryFrame(mFrameElement->GetPrimaryFrame());
     if ((!frame && mHideViewerIfFrameless) ||
@@ -974,15 +978,25 @@
   RefPtr<nsFrameLoader> frameloader = FrameLoader();
   if (frameloader) {
     nsView* detachedViews = ::BeginSwapDocShellsForViews(mInnerView->GetFirstChild());
-    frameloader->SetDetachedSubdocView(detachedViews, mContent->OwnerDoc());
 
-    // We call nsFrameLoader::HideViewer() in a script runner so that we can
-    // safely determine whether the frame is being reframed or destroyed.
-    nsContentUtils::AddScriptRunner(
-      new nsHideViewer(mContent,
-                       frameloader,
-                       PresContext()->PresShell(),
-                       (mDidCreateDoc || mCallingShow)));
+    if (detachedViews && detachedViews->GetFrame()) {
+      MOZ_ASSERT(mContent->OwnerDoc());
+      frameloader->SetDetachedSubdocFrame(
+        detachedViews->GetFrame(), mContent->OwnerDoc());
+
+      // We call nsFrameLoader::HideViewer() in a script runner so that we can
+      // safely determine whether the frame is being reframed or destroyed.
+      nsContentUtils::AddScriptRunner(
+        new nsHideViewer(mContent,
+                         frameloader,
+                         PresContext()->PresShell(),
+                         (mDidCreateDoc || mCallingShow)));
+    } else {
+      frameloader->SetDetachedSubdocFrame(nullptr, nullptr);
+      if (mDidCreateDoc || mCallingShow) {
+        frameloader->Hide();
+      }
+    }
   }
 
   nsLeafFrame::DestroyFrom(aDestructRoot);

D gnu/packages/patches/icecat-CVE-2016-2819.patch => gnu/packages/patches/icecat-CVE-2016-2819.patch +0 -102
@@ 1,102 0,0 @@
  changeset:   312054:072992bf176d
  user:        Henri Sivonen <hsivonen@hsivonen.fi>
  Date:        Sun May 15 17:03:06 2016 +0300
  summary:     Bug 1270381. r=wchen. a=ritu

diff -r d30748143c21 -r 072992bf176d parser/html/javasrc/TreeBuilder.java
--- a/parser/html/javasrc/TreeBuilder.java	Mon May 09 18:05:32 2016 -0700
+++ b/parser/html/javasrc/TreeBuilder.java	Sun May 15 17:03:06 2016 +0300
@@ -39,6 +39,11 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
 import nu.validator.htmlparser.annotation.Auto;
 import nu.validator.htmlparser.annotation.Const;
 import nu.validator.htmlparser.annotation.IdType;
@@ -54,11 +59,6 @@
 import nu.validator.htmlparser.common.TokenHandler;
 import nu.validator.htmlparser.common.XmlViolationPolicy;
 
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-
 public abstract class TreeBuilder<T> implements TokenHandler,
         TreeBuilderState<T> {
 
@@ -1924,7 +1924,6 @@
                                     break starttagloop;
                                 }
                                 generateImpliedEndTags();
-                                // XXX is the next if dead code?
                                 if (errorHandler != null && !isCurrent("table")) {
                                     errNoCheckUnclosedElementsOnStack();
                                 }
@@ -2183,11 +2182,11 @@
                                             pop();
                                         }
                                         break;
-                                    } else if (node.isSpecial()
+                                    } else if (eltPos == 0 || (node.isSpecial()
                                             && (node.ns != "http://www.w3.org/1999/xhtml"
-                                                || (node.name != "p"
-                                                    && node.name != "address"
-                                                    && node.name != "div"))) {
+                                                    || (node.name != "p"
+                                                            && node.name != "address"
+                                                            && node.name != "div")))) {
                                         break;
                                     }
                                     eltPos--;
@@ -3878,7 +3877,7 @@
                                         pop();
                                     }
                                     break endtagloop;
-                                } else if (node.isSpecial()) {
+                                } else if (eltPos == 0 || node.isSpecial()) {
                                     errStrayEndTag(name);
                                     break endtagloop;
                                 }
@@ -4745,6 +4744,7 @@
             int furthestBlockPos = formattingEltStackPos + 1;
             while (furthestBlockPos <= currentPtr) {
                 StackNode<T> node = stack[furthestBlockPos]; // weak ref
+                assert furthestBlockPos > 0: "How is formattingEltStackPos + 1 not > 0?";
                 if (node.isSpecial()) {
                     break;
                 }
diff -r d30748143c21 -r 072992bf176d parser/html/nsHtml5TreeBuilder.cpp
--- a/parser/html/nsHtml5TreeBuilder.cpp	Mon May 09 18:05:32 2016 -0700
+++ b/parser/html/nsHtml5TreeBuilder.cpp	Sun May 15 17:03:06 2016 +0300
@@ -1102,7 +1102,7 @@
                     pop();
                   }
                   break;
-                } else if (node->isSpecial() && (node->ns != kNameSpaceID_XHTML || (node->name != nsHtml5Atoms::p && node->name != nsHtml5Atoms::address && node->name != nsHtml5Atoms::div))) {
+                } else if (!eltPos || (node->isSpecial() && (node->ns != kNameSpaceID_XHTML || (node->name != nsHtml5Atoms::p && node->name != nsHtml5Atoms::address && node->name != nsHtml5Atoms::div)))) {
                   break;
                 }
                 eltPos--;
@@ -2749,7 +2749,7 @@
                   pop();
                 }
                 NS_HTML5_BREAK(endtagloop);
-              } else if (node->isSpecial()) {
+              } else if (!eltPos || node->isSpecial()) {
                 errStrayEndTag(name);
                 NS_HTML5_BREAK(endtagloop);
               }
@@ -3593,6 +3593,7 @@
     int32_t furthestBlockPos = formattingEltStackPos + 1;
     while (furthestBlockPos <= currentPtr) {
       nsHtml5StackNode* node = stack[furthestBlockPos];
+      MOZ_ASSERT(furthestBlockPos > 0, "How is formattingEltStackPos + 1 not > 0?");
       if (node->isSpecial()) {
         break;
       }

D gnu/packages/patches/icecat-CVE-2016-2821.patch => gnu/packages/patches/icecat-CVE-2016-2821.patch +0 -16
@@ 1,16 0,0 @@
  changeset:   312045:7aea44059251
  user:        Olli Pettay <Olli.Pettay@helsinki.fi>
  Date:        Fri May 13 20:10:22 2016 +0300
  summary:     Bug 1271460, don't leak editor created element objects, r=ehsan a=ritu

diff -r 09418166fd77 -r 7aea44059251 editor/libeditor/nsHTMLInlineTableEditor.cpp
--- a/editor/libeditor/nsHTMLInlineTableEditor.cpp	Wed May 11 10:14:45 2016 +0100
+++ b/editor/libeditor/nsHTMLInlineTableEditor.cpp	Fri May 13 20:10:22 2016 +0300
@@ -109,7 +109,6 @@
 
   // get the root content node.
   nsCOMPtr<nsIContent> bodyContent = GetRoot();
-  NS_ENSURE_TRUE(bodyContent, NS_ERROR_FAILURE);
 
   DeleteRefToAnonymousNode(mAddColumnBeforeButton, bodyContent, ps);
   mAddColumnBeforeButton = nullptr;

D gnu/packages/patches/icecat-CVE-2016-2824.patch => gnu/packages/patches/icecat-CVE-2016-2824.patch +0 -85
@@ 1,85 0,0 @@
  changeset:   312070:4b54feddf36c
  user:        JerryShih <hshih@mozilla.com>
  Date:        Wed May 25 16:27:41 2016 +0200
  summary:     Bug 1248580 - strip the uploading element num according to the uniform array size. r=jgilbert a=ritu

diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLContextValidate.cpp
--- a/dom/canvas/WebGLContextValidate.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/dom/canvas/WebGLContextValidate.cpp	Wed May 25 16:27:41 2016 +0200
@@ -1531,9 +1531,10 @@
     if (!loc->ValidateArrayLength(setterElemSize, setterArraySize, this, funcName))
         return false;
 
+    MOZ_ASSERT((size_t)loc->mActiveInfo->mElemCount > loc->mArrayIndex);
+    size_t uniformElemCount = loc->mActiveInfo->mElemCount - loc->mArrayIndex;
     *out_rawLoc = loc->mLoc;
-    *out_numElementsToUpload = std::min((size_t)loc->mActiveInfo->mElemCount,
-                                        setterArraySize / setterElemSize);
+    *out_numElementsToUpload = std::min(uniformElemCount, setterArraySize / setterElemSize);
     return true;
 }
 
diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLProgram.cpp
--- a/dom/canvas/WebGLProgram.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/dom/canvas/WebGLProgram.cpp	Wed May 25 16:27:41 2016 +0200
@@ -510,8 +510,14 @@
     const NS_LossyConvertUTF16toASCII userName(userName_wide);
 
     nsDependentCString baseUserName;
-    bool isArray;
-    size_t arrayIndex;
+    bool isArray = false;
+    // GLES 2.0.25, Section 2.10, p35
+    // If the the uniform location is an array, then the location of the first
+    // element of that array can be retrieved by either using the name of the
+    // uniform array, or the name of the uniform array appended with "[0]".
+    // The ParseName() can't recognize this rule. So always initialize
+    // arrayIndex with 0.
+    size_t arrayIndex = 0;
     if (!ParseName(userName, &baseUserName, &isArray, &arrayIndex))
         return nullptr;
 
@@ -536,7 +542,8 @@
         return nullptr;
 
     nsRefPtr<WebGLUniformLocation> locObj = new WebGLUniformLocation(mContext, LinkInfo(),
-                                                                     loc, activeInfo);
+                                                                     loc, arrayIndex,
+                                                                     activeInfo);
     return locObj.forget();
 }
 
diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLUniformLocation.cpp
--- a/dom/canvas/WebGLUniformLocation.cpp	Tue May 10 22:58:47 2016 -0500
+++ b/dom/canvas/WebGLUniformLocation.cpp	Wed May 25 16:27:41 2016 +0200
@@ -16,10 +16,13 @@
 
 WebGLUniformLocation::WebGLUniformLocation(WebGLContext* webgl,
                                            const webgl::LinkedProgramInfo* linkInfo,
-                                           GLuint loc, const WebGLActiveInfo* activeInfo)
+                                           GLuint loc,
+                                           size_t arrayIndex,
+                                           const WebGLActiveInfo* activeInfo)
     : WebGLContextBoundObject(webgl)
     , mLinkInfo(linkInfo)
     , mLoc(loc)
+    , mArrayIndex(arrayIndex)
     , mActiveInfo(activeInfo)
 { }
 
diff -r 3c2bd9158ad3 -r 4b54feddf36c dom/canvas/WebGLUniformLocation.h
--- a/dom/canvas/WebGLUniformLocation.h	Tue May 10 22:58:47 2016 -0500
+++ b/dom/canvas/WebGLUniformLocation.h	Wed May 25 16:27:41 2016 +0200
@@ -41,10 +41,11 @@
 
     const WeakPtr<const webgl::LinkedProgramInfo> mLinkInfo;
     const GLuint mLoc;
+    const size_t mArrayIndex;
     const WebGLActiveInfo* const mActiveInfo;
 
     WebGLUniformLocation(WebGLContext* webgl, const webgl::LinkedProgramInfo* linkInfo,
-                         GLuint loc, const WebGLActiveInfo* activeInfo);
+                         GLuint loc, size_t arrayIndex, const WebGLActiveInfo* activeInfo);
 
     bool ValidateForProgram(WebGLProgram* prog, WebGLContext* webgl,
                             const char* funcName) const;

D gnu/packages/patches/icecat-CVE-2016-2828.patch => gnu/packages/patches/icecat-CVE-2016-2828.patch +0 -185
@@ 1,185 0,0 @@
  changeset:   312096:dc190bd03d24
  tag:         FIREFOX_45_2_0esr_BUILD2
  tag:         FIREFOX_45_2_0esr_RELEASE
  user:        Jeff Gilbert <jgilbert@mozilla.com>
  Date:        Thu Apr 14 13:50:04 2016 -0700
  summary:     Bug 1224199 - Destroy SharedSurfaces before ~GLContext(). - r=jrmuizel a=lizzard

diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLBlitHelper.cpp
--- a/gfx/gl/GLBlitHelper.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/GLBlitHelper.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -172,6 +172,9 @@
 
 GLBlitHelper::~GLBlitHelper()
 {
+    if (!mGL->MakeCurrent())
+        return;
+
     DeleteTexBlitProgram();
 
     GLuint tex[] = {
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLContext.cpp
--- a/gfx/gl/GLContext.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/GLContext.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -2079,12 +2079,13 @@
     if (IsDestroyed())
         return;
 
+    // Null these before they're naturally nulled after dtor, as we want GLContext to
+    // still be alive in *their* dtors.
+    mScreen = nullptr;
+    mBlitHelper = nullptr;
+    mReadTexImageHelper = nullptr;
+
     if (MakeCurrent()) {
-        DestroyScreenBuffer();
-
-        mBlitHelper = nullptr;
-        mReadTexImageHelper = nullptr;
-
         mTexGarbageBin->GLContextTeardown();
     } else {
         NS_WARNING("MakeCurrent() failed during MarkDestroyed! Skipping GL object teardown.");
@@ -2328,8 +2329,6 @@
         return false;
     }
 
-    DestroyScreenBuffer();
-
     // This will rebind to 0 (Screen) if needed when
     // it falls out of scope.
     ScopedBindFramebuffer autoFB(this);
@@ -2349,12 +2348,6 @@
 }
 
 void
-GLContext::DestroyScreenBuffer()
-{
-    mScreen = nullptr;
-}
-
-void
 GLContext::ForceDirtyScreen()
 {
     ScopedBindFramebuffer autoFB(0);
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLContext.h
--- a/gfx/gl/GLContext.h	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/GLContext.h	Thu Apr 14 13:50:04 2016 -0700
@@ -3492,8 +3492,6 @@
     friend class GLScreenBuffer;
     UniquePtr<GLScreenBuffer> mScreen;
 
-    void DestroyScreenBuffer();
-
     SharedSurface* mLockedSurface;
 
 public:
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/GLReadTexImageHelper.cpp
--- a/gfx/gl/GLReadTexImageHelper.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/GLReadTexImageHelper.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -31,6 +31,9 @@
 
 GLReadTexImageHelper::~GLReadTexImageHelper()
 {
+    if (!mGL->MakeCurrent())
+        return;
+
     mGL->fDeleteProgram(mPrograms[0]);
     mGL->fDeleteProgram(mPrograms[1]);
     mGL->fDeleteProgram(mPrograms[2]);
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceANGLE.cpp
--- a/gfx/gl/SharedSurfaceANGLE.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/SharedSurfaceANGLE.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -120,8 +120,10 @@
 {
     mEGL->fDestroySurface(Display(), mPBuffer);
 
+    if (!mGL->MakeCurrent())
+        return;
+
     if (mFence) {
-        mGL->MakeCurrent();
         mGL->fDeleteFences(1, &mFence);
     }
 }
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceEGL.cpp
--- a/gfx/gl/SharedSurfaceEGL.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/SharedSurfaceEGL.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -87,9 +87,12 @@
 {
     mEGL->fDestroyImage(Display(), mImage);
 
-    mGL->MakeCurrent();
-    mGL->fDeleteTextures(1, &mProdTex);
-    mProdTex = 0;
+    if (mSync) {
+        // We can't call this unless we have the ext, but we will always have
+        // the ext if we have something to destroy.
+        mEGL->fDestroySync(Display(), mSync);
+        mSync = 0;
+    }
 
     if (mConsTex) {
         MOZ_ASSERT(mGarbageBin);
@@ -97,12 +100,11 @@
         mConsTex = 0;
     }
 
-    if (mSync) {
-        // We can't call this unless we have the ext, but we will always have
-        // the ext if we have something to destroy.
-        mEGL->fDestroySync(Display(), mSync);
-        mSync = 0;
-    }
+    if (!mGL->MakeCurrent())
+        return;
+
+    mGL->fDeleteTextures(1, &mProdTex);
+    mProdTex = 0;
 }
 
 void
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceGralloc.cpp
--- a/gfx/gl/SharedSurfaceGralloc.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/SharedSurfaceGralloc.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -154,7 +154,9 @@

     DEBUG_PRINT("[SharedSurface_Gralloc %p] destroyed\n", this);
 
-    mGL->MakeCurrent();
+    if (!mGL->MakeCurrent())
+        return;
+
     mGL->fDeleteTextures(1, &mProdTex);
 
     if (mSync) {
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/SharedSurfaceIO.cpp
--- a/gfx/gl/SharedSurfaceIO.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/SharedSurfaceIO.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -111,11 +111,10 @@
 
 SharedSurface_IOSurface::~SharedSurface_IOSurface()
 {
-    if (mProdTex) {
-        DebugOnly<bool> success = mGL->MakeCurrent();
-        MOZ_ASSERT(success);
-        mGL->fDeleteTextures(1, &mProdTex);
-    }
+    if (!mGL->MakeCurrent())
+        return;
+
+    mGL->fDeleteTextures(1, &mProdTex);
 }
 
 ////////////////////////////////////////////////////////////////////////
diff -r b24e1cc592ec -r dc190bd03d24 gfx/gl/TextureGarbageBin.cpp
--- a/gfx/gl/TextureGarbageBin.cpp	Mon Mar 07 11:51:12 2016 +0000
+++ b/gfx/gl/TextureGarbageBin.cpp	Thu Apr 14 13:50:04 2016 -0700
@@ -36,6 +36,7 @@
     if (!mGL)
         return;
 
+    MOZ_RELEASE_ASSERT(mGL->IsCurrent());
     while (!mGarbageTextures.empty()) {
         GLuint tex = mGarbageTextures.top();
         mGarbageTextures.pop();

D gnu/packages/patches/icecat-CVE-2016-2831.patch => gnu/packages/patches/icecat-CVE-2016-2831.patch +0 -120
@@ 1,120 0,0 @@
  changeset:   312091:a3fff31b8b70
  user:        Xidorn Quan <quanxunzhen@gmail.com>
  Date:        Thu Apr 14 17:38:13 2016 +1000
  summary:     Bug 1261933 - Continue unlocking pointer even if the widget has gone. r=smaug a=lizzard

  MozReview-Commit-ID: 1siQhemFf9O

diff -r f5e862ea4a72 -r a3fff31b8b70 dom/base/nsDocument.cpp
--- a/dom/base/nsDocument.cpp	Tue May 31 18:35:26 2016 -0700
+++ b/dom/base/nsDocument.cpp	Thu Apr 14 17:38:13 2016 +1000
@@ -12315,49 +12315,37 @@
 bool
 nsDocument::SetPointerLock(Element* aElement, int aCursorStyle)
 {
-  // NOTE: aElement will be nullptr when unlocking.
-  nsCOMPtr<nsPIDOMWindow> window = GetWindow();
-  if (!window) {
-    NS_WARNING("SetPointerLock(): No Window");
-    return false;
-  }
-
-  nsIDocShell *docShell = window->GetDocShell();
-  if (!docShell) {
-    NS_WARNING("SetPointerLock(): No DocShell (window already closed?)");
-    return false;
-  }
-
-  nsRefPtr<nsPresContext> presContext;
-  docShell->GetPresContext(getter_AddRefs(presContext));
-  if (!presContext) {
-    NS_WARNING("SetPointerLock(): Unable to get presContext in \
-                domWindow->GetDocShell()->GetPresContext()");
+  MOZ_ASSERT(!aElement || aElement->OwnerDoc() == this,
+             "We should be either unlocking pointer (aElement is nullptr), "
+             "or locking pointer to an element in this document");
+#ifdef DEBUG
+  if (!aElement) {
+    nsCOMPtr<nsIDocument> pointerLockedDoc =
+      do_QueryReferent(EventStateManager::sPointerLockedDoc);
+    MOZ_ASSERT(pointerLockedDoc == this);
+  }
+#endif
+
+  nsIPresShell* shell = GetShell();
+  if (!shell) {
+    NS_WARNING("SetPointerLock(): No PresShell");
     return false;
   }
-
-  nsCOMPtr<nsIPresShell> shell = presContext->PresShell();
-  if (!shell) {
-    NS_WARNING("SetPointerLock(): Unable to find presContext->PresShell()");
-    return false;
-  }
-
-  nsIFrame* rootFrame = shell->GetRootFrame();
-  if (!rootFrame) {
-    NS_WARNING("SetPointerLock(): Unable to get root frame");
+  nsPresContext* presContext = shell->GetPresContext();
+  if (!presContext) {
+    NS_WARNING("SetPointerLock(): Unable to get PresContext");
     return false;
   }
 
-  nsCOMPtr<nsIWidget> widget = rootFrame->GetNearestWidget();
-  if (!widget) {
-    NS_WARNING("SetPointerLock(): Unable to find widget in \
-                shell->GetRootFrame()->GetNearestWidget();");
-    return false;
-  }
-
-  if (aElement && (aElement->OwnerDoc() != this)) {
-    NS_WARNING("SetPointerLock(): Element not in this document.");
-    return false;
+  nsCOMPtr<nsIWidget> widget;
+  nsIFrame* rootFrame = shell->GetRootFrame();
+  if (!NS_WARN_IF(!rootFrame)) {
+    widget = rootFrame->GetNearestWidget();
+    NS_WARN_IF_FALSE(widget, "SetPointerLock(): Unable to find widget "
+                     "in shell->GetRootFrame()->GetNearestWidget();");
+    if (aElement && !widget) {
+      return false;
+    }
   }
 
   // Hide the cursor and set pointer lock for future mouse events
diff -r f5e862ea4a72 -r a3fff31b8b70 dom/events/EventStateManager.cpp
--- a/dom/events/EventStateManager.cpp	Tue May 31 18:35:26 2016 -0700
+++ b/dom/events/EventStateManager.cpp	Thu Apr 14 17:38:13 2016 +1000
@@ -4128,10 +4128,6 @@
   // NOTE: aElement will be nullptr when unlocking.
   sIsPointerLocked = !!aElement;
 
-  if (!aWidget) {
-    return;
-  }
-
   // Reset mouse wheel transaction
   WheelTransaction::EndTransaction();
 
@@ -4140,6 +4136,8 @@
     do_GetService("@mozilla.org/widget/dragservice;1");
 
   if (sIsPointerLocked) {
+    MOZ_ASSERT(aWidget, "Locking pointer requires a widget");
+
     // Store the last known ref point so we can reposition the pointer after unlock.
     mPreLockPoint = sLastRefPoint;
 
@@ -4164,7 +4162,9 @@
     // pre-pointerlock position, so that the synthetic mouse event reports
     // no movement.
     sLastRefPoint = mPreLockPoint;
-    aWidget->SynthesizeNativeMouseMove(mPreLockPoint + aWidget->WidgetToScreenOffset());
+    if (aWidget) {
+      aWidget->SynthesizeNativeMouseMove(mPreLockPoint + aWidget->WidgetToScreenOffset());
+    }
 
     // Don't retarget events to this element any more.
     nsIPresShell::SetCapturingContent(nullptr, CAPTURE_POINTERLOCK);

R gnu/packages/patches/icecat-avoid-bundled-includes.patch => gnu/packages/patches/icecat-avoid-bundled-libraries.patch +25 -10
@@ 1,7 1,7 @@
Do not use headers from bundled libraries.
Fixes needed when avoiding bundled libraries.

--- icecat-38.3.0/xpcom/build/moz.build.orig	2015-10-12 19:33:43.000000000 -0400
+++ icecat-38.3.0/xpcom/build/moz.build	2015-10-13 16:37:28.693224858 -0400
--- icecat-45.3.0/xpcom/build/moz.build.orig
+++ icecat-45.3.0/xpcom/build/moz.build
@@ -92,10 +92,5 @@
     '/docshell/base',
 ]


@@ 13,9 13,9 @@ Do not use headers from bundled libraries.
-
 if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa':
     CXXFLAGS += CONFIG['TK_CFLAGS']
--- icecat-38.3.0/storage/src/moz.build.orig	2015-10-12 19:34:45.000000000 -0400
+++ icecat-38.3.0/storage/src/moz.build	2015-10-13 18:48:26.584724518 -0400
@@ -66,7 +66,6 @@
--- icecat-45.3.0/storage/moz.build.orig
+++ icecat-45.3.0/storage/moz.build
@@ -108,7 +108,6 @@
 DEFINES['SQLITE_MAX_LIKE_PATTERN_LENGTH'] = 50000
 
 LOCAL_INCLUDES += [


@@ 23,13 23,28 @@ Do not use headers from bundled libraries.
     '/dom/base',
 ]
 
--- icecat-38.3.0/dom/indexedDB/moz.build.orig	2015-10-12 19:35:00.000000000 -0400
+++ icecat-38.3.0/dom/indexedDB/moz.build	2015-10-13 19:10:10.528756487 -0400
@@ -91,7 +91,6 @@
 FAIL_ON_WARNINGS = True
--- icecat-45.3.0/dom/indexedDB/moz.build.orig
+++ icecat-45.3.0/dom/indexedDB/moz.build
@@ -96,7 +96,6 @@
     SOURCES['Key.cpp'].flags += ['-Wno-error=type-limits']
 
 LOCAL_INCLUDES += [
-    '/db/sqlite3/src',
     '/dom/base',
     '/dom/storage',
     '/dom/workers',
--- icecat-45.3.0/modules/libmar/tests/Makefile.in.orig
+++ icecat-45.3.0/modules/libmar/tests/Makefile.in
@@ -10,12 +10,5 @@
 ifndef MOZ_PROFILE_GENERATE
 libs::
 	$(INSTALL) ../tool/signmar$(BIN_SUFFIX) $(TESTROOT)/unit
-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)nss3$(DLL_SUFFIX) $(TESTROOT)/unit
-ifndef MOZ_FOLD_LIBS
-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)nssutil3$(DLL_SUFFIX) $(TESTROOT)/unit
-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)plc4$(DLL_SUFFIX) $(TESTROOT)/unit
-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)nspr4$(DLL_SUFFIX) $(TESTROOT)/unit
-	$(INSTALL) $(DEPTH)/dist/bin/$(DLL_PREFIX)plds4$(DLL_SUFFIX) $(TESTROOT)/unit
-endif
 endif
 endif # Not Android

A gnu/packages/patches/libupnp-CVE-2016-6255.patch => gnu/packages/patches/libupnp-CVE-2016-6255.patch +50 -0
@@ 0,0 1,50 @@
Fix CVE-2016-6255:

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6255
http://www.openwall.com/lists/oss-security/2016/07/18/13

Patch adapted from upstream commit:

https://github.com/mrjimenez/pupnp/commit/d64d6a44906b5aa5306bdf1708531d698654dda5

The upstream change is simplified to unconditionally disable the HTTP
POST feature.

From d64d6a44906b5aa5306bdf1708531d698654dda5 Mon Sep 17 00:00:00 2001
From: Matthew Garrett <mjg59@srcf.ucam.org>
Date: Tue, 23 Feb 2016 13:53:20 -0800
Subject: [PATCH] Don't allow unhandled POSTs to write to the filesystem by
 default

If there's no registered handler for a POST request, the default behaviour
is to write it to the filesystem. Several million deployed devices appear
to have this behaviour, making it possible to (at least) store arbitrary
data on them. Add a configure option that enables this behaviour, and change
the default to just drop POSTs that aren't directly handled.

Signed-off-by: Marcelo Roberto Jimenez <mroberto@users.sourceforge.net>
(cherry picked from commit c91a8a3903367e1163765b73eb4d43be7d7927fa)
---
 configure.ac                         | 9 +++++++++
 upnp/inc/upnpconfig.h.in             | 9 +++++++++
 upnp/src/genlib/net/http/webserver.c | 4 ++++
 3 files changed, 22 insertions(+)

diff --git a/upnp/src/genlib/net/http/webserver.c b/upnp/src/genlib/net/http/webserver.c
index 26bf0f7..7ae8c1e 100644
--- a/upnp/src/genlib/net/http/webserver.c
+++ b/upnp/src/genlib/net/http/webserver.c
@@ -1367,9 +1367,13 @@ static int http_RecvPostMessage(
 		if (Fp == NULL)
 			return HTTP_INTERNAL_SERVER_ERROR;
 	} else {
+#if 0
 		Fp = fopen(filename, "wb");
 		if (Fp == NULL)
 			return HTTP_UNAUTHORIZED;
+#else
+		return HTTP_NOT_FOUND;
+#endif
 	}
 	parser->position = POS_ENTITY;
 	do {

A gnu/packages/patches/qemu-CVE-2016-8576.patch => gnu/packages/patches/qemu-CVE-2016-8576.patch +62 -0
@@ 0,0 1,62 @@
From 20009bdaf95d10bf748fa69b104672d3cfaceddf Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <kraxel@redhat.com>
Date: Fri, 7 Oct 2016 10:15:29 +0200
Subject: [PATCH] xhci: limit the number of link trbs we are willing to process

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/usb/hcd-xhci.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
index 726435c..ee4fa48 100644
--- a/hw/usb/hcd-xhci.c
+++ b/hw/usb/hcd-xhci.c
@@ -54,6 +54,8 @@
  * to the specs when it gets them */
 #define ER_FULL_HACK
 
+#define TRB_LINK_LIMIT  4
+
 #define LEN_CAP         0x40
 #define LEN_OPER        (0x400 + 0x10 * MAXPORTS)
 #define LEN_RUNTIME     ((MAXINTRS + 1) * 0x20)
@@ -1000,6 +1002,7 @@ static TRBType xhci_ring_fetch(XHCIState *xhci, XHCIRing *ring, XHCITRB *trb,
                                dma_addr_t *addr)
 {
     PCIDevice *pci_dev = PCI_DEVICE(xhci);
+    uint32_t link_cnt = 0;
 
     while (1) {
         TRBType type;
@@ -1026,6 +1029,9 @@ static TRBType xhci_ring_fetch(XHCIState *xhci, XHCIRing *ring, XHCITRB *trb,
             ring->dequeue += TRB_SIZE;
             return type;
         } else {
+            if (++link_cnt > TRB_LINK_LIMIT) {
+                return 0;
+            }
             ring->dequeue = xhci_mask64(trb->parameter);
             if (trb->control & TRB_LK_TC) {
                 ring->ccs = !ring->ccs;
@@ -1043,6 +1049,7 @@ static int xhci_ring_chain_length(XHCIState *xhci, const XHCIRing *ring)
     bool ccs = ring->ccs;
     /* hack to bundle together the two/three TDs that make a setup transfer */
     bool control_td_set = 0;
+    uint32_t link_cnt = 0;
 
     while (1) {
         TRBType type;
@@ -1058,6 +1065,9 @@ static int xhci_ring_chain_length(XHCIState *xhci, const XHCIRing *ring)
         type = TRB_TYPE(trb);
 
         if (type == TR_LINK) {
+            if (++link_cnt > TRB_LINK_LIMIT) {
+                return -length;
+            }
             dequeue = xhci_mask64(trb.parameter);
             if (trb.control & TRB_LK_TC) {
                 ccs = !ccs;
-- 
1.8.3.1


A gnu/packages/patches/qemu-CVE-2016-8577.patch => gnu/packages/patches/qemu-CVE-2016-8577.patch +36 -0
@@ 0,0 1,36 @@
Subject: [Qemu-devel] [PATCH] 9pfs: fix potential host memory leak in v9fs_read
From: Li Qiang <liq3ea@gmail.com>

In 9pfs read dispatch function, it doesn't free two QEMUIOVector
object thus causing potential memory leak. This patch avoid this.

Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
 hw/9pfs/9p.c | 5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
index 119ee58..543a791 100644
--- a/hw/9pfs/9p.c
+++ b/hw/9pfs/9p.c
@@ -1826,14 +1826,15 @@ static void v9fs_read(void *opaque)
             if (len < 0) {
                 /* IO error return the error */
                 err = len;
-                goto out;
+                goto out_free_iovec;
             }
         } while (count < max_count && len > 0);
         err = pdu_marshal(pdu, offset, "d", count);
         if (err < 0) {
-            goto out;
+            goto out_free_iovec;
         }
         err += offset + count;
+out_free_iovec:
         qemu_iovec_destroy(&qiov);
         qemu_iovec_destroy(&qiov_full);
     } else if (fidp->fid_type == P9_FID_XATTR) {
-- 
1.8.3.1


A gnu/packages/patches/qemu-CVE-2016-8578.patch => gnu/packages/patches/qemu-CVE-2016-8578.patch +27 -0
@@ 0,0 1,27 @@
From: Li Qiang <liq3ea@gmail.com>

In 9pfs function v9fs_iov_vunmarshal, it will not allocate space
for empty string. This will cause several NULL pointer dereference
issues. this patch fix this issue.

Signed-off-by: Li Qiang <liq3ea@gmail.com>
---
 fsdev/9p-iov-marshal.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fsdev/9p-iov-marshal.c b/fsdev/9p-iov-marshal.c
index 663cad5..1d16f8d 100644
--- a/fsdev/9p-iov-marshal.c
+++ b/fsdev/9p-iov-marshal.c
@@ -125,7 +125,7 @@ ssize_t v9fs_iov_vunmarshal(struct iovec *out_sg, int out_num, size_t offset,
                 str->data = g_malloc(str->size + 1);
                 copied = v9fs_unpack(str->data, out_sg, out_num, offset,
                                      str->size);
-                if (copied > 0) {
+                if (copied >= 0) {
                     str->data[str->size] = 0;
                 } else {
                     v9fs_string_free(str);
-- 
1.8.3.1


D gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch => gnu/packages/patches/wpa-supplicant-CVE-2015-5310.patch +0 -32
@@ 1,32 0,0 @@
From 6b12d93d2c7428a34bfd4b3813ba339ed57b698a Mon Sep 17 00:00:00 2001
From: Jouni Malinen <j@w1.fi>
Date: Sun, 25 Oct 2015 15:45:50 +0200
Subject: [PATCH] WNM: Ignore Key Data in WNM Sleep Mode Response frame if no
 PMF in use

WNM Sleep Mode Response frame is used to update GTK/IGTK only if PMF is
enabled. Verify that PMF is in use before using this field on station
side to avoid accepting unauthenticated key updates. (CVE-2015-5310)

Signed-off-by: Jouni Malinen <j@w1.fi>
---
 wpa_supplicant/wnm_sta.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/wpa_supplicant/wnm_sta.c b/wpa_supplicant/wnm_sta.c
index 954de67..7d79499 100644
--- a/wpa_supplicant/wnm_sta.c
+++ b/wpa_supplicant/wnm_sta.c
@@ -187,6 +187,12 @@ static void wnm_sleep_mode_exit_success(struct wpa_supplicant *wpa_s,
 	end = ptr + key_len_total;
 	wpa_hexdump_key(MSG_DEBUG, "WNM: Key Data", ptr, key_len_total);
 
+	if (key_len_total && !wpa_sm_pmf_enabled(wpa_s->wpa)) {
+		wpa_msg(wpa_s, MSG_INFO,
+			"WNM: Ignore Key Data in WNM-Sleep Mode Response - PMF not enabled");
+		return;
+	}
+
 	while (ptr + 1 < end) {
 		if (ptr + 2 + ptr[1] > end) {
 			wpa_printf(MSG_DEBUG, "WNM: Invalid Key Data element "

D gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch => gnu/packages/patches/wpa-supplicant-CVE-2015-5314.patch +0 -51
@@ 1,51 0,0 @@
From bef802ece03f9ae9d52a21f0cf4f1bc2c5a1f8aa Mon Sep 17 00:00:00 2001
From: Jouni Malinen <j@w1.fi>
Date: Sun, 1 Nov 2015 18:24:16 +0200
Subject: [PATCH] EAP-pwd server: Fix last fragment length validation

All but the last fragment had their length checked against the remaining
room in the reassembly buffer. This allowed a suitably constructed last
fragment frame to try to add extra data that would go beyond the buffer.
The length validation code in wpabuf_put_data() prevents an actual
buffer write overflow from occurring, but this results in process
termination. (CVE-2015-5314)

Signed-off-by: Jouni Malinen <j@w1.fi>
---
 src/eap_server/eap_server_pwd.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/eap_server/eap_server_pwd.c b/src/eap_server/eap_server_pwd.c
index cb83ff7..9f787ab 100644
--- a/src/eap_server/eap_server_pwd.c
+++ b/src/eap_server/eap_server_pwd.c
@@ -970,7 +970,7 @@ static void eap_pwd_process(struct eap_sm *sm, void *priv,
 	/*
 	 * the first and all intermediate fragments have the M bit set
 	 */
-	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
+	if (EAP_PWD_GET_MORE_BIT(lm_exch) || data->in_frag_pos) {
 		if ((data->in_frag_pos + len) > wpabuf_size(data->inbuf)) {
 			wpa_printf(MSG_DEBUG, "EAP-pwd: Buffer overflow "
 				   "attack detected! (%d+%d > %d)",
@@ -981,6 +981,8 @@ static void eap_pwd_process(struct eap_sm *sm, void *priv,
 		}
 		wpabuf_put_data(data->inbuf, pos, len);
 		data->in_frag_pos += len;
+	}
+	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
 		wpa_printf(MSG_DEBUG, "EAP-pwd: Got a %d byte fragment",
 			   (int) len);
 		return;
@@ -990,8 +992,6 @@ static void eap_pwd_process(struct eap_sm *sm, void *priv,
 	 * buffering fragments so that's how we know it's the last)
 	 */
 	if (data->in_frag_pos) {
-		wpabuf_put_data(data->inbuf, pos, len);
-		data->in_frag_pos += len;
 		pos = wpabuf_head_u8(data->inbuf);
 		len = data->in_frag_pos;
 		wpa_printf(MSG_DEBUG, "EAP-pwd: Last fragment, %d bytes",
-- 
1.9.1


D gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch => gnu/packages/patches/wpa-supplicant-CVE-2015-5315.patch +0 -54
@@ 1,54 0,0 @@
From 8057821706784608b828e769ccefbced95591e50 Mon Sep 17 00:00:00 2001
From: Jouni Malinen <j@w1.fi>
Date: Sun, 1 Nov 2015 18:18:17 +0200
Subject: [PATCH] EAP-pwd peer: Fix last fragment length validation

All but the last fragment had their length checked against the remaining
room in the reassembly buffer. This allowed a suitably constructed last
fragment frame to try to add extra data that would go beyond the buffer.
The length validation code in wpabuf_put_data() prevents an actual
buffer write overflow from occurring, but this results in process
termination. (CVE-2015-5315)

Signed-off-by: Jouni Malinen <j@w1.fi>
---
 src/eap_peer/eap_pwd.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
index 1f78544..75ceef1 100644
--- a/src/eap_peer/eap_pwd.c
+++ b/src/eap_peer/eap_pwd.c
@@ -903,7 +903,7 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
 	/*
 	 * buffer and ACK the fragment
 	 */
-	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
+	if (EAP_PWD_GET_MORE_BIT(lm_exch) || data->in_frag_pos) {
 		data->in_frag_pos += len;
 		if (data->in_frag_pos > wpabuf_size(data->inbuf)) {
 			wpa_printf(MSG_INFO, "EAP-pwd: Buffer overflow attack "
@@ -916,7 +916,8 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
 			return NULL;
 		}
 		wpabuf_put_data(data->inbuf, pos, len);
-
+	}
+	if (EAP_PWD_GET_MORE_BIT(lm_exch)) {
 		resp = eap_msg_alloc(EAP_VENDOR_IETF, EAP_TYPE_PWD,
 				     EAP_PWD_HDR_SIZE,
 				     EAP_CODE_RESPONSE, eap_get_id(reqData));
@@ -930,10 +931,8 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
 	 * we're buffering and this is the last fragment
 	 */
 	if (data->in_frag_pos) {
-		wpabuf_put_data(data->inbuf, pos, len);
 		wpa_printf(MSG_DEBUG, "EAP-pwd: Last fragment, %d bytes",
 			   (int) len);
-		data->in_frag_pos += len;
 		pos = wpabuf_head_u8(data->inbuf);
 		len = data->in_frag_pos;
 	}
-- 
1.9.1


D gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch => gnu/packages/patches/wpa-supplicant-CVE-2015-5316.patch +0 -34
@@ 1,34 0,0 @@
From 95577884ca4fa76be91344ff7a8d5d1e6dc3da61 Mon Sep 17 00:00:00 2001
From: Jouni Malinen <j@w1.fi>
Date: Sun, 1 Nov 2015 19:35:44 +0200
Subject: [PATCH] EAP-pwd peer: Fix error path for unexpected Confirm message

If the Confirm message is received from the server before the Identity
exchange has been completed, the group has not yet been determined and
data->grp is NULL. The error path in eap_pwd_perform_confirm_exchange()
did not take this corner case into account and could end up
dereferencing a NULL pointer and terminating the process if invalid
message sequence is received. (CVE-2015-5316)

Signed-off-by: Jouni Malinen <j@w1.fi>
---
 src/eap_peer/eap_pwd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
index 75ceef1..892b590 100644
--- a/src/eap_peer/eap_pwd.c
+++ b/src/eap_peer/eap_pwd.c
@@ -774,7 +774,8 @@ eap_pwd_perform_confirm_exchange(struct eap_sm *sm, struct eap_pwd_data *data,
 	wpabuf_put_data(data->outbuf, conf, SHA256_MAC_LEN);
 
 fin:
-	bin_clear_free(cruft, BN_num_bytes(data->grp->prime));
+	if (data->grp)
+		bin_clear_free(cruft, BN_num_bytes(data->grp->prime));
 	BN_clear_free(x);
 	BN_clear_free(y);
 	if (data->outbuf == NULL) {
-- 
1.9.1


D gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch => gnu/packages/patches/wpa-supplicant-CVE-2016-4476.patch +0 -82
@@ 1,82 0,0 @@
From ecbb0b3dc122b0d290987cf9c84010bbe53e1022 Mon Sep 17 00:00:00 2001
From: Jouni Malinen <jouni@qca.qualcomm.com>
Date: Fri, 4 Mar 2016 17:20:18 +0200
Subject: [PATCH 1/5] WPS: Reject a Credential with invalid passphrase

WPA/WPA2-Personal passphrase is not allowed to include control
characters. Reject a Credential received from a WPS Registrar both as
STA (Credential) and AP (AP Settings) if the credential is for WPAPSK or
WPA2PSK authentication type and includes an invalid passphrase.

This fixes an issue where hostapd or wpa_supplicant could have updated
the configuration file PSK/passphrase parameter with arbitrary data from
an external device (Registrar) that may not be fully trusted. Should
such data include a newline character, the resulting configuration file
could become invalid and fail to be parsed.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
---
 src/utils/common.c         | 12 ++++++++++++
 src/utils/common.h         |  1 +
 src/wps/wps_attr_process.c | 10 ++++++++++
 3 files changed, 23 insertions(+)

diff --git a/src/utils/common.c b/src/utils/common.c
index 450e2c6..27b7c02 100644
--- a/src/utils/common.c
+++ b/src/utils/common.c
@@ -697,6 +697,18 @@ int is_hex(const u8 *data, size_t len)
 }
 
 
+int has_ctrl_char(const u8 *data, size_t len)
+{
+	size_t i;
+
+	for (i = 0; i < len; i++) {
+		if (data[i] < 32 || data[i] == 127)
+			return 1;
+	}
+	return 0;
+}
+
+
 size_t merge_byte_arrays(u8 *res, size_t res_len,
 			 const u8 *src1, size_t src1_len,
 			 const u8 *src2, size_t src2_len)
diff --git a/src/utils/common.h b/src/utils/common.h
index 701dbb2..a972240 100644
--- a/src/utils/common.h
+++ b/src/utils/common.h
@@ -488,6 +488,7 @@ const char * wpa_ssid_txt(const u8 *ssid, size_t ssid_len);
 
 char * wpa_config_parse_string(const char *value, size_t *len);
 int is_hex(const u8 *data, size_t len);
+int has_ctrl_char(const u8 *data, size_t len);
 size_t merge_byte_arrays(u8 *res, size_t res_len,
 			 const u8 *src1, size_t src1_len,
 			 const u8 *src2, size_t src2_len);
diff --git a/src/wps/wps_attr_process.c b/src/wps/wps_attr_process.c
index eadb22f..e8c4579 100644
--- a/src/wps/wps_attr_process.c
+++ b/src/wps/wps_attr_process.c
@@ -229,6 +229,16 @@ static int wps_workaround_cred_key(struct wps_credential *cred)
 		cred->key_len--;
 #endif /* CONFIG_WPS_STRICT */
 	}
+
+
+	if (cred->auth_type & (WPS_AUTH_WPAPSK | WPS_AUTH_WPA2PSK) &&
+	    (cred->key_len < 8 || has_ctrl_char(cred->key, cred->key_len))) {
+		wpa_printf(MSG_INFO, "WPS: Reject credential with invalid WPA/WPA2-Personal passphrase");
+		wpa_hexdump_ascii_key(MSG_INFO, "WPS: Network Key",
+				      cred->key, cred->key_len);
+		return -1;
+	}
+
 	return 0;
 }
 
-- 
1.9.1


D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch => gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt1.patch +0 -51
@@ 1,51 0,0 @@
From 73e4abb24a936014727924d8b0b2965edfc117dd Mon Sep 17 00:00:00 2001
From: Jouni Malinen <jouni@qca.qualcomm.com>
Date: Fri, 4 Mar 2016 18:46:41 +0200
Subject: [PATCH 2/5] Reject psk parameter set with invalid passphrase
 character

WPA/WPA2-Personal passphrase is not allowed to include control
characters. Reject a passphrase configuration attempt if that passphrase
includes an invalid passphrase.

This fixes an issue where wpa_supplicant could have updated the
configuration file psk parameter with arbitrary data from the control
interface or D-Bus interface. While those interfaces are supposed to be
accessible only for trusted users/applications, it may be possible that
an untrusted user has access to a management software component that
does not validate the passphrase value before passing it to
wpa_supplicant.

This could allow such an untrusted user to inject up to 63 characters of
almost arbitrary data into the configuration file. Such configuration
file could result in wpa_supplicant trying to load a library (e.g.,
opensc_engine_path, pkcs11_engine_path, pkcs11_module_path,
load_dynamic_eap) from user controlled location when starting again.
This would allow code from that library to be executed under the
wpa_supplicant process privileges.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
---
 wpa_supplicant/config.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index b1c7870..fdd9643 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -478,6 +478,12 @@ static int wpa_config_parse_psk(const struct parse_data *data,
 		}
 		wpa_hexdump_ascii_key(MSG_MSGDUMP, "PSK (ASCII passphrase)",
 				      (u8 *) value, len);
+		if (has_ctrl_char((u8 *) value, len)) {
+			wpa_printf(MSG_ERROR,
+				   "Line %d: Invalid passphrase character",
+				   line);
+			return -1;
+		}
 		if (ssid->passphrase && os_strlen(ssid->passphrase) == len &&
 		    os_memcmp(ssid->passphrase, value, len) == 0) {
 			/* No change to the previously configured value */
-- 
1.9.1


D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch => gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt2.patch +0 -82
@@ 1,82 0,0 @@
From 0fe5a234240a108b294a87174ad197f6b5cb38e9 Mon Sep 17 00:00:00 2001
From: Paul Stewart <pstew@google.com>
Date: Thu, 3 Mar 2016 15:40:19 -0800
Subject: [PATCH 3/5] Remove newlines from wpa_supplicant config network
 output

Spurious newlines output while writing the config file can corrupt the
wpa_supplicant configuration. Avoid writing these for the network block
parameters. This is a generic filter that cover cases that may not have
been explicitly addressed with a more specific commit to avoid control
characters in the psk parameter.

Signed-off-by: Paul Stewart <pstew@google.com>
---
 src/utils/common.c      | 11 +++++++++++
 src/utils/common.h      |  1 +
 wpa_supplicant/config.c | 15 +++++++++++++--
 3 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/utils/common.c b/src/utils/common.c
index 27b7c02..9856463 100644
--- a/src/utils/common.c
+++ b/src/utils/common.c
@@ -709,6 +709,17 @@ int has_ctrl_char(const u8 *data, size_t len)
 }
 
 
+int has_newline(const char *str)
+{
+	while (*str) {
+		if (*str == '\n' || *str == '\r')
+			return 1;
+		str++;
+	}
+	return 0;
+}
+
+
 size_t merge_byte_arrays(u8 *res, size_t res_len,
 			 const u8 *src1, size_t src1_len,
 			 const u8 *src2, size_t src2_len)
diff --git a/src/utils/common.h b/src/utils/common.h
index a972240..d19927b 100644
--- a/src/utils/common.h
+++ b/src/utils/common.h
@@ -489,6 +489,7 @@ const char * wpa_ssid_txt(const u8 *ssid, size_t ssid_len);
 char * wpa_config_parse_string(const char *value, size_t *len);
 int is_hex(const u8 *data, size_t len);
 int has_ctrl_char(const u8 *data, size_t len);
+int has_newline(const char *str);
 size_t merge_byte_arrays(u8 *res, size_t res_len,
 			 const u8 *src1, size_t src1_len,
 			 const u8 *src2, size_t src2_len);
diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index fdd9643..eb97cd5 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -2699,8 +2699,19 @@ char * wpa_config_get(struct wpa_ssid *ssid, const char *var)
 
 	for (i = 0; i < NUM_SSID_FIELDS; i++) {
 		const struct parse_data *field = &ssid_fields[i];
-		if (os_strcmp(var, field->name) == 0)
-			return field->writer(field, ssid);
+		if (os_strcmp(var, field->name) == 0) {
+			char *ret = field->writer(field, ssid);
+
+			if (ret && has_newline(ret)) {
+				wpa_printf(MSG_ERROR,
+					   "Found newline in value for %s; not returning it",
+					   var);
+				os_free(ret);
+				ret = NULL;
+			}
+
+			return ret;
+		}
 	}
 
 	return NULL;
-- 
1.9.1


D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch => gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt3.patch +0 -62
@@ 1,62 0,0 @@
From b166cd84a77a6717be9600bf95378a0055d6f5a5 Mon Sep 17 00:00:00 2001
From: Jouni Malinen <jouni@qca.qualcomm.com>
Date: Tue, 5 Apr 2016 23:33:10 +0300
Subject: [PATCH 4/5] Reject SET_CRED commands with newline characters in the
 string values

Most of the cred block parameters are written as strings without
filtering and if there is an embedded newline character in the value,
unexpected configuration file data might be written.

This fixes an issue where wpa_supplicant could have updated the
configuration file cred parameter with arbitrary data from the control
interface or D-Bus interface. While those interfaces are supposed to be
accessible only for trusted users/applications, it may be possible that
an untrusted user has access to a management software component that
does not validate the credential value before passing it to
wpa_supplicant.

This could allow such an untrusted user to inject almost arbitrary data
into the configuration file. Such configuration file could result in
wpa_supplicant trying to load a library (e.g., opensc_engine_path,
pkcs11_engine_path, pkcs11_module_path, load_dynamic_eap) from user
controlled location when starting again. This would allow code from that
library to be executed under the wpa_supplicant process privileges.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
---
 wpa_supplicant/config.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index eb97cd5..69152ef 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -2896,6 +2896,8 @@ int wpa_config_set_cred(struct wpa_cred *cred, const char *var,
 
 	if (os_strcmp(var, "password") == 0 &&
 	    os_strncmp(value, "ext:", 4) == 0) {
+		if (has_newline(value))
+			return -1;
 		str_clear_free(cred->password);
 		cred->password = os_strdup(value);
 		cred->ext_password = 1;
@@ -2946,9 +2948,14 @@ int wpa_config_set_cred(struct wpa_cred *cred, const char *var,
 	}
 
 	val = wpa_config_parse_string(value, &len);
-	if (val == NULL) {
+	if (val == NULL ||
+	    (os_strcmp(var, "excluded_ssid") != 0 &&
+	     os_strcmp(var, "roaming_consortium") != 0 &&
+	     os_strcmp(var, "required_roaming_consortium") != 0 &&
+	     has_newline(val))) {
 		wpa_printf(MSG_ERROR, "Line %d: invalid field '%s' string "
 			   "value '%s'.", line, var, value);
+		os_free(val);
 		return -1;
 	}
 
-- 
1.9.1


D gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch => gnu/packages/patches/wpa-supplicant-CVE-2016-4477-pt4.patch +0 -50
@@ 1,50 0,0 @@
From 2a3f56502b52375c3bf113cf92adfa99bad6b488 Mon Sep 17 00:00:00 2001
From: Jouni Malinen <jouni@qca.qualcomm.com>
Date: Tue, 5 Apr 2016 23:55:48 +0300
Subject: [PATCH 5/5] Reject SET commands with newline characters in the
 string values

Many of the global configuration parameters are written as strings
without filtering and if there is an embedded newline character in the
value, unexpected configuration file data might be written.

This fixes an issue where wpa_supplicant could have updated the
configuration file global parameter with arbitrary data from the control
interface or D-Bus interface. While those interfaces are supposed to be
accessible only for trusted users/applications, it may be possible that
an untrusted user has access to a management software component that
does not validate the value of a parameter before passing it to
wpa_supplicant.

This could allow such an untrusted user to inject almost arbitrary data
into the configuration file. Such configuration file could result in
wpa_supplicant trying to load a library (e.g., opensc_engine_path,
pkcs11_engine_path, pkcs11_module_path, load_dynamic_eap) from user
controlled location when starting again. This would allow code from that
library to be executed under the wpa_supplicant process privileges.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
---
 wpa_supplicant/config.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
index 69152ef..d9a1603 100644
--- a/wpa_supplicant/config.c
+++ b/wpa_supplicant/config.c
@@ -3764,6 +3764,12 @@ static int wpa_global_config_parse_str(const struct global_parse_data *data,
 		return -1;
 	}
 
+	if (has_newline(pos)) {
+		wpa_printf(MSG_ERROR, "Line %d: invalid %s value with newline",
+			   line, data->name);
+		return -1;
+	}
+
 	tmp = os_strdup(pos);
 	if (tmp == NULL)
 		return -1;
-- 
1.9.1


M gnu/packages/python.scm => gnu/packages/python.scm +32 -5
@@ 3744,6 3744,34 @@ routines such as routines for numerical integration and optimization.")
(define-public python2-scipy
  (package-with-python2 python-scipy))

(define-public python-socksipy-branch
  (package
    (name "python-socksipy-branch")
    (version "1.01")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "SocksiPy-branch" version))
       (sha256
        (base32
         "01l41v4g7fy9fzvinmjxy6zcbhgqaif8dhdqm4w90fwcw9h51a8p"))))
    (build-system python-build-system)
    (arguments
     `(#:tests? #f)) ; There are no tests
    (home-page "https://code.google.com/archive/p/socksipy-branch/")
    (synopsis "Python SOCKS module")
    (description
     "SocksiPy - A Python SOCKS client module.  It provides a
socket-like interface that supports connections to any TCP
service through the use of a SOCKS4, SOCKS5 or HTTP proxy.
The original version was developed by Dan Haim, this is a
branch created by Mario Vilas to address some open issues,
as the original project seems to have been abandoned circa 2007.")
    (license license:bsd-3)))

(define-public python2-socksipy-branch
  (package-with-python2 python-socksipy-branch))

(define-public python-sqlalchemy
  (package
    (name "python-sqlalchemy")


@@ 5876,19 5904,18 @@ object to help create WSGI responses.")
(define-public python-xlrd
  (package
    (name "python-xlrd")
    (version "0.9.4")
    (version "1.0.0")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://pypi.python.org/packages/source/x/"
                                  "xlrd/xlrd-" version ".tar.gz"))
              (uri (pypi-uri "xlrd" version))
              (sha256
               (base32
                "0wpa55nvidmm5m2qr622dsh3cj46akdk0h3zjgzschcmydck73cf"))))
                "0s8hjiz01vbhy85xalrz0qlsmd9ypf36zjqrf97hh984spapvy0g"))))
    (build-system python-build-system)
    (arguments
     `(#:phases
       (modify-phases %standard-phases
         ;; Current test in setup.py does not work as of 0.9.4, so use nose to
         ;; Current test in setup.py does not work as of 1.0.0, so use nose to
         ;; run tests instead for now.
         (replace 'check (lambda _ (zero? (system* "nosetests")))))))
    (native-inputs `(("python-nose"       ,python-nose)

M gnu/packages/qemu.scm => gnu/packages/qemu.scm +4 -1
@@ 76,7 76,10 @@
                                 version ".tar.bz2"))
             (sha256
              (base32
               "0lqyz01z90nvxpc3nx4djbci7hx62cwvs5zwd6phssds0sap6vij"))))
               "0lqyz01z90nvxpc3nx4djbci7hx62cwvs5zwd6phssds0sap6vij"))
             (patches (search-patches "qemu-CVE-2016-8576.patch"
                                      "qemu-CVE-2016-8577.patch"
                                      "qemu-CVE-2016-8578.patch"))))
    (build-system gnu-build-system)
    (arguments
     '(;; Running tests in parallel can occasionally lead to failures, like:

M gnu/packages/ruby.scm => gnu/packages/ruby.scm +10 -10
@@ 423,13 423,13 @@ expectations and mocks frameworks.")
(define-public bundler
  (package
    (name "bundler")
    (version "1.12.5")
    (version "1.13.2")
    (source (origin
              (method url-fetch)
              (uri (rubygems-uri "bundler" version))
              (sha256
               (base32
                "1q84xiwm9j771lpmiply0ls9l2bpvl5axn3jblxjvrldh8di2pkc"))))
                "05gwyhfn103vrmrw13r3n78bcl75mrj82ipsbazcl08wg1bql7x6"))))
    (build-system ruby-build-system)
    (arguments
     '(#:tests? #f)) ; avoid dependency cycles


@@ 2115,7 2115,7 @@ aware transformations between times in different time zones.")
(define-public ruby-tzinfo-data
  (package
    (name "ruby-tzinfo-data")
    (version "1.2016.4")
    (version "1.2016.7")
    (source
     (origin
       (method url-fetch)


@@ 2128,7 2128,7 @@ aware transformations between times in different time zones.")
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32
         "0jnm8i379hn48cq5n39j7wzm08i0mw73kqzx3cqbxpiwlb1hnz80"))
         "0vh75hkfmqk4hdjv6nm7acw64izwpnv7slkmh2kj7qlfz133yh9l"))
       ;; Remove the known test failure.
       ;; https://github.com/tzinfo/tzinfo-data/issues/10
       ;; https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1587128


@@ 3223,14 3223,14 @@ that TURN is no longer being maintained.")
(define-public ruby-mime-types-data
  (package
    (name "ruby-mime-types-data")
    (version "3.2016.0221")
    (version "3.2016.0521")
    (source
     (origin
       (method url-fetch)
       (uri (rubygems-uri "mime-types-data" version))
       (sha256
        (base32
         "05ygjn0nnfh6yp1wsi574jckk95wqg9a6g598wk4svvrkmkrzkpn"))))
         "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm"))))
    (build-system ruby-build-system)
    (native-inputs
     `(("ruby-hoe" ,ruby-hoe)))


@@ 3467,14 3467,14 @@ support to both Ruby and JRuby.  It uses @code{unf_ext} on CRuby and
(define-public ruby-domain-name
  (package
    (name "ruby-domain-name")
    (version "0.5.20160310")
    (version "0.5.20160826")
    (source
     (origin
       (method url-fetch)
       (uri (rubygems-uri "domain_name" version))
       (sha256
        (base32
         "0g1175zspkqhlvl9s11g7p2nbmqpvpxxv02q8csd0ryc81laapys"))))
         "0rg7gvp45xmb5qz8ydp7ivw05hhplh6k7mbawrpvkysl2c77w5xx"))))
    (build-system ruby-build-system)
    (arguments
     `(#:phases


@@ 4041,14 4041,14 @@ generation.")
(define-public ruby-sequel
  (package
    (name "ruby-sequel")
    (version "4.34.0")
    (version "4.39.0")
    (source
     (origin
       (method url-fetch)
       (uri (rubygems-uri "sequel" version))
       (sha256
        (base32
         "0qscddpfwcajggxvbm4a4jv8kkpn6q056bgdg03km34bz8bis1x1"))))
         "01zqd6mi9wvhbg76b91k35jppha0c944ar9f816gi400cf9817bg"))))
    (build-system ruby-build-system)
    (arguments
     '(#:tests? #f)) ; Avoid dependency loop with ruby-minitest-hooks.

M gnu/packages/samba.scm => gnu/packages/samba.scm +9 -9
@@ 98,14 98,14 @@ anywhere.")
(define-public samba
  (package
    (name "samba")
    (version "4.3.11")
    (version "4.5.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "https://www.samba.org/samba/ftp/stable/samba-"
             (uri (string-append "https://download.samba.org/pub/samba/stable/samba-"
                                 version ".tar.gz"))
             (sha256
              (base32
               "1v2grwivm6rasz1ganbybs0ikz1lydaniy65kxf1v8rl1qqngach"))))
               "11mmyqag2i4yy6dikcggw776n0laxxr0rxhry72x5pa6nwws9afk"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases


@@ 164,14 164,14 @@ Desktops into Active Directory environments using the winbind daemon.")
(define-public talloc
  (package
    (name "talloc")
    (version "2.1.7")
    (version "2.1.8")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://www.samba.org/ftp/talloc/talloc-"
                                  version ".tar.gz"))
              (sha256
               (base32
                "01m0kzndciyj43z1zd2nc61xqgh9knjv0w7lk1rrrlj8irr4w58r"))))
                "0c3ihyb0jd8mhvi7gg2mr5w1zl2habx6jlkbyxzyckad2q8lkl92"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases


@@ 201,14 201,14 @@ destructors.  It is the core memory allocator used in Samba.")
(define-public tevent
  (package
    (name "tevent")
    (version "0.9.28")
    (version "0.9.31")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://www.samba.org/ftp/tevent/tevent-"
                                  version ".tar.gz"))
              (sha256
               (base32
                "0a9ml52jjnzz7qg9z750mavlvs1yibjwrzy4yl55dc95j0vm7n84"))))
                "1z1bij9gccps34q8zakr1k7k3gpqs25jas20x1hch16qd8jz44sa"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases


@@ 236,14 236,14 @@ many event types, including timers, signals, and the classic file descriptor eve
(define-public ldb
  (package
    (name "ldb")
    (version "1.1.26")
    (version "1.1.27")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://www.samba.org/ftp/ldb/ldb-"
                                  version ".tar.gz"))
              (sha256
               (base32
                "1rmjv12pf57vga8s5z9p9d90rlfckc1lqjbcp89r83cq5fkwfhw8"))))
                "1b1mkl5p8swb67s9aswavhzswlib34hpgsv66zgns009paf2df6d"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases

M gnu/packages/scanner.scm => gnu/packages/scanner.scm +4 -5
@@ 29,15 29,15 @@
(define-public sane-backends
  (package
    (name "sane-backends")
    (version "1.0.24")
    (version "1.0.25")
    (source (origin
             (method url-fetch)
             (uri (string-append 
                   "https://alioth.debian.org/frs/download.php/file/3958/"
             (uri (string-append
                   "https://alioth.debian.org/frs/download.php/file/4146/"
                   name "-" version ".tar.gz"))
             (sha256
              (base32
               "0ba68m6bzni54axjk15i51rya7hfsdliwvqyan5msl7iaid0iir7"))))
               "0b3fvhrxl4l82bf3v0j47ypjv6a0k5lqbgknrq1agpmjca6vmmx4"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("pkg-config" ,pkg-config)))


@@ 73,4 73,3 @@ proving access to any raster image scanner hardware (flatbed scanner,
hand-held scanner, video- and still-cameras, frame-grabbers, etc.).  The
package contains the library and drivers.")
    (license licence:gpl2+))) ; plus linking exception


M gnu/packages/ssh.scm => gnu/packages/ssh.scm +23 -42
@@ 80,20 80,6 @@ remote applications.")
    (home-page "http://www.libssh.org")
    (license license:lgpl2.1+)))

(define libssh-0.6 ; kept private for use in guile-ssh
  (package (inherit libssh)
    (version "0.6.5")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://red.libssh.org/attachments/"
                                  "download/121/libssh-"
                                  version ".tar.xz"))
              (sha256
               (base32
                "0b6wyx6bwbb8jpn8x4rhlrdiqwqrwrs0mxjmrnqykm9kw1ijgm8g"))
              (patches (search-patches
                        "libssh-0.6.5-CVE-2016-0739.patch"))))))

(define-public libssh2
  (package
   (name "libssh2")


@@ 209,7 195,7 @@ Additionally, various channel-specific options can be negotiated.")
(define-public guile-ssh
  (package
    (name "guile-ssh")
    (version "0.9.0")
    (version "0.10.1")
    (source (origin
              ;; ftp://memory-heap.org/software/guile-ssh/guile-ssh-VERSION.tar.gz
              ;; exists, but the server appears to be too slow and unreliable.


@@ 220,34 206,29 @@ Additionally, various channel-specific options can be negotiated.")
              (file-name (string-append name "-" version "-checkout"))
              (sha256
               (base32
                "04zs1cykwdyj51ag62ymrkgsja9dbhbaaglkvbfbac0bkxl2ir6d"))))
                "0ky77kr7rnkhbq938bir61mlr8b86lfjcjjb1bxx1y1fhimsiz72"))))
    (build-system gnu-build-system)
    (arguments
     '(#:phases (alist-cons-after
                 'unpack 'autoreconf
                 (lambda* (#:key inputs #:allow-other-keys)
                   (chmod "doc/version.texi" #o777) ;make it writable
                   (zero? (system* "autoreconf" "-vfi")))
                 (alist-cons-after
                  'install 'fix-libguile-ssh-file-name
                  (lambda* (#:key outputs #:allow-other-keys)
                    (let* ((out      (assoc-ref outputs "out"))
                           (libdir   (string-append out "/lib"))
                           (guiledir (string-append out
                                                    "/share/guile/site/2.0")))
                      (substitute* (find-files guiledir ".scm")
                        (("\"libguile-ssh\"")
                         (string-append "\"" libdir "/libguile-ssh\"")))

                      ;; Make sure it works.
                      (setenv "GUILE_LOAD_PATH" guiledir)
                      (setenv "GUILE_LOAD_COMPILED_PATH" guiledir)
                      (zero?
                       (system* "guile" "-c" "(use-modules (ssh session))"))))
                  %standard-phases))
       #:configure-flags (list (string-append "--with-guilesitedir="
                                              (assoc-ref %outputs "out")
                                              "/share/guile/site/2.0"))
     '(#:phases (modify-phases %standard-phases
                  (add-after 'unpack 'autoreconf
                    (lambda* (#:key inputs #:allow-other-keys)
                      (chmod "doc/version.texi" #o777) ;make it writable
                      (zero? (system* "autoreconf" "-vfi"))))
                  (add-before 'build 'fix-libguile-ssh-file-name
                    (lambda* (#:key outputs #:allow-other-keys)
                      ;; Build and install libguile-ssh.so so that we can use
                      ;; its absolute file name in .scm files, before we build
                      ;; the .go files.
                      (and (zero? (system* "make" "install"
                                           "-C" "libguile-ssh"
                                           "-j" (number->string
                                                 (parallel-job-count))))
                           (let* ((out      (assoc-ref outputs "out"))
                                  (libdir   (string-append out "/lib")))
                             (substitute* (find-files "." "\\.scm$")
                               (("\"libguile-ssh\"")
                                (string-append "\"" libdir "/libguile-ssh\"")))
                             #t)))))

       ;; Tests are not parallel-safe.
       #:parallel-tests? #f))


@@ 258,7 239,7 @@ Additionally, various channel-specific options can be negotiated.")
                     ("pkg-config" ,pkg-config)
                     ("which" ,which)))
    (inputs `(("guile" ,guile-2.0)
              ("libssh" ,libssh-0.6)
              ("libssh" ,libssh)
              ("libgcrypt" ,libgcrypt)))
    (synopsis "Guile bindings to libssh")
    (description

M gnu/packages/statistics.scm => gnu/packages/statistics.scm +2 -2
@@ 432,14 432,14 @@ and operations on them using LAPACK and SuiteSparse.")
(define-public r-mgcv
  (package
   (name "r-mgcv")
   (version "1.8-14")
   (version "1.8-15")
   (source
    (origin
     (method url-fetch)
     (uri (cran-uri "mgcv" version))
     (sha256
      (base32
       "0ly9x23q6kd7aqrsb8qjsj8jc597h3068iaqjmkkdv56r5dln29f"))))
       "05xzmsx51y92c0r0yihac8m9d3v1sqnn8ahcgm3q75j8z6zybsjs"))))
   (build-system r-build-system)
   (home-page "http://cran.r-project.org/web/packages/mgcv")
   (synopsis "Mixed generalised additive model computation")

M gnu/packages/tbb.scm => gnu/packages/tbb.scm +3 -3
@@ 28,16 28,16 @@
(define-public tbb
  (package
    (name "tbb")
    (version "2017")
    (version "2017_20160916")
    (source (origin
              (method url-fetch)
              (uri (string-append
                    "https://www.threadingbuildingblocks.org/sites/default"
                    "/files/software_releases/source/"
                    "tbb" version "_20160722oss_src.tgz"))
                    "tbb" version "oss_src.tgz"))
              (sha256
               (base32
                "038rmv3s8si51bjrzwyv8ldqw742fjjdfayi8pmjaq5zw32b8pzx"))
                "1i3zy87gyzw22fvajm039w6g822qzqn7jbmznc8y8c57qpqnf330"))
              (modules '((guix build utils)))
              (snippet
               '(substitute* "build/common.inc"

M gnu/packages/video.scm => gnu/packages/video.scm +2 -2
@@ 1440,7 1440,7 @@ be used for realtime video capture via Linux-specific APIs.")
(define-public obs
  (package
    (name "obs")
    (version "0.15.4")
    (version "0.16.2")
    (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/jp9000/obs-studio"


@@ 1448,7 1448,7 @@ be used for realtime video capture via Linux-specific APIs.")
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
               (base32
                "11bqk0jpp8fp24j0rkjgrv3fdi3xnjyk4wq55j803cg84mn4zsp0"))))
                "0p2grxyaf79hb3nlja23xp7b2vc1w18llvzcyhnjn2lhwfjabcgm"))))
    (build-system cmake-build-system)
    (arguments
     `(#:tests? #f ; no tests

M gnu/packages/web.scm => gnu/packages/web.scm +35 -5
@@ 45,6 45,7 @@
  #:use-module (guix build-system cmake)
  #:use-module (guix build-system r)
  #:use-module (guix build-system trivial)
  #:use-module (guix build-system python)
  #:use-module (gnu packages)
  #:use-module (gnu packages apr)
  #:use-module (gnu packages documentation)


@@ 121,14 122,14 @@ and its related documentation.")
(define-public nginx
  (package
    (name "nginx")
    (version "1.10.1")
    (version "1.11.4")
    (source (origin
              (method url-fetch)
              (uri (string-append "http://nginx.org/download/nginx-"
              (uri (string-append "https://nginx.org/download/nginx-"
                                  version ".tar.gz"))
              (sha256
               (base32
                "00d8hxj8453c7989qd7z4f1mjp0k3ib8k29i1qyf11b4ar35ilqz"))))
                "0fvb09ycxz3xnyynav6ybj6miwh9kv8jcb2vzrmvqhzn8cgiq8h6"))))
    (build-system gnu-build-system)
    (inputs `(("pcre" ,pcre)
              ("openssl" ,openssl)


@@ 140,7 141,8 @@ and its related documentation.")
         (add-before 'configure 'patch-/bin/sh
           (lambda _
             (substitute* "auto/feature"
               (("/bin/sh") (which "bash")))))
               (("/bin/sh") (which "bash")))
             #t))
         (replace 'configure
           (lambda* (#:key outputs #:allow-other-keys)
             (let ((flags


@@ 186,7 188,7 @@ and its related documentation.")
                            (string-append share "/conf"))
               (rename-file (string-append out "/html")
                            (string-append share "/html"))))))))
    (home-page "http://nginx.org")
    (home-page "https://nginx.org")
    (synopsis "HTTP and reverse proxy server")
    (description
     "Nginx (\"engine X\") is a high-performance web and reverse proxy server


@@ 3147,6 3149,34 @@ http://opensearch.a9.com} compatible search engines.")
their web site.")
    (home-page "http://search.cpan.org/~gaas/WWW-RobotRules/")))

(define-public python-feedparser
  (package
    (name "python-feedparser")
    (version "5.2.1")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "feedparser" version ".tar.bz2"))
       (sha256
        (base32
         "00hb4qg2am06g81mygfi1jsbx8830024jm45g6qp9g8fr6am91yf"))))
    (build-system python-build-system)
    (home-page
     "https://github.com/kurtmckee/feedparser")
    (synopsis "Parse feeds in Python")
    (description
     "Universal feed parser which handles RSS 0.9x, RSS 1.0, RSS 2.0,
CDF, Atom 0.3, and Atom 1.0 feeds.")
    (license (list l:bsd-2 ; source code
                   l:freebsd-doc)))) ; documentation

(define-public python2-feedparser
  (let ((base (package-with-python2
               (strip-python2-variant python-feedparser))))
    (package (inherit base)
             (native-inputs
              `(("python2-setuptools" ,python2-setuptools))))))

(define-public r-httpuv
  (package
    (name "r-httpuv")

M gnu/services/xorg.scm => gnu/services/xorg.scm +2 -0
@@ 108,6 108,7 @@ Section \"Files\"
  FontPath \"" font-adobe75dpi "/share/fonts/X11/75dpi\"
  ModulePath \"" xf86-video-vesa "/lib/xorg/modules/drivers\"
  ModulePath \"" xf86-video-fbdev "/lib/xorg/modules/drivers\"
  ModulePath \"" xf86-video-ati "/lib/xorg/modules/drivers\"
  ModulePath \"" xf86-video-modesetting "/lib/xorg/modules/drivers\"
  ModulePath \"" xf86-video-cirrus "/lib/xorg/modules/drivers\"
  ModulePath \"" xf86-video-intel "/lib/xorg/modules/drivers\"


@@ 145,6 146,7 @@ EndSection
(define %default-xorg-modules
  (list xf86-video-vesa
        xf86-video-fbdev
        xf86-video-ati
        xf86-video-modesetting
        xf86-video-cirrus
        xf86-video-intel

A guix/build-system/asdf.scm => guix/build-system/asdf.scm +360 -0
@@ 0,0 1,360 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
;;;
;;; 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-system asdf)
  #:use-module (guix store)
  #:use-module (guix utils)
  #:use-module (guix packages)
  #:use-module (guix derivations)
  #:use-module (guix search-paths)
  #:use-module (guix build-system)
  #:use-module (guix build-system gnu)
  #:use-module (ice-9 match)
  #:use-module (ice-9 regex)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-26)
  #:export (%asdf-build-system-modules
            %asdf-build-modules
            asdf-build
            asdf-build-system/sbcl
            asdf-build-system/ecl
            asdf-build-system/source
            sbcl-package->cl-source-package
            sbcl-package->ecl-package))

;; Commentary:
;;
;; Standard build procedure for asdf packages.  This is implemented as an
;; extension of 'gnu-build-system'.
;;
;; Code:

(define %asdf-build-system-modules
  ;; Imported build-side modules
  `((guix build asdf-build-system)
    (guix build lisp-utils)
    ,@%gnu-build-system-modules))

(define %asdf-build-modules
  ;; Used (visible) build-side modules
  '((guix build asdf-build-system)
    (guix build utils)
    (guix build lisp-utils)))

(define (default-lisp implementation)
  "Return the default package for the lisp IMPLEMENTATION."
  ;; Lazily resolve the binding to avoid a circular dependancy.
  (let ((lisp-module (resolve-interface '(gnu packages lisp))))
    (module-ref lisp-module implementation)))

(define* (lower/source name
                       #:key source inputs outputs native-inputs system target
                       #:allow-other-keys
                       #:rest arguments)
  "Return a bag for NAME"
  (define private-keywords
    '(#:target #:inputs #:native-inputs))

  (and (not target)
       (bag
         (name name)
         (system system)
         (host-inputs `(,@(if source
                              `(("source" ,source))
                              '())
                        ,@inputs
                        ,@(standard-packages)))
         (build-inputs native-inputs)
         (outputs outputs)
         (build asdf-build/source)
         (arguments (strip-keyword-arguments private-keywords arguments)))))

(define* (asdf-build/source store name inputs
                            #:key source outputs
                            (phases '(@ (guix build asdf-build-system)
                                        %standard-phases/source))
                            (search-paths '())
                            (system (%current-system))
                            (guile #f)
                            (imported-modules %asdf-build-system-modules)
                            (modules %asdf-build-modules))
  (define builder
    `(begin
       (use-modules ,@modules)
       (asdf-build/source #:name ,name
                          #:source ,(match (assoc-ref inputs "source")
                                      (((? derivation? source))
                                       (derivation->output-path source))
                                      ((source) source)
                                      (source source))
                          #:system ,system
                          #:phases ,phases
                          #:outputs %outputs
                          #:search-paths ',(map search-path-specification->sexp
                                                search-paths)
                          #:inputs %build-inputs)))

  (define guile-for-build
    (match guile
      ((? package?)
       (package-derivation store guile system #:graft? #f))
      (#f
       (let* ((distro (resolve-interface '(gnu packages commencement)))
              (guile (module-ref distro 'guile-final)))
         (package-derivation store guile system #:graft? #f)))))

  (build-expression->derivation store name builder
                                #:inputs inputs
                                #:system system
                                #:modules imported-modules
                                #:outputs outputs
                                #:guile-for-build guile-for-build))

(define* (package-with-build-system from-build-system to-build-system
                                    from-prefix to-prefix
                                    #:key variant-property
                                    phases-transformer)
  "Return a precedure which takes a package PKG which uses FROM-BUILD-SYSTEM,
and returns one using TO-BUILD-SYSTEM.  If PKG was prefixed by FROM-PREFIX,
the resulting package will be prefixed by TO-PREFIX.  Inputs of PKG are
recursively transformed using the same rule.  The result's #:phases argument
will be modified by PHASES-TRANSFORMER, an S-expression which evaluates on the
build side to a procedure of one argument.

VARIANT-PROPERTY can be added to a package's properties to indicate that the
corresponding package promise should be used as the result of this
transformation.  This allows the result to differ from what the transformation
would otherwise produce.

If TO-BUILD-SYSTEM is asdf-build-system/source, the resulting package will be
set up using CL source package conventions."
  (define target-is-source? (eq? asdf-build-system/source to-build-system))

  (define (transform-package-name name)
    (if (string-prefix? from-prefix name)
        (let ((new-name (string-drop name (string-length from-prefix))))
          (if (string-prefix? to-prefix new-name)
              new-name
              (string-append to-prefix new-name)))
        name))

  (define (has-from-build-system? pkg)
    (eq? from-build-system (package-build-system pkg)))

  (define transform
    (memoize
     (lambda (pkg)
       (define rewrite
         (match-lambda
           ((name content . rest)
            (let* ((is-package? (package? content))
                   (new-content (if is-package? (transform content) content))
                   (new-name (if (and is-package?
                                      (string-prefix? from-prefix name))
                                 (package-name new-content)
                                 name)))
              `(,new-name ,new-content ,@rest)))))

       ;; Special considerations for source packages: CL inputs become
       ;; propagated, and un-handled arguments are removed. Native inputs are
       ;; removed as are extraneous outputs.
       (define new-propagated-inputs
         (if target-is-source?
             (map rewrite
                  (filter (match-lambda
                            ((_ input . _)
                             (has-from-build-system? input)))
                          (package-inputs pkg)))
             '()))

       (define new-inputs
         (if target-is-source?
             (map rewrite
                  (filter (match-lambda
                            ((_ input . _)
                             (not (has-from-build-system? input))))
                          (package-inputs pkg)))
             (map rewrite (package-inputs pkg))))

       (define base-arguments
         (if target-is-source?
             (strip-keyword-arguments
              '(#:tests? #:special-dependencies #:asd-file
                #:test-only-systems #:lisp)
              (package-arguments pkg))
             (package-arguments pkg)))

       (cond
        ((and variant-property
              (assoc-ref (package-properties pkg) variant-property))
         => force)

        ((has-from-build-system? pkg)
         (package
           (inherit pkg)
           (location (package-location pkg))
           (name (transform-package-name (package-name pkg)))
           (build-system to-build-system)
           (arguments
            (substitute-keyword-arguments base-arguments
              ((#:phases phases) (list phases-transformer phases))))
           (inputs new-inputs)
           (propagated-inputs new-propagated-inputs)
           (native-inputs (if target-is-source?
                              '()
                              (map rewrite (package-native-inputs pkg))))
           (outputs (if target-is-source?
                        '("out")
                        (package-outputs pkg)))))
        (else pkg)))))

  transform)

(define (strip-variant-as-necessary variant pkg)
  (define properties (package-properties pkg))
  (if (assoc variant properties)
      (package
        (inherit pkg)
        (properties (alist-delete variant properties)))
      pkg))

(define (lower lisp-implementation)
  (lambda* (name
            #:key source inputs outputs native-inputs system target
            (lisp (default-lisp (string->symbol lisp-implementation)))
            #:allow-other-keys
            #:rest arguments)
    "Return a bag for NAME"
    (define private-keywords
      '(#:target #:inputs #:native-inputs #:lisp))

    (and (not target)
         (bag
           (name name)
           (system system)
           (host-inputs `(,@(if source
                                `(("source" ,source))
                                '())
                          ,@inputs
                          ,@(standard-packages)))
           (build-inputs `((,lisp-implementation ,lisp)
                           ,@native-inputs))
           (outputs outputs)
           (build (asdf-build lisp-implementation))
           (arguments (strip-keyword-arguments private-keywords arguments))))))

(define (asdf-build lisp-implementation)
  (lambda* (store name inputs
                  #:key source outputs
                  (tests? #t)
                  (special-dependencies ''())
                  (asd-file #f)
                  (test-only-systems ''())
                  (lisp lisp-implementation)
                  (phases '(@ (guix build asdf-build-system)
                              %standard-phases))
                  (search-paths '())
                  (system (%current-system))
                  (guile #f)
                  (imported-modules %asdf-build-system-modules)
                  (modules %asdf-build-modules))

    (define builder
      `(begin
         (use-modules ,@modules)
         (asdf-build #:name ,name
                     #:source ,(match (assoc-ref inputs "source")
                                 (((? derivation? source))
                                  (derivation->output-path source))
                                 ((source) source)
                                 (source source))
                     #:lisp ,lisp
                     #:special-dependencies ,special-dependencies
                     #:asd-file ,asd-file
                     #:test-only-systems ,test-only-systems
                     #:system ,system
                     #:tests? ,tests?
                     #:phases ,phases
                     #:outputs %outputs
                     #:search-paths ',(map search-path-specification->sexp
                                           search-paths)
                     #:inputs %build-inputs)))

    (define guile-for-build
      (match guile
        ((? package?)
         (package-derivation store guile system #:graft? #f))
        (#f
         (let* ((distro (resolve-interface '(gnu packages commencement)))
                (guile (module-ref distro 'guile-final)))
           (package-derivation store guile system #:graft? #f)))))

    (build-expression->derivation store name builder
                                  #:inputs inputs
                                  #:system system
                                  #:modules imported-modules
                                  #:outputs outputs
                                  #:guile-for-build guile-for-build)))

(define asdf-build-system/sbcl
  (build-system
    (name 'asdf/sbcl)
    (description "The build system for ASDF binary packages using SBCL")
    (lower (lower "sbcl"))))

(define asdf-build-system/ecl
  (build-system
    (name 'asdf/ecl)
    (description "The build system for ASDF binary packages using ECL")
    (lower (lower "ecl"))))

(define asdf-build-system/source
  (build-system
    (name 'asdf/source)
    (description "The build system for ASDF source packages")
    (lower lower/source)))

(define sbcl-package->cl-source-package
  (let* ((property 'cl-source-variant)
         (transformer
          (package-with-build-system asdf-build-system/sbcl
                                     asdf-build-system/source
                                     "sbcl-"
                                     "cl-"
                                     #:variant-property property
                                     #:phases-transformer
                                     '(const %standard-phases/source))))
    (lambda (pkg)
      (transformer
       (strip-variant-as-necessary property pkg)))))

(define sbcl-package->ecl-package
  (let* ((property 'ecl-variant)
         (transformer
          (package-with-build-system asdf-build-system/sbcl
                                     asdf-build-system/ecl
                                     "sbcl-"
                                     "ecl-"
                                     #:variant-property property
                                     #:phases-transformer
                                     'identity)))
    (lambda (pkg)
      (transformer
       (strip-variant-as-necessary property pkg)))))

;;; asdf.scm ends here

A guix/build/asdf-build-system.scm => guix/build/asdf-build-system.scm +282 -0
@@ 0,0 1,282 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
;;;
;;; 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 asdf-build-system)
  #:use-module ((guix build gnu-build-system) #:prefix gnu:)
  #:use-module (guix build utils)
  #:use-module (guix build lisp-utils)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-26)
  #:use-module (ice-9 rdelim)
  #:use-module (ice-9 receive)
  #:use-module (ice-9 regex)
  #:use-module (ice-9 match)
  #:use-module (ice-9 format)
  #:use-module (ice-9 ftw)
  #:export (%standard-phases
            %standard-phases/source
            asdf-build
            asdf-build/source))

;; Commentary:
;;
;; System for building ASDF packages; creating executable programs and images
;; from them.
;;
;; Code:

(define %object-prefix "/lib")

(define (source-install-prefix lisp)
  (string-append %install-prefix "/" lisp "-source"))

(define %system-install-prefix
  (string-append %install-prefix "/systems"))

(define (output-path->package-name path)
  (package-name->name+version (strip-store-file-name path)))

(define (outputs->name outputs)
  (output-path->package-name
   (assoc-ref outputs "out")))

(define (lisp-source-directory output lisp name)
  (string-append output (source-install-prefix lisp) "/" name))

(define (source-directory output name)
  (string-append output %install-prefix "/source/" name))

(define (library-directory output lisp)
  (string-append output %object-prefix
                 "/" lisp))

(define (output-translation source-path
                            object-output
                            lisp)
  "Return a translation for the system's source path
to it's binary output."
  `((,source-path
     :**/ :*.*.*)
    (,(library-directory object-output lisp)
     :**/ :*.*.*)))

(define (source-asd-file output lisp name asd-file)
  (string-append (lisp-source-directory output lisp name) "/" asd-file))

(define (copy-files-to-output outputs output name)
  "Copy all files from OUTPUT to \"out\".  Create an extra link to any
system-defining files in the source to a convenient location.  This is done
before any compiling so that the compiled source locations will be valid."
  (let* ((out (assoc-ref outputs output))
         (source (getcwd))
         (target (source-directory out name))
         (system-path (string-append out %system-install-prefix)))
    (copy-recursively source target)
    (mkdir-p system-path)
    (for-each
     (lambda (file)
       (symlink file
                (string-append system-path "/" (basename file))))
     (find-files target "\\.asd$"))
    #t))

(define* (install #:key outputs #:allow-other-keys)
  "Copy and symlink all the source files."
  (copy-files-to-output outputs "out" (outputs->name outputs)))

(define* (copy-source #:key outputs lisp #:allow-other-keys)
  "Copy the source to \"out\"."
  (let* ((out (assoc-ref outputs "out"))
         (name (remove-lisp-from-name (output-path->package-name out) lisp))
         (install-path (string-append out %install-prefix)))
    (copy-files-to-output outputs "out" name)
    ;; Hide the files from asdf
    (with-directory-excursion install-path
      (rename-file "source" (string-append lisp "-source"))
      (delete-file-recursively "systems")))
  #t)

(define* (build #:key outputs inputs lisp asd-file
                #:allow-other-keys)
  "Compile the system."
  (let* ((out (assoc-ref outputs "out"))
         (name (remove-lisp-from-name (output-path->package-name out) lisp))
         (source-path (lisp-source-directory out lisp name))
         (translations (wrap-output-translations
                        `(,(output-translation source-path
                                               out
                                               lisp))))
         (asd-file (and=> asd-file (cut source-asd-file out lisp name <>))))

    (setenv "ASDF_OUTPUT_TRANSLATIONS"
            (replace-escaped-macros (format #f "~S" translations)))

    ;; We don't need this if we have the asd file, and it can mess with the
    ;; load ordering we're trying to enforce
    (unless asd-file
      (prepend-to-source-registry (string-append source-path "//")))

    (setenv "HOME" out) ; ecl's asdf sometimes wants to create $HOME/.cache

    (parameterize ((%lisp (string-append
                           (assoc-ref inputs lisp) "/bin/" lisp)))
      (compile-system name lisp asd-file))

    ;; As above, ecl will sometimes create this even though it doesn't use it

    (let ((cache-directory (string-append out "/.cache")))
      (when (directory-exists? cache-directory)
        (delete-file-recursively cache-directory))))
  #t)

(define* (check #:key lisp tests? outputs inputs asd-file
                #:allow-other-keys)
  "Test the system."
  (let* ((name (remove-lisp-from-name (outputs->name outputs) lisp))
         (out (assoc-ref outputs "out"))
         (asd-file (and=> asd-file (cut source-asd-file out lisp name <>))))
    (if tests?
        (parameterize ((%lisp (string-append
                               (assoc-ref inputs lisp) "/bin/" lisp)))
          (test-system name lisp asd-file))
        (format #t "test suite not run~%")))
  #t)

(define* (patch-asd-files #:key outputs
                          inputs
                          lisp
                          special-dependencies
                          test-only-systems
                          #:allow-other-keys)
  "Patch any asd files created by the compilation process so that they can
find their dependencies.  Exclude any TEST-ONLY-SYSTEMS which were only
included to run tests.  Add any SPECIAL-DEPENDENCIES which the LISP
implementation itself provides."
  (let* ((out (assoc-ref outputs "out"))
         (name (remove-lisp-from-name (output-path->package-name out) lisp))
         (registry (lset-difference
                    (lambda (input system)
                      (match input
                        ((name . path) (string=? name system))))
                    (lisp-dependencies lisp inputs)
                    test-only-systems))
         (lisp-systems (map first registry)))

    (for-each
     (lambda (asd-file)
       (patch-asd-file asd-file registry lisp
                       (append lisp-systems special-dependencies)))
     (find-files out "\\.asd$")))
  #t)

(define* (symlink-asd-files #:key outputs lisp #:allow-other-keys)
  "Create an extra reference to the system in a convenient location."
  (let* ((out (assoc-ref outputs "out")))
    (for-each
     (lambda (asd-file)
       (substitute* asd-file
         ((";;; Built for.*") "") ; remove potential non-determinism
         (("^\\(DEFSYSTEM(.*)$" all end) (string-append "(asdf:defsystem" end)))
       (receive (new-asd-file asd-file-directory)
           (bundle-asd-file out asd-file lisp)
         (mkdir-p asd-file-directory)
         (symlink asd-file new-asd-file)
         ;; Update the source registry for future phases which might want to
         ;; use the newly compiled system.
         (prepend-to-source-registry
          (string-append asd-file-directory "/"))))

     (find-files (string-append out %object-prefix) "\\.asd$"))
)
  #t)

(define* (cleanup-files #:key outputs lisp
                             #:allow-other-keys)
  "Remove any compiled files which are not a part of the final bundle."
  (let ((out (assoc-ref outputs "out")))
    (match lisp
      ("sbcl"
       (for-each
        (lambda (file)
          (unless (string-suffix? "--system.fasl" file)
            (delete-file file)))
        (find-files out "\\.fasl$")))
      ("ecl"
       (for-each delete-file
                 (append (find-files out "\\.fas$")
                         (find-files out "\\.o$")
                         (find-files out "\\.a$")))))

    (with-directory-excursion (library-directory out lisp)
      (for-each
       (lambda (file)
         (rename-file file
                      (string-append "./" (basename file))))
       (find-files "."))
      (for-each delete-file-recursively
                (scandir "."
                         (lambda (file)
                           (and
                            (directory-exists? file)
                            (string<> "." file)
                            (string<> ".." file)))))))
  #t)

(define* (strip #:key lisp #:allow-other-keys #:rest args)
  ;; stripping sbcl binaries removes their entry program and extra systems
  (or (string=? lisp "sbcl")
      (apply (assoc-ref gnu:%standard-phases 'strip) args)))

(define %standard-phases/source
  (modify-phases gnu:%standard-phases
    (delete 'configure)
    (delete 'check)
    (delete 'build)
    (replace 'install install)))

(define %standard-phases
  (modify-phases gnu:%standard-phases
    (delete 'configure)
    (delete 'install)
    (replace 'build build)
    (add-before 'build 'copy-source copy-source)
    (replace 'check check)
    (replace 'strip strip)
    (add-after 'check 'link-dependencies patch-asd-files)
    (add-after 'link-dependencies 'cleanup cleanup-files)
    (add-after 'cleanup 'create-symlinks symlink-asd-files)))

(define* (asdf-build #:key inputs
                     (phases %standard-phases)
                     #:allow-other-keys
                     #:rest args)
  (apply gnu:gnu-build
         #:inputs inputs
         #:phases phases
         args))

(define* (asdf-build/source #:key inputs
                            (phases %standard-phases/source)
                            #:allow-other-keys
                            #:rest args)
  (apply gnu:gnu-build
         #:inputs inputs
         #:phases phases
         args))

;;; asdf-build-system.scm ends here

M guix/build/bournish.scm => guix/build/bournish.scm +13 -1
@@ 162,6 162,17 @@ characters."
        (else
         `((@@ (guix build bournish) wc-command-implementation) ,@args))))

(define (reboot-command . args)
  "Emit code for 'reboot'."
  ;; Normally Bournish is used in the initrd, where 'reboot' is provided
  ;; directly by (guile-user).  In other cases, just bail out.
  `(if (defined? 'reboot)
       (reboot)
       (begin
         (format (current-error-port)
                 "I don't know how to reboot, sorry about that!~%")
         #f)))

(define (help-command . _)
  (display "\
Hello, this is Bournish, a minimal Bourne-like shell in Guile!


@@ 189,7 200,8 @@ commands such as 'ls' and 'cd'; it lacks globbing, pipes---everything.\n"))
    ("ls"     ,ls-command)
    ("which"  ,which-command)
    ("cat"    ,cat-command)
    ("wc"     ,wc-command)))
    ("wc"     ,wc-command)
    ("reboot" ,reboot-command)))

(define (read-bournish port env)
  "Read a Bournish expression from PORT, and return the corresponding Scheme

M guix/build/graft.scm => guix/build/graft.scm +28 -2
@@ 210,6 210,32 @@ an exception is caught."
          (print-exception port #f key args)
          (primitive-exit 1))))))

(define* (mkdir-p* dir #:optional (mode #o755))
  "This is a variant of 'mkdir-p' that works around
<http://bugs.gnu.org/24659> by passing MODE explicitly in each 'mkdir' call."
  (define absolute?
    (string-prefix? "/" dir))

  (define not-slash
    (char-set-complement (char-set #\/)))

  (let loop ((components (string-tokenize dir not-slash))
             (root       (if absolute?
                             ""
                             ".")))
    (match components
      ((head tail ...)
       (let ((path (string-append root "/" head)))
         (catch 'system-error
           (lambda ()
             (mkdir path mode)
             (loop tail path))
           (lambda args
             (if (= EEXIST (system-error-errno args))
                 (loop tail path)
                 (apply throw args))))))
      (() #t))))

(define* (rewrite-directory directory output mapping
                            #:optional (store (%store-directory)))
  "Copy DIRECTORY to OUTPUT, replacing strings according to MAPPING, a list of


@@ 258,7 284,7 @@ file name pairs."
  (define (rewrite-leaf file)
    (let ((stat (lstat file))
          (dest (destination file)))
      (mkdir-p (dirname dest))
      (mkdir-p* (dirname dest))
      (case (stat:type stat)
        ((symlink)
         (let ((target (readlink file)))


@@ 277,7 303,7 @@ file name pairs."
                                           store)
                 (chmod output (stat:perms stat)))))))
        ((directory)
         (mkdir-p dest))
         (mkdir-p* dest))
        (else
         (error "unsupported file type" stat)))))


A guix/build/lisp-utils.scm => guix/build/lisp-utils.scm +327 -0
@@ 0,0 1,327 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
;;;
;;; 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 lisp-utils)
  #:use-module (ice-9 format)
  #:use-module (ice-9 match)
  #:use-module (ice-9 regex)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-26)
  #:use-module (guix build utils)
  #:export (%lisp
            %install-prefix
            lisp-eval-program
            compile-system
            test-system
            replace-escaped-macros
            generate-executable-wrapper-system
            generate-executable-entry-point
            generate-executable-for-system
            patch-asd-file
            bundle-install-prefix
            lisp-dependencies
            bundle-asd-file
            remove-lisp-from-name
            wrap-output-translations
            prepend-to-source-registry
            build-program
            build-image))

;;; Commentary:
;;;
;;; Tools to evaluate lisp programs within a lisp session, generate wrapper
;;; systems for executables. Compile, test, and produce images for systems and
;;; programs, and link them with their dependencies.
;;;
;;; Code:

(define %lisp
  ;; File name of the Lisp compiler.
  (make-parameter "lisp"))

(define %install-prefix "/share/common-lisp")

(define (bundle-install-prefix lisp)
  (string-append %install-prefix "/" lisp "-bundle-systems"))

(define (remove-lisp-from-name name lisp)
  (string-drop name (1+ (string-length lisp))))

(define (wrap-output-translations translations)
  `(:output-translations
    ,@translations
    :inherit-configuration))

(define (lisp-eval-program lisp program)
  "Evaluate PROGRAM with a given LISP implementation."
  (unless (zero? (apply system*
                        (lisp-invoke lisp (format #f "~S" program))))
    (error "lisp-eval-program failed!" lisp program)))

(define (lisp-invoke lisp program)
  "Return a list of arguments for system* determining how to invoke LISP
with PROGRAM."
  (match lisp
    ("sbcl" `(,(%lisp) "--non-interactive" "--eval" ,program))
    ("ecl" `(,(%lisp) "-eval" ,program "-eval" "(quit)"))))

(define (asdf-load-all systems)
  (map (lambda (system)
         `(funcall
           (find-symbol
            (symbol-name :load-system)
            (symbol-name :asdf))
           ,system))
       systems))

(define (compile-system system lisp asd-file)
  "Use a lisp implementation to compile SYSTEM using asdf.  Load ASD-FILE
first if SYSTEM is defined there."
  (lisp-eval-program lisp
                     `(progn
                       (require :asdf)
                       (in-package :asdf)
                       ,@(if asd-file
                             `((load ,asd-file))
                             '())
                       (in-package :cl-user)
                       (funcall (find-symbol
                                 (symbol-name :operate)
                                 (symbol-name :asdf))
                                (find-symbol
                                 (symbol-name :compile-bundle-op)
                                 (symbol-name :asdf))
                                ,system)
                       (funcall (find-symbol
                                 (symbol-name :operate)
                                 (symbol-name :asdf))
                                (find-symbol
                                 (symbol-name :deliver-asd-op)
                                 (symbol-name :asdf))
                                ,system))))

(define (test-system system lisp asd-file)
  "Use a lisp implementation to test SYSTEM using asdf.  Load ASD-FILE first
if SYSTEM is defined there."
  (lisp-eval-program lisp
                     `(progn
                       (require :asdf)
                       (in-package :asdf)
                       ,@(if asd-file
                             `((load ,asd-file))
                             '())
                       (in-package :cl-user)
                       (funcall (find-symbol
                                 (symbol-name :test-system)
                                 (symbol-name :asdf))
                                ,system))))

(define (string->lisp-keyword . strings)
  "Return a lisp keyword for the concatenation of STRINGS."
  (string->symbol (apply string-append ":" strings)))

(define (generate-executable-for-system type system lisp)
  "Use LISP to generate an executable, whose TYPE can be \"image\" or
\"program\".  The latter will always be standalone.  Depends on having created
a \"SYSTEM-exec\" system which contains the entry program."
  (lisp-eval-program
   lisp
   `(progn
     (require :asdf)
     (funcall (find-symbol
               (symbol-name :operate)
               (symbol-name :asdf))
              (find-symbol
               (symbol-name ,(string->lisp-keyword type "-op"))
               (symbol-name :asdf))
              ,(string-append system "-exec")))))

(define (generate-executable-wrapper-system system dependencies)
  "Generates a system which can be used by asdf to produce an image or program
inside the current directory.  The image or program will contain
DEPENDENCIES."
  (with-output-to-file (string-append system "-exec.asd")
    (lambda _
      (format #t "~y~%"
              `(defsystem ,(string->lisp-keyword system "-exec")
                 :entry-point ,(string-append system "-exec:main")
                 :depends-on (:uiop
                              ,@(map string->lisp-keyword
                                     dependencies))
                 :components ((:file ,(string-append system "-exec"))))))))

(define (generate-executable-entry-point system entry-program)
  "Generates an entry point program from the list of lisp statements
ENTRY-PROGRAM for SYSTEM within the current directory."
  (with-output-to-file (string-append system "-exec.lisp")
    (lambda _
      (let ((system (string->lisp-keyword system "-exec")))
        (format #t "~{~y~%~%~}"
                `((defpackage ,system
                    (:use :cl)
                    (:export :main))

                  (in-package ,system)

                  (defun main ()
                    (let ((arguments uiop:*command-line-arguments*))
                      (declare (ignorable arguments))
                      ,@entry-program))))))))

(define (wrap-perform-method lisp registry dependencies file-name)
  "Creates a wrapper method which allows the system to locate its dependent
systems from REGISTRY, an alist of the same form as %outputs, which contains
lisp systems which the systems is dependent on.  All DEPENDENCIES which the
system depends on will the be loaded before this system."
  (let* ((system (string-drop-right (basename file-name) 4))
         (system-symbol (string->lisp-keyword system)))

    `(defmethod asdf:perform :before
       (op (c (eql (asdf:find-system ,system-symbol))))
       (asdf/source-registry:ensure-source-registry)
       ,@(map (match-lambda
                ((name . path)
                 (let ((asd-file (string-append path
                                                (bundle-install-prefix lisp)
                                                "/" name ".asd")))
                   `(setf
                     (gethash ,name
                              asdf/source-registry:*source-registry*)
                     ,(string->symbol "#p")
                     ,(bundle-asd-file path asd-file lisp)))))
              registry)
       ,@(map (lambda (system)
                `(asdf:load-system ,(string->lisp-keyword system)))
              dependencies))))

(define (patch-asd-file asd-file registry lisp dependencies)
  "Patches ASD-FILE with a perform method as described in WRAP-PERFORM-METHOD."
  (chmod asd-file #o644)
  (let ((port (open-file asd-file "a")))
    (dynamic-wind
      (lambda _ #t)
      (lambda _
        (display
         (replace-escaped-macros
          (format #f "~%~y~%"
                  (wrap-perform-method lisp registry
                                       dependencies asd-file)))
         port))
      (lambda _ (close-port port))))
  (chmod asd-file #o444))

(define (lisp-dependencies lisp inputs)
  "Determine which inputs are lisp system dependencies, by using the convention
that a lisp system dependency will resemble \"system-LISP\"."
  (filter-map (match-lambda
                ((name . value)
                 (and (string-prefix? lisp name)
                      (string<> lisp name)
                      `(,(remove-lisp-from-name name lisp)
                        . ,value))))
              inputs))

(define (bundle-asd-file output-path original-asd-file lisp)
  "Find the symlinked bundle file for ORIGINAL-ASD-FILE by looking in
OUTPUT-PATH/share/common-lisp/LISP-bundle-systems/<system>.asd.  Returns two
values: the asd file itself and the directory in which it resides."
  (let ((bundle-asd-path (string-append output-path
                                        (bundle-install-prefix lisp))))
    (values (string-append bundle-asd-path "/" (basename original-asd-file))
            bundle-asd-path)))

(define (replace-escaped-macros string)
  "Replace simple lisp forms that the guile writer escapes, for example by
replacing #{#p}# with #p.  Should only be used to replace truly simple forms
which are not nested."
  (regexp-substitute/global #f "(#\\{)(\\S*)(\\}#)" string
                            'pre 2 'post))

(define (prepend-to-source-registry path)
  (setenv "CL_SOURCE_REGISTRY"
          (string-append path ":" (or (getenv "CL_SOURCE_REGISTRY") ""))))

(define* (build-program lisp program #:key inputs
                        (dependencies (list (basename program)))
                        entry-program
                        #:allow-other-keys)
  "Generate an executable program containing all DEPENDENCIES, and which will
execute ENTRY-PROGRAM.  The result is placed in PROGRAM.  When executed, it
will run ENTRY-PROGRAM, a list of Common Lisp expressions in which `arguments'
has been bound to the command-line arguments which were passed."
  (generate-executable lisp program
                       #:inputs inputs
                       #:dependencies dependencies
                       #:entry-program entry-program
                       #:type "program")
  (let* ((name (basename program))
         (bin-directory (dirname program)))
    (with-directory-excursion bin-directory
      (rename-file (string-append name "-exec")
                   name)))
  #t)

(define* (build-image lisp image #:key inputs
                      (dependencies (list (basename image)))
                      #:allow-other-keys)
  "Generate an image, possibly standalone, which contains all DEPENDENCIES,
placing the result in IMAGE.image."
  (generate-executable lisp image
                       #:inputs inputs
                       #:dependencies dependencies
                       #:entry-program '(nil)
                       #:type "image")
  (let* ((name (basename image))
         (bin-directory (dirname image)))
    (with-directory-excursion bin-directory
      (rename-file (string-append name "-exec--all-systems.image")
                   (string-append name ".image"))))
  #t)

(define* (generate-executable lisp out-file #:key inputs
                              dependencies
                              entry-program
                              type
                              #:allow-other-keys)
  "Generate an executable by using asdf's TYPE-op, containing whithin the
image all DEPENDENCIES, and running ENTRY-PROGRAM in the case of an
executable."
  (let* ((bin-directory (dirname out-file))
         (name (basename out-file)))
    (mkdir-p bin-directory)
    (with-directory-excursion bin-directory
      (generate-executable-wrapper-system name dependencies)
      (generate-executable-entry-point name entry-program))

    (prepend-to-source-registry
     (string-append bin-directory "/"))

    (setenv "ASDF_OUTPUT_TRANSLATIONS"
            (replace-escaped-macros
             (format
              #f "~S"
              (wrap-output-translations
               `(((,bin-directory :**/ :*.*.*)
                  (,bin-directory :**/ :*.*.*)))))))

    (parameterize ((%lisp (string-append
                           (assoc-ref inputs lisp) "/bin/" lisp)))
      (generate-executable-for-system type name lisp))

    (delete-file (string-append bin-directory "/" name "-exec.asd"))
    (delete-file (string-append bin-directory "/" name "-exec.lisp"))))

M guix/import/github.scm => guix/import/github.scm +1 -1
@@ 44,7 44,7 @@ failure."
  "Return the extension of the archive e.g. '.tar.gz' given a URL, or
false if none is recognized"
  (find (lambda (x) (string-suffix? x url))
        (list ".tar.gz" ".tar.bz2" ".tar.xz" ".zip" ".tar" ".tgz")))
        (list ".tar.gz" ".tar.bz2" ".tar.xz" ".zip" ".tar" ".tgz" ".love")))

(define (updated-github-url old-package new-version)
  ;; Return a url for the OLD-PACKAGE with NEW-VERSION.  If no source url in

M guix/licenses.scm => guix/licenses.scm +7 -0
@@ 8,6 8,7 @@
;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
;;; Copyright © 2016 ng0 <ngillmann@runbox.com>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 43,6 44,7 @@
            epl1.0
            expat
            freetype
            freebsd-doc
            giftware
            gpl1 gpl1+ gpl2 gpl2+ gpl3 gpl3+
            gfl1.0


@@ 286,6 288,11 @@ at URI, which may be a file:// URI pointing the package's tree."
           "https://www.gnu.org/licenses/fdl.html"
           "https://www.gnu.org/licenses/license-list#FDL"))

(define freebsd-doc
  (license "FreeBSD Documentation License"
           "https://www.freebsd.org/copyright/freebsd-doc-license.html"
           "https://www.gnu.org/licenses/license-list.html#FreeBSDDL"))

(define opl1.0+
  (license "Open Publication License 1.0 or later"
           "http://opencontent.org/openpub/"

M guix/scripts/substitute.scm => guix/scripts/substitute.scm +6 -6
@@ 391,7 391,7 @@ No authentication and authorization checks are performed here!"

(define* (assert-valid-narinfo narinfo
                               #:optional (acl (current-acl))
                               #:key (verbose? #t))
                               #:key verbose?)
  "Raise an exception if NARINFO lacks a signature, has an invalid signature,
or is signed by an unauthorized key."
  (let ((hash (narinfo-sha256 narinfo)))


@@ 404,9 404,8 @@ or is signed by an unauthorized key."
          (unless %allow-unauthenticated-substitutes?
            (assert-valid-signature narinfo signature hash acl)
            (when verbose?
              ;; Visually separate substitutions with a newline.
              (format (current-error-port)
                      (_ "~%Found valid signature for ~a~%")
                      (_ "Found valid signature for ~a~%")
                      (narinfo-path narinfo))
              (format (current-error-port)
                      (_ "From ~a~%")


@@ 893,7 892,7 @@ DESTINATION as a nar file.  Verify the substitute against ACL."
            ;; "(4.1MiB installed)"; it shows the size of the package once
            ;; installed.
            (_ "Downloading ~a~:[~*~; (~a installed)~]...~%")
            (store-path-abbreviation store-item)
            (uri->string uri)
            ;; Use the Nar size as an estimate of the installed size.
            (narinfo-size narinfo)
            (and=> (narinfo-size narinfo)


@@ 921,8 920,9 @@ DESTINATION as a nar file.  Verify the substitute against ACL."
      ;; Unpack the Nar at INPUT into DESTINATION.
      (restore-file input destination)

      ;; Skip a line after what 'progress-proc' printed.
      (newline (current-error-port))
      ;; Skip a line after what 'progress-proc' printed, and another one to
      ;; visually separate substitutions.
      (display "\n\n" (current-error-port))

      (every (compose zero? cdr waitpid) pids))))


M guix/scripts/system.scm => guix/scripts/system.scm +10 -15
@@ 227,25 227,20 @@ BODY..., and restore them."
        (set! %load-path path)
        (set! %load-compiled-path cpath)))))

(define-syntax-rule (warn-on-system-error body ...)
  (catch 'system-error
    (lambda ()
      body ...)
    (lambda (key proc format-string format-args errno . rest)
      (warning (_ "while talking to shepherd: ~a~%")
               (apply format #f format-string format-args))
      (with-monad %store-monad
        (return #f)))))

(define-syntax-rule (with-shepherd-error-handling mbody ...)
  "Catch and report Shepherd errors that arise when binding MBODY, a monadic
expression in %STORE-MONAD."
  (lambda (store)
    (warn-on-system-error
     (guard (c ((shepherd-error? c)
                (values (report-shepherd-error c) store)))
       (values (run-with-store store (begin mbody ...))
               store)))))
    (catch 'system-error
      (lambda ()
        (guard (c ((shepherd-error? c)
                   (values (report-shepherd-error c) store)))
          (values (run-with-store store (begin mbody ...))
                  store)))
      (lambda (key proc format-string format-args errno . rest)
        (warning (_ "while talking to shepherd: ~a~%")
                 (apply format #f format-string format-args))
        (values #f store)))))

(define (report-shepherd-error error)
  "Report ERROR, a '&shepherd-error' error condition object."

M guix/utils.scm => guix/utils.scm +16 -5
@@ 369,19 369,30 @@ keywords not already present in ARGS."
    (match defaults
      ((kw value rest ...)
       (loop rest
             (if (assoc-ref kw args)
             (if (memq kw args)
                 args
                 (cons* kw value args))))
      (()
       args))))

(define-syntax collect-default-args
  (syntax-rules ()
    ((_)
     '())
    ((_ (_ _) rest ...)
     (collect-default-args rest ...))
    ((_ (kw _ dflt) rest ...)
     (cons* kw dflt (collect-default-args rest ...)))))

(define-syntax substitute-keyword-arguments
  (syntax-rules ()
    "Return a new list of arguments where the value for keyword arg KW is
replaced by EXP.  EXP is evaluated in a context where VAR is boud to the
previous value of the keyword argument."
    ((_ original-args ((kw var) exp) ...)
     (let loop ((args    original-args)
replaced by EXP.  EXP is evaluated in a context where VAR is bound to the
previous value of the keyword argument, or DFLT if given."
    ((_ original-args ((kw var dflt ...) exp) ...)
     (let loop ((args (default-keyword-arguments
                        original-args
                        (collect-default-args (kw var dflt ...) ...)))
                (before '()))
       (match args
         ((kw var rest (... ...))

M po/guix/de.po => po/guix/de.po +848 -441
@@ 1,118 1,121 @@
# German translation of guix.
# Copyright (C) 2014 Free Software Foundation, Inc.
# This file is distributed under the same license as the guix package.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015.
# Mario Blättermann <mario.blaettermann@gmail.com>, 2014, 2015, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: guix 0.9.0\n"
"Project-Id-Version: guix 0.11.0\n"
"Report-Msgid-Bugs-To: ludo@gnu.org\n"
"POT-Creation-Date: 2015-10-28 16:31+0100\n"
"PO-Revision-Date: 2015-11-29 16:01+0100\n"
"POT-Creation-Date: 2016-07-29 10:16+0200\n"
"PO-Revision-Date: 2016-09-15 21:49+0200\n"
"Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.8.5\n"
"X-Generator: Poedit 1.8.9\n"

#: gnu/packages.scm:80
#: gnu/packages.scm:79
#, scheme-format
msgid "~a: patch not found"
msgstr "~a: Patch nicht gefunden"

#: gnu/packages.scm:91
#: gnu/packages.scm:95
#, scheme-format
msgid "could not find bootstrap binary '~a' for system '~a'"
msgstr ""

#: gnu/packages.scm:143
#: gnu/packages.scm:147
#, scheme-format
msgid "cannot access `~a': ~a~%"
msgstr "Zugriff auf »~a« nicht möglich: ~a~%"

#: gnu/packages.scm:388
#, scheme-format
msgid "looking for the latest release of GNU ~a..."
msgstr "Nach der letzten Veröffentlichung von GNU ~a wird gesucht …"

#: gnu/packages.scm:395
#, scheme-format
msgid "~a: note: using ~a but ~a is available upstream~%"
msgstr ""

#: gnu/packages.scm:417 gnu/packages.scm:452
#: gnu/packages.scm:301
#, scheme-format
msgid "ambiguous package specification `~a'~%"
msgstr "Nicht eindeutige Paketangabe »~a«~%"

#: gnu/packages.scm:418 gnu/packages.scm:454
#: gnu/packages.scm:302
#, scheme-format
msgid "choosing ~a from ~a~%"
msgstr ""

#: gnu/packages.scm:424
#: gnu/packages.scm:306
#, scheme-format
msgid "deprecated NAME-VERSION syntax; use NAME@VERSION instead~%"
msgstr ""

#: gnu/packages.scm:311
#, scheme-format
msgid "~A: package not found for version ~a~%"
msgstr "~A: Paket nicht gefunden für Version ~a~%"

#: gnu/packages.scm:426
#: gnu/packages.scm:321
#, scheme-format
msgid "~A: unknown package~%"
msgstr "~A: unbekanntes Paket~%"

#: gnu/packages.scm:442
#: gnu/packages.scm:349
#, scheme-format
msgid "package `~a' lacks output `~a'~%"
msgstr ""

#: gnu/packages.scm:459
#, scheme-format
msgid "~a: package not found~%"
msgstr "~a: Paket nicht gefunden~%"

#: gnu/services.scm:376
#: gnu/services.scm:540
#, scheme-format
msgid "no target of type '~a' for service ~s"
msgstr ""

#: gnu/services.scm:387 gnu/services.scm:447
#: gnu/services.scm:551 gnu/services.scm:612
#, scheme-format
msgid "more than one target service of type '~a'"
msgstr ""

#: gnu/services.scm:437
#: gnu/services.scm:602
#, scheme-format
msgid "service of type '~a' not found"
msgstr "Dienst des Typs »~a« wurde nicht gefunden"

#: gnu/system.scm:547
#: gnu/system.scm:500
#, scheme-format
msgid "using a string for file '~a' is deprecated; use 'plain-file' instead~%"
msgstr ""

#: gnu/system.scm:563
#: gnu/system.scm:516
#, scheme-format
msgid "using a monadic value for '~a' is deprecated; use 'plain-file' instead~%"
msgstr ""

#: gnu/system.scm:646
msgid "system locale lacks a definition"
msgstr ""
#: gnu/system.scm:650
#, fuzzy, scheme-format
#| msgid "~a: invalid number~%"
msgid "~a: invalid locale name"
msgstr "~a: ungültige Zahl~%"

#: gnu/system.scm:770
#, scheme-format
msgid "unrecognized boot parameters for '~a'~%"
msgstr "Nicht erkannte Startparameter für »~a«~%"

#: gnu/services/dmd.scm:131
#: gnu/services/shepherd.scm:162
#, scheme-format
msgid "service '~a' provided more than once"
msgstr ""

#: gnu/system/shadow.scm:213
#: gnu/services/shepherd.scm:177
#, scheme-format
msgid "service '~a' requires '~a', which is not provided by any service"
msgstr ""

#: gnu/system/shadow.scm:240
#, scheme-format
msgid "supplementary group '~a' of user '~a' is undeclared"
msgstr ""

#: gnu/system/shadow.scm:223
#: gnu/system/shadow.scm:250
#, scheme-format
msgid "primary group '~a' of user '~a' is undeclared"
msgstr ""


@@ 122,32 125,69 @@ msgstr ""
msgid "invalid argument: ~a~%"
msgstr "Ungültiges Argument: ~a~%"

#: guix/scripts.scm:78 guix/scripts/download.scm:97 guix/scripts/gc.scm:157
#: guix/scripts/import/cran.scm:72 guix/scripts/import/elpa.scm:77
#: guix/scripts/pull.scm:219 guix/scripts/lint.scm:792
#: guix/scripts/publish.scm:355
#: guix/scripts.scm:78 guix/scripts/download.scm:99 guix/scripts/gc.scm:164
#: guix/scripts/import/cran.scm:78 guix/scripts/import/elpa.scm:77
#: guix/scripts/pull.scm:219 guix/scripts/lint.scm:916
#: guix/scripts/publish.scm:549 guix/scripts/graph.scm:383
#, scheme-format
msgid "~A: unrecognized option~%"
msgstr "~A: nicht erkannte Option~%"

#: guix/scripts/build.scm:107
#: guix/scripts/build.scm:121
#, scheme-format
msgid "failed to create GC root `~a': ~a~%"
msgstr ""

#: guix/scripts/build.scm:151
#: guix/scripts/build.scm:198
#, fuzzy, scheme-format
#| msgid "ambiguous package specification `~a'~%"
msgid "invalid replacement specification: ~s~%"
msgstr "Nicht eindeutige Paketangabe »~a«~%"

#: guix/scripts/build.scm:246
msgid ""
"\n"
"      --with-source=SOURCE\n"
"                         use SOURCE when building the corresponding package"
msgstr ""

#: guix/scripts/build.scm:249
msgid ""
"\n"
"      --with-input=PACKAGE=REPLACEMENT\n"
"                         replace dependency PACKAGE by REPLACEMENT"
msgstr ""

#: guix/scripts/build.scm:274
#, scheme-format
msgid "transformation '~a' had no effect on ~a~%"
msgstr ""

#: guix/scripts/build.scm:292
msgid ""
"\n"
"  -L, --load-path=DIR    prepend DIR to the package module search path"
msgstr ""

#: guix/scripts/build.scm:153
#: guix/scripts/build.scm:294
msgid ""
"\n"
"  -K, --keep-failed      keep build tree of failed builds"
msgstr ""

#: guix/scripts/build.scm:155
#: guix/scripts/build.scm:296
#, fuzzy
#| msgid ""
#| "\n"
#| "  -n, --dry-run          do not build the derivations"
msgid ""
"\n"
"  -k, --keep-going       keep going when some of the derivations fail"
msgstr ""
"\n"
"  -n, --dry-run          die Ableitungen nicht erstellen"

#: guix/scripts/build.scm:298
msgid ""
"\n"
"  -n, --dry-run          do not build the derivations"


@@ 155,45 195,51 @@ msgstr ""
"\n"
"  -n, --dry-run          die Ableitungen nicht erstellen"

#: guix/scripts/build.scm:157
#: guix/scripts/build.scm:300
msgid ""
"\n"
"      --fallback         fall back to building when the substituter fails"
msgstr ""

#: guix/scripts/build.scm:159
#: guix/scripts/build.scm:302
msgid ""
"\n"
"      --no-substitutes   build instead of resorting to pre-built substitutes"
msgstr ""

#: guix/scripts/build.scm:161 guix/scripts/size.scm:215
#: guix/scripts/build.scm:304 guix/scripts/size.scm:217
msgid ""
"\n"
"      --substitute-urls=URLS\n"
"                         fetch substitute from URLS if they are authorized"
msgstr ""

#: guix/scripts/build.scm:164
#: guix/scripts/build.scm:307
msgid ""
"\n"
"      --no-grafts        do not graft packages"
msgstr ""

#: guix/scripts/build.scm:309
msgid ""
"\n"
"      --no-build-hook    do not attempt to offload builds via the build hook"
msgstr ""

#: guix/scripts/build.scm:166
#: guix/scripts/build.scm:311
msgid ""
"\n"
"      --max-silent-time=SECONDS\n"
"                         mark the build as failed after SECONDS of silence"
msgstr ""

#: guix/scripts/build.scm:169
#: guix/scripts/build.scm:314
msgid ""
"\n"
"      --timeout=SECONDS  mark the build as failed after SECONDS of activity"
msgstr ""

#: guix/scripts/build.scm:171
#: guix/scripts/build.scm:316
msgid ""
"\n"
"      --verbosity=LEVEL  use the given verbosity LEVEL"


@@ 201,7 247,13 @@ msgstr ""
"\n"
"      --verbosity=STUFE  die angegebene Ausführlichkeitsstufe verwenden"

#: guix/scripts/build.scm:173
#: guix/scripts/build.scm:318
msgid ""
"\n"
"      --rounds=N         build N times in a row to detect non-determinism"
msgstr ""

#: guix/scripts/build.scm:320
msgid ""
"\n"
"  -c, --cores=N          allow the use of up to N CPU cores for the build"


@@ 209,101 261,107 @@ msgstr ""
"\n"
"  -c, --cores=N          bis zu N Prozessorkerne für die Erstellung nutzen"

#: guix/scripts/build.scm:175
#: guix/scripts/build.scm:322
msgid ""
"\n"
"  -M, --max-jobs=N       allow at most N build jobs"
msgstr ""

#: guix/scripts/build.scm:261 guix/scripts/build.scm:268
#: guix/scripts/build.scm:428 guix/scripts/build.scm:435
#, scheme-format
msgid "not a number: '~a' option argument: ~a~%"
msgstr ""

#: guix/scripts/build.scm:287
#: guix/scripts/build.scm:455
msgid ""
"Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n"
"Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"
msgstr ""

#: guix/scripts/build.scm:289
#: guix/scripts/build.scm:457
msgid ""
"\n"
"  -e, --expression=EXPR  build the package or derivation EXPR evaluates to"
msgstr ""

#: guix/scripts/build.scm:291
#: guix/scripts/build.scm:459
msgid ""
"\n"
"  -f, --file=FILE        build the package or derivation that the code within\n"
"                         FILE evaluates to"
msgstr ""

#: guix/scripts/build.scm:294
#: guix/scripts/build.scm:462
msgid ""
"\n"
"  -S, --source           build the packages' source derivations"
msgstr ""

#: guix/scripts/build.scm:296
#: guix/scripts/build.scm:464
msgid ""
"\n"
"      --sources[=TYPE]   build source derivations; TYPE may optionally be one\n"
"                         of \"package\", \"all\" (default), or \"transitive\""
msgstr ""

#: guix/scripts/build.scm:299
#: guix/scripts/build.scm:467
msgid ""
"\n"
"  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""
msgstr ""

#: guix/scripts/build.scm:301
#: guix/scripts/build.scm:469
msgid ""
"\n"
"      --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""
msgstr ""

#: guix/scripts/build.scm:303
#: guix/scripts/build.scm:471
msgid ""
"\n"
"      --with-source=SOURCE\n"
"                         use SOURCE when building the corresponding package"
"  -d, --derivations      return the derivation paths of the given packages"
msgstr ""

#: guix/scripts/build.scm:306
#: guix/scripts/build.scm:473
msgid ""
"\n"
"      --no-grafts        do not graft packages"
"      --check            rebuild items to check for non-determinism issues"
msgstr ""

#: guix/scripts/build.scm:308
#: guix/scripts/build.scm:475
msgid ""
"\n"
"  -d, --derivations      return the derivation paths of the given packages"
"  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
"                         as a garbage collector root"
msgstr ""

#: guix/scripts/build.scm:310
#: guix/scripts/build.scm:478
#, fuzzy
#| msgid ""
#| "\n"
#| "  -n, --dry-run          do not build the derivations"
msgid ""
"\n"
"  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
"                         as a garbage collector root"
"  -q, --quiet            do not show the build log"
msgstr ""
"\n"
"  -n, --dry-run          die Ableitungen nicht erstellen"

#: guix/scripts/build.scm:313
#: guix/scripts/build.scm:480
msgid ""
"\n"
"      --log-file         return the log file names for the given derivations"
msgstr ""

#: guix/scripts/build.scm:318 guix/scripts/download.scm:54
#: guix/scripts/package.scm:292 guix/scripts/gc.scm:70
#: guix/scripts/build.scm:487 guix/scripts/download.scm:56
#: guix/scripts/package.scm:388 guix/scripts/gc.scm:74
#: guix/scripts/hash.scm:56 guix/scripts/import.scm:91
#: guix/scripts/import/cran.scm:44 guix/scripts/pull.scm:83
#: guix/scripts/substitute.scm:752 guix/scripts/system.scm:556
#: guix/scripts/lint.scm:741 guix/scripts/publish.scm:63
#: guix/scripts/edit.scm:43 guix/scripts/size.scm:223
#: guix/scripts/graph.scm:398 guix/scripts/challenge.scm:181
#: guix/scripts/import/cran.scm:46 guix/scripts/pull.scm:83
#: guix/scripts/substitute.scm:827 guix/scripts/system.scm:695
#: guix/scripts/lint.scm:865 guix/scripts/publish.scm:73
#: guix/scripts/edit.scm:44 guix/scripts/size.scm:225
#: guix/scripts/graph.scm:364 guix/scripts/challenge.scm:182
#: guix/scripts/container.scm:33 guix/scripts/container/exec.scm:43
msgid ""
"\n"
"  -h, --help             display this help and exit"


@@ 311,14 369,15 @@ msgstr ""
"\n"
"  -h, --help             diese Hilfe anzeigen und beenden"

#: guix/scripts/build.scm:320 guix/scripts/download.scm:56
#: guix/scripts/package.scm:294 guix/scripts/gc.scm:72
#: guix/scripts/build.scm:489 guix/scripts/download.scm:58
#: guix/scripts/package.scm:390 guix/scripts/gc.scm:76
#: guix/scripts/hash.scm:58 guix/scripts/import.scm:93
#: guix/scripts/import/cran.scm:46 guix/scripts/pull.scm:85
#: guix/scripts/substitute.scm:754 guix/scripts/system.scm:558
#: guix/scripts/lint.scm:745 guix/scripts/publish.scm:65
#: guix/scripts/edit.scm:45 guix/scripts/size.scm:225
#: guix/scripts/graph.scm:400 guix/scripts/challenge.scm:183
#: guix/scripts/import/cran.scm:48 guix/scripts/pull.scm:85
#: guix/scripts/substitute.scm:829 guix/scripts/system.scm:697
#: guix/scripts/lint.scm:869 guix/scripts/publish.scm:75
#: guix/scripts/edit.scm:46 guix/scripts/size.scm:227
#: guix/scripts/graph.scm:366 guix/scripts/challenge.scm:184
#: guix/scripts/container.scm:35 guix/scripts/container/exec.scm:45
msgid ""
"\n"
"  -V, --version          display version information and exit"


@@ 326,24 385,24 @@ msgstr ""
"\n"
"  -V, --version          Versionsinformation anzeigen und beenden"

#: guix/scripts/build.scm:347
#: guix/scripts/build.scm:516
#, scheme-format
msgid ""
"invalid argument: '~a' option argument: ~a, ~\n"
"must be one of 'package', 'all', or 'transitive'~%"
msgstr ""

#: guix/scripts/build.scm:478
#: guix/scripts/build.scm:563
#, scheme-format
msgid "sources do not match any package:~{ ~a~}~%"
msgid "~s: not something we can build~%"
msgstr ""

#: guix/scripts/build.scm:536
#: guix/scripts/build.scm:643
#, scheme-format
msgid "no build log for '~a'~%"
msgstr "Kein Erstellungsprotokoll für »~a«~%"

#: guix/scripts/download.scm:45
#: guix/scripts/download.scm:47
msgid ""
"Usage: guix download [OPTION] URL\n"
"Download the file at URL, add it to the store, and print its store path\n"


@@ 353,7 412,7 @@ msgid ""
"('hex' and 'hexadecimal' can be used as well).\n"
msgstr ""

#: guix/scripts/download.scm:51 guix/scripts/hash.scm:51
#: guix/scripts/download.scm:53 guix/scripts/hash.scm:51
msgid ""
"\n"
"  -f, --format=FMT       write the hash in the given format"


@@ 361,43 420,92 @@ msgstr ""
"\n"
"  -f, --format=FORMAT    die Prüfsumme im angegebenen Format schreiben"

#: guix/scripts/download.scm:74 guix/scripts/hash.scm:76
#: guix/scripts/download.scm:76 guix/scripts/hash.scm:76
#, scheme-format
msgid "unsupported hash format: ~a~%"
msgstr "Nicht unterstütztes Prüfsummenformat: ~a~%"

#: guix/scripts/download.scm:107
#: guix/scripts/download.scm:102 guix/scripts/package.scm:842
#: guix/scripts/publish.scm:551
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr ""

#: guix/scripts/download.scm:111
#, fuzzy, scheme-format
#| msgid "~a: download failed~%"
msgid "no download URI was specified~%"
msgstr "~a: Herunterladen fehlgeschlagen~%"

#: guix/scripts/download.scm:113
#, scheme-format
msgid "~a: failed to parse URI~%"
msgstr "~a: URI~% konnte nicht verarbeitet werden"

#: guix/scripts/download.scm:118
#: guix/scripts/download.scm:126
#, scheme-format
msgid "~a: download failed~%"
msgstr "~a: Herunterladen fehlgeschlagen~%"

#: guix/scripts/package.scm:128
#: guix/scripts/package.scm:104
#, scheme-format
msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
msgstr ""

#: guix/scripts/package.scm:126
#, scheme-format
msgid "error: while creating directory `~a': ~a~%"
msgstr "Fehler beim Anlegen des Verzeichnisses »~a«: ~a~%"

#: guix/scripts/package.scm:130
#, scheme-format
msgid "Please create the `~a' directory, with you as the owner.~%"
msgstr "Bitte legen Sie das Verzeichnis »~a« mit Ihnen als Eigentümer an.~%"

#: guix/scripts/package.scm:137
#, scheme-format
msgid "error: directory `~a' is not owned by you~%"
msgstr "Fehler: Das Verzeichnis »~a« gehört Ihnen nicht~%"

#: guix/scripts/package.scm:140
#, scheme-format
msgid "Please change the owner of `~a' to user ~s.~%"
msgstr "Bitte ändern Sie den Eigentümer von »~a« in Benutzer ~s.~%"

#: guix/scripts/package.scm:175
#, scheme-format
msgid "not removing generation ~a, which is current~%"
msgstr ""

#: guix/scripts/package.scm:135
#: guix/scripts/package.scm:182
#, scheme-format
msgid "no matching generation~%"
msgstr "Keine passende Generation%"

#: guix/scripts/package.scm:138 guix/scripts/package.scm:734
#: guix/scripts/system.scm:396
#: guix/scripts/package.scm:185 guix/scripts/package.scm:659
#: guix/scripts/system.scm:502
#, scheme-format
msgid "invalid syntax: ~a~%"
msgstr "Unzulässige Syntax: ~a~%"

#: guix/scripts/package.scm:219
#: guix/scripts/package.scm:210
#, scheme-format
msgid "nothing to be done~%"
msgstr "Nichts zu tun~%"

#: guix/scripts/package.scm:224
#, scheme-format
msgid "~a package in profile~%"
msgid_plural "~a packages in profile~%"
msgstr[0] "~a Paket im Profil~%"
msgstr[1] "~a Pakete im Profil~%"

#: guix/scripts/package.scm:313
#, scheme-format
msgid "The following environment variable definitions may be needed:~%"
msgstr "Die Definition folgender Umgebungsvariablen könnte nötig sein:~%"

#: guix/scripts/package.scm:235
#: guix/scripts/package.scm:329
msgid ""
"Usage: guix package [OPTION]...\n"
"Install, remove, or upgrade packages in a single transaction.\n"


@@ 406,7 514,7 @@ msgstr ""
"Pakete in einer einzigen Transaktion installieren,\n"
"entfernen oder aktualisieren.\n"

#: guix/scripts/package.scm:237
#: guix/scripts/package.scm:331
msgid ""
"\n"
"  -i, --install PACKAGE ...\n"


@@ 415,14 523,14 @@ msgstr ""
"\n"
"  -i, --install=PAKET    PAKET oder PAKETE installieren"

#: guix/scripts/package.scm:240
#: guix/scripts/package.scm:334
msgid ""
"\n"
"  -e, --install-from-expression=EXP\n"
"                         install the package EXP evaluates to"
msgstr ""

#: guix/scripts/package.scm:243
#: guix/scripts/package.scm:337
msgid ""
"\n"
"  -f, --install-from-file=FILE\n"


@@ 430,7 538,7 @@ msgid ""
"                         evaluates to"
msgstr ""

#: guix/scripts/package.scm:247
#: guix/scripts/package.scm:341
msgid ""
"\n"
"  -r, --remove PACKAGE ...\n"


@@ 439,32 547,32 @@ msgstr ""
"\n"
"  -r, --remove=PAKET     PAKET oder PAKETE entfernen"

#: guix/scripts/package.scm:250
#: guix/scripts/package.scm:344
msgid ""
"\n"
"  -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"
msgstr ""

#: guix/scripts/package.scm:252
#: guix/scripts/package.scm:346
msgid ""
"\n"
"  -m, --manifest=FILE    create a new profile generation with the manifest\n"
"                         from FILE"
msgstr ""

#: guix/scripts/package.scm:255
#: guix/scripts/package.scm:349
msgid ""
"\n"
"      --do-not-upgrade[=REGEXP] do not upgrade any packages matching REGEXP"
msgstr ""

#: guix/scripts/package.scm:257
#: guix/scripts/package.scm:351
msgid ""
"\n"
"      --roll-back        roll back to the previous generation"
msgstr ""

#: guix/scripts/package.scm:259
#: guix/scripts/package.scm:353
msgid ""
"\n"
"      --search-paths[=KIND]\n"


@@ 474,40 582,40 @@ msgstr ""
"      --search-paths[=ART]\n"
"                         benötigte Definitionen von Umgebungsvariablen anzeigen"

#: guix/scripts/package.scm:262
#: guix/scripts/package.scm:356
msgid ""
"\n"
"  -l, --list-generations[=PATTERN]\n"
"                         list generations matching PATTERN"
msgstr ""

#: guix/scripts/package.scm:265
#: guix/scripts/package.scm:359
msgid ""
"\n"
"  -d, --delete-generations[=PATTERN]\n"
"                         delete generations matching PATTERN"
msgstr ""

#: guix/scripts/package.scm:268
#: guix/scripts/package.scm:362
msgid ""
"\n"
"  -S, --switch-generation=PATTERN\n"
"                         switch to a generation matching PATTERN"
msgstr ""

#: guix/scripts/package.scm:271
#: guix/scripts/package.scm:365
msgid ""
"\n"
"  -p, --profile=PROFILE  use PROFILE instead of the user's default profile"
msgstr ""

#: guix/scripts/package.scm:274
#: guix/scripts/package.scm:368
msgid ""
"\n"
"      --bootstrap        use the bootstrap Guile to build the profile"
msgstr ""

#: guix/scripts/package.scm:276 guix/scripts/pull.scm:76
#: guix/scripts/package.scm:370 guix/scripts/pull.scm:76
msgid ""
"\n"
"      --verbose          produce verbose output"


@@ 515,27 623,27 @@ msgstr ""
"\n"
"      --verbose          ausführliche Ausgaben anzeigen"

#: guix/scripts/package.scm:279
#: guix/scripts/package.scm:373
msgid ""
"\n"
"  -s, --search=REGEXP    search in synopsis and description using REGEXP"
msgstr ""

#: guix/scripts/package.scm:281
#: guix/scripts/package.scm:375
msgid ""
"\n"
"  -I, --list-installed[=REGEXP]\n"
"                         list installed packages matching REGEXP"
msgstr ""

#: guix/scripts/package.scm:284
#: guix/scripts/package.scm:378
msgid ""
"\n"
"  -A, --list-available[=REGEXP]\n"
"                         list available packages matching REGEXP"
msgstr ""

#: guix/scripts/package.scm:287
#: guix/scripts/package.scm:381
msgid ""
"\n"
"      --show=PACKAGE     show details about PACKAGE"


@@ 543,69 651,27 @@ msgstr ""
"\n"
"      --show=PAKET       Details zu PAKET anzeigen"

#: guix/scripts/package.scm:380
#: guix/scripts/package.scm:476
#, scheme-format
msgid "~a: unsupported kind of search path~%"
msgstr ""

#: guix/scripts/package.scm:550 guix/scripts/publish.scm:357
#, scheme-format
msgid "~A: extraneous argument~%"
msgstr ""

#: guix/scripts/package.scm:558
#, scheme-format
msgid "Try \"info '(guix) Invoking guix package'\" for more information.~%"
msgstr ""

#: guix/scripts/package.scm:580
#, scheme-format
msgid "error: while creating directory `~a': ~a~%"
msgstr "Fehler beim Anlegen des Verzeichnisses »~a«: ~a~%"

#: guix/scripts/package.scm:584
#, scheme-format
msgid "Please create the `~a' directory, with you as the owner.~%"
msgstr "Bitte legen Sie das Verzeichnis »~a« mit Ihnen als Eigentümer an.~%"

#: guix/scripts/package.scm:591
#, scheme-format
msgid "error: directory `~a' is not owned by you~%"
msgstr "Fehler: Das Verzeichnis »~a« gehört Ihnen nicht~%"

#: guix/scripts/package.scm:594
#, scheme-format
msgid "Please change the owner of `~a' to user ~s.~%"
msgstr "Bitte ändern Sie den Eigentümer von »~a« in Benutzer ~s.~%"

#: guix/scripts/package.scm:628
#, scheme-format
msgid "nothing to be done~%"
msgstr "Nichts zu tun~%"

#: guix/scripts/package.scm:644
#, scheme-format
msgid "~a package in profile~%"
msgid_plural "~a packages in profile~%"
msgstr[0] "~a Paket im Profil~%"
msgstr[1] "~a Pakete im Profil~%"

#: guix/scripts/package.scm:668
#: guix/scripts/package.scm:755
#, scheme-format
msgid "cannot switch to generation '~a'~%"
msgstr "Zu Generation »~a« kann nicht gewechselt werden~%"

#: guix/scripts/package.scm:690
#: guix/scripts/package.scm:771
#, scheme-format
msgid "would install new manifest from '~a' with ~d entries~%"
msgstr ""

#: guix/scripts/package.scm:692
#: guix/scripts/package.scm:773
#, scheme-format
msgid "installing new manifest from '~a' with ~d entries~%"
msgstr ""

#: guix/scripts/gc.scm:40
#: guix/scripts/gc.scm:42
msgid ""
"Usage: guix gc [OPTION]... PATHS...\n"
"Invoke the garbage collector.\n"


@@ 613,14 679,20 @@ msgstr ""
"Aufruf: guix gc [OPTION] … PFADE …\n"
"Ruft den Müllsammler auf.\n"

#: guix/scripts/gc.scm:42
#: guix/scripts/gc.scm:44
msgid ""
"\n"
"  -C, --collect-garbage[=MIN]\n"
"                         collect at least MIN bytes of garbage"
msgstr ""

#: guix/scripts/gc.scm:45
#: guix/scripts/gc.scm:47
msgid ""
"\n"
"  -F, --free-space=FREE  attempt to reach FREE available space in the store"
msgstr ""

#: guix/scripts/gc.scm:49
msgid ""
"\n"
"  -d, --delete           attempt to delete PATHS"


@@ 628,43 700,43 @@ msgstr ""
"\n"
"  -d, --delete           versuchen, PFADE zu löschen"

#: guix/scripts/gc.scm:47
#: guix/scripts/gc.scm:51
msgid ""
"\n"
"      --optimize         optimize the store by deduplicating identical files"
msgstr ""

#: guix/scripts/gc.scm:49
#: guix/scripts/gc.scm:53
msgid ""
"\n"
"      --list-dead        list dead paths"
msgstr ""

#: guix/scripts/gc.scm:51
#: guix/scripts/gc.scm:55
msgid ""
"\n"
"      --list-live        list live paths"
msgstr ""

#: guix/scripts/gc.scm:54
#: guix/scripts/gc.scm:58
msgid ""
"\n"
"      --references       list the references of PATHS"
msgstr ""

#: guix/scripts/gc.scm:56
#: guix/scripts/gc.scm:60
msgid ""
"\n"
"  -R, --requisites       list the requisites of PATHS"
msgstr ""

#: guix/scripts/gc.scm:58
#: guix/scripts/gc.scm:62
msgid ""
"\n"
"      --referrers        list the referrers of PATHS"
msgstr ""

#: guix/scripts/gc.scm:61
#: guix/scripts/gc.scm:65
msgid ""
"\n"
"      --verify[=OPTS]    verify the integrity of the store; OPTS is a\n"


@@ 672,23 744,41 @@ msgid ""
"                         'contents'"
msgstr ""

#: guix/scripts/gc.scm:65
#: guix/scripts/gc.scm:69
msgid ""
"\n"
"      --list-failures    list cached build failures"
msgstr ""

#: guix/scripts/gc.scm:67
#: guix/scripts/gc.scm:71
msgid ""
"\n"
"      --clear-failures   remove PATHS from the set of cached failures"
msgstr ""

#: guix/scripts/gc.scm:96
#: guix/scripts/gc.scm:100
#, scheme-format
msgid "invalid amount of storage: ~a~%"
msgstr "Ungültiger Speicher-Wert: ~a~%"

#: guix/scripts/gc.scm:191
msgid "already ~h bytes available on ~a, nothing to do~%"
msgstr ""

#: guix/scripts/gc.scm:194
msgid "freeing ~h bytes~%"
msgstr ""

#: guix/scripts/gc.scm:206
#, fuzzy, scheme-format
#| msgid "invalid argument: ~a~%"
msgid "extraneous arguments: ~{~a ~}~%"
msgstr "Ungültiges Argument: ~a~%"

#: guix/scripts/gc.scm:226 guix/scripts/gc.scm:229
msgid "freed ~h bytes~%"
msgstr ""

#: guix/scripts/hash.scm:46
msgid ""
"Usage: guix hash [OPTION] FILE\n"


@@ 711,12 801,12 @@ msgstr ""
msgid "unrecognized option: ~a~%"
msgstr "Nicht erkannte Option: ~a~%"

#: guix/scripts/hash.scm:135 guix/ui.scm:458
#: guix/scripts/hash.scm:135 guix/ui.scm:477
#, scheme-format
msgid "~a~%"
msgstr "~a~%"

#: guix/scripts/hash.scm:138 guix/scripts/system.scm:685
#: guix/scripts/hash.scm:138 guix/scripts/system.scm:825
#, scheme-format
msgid "wrong number of arguments~%"
msgstr "Falsche Argumentanzahl~%"


@@ 738,10 828,17 @@ msgstr "IMPORTER muss einer der unten aufgelisteten Importer sein:\n"
msgid "guix import: missing importer name~%"
msgstr "guix import: Importer-Name fehlt~%"

#: guix/scripts/import.scm:113
#, scheme-format
msgid "guix import: invalid importer~%"
msgstr ""
#: guix/scripts/import.scm:115
#, fuzzy, scheme-format
#| msgid "~a: download failed~%"
msgid "'~a' import failed~%"
msgstr "~a: Herunterladen fehlgeschlagen~%"

#: guix/scripts/import.scm:116
#, fuzzy, scheme-format
#| msgid "~a: invalid number~%"
msgid "~a: invalid importer~%"
msgstr "~a: ungültige Zahl~%"

#: guix/scripts/import/cran.scm:42
msgid ""


@@ 749,17 846,23 @@ msgid ""
"Import and convert the CRAN package for PACKAGE-NAME.\n"
msgstr ""

#: guix/scripts/import/cran.scm:87
#: guix/scripts/import/cran.scm:44
msgid ""
"\n"
"  -a, --archive=ARCHIVE  specify the archive repository"
msgstr ""

#: guix/scripts/import/cran.scm:94
#, scheme-format
msgid "failed to download description for package '~a'~%"
msgstr "Beschreibung für Paket »~a« konnte nicht geladen werden~%"

#: guix/scripts/import/cran.scm:91 guix/scripts/import/elpa.scm:95
#: guix/scripts/import/cran.scm:98 guix/scripts/import/elpa.scm:95
#, scheme-format
msgid "too few arguments~%"
msgstr "Zu wenige Argumente~%"

#: guix/scripts/import/cran.scm:93 guix/scripts/import/elpa.scm:97
#: guix/scripts/import/cran.scm:100 guix/scripts/import/elpa.scm:97
#, scheme-format
msgid "too many arguments~%"
msgstr "Zu viele Argumente~%"


@@ 851,100 954,146 @@ msgstr "~A: unerwartetes Argument~%"
msgid "failed to download up-to-date source, exiting\n"
msgstr "Aktueller Quellcode konnte nicht heruntergeladen werden, Abbruch\n"

#: guix/scripts/substitute.scm:103
#: guix/scripts/substitute.scm:113
#, scheme-format
msgid "authentication and authorization of substitutes disabled!~%"
msgstr ""

#: guix/scripts/substitute.scm:179
#: guix/scripts/substitute.scm:188
#, scheme-format
msgid "download from '~a' failed: ~a, ~s~%"
msgstr "Herunterladen von »~a« ist fehlgeschlagen: ~a, ~s~%"

#: guix/scripts/substitute.scm:191
#: guix/scripts/substitute.scm:201
#, scheme-format
msgid "while fetching ~a: server is somewhat slow~%"
msgstr "Beim Holen von ~a: Server ist etwas langsam~%"

#: guix/scripts/substitute.scm:193
#: guix/scripts/substitute.scm:203
#, scheme-format
msgid "try `--no-substitutes' if the problem persists~%"
msgstr "Versuchen Sie »--no-substitutes«, falls das Problem weiter besteht~%"

#: guix/scripts/substitute.scm:266
#: guix/scripts/substitute.scm:219
#, fuzzy, scheme-format
#| msgid "unsupported signature version: ~a~%"
msgid "unsupported substitute URI scheme: ~a~%"
msgstr "Signaturversion wird nicht unterstützt: ~a~%"

#: guix/scripts/substitute.scm:252
#, fuzzy, scheme-format
#| msgid "while fetching ~a: server is somewhat slow~%"
msgid "while fetching '~a': ~a (~s)~%"
msgstr "Beim Holen von ~a: Server ist etwas langsam~%"

#: guix/scripts/substitute.scm:257
#, scheme-format
msgid "ignoring substitute server at '~s'~%"
msgstr ""

#: guix/scripts/substitute.scm:306
#, scheme-format
msgid "signature version must be a number: ~s~%"
msgstr "Signaturversion muss eine Zahl sein: ~s~%"

#: guix/scripts/substitute.scm:270
#: guix/scripts/substitute.scm:310
#, scheme-format
msgid "unsupported signature version: ~a~%"
msgstr "Signaturversion wird nicht unterstützt: ~a~%"

#: guix/scripts/substitute.scm:278
#: guix/scripts/substitute.scm:318
#, scheme-format
msgid "signature is not a valid s-expression: ~s~%"
msgstr ""

#: guix/scripts/substitute.scm:282
#: guix/scripts/substitute.scm:322
#, scheme-format
msgid "invalid format of the signature field: ~a~%"
msgstr "Unzulässiges Format des Signaturfeldes: ~a~%"

#: guix/scripts/substitute.scm:317
#: guix/scripts/substitute.scm:357
#, scheme-format
msgid "invalid signature for '~a'~%"
msgstr "Ungültige Signatur für »~a«~%"

#: guix/scripts/substitute.scm:319
#: guix/scripts/substitute.scm:359
#, scheme-format
msgid "hash mismatch for '~a'~%"
msgstr "Prüfsummenfehler für »~a«~%"

#: guix/scripts/substitute.scm:321
#: guix/scripts/substitute.scm:361
#, scheme-format
msgid "'~a' is signed with an unauthorized key~%"
msgstr ""

#: guix/scripts/substitute.scm:323
#: guix/scripts/substitute.scm:363
#, scheme-format
msgid "signature on '~a' is corrupt~%"
msgstr "Signature von »~a« ist beschädigt~%"

#: guix/scripts/substitute.scm:361
#: guix/scripts/substitute.scm:401
#, scheme-format
msgid "substitute at '~a' lacks a signature~%"
msgstr ""

#: guix/scripts/substitute.scm:537
#: guix/scripts/substitute.scm:409
#, fuzzy, scheme-format
#| msgid "found valid signature for '~a'~%"
msgid "~%Found valid signature for ~a~%"
msgstr "Gültige Signatur für »~a« gefunden~%"

#: guix/scripts/substitute.scm:412
#, fuzzy, scheme-format
#| msgid "~a~%"
msgid "From ~a~%"
msgstr "~a~%"

#: guix/scripts/substitute.scm:452
#, fuzzy, scheme-format
#| msgid "profile '~a' does not exist~%"
msgid "'~a' does not name a store item~%"
msgstr "Profil »~a« existiert nicht~%"

#: guix/scripts/substitute.scm:596
#, scheme-format
msgid "updating list of substitutes from '~a'... ~5,1f%"
msgstr ""

#: guix/scripts/substitute.scm:591
#: guix/scripts/substitute.scm:646
#, scheme-format
msgid "~s: unsupported server URI scheme~%"
msgstr ""

#: guix/scripts/substitute.scm:733
#: guix/scripts/substitute.scm:656
#, scheme-format
msgid "'~a' uses different store '~a'; ignoring it~%"
msgstr ""

#: guix/scripts/substitute.scm:801
#, scheme-format
msgid "host name lookup error: ~a~%"
msgstr "Fehler beim Nachschlagen des Rechnernamens: ~a~%"

#: guix/scripts/substitute.scm:742
#: guix/scripts/substitute.scm:806
#, fuzzy, scheme-format
#| msgid "error: while creating directory `~a': ~a~%"
msgid "TLS error in procedure '~a': ~a~%"
msgstr "Fehler beim Anlegen des Verzeichnisses »~a«: ~a~%"

#: guix/scripts/substitute.scm:817
msgid ""
"Usage: guix substitute [OPTION]...\n"
"Internal tool to substitute a pre-built binary to a local build.\n"
msgstr ""

#: guix/scripts/substitute.scm:744
#: guix/scripts/substitute.scm:819
msgid ""
"\n"
"      --query            report on the availability of substitutes for the\n"
"                         store file names passed on the standard input"
msgstr ""

#: guix/scripts/substitute.scm:747
#: guix/scripts/substitute.scm:822
msgid ""
"\n"
"      --substitute STORE-FILE DESTINATION\n"


@@ 952,11 1101,19 @@ msgid ""
"                         DESTINATION"
msgstr ""

#: guix/scripts/substitute.scm:872
#. TRANSLATORS: The second part of this message looks like
#. "(4.1MiB installed)"; it shows the size of the package once
#. installed.
#: guix/scripts/substitute.scm:895
#, scheme-format
msgid "Downloading ~a~:[~*~; (~a installed)~]...~%"
msgstr ""

#: guix/scripts/substitute.scm:951
msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n"
msgstr ""

#: guix/scripts/substitute.scm:954
#: guix/scripts/substitute.scm:1047
#, scheme-format
msgid "~a: unrecognized options~%"
msgstr "~a: nicht erkannte Optionen~%"


@@ 995,76 1152,137 @@ msgstr ""
msgid "wrong arguments"
msgstr "Falsche Argumente"

#: guix/scripts/system.scm:105
#: guix/scripts/system.scm:111
#, scheme-format
msgid "failed to register '~a' under '~a'~%"
msgstr "»~a« konnte nicht unter »~a« registriert werden~%"

#: guix/scripts/system.scm:137
#: guix/scripts/system.scm:144
#, scheme-format
msgid "failed to install GRUB on device '~a'~%"
msgstr "GRUB konnte nicht auf Gerät »~a« installiert werden~%"

#: guix/scripts/system.scm:155
#: guix/scripts/system.scm:162
#, scheme-format
msgid "initializing the current root file system~%"
msgstr "Aktuelles Wurzeldateisystem wird initialisiert~%"

#: guix/scripts/system.scm:169
#: guix/scripts/system.scm:176
#, scheme-format
msgid "not running as 'root', so the ownership of '~a' may be incorrect!~%"
msgstr ""

#: guix/scripts/system.scm:219
#: guix/scripts/system.scm:234
#, scheme-format
msgid "unrecognized boot parameters for '~a'~%"
msgstr "Nicht erkannte Startparameter für »~a«~%"
msgid "while talking to shepherd: ~a~%"
msgstr ""

#: guix/scripts/system.scm:248
#, fuzzy, scheme-format
#| msgid "service of type '~a' not found"
msgid "service '~a' could not be found~%"
msgstr "Dienst des Typs »~a« wurde nicht gefunden"

#: guix/scripts/system.scm:251
#, fuzzy, scheme-format
#| msgid "profile '~a' does not exist~%"
msgid "service '~a' does not have an action '~a'~%"
msgstr "Profil »~a« existiert nicht~%"

#: guix/scripts/system.scm:255
#, fuzzy, scheme-format
#| msgid "corrupt input while restoring '~a' from ~s~%"
msgid "exception caught while executing '~a' on service '~a':~%"
msgstr "Beschädigte Eingabe, während »~a« aus »~s« wiederhergestellt wurde~%"

#: guix/scripts/system.scm:263
#, fuzzy, scheme-format
#| msgid "no matching generation~%"
msgid "something went wrong: ~s~%"
msgstr "Keine passende Generation%"

#: guix/scripts/system.scm:266
#, scheme-format
msgid "shepherd error~%"
msgstr ""

#: guix/scripts/system.scm:302
#, fuzzy, scheme-format
#| msgid "failed to install GRUB on device '~a'~%"
msgid "failed to obtain list of shepherd services~%"
msgstr "GRUB konnte nicht auf Gerät »~a« installiert werden~%"

#: guix/scripts/system.scm:322
#, fuzzy, scheme-format
#| msgid "unpacking '~a'...~%"
msgid "unloading service '~a'...~%"
msgstr "»~a« wird entpackt …~%"

#: guix/scripts/system.scm:330
#, scheme-format
msgid "loading new services:~{ ~a~}...~%"
msgstr ""

#: guix/scripts/system.scm:254
#: guix/scripts/system.scm:354
#, scheme-format
msgid "activating system...~%"
msgstr "System wird aktiviert …~%"

#: guix/scripts/system.scm:338
#: guix/scripts/system.scm:445
msgid "the DAG of services"
msgstr ""

#: guix/scripts/system.scm:351
msgid "the dependency graph of dmd services"
#: guix/scripts/system.scm:458
msgid "the dependency graph of shepherd services"
msgstr ""

#: guix/scripts/system.scm:369
#: guix/scripts/system.scm:479
#, scheme-format
msgid "  file name: ~a~%"
msgstr "  Dateiname: ~a~%"

#: guix/scripts/system.scm:370
#: guix/scripts/system.scm:480
#, scheme-format
msgid "  canonical file name: ~a~%"
msgstr ""

#. TRANSLATORS: Please preserve the two-space indentation.
#: guix/scripts/system.scm:374
#: guix/scripts/system.scm:482
#, scheme-format
msgid "  label: ~a~%"
msgstr "  Label: ~a~%"

#: guix/scripts/system.scm:375
#: guix/scripts/system.scm:483
#, scheme-format
msgid "  root device: ~a~%"
msgstr "  Root-Gerät: ~a~%"

#: guix/scripts/system.scm:376
#: guix/scripts/system.scm:484
#, scheme-format
msgid "  kernel: ~a~%"
msgstr "  Kernel: ~a~%"

#: guix/scripts/system.scm:476
#: guix/scripts/system.scm:541
#, scheme-format
msgid "~a not found: 'guix pull' was never run~%"
msgstr ""

#: guix/scripts/system.scm:542
#, scheme-format
msgid "Consider running 'guix pull' before 'reconfigure'.~%"
msgstr ""

#: guix/scripts/system.scm:543
#, scheme-format
msgid "Failing to do that may downgrade your system!~%"
msgstr ""

#: guix/scripts/system.scm:613
#, scheme-format
msgid "initializing operating system under '~a'...~%"
msgstr "Betriebssystem unter »~a« wird initialisiert …~%"

#: guix/scripts/system.scm:515
#: guix/scripts/system.scm:652
msgid ""
"Usage: guix system [OPTION] ACTION [FILE]\n"
"Build the operating system declared in FILE according to ACTION.\n"


@@ 1072,62 1290,70 @@ msgstr ""
"Aufruf: guix system [OPTION] AKTION [DATEI]\n"
"Das in DATEI deklarierte Betriebssystem entsprechend der AKTION erstellen.\n"

#: guix/scripts/system.scm:518
#: guix/scripts/system.scm:655 guix/scripts/container.scm:28
msgid "The valid values for ACTION are:\n"
msgstr "Die gültigen Werte für AKTION sind:\n"

#: guix/scripts/system.scm:520
#: guix/scripts/system.scm:657
msgid "   reconfigure      switch to a new operating system configuration\n"
msgstr "   reconfigure      zur neuen Betriebssystemkonfiguration wechseln\n"

#: guix/scripts/system.scm:522
#: guix/scripts/system.scm:659
msgid "   list-generations list the system generations\n"
msgstr ""

#: guix/scripts/system.scm:524
#: guix/scripts/system.scm:661
msgid "   build            build the operating system without installing anything\n"
msgstr "   build            das Betriebssystem erstellen, ohne etwas zu installieren\n"

#: guix/scripts/system.scm:526
#: guix/scripts/system.scm:663
#, fuzzy
#| msgid "   vm               build a virtual machine image that shares the host's store\n"
msgid "   container        build a container that shares the host's store\n"
msgstr ""
"   vm               ein Image für eine virtuelle Maschine erstellen, das den\n"
"                    Speicher des Rechners nutzt\n"

#: guix/scripts/system.scm:665
msgid "   vm               build a virtual machine image that shares the host's store\n"
msgstr ""
"   vm               ein Image für eine virtuelle Maschine erstellen, das den\n"
"                    Speicher des Rechners nutzt\n"

#: guix/scripts/system.scm:528
#: guix/scripts/system.scm:667
msgid "   vm-image         build a freestanding virtual machine image\n"
msgstr "   vm-image         ein unabhängiges Image für eine virtuelle Maschine erstellen\n"

#: guix/scripts/system.scm:530
#: guix/scripts/system.scm:669
msgid "   disk-image       build a disk image, suitable for a USB stick\n"
msgstr "   disk-image       ein Disk-Image für einen USB-Stick erstellen\n"

#: guix/scripts/system.scm:532
#: guix/scripts/system.scm:671
msgid "   init             initialize a root file system to run GNU\n"
msgstr "   init             ein Wurzeldateisystem initialisieren, um GNU auszuführen.\n"

#: guix/scripts/system.scm:534
#: guix/scripts/system.scm:673
msgid "   extension-graph  emit the service extension graph in Dot format\n"
msgstr ""

#: guix/scripts/system.scm:536
msgid "   dmd-graph        emit the graph of dmd services in Dot format\n"
#: guix/scripts/system.scm:675
msgid "   shepherd-graph   emit the graph of shepherd services in Dot format\n"
msgstr ""

#: guix/scripts/system.scm:540
#: guix/scripts/system.scm:679
msgid ""
"\n"
"  -d, --derivation       return the derivation of the given system"
msgstr ""

#: guix/scripts/system.scm:542
#: guix/scripts/system.scm:681
msgid ""
"\n"
"      --on-error=STRATEGY\n"
"                         apply STRATEGY when an error occurs while reading FILE"
msgstr ""

#: guix/scripts/system.scm:545
#: guix/scripts/system.scm:684
msgid ""
"\n"
"      --image-size=SIZE  for 'vm-image', produce an image of SIZE"


@@ 1135,7 1361,7 @@ msgstr ""
"\n"
"      --image-size=GRÖSSE für »vm-image«, ein Image der GRÖSSE erstellen"

#: guix/scripts/system.scm:547
#: guix/scripts/system.scm:686
msgid ""
"\n"
"      --no-grub          for 'init', do not install GRUB"


@@ 1143,19 1369,19 @@ msgstr ""
"\n"
"      --no-grub          für »init«, GRUB nicht installieren"

#: guix/scripts/system.scm:549
#: guix/scripts/system.scm:688
msgid ""
"\n"
"      --share=SPEC       for 'vm', share host file system according to SPEC"
msgstr ""

#: guix/scripts/system.scm:551
#: guix/scripts/system.scm:690
msgid ""
"\n"
"      --expose=SPEC      for 'vm', expose host file system according to SPEC"
msgstr ""

#: guix/scripts/system.scm:553
#: guix/scripts/system.scm:692
msgid ""
"\n"
"      --full-boot        for 'vm', make a full boot sequence"


@@ 1163,210 1389,253 @@ msgstr ""
"\n"
"      --full-boot        für »vm«, vollständige Boot-Sequenz"

#: guix/scripts/system.scm:637
#: guix/scripts/system.scm:777
#, scheme-format
msgid "no configuration file specified~%"
msgstr "Keine Konfigurationsdatei angegeben~%"

#: guix/scripts/system.scm:700
#: guix/scripts/system.scm:840
#, scheme-format
msgid "~a: unknown action~%"
msgstr "~a: unbekannte Aktion~%"

#: guix/scripts/system.scm:715
#: guix/scripts/system.scm:855
#, scheme-format
msgid "wrong number of arguments for action '~a'~%"
msgstr "Falsche Anzahl an Argumenten für Aktion »~a«~%"

#: guix/scripts/system.scm:720
#: guix/scripts/system.scm:860
#, scheme-format
msgid "guix system: missing command name~%"
msgstr "guix system: Befehlsname fehlt~%"

#: guix/scripts/system.scm:722
#: guix/scripts/system.scm:862
#, scheme-format
msgid "Try 'guix system --help' for more information.~%"
msgstr "Rufen Sie »guix system --help« auf, um weitere Informationen zu erhalten.~%"

#: guix/scripts/lint.scm:124
#: guix/scripts/lint.scm:130
#, scheme-format
msgid "Available checkers:~%"
msgstr "Verfügbare Prüfer:~%"

#: guix/scripts/lint.scm:144
#: guix/scripts/lint.scm:150
msgid "description should not be empty"
msgstr ""

#: guix/scripts/lint.scm:154
#: guix/scripts/lint.scm:160
msgid "Texinfo markup in description is invalid"
msgstr ""

#: guix/scripts/lint.scm:162
#: guix/scripts/lint.scm:168
msgid "description should start with an upper-case letter or digit"
msgstr ""

#: guix/scripts/lint.scm:178
#: guix/scripts/lint.scm:184
#, scheme-format
msgid ""
"sentences in description should be followed ~\n"
"by two spaces; possible infraction~p at ~{~a~^, ~}"
msgstr ""

#: guix/scripts/lint.scm:202
msgid "pkg-config should probably be a native input"
#: guix/scripts/lint.scm:200
#, fuzzy, scheme-format
#| msgid "Validate package descriptions"
msgid "invalid description: ~s"
msgstr "Paketbeschreibungen überprüfen"

#: guix/scripts/lint.scm:220
#, scheme-format
msgid "'~a' should probably be a native input"
msgstr ""

#: guix/scripts/lint.scm:217
#: guix/scripts/lint.scm:238
msgid "synopsis should not be empty"
msgstr ""

#: guix/scripts/lint.scm:225
#: guix/scripts/lint.scm:246
msgid "no period allowed at the end of the synopsis"
msgstr "Am Ende der Zusammenfassung darf kein Punkt gesetzt werden"

#: guix/scripts/lint.scm:237
#: guix/scripts/lint.scm:258
msgid "no article allowed at the beginning of the synopsis"
msgstr "Am Beginn der Zusammenfassung darf kein Punkt stehen"
msgstr "Am Beginn der Zusammenfassung darf kein Artikel stehen"

#: guix/scripts/lint.scm:244
#: guix/scripts/lint.scm:265
msgid "synopsis should be less than 80 characters long"
msgstr "Zusammenfassung sollte nicht länger als 80 Zeichen sein"

#: guix/scripts/lint.scm:250
#: guix/scripts/lint.scm:271
msgid "synopsis should start with an upper-case letter or digit"
msgstr "Zusammenfassung sollte mit einem Großbuchstaben oder einer Zahl beginnen"

#: guix/scripts/lint.scm:257
#: guix/scripts/lint.scm:278
msgid "synopsis should not start with the package name"
msgstr "Zusammenfassung sollte nicht mit dem Paketnamen beginnen"

#: guix/scripts/lint.scm:348 guix/scripts/lint.scm:360
#: guix/scripts/lint.scm:292
#, scheme-format
msgid "invalid synopsis: ~s"
msgstr "Unzulässige Zusammenfassung: ~s"

#: guix/scripts/lint.scm:383
#, scheme-format
msgid "URI ~a returned suspiciously small file (~a bytes)"
msgstr ""

#: guix/scripts/lint.scm:392 guix/scripts/lint.scm:404
#, scheme-format
msgid "URI ~a not reachable: ~a (~s)"
msgstr ""

#: guix/scripts/lint.scm:367
#: guix/scripts/lint.scm:411
#, scheme-format
msgid "URI ~a domain not found: ~a"
msgstr "URI-Domain ~a nicht gefunden: ~a"

#: guix/scripts/lint.scm:375
#: guix/scripts/lint.scm:419
#, scheme-format
msgid "URI ~a unreachable: ~a"
msgstr "URI ~a ist nicht erreichbar: ~a"

#: guix/scripts/lint.scm:401
#: guix/scripts/lint.scm:445
msgid "invalid value for home page"
msgstr "Ungültiger Wert für Homepage"

#: guix/scripts/lint.scm:404
#: guix/scripts/lint.scm:448
#, scheme-format
msgid "invalid home page URL: ~s"
msgstr "Ungültige URL für Homepage: ~s"

#: guix/scripts/lint.scm:429
#: guix/scripts/lint.scm:468
msgid "file names of patches should start with the package name"
msgstr "Dateinamen oder Patches sollten mit dem Paketnamen beginnen"

#: guix/scripts/lint.scm:467
#: guix/scripts/lint.scm:507
#, scheme-format
msgid "~a: ~a: proposed synopsis: ~s~%"
msgstr "~a: ~a: vorgeschlagene Zusammenfassung: ~s~%"

#: guix/scripts/lint.scm:479
#: guix/scripts/lint.scm:520
#, scheme-format
msgid "~a: ~a: proposed description:~%     \"~a\"~%"
msgstr "~a: ~a: vorgeschlagene Beschreibung:~%     \"~a\"~%"

#: guix/scripts/lint.scm:516
#: guix/scripts/lint.scm:557
msgid "all the source URIs are unreachable:"
msgstr "Alle Quell-URIs sind nicht erreichbar:"

#: guix/scripts/lint.scm:539
#: guix/scripts/lint.scm:580
msgid "the source file name should contain the package name"
msgstr "Der Name der Quelldatei sollte den Paketnamen enthalten"

#: guix/scripts/lint.scm:548 guix/scripts/lint.scm:552
#: guix/scripts/lint.scm:589 guix/scripts/lint.scm:593
#, scheme-format
msgid "failed to create derivation: ~a"
msgstr "Ableitung konnte nicht erstellt werden: ~a"

#: guix/scripts/lint.scm:558
#: guix/scripts/lint.scm:607
#, scheme-format
msgid "failed to create derivation: ~s~%"
msgstr "Ableitung konnte nicht erstellt werden: ~s~%"

#: guix/scripts/lint.scm:568
#: guix/scripts/lint.scm:617
msgid "invalid license field"
msgstr "Ungültiges Lizenz-Feld"

#: guix/scripts/lint.scm:582
#: guix/scripts/lint.scm:634
#, fuzzy, scheme-format
#| msgid "failed to create derivation: ~s~%"
msgid "failed to retrieve CVE vulnerabilities from ~s: ~a (~s)~%"
msgstr "Ableitung konnte nicht erstellt werden: ~s~%"

#: guix/scripts/lint.scm:639 guix/scripts/lint.scm:647
#, scheme-format
msgid "assuming no CVE vulnerabilities~%"
msgstr ""

#: guix/scripts/lint.scm:645
#, fuzzy, scheme-format
#| msgid "failed to load '~a': ~a~%"
msgid "failed to lookup NIST host: ~a~%"
msgstr "»~a« konnte nicht geladen werden: ~a~%"

#: guix/scripts/lint.scm:683
#, scheme-format
msgid "probably vulnerable to ~a"
msgstr ""

#: guix/scripts/lint.scm:698
#, scheme-format
msgid "tabulation on line ~a, column ~a"
msgstr "Tabulator in Zeile ~a, Spalte ~a"

#: guix/scripts/lint.scm:591
#: guix/scripts/lint.scm:707
#, scheme-format
msgid "trailing white space on line ~a"
msgstr "Führende Leerzeichen in Zeile ~a"
msgstr "Leerzeichen am Ende der Zeile ~a"

#: guix/scripts/lint.scm:601
#: guix/scripts/lint.scm:717
#, scheme-format
msgid "line ~a is way too long (~a characters)"
msgstr "Zeile ~a ist viel zu lang (~a Zeichen)"

#: guix/scripts/lint.scm:612
#: guix/scripts/lint.scm:728
#, scheme-format
msgid "line ~a: parentheses feel lonely, move to the previous or next line"
msgstr ""

#: guix/scripts/lint.scm:667
#: guix/scripts/lint.scm:783
msgid "Validate package descriptions"
msgstr "Paketbeschreibungen überprüfen"

#: guix/scripts/lint.scm:671
#: guix/scripts/lint.scm:787
msgid "Validate synopsis & description of GNU packages"
msgstr "GNU-Paketzusammenfassung und -beschreibungen überprüfen"

#: guix/scripts/lint.scm:675
#: guix/scripts/lint.scm:791
msgid "Identify inputs that should be native inputs"
msgstr "Eingaben prüfen, die native Eingaben sein sollten"

#: guix/scripts/lint.scm:679
#: guix/scripts/lint.scm:795
msgid "Validate file names and availability of patches"
msgstr "Dateinamen und Verfügbarkeit der Patches überprüfen"

#: guix/scripts/lint.scm:683
#: guix/scripts/lint.scm:799
msgid "Validate home-page URLs"
msgstr "Homepage-URLs überprüfen"

#. TRANSLATORS: <license> is the name of a data type and must not be
#. translated.
#: guix/scripts/lint.scm:689
#: guix/scripts/lint.scm:805
msgid "Make sure the 'license' field is a <license> or a list thereof"
msgstr ""

#: guix/scripts/lint.scm:694
#: guix/scripts/lint.scm:810
msgid "Validate source URLs"
msgstr "Quell-URLs überprüfen"

#: guix/scripts/lint.scm:698
#: guix/scripts/lint.scm:814
msgid "Validate file names of sources"
msgstr "Dateinamen der Quellen überprüfen"

#: guix/scripts/lint.scm:702
#: guix/scripts/lint.scm:818
msgid "Report failure to compile a package to a derivation"
msgstr ""

#: guix/scripts/lint.scm:706
#: guix/scripts/lint.scm:822
msgid "Validate package synopses"
msgstr "Paketzusammenfassungen überprüfen"

#: guix/scripts/lint.scm:710
#: guix/scripts/lint.scm:826
msgid "Check the Common Vulnerabilities and Exposures (CVE) database"
msgstr ""

#: guix/scripts/lint.scm:831
msgid "Look for formatting issues in the source"
msgstr "Nach Formatierungsfehlern in der Quelle schauen"

#: guix/scripts/lint.scm:735
#: guix/scripts/lint.scm:859
msgid ""
"Usage: guix lint [OPTION]... [PACKAGE]...\n"
"Run a set of checkers on the specified package; if none is specified,\n"


@@ 1377,7 1646,7 @@ msgstr ""
"Falls keine angegeben sind, werden alle verfügbaren Überprüfungen\n"
"mit allen Paketen ausgeführt.\n"

#: guix/scripts/lint.scm:738
#: guix/scripts/lint.scm:862
msgid ""
"\n"
"  -c, --checkers=CHECKER1,CHECKER2...\n"


@@ 1387,7 1656,7 @@ msgstr ""
"  -c, --checkers=PRÜFER1,PRÜFER2 …\n"
"                         nur die angegebenen Prüfer aufrufen"

#: guix/scripts/lint.scm:743
#: guix/scripts/lint.scm:867
msgid ""
"\n"
"  -l, --list-checkers    display the list of available lint checkers"


@@ 1395,12 1664,12 @@ msgstr ""
"\n"
"  -l, --list-checkers    Liste der verfügbaren Überprüfungen anzeigen"

#: guix/scripts/lint.scm:763
#: guix/scripts/lint.scm:887
#, scheme-format
msgid "~a: invalid checker~%"
msgstr "~a: unzulässiger Prüfer~%"

#: guix/scripts/publish.scm:52
#: guix/scripts/publish.scm:57
#, scheme-format
msgid ""
"Usage: guix publish [OPTION]...\n"


@@ 1409,7 1678,7 @@ msgstr ""
"Aufruf: guix publish [OPTION]...\n"
"~a über HTTP bereitstellen.\n"

#: guix/scripts/publish.scm:54
#: guix/scripts/publish.scm:59
msgid ""
"\n"
"  -p, --port=PORT        listen on PORT"


@@ 1417,90 1686,124 @@ msgstr ""
"\n"
"  -p, --port=PORT        an PORT lauschen"

#: guix/scripts/publish.scm:56
#: guix/scripts/publish.scm:61
msgid ""
"\n"
"      --listen=HOST      listen on the network interface for HOST"
msgstr ""

#: guix/scripts/publish.scm:58
#: guix/scripts/publish.scm:63
msgid ""
"\n"
"  -u, --user=USER        change privileges to USER as soon as possible"
msgstr ""

#: guix/scripts/publish.scm:60
#: guix/scripts/publish.scm:65
msgid ""
"\n"
"  -C, --compression[=LEVEL]\n"
"                         compress archives at LEVEL"
msgstr ""

#: guix/scripts/publish.scm:68
msgid ""
"\n"
"      --ttl=TTL          announce narinfos can be cached for TTL seconds"
msgstr ""

#: guix/scripts/publish.scm:70
msgid ""
"\n"
"  -r, --repl[=PORT]      spawn REPL server on PORT"
msgstr ""

#: guix/scripts/publish.scm:76
#: guix/scripts/publish.scm:86
#, scheme-format
msgid "lookup of host '~a' failed: ~a~%"
msgstr "Suche nach Host »~a« ist fehlgeschlagen: ~a~%"

#: guix/scripts/publish.scm:100
#: guix/scripts/publish.scm:124
#, scheme-format
msgid "lookup of host '~a' returned nothing"
msgstr "Suche nach Host »~a« lieferte kein Ergebnis"

#: guix/scripts/publish.scm:343
#: guix/scripts/publish.scm:137
#, scheme-format
msgid "zlib support is missing; compression disabled~%"
msgstr ""

#: guix/scripts/publish.scm:144
#, fuzzy, scheme-format
#| msgid "~a: invalid number~%"
msgid "~a: invalid duration~%"
msgstr "~a: ungültige Zahl~%"

#: guix/scripts/publish.scm:537
#, scheme-format
msgid "user '~a' not found: ~a~%"
msgstr "Benutzer »~a« nicht gefunden: ~a~%"

#: guix/scripts/publish.scm:378
#: guix/scripts/publish.scm:574
#, scheme-format
msgid "server running as root; consider using the '--user' option!~%"
msgstr ""

#: guix/scripts/publish.scm:380
#: guix/scripts/publish.scm:576
#, scheme-format
msgid "publishing ~a on ~a, port ~d~%"
msgstr "~a wird auf ~a bereitgestellt, Port ~d~%"

#: guix/scripts/edit.scm:40
#: guix/scripts/edit.scm:41
msgid ""
"Usage: guix edit PACKAGE...\n"
"Start $EDITOR to edit the definitions of PACKAGE...\n"
"Start $VISUAL or $EDITOR to edit the definitions of PACKAGE...\n"
msgstr ""

#: guix/scripts/edit.scm:58
#: guix/scripts/edit.scm:62
#, scheme-format
msgid "file '~a' not found in search path ~s~%"
msgstr "Datei »~a« im Suchpfad ~s nicht gefunden~%"

#: guix/scripts/edit.scm:70
#: guix/scripts/edit.scm:83
#, scheme-format
msgid "source location of package '~a' is unknown~%"
msgstr "Quellort des Pakets »~a« ist unbekannt~%"

#: guix/scripts/size.scm:75
#: guix/scripts/edit.scm:96
#, scheme-format
msgid "failed to launch '~a': ~a~%"
msgstr "»~a« konnte nicht gestartet werden: ~a~%"

#: guix/scripts/size.scm:76
#, scheme-format
msgid "no available substitute information for '~a'~%"
msgstr ""

#: guix/scripts/size.scm:83
#: guix/scripts/size.scm:84
msgid "store item"
msgstr ""

#: guix/scripts/size.scm:83
#: guix/scripts/size.scm:84
msgid "total"
msgstr ""

#: guix/scripts/size.scm:83
#: guix/scripts/size.scm:84
msgid "self"
msgstr ""

#: guix/scripts/size.scm:95
#, scheme-format
msgid "total: ~,1f MiB~%"
msgstr ""

#. TRANSLATORS: This is the title of a graph, meaning that the graph
#. represents a profile of the store (the "store" being the place where
#. packages are stored.)
#: guix/scripts/size.scm:204
#: guix/scripts/size.scm:206
msgid "store profile"
msgstr ""

#: guix/scripts/size.scm:213
#: guix/scripts/size.scm:215
msgid ""
"Usage: guix size [OPTION]... PACKAGE\n"
"Report the size of PACKAGE and its dependencies.\n"


@@ 1508,13 1811,13 @@ msgstr ""
"Aufruf: guix size [OPTION] … PAKET …\n"
"Größe des PAKETs und seiner Abhängigkeiten ermitteln.\n"

#: guix/scripts/size.scm:218
#: guix/scripts/size.scm:220
msgid ""
"\n"
"  -s, --system=SYSTEM    consider packages for SYSTEM--e.g., \"i686-linux\""
msgstr ""

#: guix/scripts/size.scm:220
#: guix/scripts/size.scm:222
msgid ""
"\n"
"  -m, --map-file=FILE    write to FILE a graphical map of disk usage"


@@ 1523,63 1826,78 @@ msgstr ""
"  -m, --map-file=DATEI   eine grafische Darstellung des Plattenplatzverbrauchs\n"
"                         in DATEI schreiben"

#: guix/scripts/size.scm:274
#: guix/scripts/size.scm:276
msgid "missing store item argument\n"
msgstr ""

#: guix/scripts/size.scm:292
msgid "too many arguments\n"
msgstr "Zu wenige Argumente\n"
#: guix/scripts/graph.scm:82
#, scheme-format
msgid "~a: invalid argument (package name expected)"
msgstr "~a: Unzulässiges Argument (Paketname wurde erwartet)"

#: guix/scripts/graph.scm:105
#: guix/scripts/graph.scm:93
msgid "the DAG of packages, excluding implicit inputs"
msgstr ""

#: guix/scripts/graph.scm:155
#: guix/scripts/graph.scm:150
msgid "the DAG of packages, including implicit inputs"
msgstr ""

#: guix/scripts/graph.scm:179
#: guix/scripts/graph.scm:160
msgid "the DAG of packages and origins, including implicit inputs"
msgstr ""

#: guix/scripts/graph.scm:191
msgid "same as 'bag', but without the bootstrap nodes"
msgstr ""

#: guix/scripts/graph.scm:222
#: guix/scripts/graph.scm:237
msgid "the DAG of derivations"
msgstr ""

#: guix/scripts/graph.scm:246
#: guix/scripts/graph.scm:249
#, fuzzy
#| msgid "unsupported signature version: ~a~%"
msgid "unsupported argument for derivation graph"
msgstr "Signaturversion wird nicht unterstützt: ~a~%"

#: guix/scripts/graph.scm:270
#, scheme-format
msgid "references for '~a' are not known~%"
msgstr ""
msgstr "Referenzen für »~a« sind unbekannt~%"

#: guix/scripts/graph.scm:253
#: guix/scripts/graph.scm:277
msgid "the DAG of run-time dependencies (store references)"
msgstr ""

#: guix/scripts/graph.scm:282
#: guix/scripts/graph.scm:290
msgid "unsupported argument for reference graph"
msgstr ""

#: guix/scripts/graph.scm:315
#, scheme-format
msgid "~a: unknown node type~%"
msgstr "~a: unbekannter Node-Typ~%"

#: guix/scripts/graph.scm:286
#: guix/scripts/graph.scm:319
msgid "The available node types are:\n"
msgstr "Die gültigen Node-Typen sind:\n"

#. TRANSLATORS: Here 'dot' is the name of a program; it must not be
#. translated.
#: guix/scripts/graph.scm:389
#: guix/scripts/graph.scm:355
msgid ""
"Usage: guix graph PACKAGE...\n"
"Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"
msgstr ""

#: guix/scripts/graph.scm:391
#: guix/scripts/graph.scm:357
msgid ""
"\n"
"  -t, --type=TYPE        represent nodes of the given TYPE"
msgstr ""

#: guix/scripts/graph.scm:393
#: guix/scripts/graph.scm:359
msgid ""
"\n"
"      --list-types       list the available graph types"


@@ 1587,140 1905,203 @@ msgstr ""
"\n"
"      --list-types       verfügbare Diagrammtypen auflisten"

#: guix/scripts/graph.scm:395
#: guix/scripts/graph.scm:361
msgid ""
"\n"
"  -e, --expression=EXPR  consider the package EXPR evaluates to"
msgstr ""

#: guix/scripts/challenge.scm:104
#: guix/scripts/challenge.scm:105
#, scheme-format
msgid "~a: no substitute at '~a'~%"
msgstr ""

#: guix/scripts/challenge.scm:120
#: guix/scripts/challenge.scm:121
#, scheme-format
msgid "no substitutes for '~a'~%"
msgstr ""

#: guix/scripts/challenge.scm:137 guix/scripts/challenge.scm:157
#: guix/scripts/challenge.scm:138 guix/scripts/challenge.scm:158
#, scheme-format
msgid "no local build for '~a'~%"
msgstr ""

#: guix/scripts/challenge.scm:154
#: guix/scripts/challenge.scm:155
#, scheme-format
msgid "~a contents differ:~%"
msgstr ""

#: guix/scripts/challenge.scm:156
#: guix/scripts/challenge.scm:157
#, scheme-format
msgid "  local hash: ~a~%"
msgstr "  lokale Prüfsumme: ~a~%"

#: guix/scripts/challenge.scm:161
#: guix/scripts/challenge.scm:162
#, scheme-format
msgid "  ~50a: ~a~%"
msgstr "  ~50a: ~a~%"

#: guix/scripts/challenge.scm:165
#: guix/scripts/challenge.scm:166
#, scheme-format
msgid "  ~50a: unavailable~%"
msgstr "  ~50a: nicht verfügbar~%"

#: guix/scripts/challenge.scm:175
#: guix/scripts/challenge.scm:176
msgid ""
"Usage: guix challenge [PACKAGE...]\n"
"Challenge the substitutes for PACKAGE... provided by one or more servers.\n"
msgstr ""

#: guix/scripts/challenge.scm:177
#: guix/scripts/challenge.scm:178
msgid ""
"\n"
"      --substitute-urls=URLS\n"
"                         compare build results with those at URLS"
msgstr ""

#: guix/gnu-maintenance.scm:418
#: guix/gnu-maintenance.scm:532
msgid "Updater for GNU packages"
msgstr "Aktualisierungswerkzeug für GNU-Pakete"

#: guix/upstream.scm:156
#: guix/gnu-maintenance.scm:539
msgid "Updater for GNOME packages"
msgstr "Aktualisierungswerkzeug für GNOME-Pakete"

#: guix/gnu-maintenance.scm:546
msgid "Updater for X.org packages"
msgstr "Aktualisierungswerkzeug für X.org-Pakete"

#: guix/scripts/container.scm:25
msgid ""
"Usage: guix container ACTION ARGS...\n"
"Build and manipulate Linux containers.\n"
msgstr ""

#: guix/scripts/container.scm:30
msgid "   exec            execute a command inside of an existing container\n"
msgstr "   exec            führt einen Befehl innerhalb eines vorhandenen Containers aus\n"

#: guix/scripts/container.scm:53
#, scheme-format
msgid "guix container: missing action~%"
msgstr "guix container: Aktion fehlt~%"

#: guix/scripts/container.scm:63
#, scheme-format
msgid "guix container: invalid action~%"
msgstr "guix container: Unzulässige Aktion~%"

#: guix/scripts/container/exec.scm:40
msgid ""
"Usage: guix container exec PID COMMAND [ARGS...]\n"
"Execute COMMMAND within the container process PID.\n"
msgstr ""

#: guix/scripts/container/exec.scm:69
#, scheme-format
msgid "~a: extraneous argument~%"
msgstr "~a: zusätzliches Argument~%"

#: guix/scripts/container/exec.scm:80
#, scheme-format
msgid "no pid specified~%"
msgstr "Keine Prozess-ID angegeben~%"

#: guix/scripts/container/exec.scm:83
#, scheme-format
msgid "no command specified~%"
msgstr "Kein Befehl angegeben~%"

#: guix/scripts/container/exec.scm:86
#, scheme-format
msgid "no such process ~d~%"
msgstr "Kein solcher Prozess ~d~%"

#: guix/scripts/container/exec.scm:94
#, scheme-format
msgid "exec failed with status ~d~%"
msgstr ""

#: guix/upstream.scm:157
#, scheme-format
msgid "signature verification failed for `~a'~%"
msgstr "Verifizierung der Signatur fehlgeschlagen für »~a«~%"

#: guix/upstream.scm:158
#: guix/upstream.scm:159
#, scheme-format
msgid "(could be because the public key is not in your keyring)~%"
msgstr "(vielleicht befindet sich Ihr öffentlicher Schlüssel nicht im Schlüsselbund)~%"

#: guix/upstream.scm:190
#: guix/upstream.scm:191
msgid "gz"
msgstr "gz"

#: guix/upstream.scm:253
#: guix/upstream.scm:234
#, scheme-format
msgid "~a: could not locate source file"
msgstr "~a: Quelldatei konnte nicht gefunden werden"

#: guix/upstream.scm:258
#: guix/upstream.scm:239
#, scheme-format
msgid "~a: ~a: no `version' field in source; skipping~%"
msgstr "~a: ~a: kein »version«-Feld in der Quelle; wird übersprungen~%"

#: guix/ui.scm:234
#: guix/ui.scm:238
msgid "entering debugger; type ',bt' for a backtrace\n"
msgstr ""

#: guix/ui.scm:250 guix/ui.scm:267
#: guix/ui.scm:254 guix/ui.scm:271
#, scheme-format
msgid "failed to load '~a': ~a~%"
msgstr "»~a« konnte nicht geladen werden: ~a~%"

#: guix/ui.scm:253
#: guix/ui.scm:257
#, scheme-format
msgid "~a: error: ~a~%"
msgstr "~a: Fehler: ~a~%"

#: guix/ui.scm:256 guix/ui.scm:510
#: guix/ui.scm:260 guix/ui.scm:529
#, scheme-format
msgid "exception thrown: ~s~%"
msgstr ""

#: guix/ui.scm:258 guix/ui.scm:276
#: guix/ui.scm:262 guix/ui.scm:280
#, scheme-format
msgid "failed to load '~a':~%"
msgstr "»~a« konnte nicht geladen werden:~%"

#: guix/ui.scm:270
#: guix/ui.scm:274
#, scheme-format
msgid "~a: warning: ~a~%"
msgstr "~a: Warnung: ~a~%"

#: guix/ui.scm:273
#: guix/ui.scm:277
#, scheme-format
msgid "failed to load '~a': exception thrown: ~s~%"
msgstr ""

#: guix/ui.scm:285
#: guix/ui.scm:289
#, scheme-format
msgid "failed to install locale: ~a~%"
msgstr "Locale konnte nicht installiert werden: ~a~%"

#: guix/ui.scm:304
#: guix/ui.scm:308
msgid ""
"Copyright (C) 2015 the Guix authors\n"
"Copyright (C) 2016 the Guix authors\n"
"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
"This is free software: you are free to change and redistribute it.\n"
"There is NO WARRANTY, to the extent permitted by law.\n"
msgstr ""
"Copyright (C) 2015 Die Guix-Autoren\n"
"Copyright (C) 2016 Die Guix-Autoren\n"
"Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl.html>\n"
"Dies ist freie Software: Sie können Sie ändern und weitergeben.\n"
"Es gibt keine Garantie, soweit gesetzlich zulässig.\n"

#: guix/ui.scm:312
#. TRANSLATORS: The placeholder indicates the bug-reporting address for this
#. package.  Please add another line saying "Report translation bugs to
#. ...\n" with the address for translation bugs (typically your translation
#. team's web or email address).
#: guix/ui.scm:320
#, scheme-format
msgid ""
"\n"


@@ 1729,7 2110,7 @@ msgstr ""
"\n"
"Melden Sie Fehler an: ~a."

#: guix/ui.scm:314
#: guix/ui.scm:322
#, scheme-format
msgid ""
"\n"


@@ 1738,7 2119,7 @@ msgstr ""
"\n"
"~a Homepage: <~a>"

#: guix/ui.scm:316
#: guix/ui.scm:324
msgid ""
"\n"
"General help using GNU software: <http://www.gnu.org/gethelp/>"


@@ 1746,219 2127,227 @@ msgstr ""
"\n"
"Allgemeine Hilfe zu GNU-Software: <http://www.gnu.org/gethelp/>"

#: guix/ui.scm:361
#: guix/ui.scm:369
#, scheme-format
msgid "'~a' is not a valid regular expression: ~a~%"
msgstr "»~a« ist kein gültiger regulärer Ausdruck: ~a~%"

#: guix/ui.scm:367
#: guix/ui.scm:375
#, scheme-format
msgid "~a: invalid number~%"
msgstr "~a: ungültige Zahl~%"

#: guix/ui.scm:384
#: guix/ui.scm:392
#, scheme-format
msgid "invalid number: ~a~%"
msgstr "Ungültige Zahl: ~a~%"

#: guix/ui.scm:407
#: guix/ui.scm:415
#, scheme-format
msgid "unknown unit: ~a~%"
msgstr "Unbekannte Einheit: ~a~%"

#: guix/ui.scm:418
#: guix/ui.scm:432
#, scheme-format
msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%"
msgstr ""

#: guix/ui.scm:425
#: guix/ui.scm:439
#, scheme-format
msgid "~a: ~a: build system `~a' does not support cross builds~%"
msgstr ""

#: guix/ui.scm:430
#: guix/ui.scm:444
#, scheme-format
msgid "profile '~a' does not exist~%"
msgstr "Profil »~a« existiert nicht~%"

#: guix/ui.scm:433
#: guix/ui.scm:447
#, scheme-format
msgid "generation ~a of profile '~a' does not exist~%"
msgstr "Generation ~a des Profils »~a« existiert nicht~%"

#: guix/ui.scm:440
#: guix/ui.scm:454
#, scheme-format
msgid "corrupt input while restoring '~a' from ~s~%"
msgstr "Beschädigte Eingabe, während »~a« aus »~s« wiederhergestellt wurde~%"

#: guix/ui.scm:442
#: guix/ui.scm:456
#, scheme-format
msgid "corrupt input while restoring archive from ~s~%"
msgstr "Beschädigte Eingabe, während das Archiv aus »~s« wiederhergestellt wurde~%"

#: guix/ui.scm:445
#: guix/ui.scm:459
#, scheme-format
msgid "failed to connect to `~a': ~a~%"
msgstr "Verbindung zu »~a« fehlgeschlagen: ~a~%"

#: guix/ui.scm:450
#: guix/ui.scm:464
#, scheme-format
msgid "build failed: ~a~%"
msgstr "Erstellung fehlgeschlagen: ~a~%"

#: guix/ui.scm:453
#: guix/ui.scm:467
#, scheme-format
msgid "reference to invalid output '~a' of derivation '~a'~%"
msgstr ""

#: guix/ui.scm:464
#: guix/ui.scm:471
#, scheme-format
msgid "file '~a' could not be found in these directories:~{ ~a~}~%"
msgstr "Datei »~a« konnte in diesen Verzeichnissen nicht gefunden werden:~{ ~a~}~%"

#: guix/ui.scm:483
#, scheme-format
msgid "~a: ~a~%"
msgstr "~a: ~a~%"

#: guix/ui.scm:499
#: guix/ui.scm:518
#, scheme-format
msgid "failed to read expression ~s: ~s~%"
msgstr "Ausdruck ~s konnte nicht gelesen werden: ~s~%"

#: guix/ui.scm:505
#: guix/ui.scm:524
#, scheme-format
msgid "failed to evaluate expression '~a':~%"
msgstr "Ausdruck »~a« kann nicht ausgewertet werden:~%"

#: guix/ui.scm:508
#: guix/ui.scm:527
#, scheme-format
msgid "syntax error: ~a~%"
msgstr "Syntaxfehler: ~a~%"

#: guix/ui.scm:522
#: guix/ui.scm:541
#, scheme-format
msgid "expression ~s does not evaluate to a package~%"
msgstr "Ausdruck ~s ergibt kein Paket~%"

#: guix/ui.scm:582
#: guix/ui.scm:603
#, scheme-format
msgid "~:[The following derivation would be built:~%~{   ~a~%~}~;~]"
msgid_plural "~:[The following derivations would be built:~%~{   ~a~%~}~;~]"
msgstr[0] ""
msgstr[1] ""

#: guix/ui.scm:587
#: guix/ui.scm:608
#, scheme-format
msgid "~:[The following file would be downloaded:~%~{   ~a~%~}~;~]"
msgid_plural "~:[The following files would be downloaded:~%~{   ~a~%~}~;~]"
msgstr[0] ""
msgstr[1] ""

#: guix/ui.scm:593
#: guix/ui.scm:614
#, scheme-format
msgid "~:[The following derivation will be built:~%~{   ~a~%~}~;~]"
msgid_plural "~:[The following derivations will be built:~%~{   ~a~%~}~;~]"
msgstr[0] ""
msgstr[1] ""

#: guix/ui.scm:598
#: guix/ui.scm:619
#, scheme-format
msgid "~:[The following file will be downloaded:~%~{   ~a~%~}~;~]"
msgid_plural "~:[The following files will be downloaded:~%~{   ~a~%~}~;~]"
msgstr[0] "~:[Die folgende Datei wird heruntergeladen:~%~{   ~a~%~}~;~]"
msgstr[1] "~:[Die folgenden Dateien werden heruntergeladen:~%~{   ~a~%~}~;~]"

#: guix/ui.scm:653
#: guix/ui.scm:674
#, scheme-format
msgid "The following package would be removed:~%~{~a~%~}~%"
msgid_plural "The following packages would be removed:~%~{~a~%~}~%"
msgstr[0] "Das folgende Paket würde entfernt werden:~%~{~a~%~}~%"
msgstr[1] "Die folgenden Pakete würden entfernt werden:~%~{~a~%~}~%"

#: guix/ui.scm:658
#: guix/ui.scm:679
#, scheme-format
msgid "The following package will be removed:~%~{~a~%~}~%"
msgid_plural "The following packages will be removed:~%~{~a~%~}~%"
msgstr[0] "Das folgende Paket würde entfernt werden:~%~{~a~%~}~%"
msgstr[1] "Die folgenden Pakete würden entfernt werden:~%~{~a~%~}~%"

#: guix/ui.scm:671
#: guix/ui.scm:692
#, scheme-format
msgid "The following package would be downgraded:~%~{~a~%~}~%"
msgid_plural "The following packages would be downgraded:~%~{~a~%~}~%"
msgstr[0] "Die Version des folgenden Pakets würde heruntergestuft werden:~%~{~a~%~}~%"
msgstr[1] "Die Version der folgenden Pakete würde heruntergestuft werden:~%~{~a~%~}~%"

#: guix/ui.scm:676
#: guix/ui.scm:697
#, scheme-format
msgid "The following package will be downgraded:~%~{~a~%~}~%"
msgid_plural "The following packages will be downgraded:~%~{~a~%~}~%"
msgstr[0] "Die Version des folgenden Pakets wird heruntergestuft:~%~{~a~%~}~%"
msgstr[1] "Die Version der folgenden Pakete wird heruntergestuft:~%~{~a~%~}~%"

#: guix/ui.scm:689
#: guix/ui.scm:710
#, scheme-format
msgid "The following package would be upgraded:~%~{~a~%~}~%"
msgid_plural "The following packages would be upgraded:~%~{~a~%~}~%"
msgstr[0] "Das folgende Paket würde aktualisiert werden:~%~{~a~%~}~%"
msgstr[1] "Die folgenden Pakete würden aktualisiert werden:~%~{~a~%~}~%"

#: guix/ui.scm:694
#: guix/ui.scm:715
#, scheme-format
msgid "The following package will be upgraded:~%~{~a~%~}~%"
msgid_plural "The following packages will be upgraded:~%~{~a~%~}~%"
msgstr[0] "Das folgende Paket wird aktualisiert:~%~{~a~%~}~%"
msgstr[1] "Die folgenden Pakete werden aktualisiert:~%~{~a~%~}~%"

#: guix/ui.scm:705
#: guix/ui.scm:726
#, scheme-format
msgid "The following package would be installed:~%~{~a~%~}~%"
msgid_plural "The following packages would be installed:~%~{~a~%~}~%"
msgstr[0] "Das folgende Paket würde installiert werden:~%~{~a~%~}~%"
msgstr[1] "Die folgenden Pakete würden installiert werden:~%~{~a~%~}~%"

#: guix/ui.scm:710
#: guix/ui.scm:731
#, scheme-format
msgid "The following package will be installed:~%~{~a~%~}~%"
msgid_plural "The following packages will be installed:~%~{~a~%~}~%"
msgstr[0] "Das folgende Paket wird installiert:~%~{~a~%~}~%"
msgstr[1] "Die folgenden Pakete werden installiert:~%~{~a~%~}~%"

#: guix/ui.scm:727
#: guix/ui.scm:748
msgid "<unknown location>"
msgstr "<unbekannter Ort>"

#: guix/ui.scm:746
#: guix/ui.scm:767
#, scheme-format
msgid "failed to create configuration directory `~a': ~a~%"
msgstr "Konfigurationsverzeichnis »~a« konnte nicht angelegt werden: ~a~%"

#: guix/ui.scm:865 guix/ui.scm:879
#: guix/ui.scm:890 guix/ui.scm:904
msgid "unknown"
msgstr "unbekannt"

#: guix/ui.scm:1029
#: guix/ui.scm:1062
#, scheme-format
msgid "Generation ~a\t~a"
msgstr "Generation ~a\t~a"

#: guix/ui.scm:1036
#. TRANSLATORS: The word "current" here is an adjective for
#. "Generation", as in "current generation".  Use the appropriate
#. gender where applicable.
#: guix/ui.scm:1072
#, scheme-format
msgid "~a\t(current)~%"
msgstr "~a\t(aktuell)~%"

#: guix/ui.scm:1053
#: guix/ui.scm:1089
#, scheme-format
msgid "switched from generation ~a to ~a~%"
msgstr "Von Generation »~a« zu »~a« gewechselt~%"

#: guix/ui.scm:1069
#: guix/ui.scm:1105
#, scheme-format
msgid "deleting ~a~%"
msgstr "~a wird gelöscht~%"

#: guix/ui.scm:1117
#: guix/ui.scm:1153
#, scheme-format
msgid "Try `guix --help' for more information.~%"
msgstr "Rufen Sie »guix --help« auf, um weitere Informationen zu erhalten.~%"

#: guix/ui.scm:1144
#: guix/ui.scm:1180
msgid ""
"Usage: guix COMMAND ARGS...\n"
"Run COMMAND with ARGS.\n"


@@ 1966,31 2355,31 @@ msgstr ""
"Aufruf: guix BEFEHL ARGUMENTE …\n"
"BEFEHL mit ARGUMENTEN ausführen.\n"

#: guix/ui.scm:1147
#: guix/ui.scm:1183
msgid "COMMAND must be one of the sub-commands listed below:\n"
msgstr "BEFEHL muss einer der unten aufgelisteten Unterbefehle sein:\n"

#: guix/ui.scm:1167
#: guix/ui.scm:1203
#, scheme-format
msgid "guix: ~a: command not found~%"
msgstr "guix: ~a: Befehl nicht gefunden~%"

#: guix/ui.scm:1184
#: guix/ui.scm:1220
#, scheme-format
msgid "guix: missing command name~%"
msgstr "guix: Befehlsname fehlt~%"

#: guix/ui.scm:1192
#: guix/ui.scm:1228
#, scheme-format
msgid "guix: unrecognized option '~a'~%"
msgstr "guix: nicht erkannte Option »~a«~%"

#: guix/http-client.scm:228
#: guix/http-client.scm:266
#, scheme-format
msgid "following redirection to `~a'...~%"
msgstr "Weiterleitung zu »~a« wird gefolgt …~%"

#: guix/http-client.scm:237
#: guix/http-client.scm:275
msgid "download failed"
msgstr "Herunterladen fehlgeschlagen"



@@ 2044,113 2433,131 @@ msgstr ""
msgid "This program is a daemon meant to run in the background.  It serves requests sent over a Unix-domain socket.  It accesses the store, and builds derivations on behalf of its clients."
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:86
#: nix/nix-daemon/guix-daemon.cc:87
msgid "SYSTEM"
msgstr "SYSTEM"

#: nix/nix-daemon/guix-daemon.cc:87
#: nix/nix-daemon/guix-daemon.cc:88
msgid "assume SYSTEM as the current system type"
msgstr "SYSTEM als aktuellen Systemtyp annehmen"

#: nix/nix-daemon/guix-daemon.cc:88 nix/nix-daemon/guix-daemon.cc:91
#: nix/nix-daemon/guix-daemon.cc:89 nix/nix-daemon/guix-daemon.cc:92
msgid "N"
msgstr "N"

#: nix/nix-daemon/guix-daemon.cc:89
#: nix/nix-daemon/guix-daemon.cc:90
msgid "use N CPU cores to build each derivation; 0 means as many as available"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:92
#: nix/nix-daemon/guix-daemon.cc:93
msgid "allow at most N build jobs"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:94
#: nix/nix-daemon/guix-daemon.cc:95
msgid "disable chroot builds"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:95
#: nix/nix-daemon/guix-daemon.cc:96
msgid "DIR"
msgstr "VERZ"

#: nix/nix-daemon/guix-daemon.cc:96
#: nix/nix-daemon/guix-daemon.cc:97
msgid "add DIR to the build chroot"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:97
#: nix/nix-daemon/guix-daemon.cc:98
msgid "GROUP"
msgstr "GRUPPE"

#: nix/nix-daemon/guix-daemon.cc:98
#: nix/nix-daemon/guix-daemon.cc:99
msgid "perform builds as a user of GROUP"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:100
#: nix/nix-daemon/guix-daemon.cc:101
msgid "do not use substitutes"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:101
#: nix/nix-daemon/guix-daemon.cc:102
msgid "URLS"
msgstr "URLS"

#: nix/nix-daemon/guix-daemon.cc:102
#: nix/nix-daemon/guix-daemon.cc:103
msgid "use URLS as the default list of substitute providers"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:104
#: nix/nix-daemon/guix-daemon.cc:105
msgid "do not use the 'build hook'"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:106
#: nix/nix-daemon/guix-daemon.cc:107
msgid "cache build failures"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:108
#: nix/nix-daemon/guix-daemon.cc:109
msgid "build each derivation N times in a row"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:111
msgid "do not keep build logs"
msgstr "Erstellungsprotokolle nicht behalten"

#: nix/nix-daemon/guix-daemon.cc:110
#: nix/nix-daemon/guix-daemon.cc:113
msgid "disable compression of the build logs"
msgstr ""
msgstr "Erstellungsprotokolle nicht komprimieren"

#: nix/nix-daemon/guix-daemon.cc:115
#: nix/nix-daemon/guix-daemon.cc:118
msgid "disable automatic file \"deduplication\" in the store"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:125
#: nix/nix-daemon/guix-daemon.cc:128
msgid "impersonate Linux 2.6"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:129
#: nix/nix-daemon/guix-daemon.cc:132
msgid "tell whether the GC must keep outputs of live derivations"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:132
#: nix/nix-daemon/guix-daemon.cc:135
msgid "tell whether the GC must keep derivations corresponding to live outputs"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:135
#: nix/nix-daemon/guix-daemon.cc:138
msgid "SOCKET"
msgstr "SOCKET"

#: nix/nix-daemon/guix-daemon.cc:136
#: nix/nix-daemon/guix-daemon.cc:139
msgid "listen for connections on SOCKET"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:138
#: nix/nix-daemon/guix-daemon.cc:141
msgid "produce debugging output"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:205 nix/nix-daemon/guix-daemon.cc:381
#: nix/nix-daemon/guix-daemon.cc:201
#, c-format
msgid "error: %s: invalid number of rounds\n"
msgstr ""

#: nix/nix-daemon/guix-daemon.cc:220 nix/nix-daemon/guix-daemon.cc:396
#, c-format
msgid "error: %s\n"
msgstr "Fehler: %s\n"

#: nix/nix-daemon/guix-daemon.cc:266
#: nix/nix-daemon/guix-daemon.cc:281
#, c-format
msgid "error: libgcrypt version mismatch\n"
msgstr "Fehler: libgcrypt-Version passt nicht\n"

#: nix/nix-daemon/guix-daemon.cc:357
#: nix/nix-daemon/guix-daemon.cc:372
#, c-format
msgid "warning: daemon is running as root, so using `--build-users-group' is highly recommended\n"
msgstr ""

#~ msgid "looking for the latest release of GNU ~a..."
#~ msgstr "Nach der letzten Veröffentlichung von GNU ~a wird gesucht …"

#~ msgid "~a: package not found~%"
#~ msgstr "~a: Paket nicht gefunden~%"

#~ msgid "too many arguments\n"
#~ msgstr "Zu wenige Argumente\n"

M tests/utils.scm => tests/utils.scm +32 -0
@@ 111,6 111,38 @@
        (ensure-keyword-arguments '(#:foo 2) '(#:bar 3))
        (ensure-keyword-arguments '(#:foo 2) '(#:bar 3 #:foo 42))))

(test-equal "default-keyword-arguments"
  '((#:foo 2)
    (#:foo 2)
    (#:foo 2 #:bar 3)
    (#:foo 2 #:bar 3)
    (#:foo 2 #:bar 3))
  (list (default-keyword-arguments '() '(#:foo 2))
        (default-keyword-arguments '(#:foo 2) '(#:foo 4))
        (default-keyword-arguments '() '(#:bar 3 #:foo 2))
        (default-keyword-arguments '(#:bar 3) '(#:foo 2))
        (default-keyword-arguments '(#:foo 2 #:bar 3) '(#:bar 6))))

(test-equal "substitute-keyword-arguments"
  '((#:foo 3)
    (#:foo 3)
    (#:foo 3 #:bar (1 2))
    (#:bar (1 2) #:foo 3)
    (#:foo 3))
  (list (substitute-keyword-arguments '(#:foo 2)
          ((#:foo f) (1+ f)))
        (substitute-keyword-arguments '()
          ((#:foo f 2) (1+ f)))
        (substitute-keyword-arguments '(#:foo 2 #:bar (2))
          ((#:foo f) (1+ f))
          ((#:bar b) (cons 1 b)))
        (substitute-keyword-arguments '(#:foo 2)
          ((#:foo _) 3)
          ((#:bar b '(2)) (cons 1 b)))
        (substitute-keyword-arguments '(#:foo 2)
          ((#:foo f 1) (1+ f))
          ((#:bar b) (cons 42 b)))))

(test-assert "filtered-port, file"
  (let* ((file  (search-path %load-path "guix.scm"))
         (input (open-file file "r0b")))