Merge branch 'master' into staging
authorMarius Bakke <mbakke@fastmail.com>
Sun, 14 May 2017 15:21:46 +0000 (17:21 +0200)
committerMarius Bakke <mbakke@fastmail.com>
Sun, 14 May 2017 15:21:46 +0000 (17:21 +0200)
249 files changed:
.dir-locals.el
.gitignore
Makefile.am
bayfront.guixsd.org.pub [new file with mode: 0644]
build-aux/build-self.scm
build-aux/check-available-binaries.scm
build-aux/check-final-inputs-self-contained.scm
build-aux/compile-all.scm
build-aux/git-version-gen [new file with mode: 0755]
build-aux/hydra/evaluate.scm
build-aux/update-guix-package.scm [new file with mode: 0644]
configure.ac
doc/contributing.texi
doc/guix.texi
doc/htmlxref.cnf
etc/indent-code.el.in
gnu/build/file-systems.scm
gnu/local.mk
gnu/packages.scm
gnu/packages/abiword.scm
gnu/packages/acct.scm
gnu/packages/admin.scm
gnu/packages/audio.scm
gnu/packages/augeas.scm
gnu/packages/aux-files/linux-libre/4.11-i686.conf [moved from gnu/packages/aux-files/linux-libre/4.10-i686.conf with 98% similarity]
gnu/packages/aux-files/linux-libre/4.11-x86_64.conf [moved from gnu/packages/aux-files/linux-libre/4.10-x86_64.conf with 98% similarity]
gnu/packages/backup.scm
gnu/packages/base.scm
gnu/packages/bioinformatics.scm
gnu/packages/bootloaders.scm
gnu/packages/build-tools.scm
gnu/packages/cdrom.scm
gnu/packages/check.scm
gnu/packages/ci.scm
gnu/packages/commencement.scm
gnu/packages/compression.scm
gnu/packages/connman.scm
gnu/packages/cryptsetup.scm
gnu/packages/cups.scm
gnu/packages/databases.scm
gnu/packages/direct-connect.scm [new file with mode: 0644]
gnu/packages/disk.scm
gnu/packages/display-managers.scm
gnu/packages/django.scm
gnu/packages/dns.scm
gnu/packages/elf.scm
gnu/packages/elixir.scm
gnu/packages/emacs.scm
gnu/packages/engineering.scm
gnu/packages/enlightenment.scm
gnu/packages/erlang.scm
gnu/packages/finance.scm
gnu/packages/fonts.scm
gnu/packages/game-development.scm
gnu/packages/games.scm
gnu/packages/gcc.scm
gnu/packages/gd.scm
gnu/packages/ghostscript.scm
gnu/packages/gimp.scm
gnu/packages/gnome.scm
gnu/packages/gnustep.scm
gnu/packages/gnuzilla.scm
gnu/packages/golang.scm
gnu/packages/gstreamer.scm
gnu/packages/guile.scm
gnu/packages/image.scm
gnu/packages/imagemagick.scm
gnu/packages/irc.scm
gnu/packages/java.scm
gnu/packages/kde.scm
gnu/packages/kodi.scm
gnu/packages/language.scm
gnu/packages/less.scm
gnu/packages/libevent.scm
gnu/packages/libffcall.scm
gnu/packages/links.scm [deleted file]
gnu/packages/linux.scm
gnu/packages/lisp.scm
gnu/packages/llvm.scm
gnu/packages/logging.scm
gnu/packages/lxde.scm
gnu/packages/lynx.scm [deleted file]
gnu/packages/machine-learning.scm
gnu/packages/mail.scm
gnu/packages/man.scm
gnu/packages/maths.scm
gnu/packages/mes.scm [new file with mode: 0644]
gnu/packages/messaging.scm
gnu/packages/mpi.scm
gnu/packages/music.scm
gnu/packages/nano.scm
gnu/packages/ncurses.scm
gnu/packages/networking.scm
gnu/packages/nfs.scm
gnu/packages/ocaml.scm
gnu/packages/ocr.scm
gnu/packages/onc-rpc.scm
gnu/packages/package-management.scm
gnu/packages/parallel.scm
gnu/packages/password-utils.scm
gnu/packages/patches/abiword-black-drawing-with-gtk322.patch [new file with mode: 0644]
gnu/packages/patches/abiword-explictly-cast-bools.patch
gnu/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch [new file with mode: 0644]
gnu/packages/patches/cool-retro-term-dont-check-uninit-member.patch [new file with mode: 0644]
gnu/packages/patches/cool-retro-term-fix-array-size.patch [new file with mode: 0644]
gnu/packages/patches/cool-retro-term-memory-leak-1.patch [new file with mode: 0644]
gnu/packages/patches/cool-retro-term-remove-non-free-fonts.patch [new file with mode: 0644]
gnu/packages/patches/dvd+rw-tools-add-include.patch [new file with mode: 0644]
gnu/packages/patches/elixir-disable-failing-tests.patch
gnu/packages/patches/gnome-shell-CVE-2017-8288.patch [new file with mode: 0644]
gnu/packages/patches/icecat-bug-1299500-pt10.patch [deleted file]
gnu/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch [new file with mode: 0644]
gnu/packages/patches/libsndfile-CVE-2017-8362.patch [new file with mode: 0644]
gnu/packages/patches/libtiff-CVE-2017-7593.patch [new file with mode: 0644]
gnu/packages/patches/libtiff-CVE-2017-7594.patch [new file with mode: 0644]
gnu/packages/patches/libtiff-multiple-UBSAN-crashes.patch [new file with mode: 0644]
gnu/packages/patches/libtirpc-CVE-2017-8779.patch [new file with mode: 0644]
gnu/packages/patches/lierolibre-check-unaligned-access.patch [new file with mode: 0644]
gnu/packages/patches/lierolibre-is-free-software.patch [new file with mode: 0644]
gnu/packages/patches/lierolibre-newer-libconfig.patch [new file with mode: 0644]
gnu/packages/patches/lierolibre-remove-arch-warning.patch [new file with mode: 0644]
gnu/packages/patches/lierolibre-try-building-other-arch.patch [new file with mode: 0644]
gnu/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch [new file with mode: 0644]
gnu/packages/patches/lvm2-static-link.patch
gnu/packages/patches/lxterminal-CVE-2016-10369.patch [new file with mode: 0644]
gnu/packages/patches/miniupnpc-CVE-2017-8798.patch [new file with mode: 0644]
gnu/packages/patches/mozjs38-pkg-config-version.patch [new file with mode: 0644]
gnu/packages/patches/mozjs38-shell-version.patch [new file with mode: 0644]
gnu/packages/patches/mozjs38-tracelogger.patch [new file with mode: 0644]
gnu/packages/patches/mozjs38-version-detection.patch [new file with mode: 0644]
gnu/packages/patches/pcre2-CVE-2017-8786.patch [new file with mode: 0644]
gnu/packages/patches/perl-net-dns-resolver-programmable-fix.patch [moved from gnu/packages/patches/perl-net-dns-resolver-programmable-Fix-broken-interface.patch with 100% similarity]
gnu/packages/patches/proot-test-fhs.patch [new file with mode: 0644]
gnu/packages/patches/reptyr-fix-gcc-7.patch [new file with mode: 0644]
gnu/packages/patches/rpcbind-CVE-2017-8779.patch [new file with mode: 0644]
gnu/packages/pcre.scm
gnu/packages/perl.scm
gnu/packages/photo.scm
gnu/packages/php.scm
gnu/packages/pulseaudio.scm
gnu/packages/pv.scm
gnu/packages/python.scm
gnu/packages/regex.scm
gnu/packages/samba.scm
gnu/packages/screen.scm
gnu/packages/serialization.scm
gnu/packages/shells.scm
gnu/packages/ssh.scm
gnu/packages/suckless.scm
gnu/packages/tcl.scm
gnu/packages/terminals.scm
gnu/packages/tex.scm
gnu/packages/text-editors.scm
gnu/packages/tls.scm
gnu/packages/upnp.scm
gnu/packages/version-control.scm
gnu/packages/video.scm
gnu/packages/vim.scm
gnu/packages/vpn.scm
gnu/packages/web-browsers.scm
gnu/packages/web.scm
gnu/packages/webkit.scm
gnu/packages/wm.scm
gnu/packages/wxwidgets.scm
gnu/packages/xml.scm
gnu/packages/xorg.scm
gnu/packages/zip.scm
gnu/services.scm
gnu/services/base.scm
gnu/services/herd.scm
gnu/services/shepherd.scm
gnu/system.scm
gnu/system/grub.scm
gnu/system/pam.scm
gnu/system/shadow.scm
gnu/system/vm.scm
gnu/tests.scm
gnu/tests/base.scm
guix/build-system/ant.scm
guix/build-system/ocaml.scm
guix/build/ant-build-system.scm
guix/build/bournish.scm
guix/build/download.scm
guix/build/java-utils.scm [new file with mode: 0644]
guix/build/pull.scm
guix/derivations.scm
guix/discovery.scm [new file with mode: 0644]
guix/git-download.scm
guix/gnupg.scm
guix/graph.scm
guix/http-client.scm
guix/import/cpan.scm
guix/import/cran.scm
guix/import/elpa.scm
guix/import/pypi.scm
guix/licenses.scm
guix/monads.scm
guix/nar.scm
guix/packages.scm
guix/scripts.scm
guix/scripts/archive.scm
guix/scripts/authenticate.scm
guix/scripts/build.scm
guix/scripts/challenge.scm
guix/scripts/container.scm
guix/scripts/container/exec.scm
guix/scripts/copy.scm
guix/scripts/download.scm
guix/scripts/edit.scm
guix/scripts/environment.scm
guix/scripts/gc.scm
guix/scripts/graph.scm
guix/scripts/hash.scm
guix/scripts/import.scm
guix/scripts/import/cpan.scm
guix/scripts/import/cran.scm
guix/scripts/import/crate.scm
guix/scripts/import/elpa.scm
guix/scripts/import/gem.scm
guix/scripts/import/gnu.scm
guix/scripts/import/hackage.scm
guix/scripts/import/nix.scm
guix/scripts/import/pypi.scm
guix/scripts/import/stackage.scm
guix/scripts/lint.scm
guix/scripts/offload.scm
guix/scripts/pack.scm
guix/scripts/package.scm
guix/scripts/perform-download.scm
guix/scripts/publish.scm
guix/scripts/pull.scm
guix/scripts/refresh.scm
guix/scripts/size.scm
guix/scripts/substitute.scm
guix/scripts/system.scm
guix/ssh.scm
guix/store.scm
guix/ui.scm
guix/upstream.scm
po/guix/Makevars
po/guix/POTFILES.in
po/guix/fr.po
po/packages/Makevars
tests/cran.scm
tests/discovery.scm [new file with mode: 0644]
tests/guix-build.sh
tests/publish.scm
tests/store.scm
tests/ui.scm

index a2d1eb8..4aaeae9 100644 (file)
    (eval . (put 'guard 'scheme-indent-function 1))
    (eval . (put 'lambda* 'scheme-indent-function 1))
    (eval . (put 'substitute* 'scheme-indent-function 1))
+
+   ;; 'modify-phases' and its keywords.
    (eval . (put 'modify-phases 'scheme-indent-function 1))
+   (eval . (put 'replace 'scheme-indent-function 1))
+   (eval . (put 'add-before 'scheme-indent-function 2))
+   (eval . (put 'add-after 'scheme-indent-function 2))
+
    (eval . (put 'modify-services 'scheme-indent-function 1))
    (eval . (put 'with-directory-excursion 'scheme-indent-function 1))
    (eval . (put 'package 'scheme-indent-function 0))
index 1fc22d7..09dbde8 100644 (file)
@@ -6,6 +6,8 @@
 *.tar.xz
 *.tmp
 *~
+.#*
+\#*\#
 ,*
 /ABOUT-NLS
 /INSTALL
@@ -31,6 +33,7 @@
 /doc/guix.cps
 /doc/guix.fn
 /doc/guix.fns
+/doc/guix.html
 /doc/guix.info
 /doc/guix.info-[0-9]
 /doc/guix.ky
@@ -125,3 +128,4 @@ tmp
 /doc/os-config-lightweight-desktop.texi
 /nix/scripts/download
 /etc/indent-code.el
+/.version
index db4ebe0..4b5a29a 100644 (file)
@@ -28,6 +28,10 @@ nodist_noinst_SCRIPTS =                              \
   pre-inst-env                                 \
   test-env
 
+# Modules that are not compiled but are installed nonetheless, such as
+# build-side modules with unusual dependencies.
+MODULES_NOT_COMPILED =
+
 include gnu/local.mk
 
 MODULES =                                      \
@@ -46,6 +50,7 @@ MODULES =                                     \
   guix/sets.scm                                        \
   guix/modules.scm                             \
   guix/download.scm                            \
+  guix/discovery.scm                           \
   guix/git-download.scm                                \
   guix/hg-download.scm                         \
   guix/monads.scm                              \
@@ -119,6 +124,7 @@ MODULES =                                   \
   guix/build/syscalls.scm                       \
   guix/build/gremlin.scm                       \
   guix/build/emacs-utils.scm                   \
+  guix/build/java-utils.scm                    \
   guix/build/lisp-utils.scm                    \
   guix/build/graft.scm                         \
   guix/build/bournish.scm                      \
@@ -205,8 +211,8 @@ dist_noinst_DATA = guix/tests.scm guix/tests/http.scm
 # Auxiliary files for packages.
 AUX_FILES =                                            \
   gnu/packages/aux-files/emacs/guix-emacs.el           \
-  gnu/packages/aux-files/linux-libre/4.10-i686.conf    \
-  gnu/packages/aux-files/linux-libre/4.10-x86_64.conf  \
+  gnu/packages/aux-files/linux-libre/4.11-i686.conf    \
+  gnu/packages/aux-files/linux-libre/4.11-x86_64.conf  \
   gnu/packages/aux-files/linux-libre/4.9-i686.conf     \
   gnu/packages/aux-files/linux-libre/4.9-x86_64.conf   \
   gnu/packages/aux-files/linux-libre/4.4-i686.conf     \
@@ -222,8 +228,8 @@ EXAMPLES =                                  \
 
 GOBJECTS = $(MODULES:%.scm=%.go) guix/config.go $(dist_noinst_DATA:%.scm=%.go)
 
-nobase_dist_guilemodule_DATA =                  \
-  $(MODULES) $(AUX_FILES) $(EXAMPLES)            \
+nobase_dist_guilemodule_DATA =                                 \
+  $(MODULES) $(MODULES_NOT_COMPILED) $(AUX_FILES) $(EXAMPLES)  \
   $(MISC_DISTRO_FILES)
 nobase_nodist_guilemodule_DATA = guix/config.scm
 nobase_nodist_guileobject_DATA = $(GOBJECTS)
@@ -275,6 +281,7 @@ SCM_TESTS =                                 \
   tests/records.scm                            \
   tests/upstream.scm                           \
   tests/combinators.scm                                \
+  tests/discovery.scm                          \
   tests/utils.scm                              \
   tests/build-utils.scm                                \
   tests/packages.scm                           \
@@ -379,14 +386,16 @@ check-local:
 
 endif !CAN_RUN_TESTS
 
-check-system: $(GOBJECTS)
+check-system: $(GOBJECTS) $(BOOTSTRAP_GUILE_TARBALLS)
        $(AM_V_at)$(top_builddir)/pre-inst-env                  \
           $(GUILE) --no-auto-compile                           \
           -e '(@@ (run-system-tests) run-system-tests)'        \
           $(top_srcdir)/build-aux/run-system-tests.scm
 
-# Public key used to sign substitutes from hydra.gnu.org.
-dist_pkgdata_DATA = hydra.gnu.org.pub
+# Public key used to sign substitutes from hydra.gnu.org & co.
+dist_pkgdata_DATA =                            \
+  hydra.gnu.org.pub                            \
+  bayfront.guixsd.org.pub
 
 # Bash completion file.
 dist_bashcompletion_DATA = etc/completion/bash/guix
@@ -400,7 +409,6 @@ EXTRA_DIST =                                                \
   TODO                                                 \
   CODE-OF-CONDUCT                                      \
   .dir-locals.el                                       \
-  gnu/build/svg.scm                                    \
   build-aux/build-self.scm                             \
   build-aux/compile-all.scm                            \
   build-aux/hydra/evaluate.scm                         \
@@ -411,6 +419,7 @@ EXTRA_DIST =                                                \
   build-aux/download.scm                               \
   build-aux/generate-authors.scm                       \
   build-aux/test-driver.scm                            \
+  build-aux/update-guix-package.scm                    \
   build-aux/run-system-tests.scm                       \
   d3.v3.js                                             \
   graph.js                                             \
@@ -487,34 +496,42 @@ endif BUILD_DAEMON
 ACLOCAL_AMFLAGS = -I m4
 
 # Pass an explicit '--localstatedir' so that configure does not error out if
-# it finds an existing installation with a different localstatedir.
+# it finds an existing installation with a different localstatedir.  Inherit
+# 'ac_cv_guix_test_root' so that "make check" in $(distdir) does not have to
+# repopulate the whole store, and to make sure $(GUIX_TEST_ROOT) is short
+# enough for shebangs.
 AM_DISTCHECK_CONFIGURE_FLAGS =                 \
   --localstatedir="$$dc_install_base/var"      \
   --with-libgcrypt-prefix="$(LIBGCRYPT_PREFIX)"        \
   --with-libgcrypt-libdir="$(LIBGCRYPT_LIBDIR)"        \
   --with-nix-prefix="$(NIX_PREFIX)"            \
-  --enable-daemon
+  --enable-daemon                              \
+  ac_cv_guix_test_root="$(GUIX_TEST_ROOT)"
 
 # The self-contained tarball.  Add 'glibc-utf8-locales' along with glibc just
 # so 'etc/profile' defines 'GUIX_LOCPATH' pointing to a valid set of locales.
 guix-binary.%.tar.xz:
-       $(AM_V_GEN)GUIX_PACKAGE_PATH=                           \
-       tarball=`$(top_builddir)/pre-inst-env guix pack -C xz   \
-         -s "$*" --localstatedir guix glibc-utf8-locales       \
-         -e  '(@@ (gnu packages commencement) glibc-final)'` ; \
+       $(AM_V_GEN)GUIX_PACKAGE_PATH=                                   \
+       tarball=`$(top_builddir)/pre-inst-env guix pack -K -C xz        \
+         -s "$*" --localstatedir guix glibc-utf8-locales               \
+         -e  '(@@ (gnu packages commencement) glibc-final)'` ;         \
        cp "$$tarball" "$@.tmp" ; mv "$@.tmp" "$@"
 
 
-dist-hook: sync-descriptions gen-ChangeLog gen-AUTHORS
+dist-hook: $(distdir)/ChangeLog gen-AUTHORS gen-tarball-version
 dist-hook: assert-no-store-file-names
 
 distcheck-hook: assert-binaries-available assert-final-inputs-self-contained
 
-sync-descriptions:
-       $(AM_V_at)GUIX_PACKAGE_PATH= \
-        $(top_builddir)/pre-inst-env guix lint --checkers=gnu-description
+EXTRA_DIST += $(top_srcdir)/.version
+BUILT_SOURCES += $(top_srcdir)/.version
+$(top_srcdir)/.version:
+       echo $(VERSION) > "$@-t" && mv "$@-t" "$@"
+
+gen-tarball-version:
+       echo $(VERSION) > "$(distdir)/.tarball-version"
 
-gen-ChangeLog:
+gen-ChangeLog $(distdir)/ChangeLog:
        $(AM_V_GEN)if test -d .git; then                \
          $(top_srcdir)/build-aux/gitlog-to-changelog   \
            > $(distdir)/cl-t;                          \
@@ -530,8 +547,98 @@ gen-AUTHORS:
            "$(top_srcdir)" "$(distdir)/AUTHORS";               \
        fi
 
+\f
+#
+# Release management.
+#
+
+releasedir = release-$(PACKAGE_VERSION)
+
+PACKAGE_FULL_TARNAME = $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)
+
+# List of source tarballs produced.  This must be kept in sync with the
+# 'dist-' options of 'AM_INIT_AUTOMAKE' in 'configure.ac'.
+SOURCE_TARBALLS =                                      \
+  $(foreach ext,tar.gz,$(PACKAGE_FULL_TARNAME).$(ext))
+
+# Systems supported by Guix.
+SUPPORTED_SYSTEMS ?= x86_64-linux i686-linux armhf-linux
+
+# Guix binary tarballs.
+BINARY_TARBALLS =                                                      \
+  $(foreach system,$(SUPPORTED_SYSTEMS),guix-binary.$(system).tar.xz)
+
+# Systems supported by GuixSD.
+GUIXSD_SUPPORTED_SYSTEMS ?= x86_64-linux i686-linux
+
+# Prefix of the GuixSD installation image file name.
+GUIXSD_IMAGE_BASE = guixsd-usb-install-$(PACKAGE_VERSION)
+
+# Size of the installation image (for x86_64 typically).
+GUIXSD_INSTALLATION_IMAGE_SIZE ?= 950MiB
+
+# The release process works in several phases:
+#
+#   0. We assume the developer created a 'vX.Y' tag.
+#   1. Build the source tarball.
+#   2. Update the 'guix' package so that it corresponds to the 'vX.Y' tag.
+#   3. Build the binary tarballs for that 'guix' package.
+#   4. Update the 'guix' package again.
+#   5. Build the GuixSD installation images.  The images will run 'guix'
+#      corresponding to 'vX.Y' + 1 commit, and they will install 'vX.Y'.
+#
+# This 'release' target takes care of everything and copies the resulting
+# files to $(releasedir).
+release: distcheck
+       cd po; git checkout .
+       @if ! git diff-index --quiet HEAD; then                 \
+         echo "There are uncommitted changes; stopping." >&2 ; \
+         exit 1 ;                                              \
+       fi
+       $(MKDIR_P) "$(releasedir)"
+       rm -f "$(releasedir)"/*
+       mv $(SOURCE_TARBALLS) "$(releasedir)"
+       $(top_builddir)/pre-inst-env "$(GUILE)"                 \
+          $(top_srcdir)/build-aux/update-guix-package.scm      \
+          "`git rev-parse HEAD`" "$(PACKAGE_VERSION)"
+       git add $(top_srcdir)/gnu/packages/package-management.scm
+       git commit -m "gnu: guix: Update to $(PACKAGE_VERSION)."
+       rm -f $(BINARY_TARBALLS)
+       $(MAKE) $(BINARY_TARBALLS)
+       for system in $(SUPPORTED_SYSTEMS) ; do                                 \
+         mv "guix-binary.$$system.tar.xz"                                      \
+             "$(releasedir)/guix-binary-$(PACKAGE_VERSION).$$system.tar.xz" ;  \
+       done
+       $(top_builddir)/pre-inst-env "$(GUILE)"                 \
+          $(top_srcdir)/build-aux/update-guix-package.scm      \
+          "`git rev-parse HEAD`"
+       git add $(top_srcdir)/gnu/packages/package-management.scm
+       git commit -m "gnu: guix: Update to `git rev-parse HEAD | cut -c1-7`."
+       for system in $(GUIXSD_SUPPORTED_SYSTEMS) ; do                                  \
+         image=`$(top_builddir)/pre-inst-env                                           \
+           guix system disk-image                                                      \
+           --image-size=$(GUIXSD_INSTALLATION_IMAGE_SIZE)                              \
+           gnu/system/install.scm` ;                                                   \
+         if [ ! -f "$$image" ] ; then                                                  \
+           echo "failed to produced GuixSD installation image for $$system" >&2 ;      \
+           exit 1 ;                                                                    \
+         fi ;                                                                          \
+         xz < "$$image" > "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz.tmp" ;       \
+         mv "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz.tmp"                       \
+            "$(releasedir)/$(GUIXSD_IMAGE_BASE).$$system.xz" ;                         \
+       done
+       @echo
+       @echo "Congratulations!  All the release files are now in $(releasedir)."
+       @echo
+
+update-guix-package:
+       git rev-parse HEAD
+       $(top_builddir)/pre-inst-env "$(GUILE)"                 \
+          $(top_srcdir)/build-aux/update-guix-package.scm      \
+          "`git rev-parse HEAD`"
+
 # Make sure we're not shipping a file that embeds a local /gnu/store file name.
-assert-no-store-file-names:
+assert-no-store-file-names: $(distdir)/ChangeLog
        $(AM_V_at)if grep -r --exclude=*.texi --exclude=*.info                  \
             --exclude=*.info-[0-9] --exclude=*.dot                             \
             --exclude=*.eps --exclude-dir=bootstrap                            \
@@ -561,9 +668,11 @@ hydra-jobs.scm: $(GOBJECTS)
          "$(top_srcdir)/build-aux/hydra/gnu-system.scm" > "$@.tmp"
        $(AM_V_at)mv "$@.tmp" "$@"
 
-.PHONY: sync-descriptions gen-ChangeLog gen-AUTHORS clean-go make-go
+.PHONY: gen-ChangeLog gen-AUTHORS gen-tarball-version
 .PHONY: assert-no-store-file-names assert-binaries-available
 .PHONY: assert-final-inputs-self-contained
+.PHONY: clean-go make-go
+.PHONY: update-guix-package release
 
 ## -------------- ##
 ## Silent rules.  ##
diff --git a/bayfront.guixsd.org.pub b/bayfront.guixsd.org.pub
new file mode 100644 (file)
index 0000000..f156a37
--- /dev/null
@@ -0,0 +1,6 @@
+(public-key 
+ (ecc 
+  (curve Ed25519)
+  (q #8D156F295D24B0D9A86FA5741A840FF2D24F60F7B6C4134814AD55625971B394#)
+  )
+ )
index cc70249..a1335fe 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -22,6 +22,7 @@
   #:use-module (guix config)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
+  #:use-module (ice-9 match)
   #:export (build))
 
 ;;; Commentary:
 (define xz
   (first (find-best-packages-by-name "xz" #f)))
 
+(define (false-if-wrong-guile package)
+  "Return #f if PACKAGE depends on the \"wrong\" major version of Guile (e.g.,
+2.0 instead of 2.2), otherwise return PACKAGE."
+  (let ((guile (any (match-lambda
+                      ((label (? package? dep) _ ...)
+                       (and (string=? (package-name dep) "guile")
+                            dep)))
+                    (package-direct-inputs package))))
+    (and (or (not guile)
+             (string-prefix? (effective-version)
+                             (package-version guile)))
+         package)))
+
+(define (package-for-current-guile . names)
+  "Return the package with one of the given NAMES that depends on the current
+Guile major version (2.0 or 2.2), or #f if none of the packages matches."
+  (let loop ((names names))
+    (match names
+      (()
+       #f)
+      ((name rest ...)
+       (match (find-best-packages-by-name name #f)
+         (()
+          (loop rest))
+         ((first _ ...)
+          (or (false-if-wrong-guile first)
+              (loop rest))))))))
+
 (define guile-json
-  (first (find-best-packages-by-name "guile-json" #f)))
+  (package-for-current-guile "guile-json"
+                             "guile2.2-json"
+                             "guile2.0-json"))
 
 (define guile-ssh
-  (first (find-best-packages-by-name "guile-ssh" #f)))
+  (package-for-current-guile "guile-ssh"
+                             "guile2.2-ssh"
+                             "guile2.0-ssh"))
 
 \f
 ;; The actual build procedure.
@@ -80,6 +113,17 @@ person's version identifier."
   ;; XXX: Replace with a Git commit id.
   (date->string (current-date 0) "~Y~m~d.~H"))
 
+(define (guile-for-build)
+  "Return a derivation for Guile 2.0 or 2.2, whichever matches the currently
+running Guile."
+  (package->derivation (cond-expand
+                         (guile-2.2
+                          (canonical-package
+                           (specification->package "guile@2.2")))
+                         (else
+                          (canonical-package
+                           (specification->package "guile@2.0"))))))
+
 ;; The procedure below is our return value.
 (define* (build source
                 #:key verbose? (version (date-version-string))
@@ -104,15 +148,19 @@ files."
     #~(begin
         (use-modules (guix build pull))
 
-        (let ((json (string-append #$guile-json "/share/guile/site/2.0")))
+        (let ((json (string-append #$guile-json "/share/guile/site/"
+                                   #$(effective-version))))
           (set! %load-path
-                (cons* json
-                       (string-append #$guile-ssh "/share/guile/site/2.0")
-                       %load-path))
+            (cons* json
+                   (string-append #$guile-ssh "/share/guile/site/"
+                                  #$(effective-version))
+                   %load-path))
           (set! %load-compiled-path
-                (cons* json
-                       (string-append #$guile-ssh "/lib/guile/2.0/site-ccache")
-                       %load-compiled-path)))
+            (cons* json
+                   (string-append #$guile-ssh "/lib/guile/"
+                                  #$(effective-version)
+                                  "/site-ccache")
+                   %load-compiled-path)))
 
         ;; XXX: The 'guile-ssh' package prior to Guix commit 92b7258 was
         ;; broken: libguile-ssh could not be found.  Work around that.
@@ -146,13 +194,21 @@ files."
                                      (current-error-port)
                                      (%make-void-port "w")))))
 
-  (gexp->derivation "guix-latest" builder
-                    #:modules '((guix build pull)
-                                (guix build utils))
+  (mlet %store-monad ((guile (guile-for-build)))
+    (gexp->derivation "guix-latest" builder
+                      #:modules '((guix build pull)
+                                  (guix build utils)
+
+                                  ;; Closure of (guix modules).
+                                  (guix modules)
+                                  (guix memoization)
+                                  (guix sets))
+
+                      ;; Arrange so that our own (guix build …) modules are
+                      ;; used.
+                      #:module-path (list (top-source-directory))
 
-                    ;; Arrange so that our own (guix build …) modules are
-                    ;; used.
-                    #:module-path (list (top-source-directory))))
+                      #:guile-for-build guile)))
 
 ;; This file is loaded by 'guix pull'; return it the build procedure.
 build
index 0060a86..b832d99 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
                                %hydra-supported-systems))
            (cross  (map (cut package-cross-derivation store
                              %bootstrap-tarballs <>)
-                        '("mips64el-linux-gnuabi64")))
+                        '("mips64el-linux-gnu"
+                          "arm-linux-gnueabihf")))
            (total  (append native cross)))
 
-      (set-build-options store #:use-substitutes? #t)
+      (set-build-options store
+                         #:use-substitutes? #t
+                         #:substitute-urls %default-substitute-urls)
       (let* ((total     (map derivation->output-path total))
              (available (substitutable-paths store total))
              (missing   (lset-difference string=? total available)))
index dc44c4b..dfb6a72 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,7 +57,7 @@
 if it does."
   (let ((references (substitutable-references substitute)))
     (when (any (cut string-contains <> "boot") references)
-      (leave (_ "'~a' refers to bootstrap inputs: ~s~%")
+      (leave (G_ "'~a' refers to bootstrap inputs: ~s~%")
              (substitutable-path substitute) references))))
 
 (define (test-final-inputs store system)
@@ -71,7 +71,7 @@ refer to the bootstrap tools."
                                 (string=? (substitutable-path substitute)
                                           dir))
                               available)
-                  (leave (_ "~a (system: ~a) has no substitute~%")
+                  (leave (G_ "~a (system: ~a) has no substitute~%")
                          dir system)))
               inputs)
 
index d077d75..147bb80 100644 (file)
              (guix build utils))
 
 (define warnings
-  '(unsupported-warning format unbound-variable arity-mismatch))
+  ;; FIXME: 'format' is missing because it reports "non-literal format
+  ;; strings" due to the fact that we use 'G_' instead of '_'.  We'll need
+  ;; help from Guile to solve this.
+  '(unsupported-warning unbound-variable arity-mismatch))
 
 (define host (getenv "host"))
 
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
new file mode 100755 (executable)
index 0000000..079849d
--- /dev/null
@@ -0,0 +1,226 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2017-01-09.19; # UTC
+
+# Copyright (C) 2007-2017 Free Software Foundation, Inc.
+#
+# This program 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.
+#
+# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+#   produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+#   presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+#   a checked-out repository.  Created with contents that were learned at
+#   the last time autoconf was run, and used by git-version-gen.  Must not
+#   be present in either $(srcdir) or $(builddir) for git-version-gen to
+#   give accurate answers during normal development with a checked out tree,
+#   but must be present in a tarball when there is no version control system.
+#   Therefore, it cannot be used in any dependencies.  GNUmakefile has
+#   hooks to force a reconfigure at distribution time to get the value
+#   correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+#   tarball.  Usable in dependencies, particularly for files that don't
+#   want to depend on config.h but do want to track version changes.
+#   Delete this file prior to any autoconf run where you want to rebuild
+#   files to pick up a version string change; and leave it stale to
+#   minimize rebuild time after unrelated changes to configure sources.
+#
+# As with any generated file in a VC'd directory, you should add
+# /.version to .gitignore, so that you don't accidentally commit it.
+# .tarball-version is never generated in a VC'd directory, so needn't
+# be listed there.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+#         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+#         [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .version and
+# .tarball-version will exist in distribution tarballs.
+#
+# EXTRA_DIST = $(top_srcdir)/.version
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+#      echo $(VERSION) > $@-t && mv $@-t $@
+# dist-hook:
+#      echo $(VERSION) > $(distdir)/.tarball-version
+
+
+me=$0
+
+version="git-version-gen $scriptversion
+
+Copyright 2011 Free Software Foundation, Inc.
+There is NO warranty.  You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="\
+Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
+Print a version string.
+
+Options:
+
+   --prefix PREFIX    prefix of git tags (default 'v')
+   --fallback VERSION
+                      fallback version to use if \"git --version\" fails
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+Running without arguments will suffice in most cases."
+
+prefix=v
+fallback=
+
+while test $# -gt 0; do
+  case $1 in
+    --help) echo "$usage"; exit 0;;
+    --version) echo "$version"; exit 0;;
+    --prefix) shift; prefix=${1?};;
+    --fallback) shift; fallback=${1?};;
+    -*)
+      echo "$0: Unknown option '$1'." >&2
+      echo "$0: Try '--help' for more information." >&2
+      exit 1;;
+    *)
+      if test "x$tarball_version_file" = x; then
+        tarball_version_file="$1"
+      elif test "x$tag_sed_script" = x; then
+        tag_sed_script="$1"
+      else
+        echo "$0: extra non-option argument '$1'." >&2
+        exit 1
+      fi;;
+  esac
+  shift
+done
+
+if test "x$tarball_version_file" = x; then
+    echo "$usage"
+    exit 1
+fi
+
+tag_sed_script="${tag_sed_script:-s/x/x/}"
+
+nl='
+'
+
+# Avoid meddling by environment variable of the same name.
+v=
+v_from_git=
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+    v=`cat $tarball_version_file` || v=
+    case $v in
+        *$nl*) v= ;; # reject multi-line output
+        [0-9]*) ;;
+        *) v= ;;
+    esac
+    test "x$v" = x \
+        && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2
+fi
+
+if test "x$v" != x
+then
+    : # use $v
+# Otherwise, if there is at least one git commit involving the working
+# directory, and "git describe" output looks sensible, use that to
+# derive a version string.
+elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
+    && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
+          || git describe --abbrev=4 HEAD 2>/dev/null` \
+    && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
+    && case $v in
+         $prefix[0-9]*) ;;
+         *) (exit 1) ;;
+       esac
+then
+    # Is this a new git that lists number of commits since the last
+    # tag or the previous older version that did not?
+    #   Newer: v6.10-77-g0f8faeb
+    #   Older: v6.10-g0f8faeb
+    case $v in
+        *-*-*) : git describe is okay three part flavor ;;
+        *-*)
+            : git describe is older two part flavor
+            # Recreate the number of commits and rewrite such that the
+            # result is the same as if we were using the newer version
+            # of git describe.
+            vtag=`echo "$v" | sed 's/-.*//'`
+            commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
+                || { commit_list=failed;
+                     echo "$0: WARNING: git rev-list failed" 1>&2; }
+            numcommits=`echo "$commit_list" | wc -l`
+            v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+            test "$commit_list" = failed && v=UNKNOWN
+            ;;
+    esac
+
+    # Change the first '-' to a '.', so version-comparing tools work properly.
+    # Remove the "g" in git describe's output string, to save a byte.
+    v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`;
+    v_from_git=1
+elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
+    v=UNKNOWN
+else
+    v=$fallback
+fi
+
+v=`echo "$v" |sed "s/^$prefix//"`
+
+# Test whether to append the "-dirty" suffix only if the version
+# string we're using came from git.  I.e., skip the test if it's "UNKNOWN"
+# or if it came from .tarball-version.
+if test "x$v_from_git" != x; then
+  # Don't declare a version "dirty" merely because a timestamp has changed.
+  git update-index --refresh > /dev/null 2>&1
+
+  dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
+  case "$dirty" in
+      '') ;;
+      *) # Append the suffix only if there isn't one already.
+          case $v in
+            *-dirty) ;;
+            *) v="$v-dirty" ;;
+          esac ;;
+  esac
+fi
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+printf %s "$v"
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
index ab10253..cc6a4b9 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
     (beautify-user-module! m)
     m))
 
+(cond-expand
+  (guile-2.2
+   ;; Guile 2.2.2 has a bug whereby 'time-monotonic' objects have seconds and
+   ;; nanoseconds swapped (fixed in Guile commit 886ac3e).  Work around it.
+   (define time-monotonic time-tai))
+  (else #t))
+
 (define (call-with-time thunk kont)
   "Call THUNK and pass KONT the elapsed time followed by THUNK's return
 values."
diff --git a/build-aux/update-guix-package.scm b/build-aux/update-guix-package.scm
new file mode 100644 (file)
index 0000000..9598872
--- /dev/null
@@ -0,0 +1,144 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;;
+;;; This scripts updates the definition of the 'guix' package in Guix for the
+;;; current commit.  It requires Git to be installed.
+;;;
+;;; Code:
+
+(use-modules (guix)
+             (guix git-download)
+             (guix upstream)
+             (guix utils)
+             (guix base32)
+             (guix build utils)
+             (gnu packages package-management)
+             (ice-9 match))
+
+(define %top-srcdir
+  (string-append (current-source-directory) "/.."))
+
+(define version-controlled?
+  (git-predicate %top-srcdir))
+
+(define (package-definition-location)
+  "Return the source properties of the definition of the 'guix' package."
+  (call-with-input-file (location-file (package-location guix))
+    (lambda (port)
+      (let loop ()
+        (match (read port)
+          ((? eof-object?)
+           (error "definition of 'guix' package could not be found"
+                  (port-filename port)))
+          (('define-public 'guix value)
+           (source-properties value))
+          (_
+           (loop)))))))
+
+(define* (update-definition commit hash
+                            #:key version old-hash)
+  "Return a one-argument procedure that takes a string, the definition of the
+'guix' package, and returns a string, the update definition for VERSION,
+COMMIT."
+  (define (linear-offset str line column)
+    ;; Return the offset in characters to reach LINE and COLUMN (both
+    ;; zero-indexed) in STR.
+    (call-with-input-string str
+      (lambda (port)
+        (let loop ((offset 0))
+          (cond ((and (= (port-column port) column)
+                      (= (port-line port) line))
+                 offset)
+                ((eof-object? (read-char port))
+                 (error "line and column not reached!"
+                        str))
+                (else
+                 (loop (+ 1 offset))))))))
+
+  (define (update-hash str)
+    ;; Replace OLD-HASH with HASH in STR.
+    (string-replace-substring str
+                              (bytevector->nix-base32-string old-hash)
+                              (bytevector->nix-base32-string hash)))
+
+  (lambda (str)
+    (match (call-with-input-string str read)
+      (('let (('version old-version)
+              ('commit old-commit)
+              ('revision old-revision))
+         defn)
+       (let* ((location (source-properties defn))
+              (line     (assq-ref location 'line))
+              (column   0)
+              (offset   (linear-offset str line column)))
+         (string-append (format #f "(let ((version \"~a\")
+        (commit \"~a\")
+        (revision ~a))\n"
+                                (or version old-version)
+                                commit
+                                (if (and version
+                                         (not (string=? version old-version)))
+                                    0
+                                    (+ 1 old-revision)))
+                        (string-drop (update-hash str) offset))))
+      (exp
+       (error "'guix' package definition is not as expected" exp)))))
+
+\f
+(define (main . args)
+  (match args
+    ((commit version)
+     (with-store store
+       (let* ((source   (add-to-store store
+                                      "guix-checkout" ;dummy name
+                                      #t "sha256" %top-srcdir
+                                      #:select? version-controlled?))
+              (hash     (query-path-hash store source))
+              (location (package-definition-location))
+              (old-hash (origin-sha256 (package-source guix))))
+         (edit-expression location
+                          (update-definition commit hash
+                                             #:old-hash old-hash
+                                             #:version version))
+
+         ;; Re-add SOURCE to the store, but this time under the real name used
+         ;; in the 'origin'.  This allows us to build the package without
+         ;; having to make a real checkout; thus, it also works when working
+         ;; on a private branch.
+         (reload-module
+          (resolve-module '(gnu packages package-management)))
+
+         (let* ((source (add-to-store store
+                                      (origin-file-name (package-source guix))
+                                      #t "sha256" source))
+                (root   (store-path-package-name source)))
+
+           ;; Add an indirect GC root for SOURCE in the current directory.
+           (false-if-exception (delete-file root))
+           (symlink source root)
+           (add-indirect-root store root)
+
+           (format #t "source code for commit ~a: ~a (GC root: ~a)~%"
+                   commit source root)))))
+    ((commit)
+     ;; Automatically deduce the version and revision numbers.
+     (main commit #f))))
+
+(apply main (cdr (command-line)))
index 2b4620c..dc3d8f3 100644 (file)
@@ -2,8 +2,10 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.68)
-AC_INIT([GNU Guix], [0.12.0], [bug-guix@gnu.org], [guix],
-  [http://www.gnu.org/software/guix/])
+AC_INIT([GNU Guix],
+  [m4_esyscmd([build-aux/git-version-gen .tarball-version])],
+  [bug-guix@gnu.org], [guix],
+  [https://www.gnu.org/software/guix/])
 AC_CONFIG_AUX_DIR([build-aux])
 
 AM_INIT_AUTOMAKE([1.12 gnu silent-rules subdir-objects \
index bbc9342..925c584 100644 (file)
@@ -248,7 +248,10 @@ please do read it.
 
 Some special forms introduced in Guix, such as the @code{substitute*}
 macro, have special indentation rules.  These are defined in the
-@file{.dir-locals.el} file, which Emacs automatically uses.
+@file{.dir-locals.el} file, which Emacs automatically uses.  Also note
+that Emacs-Guix provides @code{guix-devel-mode} mode that indents and
+highlights Guix code properly (@pxref{Development,,, emacs-guix, The
+Emacs-Guix Reference Manual}).
 
 @cindex indentation, of code
 @cindex formatting, of code
@@ -342,9 +345,30 @@ For important changes, check that dependent package (if applicable) are
 not affected by the change; @code{guix refresh --list-dependent
 @var{package}} will help you do that (@pxref{Invoking guix refresh}).
 
-Packages with roughly 100 dependents or more usually have to be
-committed to a separate branch.  That branch can then be built
-separately by our build farm, and later merged into @code{master} once
+@c See <https://lists.gnu.org/archive/html/guix-devel/2016-10/msg00933.html>.
+@cindex branching strategy
+@cindex rebuild scheduling strategy
+Depending on the number of dependent packages and thus the amount of
+rebuilding induced, commits go to different branches, along these lines:
+
+@table @asis
+@item 300 dependent packages or less
+@code{master} branch (non-disruptive changes).
+
+@item between 300 and 1,200 dependent packages
+@code{staging} branch (non-disruptive changes).  This branch is intended
+to be merged in @code{master} every 3 weeks or so.  Topical changes
+(e.g., an update of the GNOME stack) can instead go to a specific branch
+(say, @code{gnome-updates}).
+
+@item more than 1,200 dependent packages
+@code{core-updates} branch (may include major and potentially disruptive
+changes).  This branch is intended to be merged in @code{master} every
+2.5 months or so.
+@end table
+
+All these branches are tracked by our build farm
+and merged into @code{master} once
 everything has been successfully built.  This allows us to fix issues
 before they hit users, and to reduce the window during which pre-built
 binaries are not available.
index 957ce2b..5227ad4 100644 (file)
@@ -34,7 +34,8 @@ Copyright @copyright{} 2017 Clément Lassieur@*
 Copyright @copyright{} 2017 Mathieu Othacehe@*
 Copyright @copyright{} 2017 Federico Beffa@*
 Copyright @copyright{} 2017 Carlo Zancanaro@*
-Copyright @copyright{} 2017 Thomas Danckaert
+Copyright @copyright{} 2017 Thomas Danckaert@*
+Copyright @copyright{} 2017 humanitiesNerd
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -1429,11 +1430,13 @@ remove software packages, without having to know about their build
 procedures or dependencies.  Guix also goes beyond this obvious set of
 features.
 
-This chapter describes the main features of Guix, as well as the package
-management tools it provides.  Along with the command-line interface
-described below (@pxref{Invoking guix package, @code{guix package}}),
-you may also use Emacs Interface, after installing @code{emacs-guix}
-package (run @kbd{M-x guix-help} command to start with it):
+This chapter describes the main features of Guix, as well as the
+package management tools it provides.  Along with the command-line
+interface described below (@pxref{Invoking guix package, @code{guix
+package}}), you may also use Emacs Interface (@pxref{Top,,,
+emacs-guix, The Emacs-Guix Reference Manual}), after installing
+@code{emacs-guix} package (run @kbd{M-x guix-help} command to start
+with it):
 
 @example
 guix package -i emacs-guix
@@ -2387,13 +2390,13 @@ For example, to download and deploy version 0.12.0 of Guix from the
 canonical Git repo:
 
 @example
-guix pull --url=http://git.savannah.gnu.org/cgit/guix.git/snapshot/v0.12.0.tar.gz
+guix pull --url=https://git.savannah.gnu.org/cgit/guix.git/snapshot/v0.12.0.tar.gz
 @end example
 
 It can also be used to deploy arbitrary Git revisions:
 
 @example
-guix pull --url=http://git.savannah.gnu.org/cgit/guix.git/snapshot/74d862e8a.tar.gz
+guix pull --url=https://git.savannah.gnu.org/cgit/guix.git/snapshot/74d862e8a.tar.gz
 @end example
 
 @item --bootstrap
@@ -2401,6 +2404,8 @@ Use the bootstrap Guile to build the latest Guix.  This option is only
 useful to Guix developers.
 @end table
 
+In addition, @command{guix pull} supports all the common build options
+(@pxref{Common Build Options}).
 
 @node Invoking guix pack
 @section Invoking @command{guix pack}
@@ -2879,7 +2884,8 @@ unavailable to the build process, possibly leading to a build failure.
 
 Once a package definition is in place, the
 package may actually be built using the @code{guix build} command-line
-tool (@pxref{Invoking guix build}).  You can easily jump back to the
+tool (@pxref{Invoking guix build}), troubleshooting any build failures
+you encounter (@pxref{Debugging Build Failures}).  You can easily jump back to the
 package definition using the @command{guix edit} command
 (@pxref{Invoking guix edit}).
 @xref{Packaging Guidelines}, for
@@ -3321,7 +3327,8 @@ parameters, respectively.
 When the original package does not provide a suitable Ant build file,
 the parameter @code{#:jar-name} can be used to generate a minimal Ant
 build file @file{build.xml} with tasks to build the specified jar
-archive.
+archive.  In this case the parameter @code{#:source-dir} can be used to
+specify the source sub-directory, defaulting to ``src''.
 
 The parameter @code{#:build-target} can be used to specify the Ant task
 that should be run during the @code{build} phase.  By default the
@@ -4832,6 +4839,7 @@ described in the subsections below.
 * Common Build Options::        Build options for most commands.
 * Package Transformation Options::  Creating variants of packages.
 * Additional Build Options::    Options specific to 'guix build'.
+* Debugging Build Failures::    Real life packaging experience
 @end menu
 
 @node Common Build Options
@@ -4857,6 +4865,8 @@ the command-line tools.
 Keep the build tree of failed builds.  Thus, if a build fails, its build
 tree is kept under @file{/tmp}, in a directory whose name is shown at
 the end of the build log.  This is useful when debugging build issues.
+@xref{Debugging Build Failures}, for tips and tricks on how to debug
+build issues.
 
 @item --keep-going
 @itemx -k
@@ -5244,6 +5254,82 @@ https://hydra.gnu.org/log/@dots{}-gdb-7.10
 You can freely access a huge library of build logs!
 @end table
 
+@node Debugging Build Failures
+@subsection Debugging Build Failures
+
+@cindex build failures, debugging
+When defining a new package (@pxref{Defining Packages}), you will
+probably find yourself spending some time debugging and tweaking the
+build until it succeeds.  To do that, you need to operate the build
+commands yourself in an environment as close as possible to the one the
+build daemon uses.
+
+To that end, the first thing to do is to use the @option{--keep-failed}
+or @option{-K} option of @command{guix build}, which will keep the
+failed build tree in @file{/tmp} or whatever directory you specified as
+@code{TMPDIR} (@pxref{Invoking guix build, @code{--keep-failed}}).
+
+From there on, you can @command{cd} to the failed build tree and source
+the @file{environment-variables} file, which contains all the
+environment variable definitions that were in place when the build
+failed.  So let's say you're debugging a build failure in package
+@code{foo}; a typical session would look like this:
+
+@example
+$ guix build foo -K
+@dots{} @i{build fails}
+$ cd /tmp/guix-build-foo.drv-0
+$ source ./environment-variables
+$ cd foo-1.2
+@end example
+
+Now, you can invoke commands as if you were the daemon (almost) and
+troubleshoot your build process.
+
+Sometimes it happens that, for example, a package's tests pass when you
+run them manually but they fail when the daemon runs them.  This can
+happen because the daemon runs builds in containers where, unlike in our
+environment above, network access is missing, @file{/bin/sh} does not
+exist, etc. (@pxref{Build Environment Setup}).
+
+In such cases, you may need to run inspect the build process from within
+a container similar to the one the build daemon creates:
+
+@example
+$ guix build -K foo
+@dots{}
+$ cd /tmp/guix-build-foo.drv-0
+$ guix environment -C foo --ad-hoc strace gdb
+[env]# source ./environment-variables
+[env]# cd foo-1.2
+@end example
+
+Here, @command{guix environment -C} creates a container and spawns a new
+shell in it (@pxref{Invoking guix environment}).  The @command{--ad-hoc
+strace gdb} part adds the @command{strace} and @command{gdb} commands to
+the container, which would may find handy while debugging.
+
+To get closer to a container like that used by the build daemon, we can
+remove @file{/bin/sh}:
+
+@example
+[env]# rm /bin/sh
+@end example
+
+(Don't worry, this is harmless: this is all happening in the throw-away
+container created by @command{guix environment}.)
+
+The @command{strace} command is probably not in the search path, but we
+can run:
+
+@example
+[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
+@end example
+
+In this way, not only you will have reproduced the environment variables
+the daemon uses, you will also be running the build process in a container
+similar to the one the daemon uses.
+
 
 @node Invoking guix edit
 @section Invoking @command{guix edit}
@@ -5852,7 +5938,7 @@ an upgrade.  More rebuilds might be required under some circumstances.
 @example
 $ guix refresh --list-dependent flex
 Building the following 120 packages would ensure 213 dependent packages are rebuilt:
-hop-2.4.0 geiser-0.4 notmuch-0.18 mu-0.9.9.5 cflow-1.4 idutils-4.6 @dots{}
+hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
 @end example
 
 The command above lists a set of packages that could be built to check
@@ -6111,7 +6197,9 @@ provides a visual representation of the DAG.  By default,
 @uref{http://www.graphviz.org/, Graphviz}, so its output can be passed
 directly to the @command{dot} command of Graphviz.  It can also emit an
 HTML page with embedded JavaScript code to display a ``chord diagram''
-in a Web browser, using the @uref{https://d3js.org/, d3.js} library.
+in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
+emit Cypher queries to construct a graph in a graph database supporting
+the @uref{http://www.opencypher.org/, openCypher} query language.
 The general syntax is:
 
 @example
@@ -7118,15 +7206,15 @@ get a feel of what that means.)
 Support for the Logical Volume Manager (LVM) is missing.
 
 @item
-Few system services are currently supported out-of-the-box
-(@pxref{Services}).
+More and more system services are provided (@pxref{Services}), but some
+may be missing.
 
 @item
-More than 5,000 packages are available, but you may
+More than 5,300 packages are available, but you may
 occasionally find that a useful package is missing.
 
 @item
-GNOME, Xfce, and Enlightenment are available (@pxref{Desktop Services}),
+GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Desktop Services}),
 as well as a number of X11 window managers.  However, some graphical
 applications may be missing, as well as KDE.
 @end itemize
@@ -7678,7 +7766,19 @@ provides all the tools one would expect for basic user and administrator
 tasks---including the GNU Core Utilities, the GNU Networking Utilities,
 the GNU Zile lightweight text editor, @command{find}, @command{grep},
 etc.  The example above adds tcpdump to those, taken from the @code{(gnu
-packages admin)} module (@pxref{Package Modules}).
+packages admin)} module (@pxref{Package Modules}).  The
+@code{(list package output)} syntax can be used to add a specific output
+of a package:
+
+@lisp
+(use-modules (gnu packages))
+(use-modules (gnu packages dns))
+
+(operating-system
+  ;; ...
+  (packages (cons (list bind "utils")
+                  %base-packages)))
+@end lisp
 
 @findex specification->package
 Referring to packages by variable name, like @var{tcpdump} above, has
@@ -16281,9 +16381,9 @@ distribution:
 
 @smallexample
 $ guix lint -c cve
-gnu/packages/base.scm:652:2: glibc-2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
-gnu/packages/gcc.scm:334:2: gcc-4.9.3: probably vulnerable to CVE-2015-5276
-gnu/packages/image.scm:312:2: openjpeg-2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
+gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
+gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
+gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
 @dots{}
 @end smallexample
 
index 93e214f..78f427b 100644 (file)
@@ -219,7 +219,9 @@ emacs               node    ${EMACS}/html_node/emacs/
 easejs         mono    ${GS}/easejs/manual/easejs.html
 easejs         node    ${GS}/easejs/manual/
 
-emacs-guix     mono    https://notabug.org/alezost/emacs-guix
+EMACS_GUIX = https://alezost.github.io/guix.el/manual/latest
+emacs-guix     mono    ${EMACS_GUIX}/emacs-guix.html
+emacs-guix     node    ${EMACS_GUIX}/html_node/index.html
 
 emacs-muse     node    ${GS}/emacs-muse/manual/muse.html
 emacs-muse     node    ${GS}/emacs-muse/manual/html_node/
index 68ad72c..6102b5d 100755 (executable)
 
 ;;; Code:
 
-;; Load Scheme indentation rules from the current directory.
+;; Load Scheme indentation rules from ".dir-locals.el".
 (with-temp-buffer
   (scheme-mode)
-  (let ((default-directory (file-name-as-directory "."))
+  (let ((default-directory (file-name-as-directory load-file-name))
         (enable-local-variables :all))
     (hack-dir-local-variables)
     (hack-local-variables-apply)))
index 0cb84b8..47aa77d 100644 (file)
@@ -229,6 +229,63 @@ Trailing spaces are trimmed."
     (_ 'fatal-error)))
 
 \f
+;;;
+;;; ISO9660 file systems.
+;;;
+
+;; <http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf>.
+
+(define (iso9660-superblock? sblock)
+  "Return #t when SBLOCK is a iso9660 superblock."
+  (bytevector=? (sub-bytevector sblock 1 6)
+                ;; Note: "\x01" is the volume descriptor format version
+                (string->utf8 "CD001\x01")))
+
+(define (read-iso9660-primary-volume-descriptor device offset)
+  "Find and read the first primary volume descriptor, starting at OFFSET.
+   Return #f if not found."
+  (let* ((sblock    (read-superblock device offset 2048 iso9660-superblock?))
+         (type-code (if sblock (array-ref sblock 0) 255)))
+    (match type-code
+      (255 #f) ; Volume Descriptor Set Terminator.
+      (1 sblock) ; Primary Volume Descriptor
+      (_ (read-iso9660-primary-volume-descriptor device (+ offset 2048))))))
+
+(define (read-iso9660-superblock device)
+  "Return the raw contents of DEVICE's iso9660 superblock as a bytevector, or
+#f if DEVICE does not contain a iso9660 file system."
+  ;; Start reading at sector 16.
+  (read-iso9660-primary-volume-descriptor device (* 2048 16)))
+
+(define (iso9660-superblock-uuid sblock)
+  "Return the modification time of a iso9660 superblock SBLOCK as a bytevector."
+  ;; Drops GMT offset for compatibility with Grub, blkid and /dev/disk/by-uuid.
+  ;; Compare Grub: "2014-12-02-19-30-23-00".
+  ;; Compare blkid result: "2014-12-02-19-30-23-00".
+  ;; Compare /dev/disk/by-uuid entry: "2014-12-02-19-30-23-00".
+  (sub-bytevector sblock 830 16))
+
+(define (iso9660-uuid->string uuid)
+  "Given an UUID bytevector, return its timestamp string."
+  (define (digits->string bytes)
+    (latin1->string bytes (lambda (c) #f)))
+  (let* ((year (sub-bytevector uuid 0 4))
+         (month (sub-bytevector uuid 4 2))
+         (day (sub-bytevector uuid 6 2))
+         (hour (sub-bytevector uuid 8 2))
+         (minute (sub-bytevector uuid 10 2))
+         (second (sub-bytevector uuid 12 2))
+         (hundredths (sub-bytevector uuid 14 2))
+         (parts (list year month day hour minute second hundredths)))
+    (string-append (string-join (map digits->string parts)))))
+
+(define (iso9660-superblock-volume-name sblock)
+  "Return the volume name of SBLOCK as a string.  The volume name is an ASCII
+string.  Trailing spaces are trimmed."
+  (string-trim-right (latin1->string (sub-bytevector sblock 40 32)
+                                     (lambda (c) #f)) #\space))
+
+\f
 ;;;
 ;;; LUKS encrypted devices.
 ;;;
@@ -340,7 +397,9 @@ partition field reader that returned a value."
     (_ #f)))
 
 (define %partition-label-readers
-  (list (partition-field-reader read-ext2-superblock
+  (list (partition-field-reader read-iso9660-superblock
+                                iso9660-superblock-volume-name)
+        (partition-field-reader read-ext2-superblock
                                 ext2-superblock-volume-name)
         (partition-field-reader read-btrfs-superblock
                                 btrfs-superblock-volume-name)
@@ -348,7 +407,9 @@ partition field reader that returned a value."
                                 fat32-superblock-volume-name)))
 
 (define %partition-uuid-readers
-  (list (partition-field-reader read-ext2-superblock
+  (list (partition-field-reader read-iso9660-superblock
+                                iso9660-superblock-uuid)
+        (partition-field-reader read-ext2-superblock
                                 ext2-superblock-uuid)
         (partition-field-reader read-btrfs-superblock
                                 btrfs-superblock-uuid)
index f5574ec..28a283a 100644 (file)
@@ -107,6 +107,7 @@ GNU_SYSTEM_MODULES =                                \
   %D%/packages/dejagnu.scm                     \
   %D%/packages/dico.scm                                \
   %D%/packages/dictionaries.scm                        \
+  %D%/packages/direct-connect.scm              \
   %D%/packages/disk.scm                                \
   %D%/packages/display-managers.scm            \
   %D%/packages/django.scm                      \
@@ -232,7 +233,6 @@ GNU_SYSTEM_MODULES =                                \
   %D%/packages/libunwind.scm                   \
   %D%/packages/libupnp.scm                     \
   %D%/packages/lighting.scm                     \
-  %D%/packages/links.scm                       \
   %D%/packages/linux.scm                       \
   %D%/packages/lirc.scm                                \
   %D%/packages/lisp.scm                                \
@@ -244,7 +244,6 @@ GNU_SYSTEM_MODULES =                                \
   %D%/packages/lua.scm                         \
   %D%/packages/lxde.scm                                \
   %D%/packages/lxqt.scm                                \
-  %D%/packages/lynx.scm                                \
   %D%/packages/m4.scm                          \
   %D%/packages/machine-learning.scm            \
   %D%/packages/man.scm                         \
@@ -256,6 +255,7 @@ GNU_SYSTEM_MODULES =                                \
   %D%/packages/maths.scm                       \
   %D%/packages/mc.scm                          \
   %D%/packages/mcrypt.scm                      \
+  %D%/packages/mes.scm                         \
   %D%/packages/messaging.scm                   \
   %D%/packages/mingw.scm                       \
   %D%/packages/mg.scm                          \
@@ -475,6 +475,9 @@ GNU_SYSTEM_MODULES =                                \
   %D%/tests/ssh.scm                            \
   %D%/tests/web.scm
 
+# Modules that do not need to be compiled.
+MODULES_NOT_COMPILED +=                                \
+  %D%/build/svg.scm
 
 patchdir = $(guilemoduledir)/%D%/packages/patches
 dist_patch_DATA =                                              \
@@ -483,6 +486,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/a2ps-CVE-2014-0466.patch        \
   %D%/packages/patches/abiword-explictly-cast-bools.patch      \
   %D%/packages/patches/abiword-wmf-version-lookup-fix.patch    \
+  %D%/packages/patches/abiword-black-drawing-with-gtk322.patch \
   %D%/packages/patches/acl-hurd-path-max.patch                 \
   %D%/packages/patches/aegis-constness-error.patch             \
   %D%/packages/patches/aegis-perl-tempdir1.patch               \
@@ -513,6 +517,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/calibre-drop-unrar.patch                        \
   %D%/packages/patches/calibre-no-updates-dialog.patch         \
   %D%/packages/patches/cdparanoia-fpic.patch                   \
+  %D%/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch     \
   %D%/packages/patches/ceph-disable-cpu-optimizations.patch    \
   %D%/packages/patches/ceph-disable-unittest-throttle.patch    \
   %D%/packages/patches/ceph-skip-collect-sys-info-test.patch   \
@@ -525,6 +530,10 @@ dist_patch_DATA =                                          \
   %D%/packages/patches/clx-remove-demo.patch                   \
   %D%/packages/patches/cmake-fix-tests.patch                   \
   %D%/packages/patches/coda-use-system-libs.patch              \
+  %D%/packages/patches/cool-retro-term-dont-check-uninit-member.patch  \
+  %D%/packages/patches/cool-retro-term-fix-array-size.patch    \
+  %D%/packages/patches/cool-retro-term-memory-leak-1.patch     \
+  %D%/packages/patches/cool-retro-term-remove-non-free-fonts.patch     \
   %D%/packages/patches/coreutils-cut-huge-range-test.patch     \
   %D%/packages/patches/coreutils-fix-cross-compilation.patch    \
   %D%/packages/patches/cpio-CVE-2016-2037.patch                        \
@@ -543,6 +552,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/doc++-include-directives.patch          \
   %D%/packages/patches/doc++-segfault-fix.patch                        \
   %D%/packages/patches/doxygen-test.patch                      \
+  %D%/packages/patches/dvd+rw-tools-add-include.patch          \
   %D%/packages/patches/elfutils-tests-ptrace.patch             \
   %D%/packages/patches/elixir-disable-failing-tests.patch      \
   %D%/packages/patches/einstein-build.patch                    \
@@ -618,6 +628,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/glog-gcc-5-demangling.patch             \
   %D%/packages/patches/gmp-arm-asm-nothumb.patch               \
   %D%/packages/patches/gmp-faulty-test.patch                   \
+  %D%/packages/patches/gnome-shell-CVE-2017-8288.patch         \
   %D%/packages/patches/gnome-tweak-tool-search-paths.patch     \
   %D%/packages/patches/gnucash-price-quotes-perl.patch         \
   %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \
@@ -660,7 +671,6 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/hurd-fix-eth-multiplexer-dependency.patch        \
   %D%/packages/patches/hydra-disable-darcs-test.patch          \
   %D%/packages/patches/icecat-avoid-bundled-libraries.patch    \
-  %D%/packages/patches/icecat-bug-1299500-pt10.patch           \
   %D%/packages/patches/icu4c-CVE-2017-7867-CVE-2017-7868.patch \
   %D%/packages/patches/icu4c-reset-keyword-list-iterator.patch \
   %D%/packages/patches/id3lib-CVE-2007-4460.patch                      \
@@ -719,6 +729,8 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/libmad-frame-length.patch               \
   %D%/packages/patches/libmad-mips-newgcc.patch                        \
   %D%/packages/patches/libsndfile-armhf-type-checks.patch      \
+  %D%/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch        \
+  %D%/packages/patches/libsndfile-CVE-2017-8362.patch          \
   %D%/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch     \
   %D%/packages/patches/libtar-CVE-2013-4420.patch \
   %D%/packages/patches/libtheora-config-guess.patch            \
@@ -726,6 +738,9 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/libtiff-CVE-2016-10093.patch            \
   %D%/packages/patches/libtiff-CVE-2016-10094.patch            \
   %D%/packages/patches/libtiff-CVE-2017-5225.patch             \
+  %D%/packages/patches/libtiff-CVE-2017-7593.patch             \
+  %D%/packages/patches/libtiff-CVE-2017-7594.patch             \
+  %D%/packages/patches/libtiff-multiple-UBSAN-crashes.patch    \
   %D%/packages/patches/libtiff-assertion-failure.patch         \
   %D%/packages/patches/libtiff-divide-by-zero-ojpeg.patch      \
   %D%/packages/patches/libtiff-divide-by-zero-tiffcp.patch     \
@@ -738,6 +753,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/libtiff-invalid-read.patch              \
   %D%/packages/patches/libtiff-null-dereference.patch          \
   %D%/packages/patches/libtiff-tiffcp-underflow.patch          \
+  %D%/packages/patches/libtirpc-CVE-2017-8779.patch            \
   %D%/packages/patches/libtorrent-rasterbar-boost-compat.patch \
   %D%/packages/patches/libtool-skip-tests2.patch               \
   %D%/packages/patches/libunwind-CVE-2015-3239.patch           \
@@ -760,8 +776,14 @@ dist_patch_DATA =                                          \
   %D%/packages/patches/libxslt-generated-ids.patch             \
   %D%/packages/patches/libxslt-CVE-2016-4738.patch             \
   %D%/packages/patches/libxt-guix-search-paths.patch           \
+  %D%/packages/patches/lierolibre-check-unaligned-access.patch \
+  %D%/packages/patches/lierolibre-is-free-software.patch       \
+  %D%/packages/patches/lierolibre-newer-libconfig.patch                \
+  %D%/packages/patches/lierolibre-remove-arch-warning.patch    \
+  %D%/packages/patches/lierolibre-try-building-other-arch.patch        \
   %D%/packages/patches/linux-pam-no-setfsuid.patch             \
   %D%/packages/patches/lirc-localstatedir.patch                        \
+  %D%/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch        \
   %D%/packages/patches/llvm-for-extempore.patch                        \
   %D%/packages/patches/lm-sensors-hwmon-attrs.patch            \
   %D%/packages/patches/lua-CVE-2014-5461.patch                      \
@@ -775,6 +797,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/luminance-hdr-qt-printer.patch          \
   %D%/packages/patches/lvm2-static-link.patch                  \
   %D%/packages/patches/lxsession-use-gapplication.patch         \
+  %D%/packages/patches/lxterminal-CVE-2016-10369.patch         \
   %D%/packages/patches/lz4-fix-test-failures.patch             \
   %D%/packages/patches/make-impure-dirs.patch                  \
   %D%/packages/patches/mars-install.patch                      \
@@ -789,11 +812,16 @@ dist_patch_DATA =                                         \
   %D%/packages/patches/mesa-wayland-egl-symbols-check-mips.patch       \
   %D%/packages/patches/metabat-remove-compilation-date.patch   \
   %D%/packages/patches/mhash-keygen-test-segfault.patch                \
+  %D%/packages/patches/miniupnpc-CVE-2017-8798.patch           \
   %D%/packages/patches/mingw-w64-5.0rc2-gcc-4.9.3.patch                \
   %D%/packages/patches/mpc123-initialize-ao.patch              \
   %D%/packages/patches/module-init-tools-moduledir.patch       \
   %D%/packages/patches/mozjs17-aarch64-support.patch           \
   %D%/packages/patches/mozjs24-aarch64-support.patch           \
+  %D%/packages/patches/mozjs38-pkg-config-version.patch                \
+  %D%/packages/patches/mozjs38-shell-version.patch             \
+  %D%/packages/patches/mozjs38-tracelogger.patch               \
+  %D%/packages/patches/mozjs38-version-detection.patch         \
   %D%/packages/patches/multiqc-fix-git-subprocess-error.patch  \
   %D%/packages/patches/mumps-build-parallelism.patch           \
   %D%/packages/patches/mupdf-build-with-openjpeg-2.1.patch     \
@@ -842,6 +870,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/patch-hurd-path-max.patch               \
   %D%/packages/patches/pcre-CVE-2017-7186.patch                        \
   %D%/packages/patches/pcre2-CVE-2017-7186.patch               \
+  %D%/packages/patches/pcre2-CVE-2017-8786.patch               \
   %D%/packages/patches/perl-autosplit-default-time.patch       \
   %D%/packages/patches/perl-deterministic-ordering.patch       \
   %D%/packages/patches/perl-finance-quote-unuse-mozilla-ca.patch \
@@ -849,7 +878,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/perl-io-socket-ssl-openssl-1.0.2f-fix.patch \
   %D%/packages/patches/perl-net-amazon-s3-moose-warning.patch  \
   %D%/packages/patches/perl-net-ssleay-disable-ede-test.patch  \
-  %D%/packages/patches/perl-net-dns-resolver-programmable-Fix-broken-interface.patch   \
+  %D%/packages/patches/perl-net-dns-resolver-programmable-fix.patch    \
   %D%/packages/patches/perl-no-sys-dirs.patch                  \
   %D%/packages/patches/perl-module-pluggable-search.patch      \
   %D%/packages/patches/perl-reproducible-build-date.patch      \
@@ -871,6 +900,7 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/portmidi-modular-build.patch            \
   %D%/packages/patches/procmail-ambiguous-getline-debian.patch  \
   %D%/packages/patches/procmail-CVE-2014-3618.patch            \
+  %D%/packages/patches/proot-test-fhs.patch                    \
   %D%/packages/patches/pt-scotch-build-parallelism.patch       \
   %D%/packages/patches/pulseaudio-fix-mult-test.patch          \
   %D%/packages/patches/pulseaudio-longer-test-timeout.patch    \
@@ -916,7 +946,9 @@ dist_patch_DATA =                                           \
   %D%/packages/patches/readline-link-ncurses.patch             \
   %D%/packages/patches/readline-6.2-CVE-2014-2524.patch                \
   %D%/packages/patches/readline-7.0-mingw.patch                        \
+  %D%/packages/patches/reptyr-fix-gcc-7.patch                  \
   %D%/packages/patches/ripperx-missing-file.patch              \
+  %D%/packages/patches/rpcbind-CVE-2017-8779.patch             \
   %D%/packages/patches/rpm-CVE-2014-8118.patch                 \
   %D%/packages/patches/rsem-makefile.patch                     \
   %D%/packages/patches/ruby-concurrent-ignore-broken-test.patch        \
@@ -1085,13 +1117,15 @@ nodist_bootstrap_mips64el_linux_DATA =                                  \
 set-bootstrap-executable-permissions:
        chmod +x $(DESTDIR)$(bootstrapdir)/*/{bash,mkdir,tar,xz}
 
-DISTCLEANFILES =                               \
+BOOTSTRAP_GUILE_TARBALLS =                     \
   $(nodist_bootstrap_x86_64_linux_DATA)                \
   $(nodist_bootstrap_i686_linux_DATA)          \
   $(nodist_bootstrap_armhf_linux_DATA)         \
-  $(nodist_bootstrap_aarch64_linux_DATA)               \
+  $(nodist_bootstrap_aarch64_linux_DATA)       \
   $(nodist_bootstrap_mips64el_linux_DATA)
 
+DISTCLEANFILES = $(BOOTSTRAP_GUILE_TARBALLS)
+
 # Method to download a file from an external source.
 DOWNLOAD_FILE =                                                                \
   GUILE_LOAD_COMPILED_PATH="$(top_builddir):$$GUILE_LOAD_COMPILED_PATH"        \
index 92bab72..5790715 100644 (file)
   #:use-module (guix packages)
   #:use-module (guix ui)
   #:use-module (guix utils)
+  #:use-module (guix discovery)
   #:use-module (guix memoization)
-  #:use-module (guix combinators)
   #:use-module ((guix build utils)
                 #:select ((package-name->name+version
                            . hyphen-separated-name->name+version)))
-  #:use-module (ice-9 ftw)
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
@@ -48,7 +47,6 @@
             %package-module-path
 
             fold-packages
-            scheme-modules                    ;XXX: for lack of a better place
 
             find-packages-by-name
             find-best-packages-by-name
@@ -89,7 +87,7 @@
   "Search the patch FILE-NAME.  Raise an error if not found."
   (or (search-path (%patch-path) file-name)
       (raise (condition
-              (&message (message (format #f (_ "~a: patch not found")
+              (&message (message (format #f (G_ "~a: patch not found")
                                          file-name)))))))
 
 (define-syntax-rule (search-patches file-name ...)
@@ -105,7 +103,7 @@ found."
       (raise (condition
               (&message
                (message
-                (format #f (_ "could not find bootstrap binary '~a' \
+                (format #f (G_ "could not find bootstrap binary '~a' \
 for system '~a'")
                         file-name system)))))))
 
@@ -140,92 +138,17 @@ for system '~a'")
               directory))
         %load-path)))
 
-(define* (scheme-files directory)
-  "Return the list of Scheme files found under DIRECTORY, recursively.  The
-returned list is sorted in alphabetical order."
-
-  ;; Sort entries so that 'fold-packages' works in a deterministic fashion
-  ;; regardless of details of the underlying file system.
-  (sort (file-system-fold (const #t)                   ; enter?
-                          (lambda (path stat result)   ; leaf
-                            (if (string-suffix? ".scm" path)
-                                (cons path result)
-                                result))
-                          (lambda (path stat result)   ; down
-                            result)
-                          (lambda (path stat result)   ; up
-                            result)
-                          (const #f)                   ; skip
-                          (lambda (path stat errno result)
-                            (warning (_ "cannot access `~a': ~a~%")
-                                     path (strerror errno))
-                            result)
-                          '()
-                          directory
-                          stat)
-        string<?))
-
-(define file-name->module-name
-  (let ((not-slash (char-set-complement (char-set #\/))))
-    (lambda (file)
-      "Return the module name (a list of symbols) corresponding to FILE."
-      (map string->symbol
-           (string-tokenize (string-drop-right file 4) not-slash)))))
-
-(define* (scheme-modules directory #:optional sub-directory)
-  "Return the list of Scheme modules available under DIRECTORY.
-Optionally, narrow the search to SUB-DIRECTORY."
-  (define prefix-len
-    (string-length directory))
-
-  (filter-map (lambda (file)
-                (let* ((file   (substring file prefix-len))
-                       (module (file-name->module-name file)))
-                  (catch #t
-                    (lambda ()
-                      (resolve-interface module))
-                    (lambda args
-                      ;; Report the error, but keep going.
-                      (warn-about-load-error module args)
-                      #f))))
-              (scheme-files (if sub-directory
-                                (string-append directory "/" sub-directory)
-                                directory))))
-
-(define* (all-package-modules #:optional (path (%package-module-path)))
-  "Return the list of package modules found in PATH, a list of directories to
-search."
-  (fold-right (lambda (spec result)
-                (match spec
-                  ((? string? directory)
-                   (append (scheme-modules directory) result))
-                  ((directory . sub-directory)
-                   (append (scheme-modules directory sub-directory)
-                           result))))
-              '()
-              path))
-
 (define (fold-packages proc init)
   "Call (PROC PACKAGE RESULT) for each available package, using INIT as
 the initial value of RESULT.  It is guaranteed to never traverse the
 same package twice."
-  (identity   ; discard second return value
-   (fold2 (lambda (module result seen)
-            (fold2 (lambda (var result seen)
-                     (if (and (package? var)
-                              (not (vhash-assq var seen))
-                              (not (hidden-package? var)))
-                         (values (proc var result)
-                                 (vhash-consq var #t seen))
-                         (values result seen)))
-                   result
-                   seen
-                   (module-map (lambda (sym var)
-                                 (false-if-exception (variable-ref var)))
-                               module)))
-          init
-          vlist-null
-          (all-package-modules))))
+  (fold-module-public-variables (lambda (object result)
+                                  (if (and (package? object)
+                                           (not (hidden-package? object)))
+                                      (proc object result)
+                                      result))
+                                init
+                                (all-modules (%package-module-path))))
 
 (define find-packages-by-name
   (let ((packages (delay
@@ -306,38 +229,25 @@ return its return value."
 ;;; Package specification.
 ;;;
 
-(define* (%find-package spec name version #:key fallback?)
+(define* (%find-package spec name version)
   (match (find-best-packages-by-name name version)
     ((pkg . pkg*)
      (unless (null? pkg*)
-       (warning (_ "ambiguous package specification `~a'~%") spec)
-       (warning (_ "choosing ~a@~a from ~a~%")
+       (warning (G_ "ambiguous package specification `~a'~%") spec)
+       (warning (G_ "choosing ~a@~a from ~a~%")
                 (package-name pkg) (package-version pkg)
                 (location->string (package-location pkg))))
-     (when fallback?
-       (warning (_ "deprecated NAME-VERSION syntax; \
-use NAME@VERSION instead~%")))
-
      (match (package-superseded pkg)
        ((? package? new)
-        (info (_ "package '~a' has been superseded by '~a'~%")
+        (info (G_ "package '~a' has been superseded by '~a'~%")
               (package-name pkg) (package-name new))
         new)
        (#f
         pkg)))
     (x
      (if version
-         (leave (_ "~A: package not found for version ~a~%") name version)
-         (if (not fallback?)
-             ;; XXX: Fallback to the older specification style with an hyphen
-             ;; between NAME and VERSION, for backward compatibility.
-             (call-with-values
-                 (lambda ()
-                   (hyphen-separated-name->name+version name))
-               (cut %find-package spec <> <> #:fallback? #t))
-
-             ;; The fallback case didn't find anything either, so bail out.
-             (leave (_ "~A: unknown package~%") name))))))
+         (leave (G_ "~A: package not found for version ~a~%") name version)
+         (leave (G_ "~A: unknown package~%") name)))))
 
 (define (specification->package spec)
   "Return a package matching SPEC.  SPEC may be a package name, or a package
@@ -365,6 +275,6 @@ version; if SPEC does not specify an output, return OUTPUT."
       (package
        (if (member sub-drv (package-outputs package))
            (values package sub-drv)
-           (leave (_ "package `~a' lacks output `~a'~%")
+           (leave (G_ "package `~a' lacks output `~a'~%")
                   (package-full-name package)
                   sub-drv))))))
index 514ac0c..30c2411 100644 (file)
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Marek Benc <merkur32@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,7 +45,7 @@
 (define-public abiword
   (package
     (name "abiword")
-    (version "3.0.1")
+    (version "3.0.2")
     (source
       (origin
         (method url-fetch)
           (string-append "http://abisource.org/downloads/" name "/" version
                          "/source/" name "-" version ".tar.gz"))
         (sha256
-          (base32 "1ik591rx15nn3n1297cwykl8wvrlgj78i528id9wbidgy3xzd570"))
-        (modules '((guix build utils)))
-        (snippet
-         ;; Ensure reproducibility.
-         '(substitute* "src/wp/main/xp/abi_ver.cpp"
-            (("__DATE__") "\"2017\"")
-            (("__TIME__") "\"00:00\"")))
+         (base32 "08imry821g81apdwym3gcs4nss0l9j5blqk31j5rv602zmcd9gxg"))
         (patches
          (search-patches "abiword-wmf-version-lookup-fix.patch"
-                         "abiword-explictly-cast-bools.patch"))))
+                         "abiword-explictly-cast-bools.patch"
+                         "abiword-black-drawing-with-gtk322.patch"))))
 
     (build-system glib-or-gtk-build-system)
     (arguments                   ;; NOTE: rsvg is disabled, since Abiword
@@ -84,7 +80,9 @@
         ;;                  assertion 'G_IS_OBJECT (object)' failed
         ;; Manually starting the X server before the test phase did not help
         ;; the tests to pass.
-        #:tests? #f))
+        #:tests? #f
+        #:make-flags
+        (list "CXXFLAGS=-std=c++11")))
     (inputs
       `(("boost" ,boost)
         ("enchant" ,enchant)
index b9bc016..c86713c 100644 (file)
@@ -25,7 +25,7 @@
 (define-public acct
   (package
     (name "acct")
-    (version "6.6.2")
+    (version "6.6.3")
     (source
      (origin
       (method url-fetch)
@@ -33,7 +33,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "0081hzkcxw9aslpsakridj15m0wbnkdhm210fzbg021vi4pppm4f"))))
+        "14x0zklwlg7cc7amlyzffqr8az3fqj1h9dyj0hvl1kpi7cr7kbjy"))))
     (build-system gnu-build-system)
     (home-page "https://gnu.org/software/acct/")
     (synopsis "Standard login and process accounting utilities")
index 8f4a4cd..ef7bff1 100644 (file)
@@ -16,6 +16,7 @@
 ;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
+;;; Copyright © 2017 Ethan R. Jones <doubleplusgood23@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 (define-public aide
   (package
     (name "aide")
-    (version "0.15.1")
+    (version "0.16")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/aide/aide/"
                                   version "/aide-" version ".tar.gz"))
               (sha256
                (base32
-                "1vsrc0s62kv1i84skm6k6zy868gayjck268qwj38rpspc8c5qgih"))))
+                "0ibkv4z2gk14fn014kq13rp2ysiq6nn2cflv2q5i7zf466hm6758"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison)
      `(("libgcrypt" ,libgcrypt)
        ("libgpg-error" ,libgpg-error)
        ("libmhash" ,libmhash)
+       ("pcre" ,pcre)
        ("zlib" ,zlib)))
     (synopsis "File and directory integrity checker")
     (description
@@ -1352,14 +1354,14 @@ of supported upstream metrics systems simultaneously.")
 (define-public ansible
   (package
     (name "ansible")
-    (version "2.2.1.0")
+    (version "2.3.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "ansible" version))
        (sha256
         (base32
-         "0gz9i30pdmkchi936ijy873k8di6fmf3v5rv551hxyf0hjkjx8b3"))))
+         "0n54h8g6a6hcp41sasvjqa4yz1pwd8mshbwlcghj0sjnrl3kk7r9"))))
     (build-system python-build-system)
     (native-inputs
      `(("python2-pycrypto" ,python2-pycrypto)
@@ -2087,3 +2089,94 @@ It is similar to Capistrano, except it's implemented in Python and doesn't
 expect you to be deploying Rails applications.  Fabric is a simple, Pythonic
 tool for remote execution and deployment.")
     (license license:bsd-2)))
+
+(define-public neofetch
+  (package
+    (name "neofetch")
+    (version "3.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/dylanaraps/neofetch/"
+                                  "archive/" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1rgznkl7a5q7lnc6zxlwvinq20b7k46n949l1hiwifarv0jgwynv"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f                      ; there are no tests
+       #:make-flags
+       (list (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-target-directories
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "Makefile"
+                 (("\\$\\(DESTDIR\\)/etc/")
+                  "$(PREFIX)/etc/"))
+               (substitute* "neofetch"
+                 (("\"/etc/neofetch")
+                  (string-append "\"" out "/etc/neofetch"))
+                 (("\"/usr/share/neofetch")
+                  (string-append "\"" out "/usr/share/neofetch"))))
+             #t))
+         (delete 'configure))))
+    (home-page "https://github.com/dylanaraps/neofetch")
+    (synopsis "System info script")
+    (description "Neofetch is a CLI system information tool written in Bash.
+Neofetch displays information about your system next to an image, your OS
+logo, or any ASCII file of your choice.  The main purpose of Neofetch is to be
+used in screenshots to show other users what operating system or distribution
+you are running, what theme or icon set you are using, etc.")
+    (license license:expat)))
+
+(define-public nnn
+  (package
+    (name "nnn")
+    (version "1.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/jarun/nnn/"
+                                  "archive/v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1hww4385f81lyy30fx2rb4wchfi79dpgl7yylnfxvf27a4h2mkhm"))))
+    (build-system gnu-build-system)
+    (inputs `(("ncurses" ,ncurses)
+              ("readline" ,readline)))
+    (arguments
+     '(#:tests? #f ; no tests
+       #:phases
+       ;; We do not provide `ncurses.h' within an `ncursesw'
+       ;; sub-directory, so patch the source accordingly.  See
+       ;; <http://bugs.gnu.org/19018>.
+       ;; Thanks to gtypist maintainer.
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-curses-lib
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "Makefile"
+                 (("-lncursesw")
+                  "-lncurses"))
+               (substitute* "nnn.c"
+                 (("ncursesw\\/curses.h")
+                  "ncurses.h")))
+             #t))
+         (delete 'configure))
+       #:make-flags
+       (list
+        (string-append "PREFIX="
+                       (assoc-ref %outputs "out"))
+        (string-append "-Wl,-rpath="
+                       %output "/lib")
+        "CC=gcc")))
+    (home-page "https://github.com/jarun/nnn")
+    (synopsis "Terminal file browser")
+    (description "@command{nnn} is a fork of @command{noice}, a blazing-fast
+lightweight terminal file browser with easy keyboard shortcuts for
+navigation, opening files and running tasks.  There is no config file and
+mime associations are hard-coded.  The incredible user-friendliness and speed
+make it a perfect utility on modern distros.")
+    (license license:bsd-2)))
index 5b2d971..497f205 100644 (file)
@@ -1868,21 +1868,19 @@ and ALSA.")
 (define-public qjackctl
   (package
     (name "qjackctl")
-    (version "0.4.4")
+    (version "0.4.5")
     (source (origin
               (method url-fetch)
-              (uri
-               (string-append
-                "mirror://sourceforge/qjackctl/qjackctl/"
-                version "/qjackctl-" version ".tar.gz"))
+              (uri (string-append "mirror://sourceforge/qjackctl/qjackctl/"
+                                  version "/qjackctl-" version ".tar.gz"))
               (sha256
                (base32
-                "19bbljb3iz5ss4s5fmra1dxabg2fnp61sa51d63zsm56xkvv47ak"))))
+                "1dsavjfzz5bpzc80mvfs940w9f9f47cf4r9cqxnaqrl4xilsa3f5"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f)) ; no check target
     (inputs
-     `(("jack-2" ,jack-2)
+     `(("jack" ,jack-1)
        ("qtbase" ,qtbase)
        ("qtx11extras" ,qtx11extras)))
     (native-inputs
@@ -2475,14 +2473,15 @@ interface.")
 (define-public qsynth
   (package
     (name "qsynth")
-    (version "0.4.3")
+    (version "0.4.4")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://sourceforge/qsynth/qsynth/" version
                            "/qsynth-" version ".tar.gz"))
        (sha256
-        (base32 "1j5hm99fjrnaw8wbmlh4qixkv3rw5dl429mp1ag7js2ydrx0j9yy"))))
+        (base32
+         "0qhfnikx3xcllkvs60kj6vcf2rwwzh31y41qkk6kwfhzgd219y8f"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no "check" phase
index 95b96ca..9b32081 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 (define-public augeas
   (package
     (name "augeas")
-    (version "1.4.0")
+    (version "1.8.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.augeas.net/augeas-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0c2vncn0afmgwggnqa5s5z7m3zbcc66bi8v9m1h9w0i9q9xax7v5"))))
+                "1iac5lwi1q10r343ii9v5p2fdplvh06yv9svsi8zz6cd2c2fjp2i"))))
     (build-system gnu-build-system)
     ;; Marked as "required" in augeas.pc
     (propagated-inputs
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.10.0-gnu Kernel Configuration
+# Linux/x86 4.11.0-gnu Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -38,7 +38,6 @@ CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_32_SMP=y
 CONFIG_ARCH_SUPPORTS_UPROBES=y
 CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_DEBUG_RODATA=y
 CONFIG_PGTABLE_LEVELS=3
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 CONFIG_IRQ_WORK=y
@@ -134,12 +133,11 @@ CONFIG_SRCU=y
 # CONFIG_TASKS_RCU is not set
 CONFIG_RCU_STALL_COMMON=y
 # CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_EXPEDITE_BOOT is not set
 CONFIG_BUILD_BIN2C=y
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=17
 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
-CONFIG_NMI_LOG_BUF_SHIFT=13
+CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
 CONFIG_CGROUPS=y
@@ -155,6 +153,7 @@ CONFIG_FAIR_GROUP_SCHED=y
 CONFIG_CFS_BANDWIDTH=y
 # CONFIG_RT_GROUP_SCHED is not set
 CONFIG_CGROUP_PIDS=y
+# CONFIG_CGROUP_RDMA is not set
 CONFIG_CGROUP_FREEZER=y
 CONFIG_CGROUP_HUGETLB=y
 CONFIG_CPUSETS=y
@@ -223,6 +222,7 @@ CONFIG_PCI_QUIRKS=y
 CONFIG_MEMBARRIER=y
 # CONFIG_EMBEDDED is not set
 CONFIG_HAVE_PERF_EVENTS=y
+# CONFIG_PC104 is not set
 
 #
 # Kernel Performance Events And Counters
@@ -231,6 +231,7 @@ CONFIG_PERF_EVENTS=y
 # CONFIG_DEBUG_PERF_USE_VMALLOC is not set
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_SLUB_DEBUG=y
+# CONFIG_SLUB_MEMCG_SYSFS_ON is not set
 # CONFIG_COMPAT_BRK is not set
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
@@ -250,7 +251,7 @@ CONFIG_JUMP_LABEL=y
 # CONFIG_STATIC_KEYS_SELFTEST is not set
 CONFIG_OPTPROBES=y
 CONFIG_KPROBES_ON_FTRACE=y
-CONFIG_UPROBES=y
+# CONFIG_UPROBES is not set
 # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
 CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
 CONFIG_ARCH_USE_BUILTIN_BSWAP=y
@@ -265,6 +266,7 @@ CONFIG_HAVE_NMI=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
@@ -287,6 +289,7 @@ CONFIG_HAVE_GCC_PLUGINS=y
 CONFIG_GCC_PLUGINS=y
 # CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set
 # CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK is not set
 CONFIG_HAVE_CC_STACKPROTECTOR=y
 CONFIG_CC_STACKPROTECTOR=y
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
@@ -309,6 +312,12 @@ CONFIG_OLD_SIGSUSPEND3=y
 CONFIG_OLD_SIGACTION=y
 # CONFIG_CPU_NO_EFFICIENT_FFS is not set
 # CONFIG_HAVE_ARCH_VMAP_STACK is not set
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
+CONFIG_STRICT_KERNEL_RWX=y
+CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
+CONFIG_STRICT_MODULE_RWX=y
 
 #
 # GCOV-based kernel profiling
@@ -330,6 +339,7 @@ CONFIG_MODULE_SRCVERSION_ALL=y
 CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_BLOCK=y
 CONFIG_LBDAF=y
+CONFIG_BLK_SCSI_REQUEST=y
 CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
@@ -339,6 +349,8 @@ CONFIG_BLK_CMDLINE_PARSER=y
 CONFIG_BLK_WBT=y
 # CONFIG_BLK_WBT_SQ is not set
 CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_DEBUG_FS=y
+# CONFIG_BLK_SED_OPAL is not set
 
 #
 # Partition Types
@@ -365,6 +377,7 @@ CONFIG_EFI_PARTITION=y
 CONFIG_SYSV68_PARTITION=y
 CONFIG_CMDLINE_PARTITION=y
 CONFIG_BLK_MQ_PCI=y
+CONFIG_BLK_MQ_VIRTIO=y
 
 #
 # IO Schedulers
@@ -377,6 +390,7 @@ CONFIG_DEFAULT_DEADLINE=y
 # CONFIG_DEFAULT_CFQ is not set
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="deadline"
+CONFIG_MQ_IOSCHED_DEADLINE=m
 CONFIG_PREEMPT_NOTIFIERS=y
 CONFIG_PADATA=y
 CONFIG_ASN1=y
@@ -428,6 +442,7 @@ CONFIG_XEN_DOM0=y
 CONFIG_XEN_PVHVM=y
 CONFIG_XEN_SAVE_RESTORE=y
 # CONFIG_XEN_DEBUG_FS is not set
+CONFIG_XEN_PVH=y
 CONFIG_KVM_GUEST=y
 CONFIG_KVM_DEBUG_FS=y
 # CONFIG_LGUEST_GUEST is not set
@@ -720,7 +735,6 @@ CONFIG_CPU_FREQ=y
 CONFIG_CPU_FREQ_GOV_ATTR_SET=y
 CONFIG_CPU_FREQ_GOV_COMMON=y
 CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
 # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
@@ -796,6 +810,7 @@ CONFIG_PCIEASPM=y
 CONFIG_PCIEASPM_DEBUG=y
 CONFIG_PCIEASPM_DEFAULT=y
 # CONFIG_PCIEASPM_POWERSAVE is not set
+# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
 # CONFIG_PCIEASPM_PERFORMANCE is not set
 CONFIG_PCIE_PME=y
 CONFIG_PCIE_DPC=y
@@ -825,9 +840,13 @@ CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
 CONFIG_HOTPLUG_PCI_SHPC=m
 
 #
-# PCI host controller drivers
+# DesignWare PCI Core Support
 #
 # CONFIG_PCIE_DW_PLAT is not set
+
+#
+# PCI host controller drivers
+#
 # CONFIG_ISA_BUS is not set
 CONFIG_ISA_DMA_API=y
 CONFIG_ISA=y
@@ -895,7 +914,6 @@ CONFIG_BINFMT_MISC=m
 CONFIG_COREDUMP=y
 CONFIG_COMPAT_32=y
 CONFIG_HAVE_ATOMIC_IOMAP=y
-CONFIG_PMC_ATOM=y
 CONFIG_NET=y
 CONFIG_NET_INGRESS=y
 CONFIG_NET_EGRESS=y
@@ -908,6 +926,7 @@ CONFIG_PACKET_DIAG=m
 CONFIG_UNIX=y
 CONFIG_UNIX_DIAG=m
 CONFIG_XFRM=y
+CONFIG_XFRM_OFFLOAD=y
 CONFIG_XFRM_ALGO=m
 CONFIG_XFRM_USER=m
 # CONFIG_XFRM_SUB_POLICY is not set
@@ -916,6 +935,8 @@ CONFIG_XFRM_STATISTICS=y
 CONFIG_XFRM_IPCOMP=m
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_SMC=m
+CONFIG_SMC_DIAG=m
 CONFIG_INET=y
 CONFIG_IP_MULTICAST=y
 CONFIG_IP_ADVANCED_ROUTER=y
@@ -944,6 +965,7 @@ CONFIG_NET_FOU=m
 CONFIG_NET_FOU_IP_TUNNELS=y
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
+CONFIG_INET_ESP_OFFLOAD=m
 CONFIG_INET_IPCOMP=m
 CONFIG_INET_XFRM_TUNNEL=m
 CONFIG_INET_TUNNEL=m
@@ -982,6 +1004,7 @@ CONFIG_IPV6_ROUTE_INFO=y
 # CONFIG_IPV6_OPTIMISTIC_DAD is not set
 CONFIG_INET6_AH=m
 CONFIG_INET6_ESP=m
+CONFIG_INET6_ESP_OFFLOAD=m
 CONFIG_INET6_IPCOMP=m
 CONFIG_IPV6_MIP6=m
 CONFIG_IPV6_ILA=m
@@ -1075,6 +1098,7 @@ CONFIG_NFT_NUMGEN=m
 CONFIG_NFT_CT=m
 CONFIG_NFT_SET_RBTREE=m
 CONFIG_NFT_SET_HASH=m
+CONFIG_NFT_SET_BITMAP=m
 CONFIG_NFT_COUNTER=m
 CONFIG_NFT_LOG=m
 CONFIG_NFT_LIMIT=m
@@ -1407,6 +1431,12 @@ CONFIG_BRIDGE=m
 CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_HAVE_NET_DSA=y
+CONFIG_NET_DSA=m
+CONFIG_NET_DSA_TAG_BRCM=y
+CONFIG_NET_DSA_TAG_DSA=y
+CONFIG_NET_DSA_TAG_EDSA=y
+CONFIG_NET_DSA_TAG_TRAILER=y
+CONFIG_NET_DSA_TAG_QCA=y
 CONFIG_VLAN_8021Q=m
 CONFIG_VLAN_8021Q_GVRP=y
 CONFIG_VLAN_8021Q_MVRP=y
@@ -1511,6 +1541,7 @@ CONFIG_NET_ACT_POLICE=m
 CONFIG_NET_ACT_GACT=m
 CONFIG_GACT_PROB=y
 CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_SAMPLE=m
 CONFIG_NET_ACT_IPT=m
 CONFIG_NET_ACT_NAT=m
 CONFIG_NET_ACT_PEDIT=m
@@ -1552,7 +1583,7 @@ CONFIG_NET_MPLS_GSO=m
 CONFIG_MPLS_ROUTING=m
 CONFIG_MPLS_IPTUNNEL=m
 CONFIG_HSR=m
-# CONFIG_NET_SWITCHDEV is not set
+CONFIG_NET_SWITCHDEV=y
 CONFIG_NET_L3_MASTER_DEV=y
 CONFIG_NET_NCSI=y
 CONFIG_RPS=y
@@ -1800,7 +1831,6 @@ CONFIG_WIMAX_DEBUG_LEVEL=8
 CONFIG_RFKILL=y
 CONFIG_RFKILL_LEDS=y
 CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_REGULATOR=m
 CONFIG_RFKILL_GPIO=m
 CONFIG_NET_9P=m
 CONFIG_NET_9P_VIRTIO=m
@@ -1855,9 +1885,12 @@ CONFIG_NFC_NXP_NCI_I2C=m
 CONFIG_NFC_S3FWRN5=m
 CONFIG_NFC_S3FWRN5_I2C=m
 CONFIG_NFC_ST95HF=m
+CONFIG_PSAMPLE=m
+CONFIG_NET_IFE=m
 CONFIG_LWTUNNEL=y
 CONFIG_LWTUNNEL_BPF=y
 CONFIG_DST_CACHE=y
+CONFIG_GRO_CELLS=y
 CONFIG_NET_DEVLINK=m
 CONFIG_MAY_USE_DEVLINK=m
 
@@ -2024,7 +2057,6 @@ CONFIG_MTD_NAND_CAFE=m
 CONFIG_MTD_NAND_CS553X=m
 CONFIG_MTD_NAND_NANDSIM=m
 CONFIG_MTD_NAND_PLATFORM=m
-CONFIG_MTD_NAND_OXNAS=m
 CONFIG_MTD_NAND_HISI504=m
 CONFIG_MTD_NAND_MTK=m
 CONFIG_MTD_ONENAND=m
@@ -2041,6 +2073,8 @@ CONFIG_MTD_QINFO_PROBE=m
 CONFIG_MTD_SPI_NOR=m
 CONFIG_MTD_MT81xx_NOR=m
 CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
+CONFIG_SPI_INTEL_SPI=m
+CONFIG_SPI_INTEL_SPI_PLATFORM=m
 CONFIG_MTD_UBI=m
 CONFIG_MTD_UBI_WL_THRESHOLD=4096
 CONFIG_MTD_UBI_BEB_LIMIT=20
@@ -2128,6 +2162,7 @@ CONFIG_ATA_OVER_ETH=m
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_BLKDEV_BACKEND=m
 CONFIG_VIRTIO_BLK=y
+# CONFIG_VIRTIO_BLK_SCSI is not set
 # CONFIG_BLK_DEV_HD is not set
 CONFIG_BLK_DEV_RBD=m
 CONFIG_BLK_DEV_RSXX=m
@@ -2191,6 +2226,7 @@ CONFIG_EEPROM_LEGACY=m
 CONFIG_EEPROM_MAX6875=m
 CONFIG_EEPROM_93CX6=m
 CONFIG_EEPROM_93XX46=m
+CONFIG_EEPROM_IDT_89HPESX=m
 CONFIG_CB710_CORE=m
 # CONFIG_CB710_DEBUG is not set
 CONFIG_CB710_DEBUG_ASSUMPTIONS=y
@@ -2384,6 +2420,7 @@ CONFIG_TCM_QLA2XXX=m
 # CONFIG_TCM_QLA2XXX_DEBUG is not set
 CONFIG_SCSI_QLA_ISCSI=m
 CONFIG_QEDI=m
+CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
 CONFIG_SCSI_SIM710=m
@@ -2607,6 +2644,7 @@ CONFIG_NET_TEAM_MODE_LOADBALANCE=m
 CONFIG_MACVLAN=m
 CONFIG_MACVTAP=m
 CONFIG_IPVLAN=m
+CONFIG_IPVTAP=m
 CONFIG_VXLAN=m
 CONFIG_GENEVE=m
 CONFIG_GTP=m
@@ -2620,6 +2658,7 @@ CONFIG_RIONET=m
 CONFIG_RIONET_TX_SIZE=128
 CONFIG_RIONET_RX_SIZE=128
 CONFIG_TUN=y
+CONFIG_TAP=m
 # CONFIG_TUN_VNET_CROSS_LE is not set
 CONFIG_VETH=m
 CONFIG_VIRTIO_NET=y
@@ -2681,6 +2720,16 @@ CONFIG_CAIF_VIRTIO=m
 #
 # Distributed Switch Architecture drivers
 #
+CONFIG_NET_DSA_MV88E6060=m
+CONFIG_NET_DSA_BCM_SF2=m
+CONFIG_B53=m
+CONFIG_B53_SPI_DRIVER=m
+CONFIG_B53_MDIO_DRIVER=m
+CONFIG_B53_MMAP_DRIVER=m
+CONFIG_B53_SRAB_DRIVER=m
+CONFIG_NET_DSA_MV88E6XXX=m
+CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
+CONFIG_NET_DSA_QCA8K=m
 CONFIG_ETHERNET=y
 CONFIG_MDIO=m
 CONFIG_NET_VENDOR_3COM=y
@@ -2711,6 +2760,7 @@ CONFIG_NI65=m
 CONFIG_AMD_XGBE=m
 # CONFIG_AMD_XGBE_DCB is not set
 CONFIG_AMD_XGBE_HAVE_ECC=y
+CONFIG_NET_VENDOR_AQUANTIA=y
 CONFIG_NET_VENDOR_ARC=y
 CONFIG_NET_VENDOR_ATHEROS=y
 CONFIG_ATL2=m
@@ -2826,6 +2876,10 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
+CONFIG_MLXSW_SWITCHIB=m
+CONFIG_MLXSW_SWITCHX2=m
+CONFIG_MLXSW_SPECTRUM=m
+CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
 CONFIG_NET_VENDOR_MICREL=y
 CONFIG_KS8842=m
@@ -2843,8 +2897,8 @@ CONFIG_NET_VENDOR_NATSEMI=y
 CONFIG_NATSEMI=m
 CONFIG_NS83820=m
 CONFIG_NET_VENDOR_NETRONOME=y
-CONFIG_NFP_NETVF=m
-# CONFIG_NFP_NET_DEBUG is not set
+CONFIG_NFP=m
+# CONFIG_NFP_DEBUG is not set
 CONFIG_NET_VENDOR_8390=y
 CONFIG_PCMCIA_AXNET=m
 CONFIG_NE2000=m
@@ -2873,6 +2927,7 @@ CONFIG_QED_LL2=y
 CONFIG_QED_SRIOV=y
 CONFIG_QEDE=m
 CONFIG_QED_ISCSI=y
+CONFIG_QED_FCOE=y
 CONFIG_NET_VENDOR_QUALCOMM=y
 CONFIG_QCOM_EMAC=m
 CONFIG_NET_VENDOR_REALTEK=y
@@ -2888,6 +2943,7 @@ CONFIG_NET_VENDOR_RENESAS=y
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_ROCKER=y
+CONFIG_ROCKER=m
 CONFIG_NET_VENDOR_SAMSUNG=y
 CONFIG_SXGBE_ETH=m
 CONFIG_NET_VENDOR_SEEQ=y
@@ -2921,7 +2977,6 @@ CONFIG_HAPPYMEAL=m
 CONFIG_SUNGEM=m
 CONFIG_CASSINI=m
 CONFIG_NIU=m
-CONFIG_NET_VENDOR_SYNOPSYS=y
 CONFIG_NET_VENDOR_TEHUTI=y
 CONFIG_TEHUTI=m
 CONFIG_NET_VENDOR_TI=y
@@ -3064,6 +3119,7 @@ CONFIG_ATH5K=m
 CONFIG_ATH5K_PCI=y
 CONFIG_ATH9K_HW=m
 CONFIG_ATH9K_COMMON=m
+CONFIG_ATH9K_COMMON_DEBUG=y
 CONFIG_ATH9K_BTCOEX_SUPPORT=y
 CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
@@ -3491,7 +3547,6 @@ CONFIG_MISDN_ISAR=m
 CONFIG_ISDN_HDLC=m
 CONFIG_NVM=y
 # CONFIG_NVM_DEBUG is not set
-CONFIG_NVM_GENNVM=m
 CONFIG_NVM_RRPC=m
 
 #
@@ -3542,6 +3597,7 @@ CONFIG_KEYBOARD_OPENCORES=m
 CONFIG_KEYBOARD_SAMSUNG=m
 CONFIG_KEYBOARD_STOWAWAY=m
 CONFIG_KEYBOARD_SUNKBD=m
+CONFIG_KEYBOARD_TM2_TOUCHKEY=m
 CONFIG_KEYBOARD_TWL4030=m
 CONFIG_KEYBOARD_XTKBD=m
 CONFIG_KEYBOARD_CROS_EC=m
@@ -3652,7 +3708,6 @@ CONFIG_TOUCHSCREEN_MMS114=m
 CONFIG_TOUCHSCREEN_MELFAS_MIP4=m
 CONFIG_TOUCHSCREEN_MTOUCH=m
 CONFIG_TOUCHSCREEN_INEXIO=m
-CONFIG_TOUCHSCREEN_INTEL_MID=m
 CONFIG_TOUCHSCREEN_MK712=m
 CONFIG_TOUCHSCREEN_HTCPEN=m
 CONFIG_TOUCHSCREEN_PENMOUNT=m
@@ -3703,6 +3758,7 @@ CONFIG_TOUCHSCREEN_SUR40=m
 CONFIG_TOUCHSCREEN_SURFACE3_SPI=m
 CONFIG_TOUCHSCREEN_SX8654=m
 CONFIG_TOUCHSCREEN_TPS6507X=m
+CONFIG_TOUCHSCREEN_ZET6223=m
 CONFIG_TOUCHSCREEN_ZFORCE=m
 CONFIG_TOUCHSCREEN_ROHM_BU21023=m
 CONFIG_INPUT_MISC=y
@@ -3720,7 +3776,6 @@ CONFIG_INPUT_MAX8925_ONKEY=m
 CONFIG_INPUT_MAX8997_HAPTIC=m
 CONFIG_INPUT_MC13783_PWRBUTTON=m
 CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_MPU3050=m
 CONFIG_INPUT_APANEL=m
 CONFIG_INPUT_GP2A=m
 CONFIG_INPUT_GPIO_BEEPER=m
@@ -3769,7 +3824,8 @@ CONFIG_RMI4_CORE=m
 CONFIG_RMI4_I2C=m
 CONFIG_RMI4_SPI=m
 CONFIG_RMI4_SMB=m
-# CONFIG_RMI4_F03 is not set
+CONFIG_RMI4_F03=y
+CONFIG_RMI4_F03_SERIO=m
 CONFIG_RMI4_2D_SENSOR=y
 CONFIG_RMI4_F11=y
 CONFIG_RMI4_F12=y
@@ -3843,6 +3899,7 @@ CONFIG_SERIAL_8250_PNP=y
 CONFIG_SERIAL_8250_CONSOLE=y
 CONFIG_SERIAL_8250_DMA=y
 CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_EXAR=m
 CONFIG_SERIAL_8250_CS=m
 CONFIG_SERIAL_8250_NR_UARTS=48
 CONFIG_SERIAL_8250_RUNTIME_UARTS=32
@@ -3893,6 +3950,8 @@ CONFIG_SERIAL_RP2=m
 CONFIG_SERIAL_RP2_NR_UARTS=32
 CONFIG_SERIAL_FSL_LPUART=m
 CONFIG_SERIAL_MEN_Z135=m
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
 CONFIG_TTY_PRINTK=y
 CONFIG_PRINTER=m
 # CONFIG_LP_CONSOLE is not set
@@ -4133,6 +4192,7 @@ CONFIG_PTP_1588_CLOCK=m
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
 #
 CONFIG_PTP_1588_CLOCK_PCH=m
+CONFIG_PTP_1588_CLOCK_KVM=m
 CONFIG_PINCTRL=y
 
 #
@@ -4149,6 +4209,7 @@ CONFIG_PINCTRL_CHERRYVIEW=m
 CONFIG_PINCTRL_MERRIFIELD=m
 CONFIG_PINCTRL_INTEL=m
 CONFIG_PINCTRL_BROXTON=m
+CONFIG_PINCTRL_GEMINILAKE=m
 CONFIG_PINCTRL_SUNRISEPOINT=m
 CONFIG_GPIOLIB=y
 CONFIG_GPIO_ACPI=y
@@ -4164,6 +4225,7 @@ CONFIG_GPIO_MAX730X=m
 CONFIG_GPIO_AMDPT=m
 CONFIG_GPIO_AXP209=m
 CONFIG_GPIO_DWAPB=m
+CONFIG_GPIO_EXAR=m
 CONFIG_GPIO_GENERIC_PLATFORM=m
 CONFIG_GPIO_ICH=m
 CONFIG_GPIO_LYNXPOINT=y
@@ -4234,6 +4296,7 @@ CONFIG_GPIO_INTEL_MID=y
 CONFIG_GPIO_MERRIFIELD=m
 CONFIG_GPIO_ML_IOH=m
 CONFIG_GPIO_PCH=m
+CONFIG_GPIO_PCI_IDIO_16=m
 CONFIG_GPIO_RDC321X=m
 
 #
@@ -4268,6 +4331,7 @@ CONFIG_W1_MASTER_GPIO=m
 #
 CONFIG_W1_SLAVE_THERM=m
 CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2405=m
 CONFIG_W1_SLAVE_DS2408=m
 CONFIG_W1_SLAVE_DS2408_READBACK=y
 CONFIG_W1_SLAVE_DS2413=m
@@ -4299,6 +4363,7 @@ CONFIG_BATTERY_DS2780=m
 CONFIG_BATTERY_DS2781=m
 CONFIG_BATTERY_DS2782=m
 CONFIG_BATTERY_SBS=m
+CONFIG_CHARGER_SBS=m
 CONFIG_BATTERY_BQ27XXX=m
 CONFIG_BATTERY_BQ27XXX_I2C=m
 CONFIG_BATTERY_DA9030=m
@@ -4312,7 +4377,6 @@ CONFIG_BATTERY_MAX17042=m
 CONFIG_BATTERY_TWL4030_MADC=m
 CONFIG_CHARGER_88PM860X=m
 CONFIG_CHARGER_PCF50633=m
-CONFIG_BATTERY_INTEL_MID=m
 CONFIG_BATTERY_RX51=m
 CONFIG_CHARGER_ISP1704=m
 CONFIG_CHARGER_MAX8903=m
@@ -4473,6 +4537,7 @@ CONFIG_SENSORS_SMSC47B397=m
 CONFIG_SENSORS_SCH56XX_COMMON=m
 CONFIG_SENSORS_SCH5627=m
 CONFIG_SENSORS_SCH5636=m
+CONFIG_SENSORS_STTS751=m
 CONFIG_SENSORS_SMM665=m
 CONFIG_SENSORS_ADC128D818=m
 CONFIG_SENSORS_ADS1015=m
@@ -4605,6 +4670,7 @@ CONFIG_MACHZ_WDT=m
 CONFIG_SBC_EPX_C3_WATCHDOG=m
 CONFIG_INTEL_MEI_WDT=m
 CONFIG_NI903X_WDT=m
+CONFIG_NIC7018_WDT=m
 CONFIG_MEN_A21_WDT=m
 CONFIG_XEN_WDT=m
 
@@ -4931,6 +4997,7 @@ CONFIG_IR_ITE_CIR=m
 CONFIG_IR_FINTEK=m
 CONFIG_IR_NUVOTON=m
 CONFIG_IR_REDRAT3=m
+CONFIG_IR_SPI=m
 CONFIG_IR_STREAMZAP=m
 CONFIG_IR_WINBOND_CIR=m
 CONFIG_IR_IGORPLUGUSB=m
@@ -5016,7 +5083,6 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_USBVISION=m
 CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_STK1160_AC97=y
 CONFIG_VIDEO_STK1160=m
 CONFIG_VIDEO_GO7007=m
 CONFIG_VIDEO_GO7007_USB=m
@@ -5081,6 +5147,7 @@ CONFIG_DVB_USB_LME2510=m
 CONFIG_DVB_USB_MXL111SF=m
 CONFIG_DVB_USB_RTL28XXU=m
 CONFIG_DVB_USB_DVBSKY=m
+CONFIG_DVB_USB_ZD1301=m
 CONFIG_DVB_TTUSB_BUDGET=m
 CONFIG_DVB_TTUSB_DEC=m
 CONFIG_SMS_USB_DRV=m
@@ -5131,6 +5198,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
+# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 CONFIG_VIDEO_HEXIUM_GEMINI=m
@@ -5496,6 +5564,7 @@ CONFIG_DVB_RTL2832=m
 CONFIG_DVB_RTL2832_SDR=m
 CONFIG_DVB_SI2168=m
 CONFIG_DVB_AS102_FE=m
+CONFIG_DVB_ZD1301_DEMOD=m
 CONFIG_DVB_GP8PSK_FE=m
 
 #
@@ -5590,11 +5659,13 @@ CONFIG_VGA_SWITCHEROO=y
 CONFIG_DRM=m
 CONFIG_DRM_MIPI_DSI=y
 # CONFIG_DRM_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DEBUG_MM_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
 CONFIG_DRM_KMS_FB_HELPER=y
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
 CONFIG_DRM_TTM=m
+CONFIG_DRM_VM=y
 
 #
 # I2C encoder or helper chips
@@ -5629,6 +5700,7 @@ CONFIG_DRM_I915_USERPTR=y
 #
 # CONFIG_DRM_I915_WERROR is not set
 # CONFIG_DRM_I915_DEBUG is not set
+# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set
 CONFIG_DRM_VGEM=m
 CONFIG_DRM_VMWGFX=m
 CONFIG_DRM_VMWGFX_FBCON=y
@@ -5655,7 +5727,9 @@ CONFIG_DRM_BRIDGE=y
 #
 CONFIG_DRM_ANALOGIX_ANX78XX=m
 CONFIG_DRM_HISI_HIBMC=m
+# CONFIG_DRM_TINYDRM is not set
 # CONFIG_DRM_LEGACY is not set
+# CONFIG_DRM_LIB_RANDOM is not set
 
 #
 # Frame buffer Devices
@@ -5673,6 +5747,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
 CONFIG_FB_SYS_FILLRECT=m
 CONFIG_FB_SYS_COPYAREA=m
 CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set
 # CONFIG_FB_FOREIGN_ENDIAN is not set
 CONFIG_FB_SYS_FOPS=m
 CONFIG_FB_DEFERRED_IO=y
@@ -6091,7 +6166,7 @@ CONFIG_SND_SOC_FSL_ESAI=m
 CONFIG_SND_SOC_IMX_AUDMUX=m
 # CONFIG_SND_SOC_IMG is not set
 CONFIG_SND_MFLD_MACHINE=m
-CONFIG_SND_SST_MFLD_PLATFORM=m
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
 CONFIG_SND_SST_IPC=m
 CONFIG_SND_SST_IPC_PCI=m
 CONFIG_SND_SST_IPC_ACPI=m
@@ -6103,6 +6178,7 @@ CONFIG_SND_SOC_INTEL_HASWELL=m
 CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m
+CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
 CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
 CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
@@ -6151,6 +6227,8 @@ CONFIG_SND_SOC_DA7219=m
 CONFIG_SND_SOC_DMIC=m
 CONFIG_SND_SOC_HDMI_CODEC=m
 CONFIG_SND_SOC_ES8328=m
+CONFIG_SND_SOC_ES8328_I2C=m
+CONFIG_SND_SOC_ES8328_SPI=m
 CONFIG_SND_SOC_GTM601=m
 CONFIG_SND_SOC_HDAC_HDMI=m
 CONFIG_SND_SOC_INNO_RK3036=m
@@ -6180,7 +6258,8 @@ CONFIG_SND_SOC_RT5640=m
 CONFIG_SND_SOC_RT5645=m
 CONFIG_SND_SOC_RT5651=m
 CONFIG_SND_SOC_RT5670=m
-# CONFIG_SND_SOC_RT5677_SPI is not set
+CONFIG_SND_SOC_RT5677=m
+CONFIG_SND_SOC_RT5677_SPI=m
 CONFIG_SND_SOC_SGTL5000=m
 CONFIG_SND_SOC_SI476X=m
 CONFIG_SND_SOC_SIGMADSP=m
@@ -6227,11 +6306,14 @@ CONFIG_SND_SOC_WM8962=m
 CONFIG_SND_SOC_WM8974=m
 CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
+CONFIG_SND_SOC_NAU8540=m
 CONFIG_SND_SOC_NAU8810=m
 CONFIG_SND_SOC_NAU8825=m
 CONFIG_SND_SOC_TPA6130A2=m
 CONFIG_SND_SIMPLE_CARD_UTILS=m
 CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SND_X86=y
+CONFIG_HDMI_LPE_AUDIO=m
 # CONFIG_SOUND_PRIME is not set
 CONFIG_AC97_BUS=m
 
@@ -6492,6 +6574,7 @@ CONFIG_USB_CHIPIDEA=m
 CONFIG_USB_CHIPIDEA_PCI=m
 CONFIG_USB_CHIPIDEA_UDC=y
 CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_CHIPIDEA_ULPI=y
 CONFIG_USB_ISP1760=m
 CONFIG_USB_ISP1760_HCD=y
 CONFIG_USB_ISP1761_UDC=y
@@ -6569,6 +6652,7 @@ CONFIG_USB_SERIAL_XSENS_MT=m
 CONFIG_USB_SERIAL_WISHBONE=m
 CONFIG_USB_SERIAL_SSU100=m
 CONFIG_USB_SERIAL_QT2=m
+CONFIG_USB_SERIAL_UPD78F0730=m
 CONFIG_USB_SERIAL_DEBUG=m
 
 #
@@ -6596,6 +6680,7 @@ CONFIG_USB_EHSET_TEST_FIXTURE=m
 CONFIG_USB_ISIGHTFW=m
 CONFIG_USB_YUREX=m
 CONFIG_USB_EZUSB_FX2=m
+CONFIG_USB_HUB_USB251XB=m
 CONFIG_USB_HSIC_USB3503=m
 CONFIG_USB_HSIC_USB4604=m
 CONFIG_USB_LINK_LAYER_TEST=m
@@ -6770,6 +6855,7 @@ CONFIG_MEMSTICK_REALTEK_USB=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_CLASS_FLASH=m
+# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
 
 #
 # LED drivers
@@ -6871,6 +6957,7 @@ CONFIG_INFINIBAND_SRPT=m
 CONFIG_INFINIBAND_ISER=m
 CONFIG_INFINIBAND_ISERT=m
 CONFIG_RDMA_RXE=m
+CONFIG_INFINIBAND_BNXT_RE=m
 CONFIG_EDAC_ATOMIC_SCRUB=y
 CONFIG_EDAC_SUPPORT=y
 CONFIG_EDAC=y
@@ -7399,9 +7486,6 @@ CONFIG_STAGING_MEDIA=y
 CONFIG_I2C_BCM2048=m
 CONFIG_DVB_CXD2099=m
 CONFIG_LIRC_STAGING=y
-CONFIG_LIRC_BT829=m
-CONFIG_LIRC_IMON=m
-CONFIG_LIRC_PARALLEL=m
 CONFIG_LIRC_SASEM=m
 CONFIG_LIRC_SIR=m
 CONFIG_LIRC_ZILOG=m
@@ -7468,13 +7552,6 @@ CONFIG_AIM_V4L2=m
 CONFIG_HDM_DIM2=m
 CONFIG_HDM_I2C=m
 CONFIG_HDM_USB=m
-
-#
-# Old ISDN4Linux (deprecated)
-#
-CONFIG_ISDN_DRV_ICN=m
-CONFIG_ISDN_DRV_PCBIT=m
-CONFIG_ISDN_DRV_ACT2000=m
 CONFIG_KS7010=m
 # CONFIG_GREYBUS is not set
 CONFIG_X86_PLATFORM_DEVICES=y
@@ -7529,7 +7606,6 @@ CONFIG_INTEL_HID_EVENT=m
 CONFIG_INTEL_VBTN=m
 CONFIG_INTEL_SCU_IPC=y
 CONFIG_INTEL_SCU_IPC_UTIL=m
-CONFIG_GPIO_INTEL_PMIC=y
 CONFIG_INTEL_MID_POWER_BUTTON=m
 CONFIG_INTEL_MFLD_THERMAL=m
 CONFIG_INTEL_IPS=m
@@ -7549,6 +7625,8 @@ CONFIG_SURFACE_PRO3_BUTTON=m
 CONFIG_SURFACE_3_BUTTON=m
 CONFIG_INTEL_PUNIT_IPC=m
 CONFIG_MLX_CPLD_PLATFORM=m
+# CONFIG_SILEAD_DMI is not set
+CONFIG_PMC_ATOM=y
 CONFIG_CHROME_PLATFORMS=y
 CONFIG_CHROMEOS_LAPTOP=m
 CONFIG_CHROMEOS_PSTORE=m
@@ -7574,13 +7652,6 @@ CONFIG_COMMON_CLK_PALMAS=m
 CONFIG_COMMON_CLK_PWM=m
 # CONFIG_COMMON_CLK_PXA is not set
 # CONFIG_COMMON_CLK_PIC32 is not set
-# CONFIG_COMMON_CLK_MT2701 is not set
-# CONFIG_COMMON_CLK_MT2701_MMSYS is not set
-# CONFIG_COMMON_CLK_MT2701_IMGSYS is not set
-# CONFIG_COMMON_CLK_MT2701_VDECSYS is not set
-# CONFIG_COMMON_CLK_MT2701_HIFSYS is not set
-# CONFIG_COMMON_CLK_MT2701_ETHSYS is not set
-# CONFIG_COMMON_CLK_MT2701_BDPSYS is not set
 
 #
 # Hardware Spinlock drivers
@@ -7633,6 +7704,7 @@ CONFIG_REMOTEPROC=m
 #
 # CONFIG_SUNXI_SRAM is not set
 CONFIG_SOC_TI=y
+# CONFIG_SOC_ZTE is not set
 CONFIG_PM_DEVFREQ=y
 
 #
@@ -7657,6 +7729,7 @@ CONFIG_EXTCON_ADC_JACK=m
 CONFIG_EXTCON_ARIZONA=m
 CONFIG_EXTCON_AXP288=m
 CONFIG_EXTCON_GPIO=m
+CONFIG_EXTCON_INTEL_INT3496=m
 CONFIG_EXTCON_MAX14577=m
 CONFIG_EXTCON_MAX3355=m
 CONFIG_EXTCON_MAX77693=m
@@ -7733,10 +7806,12 @@ CONFIG_AXP288_ADC=m
 CONFIG_CC10001_ADC=m
 CONFIG_DA9150_GPADC=m
 CONFIG_HI8435=m
+CONFIG_HX711=m
 CONFIG_INA2XX_ADC=m
 CONFIG_LP8788_ADC=m
 CONFIG_LTC2485=m
 CONFIG_MAX1027=m
+CONFIG_MAX11100=m
 CONFIG_MAX1363=m
 CONFIG_MCP320X=m
 CONFIG_MCP3422=m
@@ -7752,7 +7827,9 @@ CONFIG_TI_ADC12138=m
 CONFIG_TI_ADC128S052=m
 CONFIG_TI_ADC161S626=m
 CONFIG_TI_ADS1015=m
+CONFIG_TI_ADS7950=m
 CONFIG_TI_AM335X_ADC=m
+CONFIG_TI_TLC4541=m
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 CONFIG_VIPERBOARD_ADC=m
@@ -7852,6 +7929,8 @@ CONFIG_BMG160=m
 CONFIG_BMG160_I2C=m
 CONFIG_BMG160_SPI=m
 CONFIG_HID_SENSOR_GYRO_3D=m
+CONFIG_MPU3050=m
+CONFIG_MPU3050_I2C=m
 CONFIG_IIO_ST_GYRO_3AXIS=m
 CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
 CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
@@ -7893,6 +7972,9 @@ CONFIG_KMX61=m
 CONFIG_INV_MPU6050_IIO=m
 CONFIG_INV_MPU6050_I2C=m
 CONFIG_INV_MPU6050_SPI=m
+CONFIG_IIO_ST_LSM6DSX=m
+CONFIG_IIO_ST_LSM6DSX_I2C=m
+CONFIG_IIO_ST_LSM6DSX_SPI=m
 CONFIG_IIO_ADIS_LIB=m
 CONFIG_IIO_ADIS_LIB_BUFFER=y
 
@@ -7969,6 +8051,7 @@ CONFIG_IIO_SYSFS_TRIGGER=m
 # Digital potentiometers
 #
 CONFIG_DS1803=m
+CONFIG_MAX5481=m
 CONFIG_MAX5487=m
 CONFIG_MCP4131=m
 CONFIG_MCP4531=m
@@ -7986,6 +8069,7 @@ CONFIG_ABP060MG=m
 CONFIG_BMP280=m
 CONFIG_BMP280_I2C=m
 CONFIG_BMP280_SPI=m
+CONFIG_IIO_CROS_EC_BARO=m
 CONFIG_HID_SENSOR_PRESS=m
 CONFIG_HP03=m
 CONFIG_MPL115=m
@@ -8011,10 +8095,11 @@ CONFIG_ZPA2326_SPI=m
 CONFIG_AS3935=m
 
 #
-# Proximity sensors
+# Proximity and distance sensors
 #
 CONFIG_LIDAR_LITE_V2=m
 CONFIG_SX9500=m
+CONFIG_SRF08=m
 
 #
 # Temperature sensors
@@ -8022,6 +8107,7 @@ CONFIG_SX9500=m
 CONFIG_MAXIM_THERMOCOUPLE=m
 CONFIG_MLX90614=m
 CONFIG_TMP006=m
+CONFIG_TMP007=m
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_NTB=m
@@ -8092,6 +8178,8 @@ CONFIG_PHY_SAMSUNG_USB2=m
 # CONFIG_PHY_EXYNOS4210_USB2 is not set
 # CONFIG_PHY_EXYNOS4X12_USB2 is not set
 # CONFIG_PHY_EXYNOS5250_USB2 is not set
+CONFIG_PHY_QCOM_USB_HS=m
+CONFIG_PHY_QCOM_USB_HSIC=m
 CONFIG_PHY_TUSB1210=m
 CONFIG_POWERCAP=y
 CONFIG_INTEL_RAPL=m
@@ -8137,10 +8225,14 @@ CONFIG_INTEL_TH_PTI=m
 #
 CONFIG_FPGA=m
 
+#
+# FSI support
+#
+# CONFIG_FSI is not set
+
 #
 # Firmware Drivers
 #
-# CONFIG_ARM_SCPI_PROTOCOL is not set
 CONFIG_EDD=y
 CONFIG_EDD_OFF=y
 CONFIG_FIRMWARE_MEMMAP=y
@@ -8554,6 +8646,7 @@ CONFIG_FRAME_POINTER=y
 # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
+CONFIG_MAGIC_SYSRQ_SERIAL=y
 CONFIG_DEBUG_KERNEL=y
 
 #
@@ -8563,6 +8656,7 @@ CONFIG_PAGE_EXTENSION=y
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_PAGE_POISONING is not set
 # CONFIG_DEBUG_PAGE_REF is not set
+# CONFIG_DEBUG_RODATA_TEST is not set
 # CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_SLUB_DEBUG_ON is not set
 # CONFIG_SLUB_STATS is not set
@@ -8570,6 +8664,7 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y
 # CONFIG_DEBUG_KMEMLEAK is not set
 # CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_VM is not set
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
 # CONFIG_DEBUG_VIRTUAL is not set
 # CONFIG_DEBUG_MEMORY_INIT is not set
 CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
@@ -8602,7 +8697,6 @@ CONFIG_SCHED_INFO=y
 CONFIG_SCHEDSTATS=y
 CONFIG_SCHED_STACK_END_CHECK=y
 # CONFIG_DEBUG_TIMEKEEPING is not set
-CONFIG_TIMER_STATS=y
 
 #
 # Lock Debugging (spinlocks, mutexes, etc...)
@@ -8617,6 +8711,7 @@ CONFIG_TIMER_STATS=y
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 CONFIG_LOCK_TORTURE_TEST=m
+CONFIG_WW_MUTEX_SELFTEST=m
 CONFIG_STACKTRACE=y
 # CONFIG_DEBUG_KOBJECT is not set
 CONFIG_DEBUG_BUGVERBOSE=y
@@ -8677,8 +8772,8 @@ CONFIG_BRANCH_PROFILE_NONE=y
 # CONFIG_PROFILE_ALL_BRANCHES is not set
 CONFIG_STACK_TRACER=y
 CONFIG_BLK_DEV_IO_TRACE=y
-CONFIG_KPROBE_EVENT=y
-CONFIG_UPROBE_EVENT=y
+CONFIG_KPROBE_EVENTS=y
+# CONFIG_UPROBE_EVENTS is not set
 CONFIG_BPF_EVENTS=y
 CONFIG_PROBE_EVENTS=y
 CONFIG_DYNAMIC_FTRACE=y
@@ -8700,6 +8795,7 @@ CONFIG_TRACING_EVENTS_GPIO=y
 #
 # CONFIG_LKDTM is not set
 # CONFIG_TEST_LIST_SORT is not set
+# CONFIG_TEST_SORT is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
 CONFIG_RBTREE_TEST=m
@@ -8715,6 +8811,7 @@ CONFIG_TEST_BITMAP=m
 CONFIG_TEST_UUID=m
 # CONFIG_TEST_RHASHTABLE is not set
 CONFIG_TEST_HASH=m
+CONFIG_TEST_PARMAN=m
 # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
 # CONFIG_DMA_API_DEBUG is not set
 CONFIG_TEST_LKM=m
@@ -8748,10 +8845,7 @@ CONFIG_EARLY_PRINTK_EFI=y
 # CONFIG_X86_PTDUMP_CORE is not set
 # CONFIG_X86_PTDUMP is not set
 # CONFIG_EFI_PGT_DUMP is not set
-# CONFIG_DEBUG_RODATA_TEST is not set
 # CONFIG_DEBUG_WX is not set
-CONFIG_DEBUG_SET_MODULE_RONX=y
-# CONFIG_DEBUG_NX_TEST is not set
 CONFIG_DOUBLEFAULT=y
 # CONFIG_DEBUG_TLBFLUSH is not set
 # CONFIG_IOMMU_STRESS is not set
@@ -8795,6 +8889,7 @@ CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
 CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y
 CONFIG_HARDENED_USERCOPY=y
 # CONFIG_HARDENED_USERCOPY_PAGESPAN is not set
+# CONFIG_STATIC_USERMODEHELPER is not set
 CONFIG_SECURITY_SELINUX=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
@@ -8816,6 +8911,7 @@ CONFIG_SECURITY_APPARMOR=y
 CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
 CONFIG_SECURITY_APPARMOR_HASH=y
 CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y
+# CONFIG_SECURITY_APPARMOR_DEBUG is not set
 # CONFIG_SECURITY_LOADPIN is not set
 CONFIG_SECURITY_YAMA=y
 CONFIG_INTEGRITY=y
@@ -8897,6 +8993,7 @@ CONFIG_CRYPTO_TEST=m
 CONFIG_CRYPTO_ABLK_HELPER=m
 CONFIG_CRYPTO_SIMD=m
 CONFIG_CRYPTO_GLUE_HELPER_X86=m
+CONFIG_CRYPTO_ENGINE=m
 
 #
 # Authenticated Encryption with Associated Data
@@ -8955,6 +9052,7 @@ CONFIG_CRYPTO_WP512=m
 # Ciphers
 #
 CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_AES_TI=m
 CONFIG_CRYPTO_AES_586=m
 CONFIG_CRYPTO_AES_NI_INTEL=m
 CONFIG_CRYPTO_ANUBIS=m
@@ -9133,6 +9231,8 @@ CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT_MAP=y
 CONFIG_HAS_DMA=y
+# CONFIG_DMA_NOOP_OPS is not set
+CONFIG_DMA_VIRT_OPS=y
 CONFIG_CHECK_SIGNATURE=y
 CONFIG_CPU_RMAP=y
 CONFIG_DQL=y
@@ -9157,3 +9257,4 @@ CONFIG_SG_POOL=y
 CONFIG_ARCH_HAS_SG_CHAIN=y
 CONFIG_ARCH_HAS_MMIO_FLUSH=y
 CONFIG_SBITMAP=y
+CONFIG_PARMAN=m
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 4.10.0-gnu Kernel Configuration
+# Linux/x86 4.11.0-gnu Kernel Configuration
 #
 CONFIG_64BIT=y
 CONFIG_X86_64=y
@@ -41,7 +41,6 @@ CONFIG_HAVE_INTEL_TXT=y
 CONFIG_X86_64_SMP=y
 CONFIG_ARCH_SUPPORTS_UPROBES=y
 CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_DEBUG_RODATA=y
 CONFIG_PGTABLE_LEVELS=4
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 CONFIG_IRQ_WORK=y
@@ -139,12 +138,11 @@ CONFIG_SRCU=y
 # CONFIG_TASKS_RCU is not set
 CONFIG_RCU_STALL_COMMON=y
 # CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_EXPEDITE_BOOT is not set
 CONFIG_BUILD_BIN2C=y
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=18
 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
-CONFIG_NMI_LOG_BUF_SHIFT=13
+CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
 CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
@@ -164,6 +162,7 @@ CONFIG_FAIR_GROUP_SCHED=y
 CONFIG_CFS_BANDWIDTH=y
 # CONFIG_RT_GROUP_SCHED is not set
 CONFIG_CGROUP_PIDS=y
+# CONFIG_CGROUP_RDMA is not set
 CONFIG_CGROUP_FREEZER=y
 CONFIG_CGROUP_HUGETLB=y
 CONFIG_CPUSETS=y
@@ -232,6 +231,7 @@ CONFIG_PCI_QUIRKS=y
 CONFIG_MEMBARRIER=y
 # CONFIG_EMBEDDED is not set
 CONFIG_HAVE_PERF_EVENTS=y
+# CONFIG_PC104 is not set
 
 #
 # Kernel Performance Events And Counters
@@ -240,6 +240,7 @@ CONFIG_PERF_EVENTS=y
 # CONFIG_DEBUG_PERF_USE_VMALLOC is not set
 CONFIG_VM_EVENT_COUNTERS=y
 CONFIG_SLUB_DEBUG=y
+# CONFIG_SLUB_MEMCG_SYSFS_ON is not set
 # CONFIG_COMPAT_BRK is not set
 # CONFIG_SLAB is not set
 CONFIG_SLUB=y
@@ -259,7 +260,7 @@ CONFIG_JUMP_LABEL=y
 # CONFIG_STATIC_KEYS_SELFTEST is not set
 CONFIG_OPTPROBES=y
 CONFIG_KPROBES_ON_FTRACE=y
-CONFIG_UPROBES=y
+# CONFIG_UPROBES is not set
 # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
 CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
 CONFIG_ARCH_USE_BUILTIN_BSWAP=y
@@ -274,6 +275,7 @@ CONFIG_HAVE_NMI=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
 CONFIG_HAVE_DMA_CONTIGUOUS=y
 CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_ARCH_HAS_SET_MEMORY=y
 CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
 CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
 CONFIG_HAVE_CLK=y
@@ -297,6 +299,7 @@ CONFIG_HAVE_GCC_PLUGINS=y
 CONFIG_GCC_PLUGINS=y
 # CONFIG_GCC_PLUGIN_CYC_COMPLEXITY is not set
 # CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set
+# CONFIG_GCC_PLUGIN_STRUCTLEAK is not set
 CONFIG_HAVE_CC_STACKPROTECTOR=y
 CONFIG_CC_STACKPROTECTOR=y
 # CONFIG_CC_STACKPROTECTOR_NONE is not set
@@ -307,6 +310,7 @@ CONFIG_HAVE_CONTEXT_TRACKING=y
 CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
 CONFIG_HAVE_ARCH_HUGE_VMAP=y
 CONFIG_HAVE_ARCH_SOFT_DIRTY=y
 CONFIG_MODULES_USE_ELF_RELA=y
@@ -326,6 +330,12 @@ CONFIG_COMPAT_OLD_SIGACTION=y
 # CONFIG_CPU_NO_EFFICIENT_FFS is not set
 CONFIG_HAVE_ARCH_VMAP_STACK=y
 CONFIG_VMAP_STACK=y
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX is not set
+# CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT is not set
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
+CONFIG_STRICT_KERNEL_RWX=y
+CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
+CONFIG_STRICT_MODULE_RWX=y
 
 #
 # GCOV-based kernel profiling
@@ -346,6 +356,7 @@ CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_COMPRESS is not set
 CONFIG_MODULES_TREE_LOOKUP=y
 CONFIG_BLOCK=y
+CONFIG_BLK_SCSI_REQUEST=y
 CONFIG_BLK_DEV_BSG=y
 CONFIG_BLK_DEV_BSGLIB=y
 CONFIG_BLK_DEV_INTEGRITY=y
@@ -355,6 +366,8 @@ CONFIG_BLK_CMDLINE_PARSER=y
 CONFIG_BLK_WBT=y
 # CONFIG_BLK_WBT_SQ is not set
 CONFIG_BLK_WBT_MQ=y
+CONFIG_BLK_DEBUG_FS=y
+# CONFIG_BLK_SED_OPAL is not set
 
 #
 # Partition Types
@@ -382,6 +395,7 @@ CONFIG_SYSV68_PARTITION=y
 CONFIG_CMDLINE_PARTITION=y
 CONFIG_BLOCK_COMPAT=y
 CONFIG_BLK_MQ_PCI=y
+CONFIG_BLK_MQ_VIRTIO=y
 
 #
 # IO Schedulers
@@ -394,6 +408,7 @@ CONFIG_DEFAULT_DEADLINE=y
 # CONFIG_DEFAULT_CFQ is not set
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="deadline"
+CONFIG_MQ_IOSCHED_DEADLINE=m
 CONFIG_PREEMPT_NOTIFIERS=y
 CONFIG_PADATA=y
 CONFIG_ASN1=y
@@ -729,7 +744,6 @@ CONFIG_CPU_FREQ=y
 CONFIG_CPU_FREQ_GOV_ATTR_SET=y
 CONFIG_CPU_FREQ_GOV_COMMON=y
 CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
 # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
 # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
@@ -787,6 +801,7 @@ CONFIG_PCIEASPM=y
 CONFIG_PCIEASPM_DEBUG=y
 CONFIG_PCIEASPM_DEFAULT=y
 # CONFIG_PCIEASPM_POWERSAVE is not set
+# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
 # CONFIG_PCIEASPM_PERFORMANCE is not set
 CONFIG_PCIE_PME=y
 CONFIG_PCIE_DPC=y
@@ -814,9 +829,13 @@ CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
 CONFIG_HOTPLUG_PCI_SHPC=m
 
 #
-# PCI host controller drivers
+# DesignWare PCI Core Support
 #
 # CONFIG_PCIE_DW_PLAT is not set
+
+#
+# PCI host controller drivers
+#
 # CONFIG_VMD is not set
 # CONFIG_ISA_BUS is not set
 CONFIG_ISA_DMA_API=y
@@ -878,7 +897,6 @@ CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
 CONFIG_SYSVIPC_COMPAT=y
 CONFIG_KEYS_COMPAT=y
 CONFIG_X86_DEV_DMA_OPS=y
-CONFIG_PMC_ATOM=y
 CONFIG_NET=y
 CONFIG_COMPAT_NETLINK_MESSAGES=y
 CONFIG_NET_INGRESS=y
@@ -892,6 +910,7 @@ CONFIG_PACKET_DIAG=m
 CONFIG_UNIX=y
 CONFIG_UNIX_DIAG=m
 CONFIG_XFRM=y
+CONFIG_XFRM_OFFLOAD=y
 CONFIG_XFRM_ALGO=m
 CONFIG_XFRM_USER=m
 # CONFIG_XFRM_SUB_POLICY is not set
@@ -900,6 +919,8 @@ CONFIG_XFRM_STATISTICS=y
 CONFIG_XFRM_IPCOMP=m
 CONFIG_NET_KEY=m
 # CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_SMC=m
+CONFIG_SMC_DIAG=m
 CONFIG_INET=y
 CONFIG_IP_MULTICAST=y
 CONFIG_IP_ADVANCED_ROUTER=y
@@ -928,6 +949,7 @@ CONFIG_NET_FOU=m
 CONFIG_NET_FOU_IP_TUNNELS=y
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
+CONFIG_INET_ESP_OFFLOAD=m
 CONFIG_INET_IPCOMP=m
 CONFIG_INET_XFRM_TUNNEL=m
 CONFIG_INET_TUNNEL=m
@@ -966,6 +988,7 @@ CONFIG_IPV6_ROUTE_INFO=y
 # CONFIG_IPV6_OPTIMISTIC_DAD is not set
 CONFIG_INET6_AH=m
 CONFIG_INET6_ESP=m
+CONFIG_INET6_ESP_OFFLOAD=m
 CONFIG_INET6_IPCOMP=m
 CONFIG_IPV6_MIP6=m
 CONFIG_IPV6_ILA=m
@@ -1059,6 +1082,7 @@ CONFIG_NFT_NUMGEN=m
 CONFIG_NFT_CT=m
 CONFIG_NFT_SET_RBTREE=m
 CONFIG_NFT_SET_HASH=m
+CONFIG_NFT_SET_BITMAP=m
 CONFIG_NFT_COUNTER=m
 CONFIG_NFT_LOG=m
 CONFIG_NFT_LIMIT=m
@@ -1391,6 +1415,12 @@ CONFIG_BRIDGE=m
 CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_HAVE_NET_DSA=y
+CONFIG_NET_DSA=m
+CONFIG_NET_DSA_TAG_BRCM=y
+CONFIG_NET_DSA_TAG_DSA=y
+CONFIG_NET_DSA_TAG_EDSA=y
+CONFIG_NET_DSA_TAG_TRAILER=y
+CONFIG_NET_DSA_TAG_QCA=y
 CONFIG_VLAN_8021Q=m
 CONFIG_VLAN_8021Q_GVRP=y
 CONFIG_VLAN_8021Q_MVRP=y
@@ -1491,6 +1521,7 @@ CONFIG_NET_ACT_POLICE=m
 CONFIG_NET_ACT_GACT=m
 CONFIG_GACT_PROB=y
 CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_SAMPLE=m
 CONFIG_NET_ACT_IPT=m
 CONFIG_NET_ACT_NAT=m
 CONFIG_NET_ACT_PEDIT=m
@@ -1532,7 +1563,7 @@ CONFIG_NET_MPLS_GSO=m
 CONFIG_MPLS_ROUTING=m
 CONFIG_MPLS_IPTUNNEL=m
 CONFIG_HSR=m
-# CONFIG_NET_SWITCHDEV is not set
+CONFIG_NET_SWITCHDEV=y
 CONFIG_NET_L3_MASTER_DEV=y
 CONFIG_NET_NCSI=y
 CONFIG_RPS=y
@@ -1774,7 +1805,6 @@ CONFIG_WIMAX_DEBUG_LEVEL=8
 CONFIG_RFKILL=y
 CONFIG_RFKILL_LEDS=y
 CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_REGULATOR=m
 CONFIG_RFKILL_GPIO=m
 CONFIG_NET_9P=m
 CONFIG_NET_9P_VIRTIO=m
@@ -1829,9 +1859,12 @@ CONFIG_NFC_NXP_NCI_I2C=m
 CONFIG_NFC_S3FWRN5=m
 CONFIG_NFC_S3FWRN5_I2C=m
 CONFIG_NFC_ST95HF=m
+CONFIG_PSAMPLE=m
+CONFIG_NET_IFE=m
 CONFIG_LWTUNNEL=y
 CONFIG_LWTUNNEL_BPF=y
 CONFIG_DST_CACHE=y
+CONFIG_GRO_CELLS=y
 CONFIG_NET_DEVLINK=m
 CONFIG_MAY_USE_DEVLINK=m
 CONFIG_HAVE_EBPF_JIT=y
@@ -1997,7 +2030,6 @@ CONFIG_MTD_NAND_DOCG4=m
 CONFIG_MTD_NAND_CAFE=m
 CONFIG_MTD_NAND_NANDSIM=m
 CONFIG_MTD_NAND_PLATFORM=m
-CONFIG_MTD_NAND_OXNAS=m
 CONFIG_MTD_NAND_HISI504=m
 CONFIG_MTD_NAND_MTK=m
 CONFIG_MTD_ONENAND=m
@@ -2014,6 +2046,8 @@ CONFIG_MTD_QINFO_PROBE=m
 CONFIG_MTD_SPI_NOR=m
 CONFIG_MTD_MT81xx_NOR=m
 CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
+CONFIG_SPI_INTEL_SPI=m
+CONFIG_SPI_INTEL_SPI_PLATFORM=m
 CONFIG_MTD_UBI=m
 CONFIG_MTD_UBI_WL_THRESHOLD=4096
 CONFIG_MTD_UBI_BEB_LIMIT=20
@@ -2098,6 +2132,7 @@ CONFIG_ATA_OVER_ETH=m
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_BLKDEV_BACKEND=m
 CONFIG_VIRTIO_BLK=y
+# CONFIG_VIRTIO_BLK_SCSI is not set
 # CONFIG_BLK_DEV_HD is not set
 CONFIG_BLK_DEV_RBD=m
 CONFIG_BLK_DEV_RSXX=m
@@ -2158,6 +2193,7 @@ CONFIG_EEPROM_LEGACY=m
 CONFIG_EEPROM_MAX6875=m
 CONFIG_EEPROM_93CX6=m
 CONFIG_EEPROM_93XX46=m
+CONFIG_EEPROM_IDT_89HPESX=m
 CONFIG_CB710_CORE=m
 # CONFIG_CB710_DEBUG is not set
 CONFIG_CB710_DEBUG_ASSUMPTIONS=y
@@ -2355,6 +2391,7 @@ CONFIG_TCM_QLA2XXX=m
 # CONFIG_TCM_QLA2XXX_DEBUG is not set
 CONFIG_SCSI_QLA_ISCSI=m
 CONFIG_QEDI=m
+CONFIG_QEDF=m
 CONFIG_SCSI_LPFC=m
 # CONFIG_SCSI_LPFC_DEBUG_FS is not set
 CONFIG_SCSI_DC395x=m
@@ -2566,6 +2603,7 @@ CONFIG_NET_TEAM_MODE_LOADBALANCE=m
 CONFIG_MACVLAN=m
 CONFIG_MACVTAP=m
 CONFIG_IPVLAN=m
+CONFIG_IPVTAP=m
 CONFIG_VXLAN=m
 CONFIG_GENEVE=m
 CONFIG_GTP=m
@@ -2579,6 +2617,7 @@ CONFIG_RIONET=m
 CONFIG_RIONET_TX_SIZE=128
 CONFIG_RIONET_RX_SIZE=128
 CONFIG_TUN=y
+CONFIG_TAP=m
 # CONFIG_TUN_VNET_CROSS_LE is not set
 CONFIG_VETH=m
 CONFIG_VIRTIO_NET=y
@@ -2639,6 +2678,16 @@ CONFIG_CAIF_VIRTIO=m
 #
 # Distributed Switch Architecture drivers
 #
+CONFIG_NET_DSA_MV88E6060=m
+CONFIG_NET_DSA_BCM_SF2=m
+CONFIG_B53=m
+CONFIG_B53_SPI_DRIVER=m
+CONFIG_B53_MDIO_DRIVER=m
+CONFIG_B53_MMAP_DRIVER=m
+CONFIG_B53_SRAB_DRIVER=m
+CONFIG_NET_DSA_MV88E6XXX=m
+CONFIG_NET_DSA_MV88E6XXX_GLOBAL2=y
+CONFIG_NET_DSA_QCA8K=m
 CONFIG_ETHERNET=y
 CONFIG_MDIO=m
 CONFIG_NET_VENDOR_3COM=y
@@ -2665,6 +2714,8 @@ CONFIG_PCMCIA_NMCLAN=m
 CONFIG_AMD_XGBE=m
 # CONFIG_AMD_XGBE_DCB is not set
 CONFIG_AMD_XGBE_HAVE_ECC=y
+CONFIG_NET_VENDOR_AQUANTIA=y
+CONFIG_AQTION=m
 CONFIG_NET_VENDOR_ARC=y
 CONFIG_NET_VENDOR_ATHEROS=y
 CONFIG_ATL2=m
@@ -2784,6 +2835,10 @@ CONFIG_MLXSW_CORE_HWMON=y
 CONFIG_MLXSW_CORE_THERMAL=y
 CONFIG_MLXSW_PCI=m
 CONFIG_MLXSW_I2C=m
+CONFIG_MLXSW_SWITCHIB=m
+CONFIG_MLXSW_SWITCHX2=m
+CONFIG_MLXSW_SPECTRUM=m
+CONFIG_MLXSW_SPECTRUM_DCB=y
 CONFIG_MLXSW_MINIMAL=m
 CONFIG_NET_VENDOR_MICREL=y
 CONFIG_KS8842=m
@@ -2802,8 +2857,8 @@ CONFIG_NET_VENDOR_NATSEMI=y
 CONFIG_NATSEMI=m
 CONFIG_NS83820=m
 CONFIG_NET_VENDOR_NETRONOME=y
-CONFIG_NFP_NETVF=m
-# CONFIG_NFP_NET_DEBUG is not set
+CONFIG_NFP=m
+# CONFIG_NFP_DEBUG is not set
 CONFIG_NET_VENDOR_8390=y
 CONFIG_PCMCIA_AXNET=m
 CONFIG_NE2K_PCI=m
@@ -2829,6 +2884,7 @@ CONFIG_QED_SRIOV=y
 CONFIG_QEDE=m
 CONFIG_QED_RDMA=y
 CONFIG_QED_ISCSI=y
+CONFIG_QED_FCOE=y
 CONFIG_NET_VENDOR_QUALCOMM=y
 CONFIG_QCOM_EMAC=m
 CONFIG_NET_VENDOR_REALTEK=y
@@ -2844,6 +2900,7 @@ CONFIG_NET_VENDOR_RENESAS=y
 CONFIG_NET_VENDOR_RDC=y
 CONFIG_R6040=m
 CONFIG_NET_VENDOR_ROCKER=y
+CONFIG_ROCKER=m
 CONFIG_NET_VENDOR_SAMSUNG=y
 CONFIG_SXGBE_ETH=m
 CONFIG_NET_VENDOR_SEEQ=y
@@ -2876,7 +2933,6 @@ CONFIG_HAPPYMEAL=m
 CONFIG_SUNGEM=m
 CONFIG_CASSINI=m
 CONFIG_NIU=m
-CONFIG_NET_VENDOR_SYNOPSYS=y
 CONFIG_NET_VENDOR_TEHUTI=y
 CONFIG_TEHUTI=m
 CONFIG_NET_VENDOR_TI=y
@@ -3022,6 +3078,7 @@ CONFIG_ATH5K=m
 CONFIG_ATH5K_PCI=y
 CONFIG_ATH9K_HW=m
 CONFIG_ATH9K_COMMON=m
+CONFIG_ATH9K_COMMON_DEBUG=y
 CONFIG_ATH9K_BTCOEX_SUPPORT=y
 CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
@@ -3431,7 +3488,6 @@ CONFIG_MISDN_ISAR=m
 CONFIG_ISDN_HDLC=m
 CONFIG_NVM=y
 # CONFIG_NVM_DEBUG is not set
-CONFIG_NVM_GENNVM=m
 CONFIG_NVM_RRPC=m
 
 #
@@ -3482,6 +3538,7 @@ CONFIG_KEYBOARD_OPENCORES=m
 CONFIG_KEYBOARD_SAMSUNG=m
 CONFIG_KEYBOARD_STOWAWAY=m
 CONFIG_KEYBOARD_SUNKBD=m
+CONFIG_KEYBOARD_TM2_TOUCHKEY=m
 CONFIG_KEYBOARD_TWL4030=m
 CONFIG_KEYBOARD_XTKBD=m
 CONFIG_KEYBOARD_CROS_EC=m
@@ -3638,6 +3695,7 @@ CONFIG_TOUCHSCREEN_SUR40=m
 CONFIG_TOUCHSCREEN_SURFACE3_SPI=m
 CONFIG_TOUCHSCREEN_SX8654=m
 CONFIG_TOUCHSCREEN_TPS6507X=m
+CONFIG_TOUCHSCREEN_ZET6223=m
 CONFIG_TOUCHSCREEN_ZFORCE=m
 CONFIG_TOUCHSCREEN_ROHM_BU21023=m
 CONFIG_INPUT_MISC=y
@@ -3655,7 +3713,6 @@ CONFIG_INPUT_MAX8925_ONKEY=m
 CONFIG_INPUT_MAX8997_HAPTIC=m
 CONFIG_INPUT_MC13783_PWRBUTTON=m
 CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_MPU3050=m
 CONFIG_INPUT_APANEL=m
 CONFIG_INPUT_GP2A=m
 CONFIG_INPUT_GPIO_BEEPER=m
@@ -3703,7 +3760,8 @@ CONFIG_RMI4_CORE=m
 CONFIG_RMI4_I2C=m
 CONFIG_RMI4_SPI=m
 CONFIG_RMI4_SMB=m
-# CONFIG_RMI4_F03 is not set
+CONFIG_RMI4_F03=y
+CONFIG_RMI4_F03_SERIO=m
 CONFIG_RMI4_2D_SENSOR=y
 CONFIG_RMI4_F11=y
 CONFIG_RMI4_F12=y
@@ -3777,6 +3835,7 @@ CONFIG_SERIAL_8250_PNP=y
 CONFIG_SERIAL_8250_CONSOLE=y
 CONFIG_SERIAL_8250_DMA=y
 CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_EXAR=m
 CONFIG_SERIAL_8250_CS=m
 CONFIG_SERIAL_8250_NR_UARTS=48
 CONFIG_SERIAL_8250_RUNTIME_UARTS=32
@@ -3820,6 +3879,8 @@ CONFIG_SERIAL_RP2=m
 CONFIG_SERIAL_RP2_NR_UARTS=32
 CONFIG_SERIAL_FSL_LPUART=m
 CONFIG_SERIAL_MEN_Z135=m
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_SERIAL_DEV_CTRL_TTYPORT=y
 CONFIG_TTY_PRINTK=y
 CONFIG_PRINTER=m
 # CONFIG_LP_CONSOLE is not set
@@ -4050,6 +4111,7 @@ CONFIG_PTP_1588_CLOCK=m
 #
 # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
 #
+CONFIG_PTP_1588_CLOCK_KVM=m
 CONFIG_PINCTRL=y
 
 #
@@ -4065,6 +4127,7 @@ CONFIG_PINCTRL_BAYTRAIL=y
 CONFIG_PINCTRL_CHERRYVIEW=m
 CONFIG_PINCTRL_INTEL=m
 CONFIG_PINCTRL_BROXTON=m
+CONFIG_PINCTRL_GEMINILAKE=m
 CONFIG_PINCTRL_SUNRISEPOINT=m
 CONFIG_GPIOLIB=y
 CONFIG_GPIO_ACPI=y
@@ -4080,6 +4143,7 @@ CONFIG_GPIO_MAX730X=m
 CONFIG_GPIO_AMDPT=m
 CONFIG_GPIO_AXP209=m
 CONFIG_GPIO_DWAPB=m
+CONFIG_GPIO_EXAR=m
 CONFIG_GPIO_GENERIC_PLATFORM=m
 CONFIG_GPIO_ICH=m
 CONFIG_GPIO_LYNXPOINT=y
@@ -4139,6 +4203,7 @@ CONFIG_GPIO_WM8994=m
 #
 CONFIG_GPIO_AMD8111=m
 CONFIG_GPIO_ML_IOH=m
+CONFIG_GPIO_PCI_IDIO_16=m
 CONFIG_GPIO_RDC321X=m
 
 #
@@ -4173,6 +4238,7 @@ CONFIG_W1_MASTER_GPIO=m
 #
 CONFIG_W1_SLAVE_THERM=m
 CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2405=m
 CONFIG_W1_SLAVE_DS2408=m
 CONFIG_W1_SLAVE_DS2408_READBACK=y
 CONFIG_W1_SLAVE_DS2413=m
@@ -4204,6 +4270,7 @@ CONFIG_BATTERY_DS2780=m
 CONFIG_BATTERY_DS2781=m
 CONFIG_BATTERY_DS2782=m
 CONFIG_BATTERY_SBS=m
+CONFIG_CHARGER_SBS=m
 CONFIG_BATTERY_BQ27XXX=m
 CONFIG_BATTERY_BQ27XXX_I2C=m
 CONFIG_BATTERY_DA9030=m
@@ -4377,6 +4444,7 @@ CONFIG_SENSORS_SMSC47B397=m
 CONFIG_SENSORS_SCH56XX_COMMON=m
 CONFIG_SENSORS_SCH5627=m
 CONFIG_SENSORS_SCH5636=m
+CONFIG_SENSORS_STTS751=m
 CONFIG_SENSORS_SMM665=m
 CONFIG_SENSORS_ADC128D818=m
 CONFIG_SENSORS_ADS1015=m
@@ -4503,6 +4571,7 @@ CONFIG_MACHZ_WDT=m
 CONFIG_SBC_EPX_C3_WATCHDOG=m
 CONFIG_INTEL_MEI_WDT=m
 CONFIG_NI903X_WDT=m
+CONFIG_NIC7018_WDT=m
 CONFIG_MEN_A21_WDT=m
 CONFIG_XEN_WDT=m
 
@@ -4819,6 +4888,7 @@ CONFIG_IR_ITE_CIR=m
 CONFIG_IR_FINTEK=m
 CONFIG_IR_NUVOTON=m
 CONFIG_IR_REDRAT3=m
+CONFIG_IR_SPI=m
 CONFIG_IR_STREAMZAP=m
 CONFIG_IR_WINBOND_CIR=m
 CONFIG_IR_IGORPLUGUSB=m
@@ -4904,7 +4974,6 @@ CONFIG_VIDEO_PVRUSB2_DVB=y
 CONFIG_VIDEO_HDPVR=m
 CONFIG_VIDEO_USBVISION=m
 CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_STK1160_AC97=y
 CONFIG_VIDEO_STK1160=m
 CONFIG_VIDEO_GO7007=m
 CONFIG_VIDEO_GO7007_USB=m
@@ -4969,6 +5038,7 @@ CONFIG_DVB_USB_LME2510=m
 CONFIG_DVB_USB_MXL111SF=m
 CONFIG_DVB_USB_RTL28XXU=m
 CONFIG_DVB_USB_DVBSKY=m
+CONFIG_DVB_USB_ZD1301=m
 CONFIG_DVB_TTUSB_BUDGET=m
 CONFIG_DVB_TTUSB_DEC=m
 CONFIG_SMS_USB_DRV=m
@@ -5019,6 +5089,7 @@ CONFIG_VIDEO_ZORAN_AVS6EYES=m
 # Media capture/analog TV support
 #
 CONFIG_VIDEO_IVTV=m
+# CONFIG_VIDEO_IVTV_DEPRECATED_IOCTLS is not set
 CONFIG_VIDEO_IVTV_ALSA=m
 CONFIG_VIDEO_FB_IVTV=m
 CONFIG_VIDEO_HEXIUM_GEMINI=m
@@ -5369,6 +5440,7 @@ CONFIG_DVB_RTL2832=m
 CONFIG_DVB_RTL2832_SDR=m
 CONFIG_DVB_SI2168=m
 CONFIG_DVB_AS102_FE=m
+CONFIG_DVB_ZD1301_DEMOD=m
 CONFIG_DVB_GP8PSK_FE=m
 
 #
@@ -5457,11 +5529,13 @@ CONFIG_VGA_SWITCHEROO=y
 CONFIG_DRM=m
 CONFIG_DRM_MIPI_DSI=y
 # CONFIG_DRM_DP_AUX_CHARDEV is not set
+# CONFIG_DRM_DEBUG_MM_SELFTEST is not set
 CONFIG_DRM_KMS_HELPER=m
 CONFIG_DRM_KMS_FB_HELPER=y
 CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_DRM_LOAD_EDID_FIRMWARE=y
 CONFIG_DRM_TTM=m
+CONFIG_DRM_VM=y
 
 #
 # I2C encoder or helper chips
@@ -5497,6 +5571,7 @@ CONFIG_DRM_I915_USERPTR=y
 #
 # CONFIG_DRM_I915_WERROR is not set
 # CONFIG_DRM_I915_DEBUG is not set
+# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set
 CONFIG_DRM_VGEM=m
 CONFIG_DRM_VMWGFX=m
 CONFIG_DRM_VMWGFX_FBCON=y
@@ -5523,7 +5598,9 @@ CONFIG_DRM_BRIDGE=y
 CONFIG_DRM_ANALOGIX_ANX78XX=m
 CONFIG_HSA_AMD=m
 CONFIG_DRM_HISI_HIBMC=m
+# CONFIG_DRM_TINYDRM is not set
 # CONFIG_DRM_LEGACY is not set
+# CONFIG_DRM_LIB_RANDOM is not set
 
 #
 # Frame buffer Devices
@@ -5541,6 +5618,7 @@ CONFIG_FB_CFB_IMAGEBLIT=y
 CONFIG_FB_SYS_FILLRECT=m
 CONFIG_FB_SYS_COPYAREA=m
 CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA is not set
 # CONFIG_FB_FOREIGN_ENDIAN is not set
 CONFIG_FB_SYS_FOPS=m
 CONFIG_FB_DEFERRED_IO=y
@@ -5896,7 +5974,7 @@ CONFIG_SND_SOC_FSL_SPDIF=m
 CONFIG_SND_SOC_FSL_ESAI=m
 CONFIG_SND_SOC_IMX_AUDMUX=m
 # CONFIG_SND_SOC_IMG is not set
-CONFIG_SND_SST_MFLD_PLATFORM=m
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
 CONFIG_SND_SST_IPC=m
 CONFIG_SND_SST_IPC_ACPI=m
 CONFIG_SND_SOC_INTEL_SST=m
@@ -5907,6 +5985,7 @@ CONFIG_SND_SOC_INTEL_HASWELL=m
 CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m
 CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m
+CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
 CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
 CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
 CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
@@ -5955,6 +6034,8 @@ CONFIG_SND_SOC_DA7219=m
 CONFIG_SND_SOC_DMIC=m
 CONFIG_SND_SOC_HDMI_CODEC=m
 CONFIG_SND_SOC_ES8328=m
+CONFIG_SND_SOC_ES8328_I2C=m
+CONFIG_SND_SOC_ES8328_SPI=m
 CONFIG_SND_SOC_GTM601=m
 CONFIG_SND_SOC_HDAC_HDMI=m
 CONFIG_SND_SOC_INNO_RK3036=m
@@ -5984,7 +6065,8 @@ CONFIG_SND_SOC_RT5640=m
 CONFIG_SND_SOC_RT5645=m
 CONFIG_SND_SOC_RT5651=m
 CONFIG_SND_SOC_RT5670=m
-# CONFIG_SND_SOC_RT5677_SPI is not set
+CONFIG_SND_SOC_RT5677=m
+CONFIG_SND_SOC_RT5677_SPI=m
 CONFIG_SND_SOC_SGTL5000=m
 CONFIG_SND_SOC_SI476X=m
 CONFIG_SND_SOC_SIGMADSP=m
@@ -6030,11 +6112,14 @@ CONFIG_SND_SOC_WM8962=m
 CONFIG_SND_SOC_WM8974=m
 CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_WM8985=m
+CONFIG_SND_SOC_NAU8540=m
 CONFIG_SND_SOC_NAU8810=m
 CONFIG_SND_SOC_NAU8825=m
 CONFIG_SND_SOC_TPA6130A2=m
 CONFIG_SND_SIMPLE_CARD_UTILS=m
 CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SND_X86=y
+CONFIG_HDMI_LPE_AUDIO=m
 # CONFIG_SOUND_PRIME is not set
 CONFIG_AC97_BUS=m
 
@@ -6300,6 +6385,7 @@ CONFIG_USB_CHIPIDEA=m
 CONFIG_USB_CHIPIDEA_PCI=m
 CONFIG_USB_CHIPIDEA_UDC=y
 CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_CHIPIDEA_ULPI=y
 CONFIG_USB_ISP1760=m
 CONFIG_USB_ISP1760_HCD=y
 CONFIG_USB_ISP1761_UDC=y
@@ -6377,6 +6463,7 @@ CONFIG_USB_SERIAL_XSENS_MT=m
 CONFIG_USB_SERIAL_WISHBONE=m
 CONFIG_USB_SERIAL_SSU100=m
 CONFIG_USB_SERIAL_QT2=m
+CONFIG_USB_SERIAL_UPD78F0730=m
 CONFIG_USB_SERIAL_DEBUG=m
 
 #
@@ -6404,6 +6491,7 @@ CONFIG_USB_EHSET_TEST_FIXTURE=m
 CONFIG_USB_ISIGHTFW=m
 CONFIG_USB_YUREX=m
 CONFIG_USB_EZUSB_FX2=m
+CONFIG_USB_HUB_USB251XB=m
 CONFIG_USB_HSIC_USB3503=m
 CONFIG_USB_HSIC_USB4604=m
 CONFIG_USB_LINK_LAYER_TEST=m
@@ -6579,6 +6667,7 @@ CONFIG_MEMSTICK_REALTEK_USB=m
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_CLASS_FLASH=m
+# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
 
 #
 # LED drivers
@@ -6686,6 +6775,7 @@ CONFIG_INFINIBAND_HFI1=m
 CONFIG_HFI1_VERBS_31BIT_PSN=y
 # CONFIG_SDMA_VERBOSITY is not set
 CONFIG_INFINIBAND_QEDR=m
+CONFIG_INFINIBAND_BNXT_RE=m
 CONFIG_EDAC_ATOMIC_SCRUB=y
 CONFIG_EDAC_SUPPORT=y
 CONFIG_EDAC=y
@@ -6708,6 +6798,7 @@ CONFIG_EDAC_I5100=m
 CONFIG_EDAC_I7300=m
 CONFIG_EDAC_SBRIDGE=m
 CONFIG_EDAC_SKX=m
+CONFIG_EDAC_PND2=m
 CONFIG_RTC_LIB=y
 CONFIG_RTC_MC146818_LIB=y
 CONFIG_RTC_CLASS=y
@@ -7208,9 +7299,6 @@ CONFIG_STAGING_MEDIA=y
 CONFIG_I2C_BCM2048=m
 CONFIG_DVB_CXD2099=m
 CONFIG_LIRC_STAGING=y
-CONFIG_LIRC_BT829=m
-CONFIG_LIRC_IMON=m
-CONFIG_LIRC_PARALLEL=m
 CONFIG_LIRC_SASEM=m
 CONFIG_LIRC_SIR=m
 CONFIG_LIRC_ZILOG=m
@@ -7283,10 +7371,6 @@ CONFIG_AIM_V4L2=m
 CONFIG_HDM_DIM2=m
 CONFIG_HDM_I2C=m
 CONFIG_HDM_USB=m
-
-#
-# Old ISDN4Linux (deprecated)
-#
 CONFIG_KS7010=m
 # CONFIG_GREYBUS is not set
 CONFIG_X86_PLATFORM_DEVICES=y
@@ -7357,6 +7441,9 @@ CONFIG_INTEL_PUNIT_IPC=m
 CONFIG_INTEL_TELEMETRY=m
 # CONFIG_MLX_PLATFORM is not set
 CONFIG_MLX_CPLD_PLATFORM=m
+# CONFIG_INTEL_TURBO_MAX_3 is not set
+# CONFIG_SILEAD_DMI is not set
+CONFIG_PMC_ATOM=y
 CONFIG_CHROME_PLATFORMS=y
 CONFIG_CHROMEOS_LAPTOP=m
 CONFIG_CHROMEOS_PSTORE=m
@@ -7382,13 +7469,6 @@ CONFIG_COMMON_CLK_PALMAS=m
 CONFIG_COMMON_CLK_PWM=m
 # CONFIG_COMMON_CLK_PXA is not set
 # CONFIG_COMMON_CLK_PIC32 is not set
-# CONFIG_COMMON_CLK_MT2701 is not set
-# CONFIG_COMMON_CLK_MT2701_MMSYS is not set
-# CONFIG_COMMON_CLK_MT2701_IMGSYS is not set
-# CONFIG_COMMON_CLK_MT2701_VDECSYS is not set
-# CONFIG_COMMON_CLK_MT2701_HIFSYS is not set
-# CONFIG_COMMON_CLK_MT2701_ETHSYS is not set
-# CONFIG_COMMON_CLK_MT2701_BDPSYS is not set
 
 #
 # Hardware Spinlock drivers
@@ -7442,6 +7522,7 @@ CONFIG_REMOTEPROC=m
 #
 # CONFIG_SUNXI_SRAM is not set
 CONFIG_SOC_TI=y
+# CONFIG_SOC_ZTE is not set
 CONFIG_PM_DEVFREQ=y
 
 #
@@ -7466,6 +7547,7 @@ CONFIG_EXTCON_ADC_JACK=m
 CONFIG_EXTCON_ARIZONA=m
 CONFIG_EXTCON_AXP288=m
 CONFIG_EXTCON_GPIO=m
+CONFIG_EXTCON_INTEL_INT3496=m
 CONFIG_EXTCON_MAX14577=m
 CONFIG_EXTCON_MAX3355=m
 CONFIG_EXTCON_MAX77693=m
@@ -7542,10 +7624,12 @@ CONFIG_AXP288_ADC=m
 CONFIG_CC10001_ADC=m
 CONFIG_DA9150_GPADC=m
 CONFIG_HI8435=m
+CONFIG_HX711=m
 CONFIG_INA2XX_ADC=m
 CONFIG_LP8788_ADC=m
 CONFIG_LTC2485=m
 CONFIG_MAX1027=m
+CONFIG_MAX11100=m
 CONFIG_MAX1363=m
 CONFIG_MCP320X=m
 CONFIG_MCP3422=m
@@ -7560,7 +7644,9 @@ CONFIG_TI_ADC12138=m
 CONFIG_TI_ADC128S052=m
 CONFIG_TI_ADC161S626=m
 CONFIG_TI_ADS1015=m
+CONFIG_TI_ADS7950=m
 CONFIG_TI_AM335X_ADC=m
+CONFIG_TI_TLC4541=m
 CONFIG_TWL4030_MADC=m
 CONFIG_TWL6030_GPADC=m
 CONFIG_VIPERBOARD_ADC=m
@@ -7658,6 +7744,8 @@ CONFIG_BMG160=m
 CONFIG_BMG160_I2C=m
 CONFIG_BMG160_SPI=m
 CONFIG_HID_SENSOR_GYRO_3D=m
+CONFIG_MPU3050=m
+CONFIG_MPU3050_I2C=m
 CONFIG_IIO_ST_GYRO_3AXIS=m
 CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
 CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
@@ -7699,6 +7787,9 @@ CONFIG_KMX61=m
 CONFIG_INV_MPU6050_IIO=m
 CONFIG_INV_MPU6050_I2C=m
 CONFIG_INV_MPU6050_SPI=m
+CONFIG_IIO_ST_LSM6DSX=m
+CONFIG_IIO_ST_LSM6DSX_I2C=m
+CONFIG_IIO_ST_LSM6DSX_SPI=m
 CONFIG_IIO_ADIS_LIB=m
 CONFIG_IIO_ADIS_LIB_BUFFER=y
 
@@ -7775,6 +7866,7 @@ CONFIG_IIO_SYSFS_TRIGGER=m
 # Digital potentiometers
 #
 CONFIG_DS1803=m
+CONFIG_MAX5481=m
 CONFIG_MAX5487=m
 CONFIG_MCP4131=m
 CONFIG_MCP4531=m
@@ -7792,6 +7884,7 @@ CONFIG_ABP060MG=m
 CONFIG_BMP280=m
 CONFIG_BMP280_I2C=m
 CONFIG_BMP280_SPI=m
+CONFIG_IIO_CROS_EC_BARO=m
 CONFIG_HID_SENSOR_PRESS=m
 CONFIG_HP03=m
 CONFIG_MPL115=m
@@ -7817,10 +7910,11 @@ CONFIG_ZPA2326_SPI=m
 CONFIG_AS3935=m
 
 #
-# Proximity sensors
+# Proximity and distance sensors
 #
 CONFIG_LIDAR_LITE_V2=m
 CONFIG_SX9500=m
+CONFIG_SRF08=m
 
 #
 # Temperature sensors
@@ -7828,6 +7922,7 @@ CONFIG_SX9500=m
 CONFIG_MAXIM_THERMOCOUPLE=m
 CONFIG_MLX90614=m
 CONFIG_TMP006=m
+CONFIG_TMP007=m
 CONFIG_TSYS01=m
 CONFIG_TSYS02D=m
 CONFIG_NTB=m
@@ -7900,6 +7995,8 @@ CONFIG_PHY_SAMSUNG_USB2=m
 # CONFIG_PHY_EXYNOS4210_USB2 is not set
 # CONFIG_PHY_EXYNOS4X12_USB2 is not set
 # CONFIG_PHY_EXYNOS5250_USB2 is not set
+CONFIG_PHY_QCOM_USB_HS=m
+CONFIG_PHY_QCOM_USB_HSIC=m
 CONFIG_PHY_TUSB1210=m
 CONFIG_POWERCAP=y
 CONFIG_INTEL_RAPL=m
@@ -7949,10 +8046,14 @@ CONFIG_INTEL_TH_PTI=m
 #
 CONFIG_FPGA=m
 
+#
+# FSI support
+#
+# CONFIG_FSI is not set
+
 #
 # Firmware Drivers
 #
-# CONFIG_ARM_SCPI_PROTOCOL is not set
 CONFIG_EDD=y
 CONFIG_EDD_OFF=y
 CONFIG_FIRMWARE_MEMMAP=y
@@ -8370,6 +8471,7 @@ CONFIG_FRAME_POINTER=y
 # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
+CONFIG_MAGIC_SYSRQ_SERIAL=y
 CONFIG_DEBUG_KERNEL=y
 
 #
@@ -8379,6 +8481,7 @@ CONFIG_DEBUG_KERNEL=y
 # CONFIG_DEBUG_PAGEALLOC is not set
 # CONFIG_PAGE_POISONING is not set
 # CONFIG_DEBUG_PAGE_REF is not set
+# CONFIG_DEBUG_RODATA_TEST is not set
 # CONFIG_DEBUG_OBJECTS is not set
 # CONFIG_SLUB_DEBUG_ON is not set
 # CONFIG_SLUB_STATS is not set
@@ -8386,6 +8489,7 @@ CONFIG_HAVE_DEBUG_KMEMLEAK=y
 # CONFIG_DEBUG_KMEMLEAK is not set
 # CONFIG_DEBUG_STACK_USAGE is not set
 # CONFIG_DEBUG_VM is not set
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
 # CONFIG_DEBUG_VIRTUAL is not set
 # CONFIG_DEBUG_MEMORY_INIT is not set
 CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
@@ -8421,7 +8525,6 @@ CONFIG_SCHED_INFO=y
 CONFIG_SCHEDSTATS=y
 CONFIG_SCHED_STACK_END_CHECK=y
 # CONFIG_DEBUG_TIMEKEEPING is not set
-CONFIG_TIMER_STATS=y
 
 #
 # Lock Debugging (spinlocks, mutexes, etc...)
@@ -8436,6 +8539,7 @@ CONFIG_TIMER_STATS=y
 # CONFIG_DEBUG_ATOMIC_SLEEP is not set
 # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
 CONFIG_LOCK_TORTURE_TEST=m
+CONFIG_WW_MUTEX_SELFTEST=m
 CONFIG_STACKTRACE=y
 # CONFIG_DEBUG_KOBJECT is not set
 CONFIG_DEBUG_BUGVERBOSE=y
@@ -8497,8 +8601,8 @@ CONFIG_BRANCH_PROFILE_NONE=y
 # CONFIG_PROFILE_ALL_BRANCHES is not set
 CONFIG_STACK_TRACER=y
 CONFIG_BLK_DEV_IO_TRACE=y
-CONFIG_KPROBE_EVENT=y
-CONFIG_UPROBE_EVENT=y
+CONFIG_KPROBE_EVENTS=y
+# CONFIG_UPROBE_EVENTS is not set
 CONFIG_BPF_EVENTS=y
 CONFIG_PROBE_EVENTS=y
 CONFIG_DYNAMIC_FTRACE=y
@@ -8520,6 +8624,7 @@ CONFIG_TRACING_EVENTS_GPIO=y
 #
 # CONFIG_LKDTM is not set
 # CONFIG_TEST_LIST_SORT is not set
+# CONFIG_TEST_SORT is not set
 # CONFIG_KPROBES_SANITY_TEST is not set
 # CONFIG_BACKTRACE_SELF_TEST is not set
 CONFIG_RBTREE_TEST=m
@@ -8535,6 +8640,7 @@ CONFIG_TEST_BITMAP=m
 CONFIG_TEST_UUID=m
 # CONFIG_TEST_RHASHTABLE is not set
 CONFIG_TEST_HASH=m
+CONFIG_TEST_PARMAN=m
 # CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
 # CONFIG_DMA_API_DEBUG is not set
 CONFIG_TEST_LKM=m
@@ -8568,10 +8674,7 @@ CONFIG_EARLY_PRINTK_EFI=y
 # CONFIG_X86_PTDUMP_CORE is not set
 # CONFIG_X86_PTDUMP is not set
 # CONFIG_EFI_PGT_DUMP is not set
-# CONFIG_DEBUG_RODATA_TEST is not set
 # CONFIG_DEBUG_WX is not set
-CONFIG_DEBUG_SET_MODULE_RONX=y
-# CONFIG_DEBUG_NX_TEST is not set
 CONFIG_DOUBLEFAULT=y
 # CONFIG_DEBUG_TLBFLUSH is not set
 # CONFIG_IOMMU_DEBUG is not set
@@ -8616,6 +8719,7 @@ CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
 CONFIG_HAVE_ARCH_HARDENED_USERCOPY=y
 CONFIG_HARDENED_USERCOPY=y
 # CONFIG_HARDENED_USERCOPY_PAGESPAN is not set
+# CONFIG_STATIC_USERMODEHELPER is not set
 CONFIG_SECURITY_SELINUX=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM=y
 CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
@@ -8637,6 +8741,7 @@ CONFIG_SECURITY_APPARMOR=y
 CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
 CONFIG_SECURITY_APPARMOR_HASH=y
 CONFIG_SECURITY_APPARMOR_HASH_DEFAULT=y
+# CONFIG_SECURITY_APPARMOR_DEBUG is not set
 # CONFIG_SECURITY_LOADPIN is not set
 CONFIG_SECURITY_YAMA=y
 CONFIG_INTEGRITY=y
@@ -8718,6 +8823,7 @@ CONFIG_CRYPTO_TEST=m
 CONFIG_CRYPTO_ABLK_HELPER=m
 CONFIG_CRYPTO_SIMD=m
 CONFIG_CRYPTO_GLUE_HELPER_X86=m
+CONFIG_CRYPTO_ENGINE=m
 
 #
 # Authenticated Encryption with Associated Data
@@ -8785,6 +8891,7 @@ CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
 # Ciphers
 #
 CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_AES_TI=m
 CONFIG_CRYPTO_AES_X86_64=m
 CONFIG_CRYPTO_AES_NI_INTEL=m
 CONFIG_CRYPTO_ANUBIS=m
@@ -8974,6 +9081,8 @@ CONFIG_ASSOCIATIVE_ARRAY=y
 CONFIG_HAS_IOMEM=y
 CONFIG_HAS_IOPORT_MAP=y
 CONFIG_HAS_DMA=y
+# CONFIG_DMA_NOOP_OPS is not set
+CONFIG_DMA_VIRT_OPS=y
 CONFIG_CHECK_SIGNATURE=y
 CONFIG_CPU_RMAP=y
 CONFIG_DQL=y
@@ -8999,3 +9108,4 @@ CONFIG_ARCH_HAS_SG_CHAIN=y
 CONFIG_ARCH_HAS_PMEM_API=y
 CONFIG_ARCH_HAS_MMIO_FLUSH=y
 CONFIG_SBITMAP=y
+CONFIG_PARMAN=m
index f9c0a22..d5cb578 100644 (file)
@@ -5,6 +5,7 @@
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017 Kei Kebreau <kei@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -186,6 +187,7 @@ backups (called chunks) to allow easy burning to CD/DVD.")
 (define-public libarchive
   (package
     (name "libarchive")
+    (replacement libarchive-3.3.1)
     (version "3.2.2")
     (source
      (origin
@@ -241,6 +243,20 @@ archive.  In particular, note that there is currently no built-in support for
 random access nor for in-place modification.")
     (license license:bsd-2)))
 
+(define libarchive-3.3.1
+  (package
+    (inherit libarchive)
+    (name "libarchive")
+    (version "3.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://libarchive.org/downloads/libarchive-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1rr40hxlm9vy5z2zb5w7pyfkgd1a4s061qapm83s19accb8mpji9"))))))
+
 (define-public rdup
   (package
     (name "rdup")
index e896dbe..59a9acd 100644 (file)
@@ -1140,14 +1140,14 @@ and daylight-saving rules.")
 (define-public libiconv
   (package
     (name "libiconv")
-    (version "1.14")
+    (version "1.15")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/libiconv/libiconv-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "04q6lgl3kglmmhw59igq1n7v3rp1rpkypl366cy1k1yn2znlvckj"))
+                "0y1ij745r4p48mxq84rax40p10ln7fc7m243p8k8sia519i3dxfc"))
               (modules '((guix build utils)))
               (snippet
                ;; Work around "declared gets" error on glibc systems (fixed by
index 83a48d0..9f5d814 100644 (file)
@@ -33,6 +33,7 @@
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system ocaml)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
   #:use-module (guix build-system r)
@@ -71,6 +72,7 @@
   #:use-module (gnu packages maths)
   #:use-module (gnu packages mpi)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages ocaml)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages parallel)
   #:use-module (gnu packages pdf)
@@ -721,7 +723,7 @@ objects are made from the Sequence objects, Sequence objects have access to
 Annotation and SeqFeature objects and databases, Blast objects can be
 converted to Alignment objects, and so on.  This means that the objects
 provide a coordinated and extensible framework to do computational biology.")
-      (license (package-license perl)))))
+      (license license:perl-license))))
 
 (define-public python-biopython
   (package
@@ -3627,6 +3629,129 @@ interrupted by stop codons.  OrfM finds and prints these ORFs.")
     (home-page "https://github.com/wwood/OrfM")
     (license license:lgpl3+)))
 
+(define-public pplacer
+  (let ((commit "g807f6f3"))
+    (package
+      (name "pplacer")
+      ;; The commit should be updated with each version change.
+      (version "1.1.alpha19")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "https://github.com/matsen/pplacer/archive/v"
+                             version ".tar.gz"))
+         (file-name (string-append name "-" version ".tar.gz"))
+         (sha256
+          (base32 "0z1lnd2s8sh6kpzg106wzbh2szw7h0hvq8syd5a6wv4rmyyz6x0f"))))
+      (build-system ocaml-build-system)
+      (arguments
+       `(#:ocaml ,ocaml-4.01
+         #:findlib ,ocaml4.01-findlib
+         #:modules ((guix build ocaml-build-system)
+                    (guix build utils)
+                    (ice-9 ftw))
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (add-after 'unpack 'replace-bundled-cddlib
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let* ((cddlib-src (assoc-ref inputs "cddlib-src"))
+                      (local-dir "cddlib_guix"))
+                 (mkdir local-dir)
+                 (with-directory-excursion local-dir
+                   (system* "tar" "xvf" cddlib-src))
+                 (let ((cddlib-src-folder
+                        (string-append local-dir "/"
+                                       (list-ref (scandir local-dir) 2)
+                                       "/lib-src")))
+                   (for-each
+                    (lambda (file)
+                      (copy-file file
+                                 (string-append "cdd_src/" (basename file))))
+                    (find-files cddlib-src-folder ".*[ch]$")))
+                 #t)))
+           (add-after 'unpack 'fix-makefile
+             (lambda _
+               ;; Remove system calls to 'git'.
+               (substitute* "Makefile"
+                 (("^DESCRIPT:=pplacer-.*")
+                  (string-append
+                   "DESCRIPT:=pplacer-$(shell uname)-v" ,version "\n")))
+               (substitute* "myocamlbuild.ml"
+                 (("git describe --tags --long .*\\\" with")
+                  (string-append
+                   "echo -n v" ,version "-" ,commit "\" with")))
+               #t))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin")))
+                 (copy-recursively "bin" bin))
+               #t)))))
+      (native-inputs
+       `(("zlib" ,zlib)
+         ("gsl" ,gsl)
+         ("ocaml-ounit" ,ocaml4.01-ounit)
+         ("ocaml-batteries" ,ocaml4.01-batteries)
+         ("ocaml-camlzip" ,ocaml4.01-camlzip)
+         ("ocaml-csv" ,ocaml4.01-csv)
+         ("ocaml-sqlite3" ,ocaml4.01-sqlite3)
+         ("ocaml-xmlm" ,ocaml4.01-xmlm)
+         ("ocaml-mcl" ,ocaml4.01-mcl)
+         ("ocaml-gsl" ,ocaml4.01-gsl)
+         ("cddlib-src" ,(package-source cddlib))))
+      (propagated-inputs
+       `(("pplacer-scripts" ,pplacer-scripts)))
+      (synopsis "Phylogenetic placement of biological sequences")
+      (description
+       "Pplacer places query sequences on a fixed reference phylogenetic tree
+to maximize phylogenetic likelihood or posterior probability according to a
+reference alignment.  Pplacer is designed to be fast, to give useful
+information about uncertainty, and to offer advanced visualization and
+downstream analysis.")
+      (home-page "http://matsen.fhcrc.org/pplacer")
+      (license license:gpl3))))
+
+;; This package is installed alongside 'pplacer'.  It is a separate package so
+;; that it can use the python-build-system for the scripts that are
+;; distributed alongside the main OCaml binaries.
+(define pplacer-scripts
+  (package
+    (inherit pplacer)
+    (name "pplacer-scripts")
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'enter-scripts-dir
+           (lambda _ (chdir "scripts")))
+         (replace 'check
+           (lambda _
+             (zero? (system* "python" "-m" "unittest" "discover" "-v"))))
+         (add-after 'install 'wrap-executables
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (let ((path (string-append
+                            (assoc-ref inputs "hmmer") "/bin:"
+                            (assoc-ref inputs "infernal") "/bin")))
+                 (display path)
+                 (wrap-program (string-append bin "/refpkg_align.py")
+                   `("PATH" ":" prefix (,path))))
+               (let ((path (string-append
+                            (assoc-ref inputs "hmmer") "/bin")))
+                 (wrap-program (string-append bin "/hrefpkg_query.py")
+                   `("PATH" ":" prefix (,path)))))
+             #t)))))
+    (inputs
+     `(("infernal" ,infernal)
+       ("hmmer" ,hmmer)))
+    (propagated-inputs
+     `(("python-biopython" ,python2-biopython)
+       ("taxtastic" ,taxtastic)))
+    (synopsis "Pplacer Python scripts")))
+
 (define-public python2-pbcore
   (package
     (name "python2-pbcore")
@@ -5268,6 +5393,42 @@ between experiments, StringTie's output can be processed either by the
 Cuffdiff or Ballgown programs.")
     (license license:artistic2.0)))
 
+(define-public taxtastic
+  (package
+    (name "taxtastic")
+    (version "0.5.7")
+    ;; Versions after 0.5.4 do not appear to be distributed on PyPI so we
+    ;; download the package from GitHub.
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/fhcrc/taxtastic/archive/v"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1s0h5y1lds1c40jhir5585ffm6yjyn8h5aqimpgv64rhqhfv56xx"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "python" "-m" "unittest" "discover" "-v")))))))
+    (propagated-inputs
+     `(("python-sqlalchemy" ,python2-sqlalchemy)
+       ("python-decorator" ,python2-decorator)
+       ("python-biopython" ,python2-biopython)
+       ("python-pandas" ,python2-pandas)))
+    (home-page "https://github.com/fhcrc/taxtastic")
+    (synopsis "Tools for taxonomic naming and annotation")
+    (description
+     "Taxtastic is software written in python used to build and maintain
+reference packages i.e. collections of reference trees, reference alignments,
+profiles, and associated taxonomic information.")
+    (license license:gpl3+)))
+
 (define-public vcftools
   (package
     (name "vcftools")
@@ -7730,7 +7891,7 @@ library implementing most of the pipeline's features.")
      `(("r-minimal" ,r-minimal)
        ("r-rcas" ,r-rcas)
        ("guile-next" ,guile-2.2)
-       ("guile-json" ,guile2.2-json)
+       ("guile-json" ,guile-json)
        ("guile-redis" ,guile2.2-redis)))
     (native-inputs
      `(("pkg-config" ,pkg-config)))
index 98afc6a..4bea418 100644 (file)
 (define-public grub
   (package
     (name "grub")
-    (version "2.02rc1")
+    (version "2.02")
     (source (origin
              (method url-fetch)
-             (uri (string-append
-                   "ftp://alpha.gnu.org/gnu/grub/grub-"
-                   "2.02~rc1"
-                   ".tar.xz"))
-             (file-name (string-append name "-" version ".tar.xz"))
+             (uri (string-append "mirror://gnu/grub/grub-" version ".tar.xz"))
              (sha256
               (base32
-               "0y02v19x9sb5jvj740f604vvi5j1rx8pily1jk0l64bdp7lkjlj4"))))
+               "03vvdfhdmf16121v7xs8is2krwnv15wpkhkf16a4yf8nsfc3f2w1"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
index 0f6a10b..66f4643 100644 (file)
@@ -69,7 +69,7 @@ makes a few sacrifices to acquire fast full and incremental build times.")
 (define-public meson
   (package
     (name "meson")
-    (version "0.39.1")
+    (version "0.40.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/mesonbuild/meson/"
@@ -77,7 +77,7 @@ makes a few sacrifices to acquire fast full and incremental build times.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1jwgd6sl7zl7h16id3405gwk6vlkk86ggwrp0k47njwkxmryq8d4"))))
+                "0yl6iryh89nn6hzhwv7kg16ki1chh9h0x1yk1y130h87iq42a35r"))))
     (build-system python-build-system)
     (inputs `(("ninja", ninja)))
     (home-page "https://mesonbuild.com/")
index 7e86753..15329b3 100644 (file)
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017 John Darrington <jmd@gnu.org>
+;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -26,7 +27,7 @@
 (define-module (gnu packages cdrom)
   #:use-module (guix download)
   #:use-module (guix packages)
-  #:use-module ((guix licenses) #:select (lgpl2.1+ gpl2 gpl2+ gpl3+))
+  #:use-module ((guix licenses) #:select (lgpl2.1+ gpl2 gpl2+ gpl3+ cddl1.0))
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages zip)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages fontutils)
   #:use-module (gnu packages gettext)
+  #:use-module (gnu packages docbook)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages m4)
   #:use-module (gnu packages mp3)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages elf)
+  #:use-module (gnu packages wxwidgets)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages base)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages photo)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages wget)
   #:use-module (gnu packages xiph))
 
@@ -197,6 +208,104 @@ extra-robust data verification, synchronization, error handling and scratch
 reconstruction capability.")
     (license gpl2))) ; libraries under lgpl2.1
 
+(define-public cdrtools
+  (package
+    (name "cdrtools")
+    (version "3.01")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://sourceforge/cdrtools/cdrtools-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "03w6ypsmwwy4d7vh6zgwpc60v541vc5ywp8bdb758hbc4yv2wa7d"))
+              (patches (search-patches "cdrtools-3.01-mkisofs-isoinfo.patch"))))
+    (build-system gnu-build-system)
+    ;; XXX cdrtools bundles a modified, relicensed early version of cdparanoia.
+    (inputs
+     `(("linux-headers" ,linux-libre-headers)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'set-linux-headers
+           (lambda _
+             (substitute* "autoconf/configure"
+               (("/usr/src/linux")
+                (assoc-ref %build-inputs "linux-headers")))
+             #t))
+         (add-before 'build 'substitute-dirs
+           (lambda _
+             (substitute* (append (find-files "DEFAULTS" "^Defaults\\.")
+                                  (find-files "DEFAULTS_ENG" "^Defaults\\.")
+                                  (find-files "TEMPLATES" "^Defaults\\."))
+               (("/opt/schily") (assoc-ref %outputs "out")))
+             #t))
+         (replace 'build
+           (lambda _
+             (zero?
+              (system* "make" "CONFIG_SHELL=sh" "CCOM=gcc" "RM=rm"))))
+         (replace 'install
+           (lambda _
+             (zero?
+              (system* "make"
+                       "RM=rm" "LN=ln" "SYMLINK=ln -s"
+                       (string-append "INS_BASE=" (assoc-ref %outputs "out"))
+                       (string-append "INS_RBASE=" (assoc-ref %outputs "out"))
+                       "install" )))))
+       #:tests? #f))  ; no tests
+   (synopsis "Command line utilities to manipulate and burn CD/DVD/BD images")
+   (description "cdrtools is a collection of command line utilities to create
+CD's, DVD's or Blue Ray discs.  The most important components are
+@command{cdrecord}, a burning program, @command{cdda2wav}, a CD audio ripper
+which uses libparanoia, and @command{mkisofs}, which can create various disc
+images.")
+   (home-page "http://cdrtools.sourceforge.net/private/cdrecord.html")
+
+   ;; mkisofs is GPL, the other programs are CDDL.
+   (license (list cddl1.0 gpl2))))
+
+(define-public dvd+rw-tools
+  (package
+    (name "dvd+rw-tools")
+    (version "7.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://fy.chalmers.se/~appro/linux/DVD+RW/tools/dvd+rw-tools-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1jkjvvnjcyxpql97xjjx0kwvy70kxpiznr2zpjy2hhci5s10zmpq"))
+              (patches (search-patches "dvd+rw-tools-add-include.patch"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("cdrtools" ,cdrtools)))
+    (native-inputs
+     `(("m4" ,m4)))
+    (arguments
+     `(#:tests? #f ; No tests.
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda _ (setenv "prefix" (assoc-ref %outputs "out")) #t))
+         (add-before 'build 'embed-mkisofs
+           (lambda*  (#:key inputs #:allow-other-keys)
+             ;; We use sed --in-place because substitute* cannot handle the
+             ;; character encoding used by growisofs.c.
+             (zero? (system* "sed" "-i" "-e"
+                             (string-append
+                              "s,\"mkisofs\","
+                              "\"" (which "mkisofs") "\",")
+                             "growisofs.c")))))))
+    (home-page "http://fy.chalmers.se/~appro/linux/DVD+RW/")
+    (synopsis "DVD and Blu-ray Disc burning tools")
+    (description "dvd+rw-tools, mostly known for its command
+@command{growisofs}, is a collection of DVD and Blu-ray Disc burning tools.
+It requires another program, such as @command{mkisofs}, @command{genisoimage},
+or @command{xorrisofs} to create ISO 9660 images.")
+    (license gpl2)))
+
 (define-public dvdisaster
   (package
     (name "dvdisaster")
@@ -238,6 +347,70 @@ depend on the file system of the medium.  The maximum error correction
 capacity is user-selectable.")
     (license gpl2+)))
 
+(define-public dvdstyler
+  (package
+    (name "dvdstyler")
+    (version "3.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/dvdstyler/dvdstyler/"
+                            version "/DVDStyler-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "1j432kszmwmsd3nz398h5514dbm5vsrn4rr3iil72ckjj1h3i00q"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list (string-append "XMLTO="
+                                              (assoc-ref %build-inputs "xmlto")
+                                              "/bin/xmlto"
+                                              " --searchpath "
+                                              (assoc-ref %build-inputs "docbook-xsl")
+                                              "/xml/xsl/docbook-xsl-1.79.1/htmlhelp:"
+                                              (assoc-ref %build-inputs "docbook-xml")
+                                              "/xml/dtd/docbook"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (wrap-program (string-append (assoc-ref outputs "out") "/bin/dvdstyler")
+               `("PATH" ":" prefix
+                 (,(string-join
+                    (map (lambda (in) (string-append (assoc-ref inputs in) "/bin"))
+                         '("cdrtools" "dvdauthor" "dvd+rw-tools" "ffmpeg"))
+                    ":"))))
+             #t)))
+       #:tests? #f)) ; No tests.
+    (inputs ; TODO package bundled wxvillalib
+     `(("wxwidgets" ,wxwidgets-3.1)
+       ("wssvg" ,wxsvg)
+       ("dbus" ,dbus)
+       ("cdrtools" ,cdrtools)
+       ("dvd+rw-tools" ,dvd+rw-tools)
+       ("dvdauthor" ,dvdauthor)
+       ("eudev" ,eudev)
+       ("fontconfig" ,fontconfig)
+       ("libexif" ,libexif)
+       ("libjpeg" ,libjpeg)
+       ("ffmpeg" ,ffmpeg)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("flex" ,flex)
+       ("python" ,python-2)
+       ("xmlto" ,xmlto)
+       ("gettext" ,gnu-gettext)
+       ("docbook-xml" ,docbook-xml)
+       ("docbook-xsl" ,docbook-xsl)
+       ("zip" ,zip)))
+    (synopsis "DVD authoring application")
+    (description "DVDStyler is a DVD authoring application which allows users
+to burn video files in many formats to DVD discs, complete with individually
+designed menus.  It can be used to create professional-looking DVD's with
+custom buttons, backgrounds and animations, from within a user-friendly
+graphical interface.")
+    (home-page "https://www.dvdstyler.org")
+    (license gpl2)))
+
 (define-public libcue
   (package
     (name "libcue")
index 372f1c4..ea91200 100644 (file)
@@ -6,6 +6,7 @@
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -180,13 +181,13 @@ format.")
 (define-public cppcheck
   (package
     (name "cppcheck")
-    (version "1.77")
+    (version "1.78")
     (source (origin
       (method url-fetch)
       (uri (string-append "https://github.com/danmar/cppcheck/archive/"
                           version ".tar.gz"))
       (sha256
-       (base32 "1fn26p0xvfrdbhxjhy6aqhkk63n3fvrdb2ygcn9wg4vaandhmbkn"))
+       (base32 "1dnizw0rfj6faqgnmg8qh6njr9q89j8brhba7qmx2i47vl0qj11i"))
       (file-name (string-append name "-" version ".tar.gz"))))
     (build-system cmake-build-system)
     (home-page "http://cppcheck.sourceforge.net")
index ae91464..c26d02f 100644 (file)
@@ -187,23 +187,28 @@ their dependencies.")
       (license l:gpl3+))))
 
 (define-public cuirass
-  (let ((commit "8c811abb3174b44601b8996a1fe1718f37d7bd14")
-        (revision "5"))
+  (let ((commit "870e8d6ad3415ac61c52e57095fcc6164023a0fc")
+        (revision "6"))
     (package
       (name "cuirass")
       (version (string-append "0.0.1-" revision "." (string-take commit 7)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
-                      (url "https://notabug.org/mthl/cuirass")
+                      (url "https://git.savannah.gnu.org/git/guix/guix-cuirass.git")
                       (commit commit)))
                 (file-name (string-append name "-" version))
                 (sha256
                  (base32
-                  "0kz2ys01xlmxagsfr9qf3p212vm31wfl76rvxa7ii5804aidlz5n"))))
+                  "0lp5a5p42k7lml15lbmmd7az9i0gw5kips3sh3awd2z79h0w2knw"))))
       (build-system gnu-build-system)
       (arguments
-       '(#:phases
+       '(#:modules ((guix build utils)
+                    (guix build gnu-build-system)
+                    (ice-9 rdelim)
+                    (ice-9 popen))
+
+         #:phases
          (modify-phases %standard-phases
            (add-after 'unpack 'disable-repo-tests
              (λ _
@@ -221,9 +226,17 @@ their dependencies.")
                       (sqlite (assoc-ref inputs "guile-sqlite3"))
                       (git    (assoc-ref inputs "git"))
                       (guix   (assoc-ref inputs "guix"))
-                      (mods   (string-append json "/share/guile/site/2.0:"
-                                             sqlite "/share/guile/site/2.0:"
-                                             guix "/share/guile/site/2.0")))
+                      (guile  (assoc-ref %build-inputs "guile"))
+                      (effective (read-line
+                                  (open-pipe* OPEN_READ
+                                              (string-append guile "/bin/guile")
+                                              "-c" "(display (effective-version))")))
+                      (mods   (string-append json "/share/guile/site/"
+                                             effective ":"
+                                             sqlite "/share/guile/site/"
+                                             effective ":"
+                                             guix "/share/guile/site/"
+                                             effective)))
                  ;; Make sure 'cuirass' can find the 'git' and 'evaluate'
                  ;; commands, as well as the relevant Guile modules.
                  (wrap-program (string-append out "/bin/cuirass")
@@ -233,7 +246,7 @@ their dependencies.")
                    `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,mods)))
                  #t))))))
       (inputs
-       `(("guile" ,guile-2.0)
+       `(("guile" ,guile-2.2)
          ("guile-json" ,guile-json)
          ("guile-sqlite3" ,guile-sqlite3)
          ("guix" ,guix)
@@ -247,5 +260,5 @@ their dependencies.")
       (description
        "Cuirass is a continuous integration tool using GNU Guix.  It is
 intended as a replacement for Hydra.")
-      (home-page "https://notabug.org/mthl/cuirass")
+      (home-page "https://www.gnu.org/software/guix/")
       (license l:gpl3+))))
index 4fa34c9..1b41fea 100644 (file)
@@ -1025,4 +1025,7 @@ and binaries, plus debugging symbols in the 'debug' output), and Binutils.")
 (define-public gcc-toolchain-6
   (gcc-toolchain gcc-6))
 
+(define-public gcc-toolchain-7
+  (gcc-toolchain gcc-7))
+
 ;;; commencement.scm ends here
index 4793755..11db2a6 100644 (file)
@@ -611,7 +611,7 @@ decompression of some loosely related file formats used by Microsoft.")
     (synopsis "Low-level interface to bzip2 compression library")
     (description "This module provides a Perl interface to the bzip2
 compression library.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-compress-raw-zlib
   (package
@@ -646,7 +646,7 @@ GZIP_OS_CODE = AUTO_DETECT"
     (synopsis "Low-level interface to zlib compression library")
     (description "This module provides a Perl interface to the zlib
 compression library.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-io-compress
   (package
@@ -668,7 +668,7 @@ compression library.")
     (synopsis "IO Interface to compressed files/buffers")
     (description "IO-Compress provides a Perl interface to allow reading and
 writing of compressed data created with the zlib and bzip2 libraries.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public lz4
   (package
@@ -1180,7 +1180,7 @@ RAR archives.")
 (define-public zstd
   (package
     (name "zstd")
-    (version "1.1.4")
+    (version "1.2.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/facebook/zstd/archive/v"
@@ -1188,7 +1188,7 @@ RAR archives.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1yxr1y83gphljxaqhwvxbldy1ivx81x93rngiv5l94rmdrc2pbka"))
+                "1yyb8z03z9rw74k1d9dygcqxhx76717xq29agz57d0k3lf9lazja"))
               (modules '((guix build utils)))
               (snippet
                ;; Remove non-free source files.
index 5e00ffb..b3d62d6 100644 (file)
@@ -41,7 +41,7 @@
 (define-public connman
   (package
     (name "connman")
-    (version "1.33")
+    (version "1.34")
     (source
       (origin
         (method url-fetch)
@@ -49,7 +49,7 @@
                             name "-" version ".tar.xz"))
     (sha256
      (base32
-      "187mknq2i907gf8dz0i79359gn1qc9mryvqkcgb280d7dw1ld2dw"))))
+      "07n71wcy1c4cc01ca4dl9k1jpdqr5nsyr33dqf7k87wwfa681859"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
index 900b004..9df26ed 100644 (file)
@@ -32,7 +32,7 @@
 (define-public cryptsetup
   (package
    (name "cryptsetup")
-   (version "1.7.4")
+   (version "1.7.5")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/linux/utils/cryptsetup/v"
@@ -40,7 +40,7 @@
                                 "/" name "-" version ".tar.xz"))
             (sha256
              (base32
-              "05m0ric8anrkl62smk8rafgi30j9jrxw20qzss9gnf4sywz8kkvw"))))
+              "1gail831j826lmpdx2gsc83lp3br6wfnwh3vqwxaa1nn1lfwsc1b"))))
    (build-system gnu-build-system)
    (inputs
     `(("libgcrypt" ,libgcrypt)
@@ -81,8 +81,8 @@ files).  This assumes LIBRARY uses Libtool."
      '(#:configure-flags '("--disable-shared"
                            "--enable-static-cryptsetup"
 
-                           ;; 'libdevmapper.a' pulls in libpthread and libudev.
-                           "LIBS=-ludev -pthread")
+                           ;; 'libdevmapper.a' pulls in libpthread, libudev and libm.
+                           "LIBS=-ludev -pthread -lm")
 
        #:allowed-references ()                  ;this should be self-contained
 
index bbdd89e..accfe41 100644 (file)
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2017 Mark H Weaver <mhw@netris.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -44,9 +45,8 @@
 ;; Delay to avoid module circularity problems.
 (define ghostscript/cups
   (delay
-    (package (inherit ghostscript)
+    (package/inherit ghostscript
       (name "ghostscript-with-cups")
-      (replacement #f)
       (inputs `(("cups" ,cups-minimal)
                 ,@(package-inputs ghostscript))))))
 
index cc08994..26706b8 100644 (file)
@@ -372,7 +372,7 @@ Language.")
 (define-public mariadb
   (package
     (name "mariadb")
-    (version "10.1.22")
+    (version "10.1.23")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://downloads.mariadb.org/f/"
@@ -380,11 +380,20 @@ Language.")
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1kk674mx2bf22yivvzv1al5gdg9kyxar47m282bylb6kg8p5gc5w"))))
+                "1gq08dj9skr0gli1nj7a8wl92w8lmmqy0sbxvkmy79dz4i713n2l"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
        '("-DBUILD_CONFIG=mysql_release"
+         ;; Linking with libarchive fails, like this:
+
+         ;; ld: /gnu/store/...-libarchive-3.2.2/lib/libarchive.a(archive_entry.o):
+         ;; relocation R_X86_64_32 against `.bss' can not be used when
+         ;; making a shared object; recompile with -fPIC
+
+         ;; For now, disable the features that that use libarchive (xtrabackup).
+         "-DWITH_LIBARCHIVE=OFF"
+
          "-DDEFAULT_CHARSET=utf8"
          "-DDEFAULT_COLLATION=utf8_general_ci"
          "-DMYSQL_DATADIR=/var/lib/mysql"
@@ -440,14 +449,14 @@ as a drop-in replacement of MySQL.")
 (define-public postgresql
   (package
     (name "postgresql")
-    (version "9.6.2")
+    (version "9.6.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://ftp.postgresql.org/pub/source/v"
                                   version "/postgresql-" version ".tar.bz2"))
               (sha256
                (base32
-                "1jahzqqw5inyvmacic2ihhj5f8z50lapci2fwws91h719ccbb1q1"))))
+                "1imrjp4vfslxj5rrvphcrrk21zv8kqw3gacmwradixh1d5rv6i8n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -577,9 +586,15 @@ types are supported, as is encryption.")
                   #t))))
     (build-system gnu-build-system)
     (arguments
-     '(#:make-flags (list "CC=gcc"
+     `(#:make-flags (list "CC=gcc"
                           (string-append "INSTALL_PATH="
                                          (assoc-ref %outputs "out")))
+       ;; Many tests fail on 32-bit platforms. There are multiple reports about
+       ;; this upstream, but it's not going to be supported any time soon.
+       #:tests? (let ((system ,(or (%current-target-system)
+                                   (%current-system))))
+                  (or (string-prefix? "x86_64-linux" system)
+                      (string-prefix? "aarch64-linux" system)))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-Makefile
@@ -592,6 +607,13 @@ types are supported, as is encryption.")
                (("#!/bin/sh") (string-append "#!" (which "sh"))))
              #t))
          (delete 'configure)
+         ;; The default target is only needed for tests and built on demand.
+         (delete 'build)
+         (add-before 'check 'disable-optimizations
+           (lambda _
+             ;; Prevent the build from passing '-march=native' to the compiler.
+             (setenv "PORTABLE" "1")
+             #t))
          (add-before 'check 'disable-failing-tests
            (lambda _
              (substitute* "Makefile"
@@ -608,8 +630,6 @@ types are supported, as is encryption.")
            ;; targets for release builds so we build them here for clarity.
            ;; TODO: Add debug output.
            (lambda* (#:key (make-flags '()) #:allow-other-keys)
-             ;; Prevent the build from adding machine-specific optimizations.
-             (setenv "PORTABLE" "1")
              (zero? (apply system* "make" "shared_lib" make-flags)))))))
     (native-inputs
      `(("parallel" ,parallel)
@@ -790,7 +810,7 @@ extremely small.")
     (synopsis "Database independent interface for Perl")
     (description "This package provides an database interface for Perl.")
     (home-page "http://search.cpan.org/dist/DBI")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class
   (package
@@ -844,7 +864,7 @@ still providing access to as many of the capabilities of the database as
 possible, including retrieving related records from multiple tables in a
 single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
 \"ORDER BY\" and \"HAVING\" support.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class-cursor-cached
   (package
@@ -869,7 +889,7 @@ single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
     (synopsis "Cursor with built-in caching support")
     (description "DBIx::Class::Cursor::Cached provides a cursor class with
 built-in caching support.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class-introspectablem2m
   (package
@@ -894,7 +914,7 @@ relationships are actually just a collection of convenience methods installed
 to bridge two relationships.  This DBIx::Class component can be used to store
 all relevant information about these non-relationships so they can later be
 introspected and examined.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class-schema-loader
   (package
@@ -949,7 +969,7 @@ introspected and examined.")
     (description "DBIx::Class::Schema::Loader automates the definition of a
 DBIx::Class::Schema by scanning database table definitions and setting up the
 columns, primary keys, unique constraints and relationships.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbd-pg
   (package
@@ -973,7 +993,7 @@ columns, primary keys, unique constraints and relationships.")
     (synopsis "DBI PostgreSQL interface")
     (description "This package provides a PostgreSQL driver for the Perl5
 @dfn{Database Interface} (DBI).")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbd-mysql
   (package
@@ -997,7 +1017,7 @@ columns, primary keys, unique constraints and relationships.")
     (synopsis "DBI MySQL interface")
     (description "This package provides a MySQL driver for the Perl5
 @dfn{Database Interface} (DBI).")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbd-sqlite
   (package
@@ -1019,7 +1039,7 @@ columns, primary keys, unique constraints and relationships.")
 the entire thing in the distribution.  So in order to get a fast transaction
 capable RDBMS working for your Perl project you simply have to install this
 module, and nothing else.")
-    (license (package-license perl))
+    (license license:perl-license)
     (home-page "http://search.cpan.org/~ishigaki/DBD-SQLite/lib/DBD/SQLite.pm")))
 
 (define-public perl-sql-abstract
@@ -1052,7 +1072,7 @@ been modified to make the SQL easier to generate from Perl data structures.
 The underlying idea is for this module to do what you mean, based on the data
 structures you provide it, so that you don't have to modify your code every
 time your data changes.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-sql-splitstatement
   (package
@@ -1078,7 +1098,7 @@ time your data changes.")
     (synopsis "Split SQL code into atomic statements")
     (description "This module tries to split any SQL code, even including
 non-standard extensions, into the atomic statements it is composed of.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-sql-tokenizer
   (package
@@ -1098,7 +1118,7 @@ non-standard extensions, into the atomic statements it is composed of.")
     (description "SQL::Tokenizer is a tokenizer for SQL queries.  It does not
 claim to be a parser or query verifier.  It just creates sane tokens from a
 valid SQL query.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public unixodbc
   (package
@@ -1301,7 +1321,7 @@ trees (LSM), for sustained throughput under random insert workloads.")
     "Perl5 access to Berkeley DB version 1.x")
   (description
     "The DB::File module provides Perl bindings to the Berkeley DB version 1.x.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public lmdb
   (package
diff --git a/gnu/packages/direct-connect.scm b/gnu/packages/direct-connect.scm
new file mode 100644 (file)
index 0000000..6796bf3
--- /dev/null
@@ -0,0 +1,82 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.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 direct-connect)
+  #:use-module (guix build-system python)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (gnu packages boost)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages gettext)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages version-control))
+
+(define-public linuxdcpp
+  (package
+    (name "linuxdcpp")
+    (version "1.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://launchpad.net/linuxdcpp/1.1/1.1.0/+download/linuxdcpp-"
+             version ".tar.bz2"))
+       (sha256
+        (base32
+         "12i92hirmwryl1qy0n3jfrpziwzb82f61xca9jcjwyilx502f0b6"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2
+       #:tests? #f ; no tests
+       #:phases
+       ;; TODO: Add scons-build-system and use it here.
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (replace 'build
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (mkdir-p out)
+               (zero? (system* "scons" (string-append "PREFIX=" out)
+                               "-j" (number->string (parallel-job-count)))))))
+         (replace 'install
+           (lambda _
+             (zero? (system* "scons" "install")))))))
+    (inputs
+     `(("boost" ,boost)
+       ("bzip2" ,bzip2)
+       ("gtk+" ,gtk+-2)
+       ("libglade" ,libglade)
+       ("libnotify" ,libnotify)
+       ("openssl" ,openssl)))
+    (native-inputs
+     `(("bazaar" ,bazaar)
+       ("gettext-minimal" ,gettext-minimal)
+       ("pkg-config" ,pkg-config)
+       ("scons" ,scons)))
+    (home-page "https://launchpad.net/linuxdcpp/")
+    (synopsis "Direct Connect client")
+    (description "LinuxDC++ is a Direct Connect (DC) client.  Direct Connect
+is a peer-to-peer file-sharing protocol.  Clients connect to a central hub
+where they can chat or share files with one another.  Users can view other
+users' list of shared files or search the hub for files.")
+    (license license:gpl2+)))
index 9389527..a087141 100644 (file)
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -337,3 +338,46 @@ project to detect and manipulate partition tables.  Optional file system tools
 permit managing file systems not included in libparted.")
     ;; The home page says GPLv2, but the source code says GPLv2+.
     (license license:gpl2+)))
+
+
+(define-public f3
+  (package
+    (name "f3")
+    (version "6.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "https://github.com/AltraMayor/f3/archive/"
+                          "v" version ".tar.gz"))
+      (file-name (string-append name "-" version ".tar.gz"))
+      (sha256
+       (base32
+        "1mgbzc1swvgil45md1336j0aqkmkhwmpxical0ln5g09b2qxsanp"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f ; no check target
+       #:make-flags (list "CC=gcc"
+                          (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-before 'build 'fix-makefile
+           (lambda _
+             (substitute* "Makefile"
+               ;; Install without setting owner and group
+               (("\\$\\(INSTALL\\) -oroot -groot ") "$(INSTALL) ")
+               ;; also build and install experimental tools
+               (("^all: ") "all: $(EXPERIMENTAL_TARGETS) ")
+               (("^install: ") "install-all: ")
+               (("^install-experimental: ") "install: install-all "))
+             #t)))))
+    (inputs
+     `(("eudev" ,eudev)
+       ("parted" ,parted)))
+    (home-page "http://oss.digirati.com.br/f3/")
+    (synopsis "Test real capacity of flash memory cards and such.")
+    (description "F3 (Fight Flash Fraud or Fight Fake Flash) tests the full
+capacity of a flash card (flash drive, flash disk, pendrive).  F3 writes to
+the card and then checks if can read it.  It will assure you haven't been sold
+a card with a smaller capacity than stated.")
+    (license license:gpl3+)))
index 0a70fd7..869d623 100644 (file)
@@ -2,6 +2,8 @@
 ;;; Copyright © 2013 Joshua Grant <tadni@riseup.net>
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Andreas Enge <andreas@enge.fr>
+;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017 Sou Bunnbu <iyzsong@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
   #:use-module (guix packages)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages kde-frameworks)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages xdisorg)
+  #:use-module (gnu packages xfce)
   #:use-module (gnu packages xorg))
 
 (define-public greenisland
@@ -186,6 +195,107 @@ create smooth, animated user interfaces.")
     ;; QML files are MIT licensed and images are CC BY 3.0.
     (license (list license:gpl2+ license:expat license:cc-by3.0))))
 
+(define-public lightdm
+  (package
+    (name "lightdm")
+    (version "1.22.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://launchpad.net/lightdm/"
+                                  (version-major+minor version) "/"
+                                  version "/+download/lightdm-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "0a5bvfl2h7r873al6q7c819h0kg564k9fh51rl6489z6lyvazfg4"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:parallel-tests? #f ; fails when run in parallel
+       #:configure-flags
+       (list "--localstatedir=/var")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-paths
+           (lambda _
+             (substitute* "src/shared-data-manager.c"
+               (("/bin/rm") (which "rm")))
+             (substitute* '("data/users.conf"
+                            "common/user-list.c")
+               (("/bin/false") (which "false"))
+               (("/usr/sbin/nologin") (which "nologin")))
+             (substitute* "src/seat.c"
+               (("/bin/sh") (which "sh")))
+             #t))
+         (add-after 'unpack 'disable-broken-tests
+           (lambda _
+             (substitute* "tests/Makefile.in"
+               (("test-sessions-gobject ") "")
+               ((" test-sessions-python ") " "))
+             #t))
+         (add-before 'check 'pre-check
+           ;; Run test-suite under a dbus session.
+           (lambda* (#:key inputs #:allow-other-keys)
+             (wrap-program "tests/src/test-python-greeter"
+               `("PYTHONPATH"      ":" prefix (,(getenv "PYTHONPATH")))
+               `("GI_TYPELIB_PATH" ":" prefix (,(getenv "GI_TYPELIB_PATH"))))
+
+             ;; Avoid printing locale warnings, which trip up the text
+             ;; matching tests.
+             (unsetenv "LC_ALL")
+             #t)))))
+    (inputs
+     `(("audit" ,audit)
+       ("linux-pam" ,linux-pam)
+       ("util-linux" ,util-linux) ; for sbin/nologin
+       ("libgcrypt" ,libgcrypt)
+       ("libxcb" ,libxcb)))
+    (native-inputs
+     `(("gobject-introspection" ,gobject-introspection)
+       ("pkg-config" ,pkg-config)
+       ("itstool" ,itstool)
+       ("intltool" ,intltool)
+       ;; For tests
+       ("dbus" ,dbus)
+       ("python" ,python-2)
+       ("python-pygobject" ,python2-pygobject)))
+    ;; Required by liblightdm-gobject-1.pc.
+    (propagated-inputs
+     `(("glib" ,glib)
+       ("libx11" ,libx11)
+       ("libxklavier" ,libxklavier)))
+    (home-page "https://www.freedesktop.org/wiki/Software/LightDM/")
+    (synopsis "Lightweight display manager")
+    (description "The Light Display Manager (LightDM) is a cross-desktop
+display manager which supports different greeters.")
+    (license license:gpl3+)))
+
+(define-public lightdm-gtk-greeter
+  (package
+    (name "lightdm-gtk-greeter")
+    (version "2.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://launchpad.net/lightdm-gtk-greeter/"
+                    (version-major+minor version) "/" version
+                    "/+download/lightdm-gtk-greeter-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1436sdm83xqhxyr1rzqxhsl8if2xmidlvb341xcv6dv83lyxkrlf"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("exo" ,exo)
+       ("intltool" ,intltool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("lightdm" ,lightdm)
+       ("gtk+" ,gtk+)))
+    (synopsis "GTK+ greeter for LightDM")
+    (home-page "https://launchpad.net/lightdm-gtk-greeter")
+    (description "This package provides a LightDM greeter implementation using
+GTK+, lets you select a desktop session and log in to it.")
+    (license license:gpl3+)))
+
 (define-public slim
   (package
     (name "slim")
index 2038473..356586e 100644 (file)
@@ -25,6 +25,7 @@
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages python))
 
 (define-public python-django
@@ -128,13 +129,13 @@ with arguments to the field constructor.")
 (define-public python-pytest-django
   (package
     (name "python-pytest-django")
-    (version "2.9.1")
+    (version "3.1.2")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "pytest-django" version))
               (sha256
                (base32
-                "1mmc7zsz3dlhs6sx4sppkj1vgshabi362r1a8b8wpj1qfximpqcb"))))
+                "02932m2sr8x22m4az8syr8g835g4ak77varrnw71n6xakmdcr303"))))
     (build-system python-build-system)
     (arguments
      `(#:tests? #f ; FIXME: How to run tests?
@@ -143,7 +144,7 @@ with arguments to the field constructor.")
          (add-after 'unpack 'patch-setuppy
            (lambda _
              (substitute* "setup.py"
-                          (("setuptools_scm==1.8.0") "setuptools_scm"))
+                          (("setuptools_scm==1.11.1") "setuptools_scm"))
              #t)))))
     (native-inputs
      `(("python-django" ,python-django)
@@ -245,3 +246,451 @@ templatetags and a full test suite.")
 
 (define-public python2-django-gravatar2
   (package-with-python2 python-django-gravatar2))
+
+(define-public python-django-assets
+  (package
+    (name "python-django-assets")
+    (version "0.12")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-assets" version))
+              (sha256
+               (base32
+                "0y0007fvkn1rdlj2g0y6k1cnkx53kxab3g8i85i0rd58k335p365"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-tests
+           (lambda _
+             (begin
+               ;; https://github.com/miracle2k/django-assets/issues/87
+               (substitute* "tests/__init__.py"
+                 (("settings.configure.*")
+                  (string-append
+                    "settings.configure(\n"
+                    "INSTALLED_APPS=['django_assets', "
+                    "'django.contrib.staticfiles'],\n"
+                    "TEMPLATES=[{'BACKEND': "
+                    "'django.template.backends.django.DjangoTemplates'}],\n"
+                    ")\n")))
+              ;; These tests fail
+              (substitute* "tests/test_django.py"
+                (("TestLoader") "NoTestLoader"))))))))
+    (native-inputs
+     `(("python-nose" ,python-nose)))
+    (propagated-inputs
+     `(("python-django" ,python-django)
+       ("python-webassets" ,python-webassets)))
+    (home-page "https://github.com/miracle2k/django-assets")
+    (synopsis "Asset management for Django")
+    (description
+      "Asset management for Django, to compress and merge CSS and Javascript
+files.  Integrates the webassets library with Django, adding support for
+merging, minifying and compiling CSS and Javascript files.")
+    (license license:bsd-2)))
+
+(define-public python2-django-assets
+  (package-with-python2 python-django-assets))
+
+(define-public python-django-jsonfield
+  (package
+    (name "python-django-jsonfield")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "jsonfield" version))
+              (sha256
+               (base32
+                "19x4lak0hg9c20r7mvf27w7i8r6i4sg2g0ypmlmp2665fnk76zvy"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'check 'fix-tests
+           (lambda _
+             (substitute* "jsonfield/tests.py"
+               (("django.forms.util") "django.forms.utils")))))))
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (home-page "https://github.com/bradjasper/django-jsonfield")
+    (synopsis "Store validated JSON in your model")
+    (description
+      "Django-jsonfield is a reusable Django field that allows you to store
+validated JSON in your model.  It silently takes care of serialization.  To
+use, simply add the field to one of your models.")
+    (license license:expat)))
+
+(define-public python2-django-jsonfield
+  (package-with-python2 python-django-jsonfield))
+
+(define-public python-dj-database-url
+  (package
+    (name "python-dj-database-url")
+    (version "0.4.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "dj-database-url" version))
+              (sha256
+               (base32
+                "024zbkc5rli4hia9lz9g8kf1zxhb2gwawj5abf67i7gf8n22v0x6"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/kennethreitz/dj-database-url")
+    (synopsis "Use Database URLs in your Django Application")
+    (description
+      "This simple Django utility allows you to utilize the 12factor inspired
+DATABASE_URL environment variable to configure your Django application.
+
+The dj_database_url.config method returns a Django database connection
+dictionary, populated with all the data specified in your URL.  There is also a
+conn_max_age argument to easily enable Django’s connection pool.")
+    (license license:bsd-2)))
+
+(define-public python2-dj-database-url
+  (package-with-python2 python-dj-database-url))
+
+(define-public python-django-bulk-update
+  (package
+    (name "python-django-bulk-update")
+    (version "1.1.10")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-bulk-update" version))
+              (sha256
+               (base32
+                "0mbng9m7swfc0dnidipbzlxfhlfjrv755dlnha5s4m9mgdxb1fhc"))))
+    (build-system python-build-system)
+    (arguments
+     ;; tests don't support django 1.10, but the module seems to work.
+     `(#:tests? #f))
+    (native-inputs
+     `(("six" ,python-six)
+       ("jsonfield" ,python-django-jsonfield)
+       ("python-dj-database-url" ,python-dj-database-url)))
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (home-page "https://github.com/aykut/django-bulk-update")
+    (synopsis "Simple bulk update over Django ORM or with helper function")
+    (description
+      "Simple bulk update over Django ORM or with helper function.  This
+project aims to bulk update given objects using one query over Django ORM.")
+    (license license:expat)))
+
+(define-public python2-django-bulk-update
+  (package-with-python2 python-django-bulk-update))
+
+(define-public python-django-contact-form
+  (package
+    (name "python-django-contact-form")
+    (version "1.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-contact-form" version))
+              (sha256
+               (base32
+                "0az590y56k5ahv4sixrkn54d3a8ig2q2z9pl6s3m4f533mx2gj17"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             ;; the next version will need "make test"
+             (and (zero? (system* "flake8" "contact_form"))
+                  (zero? (system* "coverage" "run" "contact_form/runtests.py"))
+                  (zero? (system* "coverage" "report" "-m" "--fail-under" "0"))))))))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-flake8" ,python-flake8)))
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (home-page "https://github.com/ubernostrum/django-contact-form")
+    (synopsis "Contact form for Django")
+    (description
+      "This application provides simple, extensible contact-form functionality
+for Django sites.")
+    (license license:bsd-3)))
+
+(define-public python2-django-contact-form
+  (package-with-python2 python-django-contact-form))
+
+(define-public python-django-contrib-comments
+  (package
+    (name "python-django-contrib-comments")
+    (version "1.8.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-contrib-comments" version))
+              (sha256
+               (base32
+                "0bxsgw8jrkhg6r5s0z6ksfi4w8yknaqb1s9acmxd9pm3pnsnp5kx"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (home-page "https://github.com/django/django-contrib-comments")
+    (synopsis "Comments framework")
+    (description
+      "Django used to include a comments framework; since Django 1.6 it's been
+separated to a separate project.  This is that project.  This framework can be
+used to attach comments to any model, so you can use it for comments on blog
+entries, photos, book chapters, or anything else.")
+    (license license:bsd-3)))
+
+(define-public python2-django-contrib-comments
+  (package-with-python2 python-django-contrib-comments))
+
+(define-public python-django-overextends
+  (package
+    (name "python-django-overextends")
+    (version "0.4.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-overextends" version))
+              (sha256
+               (base32
+                "0qc2pcf3i56pmfxh2jw7k3pgljd8xzficmkl2541n7bkcbngqfzm"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (zero? (system* "./test_project/manage.py" "test")))))))
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (native-inputs
+     `(("sphinx-me" ,python-sphinx-me)))
+    (home-page "https://github.com/stephenmcd/django-overextends")
+    (synopsis "Circular template inheritance")
+    (description
+      "A Django reusable app providing the overextends template tag, a drop-in
+replacement for Django's extends tag, which allows you to use circular template
+inheritance.  The primary use-case for overextends is to simultaneously
+override and extend templates from other reusable apps, in your own Django
+project.")
+    (license license:bsd-2)))
+
+(define-public python2-django-overextends
+  (package-with-python2 python-django-overextends))
+
+(define-public python-django-redis
+  (package
+    (name "python-django-redis")
+    (version "4.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-redis" version))
+              (sha256
+               (base32
+                "0yyyxv8n9l9dhs893jsqwg2cxqkkc79g719n9dzzzqgkzialv1c1"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (and (zero? (system* "redis-server" "--daemonize" "yes"))
+                  (with-directory-excursion "tests"
+                    (zero? (system* "python" "runtests.py")))))))))
+    (native-inputs
+     `(("python-fakeredis" ,python-fakeredis)
+       ("python-hiredis" ,python-hiredis)
+       ("python-mock" ,python-mock)
+       ("python-msgpack" ,python-msgpack)
+       ("redis" ,redis)))
+    (propagated-inputs
+     `(("python-django" ,python-django)
+       ("python-redis" ,python-redis)))
+    (home-page "https://github.com/niwibe/django-redis")
+    (synopsis "Full featured redis cache backend for Django")
+    (description
+      "Full featured redis cache backend for Django.")
+    (license license:bsd-3)))
+
+(define-public python2-django-redis
+  (package-with-python2 python-django-redis))
+
+(define-public python-django-rq
+  (package
+    (name "python-django-rq")
+    (version "0.9.4")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-rq" version))
+              (sha256
+               (base32
+                "04v8ilfdp10bk31fxgh4cn083gsn5m06342cnpm5d10nd8hc0vky"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (and (zero? (system* "redis-server" "--daemonize" "yes"))
+                  (zero? (system* "django-admin.py" "test" "django_rq"
+                                  "--settings=django_rq.test_settings"
+                                  "--pythonpath="))))))))
+    (native-inputs
+     `(("redis" ,redis)))
+    (propagated-inputs
+     `(("python-django" ,python-django)
+       ("python-rq" ,python-rq)))
+    (home-page "https://github.com/ui/django-rq")
+    (synopsis "Django integration with RQ")
+    (description
+      "Django integration with RQ, a Redis based Python queuing library.
+Django-RQ is a simple app that allows you to configure your queues in django's
+settings.py and easily use them in your project.")
+    (license license:expat)))
+
+(define-public python2-django-rq
+  (package-with-python2 python-django-rq))
+
+(define-public python-django-sortedm2m
+  (package
+    (name "python-django-sortedm2m")
+    (version "1.3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-sortedm2m" version))
+              (sha256
+               (base32
+                "0axf765i7b3c2s83nlph47asi8s071dhq8l7y382v1pw785s22vi"))))
+    (build-system python-build-system)
+    (arguments
+     ;; no tests.
+     `(#:tests? #f))
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (home-page "https://github.com/gregmuellegger/django-sortedm2m")
+    (synopsis "Drop-in replacement for django's own ManyToManyField")
+    (description
+      "Sortedm2m is a drop-in replacement for django's own ManyToManyField.
+The provided SortedManyToManyField behaves like the original one but remembers
+the order of added relations.")
+    (license license:bsd-3)))
+
+(define-public python2-django-sortedm2m
+  (package-with-python2 python-django-sortedm2m))
+
+(define-public python-django-appconf
+  (package
+    (name "python-django-appconf")
+    (version "1.0.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-appconf" version))
+              (sha256
+               (base32
+                "0qdjdx35g66xjsc50v0c5h3kg6njs8df33mbjx6j4k1vd3m9lkba"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-django" ,python-django)))
+    (home-page "https://github.com/django-compressor/django-appconf")
+    (synopsis "Handle configuration defaults of packaged Django apps")
+    (description
+      "This app precedes Django's own AppConfig classes that act as \"objects
+[to] store metadata for an application\" inside Django's app loading mechanism.
+In other words, they solve a related but different use case than
+django-appconf and can't easily be used as a replacement.  The similarity in
+name is purely coincidental.")
+    (license license:bsd-3)))
+
+(define-public python2-django-appconf
+  (package-with-python2 python-django-appconf))
+
+(define-public python-django-statici18n
+  (package
+    (name "python-django-statici18n")
+    (version "1.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "django-statici18n" version))
+              (sha256
+               (base32
+                "0alcf4g1nv69njhq5k3qw4mfl2k6dc18bik5nk0g1mnp3m8zyz7k"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-django" ,python-django)
+       ("django-appconf" ,python-django-appconf)))
+    (home-page "https://github.com/zyegfryed/django-statici18n")
+    (synopsis "Generate JavaScript catalog to static files")
+    (description
+      "A Django app that provides helper for generating JavaScript catalog to
+static files.")
+    (license license:bsd-3)))
+
+(define-public python2-django-statici18n
+  (package-with-python2 python-django-statici18n))
+
+(define-public pootle
+  (package
+    (name "pootle")
+    (version "2.8.0rc5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "Pootle" version ".tar.bz2"))
+        (sha256
+         (base32
+          "0m6qcpkcy22dk3ad5y2k8851kqg2w6vrkywgy4vabwbacd7r1mvn"))))
+    (build-system python-build-system)
+    (arguments
+     `(; pootle supports only python2.
+       #:python ,python-2
+       ;; tests are not run and fail with "pytest_pootle/data/po/.tmp: No such
+       ;; file or directory". If we create this directory,
+       ;; pytest_pootle/data/po/terminology.po is missing.
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'fix-requirements
+           (lambda _
+             (substitute* "Pootle.egg-info/requires.txt"
+               (("1.7.3") "1.8.0")
+               (("2.0.0") "2.1.0"))
+             (substitute* "requirements/tests.txt"
+               (("==3.0.6") ">=3.0.6"))
+             (substitute* "requirements/base.txt"
+               (("1.7.3") "1.8.0")
+               (("2.0.0") "2.1.0")))))))
+    (propagated-inputs
+     `(("django-allauth" ,python2-django-allauth)
+       ("django-assets" ,python2-django-assets)
+       ("django-bulk-update" ,python2-django-bulk-update)
+       ("django-contact-form" ,python2-django-contact-form)
+       ("django-contrib-comments" ,python2-django-contrib-comments)
+       ("django-overextends" ,python2-django-overextends)
+       ("django-redis" ,python2-django-redis)
+       ("django-rq" ,python2-django-rq)
+       ("django-sortedm2m" ,python2-django-sortedm2m)
+       ("django-statici18n" ,python2-django-statici18n)
+       ("babel" ,python2-babel)
+       ("cssmin" ,python2-cssmin)
+       ("diff-match-patch" ,python2-diff-match-patch)
+       ("dirsync" ,python2-dirsync)
+       ("elasticsearch" ,python2-elasticsearch)
+       ("jsonfield" ,python2-django-jsonfield)
+       ("lxml" ,python2-lxml)
+       ("dateutil" ,python2-dateutil)
+       ("levenshtein" ,python2-levenshtein)
+       ("mysqlclient" ,python2-mysqlclient)
+       ("psycopg2" ,python2-psycopg2)
+       ("pytz" ,python2-pytz)
+       ("rq" ,python2-rq)
+       ("scandir" ,python2-scandir)
+       ("stemming" ,python2-stemming)
+       ("translate-toolkit" ,python2-translate-toolkit)))
+    (native-inputs
+     `(("python2-pytest-warnings" ,python2-pytest-warnings)
+       ("python2-pytest-django" ,python2-pytest-django)
+       ("python2-pytest-catchlog" ,python2-pytest-catchlog)
+       ("python2-pytest-cov" ,python2-pytest-cov)
+       ("python2-factory-boy" ,python2-factory-boy)))
+    (home-page "http://pootle.translatehouse.org/")
+    (synopsis "Community localization server")
+    (description
+      "Pootle is an online translation and localization tool.  It works to
+lower the barrier of entry, providing tools to enable teams to work towards
+higher quality while welcoming newcomers.")
+    (license license:gpl3+)))
index c027956..1fb552d 100644 (file)
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
 ;;; Copyright © 2016, 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -90,7 +91,7 @@ and BOOTP/TFTP for network booting of diskless machines.")
 (define-public bind
   (package
     (name "bind")
-    (version "9.10.4-P8")
+    (version "9.11.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -98,7 +99,7 @@ and BOOTP/TFTP for network booting of diskless machines.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1sv6fp5gznjj1kmx9q8wr2c6js10wqckgy25sqj83bbf8smmdlvx"))))
+                "1chhphaa4lmfxj9daqsxph5ng4h3qq51jx21rj2i6an8ynah0192"))))
     (build-system gnu-build-system)
     (outputs `("out" "utils"))
     (inputs
@@ -149,12 +150,12 @@ high-volume and high-reliability applications. The name BIND stands for
 \"Berkeley Internet Name Domain\", because the software originated in the early
 1980s at the University of California at Berkeley.")
     (home-page "https://www.isc.org/downloads/bind")
-    (license (list license:isc))))
+    (license (list license:mpl2.0))))
 
 (define-public dnscrypt-proxy
   (package
     (name "dnscrypt-proxy")
-    (version "1.9.4")
+    (version "1.9.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -162,7 +163,7 @@ high-volume and high-reliability applications. The name BIND stands for
                     "dnscrypt-proxy-" version ".tar.bz2"))
               (sha256
                (base32
-                "07piwsjczamwvdpv1585kg4awqakip51bwsm8nqi6bljww4agx7x"))
+                "1dhvklr4dg2vlw108n11xbamacaryyg3dbrg629b76lp7685p7z8"))
               (modules '((guix build utils)))
               (snippet
                ;; Delete bundled libltdl. XXX: This package also bundles
index 8180f55..c81976a 100644 (file)
 (define-public elfutils
   (package
     (name "elfutils")
-    (version "0.168")
+    (version "0.169")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://sourceware.org/elfutils/ftp/"
                                   version "/elfutils-" version ".tar.bz2"))
               (sha256
                (base32
-                "0xn2fbgda1i703csfs35frvm7l068ybmay4ssrykqdx17f4hg3dq"))
+                "1hiv1yqig3292dwqhrwsxwk3qjalxp5fpl8yphwbfwh8ng3zl4ll"))
               (patches (search-patches "elfutils-tests-ptrace.patch"))))
     (build-system gnu-build-system)
 
index 4e430b3..7425b49 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016 Pjotr Prins <pjotr.public12@thebird.nl>
+;;; Copyright © 2016, 2017 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -30,7 +30,7 @@
 (define-public elixir
   (package
     (name "elixir")
-    (version "1.3.2")
+    (version "1.4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/elixir-lang/elixir"
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0jsc6kl7f74yszcypdv3w3vhyc9qfqav8nwc41in082m0vpfy95y"))
-              ;; FIXME: Some tests had to be disabled as they fail in the
-              ;; build environment.  Common failures are:
+                "0gsmgx4h6rvxilcbsx2z6yirm6g2g5bsxdvr0608ng4bsv22wknb"))
+              ;; FIXME: 27 tests (out of 4K) had to be disabled as
+              ;; they fail in the build environment.  Common failures
+              ;; are:
               ;; - Mix.Shell.cmd() fails with error 130
               ;; - The git_repo fixture cannot be found
               ;; - Communication with spawned processes fails with EPIPE
index 4d524ec..3d9e837 100644 (file)
@@ -7,7 +7,7 @@
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016, 2017 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
-;;; Copyright © 2016 humanitiesNerd <catonano@gmail.com>
+;;; Copyright © 2016 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
 ;;; Copyright © 2016 Matthew Jordan <matthewjordandevops@yandex.com>
@@ -92,7 +92,8 @@
   #:use-module (gnu packages gd)
   #:use-module (gnu packages fontutils)
   #:use-module (guix utils)
-  #:use-module (srfi srfi-1))
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match))
 
 (define-public emacs
   (package
@@ -890,14 +891,14 @@ provides an optional IDE-like error list.")
 (define-public emms
   (package
     (name "emacs-emms")
-    (version "4.2")
+    (version "4.3")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnu/emms/emms-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1xa9y64g5z8gfnxk1c2rf3plfjhqn4r6j8dpiygnfs6w4giysn22"))
+                "0dicgkl8l83n4cah5vk7c242abbwpyzlih451blgw37f3rijs480"))
               (modules '((guix build utils)))
               (snippet
                '(substitute* "Makefile"
@@ -1125,13 +1126,6 @@ than @code{electric-indent-mode}.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (add-before 'install 'patch-exec-paths
-           (lambda* (#:key inputs #:allow-other-keys)
-             (emacs-substitute-variables "ag.el"
-               ("ag-executable"
-                (string-append (assoc-ref inputs "the-silver-searcher")
-                               "/bin/ag")))
-             #t))
          (add-before 'install 'make-info
            (lambda _
              (with-directory-excursion "docs"
@@ -1142,14 +1136,14 @@ than @code{electric-indent-mode}.")
                     (info (string-append out "/share/info")))
                (install-file "docs/_build/texinfo/agel.info" info)
                #t))))))
-    (inputs
-     `(("the-silver-searcher" ,the-silver-searcher)))
     (native-inputs
      `(("python-sphinx" ,python-sphinx)
        ("texinfo" ,texinfo)))
     (propagated-inputs
      `(("dash" ,emacs-dash)
-       ("s" ,emacs-s)))
+       ("s" ,emacs-s)
+       ;; We need to use 'ag' as the executable on remote systems.
+       ("the-silver-searcher" ,the-silver-searcher)))
     (home-page "https://github.com/Wilfred/ag.el")
     (synopsis "Front-end for ag (the-silver-searcher) for Emacs")
     (description "This package provides the ability to use the silver
@@ -1406,7 +1400,7 @@ type, for example: packages, buffers, files, etc.")
 (define-public emacs-guix
   (package
     (name "emacs-guix")
-    (version "0.3")
+    (version "0.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/alezost/guix.el"
@@ -1414,7 +1408,7 @@ type, for example: packages, buffers, files, etc.")
                                   "/emacs-guix-" version ".tar.gz"))
               (sha256
                (base32
-                "1327zp140c7acckk0ajl88cgwr0lk9j3mb67nsq2janxrkwmj6br"))))
+                "0s7s90rfba8ccbilbvmbcwn4qp4m0jv9y58xq8avm39cygmjgyxz"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -1446,14 +1440,14 @@ type, for example: packages, buffers, files, etc.")
      `(("pkg-config" ,pkg-config)
        ("emacs" ,emacs-minimal)))
     (inputs
-     `(("guile" ,guile-2.0)
+     `(("guile" ,guile-2.2)
        ("guix" ,guix)))
     (propagated-inputs
      `(("geiser" ,geiser)
        ("dash" ,emacs-dash)
        ("bui" ,emacs-bui)
        ("magit-popup" ,emacs-magit-popup)))
-    (home-page "https://github.com/alezost/guix.el")
+    (home-page "https://alezost.github.io/guix.el/")
     (synopsis "Emacs interface for GNU Guix")
     (description
      "Emacs-Guix provides a visual interface, tools and features for the GNU
@@ -2584,7 +2578,7 @@ dark background.")
 (define-public emacs-smartparens
   (package
     (name "emacs-smartparens")
-    (version "1.9.0")
+    (version "1.10.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2593,7 +2587,7 @@ dark background.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "12065r7h1s9v8lnq5mk3654dkw4cq60ky8aniqq5n2ivv6qd2d4q"))))
+                "1nwsi6fbbxjq3r22r6knmx71la3g0lmwfb95i9q4k138gn0m2l3i"))))
     (build-system emacs-build-system)
     (propagated-inputs `(("emacs-dash" ,emacs-dash)))
     (home-page "https://github.com/Fuco1/smartparens")
@@ -2882,6 +2876,16 @@ S-expression.")
                (base32
                 "117mvjqh4nm8mvmwmmvy4qmkdg23ldlzk08y91g8b8ac8kxwqg81"))))
     (build-system emacs-build-system)
+    (native-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)
+       ("ert-runner" ,ert-runner)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'check
+           (lambda _
+             (zero? (system* "ert-runner")))))))
     (home-page "https://github.com/clojure-emacs/clojure-mode")
     (synopsis "Major mode for Clojure code")
     (description
@@ -3495,6 +3499,7 @@ extensions.")
        (method url-fetch)
        ;; There is no versioned source.
        (uri "https://www.emacswiki.org/emacs/download/goto-chg.el")
+       (file-name (string-append "goto-chg-" version ".el"))
        (sha256
         (base32
          "078d6p4br5vips7b9x4v6cy0wxf6m5ij9gpqd4g33bryn22gnpij"))))
@@ -3574,14 +3579,14 @@ passive voice.")
 (define-public emacs-org
   (package
     (name "emacs-org")
-    (version "20170210")
+    (version "20170502")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://elpa.gnu.org/packages/org-"
                                   version ".tar"))
               (sha256
                (base32
-                "15415wh3w8d4c8hd7qfrfdjnjb1zppmrkg8cdp7hw2ilyr90c0bn"))))
+                "12inz804j55ycprb2m3ay54d1bhwhjssmn5nrfm7cfklyhfsy27s"))))
     (build-system emacs-build-system)
     (home-page "http://orgmode.org/")
     (synopsis "Outline-based notes management and organizer")
@@ -4519,3 +4524,246 @@ It should enable you to implement low-level X11 applications.")
     (description "EXWM is a full-featured tiling X window manager for Emacs
 built on top of XELB.")
     (license license:gpl3+)))
+
+(define-public emacs-gnuplot
+  (package
+    (name "emacs-gnuplot")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/bruceravel/gnuplot-mode/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0glzymrn138lwig7p4cj17x4if5jisr6l4g6wcbxisqkqgc1h01i"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("emacs" ,emacs-minimal)))
+    (arguments
+     (let ((elisp-dir (string-append "/share/emacs/site-lisp/guix.d"
+                                     "/gnuplot-" version)))
+       `(#:modules ((guix build gnu-build-system)
+                    (guix build utils)
+                    (guix build emacs-utils))
+         #:imported-modules (,@%gnu-build-system-modules
+                             (guix build emacs-utils))
+         #:configure-flags
+         (list (string-append "EMACS=" (assoc-ref %build-inputs "emacs")
+                              "/bin/emacs")
+               (string-append "--with-lispdir=" %output ,elisp-dir))
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'generate-autoloads
+             (lambda* (#:key outputs #:allow-other-keys)
+               (emacs-generate-autoloads
+                "gnuplot"
+                (string-append (assoc-ref outputs "out") ,elisp-dir))
+               #t))))))
+    (home-page "https://github.com/bruceravel/gnuplot-mode")
+    (synopsis "Emacs major mode for interacting with gnuplot")
+    (description "@code{emacs-gnuplot} is an emacs major mode for interacting
+with gnuplot.")
+    (license license:gpl2+)))
+
+(define-public emacs-transpose-frame
+  (package
+    (name "emacs-transpose-frame")
+    (version "0.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "http://www.emacswiki.org/emacs/download/transpose-frame.el")
+       (file-name (string-append "transpose-frame-" version ".el"))
+       (sha256
+        (base32
+         "1f67yksgw9s6j0033hmqzaxx2a93jm11sd5ys7cc3li5gfh680m4"))))
+    (build-system emacs-build-system)
+    (home-page "https://www.emacswiki.org/emacs/TransposeFrame")
+    (synopsis "Transpose window arrangement in current frame")
+    (description "@code{emacs-transpose-frame} provides some interactive
+functions which allows users to transpose windows arrangement in currently
+selected frame.")
+    (license license:bsd-2)))
+
+(define-public emacs-key-chord
+  (package
+    (name "emacs-key-chord")
+    (version "0.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "https://www.emacswiki.org/emacs/download/key-chord.el")
+       (file-name (string-append "key-chord-" version ".el"))
+       (sha256
+        (base32
+         "03m44pqggfrd53nh9dvpdjgm0rvca34qxmd30hr33hzprzjambxg"))))
+    (build-system emacs-build-system)
+    (home-page "https://www.emacswiki.org/emacs/key-chord.el")
+    (synopsis "Map pairs of simultaneously pressed keys to Emacs commands")
+    (description "@code{emacs-key-chord} provides @code{key-chord-mode}, a
+mode for binding key chords to commands.  A key chord is defined as two keys
+pressed simultaneously or a single key quickly pressed twice.")
+    (license license:gpl2+)))
+
+(define-public emacs-evil-surround
+  (package
+    (name "emacs-evil-surround")
+    (version "1.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/timcharper/evil-surround/archive/v"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0p572jgic3q1ia1nz37kclir729ay6i2f4sa7wnaapyxly2lwb3r"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-evil" ,emacs-evil)))
+    (home-page "https://github.com/timcharper/evil-surround")
+    (synopsis "Easily modify surrounding parantheses and quotes")
+    (description "@code{emacs-evil-surround} allows easy deletion, change and
+addition of surrounding pairs, such as parantheses and quotes, in evil mode.")
+    (license license:gpl3+)))
+
+(define-public emacs-evil-commentary
+  (package
+    (name "emacs-evil-commentary")
+    (version "2.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/linktohack/evil-commentary/archive/v"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1jdya0i921nwskwrzdsj0vrr3m7gm49dy6f6pk9p5nxaarfxk230"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-evil" ,emacs-evil)))
+    (home-page "https://github.com/linktohack/evil-commentary")
+    (synopsis "Comment out code in evil mode")
+    (description "@code{emacs-evil-commentary} adds keybindings to easily
+comment out lines of code in evil mode.  It provides @code{gcc} to comment out
+lines, and @code{gc} to comment out the target of a motion.")
+    (license license:gpl3+)))
+
+;; Tests for emacs-ansi have a circular dependency with ert-runner, and
+;; therefore cannot be run
+(define-public emacs-ansi
+  (package
+    (name "emacs-ansi")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/rejeep/ansi.el/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "13jj4vbi98j3p17hs99bmy7g21jd5h4v3wpxk4pkvhylm3bfwjw8"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-s" ,emacs-s)))
+    (home-page "https://github.com/rejeep/ansi.el")
+    (synopsis "Convert strings to ANSI")
+    (description "@code{emacs-ansi} defines functions that turns simple
+strings to ANSI strings.  Turning a string into an ANSI string can be to add
+color to a text, add color in the background of a text or adding a style, such
+as bold, underscore or italic.")
+    (license license:gpl3+)))
+
+;; Tests for emacs-commander have a circular dependency with ert-runner, and
+;; therefore cannot be run
+(define-public emacs-commander
+  (package
+    (name "emacs-commander")
+    (version "0.7.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/rejeep/commander.el/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "196s2i15z7gwxa97l1wkxvjnfmj5n38wwm6d3g4zz15l2vqggc2y"))))
+    (build-system emacs-build-system)
+    (propagated-inputs
+     `(("emacs-dash" ,emacs-dash)
+       ("emacs-f" ,emacs-f)
+       ("emacs-s" ,emacs-s)))
+    (home-page "https://github.com/rejeep/commander.el")
+    (synopsis "Emacs command line parser")
+    (description "@code{emacs-commander} provides command line parsing for
+Emacs.")
+    (license license:gpl3+)))
+
+;; Tests for ert-runner have a circular dependency with ecukes, and therefore
+;; cannot be run
+(define-public ert-runner
+  (let ((dependencies
+         `(("emacs-ansi" ,emacs-ansi)
+           ("emacs-commander" ,emacs-commander)
+           ("emacs-dash" ,emacs-dash)
+           ("emacs-f" ,emacs-f)
+           ("emacs-s" ,emacs-s)
+           ("emacs-shut-up" ,emacs-shut-up))))
+    (package
+      (name "ert-runner")
+      (version "0.7.0")
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append "https://github.com/rejeep/ert-runner.el/archive/v"
+                             version ".tar.gz"))
+         (file-name (string-append name "-" version ".tar.gz"))
+         (sha256
+          (base32
+           "1657nck9i96a4xgl8crfqq0s8gflzp21pkkzwg6m3z5npjxklgwp"))))
+      (build-system emacs-build-system)
+      (inputs dependencies)
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'install-executable
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out")))
+                 (substitute* "bin/ert-runner"
+                   (("ERT_RUNNER=\"\\$\\(dirname \\$\\(dirname \\$0\\)\\)")
+                    (string-append "ERT_RUNNER=\"" out
+                                   "/share/emacs/site-lisp/guix.d/"
+                                   ,name "-" ,version)))
+                 (install-file "bin/ert-runner" (string-append out "/bin"))
+                 (wrap-program (string-append out "/bin/ert-runner")
+                   (list "EMACSLOADPATH" ":" '=
+                         (append
+                          ,(match dependencies
+                             (((labels packages) ...)
+                              `(map (lambda (label package version)
+                                      (string-append (assoc-ref inputs label)
+                                                     "/share/emacs/site-lisp/guix.d/"
+                                                     (string-drop package 6)
+                                                     "-" version))
+                                    ',labels
+                                    ',(map package-name packages)
+                                    ',(map package-version packages))))
+                          ;; empty element to include the default load path as
+                          ;; determined by emacs' standard initialization
+                          ;; procedure
+                          (list ""))))
+                 #t))))))
+      (home-page "https://github.com/rejeep/ert-runner.el")
+      (synopsis "Opinionated Ert testing workflow")
+      (description "@code{ert-runner} is a tool for Emacs projects tested
+using ERT.  It assumes a certain test structure setup and can therefore make
+running tests easier.")
+      (license license:gpl3+))))
index 20efe11..362860e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
@@ -53,6 +53,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages linux)               ;FIXME: for pcb
   #:use-module (gnu packages m4)
   #:use-module (gnu packages maths)
@@ -173,15 +174,14 @@ utilities.")
 (define-public pcb
   (package
     (name "pcb")
-    (version "20140316")
+    (version "4.0.0")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "http://ftp.geda-project.org/pcb/pcb-" version "/pcb-"
-                    version ".tar.gz"))
+              (uri (string-append "mirror://sourceforge/pcb/pcb/pcb-" version
+                                  "/pcb-" version ".tar.gz"))
               (sha256
                (base32
-                "0l6944hq79qsyp60i5ai02xwyp8l47q7xdm3js0jfkpf72ag7i42"))))
+                "1i6sk8g8h9avms142wl07yv20m1cm4c3fq3v6hybrhdxs2n17plf"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -200,7 +200,13 @@ utilities.")
                   (path (string-append (assoc-ref inputs "udev") "/lib")))
              (wrap-program (string-append out "/bin/pcb")
                `("LD_LIBRARY_PATH" ":" prefix (,path)))))
-         %standard-phases))))
+         (alist-cons-before
+          'check 'pre-check
+          (lambda _
+            (system "Xvfb :1 &")
+            (setenv "DISPLAY" ":1")
+            #t)
+          %standard-phases)))))
     (inputs
      `(("dbus" ,dbus)
        ("mesa" ,mesa)
@@ -216,7 +222,12 @@ utilities.")
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
        ("bison" ,bison)
-       ("flex" ,flex)))
+       ("flex" ,flex)
+       ;; For tests
+       ("imagemagick" ,imagemagick)
+       ("gerbv" ,gerbv)
+       ("ghostscript" ,ghostscript)
+       ("xvfb" ,xorg-server)))
     (home-page "http://pcb.geda-project.org/")
     (synopsis "Design printed circuit board layouts")
     (description
index b9a5533..165ca50 100644 (file)
@@ -57,7 +57,7 @@
 (define-public efl
   (package
     (name "efl")
-    (version "1.18.4")
+    (version "1.18.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -65,7 +65,7 @@
                     version ".tar.xz"))
               (sha256
                (base32
-                "09c0ajszjarcs6d62zlgnf1aha2f921mfr0gxg6nwza36xzc1srr"))))
+                "0wxz00cijynamm0sx4ss4hp89zyz5y6zliv5zd905jn4nak2mw2n"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
                            "--with-opengl=es"
                            "--enable-egl"
                            "--enable-harfbuzz")))
-    (home-page "https://www.enlightenment.org")
+    (home-page "https://www.enlightenment.org/about-efl")
     (synopsis "Enlightenment Foundation Libraries")
     (description
      "Enlightenment Foundation Libraries is a set of libraries developed
@@ -197,7 +197,7 @@ Libraries with some extra bells and whistles.")
 (define-public enlightenment
   (package
     (name "enlightenment")
-    (version "0.21.6")
+    (version "0.21.7")
     (source (origin
               (method url-fetch)
               (uri
@@ -205,7 +205,7 @@ Libraries with some extra bells and whistles.")
                               name "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0gan3c8jbvhcmvb2fpbprr3m6db0afg1dnrb87nbqb399nsi81zd"))))
+                "1xvngjdsa0p901vfhrh2qpa50k32hwwhc8bgi16a9b5d9byzfhvn"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--enable-mount-eeze")))
@@ -221,7 +221,7 @@ Libraries with some extra bells and whistles.")
        ("libxext" ,libxext)
        ("linux-pam" ,linux-pam)
        ("xcb-util-keysyms" ,xcb-util-keysyms)))
-    (home-page "https://www.enlightenment.org")
+    (home-page "https://www.enlightenment.org/about-enlightenment")
     (synopsis "Lightweight desktop environment")
     (description
      "Enlightenment is resource friendly desktop environment with integrated
index 39da7e9..07f117e 100644 (file)
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016 Pjotr Prins <pjotr.public12@thebird.nl>
+;;; Copyright © 2016, 2017 Pjotr Prins <pjotr.guix@thebird.nl>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -34,8 +34,7 @@
 (define-public erlang
   (package
     (name "erlang")
-    ;; When updating, remember to update the hash of erlang-manpages!
-    (version "19.0")
+    (version "19.3")
     (source (origin
               (method url-fetch)
               ;; The tarball from http://erlang.org/download contains many
@@ -46,7 +45,7 @@
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1dxyz6x1yfv33fd0xfry2ihylkyfa2d655q1vxvbz8dflyd64yqh"))))
+                "1b47jh549yywyp8fbs8a8j4ydr3zn982navzyqvlms6rg8vwb0pw"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)
@@ -61,7 +60,7 @@
                                version ".tar.gz"))
            (sha256
             (base32
-             "07j0l7ary936hil38xr3hvfw6j74pshkyyi98kc9cassbbcdd8y7"))))))
+             "0p6r3n3y7lbhv38sw8f2vi1xlmc137gyspk9ap086w1nszyjy6gq"))))))
     (inputs
      `(("ncurses" ,ncurses)
        ("openssl" ,openssl)
                  (zero? (system* "tar" "xvf" manpages))
                  (rename-file "COPYRIGHT"
                               (string-append share "/misc/erlang/COPYRIGHT"))
-                 ;; Delete superfluous files.
-                 (for-each delete-file '("PR.template"
-                                         "README"))))))))))
+                 ;; Delete superfluous file.
+                 (delete-file "PR.template")))))))))
     (home-page "http://erlang.org/")
     (synopsis "The Erlang programming language")
     (description
index 3c305f4..fb2543b 100644 (file)
@@ -49,7 +49,7 @@
 (define-public bitcoin-core
   (package
     (name "bitcoin-core")
-    (version "0.14.0")
+    (version "0.14.1")
     (source (origin
              (method url-fetch)
              (uri
@@ -57,7 +57,7 @@
                              version "/bitcoin-" version ".tar.gz"))
              (sha256
               (base32
-               "07k4i9r033dsvkp5ii5g3hykidm8b19c8c0mz1bi8k0dda3d8hyp"))))
+               "18zrsinlwkj4q5bj2hzswbhswkvd0sdfi6skfwqwwk85gzh064pj"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
index 2452a1c..03a1f6f 100644 (file)
@@ -17,6 +17,8 @@
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 José Miguel Sánchez García <jmi2k@openmailbox.com>
 ;;; Copyright © 2017 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Brendan Tildesley <brendan.tildesley@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -239,8 +241,11 @@ provide serif, sans and monospaced variants.")
     (description "Vera is a sans-serif typeface from Bitstream, Inc.  This
 package provides the TrueType (TTF) files.")
     (license
-     (license:x11-style
-      "http://www.gnome.org/fonts/#Final_Bitstream_Vera_Fonts"))))
+     (license:fsdg-compatible
+      "https://www.gnome.org/fonts/#Final_Bitstream_Vera_Fonts"
+      "The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself."))))
 
 (define-public font-cantarell
   (package
@@ -316,7 +321,7 @@ sans-serif designed for on-screen reading.  It is used by GNOME@tie{}3.")
     (version "2.00.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "https://fedorahosted.org/releases/l/i/"
+              (uri (string-append "https://releases.pagure.org/"
                                   "liberation-fonts/liberation-fonts-ttf-"
                                   version ".tar.gz"))
               (sha256
@@ -350,7 +355,7 @@ sans-serif designed for on-screen reading.  It is used by GNOME@tie{}3.")
      `(("source" ,source)
        ("tar" ,tar)
        ("gzip" ,gzip)))
-    (home-page "https://fedorahosted.org/liberation-fonts/")
+    (home-page "https://pagure.io/liberation-fonts/")
     (synopsis
      "Fonts compatible with Arial, Times New Roman, and Courier New")
     (description
@@ -518,6 +523,104 @@ fonts are intended to support the characters necessary to render or display
 text in Simplified Chinese, Traditional Chinese, Japanese, and Korean.")
     (license license:silofl1.1)))
 
+(define-public font-cns11643
+  (package
+    (name "font-cns11643")
+    (version "98.1.20170405")
+    (source (origin
+              (method url-fetch)
+              (uri "http://www.cns11643.gov.tw/AIDB/Open_Data.zip")
+              (sha256
+               (base32
+                "02kb3bwjrra0k2hlr2p8xswd2y0xs6j8d9vm6yrby734h02a40qf"))))
+    (outputs '("out" "tw-kai" "tw-sung"))
+    (build-system trivial-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let* ((font-dir "/share/fonts/truetype/cns11643")
+                (out (string-append
+                      (assoc-ref %outputs "out") font-dir))
+                (tw-kai (string-append
+                         (assoc-ref %outputs "tw-kai") font-dir))
+                (tw-sung (string-append
+                          (assoc-ref %outputs "tw-sung") font-dir))
+                (unzip (string-append
+                        (assoc-ref %build-inputs "unzip") "/bin/unzip")))
+           (system* unzip (assoc-ref %build-inputs "source"))
+           (chdir "Open_Data/Fonts/")
+           (install-file "TW-Kai-98_1.ttf" tw-kai)
+           (install-file "TW-Sung-98_1.ttf" tw-sung)
+           (install-file "TW-Kai-98_1.ttf" out)
+           (install-file "TW-Kai-Ext-B-98_1.ttf" out)
+           (install-file "TW-Kai-Plus-98_1.ttf" out)
+           (install-file "TW-Sung-98_1.ttf" out)
+           (install-file "TW-Sung-Ext-B-98_1.ttf" out)
+           (install-file "TW-Sung-Plus-98_1.ttf" out)
+           #t))))
+    (home-page "http://www.cns11643.gov.tw/AIDB/welcome.do")
+    (synopsis "CJK TrueType fonts, TW-Kai and TW-Sung")
+    (description
+     "@code{CNS 11643} character set (Chinese National Standard, or Chinese
+Standard Interchange Code) is the standard character set of the Republic of
+China (Taiwan) for Chinese Characters and other Unicode symbols.  Contained
+are six TrueType fonts based on two script styles, Regular script (Kai), and
+Sung/Ming script, each with three variants:
+
+@itemize
+@item @code{CNS 11643} (@code{TW-Kai} and @code{TW-Sung}): Tens of thousands
+of CJK characters from frequency tables published by the Taiwanese
+Ministry of Education.  ISO 10646 and Unicode compatible encoding.
+@item @code{Big-5 Plus}: Several thousand frequently used CJK characters
+encoded in the user defined area of the Big-5 code.
+@item @code{Big-5 Extended}: A Big-5 character set based on the
+@code{Big-5 Plus} and @code{CNS 11643} character sets.
+@end itemize\n")
+    (license (license:non-copyleft
+              "http://data.gov.tw/license")))) ; CC-BY 4.0 compatible
+
+(define-public font-cns11643-swjz
+  (package
+    (name "font-cns11643-swjz")
+    (version "1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri "https://www.moedict.tw/fonts/truetype/cns11643/ebas927.ttf")
+       (sha256
+        (base32
+         "1qkljldbmb53zp1rcmpsb8rzy67rnsqcjxi549m9743ifk4isl78"))))
+    (build-system trivial-build-system)
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let ((font-dir (string-append %output
+                                        "/share/fonts/truetype/cns11643"))
+               (source (assoc-ref %build-inputs "source")))
+           (mkdir-p font-dir)
+           (copy-file source
+                      (string-append font-dir "/" "ebas927.ttf"))
+           #t))))
+    (home-page
+     (string-append "http://www.cns11643.gov.tw/AIDB/download.do"
+                    "?name=%E5%AD%97%E5%9E%8B%E4%B8%8B%E8%BC%89"))
+    (synopsis "TrueType seal script font")
+    (description
+     "@code{Shuowen Jiezi} is a TrueType seal script font based on the ancient
+text of the same name published by the Executive Yuan of Taiwan.  6721 glyphs
+are included, at Unicode compatible code points corresponding to their modern
+variants.")
+    ;; Original text only available in Chinese. More info at
+    ;; https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26703#11
+    (license (license:non-copyleft
+              "http://www.cns11643.gov.tw/AIDB/copyright.do"))))
+
 (define-public font-wqy-zenhei
   (package
     (name "font-wqy-zenhei")
index 41d85aa..da3a850 100644 (file)
@@ -187,6 +187,68 @@ and network communications.  A very thin client library can be embedded to
 provide connectivity for client applications written in any language.")
     (license license:gpl3+)))
 
+(define-public python-sge-pygame
+  (package
+    (name "python-sge-pygame")
+    (version "1.4.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sge-pygame" version))
+       (sha256
+        (base32
+         "1qhrcja1igqkjjn1w425ni5f41mijdq5dpq0ymkhl29xxrf8hnx8"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pygame" ,python-pygame)
+       ("python-six" ,python-six)))
+    (home-page "http://stellarengine.nongnu.org")
+    (synopsis "2D game engine for Python")
+    (description
+     "The SGE Game Engine (\"SGE\", pronounced like \"Sage\") is a
+general-purpose 2D game engine.  It takes care of several details fro you so
+you can focus on the game itself.  This makes more rapid game development
+possible, and it also makes the SGE easy to learn.")
+    (license license:lgpl3+)))
+
+(define-public python2-sge-pygame
+  (package-with-python2 python-sge-pygame))
+
+(define-public python-tmx
+  (package
+    (name "python-tmx")
+    (version "1.9.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/python-tmx/tmx-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1is107sx3lr09dqjiyn10xqhyv5x54c2ryhys9mb9j3mxjbm227l"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six)))
+    (home-page "http://python-tmx.nongnu.org")
+    (synopsis "Python library for the @code{Tiled} TMX format")
+    (description
+     "Python TMX reads and writes the @code{Tiled} TMX format in a simple way.
+This is useful for map editors or generic level editors, and it's also useful
+for using a map editor or generic level editor like Tiled to edit your game's
+levels.")
+    (license (list license:asl2.0
+                   ;; Documentation (only available in the source tarball) is
+                   ;; under the CC0 license.
+                   license:cc0))))
+
+(define-public python2-tmx
+  (let ((python2-tmx (package-with-python2 python-tmx)))
+    (package
+      (inherit python2-tmx)
+      (propagated-inputs
+       `(("python2-pathlib" ,python2-pathlib)
+         ,@(package-propagated-inputs python2-tmx))))))
+
 (define-public tiled
   (package
     (name "tiled")
index b31bb93..3517f06 100644 (file)
@@ -28,6 +28,8 @@
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
+;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -52,6 +54,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix svn-download)
+  #:use-module (guix gexp)
   #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
@@ -88,6 +91,7 @@
   #:use-module (gnu packages ocaml)
   #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
+  #:use-module (gnu packages textutils)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages wxwidgets)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages cmake)
+  #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages icu4c)
+  #:use-module (gnu packages networking)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system haskell)
   #:use-module (guix build-system python)
@@ -2687,6 +2695,69 @@ your way through an underground cave system in search of the Grue.  Can you
 capture it and get out alive?")
     (license license:agpl3+)))
 
+(define-public lierolibre
+  (package
+    (name "lierolibre")
+    (version "0.5")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://launchpad.net/lierolibre/trunk/"
+                                  version "/+download/lierolibre-"
+                                  version ".tar.xz"))
+              (sha256
+               (base32
+                "1cf1gvsn4qq190lrf9k5bpjnqwlcfw7pajvdnh7z5r4jqw0rsbl9"))
+              (patches
+               (search-patches "lierolibre-check-unaligned-access.patch"
+                               "lierolibre-try-building-other-arch.patch"
+                               "lierolibre-remove-arch-warning.patch"
+                               "lierolibre-newer-libconfig.patch"
+                               "lierolibre-is-free-software.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete pre-compiled files.
+                  (delete-file "data/LIERO.CHR")
+                  (delete-file "data/LIERO.SND")
+                  #t))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("imagemagick" ,imagemagick)
+       ("pkg-config" ,pkg-config)
+       ("util-linux" ,util-linux)
+       ("sox" ,sox)))
+    (inputs
+     `(("boost" ,boost)
+       ("libconfig" ,libconfig)
+       ("sdl-union" ,(sdl-union (list sdl sdl-image sdl-mixer)))
+       ("zlib" ,zlib)))
+    (home-page "https://gitlab.com/lierolibre/lierolibre")
+    (synopsis "Old-school earthworm action game")
+    (description
+     "lierolibre is an earthworm action game where you fight another player
+(or the computer) underground using a wide array of weapons.
+
+Features:
+@itemize
+@item 2 worms, 40 weapons, great playability, two game modes: Kill'em All
+and Game of Tag, plus AI-players without true intelligence!
+@item Dat nostalgia.
+@item Extensions via a hidden F1 menu:
+@itemize
+@item Replays
+@item Game controller support
+@item Powerlevel palettes
+@end itemize
+@item Ability to write game variables to plain text files.
+@item Ability to load game variables from both EXE and plain text files.
+@item Scripts to extract and repack graphics, sounds and levels.
+@end itemize
+
+To switch between different window sizes, use F6, F7 and F8, to switch to
+fullscreen, use F5 or Alt+Enter.")
+    ;; Code mainly BSD-2, some parts under Boost 1.0. All assets are WTFPL2.
+    (license (list license:bsd-2 license:boost1.0 license:wtfpl2))))
+
 (define-public warzone2100
   (package
     (name "warzone2100")
@@ -3941,3 +4012,224 @@ fabulous Orb of Zot.")
                    license:expat
                    license:zlib
                    license:asl2.0))))
+
+(define-public lugaru
+  (package
+    (name "lugaru")
+    (version "1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://bitbucket.org/osslugaru/lugaru/downloads/"
+                                  name "-" version ".tar.xz"))
+              (sha256
+               (base32
+                "15zgcshy22q51rm72zi6y9z7qlgnz5iw3gczjdlir4bqmxy4gspk"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:configure-flags
+       (list "-DSYSTEM_INSTALL=ON")
+       ;; no test target
+       #:tests? #f))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("sdl2" ,sdl2)
+       ("glu" ,glu)
+       ("libjpeg" ,libjpeg-turbo)
+       ("libpng" ,libpng)
+       ("openal" ,openal)
+       ("vorbis" ,libvorbis)
+       ("zlib" ,zlib)))
+    (home-page "https://osslugaru.gitlab.io")
+    (synopsis "Cross-platform third-person action game")
+    (description "Lugaru is a third-person action game.  The main character,
+Turner, is an anthropomorphic rebel bunny rabbit with impressive combat skills.
+In his quest to find those responsible for slaughtering his village, he uncovers
+a far-reaching conspiracy involving the corrupt leaders of the rabbit republic
+and the starving wolves from a nearby den.  Turner takes it upon himself to
+fight against their plot and save his fellow rabbits from slavery.")
+    (license (list license:gpl2+ ; code
+                   ;; assets:
+                   license:cc-by-sa3.0
+                   license:cc-by-sa4.0))))
+
+(define-public 0ad-data
+  (package
+    (name "0ad-data")
+    (version "0.0.21-alpha")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://releases.wildfiregames.com/0ad-"
+                           version "-unix-data.tar.xz"))
+       (file-name (string-append name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "15xadyrpvq27lm9p1ny7bcmmv56m16h3xadbkdx69gfkzxc3razk"))
+       (modules '((guix build utils)))
+       (snippet
+        #~(begin
+            (for-each
+             (lambda (name)
+               (let* ((dir (string-append "binaries/data/mods/" name))
+                      (file (string-append dir "/" name ".zip"))
+                      (unzip #$(file-append unzip "/bin/unzip")))
+                 (system* unzip "-d" dir file)
+                 (delete-file file)))
+             '("mod" "public"))
+            #t))))
+    (build-system trivial-build-system)
+    (native-inputs `(("tar" ,tar)
+                     ("xz" ,xz)))
+    (arguments
+     `(#:modules ((guix build utils))
+       #:builder
+       (begin
+         (use-modules (guix build utils))
+         (let ((out (assoc-ref %outputs "out"))
+               (source (assoc-ref %build-inputs "source"))
+               (tar (string-append (assoc-ref %build-inputs "tar") "/bin/tar"))
+               (xz-path (string-append (assoc-ref %build-inputs "xz") "/bin")))
+           (setenv "PATH" xz-path)
+           (mkdir out)
+           (zero? (system* tar "xvf" source "-C" out "--strip=3"))))))
+    (synopsis "Data files for 0ad")
+    (description "0ad-data provides the data files required by the game 0ad.")
+    (home-page "https://play0ad.com")
+    (license (list (license:fsdg-compatible
+                    "http://tavmjong.free.fr/FONTS/ArevCopyright.txt"
+                    (license:license-comment
+                     (package-license font-bitstream-vera)))
+                   (package-license font-bitstream-vera)
+                   license:cc-by-sa3.0
+                   license:expat
+                   license:gfl1.0
+                   license:gpl2+
+                   license:gpl3+))))
+
+(define-public 0ad
+  (package
+    (name "0ad")
+    (version "0.0.21-alpha")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "http://releases.wildfiregames.com/0ad-"
+                           version "-unix-build.tar.xz"))
+       (file-name (string-append name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "1kw3hqnr737ipx4f03khz3hvsh3ha7r8iy9njppk2faa53j27gln"))
+       ;; A snippet here would cause a build failure because of timestamps
+       ;; reset.  See https://bugs.gnu.org/26734.
+       ))
+    (inputs
+     `(("0ad-data" ,0ad-data)
+       ("curl" ,curl)
+       ("enet" ,enet)
+       ("gloox" ,gloox)
+       ("icu4c" ,icu4c)
+       ("libpng" ,libpng)
+       ("libvorbis" ,libvorbis)
+       ("libxcursor" ,libxcursor)
+       ("libxml2" ,libxml2)
+       ("miniupnpc" ,miniupnpc)
+       ("mozjs-38" ,mozjs-38)
+       ("openal" ,openal)
+       ("sdl2" ,sdl2)
+       ("wxwidgets" ,wxwidgets)
+       ("zlib" ,zlib)))
+    (native-inputs
+     `(("boost" ,boost)
+       ("cmake" ,cmake)
+       ("mesa" ,mesa)
+       ("pkg-config" ,pkg-config)
+       ("python-2" ,python-2)))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-bundles
+           (lambda _
+             (delete-file-recursively "libraries/source/spidermonkey")
+             #t))
+         (add-after 'unpack 'fix-x11-includes
+           (lambda _
+             (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
+               (("<Xlib.h>") "<X11/Xlib.h>"))
+             (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
+               (("<Xatom.h>") "<X11/Xatom.h>"))
+             (substitute* "source/lib/sysdep/os/unix/x/x.cpp"
+               (("<Xcursor/Xcursor.h>") "<X11/Xcursor/Xcursor.h>"))
+             #t))
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((jobs (number->string (parallel-job-count)))
+                    (out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib"))
+                    (data (string-append out "/share/0ad")))
+               (setenv "JOBS" (string-append "-j" jobs))
+               (setenv "CC" "gcc")
+               (with-directory-excursion "build/workspaces"
+                 (zero? (system* "./update-workspaces.sh"
+                                 (string-append "--libdir=" lib)
+                                 (string-append "--datadir=" data)
+                                 "--minimal-flags"
+                                 ;; TODO: "--with-system-nvtt"
+                                 "--with-system-mozjs38"))))))
+         (add-before 'build 'chdir
+           (lambda _
+             (chdir "build/workspaces/gcc")
+             #t))
+         (delete 'check)
+         (replace 'install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (chdir "../../../binaries")
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lib (string-append out "/lib"))
+                    (data (string-append out "/share/0ad"))
+                    (applications (string-append out "/share/applications"))
+                    (pixmaps (string-append out "/share/pixmaps"))
+                    (0ad-data (assoc-ref inputs "0ad-data")))
+               ;; data
+               (copy-recursively "data" data)
+               (for-each (lambda (file)
+                           (symlink (string-append 0ad-data "/" file)
+                                    (string-append data "/" file)))
+                         '("config" "mods/mod" "mods/public" "tools"))
+               ;; libraries
+               (for-each (lambda (file)
+                           (install-file file lib))
+                         (find-files "system" "\\.so$"))
+               ;; binaries
+               (install-file "system/pyrogenesis" bin)
+               (with-directory-excursion bin
+                 (symlink "pyrogenesis" "0ad"))
+               ;; resources
+               (with-directory-excursion "../build/resources"
+                 (install-file "0ad.desktop" applications)
+                 (install-file "0ad.png" pixmaps))
+               #t)))
+         (add-after 'install 'check
+           (lambda _
+             (with-directory-excursion "system"
+               (zero? (system* "./test"))))))))
+    (home-page "https://play0ad.com")
+    (synopsis "3D real-time strategy game of ancient warfare")
+    (description "0 A.D. is a real-time strategy (RTS) game of ancient
+warfare.  It's a historically-based war/economy game that allows players to
+relive or rewrite the history of twelve ancient civilizations, each depicted
+at their peak of economic growth and military prowess.
+
+0ad needs a window manager that supports 'Extended Window Manager Hints'.")
+    (license (list license:bsd-2
+                   license:bsd-3
+                   license:expat
+                   license:gpl2+
+                   license:ibmpl1.0
+                   license:isc
+                   license:lgpl2.1
+                   license:lgpl3
+                   license:mpl2.0
+                   license:zlib))))
index 00e2fa7..5d1a4ea 100644 (file)
@@ -399,6 +399,19 @@ Go.  It also includes runtime support libraries for these languages.")
                 "17xjz30jb65hcf714vn9gcxvrrji8j20xm7n33qg1ywhyzryfsph"))
               (patches (search-patches "gcc-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"))))))
+(define-public gcc-7
+  (package
+    (inherit gcc-6)
+    (version "7.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/gcc/gcc-"
+                                  version "/gcc-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "05xwps0ci7wgxh50askpa2r9p8518qxdgh6ad7pnyk7n6p13d0ca"))
+              (patches (search-patches "gcc-strmov-store-file-names.patch"
+                                       "gcc-5.0-libvtv-runpath.patch"))))))
 
 ;; Note: When changing the default gcc version, update
 ;;       the gcc-toolchain-* definitions and the gfortran definition
@@ -523,6 +536,14 @@ as the 'native-search-paths' field."
   (custom-gcc gcc-5 "gfortran" '("fortran")
               %generic-search-paths))
 
+(define-public gfortran-6
+  (custom-gcc gcc-6 "gfortran" '("fortran")
+              %generic-search-paths))
+
+(define-public gfortran-7
+  (custom-gcc gcc-7 "gfortran" '("fortran")
+              %generic-search-paths))
+
 (define-public gfortran
   ;; Note: Update this when GCC changes!  We cannot use
   ;; (custom-gcc gcc "fortran" …) because that would lead to a package object
index 62c8fd8..aac0f96 100644 (file)
@@ -32,7 +32,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages pkg-config)
-  #:use-module ((guix licenses) #:select (non-copyleft)))
+  #:use-module ((guix licenses) #:select (non-copyleft perl-license)))
 
 (define-public gd
   (package
@@ -139,7 +139,7 @@ most common applications of GD involve website development.")
     (description "GD.pm is an autoloadable interface module for libgd, a
 popular library for creating and manipulating PNG files.  With this library
 you can create PNG images on the fly or modify existing files.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-gd-securityimage
   (package
@@ -166,4 +166,4 @@ security (captcha) images.  The final output is the actual graphic data, the
 mime type of the graphic, and the created random string.  The module also has
 some \"styles\" that are used to create the background (or foreground) of the
 image.")
-    (license (package-license perl))))
+    (license perl-license)))
index 5340107..4e8736c 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2013, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Alex Vong <alexvong1995@gmail.com>
@@ -209,8 +209,7 @@ output file formats and printers.")
    (properties '((upstream-name . "gnu-ghostscript")))))
 
 (define-public ghostscript/x
-  (package (inherit ghostscript)
-    (replacement #f)
+  (package/inherit ghostscript
     (name (string-append (package-name ghostscript) "-with-x"))
     (inputs `(("libxext" ,libxext)
               ("libxt" ,libxt)
@@ -219,6 +218,7 @@ output file formats and printers.")
 (define ghostscript/fixed
   (package
     (inherit ghostscript)
+    (replacement #f)
     (source
       (origin
         (inherit (package-source ghostscript))
index 15eb5bc..362e204 100644 (file)
@@ -126,7 +126,7 @@ buffers.")
 (define-public gimp
   (package
     (name "gimp")
-    (version "2.8.18")
+    (version "2.8.22")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://download.gimp.org/pub/gimp/v"
@@ -134,10 +134,10 @@ buffers.")
                                   "/gimp-" version ".tar.bz2"))
               (sha256
                (base32
-                "0halh6sl3d2j9gahyabj6h6r3yyldcy7sfb4qrfazpkqqr3j5p9r"))))
+                "12k3lp938qdc9cqj29scg55f3bb8iav2fysd29w0s49bqmfa71wi"))))
     (build-system gnu-build-system)
     (outputs '("out"
-               "doc"))                            ;8 MiB of gtk-doc HTML
+               "doc"))                            ;5 MiB of gtk-doc HTML
     (arguments
      '(#:configure-flags (list (string-append "--with-html-dir="
                                               (assoc-ref %outputs "doc")
index 0123fbd..0be399c 100644 (file)
@@ -12,7 +12,7 @@
 ;;; Copyright © 2015, 2016, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
-;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
+;;; Copyright © 2016, 2017 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net>
 ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
                                          "/share/gir-1.0")
                           (string-append "--with-typelibdir="
                                          (assoc-ref %outputs "out")
-                                         "/lib/girepository-1.0"))))
+                                         "/lib/girepository-1.0"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'embed-growisofs
+           (lambda* (#:key inputs #:allow-other-keys)
+             (substitute* "plugins/growisofs/burn-growisofs.c"
+               (("\"growisofs") (string-append "\"" (which "growisofs"))))
+             #t )))))
     (propagated-inputs
      `(("hicolor-icon-theme" ,hicolor-icon-theme)))
     (native-inputs
        ("gobject-introspection" ,gobject-introspection)
        ("pkg-config" ,pkg-config)))
     (inputs
-     `(("glib" ,glib)
+     `(("dvd+rw-tools" ,dvd+rw-tools)
+       ("glib" ,glib)
        ("gnome-doc-utils" ,gnome-doc-utils)
        ("gstreamer" ,gstreamer)
        ("gst-plugins-base" ,gst-plugins-base)
@@ -4995,6 +5003,7 @@ properties, screen resolution, and other GNOME parameters.")
               (uri (string-append "mirror://gnome/sources/" name "/"
                                   (version-major+minor version) "/"
                                   name "-" version ".tar.xz"))
+              (patches (search-patches "gnome-shell-CVE-2017-8288.patch"))
               (sha256
                (base32
                 "16smvjfrpyfphv479hjky5261hgl4kli4q86bcb2b8xdcav4w3yq"))))
index e2ee474..5154117 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
+;;; Copyright © 2016, 2017 Kei Kebreau <kei@openmailbox.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,7 +23,9 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix licenses)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages libffcall)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages image)
-  #:use-module (gnu packages pkg-config))
+  #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages xml))
+
+(define-public gnustep-make
+  (package
+    (name "gnustep-make")
+    (version "2.7.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "ftp://ftp.gnustep.org/pub/gnustep/core/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1khiygfkz0zhh9b5nybn40g0xnnjxchk24n49hff1bwanszir84h"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f)) ; no check target
+    (native-inputs
+     `(("which" ,which)))
+    (home-page "http://gnustep.org")
+    (synopsis "GNUstep make package")
+    (description "The makefile package is a simple, powerful and extensible way
+to write makefiles for a GNUstep-based project.  It allows the user to write a
+project without having to deal with the complex issues associated with
+configuration, building, installation, and packaging.  It also allows the user
+to easily create cross-compiled binaries.")
+    (license gpl3+)))
 
 (define-public windowmaker
   (package
index d60b538..d9901fd 100644 (file)
@@ -6,6 +6,7 @@
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 ng0 <ng0@no-reply.pragmatique.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -57,7 +58,8 @@
   #:use-module (gnu packages icu4c)
   #:use-module (gnu packages video)
   #:use-module (gnu packages xdisorg)
-  #:use-module (gnu packages zip))
+  #:use-module (gnu packages zip)
+  #:use-module (gnu packages readline))
 
 (define-public mozjs
   (package
@@ -159,6 +161,92 @@ in C/C++.")
      `(("libffi" ,libffi)
        ("zlib" ,zlib)))))
 
+(define-public mozjs-38
+  (package
+    (inherit mozjs)
+    (name "mozjs")
+    (version "38.2.1.rc0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://people.mozilla.org/~sstangl/"
+                    name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "0p4bmbpgkfsj54xschcny0a118jdrdgg0q29rwxigg3lh5slr681"))
+              (patches
+               (search-patches
+                ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1269317 for
+                ;; GCC 6 compatibility.
+
+                "mozjs38-version-detection.patch" ; for 0ad
+                "mozjs38-tracelogger.patch"
+
+                ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1339931.
+                "mozjs38-pkg-config-version.patch"
+                "mozjs38-shell-version.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Fix incompatibility with sed 4.4.
+                  (substitute* "js/src/configure"
+                    (("\\^\\[:space:\\]") "^[[:space:]]"))
+
+                  ;; The headers are symlinks to files that are in /tmp, so they
+                  ;; end up broken.  Copy them instead.
+                  (substitute*
+                      "python/mozbuild/mozbuild/backend/recursivemake.py"
+                    (("\\['dist_include'\\].add_symlink")
+                     "['dist_include'].add_copy"))
+
+                  ;; Remove bundled libraries.
+                  (for-each delete-file-recursively
+                            '("intl"
+                              "js/src/ctypes/libffi"
+                              "js/src/ctypes/libffi-patches"
+                              "modules/zlib"))
+                  #t))))
+    (arguments
+     `(;; XXX: parallel build fails, lacking:
+       ;;   mkdir -p "system_wrapper_js/"
+       #:parallel-build? #f
+       ;; See https://bugzilla.mozilla.org/show_bug.cgi?id=1008470.
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (chdir "js/src")
+               (setenv "SHELL" (which "sh"))
+               (setenv "CONFIG_SHELL" (which "sh"))
+               (zero? (system* "./configure"
+                               (string-append "--prefix=" out)
+                               "--enable-ctypes"
+                               "--enable-gcgenerational"
+                               "--enable-optimize"
+                               "--enable-pie"
+                               "--enable-readline"
+                               "--enable-shared-js"
+                               "--enable-system-ffi"
+                               "--enable-threadsafe"
+                               "--enable-xterm-updates"
+                               "--with-system-icu"
+                               "--with-system-nspr"
+                               "--with-system-zlib"
+
+                               ;; Intl API requires bundled ICU.
+                               "--without-intl-api"))))))))
+    (native-inputs
+     `(("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("python-2" ,python-2)))
+    (inputs
+     `(("libffi" ,libffi)
+       ("readline" ,readline)
+       ("icu4c" ,icu4c)
+       ("zlib" ,zlib)))))
+
 (define-public nspr
   (package
     (name "nspr")
@@ -323,7 +411,7 @@ standards.")
 (define-public icecat
   (package
     (name "icecat")
-    (version "52.0.2-gnu1")
+    (version "52.1.0-gnu1")
     (source
      (origin
       (method url-fetch)
@@ -332,162 +420,38 @@ standards.")
                           "/" name "-" version ".tar.bz2"))
       (sha256
        (base32
-        "0asaba04y6rwc7nx898p89jdxkbnsb3dxjvpdi8xb1rbgyms80c9"))
+        "1wr4bc5806xzyqpi6m4rjaf61za6ylpx4g0kfk95c6yw9yhg5vqb"))
       (patches
        (list
         (search-patch "icecat-avoid-bundled-libraries.patch")
-        (mozilla-patch "icecat-CVE-2017-5443.patch"      "6daaaff9f1f6" "0jvb6y5fiwr13fyx58k49n81kv6h03vcch502g57y6nsx2wsqng6")
-        (mozilla-patch "icecat-bug-1319087.patch"        "82297fcc6f19" "02qcbg2r2smswgnwj7fs5bcrr3rlqbpsh2nmcbsjyblp5fk1ag36")
-        (mozilla-patch "icecat-CVE-2017-5429-pt01.patch" "dd526ebe7e58" "1rj0pz6iql59zrynz48njcfg8i0v55bjdndplss9wl37lfydl7ca")
-        (mozilla-patch "icecat-CVE-2017-5447-pt1.patch"  "3bc981f85a17" "0am9k3mii2r05lp6xpizxp356mb8xrbqs9kmx0wx5wyy08wjzmks")
-        (mozilla-patch "icecat-CVE-2017-5447-pt2.patch"  "4f752b0e5920" "183s5dwzd57b299grvyvn139fsp9am0smd3yb4shw8g0iwzz61nf")
-        (mozilla-patch "icecat-CVE-2017-5449.patch"      "1714eda3de9b" "0ncngdpzvffvpw4c1mi0dda5l02lwyil4rnq3i6salnwlrq9x32z")
-        (mozilla-patch "icecat-CVE-2017-5455.patch"      "b10922304d81" "0rglbavb8rx7hl53ksgypazz27263b1yn97gznpdsq89zhirfw3m")
-        (mozilla-patch "icecat-CVE-2017-5446.patch"      "d98de46f8f27" "040agykr4w4wsbi0xm3rrrjxk48iwz8l1hn11vfv45nzsx2f1hzq")
-        ;; The next patch is for CVE-2017-5436 in the bundled graphite2.
-        ;; TODO: apply additional fixes from our system graphite2 to the
-        ;; bundled copy, or upgrade it in place.
-        (mozilla-patch "icecat-CVE-2017-5436.patch"      "e6132f638311" "07w9pijx42psgmkj2i6i87lf30gl0yyb5caz6wz7fm8phi8wwy9p")
-        (mozilla-patch "icecat-bug-1342395.patch"        "0e0e8abe2153" "1xlnq2fd50kf0rz9dibz5vlaa9zj2pifjvky2fdykcan62xz75hy")
-        (mozilla-patch "icecat-bug-1342841.patch"        "623afac083f8" "1pv86j0dxdmi7g3rx4zqplz4gxq5lfyzpdssq83naypcxic6zafb")
-        (mozilla-patch "icecat-bug-1344644.patch"        "cac0735c228f" "0695f0hvxnzgcirgxx3axn5nhkywqxjcvnrlhg7jwfann4mnbsfn")
-        (mozilla-patch "icecat-bug-1322660.patch"        "9d6d60e64255" "0ds74ilhyc9qkkjgkm0xk7ay3926971rzwfh2avhhkfargn7idib")
-        (mozilla-patch "icecat-bug-1343330.patch"        "6f23bd449bc7" "1igz6yhx803hygf7cii8bchx7bfw1niq8s0nc5l9i5rb8ml2b7f0")
-        (mozilla-patch "icecat-bug-1346961.patch"        "3a2dc54cf986" "0dfp3s7d43zx3svajbkhvi73b71hhr7vrc9yz0iz37pykg40c4hn")
-        (mozilla-patch "icecat-bug-1318070.patch"        "a68d6d9b87d0" "1yqgkgv7i0xy5dm0pgg1cbav4qglsdk8brzcjcpfz65bmn1pqrhh")
-        (mozilla-patch "icecat-CVE-2017-5448.patch"      "6684a3c7f834" "0agyynvcjk28d7l2l4cqz67ddg9xw7ymiirb0npabd1si9zj27xb")
-        (mozilla-patch "icecat-bug-1336345.patch"        "590416f46ec8" "1q2svqjd735rickr9i3kdkd0la6ikdphhmzr19h1r84nrl6a87ia")
-        (mozilla-patch "icecat-bug-1336356.patch"        "00ba83ac39be" "1h6qsfv4r9mlc2ihjm9kmzi76aijdnnyx1g2r30ia87xha106pnk")
-        (mozilla-patch "icecat-bug-1342363.patch"        "10285b4a6b71" "0l2ww19y6qbarcp9brjgbpf4vi3k38r6ak8is5736vqz0c17dim0")
-        (mozilla-patch "icecat-bug-1343787.patch"        "28287b7f0938" "1w85s9rqh0dyfx6qn5plypbypz9casig03b6yiy9bpiq7ckrxz56")
-        (mozilla-patch "icecat-bug-1292803.patch"        "adbf7b59a405" "1l1p0b5rc05czk6kr3k3k99m1fkwphj2jrd092gdbib8q4m4cvzv")
-        (mozilla-patch "icecat-bug-1313869.patch"        "eba25396310b" "1ws0dr0kwclzbc2m0sihd3aqvbbg57ycia0fg6y294k6qipcxv38")
-        (mozilla-patch "icecat-bug-1141756-pt1.patch"    "f7c262517722" "0r1zzbxf47q5w8vcy402yin105ngam3csb2q7h7n8axm97307ykp")
-        (mozilla-patch "icecat-bug-1141756-pt2.patch"    "420396d5e26d" "0yv1pmpydzkirfwrxrgbw98dm4a9a4s0izha0wabrp4lb3655jv5")
-        (mozilla-patch "icecat-bug-1343210.patch"        "ed9521749d6f" "1j2zzi00qyqjgh15ingvl6f88zlk4imp31m5jmf7w5f9jqi5ly3k")
-        (mozilla-patch "icecat-bug-1342442.patch"        "775b6f85ef81" "00h9dgds7jv9n4cznj5qhh8liaf1b3wvnlqc2z7a3kj07ijllwzb")
-        (mozilla-patch "icecat-bug-1344527.patch"        "d4612b14c907" "1n3a0mp351a7xgvshm6688gh89hg0xci3y621zs2pyqsfm114366")
-        (mozilla-patch "icecat-CVE-2017-5442.patch"      "5f1aa2336998" "1y2marhrglc66vchd6z0jdmhg0pmkxp1cwim63bp9l6pj7lxyjma")
-        (mozilla-patch "icecat-CVE-2017-5430-pt01.patch" "512604631b23" "171nzxr4av4818d0fyg9hcsdxkai61sghl45xnsr2al34l28wsw3")
-        (mozilla-patch "icecat-CVE-2017-5430-pt02.patch" "16772200ad6f" "087j16rcbs5kgvpa096kd6jarwwwfrhwph54wzjn671wr1vnsvvd")
-        (mozilla-patch "icecat-CVE-2017-5441.patch"      "c744e9d57250" "0m70157lczf17hxb2pabsl3grhcjqallbdfpsd58q8q6fk99k6x3")
-        (mozilla-patch "icecat-CVE-2017-5433.patch"      "b4fc7a4cb5e0" "12q6mr5prpgqg5xnrww09qjm3jx2amb8zig62cd46ba8n9z2j9ab")
-        (mozilla-patch "icecat-CVE-2017-5429-pt02.patch" "21eac0b4fd2f" "1a6v0hwcc26gnlxygplc11dfzc8bykhh44j4gsz88kl5c5jqhlk9")
-        (mozilla-patch "icecat-CVE-2017-5432.patch"      "62df7046e959" "1qvxbpkf87g4vnl8hxqvwb1ydrpkqq3rbkivr8q4029rvgalf4rf")
-        (mozilla-patch "icecat-bug-1350599.patch"        "f6a978b2fcec" "0rkbbmw52mxgrmn1xny4jkn3slwb5jsqs4yr07ffhz7r801jy9iz")
-        (mozilla-patch "icecat-bug-1332839.patch"        "2ad0f87f5dba" "04458jidri521hgf3r63pl736zz4gmgv6b8spa32anfb7gryj8fy")
-        (mozilla-patch "icecat-bug-1337548.patch"        "29a1ad09a6ec" "0pld81bpc34w6g2ara54sx30msas55kwzr537pvxxc002lpvzs57")
-        (mozilla-patch "icecat-CVE-2017-5430-pt03.patch" "5dec7534760f" "1xh0y7srl7nznb6szpfiykd6r1ibyxrdvasc36w0chqjdmq7xr32")
-        (mozilla-patch "icecat-bug-1343851.patch"        "e104d53316d7" "1yhv3qvzzi3kr881ji1dnm8ydnr3snh2vzl3c4vdzmvrjx8q5rcb")
-        (mozilla-patch "icecat-bug-1345222.patch"        "864644fadcb0" "0qpplxyfn87bigzdkwlrhj9isd5gfafhjgqfckb239a09wwrblf3")
-        (mozilla-patch "icecat-bug-1348584.patch"        "7cee9ad555af" "0856bpa3n71a3y5m4gilcdb9ghb60p545xkv9zbr245r20mj32ds")
-        (mozilla-patch "icecat-bug-1346720.patch"        "6a597a9cd494" "091a5sanw3w3gl0jcmf8d60m59vwbh5v36vnar20m0hl7xrv4v7p")
-        (mozilla-patch "icecat-CVE-2017-5430-pt04.patch" "09693629803f" "18fhmsghq0232mhh8j10cy0a4979nmkbh43jlcyrg3l63l7795k4")
-        (mozilla-patch "icecat-CVE-2017-5430-pt05.patch" "2b8268ea97a9" "0l0f54krxdmqbgldikwjncxvn6irihcljldd3z039himrvplisjg")
-        (mozilla-patch "icecat-bug-1347700-pt1.patch"    "ee706896916c" "0m85x80y98c154hyis08kcy81kbw3v34na1v862vxzs939d3mc0n")
-        (mozilla-patch "icecat-bug-1347700-pt2.patch"    "08ecc2d92f81" "1s6411ccifw9l22hhmf32nhm8r5hbclnhy7jm2n228sqfr4h971g")
-        (mozilla-patch "icecat-bug-1337682.patch"        "15af6a323161" "1nxbwd0574gscnkxfyhzv3yqvxiccb2d0rmba9vi6i62646l2pd5")
-        (mozilla-patch "icecat-CVE-2017-5451.patch"      "d91260f0069a" "15w4rzz51hps2fr8djf5z1rzdwxshclk936mxv5anx1skkwms0y8")
-        (mozilla-patch "icecat-CVE-2017-5444.patch"      "7740cf7e121b" "1706mx4zmnib336p2wmfp9ncyl66lk2da82f28xvcw262mg1c8lw")
-        (mozilla-patch "icecat-bug-1347164-pt1.patch"    "b35a6d6dcdca" "077r0pns58fw3xd3qnbhib4q21vvw0aynpa8iyn1pycg8mppmd0f")
-        (mozilla-patch "icecat-bug-1347164-pt2.patch"    "a42fc05969b9" "1ijq8ccsk5k56h77sv5kqv48w7csj3vbakzq98awgbvypzfdyhss")
-        (mozilla-patch "icecat-bug-1347164-pt3.patch"    "f78ac1ac0a37" "0kj6jq482cqwyngy1kmb69zpq35xah8h33kml8i4l7andiyaq3zm")
-        (mozilla-patch "icecat-bug-1347164-pt4.patch"    "795a3d48a775" "18lw99hmrr93k95hk6v6bx5rcf22aa902x2yf5p6wxdqg56nc0zp")
-        (mozilla-patch "icecat-bug-1338699.patch"        "94ce63191069" "0rdivablincah3gbgl4wzjmqlraazivmr8bhqxdpy8dk0a6fvv4s")
-        (mozilla-patch "icecat-bug-1342301.patch"        "e640e758a7cd" "17f36vvf82n6shlaip7ji8qsy9861f9a5r79h000p3wb3bb7lbfs")
-        (mozilla-patch "icecat-bug-1342170.patch"        "df7ed78b7c0a" "1kq256i66hcm2k9d37i5ws354ksv3bbglmscdjv2v5f7wg3y967v")
-        (mozilla-patch "icecat-bug-1342634.patch"        "d72e56823bbb" "0c186d77lyyg0hjxw15d44rybw6yr5aw8g9m3311xfdn5wiygijb")
-        (mozilla-patch "icecat-bug-1348796-pt1.patch"    "cef01720769e" "0h57372lxanjs5zw9b3vwr2x36yz9gj73swyg50aqp13j4rcbpmy")
-        (mozilla-patch "icecat-bug-1348796-pt2.patch"    "7d3584b75f20" "1a4hvpsvn39832g54hsxhqs24cq8v4nd69jqskkgc1ybs09ncmr3")
-        (mozilla-patch "icecat-bug-1192800.patch"        "e56b0938ea0f" "1hlbxhjzj65s6p2v6f66zdfb3gw5yx77msgq5idsv9jip2w88mpq")
-        (mozilla-patch "icecat-bug-1309438.patch"        "1f30d97563c8" "0rvq729fg9j959ha9qvw5wv7r6vw70qvpy7ynifgqhgrpa749n70")
-        (mozilla-patch "icecat-bug-1315332.patch"        "66495c8d9459" "0vzlx8i0cidpymm6ar07h3yk63fxf64f0b2vb0pihd72h0jzd5s9")
-        (mozilla-patch "icecat-bug-1346439.patch"        "a9fcc2dc324a" "13991jijwa84yczkmc212s23w269r8b1a4yiygqgwaily29l1dc5")
-        (mozilla-patch "icecat-CVE-2017-5469.patch"      "3dcc5f5c2df4" "0b36m6rgxc05h39l6wkzi6dlmq9brcigk7xjrifs4786f0z564hz")
-        (mozilla-patch "icecat-CVE-2017-5430-pt06.patch" "ac0ca89b5a6b" "1646y9y2wmq8pxb081x3076dq9ana7hh5fxwbsnn17v5wqhi8gfb")
-        (mozilla-patch "icecat-CVE-2017-5467.patch"      "6ed26e6c1a09" "0r1n1dwb4l8xwlns0aifyka6mldb6cy2crhh2qkap64cpj3bzl9s")
-        (mozilla-patch "icecat-CVE-2017-5439.patch"      "2fde528ca7b6" "0iv0sjhnh7br0z3pcpk346wbj162ynacfk3p9309hg6kr1cd92fp")
-        (mozilla-patch "icecat-CVE-2017-5440.patch"      "d88bd03d1234" "1pls63djh4w5023ag3fwjk79cpx816ilgajl5l1qlqyacl8c0v4p")
-        (mozilla-patch "icecat-bug-1349987.patch"        "3282e8f6a121" "1dyc84h7v0l9gndmbiwfqk33f703zr3fv96mwbn58msdf20ma9l2")
-        (mozilla-patch "icecat-CVE-2017-5434.patch"      "ee0a7b55e470" "01vs4p56p0ii0fvmg0kn7gaz6gwf2kwmv6v4pa6v68hwxx1phaag")
-        (mozilla-patch "icecat-CVE-2017-5430-pt07.patch" "a4e1e04c88ee" "0q07qwzxf2iisrhknjbn1zksv2rr6qzzh6w8ibzlj1sqbdg3h852")
-        (mozilla-patch "icecat-bug-1335043.patch"        "a49419f75b9c" "0pkh5yimnj3p1sd2g9vndgcn11zdx6yhpa88s8vk7fqbs8gf1fz3")
-        (mozilla-patch "icecat-bug-1299500-pt01.patch"   "5fdd36b4400a" "1gdrsbf03wf9v90f1bd2sp9ac38a9lzpzfrv8l8f7gvy70acjxmb")
-        (mozilla-patch "icecat-bug-1299500-pt02.patch"   "34776df5ce44" "15mlf59ii0rk97j8mlf3wz1q0w28ma5mll47dvci6cv3dziai9f1")
-        (mozilla-patch "icecat-bug-1299500-pt03.patch"   "26189af0f504" "1wh1s2xd1w03zi5jdaagk6j5i8v9xsm9360xmv446wdraygkqbci")
-        (mozilla-patch "icecat-bug-1299500-pt04.patch"   "798a8fe17e7b" "0vlalanffq3paa7zab003v1d377x5pvcsy8nc8fr5pdlvi622jll")
-        (mozilla-patch "icecat-bug-1299500-pt05.patch"   "daf2e4f2bd5c" "1rxbjbyr1a6dxjb0qj6900g3kqjphir40pis4qcfl8q811y18jwk")
-        (mozilla-patch "icecat-bug-1299500-pt06.patch"   "1187091c3134" "0r8zz4zbglxg6sl0ybz9lyq1c5w2nqp0xcn2d3rz9bvyj8byqc7m")
-        (mozilla-patch "icecat-bug-1299500-pt07.patch"   "a908f2c2fe30" "1fvwy3fxfrdi9y8hmf4f9aa72i0g6s55s8cp0w22gllsl1f6gvyf")
-        (mozilla-patch "icecat-bug-1299500-pt08.patch"   "e95a26cf7a42" "0pd0kcn7dqd1gy1si85as5zzc96v7vq0v8n3g3gjzms5rdnk085l")
-        (mozilla-patch "icecat-bug-1299500-pt09.patch"   "d63f3b14e571" "0cqd7dal6prsrj7bn2d699idbq4fzjry9vqlbmm9dkyn5683sdy1")
-        (search-patch  "icecat-bug-1299500-pt10.patch") ; Adapted for GNU IceCat, based on:
-                                                        ;"08f2bc167ae8" "07d1i23ffvi74a5558bb0645vbrap6qlrpcwfyb7dm3llbfnfycy")
-        (mozilla-patch "icecat-bug-1299500-pt11.patch"   "263f27805689" "0nczkvyvlpdjif3xfvj7g2mfz6j06w99x2sblqfmqq6mwrlavpq0")
-        (mozilla-patch "icecat-CVE-2017-5456.patch"      "538e0b382cc2" "0wq2ywn4a7i4ypcx03hl23a4xx3lavz7y505m9kw43fx15r4070r")
-        (mozilla-patch "icecat-bug-1280079.patch"        "6fbcb6a4b91e" "0qcwz9js1bwlnwyv3vhkm0hvahd043lm2bijqsmm0jy20dbslga4")
-        (mozilla-patch "icecat-CVE-2017-5435.patch"      "a362e1205ba4" "127i4ybfb4dk5axp4dxcl7ag7zyx7b517myvs6q4yd8981d1jjd3")
-        (mozilla-patch "icecat-bug-1341960.patch"        "b24ce30e8cfa" "0a521wn8hbaliawmxs21b8wc1gkha8iih62j4zyrfg5rm7ff6p6s")
-        (mozilla-patch "icecat-CVE-2017-5454.patch"      "ac40d4a4e414" "0dnzz95vpq32bsh6hajk4hrcrxwd4w6m7kayl2iziryny86jgak2")
-        (mozilla-patch "icecat-CVE-2017-5429-pt03.patch" "e469af8e9ccc" "0yn8zqakr9yw0jvysxyc8if09kqf4fr5rq4p9qdkb1p81p4dpmp5")
-        (mozilla-patch "icecat-bug-1351094.patch"        "4c1383e76adc" "0wdldx88qabyhrwnnii44pggmfgqylzxy6ckwzgq86r2yipi4rsq")
-        (mozilla-patch "icecat-bug-1336527.patch"        "b9f53baeabb3" "0y1l641ffbr4i85p0wc1ir6bcsy6h94bchbfc7ppxfijva4fjgvd")
-        (mozilla-patch "icecat-bug-1345716.patch"        "2569af645a98" "1d6lx85ij90j6q6ixwp0h3w7y424yvkz0njsi0my727akbli5rsn")
-        (mozilla-patch "icecat-bug-1208957.patch"        "2b68880d8f6b" "1pl0vkv7clyjchi9kg4995z82sr8xv7cbz1kvsg1v66md6pmp4s4")
-        (mozilla-patch "icecat-bug-1208957.patch"        "bc646835442b" "0f29r5yvlb5w84nvvn6j9r9dq5314jgygjmsna3grzigpkb88gyj")
-        (mozilla-patch "icecat-bug-1347944.patch"        "47cb652ddc25" "0n7871958zwndwz53xvzwjv41v5ar1vxaam8kzr5dkbqmprddimx")
-        (mozilla-patch "icecat-bug-1347632.patch"        "7d8f7a52a108" "0gkbkzkz989j7pk3ia1rfvyjg3si8hnnadwkb2rw13qjxdzhx2zn")
-        (mozilla-patch "icecat-CVE-2017-5438.patch"      "154c93b9435b" "00f8lr5s8h68392bb45zi0xfgqrgfkdxbzwdypp10d89784fvjvd")
-        (mozilla-patch "icecat-bug-1347486.patch"        "15dbaf157058" "1mwgfnx1zsvhp0pgmc8577yw6lnf7g3ikdfj0r21fgffrn76bp69")
-        (mozilla-patch "icecat-bug-1218437.patch"        "e13692bfd5f5" "10jrbs26m8l1vchw6svssrb5h8p82acrcmkx92ybvv4qbaq2bcl0")
-        (mozilla-patch "icecat-bug-1345853.patch"        "5fa27dc4c4a3" "1sqqa4hir2bsnnwnlr34has62kpncmw6l9mylwprd09fxmzzgrd7")
-        (mozilla-patch "icecat-CVE-2017-5429-pt04.patch" "00c051cd38c7" "1d4aa4nqyjc01mg3jvdjjp7z05c2qhdjj85dhdrd9c18gfiyv4fi")
-        (mozilla-patch "icecat-bug-1349921.patch"        "c6897adc4037" "0acvcdy8awdmpz84243jzf82agrm73wqa198fjbns1p1v3s425z2")
-        (mozilla-patch "icecat-bug-1338623.patch"        "edcafd42dd52" "1xqgjy7a62jsyz1b5mibrcnd7zpb4gdaas0a6z5dwfvz52j4xa16")
-        (mozilla-patch "icecat-bug-1294799.patch"        "0617b074ec3d" "19h7dj44shvdzzj87svpv5q97cikxyxhiwfzf9rnqj1b7fw0xrdh")
-        (mozilla-patch "icecat-bug-1345049.patch"        "88466b911357" "16pgd13mw9a0snyhq6vxmjc7kr9mikvhazkgbc6vpykwi0i0z85b")
-        (mozilla-patch "icecat-bug-1339999.patch"        "b7cb8f8b0877" "0zv1kxcva699ahb9s36l4d9mlrkm0b7hmh6g1422j6iijn136vxb")
-        (mozilla-patch "icecat-bug-1350868.patch"        "ddd6c44790c0" "182ii4wsz2vdd1q4dszd5hka8i2n0ghmqk7l39bd02d3zfibhhvc")
-        (mozilla-patch "icecat-bug-1342360.patch"        "416681a239ef" "0ngs8xgmdhz9ag4dlrqhr0vmanqxr9q2vf16jpm3cimyc06zjxz4")
-        (mozilla-patch "icecat-CVE-2017-5429-pt05.patch" "a76e626ae6db" "0zn2j8fmhp7502kx1jhrvh85vsys5x6x6gw3v4gl0h8px354v6yw")
-        (mozilla-patch "icecat-CVE-2017-5429-pt06.patch" "0ce4196ab86e" "0isczy8261qz2zsdxax4j51gypz0gi39q7nfwxg88sl81kc5vym8")
-        (mozilla-patch "icecat-CVE-2017-5429-pt07.patch" "39da731d80ed" "0vswnv1hqa7r8iz6y5ja7i6w3cyq5xrcd66c1q29ac6n4gn7x338")
-        (mozilla-patch "icecat-CVE-2017-5430-pt08.patch" "1b148cf9c545" "0ilrib0c2c7mfycpz2hq3vrfdf6sf8lcdbfjk6r4xyxv54vh3lwk")
-        (mozilla-patch "icecat-bug-1325841.patch"        "74e9f13c554f" "0glzcgjsy71y78zaccn33w8djs96i6dd3gafyzkihnkpfddd5cij")
-        (mozilla-patch "icecat-CVE-2017-5445.patch"      "d7d87adfe186" "02p705si2j69ya8n5a916x58nycs07ja0sfpxrwl16f4n2plc91h")
-        (mozilla-patch "icecat-bug-1346424.patch"        "5ede402f494f" "0kbx8yn8ppv7099ic6nhw32f7h42pnwk6dpvb179ilw90ah902q7")
-        (mozilla-patch "icecat-CVE-2017-5430-pt09.patch" "da44c5cfab2e" "16i4dz5sfkhh3a0khrcf8zn5w20rkf4aqwygjj3cp4qhdh7wnr75")
-        (mozilla-patch "icecat-CVE-2017-5430-pt10.patch" "0f966927bd55" "07pkhc6l6ylwrzgfm7i1galrvjawqqrhvhk6jcw4b30sfhi0bxq1")
-        (mozilla-patch "icecat-CVE-2017-5429-pt08.patch" "f0f591f82cc0" "18p091503vpfpp4l3d7hkqj78zavv6qj1lynhlfx67zdp3xqcf8r")
-        (mozilla-patch "icecat-CVE-2017-5464.patch"      "1852dc0beba4" "1zdnkrsqjfv1q2jhj4829ypiwyg78n4jv54yn3b74vwcf5zvzx8m")
-        (mozilla-patch "icecat-bug-1083140.patch"        "6913f0537208" "0vaf61ryp0bzkz6l1w73alhglibbgm0jcgccxvvm43ni67pcxqbq")
-        ;; The patch commented out below updates the bundled tzdata,
-        ;; but we can't use it because it contains a GIT binary patch.
-        ;; TODO: Consider updating the bundled tzdata, or unbundling it.
-        ;; (mozilla-patch "icecat-bug-1343493.patch"       "35496444b380" "1wa79az7121xw078cgpczxavrqy0fsp4ib2nb69giha6acxcaqas")
-        (mozilla-patch "icecat-CVE-2017-5430-pt11.patch" "64495dfa29db" "0m7vklnwnaf7sw97m87bm4lb9pjmlh1vvrbaf1931db8nhd6m737")
-        (mozilla-patch "icecat-bug-1350783.patch"        "26cd34db3c14" "15vq3lrilg3n9j80cdjmk7xib2iq5gcx9ypq8xs7f5ya9ibasqlx")
-        (mozilla-patch "icecat-CVE-2017-5429-pt09.patch" "6cd77a0d7ac0" "0kxlbl5m3gffxqrv7ky3swsbyg1ykj0wjhlfl9amsb4g8gra3zkj")
-        (mozilla-patch "icecat-CVE-2017-5460-pt1.patch"  "a803be74843c" "1ywwakzjkfr714i9pfn152n86c6rp427chzdys8phdkcvp5d5p45")
-        (mozilla-patch "icecat-CVE-2017-5460-pt2.patch"  "73762c1392ae" "18jy9ccqvn6l6hznvq5xsqm1pc7i81svc2grgv21wfwg9sd6zwwh")
-        (mozilla-patch "icecat-bug-1337392-pt1.patch"    "4ab6d5c43036" "07pygzngssra9wnmqqrs24d6gc5kfh20fkzvpcasxh4f2hi21z9b")
-        (mozilla-patch "icecat-bug-1337392-pt2.patch"    "13f2d85da9a7" "1iwfz7dp5i93bhjspy4kyz0vqrl8x8ndg5kxdyzwb1b339xim9qy")
-        (mozilla-patch "icecat-CVE-2017-5429-pt10.patch" "7a30cddfcd54" "1773pijh6gi086l930cn1a0k7kvy7f3cnirfblw98sq7h9qfyy33")
-        (mozilla-patch "icecat-bug-1345873-pt1.patch"    "75cea353ad78" "14cig2y7d3p033hx3096gxzlqwgddq8d0ig0g3l8p1b0xwvvyryl")
-        (mozilla-patch "icecat-bug-1345873-pt2.patch"    "b08ef5a82f89" "0afz01jv850x09df85d7ycqkcdlafi4w2xi5k155lk2b92w8lhpj")
-        (mozilla-patch "icecat-bug-1340163.patch"        "f3f2a995a239" "1ydsj4ja475jscalkw6ggdxgbsp5l2mam5109k0y7c98abzqraxk")
-        (mozilla-patch "icecat-bug-1348174-pt1.patch"    "330904d6f0dc" "19wnp4d8481w86xkk78n7c7wrr99rq6cq3v09hd8am4n0mzwzaja")
-        (mozilla-patch "icecat-bug-1348174-pt2.patch"    "c61b99483c4b" "0mjsahi8ly24415ri2sylas6g0kb8wawi095idqiq019c3r7q9cq")
-        (mozilla-patch "icecat-bug-1348601.patch"        "1848bd238064" "1f5kadhn6w1rs26sdrcc3mq0zzlmmsm6ymqhshkzn57nrj6akm7b")
-        (mozilla-patch "icecat-bug-1345991.patch"        "2008a4b89d9a" "07fkg9r2rxbk362ckv2h8inhd2dadvzigshm6zsjfjs2fyzp95hp")
-        (mozilla-patch "icecat-bug-1344498-pt1.patch"    "9acd0103d67f" "1f0j667g05h9ydmc924cs8mzif1n7s56wixsgnyqc3s231dswhml")
-        (mozilla-patch "icecat-bug-1344498-pt2.patch"    "49aadb25b1ec" "0s618m802b1x5pyqh5mj1azaxch7ggxq9503b7mwhg90vz8qw7ki")
-        (mozilla-patch "icecat-bug-1344205.patch"        "34b453085dc0" "02h1bh24f9i5sm3my07m2q58cpzqfhagwwv11l9fidxcm9dmzmrd")
-        (mozilla-patch "icecat-bug-1349862.patch"        "864ff0c36b6b" "1i3wmigv982x9hzkfg25jhyvkynmar69x6cj6r4g9zkk5f5ypdh5")
-        (mozilla-patch "icecat-CVE-2017-5459.patch"      "5ec6fbedb420" "07flhha4rkjbry5590yr5by36ypb1k33qm3rzkbmw0vk5gyak8dp")
-        (mozilla-patch "icecat-CVE-2017-5465.patch"      "2b95de78a92c" "0vvq1fz84yyw7za929x6ki25paivlwd4ng1ddkcb2bw6da6yp12k")
-        (mozilla-patch "icecat-CVE-2017-5466.patch"      "a5ec5e70abf1" "1jjviyk6db8iccd7997mwmgs188fsyrzivap3ffjf8m6j4mf9cra")
-        (mozilla-patch "icecat-bug-1347646.patch"        "1b50711a46ce" "1i3505zzgf0mvg2405y2gzq36xc8ic2ga8w6d3n9kqryxj0mc7bh")))
+        (mozilla-patch "icecat-bug-1342366.patch"        "fb43f6690a26" "1vnkjpq2bcqwzmjkgyqv8wj0ndrrsyix3qy1rsb5is6pjmi9sbaa")
+        (mozilla-patch "icecat-bug-1343818.patch"        "90f870bbec29" "0mbki955f71n4yr9p0yc7kh5jwq7vs4bs4rhaazdncirbr564hm6")
+        (mozilla-patch "icecat-bug-1348454.patch"        "c1cd8a02669f" "1wf0107763rw45kxkak7478vlax06ay7076cbm7ysxl7vijbr52w")
+        (mozilla-patch "icecat-bug-1297111.patch"        "2553531f83b9" "0ibf59pa8czdyhc25sas6zhh2gf1k8vr8fklis2b1ms3n1qnzrha")
+        (mozilla-patch "icecat-bug-1355873.patch"        "9ee455ddcd68" "0d38hi4556635g9ag805vfyffdgfsp4a8v3d9ldffdp99ypv2ixj")
+        (mozilla-patch "icecat-bug-1348424-pt1.patch"    "6472c7006a73" "1fgydas23fzj49n4g43133bgjn98b2h38bii4knl7z7pm3fs2wws")
+        (mozilla-patch "icecat-bug-1348424-pt2.patch"    "0d5a26b29816" "03mkghl9i83jk1axr8bvw8la6shbggkabf23if8a9vi5jdv8182x")
+        (mozilla-patch "icecat-bug-1357092.patch"        "e78c943af07f" "0r830k6hja8z9rjk2nqjg8zfzr0wjcnic8rddh7jmc1inr1w3crm")
+        (mozilla-patch "icecat-bug-1352093.patch"        "d7c06f2d0d13" "1ahyns5v37w91bilvb3pa8kkdzkkn3fcxmi49jr5bycjlawljrm4")
+        (mozilla-patch "icecat-bug-1349595.patch"        "9071c7d4cc9c" "12128sf8s3zwv2w16kfl5jry9d6ky7hvps2006184rg23p32aj6n")
+        (mozilla-patch "icecat-bug-1336979.patch"        "8bbc7b586d68" "0c13imyp1nq18in3yb1zcyi41b69svh4fn8msyj0c2lhbf8qnqcw")
+        (mozilla-patch "icecat-bug-1352556.patch"        "6d80ca63ff8b" "0s893fn6v0p323lcnl4cbkg1zd7gs1p0bw76ki6cmiapkn63gs13")
+        (mozilla-patch "icecat-bug-1359547.patch"        "43d7b98d8743" "1dhgy1jkvn3c4k27hbv8p16w7l09b8hd4w9zzpk8dpn4h78ncs3h")
+        (mozilla-patch "icecat-CVE-2017-5031.patch"      "bd4fcdee9a06" "0xz1r342023a0bsllhjbzn6v75lpqznwacqyikb7q8i4hxkxh78a")
+        (mozilla-patch "icecat-bug-1346499.patch"        "747fd6c81983" "00iscyn4wr69205ppiaghlnd32845f5lcsl303v0fcdd4d1v04vc")
+        (mozilla-patch "icecat-bug-1334443-pt1.patch"    "16201e8478df" "1k91xaai25vn1svkaldnsd2s8br3fgvnk5l54k3n3lk3m5vj55hv")
+        (mozilla-patch "icecat-bug-1334443-pt2.patch"    "f100e5cf3bcb" "1cgbbbnkrd3ydfw99rhnpqdp5zq65537mg8sa1s9ajxkjjd1dkwj")
+        (mozilla-patch "icecat-bug-1354810.patch"        "e579ef6e8d11" "0cmrh8dl85lzjxpbni08xbs8qq15sljnpg70a7rsl0jdbgih3mdx")
+        (mozilla-patch "icecat-bug-1356755.patch"        "4a3fce67b52d" "126i9nwxsb3sjwb7dvhafacq86glnhx7r7jjv0h9v21s1w0kx4wj")
+        (mozilla-patch "icecat-bug-1273265.patch"        "7902fea300b8" "1jkrl8hdycsi17dd1m1vvl6gm1skhpf10q2m29zwfr8l40fd6a3q")
+        (mozilla-patch "icecat-bug-1353204.patch"        "b5a21502aeff" "13rbrhvr37w95av9d4hkgi913nq0j6k2iijydylvprcn18cwibp0")
+        (mozilla-patch "icecat-bug-1028195.patch"        "69a5ca2bf867" "0q8cgi6837ikpg7gsvywmzhq0i102845apcbrd6mw0205qqsnw5c")
+        (mozilla-patch "icecat-bug-1347835.patch"        "bc635f45af37" "1fny422l6yc80901x6swybr8nk0in1wxfgy97ky4bdkcqlnmzpqv")
+        (mozilla-patch "icecat-bug-1241066.patch"        "b922ca70cce5" "09hcf9rm7ng3vj5y267w0c9h6pqinnz8gjlkwx1337xh43mdvqjv")
+        (mozilla-patch "icecat-bug-1346012.patch"        "1ce6d0652921" "163ji64a86h682frh1jq016w1mjf8g24r8cni0irsdmiihis7zxc")
+        (mozilla-patch "icecat-bug-1324140.patch"        "8886f9cd5dd3" "0byabs9md8r3pc4r67sv2759427n1za0gfayln40nx47n2p52kmg")
+        (mozilla-patch "icecat-bug-1342552.patch"        "ad995e90916b" "02nq9sg675p26z99nr2pykbz51hi2phf0gmrb1bjpq9pjbll7gsa")
+        (mozilla-patch "icecat-bug-1355039.patch"        "4ae71415fecf" "0yfkkdkkimad9a3w734xx85lb7hrl870c8k8an7w78fq3vl3fjnd")))
       (modules '((guix build utils)))
       (snippet
        '(begin
@@ -519,7 +483,6 @@ standards.")
                       ;;
                       ;; TODO: Use system graphite2.
                       ;;
-                      "dom/devicestorage"  ; Removed in ESR 52.1, awkward to patch out
                       "modules/freetype2"
                       "modules/zlib"
                       "modules/libbz2"
index 90a809e..13c5529 100644 (file)
@@ -63,7 +63,8 @@
     (arguments
      `(#:modules ((ice-9 match)
                   (guix build gnu-build-system)
-                  (guix build utils))
+                  (guix build utils)
+                  (srfi srfi-1))
        #:tests? #f ; Tests are run by the all.bash script.
        #:phases
        (modify-phases %standard-phases
index c284a8d..5c3b3c5 100644 (file)
@@ -98,7 +98,7 @@ arrays of data.")
 (define-public gstreamer
   (package
     (name "gstreamer")
-    (version "1.10.4")
+    (version "1.12.0")
     (source
      (origin
       (method url-fetch)
@@ -107,7 +107,7 @@ arrays of data.")
             version ".tar.xz"))
       (sha256
        (base32
-        "062jidnw17hkpva6ddygp80gyasyigfkpm1y7w56rk56a2pzbhjh"))))
+        "00j3zwm22582fwyzh316mnh6ghicv4ya93yk52kz4avx57wfxm8l"))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (arguments
@@ -146,7 +146,7 @@ This package provides the core library and elements.")
 (define-public gst-plugins-base
   (package
     (name "gst-plugins-base")
-    (version "1.10.4")
+    (version "1.12.0")
     (source
      (origin
       (method url-fetch)
@@ -154,7 +154,7 @@ This package provides the core library and elements.")
                           name "-" version ".tar.xz"))
       (sha256
        (base32
-        "1dsyjf6rncsbg4rfj40cvf1wwpjj9h3j3c7bh4zp7jylnfv4blpn"))))
+        "0k9nckvzk2hhhg7w4gzmd7is0lbswdmrkwmcgblvdf2lgy3wcprl"))))
     (build-system gnu-build-system)
     (outputs '("out" "doc"))
     (propagated-inputs
@@ -201,7 +201,7 @@ for the GStreamer multimedia library.")
 (define-public gst-plugins-good
   (package
     (name "gst-plugins-good")
-    (version "1.10.4")
+    (version "1.12.0")
     (source
      (origin
       (method url-fetch)
@@ -210,7 +210,7 @@ for the GStreamer multimedia library.")
             name "-" version ".tar.xz"))
       (sha256
        (base32
-        "0zjdwxn83sp9wjp9rxjbyk8kf284g9av7l2v6rjldi586hacd1la"))))
+        "1g1f6xyj0f06nmsl01xhr32x2rwyb857yjkrig1013iknx6p67ca"))))
     (build-system gnu-build-system)
     (inputs
      `(("aalib" ,aalib)
@@ -266,14 +266,14 @@ developers consider to have good quality code and correct functionality.")
 (define-public gst-plugins-bad
   (package
     (name "gst-plugins-bad")
-    (version "1.10.4")
+    (version "1.12.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://gstreamer.freedesktop.org/src/"
                                   name "/" name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0rk9rlzf2b0hjw5hwbadz53yh4ls7vm3w3cshsa3n8isdd8axp93"))))
+                "0d45zgdnflwpwvlb1fmgj35yfds9m1g46mhppvlsh5dky7zkrdqi"))))
     (outputs '("out" "doc"))
     (build-system gnu-build-system)
     (arguments
@@ -343,7 +343,7 @@ par compared to the rest.")
 (define-public gst-plugins-ugly
   (package
     (name "gst-plugins-ugly")
-    (version "1.10.4")
+    (version "1.12.0")
     (source
      (origin
        (method url-fetch)
@@ -351,7 +351,7 @@ par compared to the rest.")
                            name "/" name "-" version ".tar.xz"))
        (sha256
         (base32
-         "0ngsiwcsz3jd08id4mc0qiy2q1n7h2kkvdnh3r1vm725m1ycg1k3"))))
+         "1mhasi20kvi9p72kh4qyfzync509wqqkk8fp2xxyhgp88r8bls2y"))))
     (build-system gnu-build-system)
     (inputs
      `(("gst-plugins-base" ,gst-plugins-base)
@@ -382,7 +382,7 @@ distribution problems in some jurisdictions, e.g. due to patent threats.")
 (define-public gst-libav
   (package
     (name "gst-libav")
-    (version "1.10.4")
+    (version "1.12.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -390,7 +390,7 @@ distribution problems in some jurisdictions, e.g. due to patent threats.")
                     name "-" version ".tar.xz"))
               (sha256
                (base32
-                "12r68ri03mgbbwsxyn6yklgfsq32rwvyq83zw0aq7m73fp5gx83c"))))
+                "1i2h0ymh9jy0rnkcan2rdsdfq7l02rmp33g712q81s9fcizlgl9r"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--with-system-libav")
@@ -420,7 +420,7 @@ compression formats through the use of the libav library.")
 (define-public python-gst
   (package
     (name "python-gst")
-    (version "1.10.4")
+    (version "1.12.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -428,7 +428,7 @@ compression formats through the use of the libav library.")
                     "gst-python-" version ".tar.xz"))
               (sha256
                (base32
-                "04l2hvvz9b0f3nyds1k3yfk5di8a91fpr6maj19c11mwp1s82l2r"))))
+                "01wwbn6z3771ad55ljl9gs6irrs9a8p186zrgrkmzs91kxmxwcxy"))))
     (build-system gnu-build-system)
     (arguments
      ;; XXX: Factorize python-sitedir with python-build-system.
index 32d6779..5b85a61 100644 (file)
@@ -32,6 +32,7 @@
 (define-module (gnu packages guile)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin) ;;for tree
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bdw-gc)
@@ -690,7 +691,7 @@ for Guile\".")
                     (("moddir =.*/share/guile/site" all)
                      (string-append all "/@GUILE_EFFECTIVE_VERSION@")))))))
     (build-system gnu-build-system)
-    (native-inputs `(("guile" ,guile-2.0)))
+    (native-inputs `(("guile" ,guile-2.2)))
     (home-page "http://savannah.nongnu.org/projects/guile-json/")
     (synopsis "JSON module for Guile")
     (description
@@ -706,7 +707,10 @@ specification.  These are the main features:
     (license license:lgpl3+)))
 
 (define-public guile2.2-json
-  (package-for-guile-2.2 guile-json))
+  (deprecated-package "guile2.2-json" guile-json))
+
+(define-public guile2.0-json
+  (package-for-guile-2.0 guile-json))
 
 (define-public guile-minikanren
   (package
@@ -794,6 +798,74 @@ See http://minikanren.org/ for more on miniKanren generally.")
 (define-public guile2.2-minikanren
   (package-for-guile-2.2 guile-minikanren))
 
+(define-public guile-miniadapton
+  (let ((commit "1b5749422304567c96ac5367f2221dda9eff5880")
+        (revision "1"))
+    (package
+      (name "guile-miniadapton")
+      (version (string-append "0-" revision "." (string-take commit 9)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/fisherdj/miniAdapton.git")
+                      (commit commit)))
+                (file-name (string-append name "-" version "-checkout"))
+                (sha256
+                 (base32
+                  "09q51zkw2fypad5xixskfzw2cjhjgs5cswdp3i7cpp651rb3zndh"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:modules ((guix build utils)
+                    (ice-9 popen)
+                    (ice-9 rdelim)
+                    (srfi srfi-1)
+                    (guix build gnu-build-system))
+         #:tests? #f                    ; there is no test target
+         #:phases
+         (modify-phases %standard-phases
+           (delete 'configure)
+           (delete 'build)
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((cwd        (getcwd))
+                      (scm-files  (find-files "." "\\.scm$"))
+                      (effective  (read-line
+                                   (open-pipe* OPEN_READ
+                                               "guile" "-c"
+                                               "(display (effective-version))")))
+                      (module-dir (string-append (assoc-ref outputs "out")
+                                                 "/share/guile/site/"
+                                                 effective)))
+
+                 ;; Make installation directories.
+                 (mkdir-p module-dir)
+
+                 (setenv "GUILE_AUTO_COMPILE" "0")
+
+                 ;; Compile .scm files and install.
+                 (every (lambda (file)
+                          (let ((go-file (string-append module-dir "/"
+                                                        (basename file ".scm") ".go")))
+                            ;; Install source module.
+                            (install-file file module-dir)
+                            ;; Compile and install module.
+                            (zero? (system* "guild" "compile" "-L" cwd
+                                            "-o" go-file file))))
+                        scm-files)))))))
+      (inputs
+       `(("guile" ,guile-2.2)))
+      (home-page "https://github.com/fisherdj/miniAdapton")
+      (synopsis "Minimal implementation of incremental computation in Guile
+Scheme")
+      (description "This package provides a complete Scheme implementation of
+miniAdapton, which implements the core functionality of the Adapton system for
+incremental computation (also known as self-adjusting computation).  Like
+Adapton, miniAdapton allows programmers to safely combine mutation and
+memoization.  miniAdapton is built on top of an even simpler system,
+microAdapton.  Both miniAdapton and microAdapton are designed to be easy to
+understand, extend, and port to host languages other than Scheme.")
+      (license license:expat))))
+
 (define-public guile-irregex
   (package
     (name "guile-irregex")
@@ -965,7 +1037,7 @@ Guile's foreign function interface.")
   (let ((commit "607721fe1174a299e45d457acacf94eefb964071"))
     (package
       (name "guile-sqlite3")
-      (version (string-append "0.0-0." (string-take commit 7)))
+      (version (string-append "0.0-1." (string-take commit 7)))
 
       ;; XXX: This used to be available read-only at
       ;; <https://www.gitorious.org/guile-sqlite3/guile-sqlite3.git/> but it
@@ -993,7 +1065,7 @@ Guile's foreign function interface.")
          ("automake" ,automake)
          ("pkg-config" ,pkg-config)))
       (inputs
-       `(("guile" ,guile-2.0)
+       `(("guile" ,guile-2.2)
          ("sqlite" ,sqlite)))
       (arguments
        '(#:phases (modify-phases %standard-phases
@@ -1471,6 +1543,8 @@ is no support for parsing block and inline level HTML.")
                                            effective))
                 (source (assoc-ref %build-inputs "source"))
                 (doc (string-append out "/share/doc/scheme-bytestructures"))
+                (sld-files (with-directory-excursion source
+                             (find-files "bytestructures/r7" "\\.exports.sld$")))
                 (scm-files (filter (lambda (path)
                                      (not (string-prefix? "bytestructures/r7" path)))
                                    (with-directory-excursion source
@@ -1502,7 +1576,7 @@ is no support for parsing block and inline level HTML.")
                                                  file))
                            (error (format #f "Failed to compile ~s to ~s!"
                                           file go-file)))))
-                     scm-files)
+                     (append sld-files scm-files))
 
            ;; Also copy over the README.
            (install-file "README.md" doc)
@@ -1767,14 +1841,14 @@ HTML (via SXML) or any other format for rendering.")
 (define-public guile-sjson
   (package
     (name "guile-sjson")
-    (version "0.2")
+    (version "0.2.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dustycloud.org/misc/sjson-" version
                                   ".tar.gz"))
               (sha256
                (base32
-                "09hnh2brc7ihh8dv4g5hdmdj8rs8p9l3pmlgafkx145grdg7wprx"))))
+                "1mzmapln79vv10qxaggz9qwcdbag3jnrj19xx8bgkmxss8h03sv3"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
index 2027395..de8043d 100644 (file)
@@ -13,8 +13,9 @@
 ;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
+;;; Copyright © 2016, 2017 Kei Kebreau <kei@openmailbox.org>
 ;;; Copyright © 2017 ng0 <contact.ng0@cryptolab.net>
+;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -155,6 +156,41 @@ APNG patch provides APNG support to libpng.")
        (sha256
         (base32 "1n2lrzjkm5jhfg2bs10q398lkwbbx742fi27zgdgx0x23zhj0ihg"))))))
 
+(define-public pngcrunch
+  (package
+   (name "pngcrunch")
+   (version "1.8.11")
+   (source (origin
+            (method url-fetch)
+            (uri (string-append "mirror://sourceforge/pmt/pngcrush/"
+                                version "/pngcrush-" version ".tar.xz"))
+            (sha256 (base32
+                     "1c7m316i91jp3h1dj1ppppdv6zilm2njk1wrpqy2zj0fcll06lwd"))))
+   (build-system gnu-build-system)
+   (arguments
+    '(#:make-flags '("-f" "Makefile-nolib")
+      #:tests? #f ; no check target
+      #:phases
+      (modify-phases %standard-phases
+        (replace 'configure
+          (lambda* (#:key inputs outputs #:allow-other-keys)
+            (substitute* "Makefile-nolib"
+              (("^(PNG(INC|LIB) = )/usr/local/" line vardef)
+               (string-append vardef (assoc-ref inputs "libpng") "/"))
+              (("^(Z(INC|LIB) = )/usr/local/" line vardef)
+               (string-append vardef (assoc-ref inputs "zlib") "/"))
+              ;; The Makefile is written by hand and not using $PREFIX
+              (("\\$\\(DESTDIR\\)/usr/")
+               (string-append (assoc-ref outputs "out") "/"))))))))
+   (inputs
+    `(("libpng" ,libpng)
+      ("zlib" , zlib)))
+   (home-page "https://pmt.sourceforge.net/pngcrush")
+   (synopsis "Utility to compress PNG files")
+   (description "pngcrusqh is an optimizer for PNG (Portable Network Graphics)
+files.  It can compress them as much as 40% losslessly.")
+   (license license:zlib)))
+
 (define-public libjpeg
   (package
    (name "libjpeg")
@@ -299,6 +335,7 @@ extracting icontainer icon files.")
 (define-public libtiff
   (package
    (name "libtiff")
+   (replacement libtiff/fixed)
    (version "4.0.7")
    (source (origin
             (method url-fetch)
@@ -347,6 +384,19 @@ collection of tools for doing simple manipulations of TIFF images.")
                                   "See COPYRIGHT in the distribution."))
    (home-page "http://www.simplesystems.org/libtiff/")))
 
+(define libtiff/fixed
+  (package
+    (inherit libtiff)
+    (source
+     (origin
+       (inherit (package-source libtiff))
+       (patches
+        (append
+         (origin-patches (package-source libtiff))
+         (search-patches "libtiff-CVE-2017-7593.patch"
+                         "libtiff-CVE-2017-7594.patch"
+                         "libtiff-multiple-UBSAN-crashes.patch")))))))
+
 (define-public libwmf
   (package
     (name "libwmf")
index 6423f91..48902bb 100644 (file)
     ;; The 7 release series has an incompatible API, while the 6 series is still
     ;; maintained. Don't update to 7 until we've made sure that the ImageMagick
     ;; users are ready for the 7-series API.
-    (version "6.9.8-3")
+    (version "6.9.8-4")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://imagemagick/ImageMagick-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "05hk841f5fw1hh7pfmpznlwcdr68ijk3s3zwqv0g009xh17q1max"))))
+               "04fb0x8zc9z11127wsnxlzg0jcgs4xwlx8fxy4jac2y3mmmlzhm6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags '("--with-frozenpaths" "--without-gcc-arch")
index 4c8c780..30e14a0 100644 (file)
@@ -142,14 +142,14 @@ SILC and ICB protocols via plugins.")
 (define-public weechat
   (package
     (name "weechat")
-    (version "1.7.1")
+    (version "1.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://weechat.org/files/src/weechat-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "0c0waxrxq2v0r7981y1ajh9k78jfl223smwrj4v9c5z27iwh8ziz"))
+                "05z0qmlmdm0zgkzhi6cy6snxdz37h1n5z2s460df76akjr7capxn"))
               (patches (search-patches "weechat-python.patch"))))
     (build-system gnu-build-system)
     (native-inputs `(("autoconf" ,autoconf)
@@ -300,14 +300,14 @@ using a mouse.  It is customizable and extensible with plugins and scripts.")
 (define-public limnoria
   (package
     (name "limnoria")
-    (version "2017.01.10")
+    (version "2017.03.30")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "limnoria" version))
        (sha256
         (base32
-         "0va7iiwkrd5miibpaphfm2jlfsmaazbqb8izkmlnlzkqnskhz1ff"))))
+         "1q0y6iglg1cbhimgjz3afws51as3shy6rd61dck7jfm25y8pi6g8"))))
     (build-system python-build-system)
     (inputs
      `(("python-pytz" ,python-pytz)
index 1d18a0b..13e2614 100644 (file)
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016, 2017 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
+;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,6 +24,7 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix hg-download)
   #:use-module (guix utils)
   #:use-module (guix build-system ant)
   #:use-module (guix build-system gnu)
@@ -287,14 +289,16 @@ designs.")
 (define-public ant
   (package
     (name "ant")
-    (version "1.9.6")
+    ;; The 1.9.x series is the last that can be built with GCJ.  The 1.10.x
+    ;; series requires Java 8.
+    (version "1.9.9")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://apache/ant/source/apache-ant-"
                                   version "-src.tar.gz"))
               (sha256
                (base32
-                "1396wflczyxjxl603dhxjvd559f289lha9y2f04f71c7hapjl3am"))))
+                "1k28mka0m3isy9yr8gz84kz1f3f879rwaxrd44vdn9xbfwvwk86n"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; no "check" target
@@ -1080,7 +1084,11 @@ an Ant task that extends the built-in @code{jar} task.")
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f ; Tests require junit
+       #:modules ((guix build ant-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
        #:make-flags (list (string-append "-Dversion=" ,version))
+       #:test-target "unit-test"
        #:build-target "core"
        #:phases
        (modify-phases %standard-phases
@@ -1131,10 +1139,23 @@ private Method[] allMethods = getSortedMethods();")))))
              #t))
          (replace 'install
            (lambda* (#:key outputs #:allow-other-keys)
-             (install-file (string-append "build/hamcrest-core-"
-                                          ,version ".jar")
-                           (string-append (assoc-ref outputs "out")
-                                          "/share/java")))))))
+             (let* ((target (string-append (assoc-ref outputs "out")
+                                           "/share/java/"))
+                    (version-suffix ,(string-append "-" version ".jar"))
+                    (install-without-version-suffix
+                     (lambda (jar)
+                       (copy-file jar
+                                  (string-append target
+                                                 (basename jar version-suffix)
+                                                 ".jar")))))
+               (mkdir-p target)
+               (for-each
+                install-without-version-suffix
+                (find-files "build"
+                            (lambda (name _)
+                              (and (string-suffix? ".jar" name)
+                                   (not (string-suffix? "-sources.jar" name)))))))
+             #t)))))
     (native-inputs
      `(("java-qdox-1.12" ,java-qdox-1.12)
        ("java-jarjar" ,java-jarjar)))
@@ -1178,3 +1199,1341 @@ testing frameworks, mocking libraries and UI validation rules.")
 JUnit provides assertions for testing expected results, test fixtures for
 sharing common test data, and test runners for running tests.")
     (license license:epl1.0)))
+
+(define-public java-plexus-utils
+  (package
+    (name "java-plexus-utils")
+    (version "3.0.24")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/"
+                                  "plexus-utils/archive/plexus-utils-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1mlwpc6fms24slygv5yvi6fi9hcha2fh0v73p5znpi78bg36i2js"))))
+    (build-system ant-build-system)
+    ;; FIXME: The default build.xml does not include a target to install
+    ;; javadoc files.
+    (arguments
+     `(#:jar-name "plexus-utils.jar"
+       #:source-dir "src/main"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'fix-reference-to-/bin-and-/usr
+           (lambda _
+             (substitute* "src/main/java/org/codehaus/plexus/util/\
+cli/shell/BourneShell.java"
+               (("/bin/sh") (which "sh"))
+               (("/usr/")   (getcwd)))
+             #t))
+         (add-after 'unpack 'fix-or-disable-broken-tests
+           (lambda _
+             (with-directory-excursion "src/test/java/org/codehaus/plexus/util"
+               (substitute* '("cli/CommandlineTest.java"
+                              "cli/shell/BourneShellTest.java")
+                 (("/bin/sh")   (which "sh"))
+                 (("/bin/echo") (which "echo")))
+
+               ;; This test depends on MavenProjectStub, but we don't have
+               ;; a package for Maven.
+               (delete-file "introspection/ReflectionValueExtractorTest.java")
+
+               ;; FIXME: The command line tests fail, maybe because they use
+               ;; absolute paths.
+               (delete-file "cli/CommandlineTest.java"))
+             #t)))))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://codehaus-plexus.github.io/plexus-utils/")
+    (synopsis "Common utilities for the Plexus framework")
+    (description "This package provides various Java utility classes for the
+Plexus framework to ease working with strings, files, command lines, XML and
+more.")
+    (license license:asl2.0)))
+
+(define-public java-plexus-interpolation
+  (package
+    (name "java-plexus-interpolation")
+    (version "1.23")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/codehaus-plexus/"
+                                  "plexus-interpolation/archive/"
+                                  "plexus-interpolation-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1w79ljwk42ymrgy8kqxq4l82pgdj6287gabpfnpkyzbrnclsnfrp"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "plexus-interpolation.jar"
+       #:source-dir "src/main"))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://codehaus-plexus.github.io/plexus-interpolation/")
+    (synopsis "Java components for interpolating ${} strings and the like")
+    (description "Plexus interpolator is a modular, flexible interpolation
+framework for the expression language style commonly seen in Maven, Plexus,
+and other related projects.
+
+It has its foundation in the @code{org.codehaus.plexus.utils.interpolation}
+package within @code{plexus-utils}, but has been separated in order to allow
+these two libraries to vary independently of one another.")
+    (license license:asl2.0)))
+
+(define-public java-asm
+  (package
+    (name "java-asm")
+    (version "5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://download.forge.ow2.org/asm/"
+                                  "asm-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0kxvmv5275rnjl7jv0442k3wjnq03ngkb7sghs78avf45pzm4qgr"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "compile"
+       ;; The tests require an old version of Janino, which no longer compiles
+       ;; with the JDK7.
+       #:tests? #f
+       ;; We don't need these extra ant tasks, but the build system asks us to
+       ;; provide a path anyway.
+       #:make-flags (list (string-append "-Dobjectweb.ant.tasks.path=foo"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'build-jars
+           (lambda* (#:key make-flags #:allow-other-keys)
+             ;; We cannot use the "jar" target because it depends on a couple
+             ;; of unpackaged, complicated tools.
+             (mkdir "dist")
+             (zero? (system* "jar"
+                             "-cf" (string-append "dist/asm-" ,version ".jar")
+                             "-C" "output/build/tmp" "."))))
+         (replace 'install
+           (install-jars "dist")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://asm.ow2.org/")
+    (synopsis "Very small and fast Java bytecode manipulation framework")
+    (description "ASM is an all purpose Java bytecode manipulation and
+analysis framework.  It can be used to modify existing classes or dynamically
+generate classes, directly in binary form.  The provided common
+transformations and analysis algorithms allow to easily assemble custom
+complex transformations and code analysis tools.")
+    (license license:bsd-3)))
+
+(define-public java-cglib
+  (package
+    (name "java-cglib")
+    (version "3.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/cglib/cglib/archive/RELEASE_"
+                    (string-map (lambda (c) (if (char=? c #\.) #\_ c)) version)
+                    ".tar.gz"))
+              (file-name (string-append "cglib-" version ".tar.gz"))
+              (sha256
+               (base32
+                "162dvd4fln76ai8prfharf66pn6r56p3sxx683j5vdyccrd5hi1q"))))
+    (build-system ant-build-system)
+    (arguments
+     `(;; FIXME: tests fail because junit runs
+       ;; "net.sf.cglib.transform.AbstractTransformTest", which does not seem
+       ;; to describe a test at all.
+       #:tests? #f
+       #:jar-name "cglib.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'chdir
+           (lambda _ (chdir "cglib") #t)))))
+    (inputs
+     `(("java-asm" ,java-asm)
+       ("java-junit" ,java-junit)))
+    (home-page "https://github.com/cglib/cglib/")
+    (synopsis "Java byte code generation library")
+    (description "The byte code generation library CGLIB is a high level API
+to generate and transform Java byte code.")
+    (license license:asl2.0)))
+
+(define-public java-objenesis
+  (package
+    (name "java-objenesis")
+    (version "2.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/easymock/objenesis/"
+                                  "archive/" version ".tar.gz"))
+              (file-name (string-append "objenesis-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1va5qz1i2wawwavhnxfzxnfgrcaflz9p1pg03irrjh4nd3rz8wh6"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "objenesis.jar"
+       #:source-dir "main/src/"
+       #:test-dir "main/src/test/"))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://objenesis.org/")
+    (synopsis "Bypass the constructor when creating an object")
+    (description "Objenesis is a small Java library that serves one purpose:
+to instantiate a new object of a particular class.  It is common to see
+restrictions in libraries stating that classes must require a default
+constructor.  Objenesis aims to overcome these restrictions by bypassing the
+constructor on object instantiation.")
+    (license license:asl2.0)))
+
+(define-public java-easymock
+  (package
+    (name "java-easymock")
+    (version "3.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/easymock/easymock/"
+                                  "archive/easymock-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1yzg0kv256ndr57gpav46cyv4a1ns5sj722l50zpxk3j6sk9hnmi"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "easymock.jar"
+       #:source-dir "core/src/main"
+       #:test-dir "core/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         ;; FIXME: Android support requires the following packages to be
+         ;; available: com.google.dexmaker.stock.ProxyBuilder
+         (add-after 'unpack 'delete-android-support
+           (lambda _
+             (with-directory-excursion "core/src/main/java/org/easymock/internal"
+               (substitute* "MocksControl.java"
+                 (("AndroidSupport.isAndroid\\(\\)") "false")
+                 (("return classProxyFactory = new AndroidClassProxyFactory\\(\\);") ""))
+               (delete-file "AndroidClassProxyFactory.java"))
+             #t))
+         (add-after 'unpack 'delete-broken-tests
+           (lambda _
+             (with-directory-excursion "core/src/test/java/org/easymock"
+               ;; This test depends on dexmaker.
+               (delete-file "tests2/ClassExtensionHelperTest.java")
+
+               ;; This is not a test.
+               (delete-file "tests/BaseEasyMockRunnerTest.java")
+
+               ;; This test should be executed with a different runner...
+               (delete-file "tests2/EasyMockAnnotationsTest.java")
+               ;; ...but deleting it means that we also have to delete these
+               ;; dependent files.
+               (delete-file "tests2/EasyMockRunnerTest.java")
+               (delete-file "tests2/EasyMockRuleTest.java")
+
+               ;; This test fails because the file "easymock.properties" does
+               ;; not exist.
+               (delete-file "tests2/EasyMockPropertiesTest.java"))
+             #t)))))
+    (inputs
+     `(("java-asm" ,java-asm)
+       ("java-cglib" ,java-cglib)
+       ("java-objenesis" ,java-objenesis)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://easymock.org")
+    (synopsis "Java library providing mock objects for unit tests")
+    (description "EasyMock is a Java library that provides an easy way to use
+mock objects in unit testing.")
+    (license license:asl2.0)))
+
+(define-public java-jmock-1
+  (package
+    (name "java-jmock")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/jmock-developers/"
+                                  "jmock-library/archive/" version ".tar.gz"))
+              (file-name (string-append "jmock-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0xmrlhq0fszldkbv281k9463mv496143vvmqwpxp62yzjvdkx9w0"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "jars"
+       #:test-target "run.tests"
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install (install-jars "build")))))
+    (home-page "http://www.jmock.org")
+    (synopsis "Mock object library for test-driven development")
+    (description "JMock is a library that supports test-driven development of
+Java code with mock objects.  Mock objects help you design and test the
+interactions between the objects in your programs.
+
+The jMock library
+
+@itemize
+@item makes it quick and easy to define mock objects
+@item lets you precisely specify the interactions between
+  your objects, reducing the brittleness of your tests
+@item plugs into your favourite test framework
+@item is easy to extend.
+@end itemize\n")
+    (license license:bsd-3)))
+
+(define-public java-hamcrest-all
+  (package (inherit java-hamcrest-core)
+    (name "java-hamcrest-all")
+    (arguments
+     (substitute-keyword-arguments (package-arguments java-hamcrest-core)
+       ;; FIXME: a unit test fails because org.hamcrest.SelfDescribing is not
+       ;; found, although it is part of the hamcrest-core library that has
+       ;; just been built.
+       ;;
+       ;; Fixing this one test is insufficient, though, and upstream confirmed
+       ;; that the latest hamcrest release fails its unit tests when built
+       ;; with Java 7.  See https://github.com/hamcrest/JavaHamcrest/issues/30
+       ((#:tests? _) #f)
+       ((#:build-target _) "bigjar")
+       ((#:phases phases)
+        `(modify-phases ,phases
+           ;; Some build targets override the classpath, so we need to patch
+           ;; the build.xml to ensure that required dependencies are on the
+           ;; classpath.
+           (add-after 'unpack 'patch-classpath-for-integration
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "build.xml"
+                 ((" build/hamcrest-library-\\$\\{version\\}.jar" line)
+                  (string-join
+                   (cons line
+                         (append
+                          (find-files (assoc-ref inputs "java-hamcrest-core") "\\.jar$")
+                          (find-files (assoc-ref inputs "java-junit") "\\.jar$")
+                          (find-files (assoc-ref inputs "java-jmock") "\\.jar$")
+                          (find-files (assoc-ref inputs "java-easymock") "\\.jar$")))
+                   ";")))
+               #t))))))
+    (inputs
+     `(("java-junit" ,java-junit)
+       ("java-jmock" ,java-jmock-1)
+       ("java-easymock" ,java-easymock)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ,@(package-inputs java-hamcrest-core)))))
+
+(define-public java-jopt-simple
+  (package
+    (name "java-jopt-simple")
+    (version "5.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://repo1.maven.org/maven2/"
+                                  "net/sf/jopt-simple/jopt-simple/"
+                                  version "/jopt-simple-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1v8bzmwmw6qq20gm42xyay6vrd567dra4vqwhgjnqqjz1gs9f8qa"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; there are no tests
+       #:jar-name "jopt-simple.jar"))
+    (home-page "https://pholser.github.io/jopt-simple/")
+    (synopsis "Java library for parsing command line options")
+    (description "JOpt Simple is a Java library for parsing command line
+options, such as those you might pass to an invocation of @code{javac}.  In
+the interest of striving for simplicity, as closely as possible JOpt Simple
+attempts to honor the command line option syntaxes of POSIX @code{getopt} and
+GNU @code{getopt_long}.  It also aims to make option parser configuration and
+retrieval of options and their arguments simple and expressive, without being
+overly clever.")
+    (license license:expat)))
+
+(define-public java-commons-math3
+  (package
+    (name "java-commons-math3")
+    (version "3.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/math/source/"
+                                  "commons-math3-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "19l6yp44qc5g7wg816nbn5z3zq3xxzwimvbm4a8pczgvpi4i85s6"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:build-target "jar"
+       #:test-target "test"
+       #:make-flags
+       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
+             (junit    (assoc-ref %build-inputs "java-junit")))
+         (list (string-append "-Djunit.jar=" junit "/share/java/junit.jar")
+               (string-append "-Dhamcrest.jar=" hamcrest
+                              "/share/java/hamcrest-core.jar")))
+       #:phases
+       (modify-phases %standard-phases
+         ;; We want to build the jar in the build phase and run the tests
+         ;; later in a separate phase.
+         (add-after 'unpack 'untangle-targets
+           (lambda _
+             (substitute* "build.xml"
+               (("name=\"jar\" depends=\"test\"")
+                "name=\"jar\" depends=\"compile\""))
+             #t))
+         ;; There is no install target.
+         (replace 'install
+           (install-jars "target")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://commons.apache.org/math/")
+    (synopsis "Apache Commons mathematics library")
+    (description "Commons Math is a library of lightweight, self-contained
+mathematics and statistics components addressing the most common problems not
+available in the Java programming language or Commons Lang.")
+    (license license:asl2.0)))
+
+(define-public java-jmh
+  (package
+    (name "java-jmh")
+    (version "1.17.5")
+    (source (origin
+              (method hg-fetch)
+              (uri (hg-reference
+                    (url "http://hg.openjdk.java.net/code-tools/jmh/")
+                    (changeset version)))
+              (file-name (string-append name "-" version "-checkout"))
+              (sha256
+               (base32
+                "1fxyxhg9famwcg1prc4cgwb5wzyxqavn3cjm5vz8605xz7x5k084"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "jmh-core.jar"
+       #:source-dir "jmh-core/src/main"
+       #:test-dir "jmh-core/src/test"
+       #:phases
+       (modify-phases %standard-phases
+         ;; This seems to be a bug in the JDK.  It may not be necessary in
+         ;; future versions of the JDK.
+         (add-after 'unpack 'fix-bug
+           (lambda _
+             (with-directory-excursion
+                 "jmh-core/src/main/java/org/openjdk/jmh/runner/options"
+               (substitute* '("IntegerValueConverter.java"
+                              "ThreadsValueConverter.java")
+                 (("public Class<Integer> valueType")
+                  "public Class<? extends Integer> valueType")))
+             #t)))))
+    (inputs
+     `(("java-jopt-simple" ,java-jopt-simple)
+       ("java-commons-math3" ,java-commons-math3)))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://openjdk.java.net/projects/code-tools/jmh/")
+    (synopsis "Benchmark harness for the JVM")
+    (description "JMH is a Java harness for building, running, and analysing
+nano/micro/milli/macro benchmarks written in Java and other languages
+targetting the JVM.")
+    ;; GPLv2 only
+    (license license:gpl2)))
+
+(define-public java-commons-collections4
+  (package
+    (name "java-commons-collections4")
+    (version "4.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/collections/source/"
+                                  "commons-collections4-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1krfhvggympq4avk7gh6qafzf6b9ip6r1m4lmacikyx04039m0wl"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
+             (junit    (assoc-ref %build-inputs "java-junit"))
+             (easymock (assoc-ref %build-inputs "java-easymock")))
+         (list (string-append "-Djunit.jar=" junit "/share/java/junit.jar")
+               (string-append "-Dhamcrest.jar=" hamcrest
+                              "/share/java/hamcrest-core.jar")
+               (string-append "-Deasymock.jar=" easymock
+                              "/share/java/easymock.jar")))
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'install
+           (install-jars "target")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)
+       ("java-easymock" ,java-easymock)))
+    (home-page "http://commons.apache.org/collections/")
+    (synopsis "Collections framework")
+    (description "The Java Collections Framework is the recognised standard
+for collection handling in Java.  Commons-Collections seek to build upon the
+JDK classes by providing new interfaces, implementations and utilities.  There
+are many features, including:
+
+@itemize
+@item @code{Bag} interface for collections that have a number of copies of
+  each object
+@item @code{BidiMap} interface for maps that can be looked up from value to
+  key as well and key to value
+@item @code{MapIterator} interface to provide simple and quick iteration over
+  maps
+@item Transforming decorators that alter each object as it is added to the
+  collection
+@item Composite collections that make multiple collections look like one
+@item Ordered maps and sets that retain the order elements are added in,
+  including an LRU based map
+@item Reference map that allows keys and/or values to be garbage collected
+  under close control
+@item Many comparator implementations
+@item Many iterator implementations
+@item Adapter classes from array and enumerations to collections
+@item Utilities to test or create typical set-theory properties of collections
+  such as union, intersection, and closure.
+@end itemize\n")
+    (license license:asl2.0)))
+
+(define-public java-commons-io
+  (package
+    (name "java-commons-io")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://apache/commons/io/source/"
+                           "commons-io-" version "-src.tar.gz"))
+       (sha256
+        (base32
+         "0q5y41jrcjvx9hzs47x5kdhnasdy6rm4bzqd2jxl02w717m7a7v3"))))
+    (build-system ant-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (list (string-append "-Djunit.jar="
+                            (assoc-ref %build-inputs "java-junit")
+                            "/share/java/junit.jar"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'build-javadoc ant-build-javadoc)
+         (replace 'install (install-jars "target"))
+         (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://commons.apache.org/io/")
+    (synopsis "Common useful IO related classes")
+    (description "Commons-IO contains utility classes, stream implementations,
+file filters and endian classes.")
+    (license license:asl2.0)))
+
+(define-public java-commons-lang
+  (package
+    (name "java-commons-lang")
+    (version "2.6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://apache/commons/lang/source/"
+                           "commons-lang-" version "-src.tar.gz"))
+       (sha256
+        (base32 "1mxwagqadzx1b2al7i0z1v0r235aj2njdyijf02szq0vhmqrfiq5"))))
+    (build-system ant-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'build-javadoc ant-build-javadoc)
+         (add-before 'check 'disable-failing-test
+           (lambda _
+             ;; Disable a failing test
+             (substitute* "src/test/java/org/apache/commons/lang/\
+time/FastDateFormatTest.java"
+               (("public void testFormat\\(\\)")
+                "public void disabled_testFormat()"))
+             #t))
+         (replace 'install (install-jars "target"))
+         (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://commons.apache.org/lang/")
+    (synopsis "Extension of the java.lang package")
+    (description "The Commons Lang components contains a set of Java classes
+that provide helper methods for standard Java classes, especially those found
+in the @code{java.lang} package in the Sun JDK.  The following classes are
+included:
+
+@itemize
+@item StringUtils - Helper for @code{java.lang.String}.
+@item CharSetUtils - Methods for dealing with @code{CharSets}, which are sets
+  of characters such as @code{[a-z]} and @code{[abcdez]}.
+@item RandomStringUtils - Helper for creating randomised strings.
+@item NumberUtils - Helper for @code{java.lang.Number} and its subclasses.
+@item NumberRange - A range of numbers with an upper and lower bound.
+@item ObjectUtils - Helper for @code{java.lang.Object}.
+@item SerializationUtils - Helper for serializing objects.
+@item SystemUtils - Utility class defining the Java system properties.
+@item NestedException package - A sub-package for the creation of nested
+  exceptions.
+@item Enum package - A sub-package for the creation of enumerated types.
+@item Builder package - A sub-package for the creation of @code{equals},
+  @code{hashCode}, @code{compareTo} and @code{toString} methods.
+@end itemize\n")
+    (license license:asl2.0)))
+
+(define-public java-commons-lang3
+  (package
+    (name "java-commons-lang3")
+    (version "3.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://apache/commons/lang/source/"
+                           "commons-lang3-" version "-src.tar.gz"))
+       (sha256
+        (base32 "0xpshb9spjhplq5a7mr0y1bgfw8190ik4xj8f569xidfcki1d6kg"))))
+    (build-system ant-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-all"))
+             (junit    (assoc-ref %build-inputs "java-junit"))
+             (easymock (assoc-ref %build-inputs "java-easymock"))
+             (io       (assoc-ref %build-inputs "java-commons-io")))
+         (list (string-append "-Djunit.jar=" junit "/share/java/junit.jar")
+               (string-append "-Dhamcrest.jar=" hamcrest
+                              "/share/java/hamcrest-all.jar")
+               (string-append "-Dcommons-io.jar=" io
+                              "/share/java/commons-io-"
+                              ,(package-version java-commons-io)
+                              "-SNAPSHOT.jar")
+               (string-append "-Deasymock.jar=" easymock
+                              "/share/java/easymock.jar")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'build-javadoc ant-build-javadoc)
+         (replace 'install (install-jars "target"))
+         (add-after 'install 'install-doc (install-javadoc "target/apidocs")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-commons-io" ,java-commons-io)
+       ("java-hamcrest-all" ,java-hamcrest-all)
+       ("java-easymock" ,java-easymock)))
+    (home-page "http://commons.apache.org/lang/")
+    (synopsis "Extension of the java.lang package")
+    (description "The Commons Lang components contains a set of Java classes
+that provide helper methods for standard Java classes, especially those found
+in the @code{java.lang} package.  The following classes are included:
+
+@itemize
+@item StringUtils - Helper for @code{java.lang.String}.
+@item CharSetUtils - Methods for dealing with @code{CharSets}, which are sets of
+  characters such as @code{[a-z]} and @code{[abcdez]}.
+@item RandomStringUtils - Helper for creating randomised strings.
+@item NumberUtils - Helper for @code{java.lang.Number} and its subclasses.
+@item NumberRange - A range of numbers with an upper and lower bound.
+@item ObjectUtils - Helper for @code{java.lang.Object}.
+@item SerializationUtils - Helper for serializing objects.
+@item SystemUtils - Utility class defining the Java system properties.
+@item NestedException package - A sub-package for the creation of nested
+   exceptions.
+@item Enum package - A sub-package for the creation of enumerated types.
+@item Builder package - A sub-package for the creation of @code{equals},
+  @code{hashCode}, @code{compareTo} and @code{toString} methods.
+@end itemize\n")
+    (license license:asl2.0)))
+
+(define-public java-jsr305
+  (package
+    (name "java-jsr305")
+    (version "3.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://repo1.maven.org/maven2/"
+                                  "com/google/code/findbugs/"
+                                  "jsr305/" version "/jsr305-"
+                                  version "-sources.jar"))
+              (sha256
+               (base32
+                "1rh6jin9v7jqpq3kf1swl868l8i94r636n03pzpsmgr8v0lh9j2n"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; no tests included
+       #:jar-name "jsr305.jar"))
+    (home-page "http://findbugs.sourceforge.net/")
+    (synopsis "Annotations for the static analyzer called findbugs")
+    (description "This package provides annotations for the findbugs package.
+It provides packages in the @code{javax.annotations} namespace.")
+    (license license:asl2.0)))
+
+(define-public java-guava
+  (package
+    (name "java-guava")
+    ;; This is the last release of Guava that can be built with Java 7.
+    (version "20.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/google/guava/"
+                                  "releases/download/v" version
+                                  "/guava-" version "-sources.jar"))
+              (sha256
+               (base32
+                "1gawrs5gi6j5hcfxdgpnfli75vb9pfi4sn09pnc8xacr669yajwr"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f                      ; no tests included
+       #:jar-name "guava.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'trim-sources
+           (lambda _
+             (with-directory-excursion "src/com/google/common"
+               ;; Remove annotations to avoid extra dependencies:
+               ;; * "j2objc" annotations are used when converting Java to
+               ;;   Objective C;
+               ;; * "errorprone" annotations catch common Java mistakes at
+               ;;   compile time;
+               ;; * "IgnoreJRERequirement" is used for Android.
+               (substitute* (find-files "." "\\.java$")
+                 (("import com.google.j2objc.*") "")
+                 (("import com.google.errorprone.annotation.*") "")
+                 (("import org.codehaus.mojo.animal_sniffer.*") "")
+                 (("@CanIgnoreReturnValue") "")
+                 (("@LazyInit") "")
+                 (("@WeakOuter") "")
+                 (("@RetainedWith") "")
+                 (("@Weak") "")
+                 (("@ForOverride") "")
+                 (("@J2ObjCIncompatible") "")
+                 (("@IgnoreJRERequirement") "")))
+             #t)))))
+    (inputs
+     `(("java-jsr305" ,java-jsr305)))
+    (home-page "https://github.com/google/guava")
+    (synopsis "Google core libraries for Java")
+    (description "Guava is a set of core libraries that includes new
+collection types (such as multimap and multiset), immutable collections, a
+graph library, functional types, an in-memory cache, and APIs/utilities for
+concurrency, I/O, hashing, primitives, reflection, string processing, and much
+more!")
+    (license license:asl2.0)))
+
+;; The java-commons-logging package provides adapters to many different
+;; logging frameworks.  To avoid an excessive dependency graph we try to build
+;; it with only a minimal set of adapters.
+(define-public java-commons-logging-minimal
+  (package
+    (name "java-commons-logging-minimal")
+    (version "1.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/logging/source/"
+                                  "commons-logging-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "10bwcy5w8d7y39n0krlwhnp8ds3kj5zhmzj0zxnkw0qdlsjmsrj9"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f ; avoid dependency on logging frameworks
+       #:jar-name "commons-logging-minimal.jar"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-adapters-and-tests
+           (lambda _
+             ;; Delete all adapters except for NoOpLog, SimpleLog, and
+             ;; LogFactoryImpl.  NoOpLog is required to build; LogFactoryImpl
+             ;; is used by applications; SimpleLog is the only actually usable
+             ;; implementation that does not depend on another logging
+             ;; framework.
+             (for-each
+              (lambda (file)
+                (delete-file (string-append
+                              "src/main/java/org/apache/commons/logging/impl/" file)))
+              (list "Jdk13LumberjackLogger.java"
+                    "WeakHashtable.java"
+                    "Log4JLogger.java"
+                    "ServletContextCleaner.java"
+                    "Jdk14Logger.java"
+                    "AvalonLogger.java"
+                    "LogKitLogger.java"))
+             (delete-file-recursively "src/test")
+             #t)))))
+    (home-page "http://commons.apache.org/logging/")
+    (synopsis "Common API for logging implementations")
+    (description "The Logging package is a thin bridge between different
+logging implementations.  A library that uses the commons-logging API can be
+used with any logging implementation at runtime.")
+    (license license:asl2.0)))
+
+(define-public java-commons-cli
+  (package
+    (name "java-commons-cli")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/cli/source/"
+                                  "commons-cli-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1fkjn552i12vp3xxk21ws4p70fi0lyjm004vzxsdaz7gdpgyxxyl"))))
+    (build-system ant-build-system)
+    ;; TODO: javadoc
+    (arguments
+     `(#:jar-name "commons-cli.jar"))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://commons.apache.org/cli/")
+    (synopsis "Command line arguments and options parsing library")
+    (description "The Apache Commons CLI library provides an API for parsing
+command line options passed to programs.  It is also able to print help
+messages detailing the options available for a command line tool.
+
+Commons CLI supports different types of options:
+
+@itemize
+@item POSIX like options (ie. tar -zxvf foo.tar.gz)
+@item GNU like long options (ie. du --human-readable --max-depth=1)
+@item Java like properties (ie. java -Djava.awt.headless=true Foo)
+@item Short options with value attached (ie. gcc -O2 foo.c)
+@item long options with single hyphen (ie. ant -projecthelp)
+@end itemize
+
+This is a part of the Apache Commons Project.")
+    (license license:asl2.0)))
+
+(define-public java-commons-codec
+  (package
+    (name "java-commons-codec")
+    (version "1.10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/codec/source/"
+                                  "commons-codec-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1w9qg30y4s0x8gnmr2fgj4lyplfn788jqxbcz27lf5kbr6n8xr65"))))
+    (build-system ant-build-system)
+    (outputs '("out" "doc"))
+    (arguments
+     `(#:test-target "test"
+       #:make-flags
+       (let ((hamcrest (assoc-ref %build-inputs "java-hamcrest-core"))
+             (junit    (assoc-ref %build-inputs "java-junit")))
+         (list (string-append "-Djunit.jar=" junit "/share/java/junit.jar")
+               (string-append "-Dhamcrest.jar=" hamcrest
+                              "/share/java/hamcrest-core.jar")
+               ;; Do not append version to jar.
+               "-Dfinal.name=commons-codec"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'build-javadoc ant-build-javadoc)
+         (replace 'install (install-jars "dist"))
+         (add-after 'install 'install-doc (install-javadoc "dist/docs/api")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)
+       ("java-hamcrest-core" ,java-hamcrest-core)))
+    (home-page "http://commons.apache.org/codec/")
+    (synopsis "Common encoders and decoders such as Base64, Hex, Phonetic and URLs")
+    (description "The codec package contains simple encoder and decoders for
+various formats such as Base64 and Hexadecimal.  In addition to these widely
+used encoders and decoders, the codec package also maintains a collection of
+phonetic encoding utilities.
+
+This is a part of the Apache Commons Project.")
+    (license license:asl2.0)))
+
+(define-public java-commons-daemon
+  (package
+    (name "java-commons-daemon")
+    (version "1.0.15")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache/commons/daemon/source/"
+                                  "commons-daemon-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "0ci46kq8jpz084ccwq0mmkahcgsmh20ziclp2jf5i0djqv95gvhi"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:test-target "test"
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'build 'build-javadoc ant-build-javadoc)
+         (replace 'install (install-jars "dist"))
+         (add-after 'install 'install-doc (install-javadoc "dist/docs/api")))))
+    (native-inputs
+     `(("java-junit" ,java-junit)))
+    (home-page "http://commons.apache.org/daemon/")
+    (synopsis "Library to launch Java applications as daemons")
+    (description "The Daemon package from Apache Commons can be used to
+implement Java applications which can be launched as daemons.  For example the
+program will be notified about a shutdown so that it can perform cleanup tasks
+before its process of execution is destroyed by the operation system.
+
+This package contains the Java library.  You will also need the actual binary
+for your architecture which is provided by the jsvc package.
+
+This is a part of the Apache Commons Project.")
+    (license license:asl2.0)))
+
+(define-public antlr2
+  (package
+    (name "antlr2")
+    (version "2.7.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://www.antlr2.org/download/antlr-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1ffvcwdw73id0dk6pj2mlxjvbg0662qacx4ylayqcxgg381fnfl5"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  (delete-file "antlr.jar")
+                  (substitute* "lib/cpp/antlr/CharScanner.hpp"
+                    (("#include <map>")
+                     (string-append
+                       "#include <map>\n"
+                       "#define EOF (-1)\n"
+                       "#include <strings.h>")))
+                  (substitute* "configure"
+                    (("/bin/sh") "sh"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'strip-jar-timestamps
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (jar1 (string-append out "/lib/antlr.jar"))
+                    (jar2 (string-append out "/share/antlr-2.7.7/antlr.jar")))
+               ;; XXX: copied from (guix build ant-build-system)
+               (define (strip-jar jar dir)
+                 (let ((manifest (string-append dir "/META-INF/MANIFEST.MF")))
+                   (mkdir-p dir)
+                   (and (with-directory-excursion dir
+                          (zero? (system* "jar" "xf" jar)))
+                        (delete-file jar)
+                        (for-each (lambda (file)
+                                    (let ((s (lstat file)))
+                                      (unless (eq? (stat:type s) 'symlink)
+                                                 (utime file 0 0 0 0))))
+                                  (find-files dir #:directories? #t))
+                        (with-directory-excursion dir
+                          (let* ((files (find-files "." ".*" #:directories? #t)))
+                            (unless (zero? (apply system*
+                                                  `("zip" "-X" ,jar ,manifest
+                                                    ,@files)))
+                              (error "'zip' failed"))))
+                        (utime jar 0 0)
+                        #t)))
+                (strip-jar jar1 "temp1")
+                (strip-jar jar2 "temp2"))))
+         (add-after 'configure 'fix-bin-ls
+           (lambda _
+             (for-each (lambda (file)
+                         (substitute* file
+                          (("/bin/ls") "ls")))
+               (find-files "." "Makefile")))))))
+    (native-inputs
+     `(("which" ,which)
+       ("zip" ,zip)
+       ("java" ,icedtea "jdk")))
+    (inputs
+     `(("java" ,icedtea)))
+    (home-page "http://www.antlr2.org")
+    (synopsis "Framework for constructing recognizers, compilers, and translators")
+    (description "ANTLR, ANother Tool for Language Recognition, (formerly PCCTS)
+is a language tool that provides a framework for constructing recognizers,
+compilers, and translators from grammatical descriptions containing Java, C#,
+C++, or Python actions.  ANTLR provides excellent support for tree construction,
+tree walking, and translation.")
+    (license license:public-domain)))
+
+(define-public stringtemplate3
+  (package
+    (name "stringtemplate3")
+    (version "3.2.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/antlr/website-st4/raw/"
+                                  "gh-pages/download/stringtemplate-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "086yj68np1vqhkj7483diz3km6s6y4gmwqswa7524a0ca6vxn2is"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "stringtemplate-3.2.1.jar"
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate-grammar
+           (lambda _
+             (let ((dir "src/org/antlr/stringtemplate/language/"))
+               (for-each (lambda (file)
+                           (display file)
+                           (newline)
+                           (system* "antlr" "-o" dir (string-append dir file)))
+                         '("template.g" "angle.bracket.template.g" "action.g"
+                           "eval.g" "group.g" "interface.g"))))))))
+    (native-inputs
+     `(("antlr" ,antlr2)))
+    (home-page "http://www.stringtemplate.org")
+    (synopsis "Template engine to generate formatted text output")
+    (description "StringTemplate is a java template engine (with ports for C#,
+Objective-C, JavaScript, Scala) for generating source code, web pages, emails,
+or any other formatted text output.  StringTemplate is particularly good at
+code generators, multiple site skins, and internationalization / localization.
+StringTemplate also powers ANTLR.")
+    (license license:bsd-3)))
+
+;; antlr3 is partially written using antlr3 grammar files. It also depends on
+;; ST4 (stringtemplate4), which is also partially written using antlr3 grammar
+;; files and uses antlr3 at runtime. The latest version requires a recent version
+;; of antlr3 at runtime.
+;; Fortunately, ST4 4.0.6 can be built with an older antlr3, and we use antlr3.3.
+;; This version of ST4 is sufficient for the latest antlr3.
+;; We use ST4 4.0.6 to build a boostrap antlr3 (latest version), and build
+;; the latest ST4 with it. Then we build our final antlr3 that will be linked
+;; against the latest ST4.
+;; antlr3.3 still depends on antlr3 to generate some files, so we use an
+;; even older version, antlr3.1, to generate them. Fortunately antlr3.1 uses
+;; only grammar files with the antlr2 syntax.
+;; So we build antlr3.1 -> antlr3.3 -> ST4.0.6 -> antlr3-bootstrap -> ST4 -> antlr3.
+
+(define-public stringtemplate4
+  (package
+    (name "stringtemplate4")
+    (version "4.0.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/antlr/stringtemplate4/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1pri8hqa95rfdkjy55icl5q1m09zwp5k67ib14abas39s4v3w087"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:tests? #f
+       #:jar-name (string-append ,name "-" ,version ".jar")
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'generate-grammar
+           (lambda* (#:key inputs #:allow-other-keys)
+             (chdir "src/org/stringtemplate/v4/compiler/")
+             (for-each (lambda (file)
+                         (display file)
+                         (newline)
+                         (system* "antlr3" file))
+                       '("STParser.g" "Group.g" "CodeGenerator.g"))
+             (chdir "../../../../.."))))))
+    (inputs
+     `(("antlr3" ,antlr3-bootstrap)
+       ("antlr2" ,antlr2)
+       ("stringtemplate" ,stringtemplate3)))
+    (home-page "http://www.stringtemplate.org")
+    (synopsis "Template engine to generate formatted text output")
+    (description "StringTemplate is a java template engine (with ports for C#,
+Objective-C, JavaScript, Scala) for generating source code, web pages, emails,
+or any other formatted text output.  StringTemplate is particularly good at
+code generators, multiple site skins, and internationalization / localization.
+StringTemplate also powers ANTLR.")
+    (license license:bsd-3)))
+
+(define stringtemplate4-4.0.6
+  (package
+    (inherit stringtemplate4)
+    (name "stringtemplate4")
+    (version "4.0.6")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/antlr/stringtemplate4/archive/ST-"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0hjmh1ahdsh3w825i67mli9l4nncc4l6hdbf9ma91jvlj590sljp"))))
+    (inputs
+     `(("antlr3" ,antlr3-3.3)
+       ("antlr2" ,antlr2)
+       ("stringtemplate" ,stringtemplate3)))))
+
+(define-public antlr3
+  (package
+    (name "antlr3")
+    (version "3.5.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/antlr/antlr3/archive/"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "07zff5frmjd53rnqdx31h0pmswz1lv0p2lp28cspfszh25ysz6sj"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:source-dir "tool/src/main/java:runtime/Java/src/main/java:tool/src/main/antlr3"
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'bin-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((jar (string-append (assoc-ref outputs "out") "/share/java"))
+                   (bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (with-output-to-file (string-append bin "/antlr3")
+                 (lambda _
+                   (display
+                     (string-append "#!" (which "sh") "\n"
+                                    "java -cp " jar "/" ,name "-" ,version ".jar:"
+                                    (string-concatenate
+                                      (find-files (assoc-ref inputs "stringtemplate")
+                                                  ".*\\.jar"))
+                                    ":"
+                                    (string-concatenate
+                                      (find-files (assoc-ref inputs "stringtemplate4")
+                                                  ".*\\.jar"))
+                                    ":"
+                                    (string-concatenate
+                                      (find-files (string-append
+                                                    (assoc-ref inputs "antlr")
+                                                    "/lib")
+                                                  ".*\\.jar"))
+                                    " org.antlr.Tool $*"))))
+               (chmod (string-append bin "/antlr3") #o755))))
+         (add-before 'build 'generate-grammar
+           (lambda _
+             (chdir "tool/src/main/antlr3/org/antlr/grammar/v3/")
+             (for-each (lambda (file)
+                         (display file)
+                         (newline)
+                         (system* "antlr3" file))
+                       '("ANTLR.g" "ANTLRTreePrinter.g" "ActionAnalysis.g"
+                         "AssignTokenTypesWalker.g"
+                         "ActionTranslator.g" "TreeToNFAConverter.g"
+                         "ANTLRv3.g" "ANTLRv3Tree.g" "LeftRecursiveRuleWalker.g"
+                         "CodeGenTreeWalker.g" "DefineGrammarItemsWalker.g"))
+             (substitute* "ANTLRParser.java"
+               (("public Object getTree") "public GrammarAST getTree"))
+             (substitute* "ANTLRv3Parser.java"
+               (("public Object getTree") "public CommonTree getTree"))
+             (chdir "../../../../../java")
+             (system* "antlr" "-o" "org/antlr/tool"
+                      "org/antlr/tool/serialize.g")
+             (substitute* "org/antlr/tool/LeftRecursiveRuleAnalyzer.java"
+               (("import org.antlr.grammar.v3.\\*;") "import org.antlr.grammar.v3.*;
+import org.antlr.grammar.v3.ANTLRTreePrinter;"))
+             (substitute* "org/antlr/tool/ErrorManager.java"
+               (("case NO_SUCH_ATTRIBUTE_PASS_THROUGH:") ""))
+             (chdir "../../../..")))
+         (add-before 'build 'fix-build-xml
+           (lambda _
+             (substitute* "build.xml"
+               (("<exec") "<copy todir=\"${classes.dir}\">
+<fileset dir=\"tool/src/main/resources\">
+<include name=\"**/*.stg\"/>
+<include name=\"**/*.st\"/>
+<include name=\"**/*.sti\"/>
+<include name=\"**/STLexer.tokens\"/>
+</fileset>
+</copy><exec")))))))
+    (native-inputs
+     `(("antlr" ,antlr2)
+       ("antlr3" ,antlr3-bootstrap)))
+    (inputs
+     `(("junit" ,java-junit)
+       ("stringtemplate" ,stringtemplate3)
+       ("stringtemplate4" ,stringtemplate4)))
+    (propagated-inputs
+     `(("stringtemplate" ,stringtemplate3)
+       ("antlr" ,antlr2)
+       ("stringtemplate4" ,stringtemplate4-4.0.6)))
+    (home-page "http://www.antlr3.org")
+    (synopsis "Framework for constructing recognizers, compilers, and translators")
+    (description "ANTLR, ANother Tool for Language Recognition, (formerly PCCTS)
+is a language tool that provides a framework for constructing recognizers,
+compilers, and translators from grammatical descriptions containing Java, C#,
+C++, or Python actions.  ANTLR provides excellent support for tree construction,
+tree walking, and translation.")
+    (license license:bsd-3)))
+
+(define antlr3-bootstrap
+  (package
+    (inherit antlr3)
+    (name "antlr3-bootstrap")
+    (native-inputs
+     `(("antlr" ,antlr2)
+       ("antlr3" ,antlr3-3.3)))
+    (inputs
+     `(("junit" ,java-junit)))))
+
+(define antlr3-3.3
+  (package
+    (inherit antlr3)
+    (name "antlr3")
+    (version "3.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/antlr/website-antlr3/raw/"
+                                  "gh-pages/download/antlr-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0qgg5vgsm4l1d6dj9pfbaa25dpv2ry2gny8ajy4vvgvfklw97b3m"))))
+    (arguments
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:source-dir (string-append "tool/src/main/java:runtime/Java/src/main/java:"
+                                "tool/src/main/antlr2:tool/src/main/antlr3")
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'bin-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((jar (string-append (assoc-ref outputs "out") "/share/java"))
+                   (bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (with-output-to-file (string-append bin "/antlr3")
+                 (lambda _
+                   (display
+                     (string-append "#!" (which "sh") "\n"
+                                    "java -cp " jar "/antlr3-3.3.jar:"
+                                    (string-concatenate
+                                      (find-files (assoc-ref inputs "stringtemplate")
+                                                  ".*\\.jar"))
+                                    ":"
+                                    (string-concatenate
+                                      (find-files (string-append
+                                                    (assoc-ref inputs "antlr")
+                                                    "/lib")
+                                                  ".*\\.jar"))
+                                    " org.antlr.Tool $*"))))
+               (chmod (string-append bin "/antlr3") #o755))))
+         (add-before 'build 'generate-grammar
+           (lambda _
+             (let ((dir "tool/src/main/antlr2/org/antlr/grammar/v2/"))
+               (for-each (lambda (file)
+                           (display file)
+                           (newline)
+                           (system* "antlr" "-o" dir (string-append dir file)))
+                         '("antlr.g" "antlr.print.g" "assign.types.g"
+                           "buildnfa.g" "codegen.g" "define.g")))
+             (chdir "tool/src/main/antlr3/org/antlr/grammar/v3/")
+             (for-each (lambda (file)
+                         (display file)
+                         (newline)
+                         (system* "antlr3" file))
+                       '("ActionAnalysis.g" "ActionTranslator.g" "ANTLRv3.g"
+                         "ANTLRv3Tree.g"))
+             (chdir "../../../../../../../..")
+             (substitute* "tool/src/main/java/org/antlr/tool/Grammar.java"
+               (("import org.antlr.grammar.v2.\\*;")
+                "import org.antlr.grammar.v2.*;\n
+import org.antlr.grammar.v2.TreeToNFAConverter;\n
+import org.antlr.grammar.v2.DefineGrammarItemsWalker;\n
+import org.antlr.grammar.v2.ANTLRTreePrinter;"))))
+         (add-before 'build 'fix-build-xml
+           (lambda _
+             (substitute* "build.xml"
+               (("<exec") "<copy todir=\"${classes.dir}\">
+<fileset dir=\"tool/src/main/resources\">
+<include name=\"**/*.stg\"/>
+<include name=\"**/*.st\"/>
+<include name=\"**/*.sti\"/>
+<include name=\"**/STLexer.tokens\"/>
+</fileset>
+</copy><exec")))))))
+    (native-inputs
+     `(("antlr" ,antlr2)
+       ("antlr3" ,antlr3-3.1)))
+    (inputs
+     `(("junit" ,java-junit)))
+    (propagated-inputs
+     `(("stringtemplate" ,stringtemplate3)
+       ("antlr" ,antlr2)
+       ("antlr3" ,antlr3-3.1)))))
+
+(define antlr3-3.1
+  (package
+    (inherit antlr3)
+    (name "antlr3-3.1")
+    (version "3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/antlr/website-antlr3/raw/"
+                                  "gh-pages/download/antlr-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0sfimc9cpbgrihz4giyygc8afgpma2c93yqpwb951giriri6x66z"))))
+    (arguments
+     `(#:jar-name (string-append ,name "-" ,version ".jar")
+       #:source-dir "src:runtime/Java/src"
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'bin-install
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((jar (string-append (assoc-ref outputs "out") "/share/java"))
+                   (bin (string-append (assoc-ref outputs "out") "/bin")))
+               (mkdir-p bin)
+               (with-output-to-file (string-append bin "/antlr3")
+                 (lambda _
+                   (display
+                     (string-append "#!" (which "sh") "\n"
+                                    "java -cp " jar "/antlr3-3.1-3.1.jar:"
+                                    (string-concatenate
+                                      (find-files (assoc-ref inputs "stringtemplate")
+                                                  ".*\\.jar"))
+                                    ":"
+                                    (string-concatenate
+                                      (find-files (string-append
+                                                    (assoc-ref inputs "antlr")
+                                                    "/lib")
+                                                  ".*\\.jar"))
+                                    " org.antlr.Tool $*"))))
+               (chmod (string-append bin "/antlr3") #o755))))
+         (add-before 'build 'generate-grammar
+           (lambda _
+             (let ((dir "src/org/antlr/tool/"))
+               (for-each (lambda (file)
+                           (display file)
+                           (newline)
+                           (system* "antlr" "-o" dir (string-append dir file)))
+                         '("antlr.g" "antlr.print.g" "assign.types.g"
+                           "buildnfa.g" "define.g")))
+             (format #t "codegen.g\n")
+             (system* "antlr" "-o" "src/org/antlr/codegen"
+                      "src/org/antlr/codegen/codegen.g")))
+         (add-before 'build 'fix-build-xml
+           (lambda _
+             (substitute* "build.xml"
+               (("<exec") "<copy todir=\"${classes.dir}\">
+<fileset dir=\"src\">
+<include name=\"**/*.stg\"/>
+<include name=\"**/*.st\"/>
+<include name=\"**/*.sti\"/>
+<include name=\"**/STLexer.tokens\"/>
+</fileset>
+</copy><exec")))))))
+    (native-inputs
+     `(("antlr" ,antlr2)))
+    (inputs
+     `(("junit" ,java-junit)))
+    (propagated-inputs
+     `(("stringtemplate" ,stringtemplate3)))))
index 9d85070..b481bb9 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -308,7 +308,7 @@ with a ksysguardd daemon, which may also run on a remote system.")
 (define-public qca
   (package
     (name "qca")
-    (version "2.1.1")
+    (version "2.1.3")
     (source
       (origin
         (method url-fetch)
@@ -316,14 +316,14 @@ with a ksysguardd daemon, which may also run on a remote system.")
                             "/src/qca-" version ".tar.xz"))
         (sha256
          (base32
-          "10z9icq28fww4qbzwra8d9z55ywbv74qk68nhiqfrydm21wkxplm"))))
+          "0lz3n652z208daxypdcxiybl0a9fnn6ida0q7fh5f42269mdhgq0"))))
     (build-system cmake-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
      `(("openssl" ,openssl)
        ("qtbase" ,qtbase)))
-    (home-page "http://delta.affinix.com/qca/")
+    (home-page "https://userbase.kde.org/QCA")
     (synopsis "Libraries for the Qt Cryptographic Architecture")
     (description "The Qt Cryptographic Architecture (QCA) provides a
 straightforward and cross-platform API for a range of cryptographic features,
index e3ab8f6..260ca94 100644 (file)
@@ -239,8 +239,8 @@ generator library for C++.")
 (define-public kodi
   ;; We package the git version because the current released
   ;; version was cut while the cmake transition was in turmoil.
-  (let ((commit "749c61e01082acec745bb82888caa1dd1eaa0677")
-        (revision "3"))
+  (let ((commit "b8ad238aa8010063eaf7d608d139002a50075e8d")
+        (revision "4"))
   (package
     (name "kodi")
     (version (string-append "18.0_alpha-" revision "-" (string-take commit 7)))
@@ -252,7 +252,7 @@ generator library for C++.")
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0mg22sbxvkhvd1b13xmv96k0b3lnrmjh3cd0cl0gjh17ip2v1y9k"))
+                "192agb8lpbajljbnnpn7y1pk2c6bvqbcpqhlgq4pja4pdf664xzg"))
               (snippet
                '(begin
                   (use-modules (guix build utils))
index e7b4229..ee0c5c0 100644 (file)
@@ -22,7 +22,7 @@
   #:use-module (gnu packages web)
   #:use-module (guix packages)
   #:use-module (guix build-system perl)
-  #:use-module ((guix licenses) #:select (gpl2 gpl3))
+  #:use-module ((guix licenses) #:select (gpl2 gpl3 perl-license))
   #:use-module (guix download))
 
 (define-public perl-lingua-en-findnumber
@@ -45,7 +45,7 @@
     (description "This module provides a regular expression for finding
 numbers in English text.  It also provides functions for extracting and
 manipulating such numbers.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-inflect
   (package
@@ -68,7 +68,7 @@ manipulating such numbers.")
 words.  Plural forms of all nouns, most verbs, and some adjectives are
 provided.  Where appropriate, \"classical\" variants (for example: \"brother\"
 -> \"brethren\", \"dogma\" -> \"dogmata\", etc.) are also provided.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-inflect-number
   (package
@@ -90,7 +90,7 @@ provided.  Where appropriate, \"classical\" variants (for example: \"brother\"
     (description "This module extends the functionality of Lingua::EN::Inflect
 with three new functions for determining plurality of a word and forcefully
 converting a word to singular or plural.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-inflect-phrase
   (package
@@ -117,7 +117,7 @@ converting a word to singular or plural.")
     (synopsis "Inflect short English phrases")
     (description "This module attempts to pluralize or singularize short
 English phrases.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-number-isordinal
   (package
@@ -141,7 +141,7 @@ English phrases.")
     (synopsis "Detect if English number is ordinal or cardinal")
     (description "This module will tell you if a number, either in words or as
 digits, is a cardinal or ordinal number.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-tagger
   (package
@@ -190,7 +190,7 @@ using a set of regular expressions.")
     (synopsis "Convert English text to numbers")
     (description "This module converts English text into numbers.  It supports
 both ordinal and cardinal numbers, negative numbers, and very large numbers.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-pt-stemmer
   (package
@@ -210,7 +210,7 @@ both ordinal and cardinal numbers, negative numbers, and very large numbers.")
     (description "This module implements a Portuguese stemming algorithm
 proposed in the paper A Stemming Algorithm for the Portuguese Language by
 Moreira, V. and Huyck, C.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem
   (package
@@ -240,7 +240,7 @@ Moreira, V. and Huyck, C.")
     (synopsis "Stemming of words in various languages")
     (description "This routine applies stemming algorithms to its parameters,
 returning the stemmed words as appropriate to the selected locale.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-fr
   (package
@@ -259,7 +259,7 @@ returning the stemmed words as appropriate to the selected locale.")
     (synopsis "Porter's stemming algorithm for French")
     (description "This module uses a modified version of the Porter Stemming
 Algorithm to return a stemmed French word.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-it
   (package
@@ -278,7 +278,7 @@ Algorithm to return a stemmed French word.")
     (synopsis "Porter's stemming algorithm for Italian")
     (description "This module applies the Porter Stemming Algorithm to its
 parameters, returning the stemmed Italian word.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-ru
   (package
@@ -297,7 +297,7 @@ parameters, returning the stemmed Italian word.")
     (synopsis "Porter's stemming algorithm for Russian")
     (description "This module applies the Porter Stemming Algorithm to its
 parameters, returning the stemmed Russian (KOI8-R only) word.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-snowball-da
   (package
@@ -337,7 +337,7 @@ Lingua::Stem::Snowball::Se.")
     (synopsis "Porters stemming algorithm for Norwegian")
     (description "Lingua::Stem::Snowball::No is a perl port of the norwegian
 stemmer at http://snowball.tartarus.org.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-snowball-swedish
   (package
@@ -357,7 +357,7 @@ stemmer at http://snowball.tartarus.org.")
     (synopsis "Porters stemming algorithm for Swedish")
     (description "Lingua::Stem::Snowball::Se is a perl port of the swedish
 stemmer at http://snowball.sourceforge.net.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-string-toidentifier-en
   (package
@@ -383,7 +383,7 @@ converting an arbitrary string into a readable representation using the ASCII
 subset of \"\\w\" for use as an identifier in a computer program.  The intent
 is to make unique identifier names from which the content of the original
 string can be easily inferred by a human just by reading the identifier.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-text-german
   (package
@@ -402,4 +402,4 @@ string can be easily inferred by a human just by reading the identifier.")
     (synopsis "German grundform reduction")
     (description "This module is a rather incomplete implementation of work
 done by Gudrun Putze-Meier.")
-    (license (package-license perl))))
+    (license perl-license)))
index efdf8ab..0aa4665 100644 (file)
@@ -26,7 +26,7 @@
 (define-public less
   (package
     (name "less")
-    (version "481")
+    (version "487")
     (source
      (origin
       (method url-fetch)
@@ -34,7 +34,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "19fxj0h10y5bhr3a1xa7kqvnwl44db3sdypz8jxl1q79yln8z8rz"))))
+        "01i7n6jaxwmww3pasy3hg38zc6x7jw0w05mqqvh6caqbrdaq9p7k"))))
     (build-system gnu-build-system)
     (inputs `(("ncurses" ,ncurses)))
     (home-page "https://www.gnu.org/software/less/")
index 5d769aa..c903352 100644 (file)
@@ -192,7 +192,7 @@ Currently supported event loops are EV, Event, Glib/Gtk2, Tk, Qt,
 @code{Event::Lib}, Irssi, @code{IO::Async} and POE (and thus also WxWidgets
 and Prima).  It also comes with a very fast Pure Perl event loop that does
 not rely on XS.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-ev
   (package
@@ -233,4 +233,4 @@ not rely on XS.")
      "This module provides an interface to @code{libev}, a high performance
 full-featured event loop.  It can be used through the @code{AnyEvent} module
 and still be faster than other event loops currently supported in Perl.")
-    (license (package-license perl))))
+    (license perl-license)))
index 6ff40c8..e4babfe 100644 (file)
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Joshua S. Grant <jgrant@parenthetical.io>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 
 (define-module (gnu packages libffcall)
   #:use-module ((guix licenses) #:prefix l:)
+  #:use-module (guix utils) ; string-replace-substring
   #:use-module (guix packages)
   #:use-module (guix download)
-  #:use-module (guix cvs-download)
+  #:use-module (guix git-download)
   #:use-module (guix build-system gnu))
 
 (define-public libffcall
    (package
     (name "libffcall")
-    (version "1.10+cvs-2015-01-15")
+    (version "1.12")
     (source
      (origin
-       (method cvs-fetch)
-       (uri (cvs-reference
-             (root-directory
-              ":pserver:anonymous@cvs.savannah.gnu.org:/sources/libffcall")
-             (module "ffcall")
-             (revision "2015-01-15")))
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.savannah.gnu.org/r/libffcall.git")
+             (commit (string-append
+                       "ffcall-" (string-replace-substring version "." "-")))))
        (file-name (string-append name "-" version "-checkout"))
        (sha256
         (base32
-         "1lwdskc2w4rr98x9flr2726lmj4190l16r0izg7gqxy50801wwgd"))))
+         "0p7gg5k4ifcqpmrmdfmr2r4x909cn35g87iff539p6i8891fdfxf"))))
     (build-system gnu-build-system)
     (arguments `(#:parallel-build? #f))
     (synopsis "Foreign function calls from interpreters")
diff --git a/gnu/packages/links.scm b/gnu/packages/links.scm
deleted file mode 100644 (file)
index 145ed76..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014 John Darrington <jmd@gnu.org>
-;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
-;;;
-;;; 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 links)
-  #:use-module ((guix licenses) #:prefix license:)
-  #:use-module (guix packages)
-  #:use-module (gnu packages)
-  #:use-module (gnu packages compression)
-  #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages image)
-  #:use-module (gnu packages libevent)
-  #:use-module (gnu packages tls)
-  #:use-module (gnu packages xorg)
-  #:use-module (guix download)
-  #:use-module (guix build-system gnu))
-
-(define-public links
-  (package
-    (name "links")
-    (version "2.14")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "http://links.twibright.com/download/"
-                                  name "-" version ".tar.bz2"))
-              (sha256
-               (base32 "1f24y83wa1vzzjq5kp857gjqdpnmf8pb29yw7fam0m8wxxw0c3gp"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:phases
-       (modify-phases %standard-phases
-         (replace 'configure
-           (lambda* (#:key outputs #:allow-other-keys)
-             ;; The tarball uses a very old version of autconf. It doesn't
-             ;; understand extra flags like `--enable-fast-install', so
-             ;; we need to invoke it with just what it understands.
-             (let ((out (assoc-ref outputs "out")))
-               ;; 'configure' doesn't understand '--host'.
-               ,@(if (%current-target-system)
-                     `((setenv "CHOST" ,(%current-target-system)))
-                     '())
-               (setenv "CONFIG_SHELL" (which "bash"))
-               (zero?
-                (system* "./configure"
-                         (string-append "--prefix=" out)
-                         "--enable-graphics"))))))))
-    (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("zlib" ,zlib)
-              ("openssl" ,openssl)
-              ("libjpeg" ,libjpeg)
-              ("libtiff" ,libtiff)
-              ("libevent" ,libevent)
-              ("libpng" ,libpng)
-              ("libxt" ,libxt)))
-    (synopsis "Text and graphics mode web browser")
-    (description "Links is a graphics and text mode web browser, with many
-features including, tables, builtin image display, bookmarks, SSL and more.")
-    (home-page "http://links.twibright.com")
-    ;; The distribution contains a copy of GPLv2
-    ;; However, the copyright notices simply say:
-    ;; "This file is a part of the Links program, released under GPL."
-    ;; Therefore, under the provisions of Section 9, we can choose
-    ;; any version ever published by the FSF.
-    ;; One file (https.c) contains an exception permitting
-    ;; linking of the program with openssl.
-    (license license:gpl1+)))
index 958d111..75da0d4 100644 (file)
@@ -80,6 +80,7 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages rrdtool)
+  #:use-module (gnu packages samba)
   #:use-module (gnu packages slang)
   #:use-module (gnu packages storage)
   #:use-module (gnu packages texinfo)
@@ -353,8 +354,8 @@ It has been modified to remove all non-free binary blobs.")
 
 (define %intel-compatible-systems '("x86_64-linux" "i686-linux"))
 
-(define %linux-libre-version "4.10.13")
-(define %linux-libre-hash "0sl3w4id3amahv42xg2ac0lqhxn5dih2vm7wyxnfja4c3g4hshn4")
+(define %linux-libre-version "4.11")
+(define %linux-libre-hash "0j1bzzq9iq5i1zm7gnig8v0clr8wq303kvcdsaifc0r0ggz1mx1n")
 
 (define-public linux-libre
   (make-linux-libre %linux-libre-version
@@ -363,14 +364,14 @@ It has been modified to remove all non-free binary blobs.")
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.9
-  (make-linux-libre "4.9.25"
-                    "15vcphpz40n75jwhbpbwiqvgxsdn05n6nbfg5cksyy24f9fpd35k"
+  (make-linux-libre "4.9.27"
+                    "1b39zijjkv21kya359y4g88w5ff110v95pvc4wfvc83dvik9hny5"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
 (define-public linux-libre-4.4
-  (make-linux-libre "4.4.64"
-                    "02fvsklimzgkhsjg3i6mjhf09b4kvgwr2cg2nak5li3fpjmw1y35"
+  (make-linux-libre "4.4.67"
+                    "1nadmrd26llc17ipig7bx7rf2gwns94g86a3ilcvgdk17hq5riss"
                     %intel-compatible-systems
                     #:configuration-file kernel-config))
 
@@ -467,7 +468,7 @@ at login.  Local and dynamic reconfiguration are its key features.")
 (define-public psmisc
   (package
     (name "psmisc")
-    (version "22.20")
+    (version "22.21")
     (source
      (origin
       (method url-fetch)
@@ -475,10 +476,10 @@ at login.  Local and dynamic reconfiguration are its key features.")
                           version ".tar.gz"))
       (sha256
        (base32
-        "052mfraykmxnavpi8s78aljx8w87hyvpx8mvzsgpjsjz73i28wmi"))))
+        "0nhlm1vrrwn4a845p6y4nnnb4liq70n74zbdd5dq844jc6nkqclp"))))
     (build-system gnu-build-system)
     (inputs `(("ncurses" ,ncurses)))
-    (home-page "http://psmisc.sourceforge.net/")
+    (home-page "https://gitlab.com/psmisc/psmisc")
     (synopsis
      "Small utilities that use the proc file system")
     (description
@@ -646,7 +647,7 @@ slabtop, and skill.")
 (define-public e2fsprogs
   (package
     (name "e2fsprogs")
-    (version "1.42.13")
+    (version "1.43.4")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -655,79 +656,66 @@ slabtop, and skill.")
                    name "-" version ".tar.xz"))
              (sha256
               (base32
-               "1ix0b83zgw5n0p2grh2961c6796m92yr2jqc2sbr23x3lfsp8r71"))
-             (modules '((guix build utils)))
-             (snippet
-              '(begin
-                 (substitute* "MCONFIG.in"
-                   (("INSTALL_SYMLINK = /bin/sh")
-                    "INSTALL_SYMLINK = sh"))
-
-                 ;; Do not include a timestamp in libext2fs.info.gz.
-                 (substitute* "doc/Makefile.in"
-                   (("gzip -9")
-                    "gzip -9n"))))))
+               "092absr4vrlqrkdf9nwh4ykj40ab6hhwrkdr6sjsccd54c8z5csl"))))
     (build-system gnu-build-system)
     (inputs `(("util-linux" ,util-linux)))
     (native-inputs `(("pkg-config" ,pkg-config)
-                     ("texinfo" ,texinfo)))     ;for the libext2fs Info manual
+                     ("texinfo" ,texinfo)       ;for the libext2fs Info manual
+
+                     ;; For tests.
+                     ("perl" ,perl)
+                     ("procps" ,procps)))
     (arguments
-     '(;; Parallel building reliably yields a failure like this:
-       ;; "make[2]: *** No rule to make target '../lib/libss.so', needed by
-       ;; 'debugfs'.  Stop."
-       #:parallel-build? #f
-       ;; util-linux is the preferred source for some of the libraries and
+     '(;; util-linux is the preferred source for some of the libraries and
        ;; commands, so disable them (see, e.g.,
        ;; <http://git.buildroot.net/buildroot/commit/?id=e1ffc2f791b33633>.)
-       #:configure-flags '("--disable-libblkid"
-                           "--disable-libuuid" "--disable-uuidd"
-                           "--disable-fsck"
+       #:configure-flags (list "--disable-libblkid"
+                               "--disable-libuuid" "--disable-uuidd"
+                               "--disable-fsck"
 
-                           ;; Use symlinks instead of hard links for
-                           ;; 'fsck.extN' etc.  This makes the resulting nar
-                           ;; smaller and is preserved across copies.
-                           "--enable-symlink-install"
+                               ;; Use symlinks instead of hard links for
+                               ;; 'fsck.extN' etc.  This makes the resulting nar
+                               ;; smaller and is preserved across copies.
+                               "--enable-symlink-install"
 
-                           ;; Install libext2fs et al.
-                           "--enable-elf-shlibs")
+                               (string-append "LDFLAGS=-Wl,-rpath="
+                                              (assoc-ref %outputs "out")
+                                              "/lib")
 
-       #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath="
-                                         (assoc-ref %outputs "out")
-                                         "/lib"))
+                               ;; Install libext2fs et al.
+                               "--enable-elf-shlibs")
 
-       #:phases (alist-cons-before
-                 'configure 'patch-shells
-                 (lambda _
-                   (substitute* "configure"
-                     (("/bin/sh (.*)parse-types.sh" _ dir)
-                      (string-append (which "sh") " " dir
-                                     "parse-types.sh")))
-                   (substitute* (find-files "." "^Makefile.in$")
-                     (("#!/bin/sh")
-                      (string-append "#!" (which "sh")))))
-                 (alist-cons-after
-                  'install 'install-libs
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let* ((out (assoc-ref outputs "out"))
-                           (lib (string-append out "/lib")))
-                      (and (zero? (system* "make" "install-libs"))
-
-                           ;; Make the .a writable so that 'strip' works.
-                           ;; Failing to do that, due to debug symbols, we
-                           ;; retain a reference to the final
-                           ;; linux-libre-headers, which refer to the
-                           ;; bootstrap binaries.
-                           (let ((archives (find-files lib "\\.a$")))
-                             (for-each (lambda (file)
-                                         (chmod file #o666))
-                                       archives)
-                             #t))))
-                  %standard-phases))
-
-       ;; FIXME: Tests work by comparing the stdout/stderr of programs, that
-       ;; they fail because we get an extra line that says "Can't check if
-       ;; file system is mounted due to missing mtab file".
-       #:tests? #f))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'patch-shells
+           (lambda _
+             (substitute* "configure"
+               (("/bin/sh (.*)parse-types.sh" _ dir)
+                (string-append (which "sh") " " dir
+                               "parse-types.sh")))
+             (substitute* "MCONFIG.in"
+               (("INSTALL_SYMLINK = /bin/sh")
+                "INSTALL_SYMLINK = sh"))
+             (substitute* (find-files "." "^Makefile.in$")
+               (("#!/bin/sh")
+                (string-append "#!" (which "sh"))))
+             #t))
+           (add-after 'install 'install-libs
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (lib (string-append out "/lib")))
+                 (and (zero? (system* "make" "install-libs"))
+
+                      ;; Make the .a writable so that 'strip' works.
+                      ;; Failing to do that, due to debug symbols, we
+                      ;; retain a reference to the final
+                      ;; linux-libre-headers, which refer to the
+                      ;; bootstrap binaries.
+                      (let ((archives (find-files lib "\\.a$")))
+                        (for-each (lambda (file)
+                                    (chmod file #o666))
+                                  archives)
+                        #t))))))))
     (home-page "http://e2fsprogs.sourceforge.net/")
     (synopsis "Creating and checking ext2/ext3/ext4 file systems")
     (description
@@ -1697,7 +1685,7 @@ system.")
               ("bzip2" ,bzip2)
               ("pam" ,linux-pam)))
     (native-inputs `(("pkg-config" ,pkg-config)))
-    (home-page "ftp://ftp.kernel.org/pub/linux/utils/kbd/")
+    (home-page "http://kbd-project.org/")
     (synopsis "Linux keyboard utilities and keyboard maps")
     (description
      "This package contains keytable files and keyboard utilities compatible
@@ -1820,14 +1808,14 @@ time.")
 (define-public lvm2
   (package
     (name "lvm2")
-    (version "2.02.168")
+    (version "2.02.171")
     (source (origin
               (method url-fetch)
               (uri (string-append "ftp://sources.redhat.com/pub/lvm2/releases/LVM2."
                                   version ".tgz"))
               (sha256
                (base32
-                "03b62hcsj9z37ckd8c21wwpm07s9zblq7grfh58yzcs1vp6x38r3"))
+                "0r4r9fsvpj9hjmf0zz7h4prz12r6y16jhjhsvk1sbfpsl88sf5dq"))
               (modules '((guix build utils)))
               (snippet
                '(begin
@@ -1883,7 +1871,7 @@ time.")
 
        ;; The tests use 'mknod', which requires root access.
        #:tests? #f))
-    (home-page "http://sourceware.org/lvm2/")
+    (home-page "https://sourceware.org/lvm2/")
     (synopsis "Logical volume management for Linux")
     (description
      "LVM2 is the logical volume management tool set for Linux-based systems.
@@ -2286,14 +2274,14 @@ thanks to the use of namespaces.")
 (define-public hdparm
   (package
     (name "hdparm")
-    (version "9.51")
+    (version "9.52")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/" name "/" name "/"
                                   name "-" version ".tar.gz"))
               (sha256
                (base32
-                "14ax5lyzhigx58ing7adbfyzisv0fqajbmzphg149rnb3s4xiyhs"))))
+                "1djgxhfadd865dcrl6dp7dvjxpaisy7mk17mbdbglwg24ga9qhn3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags (let ((out (assoc-ref %outputs "out")))
@@ -2699,9 +2687,7 @@ Linux Device Mapper multipathing driver:
               (method url-fetch)
              (uri (list
                    (string-append "mirror://debian/pool/main/liba/libaio/"
-                                  name "_" version ".orig.tar.gz")
-                   (string-append "https://fedorahosted.org/releases/l/i/libaio/"
-                                  name "-" version ".tar.gz")))
+                                  name "_" version ".orig.tar.gz")))
              (sha256
               (base32
                "0zjzfkwd1kdvq6zpawhzisv7qbq1ffs343i5fs9p498pcf7046g0"))))
@@ -3658,7 +3644,7 @@ Light is the successor of lightscript.")
     (arguments
      `(#:phases
        (modify-phases %standard-phases
-         (delete 'configure)
+         (delete 'configure)            ; no configure script
          (add-before 'build 'setenv
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
@@ -3673,10 +3659,14 @@ Light is the successor of lightscript.")
                (setenv "TLP_SHCPL"
                        (string-append out "/share/bash-completion/completions"))
                (setenv "TLP_MAN" (string-append out "/share/man")))))
-         (delete 'check)
+         (delete 'check)                ; no tests
+         (add-before 'install 'fix-installation
+           (lambda _
+             ;; Stop the Makefile from trying to create system directories.
+             (substitute* "Makefile" (("\\[ -f \\$\\(_CONF\\) \\]") "#"))))
          (replace 'install
            (lambda _
-             (system "make install-tlp install-man")))
+             (zero? (system* "make" "install-tlp" "install-man"))))
          (add-after 'install 'wrap
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
@@ -3793,3 +3783,127 @@ programming interface to the in-kernel nf_tables subsystem.  The library
 libnftnl has been previously known as libnftables.  This library is currently
 used by nftables.")
     (license license:gpl2+)))
+
+(define-public proot
+  (package
+    (name "proot")
+    (version "5.1.0")
+    (home-page "https://github.com/proot-me/PRoot")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append home-page "/archive/v" version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "11h30i83vdhc3khlj6hrh3a21sbmmz8nhfv09vkf6b9bcs1biz2h"))
+              (patches (search-patches "proot-test-fhs.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:make-flags '("-C" "src")
+
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure)
+                  (add-before 'build 'set-shell-file-name
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (substitute* (find-files "src" "\\.[ch]$")
+                        (("\"/bin/sh\"")
+                         (string-append "\""
+                                        (assoc-ref inputs "bash")
+                                        "/bin/sh\"")))
+                      #t))
+                  (add-before 'check 'fix-fhs-assumptions-in-tests
+                    (lambda _
+                      (substitute* "tests/test-c6b77b77.mk"
+                        (("/bin/bash") (which "bash"))
+                        (("/usr/bin/test") (which "test")))
+                      (substitute* '("tests/test-16573e73.c")
+                        (("/bin/([a-z-]+)" _ program)
+                         (which program)))
+
+                      (substitute* (find-files "tests" "\\.sh$")
+                        ;; Some of the tests try to "bind-mount" /bin/true.
+                        (("-b /bin/true:")
+                         (string-append "-b " (which "true") ":"))
+                        ;; Likewise for /bin.
+                        (("-b /bin:") "-b /gnu:")
+                        ;; Others try to run /bin/sh.
+                        (("/bin/sh") (which "sh"))
+                        ;; Others assume /etc/fstab exists.
+                        (("/etc/fstab") "/etc/passwd"))
+
+                      (substitute* "tests/GNUmakefile"
+                        (("-b /bin:") "-b /gnu:"))
+
+                      ;; XXX: This test fails in an obscure corner case, just
+                      ;; skip it.
+                      (delete-file "tests/test-kkkkkkkk.c")
+
+                      #t))
+                  (replace 'check
+                    (lambda _
+                      (let ((n (parallel-job-count)))
+                        ;; For some reason we get lots of segfaults with
+                        ;; seccomp support (x86_64, Linux-libre 4.11.0).
+                        (setenv "PROOT_NO_SECCOMP" "1")
+
+                        ;; Most of the tests expect "/bin" to be in $PATH so
+                        ;; they can run things that live in $ROOTFS/bin.
+                        (setenv "PATH"
+                                (string-append (getenv "PATH") ":/bin"))
+
+                        (zero? (system* "make" "check" "-C" "tests"
+                                        ;;"V=1"
+                                        "-j" (number->string n))))))
+                  (replace 'install
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; The 'install' rule does nearly nothing.
+                      (let ((out (assoc-ref outputs "out")))
+                        (and (zero?
+                              ;; TODO: 'make install-care' (does not even
+                              ;; build currently.)
+                              (system* "make" "-C" "src" "install"
+                                       (string-append "PREFIX=" out)))
+                             (begin
+                               (install-file "doc/proot/man.1"
+                                             (string-append out "/share"
+                                                            "/man/man1"))
+                               #t))))))))
+    (native-inputs `(("which" ,which)
+
+                     ;; For 'mcookie', used by some of the tests.
+                     ("util-linux" ,util-linux)))
+    (inputs `(("talloc" ,talloc)))
+    (synopsis "Unprivileged chroot, bind mount, and binfmt_misc")
+    (description
+     "PRoot is a user-space implementation of @code{chroot}, @code{mount --bind},
+and @code{binfmt_misc}.  This means that users don't need any privileges or
+setup to do things like using an arbitrary directory as the new root
+filesystem, making files accessible somewhere else in the file system
+hierarchy, or executing programs built for another CPU architecture
+transparently through QEMU user-mode.  Also, developers can use PRoot as a
+generic process instrumentation engine thanks to its extension mechanism.
+Technically PRoot relies on @code{ptrace}, an unprivileged system-call
+available in the kernel Linux.")
+    (license license:gpl2+)))
+
+(define-public proot-static
+  (package
+    (inherit proot)
+    (name "proot-static")
+    (synopsis
+     "Unprivileged chroot, bind mount, and binfmt_misc (statically linked)")
+    (inputs `(("talloc" ,talloc/static)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments proot)
+       ((#:make-flags flags)
+        `(cons "LDFLAGS = -ltalloc -static -static-libgcc" ,flags))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'strip 'remove-store-references
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")))
+                 (with-directory-excursion out
+                   (remove-store-references "bin/proot")
+                   #t))))))
+       ((#:allowed-references _ '("out"))
+        '("out"))))))
index 43d9c9c..57d0191 100644 (file)
@@ -283,7 +283,10 @@ an interpreter, a compiler, a debugger, and much more.")
        ("texlive" ,texlive)
        ("texinfo" ,texinfo)))
     (arguments
-     '(#:phases
+     '(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
+       #:phases
        (modify-phases %standard-phases
          (delete 'configure)
          (add-before 'build 'patch-unix-tool-paths
index 04a2b39..4702a34 100644 (file)
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
 ;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -218,6 +219,29 @@ code analysis tools.")
                    "1prc72xmkgx8wrzmrr337776676nhsp1qd3mw2bvb22bzdnq7lsc"
                    #:patches '("clang-3.8-libc-search-path.patch")))
 
+(define-public llvm-3.9.1
+  (package (inherit llvm)
+    (name "llvm")
+    (version "3.9.1")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (string-append "http://llvm.org/releases/"
+                          version "/llvm-" version ".src.tar.xz"))
+      (sha256
+       (base32
+        "1vi9sf7rx1q04wj479rsvxayb6z740iaz3qniwp266fgp5a07n8z"))))))
+
+(define-public clang-runtime-3.9.1
+  (clang-runtime-from-llvm
+   llvm-3.9.1
+   "16gc2gdmp5c800qvydrdhsp0bzb97s8wrakl6i8a4lgslnqnf2fk"))
+
+(define-public clang-3.9.1
+  (clang-from-llvm llvm-3.9.1 clang-runtime-3.9.1
+                   "0qsyyb40iwifhhlx9a3drf8z6ni6zwyk3bvh0kx2gs6yjsxwxi76"
+                   #:patches '()))
+
 (define-public llvm-3.7
   (package (inherit llvm)
     (version "3.7.1")
@@ -268,6 +292,8 @@ code analysis tools.")
        (method url-fetch)
        (uri (string-append "http://llvm.org/releases/"
                            version "/llvm-" version ".src.tar.xz"))
+       (patches
+        (search-patches "llvm-3.5-fix-clang-build-with-gcc5.patch"))
        (sha256
         (base32
          "0xf5q17kkxsrm2gsi93h4pwlv663kji73r2g4asb97klsmb626a4"))))))
index d28094c..2523d65 100644 (file)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python)
   #:use-module (gnu packages)
   #:use-module (gnu packages perl)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages autotools))
 
 (define-public log4cpp
@@ -90,3 +92,27 @@ helper macros.  You can log a message by simply streaming things to log at a
 particular severity level.  It allows logging to be controlled from the
 command line.")
     (license license:bsd-3)))
+
+(define-public tailon
+  (package
+    (name "tailon")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri name version))
+       (sha256
+        (base32
+         "08clrwpfdxcv2z2b5ardpmim4alahbw4l7631dhw62xhbcf6wjzz"))))
+    (build-system python-build-system)
+    (inputs
+     `(("python-pyyaml" ,python-pyyaml)
+       ("python-sockjs-tornado" ,python-sockjs-tornado)
+       ("python-tornado" ,python-tornado)))
+    (home-page "https://tailon.readthedocs.io/")
+    (synopsis
+     "Webapp for looking at and searching through log files")
+    (description
+     "Tailon provides a web interface around the tail, grep, awk and sed
+commands, displaying the results via a web interface.")
+    (license license:bsd-3)))
index 1164ba8..bf70bd6 100644 (file)
@@ -162,6 +162,7 @@ toolkit.  It allows users to monitor and control of running processes.")
               (uri (string-append "mirror://sourceforge/lxde/LXTerminal"
                                   "%20%28terminal%20emulator%29/LXTerminal%20"
                                   version "/" name "-" version ".tar.xz"))
+              (patches (search-patches "lxterminal-CVE-2016-10369.patch"))
               (sha256
                (base32
                 "1yf76s15zvfw0h42b0ay1slpq47khgjmcry8ki2z812zar9lchia"))))
@@ -288,11 +289,26 @@ menu spec-compliant desktop menus for LXDE.")
         (base32
          "0mj84fa3f4ak1jjslrwc2q3ci9zxrxpciggviza9bjb0168brn8w"))))
     (build-system gnu-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-before 'configure 'set-lxsession
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      ;; Set the right file name for 'lxsession'.
+                      (let ((lxsession (assoc-ref inputs "lxsession")))
+                        (substitute* "startlxde.in"
+                          (("^exec .*/bin/lxsession")
+                           (string-append "exec " lxsession
+                                          "/bin/lxsession")))
+                        #t))))))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("intltool" ,intltool)
        ("lxmenu-data" ,lxmenu-data)
        ("lxde-icon-theme" ,lxde-icon-theme)))
+    (inputs
+     `(("lxsession" ,lxsession)
+       ;; ("lxlock" ,lxlock) ;for 'lxde-screenlock.desktop'
+       ))
     (synopsis "Common files of the LXDE Desktop")
     (description
      "Lxde-common provides common files of the LXDE Desktop.")
diff --git a/gnu/packages/lynx.scm b/gnu/packages/lynx.scm
deleted file mode 100644 (file)
index b212dca..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-;;; 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.
-;;;
-;;; 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 lynx)
-  #:use-module ((guix licenses) #:select (gpl2))
-  #:use-module (guix packages)
-  #:use-module (guix download)
-  #:use-module (guix build-system gnu)
-  #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages perl)
-  #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages libidn)
-  #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages tls)
-  #:use-module (gnu packages zip)
-  #:use-module (gnu packages compression))
-
-(define-public lynx
-  (package
-    (name "lynx")
-    (version "2.8.9dev.11")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://invisible-mirror.net/archives/lynx/tarballs"
-                    "/lynx" version ".tar.bz2"))
-              (sha256
-               (base32
-                "1cqm1i7d209brkrpzaqqf2x951ra3l67dw8x9yg10vz7rpr9441a"))))
-    (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("perl" ,perl)))
-    (inputs `(("ncurses" ,ncurses)
-              ("libidn" ,libidn)
-              ("gnutls" ,gnutls)
-              ("libgcrypt" ,libgcrypt)
-              ("unzip" ,unzip)
-              ("zlib" ,zlib)
-              ("gzip" ,gzip)
-              ("bzip2" ,bzip2)))
-    (arguments
-     `(#: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
-                 (lambda* (#:key (make-flags '()) #:allow-other-keys)
-                   (zero? (apply system* "make" "install-full" make-flags)))
-                 %standard-phases)))
-    (synopsis "Text Web Browser")
-    (description
-     "Lynx is a fully-featured World Wide Web (WWW) client for users running
-cursor-addressable, character-cell display devices.  It will display Hypertext
-Markup Language (HTML) documents containing links to files on the local
-system, as well as files on remote systems running http, gopher, ftp, wais,
-nntp, finger, or cso/ph/qi servers.  Lynx can be used to access information on
-the WWW, or to build information systems intended primarily for local
-access.")
-    (home-page "http://lynx.isc.org/")
-    (license gpl2)))
-
-;;; lynx.scm ends here
index 58ae81d..d39e77d 100644 (file)
@@ -274,6 +274,9 @@ networks) based on simulation of (stochastic) flow in graphs.")
 algorithm.")
     (license license:gpl3)))
 
+(define-public ocaml4.01-mcl
+  (package-with-ocaml4.01 ocaml-mcl))
+
 (define-public randomjungle
   (package
     (name "randomjungle")
index a10c3bc..39d3941 100644 (file)
                 #:select (gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
                            non-copyleft (expat . license:expat) bsd-3
                            public-domain bsd-4 isc (openssl . license:openssl)
-                           bsd-2 x11-style agpl3 asl2.0))
+                           bsd-2 x11-style agpl3 asl2.0 perl-license))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -837,14 +837,14 @@ useful features.")
 (define-public libetpan
   (package
     (name "libetpan")
-    (version "1.7.2")
+    (version "1.8")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://github.com/dinhviethoa/" name
                    "/archive/" version ".tar.gz"))
              (file-name (string-append name "-" version ".tar.gz"))
              (sha256
-               (base32 "081ixgj3skglq9i7v0jb835lmfx21zi4i5b7997igwr0lj174y9j"))))
+               (base32 "1sxnaglp5hb0z78sgnfzva4x8m4flqhicvm1dz0krkxdmfsafrsf"))))
     (build-system gnu-build-system)
     (native-inputs `(("autoconf" ,(autoconf-wrapper))
                      ("automake" ,automake)
@@ -875,7 +875,7 @@ useful features.")
 framework for different kinds of mail access: IMAP, SMTP, POP and NNTP.  It
 provides an API for C language.  It's the low-level API used by MailCore and
 MailCore 2.")
-    (license (non-copyleft "file://COPYING"))))
+    (license bsd-3)))
 
 (define-public compface
   (package
@@ -1277,7 +1277,7 @@ mailboxes.  Currently Maildir and IMAP are supported types.")
     (synopsis "Interface to mail representations")
     (description "Email::Abstract provides module writers with the ability to
 write simple, representation-independent mail handling code.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-address
   (package
@@ -1297,7 +1297,7 @@ write simple, representation-independent mail handling code.")
     (description "Email::Address implements a regex-based RFC 2822 parser that
 locates email addresses in strings and returns a list of Email::Address
 objects found.  Alternatively you may construct objects manually.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-date-format
   (package
@@ -1316,7 +1316,7 @@ objects found.  Alternatively you may construct objects manually.")
     (synopsis "Produce RFC 2822 date strings")
     (description "Email::Date::Format provides a means for generating an RFC
 2822 compliant datetime string.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-messageid
   (package
@@ -1335,7 +1335,7 @@ objects found.  Alternatively you may construct objects manually.")
     (synopsis "Generate world unique message-ids")
     (description "Email::MessageID generates recommended message-ids to
 identify a message uniquely.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-mime
   (package
@@ -1363,7 +1363,7 @@ identify a message uniquely.")
 handle MIME encoded messages.  It takes a message as a string, splits it up
 into its constituent parts, and allows you access to various parts of the
 message.  Headers are decoded from MIME encoding.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-mime-contenttype
   (package
@@ -1384,7 +1384,7 @@ message.  Headers are decoded from MIME encoding.")
     (synopsis "Parse MIME Content-Type headers")
     (description "Email::MIME::ContentType parses a MIME Content-Type
 header.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-mime-encodings
   (package
@@ -1404,7 +1404,7 @@ header.")
     (home-page "http://search.cpan.org/dist/Email-MIME-Encodings")
     (synopsis "Unified interface to MIME encoding and decoding")
     (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-sender
   (package
@@ -1436,7 +1436,7 @@ header.")
     (synopsis "Perl library for sending email")
     (description "Email::Sender replaces the old and sometimes problematic
 Email::Send library.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-simple
   (package
@@ -1457,7 +1457,7 @@ Email::Send library.")
     (synopsis "Parsing of RFC 2822 messages")
     (description "Email::Simple provides simple parsing of RFC 2822 message
 format and headers.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public libesmtp
   (package
index a2e435e..8319a7e 100644 (file)
@@ -30,7 +30,6 @@
   #:use-module (gnu packages gawk)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages less)
-  #:use-module (gnu packages lynx)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages linux))
@@ -134,7 +133,7 @@ the traditional flat-text whatis databases.")
 (define-public man-pages
   (package
     (name "man-pages")
-    (version "4.10")
+    (version "4.11")
     (source (origin
               (method url-fetch)
               (uri
@@ -147,7 +146,7 @@ the traditional flat-text whatis databases.")
                     "man-pages-" version ".tar.xz")))
               (sha256
                (base32
-                "1yk3ibmbc1wamw798lqw8lh203xnrjddy8wdk5d3hifmj71xz5bk"))))
+                "097m0gsbaz0gf9ir4lmph3h5jj6wmydk1rglfz82dysybx4q1pmd"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (alist-delete 'configure %standard-phases)
index 4e70bd8..88a46f8 100644 (file)
@@ -311,6 +311,9 @@ numbers.")
 the OCaml language.")
     (license license:gpl3+)))
 
+(define-public ocaml4.01-gsl
+  (package-with-ocaml4.01 ocaml-gsl))
+
 (define-public glpk
   (package
     (name "glpk")
diff --git a/gnu/packages/mes.scm b/gnu/packages/mes.scm
new file mode 100644 (file)
index 0000000..84d6f8f
--- /dev/null
@@ -0,0 +1,97 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Jan Nieuwenhuizen <janneke@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages mes)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages base)
+  #:use-module (gnu packages commencement)
+  #:use-module (gnu packages cross-base)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages package-management)
+  #:use-module (gnu packages perl)
+  #:use-module (guix build-system gnu)
+  #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix licenses)
+  #:use-module (guix packages))
+
+(define-public nyacc
+  (package
+    (name "nyacc")
+    (version "0.78.3")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/nyacc/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0xrnl2hl9rpl50n8cihvclcd951zj640fj5kpi3d6ihwcqjcdi0a"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("guile" ,guile-2.2)))
+    (synopsis "LALR(1) Parser Generator in Guile")
+    (description
+     "NYACC is an LALR(1) parser generator implemented in Guile.
+The syntax and nomenclature should be considered not stable.  It comes with
+extensive examples, including parsers for the Javascript and C99 languages.")
+    (home-page "https://savannah.nongnu.org/projects/nyacc")
+    (license (list gpl3+ lgpl3+))))
+
+(define-public mes
+  (let ((commit   "a437c173b9da1949ad966fd50dd4f26e522a910a")
+        (revision "0")
+        (triplet  "i686-unknown-linux-gnu"))
+    (package
+      (name "mes")
+      (version (string-append "0.5-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://gitlab.com/janneke/mes")
+                      (commit commit)))
+                (file-name (string-append name "-" version))
+                ;; TODO: Unbundle nyacc.
+                (sha256
+                 (base32 "1ynr0hc0k15307sgzv09k3y5rvy46h0wbh7zcblx1f9v7y8k90zv"))))
+      (build-system gnu-build-system)
+      (supported-systems '("x86_64-linux"))
+      (native-inputs
+       `(("guile" ,guile-2.2)
+         ;; Use cross-compiler rather than #:system "i686-linux" to get
+         ;; MesCC 64 bit .go files installed ready for use with Guile.
+         ("i686-linux-binutils" ,(cross-binutils triplet))
+         ("i686-linux-gcc" ,(let ((triplet triplet)) (cross-gcc triplet)))
+         ("perl" ,perl)))                       ;build-aux/gitlog-to-changelog
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-before 'install 'generate-changelog
+             (lambda _
+               (with-output-to-file "ChangeLog"
+                 (lambda ()
+                   (display "Please run
+    build-aux/gitlog-to-changelog --srcdir=<git-checkout> > ChangeLog\n")))
+               #t)))))
+      (synopsis "Maxwell Equations of Software")
+      (description
+       "Mes aims to create full source bootstrapping for GuixSD.  It
+consists of a mutual self-hosting [close to Guile-] Scheme interpreter
+prototype in C and a Nyacc-based C compiler in [Guile] Scheme.")
+      (home-page "https://gitlab.com/janneke/mes")
+      (license gpl3+))))
index 59e2b23..89df097 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015, 2016 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2014 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2014, 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
@@ -166,17 +166,31 @@ identi.ca and status.net).")
 (define-public hexchat
   (package
     (name "hexchat")
-    (version "2.12.2")
+    (version "2.12.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://dl.hexchat.net/hexchat/hexchat-"
                                   version ".tar.xz"))
               (sha256
                (base32
-                "1xnclfbrgbkqndxygi5f27q00jd7yy54jbd1061jmhxa6wzpibbd"))))
+                "0ficrx56knz5y297qb0x5y02339yvyv734z7kpcx1ixvb0qr2dgs"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Delete dangling symlinks to a non-existent ‘/usr’.
+                  (with-directory-excursion "m4"
+                    (for-each (lambda (f) (delete-file f))
+                              '("intltool.m4" "libtool.m4" "lt~obsolete.m4"
+                                "ltoptions.m4" "ltsugar.m4" "ltversion.m4")))
+                  (delete-file-recursively "build-aux")
+                  (delete-file "po/Makefile.in.in")))))
     (build-system gnu-build-system)
-    (native-inputs `(("pkg-config" ,pkg-config)
-                     ("intltool" ,intltool)))
+    (native-inputs `(("autoconf" ,autoconf)
+                     ("autoconf-archive" ,autoconf-archive)
+                     ("automake" ,automake)
+                     ("intltool" ,intltool)
+                     ("libtool" ,libtool)
+                     ("pkg-config" ,pkg-config)))
     (inputs `(("dbus-glib" ,dbus-glib)
               ("dbus" ,dbus)
               ("enchant" ,enchant)
@@ -190,6 +204,17 @@ identi.ca and status.net).")
               ("luajit" ,luajit)
               ("perl-xml-parser" ,perl-xml-parser)
               ("python-2" ,python-2)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Release 2.12.4 wasn't properly bootstrapped.  Later ones might be!
+         (add-after 'unpack 'bootstrap
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; This file is still required for autoreconf.
+             (copy-file (string-append (assoc-ref inputs "intltool")
+                                       "/share/intltool/Makefile.in.in")
+                        "po/Makefile.in.in")
+             (zero? (system* "autoreconf" "-fiv")))))))
     (synopsis "Graphical IRC Client")
     (description
      "HexChat lets you connect to multiple IRC networks at once.  The main
@@ -1001,7 +1026,7 @@ for @uref{https://torproject.org,tor} router) and many more.")
     (synopsis "Perl implementation of PSYC protocol")
     (home-page "http://perlpsyc.psyc.eu/")
     (license (list license:gpl2
-                   (package-license perl)
+                   license:perl-license
                    ;; contrib/irssi-psyc.pl:
                    license:public-domain
                    ;; bin/psycplay states AGPL with no version:
index 68937a2..3de49dd 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
-;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Ian Denhardt <ian@zenhack.net>
 ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
 ;;;
@@ -41,7 +41,7 @@
 (define-public hwloc
   (package
     (name "hwloc")
-    (version "1.11.2")
+    (version "1.11.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.open-mpi.org/software/hwloc/v"
@@ -49,7 +49,7 @@
                                   "/downloads/hwloc-" version ".tar.bz2"))
               (sha256
                (base32
-                "1y7c3ysiin0rw0sj6dbxkvjg92j4by36rykvf0vmh91q2rmrn0lc"))))
+                "0acph1mf7588hfx8ds26ncr6nw5fd9x92adm11fwin7f93i10sdb"))))
     (build-system gnu-build-system)
     (inputs
      `(("libx11" ,libx11)
index adce8a8..3002d27 100644 (file)
@@ -582,6 +582,50 @@ for path in [path for path in sys.path if 'site-packages' in path]: site.addsite
 interface.  It is implemented as a frontend to @code{klick}.")
     (license license:gpl2+)))
 
+(define-public libgme
+  (package
+    (name "libgme")
+    (version "0.6.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://bitbucket.org/mpyne/game-music-emu/"
+                                  "downloads/game-music-emu-" version
+                                  ".tar.bz2"))
+              (sha256
+               (base32
+                "08fk7zddpn7v93d0fa7fcypx7hvgwx9b5psj9l6m8b87k2hbw4fw"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f)) ; no check target
+    (home-page "https://bitbucket.org/mpyne/game-music-emu")
+    (synopsis "Video game music file playback library")
+    (description
+     "Game-music-emu is a collection of video game music file emulators that
+support the following formats and systems:
+@table @code
+@item AY
+ZX Spectrum/Asmtrad CPC
+@item GBS
+Nintendo Game Boy
+@item GYM
+Sega Genesis/Mega Drive
+@item HES
+NEC TurboGrafx-16/PC Engine
+@item KSS
+MSX Home Computer/other Z80 systems (doesn't support FM sound)
+@item NSF/NSFE
+Nintendo NES/Famicom (with VRC 6, Namco 106, and FME-7 sound)
+@item SAP
+Atari systems using POKEY sound chip
+@item SPC
+Super Nintendo/Super Famicom
+@item VGM/VGZ
+Sega Master System/Mark III, Sega Genesis/Mega Drive, BBC Micro
+@end table")
+    (license (list license:lgpl2.1+
+                   ;; demo and player directories are under the Expat license
+                   license:expat))))
+
 (define-public lilypond
   (package
     (name "lilypond")
@@ -943,14 +987,14 @@ Editor.  It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
 (define-public jalv-select
   (package
     (name "jalv-select")
-    (version "0.7")
+    (version "0.8")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/brummer10/jalv_select/"
                                   "archive/V" version ".tar.gz"))
               (sha256
                (base32
-                "01y93l5c1f8za04a0y4b3v0nhsm1lhj6rny9xpdgd7jz6sl6w581"))))
+                "0zraagwr681b5s3qifxf399c7q93jz23c8sr42gmff9zqnvxc75q"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -961,7 +1005,7 @@ Editor.  It is compatible with Power Tab Editor 1.7 and Guitar Pro.")
          (add-after 'unpack 'ignore-PATH
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "jalv.select.cpp"
-               (("echo \\$PATH | tr ':' '\\\n' | xargs ls")
+               (("echo \\$PATH.*tr ':'.*xargs ls")
                 (string-append "ls -1 " (assoc-ref inputs "jalv") "/bin")))
              (substitute* "jalv.select.h"
                (("gtkmm.h") "gtkmm-2.4/gtkmm.h"))
@@ -983,7 +1027,7 @@ users to select LV2 plugins and run them with jalv.")
 (define-public synthv1
   (package
     (name "synthv1")
-    (version "0.8.1")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri
@@ -991,7 +1035,7 @@ users to select LV2 plugins and run them with jalv.")
                               "/synthv1-" version ".tar.gz"))
               (sha256
                (base32
-                "0rzkr8mgy28j5kg56qqrdm05ml2wlm651yk27c2mn5ql7v92gdx3"))))
+                "0lmblhk0728bxi7cixc2j9p6gisicy6alybga9vwmg453snrsybr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; There are no tests.
@@ -1014,7 +1058,7 @@ oscillators and stereo effects.")
 (define-public drumkv1
   (package
     (name "drumkv1")
-    (version "0.8.1")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri
@@ -1022,7 +1066,7 @@ oscillators and stereo effects.")
                               "/drumkv1-" version ".tar.gz"))
               (sha256
                (base32
-                "0l6kjb1q9vslwy56836a0c65mf8z8ycam5vzz3k4qvd8g74bs1zq"))))
+                "0lf9x99gmmk64xq73lcwpwqznh8s79qy2fjjjzzw6sbw99w8qyz4"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; There are no tests.
@@ -1048,7 +1092,7 @@ effects.")
 (define-public samplv1
   (package
     (name "samplv1")
-    (version "0.8.1")
+    (version "0.8.2")
     (source (origin
               (method url-fetch)
               (uri
@@ -1056,7 +1100,7 @@ effects.")
                               "/samplv1-" version ".tar.gz"))
               (sha256
                (base32
-                "15rp9d1jbb56idyrnn9cqi1i7a70z1a1qdyz7ryn0bla0ghjnich"))))
+                "11mxn3ff9g0x1rl4jl5rngmwlb8dmkbzsjhxb8gqhmlpfj24wl7l"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f ; There are no tests.
@@ -1866,7 +1910,7 @@ and hold, etc.")
 (define-public gxtuner
   (package
     (name "gxtuner")
-    (version "2.3")
+    (version "2.4")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/brummer10/gxtuner/"
@@ -1874,7 +1918,7 @@ and hold, etc.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1abpxiydn4c9wssz6895hnad9ipkcy3rkgzbnanvwb46nm44x6if"))))
+                "1hn5qjac7qd00v0sp7ijhhc3sb26ks9bni06nngivva21h61xrjr"))))
     (build-system gnu-build-system)
     (arguments
      `(#:make-flags
@@ -1886,7 +1930,7 @@ and hold, etc.")
        (modify-phases %standard-phases
          (delete 'configure))))
     (inputs
-     `(("gtk+" ,gtk+-2)
+     `(("gtk+" ,gtk+)
        ("jack" ,jack-1)
        ("fftwf" ,fftwf)
        ("cairo" ,cairo)
index 15cf7cf..f0344d7 100644 (file)
 (define-public nano
   (package
     (name "nano")
-    (version "2.8.1")
+    (version "2.8.2")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://gnu/nano/nano-"
-                          version ".tar.gz"))
+                          version ".tar.xz"))
       (sha256
        (base32
-        "042rbhhkiw6nvwklm8zmmdlhjr8gdhdp486hafwrn1pwnpd511m4"))))
+        "1q5rxkvsv974085xrd2k11ffazadabcb9cnpfra0shmj71xqlgh2"))))
     (build-system gnu-build-system)
     (inputs
      `(("gettext" ,gettext-minimal)
index a494679..44a79e7 100644 (file)
@@ -252,7 +252,7 @@ curses widgets, such as dialog boxes.")
     (description
      "@code{Curses} is the interface between Perl and the curses library
 of your system.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public stfl
   (package
index 3182443..9415222 100644 (file)
@@ -727,8 +727,7 @@ definitions and structure manipulators for Perl.")
         (base32
           "1v3nl2kaj4fs55n1617n53q8sa3mir06898vpy1rq98zjih24h4d"))
       (patches
-        (search-patches
-          "perl-net-dns-resolver-programmable-Fix-broken-interface.patch"))))
+       (search-patches "perl-net-dns-resolver-programmable-fix.patch"))))
   (build-system perl-build-system)
   (native-inputs
     `(("perl-module-build" ,perl-module-build)))
@@ -739,7 +738,7 @@ definitions and structure manipulators for Perl.")
     "Programmable DNS resolver class for offline emulation of DNS")
   (description "Net::DNS::Resolver::Programmable is a programmable DNS resolver for
 offline emulation of DNS.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-netaddr-ip
  (package
@@ -772,7 +771,7 @@ offline emulation of DNS.")
   (synopsis
     "Manages IPv4 and IPv6 addresses and subnets")
   (description "NetAddr::IP manages IPv4 and IPv6 addresses and subsets.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-net-patricia
  (package
@@ -846,7 +845,7 @@ offline emulation of DNS.")
     "Look up location and network information by IP Address in Perl")
   (description "The Perl module 'Geo::IP'.  It looks up location and network
 information by IP Address.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-io-socket-inet6
  (package
@@ -876,7 +875,7 @@ information by IP Address.")
     "Perl object interface for AF_INET/AF_INET6 domain sockets")
   (description "IO::Socket::INET6 is an interface for AF_INET/AF_INET6 domain
 sockets in Perl.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public proxychains-ng
   (package
@@ -1143,7 +1142,7 @@ networks.")
 (define-public speedtest-cli
   (package
     (name "speedtest-cli")
-    (version "1.0.5")
+    (version "1.0.6")
     (source
      (origin
        (method url-fetch)
@@ -1152,7 +1151,7 @@ networks.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0y1888492kl21dz69vd526189c5aal3q790jawdb2wph42cz0cq8"))))
+         "1alambi1ljng6j04k7pq58jqwd0wh1q9630f17nl34ljabji5lwy"))))
     (build-system python-build-system)
     (home-page "https://github.com/sivel/speedtest-cli")
     (synopsis "Internet bandwidth tester")
index f18fe6c..28751c4 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,7 +21,6 @@
   #:use-module (gnu packages)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages databases)
-  #:use-module (gnu packages gsasl)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages onc-rpc)
@@ -41,7 +41,7 @@
 (define-public nfs-utils
   (package
     (name "nfs-utils")
-    (version "1.3.4")
+    (version "2.1.1")
     (source (origin
              (method url-fetch)
              (uri (string-append
@@ -49,7 +49,7 @@
                    "/nfs-utils-" version ".tar.xz"))
              (sha256
               (base32
-               "0xarqhwy757vazv9gqhyrgxsrx083yhvkkih01jh83fqm305naml"))))
+               "1vqrqzhg9nh2wj1icp7k8v9dibgnn521b45np79nnkmqf16bbbhg"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
          ,(string-append "--with-start-statd="
                          (assoc-ref %outputs "out") "/sbin/start-statd")
          ,(string-append "--with-krb5=" (assoc-ref %build-inputs "mit-krb5")))
-       #:phases (modify-phases %standard-phases
-                  (add-before
-                      'configure 'adjust-command-file-names
-                    (lambda _
-                      ;; Remove assumptions of FHS from start-statd script
-                      (substitute* `("utils/statd/start-statd")
-                        (("^PATH=.*") "")
-                        (("^flock")
-                         (string-append
-                          (assoc-ref %build-inputs "util-linux")
-                          "/bin/flock"))
-                        (("^exec rpc.statd")
-                         (string-append "exec "
-                          (assoc-ref %outputs "out") "/sbin/rpc.statd")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'adjust-command-file-names
+           (lambda _
+             ;; Remove assumptions of FHS from start-statd script
+             (substitute* `("utils/statd/start-statd")
+               (("^PATH=.*") "")
+               (("^flock")
+                (string-append
+                 (assoc-ref %build-inputs "util-linux")
+                 "/bin/flock"))
+               (("^exec rpc.statd")
+                (string-append "exec "
+                 (assoc-ref %outputs "out") "/sbin/rpc.statd")))
 
-                      ;; This hook tries to write to /var
-                      ;; That needs to be done by a service too.
-                      (substitute* `("Makefile.in")
-                        (("^install-data-hook:")
-                         "install-data-hook-disabled-for-guix:"))
+             ;; This hook tries to write to /var
+             ;; That needs to be done by a service too.
+             (substitute* `("Makefile.in")
+               (("^install-data-hook:")
+                "install-data-hook-disabled-for-guix:"))
 
-                      ;; Replace some hard coded paths.
-                      (substitute* `("utils/nfsd/nfssvc.c")
-                        (("/bin/mount")
-                         (string-append
-                          (assoc-ref %build-inputs "util-linux")
-                          "/bin/mount")))
-                      (substitute* `("utils/statd/statd.c")
-                        (("/usr/sbin/")
-                         (string-append (assoc-ref %outputs "out") "/sbin/")))
-                      (substitute* `("utils/osd_login/Makefile.in"
-                                     "utils/mount/Makefile.in"
-                                     "utils/nfsdcltrack/Makefile.in")
-                        (("^sbindir = /sbin")
-                         (string-append "sbindir = "
-                                        (assoc-ref %outputs "out") "/sbin")))
-                      #t)))))
+             ;; Replace some hard coded paths.
+             (substitute* `("utils/nfsd/nfssvc.c")
+               (("/bin/mount")
+                (string-append
+                 (assoc-ref %build-inputs "util-linux")
+                 "/bin/mount")))
+             (substitute* `("utils/statd/statd.c")
+               (("/usr/sbin/")
+                (string-append (assoc-ref %outputs "out") "/sbin/")))
+             (substitute* `("utils/osd_login/Makefile.in"
+                            "utils/mount/Makefile.in"
+                            "utils/nfsdcltrack/Makefile.in")
+               (("^sbindir = /sbin")
+                (string-append "sbindir = "
+                               (assoc-ref %outputs "out") "/sbin")))
+             #t)))))
     (inputs `(("libevent" ,libevent)
               ("libnfsidmap" ,libnfsidmap)
               ("sqlite" ,sqlite)
               ("lvm2" ,lvm2)
-              ("gss" ,gss)
               ("util-linux" ,util-linux)
               ("mit-krb5" ,mit-krb5)
               ("libtirpc" ,libtirpc)))
index 0c21a74..b9f1d53 100644 (file)
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,7 +38,6 @@
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages libevent)
-  #:use-module (gnu packages lynx)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
@@ -50,6 +50,7 @@
   #:use-module (gnu packages time)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages web-browsers)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
   #:use-module (guix build-system gnu)
@@ -58,7 +59,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix svn-download)
-  #:use-module (guix utils))
+  #:use-module (guix utils)
+  #:use-module (srfi srfi-1))
 
 ;; A shortcut for files from ocaml forge. Downloaded files are computed from
 ;; their number, not their name.
@@ -212,6 +214,36 @@ functional, imperative and object-oriented styles of programming.")
     ;; distributed under lgpl2.0.
     (license (list license:qpl license:lgpl2.0))))
 
+(define-public ocaml-4.01
+  (package
+    (inherit ocaml)
+    (version "4.01.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://caml.inria.fr/pub/distrib/ocaml-"
+                    (version-major+minor version)
+                    "/ocaml-" version ".tar.xz"))
+              (sha256
+               (base32
+                "03d7ida94s1gpr3gadf4jyhmh5rrszd5s4m4z59daaib25rvfyv7"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments ocaml)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'build
+             (lambda _
+               ;; Specifying '-j' at all causes the build to fail.
+               (zero? (system* "make" "world.opt"))))
+           (replace 'check
+             (lambda _
+               (with-directory-excursion "testsuite"
+                 (zero? (system*
+                         "make"
+                         "all"
+                         (string-append
+                          "TOPDIR=" (getcwd) "/.."))))))))))))
+
 (define-public opam
   (package
     (name "opam")
@@ -807,6 +839,14 @@ compilation and linkage, there are new frontends of the various OCaml
 compilers that can directly deal with packages.")
     (license license:x11)))
 
+(define-public ocaml4.01-findlib
+  (package
+    (inherit ocaml-findlib)
+    (name "ocaml4.01-findlib")
+    (native-inputs
+     `(("m4" ,m4)
+       ("ocaml" ,ocaml-4.01)))))
+
 ;; note that some tests may hang for no obvious reason.
 (define-public ocaml-ounit
   (package
@@ -832,6 +872,9 @@ compilers that can directly deal with packages.")
 other XUnit testing frameworks.")
     (license license:expat)))
 
+(define-public ocaml4.01-ounit
+  (package-with-ocaml4.01 ocaml-ounit))
+
 (define-public camlzip
   (package
     (name "camlzip")
@@ -874,6 +917,24 @@ JAR format.  It provides functions for reading from and writing to compressed
 files in these formats.")
     (license license:lgpl2.1+)))
 
+(define-public ocaml4.01-camlzip
+  (let ((base (package-with-ocaml4.01 camlzip)))
+    (package
+      (inherit base)
+      (name "ocaml4.01-camlzip")
+      ;; Version 1.05 is the last version to support OCaml 4.01.0.
+      (version "1.05")
+      (source
+       (origin
+         (method url-fetch)
+         (uri
+          (string-append
+           "http://forge.ocamlcore.org/frs/download.php/1037/camlzip-"
+           version ".tar.gz"))
+         (sha256
+          (base32
+           "0syh72jk9s0qwjmmfrkqchaj98m020ii082jn38pwnmb6v3p02wk")))))))
+
 (define-public ocamlmod
   (package
     (name "ocamlmod")
@@ -1024,6 +1085,9 @@ qcheck library.  The possibilities range from trivial tests -- extremely simple
 to use -- to sophisticated random generation of test cases.")
     (license license:lgpl3+)))
 
+(define-public ocaml4.01-qtest
+  (package-with-ocaml4.01 ocaml-qtest))
+
 (define-public ocaml-stringext
   (package
     (name "ocaml-stringext")
@@ -1087,8 +1151,22 @@ a camlp4-based tool that allows to instrument your application before running
 tests.  After application execution, it is possible to generate a report in HTML
 format that is the replica of the application source code annotated with code
 coverage information.")
+    (properties `((ocaml4.01-variant . ,(delay ocaml4.01-bisect))))
     (license license:gpl3+)))
 
+(define-public ocaml4.01-bisect
+  (let ((base (package-with-ocaml4.01 (strip-ocaml4.01-variant ocaml-bisect))))
+    (package
+      (inherit base)
+      (arguments
+       `(#:ocaml ,ocaml-4.01
+         ;; Camlp4 is included with OCaml 4.01, so do not include it as a
+         ;; separate input.
+         ,@(strip-keyword-arguments '(#:make-flags) (package-arguments base))))
+      (native-inputs `(,@(alist-delete "camlp4" (package-native-inputs base))))
+      (propagated-inputs
+       `(,@(alist-delete "camlp4" (package-propagated-inputs base)))))))
+
 (define-public ocaml-bitstring
   (package
     (name "ocaml-bitstring")
@@ -1267,6 +1345,9 @@ coexistence with the old (version 2) SQLite and its OCaml wrapper
 @code{ocaml-sqlite}.")
     (license license:expat)))
 
+(define-public ocaml4.01-sqlite3
+  (package-with-ocaml4.01 ocaml-sqlite3))
+
 (define-public ocaml-csv
   (package
     (name "ocaml-csv")
@@ -1291,6 +1372,9 @@ read and write files in this format as well as some convenience functions to
 manipulate such data.")
     (license (package-license camlp4))))
 
+(define-public ocaml4.01-csv
+  (package-with-ocaml4.01 ocaml-csv))
+
 (define-public ocaml-mtime
   (package
     (name "ocaml-mtime")
@@ -1680,6 +1764,9 @@ format.  It can process XML documents without a complete in-memory
 representation of the data.")
     (license license:isc)))
 
+(define-public ocaml4.01-xmlm
+  (package-with-ocaml4.01 ocaml-xmlm))
+
 (define-public ocaml-ulex
   (package
     (name "ocaml-ulex")
@@ -1945,6 +2032,9 @@ every compliant installation of OCaml and organize these libraries into a
 hierarchy of modules.")
     (license license:lgpl2.1+)))
 
+(define-public ocaml4.01-batteries
+  (package-with-ocaml4.01 ocaml-batteries))
+
 (define-public ocaml-pcre
   (package
     (name "ocaml-pcre")
index ddae1a7..2b67ed1 100644 (file)
 (define-public ocrad
   (package
     (name "ocrad")
-    (version "0.25")
+    (version "0.26")
     (source (origin
              (method url-fetch)
              (uri (string-append "mirror://gnu/ocrad/ocrad-"
                                  version ".tar.lz"))
              (sha256
               (base32
-               "1m2dblgvvjs48rsglfdwq0ib9zk8h9n34xsh67ibrg0g0ffbw477"))))
+               "0g4fq7maybdnd1471kd05a3f5sb7spa3d26k706rk85sd5wd70y3"))))
     (build-system gnu-build-system)
     (native-inputs `(("lzip" ,lzip)))
     (home-page "https://www.gnu.org/software/ocrad/")
index 5f67823..a76ac36 100644 (file)
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -21,6 +22,7 @@
   #:use-module (guix licenses)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (gnu packages)
   #:use-module (gnu packages kerberos)
   #:use-module (gnu packages pkg-config)
   #:use-module (guix build-system gnu))
 (define-public libtirpc
   (package
     (name "libtirpc")
-    (version "0.2.4")
+    (version "1.0.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/libtirpc/libtirpc/"
                                   version "/libtirpc-"
                                   version ".tar.bz2"))
+              (patches (search-patches "libtirpc-CVE-2017-8779.patch"))
               (sha256
                (base32
-                "18a337wa4amf0k21wnimp3yzs5l3cxqndz4x3x8bm993zhfy5hs5"))))
+                "17mqrdgsgp9m92pmq7bvr119svdg753prqqxmg4cnz5y657rfmji"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
@@ -66,16 +69,17 @@ IPv4 and IPv6.  ONC RPC is notably used by the network file system (NFS).")
 (define-public rpcbind
   (package
     (name "rpcbind")
-    (version "0.2.3")
+    (version "0.2.4")
     (source
      (origin
       (method url-fetch)
       (uri (string-append "mirror://sourceforge/" name "/" name "/"
                           version "/"
                           name "-" version ".tar.bz2"))
+      (patches (search-patches "rpcbind-CVE-2017-8779.patch"))
       (sha256
        (base32
-        "0yyjzv4161rqxrgjcijkrawnk55rb96ha0pav48s03l2klx855wq"))))
+        "0rjc867mdacag4yqvs827wqhkh27135rp9asj06ixhf71m9rljh7"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
index a931a0e..8ebf6b0 100644 (file)
                         arch "-linux"
                         "/20131110/guile-2.0.9.tar.xz"))))
 
-(define-public guix-0.12.0
-  (package
-    (name "guix")
-    (version "0.12.0")
-    (source (origin
-             (method url-fetch)
-             (uri (string-append "ftp://alpha.gnu.org/gnu/guix/guix-"
-                                 version ".tar.gz"))
-             (sha256
-              (base32
-               "1jgy5mlygmhxdqhrp6vr8w83ndcm5mk64xfravr8l2d7hq8y40b2"))))
-    (build-system gnu-build-system)
-    (arguments
-     `(#:configure-flags (list
-                          "--localstatedir=/var"
-                          "--sysconfdir=/etc"
-                          (string-append "--with-bash-completion-dir="
-                                         (assoc-ref %outputs "out")
-                                         "/etc/bash_completion.d")
-                          (string-append "--with-libgcrypt-prefix="
-                                         (assoc-ref %build-inputs
-                                                    "libgcrypt")))
-       #:parallel-tests? #f           ;work around <http://bugs.gnu.org/21097>
+(define-public guix
+  ;; Latest version of Guix, which may or may not correspond to a release.
+  ;; Note: the 'update-guix-package.scm' script expects this definition to
+  ;; start precisely like this.
+  (let ((version "0.12.0")
+        (commit "ba2260dbbc5a3c915e2cbd54d93f2f3af2a864c3")
+        (revision 10))
+    (package
+      (name "guix")
 
-       #:modules ((guix build gnu-build-system)
-                  (guix build utils)
-                  (ice-9 popen)
-                  (ice-9 rdelim))
+      (version (if (zero? revision)
+                   version
+                   (string-append version "-"
+                                  (number->string revision)
+                                  "." (string-take commit 7))))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://git.savannah.gnu.org/r/guix.git")
+                      (commit commit)))
+                (sha256
+                 (base32
+                  "0nkwbblsnl7kv2n8jf8c6rl3a7dynaqxizhhni18vbnmvza35c79"))
+                (file-name (string-append "guix-" version "-checkout"))))
+      (build-system gnu-build-system)
+      (arguments
+       `(#:configure-flags (list
+                            "--localstatedir=/var"
+                            "--sysconfdir=/etc"
+                            (string-append "--with-bash-completion-dir="
+                                           (assoc-ref %outputs "out")
+                                           "/etc/bash_completion.d")
+                            (string-append "--with-libgcrypt-prefix="
+                                           (assoc-ref %build-inputs
+                                                      "libgcrypt"))
 
-       #:phases (modify-phases %standard-phases
-                  (add-before
-                   'configure 'copy-bootstrap-guile
-                   (lambda* (#:key system inputs #:allow-other-keys)
-                     (define (boot-guile-version arch)
-                       (cond ((string=? "armhf" arch)   "2.0.11")
-                             ((string=? "aarch64" arch) "2.0.14")
-                             (else "2.0.9")))
+                            ;; Set 'DOT_USER_PROGRAM' to the empty string so
+                            ;; we don't keep a reference to Graphviz, whose
+                            ;; closure is pretty big (too big for the GuixSD
+                            ;; installation image.)
+                            "ac_cv_path_DOT_USER_PROGRAM=dot"
 
-                     (define (copy arch)
-                       (let ((guile  (assoc-ref inputs
-                                                (string-append "boot-guile/"
-                                                               arch)))
-                             (target (string-append "gnu/packages/bootstrap/"
-                                                    arch "-linux/"
-                                                    "/guile-"
-                                                    (boot-guile-version arch)
-                                                    ".tar.xz")))
-                         (mkdir-p (dirname target)) ;XXX: eventually unneeded
-                         (copy-file guile target)))
+                            ;; To avoid problems with the length of shebangs,
+                            ;; choose a fixed-width and short directory name
+                            ;; for tests.
+                            "ac_cv_guix_test_root=/tmp/guix-tests")
+         #:parallel-tests? #f         ;work around <http://bugs.gnu.org/21097>
 
-                     (copy "i686")
-                     (copy "x86_64")
-                     (copy "mips64el")
-                     (copy "armhf")
-                     (copy "aarch64")
-                     #t))
-                  (add-after
-                   'unpack 'disable-container-tests
-                   ;; XXX FIXME: These tests fail within the build container.
-                   (lambda _
-                     (substitute* "tests/syscalls.scm"
-                       (("^\\(test-(assert|equal) \"(clone|setns|pivot-root)\"" all)
-                        (string-append "(test-skip 1)\n" all)))
-                     (substitute* "tests/containers.scm"
-                       (("^\\(test-(assert|equal)" all)
-                        (string-append "(test-skip 1)\n" all)))
-                     (when (file-exists? "tests/guix-environment-container.sh")
-                       (substitute* "tests/guix-environment-container.sh"
-                         (("guix environment --version")
-                          "exit 77\n")))
-                     #t))
-                  (add-before 'check 'set-SHELL
-                    (lambda _
-                      ;; 'guix environment' tests rely on 'SHELL' having a
-                      ;; correct value, so set it.
-                      (setenv "SHELL" (which "sh"))
-                      #t))
-                  (add-after 'install 'wrap-program
-                   (lambda* (#:key inputs outputs #:allow-other-keys)
-                     ;; Make sure the 'guix' command finds GnuTLS and
-                     ;; Guile-JSON automatically.
-                     (let* ((out    (assoc-ref outputs "out"))
-                            (guile  (assoc-ref inputs "guile"))
-                            (json   (assoc-ref inputs "guile-json"))
-                            (ssh    (assoc-ref inputs "guile-ssh"))
-                            (gnutls (assoc-ref inputs "gnutls"))
-                            (effective
-                             (read-line
-                              (open-pipe* OPEN_READ
-                                          (string-append guile "/bin/guile")
-                                          "-c" "(display (effective-version))")))
-                            (path   (string-append
-                                     json "/share/guile/site/" effective ":"
-                                     ssh "/share/guile/site/" effective ":"
-                                     gnutls "/share/guile/site/" effective)))
+         #:modules ((guix build gnu-build-system)
+                    (guix build utils)
+                    (ice-9 popen)
+                    (ice-9 rdelim))
 
-                       (wrap-program (string-append out "/bin/guix")
-                         `("GUILE_LOAD_PATH" ":" prefix (,path))
-                         `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,path)))
+         #:phases (modify-phases %standard-phases
+                    (add-after 'unpack 'bootstrap
+                      (lambda _
+                        ;; Make sure 'msgmerge' can modify the PO files.
+                        (for-each (lambda (po)
+                                    (chmod po #o666))
+                                  (find-files "." "\\.po$"))
 
-                       #t))))))
-    (native-inputs `(("pkg-config" ,pkg-config)
+                        (zero? (system* "sh" "bootstrap"))))
+                    (add-before
+                        'configure 'copy-bootstrap-guile
+                      (lambda* (#:key system inputs #:allow-other-keys)
+                        (define (boot-guile-version arch)
+                          (cond ((string=? "armhf" arch)   "2.0.11")
+                                ((string=? "aarch64" arch) "2.0.14")
+                                (else "2.0.9")))
 
-                     ;; XXX: Keep the development inputs here even though
-                     ;; they're unnecessary, just so that 'guix environment
-                     ;; guix' always contains them.
-                     ("autoconf" ,(autoconf-wrapper))
-                     ("automake" ,automake)
-                     ("gettext" ,gettext-minimal)
-                     ("texinfo" ,texinfo)
-                     ("graphviz" ,graphviz)
-                     ("help2man" ,help2man)))
-    (inputs
-     (let ((boot-guile (lambda (arch hash)
-                         (origin
-                          (method url-fetch)
-                          (uri (boot-guile-uri arch))
-                          (sha256 hash)))))
-       `(("bzip2" ,bzip2)
-         ("gzip" ,gzip)
-         ("zlib" ,zlib)                           ;for 'guix publish'
+                        (define (copy arch)
+                          (let ((guile  (assoc-ref inputs
+                                                   (string-append "boot-guile/"
+                                                                  arch)))
+                                (target (string-append "gnu/packages/bootstrap/"
+                                                       arch "-linux/"
+                                                       "/guile-"
+                                                       (boot-guile-version arch)
+                                                       ".tar.xz")))
+                            (mkdir-p (dirname target)) ;XXX: eventually unneeded
+                            (copy-file guile target)))
 
-         ("sqlite" ,sqlite)
-         ("libgcrypt" ,libgcrypt)
-         ("guile" ,guile-2.0)
+                        (copy "i686")
+                        (copy "x86_64")
+                        (copy "mips64el")
+                        (copy "armhf")
+                        (copy "aarch64")
+                        #t))
+                    (add-after
+                        'unpack 'disable-container-tests
+                      ;; XXX FIXME: These tests fail within the build container.
+                      (lambda _
+                        (substitute* "tests/syscalls.scm"
+                          (("^\\(test-(assert|equal) \"(clone|setns|pivot-root)\"" all)
+                           (string-append "(test-skip 1)\n" all)))
+                        (substitute* "tests/containers.scm"
+                          (("^\\(test-(assert|equal)" all)
+                           (string-append "(test-skip 1)\n" all)))
+                        (when (file-exists? "tests/guix-environment-container.sh")
+                          (substitute* "tests/guix-environment-container.sh"
+                            (("guix environment --version")
+                             "exit 77\n")))
+                        #t))
+                    (add-before 'check 'set-SHELL
+                      (lambda _
+                        ;; 'guix environment' tests rely on 'SHELL' having a
+                        ;; correct value, so set it.
+                        (setenv "SHELL" (which "sh"))
+                        #t))
+                    (add-after 'install 'wrap-program
+                      (lambda* (#:key inputs outputs #:allow-other-keys)
+                        ;; Make sure the 'guix' command finds GnuTLS and
+                        ;; Guile-JSON automatically.
+                        (let* ((out    (assoc-ref outputs "out"))
+                               (guile  (assoc-ref inputs "guile"))
+                               (json   (assoc-ref inputs "guile-json"))
+                               (ssh    (assoc-ref inputs "guile-ssh"))
+                               (gnutls (assoc-ref inputs "gnutls"))
+                               (effective
+                                (read-line
+                                 (open-pipe* OPEN_READ
+                                             (string-append guile "/bin/guile")
+                                             "-c" "(display (effective-version))")))
+                               (path   (string-append
+                                        json "/share/guile/site/" effective ":"
+                                        ssh "/share/guile/site/" effective ":"
+                                        gnutls "/share/guile/site/" effective)))
 
-         ("boot-guile/i686"
-          ,(boot-guile "i686"
-                       (base32
-                        "0im800m30abgh7msh331pcbjvb4n02smz5cfzf1srv0kpx3csmxp")))
-         ("boot-guile/x86_64"
-          ,(boot-guile "x86_64"
-                       (base32
-                        "1w2p5zyrglzzniqgvyn1b55vprfzhgk8vzbzkkbdgl5248si0yq3")))
-         ("boot-guile/mips64el"
-          ,(boot-guile "mips64el"
-                       (base32
-                        "0fzp93lvi0hn54acc0fpvhc7bvl0yc853k62l958cihk03q80ilr")))
-         ("boot-guile/armhf"
-          ,(boot-guile "armhf"
-                       (base32
-                        "1mi3brl7l58aww34rawhvja84xc7l1b4hmwdmc36fp9q9mfx0lg5")))
-         ("boot-guile/aarch64"
-          ,(boot-guile "aarch64"
-                       (base32
-                        "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))))))
-    (propagated-inputs
-     `(("gnutls" ,gnutls)                         ;for 'guix download' & co.
-       ("guile-json" ,guile-json)
-       ("guile-ssh" ,guile-ssh)))
+                          (wrap-program (string-append out "/bin/guix")
+                            `("GUILE_LOAD_PATH" ":" prefix (,path))
+                            `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,path)))
 
-    (home-page "https://www.gnu.org/software/guix/")
-    (synopsis "Functional package manager for installed software packages and versions")
-    (description
-     "GNU Guix is a functional package manager for the GNU system, and is
+                          #t))))))
+      (native-inputs `(("pkg-config" ,pkg-config)
+
+                       ;; XXX: Keep the development inputs here even though
+                       ;; they're unnecessary, just so that 'guix environment
+                       ;; guix' always contains them.
+                       ("autoconf" ,(autoconf-wrapper))
+                       ("automake" ,automake)
+                       ("gettext" ,gettext-minimal)
+                       ("texinfo" ,texinfo)
+                       ("graphviz" ,graphviz)
+                       ("help2man" ,help2man)))
+      (inputs
+       (let ((boot-guile (lambda (arch hash)
+                           (origin
+                             (method url-fetch)
+                             (uri (boot-guile-uri arch))
+                             (sha256 hash)))))
+         `(("bzip2" ,bzip2)
+           ("gzip" ,gzip)
+           ("zlib" ,zlib)                         ;for 'guix publish'
+
+           ("sqlite" ,sqlite)
+           ("libgcrypt" ,libgcrypt)
+           ("guile" ,guile-2.2)
+
+           ("boot-guile/i686"
+            ,(boot-guile "i686"
+                         (base32
+                          "0im800m30abgh7msh331pcbjvb4n02smz5cfzf1srv0kpx3csmxp")))
+           ("boot-guile/x86_64"
+            ,(boot-guile "x86_64"
+                         (base32
+                          "1w2p5zyrglzzniqgvyn1b55vprfzhgk8vzbzkkbdgl5248si0yq3")))
+           ("boot-guile/mips64el"
+            ,(boot-guile "mips64el"
+                         (base32
+                          "0fzp93lvi0hn54acc0fpvhc7bvl0yc853k62l958cihk03q80ilr")))
+           ("boot-guile/armhf"
+            ,(boot-guile "armhf"
+                         (base32
+                          "1mi3brl7l58aww34rawhvja84xc7l1b4hmwdmc36fp9q9mfx0lg5")))
+           ("boot-guile/aarch64"
+            ,(boot-guile "aarch64"
+                         (base32
+                          "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))))))
+      (propagated-inputs
+       `(("gnutls" ,gnutls/guile-2.2)             ;for 'guix download' & co.
+         ("guile-json" ,guile-json)
+         ("guile-ssh" ,guile-ssh)))
+
+      (home-page "https://www.gnu.org/software/guix/")
+      (synopsis "Functional package manager for installed software packages and versions")
+      (description
+       "GNU Guix is a functional package manager for the GNU system, and is
 also a distribution thereof.  It includes a virtual machine image.  Besides
 the usual package management features, it also supports transactional
 upgrades and roll-backs, per-user profiles, and much more.  It is based on
 the Nix package manager.")
-    (license gpl3+)
-    (properties '((ftp-server . "alpha.gnu.org")))))
-
-(define guix-devel
-  ;; Development version of Guix.
-  ;;
-  ;; Note: use a very short commit id; with a longer one, the limit on
-  ;; hash-bang lines would be exceeded while running the tests.
-  (let ((commit "25a49294caf2386e65fc1b12a2508324be0b1cc2"))
-    (package (inherit guix-0.12.0)
-      (version (string-append "0.12.0-9." (string-take commit 4)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      ;; "git://git.sv.gnu.org/guix.git" temporarily
-                      ;; unavailable (XXX).
-                      (url "http://git.savannah.gnu.org/r/guix.git")
-                      (commit commit)))
-                (sha256
-                 (base32
-                  "0p4rh0629j89v4ka5dsp70a1xrfhg7sxjjq54p68vw7x5dkann4a"))
-                (file-name (string-append "guix-" version "-checkout"))))
-      (arguments
-       (substitute-keyword-arguments (package-arguments guix-0.12.0)
-         ((#:configure-flags flags)
-          ;; Set 'DOT_USER_PROGRAM' to the empty string so we don't keep a
-          ;; reference to Graphviz, whose closure is pretty big (too big for
-          ;; the GuixSD installation image.)
-          `(cons "ac_cv_path_DOT_USER_PROGRAM=dot" ,flags))
-         ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after
-              'unpack 'bootstrap
-              (lambda _
-                ;; Make sure 'msgmerge' can modify the PO files.
-                (for-each (lambda (po)
-                            (chmod po #o666))
-                          (find-files "." "\\.po$"))
-
-                (zero? (system* "sh" "bootstrap")))))))))))
+      (license gpl3+)
+      (properties '((ftp-server . "alpha.gnu.org"))))))
 
-(define-public guix guix-devel)
+;; Alias for backward compatibility.
+(define-public guix-devel guix)
 
 (define (source-file? file stat)
   "Return true if FILE is likely a source file, false if it is a typical
@@ -310,14 +305,14 @@ out) and returning a package that uses that as its 'source'."
 (define-public nix
   (package
     (name "nix")
-    (version "1.11.6")
+    (version "1.11.9")
     (source (origin
              (method url-fetch)
              (uri (string-append "http://nixos.org/releases/nix/nix-"
                                  version "/nix-" version ".tar.xz"))
              (sha256
               (base32
-               "18xjg7cfvqzhsmvir6xmw95jxvl2w7icphbbll462xbnj9ddaag7"))))
+               "1qg7qrfr60dysmyfg3ijgani71l23p1kqadhjs8kz11pgwkkx50f"))))
     (build-system gnu-build-system)
     ;; XXX: Should we pass '--with-store-dir=/gnu/store'?  But then we'd also
     ;; need '--localstatedir=/var'.  But then!  The thing would use /var/nix
index 0c40fe9..66b67ea 100644 (file)
@@ -45,7 +45,7 @@
 (define-public parallel
   (package
     (name "parallel")
-    (version "20170322")
+    (version "20170422")
     (source
      (origin
       (method url-fetch)
@@ -53,7 +53,7 @@
                           version ".tar.bz2"))
       (sha256
        (base32
-        "1xjk6np0gwa6p5j26camwybx1n0vqz0f0bksi593rgw800211y7q"))))
+        "0afk1q8mqzz02h6imyykgi9gwk5gj08hzs6lwgd65ilj4slkh93s"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
index 9daacd8..f6af6a6 100644 (file)
@@ -197,8 +197,9 @@ passwords that could be guessed by crack by filtering them out, at source.")
     (source (origin
               (method url-fetch)
               (uri (list
-                    (string-append "https://fedorahosted.org/releases/l/i/"
-                                   name "/" name "-" version ".tar.bz2")
+                    (string-append "https://github.com/" name "/" name
+                                   "/releases/download/" name  "-" version
+                                   "/" name "-" version ".tar.bz2")
                     (string-append "https://launchpad.net/libpwquality/trunk/"
                                    version "/+download/"
                                    name "-" version ".tar.bz2")))
@@ -212,7 +213,7 @@ passwords that could be guessed by crack by filtering them out, at source.")
     (inputs
      `(("cracklib" ,cracklib)))
     (synopsis "Password quality checker")
-    (home-page "https://fedorahosted.org/libpwquality/")
+    (home-page "https://github.com/libpwquality/libpwquality")
     (description
      "Libpwquality is a library for password quality checking and generation of
 random passwords that pass the checks.")
diff --git a/gnu/packages/patches/abiword-black-drawing-with-gtk322.patch b/gnu/packages/patches/abiword-black-drawing-with-gtk322.patch
new file mode 100644 (file)
index 0000000..88a5ca4
--- /dev/null
@@ -0,0 +1,49 @@
+commit 2ee38d1881aeea27bb49acc450631d813d1f28ba
+Author: Hubert Figuière <hub@figuiere.net>
+Date:   Wed Dec 7 09:44:01 2016 -0500
+
+    Bug 13815 - draw event should return TRUE
+    
+    This fix the black drawing regression witj Gtk3.22
+
+diff --git a/src/af/xap/gtk/xap_UnixFrameImpl.cpp b/src/af/xap/gtk/xap_UnixFrameImpl.cpp
+index 780000e..10f8e00 100644
+--- a/src/af/xap/gtk/xap_UnixFrameImpl.cpp
++++ b/src/af/xap/gtk/xap_UnixFrameImpl.cpp
+@@ -1208,9 +1208,9 @@ gint XAP_UnixFrameImpl::_fe::delete_event(GtkWidget * w, GdkEvent * /*event*/, g
+ }
+ #if GTK_CHECK_VERSION(3,0,0)
+-gint XAP_UnixFrameImpl::_fe::draw(GtkWidget * w, cairo_t * cr)
++gboolean XAP_UnixFrameImpl::_fe::draw(GtkWidget * w, cairo_t * cr)
+ #else
+-gint XAP_UnixFrameImpl::_fe::expose(GtkWidget * w, GdkEventExpose* pExposeEvent)
++gboolean XAP_UnixFrameImpl::_fe::expose(GtkWidget * w, GdkEventExpose* pExposeEvent)
+ #endif
+ {
+       XAP_UnixFrameImpl * pUnixFrameImpl = static_cast<XAP_UnixFrameImpl *>(g_object_get_data(G_OBJECT(w), "user_data"));
+@@ -1243,7 +1243,7 @@ gint XAP_UnixFrameImpl::_fe::expose(GtkWidget * w, GdkEventExpose* pExposeEvent)
+               pView->draw(&rClip);
+ #endif
+       }
+-      return FALSE;
++      return TRUE;
+ }
+ static bool bScrollWait = false;
+diff --git a/src/af/xap/gtk/xap_UnixFrameImpl.h b/src/af/xap/gtk/xap_UnixFrameImpl.h
+index 30ee5d8..a0ff57f 100644
+--- a/src/af/xap/gtk/xap_UnixFrameImpl.h
++++ b/src/af/xap/gtk/xap_UnixFrameImpl.h
+@@ -152,9 +152,9 @@ protected:
+                       static gint key_release_event(GtkWidget* w, GdkEventKey* e);
+                       static gint delete_event(GtkWidget * w, GdkEvent * /*event*/, gpointer /*data*/);
+ #if GTK_CHECK_VERSION(3,0,0)
+-                      static gint draw(GtkWidget * w, cairo_t * cr);
++                      static gboolean draw(GtkWidget * w, cairo_t * cr);
+ #else
+-                      static gint expose(GtkWidget * w, GdkEventExpose* pExposeEvent);
++                      static gboolean expose(GtkWidget * w, GdkEventExpose* pExposeEvent);
+ #endif
+                       static gint do_ZoomUpdate( gpointer /* xap_UnixFrame * */ p);
+                       static void vScrollChanged(GtkAdjustment * w, gpointer /*data*/);
index 7927a18..97ae665 100644 (file)
@@ -2,18 +2,18 @@ As of JPEG-9, the type 'boolean' is an enumeration, but since glib defines
 TRUE and FALSE as numeric constants and this is C++, they need to be explicitly
 casted.
 
---- a/src/af/util/xp/ut_jpeg.cpp       2009-07-08 19:33:53.000000000 +0200
-+++ b/src/af/util/xp/ut_jpeg.cpp       2014-09-06 19:55:55.876997404 +0200
-@@ -102,7 +102,7 @@
+--- a/src/af/util/xp/ut_jpeg.cpp
++++ b/src/af/util/xp/ut_jpeg.cpp
+@@ -102,7 +102,7 @@ static boolean _jpegFillInputBuffer (j_decompress_ptr cinfo)
        src->pub.next_input_byte = src->sourceBuf->getPointer (src->pos);
        src->pub.bytes_in_buffer = src->sourceBuf->getLength ();
-       
--      return TRUE;
+-      return 1; // boolean is a libjpeg type that is an int.
 +      return (boolean)TRUE;
  }
  
  /*
-@@ -161,7 +161,7 @@
+@@ -161,7 +161,7 @@ bool UT_JPEG_getDimensions(const UT_ByteBuf* pBB, UT_sint32& iImageWidth,
        /* set the data source */
        _JPEG_ByteBufSrc (&cinfo, pBB);
  
@@ -22,7 +22,7 @@ casted.
        jpeg_start_decompress(&cinfo);
      iImageWidth = cinfo.output_width;
      iImageHeight = cinfo.output_height;
-@@ -189,7 +189,7 @@
+@@ -189,7 +189,7 @@ bool UT_JPEG_getRGBData(const UT_ByteBuf* pBB, UT_Byte* pDest, UT_sint32 iDestRo
        /* set the data source */
        _JPEG_ByteBufSrc (&cinfo, pBB);
  
diff --git a/gnu/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch b/gnu/packages/patches/cdrtools-3.01-mkisofs-isoinfo.patch
new file mode 100644 (file)
index 0000000..9c817d4
--- /dev/null
@@ -0,0 +1,514 @@
+Patch for version 3.01, taken from upstream at
+https://sourceforge.net/projects/cdrtools/files/cdrtools-3.01-fix-20151126-mkisofs-isoinfo.patch
+
+--- cdrtools-3.01.orig/mkisofs/diag/isoinfo.c  2015-07-22 20:36:45.000000000 +0000
++++ cdrtools-3.01/mkisofs/diag/isoinfo.c       2015-11-17 19:35:40.000000000 +0000
+@@ -1,8 +1,8 @@
+-/* @(#)isoinfo.c      1.95 15/07/22 joerg */
++/* @(#)isoinfo.c      1.100 15/11/17 joerg */
+ #include <schily/mconfig.h>
+ #ifndef       lint
+ static        UConst char sccsid[] =
+-      "@(#)isoinfo.c  1.95 15/07/22 joerg";
++      "@(#)isoinfo.c  1.100 15/11/17 joerg";
+ #endif
+ /*
+  * File isodump.c - dump iso9660 directory information.
+@@ -148,8 +148,10 @@ LOCAL char        er_id[256];
+ LOCAL int     su_version = 0;
+ LOCAL int     rr_version = 0;
+ LOCAL int     aa_version = 0;
++LOCAL int     cl_extent = 0;
+ LOCAL int     ucs_level = 0;
+ LOCAL BOOL    iso9660_inodes = FALSE;
++LOCAL uid_t   myuid;
+ #ifdef        USE_FIND
+ LOCAL findn_t *find_node;             /* syntaxtree from find_parse() */
+@@ -208,6 +210,9 @@ LOCAL      void    extract         __PR((char *rootname
+ LOCAL void    extract_file    __PR((int f,
+                                       struct iso_directory_record * idr,
+                                       char *fname));
++LOCAL void    parse_cl_dir    __PR((struct iso_directory_record *idr,
++                                      int extent));
++LOCAL BOOL    parse_de        __PR((struct iso_directory_record *idr));
+ LOCAL void    parse_dir       __PR((char * rootname, int extent, int len));
+ LOCAL void    usage           __PR((int excode));
+ EXPORT        int     main            __PR((int argc, char *argv[]));
+@@ -459,7 +464,6 @@ parse_rr(pnt, len, cont_flag)
+       int slen;
+       int xlen;
+       int ncount;
+-      int cl_extent;
+       int pl_extent;
+       int cont_extent, cont_offset, cont_size;
+       int flag1, flag2;
+@@ -469,7 +473,7 @@ parse_rr(pnt, len, cont_flag)
+       symlinkname[0] = 0;
+-      cont_extent = cont_offset = cont_size = 0;
++      cl_extent = cont_extent = cont_offset = cont_size = 0;
+       ncount = 0;
+       flag1 = -1;
+@@ -714,6 +718,7 @@ struct todo
+ };
+ LOCAL struct todo     *todo_idr = NULL;
++LOCAL struct todo     **todo_pp = &todo_idr;
+ LOCAL char            *months[12] = {"Jan", "Feb", "Mar", "Apr",
+                               "May", "Jun", "Jul",
+@@ -962,8 +967,14 @@ static    BOOL            isfirst = TRUE;
+       close(f);
+       return;
+ setmode:
+-      fchmodat(AT_FDCWD, fname, fstat_buf.st_mode, AT_SYMLINK_NOFOLLOW);
+       fchownat(AT_FDCWD, fname, fstat_buf.st_uid, fstat_buf.st_gid, AT_SYMLINK_NOFOLLOW);
++      if (myuid != 0 && S_ISDIR(fstat_buf.st_mode)) {
++              /*
++               * Temporary hack until we have a dirstack like star.
++               */
++              fstat_buf.st_mode |= S_IWUSR;
++      }
++      fchmodat(AT_FDCWD, fname, fstat_buf.st_mode, AT_SYMLINK_NOFOLLOW);
+       times[0].tv_sec = fstat_buf.st_atime;
+       times[0].tv_nsec = stat_ansecs(&fstat_buf);
+       times[1].tv_sec = fstat_buf.st_mtime;
+@@ -1001,6 +1012,143 @@ extract_file(f, idr, fname)
+       }
+ }
++
++LOCAL void
++parse_cl_dir(idr, extent)
++      struct iso_directory_record     *idr;
++      int                             extent;
++{
++      char                            cl_name_buf[256*3];
++
++      strlcpy(cl_name_buf, name_buf, sizeof (cl_name_buf));
++#ifdef        USE_SCG
++      readsecs(extent - sector_offset, idr, 1);
++#else
++      lseek(fileno(infile), ((off_t)(extent - sector_offset)) << 11, SEEK_SET);
++      read(fileno(infile), idr, 2048);
++#endif
++
++      if (parse_de(idr) && use_rock)
++              dump_rr(idr);
++      strlcpy(name_buf, cl_name_buf, sizeof (name_buf));
++}
++
++LOCAL BOOL
++parse_de(idr)
++      struct iso_directory_record     *idr;
++{
++      unsigned char   uc;
++
++      if (idr->length[0] == 0)
++              return (FALSE);
++      memset(&fstat_buf, 0, sizeof (fstat_buf));
++      found_rr = 0;
++      name_buf[0] = xname[0] = 0;
++      fstat_buf.st_size = (off_t)(unsigned)isonum_733((unsigned char *)idr->size);
++      if (idr->flags[0] & 2)
++              fstat_buf.st_mode |= S_IFDIR;
++      else
++              fstat_buf.st_mode |= S_IFREG;
++      if (idr->name_len[0] == 1 && idr->name[0] == 0)
++              strcpy(name_buf, ".");
++      else if (idr->name_len[0] == 1 && idr->name[0] == 1)
++              strcpy(name_buf, "..");
++      else {
++              switch (ucs_level) {
++              case 3:
++              case 2:
++              case 1:
++                      /*
++                       * Unicode name.  Convert as best we can.
++                       */
++                      {
++                      int     j;
++                              name_buf[0] = '\0';
++#ifdef        USE_ICONV
++                      if (use_iconv(unls)) {
++                              int     u;
++                              char    *to = name_buf;
++
++                              for (j = 0, u = 0; j < (int)idr->name_len[0] / 2; j++) {
++                                      char    *ibuf = (char *)&idr->name[j*2];
++                                      size_t  isize = 2;              /* UCS-2 character size */
++                                      size_t  osize = 4;
++
++                                      if (iconv(unls->sic_uni2cd, (__IC_CONST char **)&ibuf, &isize,
++                                                      (char **)&to, &osize) == -1) {
++                                              int     err = geterrno();
++
++                                              if ((err == EINVAL || err == EILSEQ) &&
++                                                  osize == 4) {
++                                                      *to = '_';
++                                                      u += 1;
++                                                      to++;
++                                              }
++                                      } else {
++                                              u += 4 - osize;
++                                              to = &name_buf[u];
++                                      }
++                              }
++                              j = u;
++                      } else
++#endif
++                      for (j = 0; j < (int)idr->name_len[0] / 2; j++) {
++                              UInt16_t        unichar;
++
++                              unichar = (idr->name[j*2] & 0xFF) * 256 +
++                                          (idr->name[j*2+1] & 0xFF);
++
++                              /*
++                               * Get the backconverted char
++                               */
++                              if (unls)
++                                      uc = sic_uni2c(unls, unichar);
++                              else
++                                      uc = unichar > 255 ? '_' : unichar;
++
++                              name_buf[j] = uc ? uc : '_';
++                      }
++                      name_buf[j] = '\0';
++                      }
++                      break;
++              case 0:
++                      /*
++                       * Normal non-Unicode name.
++                       */
++                      strncpy(name_buf, idr->name, idr->name_len[0]);
++                      name_buf[idr->name_len[0]] = 0;
++                      break;
++              default:
++                      /*
++                       * Don't know how to do these yet.  Maybe they are the same
++                       * as one of the above.
++                       */
++                      exit(1);
++              }
++      }
++      memcpy(date_buf, idr->date, 9);
++      /*
++       * Always first set up time stamps and file modes from
++       * ISO-9660. This is used as a fallback in case that
++       * there is no related Rock Ridge based data.
++       */
++      fstat_buf.st_atime =
++      fstat_buf.st_mtime =
++      fstat_buf.st_ctime = iso9660_time(date_buf, NULL, FALSE);
++      fstat_buf.st_mode |= S_IRUSR|S_IXUSR |
++                  S_IRGRP|S_IXGRP |
++                  S_IROTH|S_IXOTH;
++      fstat_buf.st_nlink = 1;
++      fstat_buf.st_ino = 0;
++      fstat_buf.st_uid = 0;
++      fstat_buf.st_gid = 0;
++      if (iso9660_inodes) {
++              fstat_buf.st_ino = (unsigned long)
++                  isonum_733((unsigned char *)idr->extent);
++      }
++      return (TRUE);
++}
++
+ LOCAL void
+ parse_dir(rootname, extent, len)
+       char    *rootname;
+@@ -1012,12 +1160,13 @@ parse_dir(rootname, extent, len)
+       struct iso_directory_record * idr;
+       struct iso_directory_record     didr;
+       struct stat                     dstat;
+-      unsigned char   uc;
++      unsigned char   cl_buffer[2048];
+       unsigned char   flags = 0;
+       Llong           size = 0;
+       int             sextent = 0;
+       int     rlen;
+       int     blen;
++      int     rr_flags = 0;
+ static        char    *n = 0;
+ static        int     nlen = 0;
+@@ -1039,115 +1188,23 @@ static        int     nlen = 0;
+               i = 0;
+               while (1 == 1) {
+                       idr = (struct iso_directory_record *) &buffer[i];
+-                      if (idr->length[0] == 0) break;
+-                      memset(&fstat_buf, 0, sizeof (fstat_buf));
+-                      found_rr = 0;
+-                      name_buf[0] = xname[0] = 0;
+-                      fstat_buf.st_size = (off_t)(unsigned)isonum_733((unsigned char *)idr->size);
+-                      if (idr->flags[0] & 2)
+-                              fstat_buf.st_mode |= S_IFDIR;
+-                      else
+-                              fstat_buf.st_mode |= S_IFREG;
+-                      if (idr->name_len[0] == 1 && idr->name[0] == 0)
+-                              strcpy(name_buf, ".");
+-                      else if (idr->name_len[0] == 1 && idr->name[0] == 1)
+-                              strcpy(name_buf, "..");
+-                      else {
+-                              switch (ucs_level) {
+-                              case 3:
+-                              case 2:
+-                              case 1:
+-                                      /*
+-                                       * Unicode name.  Convert as best we can.
+-                                       */
+-                                      {
+-                                      int     j;
+-
+-                                      name_buf[0] = '\0';
+-#ifdef        USE_ICONV
+-                                      if (use_iconv(unls)) {
+-                                              int     u;
+-                                              char    *to = name_buf;
+-
+-                                              for (j = 0, u = 0; j < (int)idr->name_len[0] / 2; j++) {
+-                                                      char    *ibuf = (char *)&idr->name[j*2];
+-                                                      size_t  isize = 2;              /* UCS-2 character size */
+-                                                      size_t  osize = 4;
+-
+-                                                      if (iconv(unls->sic_uni2cd, (__IC_CONST char **)&ibuf, &isize,
+-                                                                      (char **)&to, &osize) == -1) {
+-                                                              int     err = geterrno();
+-
+-                                                              if ((err == EINVAL || err == EILSEQ) &&
+-                                                                  osize == 4) {
+-                                                                      *to = '_';
+-                                                                      u += 1;
+-                                                                      to++;
+-                                                              }
+-                                                      } else {
+-                                                              u += 4 - osize;
+-                                                              to = &name_buf[u];
+-                                                      }
+-                                              }
+-                                              j = u;
+-                                      } else
+-#endif
+-                                      for (j = 0; j < (int)idr->name_len[0] / 2; j++) {
+-                                              UInt16_t        unichar;
+-
+-                                              unichar = (idr->name[j*2] & 0xFF) * 256 +
+-                                                          (idr->name[j*2+1] & 0xFF);
+-
+-                                              /*
+-                                               * Get the backconverted char
+-                                               */
+-                                              if (unls)
+-                                                      uc = sic_uni2c(unls, unichar);
+-                                              else
+-                                                      uc = unichar > 255 ? '_' : unichar;
++                      if (idr->length[0] == 0)
++                              break;
++                      parse_de(idr);
++                      if (use_rock) {
++                              rr_flags = dump_rr(idr);
+-                                              name_buf[j] = uc ? uc : '_';
+-                                      }
+-                                      name_buf[j] = '\0';
+-                                      }
+-                                      break;
+-                              case 0:
++                              if (rr_flags & RR_FLAG_CL) {
+                                       /*
+-                                       * Normal non-Unicode name.
++                                       * Need to reparse the child link
++                                       * but note that we parse "CL/."
++                                       * so we get no usable file name.
+                                        */
+-                                      strncpy(name_buf, idr->name, idr->name_len[0]);
+-                                      name_buf[idr->name_len[0]] = 0;
+-                                      break;
+-                              default:
+-                                      /*
+-                                       * Don't know how to do these yet.  Maybe they are the same
+-                                       * as one of the above.
+-                                       */
+-                                      exit(1);
+-                              }
++                                      idr = (struct iso_directory_record *) cl_buffer;
++                                      parse_cl_dir(idr, cl_extent);
++                              } else if (rr_flags & RR_FLAG_RE)
++                                      goto cont;      /* skip rr_moved */
+                       }
+-                      memcpy(date_buf, idr->date, 9);
+-                      /*
+-                       * Always first set up time stamps and file modes from
+-                       * ISO-9660. This is used as a fallback in case that
+-                       * there is no related Rock Ridge based data.
+-                       */
+-                      fstat_buf.st_atime =
+-                      fstat_buf.st_mtime =
+-                      fstat_buf.st_ctime = iso9660_time(date_buf, NULL, FALSE);
+-                      fstat_buf.st_mode |= S_IRUSR|S_IXUSR |
+-                                  S_IRGRP|S_IXGRP |
+-                                  S_IROTH|S_IXOTH;
+-                      fstat_buf.st_nlink = 1;
+-                      fstat_buf.st_ino = 0;
+-                      fstat_buf.st_uid = 0;
+-                      fstat_buf.st_gid = 0;
+-                      if (iso9660_inodes) {
+-                              fstat_buf.st_ino = (unsigned long)
+-                                  isonum_733((unsigned char *)idr->extent);
+-                      }
+-                      if (use_rock)
+-                              dump_rr(idr);
+                       if (Xtract &&
+                           (idr->flags[0] & 2) != 0 &&
+                           idr->name_len[0] == 1 &&
+@@ -1170,30 +1227,30 @@ static int     nlen = 0;
+                               n[rlen] = '\0';
+                       if ((idr->flags[0] & 2) != 0 &&
+-                          (idr->name_len[0] != 1 ||
++                          ((rr_flags & RR_FLAG_CL) ||
++                          idr->name_len[0] != 1 ||
+                           (idr->name[0] != 0 && idr->name[0] != 1))) {
+                               /*
+                                * This is a plain directory (neither "xxx/."
+                                * nor "xxx/..").
+                                * Add this directory to the todo list.
+                                */
+-                              td = todo_idr;
+-                              if (td != NULL) {
+-                                      while (td->next != NULL)
+-                                              td = td->next;
+-                                      td->next = (struct todo *) malloc(sizeof (*td));
+-                                      td = td->next;
+-                              } else {
+-                                      todo_idr = td = (struct todo *) malloc(sizeof (*td));
+-                              }
++                              td = (struct todo *) malloc(sizeof (*td));
++                              if (td == NULL)
++                                      comerr(_("No memory.\n"));
+                               td->next = NULL;
+                               td->extent = isonum_733((unsigned char *)idr->extent);
+                               td->length = isonum_733((unsigned char *)idr->size);
+                               td->name = (char *) malloc(strlen(rootname)
+                                                               + strlen(name_buf) + 2);
++                              if (td->name == NULL)
++                                      comerr(_("No memory.\n"));
+                               strcpy(td->name, rootname);
+                               strcat(td->name, name_buf);
+                               strcat(td->name, "/");
++
++                              *todo_pp = td;
++                              todo_pp = &td->next;
+                       } else {
+                               if (xtract && strcmp(xtract, n) == 0) {
+                                       extract_file(STDOUT_FILENO, idr, "stdout");
+@@ -1253,6 +1310,7 @@ static   int     nlen = 0;
+                               if ((idr->flags[0] & ISO_MULTIEXTENT) == 0)
+                                       size = 0;
+                       }
++              cont:
+                       i += buffer[i];
+                       if (i > 2048 - offsetof(struct iso_directory_record, name[0])) break;
+               }
+@@ -1381,12 +1439,13 @@ main(argc, argv)
+               usage(0);
+       if (prvers) {
+               printf(_("isoinfo %s (%s-%s-%s) Copyright (C) 1993-1999 %s (C) 1999-2015 %s\n"),
+-                                      VERSION,
++                                      "3.02a02",
+                                       HOST_CPU, HOST_VENDOR, HOST_OS,
+                                       _("Eric Youngdale"),
+                                       _("Joerg Schilling"));
+               exit(0);
+       }
++      myuid = getuid();
+ #ifdef        USE_FIND
+       if (do_find) {
+               finda_t fa;
+--- cdrtools-3.01.orig/mkisofs/udf.c   2013-04-24 20:45:18.000000000 +0000
++++ cdrtools-3.01/mkisofs/udf.c        2015-11-25 22:07:30.000000000 +0000
+@@ -1,15 +1,15 @@
+-/* @(#)udf.c  1.42 13/04/24 Copyright 2001-2013 J. Schilling */
++/* @(#)udf.c  1.43 15/11/25 Copyright 2001-2015 J. Schilling */
+ #include <schily/mconfig.h>
+ #ifndef lint
+ static        UConst char sccsid[] =
+-      "@(#)udf.c      1.42 13/04/24 Copyright 2001-2013 J. Schilling";
++      "@(#)udf.c      1.43 15/11/25 Copyright 2001-2015 J. Schilling";
+ #endif
+ /*
+  * udf.c - UDF support for mkisofs
+  *
+  * Written by Ben Rudiak-Gould (2001).
+  *
+- * Copyright 2001-2013 J. Schilling.
++ * Copyright 2001-2015 J. Schilling.
+  */
+ /*
+  * This program is free software; you can redistribute it and/or modify
+@@ -98,7 +98,7 @@ static       UConst char sccsid[] =
+ extern        int     use_sparcboot;
+ extern struct directory *root;
+-extern time_t         begun;
++extern struct timeval tv_begun;
+ static unsigned lba_main_seq;
+ static unsigned lba_main_seq_copy;
+@@ -110,7 +110,7 @@ static unsigned lba_end_anchor_vol_desc;
+ static unsigned num_udf_files;
+ static unsigned num_udf_directories;
+-static unsigned volume_set_id[2];
++static unsigned volume_set_id[2] = { 0, 0 };
+ #define       UDF_MAIN_SEQ_LENGTH (16)
+ #define       UDF_INTEG_SEQ_LENGTH (2)
+@@ -723,7 +723,7 @@ set_primary_vol_desc(buf, lba)
+       /*pvd->volume_abstract;*/
+       /*pvd->volume_copyright_notice;*/
+       /*pvd->application_ident;*/
+-      set_timestamp_from_time_t(&pvd->recording_date_and_time, begun);
++      set_timestamp_from_time_t(&pvd->recording_date_and_time, tv_begun.tv_sec);
+       set_impl_ident(&pvd->impl_ident);
+       set_tag(&pvd->desc_tag, UDF_TAGID_PRIMARY_VOLUME_DESC, lba, 512);
+ }
+@@ -831,7 +831,7 @@ set_logical_vol_integrity_desc(buf, lba)
+       udf_logical_volume_integrity_desc *lvid =
+                               (udf_logical_volume_integrity_desc *)buf;
+-      set_timestamp_from_time_t(&lvid->recording_date, begun);
++      set_timestamp_from_time_t(&lvid->recording_date, tv_begun.tv_sec);
+       set32(&lvid->integrity_type, UDF_INTEGRITY_TYPE_CLOSE);
+       /*lvid->next_integrity_extent;*/
+       set64(&lvid->logical_volume_contents_use.unique_id,
+@@ -859,7 +859,7 @@ set_file_set_desc(buf, rba)
+ {
+       udf_file_set_desc *fsd = (udf_file_set_desc *)buf;
+-      set_timestamp_from_time_t(&fsd->recording_date_and_time, begun);
++      set_timestamp_from_time_t(&fsd->recording_date_and_time, tv_begun.tv_sec);
+       set16(&fsd->interchange_level, 3);
+       set16(&fsd->maximum_interchange_level, 3);
+       set32(&fsd->character_set_list, 1);
+@@ -1986,8 +1986,10 @@ udf_main_seq_write(out)
+        * volume_set_id needs to be set to a (64-bit) "unique" number.
+        * This will have to do for now.
+        */
+-      volume_set_id[0] = begun;
+-      volume_set_id[1] = (unsigned)clock();   /* XXX Maybe non-portable */
++      if (volume_set_id[0] == 0) {
++              volume_set_id[0] = tv_begun.tv_sec;
++              volume_set_id[1] = (unsigned)tv_begun.tv_usec;
++      }
+       memset(buf, 0, sizeof (buf));
+       set_primary_vol_desc(buf, last_extent_written++);
+--- cdrtools-3.01.orig/mkisofs/mkisofs.c       2015-01-01 14:19:51.000000000 +0000
++++ cdrtools-3.01/mkisofs/mkisofs.c
+@@ -69 +69 @@ int              path_ind;
+-char  version_string[] = VERSION;
++char  version_string[] = "3.01-fix-20151126";
diff --git a/gnu/packages/patches/cool-retro-term-dont-check-uninit-member.patch b/gnu/packages/patches/cool-retro-term-dont-check-uninit-member.patch
new file mode 100644 (file)
index 0000000..c6e1d27
--- /dev/null
@@ -0,0 +1,33 @@
+From 126a97d1f22f7d784d392b2b7d5aadf0a4e18c0d Mon Sep 17 00:00:00 2001
+From: Petter <petter@mykolab.ch>
+Date: Thu, 27 Apr 2017 20:28:02 +0200
+Subject: [PATCH] Avoid checking uninitialized member + simplify condition
+
+---
+ qmltermwidget/lib/TerminalDisplay.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/qmltermwidget/lib/TerminalDisplay.cpp b/qmltermwidget/lib/TerminalDisplay.cpp
+index 189a609..36d2cd2 100644
+--- a/qmltermwidget/lib/TerminalDisplay.cpp
++++ b/qmltermwidget/lib/TerminalDisplay.cpp
+@@ -325,6 +325,7 @@ TerminalDisplay::TerminalDisplay(QQuickItem *parent)
+ ,_terminalSizeHint(false)
+ ,_terminalSizeStartup(true)
+ ,_bidiEnabled(false)
++,_mouseMarks(false)
+ ,_actSel(0)
+ ,_wordSelectionMode(false)
+ ,_lineSelectionMode(false)
+@@ -1846,7 +1847,7 @@ void TerminalDisplay::mousePressEvent(QMouseEvent* ev)
+   }
+   else if ( ev->button() == Qt::MidButton )
+   {
+-    if ( _mouseMarks || (!_mouseMarks && (ev->modifiers() & Qt::ShiftModifier)) )
++    if ( _mouseMarks || (ev->modifiers() & Qt::ShiftModifier) )
+       emitSelection(true,ev->modifiers() & Qt::ControlModifier);
+     else
+       emit mouseSignal( 1, charColumn +1, charLine +1 +_scrollBar->value() -_scrollBar->maximum() , 0);
+-- 
+2.12.2
+
diff --git a/gnu/packages/patches/cool-retro-term-fix-array-size.patch b/gnu/packages/patches/cool-retro-term-fix-array-size.patch
new file mode 100644 (file)
index 0000000..04a2a27
--- /dev/null
@@ -0,0 +1,25 @@
+From c91d7ae5dbb00c8392a9f93283dc56c3e296cccd Mon Sep 17 00:00:00 2001
+From: Petter <petter@mykolab.ch>
+Date: Thu, 27 Apr 2017 20:19:21 +0200
+Subject: [PATCH] Fix size of the array passed to memset()
+
+---
+ qmltermwidget/lib/History.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/qmltermwidget/lib/History.cpp b/qmltermwidget/lib/History.cpp
+index 0f9c13f..ab6f7be 100644
+--- a/qmltermwidget/lib/History.cpp
++++ b/qmltermwidget/lib/History.cpp
+@@ -515,7 +515,7 @@ void HistoryScrollBlockArray::addCells(const Character a[], int count)
+   // put cells in block's data
+   assert((count * sizeof(Character)) < ENTRIES);
+-  memset(b->data, 0, ENTRIES);
++  memset(b->data, 0, sizeof(b->data));
+   memcpy(b->data, a, count * sizeof(Character));
+   b->size = count * sizeof(Character);
+-- 
+2.12.2
+
diff --git a/gnu/packages/patches/cool-retro-term-memory-leak-1.patch b/gnu/packages/patches/cool-retro-term-memory-leak-1.patch
new file mode 100644 (file)
index 0000000..f3fbac1
--- /dev/null
@@ -0,0 +1,32 @@
+From 08628fda19128b75248548357e416bc373f14f91 Mon Sep 17 00:00:00 2001
+From: Yen Chi Hsuan <yan12125@gmail.com>
+Date: Sat, 18 Mar 2017 02:50:34 +0800
+Subject: [PATCH] Fix memory leak in hotspot (URLs & emails) detection
+
+---
+ qmltermwidget/lib/Filter.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/qmltermwidget/lib/Filter.cpp b/qmltermwidget/lib/Filter.cpp
+index 5ca7bee..2e8d2fb 100644
+--- a/qmltermwidget/lib/Filter.cpp
++++ b/qmltermwidget/lib/Filter.cpp
+@@ -26,6 +26,7 @@
+ // Qt
+ #include <QAction>
+ #include <QApplication>
++#include <QtAlgorithms>
+ #include <QClipboard>
+ #include <QString>
+ #include <QTextStream>
+@@ -194,6 +195,7 @@ Filter::~Filter()
+ }
+ void Filter::reset()
+ {
++    qDeleteAll(_hotspotList);
+     _hotspots.clear();
+     _hotspotList.clear();
+ }
+-- 
+2.12.2
+
diff --git a/gnu/packages/patches/cool-retro-term-remove-non-free-fonts.patch b/gnu/packages/patches/cool-retro-term-remove-non-free-fonts.patch
new file mode 100644 (file)
index 0000000..7a033df
--- /dev/null
@@ -0,0 +1,205 @@
+From 96ceffdfdcedd3ae33c46b11357aa2518e0a6152 Mon Sep 17 00:00:00 2001
+From: Petter <petter@mykolab.ch>
+Date: Thu, 27 Apr 2017 18:55:10 +0200
+Subject: [PATCH] Remove non-free fonts from settings menu
+
+--- a/app/qml/ApplicationSettings.qml
++++ b/app/qml/ApplicationSettings.qml
+@@ -409,7 +409,7 @@
+             obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"TERMINUS_SCALED","fontColor":"#0ccc68","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.16,"jitter":0.18,"burnIn":0.45,"staticNoise":0.1,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
+             builtin: true
+         }
+-        ListElement{
++        /*ListElement{
+             text: "Default Scanlines"
+             obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.1,"contrast":0.85,"fontName":"COMMODORE_PET","fontColor":"#00ff5b","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.2,"horizontalSync":0.14,"jitter":0.11,"burnIn":0.4,"staticNoise":0.05,"rasterization":1,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
+             builtin: true
+@@ -433,7 +433,7 @@
+             text: "IBM Dos"
+             obj_string: '{"ambientLight":0.16,"backgroundColor":"#000000","bloom":0.4,"brightness":0.5,"flickering":0.07,"contrast":0.85,"fontName":"IBM_DOS","fontColor":"#ffffff","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0.13,"horizontalSync":0,"jitter":0.16,"burnIn":0.3,"staticNoise":0.03,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":1,"saturationColor":0,"rbgShift":0.35,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
+             builtin: true
+-        }
++        }*/
+         ListElement{
+             text: "IBM 3278"
+             obj_string: '{"ambientLight":0.1,"backgroundColor":"#000000","bloom":0.15,"brightness":0.5,"flickering":0,"contrast":0.85,"fontName":"IBM_3278","fontColor":"#0ccc68","frameName":"SIMPLE_WHITE_FRAME","glowingLine":0,"horizontalSync":0,"jitter":0,"burnIn":0.6,"staticNoise":0,"rasterization":0,"screenCurvature":0.1,"windowOpacity":1,"chromaColor":0,"saturationColor":0,"rbgShift":0,"fontWidth":1.0,"useCustomCommand":false,"customCommand":""}'
+diff --git a/app/qml/FontPixels.qml b/app/qml/FontPixels.qml
+index 6ff85da..6f0d0ba 100644
+--- a/app/qml/FontPixels.qml
++++ b/app/qml/FontPixels.qml
+@@ -32,7 +32,7 @@ QtObject{
+     property bool lowResolutionFont: true
+     property ListModel fontlist: ListModel{
+-        ListElement{
++        /*ListElement{
+             name: "COMMODORE_PET"
+             text: "Commodore PET (1977)"
+             source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
+@@ -40,7 +40,7 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.8
+-        }
++        }*/
+         ListElement{
+             name: "PROGGY_TINY"
+             text: "Proggy Tiny (Modern)"
+@@ -68,7 +68,7 @@ QtObject{
+             baseScaling: 3.0
+             fontWidth: 1.0
+         }
+-        ListElement{
++        /*ListElement{
+             name: "APPLE_II"
+             text: "Apple ][ (1977)"
+             source: "fonts/1977-apple2/PrintChar21.ttf"
+@@ -76,8 +76,8 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.9
+-        }
+-        ListElement{
++        }*/
++        /*ListElement{
+             name: "ATARI_400"
+             text: "Atari 400-800 (1979)"
+             source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
+@@ -85,8 +85,8 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.8
+-        }
+-        ListElement{
++        }*/
++        /*ListElement{
+             name: "COMMODORE_64"
+             text: "Commodore 64 (1982)"
+             source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
+@@ -94,6 +94,6 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.8
+-        }
++        }*/
+     }
+ }
+diff --git a/app/qml/FontScanlines.qml b/app/qml/FontScanlines.qml
+index eebf00b..410d7b6 100644
+--- a/app/qml/FontScanlines.qml
++++ b/app/qml/FontScanlines.qml
+@@ -32,7 +32,7 @@ QtObject{
+     property bool lowResolutionFont: true
+     property ListModel fontlist: ListModel{
+-        ListElement{
++        /*ListElement{
+             name: "COMMODORE_PET"
+             text: "Commodore PET (1977)"
+             source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
+@@ -40,7 +40,7 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.7
+-        }
++        }*/
+         ListElement{
+             name: "PROGGY_TINY"
+             text: "Proggy Tiny (Modern)"
+@@ -68,7 +68,7 @@ QtObject{
+             baseScaling: 3.0
+             fontWidth: 1.0
+         }
+-        ListElement{
++        /*ListElement{
+             name: "APPLE_II"
+             text: "Apple ][ (1977)"
+             source: "fonts/1977-apple2/PrintChar21.ttf"
+@@ -76,8 +76,8 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.8
+-        }
+-        ListElement{
++        }*/
++        /*ListElement{
+             name: "ATARI_400"
+             text: "Atari 400-800 (1979)"
+             source: "fonts/1979-atari-400-800/ATARI400800_original.TTF"
+@@ -85,8 +85,8 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.7
+-        }
+-        ListElement{
++        }*/
++        /*ListElement{
+             name: "COMMODORE_64"
+             text: "Commodore 64 (1982)"
+             source: "fonts/1982-commodore64/C64_Pro_Mono_v1.0-STYLE.ttf"
+@@ -94,6 +94,6 @@ QtObject{
+             pixelSize: 8
+             baseScaling: 4.0
+             fontWidth: 0.7
+-        }
++        }*/
+     }
+ }
+diff --git a/app/qml/Fonts.qml b/app/qml/Fonts.qml
+index ad20844..882808a 100644
+--- a/app/qml/Fonts.qml
++++ b/app/qml/Fonts.qml
+@@ -80,7 +80,7 @@
+             fontWidth: 1.0
+             lowResolutionFont: true
+         }
+-        ListElement{
++        /*ListElement{
+             name: "COMMODORE_PET_SCALED"
+             text: "Commodore PET (1977)"
+             source: "fonts/1977-commodore-pet/COMMODORE_PET.ttf"
+@@ -89,7 +89,7 @@
+             baseScaling: 3.5
+             fontWidth: 0.7
+             lowResolutionFont: true
+-        }
++        }*/
+         ListElement{
+             name: "PROGGY_TINY_SCALED"
+             text: "Proggy Tiny (Modern)"
+@@ -100,7 +100,7 @@
+             fontWidth: 0.9
+             lowResolutionFont: true
+         }
+-        ListElement{
++        /*ListElement{
+             name: "APPLE_II_SCALED"
+             text: "Apple ][ (1977)"
+             source: "fonts/1977-apple2/PrintChar21.ttf"
+@@ -149,7 +149,7 @@
+             baseScaling: 2.0
+             fontWidth: 1.0
+             lowResolutionFont: true
+-        }
++        }*/
+         ListElement{
+             name: "HERMIT"
+             text: "HD: Hermit (Modern)"
+@@ -177,7 +177,7 @@
+             fontWidth: 1.0
+             lowResolutionFont: false
+         }
+-        ListElement{
++        /*ListElement{
+             name: "MONACO"
+             text: "HD: Monaco (Modern)"
+             source: "fonts/modern-monaco/monaco.ttf"
+@@ -185,7 +185,7 @@
+             pixelSize: 30
+             fontWidth: 1.0
+             lowResolutionFont: false
+-        }
++        }*/
+         ListElement{
+             name: "INCONSOLATA"
+             text: "HD: Inconsolata (Modern)"
diff --git a/gnu/packages/patches/dvd+rw-tools-add-include.patch b/gnu/packages/patches/dvd+rw-tools-add-include.patch
new file mode 100644 (file)
index 0000000..800f8f3
--- /dev/null
@@ -0,0 +1,14 @@
+Without <limits.h>, INT_MAX is not defined.
+
+diff --git a/transport.hxx b/transport.hxx
+index 35a57a7..838add6 100644
+--- a/transport.hxx
++++ b/transport.hxx
+@@ -11,6 +11,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <string.h>
++#include <limits.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
index 0c67562..547598b 100644 (file)
@@ -16,7 +16,7 @@ index 3ffd56c..1232d19 100644
 @@ -39,6 +39,7 @@ end
  defmodule Kernel.CLI.OptionParsingTest do
    use ExUnit.Case, async: true
+
 +  @tag :skip
    test "properly parses paths" do
      root = fixture_path("../../..") |> to_charlist
@@ -24,7 +24,7 @@ index 3ffd56c..1232d19 100644
 @@ -57,6 +58,7 @@ end
  defmodule Kernel.CLI.AtExitTest do
    use ExUnit.Case, async: true
+
 +  @tag :skip
    test "invokes at_exit callbacks" do
      assert elixir(fixture_path("at_exit.exs") |> to_charlist) ==
@@ -32,7 +32,7 @@ index 3ffd56c..1232d19 100644
 @@ -66,6 +68,7 @@ end
  defmodule Kernel.CLI.ErrorTest do
    use ExUnit.Case, async: true
+
 +  @tag :skip
    test "properly format errors" do
      assert :string.str('** (throw) 1', elixir('-e "throw 1"')) == 0
@@ -40,7 +40,7 @@ index 3ffd56c..1232d19 100644
 @@ -86,6 +89,7 @@ defmodule Kernel.CLI.CompileTest do
      {:ok, [tmp_dir_path: tmp_dir_path, beam_file_path: beam_file_path, fixture: fixture]}
    end
+
 +  @tag :skip
    test "compiles code", context do
      assert elixirc('#{context[:fixture]} -o #{context[:tmp_dir_path]}') == ''
@@ -48,7 +48,7 @@ index 3ffd56c..1232d19 100644
 @@ -96,6 +100,7 @@ defmodule Kernel.CLI.CompileTest do
      Code.delete_path context[:tmp_dir_path]
    end
+
 +  @tag :skip
    test "fails on missing patterns", context do
      output = elixirc('#{context[:fixture]} non_existing.ex -o #{context[:tmp_dir_path]}')
@@ -56,11 +56,11 @@ index 3ffd56c..1232d19 100644
 @@ -103,6 +108,7 @@ defmodule Kernel.CLI.CompileTest do
      refute File.exists?(context[:beam_file_path]), "expected the sample to not be compiled"
    end
+
 +  @tag :skip
    test "fails on missing write access to .beam file", context do
      compilation_args = '#{context[:fixture]} -o #{context[:tmp_dir_path]}'
+
 diff --git a/lib/elixir/test/elixir/kernel/dialyzer_test.exs b/lib/elixir/test/elixir/kernel/dialyzer_test.exs
 index 801d852..40fc5bc 100644
 --- a/lib/elixir/test/elixir/kernel/dialyzer_test.exs
@@ -68,19 +68,19 @@ index 801d852..40fc5bc 100644
 @@ -60,16 +60,19 @@ defmodule Kernel.DialyzerTest do
      assert_dialyze_no_warnings! context
    end
+
 +  @tag :skip
    test "no warnings on rewrites", context do
      copy_beam! context, Dialyzer.Rewrite
      assert_dialyze_no_warnings! context
    end
+
 +  @tag :skip
    test "no warnings on raise", context do
      copy_beam! context, Dialyzer.Raise
      assert_dialyze_no_warnings! context
    end
+
 +  @tag :skip
    test "no warnings on macrocallback", context do
      copy_beam! context, Dialyzer.Macrocallback
@@ -94,7 +94,7 @@ index aafa559..0f9c178 100644
      assert System.endianness == System.compiled_endianness
    end
 -
-+ 
++
 +  @tag :skip
    test "argv/0" do
      list = elixir('-e "IO.inspect System.argv" -- -o opt arg1 arg2 --long-opt 10')
@@ -106,7 +106,7 @@ index fff3351..d6ed1b3 100644
 @@ -244,6 +244,7 @@ defmodule Mix.DepTest do
      end
    end
+
 +  @tag :skip
    test "remote converger" do
      deps = [{:deps_repo, "0.1.0", path: "custom/deps_repo"},
@@ -114,39 +114,12 @@ index fff3351..d6ed1b3 100644
 @@ -301,6 +302,7 @@ defmodule Mix.DepTest do
      end
    end
+
 +  @tag :skip
    test "remote converger is not invoked if deps diverge" do
      deps = [{:deps_repo, "0.1.0", path: "custom/deps_repo"},
              {:git_repo, "0.2.0", git: MixTest.Case.fixture_path("git_repo"), only: :test}]
-diff --git a/lib/mix/test/mix/rebar_test.exs b/lib/mix/test/mix/rebar_test.exs
-index d2dd098..12cef15 100644
---- a/lib/mix/test/mix/rebar_test.exs
-+++ b/lib/mix/test/mix/rebar_test.exs
-@@ -120,6 +120,7 @@ defmodule Mix.RebarTest do
-     assert Enum.all?(deps, &(&1.manager == :rebar3))
-   end
-+  @tag :skip
-   test "Rebar overrides" do
-     Mix.Project.push(RebarOverrideAsDep)
-@@ -150,6 +151,7 @@ defmodule Mix.RebarTest do
-     end
-   end
-+  @tag :skip
-   test "get and compile dependencies for Rebar" do
-     Mix.Project.push(RebarAsDep)
-@@ -180,6 +182,7 @@ defmodule Mix.RebarTest do
-     end
-   end
-+  @tag :skip
-   test "get and compile dependencies for rebar3" do
-     Mix.Project.push(Rebar3AsDep)
+
 diff --git a/lib/mix/test/mix/shell/io_test.exs b/lib/mix/test/mix/shell/io_test.exs
 index 9bfb6b4..d982ef3 100644
 --- a/lib/mix/test/mix/shell/io_test.exs
@@ -154,11 +127,11 @@ index 9bfb6b4..d982ef3 100644
 @@ -29,6 +29,7 @@ defmodule Mix.Shell.IOTest do
      assert capture_io("", fn -> refute yes?("Ok?") end)
    end
+
 +  @tag :skip
    test "runs a given command" do
      assert capture_io("", fn -> assert cmd("echo hello") == 0 end) == "hello\n"
+
 diff --git a/lib/mix/test/mix/shell/quiet_test.exs b/lib/mix/test/mix/shell/quiet_test.exs
 index 626429b..99fab35 100644
 --- a/lib/mix/test/mix/shell/quiet_test.exs
@@ -166,11 +139,11 @@ index 626429b..99fab35 100644
 @@ -29,6 +29,7 @@ defmodule Mix.Shell.QuietTest do
      assert capture_io("", fn -> refute yes?("Ok?") end)
    end
+
 +  @tag :skip
    test "runs a given command" do
      assert capture_io("", fn -> assert cmd("echo hello") == 0 end) == ""
+
 diff --git a/lib/mix/test/mix/tasks/cmd_test.exs b/lib/mix/test/mix/tasks/cmd_test.exs
 index db4bf06..4d441f7 100644
 --- a/lib/mix/test/mix/tasks/cmd_test.exs
@@ -178,7 +151,7 @@ index db4bf06..4d441f7 100644
 @@ -3,6 +3,7 @@ Code.require_file "../../test_helper.exs", __DIR__
  defmodule Mix.Tasks.CmdTest do
    use MixTest.Case
+
 +  @tag :skip
    test "runs the command for each app" do
      in_fixture "umbrella_dep/deps/umbrella", fn ->
@@ -190,19 +163,19 @@ index 4f09ff3..c371997 100644
 @@ -29,6 +29,7 @@ defmodule Mix.Tasks.Deps.TreeTest do
      end
    end
+
 +  @tag :skip
    test "shows the dependency tree", context do
      Mix.Project.push ConvergedDepsApp
+
 @@ -109,6 +110,7 @@ defmodule Mix.Tasks.Deps.TreeTest do
      end
    end
+
 +  @tag :skip
    test "shows the dependency tree in DOT graph format", context do
      Mix.Project.push ConvergedDepsApp
+
 diff --git a/lib/mix/test/mix/tasks/deps_test.exs b/lib/mix/test/mix/tasks/deps_test.exs
 index b061777..cc45cf8 100644
 --- a/lib/mix/test/mix/tasks/deps_test.exs
@@ -210,43 +183,43 @@ index b061777..cc45cf8 100644
 @@ -96,6 +96,7 @@
      end
    end
+
 +  @tag :skip
    test "prints list of dependencies and their lock status" do
      Mix.Project.push DepsApp
+
 @@ -409,6 +409,7 @@ defmodule Mix.Tasks.DepsTest do
      end
    end
+
 +  @tag :skip
    test "fails on diverged dependencies by requirement" do
      Mix.Project.push ConvergedDepsApp
+
 @@ -440,6 +441,7 @@ defmodule Mix.Tasks.DepsTest do
      end
    end
+
 +  @tag :skip
    test "fails on diverged dependencies even when optional" do
      Mix.Project.push ConvergedDepsApp
+
 @@ -469,6 +471,7 @@ defmodule Mix.Tasks.DepsTest do
      end
    end
+
 +  @tag :skip
    test "works with converged dependencies" do
      Mix.Project.push ConvergedDepsApp
+
 @@ -491,6 +494,7 @@ defmodule Mix.Tasks.DepsTest do
      purge [GitRepo, GitRepo.Mixfile]
    end
+
 +  @tag :skip
    test "works with overridden dependencies" do
      Mix.Project.push OverriddenDepsApp
+
 diff --git a/lib/mix/test/mix/umbrella_test.exs b/lib/mix/test/mix/umbrella_test.exs
 index 69f9428..406668a 100644
 --- a/lib/mix/test/mix/umbrella_test.exs
@@ -254,8 +227,58 @@ index 69f9428..406668a 100644
 @@ -98,6 +98,7 @@ defmodule Mix.UmbrellaTest do
      end
    end
+
 +  @tag :skip
    test "loads umbrella child dependencies in all environments" do
      in_fixture "umbrella_dep/deps/umbrella", fn ->
        Mix.Project.in_project :umbrella, ".", fn _ ->
+
+diff --git a/lib/elixir/test/elixir/kernel/dialyzer_test.exs b/lib/elixir/test/elixir/kernel/dialyzer_test.exs
+index 792222c..e90beb9 100644
+--- a/lib/elixir/test/elixir/kernel/dialyzer_test.exs
++++ b/lib/elixir/test/elixir/kernel/dialyzer_test.exs
+@@ -54,6 +54,7 @@ defmodule Kernel.DialyzerTest do
+     {:ok, [outdir: dir, dialyzer: dialyzer]}
+   end
+
++  @tag :skip
+   test "no warnings on valid remote calls", context do
+     copy_beam! context, Dialyzer.RemoteCall
+     assert_dialyze_no_warnings! context
+@@ -78,11 +79,13 @@ defmodule Kernel.DialyzerTest do
+     assert_dialyze_no_warnings! context
+   end
+
++  @tag :skip
+   test "no warnings on struct update", context do
+     copy_beam! context, Dialyzer.StructUpdate
+     assert_dialyze_no_warnings! context
+   end
+
++  @tag :skip
+   test "no warnings on protocol calls with opaque types", context do
+     copy_beam! context, Dialyzer.ProtocolOpaque
+     copy_beam! context, Dialyzer.ProtocolOpaque.Entity
+@@ -90,6 +93,7 @@ defmodule Kernel.DialyzerTest do
+     assert_dialyze_no_warnings! context
+   end
+
++  @tag :skip
+   test "no warnings on and/2 and or/2", context do
+     copy_beam! context, Dialyzer.BooleanCheck
+     assert_dialyze_no_warnings! context
+
+diff --git a/Makefile b/Makefile
+index 2fc4f9a..aef8366 100644
+--- a/Makefile
++++ b/Makefile
+@@ -201,7 +201,7 @@ $(TEST_EBIN)/%.beam: $(TEST_ERL)/%.erl
+        $(Q) mkdir -p $(TEST_EBIN)
+        $(Q) $(ERLC) -o $(TEST_EBIN) $<
+
+-test_elixir: test_stdlib test_ex_unit test_logger test_mix test_eex test_iex
++test_elixir: test_stdlib test_ex_unit test_logger test_eex test_iex
+
+ test_stdlib: compile
+        @ echo "==> elixir (exunit)"
+
diff --git a/gnu/packages/patches/gnome-shell-CVE-2017-8288.patch b/gnu/packages/patches/gnome-shell-CVE-2017-8288.patch
new file mode 100644 (file)
index 0000000..5d8e315
--- /dev/null
@@ -0,0 +1,54 @@
+Fix CVE-2017-8288:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8288
+http://seclists.org/oss-sec/2017/q2/136
+
+Patch copied from upstream source repository:
+
+https://git.gnome.org/browse/gnome-shell/commit/?id=ff425d1db7082e2755d2a405af53861552acf2a1
+
+From ff425d1db7082e2755d2a405af53861552acf2a1 Mon Sep 17 00:00:00 2001
+From: Emilio Pozuelo Monfort <pochu27@gmail.com>
+Date: Tue, 25 Apr 2017 17:27:42 +0200
+Subject: extensionSystem: handle reloading broken extensions
+
+Some extensions out there may fail to reload. When that happens,
+we need to catch any exceptions so that we don't leave things in
+a broken state that could lead to leaving extensions enabled in
+the screen shield.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=781728
+---
+ js/ui/extensionSystem.js | 12 ++++++++++--
+ 1 file changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
+index a4dc29e..fc352b8 100644
+--- a/js/ui/extensionSystem.js
++++ b/js/ui/extensionSystem.js
+@@ -282,12 +282,20 @@ function _onVersionValidationChanged() {
+     // temporarily disable them all
+     enabledExtensions = [];
+     for (let uuid in ExtensionUtils.extensions)
+-        reloadExtension(ExtensionUtils.extensions[uuid]);
++        try {
++            reloadExtension(ExtensionUtils.extensions[uuid]);
++        } catch(e) {
++            logExtensionError(uuid, e);
++        }
+     enabledExtensions = getEnabledExtensions();
+     if (Main.sessionMode.allowExtensions) {
+         enabledExtensions.forEach(function(uuid) {
+-            enableExtension(uuid);
++            try {
++                enableExtension(uuid);
++            } catch(e) {
++                logExtensionError(uuid, e);
++            }
+         });
+     }
+ }
+-- 
+cgit v0.12
+
diff --git a/gnu/packages/patches/icecat-bug-1299500-pt10.patch b/gnu/packages/patches/icecat-bug-1299500-pt10.patch
deleted file mode 100644 (file)
index 406738b..0000000
+++ /dev/null
@@ -1,1639 +0,0 @@
-Based on the following HG changeset, but adapted to GNU IceCat and
-also assumes that the dom/devicestorage subtree is deleted by our
-snippet.  Note that the other parts of this patchset are downloaded
-directly from the upstream mozilla-esr52 mercurial repository.
-
-# HG changeset patch
-# User Andrea Marchesini <amarchesini@mozilla.com>
-# Date 1489000545 -3600
-# Node ID 08f2bc167ae82a6f86e427283d8b972ba794b846
-# Parent  d63f3b14e5718b62c0adad2eab81b785250f3d4a
-Bug 1299500 - Get rid of DeviceStorage API - part 10 - DeviceStorage, r=ehsan, r=billm, a=jcristau
-
-diff --git a/dom/bindings/Bindings.conf b/dom/bindings/Bindings.conf
---- a/dom/bindings/Bindings.conf
-+++ b/dom/bindings/Bindings.conf
-@@ -228,21 +228,16 @@ DOMInterfaces = {
- 'DeviceAcceleration': {
-     'headerFile': 'mozilla/dom/DeviceMotionEvent.h',
- },
- 'DeviceRotationRate': {
-     'headerFile': 'mozilla/dom/DeviceMotionEvent.h',
- },
--'DeviceStorage': {
--    'nativeType': 'nsDOMDeviceStorage',
--    'headerFile': 'DeviceStorage.h',
--},
--
- 'Document': {
-     'nativeType': 'nsIDocument',
-     'binaryNames': {
-         'documentURI': 'documentURIFromJS',
-         'URL': 'documentURIFromJS'
-     }
- },
-diff --git a/dom/filesystem/DeviceStorageFileSystem.cpp b/dom/filesystem/DeviceStorageFileSystem.cpp
---- a/dom/filesystem/DeviceStorageFileSystem.cpp
-+++ b/dom/filesystem/DeviceStorageFileSystem.cpp
-@@ -1,26 +1,24 @@
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* vim: set ts=8 sts=2 et sw=2 tw=80: */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- #include "mozilla/dom/DeviceStorageFileSystem.h"
--#include "DeviceStorage.h"
- #include "mozilla/Preferences.h"
- #include "mozilla/dom/Directory.h"
- #include "mozilla/dom/File.h"
- #include "mozilla/dom/FileSystemUtils.h"
- #include "mozilla/ipc/BackgroundParent.h"
- #include "mozilla/Unused.h"
- #include "nsCOMPtr.h"
- #include "nsDebug.h"
--#include "nsDeviceStorage.h"
- #include "nsIFile.h"
- #include "nsPIDOMWindow.h"
- #include "nsGlobalWindow.h"
- using namespace mozilla::ipc;
- namespace mozilla {
- namespace dom {
-@@ -37,44 +35,16 @@ DeviceStorageFileSystem::DeviceStorageFi
-     if (mozilla::Preferences::GetBool("device.storage.prompt.testing", false)) {
-       mPermissionCheckType = ePermissionCheckNotRequired;
-     } else {
-       mPermissionCheckType = ePermissionCheckRequired;
-     }
-   } else {
-     AssertIsOnBackgroundThread();
-   }
--
--  // Get the permission name required to access the file system.
--  DebugOnly<nsresult> rv =
--    DeviceStorageTypeChecker::GetPermissionForType(mStorageType, mPermission);
--  NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "GetPermissionForType failed");
--
--  // Get the local path of the file system root.
--  nsCOMPtr<nsIFile> rootFile;
--  DeviceStorageFile::GetRootDirectoryForType(aStorageType,
--                                             aStorageName,
--                                             getter_AddRefs(rootFile));
--
--  Unused <<
--    NS_WARN_IF(!rootFile ||
--               NS_FAILED(rootFile->GetPath(mLocalOrDeviceStorageRootPath)));
--
--  if (!XRE_IsParentProcess()) {
--    return;
--  }
--
--  // DeviceStorageTypeChecker is a singleton object and must be initialized on
--  // the main thread. We initialize it here so that we can use it on the worker
--  // thread.
--  if (NS_IsMainThread()) {
--    DebugOnly<DeviceStorageTypeChecker*> typeChecker =
--      DeviceStorageTypeChecker::CreateOrGet();
--    MOZ_ASSERT(typeChecker);
--  }
- }
- DeviceStorageFileSystem::~DeviceStorageFileSystem()
- {
-   AssertIsOnOwningThread();
- }
- already_AddRefed<FileSystemBase>
-diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp
---- a/dom/ipc/ContentChild.cpp
-+++ b/dom/ipc/ContentChild.cpp
-@@ -168,44 +168,41 @@
- #include "mozilla/X11Util.h"
- #endif
- #ifdef ACCESSIBILITY
- #include "nsAccessibilityService.h"
- #endif
- #include "mozilla/dom/File.h"
--#include "mozilla/dom/devicestorage/DeviceStorageRequestChild.h"
- #include "mozilla/dom/PPresentationChild.h"
- #include "mozilla/dom/PresentationIPCService.h"
- #include "mozilla/ipc/InputStreamUtils.h"
- #ifdef MOZ_WEBSPEECH
- #include "mozilla/dom/PSpeechSynthesisChild.h"
- #endif
- #include "ProcessUtils.h"
- #include "URIUtils.h"
- #include "nsContentUtils.h"
- #include "nsIPrincipal.h"
--#include "nsDeviceStorage.h"
- #include "DomainPolicy.h"
- #include "mozilla/dom/ipc/StructuredCloneData.h"
- #include "mozilla/dom/time/DateCacheCleaner.h"
- #include "mozilla/net/NeckoMessageUtils.h"
- #include "mozilla/widget/PuppetBidiKeyboard.h"
- #include "mozilla/RemoteSpellCheckEngineChild.h"
- #include "GMPServiceChild.h"
- #include "gfxPlatform.h"
- #include "nscore.h" // for NS_FREE_PERMANENT_DATA
- #include "VRManagerChild.h"
- using namespace mozilla;
- using namespace mozilla::docshell;
--using namespace mozilla::dom::devicestorage;
- using namespace mozilla::dom::ipc;
- using namespace mozilla::dom::workers;
- using namespace mozilla::media;
- using namespace mozilla::embedding;
- using namespace mozilla::gmp;
- using namespace mozilla::hal_sandbox;
- using namespace mozilla::ipc;
- using namespace mozilla::layers;
-@@ -1806,29 +1803,16 @@ ContentChild::GetCPOWManager()
- }
- bool
- ContentChild::RecvPTestShellConstructor(PTestShellChild* actor)
- {
-   return true;
- }
--PDeviceStorageRequestChild*
--ContentChild::AllocPDeviceStorageRequestChild(const DeviceStorageParams& aParams)
--{
--  return new DeviceStorageRequestChild();
--}
--
--bool
--ContentChild::DeallocPDeviceStorageRequestChild(PDeviceStorageRequestChild* aDeviceStorage)
--{
--  delete aDeviceStorage;
--  return true;
--}
--
- PNeckoChild*
- ContentChild::AllocPNeckoChild()
- {
-   return new NeckoChild();
- }
- bool
- ContentChild::DeallocPNeckoChild(PNeckoChild* necko)
-@@ -2531,38 +2515,16 @@ ContentChild::RecvVolumes(nsTArray<Volum
-   if (vs) {
-     vs->RecvVolumesFromParent(aVolumes);
-   }
- #endif
-   return true;
- }
- bool
--ContentChild::RecvFilePathUpdate(const nsString& aStorageType,
--                                 const nsString& aStorageName,
--                                 const nsString& aPath,
--                                 const nsCString& aReason)
--{
--  if (nsDOMDeviceStorage::InstanceCount() == 0) {
--    // No device storage instances in this process. Don't try and
--    // and create a DeviceStorageFile since it will fail.
--
--    return true;
--  }
--
--  RefPtr<DeviceStorageFile> dsf = new DeviceStorageFile(aStorageType, aStorageName, aPath);
--
--  nsString reason;
--  CopyASCIItoUTF16(aReason, reason);
--  nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
--  obs->NotifyObservers(dsf, "file-watcher-update", reason.get());
--  return true;
--}
--
--bool
- ContentChild::RecvFileSystemUpdate(const nsString& aFsName,
-                                    const nsString& aVolumeName,
-                                    const int32_t& aState,
-                                    const int32_t& aMountGeneration,
-                                    const bool& aIsMediaPresent,
-                                    const bool& aIsSharing,
-                                    const bool& aIsFormatting,
-                                    const bool& aIsFake,
-diff --git a/dom/ipc/ContentChild.h b/dom/ipc/ContentChild.h
---- a/dom/ipc/ContentChild.h
-+++ b/dom/ipc/ContentChild.h
-@@ -193,22 +193,16 @@ public:
-                                             const IPCTabContext& aContext,
-                                             const uint32_t& aChromeFlags,
-                                             const ContentParentId& aCpID,
-                                             const bool& aIsForApp,
-                                             const bool& aIsForBrowser) override;
-   virtual bool DeallocPBrowserChild(PBrowserChild*) override;
--  virtual PDeviceStorageRequestChild*
--  AllocPDeviceStorageRequestChild(const DeviceStorageParams&) override;
--
--  virtual bool
--  DeallocPDeviceStorageRequestChild(PDeviceStorageRequestChild*) override;
--
-   virtual PBlobChild*
-   AllocPBlobChild(const BlobConstructorParams& aParams) override;
-   virtual bool DeallocPBlobChild(PBlobChild* aActor) override;
-   virtual PCrashReporterChild*
-   AllocPCrashReporterChild(const mozilla::dom::NativeThreadId& id,
-                            const uint32_t& processType) override;
-@@ -436,21 +430,16 @@ public:
-   virtual bool
-   RecvInitBlobURLs(nsTArray<BlobURLRegistrationData>&& aRegistations) override;
-   virtual bool RecvLastPrivateDocShellDestroyed() override;
-   virtual bool RecvVolumes(InfallibleTArray<VolumeInfo>&& aVolumes) override;
--  virtual bool RecvFilePathUpdate(const nsString& aStorageType,
--                                  const nsString& aStorageName,
--                                  const nsString& aPath,
--                                  const nsCString& aReason) override;
--
-   virtual bool RecvFileSystemUpdate(const nsString& aFsName,
-                                     const nsString& aVolumeName,
-                                     const int32_t& aState,
-                                     const int32_t& aMountGeneration,
-                                     const bool& aIsMediaPresent,
-                                     const bool& aIsSharing,
-                                     const bool& aIsFormatting,
-                                     const bool& aIsFake,
-diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp
---- a/dom/ipc/ContentParent.cpp
-+++ b/dom/ipc/ContentParent.cpp
-@@ -23,17 +23,16 @@
- #include "chrome/common/process_watcher.h"
- #include "mozilla/a11y/PDocAccessible.h"
- #include "AppProcessChecker.h"
- #include "AudioChannelService.h"
- #include "BlobParent.h"
- #include "CrashReporterParent.h"
--#include "DeviceStorageStatics.h"
- #include "GMPServiceParent.h"
- #include "HandlerServiceParent.h"
- #include "IHistory.h"
- #include "imgIContainer.h"
- #include "mozIApplication.h"
- #if defined(XP_WIN) && defined(ACCESSIBILITY)
- #include "mozilla/a11y/AccessibleWrap.h"
- #endif
-@@ -50,17 +49,16 @@
- #include "mozilla/dom/GetFilesHelper.h"
- #include "mozilla/dom/GeolocationBinding.h"
- #include "mozilla/dom/Notification.h"
- #include "mozilla/dom/PContentBridgeParent.h"
- #include "mozilla/dom/PContentPermissionRequestParent.h"
- #include "mozilla/dom/PCycleCollectWithLogsParent.h"
- #include "mozilla/dom/PMemoryReportRequestParent.h"
- #include "mozilla/dom/ServiceWorkerRegistrar.h"
--#include "mozilla/dom/devicestorage/DeviceStorageRequestParent.h"
- #include "mozilla/dom/power/PowerManagerService.h"
- #include "mozilla/dom/Permissions.h"
- #include "mozilla/dom/PresentationParent.h"
- #include "mozilla/dom/PPresentationParent.h"
- #include "mozilla/dom/PushNotifier.h"
- #include "mozilla/dom/FlyWebPublishedServerIPC.h"
- #include "mozilla/dom/quota/QuotaManagerService.h"
- #include "mozilla/dom/time/DateCacheCleaner.h"
-@@ -272,17 +270,16 @@ using base::ChildPrivileges;
- using base::KillProcess;
- #ifdef MOZ_ENABLE_PROFILER_SPS
- using mozilla::ProfileGatherer;
- #endif
- #ifdef MOZ_CRASHREPORTER
- using namespace CrashReporter;
- #endif
--using namespace mozilla::dom::devicestorage;
- using namespace mozilla::dom::power;
- using namespace mozilla::media;
- using namespace mozilla::embedding;
- using namespace mozilla::gfx;
- using namespace mozilla::gmp;
- using namespace mozilla::hal;
- using namespace mozilla::ipc;
- using namespace mozilla::layers;
-@@ -2775,22 +2772,16 @@ ContentParent::Observe(nsISupports* aSub
-     Unused << SendCycleCollect();
-   }
-   else if (!strcmp(aTopic, "child-mmu-request")){
-     Unused << SendMinimizeMemoryUsage();
-   }
-   else if (!strcmp(aTopic, "last-pb-context-exited")) {
-     Unused << SendLastPrivateDocShellDestroyed();
-   }
--  else if (!strcmp(aTopic, "file-watcher-update")) {
--    nsCString creason;
--    CopyUTF16toUTF8(aData, creason);
--    DeviceStorageFile* file = static_cast<DeviceStorageFile*>(aSubject);
--    Unused << SendFilePathUpdate(file->mStorageType, file->mStorageName, file->mPath, creason);
--  }
- #ifdef MOZ_WIDGET_GONK
-   else if(!strcmp(aTopic, NS_VOLUME_STATE_CHANGED)) {
-     nsCOMPtr<nsIVolume> vol = do_QueryInterface(aSubject);
-     if (!vol) {
-       return NS_ERROR_NOT_AVAILABLE;
-     }
-     nsString volName;
-@@ -3021,35 +3012,16 @@ ContentParent::AllocPBrowserParent(const
- }
- bool
- ContentParent::DeallocPBrowserParent(PBrowserParent* frame)
- {
-   return nsIContentParent::DeallocPBrowserParent(frame);
- }
--PDeviceStorageRequestParent*
--ContentParent::AllocPDeviceStorageRequestParent(const DeviceStorageParams& aParams)
--{
--  RefPtr<DeviceStorageRequestParent> result = new DeviceStorageRequestParent(aParams);
--  if (!result->EnsureRequiredPermissions(this)) {
--    return nullptr;
--  }
--  result->Dispatch();
--  return result.forget().take();
--}
--
--bool
--ContentParent::DeallocPDeviceStorageRequestParent(PDeviceStorageRequestParent* doomed)
--{
--  DeviceStorageRequestParent *parent = static_cast<DeviceStorageRequestParent*>(doomed);
--  NS_RELEASE(parent);
--  return true;
--}
--
- PBlobParent*
- ContentParent::AllocPBlobParent(const BlobConstructorParams& aParams)
- {
-   return nsIContentParent::AllocPBlobParent(aParams);
- }
- bool
- ContentParent::DeallocPBlobParent(PBlobParent* aActor)
-@@ -3871,35 +3843,16 @@ ContentParent::RecvAsyncMessage(const ns
-                                 InfallibleTArray<CpowEntry>&& aCpows,
-                                 const IPC::Principal& aPrincipal,
-                                 const ClonedMessageData& aData)
- {
-   return nsIContentParent::RecvAsyncMessage(aMsg, Move(aCpows), aPrincipal,
-                                             aData);
- }
--bool
--ContentParent::RecvFilePathUpdateNotify(const nsString& aType,
--                                        const nsString& aStorageName,
--                                        const nsString& aFilePath,
--                                        const nsCString& aReason)
--{
--  RefPtr<DeviceStorageFile> dsf = new DeviceStorageFile(aType,
--                                                        aStorageName,
--                                                        aFilePath);
--
--  nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
--  if (!obs) {
--    return false;
--  }
--  obs->NotifyObservers(dsf, "file-watcher-update",
--                       NS_ConvertASCIItoUTF16(aReason).get());
--  return true;
--}
--
- static int32_t
- AddGeolocationListener(nsIDOMGeoPositionCallback* watcher,
-                        nsIDOMGeoPositionErrorCallback* errorCallBack,
-                        bool highAccuracy)
- {
-   nsCOMPtr<nsIDOMGeoGeolocation> geo = do_GetService("@mozilla.org/geolocation;1");
-   if (!geo) {
-     return -1;
-@@ -4943,35 +4896,16 @@ ContentParent::RecvBeginDriverCrashGuard
- bool
- ContentParent::RecvEndDriverCrashGuard(const uint32_t& aGuardType)
- {
-   mDriverCrashGuard = nullptr;
-   return true;
- }
- bool
--ContentParent::RecvGetDeviceStorageLocation(const nsString& aType,
--                                            nsString* aPath)
--{
--#ifdef MOZ_WIDGET_ANDROID
--  mozilla::AndroidBridge::GetExternalPublicDirectory(aType, *aPath);
--  return true;
--#else
--  return false;
--#endif
--}
--
--bool
--ContentParent::RecvGetDeviceStorageLocations(DeviceStorageLocationInfo* info)
--{
--    DeviceStorageStatics::GetDeviceStorageLocationsForIPC(info);
--    return true;
--}
--
--bool
- ContentParent::RecvGetAndroidSystemInfo(AndroidSystemInfo* aInfo)
- {
- #ifdef MOZ_WIDGET_ANDROID
-   nsSystemInfo::GetAndroidSystemInfo(aInfo);
-   return true;
- #else
-   MOZ_CRASH("wrong platform!");
-   return false;
-diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h
---- a/dom/ipc/ContentParent.h
-+++ b/dom/ipc/ContentParent.h
-@@ -726,22 +726,16 @@ private:
-                                               const IPCTabContext& aContext,
-                                               const uint32_t& aChromeFlags,
-                                               const ContentParentId& aCpId,
-                                               const bool& aIsForApp,
-                                               const bool& aIsForBrowser) override;
-   virtual bool DeallocPBrowserParent(PBrowserParent* frame) override;
--  virtual PDeviceStorageRequestParent*
--  AllocPDeviceStorageRequestParent(const DeviceStorageParams&) override;
--
--  virtual bool
--  DeallocPDeviceStorageRequestParent(PDeviceStorageRequestParent*) override;
--
-   virtual PBlobParent*
-   AllocPBlobParent(const BlobConstructorParams& aParams) override;
-   virtual bool DeallocPBlobParent(PBlobParent* aActor) override;
-   virtual bool
-   RecvPBlobConstructor(PBlobParent* aActor,
-                        const BlobConstructorParams& params) override;
-@@ -927,21 +921,16 @@ private:
-                               const IPC::Principal& aPrincipal,
-                               nsTArray<StructuredCloneData>* aRetvals) override;
-   virtual bool RecvAsyncMessage(const nsString& aMsg,
-                                 InfallibleTArray<CpowEntry>&& aCpows,
-                                 const IPC::Principal& aPrincipal,
-                                 const ClonedMessageData& aData) override;
--  virtual bool RecvFilePathUpdateNotify(const nsString& aType,
--                                        const nsString& aStorageName,
--                                        const nsString& aFilePath,
--                                        const nsCString& aReason) override;
--
-   virtual bool RecvAddGeolocationListener(const IPC::Principal& aPrincipal,
-                                           const bool& aHighAccuracy) override;
-   virtual bool RecvRemoveGeolocationListener() override;
-   virtual bool RecvSetGeolocationHigherAccuracy(const bool& aEnable) override;
-   virtual bool RecvConsoleMessage(const nsString& aMessage) override;
-@@ -1047,21 +1036,16 @@ private:
-                                     const uint32_t& aDropEffect) override;
-   virtual bool RecvProfile(const nsCString& aProfile) override;
-   virtual bool RecvGetGraphicsDeviceInitData(ContentDeviceData* aOut) override;
-   void StartProfiler(nsIProfilerStartParams* aParams);
--  virtual bool RecvGetDeviceStorageLocation(const nsString& aType,
--                                            nsString* aPath) override;
--
--  virtual bool RecvGetDeviceStorageLocations(DeviceStorageLocationInfo* info) override;
--
-   virtual bool RecvGetAndroidSystemInfo(AndroidSystemInfo* aInfo) override;
-   virtual bool RecvNotifyBenchmarkResult(const nsString& aCodecName,
-                                          const uint32_t& aDecodeFPS) override;
-   virtual bool RecvNotifyPushObservers(const nsCString& aScope,
-                                        const IPC::Principal& aPrincipal,
-                                        const nsString& aMessageId) override;
-diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl
---- a/dom/ipc/PContent.ipdl
-+++ b/dom/ipc/PContent.ipdl
-@@ -10,17 +10,16 @@ include protocol PBrowser;
- include protocol PCompositorBridge;
- include protocol PContentBridge;
- include protocol PContentPermissionRequest;
- include protocol PCycleCollectWithLogs;
- include protocol PCrashReporter;
- include protocol PPSMContentDownloader;
- include protocol PExternalHelperApp;
- include protocol PHandlerService;
--include protocol PDeviceStorageRequest;
- include protocol PFileDescriptorSet;
- include protocol PHal;
- include protocol PHeapSnapshotTempFileHelper;
- include protocol PProcessHangMonitor;
- include protocol PImageBridge;
- include protocol PMedia;
- include protocol PMemoryReportRequest;
- include protocol PNecko;
-@@ -111,130 +110,16 @@ struct FontListEntry {
-     nsCString filepath;
-     uint16_t  weight;
-     int16_t   stretch;
-     uint8_t   italic;
-     uint8_t   index;
-     bool      isHidden;
- };
--struct DeviceStorageFreeSpaceParams
--{
--  nsString type;
--  nsString storageName;
--};
--
--struct DeviceStorageUsedSpaceParams
--{
--  nsString type;
--  nsString storageName;
--};
--
--struct DeviceStorageAvailableParams
--{
--  nsString type;
--  nsString storageName;
--};
--
--struct DeviceStorageStatusParams
--{
--  nsString type;
--  nsString storageName;
--};
--
--struct DeviceStorageFormatParams
--{
--  nsString type;
--  nsString storageName;
--};
--
--struct DeviceStorageMountParams
--{
--  nsString type;
--  nsString storageName;
--};
--
--struct DeviceStorageUnmountParams
--{
--  nsString type;
--  nsString storageName;
--};
--
--struct DeviceStorageAddParams
--{
--  nsString type;
--  nsString storageName;
--  nsString relpath;
--  PBlob blob;
--};
--
--struct DeviceStorageAppendParams
--{
--  nsString type;
--  nsString storageName;
--  nsString relpath;
--  PBlob blob;
--};
--
--struct DeviceStorageCreateFdParams
--{
--  nsString type;
--  nsString storageName;
--  nsString relpath;
--};
--
--struct DeviceStorageGetParams
--{
--  nsString type;
--  nsString storageName;
--  nsString rootDir;
--  nsString relpath;
--};
--
--struct DeviceStorageDeleteParams
--{
--  nsString type;
--  nsString storageName;
--  nsString relpath;
--};
--
--struct DeviceStorageEnumerationParams
--{
--  nsString type;
--  nsString storageName;
--  nsString rootdir;
--  uint64_t since;
--};
--
--union DeviceStorageParams
--{
--  DeviceStorageAddParams;
--  DeviceStorageAppendParams;
--  DeviceStorageCreateFdParams;
--  DeviceStorageGetParams;
--  DeviceStorageDeleteParams;
--  DeviceStorageEnumerationParams;
--  DeviceStorageFreeSpaceParams;
--  DeviceStorageUsedSpaceParams;
--  DeviceStorageAvailableParams;
--  DeviceStorageStatusParams;
--  DeviceStorageFormatParams;
--  DeviceStorageMountParams;
--  DeviceStorageUnmountParams;
--};
--
--struct DeviceStorageLocationInfo {
--  nsString music;
--  nsString pictures;
--  nsString videos;
--  nsString sdcard;
--  nsString apps;
--  nsString crashes;
--};
--
- union PrefValue {
-   nsCString;
-   int32_t;
-   bool;
- };
- union MaybePrefValue {
-   PrefValue;
-@@ -355,17 +240,16 @@ nested(upto inside_cpow) sync protocol P
-     parent opens PGMPService;
-     child opens PBackground;
-     manages PBlob;
-     manages PBrowser;
-     manages PContentPermissionRequest;
-     manages PCrashReporter;
-     manages PCycleCollectWithLogs;
--    manages PDeviceStorageRequest;
-     manages PPSMContentDownloader;
-     manages PExternalHelperApp;
-     manages PFileDescriptorSet;
-     manages PHal;
-     manages PHandlerService;
-     manages PHeapSnapshotTempFileHelper;
-     manages PMedia;
-     manages PMemoryReportRequest;
-@@ -538,19 +422,16 @@ child:
-     /**
-      * Send BlobURLRegistrationData to child process.
-      */
-     async InitBlobURLs(BlobURLRegistrationData[] registrations);
-     // Notify child that last-pb-context-exited notification was observed
-     async LastPrivateDocShellDestroyed();
--    async FilePathUpdate(nsString storageType, nsString storageName, nsString filepath,
--                         nsCString reasons);
--
-     // Note: Any changes to this structure should also be changed in
-     // VolumeInfo above.
-     async FileSystemUpdate(nsString fsName, nsString mountPoint, int32_t fsState,
-                            int32_t mountGeneration, bool isMediaPresent,
-                            bool isSharing, bool isFormatting, bool isFake,
-                            bool isUnmounting, bool isRemovable, bool isHotSwappable);
-     // Notify volume is removed.
-@@ -738,17 +619,16 @@ parent:
-      * process. |newPluginEpoch| is the current epoch in the chrome process. If
-      * |pluginEpoch == newPluginEpoch|, then |plugins| will be left empty.
-      */
-     sync FindPlugins(uint32_t pluginEpoch) returns (nsresult aResult, PluginTag[] plugins, uint32_t newPluginEpoch);
-     async PJavaScript();
-     async PRemoteSpellcheckEngine();
--    async PDeviceStorageRequest(DeviceStorageParams params);
-     sync PCrashReporter(NativeThreadId tid, uint32_t processType);
-     /**
-      * Is this token compatible with the provided version?
-      *
-      * |version| The offered version to test
-      * Returns |True| if the offered version is compatible
-@@ -921,21 +801,16 @@ parent:
-     async FirstIdle();
-     async AudioChannelServiceStatus(bool aActiveTelephonyChannel,
-                                     bool aContentOrNormalChannel,
-                                     bool aAnyActiveChannel);
-     async AudioChannelChangeDefVolChannel(int32_t aChannel, bool aHidden);
--    async FilePathUpdateNotify(nsString aType,
--                               nsString aStorageName,
--                               nsString aFilepath,
--                               nsCString aReason);
--
-     // called by the child (test code only) to propagate volume changes to the parent
-     async CreateFakeVolume(nsString fsName, nsString mountPoint);
-     async SetFakeVolumeState(nsString fsName, int32_t fsState);
-     async RemoveFakeVolume(nsString fsName);
-     sync KeywordToURI(nsCString keyword)
-         returns (nsString providerName, OptionalInputStreamParams postData, OptionalURIParams uri);
-@@ -1108,22 +983,16 @@ parent:
-                       float aFullZoom)
-       returns (nsresult rv,
-                bool windowOpened,
-                FrameScriptInfo[] frameScripts,
-                nsCString urlToLoad,
-                TextureFactoryIdentifier textureFactoryIdentifier,
-                uint64_t layersId);
--    sync GetDeviceStorageLocation(nsString type)
--        returns (nsString path);
--
--    sync GetDeviceStorageLocations()
--      returns (DeviceStorageLocationInfo info);
--
-     sync GetAndroidSystemInfo()
-         returns (AndroidSystemInfo info);
-     /**
-      * Tells the parent to ungrab the pointer on the default display.
-      *
-      * This is for GTK platforms where we have to ensure the pointer ungrab happens in the
-      * chrome process as that's the process that receives the pointer event.
-diff --git a/dom/ipc/moz.build b/dom/ipc/moz.build
---- a/dom/ipc/moz.build
-+++ b/dom/ipc/moz.build
-@@ -120,17 +120,16 @@ if CONFIG['MOZ_CONTENT_SANDBOX'] and CON
-         'mozsandbox',
-     ]
- LOCAL_INCLUDES += [
-     '/caps',
-     '/chrome',
-     '/docshell/base',
-     '/dom/base',
--    '/dom/devicestorage',
-     '/dom/events',
-     '/dom/filesystem',
-     '/dom/geolocation',
-     '/dom/media/webspeech/synth/ipc',
-     '/dom/security',
-     '/dom/storage',
-     '/dom/workers',
-     '/embedding/components/printingui/ipc',
-diff --git a/dom/moz.build b/dom/moz.build
---- a/dom/moz.build
-+++ b/dom/moz.build
-@@ -42,17 +42,16 @@ DIRS += [
-     'base',
-     'archivereader',
-     'bindings',
-     'battery',
-     'browser-element',
-     'cache',
-     'canvas',
-     'crypto',
--    'devicestorage',
-     'encoding',
-     'events',
-     'fetch',
-     'filehandle',
-     'filesystem',
-     'flyweb',
-     'gamepad',
-     'geolocation',
-diff --git a/dom/webidl/DeviceStorage.webidl b/dom/webidl/DeviceStorage.webidl
-deleted file mode 100644
---- a/dom/webidl/DeviceStorage.webidl
-+++ /dev/null
-@@ -1,95 +0,0 @@
--/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
--/* This Source Code Form is subject to the terms of the Mozilla Public
-- * License, v. 2.0. If a copy of the MPL was not distributed with this
-- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--
--dictionary DeviceStorageEnumerationParameters {
--  Date since;
--};
--
--[Pref="device.storage.enabled"]
--interface DeviceStorage : EventTarget {
--  attribute EventHandler onchange;
--
--  [Throws]
--  DOMRequest? add(Blob? aBlob);
--  [Throws]
--  DOMRequest? addNamed(Blob? aBlob, DOMString aName);
--
--  /**
--   * Append data to a given file.
--   * If the file doesn't exist, a "NotFoundError" event will be dispatched.
--   * In the same time, it is a request.onerror case.
--   * If the file exists, it will be opened with the following permission:
--   *                                                "PR_WRONLY|PR_CREATE_FILE|PR_APPEND".
--   * The function will return null when blob file is null and other unexpected situations.
--   * @parameter aBlob: A Blob object representing the data to append
--   * @parameter aName: A string representing the full name (path + file name) of the file
--   *                   to append data to.
--   */
--  [Throws]
--  DOMRequest? appendNamed(Blob? aBlob, DOMString aName);
--
--  [Throws]
--  DOMRequest get(DOMString aName);
--  [Throws]
--  DOMRequest getEditable(DOMString aName);
--  [Throws]
--  DOMRequest delete(DOMString aName);
--
--  [Throws]
--  DOMCursor enumerate(optional DeviceStorageEnumerationParameters options);
--  [Throws]
--  DOMCursor enumerate(DOMString path,
--                      optional DeviceStorageEnumerationParameters options);
--  [Throws]
--  DOMCursor enumerateEditable(optional DeviceStorageEnumerationParameters options);
--  [Throws]
--  DOMCursor enumerateEditable(DOMString path,
--                              optional DeviceStorageEnumerationParameters options);
--
--  [Throws]
--  DOMRequest freeSpace();
--  [Throws]
--  DOMRequest usedSpace();
--  [Throws]
--  DOMRequest available();
--  [Throws]
--  DOMRequest storageStatus();
--  [Throws]
--  DOMRequest format();
--  [Throws]
--  DOMRequest mount();
--  [Throws]
--  DOMRequest unmount();
--
--  // Note that the storageName is just a name (like sdcard), and doesn't
--  // include any path information.
--  readonly attribute DOMString storageName;
--
--  // Indicates if the storage area denoted by storageName is capable of
--  // being mounted and unmounted.
--  readonly attribute boolean canBeMounted;
--
--  // Indicates if the storage area denoted by storageName is capable of
--  // being shared and unshared.
--  readonly attribute boolean canBeShared;
--
--  // Indicates if the storage area denoted by storageName is capable of
--  // being formatted.
--  readonly attribute boolean canBeFormatted;
--
--  // Determines if this storage area is the one which will be used by default
--  // for storing new files.
--  readonly attribute boolean default;
--
--  // Indicates if the storage area denoted by storageName is removable
--  readonly attribute boolean isRemovable;
--
--  // True if the storage area is close to being full
--  readonly attribute boolean lowDiskSpace;
--
--  [NewObject]
--  // XXXbz what type does this really return?
--  Promise<any> getRoot();
--};
-diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build
---- a/dom/webidl/moz.build
-+++ b/dom/webidl/moz.build
-@@ -104,17 +104,16 @@ WEBIDL_FILES = [
-     'DataTransfer.webidl',
-     'DataTransferItem.webidl',
-     'DataTransferItemList.webidl',
-     'DecoderDoctorNotification.webidl',
-     'DedicatedWorkerGlobalScope.webidl',
-     'DelayNode.webidl',
-     'DesktopNotification.webidl',
-     'DeviceMotionEvent.webidl',
--    'DeviceStorage.webidl',
-     'Directory.webidl',
-     'Document.webidl',
-     'DocumentFragment.webidl',
-     'DocumentTimeline.webidl',
-     'DocumentType.webidl',
-     'DOMCursor.webidl',
-     'DOMError.webidl',
-     'DOMException.webidl',
-diff --git a/layout/build/nsLayoutStatics.cpp b/layout/build/nsLayoutStatics.cpp
---- a/layout/build/nsLayoutStatics.cpp
-+++ b/layout/build/nsLayoutStatics.cpp
-@@ -122,17 +122,16 @@ using namespace mozilla::system;
- #include "mozilla/dom/CustomElementRegistry.h"
- #include "mozilla/dom/time/DateCacheCleaner.h"
- #include "mozilla/EventDispatcher.h"
- #include "mozilla/IMEStateManager.h"
- #include "mozilla/dom/HTMLVideoElement.h"
- #include "TouchManager.h"
- #include "MediaDecoder.h"
- #include "MediaPrefs.h"
--#include "mozilla/dom/devicestorage/DeviceStorageStatics.h"
- #include "mozilla/ServoBindings.h"
- #include "mozilla/StaticPresData.h"
- #include "mozilla/dom/WebIDLGlobalNameHash.h"
- using namespace mozilla;
- using namespace mozilla::net;
- using namespace mozilla::dom;
- using namespace mozilla::dom::ipc;
-@@ -303,18 +302,16 @@ nsLayoutStatics::Initialize()
-   nsStyleContext::Initialize();
-   mozilla::LayerAnimationInfo::Initialize();
- #endif
-   MediaDecoder::InitStatics();
-   PromiseDebugging::Init();
--  mozilla::dom::devicestorage::DeviceStorageStatics::Initialize();
--
-   mozilla::dom::WebCryptoThreadPool::Initialize();
-   // NB: We initialize servo in nsAppRunner.cpp, because we need to do it after
-   // creating the hidden DOM window to support some current stylo hacks. We
-   // should move initialization back here once those go away.
- #ifndef MOZ_WIDGET_ANDROID
-   // On Android, we instantiate it when constructing AndroidBridge.
-diff --git a/mobile/android/components/ContentPermissionPrompt.js b/mobile/android/components/ContentPermissionPrompt.js
---- a/mobile/android/components/ContentPermissionPrompt.js
-+++ b/mobile/android/components/ContentPermissionPrompt.js
-@@ -8,20 +8,16 @@ const Cu = Components.utils;
- const Cc = Components.classes;
- Cu.import("resource://gre/modules/XPCOMUtils.jsm");
- Cu.import("resource://gre/modules/Services.jsm");
- const kEntities = {
-   "contacts": "contacts",
-   "desktop-notification": "desktopNotification2",
--  "device-storage:music": "deviceStorageMusic",
--  "device-storage:pictures": "deviceStoragePictures",
--  "device-storage:sdcard": "deviceStorageSdcard",
--  "device-storage:videos": "deviceStorageVideos",
-   "geolocation": "geolocation",
-   "flyweb-publish-server": "flyWebPublishServer",
- };
- // For these types, prompt for permission if action is unknown.
- const PROMPT_FOR_UNKNOWN = [
-   "desktop-notification",
-   "geolocation",
-diff --git a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
---- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
-+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
-@@ -2198,54 +2198,16 @@ public class GeckoAppShell
-         return null;
-     }
-     @WrapForJNI
-     private static String connectionGetMimeType(URLConnection connection) {
-         return connection.getContentType();
-     }
--    /**
--     * Retrieve the absolute path of an external storage directory.
--     *
--     * @param type The type of directory to return
--     * @return Absolute path of the specified directory or null on failure
--     */
--    @WrapForJNI(calledFrom = "gecko")
--    private static String getExternalPublicDirectory(final String type) {
--        final String state = Environment.getExternalStorageState();
--        if (!Environment.MEDIA_MOUNTED.equals(state) &&
--            !Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
--            // External storage is not available.
--            return null;
--        }
--
--        if ("sdcard".equals(type)) {
--            // SD card has a separate path.
--            return Environment.getExternalStorageDirectory().getAbsolutePath();
--        }
--
--        final String systemType;
--        if ("downloads".equals(type)) {
--            systemType = Environment.DIRECTORY_DOWNLOADS;
--        } else if ("pictures".equals(type)) {
--            systemType = Environment.DIRECTORY_PICTURES;
--        } else if ("videos".equals(type)) {
--            systemType = Environment.DIRECTORY_MOVIES;
--        } else if ("music".equals(type)) {
--            systemType = Environment.DIRECTORY_MUSIC;
--        } else if ("apps".equals(type)) {
--            File appInternalStorageDirectory = getApplicationContext().getFilesDir();
--            return new File(appInternalStorageDirectory, "mozilla").getAbsolutePath();
--        } else {
--            return null;
--        }
--        return Environment.getExternalStoragePublicDirectory(systemType).getAbsolutePath();
--    }
--
-     @WrapForJNI(calledFrom = "gecko")
-     private static int getMaxTouchPoints() {
-         PackageManager pm = getApplicationContext().getPackageManager();
-         if (pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND)) {
-             // at least, 5+ fingers.
-             return 5;
-         } else if (pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT)) {
-             // at least, 2+ fingers.
-diff --git a/netwerk/test/mochitests/signed_web_packaged_app.sjs b/netwerk/test/mochitests/signed_web_packaged_app.sjs
---- a/netwerk/test/mochitests/signed_web_packaged_app.sjs
-+++ b/netwerk/test/mochitests/signed_web_packaged_app.sjs
-@@ -35,19 +35,16 @@ Content-Type: application/x-web-app-mani
-       "src": "scripts/library.js",
-       "integrity": "TN2ByXZiaBiBCvS4MeZ02UyNi44vED+KjdjLInUl4o8="
-     }
-   ],
-   "moz-permissions": [
-     {
-       "systemXHR": {
-         "description": "Needed to download stuff"
--      },
--      "devicestorage:pictures": {
--        "description": "Need to load pictures"
-       }
-     }
-   ],
-   "package-identifier": "09bc9714-7ab6-4320-9d20-fde4c237522c",
-   "description": "A great app!"
- }\r
- --NKWXJUAFXB\r
- Content-Location: page2.html\r
-diff --git a/toolkit/components/jsdownloads/src/DownloadIntegration.jsm b/toolkit/components/jsdownloads/src/DownloadIntegration.jsm
---- a/toolkit/components/jsdownloads/src/DownloadIntegration.jsm
-+++ b/toolkit/components/jsdownloads/src/DownloadIntegration.jsm
-@@ -268,53 +268,16 @@ this.DownloadIntegration = {
-     // Add the view used for detecting changes to downloads to be persisted.
-     // We must do this after the list of persistent downloads has been loaded,
-     // even if the load operation failed. We wait for a complete initialization
-     // so other callers cannot modify the list without being detected. The
-     // DownloadAutoSaveView is kept alive by the underlying DownloadList.
-     yield new DownloadAutoSaveView(list, this._store).initialize();
-   }),
--#ifdef MOZ_WIDGET_GONK
--  /**
--    * Finds the default download directory which can be either in the
--    * internal storage or on the sdcard.
--    *
--    * @return {Promise}
--    * @resolves The downloads directory string path.
--    */
--  _getDefaultDownloadDirectory: Task.async(function* () {
--    let directoryPath;
--    let win = Services.wm.getMostRecentWindow("navigator:browser");
--    let storages = win.navigator.getDeviceStorages("sdcard");
--    let preferredStorageName;
--    // Use the first one or the default storage.
--    storages.forEach((aStorage) => {
--      if (aStorage.default || !preferredStorageName) {
--        preferredStorageName = aStorage.storageName;
--      }
--    });
--
--    // Now get the path for this storage area.
--    if (preferredStorageName) {
--      let volume = volumeService.getVolumeByName(preferredStorageName);
--      if (volume && volume.state === Ci.nsIVolume.STATE_MOUNTED){
--        directoryPath = OS.Path.join(volume.mountPoint, "downloads");
--        yield OS.File.makeDir(directoryPath, { ignoreExisting: true });
--      }
--    }
--    if (directoryPath) {
--      return directoryPath;
--    } else {
--      throw new Components.Exception("No suitable storage for downloads.",
--                                     Cr.NS_ERROR_FILE_UNRECOGNIZED_PATH);
--    }
--  }),
--#endif
--
-   /**
-    * Determines if a Download object from the list of persistent downloads
-    * should be saved into a file, so that it can be restored across sessions.
-    *
-    * This function allows filtering out downloads that the host application is
-    * not interested in persisting across sessions, for example downloads that
-    * finished successfully.
-    *
-@@ -377,18 +340,16 @@ this.DownloadIntegration = {
- #ifdef MOZ_WIDGET_ANDROID
-     // Android doesn't have a $HOME directory, and by default we only have
-     // write access to /data/data/org.mozilla.{$APP} and /sdcard
-     directoryPath = gEnvironment.get("DOWNLOADS_DIRECTORY");
-     if (!directoryPath) {
-       throw new Components.Exception("DOWNLOADS_DIRECTORY is not set.",
-                                      Cr.NS_ERROR_FILE_UNRECOGNIZED_PATH);
-     }
--#elifdef MOZ_WIDGET_GONK
--    directoryPath = this._getDefaultDownloadDirectory();
- #else
-     // For Linux, use XDG download dir, with a fallback to Home/Downloads
-     // if the XDG user dirs are disabled.
-     try {
-       directoryPath = this._getDirectory("DfltDwnld");
-     } catch(e) {
-       directoryPath = yield this._createDownloadsDirectory("Home");
-     }
-@@ -405,19 +366,16 @@ this.DownloadIntegration = {
-   /**
-    * Returns the user downloads directory asynchronously.
-    *
-    * @return {Promise}
-    * @resolves The downloads directory string path.
-    */
-   getPreferredDownloadsDirectory: Task.async(function* () {
-     let directoryPath = null;
--#ifdef MOZ_WIDGET_GONK
--    directoryPath = this._getDefaultDownloadDirectory();
--#else
-     let prefValue = 1;
-     try {
-       prefValue = Services.prefs.getIntPref("browser.download.folderList");
-     } catch(e) {}
-     switch(prefValue) {
-       case 0: // Desktop
-@@ -435,17 +393,16 @@ this.DownloadIntegration = {
-         } catch(ex) {
-           // Either the preference isn't set or the directory cannot be created.
-           directoryPath = yield this.getSystemDownloadsDirectory();
-         }
-         break;
-       default:
-         directoryPath = yield this.getSystemDownloadsDirectory();
-     }
--#endif
-     return directoryPath;
-   }),
-   /**
-    * Returns the temporary downloads directory asynchronously.
-    *
-    * @return {Promise}
-    * @resolves The downloads directory string path.
-diff --git a/toolkit/components/jsdownloads/src/DownloadPlatform.cpp b/toolkit/components/jsdownloads/src/DownloadPlatform.cpp
---- a/toolkit/components/jsdownloads/src/DownloadPlatform.cpp
-+++ b/toolkit/components/jsdownloads/src/DownloadPlatform.cpp
-@@ -185,28 +185,16 @@ nsresult DownloadPlatform::DownloadDone(
-       if (sourceCFURL) {
-         ::CFRelease(sourceCFURL);
-       }
-       if (referrerCFURL) {
-         ::CFRelease(referrerCFURL);
-       }
-     }
- #endif
--    if (mozilla::Preferences::GetBool("device.storage.enabled", true)) {
--      // Tell DeviceStorage that a new file may have been added.
--      nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
--      nsCOMPtr<nsISupportsString> pathString
--        = do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID);
--      if (obs && pathString) {
--        if (NS_SUCCEEDED(pathString->SetData(path))) {
--          (void)obs->NotifyObservers(pathString, "download-watcher-notify",
--                                     u"modified");
--        }
--      }
--    }
-   }
- #endif
-   return NS_OK;
- }
- nsresult DownloadPlatform::MapUrlToZone(const nsAString& aURL,
-diff --git a/toolkit/components/jsdownloads/test/unit/common_test_Download.js b/toolkit/components/jsdownloads/test/unit/common_test_Download.js
---- a/toolkit/components/jsdownloads/test/unit/common_test_Download.js
-+++ b/toolkit/components/jsdownloads/test/unit/common_test_Download.js
-@@ -2315,103 +2315,16 @@ add_task(function* test_toSerializable_s
-   let download2 = yield Downloads.createDownload(reserialized);
-   do_check_eq(download1.startTime.constructor.name, "Date");
-   do_check_eq(download2.startTime.constructor.name, "Date");
-   do_check_eq(download1.startTime.toJSON(), download2.startTime.toJSON());
- });
- /**
-- * This test will call the platform specific operations within
-- * DownloadPlatform::DownloadDone. While there is no test to verify the
-- * specific behaviours, this at least ensures that there is no error or crash.
-- */
--add_task(function* test_platform_integration()
--{
--  let downloadFiles = [];
--  let oldDeviceStorageEnabled = false;
--  try {
--     oldDeviceStorageEnabled = Services.prefs.getBoolPref("device.storage.enabled");
--  } catch (e) {
--    // This happens if the pref doesn't exist.
--  }
--  let downloadWatcherNotified = false;
--  let observer = {
--    observe: function(subject, topic, data) {
--      do_check_eq(topic, "download-watcher-notify");
--      do_check_eq(data, "modified");
--      downloadWatcherNotified = true;
--    }
--  }
--  Services.obs.addObserver(observer, "download-watcher-notify", false);
--  Services.prefs.setBoolPref("device.storage.enabled", true);
--  let downloadDoneCalled = false;
--  let monitorFn = base => ({
--    __proto__: base,
--    downloadDone() {
--      return super.downloadDone(...arguments).then(() => {
--        downloadDoneCalled = true;
--      });
--    },
--  });
--  Integration.downloads.register(monitorFn);
--  DownloadIntegration.allowDirectories = true;
--  function cleanup() {
--    for (let file of downloadFiles) {
--      file.remove(true);
--    }
--    Services.obs.removeObserver(observer, "download-watcher-notify");
--    Services.prefs.setBoolPref("device.storage.enabled", oldDeviceStorageEnabled);
--    Integration.downloads.unregister(monitorFn);
--    DownloadIntegration.allowDirectories = false;
--  }
--
--  for (let isPrivate of [false, true]) {
--    downloadDoneCalled = false;
--
--    // Some platform specific operations only operate on files outside the
--    // temporary directory or in the Downloads directory (such as setting
--    // the Windows searchable attribute, and the Mac Downloads icon bouncing),
--    // so use the system Downloads directory for the target file.
--    let targetFilePath = yield DownloadIntegration.getSystemDownloadsDirectory();
--    targetFilePath = OS.Path.join(targetFilePath,
--                                  "test" + (Math.floor(Math.random() * 1000000)));
--    let targetFile = new FileUtils.File(targetFilePath);
--    downloadFiles.push(targetFile);
--
--    let download;
--    if (gUseLegacySaver) {
--      download = yield promiseStartLegacyDownload(httpUrl("source.txt"),
--                                                  { isPrivate, targetFile });
--    }
--    else {
--      download = yield Downloads.createDownload({
--        source: { url: httpUrl("source.txt"), isPrivate },
--        target: targetFile,
--      });
--      download.start().catch(() => {});
--    }
--
--    // Wait for the whenSucceeded promise to be resolved first.
--    // downloadDone should be called before the whenSucceeded promise is resolved.
--    yield download.whenSucceeded().then(function () {
--      do_check_true(downloadDoneCalled);
--      do_check_true(downloadWatcherNotified);
--    });
--
--    // Then, wait for the promise returned by "start" to be resolved.
--    yield promiseDownloadStopped(download);
--
--    yield promiseVerifyTarget(download.target, TEST_DATA_SHORT);
--  }
--
--  cleanup();
--});
--
--/**
-  * Checks that downloads are added to browsing history when they start.
-  */
- add_task(function* test_history()
- {
-   mustInterruptResponses();
-   // We will wait for the visit to be notified during the download.
-   yield PlacesTestUtils.clearHistory();
-diff --git a/toolkit/content/devicestorage.properties b/toolkit/content/devicestorage.properties
-deleted file mode 100644
---- a/toolkit/content/devicestorage.properties
-+++ /dev/null
-@@ -1,4 +0,0 @@
--# Extensions we recognize for DeviceStorage storage areas
--pictures=*.jpe; *.jpg; *.jpeg; *.gif; *.png; *.bmp;
--music=*.mp3; *.oga; *.ogg; *.m4a; *.m4b; *.m4p; *.m4r; *.3gp; *.3gpp; *.mp4; *.m3u; *.pls; *.opus; *.amr; *.wav; *.lcka; *.mka; *.flac;
--videos=*.mp4; *.mpeg; *.mpg; *.ogv; *.ogx; *.webm; *.3gp; *.3gpp; *.3g2; *.ogg; *.m4v; *.ts; *.m2ts; *.avi; *.divx; *.mkv;
-diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
---- a/toolkit/content/jar.mn
-+++ b/toolkit/content/jar.mn
-@@ -40,17 +40,16 @@ toolkit.jar:
-    content/global/browser-content.js
- *   content/global/buildconfig.html
-    content/global/contentAreaUtils.js
- #ifndef MOZ_ICECATMOBILE
-    content/global/customizeToolbar.css
-    content/global/customizeToolbar.js
-    content/global/customizeToolbar.xul
- #endif
--   content/global/devicestorage.properties
- #ifndef MOZ_ICECATMOBILE
-    content/global/editMenuOverlay.js
- *  content/global/editMenuOverlay.xul
-    content/global/finddialog.js
- *  content/global/finddialog.xul
-    content/global/findUtils.js
- #endif
-    content/global/filepicker.properties
-@@ -113,9 +112,9 @@ toolkit.jar:
-    content/global/bindings/videocontrols.css   (widgets/videocontrols.css)
- *  content/global/bindings/wizard.xml          (widgets/wizard.xml)
- #ifdef XP_MACOSX
-    content/global/macWindowMenu.js
- #endif
-    content/global/svg/svgBindings.xml          (/layout/svg/resources/content/svgBindings.xml)
-    content/global/gmp-sources/eme-adobe.json   (gmp-sources/eme-adobe.json)
-    content/global/gmp-sources/openh264.json    (gmp-sources/openh264.json)
--   content/global/gmp-sources/widevinecdm.json (gmp-sources/widevinecdm.json)
-\ No newline at end of file
-+   content/global/gmp-sources/widevinecdm.json (gmp-sources/widevinecdm.json)
-diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp
---- a/uriloader/exthandler/nsExternalHelperAppService.cpp
-+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
-@@ -101,20 +101,16 @@
- #ifdef MOZ_WIDGET_ANDROID
- #include "IceCatMobileJNIWrappers.h"
- #endif
- #include "mozilla/Preferences.h"
- #include "mozilla/ipc/URIUtils.h"
--#ifdef MOZ_WIDGET_GONK
--#include "nsDeviceStorage.h"
--#endif
--
- using namespace mozilla;
- using namespace mozilla::ipc;
- // Download Folder location constants
- #define NS_PREF_DOWNLOAD_DIR        "browser.download.dir"
- #define NS_PREF_DOWNLOAD_FOLDERLIST "browser.download.folderList"
- enum {
-   NS_FOLDER_VALUE_DESKTOP = 0
-@@ -321,65 +317,16 @@ static nsresult GetDownloadDirectory(nsI
-   }
-   if (!dir) {
-     // If not, we default to the OS X default download location.
-     nsresult rv = NS_GetSpecialDirectory(NS_OSX_DEFAULT_DOWNLOAD_DIR,
-                                          getter_AddRefs(dir));
-     NS_ENSURE_SUCCESS(rv, rv);
-   }
--#elif defined(MOZ_WIDGET_GONK)
--  // On Gonk, store the files on the sdcard in the downloads directory.
--  // We need to check with the volume manager which storage point is
--  // available.
--
--  // Pick the default storage in case multiple (internal and external) ones
--  // are available.
--  nsString storageName;
--  nsDOMDeviceStorage::GetDefaultStorageName(NS_LITERAL_STRING("sdcard"),
--                                            storageName);
--
--  RefPtr<DeviceStorageFile> dsf(
--    new DeviceStorageFile(NS_LITERAL_STRING("sdcard"),
--                          storageName,
--                          NS_LITERAL_STRING("downloads")));
--  NS_ENSURE_TRUE(dsf->mFile, NS_ERROR_FILE_ACCESS_DENIED);
--
--  // If we're not checking for availability we're done.
--  if (aSkipChecks) {
--    dsf->mFile.forget(_directory);
--    return NS_OK;
--  }
--
--  // Check device storage status before continuing.
--  nsString storageStatus;
--  dsf->GetStatus(storageStatus);
--
--  // If we get an "unavailable" status, it means the sd card is not present.
--  // We'll also catch internal errors by looking for an empty string and assume
--  // the SD card isn't present when this occurs.
--  if (storageStatus.EqualsLiteral("unavailable") ||
--      storageStatus.IsEmpty()) {
--    return NS_ERROR_FILE_NOT_FOUND;
--  }
--
--  // If we get a status other than 'available' here it means the card is busy
--  // because it's mounted via USB or it is being formatted.
--  if (!storageStatus.EqualsLiteral("available")) {
--    return NS_ERROR_FILE_ACCESS_DENIED;
--  }
--
--  bool alreadyThere;
--  nsresult rv = dsf->mFile->Exists(&alreadyThere);
--  NS_ENSURE_SUCCESS(rv, rv);
--  if (!alreadyThere) {
--    rv = dsf->mFile->Create(nsIFile::DIRECTORY_TYPE, 0770);
--    NS_ENSURE_SUCCESS(rv, rv);
--  }
--  dir = dsf->mFile;
- #elif defined(ANDROID)
-   // We ask Java for the temporary download directory. The directory will be
-   // different depending on whether we have the permission to write to the
-   // public download directory or not.
-   // In the case where we do not have the permission we will start the
-   // download to the app cache directory and later move it to the final
-   // destination after prompting for the permission.
-   jni::String::LocalRef downloadDir;
-diff --git a/widget/android/AndroidBridge.cpp b/widget/android/AndroidBridge.cpp
---- a/widget/android/AndroidBridge.cpp
-+++ b/widget/android/AndroidBridge.cpp
-@@ -1119,42 +1119,8 @@ nsresult AndroidBridge::InputStreamRead(
-     if (read <= 0) {
-         *aRead = 0;
-         return NS_OK;
-     }
-     *aRead = read;
-     return NS_OK;
- }
--
--nsresult AndroidBridge::GetExternalPublicDirectory(const nsAString& aType, nsAString& aPath) {
--    if (XRE_IsContentProcess()) {
--        nsString key(aType);
--        nsAutoString path;
--        if (AndroidBridge::sStoragePaths.Get(key, &path)) {
--            aPath = path;
--            return NS_OK;
--        }
--
--        // Lazily get the value from the parent.
--        dom::ContentChild* child = dom::ContentChild::GetSingleton();
--        if (child) {
--          nsAutoString type(aType);
--          child->SendGetDeviceStorageLocation(type, &path);
--          if (!path.IsEmpty()) {
--            AndroidBridge::sStoragePaths.Put(key, path);
--            aPath = path;
--            return NS_OK;
--          }
--        }
--
--        ALOG_BRIDGE("AndroidBridge::GetExternalPublicDirectory no cache for %s",
--              NS_ConvertUTF16toUTF8(aType).get());
--        return NS_ERROR_NOT_AVAILABLE;
--    }
--
--    auto path = GeckoAppShell::GetExternalPublicDirectory(aType);
--    if (!path) {
--        return NS_ERROR_NOT_AVAILABLE;
--    }
--    aPath = path->ToString();
--    return NS_OK;
--}
-diff --git a/widget/android/AndroidBridge.h b/widget/android/AndroidBridge.h
---- a/widget/android/AndroidBridge.h
-+++ b/widget/android/AndroidBridge.h
-@@ -197,18 +197,16 @@ public:
-     static jmethodID GetStaticMethodID(JNIEnv* env, jclass jClass, const char* methodName, const char* methodType);
-     static jni::Object::LocalRef ChannelCreate(jni::Object::Param);
-     static void InputStreamClose(jni::Object::Param obj);
-     static uint32_t InputStreamAvailable(jni::Object::Param obj);
-     static nsresult InputStreamRead(jni::Object::Param obj, char *aBuf, uint32_t aCount, uint32_t *aRead);
--    static nsresult GetExternalPublicDirectory(const nsAString& aType, nsAString& aPath);
--
- protected:
-     static nsDataHashtable<nsStringHashKey, nsString> sStoragePaths;
-     static AndroidBridge* sBridge;
-     AndroidBridge();
-     ~AndroidBridge();
-diff --git a/widget/android/GeneratedJNIWrappers.cpp b/widget/android/GeneratedJNIWrappers.cpp
---- a/widget/android/GeneratedJNIWrappers.cpp
-+++ b/widget/android/GeneratedJNIWrappers.cpp
-@@ -274,24 +274,16 @@ auto GeckoAppShell::GetExceptionStackTra
- constexpr char GeckoAppShell::GetExtensionFromMimeType_t::name[];
- constexpr char GeckoAppShell::GetExtensionFromMimeType_t::signature[];
- auto GeckoAppShell::GetExtensionFromMimeType(mozilla::jni::String::Param a0) -> mozilla::jni::String::LocalRef
- {
-     return mozilla::jni::Method<GetExtensionFromMimeType_t>::Call(GeckoAppShell::Context(), nullptr, a0);
- }
--constexpr char GeckoAppShell::GetExternalPublicDirectory_t::name[];
--constexpr char GeckoAppShell::GetExternalPublicDirectory_t::signature[];
--
--auto GeckoAppShell::GetExternalPublicDirectory(mozilla::jni::String::Param a0) -> mozilla::jni::String::LocalRef
--{
--    return mozilla::jni::Method<GetExternalPublicDirectory_t>::Call(GeckoAppShell::Context(), nullptr, a0);
--}
--
- constexpr char GeckoAppShell::GetHWDecoderCapability_t::name[];
- constexpr char GeckoAppShell::GetHWDecoderCapability_t::signature[];
- auto GeckoAppShell::GetHWDecoderCapability() -> bool
- {
-     return mozilla::jni::Method<GetHWDecoderCapability_t>::Call(GeckoAppShell::Context(), nullptr);
- }
-diff --git a/widget/android/GeneratedJNIWrappers.h b/widget/android/GeneratedJNIWrappers.h
---- a/widget/android/GeneratedJNIWrappers.h
-+++ b/widget/android/GeneratedJNIWrappers.h
-@@ -724,36 +724,16 @@ public:
-         static const mozilla::jni::CallingThread callingThread =
-                 mozilla::jni::CallingThread::GECKO;
-         static const mozilla::jni::DispatchTarget dispatchTarget =
-                 mozilla::jni::DispatchTarget::CURRENT;
-     };
-     static auto GetExtensionFromMimeType(mozilla::jni::String::Param) -> mozilla::jni::String::LocalRef;
--    struct GetExternalPublicDirectory_t {
--        typedef GeckoAppShell Owner;
--        typedef mozilla::jni::String::LocalRef ReturnType;
--        typedef mozilla::jni::String::Param SetterType;
--        typedef mozilla::jni::Args<
--                mozilla::jni::String::Param> Args;
--        static constexpr char name[] = "getExternalPublicDirectory";
--        static constexpr char signature[] =
--                "(Ljava/lang/String;)Ljava/lang/String;";
--        static const bool isStatic = true;
--        static const mozilla::jni::ExceptionMode exceptionMode =
--                mozilla::jni::ExceptionMode::ABORT;
--        static const mozilla::jni::CallingThread callingThread =
--                mozilla::jni::CallingThread::GECKO;
--        static const mozilla::jni::DispatchTarget dispatchTarget =
--                mozilla::jni::DispatchTarget::CURRENT;
--    };
--
--    static auto GetExternalPublicDirectory(mozilla::jni::String::Param) -> mozilla::jni::String::LocalRef;
--
-     struct GetHWDecoderCapability_t {
-         typedef GeckoAppShell Owner;
-         typedef bool ReturnType;
-         typedef bool SetterType;
-         typedef mozilla::jni::Args<> Args;
-         static constexpr char name[] = "getHWDecoderCapability";
-         static constexpr char signature[] =
-                 "()Z";
-diff --git a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
---- a/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
-+++ b/xpcom/reflect/xptinfo/ShimInterfaceInfo.cpp
-@@ -155,17 +155,16 @@
- #include "mozilla/dom/CSSValueBinding.h"
- #include "mozilla/dom/CSSValueListBinding.h"
- #include "mozilla/dom/CustomEventBinding.h"
- #ifdef MOZ_WEBRTC
- #include "mozilla/dom/DataChannelBinding.h"
- #endif
- #include "mozilla/dom/DataContainerEventBinding.h"
- #include "mozilla/dom/DataTransferBinding.h"
--#include "mozilla/dom/DeviceStorageBinding.h"
- #include "mozilla/dom/DOMCursorBinding.h"
- #include "mozilla/dom/DOMExceptionBinding.h"
- #include "mozilla/dom/DOMParserBinding.h"
- #include "mozilla/dom/DOMRequestBinding.h"
- #include "mozilla/dom/DocumentBinding.h"
- #include "mozilla/dom/DocumentFragmentBinding.h"
- #include "mozilla/dom/DocumentTypeBinding.h"
- #include "mozilla/dom/DocumentBinding.h"
-
diff --git a/gnu/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch b/gnu/packages/patches/libsndfile-CVE-2017-8361-8363-8365.patch
new file mode 100644 (file)
index 0000000..5f63231
--- /dev/null
@@ -0,0 +1,77 @@
+Fix CVE-2017-{8361,8363,8365}:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8361
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8363
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8365
+
+Patch copied from upstream source repository:
+
+https://github.com/erikd/libsndfile/commit/fd0484aba8e51d16af1e3a880f9b8b857b385eb3
+
+From fd0484aba8e51d16af1e3a880f9b8b857b385eb3 Mon Sep 17 00:00:00 2001
+From: Erik de Castro Lopo <erikd@mega-nerd.com>
+Date: Wed, 12 Apr 2017 19:45:30 +1000
+Subject: [PATCH] FLAC: Fix a buffer read overrun
+
+Buffer read overrun occurs when reading a FLAC file that switches
+from 2 channels to one channel mid-stream. Only option is to
+abort the read.
+
+Closes: https://github.com/erikd/libsndfile/issues/230
+---
+ src/common.h  |  1 +
+ src/flac.c    | 13 +++++++++++++
+ src/sndfile.c |  1 +
+ 3 files changed, 15 insertions(+)
+
+diff --git a/src/common.h b/src/common.h
+index 0bd810c3..e2669b6a 100644
+--- a/src/common.h
++++ b/src/common.h
+@@ -725,6 +725,7 @@ enum
+       SFE_FLAC_INIT_DECODER,
+       SFE_FLAC_LOST_SYNC,
+       SFE_FLAC_BAD_SAMPLE_RATE,
++      SFE_FLAC_CHANNEL_COUNT_CHANGED,
+       SFE_FLAC_UNKOWN_ERROR,
+       SFE_WVE_NOT_WVE,
+diff --git a/src/flac.c b/src/flac.c
+index 84de0e26..986a7b8f 100644
+--- a/src/flac.c
++++ b/src/flac.c
+@@ -434,6 +434,19 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_
+       switch (metadata->type)
+       {       case FLAC__METADATA_TYPE_STREAMINFO :
++                      if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels)
++                      {       psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n"
++                                                                      "Nothing to be but to error out.\n" ,
++                                                                      psf->sf.channels, metadata->data.stream_info.channels) ;
++                              psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
++                              return ;
++                              } ;
++
++                      if (psf->sf.channels > 0 && psf->sf.samplerate != (int) metadata->data.stream_info.sample_rate)
++                      {       psf_log_printf (psf, "Warning: FLAC stream changed sample rates from %d to %d.\n"
++                                                                      "Carrying on as if nothing happened.",
++                                                                      psf->sf.samplerate, metadata->data.stream_info.sample_rate) ;
++                              } ;
+                       psf->sf.channels = metadata->data.stream_info.channels ;
+                       psf->sf.samplerate = metadata->data.stream_info.sample_rate ;
+                       psf->sf.frames = metadata->data.stream_info.total_samples ;
+diff --git a/src/sndfile.c b/src/sndfile.c
+index 41875610..e2a87be8 100644
+--- a/src/sndfile.c
++++ b/src/sndfile.c
+@@ -245,6 +245,7 @@ ErrorStruct SndfileErrors [] =
+       {       SFE_FLAC_INIT_DECODER   , "Error : problem with initialization of the flac decoder." },
+       {       SFE_FLAC_LOST_SYNC              , "Error : flac decoder lost sync." },
+       {       SFE_FLAC_BAD_SAMPLE_RATE, "Error : flac does not support this sample rate." },
++      {       SFE_FLAC_CHANNEL_COUNT_CHANGED, "Error : flac channel changed mid stream." },
+       {       SFE_FLAC_UNKOWN_ERROR   , "Error : unknown error in flac decoder." },
+       {       SFE_WVE_NOT_WVE                 , "Error : not a WVE file." },
+-- 
+2.12.2
+
diff --git a/gnu/packages/patches/libsndfile-CVE-2017-8362.patch b/gnu/packages/patches/libsndfile-CVE-2017-8362.patch
new file mode 100644 (file)
index 0000000..5fc52a3
--- /dev/null
@@ -0,0 +1,61 @@
+Fix CVE-2017-8362:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8362
+
+Patch copied from upstream source repository:
+
+https://github.com/erikd/libsndfile/commit/ef1dbb2df1c0e741486646de40bd638a9c4cd808
+
+From ef1dbb2df1c0e741486646de40bd638a9c4cd808 Mon Sep 17 00:00:00 2001
+From: Erik de Castro Lopo <erikd@mega-nerd.com>
+Date: Fri, 14 Apr 2017 15:19:16 +1000
+Subject: [PATCH] src/flac.c: Fix a buffer read overflow
+
+A file (generated by a fuzzer) which increased the number of channels
+from one frame to the next could cause a read beyond the end of the
+buffer provided by libFLAC. Only option is to abort the read.
+
+Closes: https://github.com/erikd/libsndfile/issues/231
+---
+ src/flac.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/flac.c b/src/flac.c
+index 5a4f8c21..e4f9aaa0 100644
+--- a/src/flac.c
++++ b/src/flac.c
+@@ -169,6 +169,14 @@ flac_buffer_copy (SF_PRIVATE *psf)
+       const int32_t* const *buffer = pflac->wbuffer ;
+       unsigned i = 0, j, offset, channels, len ;
++      if (psf->sf.channels != (int) frame->header.channels)
++      {       psf_log_printf (psf, "Error: FLAC frame changed from %d to %d channels\n"
++                                                                      "Nothing to do but to error out.\n" ,
++                                                                      psf->sf.channels, frame->header.channels) ;
++              psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
++              return 0 ;
++              } ;
++
+       /*
+       **      frame->header.blocksize is variable and we're using a constant blocksize
+       **      of FLAC__MAX_BLOCK_SIZE.
+@@ -202,7 +210,6 @@ flac_buffer_copy (SF_PRIVATE *psf)
+               return 0 ;
+               } ;
+-
+       len = SF_MIN (pflac->len, frame->header.blocksize) ;
+       if (pflac->remain % channels != 0)
+@@ -436,7 +443,7 @@ sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC_
+       {       case FLAC__METADATA_TYPE_STREAMINFO :
+                       if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels)
+                       {       psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n"
+-                                                                      "Nothing to be but to error out.\n" ,
++                                                                      "Nothing to do but to error out.\n" ,
+                                                                       psf->sf.channels, metadata->data.stream_info.channels) ;
+                               psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
+                               return ;
+-- 
+2.12.2
+
diff --git a/gnu/packages/patches/libtiff-CVE-2017-7593.patch b/gnu/packages/patches/libtiff-CVE-2017-7593.patch
new file mode 100644 (file)
index 0000000..496efb7
--- /dev/null
@@ -0,0 +1,113 @@
+Fixes CVE-2017-7593 (Potential uninitialized-memory access from tif_rawdata):
+
+http://bugzilla.maptools.org/show_bug.cgi?id=2651
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7593
+https://security-tracker.debian.org/tracker/CVE-2017-7593
+
+2017-01-11 Even Rouault <even.rouault at spatialys.com>
+
+        * libtiff/tiffio.h, tif_unix.c, tif_win32.c, tif_vms.c: add
+        _TIFFcalloc()
+
+        * libtiff/tif_read.c: TIFFReadBufferSetup(): use _TIFFcalloc() to zero
+        initialize tif_rawdata.
+        Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2651
+
+/cvs/maptools/cvsroot/libtiff/ChangeLog,v  <--  ChangeLog
+new revision: 1.1208; previous revision: 1.1207
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_read.c,v  <--  libtiff/tif_read.c
+new revision: 1.53; previous revision: 1.52
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_unix.c,v  <--  libtiff/tif_unix.c
+new revision: 1.28; previous revision: 1.27
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_vms.c,v  <--  libtiff/tif_vms.c
+new revision: 1.14; previous revision: 1.13
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_win32.c,v  <--  libtiff/tif_win32.c
+new revision: 1.42; previous revision: 1.41
+/cvs/maptools/cvsroot/libtiff/libtiff/tiffio.h,v  <--  libtiff/tiffio.h
+new revision: 1.94; previous revision: 1.93
+
+diff -ru tiff-4.0.7/libtiff/tiffio.h tiff-4.0.7.new/libtiff/tiffio.h
+--- tiff-4.0.7/libtiff/tiffio.h        1969-12-31 19:00:00.000000000 -0500
++++ tiff-4.0.7.new/libtiff/tiffio.h    2017-05-05 19:08:03.772999790 -0400
+@@ -1,4 +1,4 @@
+-/* $Id: tiffio.h,v 1.92 2016-01-23 21:20:34 erouault Exp $ */
++/* $Id: tiffio.h,v 1.94 2017-01-11 19:02:49 erouault Exp $ */
+ /*
+  * Copyright (c) 1988-1997 Sam Leffler
+@@ -293,6 +293,7 @@
+  */
+ extern void* _TIFFmalloc(tmsize_t s);
++extern void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz);
+ extern void* _TIFFrealloc(void* p, tmsize_t s);
+ extern void _TIFFmemset(void* p, int v, tmsize_t c);
+ extern void _TIFFmemcpy(void* d, const void* s, tmsize_t c);
+diff -ru tiff-4.0.7/libtiff/tif_read.c tiff-4.0.7.new/libtiff/tif_read.c
+--- tiff-4.0.7/libtiff/tif_read.c      2017-05-05 19:04:09.740966642 -0400
++++ tiff-4.0.7.new/libtiff/tif_read.c  2017-05-05 18:59:11.070709441 -0400
+@@ -1,4 +1,4 @@
+-/* $Id: tif_read.c,v 1.50 2016-12-02 21:56:56 erouault Exp $ */
++/* $Id: tif_read.c,v 1.53 2017-01-11 19:02:49 erouault Exp $ */
+ /*
+  * Copyright (c) 1988-1997 Sam Leffler
+@@ -976,7 +976,9 @@
+                               "Invalid buffer size");
+                   return (0);
+               }
+-              tif->tif_rawdata = (uint8*) _TIFFmalloc(tif->tif_rawdatasize);
++              /* Initialize to zero to avoid uninitialized buffers in case of */
++              /* short reads (http://bugzilla.maptools.org/show_bug.cgi?id=2651) */
++              tif->tif_rawdata = (uint8*) _TIFFcalloc(1, tif->tif_rawdatasize);
+               tif->tif_flags |= TIFF_MYBUFFER;
+       }
+       if (tif->tif_rawdata == NULL) {
+diff -ru tiff-4.0.7/libtiff/tif_unix.c tiff-4.0.7.new/libtiff/tif_unix.c
+--- tiff-4.0.7/libtiff/tif_unix.c      1969-12-31 19:00:00.000000000 -0500
++++ tiff-4.0.7.new/libtiff/tif_unix.c  2017-05-05 19:10:48.302645187 -0400
+@@ -1,4 +1,4 @@
+-/* $Id: tif_unix.c,v 1.27 2015-08-19 02:31:04 bfriesen Exp $ */
++/* $Id: tif_unix.c,v 1.28 2017-01-11 19:02:49 erouault Exp $ */
+ /*
+  * Copyright (c) 1988-1997 Sam Leffler
+@@ -316,6 +316,14 @@
+       return (malloc((size_t) s));
+ }
++void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz)
++{
++    if( nmemb == 0 || siz == 0 )
++        return ((void *) NULL);
++
++    return calloc((size_t) nmemb, (size_t)siz);
++}
++
+ void
+ _TIFFfree(void* p)
+ {
+diff -ru tiff-4.0.7/libtiff/tif_win32.c tiff-4.0.7.new/libtiff/tif_win32.c
+--- tiff-4.0.7/libtiff/tif_win32.c     1969-12-31 19:00:00.000000000 -0500
++++ tiff-4.0.7.new/libtiff/tif_win32.c 2017-05-05 19:13:06.903399627 -0400
+@@ -1,4 +1,4 @@
+-/* $Id: tif_win32.c,v 1.41 2015-08-23 20:12:44 bfriesen Exp $ */
++/* $Id: tif_win32.c,v 1.42 2017-01-11 19:02:49 erouault Exp $ */
+ /*
+  * Copyright (c) 1988-1997 Sam Leffler
+@@ -360,6 +360,14 @@
+       return (malloc((size_t) s));
+ }
++void* _TIFFcalloc(tmsize_t nmemb, tmsize_t siz)
++{
++    if( nmemb == 0 || siz == 0 )
++        return ((void *) NULL);
++
++    return calloc((size_t) nmemb, (size_t)siz);
++}
++
+ void
+ _TIFFfree(void* p)
+ {
diff --git a/gnu/packages/patches/libtiff-CVE-2017-7594.patch b/gnu/packages/patches/libtiff-CVE-2017-7594.patch
new file mode 100644 (file)
index 0000000..d17997d
--- /dev/null
@@ -0,0 +1,54 @@
+Fixes CVE-2017-7594 (Direct leak in tif_ojpeg.c):
+
+http://bugzilla.maptools.org/show_bug.cgi?id=2659
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7594
+https://security-tracker.debian.org/tracker/CVE-2017-7594
+
+2017-01-12 Even Rouault <even.rouault at spatialys.com>
+
+        * libtiff/tif_ojpeg.c: fix leak in OJPEGReadHeaderInfoSecTablesAcTable
+        when read fails.
+        Patch by Nicolás Peña.
+        Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2659
+
+/cvs/maptools/cvsroot/libtiff/ChangeLog,v  <--  ChangeLog
+new revision: 1.1212; previous revision: 1.1211
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_ojpeg.c,v  <--  libtiff/tif_ojpeg.c
+new revision: 1.67; previous revision: 1.66
+
+Index: libtiff/libtiff/tif_ojpeg.c
+===================================================================
+RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_ojpeg.c,v
+retrieving revision 1.67
+retrieving revision 1.68
+diff -u -r1.67 -r1.68
+--- libtiff/libtiff/tif_ojpeg.c        12 Jan 2017 17:43:26 -0000      1.67
++++ libtiff/libtiff/tif_ojpeg.c        12 Jan 2017 19:23:20 -0000      1.68
+@@ -1,4 +1,4 @@
+-/* $Id: tif_ojpeg.c,v 1.66 2016-12-03 11:15:18 erouault Exp $ */
++/* $Id: tif_ojpeg.c,v 1.68 2017-01-12 19:23:20 erouault Exp $ */
+ /* WARNING: The type of JPEG encapsulation defined by the TIFF Version 6.0
+    specification is now totally obsolete and deprecated for new applications and
+@@ -1790,7 +1790,10 @@
+                       TIFFSeekFile(tif,sp->qtable_offset[m],SEEK_SET); 
+                       p=(uint32)TIFFReadFile(tif,&ob[sizeof(uint32)+5],64);
+                       if (p!=64)
++                        {
++                                _TIFFfree(ob);
+                               return(0);
++                        }
+                       sp->qtable[m]=ob;
+                       sp->sof_tq[m]=m;
+               }
+@@ -1854,7 +1857,10 @@
+                               rb[sizeof(uint32)+5+n]=o[n];
+                       p=(uint32)TIFFReadFile(tif,&(rb[sizeof(uint32)+21]),q);
+                       if (p!=q)
++                        {
++                                _TIFFfree(rb);
+                               return(0);
++                        }
+                       sp->dctable[m]=rb;
+                       sp->sos_tda[m]=(m<<4);
+               }
diff --git a/gnu/packages/patches/libtiff-multiple-UBSAN-crashes.patch b/gnu/packages/patches/libtiff-multiple-UBSAN-crashes.patch
new file mode 100644 (file)
index 0000000..2f4509f
--- /dev/null
@@ -0,0 +1,449 @@
+Fixes CVE-2017-{7595,7596,7597,7598,7599,7600,7601,7602}:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7595
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7596
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7597
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7598
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7599
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7600
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7601
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7602
+
+2017-01-11 Even Rouault <even.rouault at spatialys.com>
+
+        * libtiff/tif_dir.c, tif_dirread.c, tif_dirwrite.c: implement various
+        clampings
+        of double to other data types to avoid undefined behaviour if the
+        output range
+        isn't big enough to hold the input value.
+        Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2643
+        http://bugzilla.maptools.org/show_bug.cgi?id=2642
+        http://bugzilla.maptools.org/show_bug.cgi?id=2646
+        http://bugzilla.maptools.org/show_bug.cgi?id=2647
+
+/cvs/maptools/cvsroot/libtiff/ChangeLog,v  <--  ChangeLog
+new revision: 1.1204; previous revision: 1.1203
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_dir.c,v  <--  libtiff/tif_dir.c
+new revision: 1.129; previous revision: 1.128
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_dirread.c,v  <-- libtiff/tif_dirread.c
+new revision: 1.207; previous revision: 1.206
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_dirwrite.c,v  <-- libtiff/tif_dirwrite.c
+new revision: 1.85; previous revision: 1.84
+
+2017-01-11 Even Rouault <even.rouault at spatialys.com>
+
+        * libtiff/tif_dirread.c: avoid division by floating point 0 in
+        TIFFReadDirEntryCheckedRational() and
+        TIFFReadDirEntryCheckedSrational(),
+        and return 0 in that case (instead of infinity as before presumably)
+        Apparently some sanitizers do not like those divisions by zero.
+        Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2644
+
+/cvs/maptools/cvsroot/libtiff/ChangeLog,v  <-- ChangeLog
+new revision: 1.1203; previous revision: 1.1202
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_dirread.c,v  <-- libtiff/tif_dirread.c
+new revision: 1.206; previous revision: 1.205
+
+2017-01-11 Even Rouault <even.rouault at spatialys.com>
+
+        * libtiff/tif_jpeg.c: validate BitsPerSample in JPEGSetupEncode() to
+        avoid undefined behaviour caused by invalid shift exponent.
+        Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2648
+
+
+/cvs/maptools/cvsroot/libtiff/ChangeLog,v  <-- ChangeLog
+new revision: 1.1205; previous revision: 1.1204
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_jpeg.c,v  <-- libtiff/tif_jpeg.c
+new revision: 1.126; previous revision: 1.125
+
+2017-01-11 Even Rouault <even.rouault at spatialys.com>
+
+        * libtiff/tif_read.c: avoid potential undefined behaviour on signed
+        integer addition in TIFFReadRawStrip1() in isMapped() case.
+        Fixes http://bugzilla.maptools.org/show_bug.cgi?id=2650
+
+/cvs/maptools/cvsroot/libtiff/ChangeLog,v  <-- ChangeLog
+new revision: 1.1206; previous revision: 1.1205
+/cvs/maptools/cvsroot/libtiff/libtiff/tif_read.c,v  <-- libtiff/tif_read.c
+new revision: 1.51; previous revision: 1.50
+
+Index: libtiff/libtiff/tif_dir.c
+===================================================================
+RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dir.c,v
+retrieving revision 1.128
+retrieving revision 1.129
+diff -u -r1.128 -r1.129
+--- libtiff/libtiff/tif_dir.c  3 Dec 2016 15:30:31 -0000       1.128
++++ libtiff/libtiff/tif_dir.c  11 Jan 2017 16:09:02 -0000      1.129
+@@ -1,4 +1,4 @@
+-/* $Id: tif_dir.c,v 1.128 2016-12-03 15:30:31 erouault Exp $ */
++/* $Id: tif_dir.c,v 1.129 2017-01-11 16:09:02 erouault Exp $ */
+ /*
+  * Copyright (c) 1988-1997 Sam Leffler
+@@ -31,6 +31,7 @@
+  * (and also some miscellaneous stuff)
+  */
+ #include "tiffiop.h"
++#include <float.h>
+ /*
+  * These are used in the backwards compatibility code...
+@@ -154,6 +155,15 @@
+       return (0);
+ }
++static float TIFFClampDoubleToFloat( double val )
++{
++    if( val > FLT_MAX )
++        return FLT_MAX;
++    if( val < -FLT_MAX )
++        return -FLT_MAX;
++    return (float)val;
++}
++
+ static int
+ _TIFFVSetField(TIFF* tif, uint32 tag, va_list ap)
+ {
+@@ -312,13 +322,13 @@
+         dblval = va_arg(ap, double);
+         if( dblval < 0 )
+             goto badvaluedouble;
+-              td->td_xresolution = (float) dblval;
++              td->td_xresolution = TIFFClampDoubleToFloat( dblval );
+               break;
+       case TIFFTAG_YRESOLUTION:
+         dblval = va_arg(ap, double);
+         if( dblval < 0 )
+             goto badvaluedouble;
+-              td->td_yresolution = (float) dblval;
++              td->td_yresolution = TIFFClampDoubleToFloat( dblval );
+               break;
+       case TIFFTAG_PLANARCONFIG:
+               v = (uint16) va_arg(ap, uint16_vap);
+@@ -327,10 +337,10 @@
+               td->td_planarconfig = (uint16) v;
+               break;
+       case TIFFTAG_XPOSITION:
+-              td->td_xposition = (float) va_arg(ap, double);
++              td->td_xposition = TIFFClampDoubleToFloat( va_arg(ap, double) );
+               break;
+       case TIFFTAG_YPOSITION:
+-              td->td_yposition = (float) va_arg(ap, double);
++              td->td_yposition = TIFFClampDoubleToFloat( va_arg(ap, double) );
+               break;
+       case TIFFTAG_RESOLUTIONUNIT:
+               v = (uint16) va_arg(ap, uint16_vap);
+Index: libtiff/libtiff/tif_dirread.c
+===================================================================
+RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dirread.c,v
+retrieving revision 1.206
+retrieving revision 1.207
+diff -u -r1.206 -r1.207
+--- libtiff/libtiff/tif_dirread.c      11 Jan 2017 13:28:01 -0000      1.206
++++ libtiff/libtiff/tif_dirread.c      11 Jan 2017 16:09:02 -0000      1.207
+@@ -1,4 +1,4 @@
+-/* $Id: tif_dirread.c,v 1.205 2016-12-03 11:02:15 erouault Exp $ */
++/* $Id: tif_dirread.c,v 1.207 2017-01-11 16:09:02 erouault Exp $ */
+ /*
+  * Copyright (c) 1988-1997 Sam Leffler
+@@ -40,6 +40,7 @@
+  */
+ #include "tiffiop.h"
++#include <float.h>
+ #define IGNORE 0          /* tag placeholder used below */
+ #define FAILED_FII    ((uint32) -1)
+@@ -2406,7 +2407,14 @@
+                               ma=(double*)origdata;
+                               mb=data;
+                               for (n=0; n<count; n++)
+-                                      *mb++=(float)(*ma++);
++                                {
++                                    double val = *ma++;
++                                    if( val > FLT_MAX )
++                                        val = FLT_MAX;
++                                    else if( val < -FLT_MAX )
++                                        val = -FLT_MAX;
++                                    *mb++=(float)val;
++                                }
+                       }
+                       break;
+       }
+Index: libtiff/libtiff/tif_dirwrite.c
+===================================================================
+RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dirwrite.c,v
+retrieving revision 1.84
+retrieving revision 1.85
+diff -u -r1.84 -r1.85
+--- libtiff/libtiff/tif_dirwrite.c     11 Jan 2017 12:51:59 -0000      1.84
++++ libtiff/libtiff/tif_dirwrite.c     11 Jan 2017 16:09:02 -0000      1.85
+@@ -1,4 +1,4 @@
+-/* $Id: tif_dirwrite.c,v 1.83 2016-10-25 21:35:15 erouault Exp $ */
++/* $Id: tif_dirwrite.c,v 1.85 2017-01-11 16:09:02 erouault Exp $ */
+ /*
+  * Copyright (c) 1988-1997 Sam Leffler
+@@ -30,6 +30,7 @@
+  * Directory Write Support Routines.
+  */
+ #include "tiffiop.h"
++#include <float.h>
+ #ifdef HAVE_IEEEFP
+ #define TIFFCvtNativeToIEEEFloat(tif, n, fp)
+@@ -939,6 +940,69 @@
+       return(0);
+ }
++static float TIFFClampDoubleToFloat( double val )
++{
++    if( val > FLT_MAX )
++        return FLT_MAX;
++    if( val < -FLT_MAX )
++        return -FLT_MAX;
++    return (float)val;
++}
++
++static int8 TIFFClampDoubleToInt8( double val )
++{
++    if( val > 127 )
++        return 127;
++    if( val < -128 || val != val )
++        return -128;
++    return (int8)val;
++}
++
++static int16 TIFFClampDoubleToInt16( double val )
++{
++    if( val > 32767 )
++        return 32767;
++    if( val < -32768 || val != val )
++        return -32768;
++    return (int16)val;
++}
++
++static int32 TIFFClampDoubleToInt32( double val )
++{
++    if( val > 0x7FFFFFFF )
++        return 0x7FFFFFFF;
++    if( val < -0x7FFFFFFF-1 || val != val )
++        return -0x7FFFFFFF-1;
++    return (int32)val;
++}
++
++static uint8 TIFFClampDoubleToUInt8( double val )
++{
++    if( val < 0 )
++        return 0;
++    if( val > 255 || val != val )
++        return 255;
++    return (uint8)val;
++}
++
++static uint16 TIFFClampDoubleToUInt16( double val )
++{
++    if( val < 0 )
++        return 0;
++    if( val > 65535 || val != val )
++        return 65535;
++    return (uint16)val;
++}
++
++static uint32 TIFFClampDoubleToUInt32( double val )
++{
++    if( val < 0 )
++        return 0;
++    if( val > 0xFFFFFFFFU || val != val )
++        return 0xFFFFFFFFU;
++    return (uint32)val;
++}
++
+ static int
+ TIFFWriteDirectoryTagSampleformatArray(TIFF* tif, uint32* ndir, TIFFDirEntry* dir, uint16 tag, uint32 count, double* value)
+ {
+@@ -959,7 +1023,7 @@
+                       if (tif->tif_dir.td_bitspersample<=32)
+                       {
+                               for (i = 0; i < count; ++i)
+-                                      ((float*)conv)[i] = (float)value[i];
++                                      ((float*)conv)[i] = TIFFClampDoubleToFloat(value[i]);
+                               ok = TIFFWriteDirectoryTagFloatArray(tif,ndir,dir,tag,count,(float*)conv);
+                       }
+                       else
+@@ -971,19 +1035,19 @@
+                       if (tif->tif_dir.td_bitspersample<=8)
+                       {
+                               for (i = 0; i < count; ++i)
+-                                      ((int8*)conv)[i] = (int8)value[i];
++                                      ((int8*)conv)[i] = TIFFClampDoubleToInt8(value[i]);
+                               ok = TIFFWriteDirectoryTagSbyteArray(tif,ndir,dir,tag,count,(int8*)conv);
+                       }
+                       else if (tif->tif_dir.td_bitspersample<=16)
+                       {
+                               for (i = 0; i < count; ++i)
+-                                      ((int16*)conv)[i] = (int16)value[i];
++                                      ((int16*)conv)[i] = TIFFClampDoubleToInt16(value[i]);
+                               ok = TIFFWriteDirectoryTagSshortArray(tif,ndir,dir,tag,count,(int16*)conv);
+                       }
+                       else
+                       {
+                               for (i = 0; i < count; ++i)
+-                                      ((int32*)conv)[i] = (int32)value[i];
++                                      ((int32*)conv)[i] = TIFFClampDoubleToInt32(value[i]);
+                               ok = TIFFWriteDirectoryTagSlongArray(tif,ndir,dir,tag,count,(int32*)conv);
+                       }
+                       break;
+@@ -991,19 +1055,19 @@
+                       if (tif->tif_dir.td_bitspersample<=8)
+                       {
+                               for (i = 0; i < count; ++i)
+-                                      ((uint8*)conv)[i] = (uint8)value[i];
++                                      ((uint8*)conv)[i] = TIFFClampDoubleToUInt8(value[i]);
+                               ok = TIFFWriteDirectoryTagByteArray(tif,ndir,dir,tag,count,(uint8*)conv);
+                       }
+                       else if (tif->tif_dir.td_bitspersample<=16)
+                       {
+                               for (i = 0; i < count; ++i)
+-                                      ((uint16*)conv)[i] = (uint16)value[i];
++                                      ((uint16*)conv)[i] = TIFFClampDoubleToUInt16(value[i]);
+                               ok = TIFFWriteDirectoryTagShortArray(tif,ndir,dir,tag,count,(uint16*)conv);
+                       }
+                       else
+                       {
+                               for (i = 0; i < count; ++i)
+-                                      ((uint32*)conv)[i] = (uint32)value[i];
++                                      ((uint32*)conv)[i] = TIFFClampDoubleToUInt32(value[i]);
+                               ok = TIFFWriteDirectoryTagLongArray(tif,ndir,dir,tag,count,(uint32*)conv);
+                       }
+                       break;
+@@ -2102,7 +2102,7 @@
+               m[0]=0;
+               m[1]=1;
+       }
+-      else if (value==(double)(uint32)value)
++      else if (value <= 0xFFFFFFFFU && value==(double)(uint32)value)
+       {
+               m[0]=(uint32)value;
+               m[1]=1;
+@@ -2148,12 +2217,13 @@
+       }
+       for (na=value, nb=m, nc=0; nc<count; na++, nb+=2, nc++)
+       {
+-              if (*na<=0.0)
++              if (*na<=0.0 || *na != *na)
+               {
+                       nb[0]=0;
+                       nb[1]=1;
+               }
+-              else if (*na==(float)(uint32)(*na))
++              else if (*na >= 0 && *na <= (float)0xFFFFFFFFU &&
++                         *na==(float)(uint32)(*na))
+               {
+                       nb[0]=(uint32)(*na);
+                       nb[1]=1;
+Index: libtiff/libtiff/tif_dirread.c
+===================================================================
+RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_dirread.c,v
+retrieving revision 1.205
+retrieving revision 1.206
+diff -u -r1.205 -r1.206
+--- libtiff/libtiff/tif_dirread.c      3 Dec 2016 11:02:15 -0000       1.205
++++ libtiff/libtiff/tif_dirread.c      11 Jan 2017 13:28:01 -0000      1.206
+@@ -2872,7 +2872,10 @@
+               m.l = direntry->tdir_offset.toff_long8;
+       if (tif->tif_flags&TIFF_SWAB)
+               TIFFSwabArrayOfLong(m.i,2);
+-      if (m.i[0]==0)
++        /* Not completely sure what we should do when m.i[1]==0, but some */
++        /* sanitizers do not like division by 0.0: */
++        /* http://bugzilla.maptools.org/show_bug.cgi?id=2644 */
++      if (m.i[0]==0 || m.i[1]==0)
+               *value=0.0;
+       else
+               *value=(double)m.i[0]/(double)m.i[1];
+@@ -2900,7 +2903,10 @@
+               m.l=direntry->tdir_offset.toff_long8;
+       if (tif->tif_flags&TIFF_SWAB)
+               TIFFSwabArrayOfLong(m.i,2);
+-      if ((int32)m.i[0]==0)
++        /* Not completely sure what we should do when m.i[1]==0, but some */
++        /* sanitizers do not like division by 0.0: */
++        /* http://bugzilla.maptools.org/show_bug.cgi?id=2644 */
++      if ((int32)m.i[0]==0 || m.i[1]==0)
+               *value=0.0;
+       else
+               *value=(double)((int32)m.i[0])/(double)m.i[1];
+Index: libtiff/libtiff/tif_jpeg.c
+===================================================================
+RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_jpeg.c,v
+retrieving revision 1.125
+retrieving revision 1.126
+diff -u -r1.125 -r1.126
+--- libtiff/libtiff/tif_jpeg.c 11 Jan 2017 12:15:01 -0000      1.125
++++ libtiff/libtiff/tif_jpeg.c 11 Jan 2017 16:13:50 -0000      1.126
+@@ -1,4 +1,4 @@
+-/* $Id: tif_jpeg.c,v 1.123 2016-01-23 21:20:34 erouault Exp $ */
++/* $Id: tif_jpeg.c,v 1.126 2017-01-11 16:13:50 erouault Exp $ */
+ /*
+  * Copyright (c) 1994-1997 Sam Leffler
+@@ -1632,6 +1632,13 @@
+                             "Invalig horizontal/vertical sampling value");
+                     return (0);
+                 }
++                if( td->td_bitspersample > 16 )
++                {
++                    TIFFErrorExt(tif->tif_clientdata, module,
++                                 "BitsPerSample %d not allowed for JPEG",
++                                 td->td_bitspersample);
++                    return (0);
++                }
+               /*
+                * A ReferenceBlackWhite field *must* be present since the
+Index: libtiff/libtiff/tif_read.c
+===================================================================
+RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_read.c,v
+retrieving revision 1.50
+retrieving revision 1.51
+diff -u -r1.50 -r1.51
+--- libtiff/libtiff/tif_read.c 2 Dec 2016 21:56:56 -0000       1.50
++++ libtiff/libtiff/tif_read.c 11 Jan 2017 16:33:34 -0000      1.51
+@@ -420,16 +420,25 @@
+                       return ((tmsize_t)(-1));
+               }
+       } else {
+-              tmsize_t ma,mb;
++              tmsize_t ma;
+               tmsize_t n;
+-              ma=(tmsize_t)td->td_stripoffset[strip];
+-              mb=ma+size;
+-              if ((td->td_stripoffset[strip] > (uint64)TIFF_TMSIZE_T_MAX)||(ma>tif->tif_size))
+-                      n=0;
+-              else if ((mb<ma)||(mb<size)||(mb>tif->tif_size))
+-                      n=tif->tif_size-ma;
+-              else
+-                      n=size;
++              if ((td->td_stripoffset[strip] > (uint64)TIFF_TMSIZE_T_MAX)||
++                    ((ma=(tmsize_t)td->td_stripoffset[strip])>tif->tif_size))
++                {
++                    n=0;
++                }
++                else if( ma > TIFF_TMSIZE_T_MAX - size )
++                {
++                    n=0;
++                }
++                else
++                {
++                    tmsize_t mb=ma+size;
++                    if (mb>tif->tif_size)
++                            n=tif->tif_size-ma;
++                    else
++                            n=size;
++                }
+               if (n!=size) {
+ #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__))
+                       TIFFErrorExt(tif->tif_clientdata, module,
diff --git a/gnu/packages/patches/libtirpc-CVE-2017-8779.patch b/gnu/packages/patches/libtirpc-CVE-2017-8779.patch
new file mode 100644 (file)
index 0000000..742e64d
--- /dev/null
@@ -0,0 +1,263 @@
+Fix CVE-2017-8779:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8779
+
+Patch copied from the bug reporter's 3rd-party repository:
+
+https://github.com/guidovranken/rpcbomb/blob/master/libtirpc_patch.txt
+
+diff --git a/src/rpc_generic.c b/src/rpc_generic.c
+index 2f09a8f..589cbd5 100644
+--- a/src/rpc_generic.c
++++ b/src/rpc_generic.c
+@@ -615,6 +615,9 @@ __rpc_taddr2uaddr_af(int af, const struct netbuf *nbuf)
+       switch (af) {
+       case AF_INET:
++              if (nbuf->len < sizeof(*sin)) {
++                      return NULL;
++              }
+               sin = nbuf->buf;
+               if (inet_ntop(af, &sin->sin_addr, namebuf, sizeof namebuf)
+                   == NULL)
+@@ -626,6 +629,9 @@ __rpc_taddr2uaddr_af(int af, const struct netbuf *nbuf)
+               break;
+ #ifdef INET6
+       case AF_INET6:
++              if (nbuf->len < sizeof(*sin6)) {
++                      return NULL;
++              }
+               sin6 = nbuf->buf;
+               if (inet_ntop(af, &sin6->sin6_addr, namebuf6, sizeof namebuf6)
+                   == NULL)
+@@ -667,6 +673,8 @@ __rpc_uaddr2taddr_af(int af, const char *uaddr)
+       port = 0;
+       sin = NULL;
++      if (uaddr == NULL)
++              return NULL;
+       addrstr = strdup(uaddr);
+       if (addrstr == NULL)
+               return NULL;
+diff --git a/src/rpcb_prot.c b/src/rpcb_prot.c
+index 43fd385..a923c8e 100644
+--- a/src/rpcb_prot.c
++++ b/src/rpcb_prot.c
+@@ -41,6 +41,7 @@
+ #include <rpc/types.h>
+ #include <rpc/xdr.h>
+ #include <rpc/rpcb_prot.h>
++#include "rpc_com.h"
+ bool_t
+ xdr_rpcb(xdrs, objp)
+@@ -53,13 +54,13 @@ xdr_rpcb(xdrs, objp)
+       if (!xdr_u_int32_t(xdrs, &objp->r_vers)) {
+               return (FALSE);
+       }
+-      if (!xdr_string(xdrs, &objp->r_netid, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->r_netid, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+-      if (!xdr_string(xdrs, &objp->r_addr, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->r_addr, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+-      if (!xdr_string(xdrs, &objp->r_owner, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->r_owner, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+       return (TRUE);
+@@ -159,19 +160,19 @@ xdr_rpcb_entry(xdrs, objp)
+       XDR *xdrs;
+       rpcb_entry *objp;
+ {
+-      if (!xdr_string(xdrs, &objp->r_maddr, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->r_maddr, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+-      if (!xdr_string(xdrs, &objp->r_nc_netid, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->r_nc_netid, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int32_t(xdrs, &objp->r_nc_semantics)) {
+               return (FALSE);
+       }
+-      if (!xdr_string(xdrs, &objp->r_nc_protofmly, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->r_nc_protofmly, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+-      if (!xdr_string(xdrs, &objp->r_nc_proto, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->r_nc_proto, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+       return (TRUE);
+@@ -292,7 +293,7 @@ xdr_rpcb_rmtcallres(xdrs, p)
+       bool_t dummy;
+       struct r_rpcb_rmtcallres *objp = (struct r_rpcb_rmtcallres *)(void *)p;
+-      if (!xdr_string(xdrs, &objp->addr, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->addr, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+       if (!xdr_u_int(xdrs, &objp->results.results_len)) {
+@@ -312,6 +313,11 @@ xdr_netbuf(xdrs, objp)
+       if (!xdr_u_int32_t(xdrs, (u_int32_t *) &objp->maxlen)) {
+               return (FALSE);
+       }
++
++      if (objp->maxlen > RPC_MAXDATASIZE) {
++              return (FALSE);
++      }
++
+       dummy = xdr_bytes(xdrs, (char **)&(objp->buf),
+                       (u_int *)&(objp->len), objp->maxlen);
+       return (dummy);
+diff --git a/src/rpcb_st_xdr.c b/src/rpcb_st_xdr.c
+index 08db745..28e6a48 100644
+--- a/src/rpcb_st_xdr.c
++++ b/src/rpcb_st_xdr.c
+@@ -37,6 +37,7 @@
+ #include <rpc/rpc.h>
++#include "rpc_com.h"
+ /* Link list of all the stats about getport and getaddr */
+@@ -58,7 +59,7 @@ xdr_rpcbs_addrlist(xdrs, objp)
+           if (!xdr_int(xdrs, &objp->failure)) {
+               return (FALSE);
+           }
+-          if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
++          if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+               return (FALSE);
+           }
+@@ -109,7 +110,7 @@ xdr_rpcbs_rmtcalllist(xdrs, objp)
+               IXDR_PUT_INT32(buf, objp->failure);
+               IXDR_PUT_INT32(buf, objp->indirect);
+       }
+-      if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+       if (!xdr_pointer(xdrs, (char **)&objp->next,
+@@ -147,7 +148,7 @@ xdr_rpcbs_rmtcalllist(xdrs, objp)
+               objp->failure = (int)IXDR_GET_INT32(buf);
+               objp->indirect = (int)IXDR_GET_INT32(buf);
+       }
+-      if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+       if (!xdr_pointer(xdrs, (char **)&objp->next,
+@@ -175,7 +176,7 @@ xdr_rpcbs_rmtcalllist(xdrs, objp)
+       if (!xdr_int(xdrs, &objp->indirect)) {
+               return (FALSE);
+       }
+-      if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
++      if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+               return (FALSE);
+       }
+       if (!xdr_pointer(xdrs, (char **)&objp->next,
+diff --git a/src/xdr.c b/src/xdr.c
+index f3fb9ad..b9a1558 100644
+--- a/src/xdr.c
++++ b/src/xdr.c
+@@ -42,8 +42,10 @@
+ #include <stdlib.h>
+ #include <string.h>
++#include <rpc/rpc.h>
+ #include <rpc/types.h>
+ #include <rpc/xdr.h>
++#include <rpc/rpc_com.h>
+ typedef quad_t          longlong_t;     /* ANSI long long type */
+ typedef u_quad_t        u_longlong_t;   /* ANSI unsigned long long type */
+@@ -53,7 +55,6 @@ typedef u_quad_t        u_longlong_t;   /* ANSI unsigned long long type */
+  */
+ #define XDR_FALSE     ((long) 0)
+ #define XDR_TRUE      ((long) 1)
+-#define LASTUNSIGNED  ((u_int) 0-1)
+ /*
+  * for unit alignment
+@@ -629,6 +630,7 @@ xdr_bytes(xdrs, cpp, sizep, maxsize)
+ {
+       char *sp = *cpp;  /* sp is the actual string pointer */
+       u_int nodesize;
++      bool_t ret, allocated = FALSE;
+       /*
+        * first deal with the length since xdr bytes are counted
+@@ -652,6 +654,7 @@ xdr_bytes(xdrs, cpp, sizep, maxsize)
+               }
+               if (sp == NULL) {
+                       *cpp = sp = mem_alloc(nodesize);
++                      allocated = TRUE;
+               }
+               if (sp == NULL) {
+                       warnx("xdr_bytes: out of memory");
+@@ -660,7 +663,14 @@ xdr_bytes(xdrs, cpp, sizep, maxsize)
+               /* FALLTHROUGH */
+       case XDR_ENCODE:
+-              return (xdr_opaque(xdrs, sp, nodesize));
++              ret = xdr_opaque(xdrs, sp, nodesize);
++              if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) {
++                      if (allocated == TRUE) {
++                              free(sp);
++                              *cpp = NULL;
++                      }
++              }
++              return (ret);
+       case XDR_FREE:
+               if (sp != NULL) {
+@@ -754,6 +764,7 @@ xdr_string(xdrs, cpp, maxsize)
+       char *sp = *cpp;  /* sp is the actual string pointer */
+       u_int size;
+       u_int nodesize;
++      bool_t ret, allocated = FALSE;
+       /*
+        * first deal with the length since xdr strings are counted-strings
+@@ -793,8 +804,10 @@ xdr_string(xdrs, cpp, maxsize)
+       switch (xdrs->x_op) {
+       case XDR_DECODE:
+-              if (sp == NULL)
++              if (sp == NULL) {
+                       *cpp = sp = mem_alloc(nodesize);
++                      allocated = TRUE;
++              }
+               if (sp == NULL) {
+                       warnx("xdr_string: out of memory");
+                       return (FALSE);
+@@ -803,7 +816,14 @@ xdr_string(xdrs, cpp, maxsize)
+               /* FALLTHROUGH */
+       case XDR_ENCODE:
+-              return (xdr_opaque(xdrs, sp, size));
++              ret = xdr_opaque(xdrs, sp, size);
++              if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) {
++                      if (allocated == TRUE) {
++                              free(sp);
++                              *cpp = NULL;
++                      }
++              }
++              return (ret);
+       case XDR_FREE:
+               mem_free(sp, nodesize);
+@@ -823,7 +843,7 @@ xdr_wrapstring(xdrs, cpp)
+       XDR *xdrs;
+       char **cpp;
+ {
+-      return xdr_string(xdrs, cpp, LASTUNSIGNED);
++      return xdr_string(xdrs, cpp, RPC_MAXDATASIZE);
+ }
+ /*
diff --git a/gnu/packages/patches/lierolibre-check-unaligned-access.patch b/gnu/packages/patches/lierolibre-check-unaligned-access.patch
new file mode 100644 (file)
index 0000000..b720c9e
--- /dev/null
@@ -0,0 +1,30 @@
+Patch copied from Debian:
+
+https://anonscm.debian.org/cgit/pkg-games/lierolibre.git/tree/debian/patches/0001-Use-unaligned-access-define-over-checking-arch.patch?id=82910748906855f6e6bfe30b3f077e8c793ae424
+
+From 396f19b6b7743d394307f70f0c0108419824437b Mon Sep 17 00:00:00 2001
+From: Martin Erik Werner <martinerikwerner@gmail.com>
+Date: Sun, 28 Jun 2015 16:31:34 +0200
+Subject: [PATCH 1/3] Use unaligned access define over checking arch
+
+This todo item seems like it done, and just needed implementing...
+---
+ io/encoding.hpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/gvl/io/encoding.hpp b/src/gvl/io/encoding.hpp
+index c491677..89bb612 100644
+--- a/src/gvl/io/encoding.hpp
++++ b/src/gvl/io/encoding.hpp
+@@ -374,7 +374,7 @@ struct octet_stream_writer
+               // inlining of the common case
+               if(std::size_t(end_ - cur_) >= len)
+               {
+-#if GVL_X86 || GVL_X86_64 // TODO: A define that says whether unaligned access is allowed
++#if GVL_UNALIGNED_ACCESS
+                       if(len < 64) // TODO: Tweak this limit
+                       {
+                               while(len > 4)
+-- 
+2.4.6
+
diff --git a/gnu/packages/patches/lierolibre-is-free-software.patch b/gnu/packages/patches/lierolibre-is-free-software.patch
new file mode 100644 (file)
index 0000000..626a24d
--- /dev/null
@@ -0,0 +1,38 @@
+Remove outdated license text. See COPYING and the description
+at http://liero.be/ for more information.
+
+--- a/data/LIEROENG.TXT
++++ b/data/LIEROENG.TXT
+@@ -11,14 +11,6 @@
+ -----------------------------------------------------------------------------\r
\r
+ GENERAL STUFF\r
+-\r
+-      Liero is freeware. What that means is that you don't have to pay\r
+-      for it and using it has not been restricted in any way. You may\r
+-        distribute it to anyone and anyhow WITHOUT ANY CHANGES MADE TO IT'S \r
+-      CONTAINMENTS.\r
+-\r
+-      The source code of this game is not distributed freely (neither\r
+-        commercially). So if you thought that maybe you could... forget it. \r
+       \r
+       Liero is a wormgame with weapons for 2 players. The object of the\r
+       game is definately what you think it is. Liero is excellent for \r
+--- a/data/LIERO.TXT
++++ b/data/LIERO.TXT
+@@ -12,15 +12,6 @@
\r
+ YLEIST\8e\r
\r
+-        Liero on freeware, mik\84 tarkoittaa ett\84 sen k\84yt\94st\84 ei tarvitse\r
+-        maksaa mit\84\84n eik\84 k\84ytt\94\84 ole rajoitettu mitenk\84\84n. Lieroa saa\r
+-        kopioida kelle tahansa ja miten tahansa SIS\8eLT\99\8e MITENK\8e\8eN\r
+-        MUUTTAMATTA.\r
+-\r
+-        Todettakoon t\84ss\84 ett\84 Lieron l\84hdekoodi ei ole vapaassa (sen\r
+-        enenp\84\84 kuin kaupallisessakaan) jakelussa. Joten jos ajattelit\r
+-        ett\84... niin j\84t\84 ajatukset sikseen.\r
+-\r
+         Liero on kahden pelattava aseellinen matosimulaatiopeli. Pelin\r
+         p\84\84m\84\84r\84n\84 on ep\84ilem\84tt\84 se mit\84 luuletkin. Liero sopii\r
+         erinomaisen hyvin aggressioiden purkuun ja kaverin rokitt\84miseen\r
diff --git a/gnu/packages/patches/lierolibre-newer-libconfig.patch b/gnu/packages/patches/lierolibre-newer-libconfig.patch
new file mode 100644 (file)
index 0000000..662d0f9
--- /dev/null
@@ -0,0 +1,190 @@
+Fix compatibility with newer libconfig.
+
+Patch copied from upstream source repository:
+
+https://gitlab.com/lierolibre/lierolibre/commit/b27e3604aa6bfbfcc50db1000b394d06c87ae2f2
+
+diff --git a/src/common.cpp b/src/common.cpp
+index 2d6ada5..4942b05 100644
+--- a/src/common.cpp
++++ b/src/common.cpp
+@@ -162,7 +162,7 @@ void Texts::loadFromCFG(std::string cfgFilePath)
+       const libconfig::Setting &sgmodes = texts["gameModes"];
+       for(int i = 0; i < 4; ++i)
+       {
+-              gameModes[i] = (char const*)sgmodes["gameModes" + to_string(i)];
++              gameModes[i] = (char const*)sgmodes[("gameModes" + to_string(i)).c_str()];
+       }
+       const libconfig::Setting &sgmspec = texts["gameModeSpec"];
+@@ -181,13 +181,13 @@ void Texts::loadFromCFG(std::string cfgFilePath)
+       const libconfig::Setting &swstates = texts["weapStates"];
+       for(int i = 0; i < 3; ++i)
+       {
+-               weapStates[i] = (char const*)swstates["weapStates" + to_string(i)];
++               weapStates[i] = (char const*)swstates[("weapStates" + to_string(i)).c_str()];
+       }
+       const libconfig::Setting &sknames = texts["keyNames"];
+       for(int i = 1; i < 177; ++i) // First key starts at 1
+       {
+-              keyNames[i] = (char const*)sknames["keyNames" + to_string(i)];
++              keyNames[i] = (char const*)sknames[("keyNames" + to_string(i)).c_str()];
+       }
+       selWeap = (char const*)texts["selWeap"];
+@@ -315,8 +315,8 @@ void Common::loadPaletteFromCFG(std::string cfgFilePath)
+       const libconfig::Setting &scanim = palette["colorAnim"];
+       for(int i = 0; i < 4; ++i)
+       {
+-              colorAnim[i].from = (int)scanim["colorAnim" + to_string(i) + "from"];
+-              colorAnim[i].to = (int)scanim["colorAnim" + to_string(i) + "to"];
++              colorAnim[i].from = (int)scanim[("colorAnim" + to_string(i) + "from").c_str()];
++              colorAnim[i].to = (int)scanim[("colorAnim" + to_string(i) + "to").c_str()];
+       }
+ }
+@@ -383,7 +383,7 @@ void Common::loadMaterialsFromCFG(std::string cfgFilePath)
+       for(int i = 0; i < 256; ++i)
+       {
+-              const libconfig::Setting &smflags = smaterials["flags" + to_string(i)];
++              const libconfig::Setting &smflags = smaterials[("flags" + to_string(i)).c_str()];
+               materials[i].flags = smflags;
+       }
+ }
+diff --git a/src/configCompat.cpp b/src/configCompat.cpp
+index 1aeb262..a72c40f 100644
+--- a/src/configCompat.cpp
++++ b/src/configCompat.cpp
+@@ -160,19 +160,19 @@ void Common::loadConstantsFromCFGVer0(string cfgFilePath)
+       const Setting &vconstants = constants["Values"];
+       for(int i = 0; i < MaxC; ++i)
+       {
+-              C[i] = (int)vconstants[valueConstantsNamesCFGVer0[i]];
++              C[i] = (int)vconstants[valueConstantsNamesCFGVer0[i].c_str()];
+       }
+       const Setting &sconstants = constants["Strings"];
+       for(int i = 0; i < MaxS; ++i)
+       {
+-              S[i]= (char const*)sconstants[stringConstantsNamesCFGVer0[i]];
++              S[i]= (char const*)sconstants[stringConstantsNamesCFGVer0[i].c_str()];
+       }
+       const Setting &hconstants = constants["Hacks"];
+       for(int i = 0; i < MaxH; ++i)
+       {
+-              H[i] = (bool)hconstants[hackConstantsNamesVer0[i]];
++              H[i] = (bool)hconstants[hackConstantsNamesVer0[i].c_str()];
+       }
+ }
+diff --git a/src/configHelper.cpp b/src/configHelper.cpp
+index fcd1f3f..a63bddc 100644
+--- a/src/configHelper.cpp
++++ b/src/configHelper.cpp
+@@ -54,15 +54,11 @@ template Uint8 ConfigHelper::getValue<Uint8, const Setting, int>(const Setting &
+ template Uint8 ConfigHelper::getValue<Uint8, const Setting, char const*>(const Setting &node, char const* index);
+-template Uint8 ConfigHelper::getValue<Uint8, const Setting, string>(const Setting &node, string index);
+-
+ // Non-const
+ template Uint8 ConfigHelper::getValue<Uint8, Setting, int>(Setting &node, int index);
+ template Uint8 ConfigHelper::getValue<Uint8, Setting, char const*>(Setting &node, char const* index);
+-template Uint8 ConfigHelper::getValue<Uint8, Setting, string>(Setting &node, string index);
+-
+ // Since we still need specialisation per value type (Setting::Type),
+ // no need to templateify these
+@@ -72,7 +68,7 @@ void ConfigHelper::put(Setting &node, string variable, string value)
+       {
+               node.add(variable, Setting::TypeString) = value;
+       } else {
+-              Setting &var = node[variable];
++              Setting &var = node[variable.c_str()];
+               var = value;
+       }
+ }
+@@ -83,7 +79,7 @@ void ConfigHelper::put(Setting &node, string variable, int value)
+       {
+               node.add(variable, Setting::TypeInt) = value;
+       } else {
+-              Setting &var = node[variable];
++              Setting &var = node[variable.c_str()];
+               var = value;
+       }
+ }
+@@ -94,7 +90,7 @@ void ConfigHelper::put(Setting &node, string variable, Uint8 value)
+       {
+               node.add(variable, Setting::TypeInt) = value;
+       } else {
+-              Setting &var = node[variable];
++              Setting &var = node[variable.c_str()];
+               var = value;
+       }
+ }
+@@ -105,7 +101,7 @@ void ConfigHelper::put(Setting &node, string variable, bool value)
+       {
+               node.add(variable, Setting::TypeBoolean) = value;
+       } else {
+-              Setting &var = node[variable];
++              Setting &var = node[variable.c_str()];
+               var = value;
+       }
+ }
+@@ -135,6 +131,6 @@ Setting& ConfigHelper::getSubgroup(Setting &node, string groupName)
+       {
+               node.add(groupName, Setting::TypeGroup);
+       }
+-      return node[groupName];
++      return node[groupName.c_str()];
+ }
+diff --git a/src/constants.cpp b/src/constants.cpp
+index 7fced6a..cf7bbfc 100644
+--- a/src/constants.cpp
++++ b/src/constants.cpp
+@@ -523,19 +523,19 @@ void Common::loadConstantsFromCFG(std::string cfgFilePath)
+       const libconfig::Setting &vconstants = constants["Values"];
+       for(int i = 0; i < MaxC; ++i)
+       {
+-              C[i] = (int)vconstants[valueConstantsNames[i]];
++              C[i] = (int)vconstants[valueConstantsNames[i].c_str()];
+       }
+       const libconfig::Setting &sconstants = constants["Strings"];
+       for(int i = 0; i < MaxS; ++i)
+       {
+-              S[i]= (char const*)sconstants[stringConstantsNames[i]];
++              S[i]= (char const*)sconstants[stringConstantsNames[i].c_str()];
+       }
+       const libconfig::Setting &hconstants = constants["Hacks"];
+       for(int i = 0; i < MaxH; ++i)
+       {
+-              H[i] = (bool)hconstants[hackConstantsNames[i]];
++              H[i] = (bool)hconstants[hackConstantsNames[i].c_str()];
+       }
+ }
+diff --git a/src/gfx/palette.cpp b/src/gfx/palette.cpp
+index 3fd08c4..3d3bf22 100644
+--- a/src/gfx/palette.cpp
++++ b/src/gfx/palette.cpp
+@@ -124,9 +124,9 @@ void Palette::readFromCFG(std::string cfgFilePath)
+       for(int i = 0; i < 256; ++i)
+       {
+-              entries[i].r = cfgHelp.getValue<Uint8>(spentries, "entries" + to_string(i) + "r");
+-              entries[i].g = cfgHelp.getValue<Uint8>(spentries, "entries" + to_string(i) + "g");
+-              entries[i].b = cfgHelp.getValue<Uint8>(spentries, "entries" + to_string(i) + "b");
++              entries[i].r = cfgHelp.getValue<Uint8>(spentries, ("entries" + to_string(i) + "r").c_str());
++              entries[i].g = cfgHelp.getValue<Uint8>(spentries, ("entries" + to_string(i) + "g").c_str());
++              entries[i].b = cfgHelp.getValue<Uint8>(spentries, ("entries" + to_string(i) + "b").c_str());
+       }
+ }
diff --git a/gnu/packages/patches/lierolibre-remove-arch-warning.patch b/gnu/packages/patches/lierolibre-remove-arch-warning.patch
new file mode 100644 (file)
index 0000000..ca92b72
--- /dev/null
@@ -0,0 +1,30 @@
+Copied from Debian:
+
+https://anonscm.debian.org/cgit/pkg-games/lierolibre.git/tree/debian/patches/0003-Remove-unknown-arch-warning.patch?id=82910748906855f6e6bfe30b3f077e8c793ae424
+
+From a9592533eeabed075b13d11c64f63f503dc13343 Mon Sep 17 00:00:00 2001
+From: Martin Erik Werner <martinerikwerner@gmail.com>
+Date: Sun, 28 Jun 2015 19:31:30 +0200
+Subject: [PATCH 3/3] Remove unknown arch warning
+
+The warning was just excessivley spammy, remove it.
+---
+ support/platform.h | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/gvl/support/platform.h b/src/gvl/support/platform.h
+index 1857b7c..ff6a7d2 100644
+--- a/src/gvl/support/platform.h
++++ b/src/gvl/support/platform.h
+@@ -87,8 +87,6 @@
+ #  define GVL_X86_64 1
+ # elif defined(__i386__) || defined(_M_IX86) || defined(i386) || defined(i486) || defined(intel) || defined(x86) || defined(i86pc)
+ #  define GVL_X86 1
+-# else
+-#  warning "Unknown architecture, please add it"
+ # endif
+ #endif
+-- 
+2.4.6
+
diff --git a/gnu/packages/patches/lierolibre-try-building-other-arch.patch b/gnu/packages/patches/lierolibre-try-building-other-arch.patch
new file mode 100644 (file)
index 0000000..a40dfe6
--- /dev/null
@@ -0,0 +1,56 @@
+Copied from Debian:
+
+https://anonscm.debian.org/cgit/pkg-games/lierolibre.git/tree/debian/patches/0001-Use-unaligned-access-define-over-checking-arch.patch?id=82910748906855f6e6bfe30b3f077e8c793ae424
+
+From a70691fb003cae1a33f06d682269285f9baa2dd9 Mon Sep 17 00:00:00 2001
+From: Martin Erik Werner <martinerikwerner@gmail.com>
+Date: Sun, 28 Jun 2015 19:00:23 +0200
+Subject: [PATCH 2/3] At least try building for other archs than x86*
+
+Allow attempting to build for other architectures than x86 and x86_64,
+whether or not the build will succeed or produce sane output is another
+question... It emits plenty of warnings about it now though...
+
+Configuration of the FPU controller is disabled on all but x86*, and the
+uninformed hope and prayer is that defaults will be fine without messing
+with them.
+---
+ math/ieee.cpp      | 2 ++
+ support/platform.h | 4 ++--
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/gvl/math/ieee.cpp b/src/gvl/math/ieee.cpp
+index 8b740d4..e0803d2 100644
+--- a/src/gvl/math/ieee.cpp
++++ b/src/gvl/math/ieee.cpp
+@@ -54,6 +54,8 @@ void gvl_init_ieee()
+ {
+ #if GVL_MSVCPP
+ // Nothing needs to be done, TODO: we should however check that the x87 state is right
++#elif !GVL_X86 && !GVL_X86_64
++// No idea what to do, but run with defaults and pray it doesn't mess things up
+ #elif GVL_GCC && GVL_WIN32
+     unsigned int const flags = _RC_NEAR | _PC_53 | _EM_INVALID | _EM_DENORMAL | _EM_ZERODIVIDE | _EM_OVERFLOW | _EM_UNDERFLOW | _EM_INEXACT;
+     _control87(flags, _MCW_EM | _MCW_PC | _MCW_RC);
+diff --git a/src/gvl/support/platform.h b/src/gvl/support/platform.h
+index 86dcaa6..1857b7c 100644
+--- a/src/gvl/support/platform.h
++++ b/src/gvl/support/platform.h
+@@ -88,12 +88,12 @@
+ # elif defined(__i386__) || defined(_M_IX86) || defined(i386) || defined(i486) || defined(intel) || defined(x86) || defined(i86pc)
+ #  define GVL_X86 1
+ # else
+-#  error "Unknown architecture, please add it"
++#  warning "Unknown architecture, please add it"
+ # endif
+ #endif
+ #if !GVL_LITTLE_ENDIAN && !GVL_BIG_ENDIAN
+-# if GVL_X86 || GVL_X86_64
++# if GVL_X86 || GVL_X86_64 || __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN
+ #  define GVL_LITTLE_ENDIAN 1
+ # else
+ #  define GVL_BIG_ENDIAN 1
+-- 
+2.4.6
+
diff --git a/gnu/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch b/gnu/packages/patches/llvm-3.5-fix-clang-build-with-gcc5.patch
new file mode 100644 (file)
index 0000000..faa8252
--- /dev/null
@@ -0,0 +1,35 @@
+This patch was downloaded from https://sft.its.cern.ch/jira/browse/ROOT-7047.
+It fixes the build of clang 3.5 with GCC 5.  File paths have been adjusted.
+
+From 00f3ed6eee41da871799ad0fd19153c7682d61fe Mon Sep 17 00:00:00 2001
+From: Alexander Klimov <alserkli@inbox.ru>
+Date: Mon, 26 Jan 2015 18:45:23 +0200
+Subject: [PATCH] [ADT/IntrusiveRefCntPtr] Give friend access to
+ IntrusiveRefCntPtr<X> so the relevant move constructor can
+ access 'Obj'.
+
+From LLVM upstream:
+Author: Argyrios Kyrtzidis <akyrtzi@gmail.com>
+Date:   Tue Sep 23 06:06:43 2014 +0000
+git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218295 91177308-0d34-0410-b5e6-96231b3b80d8
+---
+ interpreter/llvm/src/include/llvm/ADT/IntrusiveRefCntPtr.h |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/include/llvm/ADT/IntrusiveRefCntPtr.h b/include/llvm/ADT/IntrusiveRefCntPtr.h
+index f9df378..c859c98 100644
+--- a/include/llvm/ADT/IntrusiveRefCntPtr.h
++++ b/include/llvm/ADT/IntrusiveRefCntPtr.h
+@@ -197,6 +197,9 @@ public:
+   private:
+     void retain() { if (Obj) IntrusiveRefCntPtrInfo<T>::retain(Obj); }
+     void release() { if (Obj) IntrusiveRefCntPtrInfo<T>::release(Obj); }
++
++    template <typename X>
++    friend class IntrusiveRefCntPtr;
+   };
+   template<class T, class U>
+-- 
+1.7.10.4
+
index b4b1dd9..6adf689 100644 (file)
@@ -1,5 +1,5 @@
 Fix static linking of 'lvm.static', which indirectly depend on libpthread
-via libdevmapper.a.
+and libm via libdevmapper.a.
 
 --- LVM2.2.02.166/tools/Makefile.in    2016-11-22 21:31:15.521045149 +0100
 +++ LVM2.2.02.166/tools/Makefile.in    2016-11-22 21:31:24.085082767 +0100
@@ -8,7 +8,7 @@ via libdevmapper.a.
  lvm.static: $(OBJECTS) lvm-static.o $(top_builddir)/lib/liblvm-internal.a  $(interfacebuilddir)/libdevmapper.a
        $(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacebuilddir) -o $@ \
 -            $(OBJECTS) lvm-static.o $(LVMLIBS) $(STATIC_LIBS) $(LIBS)
-+            $(OBJECTS) lvm-static.o $(LVMLIBS) $(STATIC_LIBS) $(LIBS) $(PTHREAD_LIBS)
++            $(OBJECTS) lvm-static.o $(LVMLIBS) $(STATIC_LIBS) $(LIBS) $(PTHREAD_LIBS) $(M_LIBS)
  
  liblvm2cmd.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o
        cat $(top_builddir)/lib/liblvm-internal.a > $@
diff --git a/gnu/packages/patches/lxterminal-CVE-2016-10369.patch b/gnu/packages/patches/lxterminal-CVE-2016-10369.patch
new file mode 100644 (file)
index 0000000..809eef0
--- /dev/null
@@ -0,0 +1,37 @@
+Fix CVE-2016-10369:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10369
+
+Patch copied from upstream source repository:
+
+https://git.lxde.org/gitweb/?p=lxde/lxterminal.git;a=commit;h=f99163c6ff8b2f57c5f37b1ce5d62cf7450d4648
+
+From f99163c6ff8b2f57c5f37b1ce5d62cf7450d4648 Mon Sep 17 00:00:00 2001
+From: Yao Wei <mwei@lxde.org>
+Date: Mon, 8 May 2017 00:47:55 +0800
+Subject: [PATCH] fix: use g_get_user_runtime_dir for socket directory
+
+This bug is pointed out by stackexchange user that putting socket file in
+/tmp is a potential risk. Putting the socket dir in user directory could
+mitigate the risk.
+---
+ src/unixsocket.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/unixsocket.c b/src/unixsocket.c
+index 4c660ac..f88284c 100644
+--- a/src/unixsocket.c
++++ b/src/unixsocket.c
+@@ -140,7 +140,8 @@ gboolean lxterminal_socket_initialize(LXTermWindow * lxtermwin, gint argc, gchar
+      * This function returns TRUE if this process should keep running and FALSE if it should exit. */
+     /* Formulate the path for the Unix domain socket. */
+-    gchar * socket_path = g_strdup_printf("/tmp/.lxterminal-socket%s-%s", gdk_display_get_name(gdk_display_get_default()), g_get_user_name());
++    gchar * socket_path = g_strdup_printf("%s/.lxterminal-socket-%s", g_get_user_runtime_dir(), gdk_display_get_name(gdk_display_get_default()));
++    printf("%s\n", socket_path);
+     /* Create socket. */
+     int fd = socket(PF_UNIX, SOCK_STREAM, 0);
+-- 
+2.1.4
+
diff --git a/gnu/packages/patches/miniupnpc-CVE-2017-8798.patch b/gnu/packages/patches/miniupnpc-CVE-2017-8798.patch
new file mode 100644 (file)
index 0000000..24eed60
--- /dev/null
@@ -0,0 +1,55 @@
+Fix CVE-2017-8798.
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8798
+http://seclists.org/oss-sec/2017/q2/247
+
+Patch copied from upstream source repository, with Changelog entry removed:
+
+https://github.com/miniupnp/miniupnp/commit/f0f1f4b22d6a98536377a1bb07e7c20e4703d229
+
+diff --git a/miniwget.c b/miniwget.c
+index 37cb47b..1eda57c 100644
+--- a/miniwget.c
++++ b/miniwget.c
+@@ -284,11 +284,12 @@ getHTTPResponse(int s, int * size, int * status_code)
+                                                       goto end_of_stream;
+                                               }
+                                       }
+-                                      bytestocopy = ((int)chunksize < (n - i))?chunksize:(unsigned int)(n - i);
++                                      /* it is guaranteed that (n >= i) */
++                                      bytestocopy = (chunksize < (unsigned int)(n - i))?chunksize:(unsigned int)(n - i);
+                                       if((content_buf_used + bytestocopy) > content_buf_len)
+                                       {
+                                               char * tmp;
+-                                              if(content_length >= (int)(content_buf_used + bytestocopy)) {
++                                              if((content_length >= 0) && ((unsigned int)content_length >= (content_buf_used + bytestocopy))) {
+                                                       content_buf_len = content_length;
+                                               } else {
+                                                       content_buf_len = content_buf_used + bytestocopy;
+@@ -313,14 +314,15 @@ getHTTPResponse(int s, int * size, int * status_code)
+                       {
+                               /* not chunked */
+                               if(content_length > 0
+-                                 && (int)(content_buf_used + n) > content_length) {
++                                 && (content_buf_used + n) > (unsigned int)content_length) {
+                                       /* skipping additional bytes */
+                                       n = content_length - content_buf_used;
+                               }
+                               if(content_buf_used + n > content_buf_len)
+                               {
+                                       char * tmp;
+-                                      if(content_length >= (int)(content_buf_used + n)) {
++                                      if(content_length >= 0
++                                         && (unsigned int)content_length >= (content_buf_used + n)) {
+                                               content_buf_len = content_length;
+                                       } else {
+                                               content_buf_len = content_buf_used + n;
+@@ -340,7 +342,7 @@ getHTTPResponse(int s, int * size, int * status_code)
+                       }
+               }
+               /* use the Content-Length header value if available */
+-              if(content_length > 0 && (int)content_buf_used >= content_length)
++              if(content_length > 0 && content_buf_used >= (unsigned int)content_length)
+               {
+ #ifdef DEBUG
+                       printf("End of HTTP content\n");
diff --git a/gnu/packages/patches/mozjs38-pkg-config-version.patch b/gnu/packages/patches/mozjs38-pkg-config-version.patch
new file mode 100644 (file)
index 0000000..49ff6f6
--- /dev/null
@@ -0,0 +1,24 @@
+Taken from https://bug1339931.bmoattachments.org/attachment.cgi?id=8837770.
+
+Add major version to pkg-config filename.
+Author: Rico Tzschichholz <ricotz@ubuntu.com>
+Forwarded: no
+Last-Update: 2015-05-04
+
+Index: b/js/src/Makefile.in
+===================================================================
+--- a/js/src/Makefile.in
++++ b/js/src/Makefile.in
+@@ -214,10 +214,10 @@
+ $(JS_CONFIG_NAME): js-config
+    cp $^ $@
+-$(LIBRARY_NAME).pc: js.pc
++$(JS_LIBRARY_NAME).pc: js.pc
+       cp $^ $@
+-install:: $(LIBRARY_NAME).pc
++install:: $(JS_LIBRARY_NAME).pc
+       $(SYSINSTALL) $^ $(DESTDIR)$(libdir)/pkgconfig
+ install:: js-config.h
diff --git a/gnu/packages/patches/mozjs38-shell-version.patch b/gnu/packages/patches/mozjs38-shell-version.patch
new file mode 100644 (file)
index 0000000..e7d3d19
--- /dev/null
@@ -0,0 +1,67 @@
+Taken from https://bug1339931.bmoattachments.org/attachment.cgi?id=8837771.
+
+# HG changeset patch
+# Parent 4732a0e5d22bc7e5c1f1ace7a182d537d9cc2c6a
+Add major version to shell and js-config filenames.
+Author: Rico Tzschichholz <ricotz@ubuntu.com>
+Forwarded: no
+Last-Update: 2014-10-29
+
+---
+diff --git a/js/src/configure b/js/src/configure
+--- a/js/src/configure
++++ b/js/src/configure
+@@ -1696,8 +1696,13 @@
+ MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
+ IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
++if test -n "$JS_STANDALONE"; then
++JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION
++JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config
++else
+ JS_SHELL_NAME=js
+ JS_CONFIG_NAME=js-config
++fi
+ if test -n "$IS_ALPHA"; then
+
+diff --git a/js/src/configure.in b/js/src/configure.in
+--- a/js/src/configure.in
++++ b/js/src/configure.in
+@@ -234,16 +234,13 @@ MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSI
+ MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
+ IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
+-dnl XXX in a temporary bid to avoid developer anger at renaming files
+-dnl XXX before "js" symlinks exist, don't change names.
+-dnl
+-dnl if test -n "$JS_STANDALONE"; then
+-dnl JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION
+-dnl JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config
+-dnl else
++if test -n "$JS_STANDALONE"; then
++JS_SHELL_NAME=js$MOZJS_MAJOR_VERSION
++JS_CONFIG_NAME=js$MOZJS_MAJOR_VERSION-config
++else
+ JS_SHELL_NAME=js
+ JS_CONFIG_NAME=js-config
+-dnl fi
++fi
+ changequote([,])
+ if test -n "$IS_ALPHA"; then
+
+diff -r 80a9e64d75f5 js/src/Makefile.in
+--- a/js/src/Makefile.in        Wed Jun 25 15:11:42 2014 +0200
++++ b/js/src/Makefile.in        Sat Jul 05 14:08:38 2014 +0200
+@@ -273,6 +273,9 @@
+ SCRIPTS = $(JS_CONFIG_NAME)
+ SDK_BINARY = $(JS_CONFIG_NAME)
++$(JS_CONFIG_NAME): js-config
++      cp $^ $@
++
+ $(JS_LIBRARY_NAME).pc: js.pc
+       cp $^ $@
diff --git a/gnu/packages/patches/mozjs38-tracelogger.patch b/gnu/packages/patches/mozjs38-tracelogger.patch
new file mode 100644 (file)
index 0000000..0375ec3
--- /dev/null
@@ -0,0 +1,608 @@
+Squashed version of several commits to fix the tracelogger.
+
+Taken from
+https://github.com/GNOME/jhbuild/blob/master/patches/mozjs38-fix-tracelogger.patch.
+
+# === Fix the SM38 tracelogger ===
+# This patch is a squashed version of several patches that were adapted
+# to fix failing hunks.
+#
+# Applied in the following order, they are:
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223767
+#    Assertion failure: i < size_, at js/src/vm/TraceLoggingTypes.h:210 
+#    Also fix stop-information to make reduce.py work correctly.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227914
+#    Limit the memory tracelogger can take.
+#    This causes tracelogger to flush data to the disk regularly and prevents out of 
+#    memory issues if a lot of data gets logged.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1155618
+#    Fix tracelogger destructor that touches possibly uninitialised hash table.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1223636
+#    Don't treat extraTextId as containing only extra ids.
+#    This fixes an assertion failure: id == nextTextId at js/src/vm/TraceLoggingGraph.cpp
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1227028
+#    Fix when to keep the payload of a TraceLogger event.
+#    This fixes an assertion failure: textId < uint32_t(1 << 31) at js/src/vm/TraceLoggingGraph.h
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1266649
+#    Handle failing to add to pointermap gracefully.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1280648
+#    Don't cache based on pointers to movable GC things.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1224123
+#    Fix the use of LastEntryId in tracelogger.h.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1231170
+#    Use size in debugger instead of the current id to track last logged item.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1221844
+#    Move TraceLogger_Invalidation to LOG_ITEM.
+#    Add some debug checks to logTimestamp.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1255766
+#    Also mark resizing of memory.
+# * https://bugzilla.mozilla.org/show_bug.cgi?id=1259403
+#    Only increase capacity by multiples of 2.
+#    Always make sure there are 3 free slots for events.
+# ===
+
+diff --git a/js/src/jit-test/tests/tracelogger/bug1231170.js b/js/src/jit-test/tests/tracelogger/bug1231170.js
+new file mode 100644
+index 0000000..023e93e
+--- /dev/null
++++ b/js/src/jit-test/tests/tracelogger/bug1231170.js
+@@ -0,0 +1,3 @@
++var du = new Debugger();
++if (typeof du.drainTraceLogger === "function")
++    du.drainTraceLogger();
+diff --git a/js/src/jit-test/tests/tracelogger/bug1266649.js b/js/src/jit-test/tests/tracelogger/bug1266649.js
+new file mode 100644
+index 0000000..81ae7ad
+--- /dev/null
++++ b/js/src/jit-test/tests/tracelogger/bug1266649.js
+@@ -0,0 +1,10 @@
++
++var du = new Debugger();
++if (typeof du.setupTraceLogger === "function" &&
++    typeof oomTest === 'function')
++{
++    du.setupTraceLogger({
++        Scripts: true
++    })
++    oomTest(() => function(){});
++}
+diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp
+index 93e2fda..09049d6 100644
+--- a/js/src/jit/Ion.cpp
++++ b/js/src/jit/Ion.cpp
+@@ -1055,6 +1055,8 @@ IonScript::Destroy(FreeOp* fop, IonScript* script)
+     script->destroyCaches();
+     script->unlinkFromRuntime(fop);
++    // Frees the potential event we have set.
++    script->traceLoggerScriptEvent_ = TraceLoggerEvent();
+     fop->free_(script);
+ }
+diff --git a/js/src/vm/Debugger.cpp b/js/src/vm/Debugger.cpp
+index 26262fd..af7f313 100644
+--- a/js/src/vm/Debugger.cpp
++++ b/js/src/vm/Debugger.cpp
+@@ -369,10 +369,10 @@ Debugger::Debugger(JSContext* cx, NativeObject* dbg)
+     objects(cx),
+     environments(cx),
+ #ifdef NIGHTLY_BUILD
+-    traceLoggerLastDrainedId(0),
++    traceLoggerLastDrainedSize(0),
+     traceLoggerLastDrainedIteration(0),
+ #endif
+-    traceLoggerScriptedCallsLastDrainedId(0),
++    traceLoggerScriptedCallsLastDrainedSize(0),
+     traceLoggerScriptedCallsLastDrainedIteration(0)
+ {
+     assertSameCompartment(cx, dbg);
+@@ -3907,9 +3907,9 @@ Debugger::drainTraceLogger(JSContext* cx, unsigned argc, Value* vp)
+     size_t num;
+     TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime());
+     bool lostEvents = logger->lostEvents(dbg->traceLoggerLastDrainedIteration,
+-                                         dbg->traceLoggerLastDrainedId);
++                                         dbg->traceLoggerLastDrainedSize);
+     EventEntry* events = logger->getEventsStartingAt(&dbg->traceLoggerLastDrainedIteration,
+-                                                     &dbg->traceLoggerLastDrainedId,
++                                                     &dbg->traceLoggerLastDrainedSize,
+                                                      &num);
+     RootedObject array(cx, NewDenseEmptyArray(cx));
+@@ -4002,10 +4002,10 @@ Debugger::drainTraceLoggerScriptCalls(JSContext* cx, unsigned argc, Value* vp)
+     size_t num;
+     TraceLoggerThread* logger = TraceLoggerForMainThread(cx->runtime());
+     bool lostEvents = logger->lostEvents(dbg->traceLoggerScriptedCallsLastDrainedIteration,
+-                                         dbg->traceLoggerScriptedCallsLastDrainedId);
++                                         dbg->traceLoggerScriptedCallsLastDrainedSize);
+     EventEntry* events = logger->getEventsStartingAt(
+                                          &dbg->traceLoggerScriptedCallsLastDrainedIteration,
+-                                         &dbg->traceLoggerScriptedCallsLastDrainedId,
++                                         &dbg->traceLoggerScriptedCallsLastDrainedSize,
+                                          &num);
+     RootedObject array(cx, NewDenseEmptyArray(cx));
+diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h
+index 8cac36a..c92d685 100644
+--- a/js/src/vm/Debugger.h
++++ b/js/src/vm/Debugger.h
+@@ -314,10 +314,10 @@ class Debugger : private mozilla::LinkedListElement<Debugger>
+      * lost events.
+      */
+ #ifdef NIGHTLY_BUILD
+-    uint32_t traceLoggerLastDrainedId;
++    uint32_t traceLoggerLastDrainedSize;
+     uint32_t traceLoggerLastDrainedIteration;
+ #endif
+-    uint32_t traceLoggerScriptedCallsLastDrainedId;
++    uint32_t traceLoggerScriptedCallsLastDrainedSize;
+     uint32_t traceLoggerScriptedCallsLastDrainedIteration;
+     class FrameRange;
+diff --git a/js/src/vm/TraceLogging.cpp b/js/src/vm/TraceLogging.cpp
+index 6715b36..9766a6f 100644
+--- a/js/src/vm/TraceLogging.cpp
++++ b/js/src/vm/TraceLogging.cpp
+@@ -131,7 +131,7 @@ TraceLoggerThread::init()
+ {
+     if (!pointerMap.init())
+         return false;
+-    if (!extraTextId.init())
++    if (!textIdPayloads.init())
+         return false;
+     if (!events.init())
+         return false;
+@@ -185,10 +185,10 @@ TraceLoggerThread::~TraceLoggerThread()
+         graph = nullptr;
+     }
+-    for (TextIdHashMap::Range r = extraTextId.all(); !r.empty(); r.popFront())
+-        js_delete(r.front().value());
+-    extraTextId.finish();
+-    pointerMap.finish();
++    if (textIdPayloads.initialized()) {
++        for (TextIdHashMap::Range r = textIdPayloads.all(); !r.empty(); r.popFront())
++            js_delete(r.front().value());
++    }
+ }
+ bool
+@@ -287,7 +287,7 @@ TraceLoggerThread::eventText(uint32_t id)
+     if (id < TraceLogger_Last)
+         return TLTextIdString(static_cast<TraceLoggerTextId>(id));
+-    TextIdHashMap::Ptr p = extraTextId.lookup(id);
++    TextIdHashMap::Ptr p = textIdPayloads.lookup(id);
+     MOZ_ASSERT(p);
+     return p->value()->string();
+@@ -341,13 +341,15 @@ TraceLoggerThread::extractScriptDetails(uint32_t textId, const char** filename,
+ TraceLoggerEventPayload*
+ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId textId)
+ {
+-    TextIdHashMap::AddPtr p = extraTextId.lookupForAdd(textId);
+-    if (p)
++    TextIdHashMap::AddPtr p = textIdPayloads.lookupForAdd(textId);
++    if (p) {
++        MOZ_ASSERT(p->value()->textId() == textId); // Sanity check.
+         return p->value();
++    }
+     TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, (char*)nullptr);
+-    if (!extraTextId.add(p, textId, payload))
++    if (!textIdPayloads.add(p, textId, payload))
+         return nullptr;
+     return payload;
+@@ -357,8 +359,10 @@ TraceLoggerEventPayload*
+ TraceLoggerThread::getOrCreateEventPayload(const char* text)
+ {
+     PointerHashMap::AddPtr p = pointerMap.lookupForAdd((const void*)text);
+-    if (p)
++    if (p) {
++        MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check.
+         return p->value();
++    }
+     size_t len = strlen(text);
+     char* str = js_pod_malloc<char>(len + 1);
+@@ -369,7 +373,7 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text)
+     MOZ_ASSERT(ret == len);
+     MOZ_ASSERT(strlen(str) == len);
+-    uint32_t textId = extraTextId.count() + TraceLogger_Last;
++    uint32_t textId = nextTextId;
+     TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str);
+     if (!payload) {
+@@ -377,17 +381,19 @@ TraceLoggerThread::getOrCreateEventPayload(const char* text)
+         return nullptr;
+     }
+-    if (!extraTextId.putNew(textId, payload)) {
++    if (!textIdPayloads.putNew(textId, payload)) {
+         js_delete(payload);
+         return nullptr;
+     }
+-    if (!pointerMap.add(p, text, payload))
+-        return nullptr;
+-
+     if (graph.get())
+         graph->addTextId(textId, str);
++    nextTextId++;
++
++    if (!pointerMap.add(p, text, payload))
++        return nullptr;
++
+     return payload;
+ }
+@@ -407,9 +413,14 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f
+     if (!traceLoggerState->isTextIdEnabled(type))
+         return getOrCreateEventPayload(type);
+-    PointerHashMap::AddPtr p = pointerMap.lookupForAdd(ptr);
+-    if (p)
+-        return p->value();
++    PointerHashMap::AddPtr p;
++    if (ptr) {
++        p = pointerMap.lookupForAdd(ptr);
++        if (p) {
++            MOZ_ASSERT(p->value()->textId() < nextTextId); // Sanity check.
++            return p->value();
++        }
++    }
+     // Compute the length of the string to create.
+     size_t lenFilename = strlen(filename);
+@@ -428,24 +439,28 @@ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, const char* f
+     MOZ_ASSERT(ret == len);
+     MOZ_ASSERT(strlen(str) == len);
+-    uint32_t textId = extraTextId.count() + TraceLogger_Last;
++    uint32_t textId = nextTextId;
+     TraceLoggerEventPayload* payload = js_new<TraceLoggerEventPayload>(textId, str);
+     if (!payload) {
+         js_free(str);
+         return nullptr;
+     }
+-    if (!extraTextId.putNew(textId, payload)) {
++    if (!textIdPayloads.putNew(textId, payload)) {
+         js_delete(payload);
+         return nullptr;
+     }
+-    if (!pointerMap.add(p, ptr, payload))
+-        return nullptr;
+-
+     if (graph.get())
+         graph->addTextId(textId, str);
++    nextTextId++;
++
++    if (ptr) {
++        if (!pointerMap.add(p, ptr, payload))
++            return nullptr;
++    }
++
+     return payload;
+ }
+@@ -453,14 +468,14 @@ TraceLoggerEventPayload*
+ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type, JSScript* script)
+ {
+     return getOrCreateEventPayload(type, script->filename(), script->lineno(), script->column(),
+-                                   script);
++                                   nullptr);
+ }
+ TraceLoggerEventPayload*
+ TraceLoggerThread::getOrCreateEventPayload(TraceLoggerTextId type,
+                                            const JS::ReadOnlyCompileOptions& script)
+ {
+-    return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, &script);
++    return getOrCreateEventPayload(type, script.filename(), script.lineno, script.column, nullptr);
+ }
+ void
+@@ -485,7 +500,7 @@ TraceLoggerThread::startEvent(uint32_t id)
+     if (!traceLoggerState->isTextIdEnabled(id))
+        return;
+-    logTimestamp(id);
++    log(id);
+ }
+ void
+@@ -510,7 +525,7 @@ TraceLoggerThread::stopEvent(uint32_t id)
+     if (!traceLoggerState->isTextIdEnabled(id))
+         return;
+-    logTimestamp(TraceLogger_Stop);
++    log(TraceLogger_Stop);
+ }
+ void
+@@ -522,23 +537,57 @@ TraceLoggerThread::logTimestamp(TraceLoggerTextId id)
+ void
+ TraceLoggerThread::logTimestamp(uint32_t id)
+ {
++    MOZ_ASSERT(id > TraceLogger_LastTreeItem && id < TraceLogger_Last);
++    log(id);
++}
++
++void
++TraceLoggerThread::log(uint32_t id)
++{
+     if (enabled == 0)
+         return;
+     MOZ_ASSERT(traceLoggerState);
+-    if (!events.ensureSpaceBeforeAdd()) {
++
++    // We request for 3 items to add, since if we don't have enough room
++    // we record the time it took to make more place. To log this information
++    // we need 2 extra free entries.
++    if (!events.hasSpaceForAdd(3)) {
+         uint64_t start = rdtsc() - traceLoggerState->startupTime;
+-        if (graph.get())
+-            graph->log(events);
++        if (!events.ensureSpaceBeforeAdd(3)) {
++            if (graph.get())
++                graph->log(events);
++
++            iteration_++;
++            events.clear();
++
++            // Remove the item in the pointerMap for which the payloads
++            // have no uses anymore
++            for (PointerHashMap::Enum e(pointerMap); !e.empty(); e.popFront()) {
++                if (e.front().value()->uses() != 0)
++                    continue;
++
++                TextIdHashMap::Ptr p = textIdPayloads.lookup(e.front().value()->textId());
++                MOZ_ASSERT(p);
++                textIdPayloads.remove(p);
++
++                e.removeFront();
++            }
+-        iteration_++;
+-        events.clear();
++            // Free all payloads that have no uses anymore.
++            for (TextIdHashMap::Enum e(textIdPayloads); !e.empty(); e.popFront()) {
++                if (e.front().value()->uses() == 0) {
++                    js_delete(e.front().value());
++                    e.removeFront();
++                }
++            }
++        }
+         // Log the time it took to flush the events as being from the
+         // Tracelogger.
+         if (graph.get()) {
+-            MOZ_ASSERT(events.capacity() > 2);
++            MOZ_ASSERT(events.hasSpaceForAdd(2));
+             EventEntry& entryStart = events.pushUninitialized();
+             entryStart.time = start;
+             entryStart.textId = TraceLogger_Internal;
+@@ -548,13 +597,6 @@ TraceLoggerThread::logTimestamp(uint32_t id)
+             entryStop.textId = TraceLogger_Stop;
+         }
+-        // Free all TextEvents that have no uses anymore.
+-        for (TextIdHashMap::Enum e(extraTextId); !e.empty(); e.popFront()) {
+-            if (e.front().value()->uses() == 0) {
+-                js_delete(e.front().value());
+-                e.removeFront();
+-            }
+-        }
+     }
+     uint64_t time = rdtsc() - traceLoggerState->startupTime;
+@@ -956,3 +998,16 @@ TraceLoggerEvent::~TraceLoggerEvent()
+     if (payload_)
+         payload_->release();
+ }
++
++TraceLoggerEvent&
++TraceLoggerEvent::operator=(const TraceLoggerEvent& other)
++{
++    if (hasPayload())
++        payload()->release();
++    if (other.hasPayload())
++        other.payload()->use();
++
++    payload_ = other.payload_;
++
++    return *this;
++}
+diff --git a/js/src/vm/TraceLogging.h b/js/src/vm/TraceLogging.h
+index a124dcb..91a1eb0 100644
+--- a/js/src/vm/TraceLogging.h
++++ b/js/src/vm/TraceLogging.h
+@@ -110,6 +110,9 @@ class TraceLoggerEvent {
+     bool hasPayload() const {
+         return !!payload_;
+     }
++
++    TraceLoggerEvent& operator=(const TraceLoggerEvent& other);
++    TraceLoggerEvent(const TraceLoggerEvent& event) = delete;
+ };
+ /**
+@@ -130,6 +133,10 @@ class TraceLoggerEventPayload {
+         uses_(0)
+     { }
++    ~TraceLoggerEventPayload() {
++        MOZ_ASSERT(uses_ == 0);
++    }
++
+     uint32_t textId() {
+         return textId_;
+     }
+@@ -166,7 +173,8 @@ class TraceLoggerThread
+     mozilla::UniquePtr<TraceLoggerGraph> graph;
+     PointerHashMap pointerMap;
+-    TextIdHashMap extraTextId;
++    TextIdHashMap textIdPayloads;
++    uint32_t nextTextId;
+     ContinuousSpace<EventEntry> events;
+@@ -181,6 +189,7 @@ class TraceLoggerThread
+       : enabled(0),
+         failed(false),
+         graph(),
++        nextTextId(TraceLogger_Last),
+         iteration_(0),
+         top(nullptr)
+     { }
+@@ -195,22 +204,22 @@ class TraceLoggerThread
+     bool enable(JSContext* cx);
+     bool disable();
+-    // Given the previous iteration and lastEntryId, return an array of events
++    // Given the previous iteration and size, return an array of events
+     // (there could be lost events). At the same time update the iteration and
+-    // lastEntry and gives back how many events there are.
+-    EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastEntryId, size_t* num) {
++    // size and gives back how many events there are.
++    EventEntry* getEventsStartingAt(uint32_t* lastIteration, uint32_t* lastSize, size_t* num) {
+         EventEntry* start;
+         if (iteration_ == *lastIteration) {
+-            MOZ_ASSERT(events.lastEntryId() >= *lastEntryId);
+-            *num = events.lastEntryId() - *lastEntryId;
+-            start = events.data() + *lastEntryId + 1;
++            MOZ_ASSERT(*lastSize <= events.size());
++            *num = events.size() - *lastSize;
++            start = events.data() + *lastSize;
+         } else {
+-            *num = events.lastEntryId() + 1;
++            *num = events.size();
+             start = events.data();
+         }
+         *lastIteration = iteration_;
+-        *lastEntryId = events.lastEntryId();
++        *lastSize = events.size();
+         return start;
+     }
+@@ -220,16 +229,16 @@ class TraceLoggerThread
+                               const char** lineno, size_t* lineno_len, const char** colno,
+                               size_t* colno_len);
+-    bool lostEvents(uint32_t lastIteration, uint32_t lastEntryId) {
++    bool lostEvents(uint32_t lastIteration, uint32_t lastSize) {
+         // If still logging in the same iteration, there are no lost events.
+         if (lastIteration == iteration_) {
+-            MOZ_ASSERT(lastEntryId <= events.lastEntryId());
++            MOZ_ASSERT(lastSize <= events.size());
+             return false;
+         }
+-        // When proceeded to the next iteration and lastEntryId points to
+-        // the maximum capacity there are no logs that are lost.
+-        if (lastIteration + 1 == iteration_ && lastEntryId == events.capacity())
++        // If we are in a consecutive iteration we are only sure we didn't lose any events,
++        // when the lastSize equals the maximum size 'events' can get.
++        if (lastIteration == iteration_ - 1 && lastSize == events.maxSize())
+             return false;
+         return true;
+@@ -268,6 +277,7 @@ class TraceLoggerThread
+     void stopEvent(uint32_t id);
+   private:
+     void stopEvent();
++    void log(uint32_t id);
+   public:
+     static unsigned offsetOfEnabled() {
+diff --git a/js/src/vm/TraceLoggingGraph.cpp b/js/src/vm/TraceLoggingGraph.cpp
+index d1b7f2e..a4eb273 100644
+--- a/js/src/vm/TraceLoggingGraph.cpp
++++ b/js/src/vm/TraceLoggingGraph.cpp
+@@ -276,7 +276,7 @@ TraceLoggerGraph::flush()
+         if (bytesWritten < tree.size())
+             return false;
+-        treeOffset += tree.lastEntryId();
++        treeOffset += tree.size();
+         tree.clear();
+     }
+@@ -359,7 +359,7 @@ TraceLoggerGraph::startEventInternal(uint32_t id, uint64_t timestamp)
+     if (parent.lastChildId() == 0) {
+         MOZ_ASSERT(!entry.hasChildren());
+-        MOZ_ASSERT(parent.treeId() == tree.lastEntryId() + treeOffset);
++        MOZ_ASSERT(parent.treeId() == treeOffset + tree.size() - 1);
+         if (!updateHasChildren(parent.treeId()))
+             return false;
+diff --git a/js/src/vm/TraceLoggingTypes.h b/js/src/vm/TraceLoggingTypes.h
+index f1c9d0c..10b76d6 100644
+--- a/js/src/vm/TraceLoggingTypes.h
++++ b/js/src/vm/TraceLoggingTypes.h
+@@ -21,7 +21,6 @@
+     _(Internal)                                       \
+     _(Interpreter)                                    \
+     _(InlinedScripts)                                 \
+-    _(Invalidation)                                   \
+     _(IonCompilation)                                 \
+     _(IonCompilationPaused)                           \
+     _(IonLinking)                                     \
+@@ -60,6 +59,7 @@
+ #define TRACELOGGER_LOG_ITEMS(_)                      \
+     _(Bailout)                                        \
++    _(Invalidation)                                   \
+     _(Disable)                                        \
+     _(Enable)                                         \
+     _(Stop)
+@@ -130,6 +130,9 @@ class ContinuousSpace {
+     uint32_t size_;
+     uint32_t capacity_;
++    // The maximum amount of ram memory a continuous space structure can take (in bytes).
++    static const uint32_t LIMIT = 200 * 1024 * 1024;
++
+   public:
+     ContinuousSpace ()
+      : data_(nullptr)
+@@ -151,6 +154,10 @@ class ContinuousSpace {
+         data_ = nullptr;
+     }
++    static uint32_t maxSize() {
++        return LIMIT / sizeof(T);
++    }
++
+     T* data() {
+         return data_;
+     }
+@@ -187,11 +194,14 @@ class ContinuousSpace {
+         if (hasSpaceForAdd(count))
+             return true;
++        // Limit the size of a continuous buffer.
++        if (size_ + count > maxSize())
++            return false;
++
+         uint32_t nCapacity = capacity_ * 2;
+-        if (size_ + count > nCapacity)
+-            nCapacity = size_ + count;
+-        T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T));
++        nCapacity = (nCapacity < maxSize()) ? nCapacity : maxSize();
++        T* entries = (T*) js_realloc(data_, nCapacity * sizeof(T));
+         if (!entries)
+             return false;
diff --git a/gnu/packages/patches/mozjs38-version-detection.patch b/gnu/packages/patches/mozjs38-version-detection.patch
new file mode 100644 (file)
index 0000000..ec2d264
--- /dev/null
@@ -0,0 +1,180 @@
+Taken from
+https://trac.wildfiregames.com/export/18656/ps/trunk/libraries/source/spidermonkey/FixVersionDetectionConfigure.diff.
+
+Fixes a version detection issue in 0ad.  See
+https://lists.gnu.org/archive/html/guix-devel/2017-01/msg00625.html.
+
+diff --git a/js/src/configure b/js/src/configure
+--- a/js/src/configure
++++ b/js/src/configure
+@@ -1662,70 +1662,6 @@ esac
+ fi
+-MOZILLA_VERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir`
+-MOZILLA_UAVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --uaversion`
+-MOZILLA_SYMBOLVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --symbolversion`
+-
+-cat >> confdefs.pytmp <<EOF
+-    (''' MOZILLA_VERSION ''', r''' "$MOZILLA_VERSION" ''')
+-EOF
+-cat >> confdefs.h <<EOF
+-#define MOZILLA_VERSION "$MOZILLA_VERSION"
+-EOF
+-
+-cat >> confdefs.pytmp <<EOF
+-    (''' MOZILLA_VERSION_U ''', r''' $MOZILLA_VERSION ''')
+-EOF
+-cat >> confdefs.h <<EOF
+-#define MOZILLA_VERSION_U $MOZILLA_VERSION
+-EOF
+-
+-cat >> confdefs.pytmp <<EOF
+-    (''' MOZILLA_UAVERSION ''', r''' "$MOZILLA_UAVERSION" ''')
+-EOF
+-cat >> confdefs.h <<EOF
+-#define MOZILLA_UAVERSION "$MOZILLA_UAVERSION"
+-EOF
+-
+-
+-
+-# Separate version into components for use in shared object naming etc
+-
+-MOZJS_MAJOR_VERSION=`echo $MOZILLA_VERSION | sed "s|\(^[0-9]*\)\.[0-9]*.*|\1|"`
+-MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.\([0-9]*\).*|\1|"`
+-MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
+-IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
+-
+-JS_SHELL_NAME=js
+-JS_CONFIG_NAME=js-config
+-
+-
+-if test -n "$IS_ALPHA"; then
+-  
+-  MOZJS_ALPHA=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9\.]*\([^0-9]\).*|\1|"`
+-  
+-fi
+-cat >> confdefs.pytmp <<EOF
+-    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
+-EOF
+-cat >> confdefs.h <<EOF
+-#define MOZJS_MAJOR_VERSION $MOZJS_MAJOR_VERSION
+-EOF
+-
+-cat >> confdefs.pytmp <<EOF
+-    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
+-EOF
+-cat >> confdefs.h <<EOF
+-#define MOZJS_MINOR_VERSION $MOZJS_MINOR_VERSION
+-EOF
+-
+-
+-
+-
+-
+-
+-
+-
+ AR_FLAGS='crs $@'
+@@ -5731,6 +5565,71 @@ XCFLAGS="$X_CFLAGS"
+ fi # COMPILE_ENVIRONMENT
++MOZILLA_VERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir`
++MOZILLA_UAVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --uaversion`
++MOZILLA_SYMBOLVERSION=`$PYTHON $srcdir/python/mozbuild/mozbuild/milestone.py --topsrcdir $srcdir --symbolversion`
++
++cat >> confdefs.pytmp <<EOF
++    (''' MOZILLA_VERSION ''', r''' "$MOZILLA_VERSION" ''')
++EOF
++cat >> confdefs.h <<EOF
++#define MOZILLA_VERSION "$MOZILLA_VERSION"
++EOF
++
++cat >> confdefs.pytmp <<EOF
++    (''' MOZILLA_VERSION_U ''', r''' $MOZILLA_VERSION ''')
++EOF
++cat >> confdefs.h <<EOF
++#define MOZILLA_VERSION_U $MOZILLA_VERSION
++EOF
++
++cat >> confdefs.pytmp <<EOF
++    (''' MOZILLA_UAVERSION ''', r''' "$MOZILLA_UAVERSION" ''')
++EOF
++cat >> confdefs.h <<EOF
++#define MOZILLA_UAVERSION "$MOZILLA_UAVERSION"
++EOF
++
++
++
++# Separate version into components for use in shared object naming etc
++
++MOZJS_MAJOR_VERSION=`echo $MOZILLA_VERSION | sed "s|\(^[0-9]*\)\.[0-9]*.*|\1|"`
++MOZJS_MINOR_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.\([0-9]*\).*|\1|"`
++MOZJS_PATCH_VERSION=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9]*[^0-9]*||"`
++IS_ALPHA=`echo $MOZILLA_VERSION | grep '[ab]'`
++
++JS_SHELL_NAME=js
++JS_CONFIG_NAME=js-config
++
++
++if test -n "$IS_ALPHA"; then
++  
++  MOZJS_ALPHA=`echo $MOZILLA_VERSION | sed "s|^[0-9]*\.[0-9\.]*\([^0-9]\).*|\1|"`
++  
++fi
++cat >> confdefs.pytmp <<EOF
++    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
++EOF
++cat >> confdefs.h <<EOF
++#define MOZJS_MAJOR_VERSION $MOZJS_MAJOR_VERSION
++EOF
++
++cat >> confdefs.pytmp <<EOF
++    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
++EOF
++cat >> confdefs.h <<EOF
++#define MOZJS_MINOR_VERSION $MOZJS_MINOR_VERSION
++EOF
++
++
++
++
++
++
++
++
++
+ AS_BIN=$AS
+ AR_LIST='$(AR) t'
+ AR_EXTRACT='$(AR) x'
+@@ -16003,13 +15908,6 @@ sed 's/$/,/' >> $CONFIG_STATUS <<EOF
+     (''' ANDROID_NDK ''', r''' $ANDROID_NDK ''')
+     (''' ANDROID_TOOLCHAIN ''', r''' $ANDROID_TOOLCHAIN ''')
+     (''' ANDROID_PLATFORM ''', r''' $ANDROID_PLATFORM ''')
+-    (''' MOZILLA_SYMBOLVERSION ''', r''' $MOZILLA_SYMBOLVERSION ''')
+-    (''' JS_SHELL_NAME ''', r''' $JS_SHELL_NAME ''')
+-    (''' JS_CONFIG_NAME ''', r''' $JS_CONFIG_NAME ''')
+-    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
+-    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
+-    (''' MOZJS_PATCH_VERSION ''', r''' $MOZJS_PATCH_VERSION ''')
+-    (''' MOZJS_ALPHA ''', r''' $MOZJS_ALPHA ''')
+     (''' HOST_CC ''', r''' $HOST_CC ''')
+     (''' HOST_CXX ''', r''' $HOST_CXX ''')
+     (''' HOST_RANLIB ''', r''' $HOST_RANLIB ''')
+@@ -16061,6 +15959,13 @@ sed 's/$/,/' >> $CONFIG_STATUS <<EOF
+     (''' X_PRE_LIBS ''', r''' $X_PRE_LIBS ''')
+     (''' X_LIBS ''', r''' $X_LIBS ''')
+     (''' X_EXTRA_LIBS ''', r''' $X_EXTRA_LIBS ''')
++    (''' MOZILLA_SYMBOLVERSION ''', r''' $MOZILLA_SYMBOLVERSION ''')
++    (''' JS_SHELL_NAME ''', r''' $JS_SHELL_NAME ''')
++    (''' JS_CONFIG_NAME ''', r''' $JS_CONFIG_NAME ''')
++    (''' MOZJS_MAJOR_VERSION ''', r''' $MOZJS_MAJOR_VERSION ''')
++    (''' MOZJS_MINOR_VERSION ''', r''' $MOZJS_MINOR_VERSION ''')
++    (''' MOZJS_PATCH_VERSION ''', r''' $MOZJS_PATCH_VERSION ''')
++    (''' MOZJS_ALPHA ''', r''' $MOZJS_ALPHA ''')
+     (''' SOLARIS_SUNPRO_CC ''', r''' $SOLARIS_SUNPRO_CC ''')
+     (''' SOLARIS_SUNPRO_CXX ''', r''' $SOLARIS_SUNPRO_CXX ''')
+     (''' MOZ_THUMB2 ''', r''' $MOZ_THUMB2 ''')
diff --git a/gnu/packages/patches/pcre2-CVE-2017-8786.patch b/gnu/packages/patches/pcre2-CVE-2017-8786.patch
new file mode 100644 (file)
index 0000000..6071d58
--- /dev/null
@@ -0,0 +1,155 @@
+Fix CVE-2017-8786:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8786
+https://bugs.exim.org/show_bug.cgi?id=2079
+https://blogs.gentoo.org/ago/2017/04/29/libpcre-heap-based-buffer-overflow-write-in-pcre2test-c/
+
+Patch copied from upstream source repository:
+
+https://vcs.pcre.org/pcre2?view=revision&revision=696
+https://vcs.pcre.org/pcre2?view=revision&revision=697
+
+--- trunk/doc/pcre2api.3       2017/03/21 16:48:40     695
++++ trunk/doc/pcre2api.3       2017/03/21 17:46:21     696
+@@ -1,4 +1,4 @@
+-.TH PCRE2API 3 "24 December 2016" "PCRE2 10.23"
++.TH PCRE2API 3 "21 March 2017" "PCRE2 10.30"
+ .SH NAME
+ PCRE2 - Perl-compatible regular expressions (revised API)
+ .sp
+@@ -2633,8 +2633,8 @@
+ A text message for an error code from any PCRE2 function (compile, match, or
+ auxiliary) can be obtained by calling \fBpcre2_get_error_message()\fP. The code
+ is passed as the first argument, with the remaining two arguments specifying a
+-code unit buffer and its length, into which the text message is placed. Note
+-that the message is returned in code units of the appropriate width for the
++code unit buffer and its length in code units, into which the text message is
++placed. The message is returned in code units of the appropriate width for the
+ library that is being used.
+ .P
+ The returned message is terminated with a trailing zero, and the function
+@@ -3321,6 +3321,6 @@
+ .rs
+ .sp
+ .nf
+-Last updated: 23 December 2016
+-Copyright (c) 1997-2016 University of Cambridge.
++Last updated: 21 March 2017
++Copyright (c) 1997-2017 University of Cambridge.
+ .fi
+--- trunk/src/pcre2_error.c    2017/03/21 16:48:40     695
++++ trunk/src/pcre2_error.c    2017/03/21 17:46:21     696
+@@ -271,7 +271,7 @@
+ Arguments:
+   enumber       error number
+   buffer        where to put the message (zero terminated)
+-  size          size of the buffer
++  size          size of the buffer in code units
+ Returns:        length of message if all is well
+                 negative on error
+--- trunk/src/pcre2test.c      2017/03/21 17:46:21     696
++++ trunk/src/pcre2test.c      2017/03/21 18:36:13     697
+@@ -1017,9 +1017,9 @@
+   if (test_mode == PCRE8_MODE) \
+     r = pcre2_get_error_message_8(a,G(b,8),G(G(b,8),_size)); \
+   else if (test_mode == PCRE16_MODE) \
+-    r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size)); \
++    r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size/2)); \
+   else \
+-    r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size))
++    r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size/4))
+ #define PCRE2_GET_OVECTOR_COUNT(a,b) \
+   if (test_mode == PCRE8_MODE) \
+@@ -1399,6 +1399,9 @@
+ /* ----- Common macros for two-mode cases ----- */
++#define BYTEONE (BITONE/8)
++#define BYTETWO (BITTWO/8)
++
+ #define CASTFLD(t,a,b) \
+   ((test_mode == G(G(PCRE,BITONE),_MODE))? (t)(G(a,BITONE)->b) : \
+     (t)(G(a,BITTWO)->b))
+@@ -1481,9 +1484,9 @@
+ #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \
+   if (test_mode == G(G(PCRE,BITONE),_MODE)) \
+-    r = G(pcre2_get_error_message_,BITONE)(a,G(b,BITONE),G(G(b,BITONE),_size)); \
++    r = G(pcre2_get_error_message_,BITONE)(a,G(b,BITONE),G(G(b,BITONE),_size/BYTEONE)); \
+   else \
+-    r = G(pcre2_get_error_message_,BITTWO)(a,G(b,BITTWO),G(G(b,BITTWO),_size))
++    r = G(pcre2_get_error_message_,BITTWO)(a,G(b,BITTWO),G(G(b,BITTWO),_size/BYTETWO))
+ #define PCRE2_GET_OVECTOR_COUNT(a,b) \
+   if (test_mode == G(G(PCRE,BITONE),_MODE)) \
+@@ -1904,7 +1907,7 @@
+ #define PCRE2_DFA_MATCH(a,b,c,d,e,f,g,h,i,j) \
+   a = pcre2_dfa_match_16(G(b,16),(PCRE2_SPTR16)c,d,e,f,G(g,16),h,i,j)
+ #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \
+-  r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size))
++  r = pcre2_get_error_message_16(a,G(b,16),G(G(b,16),_size/2))
+ #define PCRE2_GET_OVECTOR_COUNT(a,b) a = pcre2_get_ovector_count_16(G(b,16))
+ #define PCRE2_GET_STARTCHAR(a,b) a = pcre2_get_startchar_16(G(b,16))
+ #define PCRE2_JIT_COMPILE(r,a,b) r = pcre2_jit_compile_16(G(a,16),b)
+@@ -2000,7 +2003,7 @@
+ #define PCRE2_DFA_MATCH(a,b,c,d,e,f,g,h,i,j) \
+   a = pcre2_dfa_match_32(G(b,32),(PCRE2_SPTR32)c,d,e,f,G(g,32),h,i,j)
+ #define PCRE2_GET_ERROR_MESSAGE(r,a,b) \
+-  r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size))
++  r = pcre2_get_error_message_32(a,G(b,32),G(G(b,32),_size/4))
+ #define PCRE2_GET_OVECTOR_COUNT(a,b) a = pcre2_get_ovector_count_32(G(b,32))
+ #define PCRE2_GET_STARTCHAR(a,b) a = pcre2_get_startchar_32(G(b,32))
+ #define PCRE2_JIT_COMPILE(r,a,b) r = pcre2_jit_compile_32(G(a,32),b)
+--- trunk/src/pcre2test.c      2017/03/21 16:48:40     695
++++ trunk/src/pcre2test.c      2017/03/21 17:46:21     696
+@@ -2889,7 +2889,7 @@
+   {
+   if (pbuffer32 != NULL) free(pbuffer32);
+   pbuffer32_size = 4*len + 4;
+-  if (pbuffer32_size < 256) pbuffer32_size = 256;
++  if (pbuffer32_size < 512) pbuffer32_size = 512;
+   pbuffer32 = (uint32_t *)malloc(pbuffer32_size);
+   if (pbuffer32 == NULL)
+     {
+@@ -7600,7 +7600,8 @@
+   int errcode;
+   char *endptr;
+-/* Ensure the relevant non-8-bit buffer is available. */
++/* Ensure the relevant non-8-bit buffer is available. Ensure that it is at 
++least 128 code units, because it is used for retrieving error messages. */
+ #ifdef SUPPORT_PCRE2_16
+   if (test_mode == PCRE16_MODE)
+@@ -7620,7 +7621,7 @@
+ #ifdef SUPPORT_PCRE2_32
+   if (test_mode == PCRE32_MODE)
+     {
+-    pbuffer32_size = 256;
++    pbuffer32_size = 512;
+     pbuffer32 = (uint32_t *)malloc(pbuffer32_size);
+     if (pbuffer32 == NULL)
+       {
+--- trunk/testdata/testinput2  2017/03/21 16:48:40     695
++++ trunk/testdata/testinput2  2017/03/21 17:46:21     696
+@@ -5017,4 +5017,6 @@
+ /(?<!\1((?U)1((?U))))(*F)/never_backslash_c,alt_bsux,anchored,extended
++/\g{3/
++
+ # End of testinput2 
+--- trunk/testdata/testoutput2 2017/03/21 16:48:40     695
++++ trunk/testdata/testoutput2 2017/03/21 17:46:21     696
+@@ -15570,6 +15570,9 @@
+ /(?<!\1((?U)1((?U))))(*F)/never_backslash_c,alt_bsux,anchored,extended
++/\g{3/
++Failed: error 157 at offset 2: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
++
+ # End of testinput2 
+ Error -63: PCRE2_ERROR_BADDATA (unknown error number)
+ Error -62: bad serialized data
diff --git a/gnu/packages/patches/proot-test-fhs.patch b/gnu/packages/patches/proot-test-fhs.patch
new file mode 100644 (file)
index 0000000..d3896ad
--- /dev/null
@@ -0,0 +1,98 @@
+The test suite of PRoot makes many FHS assumptions, such as assuming
+that /bin, /bin/true, and /usr exist.  This patch fixes these assumptions.
+
+--- source/tests/GNUmakefile   2017-05-11 15:26:36.899115484 +0200
++++ source/tests/GNUmakefile   2017-05-11 15:26:46.143063166 +0200
+@@ -121,7 +121,7 @@ $(ROOTFS_DIR):
+ setup: $(ROOTFS_BIN)
+ $(ROOTFS)/bin/abs-true:
+-      @ln -fs /bin/true $@
++      @ln -fs `which true`  $@
+ $(ROOTFS)/bin/rel-true:
+       @ln -fs ./true $@
+
+--- source/tests/test-d2175fc3.sh      2017-05-11 15:36:53.727617010 +0200
++++ source/tests/test-d2175fc3.sh      2017-05-11 15:37:10.155523637 +0200
+@@ -2,8 +2,8 @@ if [ ! -x  ${ROOTFS}/bin/readlink ] || [
+     exit 125;
+ fi
+-${PROOT} -r ${ROOTFS} /bin/readlink /bin/abs-true | grep '^/bin/true$'
++${PROOT} -r ${ROOTFS} /bin/readlink /bin/abs-true | grep "`which true`"
+ ${PROOT} -r ${ROOTFS} /bin/readlink /bin/rel-true | grep '^\./true$'
+-${PROOT} -b /:/host-rootfs -r ${ROOTFS} /bin/readlink /bin/abs-true | grep '^/bin/true$'
++${PROOT} -b /:/host-rootfs -r ${ROOTFS} /bin/readlink /bin/abs-true | grep "`which true`"
+ ${PROOT} -b /:/host-rootfs -r ${ROOTFS} /bin/readlink /bin/rel-true | grep '^./true$'
+
+--- source/tests/test-d1be631a.sh      2017-05-11 15:41:36.458008715 +0200
++++ source/tests/test-d1be631a.sh      2017-05-11 15:41:38.921994686 +0200
+@@ -1,4 +1,4 @@
+-if [ -z `which mknod`] || [ `id -u` -eq 0 ]; then
++if [ -z `which mknod` ] || [ `id -u` -eq 0 ]; then
+     exit 125;
+ fi
+--- source/tests/test-5bed7141.c       2017-05-11 15:34:23.088472743 +0200
++++ source/tests/test-5bed7141.c       2017-05-11 15:34:27.052450235 +0200
+@@ -80,7 +80,7 @@ int main(int argc, char *argv[])
+               exit(EXIT_FAILURE);
+       case 0: /* child */
+-              status = chdir("/usr");
++              status = chdir("/gnu");
+               if (status < 0) {
+                       perror("chdir");
+                       exit(EXIT_FAILURE);
+
+--- a/tests/test-092c5e26.sh
++++ b/tests/test-092c5e26.sh
+@@ -24,7 +24,7 @@ fi
+ unset LD_LIBRARY_PATH
+-env PROOT_FORCE_FOREIGN_BINARY=1 PATH=/tmp:/bin:/usr/bin ${PROOT} -r ${ROOTFS} -q echo ${TMP} | grep "^-U LD_LIBRARY_PATH ${EXTRA}-0 /bin/argv0 /bin/argv0 ${TMP_ABS}$"
++env PROOT_FORCE_FOREIGN_BINARY=1 PATH=/tmp:/bin:/usr/bin:$(dirname $(which echo)) ${PROOT} -r ${ROOTFS} -q echo ${TMP} | grep "^-U LD_LIBRARY_PATH ${EXTRA}-0 /bin/argv0 /bin/argv0 ${TMP_ABS}$"
+ env PROOT_FORCE_FOREIGN_BINARY=1 ${PROOT} -r ${ROOTFS} -q echo ${TMP_ABS} | grep "^-U LD_LIBRARY_PATH ${EXTRA}-0 /bin/argv0 /bin/argv0 ${TMP_ABS}$"
+ cat > ${ROOTFS}/${TMP_ABS} <<EOF
+@@ -34,7 +34,7 @@ chmod +x ${ROOTFS}/${TMP_ABS}
+ # Valgrind prepends "/bin/sh" in front of foreign binaries.
+ if ! $(echo ${PROOT} | grep -q valgrind); then
+-    env PATH=/tmp:/bin:/usr/bin ${PROOT} -r ${ROOTFS} -q echo ${TMP} | grep "^-U LD_LIBRARY_PATH -0 ${TMP} ${TMP_ABS}$"
++    env PATH=/tmp:/bin:/usr/bin:$(dirname $(which echo)) ${PROOT} -r ${ROOTFS} -q echo ${TMP} | grep "^-U LD_LIBRARY_PATH -0 ${TMP} ${TMP_ABS}$"
+     ${PROOT} -r ${ROOTFS} -q echo ${TMP_ABS}                | grep "^-U LD_LIBRARY_PATH -0 ${TMP_ABS} ${TMP_ABS}$"
+ fi
+diff --git a/tests/test-5467b986.sh b/tests/test-5467b986.sh
+index c6ac71a..f616f1e 100644
+--- a/tests/test-5467b986.sh
++++ b/tests/test-5467b986.sh
+@@ -30,8 +30,8 @@ ${PROOT} -v -1 -b /tmp:/b -b /tmp:/a -r ${ROOTFS} fchdir_getcwd /b | grep '^/[ab
+ ! ${PROOT} -w /bin -r ${ROOTFS} fchdir_getcwd true
+ [ $? -eq 0 ]
+-${PROOT} -v -1 -w /usr -r / ${ROOTFS}/bin/chdir_getcwd share  | grep '^/usr/share$'
+-${PROOT} -v -1 -w /usr -r / ${ROOTFS}/bin/fchdir_getcwd share | grep '^/usr/share$'
++${PROOT} -v -1 -w /gnu -r / ${ROOTFS}/bin/chdir_getcwd store  | grep '^/gnu/store$'
++${PROOT} -v -1 -w /gnu -r / ${ROOTFS}/bin/fchdir_getcwd store | grep '^/gnu/store$'
+-(cd /; ${PROOT} -v -1 -w usr -r / ${ROOTFS}/bin/chdir_getcwd share  | grep '^/usr/share$')
+-(cd /; ${PROOT} -v -1 -w usr -r / ${ROOTFS}/bin/fchdir_getcwd share | grep '^/usr/share$')
++(cd /; ${PROOT} -v -1 -w gnu -r / ${ROOTFS}/bin/chdir_getcwd store  | grep '^/gnu/store$')
++(cd /; ${PROOT} -v -1 -w gnu -r / ${ROOTFS}/bin/fchdir_getcwd store | grep '^/gnu/store$')
+
+--- a/tests/test-c15999f9.sh
++++ b/tests/test-c15999f9.sh
+@@ -5,7 +5,7 @@ fi
+ TMP=/tmp/$(mcookie)
+ mkdir ${TMP}
+-${PROOT} -b /bin/true:${TMP}/true /bin/true
++${PROOT} -b `which true`:${TMP}/true `which true`
+ ! test -e ${TMP}/true
+ [ $? -eq 0 ]
diff --git a/gnu/packages/patches/reptyr-fix-gcc-7.patch b/gnu/packages/patches/reptyr-fix-gcc-7.patch
new file mode 100644 (file)
index 0000000..5e0e581
--- /dev/null
@@ -0,0 +1,38 @@
+This patch allows reptyr to build with gcc 7. It is taken from reptyr mainline patches
+fa0d63f and b45fd92.
+
+https://github.com/nelhage/reptyr/commit/fa0d63ff8c488be15976e5353580b565e85586a1
+https://github.com/nelhage/reptyr/commit/b45fd9238958fcf2d8f3d6fc23e6d491febea2ac
+
+Patch by Nelson Elhage <nelhage@nelhage.com>.
+
+diff --git a/attach.c b/attach.c
+index bd8ef8c..8d9cbf8 100644
+--- a/attach.c
++++ b/attach.c
+@@ -389,8 +389,11 @@ int setup_steal_socket(struct steal_pty_state *steal) {
+         return errno;
+     steal->addr_un.sun_family = AF_UNIX;
+-    snprintf(steal->addr_un.sun_path, sizeof(steal->addr_un.sun_path),
+-             "%s/reptyr.sock", steal->tmpdir);
++    if (snprintf(steal->addr_un.sun_path, sizeof(steal->addr_un.sun_path),
++                 "%s/reptyr.sock", steal->tmpdir) >= sizeof(steal->addr_un.sun_path)) {
++        error("tmpdir path too long!");
++        return ENAMETOOLONG;
++    }
+     if ((steal->sockfd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0)
+         return errno;
+diff --git a/platform/linux/linux.h b/platform/linux/linux.h
+index 9e6b78a..3ec5a99 100644
+--- a/platform/linux/linux.h
++++ b/platform/linux/linux.h
+@@ -40,6 +40,7 @@
+ #include <sys/ptrace.h>
+ #include <asm/ptrace.h>
+ #include <sys/types.h>
++#include <sys/sysmacros.h>
+ #include <sys/user.h>
+ #include <unistd.h>
+ #include <stdlib.h>
diff --git a/gnu/packages/patches/rpcbind-CVE-2017-8779.patch b/gnu/packages/patches/rpcbind-CVE-2017-8779.patch
new file mode 100644 (file)
index 0000000..6ca93ff
--- /dev/null
@@ -0,0 +1,29 @@
+Fix CVE-2017-8779:
+
+https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8779
+
+Patch copied from the bug reporter's 3rd-party repository:
+
+https://github.com/guidovranken/rpcbomb/blob/master/rpcbind_patch.txt
+
+diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c
+index 5862c26..e11f61b 100644
+--- a/src/rpcb_svc_com.c
++++ b/src/rpcb_svc_com.c
+@@ -48,6 +48,7 @@
+ #include <rpc/rpc.h>
+ #include <rpc/rpcb_prot.h>
+ #include <rpc/svc_dg.h>
++#include <rpc/rpc_com.h>
+ #include <netconfig.h>
+ #include <errno.h>
+ #include <syslog.h>
+@@ -432,7 +433,7 @@ rpcbproc_taddr2uaddr_com(void *arg, struct svc_req *rqstp /*__unused*/,
+ static bool_t
+ xdr_encap_parms(XDR *xdrs, struct encap_parms *epp)
+ {
+-      return (xdr_bytes(xdrs, &(epp->args), (u_int *) &(epp->arglen), ~0));
++      return (xdr_bytes(xdrs, &(epp->args), (u_int *) &(epp->arglen), RPC_MAXDATASIZE));
+ }
+ /*
index 1946f52..58beab0 100644 (file)
@@ -92,17 +92,17 @@ POSIX regular expression API.")
               (sha256
                (base32
                 "0vn5g0mkkp99mmzpissa06hpyj6pk9s4mlwbjqrjvw3ihy8rpiyz"))
-              (patches (search-patches "pcre2-CVE-2017-7186.patch"))))
+              (patches (search-patches "pcre2-CVE-2017-7186.patch"
+                                       "pcre2-CVE-2017-8786.patch"))))
    (build-system gnu-build-system)
    (inputs `(("bzip2" ,bzip2)
              ("readline" ,readline)
              ("zlib" ,zlib)))
    (arguments
     `(#:configure-flags '("--enable-unicode"
-                          "--enable-pcregrep-libz"
-                          "--enable-pcregrep-libbz2"
-                          "--enable-pcretest-libreadline"
-                          "--enable-unicode-properties"
+                          "--enable-pcre2grep-libz"
+                          "--enable-pcre2grep-libbz2"
+                          "--enable-pcre2test-libreadline"
                           "--enable-pcre2-16"
                           "--enable-pcre2-32"
                           "--enable-jit")
index 3eb7815..812d754 100644 (file)
@@ -14,7 +14,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Raoul J.P. Bonnal <ilpuccio.febo@gmail.com>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017 humanitiesNerd <catonano@gmail.com>
+;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
index c782ecf..b68aea9 100644 (file)
   #:use-module (gnu packages base)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages databases)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages gl)
+  #:use-module (gnu packages gnome)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages graphics)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libusb)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages popt)
+  #:use-module (gnu packages python)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages tex)
   #:use-module (gnu packages web)
@@ -192,7 +198,7 @@ MTP, and much more.")
     (description "This package provides the @code{exiftool} command and the
 @code{Image::ExifTool} Perl library to manipulate EXIF tags of digital images
 and a wide variety of other metadata.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public libpano13
   (package
@@ -300,3 +306,71 @@ photographic equipment.")
     ;; licensed GPL3, and the database is license CC-BY-SA 3.0.  See the
     ;; README.md file for this clarification.
     (license (list license:lgpl3 license:gpl3 license:cc-by-sa3.0))))
+
+(define-public darktable
+  (package
+    (name "darktable")
+    (version "2.2.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/darktable-org/darktable/releases/"
+                    "download/release-"
+                    version "/darktable-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1n7rddkxwcifc3kcdlnar9w562xv4h78fqkkn27jihqzp3b4am5x"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:tests? #f ; There are no tests.
+       #:configure-flags '("-DCMAKE_INSTALL_LIBDIR=lib")
+       #:make-flags
+       (list
+        (string-append "CPATH=" (assoc-ref %build-inputs "ilmbase")
+                       "/include/OpenEXR:" (or (getenv "CPATH") "")))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'set-ldflags
+           (lambda* (#:key outputs #:allow-other-keys)
+             (setenv "LDFLAGS"
+                     (string-append
+                      "-Wl,-rpath="
+                      (assoc-ref outputs "out") "/lib/darktable"))
+             #t)))))
+    (native-inputs
+     `(("llvm" ,llvm-3.9.1)
+       ("clang" ,clang-3.9.1)))
+    (inputs
+     `(("libxslt" ,libxslt)
+       ("libxml2" ,libxml2)
+       ("pugixml" ,pugixml)
+       ("gtk+" ,gtk+)
+       ("sqlite" ,sqlite)
+       ("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("cairo" ,cairo)
+       ("lcms" ,lcms)
+       ("exiv2" ,exiv2)
+       ("libtiff" ,libtiff)
+       ("curl" ,curl)
+       ("libgphoto2" ,libgphoto2)
+       ("dbus-glib" ,dbus-glib)
+       ("openexr" ,openexr)
+       ("ilmbase" ,ilmbase)
+       ("libsoup" ,libsoup)
+       ("python-jsonschema" ,python-jsonschema)
+       ("intltool" ,intltool)
+       ("perl" ,perl)
+       ("pkg-config" ,pkg-config)
+       ("libwebp" ,libwebp)
+       ("lensfun" ,lensfun)
+       ("librsvg" ,librsvg)
+       ("json-glib" ,json-glib)
+       ("freeimage" ,freeimage)))
+    (home-page "https://www.darktable.org")
+    (synopsis "Virtual lighttable and darkroom for photographers")
+    (description "Darktable is a photography workflow application and RAW
+developer.  It manages your digital negatives in a database, lets you view
+them through a zoomable lighttable and enables you to develop raw images
+and enhance them.")
+    (license license:gpl3+)))
index a40568e..ab277ed 100644 (file)
                ;; extension of php.
                "--with-iconv"
                "--with-openssl"
+               "--with-mysqli"          ; Required for, e.g. wordpress
                "--with-pdo-mysql"
                "--with-zlib"
                "--enable-calendar"
                "--enable-inifile"
                "--enable-mbstring"
                "--enable-pcntl"
-               "--enable-sockets"
-               "--enable-threads"))
+               "--enable-sockets"))
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'do-not-record-build-flags
index c52f265..92ebe6f 100644 (file)
@@ -45,6 +45,7 @@
 (define-public libsndfile
   (package
     (name "libsndfile")
+    (replacement libsndfile/fixed)
     (version "1.0.28")
     (source (origin
              (method url-fetch)
@@ -76,6 +77,18 @@ SPARC.  Hopefully the design of the library will also make it easy to extend
 for reading and writing new sound file formats.")
     (license l:gpl2+)))
 
+(define libsndfile/fixed
+  (package
+    (inherit libsndfile)
+    (source
+      (origin
+        (inherit (package-source libsndfile))
+        (patches
+          (append
+            (origin-patches (package-source libsndfile))
+            (search-patches "libsndfile-CVE-2017-8361-8363-8365.patch"
+                            "libsndfile-CVE-2017-8362.patch")))))))
+
 (define-public libsamplerate
   (package
     (name "libsamplerate")                     ; aka. Secret Rabbit Code (SRC)
index 9328da3..59a0853 100644 (file)
     (source
      (origin
       (method url-fetch)
-      (uri (string-append "http://www.ivarch.com/programs/sources/pv-"
+      (uri (string-append "https://www.ivarch.com/programs/sources/pv-"
                           version ".tar.bz2"))
       (sha256
        (base32
         "13gg6r84pkvznpd1l11qw1jw9yna40gkgpni256khyx21m785khf"))))
     (build-system gnu-build-system)
-    (home-page "http://www.ivarch.com/programs/pv.shtml")
+    (home-page "https://www.ivarch.com/programs/pv.shtml")
     (synopsis "Pipeline progress indicator")
     (description
      "pv (Pipe Viewer) is a terminal-based tool for monitoring the progress
index 164c1f4..57a67de 100644 (file)
@@ -36,8 +36,9 @@
 ;;; Copyright © 2016, 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;; Copyright © 2017 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
-;;; Copyright © 2017 humanitiesNerd <catonano@gmail.com>
+;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
 ;;; Copyright © 2017 Ben Sturmfels <ben@sturm.com.au>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1108,14 +1109,14 @@ Python file, so it can be easily copied into your project.")
 (define-public python-dateutil
   (package
     (name "python-dateutil")
-    (version "2.5.3")
+    (version "2.6.0")
     (source
      (origin
       (method url-fetch)
       (uri (pypi-uri "python-dateutil" version))
       (sha256
        (base32
-        "1v9j9fmf8g911yg6k01xa2db6dx3wv73zkk7fncsj7vagjqgs20l"))))
+        "1lhq0hxjc3cfha101q02ld5ijlpfyjn2w1yh7wvpiy367pgzi8k2"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-six" ,python-six)))
@@ -1353,7 +1354,8 @@ Python 3.3+.")
     (build-system python-build-system)
     (arguments `(#:python ,python-2
                  #:tests? #f))                    ; invalid command "test"
-    (home-page "https://fedorahosted.org/dogtail/")
+    ;; Currently no offical homepage.
+    (home-page "https://pypi.python.org/pypi/dogtail/")
     (synopsis "GUI test tool and automation framework written in Python")
     (description
      "Dogtail is a GUI test tool and automation framework written in Python.
@@ -1843,14 +1845,14 @@ and many external plugins.")
 (define-public python-pytest-cov
   (package
     (name "python-pytest-cov")
-    (version "2.2.1")
+    (version "2.4.0")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "pytest-cov" version))
         (sha256
          (base32
-          "1yl4nbhzfgsxqlsyk4clafgp9x11zvgrkprm9i2p3fgkwx9jxcm8"))))
+          "03c2qc42r4bczyw93gd7n0qi1h1jfhw7fnbhi33c3vp1hs81gm2k"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -1879,14 +1881,14 @@ supports coverage of subprocesses.")
 (define-public python-pytest-runner
   (package
     (name "python-pytest-runner")
-    (version "2.6.2")
+    (version "2.11.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "pytest-runner" version))
        (sha256
         (base32
-         "1nwcqx0l3fv52kv8526wy8ypzghbq96c96di318d98d3wh7a8xg7"))))
+         "1cw978kqqcq916b9gfns1qjqvg33c5ail5jhw9054dsynkm32flq"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -2641,7 +2643,7 @@ version numbers.")
     (build-system python-build-system)
     (propagated-inputs
      `(("python-chardet" ,python-chardet)))
-    (home-page "https://fedorahosted.org/kitchen")
+    (home-page "https://github.com/fedora-infra/kitchen")
     (synopsis "Python API for snippets")
     (description "@code{kitchen} module provides a python API for all sorts of
 little useful snippets of code that everybody ends up writing for their projects
@@ -3375,15 +3377,13 @@ mining and data analysis.")
 (define-public python-rq
   (package
     (name "python-rq")
-    (version "0.5.2")
+    (version "0.7.1")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append
-             "https://pypi.python.org/packages/source/r/rq/rq-"
-             version ".tar.gz"))
+       (uri (pypi-uri "rq" version))
        (sha256
-        (base32 "0b0z5hn8wkfg300hx7816csgv3bcfamlr29fi3yzgqmpqxwj3fix"))))
+        (base32 "0gaq5pnh0zy46r8jvygi0ifbvz3pq6i7xla78ijcgjw0x77qzsdh"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-click" ,python-click)
@@ -4217,6 +4217,38 @@ routines such as routines for numerical integration and optimization.")
   (package-with-python2
    (strip-python2-variant python-scipy)))
 
+(define-public python-sockjs-tornado
+  (package
+    (name "python-sockjs-tornado")
+    (version "1.0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sockjs-tornado" version))
+       (sha256
+        (base32
+         "16cff40nniqsyvda1pb2j3b4zwmrw7y2g1vqq78lp20xpmhnwwkd"))))
+    (build-system python-build-system)
+    (arguments
+     `(;; There are no tests, and running the test phase requires missing
+       ;; dependencies
+       #:tests? #f))
+    (propagated-inputs
+     `(("python-tornado" ,python-tornado)))
+    (home-page "http://github.com/mrjoes/sockjs-tornado/")
+    (synopsis
+     "SockJS python server implementation on top of Tornado framework")
+    (description
+     "SockJS-tornado provides the server side counterpart to a SockJS client
+library, through the Tornado framework.
+
+SockJS provides a low latency, full duplex, cross-domain communication channel
+between a web browser and web server.")
+    (license license:expat)))
+
+(define-public python2-sockjs-tornado
+  (package-with-python2 python-sockjs-tornado))
+
 (define-public python-socksipy-branch
   (package
     (name "python-socksipy-branch")
@@ -5509,7 +5541,18 @@ features useful for text console applications.")
     (license license:lgpl2.1+)))
 
 (define-public python2-urwid
-  (package-with-python2 python-urwid))
+  (let ((python2-urwid (package-with-python2 python-urwid)))
+    (package
+      (inherit python2-urwid)
+      (arguments
+       (append
+        '(#:phases
+          (modify-phases %standard-phases
+            ;; Disable the vterm tests because of non-deterministic failures
+            ;; with Python 2. See https://github.com/urwid/urwid/issues/230.
+            (add-after 'unpack 'delete-test_vterm.py
+              (delete-file "urwid/tests/test_vterm.py"))))
+        (package-arguments python-urwid))))))
 
 (define-public python-openid
   (package
@@ -5529,6 +5572,7 @@ features useful for text console applications.")
         (replace 'check
           (lambda _
             (zero? (system* "./admin/runtests")))))))
+    (properties `((python2-variant . ,(delay python2-openid))))
     (propagated-inputs
      `(("python-defusedxml" ,python-defusedxml)))
     (native-inputs
@@ -6105,13 +6149,13 @@ It is written entirely in Python.")
 (define-public python-tornado
   (package
     (name "python-tornado")
-    (version "4.3")
+    (version "4.5.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "tornado" version))
        (sha256
-        (base32 "1gzgwayl6hmc9jfcl88bni4jcsk2jcca9dn1rvrfsvnijcjx7hn9"))))
+        (base32 "1zbkgcdfq81k298awrm8p0xwbwwn2p3nbizdglzfbkskhai082fv"))))
     (build-system python-build-system)
     (arguments
      '(;; FIXME: Two tests error out with:
@@ -7446,7 +7490,7 @@ a hash value.")
     (source
      (origin
        (method url-fetch)
-       (uri (pypi-uri "python-termcolor" version))
+       (uri (pypi-uri "termcolor" version))
        (sha256
         (base32
          "0fv1vq14rpqwgazxg4981904lfyp84mnammw7y046491cv76jv8x"))))
@@ -8850,13 +8894,13 @@ processes across test runs.")
 (define-public python-icalendar
   (package
     (name "python-icalendar")
-    (version "3.11.3")
+    (version "3.11.4")
     (source (origin
              (method url-fetch)
              (uri (pypi-uri "icalendar" version))
              (sha256
               (base32
-               "086jslw8cg2hni79j267p1dy6d27m7q5hi39ni2clh9waqbdf5v3"))))
+               "0ix3xxykz8hs8mx4f2063djawmd888y3vsl75fbvbfqvg67v35jn"))))
     (build-system python-build-system)
     (propagated-inputs
      `(("python-dateutil" ,python-dateutil)
@@ -14011,3 +14055,570 @@ exception message with a traceback that points to the culprit.")
 
 (define-public python2-fudge
   (package-with-python2 python-fudge))
+
+(define-public python-oauth2client
+  (package
+    (name "python-oauth2client")
+    (version "4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "oauth2client" version))
+       (sha256
+        (base32
+         "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:tests? #f))
+    (propagated-inputs
+     `(("python-httplib2" ,python-httplib2)
+       ("python-pyasn1" ,python-pyasn1)
+       ("python-pyasn1-modules" ,python-pyasn1-modules)
+       ("python-rsa" ,python-rsa)
+       ("python-six" ,python-six)))
+    (home-page "http://github.com/google/oauth2client/")
+    (synopsis "OAuth 2.0 client library")
+    (description "@code{python-oauth2client} provides an OAuth 2.0 client
+library for Python")
+    (license license:asl2.0)))
+
+(define-public python-flask-oidc
+  (package
+    (name "python-flask-oidc")
+    (version "1.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "flask-oidc" version))
+       (sha256
+        (base32
+         "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-flask" ,python-flask)
+       ("python-itsdangerous" ,python-itsdangerous)
+       ("python-oauth2client" ,python-oauth2client)
+       ("python-six" ,python-six)))
+    (native-inputs
+     `(("python-nose" ,python-nose)
+       ("python-mock" ,python-mock)))
+    (home-page "https://github.com/puiterwijk/flask-oidc")
+    (synopsis "OpenID Connect extension for Flask")
+    (description "@code{python-flask-oidc} provides an OpenID Connect extension
+for Flask.")
+    (license license:bsd-2)))
+
+(define-public python-mwclient
+  (package
+    (name "python-mwclient")
+    (version "0.8.4")
+    (source
+     (origin
+       (method url-fetch)
+       ;; The PyPI version wouldn't contain tests.
+       (uri (string-append "https://github.com/mwclient/mwclient/archive/"
+                           "v" version ".tar.gz"))
+       (sha256
+        (base32
+         "1jj0yhilkjir00719fc7w133x7hdyhkxhk6xblla4asig45klsfv"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-requests" ,python-requests)
+       ("python-requests-oauthlib"
+        ,python-requests-oauthlib)
+       ("python-six" ,python-six)))
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-pep8" ,python-pytest-pep8)
+       ("python-pytest-cache" ,python-pytest-cache)
+       ("python-pytest-cov" ,python-pytest-cov)
+       ("python-responses" ,python-responses)))
+    (home-page "https://github.com/btongminh/mwclient")
+    (synopsis "MediaWiki API client")
+    (description "This package provides a MediaWiki API client.")
+    (license license:expat)))
+
+(define-public python2-mwclient
+  (package-with-python2 python-mwclient))
+
+(define-public python-pytest-warnings
+  (package
+    (name "python-pytest-warnings")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-warnings" version))
+       (sha256
+        (base32
+         "0gf2dpahpl5igb7jh1sr9acj3z3gp7zahqdqb69nk6wx01c8kc1g"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("pytest" ,python-pytest-3.0)))
+    (home-page "https://github.com/fschulze/pytest-warnings")
+    (synopsis "Pytest plugin to list Python warnings in pytest report")
+    (description
+     "Python-pytest-warnings is a pytest plugin to list Python warnings in
+pytest report.")
+    (license license:expat)))
+
+(define-public python2-pytest-warnings
+  (package-with-python2 python-pytest-warnings))
+
+(define-public python-pytest-catchlog
+  (package
+    (name "python-pytest-catchlog")
+    (version "1.2.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-catchlog" version ".zip"))
+       (sha256
+        (base32
+         "1w7wxh27sbqwm4jgwrjr9c2gy384aca5jzw9c0wzhl0pmk2mvqab"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (propagated-inputs
+     `(("pytest" ,python-pytest-3.0)))
+    (home-page "https://github.com/eisensheng/pytest-catchlog")
+    (synopsis "Pytest plugin to catch log messages")
+    (description
+     "Python-pytest-catchlog is a pytest plugin to catch log messages.  This is
+a fork of pytest-capturelog.")
+    (license license:expat)))
+
+(define-public python2-pytest-catchlog
+  (package-with-python2 python-pytest-catchlog))
+
+(define-public python-utils
+  (package
+    (name "python-utils")
+    (version "2.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "python-utils" version))
+              (sha256
+               (base32
+                "1mcsy6q5am4ya72rgkpb6kax6vv7c93cfkkas89xnpa4sj9zf28p"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("pytest-runner" ,python-pytest-runner)
+       ("pytest" ,python-pytest)
+       ("six" ,python-six)))
+    (home-page "https://github.com/WoLpH/python-utils")
+    (synopsis "Convenient utilities not included with the standard Python install")
+    (description
+      "Python Utils is a collection of small Python functions and classes which
+make common patterns shorter and easier.")
+    (license license:bsd-2)))
+
+(define-public python2-utils
+  (package-with-python2 python-utils))
+
+(define-public python-webassets
+  (package
+    (name "python-webassets")
+    (version "0.12.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "webassets" version))
+       (sha256
+        (base32
+         "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-jinja2" ,python-jinja2)
+       ("python-mock" ,python-mock)
+       ("python-nose" ,python-nose)
+       ("python-pytest" ,python-pytest)))
+    (home-page "https://github.com/miracle2k/webassets")
+    (synopsis "Media asset management")
+    (description "Merges, minifies and compresses Javascript and CSS files,
+supporting a variety of different filters, including YUI, jsmin, jspacker or
+CSS tidy.  Also supports URL rewriting in CSS files.")
+    (license license:bsd-2)))
+
+(define-public python-sphinx-me
+  (package
+    (name "python-sphinx-me")
+    (version "0.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "sphinx-me" version))
+       (sha256
+        (base32
+         "06jzgp213zihnvpcy2y5jy3ykid3apc2ncp2pg6a2g05lhiziglq"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/stephenmcd/sphinx-me")
+    (synopsis "Create a Sphinx documentation shell")
+    (description
+      "Create a Sphinx documentation shell for your project and include the
+README file as the documentation index.  It handles extracting the required
+meta data such as the project name, author and version from your project for
+use in your Sphinx docs.")
+    (license license:bsd-2)))
+
+(define-public python2-sphinx-me
+  (package-with-python2 python-sphinx-me))
+
+(define-public python-cssmin
+  (package
+    (name "python-cssmin")
+    (version "0.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "cssmin" version))
+        (sha256
+         (base32
+          "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/zacharyvoase/cssmin")
+    (synopsis "Python port of the YUI CSS Compressor")
+    (description "Python port of the YUI CSS Compressor.")
+    (license (list license:expat license:bsd-3))))
+
+(define-public python2-cssmin
+  (package-with-python2 python-cssmin))
+
+(define-public python-diff-match-patch
+  (package
+    (name "python-diff-match-patch")
+    (version "20121119")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "diff-match-patch" version))
+        (sha256
+         (base32
+          "0k1f3v8nbidcmmrk65m7h8v41jqi37653za9fcs96y7jzc8mdflx"))))
+    (build-system python-build-system)
+    (home-page "https://code.google.com/p/google-diff-match-patch")
+    (synopsis "Synchronize plain text")
+    (description "Diff Match and Patch libraries offer robust algorithms to
+perform the operations required for synchronizing plain text.")
+    (license license:asl2.0)))
+
+(define-public python2-diff-match-patch
+  (package-with-python2 python-diff-match-patch))
+
+(define-public python-dirsync
+  (package
+    (name "python-dirsync")
+    (version "2.2.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "dirsync" version ".zip"))
+        (sha256
+         (base32
+          "1hcdvmkwd5512zbxpin0k7bx5bkgzy3swjx7d0kj1y45af6r75v2"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("unzip" ,unzip)))
+    (propagated-inputs
+     `(("six" ,python-six)))
+    (home-page "https://bitbucket.org/tkhyn/dirsync")
+    (synopsis "Advanced directory tree synchronisation tool")
+    (description "Advanced directory tree synchronisation tool.")
+    (license license:expat)))
+
+(define-public python2-dirsync
+  (package-with-python2 python-dirsync))
+
+(define-public python-nosexcover
+  (package
+    (name "python-nosexcover")
+    (version "1.0.11")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "nosexcover" version))
+              (sha256
+               (base32
+                "10xqr12qv62k2flxwqhh8cr00cjhn7sfjrm6p35gd1x5bmjkr319"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-nose" ,python-nose)))
+    (home-page "http://github.com/cmheisel/nose-xcover")
+    (synopsis "Extends nose.plugins.cover to add Cobertura-style XML reports")
+    (description "Nose-xcover is a companion to the built-in
+@code{nose.plugins.cover}.  This plugin will write out an XML coverage report
+to a file named coverage.xml.
+
+It will honor all the options you pass to the Nose coverage plugin,
+especially -cover-package.")
+    (license license:expat)))
+
+(define-public python2-nosexcover
+  (package-with-python2 python-nosexcover))
+
+(define-public python-elasticsearch
+  (package
+    (name "python-elasticsearch")
+    (version "1.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "elasticsearch" version))
+        (sha256
+         (base32
+          "1sdw1r05cw7ihnmng8ra9v968fj7bq6sji8i1dikymsnkcpgc69g"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-mock" ,python-mock)
+       ("python-nosexcover" ,python-nosexcover)
+       ("python-pyaml" ,python-pyaml)
+       ("python-requests" ,python-requests)))
+    (propagated-inputs
+     `(("urllib3" ,python-urllib3)))
+    (arguments
+     ;; tests require the test_elasticsearch module but it is not distributed.
+     `(#:tests? #f))
+    (home-page "https://github.com/elastic/elasticsearch-py")
+    (synopsis "Low-level client for Elasticsearch")
+    (description "Official low-level client for Elasticsearch.  Its goal is to
+provide common ground for all Elasticsearch-related code in Python; because of
+this it tries to be opinion-free and very extendable.")
+    (license license:expat)))
+
+(define-public python2-elasticsearch
+  (package-with-python2 python-elasticsearch))
+
+(define-public python-levenshtein
+  (package
+    (name "python-levenshtein")
+    (version "0.12.0")
+    (source
+     (origin
+      (method url-fetch)
+      (uri (pypi-uri "python-Levenshtein" version))
+      (sha256
+       (base32
+        "1c9ybqcja31nghfcc8xxbbz9h60s9qi12b9hr4jyl69xbvg12fh3"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/ztane/python-Levenshtein")
+    (synopsis "Fast computation of Levenshtein distance and string similarity")
+    (description
+     "The Levenshtein Python C extension module contains functions for fast computation of
+@enumerate
+@item Levenshtein (edit) distance, and edit operations
+@item string similarity
+@item approximate median strings, and generally string averaging
+@item string sequence and set similarity
+@end enumerate
+It supports both normal and Unicode strings.")
+    (license license:gpl2+)))
+
+(define-public python2-levenshtein
+  (package-with-python2 python-levenshtein))
+
+(define-public python-scandir
+  (package
+    (name "python-scandir")
+    (version "1.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "scandir" version))
+       (sha256
+        (base32 "0yjrgp0mxp3d8bjkq2m1ac2ys8n76wykksvgyjrnil9gr3fx7a5d"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/benhoyt/scandir")
+    (synopsis "Directory iteration function")
+    (description
+     "Directory iteration function like os.listdir(), except that instead of
+returning a list of bare filenames, it yields DirEntry objects that include
+file type and stat information along with the name.  Using scandir() increases
+the speed of os.walk() by 2-20 times (depending on the platform and file
+system) by avoiding unnecessary calls to os.stat() in most cases.")
+    (license license:bsd-3)))
+
+(define-public python2-scandir
+  (package-with-python2 python-scandir))
+
+(define-public python2-stemming
+  (package
+    (name "python2-stemming")
+    (version "1.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "stemming" version))
+       (sha256
+        (base32 "0ldwa24gnnxhniv0fhygkpc2mwgd93q10ag8rvzayv6hw418frsr"))))
+    (build-system python-build-system)
+    (arguments
+     `(#:python ,python-2))
+    (home-page "https://bitbucket.org/mchaput/stemming/overview")
+    (synopsis "Python implementations of various stemming algorithms")
+    (description
+     "Python implementations of the Porter, Porter2, Paice-Husk, and Lovins
+stemming algorithms for English.  These implementations are straightforward and
+efficient, unlike some Python versions of the same algorithms available on the
+Web.  This package is an extraction of the stemming code included in the Whoosh
+search engine.")
+    (license license:public-domain)))
+
+(define-public python-factory-boy
+  (package
+    (name "python-factory-boy")
+    (version "2.8.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "factory_boy" version))
+       (sha256
+        (base32 "1fvin6san5xsjh2c4y18caj2lnmwxlylyqm8mh1yc6rp38wlwr56"))))
+    (build-system python-build-system)
+    (arguments
+     ;; Tests are not included in the tarball.
+     `(#:tests? #f))
+    (propagated-inputs
+     `(("faker" ,python-faker)))
+    (home-page "https://github.com/benhoyt/scandir")
+    (synopsis "Versatile test fixtures replacement")
+    (description
+     "Factory_boy is a fixtures replacement based on thoughtbot’s factory_girl.
+
+As a fixtures replacement tool, it aims to replace static, hard to maintain
+fixtures with easy-to-use factories for complex object.
+
+Instead of building an exhaustive test setup with every possible combination
+of corner cases, factory_boy allows you to use objects customized for the
+current test, while only declaring the test-specific fields")
+    (license license:expat)))
+
+(define-public python2-factory-boy
+  (package-with-python2 python-factory-boy))
+
+(define-public python-translate-toolkit
+  (package
+    (name "python-translate-toolkit")
+    (version "2.1.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "translate-toolkit" version ".tar.bz2"))
+       (sha256
+        (base32 "1vlkwrg83vb17jc36pmwh2b7jphwf390lz0jw8hakcg16qhwypvq"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-sphinx" ,python-sphinx)))
+    (propagated-inputs
+     `(("python-babel" ,python-babel)
+       ("python-beautifulsoup4" ,python-beautifulsoup4)
+       ("python-chardet" ,python-chardet)
+       ("python-diff-match-patch" ,python-diff-match-patch)
+       ("python-levenshtein" ,python-levenshtein)
+       ("python-lxml" ,python-lxml)
+       ("python-six" ,python-six)
+       ("python-vobject" ,python-vobject)
+       ("python-pyyaml" ,python-pyyaml)))
+    (arguments
+     ;; TODO: tests are not run, because they end with
+     ;; TypeError: parse() missing 2 required positional arguments: 'tree' and
+     ;; 'parse_funcs'
+     ;; during test setup.
+     `(#:tests? #f))
+    (home-page "http://toolkit.translatehouse.org")
+    (synopsis "Tools and API for translation and localization engineering")
+    (description
+     "Tools and API for translation and localization engineering.  It contains
+several utilities, as well as an API for building localization tools.")
+    (license license:gpl2+)))
+
+(define-public python2-translate-toolkit
+  (package-with-python2 python-translate-toolkit))
+
+(define-public python-mysqlclient
+  (package
+    (name "python-mysqlclient")
+    (version "1.3.10")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "mysqlclient" version))
+       (sha256
+        (base32
+         "0qkj570x4rbsblji6frvsvp2v1ap32dqzj1lq62zp9515ffsyaj5"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("mariadb" ,mariadb)
+       ("nose" ,python-nose)
+       ("mock" ,python-mock)
+       ("py.test" ,python-pytest)))
+    (inputs
+     `(("mysql" ,mysql)
+       ("libz" ,zlib)
+       ("openssl" ,openssl)))
+    (home-page "https://github.com/PyMySQL/mysqlclient-python")
+    (synopsis "MySQLdb is an interface to the popular MySQL database server for Python")
+    (description "MySQLdb is an interface to the popular MySQL database server
+for Python.  The design goals are:
+@enumerate
+@item Compliance with Python database API version 2.0 [PEP-0249],
+@item Thread-safety,
+@item Thread-friendliness (threads will not block each other).
+@end enumerate")
+    (license license:gpl2)))
+
+(define-public python2-mysqlclient
+  (package-with-python2 python-mysqlclient))
+
+(define-public python-hiredis
+  (package
+    (name "python-hiredis")
+    (version "0.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "hiredis" version))
+       (sha256
+        (base32
+         "1dfm2k9l9zar9nw9fwmm74zrgraxdxs04vx9li56fjcf289qx5fa"))))
+    (build-system python-build-system)
+    (arguments
+     ;; no tests
+     `(#:tests? #f))
+    (home-page "https://github.com/redis/hiredis-py")
+    (synopsis "Python extension that wraps protocol parsing code in hiredis")
+    (description "Python-hiredis is a python extension that wraps protocol
+parsing code in hiredis.  It primarily speeds up parsing of multi bulk replies.")
+    (license license:bsd-3)))
+
+(define-public python2-hiredis
+  (package-with-python2 python-hiredis))
+
+(define-public python-fakeredis
+  (package
+    (name "python-fakeredis")
+    (version "0.8.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "fakeredis" version))
+       (sha256
+        (base32
+         "0zncahj3byyasyfx9i7k991ph0n0lq8v3a21pqri5qxn9564bk9r"))))
+    (build-system python-build-system)
+    (arguments
+     ;; no tests
+     `(#:tests? #f))
+    (home-page "https://github.com/jamesls/fakeredis")
+    (synopsis "Fake implementation of redis API for testing purposes")
+    (description "Fakeredis is a pure python implementation of the redis-py
+python client that simulates talking to a redis server.  This was created for a
+single purpose: to write unittests.  Setting up redis is not hard, but many time
+ you want to write unittests that do not talk to an external server (such as
+redis).  This module now allows tests to simply use this module as a reasonable
+substitute for redis.")
+    (license license:bsd-3)))
+
+(define-public python2-fakeredis
+  (package-with-python2 python-fakeredis))
index 492f1d9..2b32aa3 100644 (file)
@@ -28,7 +28,7 @@
 (define-public re2
    (package
      (name "re2")
-     (version "2017-04-01")
+     (version "2017-05-01")
      (source (origin
                (method url-fetch)
                (uri
                (file-name (string-append name "-" version ".tar.gz"))
                (sha256
                 (base32
-                 "14i9pf9ap8h48j1584ifsq7c7a884cr1s4r7zvpcb9x1xr9232wh"))))
+                 "19glvic4ipd122yhcavf7ifg7ms5k61398vq7gyb90wggf2w0z9k"))))
      (build-system gnu-build-system)
      (arguments
-      `(#:test-target "test"
+      `(#:modules ((guix build gnu-build-system)
+                   (guix build utils)
+                   (srfi srfi-1))
+        #:test-target "test"
         ;; There is no configure step, but the Makefile respects a prefix.
         ;; As ./configure does not know anything about the target CXX
         ;; we need to specify TARGET-g++ explicitly.
index 5bcd598..623ef93 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@openmailbox.org>
@@ -25,6 +25,7 @@
   #:use-module (guix download)
   #:use-module (guix build-system gnu)
   #:use-module (guix licenses)
+  #:use-module (guix utils)
   #:use-module (gnu packages acl)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages autotools)
@@ -252,6 +253,44 @@ Desktops into Active Directory environments using the winbind daemon.")
 destructors.  It is the core memory allocator used in Samba.")
     (license gpl3+))) ;; The bundled "replace" library uses LGPL3.
 
+(define-public talloc/static
+  (package
+    (inherit talloc)
+    (name "talloc-static")
+    (synopsis
+     "Hierarchical, reference counted memory pool system (static library)")
+    (arguments
+     (substitute-keyword-arguments (package-arguments talloc)
+       ((#:phases phases)
+        ;; Since Waf, the build system talloc uses, apparently does not
+        ;; support building static libraries from a ./configure flag, roll our
+        ;; own build process.  No need to be ashamed, we're not the only ones
+        ;; doing that:
+        ;; <https://github.com/proot-me/proot-static-build/blob/master/GNUmakefile>.
+        ;; :-)
+        `(modify-phases ,phases
+           (replace 'build
+             (lambda _
+               (letrec-syntax ((shell (syntax-rules ()
+                                        ((_ (command ...) rest ...)
+                                         (and (zero? (system* command ...))
+                                              (shell rest ...)))
+                                        ((_)
+                                         #t))))
+                 (shell ("gcc" "-c" "-Ibin/default" "-I" "lib/replace"
+                         "-I." "-Wall" "-g" "talloc.c")
+                        ("ar" "rc" "libtalloc.a" "talloc.o")))))
+           (replace 'install
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out     (assoc-ref outputs "out"))
+                      (lib     (string-append out "/lib"))
+                      (include (string-append out "/include")))
+                 (mkdir-p lib)
+                 (install-file "libtalloc.a" lib)
+                 (install-file "talloc.h" include)
+                 #t)))
+           (delete 'check)))))))            ;XXX: tests rely on Python modules
+
 (define-public tevent
   (package
     (name "tevent")
index 1bdfcd0..4958466 100644 (file)
@@ -4,6 +4,7 @@
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -155,6 +156,8 @@ window manager as well as the Tmux terminal multiplexer.")
        (method url-fetch)
        (uri (string-append "https://github.com/nelhage/reptyr/archive"
                            "/reptyr-" version ".tar.gz"))
+       ;; XXX: To be removed on next reptyr release.
+       (patches (search-patches "reptyr-fix-gcc-7.patch"))
        (sha256
         (base32
          "07pfl0rkgm8m3f3jy8r9l2yvnhf8lgllpsk3mh57mhzdxq8fagf7"))))
index 5908f50..a6b5270 100644 (file)
@@ -92,7 +92,7 @@ such as compact binary encodings, XML, or JSON.")
 (define-public msgpack
   (package
     (name "msgpack")
-    (version "1.4.1")
+    (version "1.4.2")
     (source
      (origin
        (method url-fetch)
@@ -108,7 +108,7 @@ such as compact binary encodings, XML, or JSON.")
              (close-output-port p))))
        (sha256
         (base32
-         "0bpjfh9vz0n2k93mph3x15clmigkgs223xfn8h12ymrh5gsi5ica"))))
+         "18hzmyfg3mvnp7ab03nqdzzvqagkl42gygjpi4zv4i7aca2dmwf0"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("googletest" ,googletest)
@@ -136,14 +136,15 @@ serialization.")
 (define-public libmpack
   (package
     (name "libmpack")
-    (version "1.0.3")
+    (version "1.0.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/tarruda/libmpack/"
                                   "archive/" version ".tar.gz"))
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
-               (base32 "08kfdl55yf66xk57aqsbf8n45f2jsw2v7qwnaan08ciim77j3sv5"))))
+               (base32
+                "0ml922gv8y99lbldqb9ykpjndla0hlprdjyl79yskkhwv2ai7sac"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -164,6 +165,14 @@ that implements both the msgpack and msgpack-rpc specifications.")
 (define-public lua-libmpack
   (package (inherit libmpack)
     (name "lua-libmpack")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/libmpack/libmpack-lua/"
+                                  "archive/" (package-version libmpack) ".tar.gz"))
+              (file-name (string-append name "-" (package-version libmpack) ".tar.gz"))
+              (sha256
+               (base32
+                "153zrrbyxhf71dgzjjhrk56rfwk3nisslpgcqyg44v8fnz1xpk6i"))))
     (build-system gnu-build-system)
     (arguments
      `(;; FIXME: tests require "busted", which is not yet available in Guix.
@@ -173,26 +182,35 @@ that implements both the msgpack and msgpack-rpc specifications.")
        (let* ((lua-version ,(package-version lua))
               (lua-major+minor ,(version-major+minor (package-version lua))))
          (list "CC=gcc"
+               "FETCH=echo"  ; don't fetch anything from the web
+               "UNTGZ=echo"  ; and don't try to unpack it
                "USE_SYSTEM_LUA=yes"
-               (string-append "LUA_VERSION=" lua-version)
-               (string-append "LUA_VERSION_MAJ_MIN=" lua-major+minor)
+               (string-append "MPACK_LUA_VERSION=" lua-version)
+               (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
                (string-append "PREFIX="
                               (assoc-ref %outputs "out"))
                (string-append "LUA_CMOD_INSTALLDIR="
                               (assoc-ref %outputs "out")
-                              "/lib/lua/" lua-major+minor)
-               ;; This is unnecessary as of upstream commit 02886c13ff8a2,
-               ;; which is not part of the current release.
-               "CFLAGS=-DLUA_C89_NUMBERS -fPIC"))
+                              "/lib/lua/" lua-major+minor)))
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
-         (add-after 'unpack 'chdir
-           (lambda _ (chdir "binding/lua") #t)))))
+         (add-after 'unpack 'unpack-mpack-sources
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; This is broken because mpack-src is not a file, but all
+             ;; prerequisites are added to the inputs of the gcc invocation.
+             (substitute* "Makefile"
+               (("\\$\\(MPACK\\): mpack-src") "$(MPACK): "))
+             (mkdir-p "mpack-src")
+             (zero? (system* "tar" "-C" "mpack-src"
+                             "--strip-components=1"
+                             "-xvf" (assoc-ref inputs "libmpack"))))))))
     (inputs
      `(("lua" ,lua)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("libmpack" ,(package-source libmpack))))
+    (home-page "https://github.com/libmpack/libmpack-lua")
     (synopsis "Lua bindings for the libmpack binary serialization library")))
 
 (define-public lua5.2-libmpack
@@ -205,8 +223,8 @@ that implements both the msgpack and msgpack-rpc specifications.")
                 (lua-major+minor ,(version-major+minor (package-version lua-5.2))))
            (list "CC=gcc"
                  "USE_SYSTEM_LUA=yes"
-                 (string-append "LUA_VERSION=" lua-version)
-                 (string-append "LUA_VERSION_MAJ_MIN=" lua-major+minor)
+                 (string-append "MPACK_LUA_VERSION=" lua-version)
+                 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
                  (string-append "PREFIX="
                                 (assoc-ref %outputs "out"))
                  (string-append "LUA_CMOD_INSTALLDIR="
@@ -264,7 +282,7 @@ it a convenient format to store user input files.")
 (define-public capnproto
   (package
     (name "capnproto")
-    (version "0.5.3.1")
+    (version "0.6.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -272,7 +290,7 @@ it a convenient format to store user input files.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "06wi4fcxx58nc7pr2xga20hn11psk56b0yhna5bx2pw90mlcbd84"))))
+                "0gpp1cxsb9nfd7qkjjykzknx03y0z0n4bq5q0fmxci7w38ci22g5"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
index 012f272..4e684e8 100644 (file)
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017 ng0 <contact.ng0@cryptolab.net>
+;;; Copyright © 2017 ng0 <ng0@no-reply.pragmatique.xyz>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -31,6 +31,7 @@
   #:use-module (gnu packages base)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages documentation)
+  #:use-module (gnu packages groff)
   #:use-module (gnu packages libedit)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
@@ -116,6 +117,7 @@ direct descendant of NetBSD's Almquist Shell (@command{ash}).")
     (inputs
      `(("bc" ,bc)
        ("ncurses" ,ncurses)
+       ("groff" ,groff)               ;for 'fish --help'
        ("pcre2" ,pcre2)               ;don't use the bundled PCRE2
        ("python" ,python-wrapper)))   ;for fish_config and manpage completions
     (arguments
@@ -133,6 +135,8 @@ direct descendant of NetBSD's Almquist Shell (@command{ash}).")
                                "/bin/bc")))
              (substitute* "share/functions/fish_update_completions.fish"
                (("python") (which "python")))
+             (substitute* "share/functions/__fish_print_help.fish"
+               (("nroff") (which "nroff")))
              #t)))))
     (synopsis "The friendly interactive shell")
     (description
@@ -147,6 +151,32 @@ highlighting.")
     (home-page "https://fishshell.com/")
     (license gpl2)))
 
+(define-public fish-guix
+  (package
+    (name "fish-guix")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://dist.pragmatique.xyz/fish-guix/"
+                           name "-" version ".tar.xz"))
+       (sha256
+        (base32
+         "0xi0j9lvzh43lrj82gz52n2cjln0i0pgayngrg4hy5w4449biy0z"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f ; No checks.
+       #:make-flags (list
+                     (string-append "PREFIX=" %output))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)))) ; No configure script.
+    (home-page "https://pragmatique.xyz/software/fish-guix.html")
+    (synopsis "Fish completions for Guix")
+    (description
+     "Fish-guix provides completions for Guix for users of the fish shell.")
+    (license public-domain)))
+
 (define-public rc
   (package
     (name "rc")
index 135083a..1fd3950 100644 (file)
@@ -135,8 +135,8 @@ a server that supports the SSH-2 protocol.")
             (sha256 (base32
                      "1w7rb5gbrikxdkp8w7zxnci4549gk4bw1lml01s59w5rzb2y6ilq"))))
    (build-system gnu-build-system)
-   (inputs `(("groff" ,groff)
-             ("openssl" ,openssl)
+   (native-inputs `(("groff" ,groff)))
+   (inputs `(("openssl" ,openssl)
              ("pam" ,linux-pam)
              ("mit-krb5" ,mit-krb5)
              ("zlib" ,zlib)
@@ -213,7 +213,7 @@ Additionally, various channel-specific options can be negotiated.")
 (define-public guile-ssh
   (package
     (name "guile-ssh")
-    (version "0.10.2")
+    (version "0.11.0")
     (home-page "https://github.com/artyom-poptsov/guile-ssh")
     (source (origin
               ;; ftp://memory-heap.org/software/guile-ssh/guile-ssh-VERSION.tar.gz
@@ -225,7 +225,16 @@ Additionally, various channel-specific options can be negotiated.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0pkiq3fm15pr4w1r420rrwwfmi4jz492r6l6vzjk6v73xlyfyfl3"))))
+                "0r261i8kc3avbmbwgyzak2vnqwssjlgz37g2y2fwm80w9bmn2m7j"))
+              (modules '((guix build utils)))
+              (snippet
+               ;; 'configure.ac' mistakenly tries to link files from examples/
+               ;; that are not instantiated yet.  Work around it.
+               '(substitute* "configure.ac"
+                  (("AC_CONFIG_LINKS\\(\\[examples/([^:]+):.*" _ file)
+                   (string-append "AC_CONFIG_FILES([examples/" file
+                                  "], [chmod +x examples/"
+                                  file "])\n"))))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases (modify-phases %standard-phases
@@ -256,7 +265,7 @@ Additionally, various channel-specific options can be negotiated.")
                      ("texinfo" ,texinfo)
                      ("pkg-config" ,pkg-config)
                      ("which" ,which)))
-    (inputs `(("guile" ,guile-2.0)
+    (inputs `(("guile" ,guile-2.2)
               ("libssh" ,libssh)
               ("libgcrypt" ,libgcrypt)))
     (synopsis "Guile bindings to libssh")
@@ -267,25 +276,14 @@ libssh library.")
     (license license:gpl3+)))
 
 (define-public guile2.2-ssh
-  ;; This is a snapshot of a unofficial copy of Guile-SSH, which hopefully
-  ;; reflects the upcoming release well enough.
-  (let ((commit "926a0843626f89e3db02d01a6b01cc1f0d9cefcf")
-        (revision "0"))
-    (package
-      (inherit guile-ssh)
-      (name "guile2.2-ssh")
-      (version (string-append "0.10.2." revision "." (string-take commit 7)))
-      (source (origin
-                (method git-fetch)
-                (uri (git-reference
-                      (url "https://notabug.org/civodul/guile-ssh/")
-                      (commit commit)))
-                (file-name (git-file-name name version))
-                (sha256
-                 (base32
-                  "0hf28macq8d1w05g0xy2lw1s5vzmcrixh7m43x7qvvdd31c998ip"))))
-      (inputs `(("guile" ,guile-2.2)
-                ,@(alist-delete "guile" (package-inputs guile-ssh)))))))
+  (deprecated-package "guile2.2-ssh" guile-ssh))
+
+(define-public guile2.0-ssh
+  (package
+    (inherit guile-ssh)
+    (name "guile2.0-ssh")
+    (inputs `(("guile" ,guile-2.0)
+              ,@(alist-delete "guile" (package-inputs guile-ssh))))))
 
 (define-public corkscrew
   (package
index a87e665..1d3d1d3 100644 (file)
@@ -2,7 +2,7 @@
 ;;; Copyright © 2013 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2015 Amirouche Boubekki <amirouche@hypermove.net>
 ;;; Copyright © 2016 Al McElrath <hello@yrns.org>
-;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
+;;; Copyright © 2016, 2017 ng0 <ng0@no-reply.pragmatique.xyz>
 ;;; Copyright © 2015 Dmitry Bogatov <KAction@gnu.org>
 ;;; Copyright © 2015 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2016 Eric Bavier <bavier@member.fsf.org>
@@ -137,14 +137,14 @@ optimising the environment for the application in use and the task performed.")
 (define-public dmenu
   (package
     (name "dmenu")
-    (version "4.6")
+    (version "4.7")
     (source (origin
               (method url-fetch)
               (uri (string-append "http://dl.suckless.org/tools/dmenu-"
                                   version ".tar.gz"))
               (sha256
                (base32
-                "1cwnvamqqlgczvd5dv5rsgqbhv8kp0ddjnhmavb3q732i8028yja"))))
+                "1fgph549i0yw62x02jhfc8qmqk2rnzcnm46bxq6jig1cvkw3amm7"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -681,8 +681,8 @@ as -1, to be used instead of U+FFFD.
 
 ;; No release tarballs so far.
 (define-public lchat
-  (let ((revision "1")
-        (commit "bbde23732f8c7769b982f0c1bda9b99fbf93f932"))
+  (let ((revision "2")
+        (commit "25d90f4630b45e2b609d2e3daecb32cf5ff065fd"))
     (package
       (name "lchat")
       (version (string-append "0.0.0-" revision "." (string-take commit 7)))
@@ -695,7 +695,7 @@ as -1, to be used instead of U+FFFD.
          (file-name (string-append name "-" version "-checkout"))
          (sha256
           (base32
-           "00q3rc0aa5416jvjvrj71x1wnr0331kxhvjjs7pyxgnq4xf36k63"))))
+           "0dvljyq3m7rxxkqv7rkmijak6vj8i4db3iq2z988bvf76chz268b"))))
       (build-system gnu-build-system)
       (arguments
        `(#:tests? #f ; No tests
index adad55e..de88889 100644 (file)
@@ -220,7 +220,7 @@ interfaces (GUIs) in the Tcl language.")
     ;; those of the orignal Tix4.1.3 or Tk8.4.* sources. See the files
     ;; pTk/license.terms, pTk/license.html_lib, and pTk/Tix.license for
     ;; details of this license."
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public tcllib
   (package
index 979278a..a800758 100644 (file)
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016, 2017 José Miguel Sánchez García <jmi2k@openmailbox.org>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017 Petter <petter@mykolab.ch>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -31,6 +32,7 @@
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix packages)
+  #:use-module (gnu packages)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages gettext)
@@ -49,6 +51,7 @@
   #:use-module (gnu packages xdisorg)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages qt)
   #:use-module (srfi srfi-26))
 
 (define-public tilda
@@ -433,3 +436,110 @@ its embedding program should provide it to draw on its behalf.  It avoids
 calling @code{malloc} during normal running state, allowing it to be used in
 embedded kernel situations.")
     (license license:expat)))
+
+(define-public cool-retro-term
+  (let ((commit "e48719fa44e5307df71dbd0fad234f8a6a53f863")
+        (revision "1"))
+    (package
+      (name "cool-retro-term")
+      (version (string-append "1.0.0-" revision "." (string-take commit 7)))
+      (source (origin
+                (method git-fetch)
+                (file-name (string-append name "-" version "-checkout"))
+                (uri (git-reference
+                      (url (string-append "https://github.com/Swordfish90/" name))
+                      (commit commit)
+                      (recursive? #t)))
+                (sha256
+                 (base32 "1sgqbirninkvgwchr35zgn5vzqvsmrf3cp7lqady1xgrawb8lsz3"))
+                (patches
+                 (search-patches "cool-retro-term-remove-non-free-fonts.patch"
+                                 "cool-retro-term-fix-array-size.patch"
+                                 "cool-retro-term-dont-check-uninit-member.patch"
+                                 "cool-retro-term-memory-leak-1.patch"))
+                (modules '((guix build utils)))
+                (snippet
+                 '(for-each (lambda (font)
+                              (delete-file-recursively
+                               (string-append "app/qml/fonts/" font))
+                              (substitute* '("app/qml/resources.qrc")
+                                (((string-append "<file>fonts/" font ".*"))
+                                 "")))
+                            '(;"1971-ibm-3278"     ; BSD 3-clause
+                              "1977-apple2"        ; Non-Free
+                              "1977-commodore-pet" ; Non-Free
+                              "1979-atari-400-800" ; Non-Free
+                              "1982-commodore64"   ; Non-Free
+                              "1985-atari-st"      ; ?
+                              "1985-ibm-pc-vga"    ; Unclear
+                              ;"modern-fixedsys-excelsior" ; Redistributable
+                              ;"modern-hermit"     ; SIL
+                              ;"modern-inconsolata"; SIL
+                              ;"modern-pro-font-win-tweaked" ; X11
+                              ;"modern-proggy-tiny"; X11
+                              ;"modern-terminus"   ; SIL
+                              "modern-monaco"))))) ; Apple non-free
+      (build-system gnu-build-system)
+      (inputs
+       `(("qtbase" ,qtbase)
+         ("qtdeclarative" ,qtdeclarative)
+         ("qtgraphicaleffects" ,qtgraphicaleffects)
+         ("qtquickcontrols" ,qtquickcontrols)))
+      (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (replace 'configure
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (share (string-append out "/share")))
+                 (substitute* '("qmltermwidget/qmltermwidget.pro")
+                   (("INSTALL_DIR = \\$\\$\\[QT_INSTALL_QML\\]")
+                    (string-append "INSTALL_DIR = " out "/qml")))
+                 (substitute* '("app/app.pro")
+                   (("target.path \\+= /usr")
+                    (string-append "target.path += " out))
+                   (("icon32.path = /usr/share")
+                    (string-append "icon32.path = " share))
+                   (("icon64.path = /usr/share")
+                    (string-append "icon64.path = " share))
+                   (("icon128.path = /usr/share")
+                    (string-append "icon128.path = " share))
+                   (("icon256.path = /usr/share")
+                    (string-append "icon256.path = " share)))
+                 (zero? (system* "qmake")))))
+           (add-before 'install 'fix-Makefiles
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out")))
+                 (substitute* '("Makefile")
+                   (("\\$\\(INSTALL_ROOT\\)/usr") out)))))
+           (add-after 'install 'wrap-executable
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (qml "/qml"))
+                 (wrap-program (string-append out "/bin/cool-retro-term")
+                   `("QML2_IMPORT_PATH" ":" prefix
+                     (,(string-append out qml)
+                      ,(string-append
+                        (assoc-ref inputs "qtdeclarative") qml)
+                      ,(string-append
+                        (assoc-ref inputs "qtgraphicaleffects") qml)
+                      ,(string-append
+                        (assoc-ref inputs "qtquickcontrols") qml)))))))
+           (add-after 'install 'add-alternate-name
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((bin (string-append (assoc-ref outputs "out") "/bin")))
+                 (symlink (string-append bin "/cool-retro-term")
+                          (string-append bin "/crt"))))))))
+      (synopsis "Terminal emulator")
+      (description
+       "Cool-retro-term (crt) is a terminal emulator which mimics the look and
+feel of the old cathode ray tube (CRT) screens.  It has been designed to be
+eye-candy, customizable, and reasonably lightweight.")
+      (home-page "https://github.com/Swordfish90/cool-retro-term")
+      (license (list
+                license:gpl2+           ; qmltermwidget
+                license:gpl3+           ; cool-retro-term
+                ;; Fonts
+                license:silofl1.1
+                license:x11
+                license:bsd-3)))))
index 46c578f..7839e16 100644 (file)
@@ -428,7 +428,7 @@ and processing BibTeX files.  @code{Text::BibTeX} gives you access to the data
 at many different levels: you may work with BibTeX entries as simple field to
 string mappings, or get at the original form of the data as a list of simple
 values (strings, macros, or numbers) pasted together.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public biber
   (package
index 920868b..98df481 100644 (file)
@@ -3,6 +3,7 @@
 ;;; Copyright © 2016 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2017 Feng Shu <tumashu@163.com>
+;;; Copyright © 2017 ng0 <ng0@no-reply.pragmatique.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +28,7 @@
   #:use-module (guix build-system gnu)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages assembly)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages gcc)
@@ -189,3 +191,39 @@ development focuses on keeping weight down to a minimum, only the most essential
 features are implemented in the editor.  Leafpad is simple to use, is easily
 compiled, requires few libraries, and starts up quickly. ")
     (license license:gpl2+)))
+
+(define-public e3
+  (package
+    (name "e3")
+    (version "2.82")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://sites.google.com/site/e3editor/Home/"
+                                  "e3-" version ".tgz"))
+              (sha256
+               (base32
+                "0919kadkas020maqq37852isnzp053q2fnws2zh3mz81d1jiviak"))
+              (modules '((guix build utils)))
+
+              ;; Remove pre-built binaries.
+              (snippet '(delete-file-recursively "bin"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f
+       #:make-flags (list (string-append "PREFIX="
+                                         (assoc-ref %outputs "out")))
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))))
+    (native-inputs
+     `(("nasm" ,nasm)))
+    (home-page "https://sites.google.com/site/e3editor/")
+    (synopsis "Tiny text editor written in assembly")
+    (description
+     "e3 is a micro text editor with an executable code size between 3800 and
+35000 bytes.  Except for ``syntax highlighting'', the e3 binary supports all
+of the basic functions one expects plus built in arithmetic calculations.
+UTF-8 coding of unicode characters is supported as well.  e3 can use
+Wordstar-, EMACS-, Pico, Nedit or vi-like key bindings.  e3 can be used on
+16, 32, and 64-bit CPUs.")
+    (supported-systems '("x86_64-linux" "i686-linux"))
+    (license license:gpl2+)))
index 50e9de4..1516fb8 100644 (file)
@@ -5,7 +5,7 @@
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;;
@@ -431,7 +431,7 @@ required structures.")
 (define-public libressl
   (package
     (name "libressl")
-    (version "2.5.3")
+    (version "2.5.4")
     (source
      (origin
       (method url-fetch)
@@ -440,7 +440,7 @@ required structures.")
              version ".tar.gz"))
       (sha256
        (base32
-        "0c4awq45cl757fv7f7f75i5i0ibc6v7ns13n7xvfak7chv2lrqql"))))
+        "1ykf6dqlbafafhbdfmcj19pjj1z6wmsq0rmyqga1i0xv5x95nyhh"))))
     (build-system gnu-build-system)
     (arguments
      ;; Do as if 'getentropy' was missing since older Linux kernels lack it
@@ -458,7 +458,7 @@ required structures.")
            (search-path-specification
             (variable "SSL_CERT_FILE")
             (files '("etc/ssl/certs/ca-certificates.crt")))))
-    (home-page "http://www.libressl.org/")
+    (home-page "https://www.libressl.org/")
     (synopsis "SSL/TLS implementation")
     (description "LibreSSL is a version of the TLS/crypto stack forked
 from OpenSSL in 2014, with the goals of modernizing the codebase, improving
@@ -474,13 +474,13 @@ security, and applying best practice development processes.")
   (package
     (name "python-acme")
     ;; Remember to update the hash of certbot when updating python-acme.
-    (version "0.13.0")
+    (version "0.14.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "acme" version))
       (sha256
        (base32
-        "05cqadwzgfcianw3v0qxwja65dxnzw429f7dk8w0mnh21pib72bl"))))
+        "0hrmh28rrc0fsiw6nqfwbkwb1s4nkl54x50c0g0xlnp86752nzff"))))
     (build-system python-build-system)
 
     (arguments
@@ -540,7 +540,7 @@ security, and applying best practice development processes.")
               (uri (pypi-uri name version))
               (sha256
                (base32
-                "1wq0khcf4ixda71cgfd9rkqqzx6j8hp8ha0cssvjzjnsgrsdffpn"))))
+                "0hbp3njss01a0d3brvcfzja0w0j9plwrv6l70jsfvnhy3rrd7bcq"))))
     (build-system python-build-system)
     (arguments
      `(#:python ,python-2
@@ -634,7 +634,7 @@ web pages on SSL servers (for symmetry, the same API is offered for accessing
 http servers, too), an sslcat() function for writing your own clients, and
 finally access to the SSL api of the SSLeay/OpenSSL package so you can write
 servers or clients for more complicated applications.")
-    (license (package-license perl))
+    (license license:perl-license)
     (home-page "http://search.cpan.org/~mikem/Net-SSLeay-1.66/")))
 
 (define-public perl-crypt-openssl-rsa
@@ -663,7 +663,7 @@ servers or clients for more complicated applications.")
     "RSA encoding and decoding, using the openSSL libraries")
   (description "Crypt::OpenSSL::RSA does RSA encoding and decoding (using the
 OpenSSL libraries).")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define perl-crypt-arguments
    `(#:phases (modify-phases %standard-phases
@@ -699,7 +699,7 @@ OpenSSL libraries).")
   (description "Crypt::OpenSSL::Bignum provides multiprecision integer
 arithmetic in Perl.")
   ;; At your option either gpl1+ or the Artistic License
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-crypt-openssl-random
  (package
@@ -724,7 +724,7 @@ arithmetic in Perl.")
     "OpenSSL/LibreSSL pseudo-random number generator access")
   (description "Crypt::OpenSSL::Random is a OpenSSL/LibreSSL pseudo-random
 number generator")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public acme-client
   (package
index a3a6e84..645e9a6 100644 (file)
@@ -34,6 +34,7 @@
        (method url-fetch)
        (uri (string-append "https://miniupnp.tuxfamily.org/files/"
                            name "-" version ".tar.gz"))
+       (patches (search-patches "miniupnpc-CVE-2017-8798.patch"))
        (sha256
         (base32 "0n11m2wq812zms5b21h8ihw1kbyaihj9nqjiida0hskf4dmw4m13"))))
     (build-system gnu-build-system)
index e0770dc..cd684c0 100644 (file)
@@ -13,6 +13,7 @@
 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
+;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -116,14 +117,14 @@ as well as the classic centralized workflow.")
 (define-public git
   (package
    (name "git")
-   (version "2.12.2")
+   (version "2.13.0")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0jlccxx7l4c76h830y8lhrxr4kqksrxqlnmj3xb8sqbfa0irw6nj"))))
+              "0n0j36rapw31zb0sabap88ffncv8jg3nwc4miyim64ilyav2mgsb"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -136,7 +137,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "0n4mgw5mbrr1hm0y7xgwixf9p6gy61m6qm67ldagpxxhwq2dmlby"))))))
+            "1jcp5bjam0cqzc41bvd3qwzv2f35zdajr8icxb89q29b5v3gj544"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
@@ -314,14 +315,14 @@ everything from small to very large projects with speed and efficiency.")
 (define-public git@2.10
   (package
     (inherit git)
-    (version "2.10.2")
+    (version "2.10.3")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "0wc64dzcxrzgi6kwcljz6y3cwm3ajdgf6aws7g58azbhvl1jk04l"))))))
+              "02mb7yi49algsya3hnkcxdslwb6p1bi7c732z1g8kzq4hs838m7z"))))))
 
 (define-public libgit2
   (package
@@ -628,7 +629,13 @@ also walk each side of a merge and test those changes individually.")
                         ;; invokes Perl.
                         (substitute* (find-files "." ".*")
                           ((" perl -")
-                           (string-append " " perl " -"))))))
+                           (string-append " " perl " -")))
+
+                        ;; Avoid references to the store in authorized_keys.
+                        ;; This works because gitolite-shell is in the PATH.
+                        (substitute* "src/triggers/post-compile/ssh-authkeys"
+                          (("\\$glshell \\$user")
+                           "gitolite-shell $user")))))
                   (replace 'install
                     (lambda* (#:key outputs #:allow-other-keys)
                       (let* ((output (assoc-ref outputs "out"))
index e3f9f36..dde4041 100644 (file)
@@ -17,6 +17,7 @@
 ;;; Copyright © 2017 Feng Shu <tumashu@163.com>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Chris Marusich <cmmarusich@gmail.com>
+;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -75,6 +76,7 @@
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages m4)
@@ -989,7 +991,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2017.04.28")
+    (version "2017.05.07")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://yt-dl.org/downloads/"
@@ -997,7 +999,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0d3mgf8qxb07b7bjf79ppaxhcl4f47q0zjpshp6y2q0lalfskh3j"))))
+                "1q3b9xkbk1lmy1wxm1jcnmaj70sdksqbc8zsqxz6b6z4nmv8qc25"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -1193,6 +1195,33 @@ authentication and descrambling (if an external libdvdcss library is
 installed).")
     (license license:gpl2+)))
 
+(define-public dvdauthor
+  (package
+    (name "dvdauthor")
+    (version "0.7.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/dvdauthor/dvdauthor-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1drfc47hikfzc9d7hjk34rw10iqw01d2vwmn91pv73ppx4nsj81h"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libdvdread" ,libdvdread)
+       ("libpng" ,libpng)
+       ("imagemagick" ,imagemagick)
+       ("libxml2" ,libxml2)
+       ("freetype" ,freetype)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (synopsis "Generates a DVD-Video movie from a MPEG-2 stream")
+    (description "@command{dvdauthor} will generate a DVD-Video movie from a
+MPEG-2 stream containing VOB packets.")
+    (home-page "http://dvdauthor.sourceforge.net")
+    (license license:gpl3+)))
+
 (define-public libdvdnav
   (package
     (name "libdvdnav")
@@ -1605,7 +1634,7 @@ be used for realtime video capture via Linux-specific APIs.")
 (define-public obs
   (package
     (name "obs")
-    (version "18.0.1")
+    (version "18.0.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/jp9000/obs-studio"
@@ -1613,7 +1642,7 @@ be used for realtime video capture via Linux-specific APIs.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "043f8mfdh4ll0hpivpyg3iniirckwsgri0gzamyrba1yhf2c2ibr"))))
+                "02pbiyvf5x0zh448h5rpmyn33qnsqk694xxlyns83mdi74savyqw"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f)) ; no tests
index 44ae522..697c7de 100644 (file)
@@ -512,10 +512,82 @@ and powerline symbols, etc.")
       (home-page "https://github.com/vim-airline/vim-airline-themes")
       (license license:expat))))
 
+(define-public vim-syntastic
+  (package
+    (name "vim-syntastic")
+    (version "3.8.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/vim-syntastic/syntastic/archive/"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0wsnd9bsp5x6yiw96h1bnd1vyxdkh130hb82kyyxydgsplx92ima"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (vimfiles (string-append out "/share/vim/vimfiles"))
+                    (doc (string-append vimfiles "/doc"))
+                    (plugin (string-append vimfiles "/plugin"))
+                    (autoload (string-append vimfiles "/autoload"))
+                    (syntax-checkers (string-append vimfiles "/syntax_checkers")))
+               (copy-recursively "doc" doc)
+               (copy-recursively "autoload" autoload)
+               (copy-recursively "plugin" plugin)
+               (copy-recursively "syntax_checkers" syntax-checkers)
+               #t))))))
+    (synopsis "Syntax checking plugin for Vim")
+    (description
+     "Vim-syntastic is a syntax checking plugin for Vim.  It runs files through
+external syntax checkers and displays any resulting errors to the user.  This
+can be done on demand, or automatically as files are saved.  If syntax errors
+are detected, the user is notified.")
+    (home-page "https://github.com/vim-syntastic/syntastic")
+    (license license:wtfpl2)))
+
+(define-public neovim-syntastic
+  (package
+    (inherit vim-syntastic)
+    (name "neovim-syntastic")
+    (arguments
+     `(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (vimfiles (string-append out "/share/nvim/site"))
+                    (doc (string-append vimfiles "/doc"))
+                    (plugin (string-append vimfiles "/plugin"))
+                    (autoload (string-append vimfiles "/autoload"))
+                    (syntax-checkers (string-append vimfiles "/syntax_checkers")))
+               (copy-recursively "doc" doc)
+               (copy-recursively "autoload" autoload)
+               (copy-recursively "plugin" plugin)
+               (copy-recursively "syntax_checkers" syntax-checkers)
+               #t))))))
+    (synopsis "Syntax checking plugin for Neovim")
+    (description
+     "Vim-syntastic is a syntax checking plugin for Neovim.  It runs files through
+external syntax checkers and displays any resulting errors to the user.  This
+can be done on demand, or automatically as files are saved.  If syntax errors
+are detected, the user is notified.")))
+
 (define-public neovim
   (package
     (name "neovim")
-    (version "0.1.7")
+    (version "0.2.0")
     (source
      (origin
        (method url-fetch)
@@ -524,7 +596,7 @@ and powerline symbols, etc.")
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
         (base32
-         "0zjbpc4rhv5bcr353xqnbrc36zjvn7qvh8xf6s7n1bdi3788by6q"))))
+         "1db27zm6cldm1aw0570vii1bxc16a34x8lissl1h9rizsbwn7qkj"))))
     (build-system cmake-build-system)
     (arguments
      `(#:modules ((srfi srfi-26)
index efb46f7..98d8bd1 100644 (file)
@@ -153,7 +153,7 @@ and probably others.")
 (define-public openvpn
   (package
     (name "openvpn")
-    (version "2.4.0")
+    (version "2.4.2")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -161,7 +161,7 @@ and probably others.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0zpqnbhjaifdalyxwmvk5kcyd7cpxbcigbn7967nbsyvl54vl8vg"))))
+                "1ydzy5i7yaifz0v1ivrckksvm0nkkx5sia3g5y5b1xkx9cw4yp6z"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-iproute2=yes")))
index 3ff6961..a10b136 100644 (file)
@@ -1,5 +1,9 @@
 ;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2014 John Darrington <jmd@gnu.org>
+;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2015, 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Kei Kebreau <kei@openmailbox.org>
+;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix packages)
   #:use-module (gnu packages)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages fltk)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gnupg)
+  #:use-module (gnu packages libevent)
+  #:use-module (gnu packages libidn)
+  #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages image)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages xorg)
+  #:use-module (gnu packages zip)
   #:use-module (guix download)
-  #:use-module (guix build-system gnu))
+  #:use-module (guix build-system gnu)
+  #:use-module (guix build-system python))
 
 (define-public dillo
   (package
 older or slower computers and embedded systems.")
     (home-page "http://www.dillo.org")
     (license license:gpl3+)))
+
+(define-public links
+  (package
+    (name "links")
+    (version "2.14")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://links.twibright.com/download/"
+                                  name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1f24y83wa1vzzjq5kp857gjqdpnmf8pb29yw7fam0m8wxxw0c3gp"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; The tarball uses a very old version of autconf. It doesn't
+             ;; understand extra flags like `--enable-fast-install', so
+             ;; we need to invoke it with just what it understands.
+             (let ((out (assoc-ref outputs "out")))
+               ;; 'configure' doesn't understand '--host'.
+               ,@(if (%current-target-system)
+                     `((setenv "CHOST" ,(%current-target-system)))
+                     '())
+               (setenv "CONFIG_SHELL" (which "bash"))
+               (zero?
+                (system* "./configure"
+                         (string-append "--prefix=" out)
+                         "--enable-graphics"))))))))
+    (native-inputs `(("pkg-config" ,pkg-config)))
+    (inputs `(("zlib" ,zlib)
+              ("openssl" ,openssl)
+              ("libjpeg" ,libjpeg)
+              ("libtiff" ,libtiff)
+              ("libevent" ,libevent)
+              ("libpng" ,libpng)
+              ("libxt" ,libxt)))
+    (synopsis "Text and graphics mode web browser")
+    (description "Links is a graphics and text mode web browser, with many
+features including, tables, builtin image display, bookmarks, SSL and more.")
+    (home-page "http://links.twibright.com")
+    ;; The distribution contains a copy of GPLv2
+    ;; However, the copyright notices simply say:
+    ;; "This file is a part of the Links program, released under GPL."
+    ;; Therefore, under the provisions of Section 9, we can choose
+    ;; any version ever published by the FSF.
+    ;; One file (https.c) contains an exception permitting
+    ;; linking of the program with openssl.
+    (license license:gpl1+)))
+
+(define-public lynx
+  (package
+    (name "lynx")
+    (version "2.8.9dev.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://invisible-mirror.net/archives/lynx/tarballs"
+                    "/lynx" version ".tar.bz2"))
+              (sha256
+               (base32
+                "1cqm1i7d209brkrpzaqqf2x951ra3l67dw8x9yg10vz7rpr9441a"))))
+    (build-system gnu-build-system)
+    (native-inputs `(("pkg-config" ,pkg-config)
+                     ("perl" ,perl)))
+    (inputs `(("ncurses" ,ncurses)
+              ("libidn" ,libidn)
+              ("gnutls" ,gnutls)
+              ("libgcrypt" ,libgcrypt)
+              ("unzip" ,unzip)
+              ("zlib" ,zlib)
+              ("gzip" ,gzip)
+              ("bzip2" ,bzip2)))
+    (arguments
+     `(#: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
+                 (lambda* (#:key (make-flags '()) #:allow-other-keys)
+                   (zero? (apply system* "make" "install-full" make-flags)))
+                 %standard-phases)))
+    (synopsis "Text Web Browser")
+    (description
+     "Lynx is a fully-featured World Wide Web (WWW) client for users running
+cursor-addressable, character-cell display devices.  It will display Hypertext
+Markup Language (HTML) documents containing links to files on the local
+system, as well as files on remote systems running http, gopher, ftp, wais,
+nntp, finger, or cso/ph/qi servers.  Lynx can be used to access information on
+the WWW, or to build information systems intended primarily for local
+access.")
+    (home-page "http://lynx.isc.org/")
+    (license license:gpl2)))
+
+(define-public qutebrowser
+  (package
+    (name "qutebrowser")
+    (version "0.10.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/The-Compiler/"
+                           "qutebrowser/releases/download/v" version "/"
+                           "qutebrowser-" version ".tar.gz"))
+       (sha256
+        (base32
+         "05qryn56w2pbqhir4pl99idx7apx2xqw9f8wmbrhj59b1xgr3x2p"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("asciidoc" ,asciidoc)))
+    (inputs
+     `(("python-colorama" ,python-colorama)
+       ("python-cssutils" ,python-cssutils)
+       ("python-jinja2" ,python-jinja2)
+       ("python-markupsafe" ,python-markupsafe)
+       ("python-pygments" ,python-pygments)
+       ("python-pypeg2" ,python-pypeg2)
+       ("python-pyyaml" ,python-pyyaml)
+       ("python-pyqt" ,python-pyqt)
+       ("qtwebkit" ,qtwebkit)))
+    (arguments
+     `(#:tests? #f                      ;no tests
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'install-more
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (app (string-append out "/share/applications"))
+                    (hicolor (string-append out "/share/icons/hicolor")))
+               (system* "a2x" "-f" "manpage" "doc/qutebrowser.1.asciidoc")
+               (install-file "doc/qutebrowser.1"
+                             (string-append out "/share/man/man1"))
+
+               (for-each
+                (lambda (i)
+                  (let ((src  (format #f "icons/qutebrowser-~dx~d.png" i i))
+                        (dest (format #f "~a/~dx~d/apps/qutebrowser.png"
+                                      hicolor i i)))
+                    (mkdir-p (dirname dest))
+                    (copy-file src dest)))
+                '(16 24 32 48 64 128 256 512))
+               (install-file "icons/qutebrowser.svg"
+                             (string-append hicolor "/scalable/apps"))
+               
+               (substitute* "qutebrowser.desktop"
+                 (("Exec=qutebrowser")
+                  (string-append "Exec=" out "/bin/qutebrowser")))
+               (install-file "qutebrowser.desktop" app)
+               #t))))))
+    (home-page "https://qutebrowser.org/")
+    (synopsis "Minimal, keyboard-focused, vim-like web browser")
+    (description "qutebrowser is a keyboard-focused browser with a minimal
+GUI.  It is based on PyQt5 and QtWebKit.")
+    (license license:gpl3+)))
index 487366b..efaa1b5 100644 (file)
@@ -80,7 +80,6 @@
   #:use-module (gnu packages python)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages qt)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages curl)
@@ -301,7 +300,7 @@ servers that may need it).")
     (description "Starman is a PSGI perl web server that has unique features
 such as high performance, preforking, signal support, superdaemon awareness,
 and UNIX socket support.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public jansson
   (package
@@ -830,7 +829,10 @@ from streaming URLs.  It is a command-line wrapper for the libquvi library.")
        ;;("gss" ,gss)
        ("zlib" ,zlib)))
     (arguments
-     `(#:phases
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
+       #:phases
        ;; TODO: Add scons-build-system and use it here.
        (modify-phases %standard-phases
          (delete 'configure)
@@ -979,7 +981,7 @@ language known as SASS.")
     (synopsis "Compile a log format string to perl-code")
     (description "This module provides methods to compile a log format string
 to perl-code, for faster generation of access_log lines.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-authen-sasl
   (package
@@ -1000,7 +1002,7 @@ to perl-code, for faster generation of access_log lines.")
     (home-page "http://search.cpan.org/dist/Authen-SASL")
     (synopsis "SASL authentication framework")
     (description "Authen::SASL provides an SASL authentication framework.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-action-renderview
   (package
@@ -1026,7 +1028,7 @@ to perl-code, for faster generation of access_log lines.")
     (synopsis "Sensible default Catalyst action")
     (description "This Catalyst action implements a sensible default end
 action, which will forward to the first available view.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-action-rest
   (package
@@ -1061,7 +1063,7 @@ REST requests.  It takes a normal Catalyst action, and changes the dispatch to
 append an underscore and method name.  First it will try dispatching to an
 action with the generated name, and failing that it will try to dispatch to a
 regular method.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-authentication-store-dbix-class
   (package
@@ -1096,7 +1098,7 @@ regular method.")
     (description "The Catalyst::Authentication::Store::DBIx::Class class
 provides access to authentication information stored in a database via
 DBIx::Class.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-component-instancepercontext
   (package
@@ -1120,7 +1122,7 @@ DBIx::Class.")
     (synopsis "Create only one instance of Moose component per context")
     (description "Catalyst::Component::InstancePerContext returns a new
 instance of a component on each request.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-devel
   (package
@@ -1162,7 +1164,7 @@ to run them.  Catalyst-Devel includes the Catalyst::Helper system, which
 autogenerates scripts and tests; Module::Install::Catalyst, a Module::Install
 extension for Catalyst; and requirements for a variety of development-related
 modules.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-dispatchtype-regex
   (package
@@ -1192,7 +1194,7 @@ core.  It is recommend that you use Chained methods or other techniques
 instead.  As part of the refactoring, the dispatch priority of Regex vs Regexp
 vs LocalRegex vs LocalRegexp may have changed.  Priority is now influenced by
 when the dispatch type is first seen in your application.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-model-dbic-schema
   (package
@@ -1237,7 +1239,7 @@ when the dispatch type is first seen in your application.")
   (synopsis "DBIx::Class::Schema Model Class")
   (description "This is a Catalyst Model for DBIx::Class::Schema-based
 Models.")
-  (license (package-license perl))))
+  (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-accesslog
   (package
@@ -1262,7 +1264,7 @@ Models.")
     (description "This Catalyst plugin enables you to create \"access logs\"
 from within a Catalyst application instead of requiring a webserver to do it
 for you.  It will work even with Catalyst debug logging turned off.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-authentication
   (package
@@ -1296,7 +1298,7 @@ for you.  It will work even with Catalyst debug logging turned off.")
 Catalyst apps.  It is the basis for both authentication (checking the user is
 who they claim to be), and authorization (allowing the user to do what the
 system authorises them to do).")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-authorization-roles
   (package
@@ -1325,7 +1327,7 @@ system authorises them to do).")
     (synopsis "Role-based authorization for Catalyst")
     (description "Catalyst::Plugin::Authorization::Roles provides role-based
 authorization for Catalyst based on Catalyst::Plugin::Authentication.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-captcha
   (package
@@ -1349,7 +1351,7 @@ authorization for Catalyst based on Catalyst::Plugin::Authentication.")
     (synopsis "Captchas for Catalyst")
     (description "This plugin creates and validates Captcha images for
 Catalyst.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-configloader
   (package
@@ -1377,7 +1379,7 @@ Catalyst.")
     (description "This module will attempt to load find and load configuration
 files of various types.  Currently it supports YAML, JSON, XML, INI and Perl
 formats.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-session
   (package
@@ -1408,7 +1410,7 @@ formats.")
     (synopsis "Catalyst generic session plugin")
     (description "This plugin links the two pieces required for session
 management in web applications together: the state, and the store.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-session-state-cookie
   (package
@@ -1437,7 +1439,7 @@ management in web applications together: the state, and the store.")
 ID needs to be stored on the client, and the session data needs to be stored
 on the server.  This plugin stores the session ID on the client using the
 cookie mechanism.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-session-store-fastmmap
   (package
@@ -1467,7 +1469,7 @@ cookie mechanism.")
     (description "Catalyst::Plugin::Session::Store::FastMmap is a fast session
 storage plugin for Catalyst that uses an mmap'ed file to act as a shared
 memory interprocess cache.  It is based on Cache::FastMmap.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-stacktrace
   (package
@@ -1492,7 +1494,7 @@ memory interprocess cache.  It is based on Cache::FastMmap.")
 including a stack trace of your application up to the point where the error
 occurred.  Each stack frame is displayed along with the package name, line
 number, file name, and code context surrounding the line number.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-static-simple
   (package
@@ -1522,7 +1524,7 @@ looking at the file extension in the URL (such as .css or .png or .js).  The
 plugin uses the lightweight MIME::Types module to map file extensions to
 IANA-registered MIME types, and will serve your static files with the correct
 MIME type directly to the browser, without being processed through Catalyst.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-runtime
   (package
@@ -1587,7 +1589,7 @@ MIME type directly to the browser, without being processed through Catalyst.")
 It is designed to make it easy to manage the various tasks you need to do to
 run an application on the web, either by doing them itself, or by letting you
 \"plug in\" existing Perl modules that do what you need.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-traitfor-request-proxybase
   (package
@@ -1618,7 +1620,7 @@ run an application on the web, either by doing them itself, or by letting you
 flexibility in your application's deployment configurations when deployed
 behind a proxy.  Using this module, the request base ($c->req->base) is
 replaced with the contents of the X-Request-Base header.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-view-download
   (package
@@ -1644,7 +1646,7 @@ replaced with the contents of the X-Request-Base header.")
     (description "The purpose of this module is to provide a method for
 downloading data into many supportable formats.  For example, downloading a
 table based report in a variety of formats (CSV, HTML, etc.).")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-view-json
   (package
@@ -1669,7 +1671,7 @@ table based report in a variety of formats (CSV, HTML, etc.).")
     (synopsis "Catalyst JSON view")
     (description "Catalyst::View::JSON is a Catalyst View handler that returns
 stash data in JSON format.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-view-tt
   (package
@@ -1696,7 +1698,7 @@ stash data in JSON format.")
   (synopsis "Template View Class")
   (description "This module is a Catalyst view class for the Template
 Toolkit.")
-  (license (package-license perl))))
+  (license l:perl-license)))
 
 (define-public perl-catalystx-component-traits
   (package
@@ -1729,7 +1731,7 @@ Catalyst component base class that reads the optional \"traits\" parameter
 from app and component config and instantiates the component subclass with
 those traits using \"new_with_traits\" in MooseX::Traits from
 MooseX::Traits::Pluggable.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalystx-roleapplicator
   (package
@@ -1752,7 +1754,7 @@ MooseX::Traits::Pluggable.")
     (synopsis "Apply roles to Catalyst classes")
     (description "CatalystX::RoleApplicator applies roles to Catalyst
 application classes.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalystx-script-server-starman
   (package
@@ -1779,7 +1781,7 @@ application classes.")
     (synopsis "Catalyst development server with Starman")
     (description "This module provides a Catalyst extension to replace the
 development server with Starman.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-cgi
   (package
@@ -1807,7 +1809,7 @@ processing and preparing HTTP requests and responses.  Major features include
 processing form submissions, file uploads, reading and writing cookies, query
 string generation and manipulation, and processing and preparing HTTP
 headers.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-cgi-simple
   (package
@@ -1830,7 +1832,7 @@ headers.")
     (description "CGI::Simple provides a relatively lightweight drop in
 replacement for CGI.pm.  It shares an identical OO interface to CGI.pm for
 parameter parsing, file upload, cookie handling and header generation.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-cgi-struct
   (package
@@ -1875,7 +1877,7 @@ inputs, in a manner reminiscent of how PHP does.")
     (synopsis "Date conversion routines")
     (description "This module provides functions that deal with the date
 formats used by the HTTP protocol.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-digest-md5-file
   (package
@@ -1896,7 +1898,7 @@ formats used by the HTTP protocol.")
     (synopsis "MD5 sums for files and urls")
     (description "Digest::MD5::File is a Perl extension for getting MD5 sums
 for files and urls.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-encode-locale
   (package
@@ -1911,7 +1913,7 @@ for files and urls.")
               (base32
                "1h8fvcdg3n20c2yp7107yhdkkx78534s9hnvn7ps8hpmf4ks0vqp"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl locale encoding determination")
     (description
      "The POSIX locale system is used to specify both the language
@@ -1949,7 +1951,7 @@ with Encode::decode(locale => $string).")
     (description "@code{Feed::Find} implements feed auto-discovery for finding
 syndication feeds, given a URI.  It will discover the following feed formats:
 RSS 0.91, RSS 1.0, RSS 2.0, Atom.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-file-listing
   (package
@@ -1966,7 +1968,7 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-http-date" ,perl-http-date)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl directory listing parser")
     (description
      "The File::Listing module exports a single function called parse_dir(),
@@ -2028,7 +2030,7 @@ Yahoo! Finance, Fidelity Investments, and the Australian Stock Exchange.")
     (synopsis "Perl extension providing access to the GSSAPIv2 library")
     (description "This is a Perl extension for using GSSAPI C bindings as
 described in RFC 2744.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-element-extended
   (package
@@ -2050,7 +2052,7 @@ described in RFC 2744.")
     (description
      "HTML::Element::Extended is a Perl extension for manipulating a table
 composed of HTML::Element style components.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-form
   (package
@@ -2075,7 +2077,7 @@ composed of HTML::Element style components.")
     (synopsis "Perl class representing an HTML form element")
     (description "Objects of the HTML::Form class represents a single HTML
 <form> ... </form> instance.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-lint
   (package
@@ -2121,7 +2123,7 @@ syntactic legitmacy.")
     (description
      "HTML::TableExtract is a Perl module for extracting the content contained
 in tables within an HTML document, either as text or encoded element trees.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-tree
   (package
@@ -2147,7 +2149,7 @@ in tables within an HTML document, either as text or encoded element trees.")
     (synopsis "Work with HTML in a DOM-like tree structure")
     (description "This distribution contains a suite of modules for
 representing, creating, and extracting information from HTML syntax trees.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-parser
   (package
@@ -2165,7 +2167,7 @@ representing, creating, and extracting information from HTML syntax trees.")
     (inputs
      `(("perl-html-tagset" ,perl-html-tagset)
        ("perl-http-message" ,perl-http-message)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl HTML parser class")
     (description
      "Objects of the HTML::Parser class will recognize markup and separate
@@ -2187,7 +2189,7 @@ are invoked.")
               (base32
                "1qh8249wgr4v9vgghq77zh1d2zs176bir223a8gh3k9nksn7vcdd"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl data tables useful in parsing HTML")
     (description
      "The HTML::Tagset module contains several data tables useful in various
@@ -2218,7 +2220,7 @@ It extends standard HTML with a few new HTML-esque tags: @code{<TMPL_VAR>},
 these new tags is called a template.  Using this module you fill in the values
 for the variables, loops and branches declared in the template.  This allows
 you to separate design from the data.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-body
   (package
@@ -2243,7 +2245,7 @@ you to separate design from the data.")
     (description "HTTP::Body parses chunks of HTTP POST data and supports
 application/octet-stream, application/json, application/x-www-form-urlencoded,
 and multipart/form-data.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-cookiejar
   (package
@@ -2287,7 +2289,7 @@ jar in conformance with RFC 6265 <http://tools.ietf.org/html/rfc6265>.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-http-message" ,perl-http-message)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl HTTP cookie jars")
     (description
      "The HTTP::Cookies class is for objects that represent a cookie jar,
@@ -2311,7 +2313,7 @@ object knows about.")
     (propagated-inputs
      `(("perl-http-message" ,perl-http-message)
        ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl simple http server class")
     (description
      "Instances of the HTTP::Daemon class are HTTP/1.1 servers that listen
@@ -2332,7 +2334,7 @@ IO::Socket::INET, so you can perform socket operations directly on it too.")
               (base32
                "0cz357kafhhzw7w59iyi0wvhw7rlh5g1lh38230ckw7rl0fr9fg8"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl date conversion routines")
     (description
      "The HTTP::Date module provides functions that deal with date formats
@@ -2358,7 +2360,7 @@ used by the HTTP protocol (and then some more).")
        ("perl-io-html" ,perl-io-html)
        ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
        ("perl-uri" ,perl-uri)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl HTTP style message")
     (description
      "An HTTP::Message object contains some headers and a content body.")
@@ -2379,7 +2381,7 @@ used by the HTTP protocol (and then some more).")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-http-message" ,perl-http-message)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl http content negotiation")
     (description
      "The HTTP::Negotiate module provides a complete implementation of the
@@ -2412,7 +2414,7 @@ fields in the request.")
 received and returns a 'hint' as to what is required, or returns the
 HTTP::Request when a complete request has been read.  HTTP/1.1 chunking is
 supported.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-parser-xs
   (package
@@ -2431,7 +2433,7 @@ supported.")
     (synopsis "Fast HTTP request parser")
     (description "HTTP::Parser::XS is a fast, primitive HTTP request/response
 parser.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-request-ascgi
   (package
@@ -2453,7 +2455,7 @@ parser.")
     (synopsis "Set up a CGI environment from an HTTP::Request")
     (description "This module provides a convenient way to set up a CGI
 environment from an HTTP::Request.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-server-simple
   (package
@@ -2479,7 +2481,7 @@ environment from an HTTP::Request.")
     (description "HTTP::Server::Simple is a simple standalone HTTP daemon with
 no non-core module dependencies.  It can be used for building a standalone
 http-based UI to your existing tools.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-tiny
   (package
@@ -2505,7 +2507,7 @@ http-based UI to your existing tools.")
     (description "This is a very simple HTTP/1.1 client, designed for doing
 simple requests without the overhead of a large framework like LWP::UserAgent.
 It supports proxies and redirection.  It also correctly resumes after EINTR.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-io-html
   (package
@@ -2520,7 +2522,7 @@ It supports proxies and redirection.  It also correctly resumes after EINTR.")
               (base32
                "06nj3a0xgp5jxwxx6ayglfk2v7npf5a7gwkqsjlkapjkybarzqh4"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl module to open an HTML file with automatic charset detection")
     (description
      "IO::HTML provides an easy way to open a file containing HTML while
@@ -2546,7 +2548,7 @@ algorithm specified in section 8.2.2.1 of the draft standard.")
     (synopsis "Family-neutral IP socket supporting both IPv4 and IPv6")
     (description "This module provides a protocol-independent way to use IPv4
 and IPv6 sockets, intended as a replacement for IO::Socket::INET.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-io-socket-ssl
   (package
@@ -2573,7 +2575,7 @@ necessary functionality into the familiar IO::Socket interface and providing
 secure defaults whenever possible.  This way existing applications can be made
 SSL-aware without much effort, at least if you do blocking I/O and don't use
 select or poll.")
-    (license (package-license perl))
+    (license l:perl-license)
     (home-page "https://github.com/noxxi/p5-io-socket-ssl")))
 
 (define-public perl-libwww
@@ -2601,7 +2603,7 @@ select or poll.")
        ("perl-net-http" ,perl-net-http)
        ("perl-uri" ,perl-uri)
        ("perl-www-robotrules" ,perl-www-robotrules)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl modules for the WWW")
     (description
      "The libwww-perl collection is a set of Perl modules which provides a
@@ -2625,7 +2627,7 @@ help you implement simple HTTP servers.")
               (base32
                "0xmnblp962qy02akah30sji8bxrqcyqlff2w95l199ghql60ny8q"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl module to guess the media type for a file or a URL")
     (description
      "The LWP::MediaTypes module provides functions for handling media (also
@@ -2657,7 +2659,7 @@ exists it is used instead.")
     (synopsis "HTTPS support for LWP::UserAgent")
     (description "The LWP::Protocol::https module provides support for using
 https schemed URLs with LWP.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-lwp-useragent-determined
   (package
@@ -2680,7 +2682,7 @@ https schemed URLs with LWP.")
 except that when you use it to get a web page but run into a
 possibly-temporary error (like a DNS lookup timeout), it'll wait a few seconds
 and retry a few times.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-net-amazon-s3
   (package
@@ -2723,7 +2725,7 @@ and retry a few times.")
     (home-page "http://search.cpan.org/dist/Net-Amazon-S3")
     (synopsis "Perl interface to Amazon S3")
     (description "This module provides a Perlish interface to Amazon S3.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-net-http
   (package
@@ -2741,7 +2743,7 @@ and retry a few times.")
     (propagated-inputs
      `(("perl-io-socket-ssl" ,perl-io-socket-ssl)
        ("perl-uri" ,perl-uri)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl low-level HTTP connection (client)")
     (description
      "The Net::HTTP class is a low-level HTTP client.  An instance of the
@@ -2775,7 +2777,7 @@ children (Net::Server::PreForkSimple), or as a managed preforking server which
 maintains the number of children based on server load (Net::Server::PreFork).
 In all but the inetd type, the server provides the ability to connect to one
 or to multiple server ports.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-net-smtp-ssl
   (package
@@ -2795,7 +2797,7 @@ or to multiple server ports.")
     (home-page "http://search.cpan.org/dist/Net-SMTP-SSL")
     (synopsis "SSL support for Net::SMTP")
     (description "SSL support for Net::SMTP.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack
   (package
@@ -2833,7 +2835,7 @@ or to multiple server ports.")
 contains middleware components, a reference server, and utilities for Web
 application frameworks.  Plack is like Ruby's Rack or Python's Paste for
 WSGI.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-fixmissingbodyinredirect
   (package
@@ -2858,7 +2860,7 @@ WSGI.")
     (synopsis "Plack::Middleware which sets body for redirect response")
     (description "This module sets the body in redirect response, if it's not
 already set.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-methodoverride
   (package
@@ -2884,7 +2886,7 @@ already set.")
 something else: by adding either a header named X-HTTP-Method-Override to the
 request, or a query parameter named x-tunneled-method to the URI, the client
 can say what method it actually meant.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-removeredundantbody
   (package
@@ -2907,7 +2909,7 @@ can say what method it actually meant.")
     (synopsis "Plack::Middleware which removes body for HTTP response")
     (description "This module removes the body in an HTTP response if it's not
 required.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-reverseproxy
   (package
@@ -2930,7 +2932,7 @@ required.")
     (description "Plack::Middleware::ReverseProxy resets some HTTP headers,
 which are changed by reverse-proxy.  You can specify the reverse proxy address
 and stop fake requests using 'enable_if' directive in your app.psgi.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-test-externalserver
   (package
@@ -2952,7 +2954,7 @@ and stop fake requests using 'enable_if' directive in your app.psgi.")
     (description "This module allows your to run your Plack::Test tests
 against an external server instead of just against a local application through
 either mocked HTTP or a locally spawned server.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-test-tcp
   (package
@@ -2973,7 +2975,7 @@ either mocked HTTP or a locally spawned server.")
     (home-page "http://search.cpan.org/dist/Test-TCP")
     (synopsis "Testing TCP programs")
     (description "Test::TCP is test utilities for TCP/IP programs.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-test-www-mechanize
   (package
@@ -3038,7 +3040,7 @@ WWW::Mechanize that incorporates features for web application testing.")
     (description "The Test::WWW::Mechanize::Catalyst module meshes the
 Test::WWW:Mechanize module and the Catalyst web application framework to allow
 testing of Catalyst applications without needing to start up a web server.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-test-www-mechanize-psgi
   (package
@@ -3065,7 +3067,7 @@ from web application framework code.  Test::WWW::Mechanize is a subclass of
 WWW::Mechanize that incorporates features for web application testing.  The
 Test::WWW::Mechanize::PSGI module meshes the two to allow easy testing of PSGI
 applications.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri
   (package
@@ -3079,7 +3081,7 @@ applications.")
               (base32
                "05a1ck1bhvqkkk690xhsxf7276dnagk96qkh2jy4prrrgw6wm3lw"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl Uniform Resource Identifiers (absolute and relative)")
     (description
      "The URI module implements the URI class.  Objects of this class
@@ -3110,7 +3112,7 @@ and updated by RFC 2732.")
     (description "@code{URI::Fetch} is a smart client for fetching HTTP pages,
 notably syndication feeds (RSS, Atom, and others), in an intelligent, bandwidth-
 and time-saving way.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri-find
   (package
@@ -3135,7 +3137,7 @@ and time-saving way.")
 considers a URI) in plain text.  It only finds URIs which include a
 scheme (http:// or the like), for something a bit less strict, consider
 URI::Find::Schemeless.  For a command-line interface, urifind is provided.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri-ws
   (package
@@ -3156,7 +3158,7 @@ URI::Find::Schemeless.  For a command-line interface, urifind is provided.")
     (synopsis "WebSocket support for URI package")
     (description "With this module, the URI package provides the same set of
 methods for WebSocket URIs as it does for HTTP URIs.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri-template
   (package
@@ -3180,7 +3182,7 @@ methods for WebSocket URIs as it does for HTTP URIs.")
     (synopsis "Object for handling URI templates")
     (description "This perl module provides a wrapper around URI templates as described in
 RFC 6570.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-www-curl
   (package
@@ -3203,7 +3205,7 @@ RFC 6570.")
     (description
      "This is a Perl extension interface for the libcurl file downloading
 library.")
-    (license (package-license perl))
+    (license l:perl-license)
     (home-page "http://search.cpan.org/~szbalint/WWW-Curl-4.17/lib/WWW/Curl.pm")))
 
 (define-public perl-www-mechanize
@@ -3233,7 +3235,7 @@ library.")
     (synopsis "Web browsing in a Perl object")
     (description "WWW::Mechanize is a Perl module for stateful programmatic
 web browsing, used for automating interaction with websites.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-www-opensearch
   (package
@@ -3261,7 +3263,7 @@ web browsing, used for automating interaction with websites.")
     (description
      "@code{WWW::OpenSearch} is a module to search @url{A9's OpenSearch,
 http://opensearch.a9.com} compatible search engines.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-www-robotrules
   (package
@@ -3278,7 +3280,7 @@ http://opensearch.a9.com} compatible search engines.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-uri" ,perl-uri)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl database of robots.txt-derived permissions")
     (description
      "The WWW::RobotRules module parses /robots.txt files as specified in
@@ -4493,63 +4495,60 @@ Features include the ability to stop SQL injections, XSS and CSRF attacks and
 exploit attempts.")
     (license l:gpl2)))
 
-(define-public qutebrowser
+(define-public python-httpbin
   (package
-    (name "qutebrowser")
-    (version "0.10.1")
+    (name "python-httpbin")
+    (version "0.5.0")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://github.com/The-Compiler/"
-                           "qutebrowser/releases/download/v" version "/"
-                           "qutebrowser-" version ".tar.gz"))
+       (uri (pypi-uri "httpbin" version))
        (sha256
         (base32
-         "05qryn56w2pbqhir4pl99idx7apx2xqw9f8wmbrhj59b1xgr3x2p"))))
+         "1dc92lnk846hpilslrqnr63x55cxll4qx88gif8fm521gv9cbyvr"))))
     (build-system python-build-system)
-    (native-inputs
-     `(("asciidoc" ,asciidoc)))
-    (inputs
-     `(("python-colorama" ,python-colorama)
-       ("python-cssutils" ,python-cssutils)
-       ("python-jinja2" ,python-jinja2)
+    (propagated-inputs
+     `(("python-decorator" ,python-decorator)
+       ("python-flask" ,python-flask)
+       ("python-itsdangerous" ,python-itsdangerous)
        ("python-markupsafe" ,python-markupsafe)
-       ("python-pygments" ,python-pygments)
-       ("python-pypeg2" ,python-pypeg2)
-       ("python-pyyaml" ,python-pyyaml)
-       ("python-pyqt" ,python-pyqt)
-       ("qtwebkit" ,qtwebkit)))
-    (arguments
-     `(#:tests? #f                      ;no tests
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'install-more
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (app (string-append out "/share/applications"))
-                    (hicolor (string-append out "/share/icons/hicolor")))
-               (system* "a2x" "-f" "manpage" "doc/qutebrowser.1.asciidoc")
-               (install-file "doc/qutebrowser.1"
-                             (string-append out "/share/man/man1"))
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/Runscope/httpbin")
+    (synopsis "HTTP request and response service")
+    (description "Testing an HTTP Library can become difficult sometimes.
+@code{RequestBin} is fantastic for testing POST requests, but doesn't let you control the
+response.  This exists to cover all kinds of HTTP scenarios.  All endpoint responses are
+JSON-encoded.")
+    (license l:isc)))
 
-               (for-each
-                (lambda (i)
-                  (let ((src  (format #f "icons/qutebrowser-~dx~d.png" i i))
-                        (dest (format #f "~a/~dx~d/apps/qutebrowser.png"
-                                      hicolor i i)))
-                    (mkdir-p (dirname dest))
-                    (copy-file src dest)))
-                '(16 24 32 48 64 128 256 512))
-               (install-file "icons/qutebrowser.svg"
-                             (string-append hicolor "/scalable/apps"))
-
-               (substitute* "qutebrowser.desktop"
-                 (("Exec=qutebrowser")
-                  (string-append "Exec=" out "/bin/qutebrowser")))
-               (install-file "qutebrowser.desktop" app)
-               #t))))))
-    (home-page "https://qutebrowser.org/")
-    (synopsis "Minimal, keyboard-focused, vim-like web browser")
-    (description "qutebrowser is a keyboard-focused browser with a minimal
-GUI.  It is based on PyQt5 and QtWebKit.")
-    (license l:gpl3+)))
+(define-public python2-httpbin
+  (package-with-python2 python-httpbin))
+
+(define-public python-pytest-httpbin
+  (package
+    (name "python-pytest-httpbin")
+    (version "0.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "pytest-httpbin" version))
+       (sha256
+        (base32
+         "1y0v2v7xpzpyd4djwp7ad8ifnlxp8r1y6dfbxg5ckzvllkgridn5"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six)
+       ("python-httpbin" ,python-httpbin)
+       ("python-pytest" ,python-pytest)))
+    (home-page
+     "https://github.com/kevin1024/pytest-httpbin")
+    (synopsis
+     "Test your HTTP library against a local copy of httpbin")
+    (description
+     "@code{Pytest-httpbin} creates a @code{pytest} fixture that is dependency-injected
+into your tests.  It automatically starts up a HTTP server in a separate thread running
+@code{httpbin} and provides your test with the URL in the fixture.")
+    (license l:expat)))
+
+(define-public python2-pytest-httpbin
+  (package-with-python2 python-pytest-httpbin))
index de431d0..e343f40 100644 (file)
 (define-public webkitgtk
   (package
     (name "webkitgtk")
-    (version "2.16.1")
+    (version "2.16.2")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.webkitgtk.org/releases/"
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0i99kmv4dvb9m2sd36kig4j6d59pxmq47ih3nxayd31j68r3i4pb"))))
+                "0lpj14cfr8p0ys6z1ych0zcwxbc86asvgs7v3qa72azb0ai8kxjy"))))
     (build-system cmake-build-system)
     (arguments
      '(#:tests? #f ; no tests
index d758f26..3cf74c4 100644 (file)
@@ -243,7 +243,7 @@ developers.")
 based IPC interface it provides (if enabled in the configuration file).
 You can then subscribe to events or send messages and receive their replies.")
     ;; Can be used with either license.
-    (license (list license:gpl3+ (package-license perl)))))
+    (license (list license:gpl3+ license:perl-license))))
 
 (define-public python-i3-py
   (package
index 077195c..5610a0f 100644 (file)
@@ -4,6 +4,8 @@
 ;;; Copyright © 2016 Theodoros Foradis <theodoros.for@openmailbox.org>
 ;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
 ;;; Copyright © 2017 Rene Saavedra <rennes@openmailbox.org>
+;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2017 Thomas Danckaert <post@thomasdanckaert.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -27,6 +29,7 @@
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system python)
   #:use-module (guix build utils)
+  #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
@@ -34,6 +37,8 @@
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages photo)
+  #:use-module (gnu packages video)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
   #:use-module (gnu packages sdl)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (arguments
-     '(#:configure-flags
+     `(#:configure-flags
        '("--with-regex" "--with-libmspack"
          "--with-sdl"
          "--enable-webview"
          "--enable-webkit"
-         "--enable-webviewwebkit")
+         "--enable-webviewwebkit"
+         ,@(if (string=? "aarch64-linux"
+                         (%current-system))
+             '("--build=aarch64-unknown-linux-gnu")
+             '()))
        #:make-flags
        (list (string-append "LDFLAGS=-Wl,-rpath="
                             (assoc-ref %outputs "out") "/lib"))
@@ -97,6 +106,27 @@ and many other languages.")
                         (package-inputs wxwidgets))))
            (name "wxwidgets-gtk2")))
 
+;; Development version of wxWidgets, required to build against gstreamer-1.x.
+;; This can be removed when wxWidgets is updated to the next stable version.
+(define-public wxwidgets-3.1
+  (package (inherit wxwidgets)
+           (version "3.1.0")
+           (source
+            (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/wxWidgets/wxWidgets/archive/v"
+                                  version ".tar.gz"))
+              (file-name (string-append "wxwidgets-" version ".tar.gz"))
+              (sha256
+               (base32 "1yan5ysjwh6a7xw82sfjd1xn0nsy1dn2s0cx9ac7cw19191blc3y"))))
+           (inputs `(("gstreamer" ,gstreamer)
+                     ("gst-plugins-base" ,gst-plugins-base)
+                     ,@(package-inputs wxwidgets)))
+           (arguments
+            (substitute-keyword-arguments (package-arguments wxwidgets)
+              ((#:configure-flags flags)
+               `(cons "--enable-mediactrl" ,flags))))))
+
 (define-public python2-wxpython
   (package
     (name "python2-wxpython")
@@ -167,3 +197,33 @@ and many other languages.")
     (description "@code{wxpython} provides Python 2 bindings for wxWidgets.")
     (home-page "http://wxpython.org/")
     (license (package-license wxwidgets))))
+
+(define-public wxsvg
+  (package
+    (name "wxsvg")
+    (version "1.5.11")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://sourceforge/wxsvg/wxsvg/"
+                            version "/wxsvg-" version ".tar.bz2"))
+       (sha256
+        (base32
+         "0m3ff8mjiq4hvy8rmxyc9fkpf24xwxhvr3a6jmvr2q5zc41xhz7x"))))
+    (build-system glib-or-gtk-build-system)
+    (inputs
+     `(("wxwidgets" ,wxwidgets-3.1)
+       ("cairo" ,cairo)
+       ("pango" ,pango)
+       ("libexif" ,libexif)
+       ("ffmpeg" ,ffmpeg)))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (synopsis "C++ library to create, manipulate and render SVG files")
+    (description "wxSVG is a C++ library to create, manipulate and render
+@dfn{Scalable Vector Graphics} (SVG) files with the wxWidgets toolkit.")
+    (home-page "http://wxsvg.sourceforge.net")
+
+    ;; wxSVG is licenced under the "wxWindows library licence", which is
+    ;; the LGPL2.0+, with a few extra permissions.
+    (license (list l:lgpl2.0+ (l:fsf-free "file://COPYING")))))
index 0ceae02..79210d4 100644 (file)
@@ -14,7 +14,7 @@
 ;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
 ;;; Copyright © 2016 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
-;;; Copyright © 2017 humanitiesNerd <catonano@gmail.com>
+;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -189,7 +189,7 @@ There are two base classes. @code{Graph::Reader} is the base class for classes
 which read a graph file and create an instance of the Graph class.
 @code{Graph::Writer} is the base class for classes which take an instance of
 the @code{Graph} class and write it out in a specific file format.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-atom
   (package
@@ -221,7 +221,7 @@ the @code{Graph} class and write it out in a specific file format.")
     (description
      "Atom is a syndication, API, and archiving format for weblogs and other data.
 @code{XML::Atom} implements the feed format as well as a client for the API.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-descent
   (package
@@ -249,7 +249,7 @@ the @code{Graph} class and write it out in a specific file format.")
 
 XML grammar is recursive - so it's nice to be able to write recursive
 parsers for it.  @code{XML::Descent} allows such parsers to be created.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-parser
   (package
@@ -269,7 +269,7 @@ parsers for it.  @code{XML::Descent} allows such parsers to be created.")
                    (list (string-append "EXPATLIBPATH=" expat "/lib")
                          (string-append "EXPATINCPATH=" expat "/include")))))
     (inputs `(("expat" ,expat)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl bindings to the Expat XML parsing library")
     (description
      "This module provides ways to parse XML documents.  It is built on top of
@@ -303,7 +303,7 @@ to @code{XML::Parser} in much the same way that Gisle Aas'
 @code{HTML::TokeParser} provides a procedural interface to @code{HTML::Parser}.
 @code{XML::TokeParser} splits its XML input up into \"tokens\", each
 corresponding to an @code{XML::Parser} event.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-libxml
   (package
@@ -320,7 +320,7 @@ corresponding to an @code{XML::Parser} event.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-xml-parser" ,perl-xml-parser)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl SAX parser using XML::Parser")
     (description
      "XML::Parser::PerlSAX is a PerlSAX parser using the XML::Parser
@@ -351,7 +351,7 @@ module.")
 library which provides interfaces for parsing and manipulating XML files.  This
 module allows Perl programmers to make use of the highly capable validating
 XML parser and the high performance DOM implementation.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-libxml-simple
   (package
@@ -373,7 +373,7 @@ XML parser and the high performance DOM implementation.")
     (description
      "This package provides the same API as @code{XML::Simple} but is based on
 @code{XML::LibXML}.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-libxslt
   (package
@@ -396,7 +396,7 @@ XML parser and the high performance DOM implementation.")
     (synopsis "Perl bindings to GNOME libxslt library")
     (description "This Perl module is an interface to the GNOME project's
 libxslt library.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-namespacesupport
   (package
@@ -417,7 +417,7 @@ libxslt library.")
 names (unames) from within any application that may need them.  It also helps
 maintain a prefix to namespace URI map, and provides a number of basic
 checks.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-rss
   (package
@@ -452,7 +452,7 @@ checks.")
 RDF Site Summary (RSS) files.  This distribution also contains many examples
 that allow you to generate HTML from an RSS, convert between 0.9, 0.91, and
 1.0 version, and more.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-sax
   (package
@@ -486,7 +486,7 @@ that allow you to generate HTML from an RSS, convert between 0.9, 0.91, and
     (synopsis "Perl API for XML")
     (description "XML::SAX consists of several framework classes for using and
 building Perl SAX2 XML parsers, filters, and drivers.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-sax-base
   (package
@@ -508,7 +508,7 @@ PerlSAX drivers and filters.  It's default behaviour is to pass the input
 directly to the output unchanged.  It can be useful to use this module as a
 base class so you don't have to, for example, implement the characters()
 callback.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-simple
   (package
@@ -526,7 +526,7 @@ callback.")
     (propagated-inputs
      `(("perl-xml-parser" ,perl-xml-parser)
        ("perl-xml-sax" ,perl-xml-sax)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl module for easy reading/writing of XML files")
     (description
      "The XML::Simple module provides a simple API layer on top of an
@@ -549,7 +549,7 @@ parser modules).")
     (build-system perl-build-system)
     (inputs
      `(("perl-xml-parser" ,perl-xml-parser)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl regular expressions for XML tokens")
     (description
      "XML::RegExp contains regular expressions for the following XML tokens:
@@ -575,7 +575,7 @@ EntityRef, CharRef, Reference, Name, NmToken, and AttValue.")
        ("perl-libxml" ,perl-libxml)
        ("perl-xml-parser" ,perl-xml-parser)
        ("perl-xml-regexp" ,perl-xml-regexp)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis
      "Perl module for building DOM Level 1 compliant document structures")
     (description
@@ -607,7 +607,7 @@ that conforms to the API of the Document Object Model.")
      "The @code{XML::Compile} module suite has extensive regression testing.
 This module provide functions which simplify writing tests for
 @code{XML::Compile} related distributions.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile
   (package
@@ -632,7 +632,7 @@ This module provide functions which simplify writing tests for
      "@code{XML::Compile} can be used to translate a Perl data-structure into
 XML or XML into a Perl data-structure, both directions under rigid control by
 a schema.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile-cache
   (package
@@ -655,7 +655,7 @@ a schema.")
     (synopsis "Cache compiled XML translators")
     (description
      "This package provides methods to cache compiled XML translators.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile-soap
   (package
@@ -683,7 +683,7 @@ a schema.")
 implementation is @url{SOAP1.1,
 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/}, which is still most often
 used.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile-wsdl11
   (package
@@ -709,7 +709,7 @@ used.")
 messages to be send and received over SOAP connections.  This involves
 encoding of the message to be send into XML, sending the message to the
 server, collect the answer, and finally decoding the XML to Perl.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-feed
   (package
@@ -748,7 +748,7 @@ server, collect the answer, and finally decoding the XML to Perl.")
 Atom feeds.  It also implements feed auto-discovery for finding feeds, given a URI.
 @code{XML::Feed} supports the following syndication feed formats:
 RSS 0.91, RSS 1.0, RSS 2.0, Atom")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-xpath
   (package
@@ -772,7 +772,7 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom")
      "This module aims to comply exactly to the @url{XPath specification,
 https://www.w3.org/TR/xpath} and yet allow extensions to be added in
 the form of functions.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public pugixml
   (package
@@ -895,18 +895,19 @@ Libxml2).")
 (define-public minixml
   (package
     (name "minixml")
-    (version "2.9")
+    (version "2.10")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://www.msweet.org/files/project3/mxml-"
-                                  version ".tar.gz"))
+              (uri (string-append "https://github.com/michaelrsweet/mxml/"
+                                  "releases/download/release-" version
+                                  "/mxml-" version ".tar.gz"))
               (sha256
                (base32
-                "14pzhlfidj5v1qbxy7a59yn4jz9pnjrs2zwalz228jsq7ijm9vfd"))))
+                "14bqfq4lymhb31snz6wsvzhlavy0573v1nki1lbngiyxcj5zazr6"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f))  ;no "check" target
-    (home-page "http://www.minixml.org/")
+    (home-page "https://michaelrsweet.github.io/mxml")
     (synopsis "Small XML parsing library")
     (description
      "Mini-XML is a small C library to read and write XML files and strings in
index 9985524..f243222 100644 (file)
@@ -2393,7 +2393,7 @@ including most mice, keyboards, tablets and touchscreens.")
 (define-public xf86-input-libinput
   (package
     (name "xf86-input-libinput")
-    (version "0.25.0")
+    (version "0.25.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2401,7 +2401,7 @@ including most mice, keyboards, tablets and touchscreens.")
                     name "-" version ".tar.bz2"))
               (sha256
                (base32
-                "0vsmijamfzf6vcljrr0am2qcz33zl2l0lj2mzmbwgrm7ixjx2zxv"))))
+                "1q67hjd67ni1nq7kgxdrrdgkyhzaqvvn2vlnsiiq9w4y3icpv7s8"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -5720,7 +5720,7 @@ programs that cannot use the window system directly.")
      "These bindings wrap @code{libxcb} (a C library to speak with X11,
 in many cases better than @code{Xlib}), and provides an object oriented
 interface to its methods (using @code{Mouse}).")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-x11-protocol
   (package
@@ -5748,7 +5748,7 @@ perl programs to display windows and graphics on X11 servers.")
     ;; distribution, has another, less restrictive copying policy, as do some
     ;; of the extension modules in the directory Protocol/Ext: see those files
     ;; for details)."
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public xcompmgr
   (package
index 2cf30d6..8feb4fe 100644 (file)
@@ -48,6 +48,9 @@
                       (list "-f" "unix/Makefile"
                             (string-append "prefix=" out)
                             (string-append "MANDIR=" out "/share/man/man1")))
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
        #:phases
        (modify-phases %standard-phases
          (replace 'build
@@ -171,4 +174,4 @@ recreates the stored directory structure by default.")
     (description "The Archive::Zip module allows a Perl program to create,
 manipulate, read, and write Zip archive files.")
     (home-page "http://search.cpan.org/~adamk/Archive-Zip-1.30/")
-    (license (package-license perl))))
+    (license license:perl-license)))
index b1b53fd..5c31474 100644 (file)
@@ -183,7 +183,7 @@ TYPE does not have a default value, an error is raised."
            (condition
             (&missing-value-service-error (type type) (location location))
             (&message
-             (message (format #f (_ "~a: no value specified \
+             (message (format #f (G_ "~a: no value specified \
 for service of type '~a'")
                               (location->string location)
                               (service-type-name type)))))))
@@ -624,7 +624,7 @@ kernel."
                         (target-type target-type))
                        (&message
                         (message
-                         (format #f (_ "no target of type '~a' for service ~s")
+                         (format #f (G_ "no target of type '~a' for service ~s")
                                  (service-type-name target-type)
                                  service))))))
           (x
@@ -635,7 +635,7 @@ kernel."
                        (&message
                         (message
                          (format #f
-                                 (_ "more than one target service of type '~a'")
+                                 (G_ "more than one target service of type '~a'")
                                  (service-type-name target-type))))))))))
 
     (fold add-edge edges (service-type-extensions (service-kind service))))
@@ -686,7 +686,7 @@ TARGET-TYPE; return the root service adjusted accordingly."
                   (service #f)
                   (target-type target-type))
                  (&message
-                  (message (format #f (_ "service of type '~a' not found")
+                  (message (format #f (G_ "service of type '~a' not found")
                                    (service-type-name target-type)))))))
     (x
      (raise
@@ -696,7 +696,7 @@ TARGET-TYPE; return the root service adjusted accordingly."
                  (&message
                   (message
                    (format #f
-                           (_ "more than one target service of type '~a'")
+                           (G_ "more than one target service of type '~a'")
                            (service-type-name target-type)))))))))
 
 ;;; services.scm ends here.
index 67972bf..c244174 100644 (file)
@@ -1149,7 +1149,16 @@ the tty to run, among other things."
   #~(begin
       (use-modules (guix build utils))
       (mkdir-p "/var/run/nscd")
-      (mkdir-p "/var/db/nscd")))                  ;for the persistent cache
+      (mkdir-p "/var/db/nscd")                    ;for the persistent cache
+
+      ;; In libc 2.25 nscd uses inotify to watch /etc/resolv.conf, but only if
+      ;; that file exists when it is started.  Thus create it here.  Note: on
+      ;; some systems, such as when NetworkManager is used, /etc/resolv.conf
+      ;; is a symlink, hence 'lstat'.
+      (unless (false-if-exception (lstat "/etc/resolv.conf"))
+        (call-with-output-file "/etc/resolv.conf"
+          (lambda (port)
+            (display "# This is a placeholder.\n" port))))))
 
 (define nscd-service-type
   (service-type (name 'nscd)
index 03bfbf1..f8d60a4 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -23,7 +24,9 @@
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
   #:use-module (ice-9 match)
-  #:export (shepherd-error?
+  #:export (%shepherd-socket-file
+
+            shepherd-error?
             service-not-found-error?
             service-not-found-error-service
             action-not-found-error?
@@ -58,9 +61,9 @@
 ;;; Code:
 
 (define %shepherd-socket-file
-  "/var/run/shepherd/socket")
+  (make-parameter "/var/run/shepherd/socket"))
 
-(define* (open-connection #:optional (file %shepherd-socket-file))
+(define* (open-connection #:optional (file (%shepherd-socket-file)))
   "Open a connection to the daemon, using the Unix-domain socket at FILE, and
 return the socket."
   ;; The protocol is sexp-based and UTF-8-encoded.
index 5831220..7281746 100644 (file)
@@ -163,7 +163,7 @@ assertion failure."
                 (raise (condition
                         (&message
                          (message
-                          (format #f (_ "service '~a' provided more than once")
+                          (format #f (G_ "service '~a' provided more than once")
                                   symbol)))))))
 
             (for-each assert-unique (shepherd-service-provision service))
@@ -178,7 +178,7 @@ assertion failure."
                   (raise (condition
                           (&message
                            (message
-                            (format #f (_ "service '~a' requires '~a', \
+                            (format #f (G_ "service '~a' requires '~a', \
 which is not provided by any service")
                                     (match (shepherd-service-provision service)
                                       ((head . _) head)
index 44190bd..f9a0da9 100644 (file)
@@ -48,7 +48,6 @@
   #:use-module (gnu services)
   #:use-module (gnu services shepherd)
   #:use-module (gnu services base)
-  #:use-module (gnu system grub)
   #:use-module (gnu system shadow)
   #:use-module (gnu system nss)
   #:use-module (gnu system locale)
@@ -73,7 +72,7 @@
             operating-system-hosts-file
             operating-system-kernel
             operating-system-kernel-file
-            operating-system-user-kernel-arguments
+            operating-system-kernel-arguments
             operating-system-initrd
             operating-system-users
             operating-system-groups
             boot-parameters-kernel-arguments
             boot-parameters-initrd
             read-boot-parameters
+            read-boot-parameters-file
 
             local-host-aliases
             %setuid-programs
 ;;;
 ;;; Code:
 
+(define (bootable-kernel-arguments kernel-arguments system.drv root-device)
+  "Prepend extra arguments to KERNEL-ARGUMENTS that allow SYSTEM.DRV to be
+booted from ROOT-DEVICE"
+  (cons* (string-append "--root=" root-device)
+         #~(string-append "--system=" #$system.drv)
+         #~(string-append "--load=" #$system.drv "/boot")
+         kernel-arguments))
+
 ;; System-wide configuration.
 ;; TODO: Add per-field docstrings/stexi.
 (define-record-type* <operating-system> operating-system
   (sudoers-file operating-system-sudoers-file     ; file-like
                 (default %sudoers-specification)))
 
+(define (operating-system-kernel-arguments os system.drv root-device)
+  "Return all the kernel arguments, including the ones not specified
+directly by the user."
+  (bootable-kernel-arguments (operating-system-user-kernel-arguments os)
+                             system.drv
+                             root-device))
+
+\f
+;;;
+;;; Boot parameters
+;;;
+
+(define-record-type* <boot-parameters>
+  boot-parameters make-boot-parameters boot-parameters?
+  (label            boot-parameters-label)
+  ;; Because we will use the 'store-device' to create the GRUB search command,
+  ;; the 'store-device' has slightly different semantics than 'root-device'.
+  ;; The 'store-device' can be a file system uuid, a file system label, or #f,
+  ;; but it cannot be a device path such as "/dev/sda3", since GRUB would not
+  ;; understand that.  The 'root-device', on the other hand, corresponds
+  ;; exactly to the device field of the <file-system> object representing the
+  ;; OS's root file system, so it might be a device path like "/dev/sda3".
+  (root-device      boot-parameters-root-device)
+  (store-device     boot-parameters-store-device)
+  (store-mount-point boot-parameters-store-mount-point)
+  (kernel           boot-parameters-kernel)
+  (kernel-arguments boot-parameters-kernel-arguments)
+  (initrd           boot-parameters-initrd))
+
+(define (read-boot-parameters port)
+  "Read boot parameters from PORT and return the corresponding
+<boot-parameters> object or #f if the format is unrecognized."
+  (match (read port)
+    (('boot-parameters ('version 0)
+                       ('label label) ('root-device root)
+                       ('kernel linux)
+                       rest ...)
+     (boot-parameters
+      (label label)
+      (root-device root)
+
+      ;; In the past, we would store the directory name of the kernel instead
+      ;; of the absolute file name of its image.  Detect that and correct it.
+      (kernel (if (string=? linux (direct-store-path linux))
+                  (string-append linux "/"
+                                 (system-linux-image-file-name))
+                  linux))
+
+      (kernel-arguments
+       (match (assq 'kernel-arguments rest)
+         ((_ args) args)
+         (#f       '())))                         ;the old format
+
+      (initrd
+       (match (assq 'initrd rest)
+         (('initrd ('string-append directory file)) ;the old format
+          (string-append directory file))
+         (('initrd (? string? file))
+          file)))
+
+      (store-device
+       (match (assq 'store rest)
+         (('store ('device device) _ ...)
+          device)
+         (_                                       ;the old format
+          ;; Root might be a device path like "/dev/sda1", which is not a
+          ;; suitable GRUB device identifier.
+          (if (string-prefix? "/" root)
+              #f
+              root))))
+
+      (store-mount-point
+       (match (assq 'store rest)
+         (('store ('device _) ('mount-point mount-point) _ ...)
+          mount-point)
+         (_                                       ;the old format
+          "/")))))
+    (x                                            ;unsupported format
+     (warning (G_ "unrecognized boot parameters for '~a'~%")
+              system)
+     #f)))
+
+(define (read-boot-parameters-file system)
+  "Read boot parameters from SYSTEM's (system or generation) \"parameters\"
+file and returns the corresponding <boot-parameters> object or #f if the
+format is unrecognized.
+The object has its kernel-arguments extended in order to make it bootable."
+  (let* ((file (string-append system "/parameters"))
+         (params (call-with-input-file file read-boot-parameters))
+         (root (boot-parameters-root-device params))
+         (root-device (if (bytevector? root)
+                          (uuid->string root)
+                          root))
+         (kernel-arguments (boot-parameters-kernel-arguments params)))
+    (if params
+      (boot-parameters
+        (inherit params)
+        (kernel-arguments (bootable-kernel-arguments kernel-arguments
+                                                     system
+                                                     root-device)))
+      #f)))
 \f
 ;;;
 ;;; Services.
@@ -522,7 +631,7 @@ This is for backward-compatibility of fields that used to be strings and are
 now file-like objects.."
   (match thing
     ((? string?)
-     (warning (_ "using a string for file '~a' is deprecated; \
+     (warning (G_ "using a string for file '~a' is deprecated; \
 use 'plain-file' instead~%")
               file-name)
      (plain-file file-name thing))
@@ -538,7 +647,7 @@ and are now file-like objects."
   (with-monad %store-monad
     (match thing
       ((? procedure?)
-       (warning (_ "using a monadic value for '~a' is deprecated; \
+       (warning (G_ "using a monadic value for '~a' is deprecated; \
 use 'plain-file' instead~%")
                 file-name)
        thing)
@@ -680,7 +789,7 @@ hardware-related operations as necessary when booting a Linux container."
     (#f
      (raise (condition
              (&message
-              (message (format #f (_ "~a: invalid locale name") name))))))
+              (message (format #f (G_ "~a: invalid locale name") name))))))
     (def def)))
 
 (define (operating-system-locale-directory os)
@@ -735,31 +844,15 @@ populate the \"old entries\" menu."
   (mlet* %store-monad
       ((system      (operating-system-derivation os))
        (root-fs ->  (operating-system-root-file-system os))
-       (store-fs -> (operating-system-store-file-system os))
-       (label ->    (kernel->boot-label (operating-system-kernel os)))
-       (kernel ->   (operating-system-kernel-file os))
-       (initrd      (operating-system-initrd-file os))
        (root-device -> (if (eq? 'uuid (file-system-title root-fs))
                            (uuid->string (file-system-device root-fs))
                            (file-system-device root-fs)))
-       (entries ->  (list (menu-entry
-                           (label label)
-
-                           ;; The device where the kernel and initrd live.
-                           (device (fs->boot-device store-fs))
-                           (device-mount-point
-                            (file-system-mount-point store-fs))
-
-                           (linux kernel)
-                           (linux-arguments
-                            (cons* (string-append "--root=" root-device)
-                                   #~(string-append "--system=" #$system)
-                                   #~(string-append "--load=" #$system
-                                                    "/boot")
-                                   (operating-system-user-kernel-arguments os)))
-                           (initrd initrd)))))
-    (grub-configuration-file (operating-system-bootloader os) entries
-                             #:old-entries old-entries)))
+       (entry (operating-system-boot-parameters os system root-device)))
+    ((module-ref (resolve-interface '(gnu system grub))
+                 'grub-configuration-file)
+     (operating-system-bootloader os)
+     (list entry)
+     #:old-entries old-entries)))
 
 (define (fs->boot-device fs)
   "Given FS, a <file-system> object, return a value suitable for use as the
@@ -769,101 +862,51 @@ device in a <menu-entry>."
     ((label) (file-system-device fs))
     (else #f)))
 
-(define (operating-system-boot-parameters-file os)
-  "Return a file that describes the boot parameters of OS.  The primary use of
-this file is the reconstruction of GRUB menu entries for old configurations."
-  (mlet %store-monad ((initrd   (operating-system-initrd-file os))
-                      (root ->  (operating-system-root-file-system os))
-                      (store -> (operating-system-store-file-system os))
-                      (label -> (kernel->boot-label
-                                 (operating-system-kernel os))))
-    (gexp->file "parameters"
-                #~(boot-parameters
-                   (version 0)
-                   (label #$label)
-                   (root-device #$(file-system-device root))
-                   (kernel #$(operating-system-kernel-file os))
-                   (kernel-arguments
-                    #$(operating-system-user-kernel-arguments os))
-                   (initrd #$initrd)
-                   (store
-                    (device #$(fs->boot-device store))
-                    (mount-point #$(file-system-mount-point store))))
-                #:set-load-path? #f)))
-
-\f
-;;;
-;;; Boot parameters
-;;;
-
-(define-record-type* <boot-parameters>
-  boot-parameters make-boot-parameters boot-parameters?
-  (label            boot-parameters-label)
-  ;; Because we will use the 'store-device' to create the GRUB search command,
-  ;; the 'store-device' has slightly different semantics than 'root-device'.
-  ;; The 'store-device' can be a file system uuid, a file system label, or #f,
-  ;; but it cannot be a device path such as "/dev/sda3", since GRUB would not
-  ;; understand that.  The 'root-device', on the other hand, corresponds
-  ;; exactly to the device field of the <file-system> object representing the
-  ;; OS's root file system, so it might be a device path like "/dev/sda3".
-  (root-device      boot-parameters-root-device)
-  (store-device     boot-parameters-store-device)
-  (store-mount-point boot-parameters-store-mount-point)
-  (kernel           boot-parameters-kernel)
-  (kernel-arguments boot-parameters-kernel-arguments)
-  (initrd           boot-parameters-initrd))
-
-(define (read-boot-parameters port)
-  "Read boot parameters from PORT and return the corresponding
-<boot-parameters> object or #f if the format is unrecognized."
-  (match (read port)
-    (('boot-parameters ('version 0)
-                       ('label label) ('root-device root)
-                       ('kernel linux)
-                       rest ...)
-     (boot-parameters
-      (label label)
-      (root-device root)
-
-      ;; In the past, we would store the directory name of the kernel instead
-      ;; of the absolute file name of its image.  Detect that and correct it.
-      (kernel (if (string=? linux (direct-store-path linux))
-                  (string-append linux "/"
-                                 (system-linux-image-file-name))
-                  linux))
-
-      (kernel-arguments
-       (match (assq 'kernel-arguments rest)
-         ((_ args) args)
-         (#f       '())))                         ;the old format
-
-      (initrd
-       (match (assq 'initrd rest)
-         (('initrd ('string-append directory file)) ;the old format
-          (string-append directory file))
-         (('initrd (? string? file))
-          file)))
-
-      (store-device
-       (match (assq 'store rest)
-         (('store ('device device) _ ...)
-          device)
-         (_                                       ;the old format
-          ;; Root might be a device path like "/dev/sda1", which is not a
-          ;; suitable GRUB device identifier.
-          (if (string-prefix? "/" root)
-              #f
-              root))))
-
-      (store-mount-point
-       (match (assq 'store rest)
-         (('store ('device _) ('mount-point mount-point) _ ...)
-          mount-point)
-         (_                                       ;the old format
-          "/")))))
-    (x                                            ;unsupported format
-     (warning (_ "unrecognized boot parameters for '~a'~%")
-              system)
-     #f)))
+(define (operating-system-boot-parameters os system.drv root-device)
+  "Return a monadic <boot-parameters> record that describes the boot parameters
+of OS.  SYSTEM.DRV is either a derivation or #f.  If it's a derivation, adds
+kernel arguments for that derivation to <boot-parameters>."
+  (mlet* %store-monad
+      ((initrd (operating-system-initrd-file os))
+       (store -> (operating-system-store-file-system os))
+       (label -> (kernel->boot-label (operating-system-kernel os))))
+    (return (boot-parameters
+             (label label)
+             (root-device root-device)
+             (kernel (operating-system-kernel-file os))
+             (kernel-arguments
+              (if system.drv
+                (operating-system-kernel-arguments os system.drv root-device)
+                (operating-system-user-kernel-arguments os)))
+             (initrd initrd)
+             (store-device (fs->boot-device store))
+             (store-mount-point (file-system-mount-point store))))))
+
+(define* (operating-system-boot-parameters-file os #:optional (system.drv #f))
+   "Return a file that describes the boot parameters of OS.  The primary use of
+this file is the reconstruction of GRUB menu entries for old configurations.
+SYSTEM.DRV is optional.  If given, adds kernel arguments for that system to the
+returned file (since the returned file is then usually stored into the
+content-addressed \"system\" directory, it's usually not a good idea
+to give it because the content hash would change by the content hash
+being stored into the \"parameters\" file)."
+  (mlet* %store-monad ((root -> (operating-system-root-file-system os))
+                       (device -> (file-system-device root))
+                       (params (operating-system-boot-parameters os
+                                                                 system.drv
+                                                                 device)))
+     (gexp->file "parameters"
+                 #~(boot-parameters
+                    (version 0)
+                    (label #$(boot-parameters-label params))
+                    (root-device #$(boot-parameters-root-device params))
+                    (kernel #$(boot-parameters-kernel params))
+                    (kernel-arguments
+                     #$(boot-parameters-kernel-arguments params))
+                    (initrd #$(boot-parameters-initrd params))
+                    (store
+                     (device #$(boot-parameters-store-device params))
+                     (mount-point #$(boot-parameters-store-mount-point params))))
+                 #:set-load-path? #f)))
 
 ;;; system.scm ends here
index cde4b9e..5809642 100644 (file)
@@ -144,15 +144,15 @@ denoting a file name."
                     (with-imported-modules '((gnu build svg))
                       #~(begin
                           ;; We need these two libraries.
-                          (add-to-load-path (string-append #$guile-rsvg
+                          (add-to-load-path (string-append #+guile-rsvg
                                                            "/share/guile/site/"
                                                            (effective-version)))
-                          (add-to-load-path (string-append #$guile-cairo
+                          (add-to-load-path (string-append #+guile-cairo
                                                            "/share/guile/site/"
                                                            (effective-version)))
 
                           (use-modules (gnu build svg))
-                          (svg->png #$svg #$output
+                          (svg->png #+svg #$output
                                     #:width #$width
                                     #:height #$height)))))
 
@@ -267,6 +267,16 @@ code."
         (#f
          #~(format #f "search --file --set ~a" #$file)))))
 
+(define (boot-parameters->menu-entry conf)
+  "Convert a <boot-parameters> instance to a corresponding <menu-entry>."
+  (menu-entry
+   (label (boot-parameters-label conf))
+   (device (boot-parameters-store-device conf))
+   (device-mount-point (boot-parameters-store-mount-point conf))
+   (linux (boot-parameters-kernel conf))
+   (linux-arguments (boot-parameters-kernel-arguments conf))
+   (initrd (boot-parameters-initrd conf))))
+
 (define* (grub-configuration-file config entries
                                   #:key
                                   (system (%current-system))
@@ -276,7 +286,7 @@ code."
 <file-system> object.  OLD-ENTRIES is taken to be a list of menu entries
 corresponding to old generations of the system."
   (define all-entries
-    (append entries
+    (append (map boot-parameters->menu-entry entries)
             (grub-configuration-menu-entries config)))
 
   (define entry->gexp
@@ -323,7 +333,7 @@ set timeout=~a~%"
             #$@(if (pair? old-entries)
                    #~((format port "
 submenu \"GNU system, old configurations...\" {~%")
-                      #$@(map entry->gexp old-entries)
+                      #$@(map entry->gexp (map boot-parameters->menu-entry old-entries))
                       (format port "}~%"))
                    #~()))))
 
index 4546c1a..eedf933 100644 (file)
@@ -204,21 +204,27 @@ dumped in /etc/pam.d/NAME, where NAME is the name of SERVICE."
         (env  (pam-entry ; to honor /etc/environment.
                (control "required")
                (module "pam_env.so"))))
-    (lambda* (name #:key allow-empty-passwords? motd)
+    (lambda* (name #:key allow-empty-passwords? (allow-root? #f) motd)
       "Return a standard Unix-style PAM service for NAME.  When
-ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords.  When MOTD is true, it
-should be a file-like object used as the message-of-the-day."
+ALLOW-EMPTY-PASSWORDS? is true, allow empty passwords.  When ALLOW-ROOT? is
+true, allow root to run the command without authentication.  When MOTD is
+true, it should be a file-like object used as the message-of-the-day."
       ;; See <http://www.linux-pam.org/Linux-PAM-html/sag-configuration-example.html>.
       (let ((name* name))
         (pam-service
          (name name*)
          (account (list unix))
-         (auth (list (if allow-empty-passwords?
-                         (pam-entry
-                          (control "required")
-                          (module "pam_unix.so")
-                          (arguments '("nullok")))
-                         unix)))
+         (auth (append (if allow-root?
+                           (list (pam-entry
+                                  (control "sufficient")
+                                  (module "pam_rootok.so")))
+                           '())
+                       (list (if allow-empty-passwords?
+                                 (pam-entry
+                                  (control "required")
+                                  (module "pam_unix.so")
+                                  (arguments '("nullok")))
+                                 unix))))
          (password (list (pam-entry
                           (control "required")
                           (module "pam_unix.so")
@@ -256,7 +262,12 @@ authenticate to run COMMAND."
           ;; These programs are setuid-root.
           (map (cut unix-pam-service <>
                     #:allow-empty-passwords? allow-empty-passwords?)
-               '("su" "passwd" "sudo"))
+               '("passwd" "sudo"))
+          ;; This is setuid-root, as well.  Allow root to run "su" without
+          ;; authenticating.
+          (list (unix-pam-service "su"
+                                  #:allow-empty-passwords? allow-empty-passwords?
+                                  #:allow-root? #t))
 
           ;; These programs are not setuid-root, and we want root to be able
           ;; to run them without having to authenticate (notably because
index 1acfcc4..b30ef8e 100644 (file)
@@ -220,7 +220,7 @@ set debug-file-directory ~/.guix-profile/lib/debug\n")))
         (raise (condition
                 (&message
                  (message
-                  (format #f (_ "supplementary group '~a' \
+                  (format #f (G_ "supplementary group '~a' \
 of user '~a' is undeclared")
                           group
                           (user-account-name user))))))))
@@ -230,7 +230,7 @@ of user '~a' is undeclared")
                   (raise (condition
                           (&message
                            (message
-                            (format #f (_ "primary group '~a' \
+                            (format #f (G_ "primary group '~a' \
 of user '~a' is undeclared")
                                     (user-account-group user)
                                     (user-account-name user)))))))
index 4f915c4..2c8b954 100644 (file)
@@ -490,11 +490,8 @@ it is mostly useful when FULL-BOOT?  is true."
                                 #:full-boot? full-boot?
                                 #:disk-image-size disk-image-size)))
     (define kernel-arguments
-      #~(list "--root=/dev/vda1"
-              (string-append "--system=" #$os-drv)
-              (string-append "--load=" #$os-drv "/boot")
-              #$@(if graphic? #~() #~("console=ttyS0"))
-              #+@(operating-system-user-kernel-arguments os)))
+      #~(list #$@(if graphic? #~() #~("console=ttyS0"))
+              #+@(operating-system-kernel-arguments os os-drv "/dev/vda1")))
 
     (define qemu-exec
       #~(list (string-append #$qemu "/bin/" #$(qemu-command (%current-system)))
index e84d1eb..810711a 100644 (file)
@@ -27,7 +27,7 @@
   #:use-module (gnu services)
   #:use-module (gnu services base)
   #:use-module (gnu services shepherd)
-  #:use-module ((gnu packages) #:select (scheme-modules))
+  #:use-module (guix discovery)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9 gnu)
   #:use-module (ice-9 match)
@@ -263,17 +263,12 @@ the system under test."
 (define (fold-system-tests proc seed)
   "Invoke PROC on each system test, passing it the test and the previous
 result."
-  (fold (lambda (module result)
-          (fold (lambda (thing result)
-                  (if (system-test? thing)
-                      (proc thing result)
-                      result))
-                result
-                (module-map (lambda (sym var)
-                              (false-if-exception (variable-ref var)))
-                            module)))
-        '()
-        (test-modules)))
+  (fold-module-public-variables (lambda (obj result)
+                                  (if (system-test? obj)
+                                      (cons obj result)
+                                      result))
+                                '()
+                                (test-modules)))
 
 (define (all-system-tests)
   "Return the list of system tests."
index 6ce5ab3..37aab8e 100644 (file)
@@ -31,6 +31,7 @@
   #:use-module (gnu services networking)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages ocr)
+  #:use-module (gnu packages package-management)
   #:use-module (guix gexp)
   #:use-module (guix store)
   #:use-module (guix monads)
@@ -296,28 +297,24 @@ info --version")
                                 (setlocale LC_ALL before))
                              marionette))
 
-          (test-assert "/run/current-system is a GC root"
+          (test-eq "/run/current-system is a GC root"
+            'success!
             (marionette-eval '(begin
                                 ;; Make sure the (guix …) modules are found.
-                                (eval-when (expand load eval)
-                                  (set! %load-path
-                                    (cons
-                                     (string-append
-                                      "/run/current-system/profile/share/guile/site/"
-                                      (effective-version))
-                                     %load-path))
-                                  (set! %load-compiled-path
-                                    (cons
-                                     (string-append
-                                      "/run/current-system/profile/share/guile/site/"
-                                      (effective-version))
-                                     %load-compiled-path)))
+                                ;;
+                                ;; XXX: Currently shepherd and marionette run
+                                ;; on Guile 2.0 whereas Guix is on 2.2.  Yet
+                                ;; we should be able to load the 2.0 Scheme
+                                ;; files since it's pure Scheme.
+                                (add-to-load-path
+                                 #+(file-append guix "/share/guile/site/2.2"))
 
                                 (use-modules (srfi srfi-34) (guix store))
 
                                 (let ((system (readlink "/run/current-system")))
                                   (guard (c ((nix-protocol-error? c)
-                                             (file-exists? system)))
+                                             (and (file-exists? system)
+                                                  'success!)))
                                     (with-store store
                                       (delete-paths store (list system))
                                       #f))))
index 550f92b..228b4e6 100644 (file)
@@ -39,6 +39,7 @@
 (define %ant-build-system-modules
   ;; Build-side modules imported by default.
   `((guix build ant-build-system)
+    (guix build java-utils)
     (guix build syscalls)
     ,@%gnu-build-system-modules))
 
 (define* (ant-build store name inputs
                     #:key
                     (tests? #t)
-                    (test-target "tests")
+                    (test-target "check")
                     (configure-flags ''())
                     (make-flags ''())
                     (build-target "jar")
                     (jar-name #f)
+                    (source-dir "src")
+                    (test-dir "src/test")
                     (phases '(@ (guix build ant-build-system)
                                 %standard-phases))
                     (outputs '("out"))
                     (guile #f)
                     (imported-modules %ant-build-system-modules)
                     (modules '((guix build ant-build-system)
+                               (guix build java-utils)
                                (guix build utils))))
   "Build SOURCE with INPUTS."
   (define builder
                   #:test-target ,test-target
                   #:build-target ,build-target
                   #:jar-name ,jar-name
+                  #:source-dir ,source-dir
+                  #:test-dir ,test-dir
                   #:phases ,phases
                   #:outputs %outputs
                   #:search-paths ',(map search-path-specification->sexp
index f4f57b5..34a22ec 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -15,7 +16,6 @@
 ;;;
 ;;; 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 ocaml)
   #:use-module (guix store)
   #:use-module (guix utils)
   #:use-module (guix build-system gnu)
   #:use-module (guix packages)
   #:use-module (ice-9 match)
+  #:use-module (srfi srfi-1)
   #:export (%ocaml-build-system-modules
+            package-with-ocaml4.01
+            strip-ocaml4.01-variant
             ocaml-build
             ocaml-build-system))
 
   (let ((module (resolve-interface '(gnu packages ocaml))))
     (module-ref module 'ocaml-findlib)))
 
+(define (default-ocaml4.01)
+  (let ((ocaml (resolve-interface '(gnu packages ocaml))))
+    (module-ref ocaml 'ocaml-4.01)))
+
+(define (default-ocaml4.01-findlib)
+  (let ((module (resolve-interface '(gnu packages ocaml))))
+    (module-ref module 'ocaml4.01-findlib)))
+
+(define* (package-with-explicit-ocaml ocaml findlib old-prefix new-prefix
+                                       #:key variant-property)
+  "Return a procedure of one argument, P.  The procedure creates a package
+with the same fields as P, which is assumed to use OCAML-BUILD-SYSTEM, such
+that it is compiled with OCAML and FINDLIB instead.  The inputs are changed
+recursively accordingly.  If the name of P starts with OLD-PREFIX, this is
+replaced by NEW-PREFIX; otherwise, NEW-PREFIX is prepended to the name.
+
+When VARIANT-PROPERTY is present, it is used as a key to search for
+pre-defined variants of this transformation recorded in the 'properties' field
+of packages.  The property value must be the promise of a package.  This is a
+convenient way for package writers to force the transformation to use
+pre-defined variants."
+  (define package-variant
+    (if variant-property
+        (lambda (package)
+          (assq-ref (package-properties package)
+                    variant-property))
+        (const #f)))
+
+  (define (transform p)
+    (cond
+     ;; If VARIANT-PROPERTY is present, use that.
+     ((package-variant p)
+      => force)
+
+     ;; Otherwise build the new package object graph.
+     ((eq? (package-build-system p) ocaml-build-system)
+      (package
+        (inherit p)
+        (location (package-location p))
+        (name (let ((name (package-name p)))
+                (string-append new-prefix
+                               (if (string-prefix? old-prefix name)
+                                   (substring name
+                                              (string-length old-prefix))
+                                   name))))
+        (arguments
+         (let ((ocaml   (if (promise? ocaml) (force ocaml) ocaml))
+               (findlib (if (promise? findlib) (force findlib) findlib)))
+           (ensure-keyword-arguments (package-arguments p)
+                                     `(#:ocaml   ,ocaml
+                                       #:findlib ,findlib))))))
+     (else p)))
+
+  (define (cut? p)
+    (or (not (eq? (package-build-system p) ocaml-build-system))
+        (package-variant p)))
+
+  (package-mapping transform cut?))
+
+(define package-with-ocaml4.01
+  (package-with-explicit-ocaml (delay (default-ocaml4.01))
+                               (delay (default-ocaml4.01-findlib))
+                               "ocaml-" "ocaml4.01-"
+                               #:variant-property 'ocaml4.01-variant))
+
+(define (strip-ocaml4.01-variant p)
+  "Remove the 'ocaml4.01-variant' property from P."
+  (package
+    (inherit p)
+    (properties (alist-delete 'ocaml4.01-variant (package-properties p)))))
+
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
                 (ocaml (default-ocaml))
index 00a4a46..4042630 100644 (file)
@@ -35,7 +35,8 @@
 ;;
 ;; Code:
 
-(define (default-build.xml jar-name prefix)
+(define* (default-build.xml jar-name prefix #:optional
+                            (source-dir ".") (test-dir "./test"))
   "Create a simple build.xml with standard targets for Ant."
   (call-with-output-file "build.xml"
     (lambda (port)
                               (value "${basedir}/build/jar")))
                  (property (@ (name "dist.dir")
                               (value ,prefix)))
+                 (property (@ (name "test.home")
+                              (value ,test-dir)))
+                 (property (@ (name "test.classes.dir")
+                              (value "${basedir}/build/test-classes")))
 
                  ;; respect the CLASSPATH environment variable
                  (property (@ (name "build.sysclasspath")
                  (target (@ (name "compile"))
                          (mkdir (@ (dir "${classes.dir}")))
                          (javac (@ (includeantruntime "false")
-                                   (srcdir "src")
+                                   (srcdir ,source-dir)
                                    (destdir "${classes.dir}")
                                    (classpath (@ (refid "classpath"))))))
 
+                 (target (@ (name "compile-tests"))
+                         (mkdir (@ (dir "${test.classes.dir}")))
+                         (javac (@ (includeantruntime "false")
+                                   (srcdir ,test-dir)
+                                   (destdir "${test.classes.dir}"))
+                                (classpath
+                                 (pathelement (@ (path "${env.CLASSPATH}")))
+                                 (pathelement (@ (location "${classes.dir}")))
+                                 (pathelement (@ (location "${test.classes.dir}"))))))
+
+                 (target (@ (name "check")
+                            (depends "compile-tests"))
+                         (mkdir (@ (dir "${test.home}/test-reports")))
+                         (junit (@ (printsummary "true")
+                                   (showoutput "true")
+                                   (fork "yes")
+                                   (haltonfailure "yes"))
+                                (classpath
+                                 (pathelement (@ (path "${env.CLASSPATH}")))
+                                 (pathelement (@ (location "${test.home}/resources")))
+                                 (pathelement (@ (location "${classes.dir}")))
+                                 (pathelement (@ (location "${test.classes.dir}"))))
+                                (formatter (@ (type "plain")
+                                              (usefile "true")))
+                                (batchtest (@ (fork "yes")
+                                              (todir "${test.home}/test-reports"))
+                                           (fileset (@ (dir "${test.home}/java"))
+                                                    (include (@ (name "**/*Test.java" )))))))
+
                  (target (@ (name "jar")
                             (depends "compile"))
                          (mkdir (@ (dir "${jar.dir}")))
@@ -98,11 +132,13 @@ to the default GNU unpack strategy."
       ((assq-ref gnu:%standard-phases 'unpack) #:source source)))
 
 (define* (configure #:key inputs outputs (jar-name #f)
-                    #:allow-other-keys)
+                    (source-dir "src")
+                    (test-dir "src/test") #:allow-other-keys)
   (when jar-name
     (default-build.xml jar-name
                        (string-append (assoc-ref outputs "out")
-                                      "/share/java")))
+                                      "/share/java")
+                       source-dir test-dir))
   (setenv "JAVA_HOME" (assoc-ref inputs "jdk"))
   (setenv "CLASSPATH" (generate-classpath inputs)))
 
index e948cd0..247a687 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
@@ -48,11 +48,19 @@ refers to."
       str))
 
 (define* (display-tabulated lst
-                             #:key (columns 3)
-                             (column-width (/ 78 columns)))
-  "Display the list of string LST in COLUMNS columns of COLUMN-WIDTH
-characters."
+                            #:key
+                            (terminal-width 80)
+                            (column-gap 2))
+  "Display the list of string LST in as many columns as needed given
+TERMINAL-WIDTH.  Use COLUMN-GAP spaces between two subsequent columns."
   (define len (length lst))
+  (define column-width
+    ;; The width of a column.  Assume all the columns have the same width
+    ;; (GNU ls is smarter than that.)
+    (+ column-gap (reduce max 0 (map string-length lst))))
+  (define columns
+    (max 1
+         (quotient terminal-width column-width)))
   (define pad
     (if (zero? (modulo len columns))
         0
@@ -81,16 +89,30 @@ characters."
     (()
      (display-tabulated (scandir ".")))
     (files
-     (let ((files (filter (lambda (file)
-                            (catch 'system-error
-                              (lambda ()
-                                (lstat file))
-                              (lambda args
-                                (let ((errno (system-error-errno args)))
-                                  (format (current-error-port) "~a: ~a~%"
-                                          file (strerror errno))
-                                  #f))))
-                          files)))
+     (let ((files (append-map (lambda (file)
+                                (catch 'system-error
+                                  (lambda ()
+                                    (match (stat:type (lstat file))
+                                      ('directory
+                                       ;; Like GNU ls, list the contents of
+                                       ;; FILE rather than FILE itself.
+                                       (match (scandir file
+                                                       (match-lambda
+                                                         ((or "." "..") #f)
+                                                         (_ #t)))
+                                         (#f
+                                          (list file))
+                                         ((files ...)
+                                          (map (cut string-append file "/" <>)
+                                               files))))
+                                      (_
+                                       (list file))))
+                                  (lambda args
+                                    (let ((errno (system-error-errno args)))
+                                      (format (current-error-port) "~a: ~a~%"
+                                              file (strerror errno))
+                                      '()))))
+                              files)))
        (display-tabulated files)))))
 
 (define (ls-command . files)
index 67a8952..ce4708a 100644 (file)
@@ -396,7 +396,21 @@ host name without trailing dot."
     ;;(set-log-level! 10)
     ;;(set-log-procedure! log)
 
-    (handshake session)
+    (catch 'gnutls-error
+      (lambda ()
+        (handshake session))
+      (lambda (key err proc . rest)
+        (cond ((eq? err error/warning-alert-received)
+               ;; Like Wget, do no stop upon non-fatal alerts such as
+               ;; 'alert-description/unrecognized-name'.
+               (format (current-error-port)
+                       "warning: TLS warning alert received: ~a~%"
+                       (alert-description->string (alert-get session)))
+               (handshake session))
+              (else
+               ;; XXX: We'd use 'gnutls_error_is_fatal' but (gnutls) doesn't
+               ;; provide a binding for this.
+               (apply throw key err proc rest)))))
 
     ;; Verify the server's certificate if needed.
     (when verify-certificate?
diff --git a/guix/build/java-utils.scm b/guix/build/java-utils.scm
new file mode 100644 (file)
index 0000000..402d377
--- /dev/null
@@ -0,0 +1,55 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
+;;; 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 (guix build java-utils)
+  #:use-module (guix build utils)
+  #:export (ant-build-javadoc
+            install-jars
+            install-javadoc))
+
+;; Copied from haskell-build-system.scm
+(define (package-name-version store-dir)
+  "Given a store directory STORE-DIR return 'name-version' of the package."
+  (let* ((base (basename store-dir)))
+    (string-drop base (+ 1 (string-index base #\-)))))
+
+(define* (ant-build-javadoc #:key (target "javadoc") (make-flags '())
+                            #:allow-other-keys)
+  (zero? (apply system* `("ant" ,target ,@make-flags))))
+
+(define* (install-jars jar-directory)
+  "Install jar files from JAR-DIRECTORY to the default target directory.  This
+is used in case the build.xml does not include an install target."
+  (lambda* (#:key outputs #:allow-other-keys)
+    (let ((share (string-append (assoc-ref outputs "out")
+                                "/share/java")))
+      (for-each (lambda (f) (install-file f share))
+                (find-files jar-directory "\\.jar$"))
+      #t)))
+
+(define* (install-javadoc apidoc-directory)
+  "Install the APIDOC-DIRECTORY to the target directory.  This is used to
+install javadocs when this is not done by the install target."
+  (lambda* (#:key outputs #:allow-other-keys)
+    (let* ((out (assoc-ref outputs "out"))
+           (docs (string-append (or (assoc-ref outputs "doc") out)
+                                "/share/doc/" (package-name-version out) "/")))
+      (mkdir-p docs)
+      (copy-recursively apidoc-directory docs)
+      #t)))
index 6034e93..d2e0404 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -18,6 +18,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (guix build pull)
+  #:use-module (guix modules)
   #:use-module (guix build utils)
   #:use-module (system base compile)
   #:use-module (ice-9 ftw)
 ;;;
 ;;; Code:
 
+(define (depends-on-guile-ssh? file)
+  "Return true if FILE is a Scheme source file that depends, directly or
+indirectly, on Guile-SSH."
+  (find (match-lambda
+          (('ssh _ ...) #t)
+          (_ #f))
+        (source-module-closure file #:select? (const #t))))
+
+(define (all-scheme-files directory)
+  "Return a sorted list of Scheme files found in DIRECTORY."
+  ;; Load guix/ modules before gnu/ modules to get somewhat steadier
+  ;; progress reporting.
+  (sort (filter (cut string-suffix? ".scm" <>)
+                (find-files directory "\\.scm"))
+        (let ((guix (string-append directory "/guix"))
+              (gnu  (string-append directory "/gnu")))
+          (lambda (a b)
+            (or (and (string-prefix? guix a)
+                     (string-prefix? gnu  b))
+                (string<? a b))))))
+
+(cond-expand
+  (guile-2.2 (use-modules (language tree-il optimize)
+                          (language cps optimize)))
+  (else #f))
+
+(define %default-optimizations
+  ;; Default optimization options (equivalent to -O2 on Guile 2.2).
+  (cond-expand
+    (guile-2.2 (append (tree-il-default-optimization-options)
+                       (cps-default-optimization-options)))
+    (else '())))
+
+(define %lightweight-optimizations
+  ;; Lightweight optimizations (like -O0, but with partial evaluation).
+  (let loop ((opts %default-optimizations)
+             (result '()))
+    (match opts
+      (() (reverse result))
+      ((#:partial-eval? _ rest ...)
+       (loop rest `(#t #:partial-eval? ,@result)))
+      ((kw _ rest ...)
+       (loop rest `(#f ,kw ,@result))))))
+
+(define (optimization-options file)
+  (if (string-contains file "gnu/packages/")
+      %lightweight-optimizations                  ;build faster
+      '()))
+
+\f
 (define* (build-guix out source
                      #:key
                      system
@@ -55,7 +106,8 @@ containing the source code.  Write any debugging output to DEBUG-PORT."
   (setvbuf (current-error-port) _IOLBF)
 
   (with-directory-excursion source
-    (format #t "copying and compiling to '~a'...~%" out)
+    (format #t "copying and compiling to '~a' with Guile ~a...~%"
+            out (version))
 
     ;; Copy everything under guix/ and gnu/ plus {guix,gnu}.scm.
     (copy-recursively "guix" (string-append out "/guix")
@@ -92,17 +144,12 @@ containing the source code.  Write any debugging output to DEBUG-PORT."
 
     ;; Compile the .scm files.  Load all the files before compiling them to
     ;; work around <http://bugs.gnu.org/15602> (FIXME).
-    (let* ((files
-            ;; Load guix/ modules before gnu/ modules to get somewhat steadier
-            ;; progress reporting.
-            (sort (filter (cut string-suffix? ".scm" <>)
-                          (find-files out "\\.scm"))
-                  (let ((guix (string-append out "/guix"))
-                        (gnu  (string-append out "/gnu")))
-                    (lambda (a b)
-                      (or (and (string-prefix? guix a)
-                               (string-prefix? gnu  b))
-                          (string<? a b))))))
+    ;; Filter out files depending on Guile-SSH when Guile-SSH is missing.
+    (let* ((files (remove (if (false-if-exception
+                               (resolve-interface '(ssh session)))
+                              (const #f)
+                              depends-on-guile-ssh?)
+                          (all-scheme-files out)))
            (total (length files)))
       (let loop ((files files)
                  (completed 0))
@@ -140,7 +187,7 @@ containing the source code.  Write any debugging output to DEBUG-PORT."
              (parameterize ((current-warning-port (%make-void-port "w")))
                (compile-file file
                              #:output-file go
-                             #:opts %auto-compilation-options)))
+                             #:opts (optimization-options file))))
            (with-mutex mutex
              (set! completed (+ 1 completed))))
          files))))
index d5e0f45..9aaab05 100644 (file)
@@ -76,7 +76,6 @@
             derivation-name
             derivation-output-names
             fixed-output-derivation?
-            fixed-output-path
             offloadable-derivation?
             substitutable-derivation?
             substitution-oracle
@@ -614,20 +613,6 @@ list of name/path pairs of its outputs."
 ;;; Derivation primitive.
 ;;;
 
-(define (compressed-hash bv size)                 ; `compressHash'
-  "Given the hash stored in BV, return a compressed version thereof that fits
-in SIZE bytes."
-  (define new (make-bytevector size 0))
-  (define old-size (bytevector-length bv))
-  (let loop ((i 0))
-    (if (= i old-size)
-        new
-        (let* ((j (modulo i size))
-               (o (bytevector-u8-ref new j)))
-          (bytevector-u8-set! new j
-                              (logxor o (bytevector-u8-ref bv i)))
-          (loop (+ 1 i))))))
-
 (define derivation-path->base16-hash
   (mlambda (file)
     "Return a string containing the base16 representation of the hash of the
@@ -674,43 +659,6 @@ derivation at FILE."
          ;; character.
          (sha256 (derivation->bytevector drv)))))))
 
-(define (store-path type hash name)               ; makeStorePath
-  "Return the store path for NAME/HASH/TYPE."
-  (let* ((s (string-append type ":sha256:"
-                           (bytevector->base16-string hash) ":"
-                           (%store-prefix) ":" name))
-         (h (sha256 (string->utf8 s)))
-         (c (compressed-hash h 20)))
-    (string-append (%store-prefix) "/"
-                   (bytevector->nix-base32-string c) "-"
-                   name)))
-
-(define (output-path output hash name)            ; makeOutputPath
-  "Return an output path for OUTPUT (the name of the output as a string) of
-the derivation called NAME with hash HASH."
-  (store-path (string-append "output:" output) hash
-              (if (string=? output "out")
-                  name
-                  (string-append name "-" output))))
-
-(define* (fixed-output-path name hash
-                            #:key
-                            (output "out")
-                            (hash-algo 'sha256)
-                            (recursive? #t))
-  "Return an output path for the fixed output OUTPUT defined by HASH of type
-HASH-ALGO, of the derivation NAME.  RECURSIVE? has the same meaning as for
-'add-to-store'."
-  (if (and recursive? (eq? hash-algo 'sha256))
-      (store-path "source" hash name)
-      (let ((tag (string-append "fixed:" output ":"
-                                (if recursive? "r:" "")
-                                (symbol->string hash-algo) ":"
-                                (bytevector->base16-string hash) ":")))
-        (store-path (string-append "output:" output)
-                    (sha256 (string->utf8 tag))
-                    name))))
-
 (define* (derivation store name builder args
                      #:key
                      (system (%current-system)) (env-vars '())
diff --git a/guix/discovery.scm b/guix/discovery.scm
new file mode 100644 (file)
index 0000000..319ba7c
--- /dev/null
@@ -0,0 +1,131 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (guix discovery)
+  #:use-module (guix ui)
+  #:use-module (guix combinators)
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 vlist)
+  #:use-module (ice-9 ftw)
+  #:export (scheme-modules
+            fold-modules
+            all-modules
+            fold-module-public-variables))
+
+;;; Commentary:
+;;;
+;;; This module provides tools to discover Guile modules and the variables
+;;; they export.
+;;;
+;;; Code:
+
+(define* (scheme-files directory)
+  "Return the list of Scheme files found under DIRECTORY, recursively.  The
+returned list is sorted in alphabetical order."
+
+  ;; Sort entries so that 'fold-packages' works in a deterministic fashion
+  ;; regardless of details of the underlying file system.
+  (sort (file-system-fold (const #t)                 ;enter?
+                          (lambda (path stat result) ;leaf
+                            (if (string-suffix? ".scm" path)
+                                (cons path result)
+                                result))
+                          (lambda (path stat result) ;down
+                            result)
+                          (lambda (path stat result) ;up
+                            result)
+                          (const #f)                 ;skip
+                          (lambda (path stat errno result)
+                            (unless (= ENOENT errno)
+                              (warning (G_ "cannot access `~a': ~a~%")
+                                       path (strerror errno)))
+                            result)
+                          '()
+                          directory
+                          stat)
+        string<?))
+
+(define file-name->module-name
+  (let ((not-slash (char-set-complement (char-set #\/))))
+    (lambda (file)
+      "Return the module name (a list of symbols) corresponding to FILE."
+      (map string->symbol
+           (string-tokenize (string-drop-right file 4) not-slash)))))
+
+(define* (scheme-modules directory #:optional sub-directory)
+  "Return the list of Scheme modules available under DIRECTORY.
+Optionally, narrow the search to SUB-DIRECTORY."
+  (define prefix-len
+    (string-length directory))
+
+  (filter-map (lambda (file)
+                (let* ((file   (substring file prefix-len))
+                       (module (file-name->module-name file)))
+                  (catch #t
+                    (lambda ()
+                      (resolve-interface module))
+                    (lambda args
+                      ;; Report the error, but keep going.
+                      (warn-about-load-error module args)
+                      #f))))
+              (scheme-files (if sub-directory
+                                (string-append directory "/" sub-directory)
+                                directory))))
+
+(define (fold-modules proc init path)
+  "Fold over all the Scheme modules present in PATH, a list of directories.
+Call (PROC MODULE RESULT) for each module that is found."
+  (fold (lambda (spec result)
+          (match spec
+            ((? string? directory)
+             (fold proc result (scheme-modules directory)))
+            ((directory . sub-directory)
+             (fold proc result
+                   (scheme-modules directory sub-directory)))))
+        '()
+        path))
+
+(define (all-modules path)
+  "Return the list of package modules found in PATH, a list of directories to
+search.  Entries in PATH can be directory names (strings) or (DIRECTORY
+. SUB-DIRECTORY) pairs, in which case modules are searched for beneath
+SUB-DIRECTORY."
+  (fold-modules cons '() path))
+
+(define (fold-module-public-variables proc init modules)
+  "Call (PROC OBJECT RESULT) for each variable exported by one of MODULES,
+using INIT as the initial value of RESULT.  It is guaranteed to never traverse
+the same object twice."
+  (identity   ; discard second return value
+   (fold2 (lambda (module result seen)
+            (fold2 (lambda (var result seen)
+                     (if (not (vhash-assq var seen))
+                         (values (proc var result)
+                                 (vhash-consq var #t seen))
+                         (values result seen)))
+                   result
+                   seen
+                   (module-map (lambda (sym var)
+                                 (false-if-exception (variable-ref var)))
+                               module)))
+          init
+          vlist-null
+          modules)))
+
+;;; discovery.scm ends here
index 5d86ab2..9f6d20e 100644 (file)
@@ -145,6 +145,10 @@ absolute file name and STAT is the result of 'lstat'."
                            (reverse lines))
                           (line
                            (loop (cons line lines))))))
+         (inodes      (map (lambda (file)
+                             (let ((stat (lstat file)))
+                               (cons (stat:dev stat) (stat:ino stat))))
+                           files))
          (status      (close-pipe pipe)))
     (and (zero? status)
          (lambda (file stat)
@@ -155,8 +159,10 @@ absolute file name and STAT is the result of 'lstat'."
               (any (lambda (f) (parent-directory? f file))
                    files))
              ((or 'regular 'symlink)
-              (any (lambda (f) (string-suffix? f file))
-                   files))
+              ;; Comparing file names is always tricky business so we rely on
+              ;; inode numbers instead
+              (member (cons (stat:dev stat) (stat:ino stat))
+                      inodes))
              (_
               #f))))))
 
index ef8f900..ac0ed5a 100644 (file)
@@ -166,7 +166,7 @@ and 'interactive' (default)."
 
           (define (receive?)
             (let ((answer
-                   (begin (format #t (_ "~a~a~%")
+                   (begin (format #t (G_ "~a~a~%")
                                   "Would you like to download this key "
                                   "and add it to your keyring?")
                           (read-line))))
index 7af2cd3..d7fd5f3 100644 (file)
@@ -229,6 +229,35 @@ nodeArray.push(nodes[\"~a\"]);~%"
                  emit-d3js-prologue emit-d3js-epilogue
                  emit-d3js-node emit-d3js-edge))
 
+
+\f
+;;;
+;;; Cypher export.
+;;;
+
+(define (emit-cypher-prologue name port)
+  (format port ""))
+
+(define (emit-cypher-epilogue port)
+  (format port ""))
+
+(define (emit-cypher-node id label port)
+  (format port "MERGE (p:Package { id: ~s }) SET p.name = ~s;~%"
+          id label ))
+
+(define (emit-cypher-edge id1 id2 port)
+  (format port "MERGE (a:Package { id: ~s });~%" id1)
+  (format port "MERGE (b:Package { id: ~s });~%" id2)
+  (format port "MATCH (a:Package { id: ~s }), (b:Package { id: ~s }) CREATE UNIQUE (a)-[:NEEDS]->(b);~%"
+          id1 id2))
+
+(define %cypher-backend
+  (graph-backend "cypher"
+                 "Generate Cypher queries."
+                 emit-cypher-prologue emit-cypher-epilogue
+                 emit-cypher-node emit-cypher-edge))
+
+
 \f
 ;;;
 ;;; Shared.
@@ -236,7 +265,8 @@ nodeArray.push(nodes[\"~a\"]);~%"
 
 (define %graph-backends
   (list %graphviz-backend
-        %d3js-backend))
+        %d3js-backend
+        %cypher-backend))
 
 (define* (export-graph sinks port
                        #:key
index 6874c51..3c5441c 100644 (file)
@@ -262,7 +262,7 @@ Raise an '&http-get-error' condition if downloading fails."
             302)                                  ; found (redirection)
            (let ((uri (resolve-uri-reference (response-location resp) uri)))
              (close-port port)
-             (format #t (_ "following redirection to `~a'...~%")
+             (format #t (G_ "following redirection to `~a'...~%")
                      (uri->string uri))
              (loop uri)))
           (else
@@ -274,7 +274,7 @@ Raise an '&http-get-error' condition if downloading fails."
                               (message
                                (format
                                 #f
-                                (_ "~a: HTTP download failed: ~a (~s)")
+                                (G_ "~a: HTTP download failed: ~a (~s)")
                                 (uri->string uri) code
                                 (response-reason-phrase resp))))))))))))
 
index b19d56d..32c5c31 100644 (file)
@@ -288,7 +288,7 @@ META."
        ;; Warn about inputs that are part of perl's core
        (unless (null? core-inputs)
          (for-each (lambda (module)
-                     (warning (_ "input '~a' of ~a is in Perl core~%")
+                     (warning (G_ "input '~a' of ~a is in Perl core~%")
                               module (package-name package)))
                    core-inputs)))
      (let ((version (cpan-version meta))
index be34a75..a940516 100644 (file)
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -374,7 +375,7 @@ dependencies."
                     (start (string-rindex url #\/)))
                 ;; The URL ends on
                 ;; (string-append "/" name "_" version ".tar.gz")
-                (substring url (+ start 1) end)))
+                (and start end (substring url (+ start 1) end))))
              (_ #f)))
           (_ #f)))))
 
@@ -415,6 +416,9 @@ dependencies."
 (define (cran-package? package)
   "Return true if PACKAGE is an R package from CRAN."
   (and (string-prefix? "r-" (package-name package))
+       ;; Check if the upstream name can be extracted from package uri.
+       (package->upstream-name package)
+       ;; Check if package uri(s) are prefixed by "mirror://cran".
        (match (and=> (package-source package) origin-uri)
          ((? string? uri)
           (string-prefix? "mirror://cran" uri))
index b100330..858eea8 100644 (file)
@@ -82,7 +82,7 @@ NAMES (strings)."
         ;; Use a relatively small TTL for the archive itself.
         (parameterize ((%http-cache-ttl (* 6 3600)))
           (call-with-downloaded-file url read))
-        (leave (_ "~A: currently not supported~%") repo))))
+        (leave (G_ "~A: currently not supported~%") repo))))
 
 (define* (call-with-downloaded-file url proc #:optional (error-thunk #f))
   "Fetch URL, store the content in a temporary file and call PROC with that
@@ -94,7 +94,7 @@ return its value or leave if it's false."
     (lambda (key . args)
       (if error-thunk
           (error-thunk)
-          (leave (_ "~A: download failed~%") url)))))
+          (leave (G_ "~A: download failed~%") url)))))
 
 (define (is-elpa-package? name elpa-pkg-spec)
   "Return true if the string NAME corresponds to the name of the package
index 1e433e3..9c72e73 100644 (file)
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014 David Thompson <davet@gnu.org>
 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
 ;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -132,7 +133,7 @@ extracted in the current directory, and will be deleted."
         (string-drop-right basename 8))
        (else
         (begin
-          (warning (_ "Unsupported archive format: \
+          (warning (G_ "Unsupported archive format: \
 cannot determine package dependencies"))
           #f)))))
 
@@ -215,7 +216,7 @@ cannot determine package dependencies"))
                     (delete-file req-file)
                     (rmdir dirname)))
                 (begin
-                  (warning (_ "'tar xf' failed with exit code ~a\n")
+                  (warning (G_ "'tar xf' failed with exit code ~a\n")
                            exit-code)
                   '())))
           '())))
@@ -279,7 +280,7 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE."
     (and package
          (guard (c ((missing-source-error? c)
                     (let ((package (missing-source-error-package c)))
-                      (leave (_ "no source release for pypi package ~a ~a~%")
+                      (leave (G_ "no source release for pypi package ~a ~a~%")
                              (assoc-ref* package "info" "name")
                              (assoc-ref* package "info" "version")))))
            (let ((name (assoc-ref* package "info" "name"))
@@ -322,15 +323,17 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE."
 
 (define (latest-release package)
   "Return an <upstream-source> for the latest release of PACKAGE."
-  (guard (c ((missing-source-error? c) #f))
-    (let* ((pypi-name (guix-package->pypi-name package))
-           (metadata (pypi-fetch pypi-name))
-           (version (assoc-ref* metadata "info" "version"))
-           (url (assoc-ref (latest-source-release metadata) "url")))
-      (upstream-source
-       (package (package-name package))
-       (version version)
-       (urls (list url))))))
+  (let* ((pypi-name    (guix-package->pypi-name package))
+         (pypi-package (pypi-fetch pypi-name)))
+    (and pypi-package
+         (guard (c ((missing-source-error? c) #f))
+           (let* ((metadata pypi-package)
+                  (version (assoc-ref* metadata "info" "version"))
+                  (url (assoc-ref (latest-source-release metadata) "url")))
+             (upstream-source
+              (package (package-name package))
+              (version version)
+              (urls (list url))))))))
 
 (define %pypi-updater
   (upstream-updater
index 7b2ac2d..a95f89a 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2012, 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
@@ -9,6 +9,8 @@
 ;;; Copyright © 2016 Fabian Harfert <fhmgufs@web.de>
 ;;; Copyright © 2016 Rene Saavedra <rennes@openmailbox.org>
 ;;; Copyright © 2016, 2017 ng0 <ng0@libertad.pw>
+;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2017 Petter <petter@mykolab.ch>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,7 +39,7 @@
             cc0
             cc-by2.0 cc-by3.0 cc-by-sa2.0 cc-by-sa3.0 cc-by-sa4.0
             cddl1.0
-            cecill-c
+            cecill cecill-b cecill-c
             artistic2.0 clarified-artistic
             copyleft-next
             cpl1.0
@@ -61,6 +63,7 @@
             ncsa
             nmap
             openldap2.8 openssl
+            perl-license
             psfl public-domain
             qpl
             repoze
@@ -75,7 +78,8 @@
             zpl2.1
             zlib
             fsf-free
-            wtfpl2))
+            wtfpl2
+            fsdg-compatible))
 
 (define-record-type <license>
   (license name uri comment)
@@ -191,7 +195,17 @@ at URI, which may be a file:// URI pointing the package's tree."
            "http://directory.fsf.org/wiki/License:CDDLv1.0"
            "https://www.gnu.org/licenses/license-list#CDDL"))
 
-(define cecill-c
+(define cecill                                    ;copyleft
+  (license "CeCILL"
+           "http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html"
+           "https://www.gnu.org/licenses/license-list.html#CeCILL"))
+
+(define cecill-b                                  ;non-copyleft
+  (license "CeCILL-B"
+           "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html"
+           "https://www.gnu.org/licenses/license-list.html#CeCILL"))
+
+(define cecill-c                                  ;weak copyleft
   (license "CeCILL-C"
            "http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html"
            "https://www.gnu.org/licenses/license-list.html#CeCILL"))
@@ -395,6 +409,12 @@ at URI, which may be a file:// URI pointing the package's tree."
            "https://www.gnu.org/licenses/license-list#newOpenLDAP"))
               ;; lists OpenLDAPv2.7, which is virtually identical
 
+(define perl-license
+  ;; The license of Perl, GPLv1+ or Artistic (we ignore the latter here).
+  ;; We define this alias to avoid circular dependencies introduced by the use
+  ;; of the '(package-license perl)' idiom.
+  gpl1+)
+
 (define psfl
   (license "Python Software Foundation License"
            "http://docs.python.org/license.html"
@@ -488,4 +508,13 @@ of licenses, approved as free by the FSF.  More details can be found at URI."
            uri
            comment))
 
+(define* (fsdg-compatible uri #:optional (comment ""))
+  "Return a license that does not fit any of the ones above or a collection
+of licenses, not necessarily free, but in accordance with FSDG as Non-functional
+Data.  More details can be found at URI.  See also
+https://www.gnu.org/distros/free-system-distribution-guidelines.en.html#non-functional-data."
+  (license "FSDG-compatible"
+           uri
+           comment))
+
 ;;; licenses.scm ends here
index 317f85d..6ae616a 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -29,6 +29,8 @@
             monad-bind
             monad-return
 
+            template-directory
+
             ;; Syntax.
             >>=
             return
@@ -92,6 +94,9 @@
                ;; The record type, for use at run time.
                (make-monad b r))
 
+             ;; Instantiate all the templates, specialized for this monad.
+             (template-directory instantiations name)
+
              (define-syntax name
                ;; An "inlined record", for use at expansion time.  The goal is
                ;; to allow 'bind' and 'return' to be resolved at expansion
                    ((_ %return) #'r)
                    (_           #'rtd))))))))))
 
+;; Expansion- and run-time state of the template directory.  This needs to be
+;; available at run time (and not just at expansion time) so we can
+;; instantiate templates defined in other modules, or use instances defined
+;; elsewhere.
+(eval-when (load expand eval)
+  ;; Mapping of syntax objects denoting the template to a pair containing (1)
+  ;; the syntax object of the parameter over which it is templated, and (2)
+  ;; the syntax of its body.
+  (define-once %templates (make-hash-table))
+
+  (define (register-template! name param body)
+    (hash-set! %templates name (cons param body)))
+
+  ;; List of template instances, where each entry is a triplet containing the
+  ;; syntax of the name, the actual parameter for which the template is
+  ;; specialized, and the syntax object referring to this specialization (the
+  ;; procedure's identifier.)
+  (define-once %template-instances '())
+
+  (define (register-template-instance! name actual instance)
+    (set! %template-instances
+      (cons (list name actual instance) %template-instances))))
+
+(define-syntax template-directory
+  (lambda (s)
+    "This is a \"stateful macro\" to register and lookup templates and
+template instances."
+    (define location
+      (syntax-source s))
+
+    (define current-info-port
+      ;; Port for debugging info.
+      (const (%make-void-port "w")))
+
+    (define location-string
+      (format #f "~a:~a:~a"
+              (assq-ref location 'filename)
+              (and=> (assq-ref location 'line) 1+)
+              (assq-ref location 'column)))
+
+    (define (matching-instance? name actual)
+      (match-lambda
+        ((name* instance-param proc)
+         (and (free-identifier=? name name*)
+              (or (equal? actual instance-param)
+                  (and (identifier? actual)
+                       (identifier? instance-param)
+                       (free-identifier=? instance-param
+                                          actual)))
+              proc))))
+
+    (define (instance-identifier name actual)
+      (define stem
+        (string-append
+         " "
+         (symbol->string (syntax->datum name))
+         (if (identifier? actual)
+             (string-append " " (symbol->string (syntax->datum actual)))
+             "")
+         " instance"))
+      (datum->syntax actual (string->symbol stem)))
+
+    (define (instance-definition name template actual)
+      (match template
+        ((formal . body)
+         (let ((instance (instance-identifier name actual)))
+           (format (current-info-port)
+                   "~a: info: specializing '~a' for '~a' as '~a'~%"
+                   location-string
+                   (syntax->datum name) (syntax->datum actual)
+                   (syntax->datum instance))
+
+           (register-template-instance! name actual instance)
+
+           #`(begin
+               (define #,instance
+                 (let-syntax ((#,formal (identifier-syntax #,actual)))
+                   #,body))
+
+               ;; Generate code to register the thing at run time.
+               (register-template-instance! #'#,name #'#,actual
+                                            #'#,instance))))))
+
+    (syntax-case s (register! lookup exists? instantiations)
+      ((_ register! name param body)
+       ;; Register NAME as a template on PARAM with the given BODY.
+       (begin
+         (register-template! #'name #'param #'body)
+
+         ;; Generate code to register the template at run time.  XXX: Because
+         ;; of this, BODY must not contain ellipses.
+         #'(register-template! #'name #'param #'body)))
+      ((_ lookup name actual)
+       ;; Search for an instance of template NAME for this ACTUAL parameter.
+       ;; On success, expand to the identifier of the instance; otherwise
+       ;; expand to #f.
+       (any (matching-instance? #'name #'actual) %template-instances))
+      ((_ exists? name actual)
+       ;; Likewise, but return a Boolean.
+       (let ((result (->bool
+                      (any (matching-instance? #'name #'actual)
+                           %template-instances))))
+         (unless result
+           (format (current-warning-port)
+                   "~a: warning: no specialization of template '~a' for '~a'~%"
+                   location-string
+                   (syntax->datum #'name) (syntax->datum #'actual)))
+         result))
+      ((_ instantiations actual)
+       ;; Expand to the definitions of all the existing templates
+       ;; specialized for ACTUAL.
+       #`(begin
+           #,@(hash-map->list (cut instance-definition <> <> #'actual)
+                              %templates))))))
+
+(define-syntax define-template
+  (lambda (s)
+    "Define a template, which is a procedure that can be specialized over its
+first argument.  In our case, the first argument is typically the identifier
+of a monad.
+
+Defining templates for procedures like 'mapm' allows us to make have a
+specialized version of those procedures for each monad that we define, such
+that calls to:
+
+  (mapm %state-monad proc lst)
+
+automatically expand to:
+
+  (#{ mapm %state-monad instance}# proc lst)
+
+Here, #{ mapm %state-monad instance}# is specialized for %state-monad, and
+thus it contains inline calls to %state-bind and %state-return.  This avoids
+repeated calls to 'struct-ref' to get the 'bind' and 'return' procedure of the
+monad, and allows 'bind' and 'return' to be inlined, which in turn allows for
+more optimizations."
+    (syntax-case s ()
+      ((_ (name arg0 args ...) body ...)
+       (with-syntax ((generic-name (datum->syntax
+                                    #'name
+                                    (symbol-append '#{ %}#
+                                                   (syntax->datum #'name)
+                                                   '-generic)))
+                     (original-name #'name))
+         #`(begin
+             (template-directory register! name arg0
+                                 (lambda (args ...)
+                                   body ...))
+             (define (generic-name arg0 args ...)
+               ;; The generic instance of NAME, for when no specialization was
+               ;; found.
+               body ...)
+
+             (define-syntax name
+               (lambda (s)
+                 (syntax-case s ()
+                   ((_ arg0* args ...)
+                    ;; Expand to either the specialized instance or the
+                    ;; generic instance of template ORIGINAL-NAME.
+                    #'(if (template-directory exists? original-name arg0*)
+                          ((template-directory lookup original-name arg0*)
+                           args ...)
+                          (generic-name arg0* args ...)))
+                   (_
+                    #'generic-name))))))))))
+
 (define-syntax-parameter >>=
   ;; The name 'bind' is already taken, so we choose this (obscure) symbol.
   (lambda (s)
@@ -265,7 +436,7 @@ MONAD---i.e., return a monadic function in MONAD."
     (with-monad monad
       (return (apply proc args)))))
 
-(define (foldm monad mproc init lst)
+(define-template (foldm monad mproc init lst)
   "Fold MPROC over LST and return a monadic value seeded by INIT.
 
   (foldm %state-monad (lift2 cons %state-monad) '() '(a b c))
@@ -277,33 +448,33 @@ MONAD---i.e., return a monadic function in MONAD."
       (match lst
         (()
          (return result))
-        ((head tail ...)
+        ((head . tail)
          (>>= (mproc head result)
               (lambda (result)
                 (loop tail result))))))))
 
-(define (mapm monad mproc lst)
+(define-template (mapm monad mproc lst)
   "Map MPROC over LST and return a monadic list.
 
   (mapm %state-monad (lift1 1+ %state-monad) '(0 1 2))
   => (1 2 3)  ;monadic
 "
-  (mlet monad ((result (foldm monad
-                              (lambda (item result)
-                                (>>= (mproc item)
-                                     (lambda (item)
-                                       (return (cons item result)))))
-                              '()
-                              lst)))
-    (return (reverse result))))
-
-(define-syntax-rule (sequence monad lst)
+  ;; XXX: We don't use 'foldm' because template specialization wouldn't work
+  ;; in this context.
+  (with-monad monad
+    (let mapm ((lst    lst)
+               (result '()))
+      (match lst
+        (()
+         (return (reverse result)))
+        ((head . tail)
+         (>>= (mproc head)
+              (lambda (head)
+                (mapm tail (cons head result)))))))))
+
+(define-template (sequence monad lst)
   "Turn the list of monadic values LST into a monadic list of values, by
 evaluating each item of LST in sequence."
-  ;; XXX: Making it a macro is a bit brutal as it leads to a lot of code
-  ;; duplication.  However, it allows >>= and return to be open-coded, which
-  ;; avoids struct-ref's to MONAD and a few closure allocations when using
-  ;; %STATE-MONAD.
   (with-monad monad
     (let seq ((lstx   lst)
               (result '()))
@@ -315,7 +486,7 @@ evaluating each item of LST in sequence."
               (lambda (item)
                 (seq tail (cons item result)))))))))
 
-(define (anym monad mproc lst)
+(define-template (anym monad mproc lst)
   "Apply MPROC to the list of values LST; return as a monadic value the first
 value for which MPROC returns a true monadic value or #f.  For example:
 
@@ -327,7 +498,7 @@ value for which MPROC returns a true monadic value or #f.  For example:
       (match lst
         (()
          (return #f))
-        ((head tail ...)
+        ((head . tail)
          (>>= (mproc head)
               (lambda (result)
                 (if result
index 739d3d3..9b4c608 100644 (file)
@@ -208,7 +208,7 @@ s-expression"))
             (hash     (get-hash))
             (has-sig? (= 1 (read-int port))))
         (format log-port
-                (_ "importing file or directory '~a'...~%")
+                (G_ "importing file or directory '~a'...~%")
                 file)
 
         ;; The signature may contain characters that are meant to be
@@ -219,7 +219,7 @@ s-expression"))
                 (begin
                   (assert-valid-signature sig hash file)
                   (format log-port
-                          (_ "found valid signature for '~a'~%")
+                          (G_ "found valid signature for '~a'~%")
                           file)
                   (finalize-store-file temp file
                                        #:references refs
index 44f2c32..8ead950 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
-;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015, 2017 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Alex Kost <alezost@gmail.com>
 ;;;
             package-cross-derivation
             package-output
             package-grafts
+            package/inherit
 
             transitive-input-references
 
@@ -789,6 +790,16 @@ package and returns its new name after rewrite."
 
   (package-mapping rewrite (cut assq <> replacements)))
 
+(define-syntax-rule (package/inherit p overrides ...)
+  "Like (package (inherit P) OVERRIDES ...), except that the same
+transformation is done to the package replacement, if any.  P must be a bare
+identifier, and will be bound to either P or its replacement when evaluating
+OVERRIDES."
+  (let loop ((p p))
+    (package (inherit p)
+      overrides ...
+      (replacement (and=> (package-replacement p) loop)))))
+
 \f
 ;;;
 ;;; Package derivations.
index bbee50b..9ff7f25 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Deck Pickard <deck.r.pickard@gmail.com>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;;
   #:use-module (guix packages)
   #:use-module (guix derivations)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-19)
   #:use-module (srfi srfi-37)
   #:use-module (ice-9 match)
   #:export (args-fold*
             parse-command-line
             maybe-build
             build-package
-            build-package-source))
+            build-package-source
+            %distro-age-warning
+            warn-about-old-distro))
 
 ;;; Commentary:
 ;;;
@@ -50,7 +53,7 @@ reporting."
              operand-proc seeds))
     (lambda (key proc msg args . rest)
       ;; XXX: MSG is not i18n'd.
-      (leave (_ "invalid argument: ~a~%")
+      (leave (G_ "invalid argument: ~a~%")
              (apply format #f msg args)))))
 
 (define (environment-build-options)
@@ -76,7 +79,7 @@ parameter of 'args-fold'."
     ;; Actual parsing takes place here.
     (apply args-fold* args options
            (lambda (opt name arg . rest)
-             (leave (_ "~A: unrecognized option~%") name))
+             (leave (G_ "~A: unrecognized option~%") name))
            argument-handler
            seeds))
 
@@ -136,4 +139,47 @@ Show what and how will/would be built."
                      #:dry-run? dry-run?)
         (return (show-derivation-outputs derivation))))))
 
+(define %distro-age-warning
+  ;; The age (in seconds) above which we warn that the distro is too old.
+  (make-parameter (match (and=> (getenv "GUIX_DISTRO_AGE_WARNING")
+                                string->duration)
+                    (#f  (* 7 24 3600))
+                    (age (time-second age)))))
+
+(define* (warn-about-old-distro #:optional (old (%distro-age-warning))
+                                #:key (suggested-command
+                                       "guix package -u"))
+  "Emit a warning if Guix is older than OLD seconds."
+  (let-syntax ((false-if-not-found
+                (syntax-rules ()
+                  ((_ exp)
+                   (catch 'system-error
+                     (lambda ()
+                       exp)
+                     (lambda args
+                       (if (= ENOENT (system-error-errno args))
+                           #f
+                           (apply throw args))))))))
+    (define (seconds->days seconds)
+      (round (/ seconds (* 3600 24))))
+
+    (define age
+      (match (false-if-not-found
+              (lstat (string-append (config-directory #:ensure? #f)
+                                    "/latest")))
+        (#f    #f)
+        (stat  (- (time-second (current-time time-utc))
+                  (stat:mtime stat)))))
+
+    (when (and age (>= age old))
+      (warning (N_ "Your Guix installation is ~a day old.\n"
+                   "Your Guix installation is ~a days old.\n"
+                   (seconds->days age))
+               (seconds->days age)))
+    (when (or (not age) (>= age old))
+      (warning (G_ "Consider running 'guix pull' followed by
+'~a' to get up-to-date packages and security updates.\n")
+               suggested-command)
+      (newline (guix-warning-port)))))
+
 ;;; scripts.scm ends here
index 8137455..5ea1978 100644 (file)
     (verbosity . 0)))
 
 (define (show-help)
-  (display (_ "Usage: guix archive [OPTION]... PACKAGE...
+  (display (G_ "Usage: guix archive [OPTION]... PACKAGE...
 Export/import one or more packages from/to the store.\n"))
-  (display (_ "
+  (display (G_ "
       --export           export the specified files/packages to stdout"))
-  (display (_ "
+  (display (G_ "
   -r, --recursive        combined with '--export', include dependencies"))
-  (display (_ "
+  (display (G_ "
       --import           import from the archive passed on stdin"))
-  (display (_ "
+  (display (G_ "
       --missing          print the files from stdin that are missing"))
-  (display (_ "
+  (display (G_ "
   -x, --extract=DIR      extract the archive on stdin to DIR"))
   (newline)
-  (display (_ "
+  (display (G_ "
       --generate-key[=PARAMETERS]
                          generate a key pair with the given parameters"))
-  (display (_ "
+  (display (G_ "
       --authorize        authorize imports signed by the public key on stdin"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -e, --expression=EXPR  build the package or derivation EXPR evaluates to"))
-  (display (_ "
+  (display (G_ "
   -S, --source           build the packages' source derivations"))
-  (display (_ "
+  (display (G_ "
   -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""))
-  (display (_ "
+  (display (G_ "
       --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""))
 
   (newline)
   (show-build-options-help)
 
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -140,7 +140,7 @@ Export/import one or more packages from/to the store.\n"))
                                (or arg %key-generation-parameters))))
                          (alist-cons 'generate-key params result)))
                      (lambda (key proc err)
-                       (leave (_ "invalid key generation parameters: ~a: ~a~%")
+                       (leave (G_ "invalid key generation parameters: ~a: ~a~%")
                               (error-source err)
                               (error-string err))))))
          (option '("authorize") #f #f
@@ -179,7 +179,7 @@ derivation of a package."
          (let ((source (package-source p)))
            (if source
                (package-source-derivation store source)
-               (leave (_ "package `~a' has no source~%")
+               (leave (G_ "package `~a' has no source~%")
                       (package-name p))))
          (package-derivation store p system)))
     ((? procedure? proc)
@@ -248,25 +248,25 @@ resulting archive to the standard output port."
             (build-derivations store drv))
         (export-paths store files (current-output-port)
                       #:recursive? (assoc-ref opts 'export-recursive?))
-        (leave (_ "unable to export the given packages~%")))))
+        (leave (G_ "unable to export the given packages~%")))))
 
 (define (generate-key-pair parameters)
   "Generate a key pair with PARAMETERS, a canonical sexp, and store it in the
 right place."
   (when (or (file-exists? %public-key-file)
             (file-exists? %private-key-file))
-    (leave (_ "key pair exists under '~a'; remove it first~%")
+    (leave (G_ "key pair exists under '~a'; remove it first~%")
            (dirname %public-key-file)))
 
   (format (current-error-port)
-          (_ "Please wait while gathering entropy to generate the key pair;
+          (G_ "Please wait while gathering entropy to generate the key pair;
 this may take time...~%"))
 
   (let* ((pair   (catch 'gcry-error
                    (lambda ()
                      (generate-key parameters))
                    (lambda (key proc err)
-                     (leave (_ "key generation failed: ~a: ~a~%")
+                     (leave (G_ "key generation failed: ~a: ~a~%")
                             (error-source err)
                             (error-string err)))))
          (public (find-sexp-token pair 'public-key))
@@ -293,13 +293,13 @@ the input port."
       (lambda ()
         (string->canonical-sexp (read-string (current-input-port))))
       (lambda (key proc err)
-        (leave (_ "failed to read public key: ~a: ~a~%")
+        (leave (G_ "failed to read public key: ~a: ~a~%")
                (error-source err) (error-string err)))))
 
   (let ((key (read-key))
         (acl (current-acl)))
     (unless (eq? 'public-key (canonical-sexp-nth-data key 0))
-      (leave (_ "s-expression does not denote a public key~%")))
+      (leave (G_ "s-expression does not denote a public key~%")))
 
     ;; Add KEY to the ACL and write that.
     (let ((acl (public-keys->acl (cons key (acl->public-keys acl)))))
@@ -345,5 +345,5 @@ the input port."
                             (restore-file (current-input-port) target)))
                          (else
                           (leave
-                           (_ "either '--export' or '--import' \
+                           (G_ "either '--export' or '--import' \
 must be specified~%"))))))))))))
index d9a312f..8b19dc8 100644 (file)
@@ -56,7 +56,7 @@ both the hash and the actual signature."
                                             ".pub")
                            read-canonical-sexp)
                          (leave
-                          (_ "cannot find public key for secret key '~a'~%")
+                          (G_ "cannot find public key for secret key '~a'~%")
                           key-file)))
          (data       (read-hash-data port (key-type public-key)))
          (signature  (signature-sexp data secret-key public-key)))
@@ -76,11 +76,11 @@ to stdout upon success."
                 (let ((hash (hash-data->bytevector data)))
                   (display (bytevector->base16-string hash))
                   #t)                              ; success
-                (leave (_ "error: invalid signature: ~a~%")
+                (leave (G_ "error: invalid signature: ~a~%")
                        (canonical-sexp->string signature)))
-            (leave (_ "error: unauthorized public key: ~a~%")
+            (leave (G_ "error: unauthorized public key: ~a~%")
                    (canonical-sexp->string subject)))
-        (leave (_ "error: corrupt signature data: ~a~%")
+        (leave (G_ "error: corrupt signature data: ~a~%")
                (canonical-sexp->string signature)))))
 
 \f
@@ -118,12 +118,12 @@ to stdout upon success."
       (("rsautl" "-verify" "-inkey" _ "-pubin")
        (validate-signature (current-input-port)))
       (("--help")
-       (display (_ "Usage: guix authenticate OPTION...
+       (display (G_ "Usage: guix authenticate OPTION...
 Sign or verify the signature on the given file.  This tool is meant to
 be used internally by 'guix-daemon'.\n")))
       (("--version")
        (show-version-and-exit "guix authenticate"))
       (else
-       (leave (_ "wrong arguments"))))))
+       (leave (G_ "wrong arguments"))))))
 
 ;;; authenticate.scm ends here
index 6bb1f72..558e8e7 100644 (file)
@@ -121,7 +121,7 @@ found.  Return #f if no build log was found."
                  0
                  paths))))
       (lambda args
-        (leave (_ "failed to create GC root `~a': ~a~%")
+        (leave (G_ "failed to create GC root `~a': ~a~%")
                root (strerror (system-error-errno args)))))))
 
 (define register-root*
@@ -203,7 +203,7 @@ could not be found."
             (proc (specification->package old)
                   (specification->package new)))
            (x
-            (leave (_ "invalid replacement specification: ~s~%") spec))))
+            (leave (G_ "invalid replacement specification: ~s~%") spec))))
        specs))
 
 (define (transform-package-inputs replacement-specs)
@@ -260,13 +260,13 @@ current 'gnutls' package, after which version 3.5.4 is grafted onto them."
                   (parser 'with-graft)))))
 
 (define (show-transformation-options-help)
-  (display (_ "
+  (display (G_ "
       --with-source=SOURCE
                          use SOURCE when building the corresponding package"))
-  (display (_ "
+  (display (G_ "
       --with-input=PACKAGE=REPLACEMENT
                          replace dependency PACKAGE by REPLACEMENT"))
-  (display (_ "
+  (display (G_ "
       --with-graft=PACKAGE=REPLACEMENT
                          graft REPLACEMENT on packages that refer to PACKAGE")))
 
@@ -291,7 +291,7 @@ derivation, etc.), applies the transformations specified by OPTS."
             (((name . transform) obj)
              (let ((new (transform store obj)))
                (when (eq? new obj)
-                 (warning (_ "transformation '~a' had no effect on ~a~%")
+                 (warning (G_ "transformation '~a' had no effect on ~a~%")
                           name
                           (if (package? obj)
                               (package-full-name obj)
@@ -309,37 +309,37 @@ derivation, etc.), applies the transformations specified by OPTS."
   "Display on the current output port help about the standard command-line
 options handled by 'set-build-options-from-command-line', and listed in
 '%standard-build-options'."
-  (display (_ "
+  (display (G_ "
   -L, --load-path=DIR    prepend DIR to the package module search path"))
-  (display (_ "
+  (display (G_ "
   -K, --keep-failed      keep build tree of failed builds"))
-  (display (_ "
+  (display (G_ "
   -k, --keep-going       keep going when some of the derivations fail"))
-  (display (_ "
+  (display (G_ "
   -n, --dry-run          do not build the derivations"))
-  (display (_ "
+  (display (G_ "
       --fallback         fall back to building when the substituter fails"))
-  (display (_ "
+  (display (G_ "
       --no-substitutes   build instead of resorting to pre-built substitutes"))
-  (display (_ "
+  (display (G_ "
       --substitute-urls=URLS
                          fetch substitute from URLS if they are authorized"))
-  (display (_ "
+  (display (G_ "
       --no-grafts        do not graft packages"))
-  (display (_ "
+  (display (G_ "
       --no-build-hook    do not attempt to offload builds via the build hook"))
-  (display (_ "
+  (display (G_ "
       --max-silent-time=SECONDS
                          mark the build as failed after SECONDS of silence"))
-  (display (_ "
+  (display (G_ "
       --timeout=SECONDS  mark the build as failed after SECONDS of activity"))
-  (display (_ "
+  (display (G_ "
       --verbosity=LEVEL  use the given verbosity LEVEL"))
-  (display (_ "
+  (display (G_ "
       --rounds=N         build N times in a row to detect non-determinism"))
-  (display (_ "
+  (display (G_ "
   -c, --cores=N          allow the use of up to N CPU cores for the build"))
-  (display (_ "
+  (display (G_ "
   -M, --max-jobs=N       allow at most N build jobs")))
 
 (define (set-build-options-from-command-line store opts)
@@ -445,14 +445,14 @@ options handled by 'set-build-options-from-command-line', and listed in
                   (let ((c (false-if-exception (string->number arg))))
                     (if c
                         (apply values (alist-cons 'cores c result) rest)
-                        (leave (_ "not a number: '~a' option argument: ~a~%")
+                        (leave (G_ "not a number: '~a' option argument: ~a~%")
                                name arg)))))
         (option '(#\M "max-jobs") #t #f
                 (lambda (opt name arg result . rest)
                   (let ((c (false-if-exception (string->number arg))))
                     (if c
                         (apply values (alist-cons 'max-jobs c result) rest)
-                        (leave (_ "not a number: '~a' option argument: ~a~%")
+                        (leave (G_ "not a number: '~a' option argument: ~a~%")
                                name arg)))))))
 
 \f
@@ -471,43 +471,43 @@ options handled by 'set-build-options-from-command-line', and listed in
     (verbosity . 0)))
 
 (define (show-help)
-  (display (_ "Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...
+  (display (G_ "Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...
 Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
-  (display (_ "
+  (display (G_ "
   -e, --expression=EXPR  build the package or derivation EXPR evaluates to"))
-  (display (_ "
+  (display (G_ "
   -f, --file=FILE        build the package or derivation that the code within
                          FILE evaluates to"))
-  (display (_ "
+  (display (G_ "
   -S, --source           build the packages' source derivations"))
-  (display (_ "
+  (display (G_ "
       --sources[=TYPE]   build source derivations; TYPE may optionally be one
                          of \"package\", \"all\" (default), or \"transitive\""))
-  (display (_ "
+  (display (G_ "
   -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""))
-  (display (_ "
+  (display (G_ "
       --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""))
-  (display (_ "
+  (display (G_ "
   -d, --derivations      return the derivation paths of the given packages"))
-  (display (_ "
+  (display (G_ "
       --check            rebuild items to check for non-determinism issues"))
-  (display (_ "
+  (display (G_ "
       --repair           repair the specified items"))
-  (display (_ "
+  (display (G_ "
   -r, --root=FILE        make FILE a symlink to the result, and register it
                          as a garbage collector root"))
-  (display (_ "
+  (display (G_ "
   -q, --quiet            do not show the build log"))
-  (display (_ "
+  (display (G_ "
       --log-file         return the log file names for the given derivations"))
   (newline)
   (show-build-options-help)
   (newline)
   (show-transformation-options-help)
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -534,7 +534,7 @@ Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"))
                      ("transitive"
                       (alist-cons 'source package-transitive-sources result))
                      (else
-                      (leave (_ "invalid argument: '~a' option argument: ~a, ~
+                      (leave (G_ "invalid argument: '~a' option argument: ~a, ~
 must be one of 'package', 'all', or 'transitive'~%")
                              name arg)))))
          (option '("check") #f #f
@@ -587,7 +587,7 @@ must be one of 'package', 'all', or 'transitive'~%")
 build---packages, gexps, derivations, and so on."
   (define (validate-type x)
     (unless (or (package? x) (derivation? x) (gexp? x) (procedure? x))
-      (leave (_ "~s: not something we can build~%") x)))
+      (leave (G_ "~s: not something we can build~%") x)))
 
   (define (ensure-list x)
     (let ((lst (match x
@@ -641,7 +641,7 @@ build."
                         (match (package-source p)
                           (#f
                            (format (current-error-port)
-                                   (_ "~a: warning: \
+                                   (G_ "~a: warning: \
 package '~a' has no source~%")
                                    (location->string (package-location p))
                                    (package-name p))
@@ -675,7 +675,7 @@ needed."
                  (log-url store file #:base-urls urls))))
     (if log
         (format #t "~a~%" log)
-        (leave (_ "no build log for '~a'~%") file))))
+        (leave (G_ "no build log for '~a'~%") file))))
 
 \f
 ;;;
index 815bb78..681394f 100644 (file)
@@ -188,10 +188,10 @@ object.  When VERBOSE?, display matches in addition to mismatches and
 inconclusive reports."
   (define (report-hashes item local narinfos)
     (if local
-        (report (_ "  local hash: ~a~%") (hash->string local))
-        (report (_ "  no local build for '~a'~%") item))
+        (report (G_ "  local hash: ~a~%") (hash->string local))
+        (report (G_ "  no local build for '~a'~%") item))
     (for-each (lambda (narinfo)
-                (report (_ "  ~50a: ~a~%")
+                (report (G_ "  ~50a: ~a~%")
                         (uri->string (narinfo-uri narinfo))
                         (hash->string
                          (narinfo-hash->sha256 (narinfo-hash narinfo)))))
@@ -199,15 +199,15 @@ inconclusive reports."
 
   (match comparison-report
     (($ <comparison-report> item 'mismatch local (narinfos ...))
-     (report (_ "~a contents differ:~%") item)
+     (report (G_ "~a contents differ:~%") item)
      (report-hashes item local narinfos))
     (($ <comparison-report> item 'inconclusive #f narinfos)
-     (warning (_ "could not challenge '~a': no local build~%") item))
+     (warning (G_ "could not challenge '~a': no local build~%") item))
     (($ <comparison-report> item 'inconclusive locals ())
-     (warning (_ "could not challenge '~a': no substitutes~%") item))
+     (warning (G_ "could not challenge '~a': no substitutes~%") item))
     (($ <comparison-report> item 'match local (narinfos ...))
      (when verbose?
-       (report (_ "~a contents match:~%") item)
+       (report (G_ "~a contents match:~%") item)
        (report-hashes item local narinfos)))))
 
 \f
@@ -216,17 +216,17 @@ inconclusive reports."
 ;;;
 
 (define (show-help)
-  (display (_ "Usage: guix challenge [PACKAGE...]
+  (display (G_ "Usage: guix challenge [PACKAGE...]
 Challenge the substitutes for PACKAGE... provided by one or more servers.\n"))
-  (display (_ "
+  (display (G_ "
       --substitute-urls=URLS
                          compare build results with those at URLS"))
-  (display (_ "
+  (display (G_ "
       -v, --verbose      show details about successful comparisons"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
index cd9f345..10aed2b 100644 (file)
   #:export (guix-container))
 
 (define (show-help)
-  (display (_ "Usage: guix container ACTION ARGS...
+  (display (G_ "Usage: guix container ACTION ARGS...
 Build and manipulate Linux containers.\n"))
   (newline)
-  (display (_ "The valid values for ACTION are:\n"))
+  (display (G_ "The valid values for ACTION are:\n"))
   (newline)
-  (display (_ "\
+  (display (G_ "\
    exec            execute a command inside of an existing container\n"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -50,7 +50,7 @@ Build and manipulate Linux containers.\n"))
     (match args
       (()
        (format (current-error-port)
-               (_ "guix container: missing action~%")))
+               (G_ "guix container: missing action~%")))
       ((or ("-h") ("--help"))
        (show-help)
        (exit 0))
@@ -60,4 +60,4 @@ Build and manipulate Linux containers.\n"))
        (if (member action %actions)
            (apply (resolve-action action) args)
            (format (current-error-port)
-                   (_ "guix container: invalid action~%")))))))
+                   (G_ "guix container: invalid action~%")))))))
index d6d267d..d598f5c 100644 (file)
                   (show-version-and-exit "guix container exec")))))
 
 (define (show-help)
-  (display (_ "Usage: guix container exec PID COMMAND [ARGS...]
+  (display (G_ "Usage: guix container exec PID COMMAND [ARGS...]
 Execute COMMMAND within the container process PID.\n"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -66,7 +66,7 @@ and the other containing arguments for the command to be executed."
 (define (guix-container-exec . args)
   (define (handle-argument arg result)
     (if (assoc-ref result 'pid)
-        (leave (_ "~a: extraneous argument~%") arg)
+        (leave (G_ "~a: extraneous argument~%") arg)
         (alist-cons 'pid (string->number* arg) result)))
 
   (with-error-handling
@@ -84,13 +84,13 @@ and the other containing arguments for the command to be executed."
                                       '("TERM"))))
 
         (unless pid
-          (leave (_ "no pid specified~%")))
+          (leave (G_ "no pid specified~%")))
 
         (when (null? command)
-          (leave (_ "no command specified~%")))
+          (leave (G_ "no command specified~%")))
 
         (unless (file-exists? (string-append "/proc/" (number->string pid)))
-          (leave (_ "no such process ~d~%") pid))
+          (leave (G_ "no such process ~d~%") pid))
 
         (let ((result (container-excursion pid
                         (lambda ()
@@ -102,4 +102,4 @@ and the other containing arguments for the command to be executed."
                                        environment)
                              (apply execlp program program program-args)))))))
           (unless (zero? result)
-            (leave (_ "exec failed with status ~d~%") result)))))))
+            (leave (G_ "exec failed with status ~d~%") result)))))))
index bc22504..45f7cbb 100644 (file)
@@ -56,9 +56,9 @@ number (or #f) corresponding to SPEC."
        ((? integer? port)
         (values user host port))
        (x
-        (leave (_ "~a: invalid TCP port number~%") port))))
+        (leave (G_ "~a: invalid TCP port number~%") port))))
     (x
-     (leave (_ "~a: invalid SSH specification~%") spec))))
+     (leave (G_ "~a: invalid SSH specification~%") spec))))
 
 (define (send-to-remote-host target opts)
   "Send ITEMS to TARGET.  ITEMS is a list of store items or package names; for ;
@@ -109,18 +109,18 @@ package names, build the underlying packages before sending them."
 ;;;
 
 (define (show-help)
-  (display (_ "Usage: guix copy [OPTION]... ITEMS...
+  (display (G_ "Usage: guix copy [OPTION]... ITEMS...
 Copy ITEMS to or from the specified host over SSH.\n"))
-  (display (_ "
+  (display (G_ "
       --to=HOST          send ITEMS to HOST"))
-  (display (_ "
+  (display (G_ "
       --from=HOST        receive ITEMS from HOST"))
   (newline)
   (show-build-options-help)
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -165,4 +165,4 @@ Copy ITEMS to or from the specified host over SSH.\n"))
            (target   (assoc-ref opts 'destination)))
       (cond (target (send-to-remote-host target opts))
             (source (retrieve-from-remote-host source opts))
-            (else   (leave (_ "use '--to' or '--from'~%")))))))
+            (else   (leave (G_ "use '--to' or '--from'~%")))))))
index 1ddfd64..bb3dc76 100644 (file)
     (download-proc . ,download-to-store*)))
 
 (define (show-help)
-  (display (_ "Usage: guix download [OPTION] URL
+  (display (G_ "Usage: guix download [OPTION] URL
 Download the file at URL to the store or to the given file, and print its
 file name and the hash of its contents.
 
 Supported formats: 'nix-base32' (default), 'base32', and 'base16'
 ('hex' and 'hexadecimal' can be used as well).\n"))
-  (format #t (_ "
+  (format #t (G_ "
   -f, --format=FMT       write the hash in the given format"))
-  (format #t (_ "
+  (format #t (G_ "
       --no-check-certificate
                          do not validate the certificate of HTTPS servers "))
-  (format #f (_ "
+  (format #f (G_ "
   -o, --output=FILE      download to FILE"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -98,7 +98,7 @@ Supported formats: 'nix-base32' (default), 'base32', and 'base16'
                       ((or "base16" "hex" "hexadecimal")
                        bytevector->base16-string)
                       (x
-                       (leave (_ "unsupported hash format: ~a~%") arg))))
+                       (leave (G_ "unsupported hash format: ~a~%") arg))))
 
                   (alist-cons 'format fmt-proc
                               (alist-delete 'format result))))
@@ -130,10 +130,10 @@ Supported formats: 'nix-base32' (default), 'base32', and 'base16'
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (when (assq 'argument result)
-                    (leave (_ "~A: extraneous argument~%") arg))
+                    (leave (G_ "~A: extraneous argument~%") arg))
 
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -141,9 +141,9 @@ Supported formats: 'nix-base32' (default), 'base32', and 'base16'
   (with-error-handling
     (let* ((opts  (parse-options))
            (arg   (or (assq-ref opts 'argument)
-                      (leave (_ "no download URI was specified~%"))))
+                      (leave (G_ "no download URI was specified~%"))))
            (uri   (or (string->uri arg)
-                      (leave (_ "~a: failed to parse URI~%")
+                      (leave (G_ "~a: failed to parse URI~%")
                              arg)))
            (fetch (assq-ref opts 'download-proc))
            (path  (parameterize ((current-terminal-columns
@@ -153,7 +153,7 @@ Supported formats: 'nix-base32' (default), 'base32', and 'base16'
                            (assq-ref opts 'verify-certificate?))))
            (hash  (call-with-input-file
                       (or path
-                          (leave (_ "~a: download failed~%")
+                          (leave (G_ "~a: download failed~%")
                                  arg))
                     port-sha256))
            (fmt   (assq-ref opts 'format)))
index 555796a..8b2b61d 100644 (file)
                   (show-version-and-exit "guix edit")))))
 
 (define (show-help)
-  (display (_ "Usage: guix edit PACKAGE...
+  (display (G_ "Usage: guix edit PACKAGE...
 Start $VISUAL or $EDITOR to edit the definitions of PACKAGE...\n"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -59,7 +59,7 @@ Start $VISUAL or $EDITOR to edit the definitions of PACKAGE...\n"))
   (let ((absolute-file-name (search-path path file)))
     (unless absolute-file-name
       ;; Shouldn't happen unless somebody fiddled with the 'location' field.
-      (leave (_ "file '~a' not found in search path ~s~%")
+      (leave (G_ "file '~a' not found in search path ~s~%")
              file path))
     absolute-file-name))
 
@@ -78,7 +78,7 @@ line."
     ;; Return the list of package names.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 cons
                 '()))
 
@@ -87,7 +87,7 @@ line."
            (packages (map specification->package specs)))
       (for-each (lambda (package)
                   (unless (package-location package)
-                    (leave (_ "source location of package '~a' is unknown~%")
+                    (leave (G_ "source location of package '~a' is unknown~%")
                            (package-full-name package))))
                 packages)
 
@@ -100,5 +100,5 @@ line."
             (exit (system (string-join (cons (%editor) file-names))))))
         (lambda args
           (let ((errno (system-error-errno args)))
-            (leave (_ "failed to launch '~a': ~a~%")
+            (leave (G_ "failed to launch '~a': ~a~%")
                    (%editor) (strerror errno))))))))
index 5a6abd0..af69e2b 100644 (file)
@@ -72,7 +72,7 @@ as 'HOME' and 'USER' are left untouched."
 (define (create-environment profile paths pure?)
   "Set the environment variables specified by PATHS for PROFILE.  When PURE?
 is #t, unset the variables in the current environment.  Otherwise, augment
-existing enviroment variables with additional search paths."
+existing environment variables with additional search paths."
   (when pure? (purify-environment))
   (for-each (match-lambda
               ((($ <search-path-specification> variable _ separator) . value)
@@ -132,45 +132,45 @@ and an output string."
                 (package->bag package)))))
 
 (define (show-help)
-  (display (_ "Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...]
+  (display (G_ "Usage: guix environment [OPTION]... PACKAGE... [-- COMMAND...]
 Build an environment that includes the dependencies of PACKAGE and execute
 COMMAND or an interactive shell in that environment.\n"))
-  (display (_ "
+  (display (G_ "
   -e, --expression=EXPR  create environment for the package that EXPR
                          evaluates to"))
-  (display (_ "
+  (display (G_ "
   -l, --load=FILE        create environment for the package that the code within
                          FILE evaluates to"))
-  (display (_ "
+  (display (G_ "
       --ad-hoc           include all specified packages in the environment instead
                          of only their inputs"))
-  (display (_ "
+  (display (G_ "
       --pure             unset existing environment variables"))
-  (display (_ "
+  (display (G_ "
       --search-paths     display needed environment variable definitions"))
-  (display (_ "
+  (display (G_ "
   -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""))
-  (display (_ "
+  (display (G_ "
   -r, --root=FILE        make FILE a symlink to the result, and register it
                          as a garbage collector root"))
-  (display (_ "
+  (display (G_ "
   -C, --container        run command within an isolated container"))
-  (display (_ "
+  (display (G_ "
   -N, --network          allow containers to access the network"))
-  (display (_ "
+  (display (G_ "
       --share=SPEC       for containers, share writable host file system
                          according to SPEC"))
-  (display (_ "
+  (display (G_ "
       --expose=SPEC      for containers, expose read-only host file system
                          according to SPEC"))
-  (display (_ "
+  (display (G_ "
       --bootstrap        use bootstrap binaries to build the environment"))
   (newline)
   (show-build-options-help)
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -501,16 +501,16 @@ Otherwise, return the derivation for the Bash package."
   "Check if containers can be created and exit with an informative error
 message if any test fails."
   (unless (user-namespace-supported?)
-    (report-error (_ "cannot create container: user namespaces unavailable\n"))
-    (leave (_ "is your kernel version < 3.10?\n")))
+    (report-error (G_ "cannot create container: user namespaces unavailable\n"))
+    (leave (G_ "is your kernel version < 3.10?\n")))
 
   (unless (unprivileged-user-namespace-supported?)
-    (report-error (_ "cannot create container: unprivileged user cannot create user namespaces\n"))
-    (leave (_ "please set /proc/sys/kernel/unprivileged_userns_clone to \"1\"\n")))
+    (report-error (G_ "cannot create container: unprivileged user cannot create user namespaces\n"))
+    (leave (G_ "please set /proc/sys/kernel/unprivileged_userns_clone to \"1\"\n")))
 
   (unless (setgroups-supported?)
-    (report-error (_ "cannot create container: /proc/self/setgroups does not exist\n"))
-    (leave (_ "is your kernel version < 3.19?\n"))))
+    (report-error (G_ "cannot create container: /proc/self/setgroups does not exist\n"))
+    (leave (G_ "is your kernel version < 3.19?\n"))))
 
 (define (register-gc-root target root)
   "Make ROOT an indirect root to TARGET.  This is procedure is idempotent."
index bdfee43..221467a 100644 (file)
   `((action . collect-garbage)))
 
 (define (show-help)
-  (display (_ "Usage: guix gc [OPTION]... PATHS...
+  (display (G_ "Usage: guix gc [OPTION]... PATHS...
 Invoke the garbage collector.\n"))
-  (display (_ "
+  (display (G_ "
   -C, --collect-garbage[=MIN]
                          collect at least MIN bytes of garbage"))
-  (display (_ "
+  (display (G_ "
   -F, --free-space=FREE  attempt to reach FREE available space in the store"))
-  (display (_ "
+  (display (G_ "
   -d, --delete           attempt to delete PATHS"))
-  (display (_ "
+  (display (G_ "
       --optimize         optimize the store by deduplicating identical files"))
-  (display (_ "
+  (display (G_ "
       --list-dead        list dead paths"))
-  (display (_ "
+  (display (G_ "
       --list-live        list live paths"))
   (newline)
-  (display (_ "
+  (display (G_ "
       --references       list the references of PATHS"))
-  (display (_ "
+  (display (G_ "
   -R, --requisites       list the requisites of PATHS"))
-  (display (_ "
+  (display (G_ "
       --referrers        list the referrers of PATHS"))
   (newline)
-  (display (_ "
+  (display (G_ "
       --verify[=OPTS]    verify the integrity of the store; OPTS is a
                          comma-separated combination of 'repair' and
                          'contents'"))
-  (display (_ "
+  (display (G_ "
       --list-failures    list cached build failures"))
-  (display (_ "
+  (display (G_ "
       --clear-failures   remove PATHS from the set of cached failures"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -97,7 +97,7 @@ Invoke the garbage collector.\n"))
                       (let ((amount (size->number arg)))
                         (if arg
                             (alist-cons 'min-freed amount result)
-                            (leave (_ "invalid amount of storage: ~a~%")
+                            (leave (G_ "invalid amount of storage: ~a~%")
                                    arg))))
                      (#f result)))))
         (option '(#\F "free-space") #t #f
@@ -161,7 +161,7 @@ Invoke the garbage collector.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -188,10 +188,10 @@ Invoke the garbage collector.\n"))
            (free  (* (file-system-block-size fs)
                      (file-system-blocks-available fs))))
       (if (> free space)
-          (info (_ "already ~h bytes available on ~a, nothing to do~%")
+          (info (G_ "already ~h bytes available on ~a, nothing to do~%")
                 free (%store-prefix))
           (let ((to-free (- space free)))
-            (info (_ "freeing ~h bytes~%") to-free)
+            (info (G_ "freeing ~h bytes~%") to-free)
             (collect-garbage store to-free)))))
 
   (with-error-handling
@@ -203,7 +203,7 @@ Invoke the garbage collector.\n"))
                               opts)))
       (define (assert-no-extra-arguments)
         (unless (null? paths)
-          (leave (_ "extraneous arguments: ~{~a ~}~%") paths)))
+          (leave (G_ "extraneous arguments: ~{~a ~}~%") paths)))
 
       (define (list-relatives relatives)
         (for-each (compose (lambda (path)
@@ -223,10 +223,10 @@ Invoke the garbage collector.\n"))
              (ensure-free-space store free-space))
             (min-freed
              (let-values (((paths freed) (collect-garbage store min-freed)))
-              (info (_ "freed ~h bytes~%") freed)))
+              (info (G_ "freed ~h bytes~%") freed)))
             (else
              (let-values (((paths freed) (collect-garbage store)))
-              (info (_ "freed ~h bytes~%") freed))))))
+              (info (G_ "freed ~h bytes~%") freed))))))
         ((delete)
          (delete-paths store (map direct-store-path paths)))
         ((list-references)
index 9804d41..0af1fa3 100644 (file)
@@ -81,7 +81,7 @@ name."
      (raise
       (condition
        (&message
-        (message (format #f (_ "~a: invalid argument (package name expected)")
+        (message (format #f (G_ "~a: invalid argument (package name expected)")
                          x))))))))
 
 (define nodes-from-package
@@ -305,7 +305,7 @@ substitutes."
                  ((info)
                   (values (substitutable-references info) store))
                  (()
-                  (leave (_ "references for '~a' are not known~%")
+                  (leave (G_ "references for '~a' are not known~%")
                          item)))))
       (values (references store item) store))))
 
@@ -355,18 +355,18 @@ substitutes."
   (or (find (lambda (type)
               (string=? (node-type-name type) name))
             %node-types)
-      (leave (_ "~a: unknown node type~%") name)))
+      (leave (G_ "~a: unknown node type~%") name)))
 
 (define (lookup-backend name)
   "Return the graph backend called NAME.  Raise an error if it is not found."
   (or (find (lambda (backend)
               (string=? (graph-backend-name backend) name))
             %graph-backends)
-      (leave (_ "~a: unknown backend~%") name)))
+      (leave (G_ "~a: unknown backend~%") name)))
 
 (define (list-node-types)
   "Print the available node types along with their synopsis."
-  (display (_ "The available node types are:\n"))
+  (display (G_ "The available node types are:\n"))
   (newline)
   (for-each (lambda (type)
               (format #t "  - ~a: ~a~%"
@@ -376,7 +376,7 @@ substitutes."
 
 (define (list-backends)
   "Print the available backends along with their synopsis."
-  (display (_ "The available backend types are:\n"))
+  (display (G_ "The available backend types are:\n"))
   (newline)
   (for-each (lambda (backend)
               (format #t "  - ~a: ~a~%"
@@ -420,22 +420,22 @@ substitutes."
 (define (show-help)
   ;; TRANSLATORS: Here 'dot' is the name of a program; it must not be
   ;; translated.
-  (display (_ "Usage: guix graph PACKAGE...
+  (display (G_ "Usage: guix graph PACKAGE...
 Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"))
-  (display (_ "
+  (display (G_ "
   -b, --backend=TYPE     produce a graph with the given backend TYPE"))
-  (display (_ "
+  (display (G_ "
       --list-backends    list the available graph backends"))
-  (display (_ "
+  (display (G_ "
   -t, --type=TYPE        represent nodes of the given TYPE"))
-  (display (_ "
+  (display (G_ "
       --list-types       list the available graph types"))
-  (display (_ "
+  (display (G_ "
   -e, --expression=EXPR  consider the package EXPR evaluates to"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -453,7 +453,7 @@ Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"))
   (with-error-handling
     (let* ((opts     (args-fold* args %options
                                  (lambda (opt name arg . rest)
-                                   (leave (_ "~A: unrecognized option~%") name))
+                                   (leave (G_ "~A: unrecognized option~%") name))
                                  (lambda (arg result)
                                    (alist-cons 'argument arg result))
                                  %default-options))
index a048b53..1fa6bb8 100644 (file)
   `((format . ,bytevector->nix-base32-string)))
 
 (define (show-help)
-  (display (_ "Usage: guix hash [OPTION] FILE
+  (display (G_ "Usage: guix hash [OPTION] FILE
 Return the cryptographic hash of FILE.
 
 Supported formats: 'nix-base32' (default), 'base32', and 'base16' ('hex'
 and 'hexadecimal' can be used as well).\n"))
-  (format #t (_ "
+  (format #t (G_ "
   -x, --exclude-vcs      exclude version control directories"))
-  (format #t (_ "
+  (format #t (G_ "
   -f, --format=FMT       write the hash in the given format"))
-  (format #t (_ "
+  (format #t (G_ "
   -r, --recursive        compute the hash on FILE recursively"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -79,7 +79,7 @@ and 'hexadecimal' can be used as well).\n"))
                       ((or "base16" "hex" "hexadecimal")
                        bytevector->base16-string)
                       (x
-                       (leave (_ "unsupported hash format: ~a~%")
+                       (leave (G_ "unsupported hash format: ~a~%")
                               arg))))
 
                   (alist-cons 'format fmt-proc
@@ -106,7 +106,7 @@ and 'hexadecimal' can be used as well).\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "unrecognized option: ~a~%")
+                  (leave (G_ "unrecognized option: ~a~%")
                          name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
@@ -152,7 +152,7 @@ and 'hexadecimal' can be used as well).\n"))
          (lambda ()
            (format #t "~a~%" (fmt (file-hash file))))
          (lambda args
-           (leave (_ "~a~%")
+           (leave (G_ "~a~%")
                   (strerror (system-error-errno args))))))
       (x
-       (leave (_ "wrong number of arguments~%"))))))
+       (leave (G_ "wrong number of arguments~%"))))))
index 8c2f705..203cda8 100644 (file)
@@ -83,15 +83,15 @@ rather than \\n."
     (module-ref module proc)))
 
 (define (show-help)
-  (display (_ "Usage: guix import IMPORTER ARGS ...
+  (display (G_ "Usage: guix import IMPORTER ARGS ...
 Run IMPORTER with ARGS.\n"))
   (newline)
-  (display (_ "IMPORTER must be one of the importers listed below:\n"))
+  (display (G_ "IMPORTER must be one of the importers listed below:\n"))
   (newline)
   (format #t "~{   ~a~%~}" importers)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -100,7 +100,7 @@ Run IMPORTER with ARGS.\n"))
   (match args
     (()
      (format (current-error-port)
-             (_ "guix import: missing importer name~%")))
+             (G_ "guix import: missing importer name~%")))
     ((or ("-h") ("--help"))
      (show-help)
      (exit 0))
@@ -120,5 +120,5 @@ Run IMPORTER with ARGS.\n"))
                           (newline))
                         expressions))
              (x
-              (leave (_ "'~a' import failed~%") importer))))
-         (leave (_ "~a: invalid importer~%") importer)))))
+              (leave (G_ "'~a' import failed~%") importer))))
+         (leave (G_ "~a: invalid importer~%") importer)))))
index 3d470f6..77ffe1f 100644 (file)
   '())
 
 (define (show-help)
-  (display (_ "Usage: guix import cpan PACKAGE-NAME
+  (display (G_ "Usage: guix import cpan PACKAGE-NAME
 Import and convert the CPAN package for PACKAGE-NAME.\n"))
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -68,7 +68,7 @@ Import and convert the CPAN package for PACKAGE-NAME.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -83,10 +83,10 @@ Import and convert the CPAN package for PACKAGE-NAME.\n"))
       ((package-name)
        (let ((sexp (cpan->guix-package package-name)))
          (unless sexp
-           (leave (_ "failed to download meta-data for package '~a'~%")
+           (leave (G_ "failed to download meta-data for package '~a'~%")
                   package-name))
          sexp))
       (()
-       (leave (_ "too few arguments~%")))
+       (leave (G_ "too few arguments~%")))
       ((many ...)
-       (leave (_ "too many arguments~%"))))))
+       (leave (G_ "too many arguments~%"))))))
index c9a9eab..d65c644 100644 (file)
   '())
 
 (define (show-help)
-  (display (_ "Usage: guix import cran PACKAGE-NAME
+  (display (G_ "Usage: guix import cran PACKAGE-NAME
 Import and convert the CRAN package for PACKAGE-NAME.\n"))
-  (display (_ "
+  (display (G_ "
   -a, --archive=ARCHIVE  specify the archive repository"))
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -79,7 +79,7 @@ Import and convert the CRAN package for PACKAGE-NAME.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -105,10 +105,10 @@ Import and convert the CRAN package for PACKAGE-NAME.\n"))
            (let ((sexp (cran->guix-package package-name
                                            (or (assoc-ref opts 'repo) 'cran))))
              (unless sexp
-               (leave (_ "failed to download description for package '~a'~%")
+               (leave (G_ "failed to download description for package '~a'~%")
                       package-name))
              sexp)))
       (()
-       (leave (_ "too few arguments~%")))
+       (leave (G_ "too few arguments~%")))
       ((many ...)
-       (leave (_ "too many arguments~%"))))))
+       (leave (G_ "too many arguments~%"))))))
index 4337a0b..cab9a43 100644 (file)
   '())
 
 (define (show-help)
-  (display (_ "Usage: guix import crate PACKAGE-NAME
+  (display (G_ "Usage: guix import crate PACKAGE-NAME
 Import and convert the crate.io package for PACKAGE-NAME.\n"))
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -70,7 +70,7 @@ Import and convert the crate.io package for PACKAGE-NAME.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -85,10 +85,10 @@ Import and convert the crate.io package for PACKAGE-NAME.\n"))
       ((package-name)
        (let ((sexp (crate->guix-package package-name)))
          (unless sexp
-           (leave (_ "failed to download meta-data for package '~a'~%")
+           (leave (G_ "failed to download meta-data for package '~a'~%")
                   package-name))
          sexp))
       (()
-       (leave (_ "too few arguments~%")))
+       (leave (G_ "too few arguments~%")))
       ((many ...)
-       (leave (_ "too many arguments~%"))))))
+       (leave (G_ "too many arguments~%"))))))
index b22a7c4..34eb164 100644 (file)
   '((repo . gnu)))
 
 (define (show-help)
-  (display (_ "Usage: guix import elpa PACKAGE-NAME
+  (display (G_ "Usage: guix import elpa PACKAGE-NAME
 Import the latest package named PACKAGE-NAME from an ELPA repository.\n"))
-  (display (_ "
+  (display (G_ "
   -a, --archive=ARCHIVE          specify the archive repository"))
-  (display (_ "
+  (display (G_ "
   -h, --help                     display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version                  display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -74,7 +74,7 @@ Import the latest package named PACKAGE-NAME from an ELPA repository.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -89,11 +89,11 @@ Import the latest package named PACKAGE-NAME from an ELPA repository.\n"))
       ((package-name)
        (let ((sexp (elpa->guix-package package-name (assoc-ref opts 'repo))))
          (unless sexp
-           (leave (_ "failed to download package '~a'~%") package-name))
+           (leave (G_ "failed to download package '~a'~%") package-name))
          sexp))
       (()
-       (leave (_ "too few arguments~%")))
+       (leave (G_ "too few arguments~%")))
       ((many ...)
-       (leave (_ "too many arguments~%"))))))
+       (leave (G_ "too many arguments~%"))))))
 
 ;;; elpa.scm ends here
index a5dd2a7..349a0a0 100644 (file)
   '())
 
 (define (show-help)
-  (display (_ "Usage: guix import gem PACKAGE-NAME
+  (display (G_ "Usage: guix import gem PACKAGE-NAME
 Import and convert the RubyGems package for PACKAGE-NAME.\n"))
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -68,7 +68,7 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -83,10 +83,10 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n"))
       ((package-name)
        (let ((sexp (gem->guix-package package-name)))
          (unless sexp
-           (leave (_ "failed to download meta-data for package '~a'~%")
+           (leave (G_ "failed to download meta-data for package '~a'~%")
                   package-name))
          sexp))
       (()
-       (leave (_ "too few arguments~%")))
+       (leave (G_ "too few arguments~%")))
       ((many ...)
-       (leave (_ "too many arguments~%"))))))
+       (leave (G_ "too many arguments~%"))))))
index 66861f5..ae98370 100644 (file)
   '((key-download . interactive)))
 
 (define (show-help)
-  (display (_ "Usage: guix import gnu [OPTION...] PACKAGE
+  (display (G_ "Usage: guix import gnu [OPTION...] PACKAGE
 Return a package declaration template for PACKAGE, a GNU package.\n"))
   ;; '--key-download' taken from (guix scripts refresh).
-  (display (_ "
+  (display (G_ "
       --key-download=POLICY
                          handle missing OpenPGP keys according to POLICY:
                          'always', 'never', and 'interactive', which is also
                          used when 'key-download' is not specified"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -69,7 +69,7 @@ Return a package declaration template for PACKAGE, a GNU package.\n"))
                       (alist-cons 'key-download (string->symbol arg)
                                   result))
                      (x
-                      (leave (_ "unsupported policy: ~a~%")
+                      (leave (G_ "unsupported policy: ~a~%")
                              arg)))))
          %standard-import-options))
 
@@ -83,7 +83,7 @@ Return a package declaration template for PACKAGE, a GNU package.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -100,6 +100,6 @@ Return a package declaration template for PACKAGE, a GNU package.\n"))
          (gnu->guix-package name
                             #:key-download (assoc-ref opts 'key-download))))
       (x
-       (leave (_ "wrong number of arguments~%"))))))
+       (leave (G_ "wrong number of arguments~%"))))))
 
 ;;; gnu.scm ends here
index f2c2002..969f637 100644 (file)
     (cabal-environment . ,`(("impl" . ,ghc-default-version)))))
 
 (define (show-help)
-  (display (_ "Usage: guix import hackage PACKAGE-NAME
+  (display (G_ "Usage: guix import hackage PACKAGE-NAME
 Import and convert the Hackage package for PACKAGE-NAME.  If PACKAGE-NAME
 includes a suffix constituted by a at-sign followed by a numerical version (as
 used with Guix packages), then a definition for the specified version of the
 package will be generated.  If no version suffix is pecified, then the
 generated package definition will correspond to the latest available
 version.\n"))
-  (display (_ "
+  (display (G_ "
   -e ALIST, --cabal-environment=ALIST
                                specify environment for Cabal evaluation"))
-  (display (_ "
+  (display (G_ "
   -h, --help                   display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -s, --stdin                  read from standard input"))
-  (display (_ "
+  (display (G_ "
   -t, --no-test-dependencies   don't include test-only dependencies"))
-  (display (_ "
+  (display (G_ "
   -V, --version                display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -101,7 +101,7 @@ version.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -130,18 +130,18 @@ version.\n"))
           (()
            (run-importer "stdin" opts
                          (lambda ()
-                           (leave (_ "failed to import cabal file \
+                           (leave (G_ "failed to import cabal file \
 from standard input~%")))))
           ((many ...)
-           (leave (_ "too many arguments~%"))))
+           (leave (G_ "too many arguments~%"))))
         (match args
           ((package-name)
            (run-importer package-name opts
                          (lambda ()
-                           (leave (_ "failed to download cabal file \
+                           (leave (G_ "failed to download cabal file \
 for package '~a'~%")
                                   package-name))))
           (()
-           (leave (_ "too few arguments~%")))
+           (leave (G_ "too few arguments~%")))
           ((many ...)
-           (leave (_ "too many arguments~%")))))))
+           (leave (G_ "too many arguments~%")))))))
index 05e6e4b..45ca7e3 100644 (file)
   '())
 
 (define (show-help)
-  (display (_ "Usage: guix import nix NIXPKGS ATTRIBUTE
+  (display (G_ "Usage: guix import nix NIXPKGS ATTRIBUTE
 Import and convert the Nix expression ATTRIBUTE of NIXPKGS.\n"))
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -68,7 +68,7 @@ Import and convert the Nix expression ATTRIBUTE of NIXPKGS.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -87,4 +87,4 @@ Import and convert the Nix expression ATTRIBUTE of NIXPKGS.\n"))
                  (location-file loc) (location-line loc))
          expr))
       (x
-       (leave (_ "wrong number of arguments~%"))))))
+       (leave (G_ "wrong number of arguments~%"))))))
index 7166b01..59a925a 100644 (file)
   '())
 
 (define (show-help)
-  (display (_ "Usage: guix import pypi PACKAGE-NAME
+  (display (G_ "Usage: guix import pypi PACKAGE-NAME
 Import and convert the PyPI package for PACKAGE-NAME.\n"))
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -68,7 +68,7 @@ Import and convert the PyPI package for PACKAGE-NAME.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -83,10 +83,10 @@ Import and convert the PyPI package for PACKAGE-NAME.\n"))
       ((package-name)
        (let ((sexp (pypi->guix-package package-name)))
          (unless sexp
-           (leave (_ "failed to download meta-data for package '~a'~%")
+           (leave (G_ "failed to download meta-data for package '~a'~%")
                   package-name))
          sexp))
       (()
-       (leave (_ "too few arguments~%")))
+       (leave (G_ "too few arguments~%")))
       ((many ...)
-       (leave (_ "too many arguments~%"))))))
+       (leave (G_ "too many arguments~%"))))))
index f91b496..e6676e9 100644 (file)
     (include-test-dependencies? . #t)))
 
 (define (show-help)
-  (display (_ "Usage: guix import stackage PACKAGE-NAME
+  (display (G_ "Usage: guix import stackage PACKAGE-NAME
 Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
-  (display (_ "
+  (display (G_ "
   -r VERSION, --lts-version=VERSION
                                specify the LTS version to use"))
-  (display (_ "
+  (display (G_ "
   -h, --help                   display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -t, --no-test-dependencies   don't include test-only dependencies"))
-  (display (_ "
+  (display (G_ "
   -V, --version                display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -85,7 +85,7 @@ Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -105,12 +105,12 @@ Import and convert the LTS Stackage package for PACKAGE-NAME.\n"))
                      (assoc-ref opts 'include-test-dependencies?)
                      #:lts-version (assoc-ref opts 'lts-version))))
           (unless sexp
-            (leave (_ "failed to download cabal file for package '~a'~%")
+            (leave (G_ "failed to download cabal file for package '~a'~%")
                    package-name))
           sexp)))
       (()
-       (leave (_ "too few arguments~%")))
+       (leave (G_ "too few arguments~%")))
       ((many ...)
-       (leave (_ "too many arguments~%"))))))
+       (leave (G_ "too many arguments~%"))))))
 
 ;;; stackage.scm ends here
index 9e3e2ad..f2720f6 100644 (file)
@@ -132,11 +132,11 @@ monad."
 
 (define (list-checkers-and-exit)
   ;; Print information about all available checkers and exit.
-  (format #t (_ "Available checkers:~%"))
+  (format #t (G_ "Available checkers:~%"))
   (for-each (lambda (checker)
               (format #t "- ~a: ~a~%"
                       (lint-checker-name checker)
-                      (_ (lint-checker-description checker))))
+                      (G_ (lint-checker-description checker))))
             %checkers)
   (exit 0))
 
@@ -156,7 +156,7 @@ monad."
   (define (check-not-empty description)
     (when (string-null? description)
       (emit-warning package
-                    (_ "description should not be empty")
+                    (G_ "description should not be empty")
                     'description)))
 
   (define (check-texinfo-markup description)
@@ -166,7 +166,7 @@ markup is valid return a plain-text version of DESCRIPTION, otherwise #f."
       (lambda () (texi->plain-text description))
       (lambda (keys . args)
         (emit-warning package
-                      (_ "Texinfo markup in description is invalid")
+                      (G_ "Texinfo markup in description is invalid")
                       'description)
         #f)))
 
@@ -176,7 +176,7 @@ http://www.gnu.org/prep/standards/html_node/Trademarks.html."
     (match (string-index description (char-set #\™ #\®))
       ((and (? number?) index)
        (emit-warning package
-                     (format #f (_ "description should not contain ~
+                     (format #f (G_ "description should not contain ~
 trademark sign '~a' at ~d")
                              (string-ref description index) index)
                      'description))
@@ -189,14 +189,14 @@ trademark sign '~a' at ~d")
 
                     ;; TRANSLATORS: '@code' is Texinfo markup and must be kept
                     ;; as is.
-                    (_ "use @code or similar ornament instead of quotes")
+                    (G_ "use @code or similar ornament instead of quotes")
                     'description)))
 
   (define (check-proper-start description)
     (unless (or (properly-starts-sentence? description)
                 (string-prefix-ci? (package-name package) description))
       (emit-warning package
-                    (_ "description should start with an upper-case letter or digit")
+                    (G_ "description should start with an upper-case letter or digit")
                     'description)))
 
   (define (check-end-of-sentence-space description)
@@ -212,7 +212,7 @@ trademark sign '~a' at ~d")
                            r (cons (match:start m) r)))))))
       (unless (null? infractions)
         (emit-warning package
-                      (format #f (_ "sentences in description should be followed ~
+                      (format #f (G_ "sentences in description should be followed ~
 by two spaces; possible infraction~p at ~{~a~^, ~}")
                               (length infractions)
                               infractions)
@@ -230,7 +230,7 @@ by two spaces; possible infraction~p at ~{~a~^, ~}")
           (and=> (check-texinfo-markup description)
                  check-proper-start))
         (emit-warning package
-                      (format #f (_ "invalid description: ~s") description)
+                      (format #f (G_ "invalid description: ~s") description)
                       'description))))
 
 (define (package-input-intersection inputs-to-check input-names)
@@ -274,7 +274,7 @@ of a package, and INPUT-NAMES, a list of package specifications such as
     (for-each (lambda (input)
                 (emit-warning
                  package
-                 (format #f (_ "'~a' should probably be a native input")
+                 (format #f (G_ "'~a' should probably be a native input")
                          input)
                  'inputs-to-check))
               (package-input-intersection inputs input-names))))
@@ -290,7 +290,7 @@ of a package, and INPUT-NAMES, a list of package specifications such as
                 (emit-warning
                  package
                  (format #f
-                         (_ "'~a' should probably not be an input at all")
+                         (G_ "'~a' should probably not be an input at all")
                          input)))
               (package-input-intersection (package-direct-inputs package)
                                           input-names))))
@@ -307,7 +307,7 @@ line."
   (define (check-not-empty synopsis)
     (when (string-null? synopsis)
       (emit-warning package
-                    (_ "synopsis should not be empty")
+                    (G_ "synopsis should not be empty")
                     'synopsis)))
 
   (define (check-final-period synopsis)
@@ -315,7 +315,7 @@ line."
     (when (and (string-suffix? "." synopsis)
                (not (string-suffix? "etc." synopsis)))
       (emit-warning package
-                    (_ "no period allowed at the end of the synopsis")
+                    (G_ "no period allowed at the end of the synopsis")
                     'synopsis)))
 
   (define check-start-article
@@ -327,27 +327,27 @@ line."
           (when (or (string-prefix-ci? "A " synopsis)
                     (string-prefix-ci? "An " synopsis))
             (emit-warning package
-                          (_ "no article allowed at the beginning of \
+                          (G_ "no article allowed at the beginning of \
 the synopsis")
                           'synopsis)))))
 
   (define (check-synopsis-length synopsis)
     (when (>= (string-length synopsis) 80)
       (emit-warning package
-                    (_ "synopsis should be less than 80 characters long")
+                    (G_ "synopsis should be less than 80 characters long")
                     'synopsis)))
 
   (define (check-proper-start synopsis)
     (unless (properly-starts-sentence? synopsis)
       (emit-warning package
-                    (_ "synopsis should start with an upper-case letter or digit")
+                    (G_ "synopsis should start with an upper-case letter or digit")
                     'synopsis)))
 
   (define (check-start-with-package-name synopsis)
     (when (and (regexp-exec (package-name-regexp package) synopsis)
                (not (starts-with-abbreviation? synopsis)))
       (emit-warning package
-                    (_ "synopsis should not start with the package name")
+                    (G_ "synopsis should not start with the package name")
                     'synopsis)))
 
   (define (check-texinfo-markup synopsis)
@@ -357,7 +357,7 @@ markup is valid return a plain-text version of SYNOPSIS, otherwise #f."
       (lambda () (texi->plain-text synopsis))
       (lambda (keys . args)
         (emit-warning package
-                      (_ "Texinfo markup in synopsis is invalid")
+                      (G_ "Texinfo markup in synopsis is invalid")
                       'synopsis)
         #f)))
 
@@ -376,7 +376,7 @@ markup is valid return a plain-text version of SYNOPSIS, otherwise #f."
                  (proc synopsis))
                checks))
     (invalid
-     (emit-warning package (format #f (_ "invalid synopsis: ~s") invalid)
+     (emit-warning package (format #f (G_ "invalid synopsis: ~s") invalid)
                    'synopsis))))
 
 (define* (probe-uri uri #:key timeout)
@@ -476,7 +476,7 @@ warning for PACKAGE mentionning the FIELD."
                   (begin
                     (emit-warning package
                                   (format #f
-                                          (_ "URI ~a returned \
+                                          (G_ "URI ~a returned \
 suspiciously small file (~a bytes)")
                                           (uri->string uri)
                                           length))
@@ -485,7 +485,7 @@ suspiciously small file (~a bytes)")
            (begin
              (emit-warning package
                            (format #f
-                                   (_ "URI ~a not reachable: ~a (~s)")
+                                   (G_ "URI ~a not reachable: ~a (~s)")
                                    (uri->string uri)
                                    (response-code argument)
                                    (response-reason-phrase argument))
@@ -497,14 +497,14 @@ suspiciously small file (~a bytes)")
          (('error port command code message)
           (emit-warning package
                         (format #f
-                                (_ "URI ~a not reachable: ~a (~s)")
+                                (G_ "URI ~a not reachable: ~a (~s)")
                                 (uri->string uri)
                                 code (string-trim-both message)))
           #f)))
       ((getaddrinfo-error)
        (emit-warning package
                      (format #f
-                             (_ "URI ~a domain not found: ~a")
+                             (G_ "URI ~a domain not found: ~a")
                              (uri->string uri)
                              (gai-strerror (car argument)))
                      field)
@@ -512,7 +512,7 @@ suspiciously small file (~a bytes)")
       ((system-error)
        (emit-warning package
                      (format #f
-                             (_ "URI ~a unreachable: ~a")
+                             (G_ "URI ~a unreachable: ~a")
                              (uri->string uri)
                              (strerror
                               (system-error-errno
@@ -521,7 +521,7 @@ suspiciously small file (~a bytes)")
        #f)
       ((tls-certificate-error)
        (emit-warning package
-                     (format #f (_ "TLS certificate error: ~a")
+                     (format #f (G_ "TLS certificate error: ~a")
                              (tls-certificate-error-string argument))))
       ((invalid-http-response gnutls-error)
        ;; Probably a misbehaving server; ignore.
@@ -542,10 +542,10 @@ suspiciously small file (~a bytes)")
       (unless (or (string-contains (package-name package) "bootstrap")
                   (string=? (package-name package) "ld-wrapper"))
         (emit-warning package
-                      (_ "invalid value for home page")
+                      (G_ "invalid value for home page")
                       'home-page)))
      (else
-      (emit-warning package (format #f (_ "invalid home page URL: ~s")
+      (emit-warning package (format #f (G_ "invalid home page URL: ~s")
                                     (package-home-page package))
                     'home-page)))))
 
@@ -565,7 +565,7 @@ patch could not be found."
                        '()))
       (emit-warning
        package
-       (_ "file names of patches should start with the package name")
+       (G_ "file names of patches should start with the package name")
        'patch-file-names))))
 
 (define (escape-quotes str)
@@ -603,7 +603,7 @@ descriptions maintained upstream."
                   (or (not (string? downstream))
                       (not (string=? upstream downstream))))
          (format (guix-warning-port)
-                 (_ "~a: ~a: proposed synopsis: ~s~%")
+                 (G_ "~a: ~a: proposed synopsis: ~s~%")
                  (location->string loc) (package-full-name package)
                  upstream)))
 
@@ -616,7 +616,7 @@ descriptions maintained upstream."
                       (not (string=? (fill-paragraph upstream 100)
                                      (fill-paragraph downstream 100)))))
          (format (guix-warning-port)
-                 (_ "~a: ~a: proposed description:~%     \"~a\"~%")
+                 (G_ "~a: ~a: proposed description:~%     \"~a\"~%")
                  (location->string loc) (package-full-name package)
                  (fill-paragraph (escape-quotes upstream) 77 7)))))))
 
@@ -658,7 +658,7 @@ descriptions maintained upstream."
             ;; where *all* the URIs are unreachable.
             (unless success?
               (emit-warning package
-                            (_ "all the source URIs are unreachable:")
+                            (G_ "all the source URIs are unreachable:")
                             'source)
               (for-each (lambda (warning)
                           (display warning (guix-warning-port)))
@@ -681,7 +681,7 @@ descriptions maintained upstream."
   (let ((origin (package-source package)))
     (unless (or (not origin) (origin-file-name-valid? origin))
       (emit-warning package
-                    (_ "the source file name should contain the package name")
+                    (G_ "the source file name should contain the package name")
                     'source))))
 
 (define (check-mirror-url package)
@@ -697,7 +697,7 @@ descriptions maintained upstream."
             (loop rest))
            (prefix
             (emit-warning package
-                          (format #f (_ "URL should be \
+                          (format #f (G_ "URL should be \
 'mirror://~a/~a'")
                                   mirror-id
                                   (string-drop uri (string-length prefix)))
@@ -715,11 +715,11 @@ descriptions maintained upstream."
     (lambda ()
       (guard (c ((nix-protocol-error? c)
                  (emit-warning package
-                               (format #f (_ "failed to create derivation: ~a")
+                               (format #f (G_ "failed to create derivation: ~a")
                                        (nix-protocol-error-message c))))
                 ((message-condition? c)
                  (emit-warning package
-                               (format #f (_ "failed to create derivation: ~a")
+                               (format #f (G_ "failed to create derivation: ~a")
                                        (condition-message c)))))
         (with-store store
           ;; Disable grafts since it can entail rebuilds.
@@ -733,7 +733,7 @@ descriptions maintained upstream."
              (package-derivation store replacement #:graft? #f))))))
     (lambda args
       (emit-warning package
-                    (format #f (_ "failed to create derivation: ~s~%")
+                    (format #f (G_ "failed to create derivation: ~s~%")
                             args)))))
 
 (define (check-license package)
@@ -743,7 +743,7 @@ descriptions maintained upstream."
          ((? license?) ...))
      #t)
     (x
-     (emit-warning package (_ "invalid license field")
+     (emit-warning package (G_ "invalid license field")
                    'license))))
 
 (define (patch-file-name patch)
@@ -760,26 +760,26 @@ be determined."
 or HTTP errors.  This allows network-less operation and makes problems with
 the NIST server non-fatal.."
   (guard (c ((http-get-error? c)
-             (warning (_ "failed to retrieve CVE vulnerabilities \
+             (warning (G_ "failed to retrieve CVE vulnerabilities \
 from ~s: ~a (~s)~%")
                       (uri->string (http-get-error-uri c))
                       (http-get-error-code c)
                       (http-get-error-reason c))
-             (warning (_ "assuming no CVE vulnerabilities~%"))
+             (warning (G_ "assuming no CVE vulnerabilities~%"))
              '()))
     (catch #t
       (lambda ()
         (current-vulnerabilities))
       (match-lambda*
         (('getaddrinfo-error errcode)
-         (warning (_ "failed to lookup NIST host: ~a~%")
+         (warning (G_ "failed to lookup NIST host: ~a~%")
                   (gai-strerror errcode))
-         (warning (_ "assuming no CVE vulnerabilities~%"))
+         (warning (G_ "assuming no CVE vulnerabilities~%"))
          '())
         (('tls-certificate-error args ...)
-         (warning (_ "TLS certificate error: ~a")
+         (warning (G_ "TLS certificate error: ~a")
                   (tls-certificate-error-string args))
-         (warning (_ "assuming no CVE vulnerabilities~%"))
+         (warning (G_ "assuming no CVE vulnerabilities~%"))
          '())
         (args
          (apply throw args))))))
@@ -817,7 +817,7 @@ from ~s: ~a (~s)~%")
                                  vulnerabilities)))
          (unless (null? unpatched)
            (emit-warning package
-                         (format #f (_ "probably vulnerable to ~a")
+                         (format #f (G_ "probably vulnerable to ~a")
                                  (string-join (map vulnerability-id unpatched)
                                               ", ")))))))))
 
@@ -832,7 +832,7 @@ from ~s: ~a (~s)~%")
     (#f #t)
     (index
      (emit-warning package
-                   (format #f (_ "tabulation on line ~a, column ~a")
+                   (format #f (G_ "tabulation on line ~a, column ~a")
                            line-number index)))))
 
 (define (report-trailing-white-space package line line-number)
@@ -841,7 +841,7 @@ from ~s: ~a (~s)~%")
               (string=? line (string #\page)))
     (emit-warning package
                   (format #f
-                          (_ "trailing white space on line ~a")
+                          (G_ "trailing white space on line ~a")
                           line-number))))
 
 (define (report-long-line package line line-number)
@@ -851,7 +851,7 @@ from ~s: ~a (~s)~%")
   ;; much noise.
   (when (> (string-length line) 90)
     (emit-warning package
-                  (format #f (_ "line ~a is way too long (~a characters)")
+                  (format #f (G_ "line ~a is way too long (~a characters)")
                           line-number (string-length line)))))
 
 (define %hanging-paren-rx
@@ -862,7 +862,7 @@ from ~s: ~a (~s)~%")
   (when (regexp-exec %hanging-paren-rx line)
     (emit-warning package
                   (format #f
-                          (_ "line ~a: parentheses feel lonely, \
+                          (G_ "line ~a: parentheses feel lonely, \
 move to the previous or next line")
                           line-number))))
 
@@ -1001,17 +1001,17 @@ or a list thereof")
   '())
 
 (define (show-help)
-  (display (_ "Usage: guix lint [OPTION]... [PACKAGE]...
+  (display (G_ "Usage: guix lint [OPTION]... [PACKAGE]...
 Run a set of checkers on the specified package; if none is specified,
 run the checkers on all packages.\n"))
-  (display (_ "
+  (display (G_ "
   -c, --checkers=CHECKER1,CHECKER2...
                          only run the specified checkers"))
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -l, --list-checkers    display the list of available lint checkers"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -1029,7 +1029,7 @@ run the checkers on all packages.\n"))
                                 (unless (memq c
                                               (map lint-checker-name
                                                    %checkers))
-                                  (leave (_ "~a: invalid checker~%") c)))
+                                  (leave (G_ "~a: invalid checker~%") c)))
                               names)
                     (alist-cons 'checkers
                                 (filter (lambda (checker)
@@ -1058,7 +1058,7 @@ run the checkers on all packages.\n"))
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
index acdfb81..74c0c54 100644 (file)
@@ -130,14 +130,14 @@ determined."
            ;; Silently ignore missing file since this is a common case.
            (if (= ENOENT err)
                '()
-               (leave (_ "failed to open machine file '~a': ~a~%")
+               (leave (G_ "failed to open machine file '~a': ~a~%")
                       file (strerror err)))))
         (('syntax-error proc message properties form . rest)
          (let ((loc (source-properties->location properties)))
-           (leave (_ "~a: ~a~%")
+           (leave (G_ "~a: ~a~%")
                   (location->string loc) message)))
         (x
-         (leave (_ "failed to load machine file '~a': ~s~%")
+         (leave (G_ "failed to load machine file '~a': ~s~%")
                 file args))))))
 
 (define (host-key->type+key host-key)
@@ -161,7 +161,7 @@ can interpret meaningfully."
       (private-key-from-file file))
     (lambda (key proc str . rest)
       (raise (condition
-              (&message (message (format #f (_ "failed to load SSH \
+              (&message (message (format #f (G_ "failed to load SSH \
 private key from '~a': ~a")
                                          file str))))))))
 
@@ -204,7 +204,7 @@ private key from '~a': ~a")
                       (string=? (public-key->string server) key))
            ;; Key mismatch: something's wrong.  XXX: It could be that the server
            ;; provided its Ed25519 key when we where expecting its RSA key.
-           (leave (_ "server at '~a' returned host key '~a' of type '~a' \
+           (leave (G_ "server at '~a' returned host key '~a' of type '~a' \
 instead of '~a' of type '~a'~%")
                   (build-machine-name machine)
                   (public-key->string server) (get-key-type server)
@@ -213,13 +213,13 @@ instead of '~a' of type '~a'~%")
        (let ((auth (userauth-public-key! session private)))
          (unless (eq? 'success auth)
            (disconnect! session)
-           (leave (_ "SSH public key authentication failed for '~a': ~a~%")
+           (leave (G_ "SSH public key authentication failed for '~a': ~a~%")
                   (build-machine-name machine) (get-error session))))
 
        session)
       (x
        ;; Connection failed or timeout expired.
-       (leave (_ "failed to connect to '~a': ~a~%")
+       (leave (G_ "failed to connect to '~a': ~a~%")
               (build-machine-name machine) (get-error session))))))
 
 \f
@@ -346,7 +346,7 @@ MACHINE."
 
   (guard (c ((nix-protocol-error? c)
              (format (current-error-port)
-                     (_ "derivation '~a' offloaded to '~a' failed: ~a~%")
+                     (G_ "derivation '~a' offloaded to '~a' failed: ~a~%")
                      (derivation-file-name drv)
                      (build-machine-name machine)
                      (nix-protocol-error-message c))
@@ -530,11 +530,11 @@ allowed on MACHINE.  Return +∞ if MACHINE is unreachable."
   "Bail out if NODE is not running Guile."
   (match (node-guile-version node)
     (#f
-     (leave (_ "Guile could not be started on '~a'~%")
+     (leave (G_ "Guile could not be started on '~a'~%")
             name))
     ((? string? version)
      ;; Note: The version string already contains the word "Guile".
-     (info (_ "'~a' is running ~a~%")
+     (info (G_ "'~a' is running ~a~%")
            name (node-guile-version node)))))
 
 (define (assert-node-has-guix node name)
@@ -546,10 +546,10 @@ allowed on MACHINE.  Return +∞ if MACHINE is unreachable."
                          (add-text-to-store store "test"
                                             "Hello, build machine!"))))
     ((? string? str)
-     (info (_ "Guix is usable on '~a' (test returned ~s)~%")
+     (info (G_ "Guix is usable on '~a' (test returned ~s)~%")
            name str))
     (x
-     (leave (_ "failed to use Guix module on '~a' (test returned ~s)~%")
+     (leave (G_ "failed to use Guix module on '~a' (test returned ~s)~%")
             name x))))
 
 (define %random-state
@@ -570,9 +570,9 @@ allowed on MACHINE.  Return +∞ if MACHINE is unreachable."
           (send-files local (list item) remote))
 
         (if (valid-path? remote item)
-            (info (_ "'~a' successfully imported '~a'~%")
+            (info (G_ "'~a' successfully imported '~a'~%")
                   name item)
-            (leave (_ "'~a' was not properly imported on '~a'~%")
+            (leave (G_ "'~a' was not properly imported on '~a'~%")
                    item name))))))
 
 (define (assert-node-can-export node name daemon-socket)
@@ -583,9 +583,9 @@ allowed on MACHINE.  Return +∞ if MACHINE is unreachable."
     (with-store store
       (if (and (retrieve-files store (list item) remote)
                (valid-path? store item))
-          (info (_ "successfully imported '~a' from '~a'~%")
+          (info (G_ "successfully imported '~a' from '~a'~%")
                 item name)
-          (leave (_ "failed to import '~a' from '~a'~%")
+          (leave (G_ "failed to import '~a' from '~a'~%")
                  item name)))))
 
 (define (check-machine-availability machine-file pred)
@@ -600,7 +600,7 @@ machine."
   (let ((machines (filter pred
                           (delete-duplicates (build-machines machine-file)
                                              build-machine=?))))
-    (info (_ "testing ~a build machines defined in '~a'...~%")
+    (info (G_ "testing ~a build machines defined in '~a'...~%")
           (length machines) machine-file)
     (let* ((names    (map build-machine-name machines))
            (sockets  (map build-machine-daemon-socket machines))
@@ -633,8 +633,8 @@ machine."
   ;; We rely on protocol-level compression from libssh to optimize large data
   ;; transfers.  Warn if it's missing.
   (unless (zlib-support?)
-    (warning (_ "Guile-SSH lacks zlib support"))
-    (warning (_ "data transfers will *not* be compressed!")))
+    (warning (G_ "Guile-SSH lacks zlib support"))
+    (warning (G_ "data transfers will *not* be compressed!")))
 
   (match args
     ((system max-silent-time print-build-trace? build-timeout)
@@ -659,7 +659,7 @@ machine."
                                         #:max-silent-time max-silent-time
                                         #:build-timeout build-timeout))))
                    (else
-                    (leave (_ "invalid request line: ~s~%") line)))
+                    (leave (G_ "invalid request line: ~s~%") line)))
              (loop (read-line)))))))
     (("test" rest ...)
      (with-error-handling
@@ -671,20 +671,20 @@ machine."
                                          build-machine-name)))
                        ((file) (values file (const #t)))
                        (()     (values %machine-file (const #t)))
-                       (x      (leave (_ "wrong number of arguments~%"))))))
+                       (x      (leave (G_ "wrong number of arguments~%"))))))
          (check-machine-availability (or file %machine-file) pred))))
     (("--version")
      (show-version-and-exit "guix offload"))
     (("--help")
-     (format #t (_ "Usage: guix offload SYSTEM PRINT-BUILD-TRACE
+     (format #t (G_ "Usage: guix offload SYSTEM PRINT-BUILD-TRACE
 Process build offload requests written on the standard input, possibly
 offloading builds to the machines listed in '~a'.~%")
              %machine-file)
-     (display (_ "
+     (display (G_ "
 This tool is meant to be used internally by 'guix-daemon'.\n"))
      (show-bug-report-information))
     (x
-     (leave (_ "invalid arguments: ~{~s ~}~%") x))))
+     (leave (G_ "invalid arguments: ~{~s ~}~%") x))))
 
 ;;; Local Variables:
 ;;; eval: (put 'with-machine-lock 'scheme-indent-function 2)
index 165e4cc..1595be1 100644 (file)
@@ -71,7 +71,7 @@ found."
               (($ <compressor> name*)
                (string=? name* name)))
             %compressors)
-      (leave (_ "~a: compressor not found~%") name)))
+      (leave (G_ "~a: compressor not found~%") name)))
 
 (define* (self-contained-tarball name profile
                                  #:key target
@@ -307,7 +307,7 @@ the image."
                                     `((,source -> ,target) ,@symlinks)
                                     (alist-delete 'symlinks result eq?))))
                      (x
-                      (leave (_ "~a: invalid symlink specification~%")
+                      (leave (G_ "~a: invalid symlink specification~%")
                              arg)))))
          (option '("localstatedir") #f #f
                  (lambda (opt name arg result)
@@ -317,30 +317,30 @@ the image."
                  %standard-build-options)))
 
 (define (show-help)
-  (display (_ "Usage: guix pack [OPTION]... PACKAGE...
+  (display (G_ "Usage: guix pack [OPTION]... PACKAGE...
 Create a bundle of PACKAGE.\n"))
   (show-build-options-help)
   (newline)
   (show-transformation-options-help)
   (newline)
-  (display (_ "
+  (display (G_ "
   -f, --format=FORMAT    build a pack in the given FORMAT"))
-  (display (_ "
+  (display (G_ "
   -e, --expression=EXPR  consider the package EXPR evaluates to"))
-  (display (_ "
+  (display (G_ "
   -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""))
-  (display (_ "
+  (display (G_ "
       --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""))
-  (display (_ "
+  (display (G_ "
   -C, --compression=TOOL compress using TOOL--e.g., \"lzip\""))
-  (display (_ "
+  (display (G_ "
   -S, --symlink=SPEC     create symlinks to the profile according to SPEC"))
-  (display (_ "
+  (display (G_ "
       --localstatedir    include /var/guix in the resulting pack"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -379,7 +379,7 @@ Create a bundle of PACKAGE.\n"))
              (build-image (match (assq-ref %formats pack-format)
                             ((? procedure? proc) proc)
                             (#f
-                             (leave (_ "~a: unknown pack format")
+                             (leave (G_ "~a: unknown pack format")
                                     format))))
              (localstatedir? (assoc-ref opts 'localstatedir?)))
         (with-store store
index 6be9d00..1f3f49f 100644 (file)
@@ -104,7 +104,7 @@ indirectly, or PROFILE."
 
   (define (rtfm)
     (format (current-error-port)
-            (_ "Try \"info '(guix) Invoking guix package'\" for \
+            (G_ "Try \"info '(guix) Invoking guix package'\" for \
 more information.~%"))
     (exit 1))
 
@@ -126,21 +126,21 @@ more information.~%"))
           ;; parent directory is root-owned and we're running
           ;; unprivileged.
           (format (current-error-port)
-                  (_ "error: while creating directory `~a': ~a~%")
+                  (G_ "error: while creating directory `~a': ~a~%")
                   %profile-directory
                   (strerror (system-error-errno args)))
           (format (current-error-port)
-                  (_ "Please create the `~a' directory, with you as the owner.~%")
+                  (G_ "Please create the `~a' directory, with you as the owner.~%")
                   %profile-directory)
           (rtfm))))
 
     ;; Bail out if it's not owned by the user.
     (unless (or (not s) (= (stat:uid s) (getuid)))
       (format (current-error-port)
-              (_ "error: directory `~a' is not owned by you~%")
+              (G_ "error: directory `~a' is not owned by you~%")
               %profile-directory)
       (format (current-error-port)
-              (_ "Please change the owner of `~a' to user ~s.~%")
+              (G_ "Please change the owner of `~a' to user ~s.~%")
               %profile-directory (or (getenv "USER")
                                      (getenv "LOGNAME")
                                      (getuid)))
@@ -175,17 +175,17 @@ denote ranges as interpreted by 'matching-generations'."
            =>
            (lambda (numbers)
              (when (memv current numbers)
-               (warning (_ "not removing generation ~a, which is current~%")
+               (warning (G_ "not removing generation ~a, which is current~%")
                         current))
 
              ;; Make sure we don't inadvertently remove the current
              ;; generation.
              (let ((numbers (delv current numbers)))
                (when (null-list? numbers)
-                 (leave (_ "no matching generation~%")))
+                 (leave (G_ "no matching generation~%")))
                (delete-generations store profile numbers))))
           (else
-           (leave (_ "invalid syntax: ~a~%") pattern)))))
+           (leave (G_ "invalid syntax: ~a~%") pattern)))))
 
 (define* (build-and-use-profile store profile manifest
                                 #:key
@@ -211,7 +211,7 @@ specified in MANIFEST, a manifest object."
      (dry-run? #t)
      ((and (file-exists? profile)
            (and=> (readlink* profile) (cut string=? prof <>)))
-      (format (current-error-port) (_ "nothing to be done~%")))
+      (format (current-error-port) (G_ "nothing to be done~%")))
      (else
       (let* ((number (generation-number profile))
 
@@ -269,7 +269,7 @@ synopsis or description matches all of REGEXPS."
   "Return a variant of TRANSACTION that accounts for the upgrade of ENTRY, a
 <manifest-entry>."
   (define (supersede old new)
-    (info (_ "package '~a' has been superseded by '~a'~%")
+    (info (G_ "package '~a' has been superseded by '~a'~%")
           (manifest-entry-name old) (package-name new))
     (manifest-transaction-install-entry
      (package->manifest-entry new (manifest-entry-output old))
@@ -341,7 +341,7 @@ ENTRIES, a list of manifest entries, in the context of PROFILE."
          (settings (search-path-environment-variables entries profiles
                                                       #:kind kind)))
     (unless (null? settings)
-      (format #t (_ "The following environment variable definitions may be needed:~%"))
+      (format #t (G_ "The following environment variable definitions may be needed:~%"))
       (format #t "~{   ~a~%~}" settings))))
 
 \f
@@ -357,68 +357,68 @@ ENTRIES, a list of manifest entries, in the context of PROFILE."
     (substitutes? . #t)))
 
 (define (show-help)
-  (display (_ "Usage: guix package [OPTION]...
+  (display (G_ "Usage: guix package [OPTION]...
 Install, remove, or upgrade packages in a single transaction.\n"))
-  (display (_ "
+  (display (G_ "
   -i, --install PACKAGE ...
                          install PACKAGEs"))
-  (display (_ "
+  (display (G_ "
   -e, --install-from-expression=EXP
                          install the package EXP evaluates to"))
-  (display (_ "
+  (display (G_ "
   -f, --install-from-file=FILE
                          install the package that the code within FILE
                          evaluates to"))
-  (display (_ "
+  (display (G_ "
   -r, --remove PACKAGE ...
                          remove PACKAGEs"))
-  (display (_ "
+  (display (G_ "
   -u, --upgrade[=REGEXP] upgrade all the installed packages matching REGEXP"))
-  (display (_ "
+  (display (G_ "
   -m, --manifest=FILE    create a new profile generation with the manifest
                          from FILE"))
-  (display (_ "
+  (display (G_ "
       --do-not-upgrade[=REGEXP] do not upgrade any packages matching REGEXP"))
-  (display (_ "
+  (display (G_ "
       --roll-back        roll back to the previous generation"))
-  (display (_ "
+  (display (G_ "
       --search-paths[=KIND]
                          display needed environment variable definitions"))
-  (display (_ "
+  (display (G_ "
   -l, --list-generations[=PATTERN]
                          list generations matching PATTERN"))
-  (display (_ "
+  (display (G_ "
   -d, --delete-generations[=PATTERN]
                          delete generations matching PATTERN"))
-  (display (_ "
+  (display (G_ "
   -S, --switch-generation=PATTERN
                          switch to a generation matching PATTERN"))
-  (display (_ "
+  (display (G_ "
   -p, --profile=PROFILE  use PROFILE instead of the user's default profile"))
   (newline)
-  (display (_ "
+  (display (G_ "
       --bootstrap        use the bootstrap Guile to build the profile"))
-  (display (_ "
+  (display (G_ "
       --verbose          produce verbose output"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -s, --search=REGEXP    search in synopsis and description using REGEXP"))
-  (display (_ "
+  (display (G_ "
   -I, --list-installed[=REGEXP]
                          list installed packages matching REGEXP"))
-  (display (_ "
+  (display (G_ "
   -A, --list-available[=REGEXP]
                          list available packages matching REGEXP"))
-  (display (_ "
+  (display (G_ "
       --show=PACKAGE     show details about PACKAGE"))
   (newline)
   (show-build-options-help)
   (newline)
   (show-transformation-options-help)
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -504,7 +504,7 @@ Install, remove, or upgrade packages in a single transaction.\n"))
                                  (#f
                                   'exact)
                                  (x
-                                  (leave (_ "~a: unsupported \
+                                  (leave (G_ "~a: unsupported \
 kind of search path~%")
                                          x)))))
                      (values (cons `(query search-paths ,kind)
@@ -697,7 +697,7 @@ processed, #f otherwise."
                      (list-generation display-profile-content (car numbers))
                      (diff-profiles profile numbers)))))
              (else
-              (leave (_ "invalid syntax: ~a~%")
+              (leave (G_ "invalid syntax: ~a~%")
                      pattern)))
        #t)
 
@@ -788,7 +788,7 @@ processed, #f otherwise."
     (let ((number (relative-generation-spec->number profile spec)))
       (if number
           (switch-to-generation* profile number)
-          (leave (_ "cannot switch to generation '~a'~%") spec)))))
+          (leave (G_ "cannot switch to generation '~a'~%") spec)))))
 
 (define* (delete-generations-action store profile pattern opts
                                     #:key dry-run?)
@@ -804,9 +804,9 @@ processed, #f otherwise."
          (bootstrap?   (assoc-ref opts 'bootstrap?))
          (substitutes? (assoc-ref opts 'substitutes?)))
     (if dry-run?
-        (format #t (_ "would install new manifest from '~a' with ~d entries~%")
+        (format #t (G_ "would install new manifest from '~a' with ~d entries~%")
                 file (length (manifest-entries manifest)))
-        (format #t (_ "installing new manifest from '~a' with ~d entries~%")
+        (format #t (G_ "installing new manifest from '~a' with ~d entries~%")
                 file (length (manifest-entries manifest))))
     (build-and-use-profile store profile manifest
                            #:bootstrap? bootstrap?
@@ -859,6 +859,8 @@ processed, #f otherwise."
                                   (manifest-transaction-install step2)))))
          (new      (manifest-perform-transaction manifest step3)))
 
+    (warn-about-old-distro)
+
     (unless (manifest-transaction-null? step3)
       (show-manifest-transaction store manifest step3
                                  #:dry-run? dry-run?)
@@ -877,7 +879,7 @@ processed, #f otherwise."
     ;; Process non-option argument ARG by calling back ARG-HANDLER.
     (if arg-handler
         (arg-handler arg result)
-        (leave (_ "~A: extraneous argument~%") arg)))
+        (leave (G_ "~A: extraneous argument~%") arg)))
 
   (let ((opts (parse-command-line args %options (list %default-options #f)
                                   #:argument-handler handle-argument)))
index 59ade0a..aee506a 100644 (file)
@@ -54,7 +54,7 @@ actual output is different from that when we're doing a 'bmCheck' or
                        (mirrors "mirrors")
                        (content-addressed-mirrors "content-addressed-mirrors"))
     (unless url
-      (leave (_ "~a: missing URL~%") (derivation-file-name drv)))
+      (leave (G_ "~a: missing URL~%") (derivation-file-name drv)))
 
     (let* ((output     (or output output*))
            (url        (call-with-input-string url read))
@@ -62,7 +62,7 @@ actual output is different from that when we're doing a 'bmCheck' or
            (algo       (derivation-output-hash-algo drv-output))
            (hash       (derivation-output-hash drv-output)))
       (unless (and algo hash)
-        (leave (_ "~a is not a fixed-output derivation~%")
+        (leave (G_ "~a is not a fixed-output derivation~%")
                (derivation-file-name drv)))
 
       ;; We're invoked by the daemon, which gives us write access to OUTPUT.
@@ -86,7 +86,7 @@ actual output is different from that when we're doing a 'bmCheck' or
 
 (define (assert-low-privileges)
   (when (zero? (getuid))
-    (leave (_ "refusing to run with elevated privileges (UID ~a)~%")
+    (leave (G_ "refusing to run with elevated privileges (UID ~a)~%")
            (getuid))))
 
 (define (guix-perform-download . args)
@@ -115,7 +115,7 @@ of GnuTLS over HTTPS, before we have built GnuTLS.  See
        (show-version-and-exit))
       (x
        (leave
-        (_ "fixed-output derivation and output file name expected~%"))))))
+        (G_ "fixed-output derivation and output file name expected~%"))))))
 
 ;; Local Variables:
 ;; eval: (put 'derivation-let 'scheme-indent-function 2)
index 3faff06..8da75cb 100644 (file)
             guix-publish))
 
 (define (show-help)
-  (format #t (_ "Usage: guix publish [OPTION]...
+  (format #t (G_ "Usage: guix publish [OPTION]...
 Publish ~a over HTTP.\n") %store-directory)
-  (display (_ "
+  (display (G_ "
   -p, --port=PORT        listen on PORT"))
-  (display (_ "
+  (display (G_ "
       --listen=HOST      listen on the network interface for HOST"))
-  (display (_ "
+  (display (G_ "
   -u, --user=USER        change privileges to USER as soon as possible"))
-  (display (_ "
+  (display (G_ "
   -C, --compression[=LEVEL]
                          compress archives at LEVEL"))
-  (display (_ "
+  (display (G_ "
   -c, --cache=DIRECTORY  cache published items to DIRECTORY"))
-  (display (_ "
+  (display (G_ "
       --workers=N        use N workers to bake items"))
-  (display (_ "
+  (display (G_ "
       --ttl=TTL          announce narinfos can be cached for TTL seconds"))
-  (display (_ "
+  (display (G_ "
       --nar-path=PATH    use PATH as the prefix for nar URLs"))
-  (display (_ "
+  (display (G_ "
       --public-key=FILE  use FILE as the public key for signatures"))
-  (display (_ "
+  (display (G_ "
       --private-key=FILE use FILE as the private key for signatures"))
-  (display (_ "
+  (display (G_ "
   -r, --repl[=PORT]      spawn REPL server on PORT"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -103,7 +103,7 @@ Publish ~a over HTTP.\n") %store-directory)
     (lambda ()
       (getaddrinfo host))
     (lambda (key error)
-      (leave (_ "lookup of host '~a' failed: ~a~%")
+      (leave (G_ "lookup of host '~a' failed: ~a~%")
              host (gai-strerror error)))))
 
 ;; Nar compression parameters.
@@ -148,7 +148,7 @@ if ITEM is already compressed."
                      (alist-cons 'address (addrinfo:addr info)
                                  result))
                     (()
-                     (leave (_ "lookup of host '~a' returned nothing")
+                     (leave (G_ "lookup of host '~a' returned nothing")
                             name)))))
         (option '(#\C "compression") #f #t
                 (lambda (opt name arg result)
@@ -161,7 +161,7 @@ if ITEM is already compressed."
                                      (compression 'gzip level)
                                      result)
                          (begin
-                           (warning (_ "zlib support is missing; \
+                           (warning (G_ "zlib support is missing; \
 compression disabled~%"))
                            result))))))
         (option '(#\c "cache") #t #f
@@ -175,7 +175,7 @@ compression disabled~%"))
                 (lambda (opt name arg result)
                   (let ((duration (string->duration arg)))
                     (unless duration
-                      (leave (_ "~a: invalid duration~%") arg))
+                      (leave (G_ "~a: invalid duration~%") arg))
                     (alist-cons 'narinfo-ttl (time-second duration)
                                 result))))
         (option '("nar-path") #t #f
@@ -240,10 +240,12 @@ compression disabled~%"))
 
 (define* (narinfo-string store store-path key
                          #:key (compression %no-compression)
-                         (nar-path "nar"))
+                         (nar-path "nar") file-size)
   "Generate a narinfo key/value string for STORE-PATH; an exception is raised
 if STORE-PATH is invalid.  Produce a URL that corresponds to COMPRESSION.  The
-narinfo is signed with KEY.  NAR-PATH specifies the prefix for nar URLs."
+narinfo is signed with KEY.  NAR-PATH specifies the prefix for nar URLs.
+Optionally, FILE-SIZE can specify the size in bytes of the compressed NAR; it
+informs the client of how much needs to be downloaded."
   (let* ((path-info  (query-path-info store store-path))
          (compression (actual-compression store-path compression))
          (url        (encode-and-join-uri-path
@@ -257,6 +259,8 @@ narinfo is signed with KEY.  NAR-PATH specifies the prefix for nar URLs."
          (hash       (bytevector->nix-base32-string
                       (path-info-hash path-info)))
          (size       (path-info-nar-size path-info))
+         (file-size  (or file-size
+                         (and (eq? compression %no-compression) size)))
          (references (string-join
                       (map basename (path-info-references path-info))
                       " "))
@@ -268,10 +272,13 @@ URL: ~a
 Compression: ~a
 NarHash: sha256:~a
 NarSize: ~d
-References: ~a~%"
+References: ~a~%~a"
                              store-path url
                              (compression-type compression)
-                             hash size references))
+                             hash size references
+                             (if file-size
+                                 (format #f "FileSize: ~a~%" file-size)
+                                 "")))
          ;; Do not render a "Deriver" or "System" line if we are rendering
          ;; info for a derivation.
          (info       (if (not deriver)
@@ -293,10 +300,15 @@ References: ~a~%"
                       (canonical-sexp->string (signed-string info)))))
     (format #f "~aSignature: 1;~a;~a~%" info (gethostname) signature)))
 
-(define (not-found request)
+(define* (not-found request
+                    #:key (phrase "Resource not found")
+                    ttl)
   "Render 404 response for REQUEST."
-  (values (build-response #:code 404)
-          (string-append "Resource not found: "
+  (values (build-response #:code 404
+                          #:headers (if ttl
+                                        `((cache-control (max-age . ,ttl)))
+                                        '()))
+          (string-append phrase ": "
                          (uri-path (request-uri request)))))
 
 (define (render-nix-cache-info)
@@ -427,7 +439,9 @@ requested using POOL."
                                                      (file-expiration-time ttl)
                                                      #:delete-entry delete-entry
                                                      #:cleanup-period ttl))))
-           (not-found request))
+           (not-found request
+                      #:phrase "We're baking it"
+                      #:ttl 300))              ;should be available within 5m
           (else
            (not-found request)))))
 
@@ -448,7 +462,8 @@ requested using POOL."
        (call-with-gzip-output-port (open-output-file (string-append nar ".tmp"))
          (lambda (port)
            (write-file item port))
-         #:level (compression-level compression))
+         #:level (compression-level compression)
+         #:buffer-size (* 128 1024))
        (rename-file (string-append nar ".tmp") nar))
       ('none
        ;; When compression is disabled, we retrieve files directly from the
@@ -465,7 +480,8 @@ requested using POOL."
           (display (narinfo-string store item
                                    (%private-key)
                                    #:nar-path nar-path
-                                   #:compression compression)
+                                   #:compression compression
+                                   #:file-size (stat:size (stat nar)))
                    port))))))
 
 ;; XXX: Declare the 'Guix-Compression' HTTP header, which is in fact for
@@ -787,7 +803,7 @@ blocking."
         (setgid (passwd:gid user))
         (setuid (passwd:uid user))))
     (lambda (key proc message args . rest)
-      (leave (_ "user '~a' not found: ~a~%")
+      (leave (G_ "user '~a' not found: ~a~%")
              user (apply format #f message args)))))
 
 \f
@@ -799,9 +815,9 @@ blocking."
   (with-error-handling
     (let* ((opts    (args-fold* args %options
                                 (lambda (opt name arg result)
-                                  (leave (_ "~A: unrecognized option~%") name))
+                                  (leave (G_ "~A: unrecognized option~%") name))
                                 (lambda (arg result)
-                                  (leave (_ "~A: extraneous argument~%") arg))
+                                  (leave (G_ "~A: extraneous argument~%") arg))
                                 %default-options))
            (user    (assoc-ref opts 'user))
            (port    (assoc-ref opts 'port))
@@ -828,12 +844,12 @@ blocking."
         (gather-user-privileges user))
 
       (when (zero? (getuid))
-        (warning (_ "server running as root; \
+        (warning (G_ "server running as root; \
 consider using the '--user' option!~%")))
 
       (parameterize ((%public-key public-key)
                      (%private-key private-key))
-        (format #t (_ "publishing ~a on ~a, port ~d~%")
+        (format #t (G_ "publishing ~a on ~a, port ~d~%")
                 %store-directory
                 (inet-ntop (sockaddr:fam address) (sockaddr:addr address))
                 (sockaddr:port address))
index 8e31ad6..58b87d4 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -28,6 +28,7 @@
   #:use-module (guix download)
   #:use-module (guix gexp)
   #:use-module (guix monads)
+  #:use-module (guix scripts build)
   #:use-module ((guix build utils)
                 #:select (with-directory-excursion delete-file-recursively))
   #:use-module ((guix build download)
 
 (define %default-options
   ;; Alist of default option values.
-  `((tarball-url . ,%snapshot-url)))
+  `((tarball-url . ,%snapshot-url)
+    (system . ,(%current-system))
+    (substitutes? . #t)
+    (graft? . #t)
+    (max-silent-time . 3600)
+    (verbosity . 0)))
 
 (define (show-help)
-  (display (_ "Usage: guix pull [OPTION]...
+  (display (G_ "Usage: guix pull [OPTION]...
 Download and deploy the latest version of Guix.\n"))
-  (display (_ "
+  (display (G_ "
       --verbose          produce verbose output"))
-  (display (_ "
+  (display (G_ "
       --url=URL          download the Guix tarball from URL"))
-  (display (_ "
+  (display (G_ "
       --bootstrap        use the bootstrap Guile to build the new Guix"))
   (newline)
-  (display (_ "
+  (show-build-options-help)
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
 
 (define %options
   ;; Specifications of the command-line options.
-  (list (option '("verbose") #f #f
-                (lambda (opt name arg result)
-                  (alist-cons 'verbose? #t result)))
-        (option '("url") #t #f
-                (lambda (opt name arg result)
-                  (alist-cons 'tarball-url arg
-                              (alist-delete 'tarball-url result))))
-        (option '("bootstrap") #f #f
-                (lambda (opt name arg result)
-                  (alist-cons 'bootstrap? #t result)))
+  (cons* (option '("verbose") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'verbose? #t result)))
+         (option '("url") #t #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'tarball-url arg
+                               (alist-delete 'tarball-url result))))
+         (option '(#\n "dry-run") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'dry-run? #t (alist-cons 'graft? #f result))))
+         (option '("bootstrap") #f #f
+                 (lambda (opt name arg result)
+                   (alist-cons 'bootstrap? #t result)))
 
-        (option '(#\h "help") #f #f
-                (lambda args
-                  (show-help)
-                  (exit 0)))
-        (option '(#\V "version") #f #f
-                (lambda args
-                  (show-version-and-exit "guix pull")))))
+         (option '(#\h "help") #f #f
+                 (lambda args
+                   (show-help)
+                   (exit 0)))
+         (option '(#\V "version") #f #f
+                 (lambda args
+                   (show-version-and-exit "guix pull")))
+
+         %standard-build-options))
 
 (define what-to-build
   (store-lift show-what-to-build))
@@ -153,7 +165,7 @@ store file name."
     (mbegin %store-monad
       (what-to-build (list tar gzip))
       (built-derivations (list tar gzip))
-      (format #t (_ "unpacking '~a'...~%") tarball)
+      (format #t (G_ "unpacking '~a'...~%") tarball)
 
       (let ((source (temporary-directory)))
         (with-directory-excursion source
@@ -205,26 +217,18 @@ contained therein."
           (if (and (file-exists? latest)
                    (string=? (readlink latest) source-dir))
               (begin
-                (display (_ "Guix already up to date\n"))
+                (display (G_ "Guix already up to date\n"))
                 (return #t))
               (begin
                 (switch-symlinks latest source-dir)
                 (format #t
-                        (_ "updated ~a successfully deployed under `~a'~%")
+                        (G_ "updated ~a successfully deployed under `~a'~%")
                         %guix-package-name latest)
                 (return #t))))
-        (leave (_ "failed to update Guix, check the build log~%")))))
+        (leave (G_ "failed to update Guix, check the build log~%")))))
 
+\f
 (define (guix-pull . args)
-  (define (parse-options)
-    ;; Return the alist of option values.
-    (args-fold* args %options
-                (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
-                (lambda (arg result)
-                  (leave (_ "~A: unexpected argument~%") arg))
-                %default-options))
-
   (define (use-le-certs? url)
     (string-prefix? "https://git.savannah.gnu.org/" url))
 
@@ -232,28 +236,31 @@ contained therein."
     (download-to-store store url "guix-latest.tar.gz"))
 
   (with-error-handling
-    (let* ((opts  (parse-options))
-           (store (open-connection))
+    (let* ((opts  (parse-command-line args %options
+                                      (list %default-options)))
            (url   (assoc-ref opts 'tarball-url)))
-      (let ((tarball
-             (if (use-le-certs? url)
-                 (let* ((drv (package-derivation store le-certs))
-                        (certs (string-append (derivation->output-path drv)
-                                              "/etc/ssl/certs")))
-                   (build-derivations store (list drv))
-                   (parameterize ((%x509-certificate-directory certs))
-                     (fetch-tarball store url)))
-                 (fetch-tarball store url))))
-        (unless tarball
-          (leave (_ "failed to download up-to-date source, exiting\n")))
-        (parameterize ((%guile-for-build
-                        (package-derivation store
-                                            (if (assoc-ref opts 'bootstrap?)
-                                                %bootstrap-guile
-                                                (canonical-package guile-2.0)))))
-          (run-with-store store
-            (build-and-install tarball (config-directory)
-                               #:verbose? (assoc-ref opts 'verbose?))))))))
+      (unless (assoc-ref opts 'dry-run?)          ;XXX: not very useful
+        (with-store store
+          (set-build-options-from-command-line store opts)
+          (let ((tarball
+                 (if (use-le-certs? url)
+                     (let* ((drv (package-derivation store le-certs))
+                            (certs (string-append (derivation->output-path drv)
+                                                  "/etc/ssl/certs")))
+                       (build-derivations store (list drv))
+                       (parameterize ((%x509-certificate-directory certs))
+                         (fetch-tarball store url)))
+                     (fetch-tarball store url))))
+            (unless tarball
+              (leave (G_ "failed to download up-to-date source, exiting\n")))
+            (parameterize ((%guile-for-build
+                            (package-derivation store
+                                                (if (assoc-ref opts 'bootstrap?)
+                                                    %bootstrap-guile
+                                                    (canonical-package guile-2.0)))))
+              (run-with-store store
+                (build-and-install tarball (config-directory)
+                                   #:verbose? (assoc-ref opts 'verbose?))))))))))
 
 ;; Local Variables:
 ;; eval: (put 'with-PATH 'scheme-indent-function 1)
index 4d3c695..f85d6e5 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix upstream)
+  #:use-module (guix discovery)
   #:use-module (guix graph)
   #:use-module (guix scripts graph)
   #:use-module (guix monads)
-  #:use-module ((guix gnu-maintenance)
-                #:select (%gnu-updater
-                          %gnome-updater
-                          %kde-updater
-                          %xorg-updater
-                          %kernel.org-updater))
-  #:use-module (guix import elpa)
-  #:use-module (guix import cran)
-  #:use-module (guix import hackage)
   #:use-module (guix gnupg)
   #:use-module (gnu packages)
   #:use-module ((gnu packages commencement) #:select (%final-inputs))
@@ -76,7 +68,7 @@
                      (alist-cons 'select (string->symbol arg)
                                  result))
                     (x
-                     (leave (_ "~a: invalid selection; expected `core' or `non-core'~%")
+                     (leave (G_ "~a: invalid selection; expected `core' or `non-core'~%")
                             arg)))))
         (option '(#\t "type") #t #f
                 (lambda (opt name arg result)
                      (alist-cons 'key-download (string->symbol arg)
                                  result))
                     (x
-                     (leave (_ "unsupported policy: ~a~%")
+                     (leave (G_ "unsupported policy: ~a~%")
                             arg)))))
 
         (option '(#\h "help") #f #f
                   (show-version-and-exit "guix refresh")))))
 
 (define (show-help)
-  (display (_ "Usage: guix refresh [OPTION]... [PACKAGE]...
+  (display (G_ "Usage: guix refresh [OPTION]... [PACKAGE]...
 Update package definitions to match the latest upstream version.
 
 When PACKAGE... is given, update only the specified packages.  Otherwise
 update all the packages of the distribution, or the subset thereof
 specified with `--select'.\n"))
-  (display (_ "
+  (display (G_ "
   -e, --expression=EXPR  consider the package EXPR evaluates to"))
-  (display (_ "
+  (display (G_ "
   -u, --update           update source files in place"))
-  (display (_ "
+  (display (G_ "
   -s, --select=SUBSET    select all the packages in SUBSET, one of
                          `core' or `non-core'"))
-  (display (_ "
+  (display (G_ "
   -t, --type=UPDATER,... restrict to updates from the specified updaters
                          (e.g., 'gnu')"))
-  (display (_ "
+  (display (G_ "
   -L, --list-updaters    list available updaters and exit"))
-  (display (_ "
+  (display (G_ "
   -l, --list-dependent   list top-level dependent packages that would need to
                          be rebuilt as a result of upgrading PACKAGE..."))
   (newline)
-  (display (_ "
+  (display (G_ "
       --key-server=HOST  use HOST as the OpenPGP key server"))
-  (display (_ "
+  (display (G_ "
       --gpg=COMMAND      use COMMAND as the GnuPG 2.x command"))
-  (display (_ "
+  (display (G_ "
       --key-download=POLICY
                          handle missing OpenPGP keys according to POLICY:
                          'always', 'never', and 'interactive', which is also
                          used when 'key-download' is not specified"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -163,66 +155,32 @@ specified with `--select'.\n"))
 ;;; Updates.
 ;;;
 
-(define-syntax maybe-updater
-  ;; Helper macro for 'list-updaters'.
-  (syntax-rules (=>)
-    ((_ ((module => updater) rest ...) result)
-     (maybe-updater (rest ...)
-                    (let ((iface (false-if-exception
-                                  (resolve-interface 'module)))
-                          (tail  result))
-                      (if iface
-                          (cons (module-ref iface 'updater) tail)
-                          tail))))
-    ((_ (updater rest ...) result)
-     (maybe-updater (rest ...)
-                    (cons updater result)))
-    ((_ () result)
-     (reverse result))))
-
-(define-syntax-rule (list-updaters updaters ...)
-  "Expand to '(list UPDATERS ...)' but only the subset of UPDATERS that are
-either unconditional, or have their requirement met.
-
-A conditional updater has this form:
-
-  ((SOME MODULE) => UPDATER)
-
-meaning that UPDATER is added to the list if and only if (SOME MODULE) could
-be resolved at run time.
-
-This is a way to discard at macro expansion time updaters that depend on
-unavailable optional dependencies such as Guile-JSON."
-  (maybe-updater (updaters ...) '()))
+(define (importer-modules)
+  "Return the list of importer modules."
+  (cons (resolve-interface '(guix gnu-maintenance))
+        (all-modules (map (lambda (entry)
+                            `(,entry . "guix/import"))
+                          %load-path))))
 
 (define %updaters
-  ;; List of "updaters" used by default.  They are consulted in this order.
-  (list-updaters %gnu-updater
-                 %gnome-updater
-                 %kde-updater
-                 %xorg-updater
-                 %kernel.org-updater
-                 %elpa-updater
-                 %cran-updater
-                 %bioconductor-updater
-                 ((guix import stackage) => %stackage-updater)
-                 %hackage-updater
-                 ((guix import cpan) => %cpan-updater)
-                 ((guix import pypi) => %pypi-updater)
-                 ((guix import gem) => %gem-updater)
-                 ((guix import github) => %github-updater)
-                 ((guix import crate) => %crate-updater)))
+  ;; The list of publically-known updaters.
+  (delay (fold-module-public-variables (lambda (obj result)
+                                         (if (upstream-updater? obj)
+                                             (cons obj result)
+                                             result))
+                                       '()
+                                       (importer-modules))))
 
 (define (lookup-updater-by-name name)
   "Return the updater called NAME."
   (or (find (lambda (updater)
               (eq? name (upstream-updater-name updater)))
-            %updaters)
-      (leave (_ "~a: no such updater~%") name)))
+            (force %updaters))
+      (leave (G_ "~a: no such updater~%") name)))
 
 (define (list-updaters-and-exit)
   "Display available updaters and exit."
-  (format #t (_ "Available updaters:~%"))
+  (format #t (G_ "Available updaters:~%"))
   (newline)
 
   (let* ((packages (fold-packages cons '()))
@@ -234,22 +192,22 @@ unavailable optional dependencies such as Guile-JSON."
                 ;; TRANSLATORS: The parenthetical expression here is rendered
                 ;; like "(42% coverage)" and denotes the fraction of packages
                 ;; covered by the given updater.
-                (format #t (_ "  - ~a: ~a (~2,1f% coverage)~%")
+                (format #t (G_ "  - ~a: ~a (~2,1f% coverage)~%")
                         (upstream-updater-name updater)
-                        (_ (upstream-updater-description updater))
+                        (G_ (upstream-updater-description updater))
                         (* 100. (/ matches total)))
                 (+ covered matches)))
             0
-            %updaters))
+            (force %updaters)))
 
     (newline)
-    (format #t (_ "~2,1f% of the packages are covered by these updaters.~%")
+    (format #t (G_ "~2,1f% of the packages are covered by these updaters.~%")
             (* 100. (/ covered total))))
   (exit 0))
 
 (define (warn-no-updater package)
   (format (current-error-port)
-          (_ "~a: warning: no updater for ~a~%")
+          (G_ "~a: warning: no updater for ~a~%")
           (location->string (package-location package))
           (package-name package)))
 
@@ -270,14 +228,14 @@ warn about packages that have no matching updater."
           (if (and=> tarball file-exists?)
               (begin
                 (format (current-error-port)
-                        (_ "~a: ~a: updating from version ~a to version ~a...~%")
+                        (G_ "~a: ~a: updating from version ~a to version ~a...~%")
                         (location->string loc)
                         (package-name package)
                         (package-version package) version)
                 (let ((hash (call-with-input-file tarball
                               port-sha256)))
                   (update-package-source package version hash)))
-              (warning (_ "~a: version ~a could not be \
+              (warning (G_ "~a: version ~a could not be \
 downloaded and authenticated; not updating~%")
                        (package-name package) version))))
       (when warn?
@@ -293,7 +251,7 @@ WARN? is true and no updater exists for PACKAGE, print a warning."
        (let ((loc (or (package-field-location package 'version)
                       (package-location package))))
          (format (current-error-port)
-                 (_ "~a: ~a would be upgraded from ~a to ~a~%")
+                 (G_ "~a: ~a would be upgraded from ~a to ~a~%")
                  (location->string loc)
                  (package-name package) (package-version package)
                  (upstream-source-version source)))))
@@ -315,6 +273,10 @@ WARN? is true and no updater exists for PACKAGE, print a warning."
   "List all the things that would need to be rebuilt if PACKAGES are changed."
   ;; Using %BAG-NODE-TYPE is more accurate than using %PACKAGE-NODE-TYPE
   ;; because it includes implicit dependencies.
+  (define (full-name package)
+    (string-append (package-name package) "@"
+                   (package-version package)))
+
   (mlet %store-monad ((edges (node-back-edges %bag-node-type
                                               (all-packages))))
     (let* ((dependents (node-transitive-edges packages edges))
@@ -327,12 +289,12 @@ WARN? is true and no updater exists for PACKAGE, print a warning."
                  (N_ "No dependents other than itself: ~{~a~}~%"
                      "No dependents other than themselves: ~{~a~^ ~}~%"
                      (length packages))
-                 (map package-full-name packages)))
+                 (map full-name packages)))
 
         ((x)
          (format (current-output-port)
-                 (_ "A single dependent package: ~a~%")
-                 (package-full-name x)))
+                 (G_ "A single dependent package: ~a~%")
+                 (full-name x)))
         (lst
          (format (current-output-port)
                  (N_ "Building the following package would ensure ~d \
@@ -341,7 +303,7 @@ dependent packages are rebuilt: ~*~{~a~^ ~}~%"
 dependent packages are rebuilt: ~{~a~^ ~}~%"
                      (length covering))
                  (length covering) (length dependents)
-                 (map package-full-name covering))))
+                 (map full-name covering))))
       (return #t))))
 
 \f
@@ -354,7 +316,7 @@ dependent packages are rebuilt: ~{~a~^ ~}~%"
     ;; Return the alist of option values.
     (args-fold* args %options
                 (lambda (opt name arg result)
-                  (leave (_ "~A: unrecognized option~%") name))
+                  (leave (G_ "~A: unrecognized option~%") name))
                 (lambda (arg result)
                   (alist-cons 'argument arg result))
                 %default-options))
@@ -368,7 +330,7 @@ dependent packages are rebuilt: ~{~a~^ ~}~%"
                        opts)
       (()
        ;; Use the default updaters.
-       %updaters)
+       (force %updaters))
       (lists
        (concatenate lists))))
 
index f612dae..52f7cdd 100644 (file)
@@ -74,7 +74,7 @@ if ITEM is not in the store."
              ;; The nar size is an approximation, but a good one.
              (return (substitutable-nar-size info)))
             (()
-             (leave (_ "no available substitute information for '~a'~%")
+             (leave (G_ "no available substitute information for '~a'~%")
                     item)))))))
 
 (define* (display-profile profile #:optional (port (current-output-port)))
@@ -82,7 +82,7 @@ if ITEM is not in the store."
   (define MiB (expt 2 20))
 
   (format port "~64a ~8a ~a\n"
-          (_ "store item") (_ "total") (_ "self"))
+          (G_ "store item") (G_ "total") (G_ "self"))
   (let ((whole (reduce + 0 (map profile-self-size profile))))
     (for-each (match-lambda
                 (($ <profile> name self total)
@@ -94,7 +94,7 @@ if ITEM is not in the store."
                       ((($ <profile> name1 self1 total1)
                         ($ <profile> name2 self2 total2))
                        (> total1 total2)))))
-    (format port (_ "total: ~,1f MiB~%") (/ whole MiB 1.))))
+    (format port (G_ "total: ~,1f MiB~%") (/ whole MiB 1.))))
 
 (define display-profile*
   (lift display-profile %store-monad))
@@ -208,7 +208,7 @@ the name of a PNG file."
   ;; 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.)
-  (make-page-map (_ "store profile") data
+  (make-page-map (G_ "store profile") data
                  #:write-to-png file))
 
 \f
@@ -217,19 +217,19 @@ the name of a PNG file."
 ;;;
 
 (define (show-help)
-  (display (_ "Usage: guix size [OPTION]... PACKAGE
+  (display (G_ "Usage: guix size [OPTION]... PACKAGE
 Report the size of PACKAGE and its dependencies.\n"))
-  (display (_ "
+  (display (G_ "
       --substitute-urls=URLS
                          fetch substitute from URLS if they are authorized"))
-  (display (_ "
+  (display (G_ "
   -s, --system=SYSTEM    consider packages for SYSTEM--e.g., \"i686-linux\""))
-  (display (_ "
+  (display (G_ "
   -m, --map-file=FILE    write to FILE a graphical map of disk usage"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -278,7 +278,7 @@ Report the size of PACKAGE and its dependencies.\n"))
            (urls     (assoc-ref opts 'substitute-urls)))
       (match files
         (()
-         (leave (_ "missing store item argument\n")))
+         (leave (G_ "missing store item argument\n")))
         ((files ..1)
          (leave-on-EPIPE
           ;; Turn off grafts because (1) hydra.gnu.org does not serve grafted
index 748c334..73d4f6e 100755 (executable)
   (and (and=> (getenv "GUIX_ALLOW_UNAUTHENTICATED_SUBSTITUTES")
               (cut string-ci=? <> "yes"))
        (begin
-         (warning (_ "authentication and authorization of substitutes \
+         (warning (G_ "authentication and authorization of substitutes \
 disabled!~%"))
          #t)))
 
@@ -186,7 +186,7 @@ provide."
        (values port (stat:size (stat port)))))
     ((http https)
      (guard (c ((http-get-error? c)
-                (leave (_ "download from '~a' failed: ~a, ~s~%")
+                (leave (G_ "download from '~a' failed: ~a, ~s~%")
                        (uri->string (http-get-error-uri c))
                        (http-get-error-code c)
                        (http-get-error-reason c))))
@@ -199,9 +199,9 @@ provide."
                            %fetch-timeout
                            0)
            (begin
-             (warning (_ "while fetching ~a: server is somewhat slow~%")
+             (warning (G_ "while fetching ~a: server is somewhat slow~%")
                       (uri->string uri))
-             (warning (_ "try `--no-substitutes' if the problem persists~%"))
+             (warning (G_ "try `--no-substitutes' if the problem persists~%"))
 
              ;; Before Guile v2.0.9-39-gfe51c7b, EINTR was reported to the user,
              ;; and thus PORT had to be closed and re-opened.  This is not the
@@ -219,7 +219,7 @@ provide."
              (http-fetch uri #:text? #f #:port port
                          #:verify-certificate? #f))))))
     (else
-     (leave (_ "unsupported substitute URI scheme: ~a~%")
+     (leave (G_ "unsupported substitute URI scheme: ~a~%")
             (uri->string uri)))))
 
 (define-record-type <cache-info>
@@ -254,12 +254,12 @@ failure, return #f and #f."
                       #:verify-certificate? #f
                       #:timeout %fetch-timeout)))
            (guard (c ((http-get-error? c)
-                      (warning (_ "while fetching '~a': ~a (~s)~%")
+                      (warning (G_ "while fetching '~a': ~a (~s)~%")
                                (uri->string (http-get-error-uri c))
                                (http-get-error-code c)
                                (http-get-error-reason c))
                       (close-connection port)
-                      (warning (_ "ignoring substitute server at '~s'~%") url)
+                      (warning (G_ "ignoring substitute server at '~s'~%") url)
                       (values #f #f)))
              (values (read-cache-info (http-fetch uri
                                                   #:verify-certificate? #f
@@ -309,11 +309,11 @@ Otherwise return #f."
     ((version host-name sig)
      (let ((maybe-number (string->number version)))
        (cond ((not (number? maybe-number))
-              (leave (_ "signature version must be a number: ~s~%")
+              (leave (G_ "signature version must be a number: ~s~%")
                      version))
              ;; Currently, there are no other versions.
              ((not (= 1 maybe-number))
-              (leave (_ "unsupported signature version: ~a~%")
+              (leave (G_ "unsupported signature version: ~a~%")
                      maybe-number))
              (else
               (let ((signature (utf8->string (base64-decode sig))))
@@ -321,11 +321,11 @@ Otherwise return #f."
                   (lambda ()
                     (string->canonical-sexp signature))
                   (lambda (key proc err)
-                    (leave (_ "signature is not a valid \
+                    (leave (G_ "signature is not a valid \
 s-expression: ~s~%")
                            signature))))))))
     (x
-     (leave (_ "invalid format of the signature field: ~a~%") x))))
+     (leave (G_ "invalid format of the signature field: ~a~%") x))))
 
 (define (narinfo-maker str cache-url)
   "Return a narinfo constructor for narinfos originating from CACHE-URL.  STR
@@ -360,13 +360,13 @@ NARINFO, doesn't match HASH, a bytevector containing the hash of NARINFO."
     (signature-case (signature hash acl)
       (valid-signature #t)
       (invalid-signature
-       (leave (_ "invalid signature for '~a'~%") uri))
+       (leave (G_ "invalid signature for '~a'~%") uri))
       (hash-mismatch
-       (leave (_ "hash mismatch for '~a'~%") uri))
+       (leave (G_ "hash mismatch for '~a'~%") uri))
       (unauthorized-key
-       (leave (_ "'~a' is signed with an unauthorized key~%") uri))
+       (leave (G_ "'~a' is signed with an unauthorized key~%") uri))
       (corrupt-signature
-       (leave (_ "signature on '~a' is corrupt~%") uri)))))
+       (leave (G_ "signature on '~a' is corrupt~%") uri)))))
 
 (define* (read-narinfo port #:optional url
                        #:key size)
@@ -404,17 +404,17 @@ or is signed by an unauthorized key."
     (if (not hash)
         (if %allow-unauthenticated-substitutes?
             narinfo
-            (leave (_ "substitute at '~a' lacks a signature~%")
+            (leave (G_ "substitute at '~a' lacks a signature~%")
                    (uri->string (narinfo-uri narinfo))))
         (let ((signature (narinfo-signature narinfo)))
           (unless %allow-unauthenticated-substitutes?
             (assert-valid-signature narinfo signature hash acl)
             (when verbose?
               (format (current-error-port)
-                      (_ "Found valid signature for ~a~%")
+                      (G_ "Found valid signature for ~a~%")
                       (narinfo-path narinfo))
               (format (current-error-port)
-                      (_ "From ~a~%")
+                      (G_ "From ~a~%")
                       (uri->string (narinfo-uri narinfo)))))
           narinfo))))
 
@@ -448,7 +448,7 @@ entry is stored in a sub-directory specific to CACHE-URL."
   ;; "/gnu/store/foo".  Gracefully handle that.
   (match (store-path-hash-part path)
     (#f
-     (leave (_ "'~a' does not name a store item~%") path))
+     (leave (G_ "'~a' does not name a store item~%") path))
     ((? string? hash-part)
      (string-append %narinfo-cache-directory "/"
                     (bytevector->base32-string (sha256 (string->utf8 cache-url)))
@@ -472,9 +472,9 @@ for PATH."
           (match (read p)
             (('narinfo ('version 2)
                        ('cache-uri cache-uri)
-                       ('date date) ('ttl _) ('value #f))
+                       ('date date) ('ttl ttl) ('value #f))
              ;; A cached negative lookup.
-             (if (obsolete? date now %narinfo-negative-ttl)
+             (if (obsolete? date now ttl)
                  (values #f #f)
                  (values #t #f)))
             (('narinfo ('version 2)
@@ -596,7 +596,7 @@ if file doesn't exist, and the narinfo otherwise."
         (display #\cr (current-error-port))
         (force-output (current-error-port))
         (format (current-error-port)
-                (_ "updating list of substitutes from '~a'... ~5,1f%")
+                (G_ "updating list of substitutes from '~a'... ~5,1f%")
                 url (* 100. (/ done (length paths))))
         (set! done (+ 1 done)))))
 
@@ -651,7 +651,7 @@ if file doesn't exist, and the narinfo otherwise."
                           paths)))
          (filter-map (cut narinfo-from-file <> url) files)))
       (else
-       (leave (_ "~s: unsupported server URI scheme~%")
+       (leave (G_ "~s: unsupported server URI scheme~%")
               (if uri (uri-scheme uri) url)))))
 
   (let-values (((cache-info port)
@@ -661,7 +661,7 @@ if file doesn't exist, and the narinfo otherwise."
                        (%store-prefix))
              (do-fetch (string->uri url) port)    ;reuse PORT
              (begin
-               (warning (_ "'~a' uses different store '~a'; ignoring it~%")
+               (warning (G_ "'~a' uses different store '~a'; ignoring it~%")
                         url (cache-info-store-directory cache-info))
                (close-connection port)
                #f)))))
@@ -722,7 +722,7 @@ was found."
           (match (read port)
             (('narinfo ('version 2) ('cache-uri uri)
                        ('date date) ('ttl ttl) ('value #f))
-             (+ date %narinfo-negative-ttl))
+             (+ date ttl))
             (('narinfo ('version 2) ('cache-uri uri)
                        ('date date) ('ttl ttl) ('value value))
              (+ date ttl))
@@ -781,12 +781,12 @@ PORT.  REPORT-PROGRESS is a two-argument procedure such as that returned by
        (lambda () exp ...)
        (match-lambda*
          (('getaddrinfo-error error)
-          (leave (_ "host name lookup error: ~a~%")
+          (leave (G_ "host name lookup error: ~a~%")
                  (gai-strerror error)))
          (('gnutls-error error proc . rest)
           (let ((error->string (module-ref (resolve-interface '(gnutls))
                                            'error->string)))
-            (leave (_ "TLS error in procedure '~a': ~a~%")
+            (leave (G_ "TLS error in procedure '~a': ~a~%")
                    proc (error->string error))))
          (args
           (apply throw args)))))))
@@ -797,19 +797,19 @@ PORT.  REPORT-PROGRESS is a two-argument procedure such as that returned by
 ;;;
 
 (define (show-help)
-  (display (_ "Usage: guix substitute [OPTION]...
+  (display (G_ "Usage: guix substitute [OPTION]...
 Internal tool to substitute a pre-built binary to a local build.\n"))
-  (display (_ "
+  (display (G_ "
       --query            report on the availability of substitutes for the
                          store file names passed on the standard input"))
-  (display (_ "
+  (display (G_ "
       --substitute STORE-FILE DESTINATION
                          download STORE-FILE and store it as a Nar in file
                          DESTINATION"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -875,7 +875,7 @@ DESTINATION as a nar file.  Verify the substitute against ACL."
             ;; TRANSLATORS: The second part of this message looks like
             ;; "(4.1MiB installed)"; it shows the size of the package once
             ;; installed.
-            (_ "Downloading ~a~:[~*~; (~a installed)~]...~%")
+            (G_ "Downloading ~a~:[~*~; (~a installed)~]...~%")
             (uri->string uri)
             ;; Use the Nar size as an estimate of the installed size.
             (narinfo-size narinfo)
@@ -932,7 +932,7 @@ DESTINATION as a nar file.  Verify the substitute against ACL."
 
   (let ((acl (acl->public-keys (current-acl))))
     (when (or (null? acl) (singleton? acl))
-      (warning (_ "ACL for archive imports seems to be uninitialized, \
+      (warning (G_ "ACL for archive imports seems to be uninitialized, \
 substitutes may be unavailable\n")))))
 
 (define (daemon-options)
@@ -980,6 +980,10 @@ default value."
                  (and number (max 20 (- number 1))))))
       80))
 
+(define (validate-uri uri)
+  (unless (string->uri uri)
+    (leave (G_ "~a: invalid URI~%") uri)))
+
 (define (guix-substitute . args)
   "Implement the build daemon's substituter protocol."
   (mkdir-p %narinfo-cache-directory)
@@ -1001,6 +1005,9 @@ default value."
   (newline)
   (force-output (current-output-port))
 
+  ;; Sanity-check %CACHE-URLS so we can provide a meaningful error message.
+  (for-each validate-uri %cache-urls)
+
   ;; Attempt to install the client's locale, mostly so that messages are
   ;; suitably translated.
   (match (or (find-daemon-option "untrusted-locale")
@@ -1033,7 +1040,7 @@ default value."
        (("--help")
         (show-help))
        (opts
-        (leave (_ "~a: unrecognized options~%") opts))))))
+        (leave (G_ "~a: unrecognized options~%") opts))))))
 
 ;;; Local Variables:
 ;;; eval: (put 'with-timeout 'scheme-indent-function 1)
index 8fabdb5..9c09767 100644 (file)
@@ -130,7 +130,7 @@ BODY..., and restore them."
                              #:prefix target
                              #:state-directory state
                              #:references refs)
-        (leave (_ "failed to register '~a' under '~a'~%")
+        (leave (G_ "failed to register '~a' under '~a'~%")
                item target))
 
       (return #t))))
@@ -163,7 +163,7 @@ TARGET, and register them."
 
       (munless (false-if-exception (install-grub grub.cfg device target))
         (delete-file temp-gc-root)
-        (leave (_ "failed to install GRUB on device '~a'~%") device))
+        (leave (G_ "failed to install GRUB on device '~a'~%") device))
 
       ;; Register GRUB.CFG as a GC root so that its dependencies (background
       ;; image, font, etc.) are not reclaimed.
@@ -181,7 +181,7 @@ When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG."
     (with-monad %store-monad
       (if (string=? target "/")
           (begin
-            (warning (_ "initializing the current root file system~%"))
+            (warning (G_ "initializing the current root file system~%"))
             (return #t))
           (begin
             ;; Make sure the target store exists.
@@ -195,7 +195,7 @@ When GRUB? is true, install GRUB on DEVICE, using GRUB.CFG."
   ;; <http://lists.gnu.org/archive/html/guix-devel/2015-05/msg00452.html>.
   (if (zero? (geteuid))
       (chown target 0 0)
-      (warning (_ "not running as 'root', so \
+      (warning (G_ "not running as 'root', so \
 the ownership of '~a' may be incorrect!~%")
                target))
 
@@ -236,21 +236,21 @@ expression in %STORE-MONAD."
           (values (run-with-store store (begin mbody ...))
                   store)))
       (lambda (key proc format-string format-args errno . rest)
-        (warning (_ "while talking to shepherd: ~a~%")
+        (warning (G_ "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."
   (cond ((service-not-found-error? error)
-         (report-error (_ "service '~a' could not be found~%")
+         (report-error (G_ "service '~a' could not be found~%")
                        (service-not-found-error-service error)))
         ((action-not-found-error? error)
-         (report-error (_ "service '~a' does not have an action '~a'~%")
+         (report-error (G_ "service '~a' does not have an action '~a'~%")
                        (action-not-found-error-service error)
                        (action-not-found-error-action error)))
         ((action-exception-error? error)
-         (report-error (_ "exception caught while executing '~a' \
+         (report-error (G_ "exception caught while executing '~a' \
 on service '~a':~%")
                        (action-exception-error-action error)
                        (action-exception-error-service error))
@@ -258,10 +258,10 @@ on service '~a':~%")
                           (action-exception-error-key error)
                           (action-exception-error-arguments error)))
         ((unknown-shepherd-error? error)
-         (report-error (_ "something went wrong: ~s~%")
+         (report-error (G_ "something went wrong: ~s~%")
                        (unknown-shepherd-error-sexp error)))
         ((shepherd-error? error)
-         (report-error (_ "shepherd error~%")))
+         (report-error (G_ "shepherd error~%")))
         ((not error)                              ;not an error
          #t)))
 
@@ -278,7 +278,7 @@ unload."
                    to-unload))))
     (#f
      (with-monad %store-monad
-       (warning (_ "failed to obtain list of shepherd services~%"))
+       (warning (G_ "failed to obtain list of shepherd services~%"))
        (return #f)))))
 
 (define (upgrade-shepherd-services os)
@@ -298,7 +298,7 @@ bring the system down."
    (call-with-service-upgrade-info new-services
      (lambda (to-load to-unload)
         (for-each (lambda (unload)
-                    (info (_ "unloading service '~a'...~%") unload)
+                    (info (G_ "unloading service '~a'...~%") unload)
                     (unload-service unload))
                   to-unload)
 
@@ -306,7 +306,7 @@ bring the system down."
           (munless (null? to-load)
             (let ((to-load-names  (map shepherd-service-canonical-name to-load))
                   (to-start       (filter shepherd-service-auto-start? to-load)))
-              (info (_ "loading new services:~{ ~a~}...~%") to-load-names)
+              (info (G_ "loading new services:~{ ~a~}...~%") to-load-names)
               (mlet %store-monad ((files (mapm %store-monad shepherd-service-file
                                                to-load)))
                 ;; Here we assume that FILES are exactly those that were computed
@@ -330,7 +330,7 @@ it atomically, and then run OS's activation script."
       (switch-symlinks generation system)
       (switch-symlinks profile generation)
 
-      (format #t (_ "activating system...~%"))
+      (format #t (G_ "activating system...~%"))
 
       ;; The activation script may change $PATH, among others, so protect
       ;; against that.
@@ -365,14 +365,17 @@ it atomically, and then run OS's activation script."
 
 (define* (profile-boot-parameters #:optional (profile %system-profile)
                                   (numbers (generation-numbers profile)))
-  "Return a list of 'menu-entry' for the generations of PROFILE specified by
+  "Return a list of 'boot-parameters' for the generations of PROFILE specified by
 NUMBERS, which is a list of generation numbers."
   (define (system->boot-parameters system number time)
     (unless-file-not-found
-     (let* ((file             (string-append system "/parameters"))
-            (params           (call-with-input-file file
-                                read-boot-parameters)))
-       params)))
+     (let* ((params           (read-boot-parameters-file system))
+            (label            (boot-parameters-label params)))
+       (boot-parameters
+         (inherit params)
+         (label (string-append label " (#"
+                               (number->string number) ", "
+                               (seconds->string time) ")"))))))
   (let* ((systems (map (cut generation-file-name profile <>)
                        numbers))
          (times   (map (lambda (system)
@@ -381,45 +384,6 @@ NUMBERS, which is a list of generation numbers."
                        systems)))
     (filter-map system->boot-parameters systems numbers times)))
 
-(define* (profile-grub-entries #:optional (profile %system-profile)
-                                  (numbers (generation-numbers profile)))
-  "Return a list of 'menu-entry' for the generations of PROFILE specified by
-NUMBERS, which is a list of generation numbers."
-  (define (system->grub-entry system number time)
-    (unless-file-not-found
-     (let* ((file             (string-append system "/parameters"))
-            (params           (call-with-input-file file
-                                read-boot-parameters))
-            (label            (boot-parameters-label params))
-            (root             (boot-parameters-root-device params))
-            (root-device      (if (bytevector? root)
-                                  (uuid->string root)
-                                  root))
-            (kernel           (boot-parameters-kernel params))
-            (kernel-arguments (boot-parameters-kernel-arguments params))
-            (initrd           (boot-parameters-initrd params)))
-       (menu-entry
-        (label (string-append label " (#"
-                              (number->string number) ", "
-                              (seconds->string time) ")"))
-        (device (boot-parameters-store-device params))
-        (device-mount-point (boot-parameters-store-mount-point params))
-        (linux kernel)
-        (linux-arguments
-         (cons* (string-append "--root=" root-device)
-                (string-append "--system=" system)
-                (string-append "--load=" system "/boot")
-                kernel-arguments))
-        (initrd initrd)))))
-
-  (let* ((systems (map (cut generation-file-name profile <>)
-                       numbers))
-         (times   (map (lambda (system)
-                         (unless-file-not-found
-                          (stat:mtime (lstat system))))
-                       systems)))
-    (filter-map system->grub-entry systems numbers times)))
-
 \f
 ;;;
 ;;; Roll-back.
@@ -441,24 +405,23 @@ generation as its default entry.  STORE is an open connection to the store."
         (begin
           (reinstall-grub store number)
           (switch-to-generation* %system-profile number))
-        (leave (_ "cannot switch to system generation '~a'~%") spec))))
+        (leave (G_ "cannot switch to system generation '~a'~%") spec))))
 
 (define (reinstall-grub store number)
   "Re-install grub for existing system profile generation NUMBER.  STORE is an
 open connection to the store."
   (let* ((generation (generation-file-name %system-profile number))
-         (file (string-append generation "/parameters"))
          (params (unless-file-not-found
-                  (call-with-input-file file read-boot-parameters)))
+                  (read-boot-parameters-file generation)))
          (root-device (boot-parameters-root-device params))
          ;; We don't currently keep track of past menu entries' details.  The
          ;; default values will allow the system to boot, even if they differ
          ;; from the actual past values for this generation's entry.
          (grub-config (grub-configuration (device root-device)))
          ;; Make the specified system generation the default entry.
-         (entries (profile-grub-entries %system-profile (list number)))
+         (entries (profile-boot-parameters %system-profile (list number)))
          (old-generations (delv number (generation-numbers %system-profile)))
-         (old-entries (profile-grub-entries %system-profile old-generations))
+         (old-entries (profile-boot-parameters %system-profile old-generations))
          (grub.cfg (run-with-store store
                      (grub-configuration-file grub-config
                                               entries
@@ -475,7 +438,7 @@ open connection to the store."
       (switch-symlinks temp-gc-root grub.cfg-path)
       (unless (false-if-exception (install-grub-config grub.cfg-path "/"))
         (delete-file temp-gc-root)
-        (leave (_ "failed to re-install GRUB configuration file: '~a'~%")
+        (leave (G_ "failed to re-install GRUB configuration file: '~a'~%")
                grub.cfg-path))
       (rename-file temp-gc-root gc-root))))
 
@@ -533,8 +496,7 @@ list of services."
   "Display a summary of system generation NUMBER in a human-readable format."
   (unless (zero? number)
     (let* ((generation  (generation-file-name profile number))
-           (param-file  (string-append generation "/parameters"))
-           (params      (call-with-input-file param-file read-boot-parameters))
+           (params      (read-boot-parameters-file generation))
            (label       (boot-parameters-label params))
            (root        (boot-parameters-root-device params))
            (root-device (if (bytevector? root)
@@ -542,12 +504,12 @@ list of services."
                             root))
            (kernel      (boot-parameters-kernel params)))
       (display-generation profile number)
-      (format #t (_ "  file name: ~a~%") generation)
-      (format #t (_ "  canonical file name: ~a~%") (readlink* generation))
+      (format #t (G_ "  file name: ~a~%") generation)
+      (format #t (G_ "  canonical file name: ~a~%") (readlink* generation))
       ;; TRANSLATORS: Please preserve the two-space indentation.
-      (format #t (_ "  label: ~a~%") label)
-      (format #t (_ "  root device: ~a~%") root-device)
-      (format #t (_ "  kernel: ~a~%") kernel))))
+      (format #t (G_ "  label: ~a~%") label)
+      (format #t (G_ "  root device: ~a~%") root-device)
+      (format #t (G_ "  kernel: ~a~%") kernel))))
 
 (define* (list-generations pattern #:optional (profile %system-profile))
   "Display in a human-readable format all the system generations matching
@@ -565,7 +527,7 @@ PATTERN, a string.  When PATTERN is #f, display all the system generations."
                (leave-on-EPIPE
                 (for-each display-system-generation numbers)))))
         (else
-         (leave (_ "invalid syntax: ~a~%") pattern))))
+         (leave (G_ "invalid syntax: ~a~%") pattern))))
 
 \f
 ;;;
@@ -604,9 +566,9 @@ PATTERN, a string.  When PATTERN is #f, display all the system generations."
     (string-append (config-directory) "/latest"))
 
   (unless (file-exists? latest)
-    (warning (_ "~a not found: 'guix pull' was never run~%") latest)
-    (warning (_ "Consider running 'guix pull' before 'reconfigure'.~%"))
-    (warning (_ "Failing to do that may downgrade your system!~%"))))
+    (warning (G_ "~a not found: 'guix pull' was never run~%") latest)
+    (warning (G_ "Consider running 'guix pull' before 'reconfigure'.~%"))
+    (warning (G_ "Failing to do that may downgrade your system!~%"))))
 
 (define* (perform-action action os
                          #:key bootloader? dry-run? derivations-only?
@@ -643,7 +605,7 @@ output when building a system derivation, such as a disk image."
                       (operating-system-bootcfg os
                                                 (if (eq? 'init action)
                                                     '()
-                                                    (profile-grub-entries)))))
+                                                    (profile-boot-parameters)))))
 
        ;; For 'init' and 'reconfigure', always build GRUB.CFG, even if
        ;; --no-grub is passed, because GRUB.CFG because we then use it as a GC
@@ -681,7 +643,7 @@ output when building a system derivation, such as a disk image."
                                 device "/"))))
             ((init)
              (newline)
-             (format #t (_ "initializing operating system under '~a'...~%")
+             (format #t (G_ "initializing operating system under '~a'...~%")
                      target)
              (install sys (canonicalize-path target)
                       #:grub? bootloader?
@@ -725,61 +687,61 @@ output when building a system derivation, such as a disk image."
 ;;;
 
 (define (show-help)
-  (display (_ "Usage: guix system [OPTION ...] ACTION [ARG ...] [FILE]
+  (display (G_ "Usage: guix system [OPTION ...] ACTION [ARG ...] [FILE]
 Build the operating system declared in FILE according to ACTION.
 Some ACTIONS support additional ARGS.\n"))
   (newline)
-  (display (_ "The valid values for ACTION are:\n"))
+  (display (G_ "The valid values for ACTION are:\n"))
   (newline)
-  (display (_ "\
+  (display (G_ "\
    reconfigure      switch to a new operating system configuration\n"))
-  (display (_ "\
+  (display (G_ "\
    roll-back        switch to the previous operating system configuration\n"))
-  (display (_ "\
+  (display (G_ "\
    switch-generation switch to an existing operating system configuration\n"))
-  (display (_ "\
+  (display (G_ "\
    list-generations list the system generations\n"))
-  (display (_ "\
+  (display (G_ "\
    build            build the operating system without installing anything\n"))
-  (display (_ "\
+  (display (G_ "\
    container        build a container that shares the host's store\n"))
-  (display (_ "\
+  (display (G_ "\
    vm               build a virtual machine image that shares the host's store\n"))
-  (display (_ "\
+  (display (G_ "\
    vm-image         build a freestanding virtual machine image\n"))
-  (display (_ "\
+  (display (G_ "\
    disk-image       build a disk image, suitable for a USB stick\n"))
-  (display (_ "\
+  (display (G_ "\
    init             initialize a root file system to run GNU\n"))
-  (display (_ "\
+  (display (G_ "\
    extension-graph  emit the service extension graph in Dot format\n"))
-  (display (_ "\
+  (display (G_ "\
    shepherd-graph   emit the graph of shepherd services in Dot format\n"))
 
   (show-build-options-help)
-  (display (_ "
+  (display (G_ "
   -d, --derivation       return the derivation of the given system"))
-  (display (_ "
+  (display (G_ "
       --on-error=STRATEGY
                          apply STRATEGY when an error occurs while reading FILE"))
-  (display (_ "
+  (display (G_ "
       --image-size=SIZE  for 'vm-image', produce an image of SIZE"))
-  (display (_ "
+  (display (G_ "
       --no-bootloader    for 'init', do not install a bootloader"))
-  (display (_ "
+  (display (G_ "
       --share=SPEC       for 'vm', share host file system according to SPEC"))
-  (display (_ "
+  (display (G_ "
   -r, --root=FILE        for 'vm', 'vm-image', 'disk-image', 'container',
                          and 'build', make FILE a symlink to the result, and
                          register it as a garbage collector root"))
-  (display (_ "
+  (display (G_ "
       --expose=SPEC      for 'vm', expose host file system according to SPEC"))
-  (display (_ "
+  (display (G_ "
       --full-boot        for 'vm', make a full boot sequence"))
   (newline)
-  (display (_ "
+  (display (G_ "
   -h, --help             display this help and exit"))
-  (display (_ "
+  (display (G_ "
   -V, --version          display version information and exit"))
   (newline)
   (show-bug-report-information))
@@ -862,7 +824,7 @@ resulting from command-line parsing."
          (os          (if file
                           (load* file %user-module
                                  #:on-error (assoc-ref opts 'on-error))
-                          (leave (_ "no configuration file specified~%"))))
+                          (leave (G_ "no configuration file specified~%"))))
 
          (dry?        (assoc-ref opts 'dry-run?))
          (bootloader? (assoc-ref opts 'install-bootloader?))
@@ -885,6 +847,8 @@ resulting from command-line parsing."
             ((shepherd-graph)
              (export-shepherd-graph os (current-output-port)))
             (else
+             (warn-about-old-distro #:suggested-command
+                                    "guix system reconfigure")
              (perform-action action os
                              #:dry-run? dry?
                              #:derivations-only? (assoc-ref opts
@@ -912,21 +876,21 @@ argument list and OPTS is the option alist."
      (let ((pattern (match args
                       (() "")
                       ((pattern) pattern)
-                      (x (leave (_ "wrong number of arguments~%"))))))
+                      (x (leave (G_ "wrong number of arguments~%"))))))
        (list-generations pattern)))
     ;; The following commands need to use the store, but they do not need an
     ;; operating system configuration file.
     ((switch-generation)
      (let ((pattern (match args
                       ((pattern) pattern)
-                      (x (leave (_ "wrong number of arguments~%"))))))
+                      (x (leave (G_ "wrong number of arguments~%"))))))
        (with-store store
          (set-build-options-from-command-line store opts)
          (switch-to-system-generation store pattern))))
     ((roll-back)
      (let ((pattern (match args
                       (() "")
-                      (x (leave (_ "wrong number of arguments~%"))))))
+                      (x (leave (G_ "wrong number of arguments~%"))))))
        (with-store store
          (set-build-options-from-command-line store opts)
          (roll-back-system store))))
@@ -945,7 +909,7 @@ argument list and OPTS is the option alist."
               extension-graph shepherd-graph list-generations roll-back
               switch-generation)
              (alist-cons 'action action result))
-            (else (leave (_ "~a: unknown action~%") action))))))
+            (else (leave (G_ "~a: unknown action~%") action))))))
 
   (define (match-pair car)
     ;; Return a procedure that matches a pair with CAR.
@@ -960,14 +924,14 @@ argument list and OPTS is the option alist."
            (count  (length args))
            (action (assoc-ref opts 'action)))
       (define (fail)
-        (leave (_ "wrong number of arguments for action '~a'~%")
+        (leave (G_ "wrong number of arguments for action '~a'~%")
                action))
 
       (unless action
         (format (current-error-port)
-                (_ "guix system: missing command name~%"))
+                (G_ "guix system: missing command name~%"))
         (format (current-error-port)
-                (_ "Try 'guix system --help' for more information.~%"))
+                (G_ "Try 'guix system --help' for more information.~%"))
         (exit 1))
 
       (case action
index 59fd002..4fb1452 100644 (file)
@@ -18,7 +18,7 @@
 
 (define-module (guix ssh)
   #:use-module (guix store)
-  #:use-module ((guix ui) #:select (_ N_))
+  #:use-module ((guix ui) #:select (G_ N_))
   #:use-module (ssh session)
   #:use-module (ssh auth)
   #:use-module (ssh key)
@@ -80,13 +80,13 @@ Throw an error on failure."
           (disconnect! session)
           (raise (condition
                   (&message
-                   (message (format #f (_ "SSH authentication failed for '~a': ~a~%")
+                   (message (format #f (G_ "SSH authentication failed for '~a': ~a~%")
                                     host (get-error session)))))))))
       (x
        ;; Connection failed or timeout expired.
        (raise (condition
                (&message
-                (message (format #f (_ "SSH connection to '~a' failed: ~a~%")
+                (message (format #f (G_ "SSH connection to '~a' failed: ~a~%")
                                  host (get-error session))))))))))
 
 (define* (remote-daemon-channel session
@@ -269,7 +269,7 @@ LOCAL.  When RECURSIVE? is true, retrieve the closure of FILES."
               (&message
                (message
                 (format #f
-                        (_ "failed to retrieve store items from '~a'")
+                        (G_ "failed to retrieve store items from '~a'")
                         (remote-store-host remote)))))))
 
     (let ((result (import-paths local port)))
index 683f071..c94dfea 100644 (file)
@@ -23,7 +23,8 @@
   #:use-module (guix serialization)
   #:use-module (guix monads)
   #:use-module (guix base16)
-  #:autoload   (guix base32) (bytevector->base32-string)
+  #:use-module (guix base32)
+  #:use-module (guix hash)
   #:autoload   (guix build syscalls) (terminal-columns)
   #:use-module (rnrs bytevectors)
   #:use-module (ice-9 binary-ports)
             interned-file
 
             %store-prefix
+            store-path
+            output-path
+            fixed-output-path
             store-path?
             direct-store-path?
             derivation-path?
 (define (open-inet-socket host port)
   "Connect to the Unix-domain socket at HOST:PORT and return it.  Raise a
 '&nix-connection-error' upon error."
+  ;; Define 'TCP_NODELAY' on Guile 2.0.  The value is the same on all GNU
+  ;; systems.
+  (cond-expand (guile-2.2 #t)
+               (else      (define TCP_NODELAY 1)))
+
   (let ((sock (with-fluids ((%default-port-encoding #f))
                 ;; This trick allows use of the `scm_c_read' optimization.
                 (socket PF_UNIX SOCK_STREAM 0))))
            (catch 'system-error
              (lambda ()
                (connect s (addrinfo:addr ai))
+
+               ;; Setting this option makes a dramatic difference because it
+               ;; avoids the "ACK delay" on our RPC messages.
+               (setsockopt s IPPROTO_TCP TCP_NODELAY 1)
                s)
              (lambda args
                ;; Connection failed, so try one of the other addresses.
@@ -577,9 +590,7 @@ encoding conversion errors."
            (let* ((max-len (read-int p))
                   (data    (make-bytevector max-len))
                   (len     (get-bytevector-n! user-port data 0 max-len)))
-             (write-int len p)
-             (put-bytevector p data 0 len)
-             (write-padding len p)
+             (write-bytevector data p)
              #f))
           ((= k %stderr-next)
            ;; Log a string.  Build logs are usually UTF-8-encoded, but they
@@ -1237,6 +1248,10 @@ be used internally by the daemon's build hook."
 (define-alias store-return state-return)
 (define-alias store-bind state-bind)
 
+;; Instantiate templates for %STORE-MONAD since it's syntactically different
+;; from %STATE-MONAD.
+(template-directory instantiations %store-monad)
+
 (define (preserve-documentation original proc)
   "Return PROC with documentation taken from ORIGINAL."
   (set-object-property! proc 'documentation
@@ -1343,6 +1358,57 @@ connection, and return the result."
   ;; Absolute path to the Nix store.
   (make-parameter %store-directory))
 
+(define (compressed-hash bv size)                 ; `compressHash'
+  "Given the hash stored in BV, return a compressed version thereof that fits
+in SIZE bytes."
+  (define new (make-bytevector size 0))
+  (define old-size (bytevector-length bv))
+  (let loop ((i 0))
+    (if (= i old-size)
+        new
+        (let* ((j (modulo i size))
+               (o (bytevector-u8-ref new j)))
+          (bytevector-u8-set! new j
+                              (logxor o (bytevector-u8-ref bv i)))
+          (loop (+ 1 i))))))
+
+(define (store-path type hash name)               ; makeStorePath
+  "Return the store path for NAME/HASH/TYPE."
+  (let* ((s (string-append type ":sha256:"
+                           (bytevector->base16-string hash) ":"
+                           (%store-prefix) ":" name))
+         (h (sha256 (string->utf8 s)))
+         (c (compressed-hash h 20)))
+    (string-append (%store-prefix) "/"
+                   (bytevector->nix-base32-string c) "-"
+                   name)))
+
+(define (output-path output hash name)            ; makeOutputPath
+  "Return an output path for OUTPUT (the name of the output as a string) of
+the derivation called NAME with hash HASH."
+  (store-path (string-append "output:" output) hash
+              (if (string=? output "out")
+                  name
+                  (string-append name "-" output))))
+
+(define* (fixed-output-path name hash
+                            #:key
+                            (output "out")
+                            (hash-algo 'sha256)
+                            (recursive? #t))
+  "Return an output path for the fixed output OUTPUT defined by HASH of type
+HASH-ALGO, of the derivation NAME.  RECURSIVE? has the same meaning as for
+'add-to-store'."
+  (if (and recursive? (eq? hash-algo 'sha256))
+      (store-path "source" hash name)
+      (let ((tag (string-append "fixed:" output ":"
+                                (if recursive? "r:" "")
+                                (symbol->string hash-algo) ":"
+                                (bytevector->base16-string hash) ":")))
+        (store-path (string-append "output:" output)
+                    (sha256 (string->utf8 tag))
+                    name))))
+
 (define (store-path? path)
   "Return #t if PATH is a store path."
   ;; This is a lightweight check, compared to using a regexp, but this has to
index ae59718..edd04da 100644 (file)
@@ -55,7 +55,7 @@
   #:use-module (texinfo)
   #:use-module (texinfo plain-text)
   #:use-module (texinfo string-utils)
-  #:export (_
+  #:export (G_
             N_
             P_
             report-error
   ;; Text domain for package synopses and descriptions.
   "guix-packages")
 
-(define _ (cut gettext <> %gettext-domain))
+(define G_ (cut gettext <> %gettext-domain))
 (define N_ (cut ngettext <> <> <> %gettext-domain))
 
 (define (P_ msgid)
@@ -140,7 +140,7 @@ messages."
       (syntax-case x ()
         ((name (underscore fmt) args (... ...))
          (and (string? (syntax->datum #'fmt))
-              (free-identifier=? #'underscore #'_))
+              (free-identifier=? #'underscore #'G_))
          (with-syntax ((fmt*   (augmented-format-string #'fmt))
                        (prefix (datum->syntax x prefix)))
            #'(format (guix-warning-port) (gettext fmt*)
@@ -238,7 +238,7 @@ messages."
            (case on-error
              ((debug)
               (newline)
-              (display (_ "entering debugger; type ',bt' for a backtrace\n"))
+              (display (G_ "entering debugger; type ',bt' for a backtrace\n"))
               (start-repl #:debug (make-debug (stack->vector stack) 0
                                               (error-string frame args)
                                               #f)))
@@ -254,19 +254,19 @@ ARGS is the list of arguments received by the 'throw' handler."
   (match args
     (('system-error . rest)
      (let ((err (system-error-errno args)))
-       (report-error (_ "failed to load '~a': ~a~%") file (strerror err))))
+       (report-error (G_ "failed to load '~a': ~a~%") file (strerror err))))
     (('syntax-error proc message properties form . rest)
      (let ((loc (source-properties->location properties)))
-       (format (current-error-port) (_ "~a: error: ~a~%")
+       (format (current-error-port) (G_ "~a: error: ~a~%")
                (location->string loc) message)))
     (('srfi-34 obj)
      (if (message-condition? obj)
-         (report-error (_ "~a~%")
+         (report-error (G_ "~a~%")
                        (gettext (condition-message obj)
                                 %gettext-domain))
-         (report-error (_ "exception thrown: ~s~%") obj)))
+         (report-error (G_ "exception thrown: ~s~%") obj)))
     ((error args ...)
-     (report-error (_ "failed to load '~a':~%") file)
+     (report-error (G_ "failed to load '~a':~%") file)
      (apply display-error frame (current-error-port) args))))
 
 (define (warn-about-load-error file args)         ;FIXME: factorize with ↑
@@ -275,20 +275,20 @@ exiting.  ARGS is the list of arguments received by the 'throw' handler."
   (match args
     (('system-error . rest)
      (let ((err (system-error-errno args)))
-       (warning (_ "failed to load '~a': ~a~%") file (strerror err))))
+       (warning (G_ "failed to load '~a': ~a~%") file (strerror err))))
     (('syntax-error proc message properties form . rest)
      (let ((loc (source-properties->location properties)))
-       (format (current-error-port) (_ "~a: warning: ~a~%")
+       (format (current-error-port) (G_ "~a: warning: ~a~%")
                (location->string loc) message)))
     (('srfi-34 obj)
      (if (message-condition? obj)
-         (warning (_ "failed to load '~a': ~a~%")
+         (warning (G_ "failed to load '~a': ~a~%")
                   file
                   (gettext (condition-message obj) %gettext-domain))
-         (warning (_ "failed to load '~a': exception thrown: ~s~%")
+         (warning (G_ "failed to load '~a': exception thrown: ~s~%")
                   file obj)))
     ((error args ...)
-     (warning (_ "failed to load '~a':~%") file)
+     (warning (G_ "failed to load '~a':~%") file)
      (apply display-error #f (current-error-port) args))))
 
 (define (install-locale)
@@ -297,7 +297,7 @@ exiting.  ARGS is the list of arguments received by the 'throw' handler."
     (lambda _
       (setlocale LC_ALL ""))
     (lambda args
-      (warning (_ "failed to install locale: ~a~%")
+      (warning (G_ "failed to install locale: ~a~%")
                (strerror (system-error-errno args))))))
 
 (define (initialize-guix)
@@ -320,9 +320,9 @@ exiting.  ARGS is the list of arguments received by the 'throw' handler."
           ;; TRANSLATORS: Translate "(C)" to the copyright symbol
           ;; (C-in-a-circle), if this symbol is available in the user's
           ;; locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
-          (_ "(C)")
-          (_ "the Guix authors\n"))
-  (display (_"\
+          (G_ "(C)")
+          (G_ "the Guix authors\n"))
+  (display (G_"\
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 This is free software: you are free to change and redistribute it.
 There is NO WARRANTY, to the extent permitted by law.
@@ -334,11 +334,11 @@ There is NO WARRANTY, to the extent permitted by law.
   ;; 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).
-  (format #t (_ "
+  (format #t (G_ "
 Report bugs to: ~a.") %guix-bug-report-address)
-  (format #t (_ "
+  (format #t (G_ "
 ~a home page: <~a>") %guix-package-name %guix-home-page-url)
-  (display (_ "
+  (display (G_ "
 General help using GNU software: <http://www.gnu.org/gethelp/>"))
   (newline))
 
@@ -383,13 +383,13 @@ nicely."
     (lambda ()
       (apply make-regexp regexp flags))
     (lambda (key proc message . rest)
-      (leave (_ "'~a' is not a valid regular expression: ~a~%")
+      (leave (G_ "'~a' is not a valid regular expression: ~a~%")
              regexp message))))
 
 (define (string->number* str)
   "Like `string->number', but error out with an error message on failure."
   (or (string->number str)
-      (leave (_ "~a: invalid number~%") str)))
+      (leave (G_ "~a: invalid number~%") str)))
 
 (define (size->number str)
   "Convert STR, a storage measurement representation such as \"1024\" or
@@ -406,7 +406,7 @@ interpreted."
                      str))
          (num    (string->number numstr)))
     (unless num
-      (leave (_ "invalid number: ~a~%") numstr))
+      (leave (G_ "invalid number: ~a~%") numstr))
 
     ((compose inexact->exact round)
      (* num
@@ -429,7 +429,7 @@ interpreted."
           ("YB"  (expt 10 24))
           (""    1)
           (x
-           (leave (_ "unknown unit: ~a~%") unit)))))))
+           (leave (G_ "unknown unit: ~a~%") unit)))))))
 
 (define (call-with-error-handling thunk)
   "Call THUNK within a user-friendly error handler."
@@ -446,62 +446,62 @@ interpreted."
                     (file     (location-file location))
                     (line     (location-line location))
                     (column   (location-column location)))
-               (leave (_ "~a:~a:~a: package `~a' has an invalid input: ~s~%")
+               (leave (G_ "~a:~a:~a: package `~a' has an invalid input: ~s~%")
                       file line column
                       (package-full-name package) input)))
             ((package-cross-build-system-error? c)
              (let* ((package (package-error-package c))
                     (loc     (package-location package))
                     (system  (package-build-system package)))
-               (leave (_ "~a: ~a: build system `~a' does not support cross builds~%")
+               (leave (G_ "~a: ~a: build system `~a' does not support cross builds~%")
                       (location->string loc)
                       (package-full-name package)
                       (build-system-name system))))
             ((gexp-input-error? c)
              (let ((input (package-error-invalid-input c)))
-               (leave (_ "~s: invalid G-expression input~%")
+               (leave (G_ "~s: invalid G-expression input~%")
                       (gexp-error-invalid-input c))))
             ((profile-not-found-error? c)
-             (leave (_ "profile '~a' does not exist~%")
+             (leave (G_ "profile '~a' does not exist~%")
                     (profile-error-profile c)))
             ((missing-generation-error? c)
-             (leave (_ "generation ~a of profile '~a' does not exist~%")
+             (leave (G_ "generation ~a of profile '~a' does not exist~%")
                     (missing-generation-error-generation c)
                     (profile-error-profile c)))
             ((nar-error? c)
              (let ((file (nar-error-file c))
                    (port (nar-error-port c)))
                (if file
-                   (leave (_ "corrupt input while restoring '~a' from ~s~%")
+                   (leave (G_ "corrupt input while restoring '~a' from ~s~%")
                           file (or (port-filename* port) port))
-                   (leave (_ "corrupt input while restoring archive from ~s~%")
+                   (leave (G_ "corrupt input while restoring archive from ~s~%")
                           (or (port-filename* port) port)))))
             ((nix-connection-error? c)
-             (leave (_ "failed to connect to `~a': ~a~%")
+             (leave (G_ "failed to connect to `~a': ~a~%")
                     (nix-connection-error-file c)
                     (strerror (nix-connection-error-code c))))
             ((nix-protocol-error? c)
              ;; FIXME: Server-provided error messages aren't i18n'd.
-             (leave (_ "build failed: ~a~%")
+             (leave (G_ "build failed: ~a~%")
                     (nix-protocol-error-message c)))
             ((derivation-missing-output-error? c)
-             (leave (_ "reference to invalid output '~a' of derivation '~a'~%")
+             (leave (G_ "reference to invalid output '~a' of derivation '~a'~%")
                     (derivation-missing-output c)
                     (derivation-file-name (derivation-error-derivation c))))
             ((file-search-error? c)
-             (leave (_ "file '~a' could not be found in these \
+             (leave (G_ "file '~a' could not be found in these \
 directories:~{ ~a~}~%")
                     (file-search-error-file-name c)
                     (file-search-error-search-path c)))
             ((message-condition? c)
              ;; Normally '&message' error conditions have an i18n'd message.
-             (leave (_ "~a~%")
+             (leave (G_ "~a~%")
                     (gettext (condition-message c) %gettext-domain))))
     ;; Catch EPIPE and the likes.
     (catch 'system-error
       thunk
       (lambda (key proc format-string format-args . rest)
-        (leave (_ "~a: ~a~%") proc
+        (leave (G_ "~a: ~a~%") proc
                (apply format #f format-string format-args))))))
 
 (define-syntax-rule (leave-on-EPIPE exp ...)
@@ -536,22 +536,22 @@ similar."
                (lambda ()
                  (call-with-input-string str read))
                (lambda args
-                 (leave (_ "failed to read expression ~s: ~s~%")
+                 (leave (G_ "failed to read expression ~s: ~s~%")
                         str args)))))
     (catch #t
       (lambda ()
         (eval exp (force %guix-user-module)))
       (lambda args
-        (report-error (_ "failed to evaluate expression '~a':~%") exp)
+        (report-error (G_ "failed to evaluate expression '~a':~%") exp)
         (match args
           (('syntax-error proc message properties form . rest)
-           (report-error (_ "syntax error: ~a~%") message))
+           (report-error (G_ "syntax error: ~a~%") message))
           (('srfi-34 obj)
            (if (message-condition? obj)
-               (report-error (_ "~a~%")
+               (report-error (G_ "~a~%")
                              (gettext (condition-message obj)
                                       %gettext-domain))
-               (report-error (_ "exception thrown: ~s~%") obj)))
+               (report-error (G_ "exception thrown: ~s~%") obj)))
           ((error args ...)
            (apply display-error #f (current-error-port) args))
           (what? #f))
@@ -563,7 +563,7 @@ error."
   (match (read/eval str)
     ((? package? p) p)
     (x
-     (leave (_ "expression ~s does not evaluate to a package~%")
+     (leave (G_ "expression ~s does not evaluate to a package~%")
             str))))
 
 (define (show-derivation-outputs derivation)
@@ -771,13 +771,13 @@ replacement if PORT is not Unicode-capable."
 (define (location->string loc)
   "Return a human-friendly, GNU-standard representation of LOC."
   (match loc
-    (#f (_ "<unknown location>"))
+    (#f (G_ "<unknown location>"))
     (($ <location> file line column)
      (format #f "~a:~a:~a" file line column))))
 
-(define (config-directory)
+(define* (config-directory #:key (ensure? #t))
   "Return the name of the configuration directory, after making sure that it
-exists.  Honor the XDG specs,
+exists if ENSURE? is true.  Honor the XDG specs,
 <http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html>."
   (let ((dir (and=> (or (getenv "XDG_CONFIG_HOME")
                         (and=> (getenv "HOME")
@@ -785,12 +785,13 @@ exists.  Honor the XDG specs,
                     (cut string-append <> "/guix"))))
     (catch 'system-error
       (lambda ()
-        (mkdir-p dir)
+        (when ensure?
+          (mkdir-p dir))
         dir)
       (lambda args
         (let ((err (system-error-errno args)))
           ;; ERR is necessarily different from EEXIST.
-          (leave (_ "failed to create configuration directory `~a': ~a~%")
+          (leave (G_ "failed to create configuration directory `~a': ~a~%")
                  dir (strerror err)))))))
 
 (define* (fill-paragraph str width #:optional (column 0))
@@ -921,7 +922,7 @@ WIDTH columns."
              (dependencies->recutils (filter package? inputs)))))
   (format port "location: ~a~%"
           (or (and=> (package-location p) location->string)
-              (_ "unknown")))
+              (G_ "unknown")))
 
   ;; Note: Starting from version 1.6 or recutils, hyphens are not allowed in
   ;; field identifiers.
@@ -935,7 +936,7 @@ WIDTH columns."
             ((? license? license)
              (license-name license))
             (x
-             (_ "unknown"))))
+             (G_ "unknown"))))
   (format port "synopsis: ~a~%"
           (string-map (match-lambda
                        (#\newline #\space)
@@ -1008,6 +1009,7 @@ following patterns: \"1d\", \"1w\", \"1m\"."
            (make-time time-duration 0
                       (string->number (match:substring match 1)))))
         ((string-match "^([0-9]+)h$" str)
+         =>
          (lambda (match)
            (hours->duration 1 match)))
         ((string-match "^([0-9]+)d$" str)
@@ -1093,7 +1095,7 @@ DURATION-RELATION with the current time."
 (define (display-generation profile number)
   "Display a one-line summary of generation NUMBER of PROFILE."
   (unless (zero? number)
-    (let ((header (format #f (_ "Generation ~a\t~a") number
+    (let ((header (format #f (G_ "Generation ~a\t~a") number
                           (date->string
                            (time-utc->date
                             (generation-time profile number))
@@ -1103,7 +1105,7 @@ DURATION-RELATION with the current time."
           ;; TRANSLATORS: The word "current" here is an adjective for
           ;; "Generation", as in "current generation".  Use the appropriate
           ;; gender where applicable.
-          (format #t (_ "~a\t(current)~%") header)
+          (format #t (G_ "~a\t(current)~%") header)
           (format #t "~a~%" header)))))
 
 (define (display-profile-content-diff profile gen1 gen2)
@@ -1146,7 +1148,7 @@ way."
               (profile-manifest (generation-file-name profile number))))))
 
 (define (display-generation-change previous current)
-  (format #t (_ "switched from generation ~a to ~a~%") previous current))
+  (format #t (G_ "switched from generation ~a to ~a~%") previous current))
 
 (define (roll-back* store profile)
   "Like 'roll-back', but display what is happening."
@@ -1162,7 +1164,7 @@ way."
 
 (define (delete-generation* store profile generation)
   "Like 'delete-generation', but display what is going on."
-  (format #t (_ "deleting ~a~%")
+  (format #t (G_ "deleting ~a~%")
           (generation-file-name profile generation))
   (delete-generation store profile generation))
 
@@ -1193,7 +1195,7 @@ optionally contain a version number and an output name, as in these examples:
 
 (define (show-guix-usage)
   (format (current-error-port)
-          (_ "Try `guix --help' for more information.~%"))
+          (G_ "Try `guix --help' for more information.~%"))
   (exit 1))
 
 (define (command-files)
@@ -1221,10 +1223,10 @@ optionally contain a version number and an output name, as in these examples:
     (member command '("substitute" "authenticate" "offload"
                       "perform-download")))
 
-  (format #t (_ "Usage: guix COMMAND ARGS...
+  (format #t (G_ "Usage: guix COMMAND ARGS...
 Run COMMAND with ARGS.\n"))
   (newline)
-  (format #t (_ "COMMAND must be one of the sub-commands listed below:\n"))
+  (format #t (G_ "COMMAND must be one of the sub-commands listed below:\n"))
   (newline)
   ;; TODO: Display a synopsis of each command.
   (format #t "~{   ~a~%~}" (sort (remove internal? (commands))
@@ -1244,7 +1246,7 @@ found."
         (resolve-interface `(guix scripts ,command)))
       (lambda -
         (format (current-error-port)
-                (_ "guix: ~a: command not found~%") command)
+                (G_ "guix: ~a: command not found~%") command)
         (show-guix-usage))))
 
   (let ((command-main (module-ref module
@@ -1263,7 +1265,7 @@ and signal handling has already been set up."
   (match args
     (()
      (format (current-error-port)
-             (_ "guix: missing command name~%"))
+             (G_ "guix: missing command name~%"))
      (show-guix-usage))
     ((or ("-h") ("--help"))
      (show-guix-help))
@@ -1271,7 +1273,7 @@ and signal handling has already been set up."
      (show-version-and-exit "guix"))
     (((? option? o) args ...)
      (format (current-error-port)
-             (_ "guix: unrecognized option '~a'~%") o)
+             (G_ "guix: unrecognized option '~a'~%") o)
      (show-guix-usage))
     (("help" command)
      (apply run-guix-command (string->symbol command)
index a47a52b..5083e6b 100644 (file)
@@ -209,9 +209,9 @@ values: 'interactive' (default), 'always', and 'never'."
           (if ret
               tarball
               (begin
-                (warning (_ "signature verification failed for `~a'~%")
+                (warning (G_ "signature verification failed for `~a'~%")
                          url)
-                (warning (_ "(could be because the public key is not in your keyring)~%"))
+                (warning (G_ "(could be because the public key is not in your keyring)~%"))
                 #f))))))
 
 (define (find2 pred lst1 lst2)
@@ -290,12 +290,12 @@ if an update was made, and #f otherwise."
                          old-version version old-hash hash))
                    version)
               (begin
-                (warning (_ "~a: could not locate source file")
+                (warning (G_ "~a: could not locate source file")
                          (location-file loc))
                 #f)))
         (begin
           (format (current-error-port)
-                  (_ "~a: ~a: no `version' field in source; skipping~%")
+                  (G_ "~a: ~a: no `version' field in source; skipping~%")
                   (location->string (package-location package))
                   name)))))
 
index 8ec7d8a..adbc8e2 100644 (file)
@@ -10,7 +10,7 @@ top_builddir = ../..
 # we use 'n_' instead of the more usual 'N_' for no-ops.
 XGETTEXT_OPTIONS =                             \
   --from-code=UTF-8                            \
-  --keyword=_ --keyword=N_:1,2                 \
+  --keyword=G_ --keyword=N_:1,2                        \
   --keyword=message                            \
   --keyword=description                                \
   --keyword=n_
@@ -20,3 +20,8 @@ COPYRIGHT_HOLDER = Ludovic Courtès
 MSGID_BUGS_ADDRESS = ludo@gnu.org
 
 EXTRA_LOCALE_CATEGORIES =
+
+# Disable PO update upon "make dist", which sometimes fails when doing
+# "make distcheck -j4".
+# See <https://lists.gnu.org/archive/html/bug-gettext/2014-08/msg00005.html>.
+DIST_DEPENDS_ON_UPDATE_PO = no
index bc78c3e..6ec3e8d 100644 (file)
@@ -7,6 +7,7 @@ gnu/services/shepherd.scm
 gnu/system/shadow.scm
 guix/scripts.scm
 guix/scripts/build.scm
+guix/discovery.scm
 guix/scripts/download.scm
 guix/scripts/package.scm
 guix/scripts/gc.scm
index 990b839..b566d58 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright (C) 2016 Free Software Foundation, Inc.
 # This file is distributed under the same license as the guix package.
 # Rémy Chevalier <remychevalier@laposte.net>, 2013, 2014.
-# Frédéric Marchal <fmarchal@perso.be>, 2016
+# Frédéric Marchal <fmarchal@perso.be>, 2017
 #
 # Note de Frédéric Marchal: Le nom « shepherd » est le nom d'un démon (voir
 # https://www.gnu.org/software/shepherd/). Je ne l'ai pas traduit dans les
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: guix 0.12.0\n"
+"Project-Id-Version: guix 0.13.0\n"
 "Report-Msgid-Bugs-To: ludo@gnu.org\n"
-"POT-Creation-Date: 2016-12-18 15:32+0100\n"
-"PO-Revision-Date: 2016-12-19 07:40+0100\n"
+"POT-Creation-Date: 2017-05-10 23:29+0200\n"
+"PO-Revision-Date: 2017-05-11 19:11+0200\n"
 "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -23,140 +23,146 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: gnu/packages.scm:79
+#: gnu/packages.scm:90
 #, scheme-format
 msgid "~a: patch not found"
 msgstr "~a: correctif introuvable"
 
-#: gnu/packages.scm:95
+#: gnu/packages.scm:106
 #, scheme-format
 msgid "could not find bootstrap binary '~a' for system '~a'"
 msgstr "impossible de trouver le binaire d'initialisation « ~a » pour le système « ~a »"
 
-#: gnu/packages.scm:147
-#, scheme-format
-msgid "cannot access `~a': ~a~%"
-msgstr "impossible d'accéder à « ~a »: ~a~%"
-
-#: gnu/packages.scm:301
+#: gnu/packages.scm:236
 #, scheme-format
 msgid "ambiguous package specification `~a'~%"
 msgstr "spécification du paquet « ~a » ambiguë~%"
 
-#: gnu/packages.scm:302
+#: gnu/packages.scm:237
 #, scheme-format
-msgid "choosing ~a from ~a~%"
-msgstr "choix de ~a parmi ~a~%"
+msgid "choosing ~a@~a from ~a~%"
+msgstr "choix de ~a@~a parmi ~a~%"
 
-#: gnu/packages.scm:306
-#, scheme-format
-msgid "deprecated NAME-VERSION syntax; use NAME@VERSION instead~%"
-msgstr "syntaxe NOM-VERSION dépréciée. Utilisez plutôt NOM@VERSION~%"
-
-#: gnu/packages.scm:311 guix/scripts/package.scm:272
+#: gnu/packages.scm:242 guix/scripts/package.scm:272
 #, scheme-format
 msgid "package '~a' has been superseded by '~a'~%"
 msgstr "le paquet « ~a » a été remplacé par « ~a »~%"
 
-#: gnu/packages.scm:318
+#: gnu/packages.scm:249
 #, scheme-format
 msgid "~A: package not found for version ~a~%"
 msgstr "~A: paquet introuvable pour la version ~a~%"
 
-#: gnu/packages.scm:328
+#: gnu/packages.scm:250
 #, scheme-format
 msgid "~A: unknown package~%"
 msgstr "~A: paquet inconnu~%"
 
-#: gnu/packages.scm:356
+#: gnu/packages.scm:278
 #, scheme-format
 msgid "package `~a' lacks output `~a'~%"
 msgstr "le paquet « ~a » requiert la sortie « ~a »~%"
 
-#: gnu/services.scm:542
+#: gnu/services.scm:186
+#, scheme-format
+msgid "~a: no value specified for service of type '~a'"
+msgstr "~a: aucune valeur spécifiée pour le service de type « ~a »"
+
+#: gnu/services.scm:627
 #, scheme-format
 msgid "no target of type '~a' for service ~s"
 msgstr "pas de cible de type « ~a » pour le service ~s"
 
-#: gnu/services.scm:553 gnu/services.scm:614
+#: gnu/services.scm:638 gnu/services.scm:699
 #, scheme-format
 msgid "more than one target service of type '~a'"
 msgstr "plus d'un service cible de type « ~a »"
 
-#: gnu/services.scm:604
+#: gnu/services.scm:689
 #, scheme-format
 msgid "service of type '~a' not found"
 msgstr "service de type « ~a » pas trouvé"
 
-#: gnu/system.scm:522
+#: gnu/system.scm:270
+#, scheme-format
+msgid "unrecognized boot parameters for '~a'~%"
+msgstr "paramètres de démarrage non reconnus pour « ~a »~%"
+
+#: gnu/system.scm:633
 #, scheme-format
 msgid "using a string for file '~a' is deprecated; use 'plain-file' instead~%"
 msgstr "l'utilisation d'une chaîne pour le fichier « ~a » est dépréciée. Utilisez plutôt « plain-file »~%"
 
-#: gnu/system.scm:538
+#: gnu/system.scm:649
 #, scheme-format
 msgid "using a monadic value for '~a' is deprecated; use 'plain-file' instead~%"
 msgstr "l'utilisation d'une valeur monadic pour « ~a » est dépréciée. Utilisez plutôt « plain-file »~%"
 
-#: gnu/system.scm:680
+#: gnu/system.scm:791
 #, scheme-format
 msgid "~a: invalid locale name"
 msgstr "~a: nom d'environnement linguistique non valide"
 
-#: gnu/system.scm:860
-msgid "/"
-msgstr "/"
-
-#: gnu/system.scm:862
-#, scheme-format
-msgid "unrecognized boot parameters for '~a'~%"
-msgstr "paramètres de démarrage non reconnus pour « ~a »~%"
-
-#: gnu/services/shepherd.scm:165
+#: gnu/services/shepherd.scm:166
 #, scheme-format
 msgid "service '~a' provided more than once"
 msgstr "service « ~a » fourni plus d'une fois"
 
-#: gnu/services/shepherd.scm:180
+#: gnu/services/shepherd.scm:181
 #, scheme-format
 msgid "service '~a' requires '~a', which is not provided by any service"
 msgstr "le service « ~a » requiert « ~a » qui n'est fourni pas aucun service"
 
-#: gnu/system/shadow.scm:220
+#: gnu/system/shadow.scm:223
 #, scheme-format
 msgid "supplementary group '~a' of user '~a' is undeclared"
 msgstr "le groupe supplémentaire « ~a » de l'utilisateur « ~a » n'est pas déclaré"
 
-#: gnu/system/shadow.scm:230
+#: gnu/system/shadow.scm:233
 #, scheme-format
 msgid "primary group '~a' of user '~a' is undeclared"
 msgstr "le groupe primaire « ~a » de l'utilisateur « ~a » n'est pas déclaré"
 
-#: guix/scripts.scm:53
+#: guix/scripts.scm:56
 #, scheme-format
 msgid "invalid argument: ~a~%"
 msgstr "argument non valide: ~a~%"
 
-#: guix/scripts.scm:79 guix/scripts/download.scm:133 guix/scripts/gc.scm:164
+#: guix/scripts.scm:82 guix/scripts/download.scm:133 guix/scripts/gc.scm:164
 #: guix/scripts/import/cran.scm:82 guix/scripts/import/elpa.scm:77
-#: guix/scripts/pull.scm:219 guix/scripts/lint.scm:1042
-#: guix/scripts/publish.scm:556 guix/scripts/edit.scm:81
-#: guix/scripts/graph.scm:436
+#: guix/scripts/lint.scm:1061 guix/scripts/publish.scm:811
+#: guix/scripts/edit.scm:81 guix/scripts/graph.scm:456
 #, scheme-format
 msgid "~A: unrecognized option~%"
 msgstr "~A: option non reconnue~%"
 
-#: guix/scripts/build.scm:121
+#: guix/scripts.scm:174
+#, scheme-format
+msgid "Your Guix installation is ~a day old.\n"
+msgid_plural "Your Guix installation is ~a days old.\n"
+msgstr[0] "Votre installation Guix est vieille de ~a jour.\n"
+msgstr[1] "Votre installation Guix est vieille de ~a jours.\n"
+
+#: guix/scripts.scm:179
+#, scheme-format
+msgid ""
+"Consider running 'guix pull' followed by\n"
+"'~a' to get up-to-date packages and security updates.\n"
+msgstr ""
+"Envisagez d'exécuter « guix pull » suivi de\n"
+"« ~a » pour obtenir des paquets à jour et des mises à jour de sécurité.\n"
+
+#: guix/scripts/build.scm:124
 #, scheme-format
 msgid "failed to create GC root `~a': ~a~%"
 msgstr "impossible de créer la racine du GC « ~a »: ~a~%"
 
-#: guix/scripts/build.scm:196
+#: guix/scripts/build.scm:206
 #, scheme-format
 msgid "invalid replacement specification: ~s~%"
 msgstr "spécification de remplacement invalide: ~s~%"
 
-#: guix/scripts/build.scm:253
+#: guix/scripts/build.scm:263
 msgid ""
 "\n"
 "      --with-source=SOURCE\n"
@@ -166,7 +172,7 @@ msgstr ""
 "      --with-source=SOURCE\n"
 "                         utiliser la SOURCE donnée pour compiler le paquet correspondant"
 
-#: guix/scripts/build.scm:256
+#: guix/scripts/build.scm:266
 msgid ""
 "\n"
 "      --with-input=PACKAGE=REPLACEMENT\n"
@@ -176,7 +182,7 @@ msgstr ""
 "      --with-input=PAQUET=REMPLACEMENT\n"
 "                         remplacer le paquet de dépendance PAQUET par REMPLACEMENT"
 
-#: guix/scripts/build.scm:259
+#: guix/scripts/build.scm:269
 msgid ""
 "\n"
 "      --with-graft=PACKAGE=REPLACEMENT\n"
@@ -186,12 +192,12 @@ msgstr ""
 "      --with-graft=PAQUET=REMPLACEMENT\n"
 "                         greffer le paquet REMPLACEMENT sur les paquets qui font référence à PAQUET"
 
-#: guix/scripts/build.scm:284
+#: guix/scripts/build.scm:294
 #, scheme-format
 msgid "transformation '~a' had no effect on ~a~%"
 msgstr "la transformation « ~a » n'a pas d'effet sur ~a~%"
 
-#: guix/scripts/build.scm:302
+#: guix/scripts/build.scm:312
 msgid ""
 "\n"
 "  -L, --load-path=DIR    prepend DIR to the package module search path"
@@ -199,7 +205,7 @@ msgstr ""
 "\n"
 "  -L, --load-path=REP    préfixer le chemin de recherche par REP "
 
-#: guix/scripts/build.scm:304
+#: guix/scripts/build.scm:314
 msgid ""
 "\n"
 "  -K, --keep-failed      keep build tree of failed builds"
@@ -207,7 +213,7 @@ msgstr ""
 "\n"
 "  -K, --keep-failed      garder l'arbre de compilation pour les compilations ayant échoué"
 
-#: guix/scripts/build.scm:306
+#: guix/scripts/build.scm:316
 msgid ""
 "\n"
 "  -k, --keep-going       keep going when some of the derivations fail"
@@ -215,7 +221,7 @@ msgstr ""
 "\n"
 "  -k, --keep-going       continuer si certaines dérivations échouent"
 
-#: guix/scripts/build.scm:308
+#: guix/scripts/build.scm:318
 msgid ""
 "\n"
 "  -n, --dry-run          do not build the derivations"
@@ -223,7 +229,7 @@ msgstr ""
 "\n"
 "  -n, --dry-run          ne pas compiler les dérivations"
 
-#: guix/scripts/build.scm:310
+#: guix/scripts/build.scm:320
 msgid ""
 "\n"
 "      --fallback         fall back to building when the substituter fails"
@@ -231,7 +237,7 @@ msgstr ""
 "\n"
 "      --fallback         revenir à la compilation quand le substitut échoue"
 
-#: guix/scripts/build.scm:312
+#: guix/scripts/build.scm:322
 msgid ""
 "\n"
 "      --no-substitutes   build instead of resorting to pre-built substitutes"
@@ -239,7 +245,7 @@ msgstr ""
 "\n"
 "      --no-substitutes   compiler plutôt que recourir à des substituts pré-compilés"
 
-#: guix/scripts/build.scm:314 guix/scripts/size.scm:220
+#: guix/scripts/build.scm:324 guix/scripts/size.scm:222
 msgid ""
 "\n"
 "      --substitute-urls=URLS\n"
@@ -249,7 +255,7 @@ msgstr ""
 "      --substitute-urls=URLS\n"
 "                         récupérer les substituts depuis les URLS si elles sont autorisées"
 
-#: guix/scripts/build.scm:317
+#: guix/scripts/build.scm:327
 msgid ""
 "\n"
 "      --no-grafts        do not graft packages"
@@ -257,7 +263,7 @@ msgstr ""
 "\n"
 "      --no-grafts        ne pas greffer les paquets"
 
-#: guix/scripts/build.scm:319
+#: guix/scripts/build.scm:329
 msgid ""
 "\n"
 "      --no-build-hook    do not attempt to offload builds via the build hook"
@@ -265,7 +271,7 @@ msgstr ""
 "\n"
 "      --no-build-hook    ne pas essayer de décharger les compilations via le hook de compilation"
 
-#: guix/scripts/build.scm:321
+#: guix/scripts/build.scm:331
 msgid ""
 "\n"
 "      --max-silent-time=SECONDS\n"
@@ -275,7 +281,7 @@ msgstr ""
 "      --max-silent-time=N\n"
 "                         marquer la compilation comme ayant échouée après N secondes de silence"
 
-#: guix/scripts/build.scm:324
+#: guix/scripts/build.scm:334
 msgid ""
 "\n"
 "      --timeout=SECONDS  mark the build as failed after SECONDS of activity"
@@ -283,7 +289,7 @@ msgstr ""
 "\n"
 "      --timeout=N        marquer la compilation comme ayant échouée après N secondes d'activité"
 
-#: guix/scripts/build.scm:326
+#: guix/scripts/build.scm:336
 msgid ""
 "\n"
 "      --verbosity=LEVEL  use the given verbosity LEVEL"
@@ -291,7 +297,7 @@ msgstr ""
 "\n"
 "      --verbosity=NIVEAU  utiliser le NIVEAU de verbosité donné"
 
-#: guix/scripts/build.scm:328
+#: guix/scripts/build.scm:338
 msgid ""
 "\n"
 "      --rounds=N         build N times in a row to detect non-determinism"
@@ -299,7 +305,7 @@ msgstr ""
 "\n"
 "      --rounds=N         compiler N fois de suite pour détecter les non déterminismes"
 
-#: guix/scripts/build.scm:330
+#: guix/scripts/build.scm:340
 msgid ""
 "\n"
 "  -c, --cores=N          allow the use of up to N CPU cores for the build"
@@ -307,7 +313,7 @@ msgstr ""
 "\n"
 "  -c, --cores=N          utiliser jusqu'à N cœurs CPU pour la compilation"
 
-#: guix/scripts/build.scm:332
+#: guix/scripts/build.scm:342
 msgid ""
 "\n"
 "  -M, --max-jobs=N       allow at most N build jobs"
@@ -315,12 +321,12 @@ msgstr ""
 "\n"
 "  -M, --max-jobs=N       autoriser au plus N tâches de compilation"
 
-#: guix/scripts/build.scm:438 guix/scripts/build.scm:445
+#: guix/scripts/build.scm:448 guix/scripts/build.scm:455
 #, scheme-format
 msgid "not a number: '~a' option argument: ~a~%"
 msgstr "pas un nombre: argument d'option « ~a »: ~a~%"
 
-#: guix/scripts/build.scm:465
+#: guix/scripts/build.scm:474
 msgid ""
 "Usage: guix build [OPTION]... PACKAGE-OR-DERIVATION...\n"
 "Build the given PACKAGE-OR-DERIVATION and return their output paths.\n"
@@ -328,7 +334,7 @@ msgstr ""
 "Usage: guix build [OPTION]... PAQUET-OU-DERIVATION...\n"
 "Compiler le PAQUET-OU-DERIVATION donné et retourner leur chemin de sortie.\n"
 
-#: guix/scripts/build.scm:467
+#: guix/scripts/build.scm:476
 msgid ""
 "\n"
 "  -e, --expression=EXPR  build the package or derivation EXPR evaluates to"
@@ -336,7 +342,7 @@ msgstr ""
 "\n"
 "  -e, --expression=EXPR  compiler le paquet ou la dérivation évalué par EXPR"
 
-#: guix/scripts/build.scm:469
+#: guix/scripts/build.scm:478
 msgid ""
 "\n"
 "  -f, --file=FILE        build the package or derivation that the code within\n"
@@ -346,7 +352,7 @@ msgstr ""
 "  -f, --file=FICHIER     compiler le paquet ou la dérivation qui est évaluée\n"
 "                         par le code dans FICHIER"
 
-#: guix/scripts/build.scm:472
+#: guix/scripts/build.scm:481
 msgid ""
 "\n"
 "  -S, --source           build the packages' source derivations"
@@ -354,7 +360,7 @@ msgstr ""
 "\n"
 "  -S, --source           compiler les dérivations de source du paquet"
 
-#: guix/scripts/build.scm:474
+#: guix/scripts/build.scm:483
 msgid ""
 "\n"
 "      --sources[=TYPE]   build source derivations; TYPE may optionally be one\n"
@@ -364,7 +370,7 @@ msgstr ""
 "      --sources[=TYPE]   compiler les dérivations sources. TYPE peut optionnellement\n"
 "                         être « package », « all » (défaut) ou « transitive »"
 
-#: guix/scripts/build.scm:477
+#: guix/scripts/build.scm:486 guix/scripts/pack.scm:330
 msgid ""
 "\n"
 "  -s, --system=SYSTEM    attempt to build for SYSTEM--e.g., \"i686-linux\""
@@ -372,7 +378,7 @@ msgstr ""
 "\n"
 "  -s, --system=SYSTÈME   essayer de compiler pour le SYSTÈME donné, par exemple « i686-linux »"
 
-#: guix/scripts/build.scm:479
+#: guix/scripts/build.scm:488 guix/scripts/pack.scm:332
 msgid ""
 "\n"
 "      --target=TRIPLET   cross-build for TRIPLET--e.g., \"armel-linux-gnu\""
@@ -380,7 +386,7 @@ msgstr ""
 "\n"
 "      --target=TRIPLET   effectuer une compilation croisée pour TRIPLET, par exemple « armel-linux-gnu »"
 
-#: guix/scripts/build.scm:481
+#: guix/scripts/build.scm:490
 msgid ""
 "\n"
 "  -d, --derivations      return the derivation paths of the given packages"
@@ -388,7 +394,7 @@ msgstr ""
 "\n"
 "  -d, --derivations      retourner les chemins de dérivation pour les paquets donnés"
 
-#: guix/scripts/build.scm:483
+#: guix/scripts/build.scm:492
 msgid ""
 "\n"
 "      --check            rebuild items to check for non-determinism issues"
@@ -396,7 +402,15 @@ msgstr ""
 "\n"
 "      --check            recompiler les éléments pour détecter des problèmes de non déterminisme"
 
-#: guix/scripts/build.scm:485
+#: guix/scripts/build.scm:494
+msgid ""
+"\n"
+"      --repair           repair the specified items"
+msgstr ""
+"\n"
+"      --repair           réparer les éléments spécifiés"
+
+#: guix/scripts/build.scm:496
 msgid ""
 "\n"
 "  -r, --root=FILE        make FILE a symlink to the result, and register it\n"
@@ -406,7 +420,7 @@ msgstr ""
 "  -r, --root=FICHIER     faire de FICHIER un lien symbolique pointant sur le résultat\n"
 "                         et l'enregistrer en tant que racine du garbage collector"
 
-#: guix/scripts/build.scm:488
+#: guix/scripts/build.scm:499
 msgid ""
 "\n"
 "  -q, --quiet            do not show the build log"
@@ -414,7 +428,7 @@ msgstr ""
 "\n"
 "  -q, --quiet            ne pas montrer le journal de compilation"
 
-#: guix/scripts/build.scm:490
+#: guix/scripts/build.scm:501
 msgid ""
 "\n"
 "      --log-file         return the log file names for the given derivations"
@@ -422,14 +436,15 @@ msgstr ""
 "\n"
 "      --log-file         retourner les fichiers de journalisation pour les dérivations données"
 
-#: guix/scripts/build.scm:497 guix/scripts/download.scm:81
+#: guix/scripts/build.scm:508 guix/scripts/download.scm:81
 #: guix/scripts/package.scm:419 guix/scripts/gc.scm:74
-#: guix/scripts/hash.scm:59 guix/scripts/import.scm:91
-#: guix/scripts/import/cran.scm:47 guix/scripts/pull.scm:83
-#: guix/scripts/substitute.scm:836 guix/scripts/system.scm:748
-#: guix/scripts/lint.scm:991 guix/scripts/publish.scm:74
-#: guix/scripts/edit.scm:44 guix/scripts/size.scm:228
-#: guix/scripts/graph.scm:416 guix/scripts/challenge.scm:182
+#: guix/scripts/hash.scm:59 guix/scripts/import.scm:92
+#: guix/scripts/import/cran.scm:47 guix/scripts/pull.scm:94
+#: guix/scripts/substitute.scm:810 guix/scripts/system.scm:742
+#: guix/scripts/lint.scm:1010 guix/scripts/publish.scm:93
+#: guix/scripts/edit.scm:44 guix/scripts/size.scm:230
+#: guix/scripts/graph.scm:436 guix/scripts/challenge.scm:227
+#: guix/scripts/copy.scm:121 guix/scripts/pack.scm:341
 #: guix/scripts/container.scm:33 guix/scripts/container/exec.scm:43
 msgid ""
 "\n"
@@ -438,14 +453,15 @@ msgstr ""
 "\n"
 "  -h, --help             afficher cette aide et quitter"
 
-#: guix/scripts/build.scm:499 guix/scripts/download.scm:83
+#: guix/scripts/build.scm:510 guix/scripts/download.scm:83
 #: guix/scripts/package.scm:421 guix/scripts/gc.scm:76
-#: guix/scripts/hash.scm:61 guix/scripts/import.scm:93
-#: guix/scripts/import/cran.scm:49 guix/scripts/pull.scm:85
-#: guix/scripts/substitute.scm:838 guix/scripts/system.scm:750
-#: guix/scripts/lint.scm:995 guix/scripts/publish.scm:76
-#: guix/scripts/edit.scm:46 guix/scripts/size.scm:230
-#: guix/scripts/graph.scm:418 guix/scripts/challenge.scm:184
+#: guix/scripts/hash.scm:61 guix/scripts/import.scm:94
+#: guix/scripts/import/cran.scm:49 guix/scripts/pull.scm:96
+#: guix/scripts/substitute.scm:812 guix/scripts/system.scm:744
+#: guix/scripts/lint.scm:1014 guix/scripts/publish.scm:95
+#: guix/scripts/edit.scm:46 guix/scripts/size.scm:232
+#: guix/scripts/graph.scm:438 guix/scripts/challenge.scm:229
+#: guix/scripts/copy.scm:123 guix/scripts/pack.scm:343
 #: guix/scripts/container.scm:35 guix/scripts/container/exec.scm:45
 msgid ""
 "\n"
@@ -454,7 +470,7 @@ msgstr ""
 "\n"
 "  -V, --version          afficher les informations sur la version et quitter"
 
-#: guix/scripts/build.scm:526
+#: guix/scripts/build.scm:537
 #, scheme-format
 msgid ""
 "invalid argument: '~a' option argument: ~a, ~\n"
@@ -463,21 +479,26 @@ msgstr ""
 "argument invalide: argument en option « ~a »: ~a, ~\n"
 "doit être « package », « all » ou « transitive »~%"
 
-#: guix/scripts/build.scm:573
+#: guix/scripts/build.scm:590
 #, scheme-format
 msgid "~s: not something we can build~%"
 msgstr "~s: pas quelque chose qu'on sait compiler~%"
 
-#: guix/scripts/build.scm:627
+#: guix/scripts/build.scm:644
 #, scheme-format
 msgid "~a: warning: package '~a' has no source~%"
 msgstr "~a: attention: le paquet « ~a » n'a pas de source~%"
 
-#: guix/scripts/build.scm:661
+#: guix/scripts/build.scm:678
 #, scheme-format
 msgid "no build log for '~a'~%"
 msgstr "aucun journal de compilation pour « ~a »~%"
 
+#: guix/discovery.scm:56
+#, scheme-format
+msgid "cannot access `~a': ~a~%"
+msgstr "impossible d'accéder à « ~a »: ~a~%"
+
 #: guix/scripts/download.scm:67
 msgid ""
 "Usage: guix download [OPTION] URL\n"
@@ -526,8 +547,8 @@ msgstr ""
 msgid "unsupported hash format: ~a~%"
 msgstr "format d'empreinte non supporté: ~a~%"
 
-#: guix/scripts/download.scm:136 guix/scripts/package.scm:879
-#: guix/scripts/publish.scm:558
+#: guix/scripts/download.scm:136 guix/scripts/package.scm:882
+#: guix/scripts/publish.scm:813
 #, scheme-format
 msgid "~A: extraneous argument~%"
 msgstr "~A: argument superflu~%"
@@ -582,8 +603,8 @@ msgstr "la génération ~a n'est pas supprimée car elle est actuelle~%"
 msgid "no matching generation~%"
 msgstr "aucune génération correspondante~%"
 
-#: guix/scripts/package.scm:188 guix/scripts/package.scm:699
-#: guix/scripts/system.scm:549
+#: guix/scripts/package.scm:188 guix/scripts/package.scm:700
+#: guix/scripts/system.scm:530
 #, scheme-format
 msgid "invalid syntax: ~a~%"
 msgstr "syntaxe non valide: ~a~%"
@@ -745,7 +766,7 @@ msgstr ""
 "\n"
 "      --bootstrap        utiliser le programme d'amorçage Guile pour compiler le profil"
 
-#: guix/scripts/package.scm:401 guix/scripts/pull.scm:76
+#: guix/scripts/package.scm:401 guix/scripts/pull.scm:86
 msgid ""
 "\n"
 "      --verbose          produce verbose output"
@@ -794,17 +815,17 @@ msgstr ""
 msgid "~a: unsupported kind of search path~%"
 msgstr "~a: type de chemin de recherche non supporté~%"
 
-#: guix/scripts/package.scm:790
+#: guix/scripts/package.scm:791
 #, scheme-format
 msgid "cannot switch to generation '~a'~%"
 msgstr "impossible de passer à la génération « ~a »~%"
 
-#: guix/scripts/package.scm:806
+#: guix/scripts/package.scm:807
 #, scheme-format
 msgid "would install new manifest from '~a' with ~d entries~%"
 msgstr "installerait le nouveau manifeste depuis « ~a » avec ~d entrées~%"
 
-#: guix/scripts/package.scm:808
+#: guix/scripts/package.scm:809
 #, scheme-format
 msgid "installing new manifest from '~a' with ~d entries~%"
 msgstr "installation du nouveau manifeste depuis « ~a » avec ~d entrées~%"
@@ -976,18 +997,18 @@ msgstr ""
 msgid "unrecognized option: ~a~%"
 msgstr "option non reconnue: ~a~%"
 
-#: guix/scripts/hash.scm:152 guix/ui.scm:478
+#: guix/scripts/hash.scm:155 guix/ui.scm:264 guix/ui.scm:498 guix/ui.scm:551
 #, scheme-format
 msgid "~a~%"
 msgstr "~a~%"
 
-#: guix/scripts/hash.scm:155 guix/scripts/system.scm:879
+#: guix/scripts/hash.scm:158 guix/scripts/system.scm:879
 #: guix/scripts/system.scm:886 guix/scripts/system.scm:893
 #, scheme-format
 msgid "wrong number of arguments~%"
 msgstr "nombre d'arguments incorrect~%"
 
-#: guix/scripts/import.scm:85
+#: guix/scripts/import.scm:86
 msgid ""
 "Usage: guix import IMPORTER ARGS ...\n"
 "Run IMPORTER with ARGS.\n"
@@ -995,21 +1016,21 @@ msgstr ""
 "Usage: guix import IMPORTEUR ARGS...\n"
 "Lancer IMPORTATEUR avec ARGS.\n"
 
-#: guix/scripts/import.scm:88
+#: guix/scripts/import.scm:89
 msgid "IMPORTER must be one of the importers listed below:\n"
 msgstr "IMPORTATEUR doit être un des importateurs listés ci-dessous:\n"
 
-#: guix/scripts/import.scm:102
+#: guix/scripts/import.scm:103
 #, scheme-format
 msgid "guix import: missing importer name~%"
 msgstr "guix import: nom d'importateur manquant~%"
 
-#: guix/scripts/import.scm:122
+#: guix/scripts/import.scm:123
 #, scheme-format
 msgid "'~a' import failed~%"
 msgstr "l'importateur « ~a » a échoué~%"
 
-#: guix/scripts/import.scm:123
+#: guix/scripts/import.scm:124
 #, scheme-format
 msgid "~a: invalid importer~%"
 msgstr "~a: importateur non valide~%"
@@ -1082,7 +1103,7 @@ msgstr ""
 msgid "failed to download package '~a'~%"
 msgstr "échec lors du téléchargement du paquet « ~a »~%"
 
-#: guix/scripts/pull.scm:74
+#: guix/scripts/pull.scm:84
 msgid ""
 "Usage: guix pull [OPTION]...\n"
 "Download and deploy the latest version of Guix.\n"
@@ -1090,7 +1111,7 @@ msgstr ""
 "Usage: guix pull [OPTION]...\n"
 "Télécharger et déployer la dernière version de Guix.\n"
 
-#: guix/scripts/pull.scm:78
+#: guix/scripts/pull.scm:88
 msgid ""
 "\n"
 "      --url=URL          download the Guix tarball from URL"
@@ -1098,7 +1119,7 @@ msgstr ""
 "\n"
 "      --url=URL          télécharger le tarball de Guix depuis URL"
 
-#: guix/scripts/pull.scm:80
+#: guix/scripts/pull.scm:90
 msgid ""
 "\n"
 "      --bootstrap        use the bootstrap Guile to build the new Guix"
@@ -1106,163 +1127,158 @@ msgstr ""
 "\n"
 "      --bootstrap        utiliser le programme d'amorçage Guile pour compiler le nouveau Guix"
 
-#: guix/scripts/pull.scm:134
+#: guix/scripts/pull.scm:150
 msgid "tarball did not produce a single source directory"
 msgstr "la tarball n'a produit aucun répertoire source"
 
-#: guix/scripts/pull.scm:152
+#: guix/scripts/pull.scm:168
 #, scheme-format
 msgid "unpacking '~a'...~%"
 msgstr "dépaquetage « ~a »...~%"
 
-#: guix/scripts/pull.scm:161
+#: guix/scripts/pull.scm:177
 msgid "failed to unpack source code"
 msgstr "échec du dépaquetage du code source"
 
-#: guix/scripts/pull.scm:204
+#: guix/scripts/pull.scm:220
 msgid "Guix already up to date\n"
 msgstr "Guix est déjà à jour\n"
 
-#: guix/scripts/pull.scm:209
+#: guix/scripts/pull.scm:225
 #, scheme-format
 msgid "updated ~a successfully deployed under `~a'~%"
 msgstr "~a a été mis à jour et déployé avec succès sous « ~a »~%"
 
-#: guix/scripts/pull.scm:212
+#: guix/scripts/pull.scm:228
 #, scheme-format
 msgid "failed to update Guix, check the build log~%"
 msgstr "échec de la mise à jour de Guix; consultez le journal de compilation~%"
 
-#: guix/scripts/pull.scm:221
-#, scheme-format
-msgid "~A: unexpected argument~%"
-msgstr "~A: argument inattendu~%"
-
-#: guix/scripts/pull.scm:230
+#: guix/scripts/pull.scm:255
 msgid "failed to download up-to-date source, exiting\n"
 msgstr "impossible de télécharger une source à jour; fin\n"
 
-#: guix/scripts/substitute.scm:112
+#: guix/scripts/substitute.scm:114
 #, scheme-format
 msgid "authentication and authorization of substitutes disabled!~%"
 msgstr "authentification et autorisation des substituts désactivées !~%"
 
-#: guix/scripts/substitute.scm:187
+#: guix/scripts/substitute.scm:189
 #, scheme-format
 msgid "download from '~a' failed: ~a, ~s~%"
 msgstr "le téléchargement depuis « ~a » a échoué: ~a, ~s~%"
 
-#: guix/scripts/substitute.scm:200
+#: guix/scripts/substitute.scm:202
 #, scheme-format
 msgid "while fetching ~a: server is somewhat slow~%"
 msgstr "pendant la récupération de ~a: le serveur est plutôt lent~%"
 
-#: guix/scripts/substitute.scm:202
+#: guix/scripts/substitute.scm:204
 #, scheme-format
 msgid "try `--no-substitutes' if the problem persists~%"
 msgstr "essayez l'option « --no-substitutes » si le problème persiste~%"
 
-#: guix/scripts/substitute.scm:220
+#: guix/scripts/substitute.scm:222
 #, scheme-format
 msgid "unsupported substitute URI scheme: ~a~%"
 msgstr "schéma de substitution URI non supporté: ~a~%"
 
-#: guix/scripts/substitute.scm:254
+#: guix/scripts/substitute.scm:257
 #, scheme-format
 msgid "while fetching '~a': ~a (~s)~%"
 msgstr "pendant la récupération de « ~a »: ~a (~s)~%"
 
-#: guix/scripts/substitute.scm:259
+#: guix/scripts/substitute.scm:262
 #, scheme-format
 msgid "ignoring substitute server at '~s'~%"
 msgstr "ignore le serveur de substitution à « ~s »~%"
 
-#: guix/scripts/substitute.scm:309
+#: guix/scripts/substitute.scm:312
 #, scheme-format
 msgid "signature version must be a number: ~s~%"
 msgstr "la version de la signature doit être un nombre: ~s~%"
 
-#: guix/scripts/substitute.scm:313
+#: guix/scripts/substitute.scm:316
 #, scheme-format
 msgid "unsupported signature version: ~a~%"
 msgstr "version de signature non supportée: ~a~%"
 
-#: guix/scripts/substitute.scm:321
+#: guix/scripts/substitute.scm:324
 #, scheme-format
 msgid "signature is not a valid s-expression: ~s~%"
 msgstr "la signature n'est pas une s-expression valide: ~s~%"
 
-#: guix/scripts/substitute.scm:325
+#: guix/scripts/substitute.scm:328
 #, scheme-format
 msgid "invalid format of the signature field: ~a~%"
 msgstr "format invalide du champ de signature: ~a~%"
 
-#: guix/scripts/substitute.scm:360
+#: guix/scripts/substitute.scm:363
 #, scheme-format
 msgid "invalid signature for '~a'~%"
 msgstr "signature non valide pour « ~a »~%"
 
-#: guix/scripts/substitute.scm:362
+#: guix/scripts/substitute.scm:365
 #, scheme-format
 msgid "hash mismatch for '~a'~%"
 msgstr "l'empreinte ne correspond pas pour « ~a »~%"
 
-#: guix/scripts/substitute.scm:364
+#: guix/scripts/substitute.scm:367
 #, scheme-format
 msgid "'~a' is signed with an unauthorized key~%"
 msgstr "« ~a » est signé avec une clé non autorisée~%"
 
-#: guix/scripts/substitute.scm:366
+#: guix/scripts/substitute.scm:369
 #, scheme-format
 msgid "signature on '~a' is corrupt~%"
 msgstr "la signature de « ~a » est corrompue~%"
 
-#: guix/scripts/substitute.scm:404
+#: guix/scripts/substitute.scm:407
 #, scheme-format
 msgid "substitute at '~a' lacks a signature~%"
 msgstr "le substitut à « ~a » n'a pas de signature~%"
 
-#: guix/scripts/substitute.scm:411
+#: guix/scripts/substitute.scm:414
 #, scheme-format
 msgid "Found valid signature for ~a~%"
 msgstr "Signature valide trouvée pour ~a~%"
 
-#: guix/scripts/substitute.scm:414
+#: guix/scripts/substitute.scm:417
 #, scheme-format
 msgid "From ~a~%"
 msgstr "De ~a~%"
 
-#: guix/scripts/substitute.scm:454
+#: guix/scripts/substitute.scm:451
 #, scheme-format
 msgid "'~a' does not name a store item~%"
 msgstr "« ~a » ne nomme pas un élément du stockage~%"
 
-#: guix/scripts/substitute.scm:600
+#: guix/scripts/substitute.scm:599
 #, scheme-format
 msgid "updating list of substitutes from '~a'... ~5,1f%"
 msgstr "mise à jour de la liste des substituts depuis « ~a »... ~5,1f%"
 
-#: guix/scripts/substitute.scm:655
+#: guix/scripts/substitute.scm:654
 #, scheme-format
 msgid "~s: unsupported server URI scheme~%"
 msgstr "~s: schéma de URI serveur non supporté~%"
 
-#: guix/scripts/substitute.scm:665
+#: guix/scripts/substitute.scm:664
 #, scheme-format
 msgid "'~a' uses different store '~a'; ignoring it~%"
 msgstr "« ~a » utilise un stockage « ~a » différent. Il est ignoré~%"
 
-#: guix/scripts/substitute.scm:810
+#: guix/scripts/substitute.scm:784
 #, scheme-format
 msgid "host name lookup error: ~a~%"
 msgstr "erreur lors de la consultation du nom d'hôte: ~a~%"
 
-#: guix/scripts/substitute.scm:815
+#: guix/scripts/substitute.scm:789
 #, scheme-format
 msgid "TLS error in procedure '~a': ~a~%"
 msgstr "erreur TLS dans la procédure « ~a »: ~a~%"
 
-#: guix/scripts/substitute.scm:826
+#: guix/scripts/substitute.scm:800
 msgid ""
 "Usage: guix substitute [OPTION]...\n"
 "Internal tool to substitute a pre-built binary to a local build.\n"
@@ -1270,7 +1286,7 @@ msgstr ""
 "Usage: guix substitute [OPTION]...\n"
 "Outil interne pour substituer un binaire pré-compilé à une compilation locale.\n"
 
-#: guix/scripts/substitute.scm:828
+#: guix/scripts/substitute.scm:802
 msgid ""
 "\n"
 "      --query            report on the availability of substitutes for the\n"
@@ -1281,7 +1297,7 @@ msgstr ""
 "                         noms de fichiers de dépôt passés sur l'entrée\n"
 "                         standard"
 
-#: guix/scripts/substitute.scm:831
+#: guix/scripts/substitute.scm:805
 msgid ""
 "\n"
 "      --substitute STORE-FILE DESTINATION\n"
@@ -1296,16 +1312,21 @@ msgstr ""
 #. 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:904
+#: guix/scripts/substitute.scm:878
 #, scheme-format
 msgid "Downloading ~a~:[~*~; (~a installed)~]...~%"
 msgstr "Téléchargement de ~a~:[~*~; (~a installé)~]...~%"
 
-#: guix/scripts/substitute.scm:961
+#: guix/scripts/substitute.scm:935
 msgid "ACL for archive imports seems to be uninitialized, substitutes may be unavailable\n"
 msgstr "l'ACL pour l'import d'archives ne semble pas initialisée ; les substituts pourraient être indisponibles\n"
 
-#: guix/scripts/substitute.scm:1057
+#: guix/scripts/substitute.scm:985
+#, scheme-format
+msgid "~a: invalid URI~%"
+msgstr "~a: URI invalide~%"
+
+#: guix/scripts/substitute.scm:1043
 #, scheme-format
 msgid "~a: unrecognized options~%"
 msgstr "~a: options non reconnues~%"
@@ -1344,141 +1365,141 @@ msgstr ""
 msgid "wrong arguments"
 msgstr "mauvais arguments"
 
-#: guix/scripts/system.scm:109
+#: guix/scripts/system.scm:133
 #, scheme-format
 msgid "failed to register '~a' under '~a'~%"
 msgstr "impossible d'enregistrer « ~a » sous « ~a »~%"
 
-#: guix/scripts/system.scm:142
+#: guix/scripts/system.scm:166
 #, scheme-format
 msgid "failed to install GRUB on device '~a'~%"
 msgstr "échec de l'installation de GRUB sur le périphérique « ~a »~%"
 
-#: guix/scripts/system.scm:160
+#: guix/scripts/system.scm:184
 #, scheme-format
 msgid "initializing the current root file system~%"
 msgstr "initialisation du système de fichier racine courant~%"
 
-#: guix/scripts/system.scm:174
+#: guix/scripts/system.scm:198
 #, scheme-format
 msgid "not running as 'root', so the ownership of '~a' may be incorrect!~%"
 msgstr "n'est pas exécuté en tant que « root » donc le propriétaire de « ~a » pourrait être incorrect !~%"
 
-#: guix/scripts/system.scm:238
+#: guix/scripts/system.scm:239
 #, scheme-format
 msgid "while talking to shepherd: ~a~%"
 msgstr "en parlant à shepherd: ~a~%"
 
-#: guix/scripts/system.scm:245
+#: guix/scripts/system.scm:246
 #, scheme-format
 msgid "service '~a' could not be found~%"
 msgstr "service: « ~a » introuvable~%"
 
-#: guix/scripts/system.scm:248
+#: guix/scripts/system.scm:249
 #, scheme-format
 msgid "service '~a' does not have an action '~a'~%"
 msgstr "le service « ~a » n'a pas d'action « ~a »~%"
 
-#: guix/scripts/system.scm:252
+#: guix/scripts/system.scm:253
 #, scheme-format
 msgid "exception caught while executing '~a' on service '~a':~%"
 msgstr "exception interceptée pendant l'exécution de « ~a » sur le service « ~a »:~%"
 
-#: guix/scripts/system.scm:260
+#: guix/scripts/system.scm:261
 #, scheme-format
 msgid "something went wrong: ~s~%"
 msgstr "quelque chose s'est mal passé: ~s~%"
 
-#: guix/scripts/system.scm:263
+#: guix/scripts/system.scm:264
 #, scheme-format
 msgid "shepherd error~%"
 msgstr "erreur de shepherd~%"
 
-#: guix/scripts/system.scm:280
+#: guix/scripts/system.scm:281
 #, scheme-format
 msgid "failed to obtain list of shepherd services~%"
 msgstr "erreur en essayant d'obtenir la liste des services de shepherd~%"
 
-#: guix/scripts/system.scm:300
+#: guix/scripts/system.scm:301
 #, scheme-format
 msgid "unloading service '~a'...~%"
 msgstr "déchargement du service « ~a »...~%"
 
-#: guix/scripts/system.scm:308
+#: guix/scripts/system.scm:309
 #, scheme-format
 msgid "loading new services:~{ ~a~}...~%"
 msgstr "Chargement des nouveaux services:~{ ~a~}...~%"
 
-#: guix/scripts/system.scm:332
+#: guix/scripts/system.scm:333
 #, scheme-format
 msgid "activating system...~%"
 msgstr "activation du système...~%"
 
-#: guix/scripts/system.scm:425
+#: guix/scripts/system.scm:408
 #, scheme-format
 msgid "cannot switch to system generation '~a'~%"
 msgstr "impossible de passer à la génération « ~a » du système~%"
 
-#: guix/scripts/system.scm:459
+#: guix/scripts/system.scm:441
 #, scheme-format
 msgid "failed to re-install GRUB configuration file: '~a'~%"
 msgstr "échec à la ré-installation du fichier de configuration de GRUB: « ~a »~%"
 
-#: guix/scripts/system.scm:489
+#: guix/scripts/system.scm:471
 msgid "the DAG of services"
 msgstr "le graphe orienté acyclique (DAG) des services"
 
-#: guix/scripts/system.scm:502
+#: guix/scripts/system.scm:484
 msgid "the dependency graph of shepherd services"
 msgstr "le graphique des dépendances des services de shepherd"
 
-#: guix/scripts/system.scm:526
+#: guix/scripts/system.scm:507
 #, scheme-format
 msgid "  file name: ~a~%"
 msgstr "  nom de fichier: ~a~%"
 
-#: guix/scripts/system.scm:527
+#: guix/scripts/system.scm:508
 #, scheme-format
 msgid "  canonical file name: ~a~%"
 msgstr "  nom de fichier canonique: ~a~%"
 
 #. TRANSLATORS: Please preserve the two-space indentation.
-#: guix/scripts/system.scm:529
+#: guix/scripts/system.scm:510
 #, scheme-format
 msgid "  label: ~a~%"
 msgstr "  étiquette: ~a~%"
 
-#: guix/scripts/system.scm:530
+#: guix/scripts/system.scm:511
 #, scheme-format
 msgid "  root device: ~a~%"
 msgstr "  périphérique racine: ~a~%"
 
-#: guix/scripts/system.scm:531
+#: guix/scripts/system.scm:512
 #, scheme-format
 msgid "  kernel: ~a~%"
 msgstr "  noyau: ~a~%"
 
-#: guix/scripts/system.scm:588
+#: guix/scripts/system.scm:569
 #, scheme-format
 msgid "~a not found: 'guix pull' was never run~%"
 msgstr "~a pas trouvé: « guix pull » n'a jamais été exécuté~%"
 
-#: guix/scripts/system.scm:589
+#: guix/scripts/system.scm:570
 #, scheme-format
 msgid "Consider running 'guix pull' before 'reconfigure'.~%"
 msgstr "Envisagez d'exécuter « guix pull » avant « reconfigure ».~%"
 
-#: guix/scripts/system.scm:590
+#: guix/scripts/system.scm:571
 #, scheme-format
 msgid "Failing to do that may downgrade your system!~%"
 msgstr "Si vous ne le faites pas, votre système pourrait être amené à une version inférieure !~%"
 
-#: guix/scripts/system.scm:661
+#: guix/scripts/system.scm:646
 #, scheme-format
 msgid "initializing operating system under '~a'...~%"
 msgstr "initialisation du système d'exploitation sous « ~a »...~%"
 
-#: guix/scripts/system.scm:700
+#: guix/scripts/system.scm:690
 msgid ""
 "Usage: guix system [OPTION ...] ACTION [ARG ...] [FILE]\n"
 "Build the operating system declared in FILE according to ACTION.\n"
@@ -1488,59 +1509,59 @@ msgstr ""
 "Compiler le système d'exploitation déclaré dans FICHER en suivant ACTION.\n"
 "Certaines ACTIONS supportent des ARGUMENTS supplémentaires.\n"
 
-#: guix/scripts/system.scm:704 guix/scripts/container.scm:28
+#: guix/scripts/system.scm:694 guix/scripts/container.scm:28
 msgid "The valid values for ACTION are:\n"
 msgstr "Les valeurs possibles pour ACTION sont:\n"
 
-#: guix/scripts/system.scm:706
+#: guix/scripts/system.scm:696
 msgid "   reconfigure      switch to a new operating system configuration\n"
 msgstr "   reconfigure      basculer vers une nouvelle configuration du système d'exploitation\n"
 
-#: guix/scripts/system.scm:708
+#: guix/scripts/system.scm:698
 msgid "   roll-back        switch to the previous operating system configuration\n"
 msgstr "   roll-back        basculer vers la configuration du système d'exploitation précédente\n"
 
-#: guix/scripts/system.scm:710
+#: guix/scripts/system.scm:700
 msgid "   switch-generation switch to an existing operating system configuration\n"
 msgstr "   switch-generation basculer vers une configuration du système d'exploitation existante\n"
 
-#: guix/scripts/system.scm:712
+#: guix/scripts/system.scm:702
 msgid "   list-generations list the system generations\n"
 msgstr "   list-generations lister les générations du système\n"
 
-#: guix/scripts/system.scm:714
+#: guix/scripts/system.scm:704
 msgid "   build            build the operating system without installing anything\n"
 msgstr "   build            compiler le système d'exploitation sans rien installer\n"
 
-#: guix/scripts/system.scm:716
+#: guix/scripts/system.scm:706
 msgid "   container        build a container that shares the host's store\n"
 msgstr "   container        compiler un conteneur qui partage le stockage de l'hôte\n"
 
-#: guix/scripts/system.scm:718
+#: guix/scripts/system.scm:708
 msgid "   vm               build a virtual machine image that shares the host's store\n"
 msgstr "   vm               compiler une machine virtuelle partageant le dépôt de l'hôte\n"
 
-#: guix/scripts/system.scm:720
+#: guix/scripts/system.scm:710
 msgid "   vm-image         build a freestanding virtual machine image\n"
 msgstr "   vm-image         compiler une image autonome de machine virtuelle\n"
 
-#: guix/scripts/system.scm:722
+#: guix/scripts/system.scm:712
 msgid "   disk-image       build a disk image, suitable for a USB stick\n"
 msgstr "   disk-image       compiler une image disque adaptée pour une clé USB\n"
 
-#: guix/scripts/system.scm:724
+#: guix/scripts/system.scm:714
 msgid "   init             initialize a root file system to run GNU\n"
 msgstr "   init             initialiser un système de fichier racine pour lancer GNU.\n"
 
-#: guix/scripts/system.scm:726
+#: guix/scripts/system.scm:716
 msgid "   extension-graph  emit the service extension graph in Dot format\n"
 msgstr "   extension-graph  produire le graphique d'extension de service au format Dot\n"
 
-#: guix/scripts/system.scm:728
+#: guix/scripts/system.scm:718
 msgid "   shepherd-graph   emit the graph of shepherd services in Dot format\n"
 msgstr "   shepherd-graph   produire le graphique des services de shepherd au format Dot\n"
 
-#: guix/scripts/system.scm:732
+#: guix/scripts/system.scm:722
 msgid ""
 "\n"
 "  -d, --derivation       return the derivation of the given system"
@@ -1548,7 +1569,7 @@ msgstr ""
 "\n"
 "  -d, --derivation       retourner les dérivations pour le système donné"
 
-#: guix/scripts/system.scm:734
+#: guix/scripts/system.scm:724
 msgid ""
 "\n"
 "      --on-error=STRATEGY\n"
@@ -1558,7 +1579,7 @@ msgstr ""
 "      --on-error=STRATÉGIE\n"
 "                         appliquer la STRATÉGIE quand une erreur survient en lisant le FICHIER"
 
-#: guix/scripts/system.scm:737
+#: guix/scripts/system.scm:727
 msgid ""
 "\n"
 "      --image-size=SIZE  for 'vm-image', produce an image of SIZE"
@@ -1567,15 +1588,15 @@ msgstr ""
 "      --image-size=TAILLE\n"
 "                         pour « vm-image », produire une image de TAILLE"
 
-#: guix/scripts/system.scm:739
+#: guix/scripts/system.scm:729
 msgid ""
 "\n"
-"      --no-grub          for 'init', do not install GRUB"
+"      --no-bootloader    for 'init', do not install a bootloader"
 msgstr ""
 "\n"
-"      --no-grub          pour « init », ne pas installer GRUB"
+"      --no-bootloader    pour « init », ne pas installer un chargeur de démarrage"
 
-#: guix/scripts/system.scm:741
+#: guix/scripts/system.scm:731
 msgid ""
 "\n"
 "      --share=SPEC       for 'vm', share host file system according to SPEC"
@@ -1584,7 +1605,20 @@ msgstr ""
 "      --share=SPEC       pour « vm », partager le système de fichiers hôte selon\n"
 "                         SPEC"
 
-#: guix/scripts/system.scm:743
+#: guix/scripts/system.scm:733
+msgid ""
+"\n"
+"  -r, --root=FILE        for 'vm', 'vm-image', 'disk-image', 'container',\n"
+"                         and 'build', make FILE a symlink to the result, and\n"
+"                         register it as a garbage collector root"
+msgstr ""
+"\n"
+"  -r, --root=FICHIER     pour « vm », « vm-image », « disk-image », « container »\n"
+"                         et « build », faire de FICHIER un lien symbolique pointant\n"
+"                         sur le résultat et l'enregistrer en tant que racine du\n"
+"                         ramasse-miettes"
+
+#: guix/scripts/system.scm:737
 msgid ""
 "\n"
 "      --expose=SPEC      for 'vm', expose host file system according to SPEC"
@@ -1593,7 +1627,7 @@ msgstr ""
 "      --expose=SPEC      pour « vm », exposer le système de fichiers hôte selon\n"
 "                         SPEC"
 
-#: guix/scripts/system.scm:745
+#: guix/scripts/system.scm:739
 msgid ""
 "\n"
 "      --full-boot        for 'vm', make a full boot sequence"
@@ -1601,7 +1635,7 @@ msgstr ""
 "\n"
 "      --full-boot        pour « vm », accomplir une séquence complète de démarrage"
 
-#: guix/scripts/system.scm:830
+#: guix/scripts/system.scm:827
 #, scheme-format
 msgid "no configuration file specified~%"
 msgstr "aucun fichier de configuration spécifié~%"
@@ -1626,20 +1660,20 @@ msgstr "système guix: nom de commande manquant~%"
 msgid "Try 'guix system --help' for more information.~%"
 msgstr "Essayez « guix system --help » pour plus d'informations.~%"
 
-#: guix/scripts/lint.scm:133
+#: guix/scripts/lint.scm:135
 #, scheme-format
 msgid "Available checkers:~%"
 msgstr "Vérificateurs disponibles:~%"
 
-#: guix/scripts/lint.scm:157
+#: guix/scripts/lint.scm:159
 msgid "description should not be empty"
 msgstr "la description ne devrait pas être vide"
 
-#: guix/scripts/lint.scm:167
+#: guix/scripts/lint.scm:169
 msgid "Texinfo markup in description is invalid"
 msgstr "l'utilisation de balises Texinfo dans la description est invalide"
 
-#: guix/scripts/lint.scm:177
+#: guix/scripts/lint.scm:179
 #, scheme-format
 msgid ""
 "description should not contain ~\n"
@@ -1650,15 +1684,15 @@ msgstr ""
 
 #. TRANSLATORS: '@code' is Texinfo markup and must be kept
 #. as is.
-#: guix/scripts/lint.scm:190
+#: guix/scripts/lint.scm:192
 msgid "use @code or similar ornament instead of quotes"
 msgstr "utiliser @code ou une décoration similaire au lieu des guillemets"
 
-#: guix/scripts/lint.scm:197
+#: guix/scripts/lint.scm:199
 msgid "description should start with an upper-case letter or digit"
 msgstr "La description devrait commencer par une majuscule ou un chiffre"
 
-#: guix/scripts/lint.scm:213
+#: guix/scripts/lint.scm:215
 #, scheme-format
 msgid ""
 "sentences in description should be followed ~\n"
@@ -1667,225 +1701,229 @@ msgstr ""
 "les phrases dans la description devraient être suivies ~\n"
 "par deux espaces. Infraction probable~p à ~{~a~^, ~}"
 
-#: guix/scripts/lint.scm:231
+#: guix/scripts/lint.scm:233
 #, scheme-format
 msgid "invalid description: ~s"
 msgstr "description invalide: ~s"
 
-#: guix/scripts/lint.scm:256
+#: guix/scripts/lint.scm:277
 #, scheme-format
 msgid "'~a' should probably be a native input"
 msgstr "« ~a » devrait sans doute être une entrée native"
 
-#: guix/scripts/lint.scm:280
+#: guix/scripts/lint.scm:293
 #, scheme-format
 msgid "'~a' should probably not be an input at all"
 msgstr "« ~a » ne devrait probablement pas être une entrée du tout"
 
-#: guix/scripts/lint.scm:306
+#: guix/scripts/lint.scm:310
 msgid "synopsis should not be empty"
 msgstr "le synopsis ne devrait pas être vide"
 
-#: guix/scripts/lint.scm:314
+#: guix/scripts/lint.scm:318
 msgid "no period allowed at the end of the synopsis"
 msgstr "un point n'est pas autorisé à la fin du synopsis"
 
-#: guix/scripts/lint.scm:326
+#: guix/scripts/lint.scm:330
 msgid "no article allowed at the beginning of the synopsis"
 msgstr "les articles ne sont pas permis au début du synopsis"
 
-#: guix/scripts/lint.scm:333
+#: guix/scripts/lint.scm:337
 msgid "synopsis should be less than 80 characters long"
 msgstr "le synopsis devrait être plus court que 80 caractères"
 
-#: guix/scripts/lint.scm:339
+#: guix/scripts/lint.scm:343
 msgid "synopsis should start with an upper-case letter or digit"
 msgstr "le synopsis devrait commencer par une majuscule ou un chiffre"
 
-#: guix/scripts/lint.scm:346
+#: guix/scripts/lint.scm:350
 msgid "synopsis should not start with the package name"
 msgstr "le synopsis ne devrait pas commencer par un nom de paquet"
 
 #: guix/scripts/lint.scm:360
+msgid "Texinfo markup in synopsis is invalid"
+msgstr "la balise Texinfo dans le synopsis est invalide"
+
+#: guix/scripts/lint.scm:379
 #, scheme-format
 msgid "invalid synopsis: ~s"
 msgstr "synopsis non valide: ~s"
 
-#: guix/scripts/lint.scm:459
+#: guix/scripts/lint.scm:479
 #, scheme-format
 msgid "URI ~a returned suspiciously small file (~a bytes)"
 msgstr "l'URI ~a a renvoyé un fichier étrangement petit (~a octets)"
 
-#: guix/scripts/lint.scm:468 guix/scripts/lint.scm:480
+#: guix/scripts/lint.scm:488 guix/scripts/lint.scm:500
 #, scheme-format
 msgid "URI ~a not reachable: ~a (~s)"
 msgstr "l'URI ~a n'a pu être atteinte: ~a (~s)"
 
-#: guix/scripts/lint.scm:487
+#: guix/scripts/lint.scm:507
 #, scheme-format
 msgid "URI ~a domain not found: ~a"
 msgstr "le domaine de l'URI ~a pas trouvé: ~a"
 
-#: guix/scripts/lint.scm:495
+#: guix/scripts/lint.scm:515
 #, scheme-format
 msgid "URI ~a unreachable: ~a"
 msgstr "l'URI ~a n'a pu être atteinte: ~a"
 
-#: guix/scripts/lint.scm:504 guix/scripts/lint.scm:761
+#: guix/scripts/lint.scm:524 guix/scripts/lint.scm:780
 #, scheme-format
 msgid "TLS certificate error: ~a"
 msgstr "erreur de certificat TLS: ~a"
 
-#: guix/scripts/lint.scm:525
+#: guix/scripts/lint.scm:545
 msgid "invalid value for home page"
 msgstr "valeur invalide pour la page d'accueil"
 
-#: guix/scripts/lint.scm:528
+#: guix/scripts/lint.scm:548
 #, scheme-format
 msgid "invalid home page URL: ~s"
 msgstr "URL de la page d'accueil invalide: ~s"
 
-#: guix/scripts/lint.scm:548
+#: guix/scripts/lint.scm:568
 msgid "file names of patches should start with the package name"
 msgstr "les noms de fichiers des correctifs devraient commencer par le nom du paquet"
 
-#: guix/scripts/lint.scm:587
+#: guix/scripts/lint.scm:606
 #, scheme-format
 msgid "~a: ~a: proposed synopsis: ~s~%"
 msgstr "~a: ~a: synopsis proposé: ~s~%"
 
-#: guix/scripts/lint.scm:600
+#: guix/scripts/lint.scm:619
 #, scheme-format
 msgid "~a: ~a: proposed description:~%     \"~a\"~%"
 msgstr "~a: ~a: description proposée:~%     « ~a »~%"
 
-#: guix/scripts/lint.scm:642
+#: guix/scripts/lint.scm:661
 msgid "all the source URIs are unreachable:"
 msgstr "toutes les URI sources sont inatteignables:"
 
-#: guix/scripts/lint.scm:665
+#: guix/scripts/lint.scm:684
 msgid "the source file name should contain the package name"
 msgstr "le nom du fichier source devrait contenir le nom du paquet"
 
-#: guix/scripts/lint.scm:681
+#: guix/scripts/lint.scm:700
 #, scheme-format
 msgid "URL should be 'mirror://~a/~a'"
 msgstr "l'URL devrait être « mirror://~a/~a »"
 
-#: guix/scripts/lint.scm:699 guix/scripts/lint.scm:703
+#: guix/scripts/lint.scm:718 guix/scripts/lint.scm:722
 #, scheme-format
 msgid "failed to create derivation: ~a"
 msgstr "échec à la création de la dérivation: ~a"
 
-#: guix/scripts/lint.scm:717
+#: guix/scripts/lint.scm:736
 #, scheme-format
 msgid "failed to create derivation: ~s~%"
 msgstr "échec à la création de la dérivation: ~s~%"
 
-#: guix/scripts/lint.scm:727
+#: guix/scripts/lint.scm:746
 msgid "invalid license field"
 msgstr "champ de licence invalide"
 
-#: guix/scripts/lint.scm:744
+#: guix/scripts/lint.scm:763
 #, scheme-format
 msgid "failed to retrieve CVE vulnerabilities from ~s: ~a (~s)~%"
 msgstr "échec de récupération des vulnérabilités CVE depuis ~s: ~a (~s)~%"
 
-#: guix/scripts/lint.scm:749 guix/scripts/lint.scm:758
-#: guix/scripts/lint.scm:763
+#: guix/scripts/lint.scm:768 guix/scripts/lint.scm:777
+#: guix/scripts/lint.scm:782
 #, scheme-format
 msgid "assuming no CVE vulnerabilities~%"
 msgstr "on suppose qu'il n'y a pas de vulnérabilités CVE~%"
 
-#: guix/scripts/lint.scm:756
+#: guix/scripts/lint.scm:775
 #, scheme-format
 msgid "failed to lookup NIST host: ~a~%"
 msgstr "impossible de trouver l'hôte NIST: ~a~%"
 
-#: guix/scripts/lint.scm:801
+#: guix/scripts/lint.scm:820
 #, scheme-format
 msgid "probably vulnerable to ~a"
 msgstr "probablement vulnérable à ~a"
 
-#: guix/scripts/lint.scm:816
+#: guix/scripts/lint.scm:835
 #, scheme-format
 msgid "tabulation on line ~a, column ~a"
 msgstr "tabulation à la ligne ~a, colonne ~a"
 
-#: guix/scripts/lint.scm:825
+#: guix/scripts/lint.scm:844
 #, scheme-format
 msgid "trailing white space on line ~a"
 msgstr "espace à la fin de la ligne ~a"
 
-#: guix/scripts/lint.scm:835
+#: guix/scripts/lint.scm:854
 #, scheme-format
 msgid "line ~a is way too long (~a characters)"
 msgstr "la ligne ~a est beaucoup trop longue (~a caractères)"
 
-#: guix/scripts/lint.scm:846
+#: guix/scripts/lint.scm:865
 #, scheme-format
 msgid "line ~a: parentheses feel lonely, move to the previous or next line"
 msgstr "ligne ~a: des parenthèses se sentent seules. À déplacer à la ligne suivante ou précédente"
 
-#: guix/scripts/lint.scm:901
+#: guix/scripts/lint.scm:920
 msgid "Validate package descriptions"
 msgstr "Valider des descriptions de paquets"
 
-#: guix/scripts/lint.scm:905
+#: guix/scripts/lint.scm:924
 msgid "Validate synopsis & description of GNU packages"
 msgstr "Valider le synopsis et la description de paquets GNU"
 
-#: guix/scripts/lint.scm:909
+#: guix/scripts/lint.scm:928
 msgid "Identify inputs that should be native inputs"
 msgstr "Identifier les entrées qui devraient être natives"
 
-#: guix/scripts/lint.scm:913
+#: guix/scripts/lint.scm:932
 msgid "Identify inputs that should be inputs at all"
 msgstr "Identifier les entrées qui devraient être des entrées"
 
-#: guix/scripts/lint.scm:917
+#: guix/scripts/lint.scm:936
 msgid "Validate file names and availability of patches"
 msgstr "Valider les noms de fichiers et la disponibilité de correctifs"
 
-#: guix/scripts/lint.scm:921
+#: guix/scripts/lint.scm:940
 msgid "Validate home-page URLs"
 msgstr "Valider les URL des pages d'accueil"
 
 #. TRANSLATORS: <license> is the name of a data type and must not be
 #. translated.
-#: guix/scripts/lint.scm:927
+#: guix/scripts/lint.scm:946
 msgid "Make sure the 'license' field is a <license> or a list thereof"
 msgstr "Assurez vous que le champ « licence » est une <licence> ou une telle liste"
 
-#: guix/scripts/lint.scm:932
+#: guix/scripts/lint.scm:951
 msgid "Validate source URLs"
 msgstr "Valider les URL sources"
 
-#: guix/scripts/lint.scm:936
+#: guix/scripts/lint.scm:955
 msgid "Suggest 'mirror://' URLs"
 msgstr "Suggérer les URLs « mirror:// »"
 
-#: guix/scripts/lint.scm:940
+#: guix/scripts/lint.scm:959
 msgid "Validate file names of sources"
 msgstr "Valider les noms des fichiers des sources"
 
-#: guix/scripts/lint.scm:944
+#: guix/scripts/lint.scm:963
 msgid "Report failure to compile a package to a derivation"
 msgstr "Signaler l'échec de la compilation d'un paquet d'une dérivation"
 
-#: guix/scripts/lint.scm:948
+#: guix/scripts/lint.scm:967
 msgid "Validate package synopses"
 msgstr "Valider les synopsis des paquets"
 
-#: guix/scripts/lint.scm:952
+#: guix/scripts/lint.scm:971
 msgid "Check the Common Vulnerabilities and Exposures (CVE) database"
 msgstr "Vérifier la base de données des vulnérabilités et failles connues (CVE)"
 
-#: guix/scripts/lint.scm:957
+#: guix/scripts/lint.scm:976
 msgid "Look for formatting issues in the source"
 msgstr "Rechercher des problèmes de format dans la source"
 
-#: guix/scripts/lint.scm:985
+#: guix/scripts/lint.scm:1004
 msgid ""
 "Usage: guix lint [OPTION]... [PACKAGE]...\n"
 "Run a set of checkers on the specified package; if none is specified,\n"
@@ -1895,7 +1933,7 @@ msgstr ""
 "Lancer un ensemble de vérificateurs sur le paquet spécifié; si aucun n'est spécifié,\n"
 "lancer les vérificateurs sur tous les paquets.\n"
 
-#: guix/scripts/lint.scm:988
+#: guix/scripts/lint.scm:1007
 msgid ""
 "\n"
 "  -c, --checkers=CHECKER1,CHECKER2...\n"
@@ -1905,7 +1943,7 @@ msgstr ""
 "  -c, --checkers=CHECKER1,CHECKER2...\n"
 "                         lancer uniquement les vérificateurs spécifiés"
 
-#: guix/scripts/lint.scm:993
+#: guix/scripts/lint.scm:1012
 msgid ""
 "\n"
 "  -l, --list-checkers    display the list of available lint checkers"
@@ -1913,12 +1951,12 @@ msgstr ""
 "\n"
 "  -l, --list-checkers    afficher la liste des vérificateurs disponibles"
 
-#: guix/scripts/lint.scm:1013
+#: guix/scripts/lint.scm:1032
 #, scheme-format
 msgid "~a: invalid checker~%"
 msgstr "~a: vérificateur non valide~%"
 
-#: guix/scripts/publish.scm:58
+#: guix/scripts/publish.scm:67
 #, scheme-format
 msgid ""
 "Usage: guix publish [OPTION]...\n"
@@ -1927,7 +1965,7 @@ msgstr ""
 "Usage: guix publish [OPTION]...\n"
 "Diffuser ~a via HTTP.\n"
 
-#: guix/scripts/publish.scm:60
+#: guix/scripts/publish.scm:69
 msgid ""
 "\n"
 "  -p, --port=PORT        listen on PORT"
@@ -1935,7 +1973,7 @@ msgstr ""
 "\n"
 "  -p, --port=PORT        écouter sur le PORT"
 
-#: guix/scripts/publish.scm:62
+#: guix/scripts/publish.scm:71
 msgid ""
 "\n"
 "      --listen=HOST      listen on the network interface for HOST"
@@ -1943,7 +1981,7 @@ msgstr ""
 "\n"
 "      --listen=HÔTE      écouter sur l'interface réseau HÔTE"
 
-#: guix/scripts/publish.scm:64
+#: guix/scripts/publish.scm:73
 msgid ""
 "\n"
 "  -u, --user=USER        change privileges to USER as soon as possible"
@@ -1953,7 +1991,7 @@ msgstr ""
 "                         changer les privilèges de UTILISATEUR aussi vite\n"
 "                         que possible"
 
-#: guix/scripts/publish.scm:66
+#: guix/scripts/publish.scm:75
 msgid ""
 "\n"
 "  -C, --compression[=LEVEL]\n"
@@ -1963,7 +2001,23 @@ msgstr ""
 "  -C, --compression[=NIVEAU]\n"
 "                         compresser les archives au NIVEAU"
 
-#: guix/scripts/publish.scm:69
+#: guix/scripts/publish.scm:78
+msgid ""
+"\n"
+"  -c, --cache=DIRECTORY  cache published items to DIRECTORY"
+msgstr ""
+"\n"
+"  -c, --cache=RÉPERTOIRE mettre les éléments publiés en cache dans le RÉPERTOIRE"
+
+#: guix/scripts/publish.scm:80
+msgid ""
+"\n"
+"      --workers=N        use N workers to bake items"
+msgstr ""
+"\n"
+"      --workers=N        utiliser N travailleurs pour préparer les éléments"
+
+#: guix/scripts/publish.scm:82
 msgid ""
 "\n"
 "      --ttl=TTL          announce narinfos can be cached for TTL seconds"
@@ -1972,7 +2026,31 @@ msgstr ""
 "      --ttl=TTL          les annonces narinfos peuvent être mises en cache\n"
 "                         pendant TTL secondes"
 
-#: guix/scripts/publish.scm:71
+#: guix/scripts/publish.scm:84
+msgid ""
+"\n"
+"      --nar-path=PATH    use PATH as the prefix for nar URLs"
+msgstr ""
+"\n"
+"      --nar-path=CHEMIN  utiliser le CHEMIN comme préfixe pour les URL nar"
+
+#: guix/scripts/publish.scm:86
+msgid ""
+"\n"
+"      --public-key=FILE  use FILE as the public key for signatures"
+msgstr ""
+"\n"
+"      --public-key=FICHIER utiliser le FICHIER comme clé publique pour les signatures"
+
+#: guix/scripts/publish.scm:88
+msgid ""
+"\n"
+"      --private-key=FILE use FILE as the private key for signatures"
+msgstr ""
+"\n"
+"      --private-key=FICHIER utiliser le FICHIER comme clé privée pour les signatures"
+
+#: guix/scripts/publish.scm:90
 msgid ""
 "\n"
 "  -r, --repl[=PORT]      spawn REPL server on PORT"
@@ -1980,37 +2058,37 @@ msgstr ""
 "\n"
 "  -r, --repl[=PORT]      créer le serveur REPL sur le PORT"
 
-#: guix/scripts/publish.scm:87
+#: guix/scripts/publish.scm:106
 #, scheme-format
 msgid "lookup of host '~a' failed: ~a~%"
 msgstr "la recherche de l'hôte « ~a » a échoué: ~a~%"
 
-#: guix/scripts/publish.scm:125
+#: guix/scripts/publish.scm:151
 #, scheme-format
 msgid "lookup of host '~a' returned nothing"
 msgstr "la recherche de l'hôte « ~a » n'a rien retourné"
 
-#: guix/scripts/publish.scm:138
+#: guix/scripts/publish.scm:164
 #, scheme-format
 msgid "zlib support is missing; compression disabled~%"
 msgstr "le support zlib est manquant. La compression est désactivée~%"
 
-#: guix/scripts/publish.scm:145
+#: guix/scripts/publish.scm:178
 #, scheme-format
 msgid "~a: invalid duration~%"
 msgstr "~a: durée non valide~%"
 
-#: guix/scripts/publish.scm:544
+#: guix/scripts/publish.scm:799
 #, scheme-format
 msgid "user '~a' not found: ~a~%"
 msgstr "utilisateur « ~a » pas trouvé: ~a~%"
 
-#: guix/scripts/publish.scm:581
+#: guix/scripts/publish.scm:840
 #, scheme-format
 msgid "server running as root; consider using the '--user' option!~%"
 msgstr "le serveur tourne en tant que root. Envisagez d'utiliser l'option « --user » !~%"
 
-#: guix/scripts/publish.scm:583
+#: guix/scripts/publish.scm:845
 #, scheme-format
 msgid "publishing ~a on ~a, port ~d~%"
 msgstr "diffusion de ~a sur ~a, port ~d~%"
@@ -2055,7 +2133,7 @@ msgstr "total"
 msgid "self"
 msgstr "lui-même"
 
-#: guix/scripts/size.scm:96
+#: guix/scripts/size.scm:97
 #, scheme-format
 msgid "total: ~,1f MiB~%"
 msgstr "total: ~,1f MiB~%"
@@ -2063,11 +2141,11 @@ msgstr "total: ~,1f MiB~%"
 #. 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:209
+#: guix/scripts/size.scm:211
 msgid "store profile"
 msgstr "profil stockage"
 
-#: guix/scripts/size.scm:218
+#: guix/scripts/size.scm:220
 msgid ""
 "Usage: guix size [OPTION]... PACKAGE\n"
 "Report the size of PACKAGE and its dependencies.\n"
@@ -2075,7 +2153,7 @@ msgstr ""
 "Usage: guix size [OPTION]... PAQUET\n"
 "Rapporter la taille du PAQUET et de ses dépendances.\n"
 
-#: guix/scripts/size.scm:223
+#: guix/scripts/size.scm:225
 msgid ""
 "\n"
 "  -s, --system=SYSTEM    consider packages for SYSTEM--e.g., \"i686-linux\""
@@ -2083,7 +2161,7 @@ msgstr ""
 "\n"
 "  -s, --system=SYSTÈME   prend en compte les paquets pour le SYSTÈME, par exemple « i686-linux »"
 
-#: guix/scripts/size.scm:225
+#: guix/scripts/size.scm:227
 msgid ""
 "\n"
 "  -m, --map-file=FILE    write to FILE a graphical map of disk usage"
@@ -2091,77 +2169,81 @@ msgstr ""
 "\n"
 "  -m, --map-file=FICHIER écrit dans le FICHIER une carte graphique de l'utilisation du disque"
 
-#: guix/scripts/size.scm:279
+#: guix/scripts/size.scm:281
 msgid "missing store item argument\n"
 msgstr "argument d'élément de stockage manquant\n"
 
-#: guix/scripts/graph.scm:83
+#: guix/scripts/graph.scm:84
 #, scheme-format
 msgid "~a: invalid argument (package name expected)"
 msgstr "~a: argument invalide (nom de paquet attendu)"
 
-#: guix/scripts/graph.scm:94
+#: guix/scripts/graph.scm:95
 msgid "the DAG of packages, excluding implicit inputs"
 msgstr "le DAG des paquets en excluant les entrées implicites"
 
-#: guix/scripts/graph.scm:151
+#: guix/scripts/graph.scm:121
+msgid "the reverse DAG of packages"
+msgstr "le graphe orienté acyclique (DAG) inversé des paquets"
+
+#: guix/scripts/graph.scm:171
 msgid "the DAG of packages, including implicit inputs"
 msgstr "le DAG des paquets en incluant les entrées implicites"
 
-#: guix/scripts/graph.scm:161
+#: guix/scripts/graph.scm:181
 msgid "the DAG of packages and origins, including implicit inputs"
 msgstr "le DAG des paquets et origines en incluant les entrées implicites"
 
-#: guix/scripts/graph.scm:192
+#: guix/scripts/graph.scm:211
 msgid "same as 'bag', but without the bootstrap nodes"
 msgstr "comme « bag » mais sans les nœuds d'amorçage"
 
-#: guix/scripts/graph.scm:238
+#: guix/scripts/graph.scm:257
 msgid "the DAG of derivations"
 msgstr "le DAG des dérivations"
 
-#: guix/scripts/graph.scm:250
+#: guix/scripts/graph.scm:269
 msgid "unsupported argument for derivation graph"
 msgstr "argument non supporté pour le graphe de dérivation"
 
-#: guix/scripts/graph.scm:276
+#: guix/scripts/graph.scm:295
 msgid "unsupported argument for this type of graph"
 msgstr "argument non supporté pour ce type de graphe"
 
-#: guix/scripts/graph.scm:289
+#: guix/scripts/graph.scm:308
 #, scheme-format
 msgid "references for '~a' are not known~%"
 msgstr "les références pour « ~a » sont inconnues~%"
 
-#: guix/scripts/graph.scm:296
+#: guix/scripts/graph.scm:315
 msgid "the DAG of run-time dependencies (store references)"
 msgstr "le DAG des dépendances à l'exécution (stockage des références)"
 
-#: guix/scripts/graph.scm:312
+#: guix/scripts/graph.scm:331
 msgid "the DAG of referrers in the store"
 msgstr "le graphe orienté acyclique (DAG) des référents dans le stockage"
 
-#: guix/scripts/graph.scm:338
+#: guix/scripts/graph.scm:358
 #, scheme-format
 msgid "~a: unknown node type~%"
 msgstr "~a: type de nœud inconnu~%"
 
-#: guix/scripts/graph.scm:345
+#: guix/scripts/graph.scm:365
 #, scheme-format
 msgid "~a: unknown backend~%"
 msgstr "~a: moteur de graphe inconnu~%"
 
-#: guix/scripts/graph.scm:349
+#: guix/scripts/graph.scm:369
 msgid "The available node types are:\n"
 msgstr "Les types de nœuds disponibles sont:\n"
 
-#: guix/scripts/graph.scm:359
+#: guix/scripts/graph.scm:379
 msgid "The available backend types are:\n"
 msgstr "Les types de moteurs de graphes disponibles sont:\n"
 
 #. TRANSLATORS: Here 'dot' is the name of a program; it must not be
 #. translated.
-#: guix/scripts/graph.scm:403
+#: guix/scripts/graph.scm:423
 msgid ""
 "Usage: guix graph PACKAGE...\n"
 "Emit a Graphviz (dot) representation of the dependencies of PACKAGE...\n"
@@ -2169,7 +2251,7 @@ msgstr ""
 "Usage: guix graph PAQUET...\n"
 "Produit une représentation Graphviz (dot) des dépendances de PAQUET...\n"
 
-#: guix/scripts/graph.scm:405
+#: guix/scripts/graph.scm:425
 msgid ""
 "\n"
 "  -b, --backend=TYPE     produce a graph with the given backend TYPE"
@@ -2177,7 +2259,7 @@ msgstr ""
 "\n"
 "  -t, --backend=TYPE     produire un graphe avec le TYPE de moteur donné"
 
-#: guix/scripts/graph.scm:407
+#: guix/scripts/graph.scm:427
 msgid ""
 "\n"
 "      --list-backends    list the available graph backends"
@@ -2185,7 +2267,7 @@ msgstr ""
 "\n"
 "      --list-backends    lister les types de moteurs de graphes disponibles"
 
-#: guix/scripts/graph.scm:409
+#: guix/scripts/graph.scm:429
 msgid ""
 "\n"
 "  -t, --type=TYPE        represent nodes of the given TYPE"
@@ -2193,7 +2275,7 @@ msgstr ""
 "\n"
 "  -t, --type=TYPE        représenter les nœuds du TYPE donné"
 
-#: guix/scripts/graph.scm:411
+#: guix/scripts/graph.scm:431
 msgid ""
 "\n"
 "      --list-types       list the available graph types"
@@ -2201,7 +2283,7 @@ msgstr ""
 "\n"
 "      --list-types       lister les types de graphes disponibles"
 
-#: guix/scripts/graph.scm:413
+#: guix/scripts/graph.scm:433 guix/scripts/pack.scm:328
 msgid ""
 "\n"
 "  -e, --expression=EXPR  consider the package EXPR evaluates to"
@@ -2209,42 +2291,42 @@ msgstr ""
 "\n"
 "  -e, --expression=EXPR  considère le paquet évalué par EXPR"
 
-#: guix/scripts/challenge.scm:105
+#: guix/scripts/challenge.scm:191
 #, scheme-format
-msgid "~a: no substitute at '~a'~%"
-msgstr "~a: pas de substitut à « ~a »~%"
+msgid "  local hash: ~a~%"
+msgstr "  hachage local: ~a~%"
 
-#: guix/scripts/challenge.scm:121
+#: guix/scripts/challenge.scm:192
 #, scheme-format
-msgid "no substitutes for '~a'~%"
-msgstr "pas de substitut pour « ~a »~%"
+msgid "  no local build for '~a'~%"
+msgstr "  aucune compilation locale pour « ~a »~%"
 
-#: guix/scripts/challenge.scm:138 guix/scripts/challenge.scm:158
+#: guix/scripts/challenge.scm:194
 #, scheme-format
-msgid "no local build for '~a'~%"
-msgstr "aucune compilation locale pour « ~a »~%"
+msgid "  ~50a: ~a~%"
+msgstr "  ~50a: ~a~%"
 
-#: guix/scripts/challenge.scm:155
+#: guix/scripts/challenge.scm:202
 #, scheme-format
 msgid "~a contents differ:~%"
 msgstr "le contenu de ~a diffère:~%"
 
-#: guix/scripts/challenge.scm:157
+#: guix/scripts/challenge.scm:205
 #, scheme-format
-msgid "  local hash: ~a~%"
-msgstr "  hachage local: ~a~%"
+msgid "could not challenge '~a': no local build~%"
+msgstr "impossible de mettre « ~a » au défi: aucune construction locale~%"
 
-#: guix/scripts/challenge.scm:162
+#: guix/scripts/challenge.scm:207
 #, scheme-format
-msgid "  ~50a: ~a~%"
-msgstr "  ~50a: ~a~%"
+msgid "could not challenge '~a': no substitutes~%"
+msgstr "impossible de mettre « ~a » au défi: aucune substitution~%"
 
-#: guix/scripts/challenge.scm:166
+#: guix/scripts/challenge.scm:210
 #, scheme-format
-msgid "  ~50a: unavailable~%"
-msgstr "  ~50a: non disponible~%"
+msgid "~a contents match:~%"
+msgstr "le contenu de ~a correspond:~%"
 
-#: guix/scripts/challenge.scm:176
+#: guix/scripts/challenge.scm:219
 msgid ""
 "Usage: guix challenge [PACKAGE...]\n"
 "Challenge the substitutes for PACKAGE... provided by one or more servers.\n"
@@ -2252,7 +2334,7 @@ msgstr ""
 "Usage: guix challenge [PAQUET...]\n"
 "Contrôle les substituts du PAQUET... fourni par un ou plusieurs serveurs.\n"
 
-#: guix/scripts/challenge.scm:178
+#: guix/scripts/challenge.scm:221
 msgid ""
 "\n"
 "      --substitute-urls=URLS\n"
@@ -2262,23 +2344,125 @@ msgstr ""
 "      --substitute-urls=URLS\n"
 "                         comparer les résultats de compilation avec ceux aux URLS"
 
-#: guix/gnu-maintenance.scm:555
+#: guix/scripts/challenge.scm:224
+msgid ""
+"\n"
+"      -v, --verbose      show details about successful comparisons"
+msgstr ""
+"\n"
+"      -v, --verbose      montrer les détails des comparaisons réussies"
+
+#: guix/scripts/copy.scm:59
+#, scheme-format
+msgid "~a: invalid TCP port number~%"
+msgstr "~a: numéro de port TCP invalide~%"
+
+#: guix/scripts/copy.scm:61
+#, scheme-format
+msgid "~a: invalid SSH specification~%"
+msgstr "~a: spécification SSH invalide~%"
+
+#: guix/scripts/copy.scm:112
+msgid ""
+"Usage: guix copy [OPTION]... ITEMS...\n"
+"Copy ITEMS to or from the specified host over SSH.\n"
+msgstr ""
+"Usage: guix copy [OPTION]... ÉLÉMENTS...\n"
+"Copier les ÉLÉMENTS vers ou depuis l'hôte spécifié en SSH.\n"
+
+#: guix/scripts/copy.scm:114
+msgid ""
+"\n"
+"      --to=HOST          send ITEMS to HOST"
+msgstr ""
+"\n"
+"      --to=HÔTE          envoyer les ÉLÉMENTS vers l'HÔTE"
+
+#: guix/scripts/copy.scm:116
+msgid ""
+"\n"
+"      --from=HOST        receive ITEMS from HOST"
+msgstr ""
+"\n"
+"      --from=HÔTE        recevoir les ÉLÉMENTS depuis l'HÔTE"
+
+#: guix/scripts/copy.scm:168
+#, scheme-format
+msgid "use '--to' or '--from'~%"
+msgstr "utilisez « --to » ou « --from »~%"
+
+#: guix/scripts/pack.scm:74
+#, scheme-format
+msgid "~a: compressor not found~%"
+msgstr "~a: compresseur introuvable~%"
+
+#: guix/scripts/pack.scm:310
+#, scheme-format
+msgid "~a: invalid symlink specification~%"
+msgstr "~a: spécification de lien symbolique invalide~%"
+
+#: guix/scripts/pack.scm:320
+msgid ""
+"Usage: guix pack [OPTION]... PACKAGE...\n"
+"Create a bundle of PACKAGE.\n"
+msgstr ""
+"Usage: guix pack [OPTION]... PAQUET...\n"
+"Créer un paquet de PAQUET.\n"
+
+#: guix/scripts/pack.scm:326
+msgid ""
+"\n"
+"  -f, --format=FORMAT    build a pack in the given FORMAT"
+msgstr ""
+"\n"
+"  -f, --format=FORMAT    créer un paquet dans le FORMAT donné"
+
+#: guix/scripts/pack.scm:334
+msgid ""
+"\n"
+"  -C, --compression=TOOL compress using TOOL--e.g., \"lzip\""
+msgstr ""
+"\n"
+"  -C, --compression=OUTIL compresser en utilisant l'OUTIL, par ex, « lzip »"
+
+#: guix/scripts/pack.scm:336
+msgid ""
+"\n"
+"  -S, --symlink=SPEC     create symlinks to the profile according to SPEC"
+msgstr ""
+"\n"
+"  -S, --symlink=SPEC     créer des liens symboliques vers le profil selon la SPEC"
+
+#: guix/scripts/pack.scm:338
+msgid ""
+"\n"
+"      --localstatedir    include /var/guix in the resulting pack"
+msgstr ""
+"\n"
+"      --localstatedir    inclure /var/guix dans le paquet résultant"
+
+#: guix/scripts/pack.scm:382
+#, scheme-format
+msgid "~a: unknown pack format"
+msgstr "~a: format de paquet inconnu"
+
+#: guix/gnu-maintenance.scm:562
 msgid "Updater for GNU packages"
 msgstr "Logiciel de mise à jour des paquets GNU"
 
-#: guix/gnu-maintenance.scm:562
+#: guix/gnu-maintenance.scm:569
 msgid "Updater for GNOME packages"
 msgstr "Logiciel de mise à jour des paquets GNOME"
 
-#: guix/gnu-maintenance.scm:569
+#: guix/gnu-maintenance.scm:576
 msgid "Updater for KDE packages"
 msgstr "Logiciel de mise à jour des paquets KDE"
 
-#: guix/gnu-maintenance.scm:576
+#: guix/gnu-maintenance.scm:583
 msgid "Updater for X.org packages"
 msgstr "Logiciel de mise à jour des paquets X.org"
 
-#: guix/gnu-maintenance.scm:583
+#: guix/gnu-maintenance.scm:590
 msgid "Updater for packages hosted on kernel.org"
 msgstr "Logiciel de mise à jour des paquets hébergés sur kernel.org"
 
@@ -2317,22 +2501,22 @@ msgstr ""
 msgid "~a: extraneous argument~%"
 msgstr "~a: argument superflu~%"
 
-#: guix/scripts/container/exec.scm:80
+#: guix/scripts/container/exec.scm:87
 #, scheme-format
 msgid "no pid specified~%"
 msgstr "aucun pid spécifié~%"
 
-#: guix/scripts/container/exec.scm:83
+#: guix/scripts/container/exec.scm:90
 #, scheme-format
 msgid "no command specified~%"
 msgstr "aucune commande spécifiée~%"
 
-#: guix/scripts/container/exec.scm:86
+#: guix/scripts/container/exec.scm:93
 #, scheme-format
 msgid "no such process ~d~%"
 msgstr "aucun processus ~d~%"
 
-#: guix/scripts/container/exec.scm:94
+#: guix/scripts/container/exec.scm:105
 #, scheme-format
 msgid "exec failed with status ~d~%"
 msgstr "exec a échoué avec le statut ~d~%"
@@ -2347,10 +2531,6 @@ msgstr "la vérification de la signature a échoué pour « ~a »~%"
 msgid "(could be because the public key is not in your keyring)~%"
 msgstr "(il est possible que la clé publique ne soit pas dans dans votre trousseau)~%"
 
-#: guix/upstream.scm:246
-msgid "gz"
-msgstr "gz"
-
 #: guix/upstream.scm:293
 #, scheme-format
 msgid "~a: could not locate source file"
@@ -2361,53 +2541,62 @@ msgstr "~a: le fichier source est introuvable"
 msgid "~a: ~a: no `version' field in source; skipping~%"
 msgstr "~a: ~a: aucun champ « version » dans la source; ignoré~%"
 
-#: guix/ui.scm:239
+#: guix/ui.scm:241
 msgid "entering debugger; type ',bt' for a backtrace\n"
 msgstr "entrée dans le débogueur; tapez « ,bt » pour la trace inverse\n"
 
-#: guix/ui.scm:255 guix/ui.scm:272
+#: guix/ui.scm:257 guix/ui.scm:278 guix/ui.scm:285
 #, scheme-format
 msgid "failed to load '~a': ~a~%"
 msgstr "impossible de charger « ~a »: ~a~%"
 
-#: guix/ui.scm:258
+#: guix/ui.scm:260
 #, scheme-format
 msgid "~a: error: ~a~%"
 msgstr "~a: erreur: ~a~%"
 
-#: guix/ui.scm:261 guix/ui.scm:530
+#: guix/ui.scm:267 guix/ui.scm:554
 #, scheme-format
 msgid "exception thrown: ~s~%"
 msgstr "exception générée: ~s~%"
 
-#: guix/ui.scm:263 guix/ui.scm:281
+#: guix/ui.scm:269 guix/ui.scm:291
 #, scheme-format
 msgid "failed to load '~a':~%"
 msgstr "échec lors du chargement de « ~a »:~%"
 
-#: guix/ui.scm:275
+#: guix/ui.scm:281
 #, scheme-format
 msgid "~a: warning: ~a~%"
 msgstr "~a: avertissement: ~a~%"
 
-#: guix/ui.scm:278
+#: guix/ui.scm:288
 #, scheme-format
 msgid "failed to load '~a': exception thrown: ~s~%"
 msgstr "échec lors du chargement de « ~a »: exception générée: ~s~%"
 
-#: guix/ui.scm:290
+#: guix/ui.scm:300
 #, scheme-format
 msgid "failed to install locale: ~a~%"
 msgstr "impossible d'installer l'environnement linguistique: ~a~%"
 
-#: guix/ui.scm:309
+#. TRANSLATORS: Translate "(C)" to the copyright symbol
+#. (C-in-a-circle), if this symbol is available in the user's
+#. locale.  Otherwise, do not translate "(C)"; leave it as-is.  */
+#: guix/ui.scm:323
+msgid "(C)"
+msgstr "©"
+
+#: guix/ui.scm:324
+msgid "the Guix authors\n"
+msgstr "les auteurs de Guix\n"
+
+#: guix/ui.scm:325
 msgid ""
-"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) 2016 les auteurs de Guix\n"
 "Licence GPLv3+: GNU GPL version 3 ou ultérieure <http://www.gnu.org/licenses/gpl.fr.html>\n"
 "Ceci est un logiciel libre: vous êtes libre de le modifier et de le redistribuer.\n"
 "Il n'y a AUCUNE GARANTIE, dans les limites permises par la loi.\n"
@@ -2416,7 +2605,7 @@ msgstr ""
 #. 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:321
+#: guix/ui.scm:337
 #, scheme-format
 msgid ""
 "\n"
@@ -2426,7 +2615,7 @@ msgstr ""
 "Signalez toute anomalie à : ~a.\n"
 "Signalez toute erreur de traduction à : traduc@traduc.org"
 
-#: guix/ui.scm:323
+#: guix/ui.scm:339
 #, scheme-format
 msgid ""
 "\n"
@@ -2435,7 +2624,7 @@ msgstr ""
 "\n"
 "~a page d'accueil: <~a>"
 
-#: guix/ui.scm:325
+#: guix/ui.scm:341
 msgid ""
 "\n"
 "General help using GNU software: <http://www.gnu.org/gethelp/>"
@@ -2443,199 +2632,204 @@ msgstr ""
 "\n"
 "Aide générale sur l'utilisation des logiciels GNU: <http://www.gnu.org/gethelp/>"
 
-#: guix/ui.scm:370
+#: guix/ui.scm:386
 #, scheme-format
 msgid "'~a' is not a valid regular expression: ~a~%"
 msgstr "« ~a » n'est pas une expression rationnelle valide: ~a~%"
 
-#: guix/ui.scm:376
+#: guix/ui.scm:392
 #, scheme-format
 msgid "~a: invalid number~%"
 msgstr "~a: nombre non valide~%"
 
-#: guix/ui.scm:393
+#: guix/ui.scm:409
 #, scheme-format
 msgid "invalid number: ~a~%"
 msgstr "nombre non valide: ~a~%"
 
-#: guix/ui.scm:416
+#: guix/ui.scm:432
 #, scheme-format
 msgid "unknown unit: ~a~%"
 msgstr "unité inconnue: ~a~%"
 
-#: guix/ui.scm:433
+#: guix/ui.scm:449
 #, scheme-format
 msgid "~a:~a:~a: package `~a' has an invalid input: ~s~%"
 msgstr "~a:~a:~a: le paquet « ~a » a une entrée non valide: ~s~%"
 
-#: guix/ui.scm:440
+#: guix/ui.scm:456
 #, scheme-format
 msgid "~a: ~a: build system `~a' does not support cross builds~%"
 msgstr "~a: ~a: le système de compilation « ~a » ne supporte pas la compilation croisée~%"
 
-#: guix/ui.scm:445
+#: guix/ui.scm:462
+#, scheme-format
+msgid "~s: invalid G-expression input~%"
+msgstr "~s: entrée G-expression invalide~%"
+
+#: guix/ui.scm:465
 #, scheme-format
 msgid "profile '~a' does not exist~%"
 msgstr "le profile « ~a » n'existe pas~%"
 
-#: guix/ui.scm:448
+#: guix/ui.scm:468
 #, scheme-format
 msgid "generation ~a of profile '~a' does not exist~%"
 msgstr "la génération ~a du profile « ~a » n'existe pas~%"
 
-#: guix/ui.scm:455
+#: guix/ui.scm:475
 #, scheme-format
 msgid "corrupt input while restoring '~a' from ~s~%"
 msgstr "entrée corrompue en restaurant « ~a » depuis ~s~%"
 
-#: guix/ui.scm:457
+#: guix/ui.scm:477
 #, scheme-format
 msgid "corrupt input while restoring archive from ~s~%"
 msgstr "entrée corrompue en restaurant l'archive depuis ~s~%"
 
-#: guix/ui.scm:460
+#: guix/ui.scm:480
 #, scheme-format
 msgid "failed to connect to `~a': ~a~%"
 msgstr "impossible de se connecter à « ~a »: ~a~%"
 
-#: guix/ui.scm:465
+#: guix/ui.scm:485
 #, scheme-format
 msgid "build failed: ~a~%"
 msgstr "la compilation a échoué: ~a~%"
 
-#: guix/ui.scm:468
+#: guix/ui.scm:488
 #, scheme-format
 msgid "reference to invalid output '~a' of derivation '~a'~%"
 msgstr "référence à la sortie invalide « ~a » de la dérivation « ~a »~%"
 
-#: guix/ui.scm:472
+#: guix/ui.scm:492
 #, scheme-format
 msgid "file '~a' could not be found in these directories:~{ ~a~}~%"
 msgstr "le fichier « ~a » n'a pas été trouvé dans ces répertoires:~{ ~a~}~%"
 
-#: guix/ui.scm:484
+#: guix/ui.scm:504
 #, scheme-format
 msgid "~a: ~a~%"
 msgstr "~a: ~a~%"
 
-#: guix/ui.scm:519
+#: guix/ui.scm:539
 #, scheme-format
 msgid "failed to read expression ~s: ~s~%"
 msgstr "impossible de lire l'expression ~s: ~s~%"
 
-#: guix/ui.scm:525
+#: guix/ui.scm:545
 #, scheme-format
 msgid "failed to evaluate expression '~a':~%"
 msgstr "impossible d'évaluer l'expression « ~a »:~%"
 
-#: guix/ui.scm:528
+#: guix/ui.scm:548
 #, scheme-format
 msgid "syntax error: ~a~%"
 msgstr "erreur de syntaxe: ~a~%"
 
-#: guix/ui.scm:542
+#: guix/ui.scm:566
 #, scheme-format
 msgid "expression ~s does not evaluate to a package~%"
 msgstr "l'expression ~s ne correspond à aucun paquet~%"
 
-#: guix/ui.scm:604
+#: guix/ui.scm:628
 #, scheme-format
 msgid "~:[The following derivation would be built:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following derivations would be built:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[La dérivation suivante serait compilée:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[Les dérivations suivantes seraient compilées:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:609
+#: guix/ui.scm:633
 #, scheme-format
 msgid "~:[The following file would be downloaded:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following files would be downloaded:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[Le fichier suivant serait téléchargé:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[Les fichiers suivants seraient téléchargés:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:615
+#: guix/ui.scm:639
 #, scheme-format
 msgid "~:[The following derivation will be built:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following derivations will be built:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[La dérivation suivante sera compilée:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[Les dérivations suivantes seront compilées:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:620
+#: guix/ui.scm:644
 #, scheme-format
 msgid "~:[The following file will be downloaded:~%~{   ~a~%~}~;~]"
 msgid_plural "~:[The following files will be downloaded:~%~{   ~a~%~}~;~]"
 msgstr[0] "~:[Le fichier suivant sera téléchargé:~%~{   ~a~%~}~;~]"
 msgstr[1] "~:[Les fichiers suivants seront téléchargés:~%~{   ~a~%~}~;~]"
 
-#: guix/ui.scm:675
+#: guix/ui.scm:700
 #, scheme-format
 msgid "The following package would be removed:~%~{~a~%~}~%"
 msgid_plural "The following packages would be removed:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant serait supprimé:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seraient supprimés:~%~{~a~%~}~%"
 
-#: guix/ui.scm:680
+#: guix/ui.scm:705
 #, scheme-format
 msgid "The following package will be removed:~%~{~a~%~}~%"
 msgid_plural "The following packages will be removed:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant sera supprimé:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seront supprimés:~%~{~a~%~}~%"
 
-#: guix/ui.scm:693
+#: guix/ui.scm:718
 #, scheme-format
 msgid "The following package would be downgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages would be downgraded:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant serait mis à une version inférieure:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seraient mis à des versions inférieures:~%~{~a~%~}~%"
 
-#: guix/ui.scm:698
+#: guix/ui.scm:723
 #, scheme-format
 msgid "The following package will be downgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages will be downgraded:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant sera mis à une version inférieure:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seront mis à des versions inférieures:~%~{~a~%~}~%"
 
-#: guix/ui.scm:711
+#: guix/ui.scm:736
 #, scheme-format
 msgid "The following package would be upgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages would be upgraded:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant serait mis à jour:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seraient mis à jour:~%~{~a~%~}~%"
 
-#: guix/ui.scm:716
+#: guix/ui.scm:741
 #, scheme-format
 msgid "The following package will be upgraded:~%~{~a~%~}~%"
 msgid_plural "The following packages will be upgraded:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant sera mis à jour:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seront mis à jour:~%~{~a~%~}~%"
 
-#: guix/ui.scm:727
+#: guix/ui.scm:752
 #, scheme-format
 msgid "The following package would be installed:~%~{~a~%~}~%"
 msgid_plural "The following packages would be installed:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant serait installé:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seraient installés:~%~{~a~%~}~%"
 
-#: guix/ui.scm:732
+#: guix/ui.scm:757
 #, scheme-format
 msgid "The following package will be installed:~%~{~a~%~}~%"
 msgid_plural "The following packages will be installed:~%~{~a~%~}~%"
 msgstr[0] "Le paquet suivant sera installé:~%~{~a~%~}~%"
 msgstr[1] "Les paquets suivants seront installés:~%~{~a~%~}~%"
 
-#: guix/ui.scm:749
+#: guix/ui.scm:774
 msgid "<unknown location>"
 msgstr "<emplacement inconnu>"
 
-#: guix/ui.scm:768
+#: guix/ui.scm:793
 #, scheme-format
 msgid "failed to create configuration directory `~a': ~a~%"
 msgstr "impossible de créer le répertoire de configuration « ~a »: ~a~%"
 
-#: guix/ui.scm:891 guix/ui.scm:905
+#: guix/ui.scm:924 guix/ui.scm:938
 msgid "unknown"
 msgstr "inconnu"
 
-#: guix/ui.scm:1063
+#: guix/ui.scm:1097
 #, scheme-format
 msgid "Generation ~a\t~a"
 msgstr "Génération ~a\t~a"
@@ -2643,27 +2837,27 @@ msgstr "Génération ~a\t~a"
 #. TRANSLATORS: The word "current" here is an adjective for
 #. "Generation", as in "current generation".  Use the appropriate
 #. gender where applicable.
-#: guix/ui.scm:1073
+#: guix/ui.scm:1107
 #, scheme-format
 msgid "~a\t(current)~%"
 msgstr "~a\t(actuel)~%"
 
-#: guix/ui.scm:1116
+#: guix/ui.scm:1150
 #, scheme-format
 msgid "switched from generation ~a to ~a~%"
 msgstr "passé de la génération ~a à ~a~%"
 
-#: guix/ui.scm:1132
+#: guix/ui.scm:1166
 #, scheme-format
 msgid "deleting ~a~%"
 msgstr "suppression de ~a~%"
 
-#: guix/ui.scm:1163
+#: guix/ui.scm:1197
 #, scheme-format
 msgid "Try `guix --help' for more information.~%"
 msgstr "Essayez « guix --help » pour plus d'informations.~%"
 
-#: guix/ui.scm:1191
+#: guix/ui.scm:1225
 msgid ""
 "Usage: guix COMMAND ARGS...\n"
 "Run COMMAND with ARGS.\n"
@@ -2671,33 +2865,34 @@ msgstr ""
 "Usage: guix COMMANDE ARGS...\n"
 "Lance la COMMANDE avec les arguments ARGS.\n"
 
-#: guix/ui.scm:1194
+#: guix/ui.scm:1228
 msgid "COMMAND must be one of the sub-commands listed below:\n"
 msgstr "COMMANDE doit être une des sous-commandes listées ci-dessous:\n"
 
-#: guix/ui.scm:1214
+#: guix/ui.scm:1248
 #, scheme-format
 msgid "guix: ~a: command not found~%"
 msgstr "guix: ~a: commande introuvable~%"
 
-#: guix/ui.scm:1233
+#: guix/ui.scm:1267
 #, scheme-format
 msgid "guix: missing command name~%"
 msgstr "guix: nom de commande manquant~%"
 
-#: guix/ui.scm:1241
+#: guix/ui.scm:1275
 #, scheme-format
 msgid "guix: unrecognized option '~a'~%"
 msgstr "guix: option « ~a » non reconnue ~%"
 
-#: guix/http-client.scm:270
+#: guix/http-client.scm:265
 #, scheme-format
 msgid "following redirection to `~a'...~%"
 msgstr "redirection vers « ~a »...~%"
 
-#: guix/http-client.scm:279
-msgid "download failed"
-msgstr "le téléchargement a échoué"
+#: guix/http-client.scm:277
+#, scheme-format
+msgid "~a: HTTP download failed: ~a (~s)"
+msgstr "~a: le téléchargement HTTP a échoué: ~a (~s)"
 
 #: guix/nar.scm:155
 msgid "signature is not a valid s-expression"
@@ -2849,25 +3044,41 @@ msgstr "écoute sur SOCKET pour des connexions"
 msgid "produce debugging output"
 msgstr "produit une sortie de déboguage"
 
-#: nix/nix-daemon/guix-daemon.cc:201
-#, c-format
-msgid "error: %s: invalid number of rounds\n"
-msgstr "erreur: %s: nombre de tours invalide\n"
-
-#: nix/nix-daemon/guix-daemon.cc:220 nix/nix-daemon/guix-daemon.cc:396
-#, c-format
-msgid "error: %s\n"
-msgstr "erreur: %s\n"
-
-#: nix/nix-daemon/guix-daemon.cc:281
-#, c-format
-msgid "error: libgcrypt version mismatch\n"
-msgstr "erreur: désaccord de version de libgcrypt\n"
-
-#: 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 "avertissement: le daemon fonctionne en tant que root, l'utilisation de « --build-users-group » est fortement recommandée\n"
+#~ msgid "deprecated NAME-VERSION syntax; use NAME@VERSION instead~%"
+#~ msgstr "syntaxe NOM-VERSION dépréciée. Utilisez plutôt NOM@VERSION~%"
+
+#~ msgid "/"
+#~ msgstr "/"
+
+#~ msgid "~A: unexpected argument~%"
+#~ msgstr "~A: argument inattendu~%"
+
+#~ msgid "~a: no substitute at '~a'~%"
+#~ msgstr "~a: pas de substitut à « ~a »~%"
+
+#~ msgid "no substitutes for '~a'~%"
+#~ msgstr "pas de substitut pour « ~a »~%"
+
+#~ msgid "  ~50a: unavailable~%"
+#~ msgstr "  ~50a: non disponible~%"
+
+#~ msgid "gz"
+#~ msgstr "gz"
+
+#~ msgid "download failed"
+#~ msgstr "le téléchargement a échoué"
+
+#~ msgid "error: %s: invalid number of rounds\n"
+#~ msgstr "erreur: %s: nombre de tours invalide\n"
+
+#~ msgid "error: %s\n"
+#~ msgstr "erreur: %s\n"
+
+#~ msgid "error: libgcrypt version mismatch\n"
+#~ msgstr "erreur: désaccord de version de libgcrypt\n"
+
+#~ msgid "warning: daemon is running as root, so using `--build-users-group' is highly recommended\n"
+#~ msgstr "avertissement: le daemon fonctionne en tant que root, l'utilisation de « --build-users-group » est fortement recommandée\n"
 
 #~ msgid "unsupported argument for reference graph"
 #~ msgstr "argument non supporté pour le graphe de référence"
index 1b4689b..c29f3d3 100644 (file)
@@ -17,3 +17,8 @@ COPYRIGHT_HOLDER = Ludovic Courtès
 MSGID_BUGS_ADDRESS = ludo@gnu.org
 
 EXTRA_LOCALE_CATEGORIES =
+
+# Disable PO update upon "make dist", which sometimes fails when doing
+# "make distcheck -j4".
+# See <https://lists.gnu.org/archive/html/bug-gettext/2014-08/msg00005.html>.
+DIST_DEPENDS_ON_UPDATE_PO = no
index c162d45..d785ec5 100644 (file)
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -17,6 +18,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (test-cran)
+  #:use-module (gnu packages statistics)
   #:use-module (guix import cran)
   #:use-module (guix tests)
   #:use-module (srfi srfi-1)
@@ -86,6 +88,10 @@ Date/Publication: 2015-07-14 14:15:16
   '()
   ((@@ (guix import cran) listify) simple-alist "BadList"))
 
+(test-equal "r-mininal is not a cran package"
+  #f
+  ((@@ (guix import cran) cran-package?) r-minimal))
+
 (test-assert "description->package"
   ;; Replace network resources with sample data.
   (mock ((guix build download) url-fetch
diff --git a/tests/discovery.scm b/tests/discovery.scm
new file mode 100644 (file)
index 0000000..b838731
--- /dev/null
@@ -0,0 +1,52 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 Ludovic Courtès <ludo@gnu.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (test-discovery)
+  #:use-module (guix discovery)
+  #:use-module (guix build-system)
+  #:use-module (srfi srfi-64)
+  #:use-module (ice-9 match))
+
+(define %top-srcdir
+  (dirname (search-path %load-path "guix.scm")))
+
+(test-begin "discovery")
+
+(test-assert "scheme-modules"
+  (match (map module-name (scheme-modules %top-srcdir "guix/import"))
+    ((('guix 'import _ ...) ..1)
+     #t)))
+
+(test-assert "all-modules"
+  (match (map module-name
+              (all-modules `((,%top-srcdir . "guix/build-system"))))
+    ((('guix 'build-system names) ..1)
+     names)))
+
+(test-assert "fold-module-public-variables"
+  (let ((modules (all-modules `((,%top-srcdir . "guix/build-system")))))
+    (match (fold-module-public-variables (lambda (obj result)
+                                           (if (build-system? obj)
+                                               (cons obj result)
+                                               result))
+                                         '()
+                                         modules)
+      (((? build-system? bs) ..1)
+       bs))))
+
+(test-end "discovery")
index 9494e73..880a582 100644 (file)
@@ -185,7 +185,6 @@ test "`guix build superseded -d`" = "`guix build bar -d`"
 # Parsing package names and versions.
 guix build -n time             # PASS
 guix build -n time@1.7         # PASS, version found
-guix build -n time-1.7         # PASS, deprecated version syntax
 if guix build -n time@3.2;     # FAIL, version not found
 then false; else true; fi
 if guix build -n something-that-will-never-exist; # FAIL
index 233b71c..268c324 100644 (file)
@@ -122,13 +122,15 @@ URL: nar/~a
 Compression: none
 NarHash: sha256:~a
 NarSize: ~d
-References: ~a~%"
+References: ~a
+FileSize: ~a~%"
                   %item
                   (basename %item)
                   (bytevector->nix-base32-string
                    (path-info-hash info))
                   (path-info-nar-size info)
-                  (basename (first (path-info-references info)))))
+                  (basename (first (path-info-references info)))
+                  (path-info-nar-size info)))
          (signature (base64-encode
                      (string->utf8
                       (canonical-sexp->string
@@ -152,11 +154,13 @@ URL: nar/~a
 Compression: none
 NarHash: sha256:~a
 NarSize: ~d
-References: ~%"
+References: ~%\
+FileSize: ~a~%"
                   item
                   (uri-encode (basename item))
                   (bytevector->nix-base32-string
                    (path-info-hash info))
+                  (path-info-nar-size info)
                   (path-info-nar-size info)))
          (signature (base64-encode
                      (string->utf8
@@ -323,6 +327,7 @@ References: ~%"
           ("Compression" . "gzip"))
         200                                       ;nar/gzip/…
         #t                                        ;Content-Length
+        #t                                        ;FileSize
         200)                                      ;nar/…
   (call-with-temporary-directory
    (lambda (cache)
@@ -350,11 +355,19 @@ References: ~%"
                                        (basename %item) ".nar"))
               (response (http-get url)))
          (and (= 404 (response-code response))
+
+              ;; We should get an explicitly short TTL for 404 in this case
+              ;; because it's going to become 200 shortly.
+              (match (assq-ref (response-headers response) 'cache-control)
+                ((('max-age . ttl))
+                 (< ttl 3600)))
+
               (wait-for-file cached)
-              (let ((body         (http-get-port url))
-                    (compressed   (http-get nar-url))
-                    (uncompressed (http-get (string-append base "nar/"
-                                                           (basename %item)))))
+              (let* ((body         (http-get-port url))
+                     (compressed   (http-get nar-url))
+                     (uncompressed (http-get (string-append base "nar/"
+                                                            (basename %item))))
+                     (narinfo      (recutils->alist body)))
                 (list (file-exists? nar)
                       (filter (lambda (item)
                                 (match item
@@ -362,10 +375,13 @@ References: ~%"
                                   (("StorePath" . _)  #t)
                                   (("URL" . _) #t)
                                   (_ #f)))
-                              (recutils->alist body))
+                              narinfo)
                       (response-code compressed)
                       (= (response-content-length compressed)
                          (stat:size (stat nar)))
+                      (= (string->number
+                          (assoc-ref narinfo "FileSize"))
+                         (stat:size (stat nar)))
                       (response-code uncompressed)))))))))
 
 (test-end "publish")
index 3eb8b7b..45aeb32 100644 (file)
                 (cut export-paths %store (list file) <>))))
     (delete-paths %store (list file))
 
-    ;; Flip a bit in the stream's payload.
-    (let* ((index (quotient (bytevector-length dump) 4))
+    ;; Flip a bit in the stream's payload.  INDEX here falls in the middle of
+    ;; the file contents in DUMP, regardless of the store prefix.
+    (let* ((index #x70)
            (byte  (bytevector-u8-ref dump index)))
       (bytevector-u8-set! dump index (logxor #xff byte)))
 
index cfe417d..1e98e35 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -189,6 +189,10 @@ Second line" 24))
   (string->duration "1m")
   (string->duration "30d"))
 
+(test-equal "duration, 2 hours"
+  7200
+  (time-second (string->duration "2h")))
+
 (test-equal "duration, 1 second"
   (make-time time-duration 0 1)
   (string->duration "1s"))