guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/02: Merge branch 'master' into core-updates


From: guix-commits
Subject: 01/02: Merge branch 'master' into core-updates
Date: Sun, 18 Jul 2021 13:58:48 -0400 (EDT)

civodul pushed a commit to branch core-updates
in repository guix.

commit 0e47fcced442d8e7c1b05184fdc1c14f10ed04ec
Merge: e4b70bc 8b1bde7
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sun Jul 18 16:05:21 2021 +0200

    Merge branch 'master' into core-updates

 .dir-locals.el                                     |    1 +
 .guix-authorizations                               |    2 -
 .mailmap                                           |    5 +-
 Makefile.am                                        |   61 +-
 NEWS                                               |    8 +-
 build-aux/compile-all.scm                          |   46 +-
 doc/build.scm                                      |   11 +-
 doc/contributing.texi                              |   66 +-
 doc/guix-cookbook.texi                             |   51 +-
 doc/guix.texi                                      |  132 +-
 etc/guix-daemon.conf.in                            |    2 +-
 etc/guix-daemon.service.in                         |    3 +-
 etc/guix-install.sh                                |   26 +-
 etc/init.d/guix-daemon.in                          |    2 +-
 etc/news.scm                                       |   28 +
 etc/openrc/guix-daemon.in                          |    2 +-
 etc/snippets/scheme-mode/guix-origin               |    4 +-
 gnu/installer/newt/partition.scm                   |    6 +-
 gnu/installer/newt/services.scm                    |   25 +-
 gnu/installer/services.scm                         |    9 +-
 gnu/installer/steps.scm                            |    2 +-
 gnu/installer/tests.scm                            |   11 +-
 gnu/local.mk                                       |   16 +-
 gnu/packages/abiword.scm                           |    6 +-
 gnu/packages/ada.scm                               |   40 -
 gnu/packages/admin.scm                             |   37 +-
 gnu/packages/algebra.scm                           |   94 +-
 gnu/packages/animation.scm                         |    6 +-
 gnu/packages/antivirus.scm                         |    4 +-
 gnu/packages/astronomy.scm                         |    8 +-
 gnu/packages/audio.scm                             |   62 +-
 gnu/packages/aux-files/linux-libre/4.14-arm.conf   |    4 +-
 gnu/packages/aux-files/linux-libre/4.14-i686.conf  |    4 +-
 .../aux-files/linux-libre/4.14-x86_64.conf         |    6 +-
 gnu/packages/aux-files/linux-libre/4.19-arm.conf   |    4 +-
 gnu/packages/aux-files/linux-libre/4.19-arm64.conf |    4 +-
 gnu/packages/aux-files/linux-libre/4.19-i686.conf  |    4 +-
 .../aux-files/linux-libre/4.19-x86_64.conf         |    6 +-
 gnu/packages/aux-files/linux-libre/4.9-i686.conf   |    4 +-
 gnu/packages/aux-files/linux-libre/4.9-x86_64.conf |    6 +-
 gnu/packages/aux-files/linux-libre/5.10-i686.conf  |    4 +-
 .../aux-files/linux-libre/5.10-x86_64.conf         |    6 +-
 gnu/packages/aux-files/linux-libre/5.12-i686.conf  |    4 +-
 .../aux-files/linux-libre/5.12-x86_64.conf         |    6 +-
 .../linux-libre/{5.4-arm.conf => 5.13-arm.conf}    | 1731 +++++++++++-----
 .../{5.4-arm64.conf => 5.13-arm64.conf}            | 2135 +++++++++++++++-----
 .../linux-libre/{5.12-i686.conf => 5.13-i686.conf} |  174 +-
 .../{5.12-x86_64.conf => 5.13-x86_64.conf}         |  210 +-
 gnu/packages/aux-files/linux-libre/5.4-arm.conf    |    4 +-
 gnu/packages/aux-files/linux-libre/5.4-arm64.conf  |    4 +-
 gnu/packages/aux-files/linux-libre/5.4-i686.conf   |    4 +-
 gnu/packages/aux-files/linux-libre/5.4-x86_64.conf |    6 +-
 gnu/packages/backup.scm                            |   78 +-
 gnu/packages/benchmark.scm                         |    4 +-
 gnu/packages/bioconductor.scm                      |  162 +-
 gnu/packages/bioinformatics.scm                    |  112 +-
 gnu/packages/bittorrent.scm                        |   38 +-
 gnu/packages/bootloaders.scm                       |    6 +-
 gnu/packages/c.scm                                 |   20 +
 gnu/packages/calendar.scm                          |    4 +-
 gnu/packages/certs.scm                             |   52 +
 gnu/packages/check.scm                             |   70 +-
 gnu/packages/chromium.scm                          |    4 +-
 gnu/packages/compression.scm                       |  112 +-
 gnu/packages/connman.scm                           |    7 +-
 gnu/packages/cpp.scm                               |    4 +-
 gnu/packages/cran.scm                              |  847 +++++---
 gnu/packages/crates-graphics.scm                   |   38 +-
 gnu/packages/crates-io.scm                         | 1222 ++++++++++-
 gnu/packages/crypto.scm                            |   14 +-
 gnu/packages/cups.scm                              |   10 +-
 gnu/packages/databases.scm                         |   33 +-
 gnu/packages/dbm.scm                               |    2 +-
 gnu/packages/distributed.scm                       |   11 +-
 gnu/packages/education.scm                         |   61 +-
 gnu/packages/elixir.scm                            |    5 +-
 gnu/packages/emacs-xyz.scm                         |  708 ++++---
 gnu/packages/embedded.scm                          |    3 +-
 gnu/packages/emulators.scm                         |  230 ++-
 gnu/packages/engineering.scm                       |   46 +-
 gnu/packages/erlang.scm                            |   29 +-
 gnu/packages/file-systems.scm                      |  180 +-
 gnu/packages/finance.scm                           |    8 +-
 gnu/packages/fontutils.scm                         |    4 +-
 gnu/packages/fpga.scm                              |    8 +-
 gnu/packages/ftp.scm                               |  139 +-
 gnu/packages/game-development.scm                  |  123 +-
 gnu/packages/games.scm                             |  152 +-
 gnu/packages/gcc.scm                               |   77 +
 gnu/packages/geo.scm                               |   87 +-
 gnu/packages/gettext.scm                           |    4 +-
 gnu/packages/glib.scm                              |   28 +-
 gnu/packages/gnome.scm                             |  120 +-
 gnu/packages/gnupg.scm                             |   31 +
 gnu/packages/gnuzilla.scm                          |   17 +-
 gnu/packages/golang.scm                            | 1164 +++++++++++
 gnu/packages/gpodder.scm                           |    4 +-
 gnu/packages/graph.scm                             |    3 -
 gnu/packages/graphics.scm                          |   29 +-
 gnu/packages/gtk.scm                               |   69 +-
 gnu/packages/guile-xyz.scm                         |   51 +-
 gnu/packages/hardware.scm                          |   80 +
 gnu/packages/haskell-apps.scm                      |   29 +-
 gnu/packages/haskell-check.scm                     |   52 +-
 gnu/packages/haskell-xyz.scm                       |  162 +-
 gnu/packages/hunspell.scm                          |    4 +-
 gnu/packages/image-processing.scm                  |  179 +-
 gnu/packages/image-viewers.scm                     |  171 ++
 gnu/packages/image.scm                             |   26 +-
 gnu/packages/irc.scm                               |    4 +-
 gnu/packages/jami.scm                              |    3 +-
 gnu/packages/java-compression.scm                  |   14 +-
 gnu/packages/julia-jll.scm                         |    6 +-
 gnu/packages/julia-xyz.scm                         |   31 +
 gnu/packages/julia.scm                             |    8 +-
 gnu/packages/jupyter.scm                           |   74 +-
 gnu/packages/kde-utils.scm                         |   86 +-
 gnu/packages/kde.scm                               |    7 +-
 gnu/packages/language.scm                          |    6 +-
 gnu/packages/less.scm                              |    4 +-
 gnu/packages/libreoffice.scm                       |    2 +
 gnu/packages/license.scm                           |    6 +-
 gnu/packages/linux.scm                             |  410 ++--
 gnu/packages/lisp-check.scm                        |   63 +
 gnu/packages/lisp-xyz.scm                          |  970 ++++++++-
 gnu/packages/lisp.scm                              |   12 +-
 gnu/packages/machine-learning.scm                  |   25 +
 gnu/packages/mail.scm                              |  113 +-
 gnu/packages/make-bootstrap.scm                    |   32 +-
 gnu/packages/man.scm                               |    6 +-
 gnu/packages/maths.scm                             |  137 +-
 gnu/packages/mes.scm                               |    9 +-
 gnu/packages/messaging.scm                         |   19 +-
 gnu/packages/mpd.scm                               |    4 +-
 gnu/packages/mtools.scm                            |   25 +-
 gnu/packages/music.scm                             |   67 +-
 gnu/packages/networking.scm                        |  127 +-
 gnu/packages/ocaml.scm                             |  147 +-
 gnu/packages/package-management.scm                |   91 +-
 gnu/packages/parallel.scm                          |    4 +-
 gnu/packages/pascal.scm                            |    4 +-
 gnu/packages/password-utils.scm                    |   27 +-
 gnu/packages/patches/ark-skip-xar-test.patch       |   44 +
 gnu/packages/patches/connman-CVE-2021-33833.patch  |   74 -
 .../emacs-telega-patch-server-functions.patch      |   31 -
 .../patches/emacs-telega-path-placeholder.patch    |   44 +
 gnu/packages/patches/go-fix-script-tests.patch     |   18 +
 gnu/packages/patches/libgrss-CVE-2016-2001.patch   |  101 +
 .../patches/oneko-remove-nonfree-characters.patch  |  307 +++
 gnu/packages/patches/proot-test-fhs.patch          |   98 -
 gnu/packages/patches/python-seaborn-kde-test.patch |   36 +
 .../patches/tor-fix-build-with-gcc-7.patch         |   30 -
 .../transmission-remote-gtk-fix-appstream.patch    |   61 +
 gnu/packages/patches/upower-builddir.patch         |   24 +-
 .../vtk-8-fix-freetypetools-build-failure.patch    |   36 +
 gnu/packages/patches/ytfzf-programs.patch          |  643 ++++++
 gnu/packages/patches/ytfzf-updates.patch           |   44 +
 gnu/packages/pdf.scm                               |   14 +-
 gnu/packages/perl-check.scm                        |   25 +
 gnu/packages/perl.scm                              |  178 ++
 gnu/packages/photo.scm                             |    8 +-
 gnu/packages/php.scm                               |    3 +
 gnu/packages/protobuf.scm                          |   27 +-
 gnu/packages/python-check.scm                      |   13 +-
 gnu/packages/python-crypto.scm                     |   95 +-
 gnu/packages/python-science.scm                    |  102 +
 gnu/packages/python-web.scm                        |  132 +-
 gnu/packages/python-xyz.scm                        |  402 ++--
 gnu/packages/qt.scm                                |  176 +-
 gnu/packages/radio.scm                             |   91 +-
 gnu/packages/readline.scm                          |    4 +-
 gnu/packages/rpc.scm                               |   14 +-
 gnu/packages/ruby.scm                              |   58 +-
 gnu/packages/rust-apps.scm                         |   66 +-
 gnu/packages/rust.scm                              |    2 +-
 gnu/packages/security-token.scm                    |   50 +
 gnu/packages/shellutils.scm                        |    9 +-
 gnu/packages/simulation.scm                        |  109 +-
 gnu/packages/sphinx.scm                            |   95 +-
 gnu/packages/statistics.scm                        |   87 +-
 gnu/packages/syncthing.scm                         |   41 +-
 gnu/packages/syndication.scm                       |   12 +-
 gnu/packages/task-management.scm                   |   29 +-
 gnu/packages/tex.scm                               |  119 ++
 gnu/packages/text-editors.scm                      |   70 +-
 gnu/packages/textutils.scm                         |    4 +-
 gnu/packages/time.scm                              |   17 +-
 gnu/packages/tls.scm                               |   40 +-
 gnu/packages/tmux.scm                              |    4 +-
 gnu/packages/tor.scm                               |   51 +-
 gnu/packages/toys.scm                              |   69 +-
 gnu/packages/video.scm                             |  276 ++-
 gnu/packages/vim.scm                               |   13 +-
 gnu/packages/virtualization.scm                    |   27 +-
 gnu/packages/vnc.scm                               |    7 +-
 gnu/packages/vpn.scm                               |  214 +-
 gnu/packages/web-browsers.scm                      |   24 +-
 gnu/packages/web.scm                               |   20 +-
 gnu/packages/wm.scm                                |   34 +
 gnu/packages/wxwidgets.scm                         |   13 +-
 gnu/packages/xdisorg.scm                           |    5 +-
 gnu/packages/xorg.scm                              |   33 +-
 gnu/packages/zile.scm                              |   21 +-
 gnu/services/base.scm                              |   45 +-
 gnu/services/certbot.scm                           |    9 +-
 gnu/services/configuration.scm                     |   38 +-
 gnu/services/networking.scm                        |    4 +-
 gnu/services/security-token.scm                    |    6 +-
 gnu/services/virtualization.scm                    |   14 +-
 gnu/services/vpn.scm                               |  157 ++
 gnu/system.scm                                     |    4 +-
 gnu/system/file-systems.scm                        |   46 +-
 gnu/system/linux-initrd.scm                        |    4 +-
 gnu/system/vm.scm                                  |    2 +-
 gnu/tests/install.scm                              |    2 +-
 guix.scm                                           |    1 -
 guix/build-system/qt.scm                           |    6 +
 guix/build/download.scm                            |   36 +-
 guix/build/node-build-system.scm                   |    9 +-
 guix/build/pack.scm                                |   54 +
 guix/build/qt-build-system.scm                     |  107 +-
 guix/build/qt-utils.scm                            |  151 +-
 guix/build/syscalls.scm                            |    4 +-
 guix/ci.scm                                        |  129 +-
 guix/cpio.scm                                      |   16 +-
 guix/docker.scm                                    |   48 +-
 guix/gexp.scm                                      |   20 +
 guix/import/cabal.scm                              |   27 +-
 guix/import/go.scm                                 |  329 +--
 guix/import/opam.scm                               |    2 +-
 guix/licenses.scm                                  |    6 +
 guix/lint.scm                                      |  274 ++-
 guix/profiles.scm                                  |    2 +-
 guix/scripts/deploy.scm                            |   15 +-
 guix/scripts/pack.scm                              |  558 +++--
 guix/scripts/package.scm                           |   37 +-
 guix/scripts/pull.scm                              |   20 +-
 guix/scripts/substitute.scm                        |    4 +-
 guix/scripts/system/reconfigure.scm                |    9 +-
 guix/scripts/weather.scm                           |   17 +-
 guix/self.scm                                      |    5 +-
 guix/status.scm                                    |    3 +-
 guix/substitutes.scm                               |   13 +-
 guix/ui.scm                                        |   91 +-
 guix/utils.scm                                     |   33 +-
 tests/gexp.scm                                     |   31 +
 tests/go.scm                                       |  132 +-
 tests/hackage.scm                                  |   42 +
 tests/lint.scm                                     |  172 +-
 tests/pack.scm                                     |   94 +-
 tests/services/configuration.scm                   |   12 +
 251 files changed, 17094 insertions(+), 4822 deletions(-)

diff --cc etc/news.scm
index 9713514,88d23d7..b4a0806
--- a/etc/news.scm
+++ b/etc/news.scm
@@@ -23,31 -23,34 +23,59 @@@
  (channel-news
   (version 0)
  
 + (entry (commit "f23803af2018a148fb088f2516d79c20d6bf95f0")
 +        (title
 +         (en "Input labels can now be omitted in package definitions"))
 +        (body
 +         (en "If you have written package definitions before, you may know
 +that package inputs required a bit of boilerplate: each input needs to have an
 +associated label (a string), which you can refer to in ``build-side code''.
 +
 +Input labels are now unnecessary, meaning that you can write code like:
 +
 +@lisp
 +(package
 +  ;; @dots{}
 +  (inputs (list libunistring libffi libgc)))
 +@end lisp
 +
 +Notice that the @code{inputs} field is simplified compared to the ``old
 +style''.  When needed, you can now use g-expressions (gexps) to refer to
 +another package in build-side code.  Additionally, the new
 +@code{modify-inputs} macro facilitates common operations on inputs---deleting,
 +replacing, adding inputs.
 +
 +To ease transition to the ``new style'', a new @command{guix style} command is
 +provided.  Run @command{info \"(guix) Invoking guix style\"} for more 
info.")))
 +
+  (entry (commit "82daab42811a2e3c7684ebdf12af75ff0fa67b99")
+         (title
+          (en "New @samp{deb} format for the @command{guix pack} command")
+          (de "Neues Format @samp{deb} für den Befehl @command{guix pack}"))
+         (body
+          (en "Debian archives (with the .deb file extension) can now be
+ produced via the @command{guix pack --format=deb} command, providing an
+ alternative distribution path for software built with Guix.  Here is a simple
+ example that generates a Debian archive for the @code{hello} package:
+ 
+ @example
+ guix pack --format=deb --symlink=/usr/bin/hello=bin/hello hello
+ @end example
+ 
+ See @command{info \"(guix) Invoking guix pack\"} for more information.")
+          (de "Debian-Archive (mit der Dateinamenserweiterung .deb) können
+ jetzt auch mit dem Befehl @command{guix pack --format=deb} erzeugt werden, um
+ mit Guix erstellte Software auf andere Art anzubieten.  Hier sehen Sie ein
+ einfaches Beispiel, wie ein Debian-Archiv für das Paket @code{hello} angelegt
+ wird:
+ 
+ @example
+ guix pack --format=deb --symlink=/usr/bin/hello=bin/hello hello
+ @end example
+ 
+ Siehe @command{info \"(guix.de) Aufruf von guix pack\"} für mehr
+ Informationen.")))
+ 
   (entry (commit "bdc298ecee15283451d3aa20a849dd7bb22c8538")
          (title
           (en "New @command{guix import egg} command")
diff --cc gnu/local.mk
index bc9a34f,62a5e41..54e5c67
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@@ -40,9 -40,9 +40,10 @@@
  # Copyright © 2020 Malte Frank Gerdes <mate.f.gerdes@gmail.com>
  # Copyright © 2020 Vinicius Monego <monego@posteo.net>
  # Copyright © 2021 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
 +# Copyright © 2021 Greg Hogan <code@greghogan.com>
  # Copyright © 2021 Philip McGrath <philip@philipmcgrath.com>
  # Copyright © 2021 Arun Isaac <arunisaac@systemreboot.net>
+ # Copyright © 2021 Sharlatan Hellseher <sharlatanus@gmail.com>
  #
  # This file is part of GNU Guix.
  #
@@@ -927,8 -925,6 +930,7 @@@ dist_patch_DATA =                                  
        
    %D%/packages/patches/collectd-5.11.0-noinstallvar.patch             \
    %D%/packages/patches/combinatorial-blas-awpm.patch          \
    %D%/packages/patches/combinatorial-blas-io-fix.patch                \
-   %D%/packages/patches/connman-CVE-2021-33833.patch           \
 +  %D%/packages/patches/coreutils-gnulib-tests.patch           \
    %D%/packages/patches/coreutils-ls.patch                     \
    %D%/packages/patches/cpufrequtils-fix-aclocal.patch         \
    %D%/packages/patches/crawl-upgrade-saves.patch              \
@@@ -1821,8 -1861,12 +1827,10 @@@
    %D%/packages/patches/xsane-support-ipv6.patch                       \
    %D%/packages/patches/xsane-tighten-default-umask.patch      \
    %D%/packages/patches/yggdrasil-extra-config.patch   \
+   %D%/packages/patches/ytfzf-programs.patch        \
+   %D%/packages/patches/ytfzf-updates.patch        \
    %D%/packages/patches/ytnef-CVE-2021-3403.patch      \
 -  %D%/packages/patches/ytnef-CVE-2021-3404.patch      \
 -  %D%/packages/patches/zstd-CVE-2021-24031_CVE-2021-24032.patch       \
 -  %D%/packages/patches/zziplib-CVE-2018-16548.patch
 +  %D%/packages/patches/ytnef-CVE-2021-3404.patch
  
  MISC_DISTRO_FILES =                           \
    %D%/packages/ld-wrapper.in
diff --cc gnu/packages/algebra.scm
index 7c64f44,533b1f0..6e7ecda
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@@ -4,10 -4,10 +4,10 @@@
  ;;; Copyright © 2016, 2017, 2018, 2019, 2020, 2021 Nicolas Goaziou 
<mail@nicolasgoaziou.fr>
  ;;; Copyright © 2014, 2018 Mark H Weaver <mhw@netris.org>
  ;;; Copyright © 2016, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 -;;; Copyright © 2017, 2020 Efraim Flashner <efraim@flashner.co.il>
 +;;; Copyright © 2017, 2020, 2021 Efraim Flashner <efraim@flashner.co.il>
  ;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <me@tobias.gr>
  ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com>
- ;;; Copyright © 2017, 2019 Eric Bavier <bavier@member.fsf.org>
+ ;;; Copyright © 2017, 2019, 2021 Eric Bavier <bavier@posteo.net>
  ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
  ;;; Copyright © 2020 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
  ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
diff --cc gnu/packages/certs.scm
index 82e5b8c,e15a966..37e3fa6
--- a/gnu/packages/certs.scm
+++ b/gnu/packages/certs.scm
@@@ -4,8 -4,7 +4,9 @@@
  ;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
  ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
  ;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 +;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 +;;; Copyright © 2021 Efraim Flashner <efraim@flashner.co.il>
+ ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
@@@ -25,48 -24,105 +26,99 @@@
  (define-module (gnu packages certs)
    #:use-module ((guix licenses) #:prefix license:)
    #:use-module (guix packages)
 +  #:use-module (guix utils)
    #:use-module (guix download)
+   #:use-module (guix git-download)
+   #:use-module (guix build-system copy)
    #:use-module (guix build-system gnu)
    #:use-module (guix build-system trivial)
    #:use-module (gnu packages)
 +  #:use-module (gnu packages nss)
+   #:use-module (gnu packages curl)
+   #:use-module (gnu packages python)
    #:use-module (gnu packages perl)
    #:use-module (gnu packages tls))
  
+ (define-public desec-certbot-hook
+   (let ((commit "68da7abc0793602fd336962a7e2348b57c5d6fd6")
+         (revision "0"))
+     (package
+       (name "desec-certbot-hook")
+       (version
+        (git-version "0" revision commit))
+       (source
+        (origin
+          (method git-fetch)
+          (uri
+           (git-reference
+            (url "https://github.com/desec-io/desec-certbot-hook";)
+            (commit commit)))
+          (file-name (git-file-name name version))
+          (sha256
+           (base32 "0qjqk6i85b1y7fgzcx74r4gn2i4dkjza34hkzp6kyn9hrb8f2gv2"))))
+       (build-system copy-build-system)
+       (arguments
+        `(#:phases
+          (modify-phases %standard-phases
+            (add-after 'unpack 'patch-script
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "hook.sh"
+                  ;; The hook-script look for '.dedynauth' file in $PWD.
+                  ;; But users cannot create or edit files in store.
+                  ;; So we patch the hook-script to look for '.dedynauth' file,
+                  ;; in /etc/desec.
+                  (("\\$\\(pwd\\)")
+                   "/etc/desec")
+                  ;; Make absolute reference to curl program.
+                  (("curl")
+                   (string-append (assoc-ref inputs "curl")
+                                  "/bin/curl"))))))
+          #:install-plan
+          '(("." "etc/desec" #:include ("hook.sh")))))
+       (inputs
+        `(("curl" ,curl)))
+       (synopsis "Certbot DNS challenge automatization for deSEC")
+       (description "The deSEC can be used to obtain certificates with certbot
+ DNS ownership verification.  With the help of this hook script, you can obtain
+ your Let's Encrypt certificate using certbot with authorization provided by 
the
+ DNS challenge mechanism, that is, you will not need a running web server or 
any
+ port forwarding to your local machine.")
+       (home-page "https://desec.io";)
+       (license license:expat))))
+ 
  (define certdata2pem
 -  (package
 -    (name "certdata2pem")
 -    (version "2013")
 -    (source
 -     (origin
 -      (method url-fetch)
 -        (uri
 -          
"http://pkgs.fedoraproject.org/cgit/ca-certificates.git/plain/certdata2pem.py?id=053dde8a2f5901e97028a58bf54e7d0ef8095a54";)
 -        (file-name "certdata2pem.py")
 -        (sha256
 -          (base32
 -            "0zscrm41gnsf14zvlkxhy00h3dmgidyz645ldpda3y3vabnwv8dx"))))
 -   (build-system trivial-build-system)
 -   (inputs
 -     `(("python" ,python-2)))
 -   (arguments
 -    `(#:modules ((guix build utils))
 -      #:builder
 -        (begin
 -          (use-modules (guix build utils))
 -          (let ((bin (string-append %output "/bin")))
 -            (copy-file (assoc-ref %build-inputs "source") "certdata2pem.py")
 -            (chmod "certdata2pem.py" #o555)
 -            (substitute* "certdata2pem.py"
 -              (("/usr/bin/python")
 -               (string-append (assoc-ref %build-inputs "python")
 -                              "/bin/python"))
 -              ;; Use the file extension .pem instead of .crt.
 -              (("crt") "pem"))
 -            (mkdir-p bin)
 -            (copy-file "certdata2pem.py"
 -                       (string-append bin "/certdata2pem.py"))
 -            #t))))
 -   (synopsis "Python script to extract .pem data from certificate collection")
 -   (description
 -    "certdata2pem.py is a Python script to transform X.509 certificate
 -\"source code\" as contained, for example, in the Mozilla sources, into
 -.pem formatted certificates.")
 -   (license license:gpl2+)
 -   (home-page "http://pkgs.fedoraproject.org/cgit/ca-certificates.git/";)))
 +  (let ((revision "1")
 +        (commit "4c576f350f44186d439179f63d5be19f710a73f5"))
 +    (package
 +      (name "certdata2pem")
 +      (version "0.0.0")                   ;no version
 +      (source (origin
 +                (method url-fetch)
 +                (uri (string-append
 +                      
"https://raw.githubusercontent.com/sabotage-linux/sabotage/";
 +                      commit "/KEEP/certdata2pem.c"))
 +                (sha256
 +                 (base32
 +                  "1rywp29q4l1cs2baplkbcravxqs4kw2cys4yifhfznbc210pskq6"))))
 +      (build-system gnu-build-system)
 +      (arguments
 +       `(#:phases (modify-phases %standard-phases
 +                    (delete 'configure)
 +                    (replace 'build
 +                      (lambda _
 +                        (invoke ,(cc-for-target) "certdata2pem.c"
 +                                "-o" "certdata2pem")))
 +                    (delete 'check)     ;no test suite
 +                    (replace 'install
 +                      (lambda* (#:key outputs #:allow-other-keys)
 +                        (let ((out (assoc-ref outputs "out")))
 +                          (install-file "certdata2pem"
 +                                        (string-append out "/bin"))))))))
 +      (home-page "https://github.com/sabotage-linux/";)
 +      (synopsis "Utility to split TLS certificates data into multiple PEM 
files")
 +      (description "This is a C version of the certdata2pem Python utility
 +that was originally contributed to Debian.")
 +      (license license:isc))))
  
  (define-public nss-certs
    (package
diff --cc gnu/packages/check.scm
index 73874c2,6374493..fbdc46c
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@@ -35,7 -35,8 +35,8 @@@
  ;;; Copyright © 2020 Josh Marshall <joshua.r.marshall.1991@gmail.com>
  ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
  ;;; Copyright © 2020 Tanguy Le Carrour <tanguy@bioneland.org>
 -;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 +;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+ ;;; Copyright © 2021 Hugo Lecomte <hugo.lecomte@inria.fr>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc gnu/packages/fontutils.scm
index 8ea893e,9c7393b..b7ac19f
--- a/gnu/packages/fontutils.scm
+++ b/gnu/packages/fontutils.scm
@@@ -852,8 -808,10 +852,8 @@@ maintain the Noto Fonts project."
                (file-name (git-file-name name version))
                (sha256
                 (base32
-                 "0314r038jl17hrhc9nrbx30jk0pz8ckbdnizws4r46b1rf4h0b1f"))))
+                 "00rwh5qfayihrq0wjx8pxqw5ah6g5ym6raxvdbqb6g6rk7m2j423"))))
      (build-system meson-build-system)
 -    (arguments
 -     `(#:meson ,meson-0.55))
      (native-inputs
       `(("check" ,check)
         ("gcc" ,gcc-10)    ;TODO: Remove when the default compiler is > GCC 7.
diff --cc gnu/packages/game-development.scm
index 6009400,e1593c0..e24b7bb
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@@ -1244,12 -1251,14 +1251,13 @@@ developed mainly for Ren'py."
       `(("python2-future" ,python2-future)
         ("python2-pygame" ,python2-pygame-sdl2)))
      (native-inputs
-      `(("python2-cython" ,python2-cython)
-        ("xdg-utils" ,xdg-utils)))
 -     `(("gcc" ,gcc-8) ; for const variables as initializer elements
 -       ("python2-cython" ,python2-cython)))
++     `(("python2-cython" ,python2-cython)))
      (home-page "https://www.renpy.org/";)
      (synopsis "Ren'py python module")
-     (description "This package contains the shared libraries and Python
- modules of Ren'py.")
+     (description "This package contains the shared libraries and Python 
modules
+ of Ren'py.  While functional, they are not meaningful on their own without
+ the launcher and common Ren'py code provided by the @code{renpy} package and
+ are only used to bootstrap it.")
      (license license:expat)))
  
  (define-public renpy
@@@ -1422,15 -1445,32 +1444,32 @@@ if __name__ == \"__main__\"
               #t))
           (replace 'wrap
             (lambda* (#:key inputs outputs #:allow-other-keys)
-              (wrap-program (string-append (assoc-ref outputs "out")
-                                           "/bin/renpy")
-                `("GUIX_PYTHONPATH" = (,(getenv "GUIX_PYTHONPATH"))))
-              #t)))))
+              (let ((out (assoc-ref outputs "out"))
+                    (site (string-append "/lib/python"
+                                         (python-version
+                                          (assoc-ref inputs "python"))
+                                         "/site-packages")))
+                (wrap-program (string-append out "/bin/renpy")
 -                 `("PYTHONPATH" =
++                 `("GUIX_PYTHONPATH" =
+                    (,@(delete-duplicates
+                        (map
+                         (lambda (store-path)
+                           (string-append store-path site))
+                         (cons (assoc-ref outputs "out")
+                               (map cdr
+                                    (filter
+                                     (lambda (input)
+                                       (string-prefix? "python2" (car input)))
+                                     inputs))))))))
+                #t))))))
      (inputs
-      `(("python2-tkinter" ,python-2 "tk")
-        ("python2-pygame" ,python2-pygame-sdl2)
-        ("python2-renpy" ,python2-renpy)
-        ("xorg-server" ,xorg-server)))
+      `(("python2-renpy" ,python2-renpy)
+        ("python2-tkinter" ,python-2 "tk")
+        ("python2" ,python-2) ; for ‘fix-commands’ and ‘wrap’
+        ("xdg-utils" ,xdg-utils)))
+     (propagated-inputs '())
+     (native-inputs
+      `(("xorg-server" ,xorg-server-for-tests)))
      (outputs
       (list "out" "tutorial" "the-question"))
      (home-page "https://www.renpy.org/";)
diff --cc gnu/packages/gcc.scm
index 35f7d9a,2fe30b1..79994cc
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@@ -732,11 -741,47 +733,47 @@@ as the 'native-search-paths' field.
          `(modify-phases ,phases
             (add-after 'install 'remove-broken-or-conflicting-files
               (lambda* (#:key outputs #:allow-other-keys)
 -               (for-each delete-file
 -                         (find-files (string-append (assoc-ref outputs "out") 
"/bin")
 -                                     
".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc-.*)"))
 -               #t))))))))
 +               (for-each
 +                delete-file
 +                (find-files (string-append (assoc-ref outputs "out") "/bin")
 +                            
".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
  
+ (define* (custom-gcc-gccgo gcc name languages
+                            #:optional
+                            (search-paths (package-native-search-paths gcc))
+                            #:key (separate-lib-output? #t))
+   ;; TODO: remove CUSTOM-GCC-GCCGO when regex changes for CUSTOM-GCC are
+   ;; merged into master <https://issues.guix.gnu.org/49010>
+   "Return a custom version of GCC that supports LANGUAGES.  Use SEARCH-PATHS
+ as the 'native-search-paths' field."
+   (package (inherit gcc)
+     (name name)
+     (outputs (if separate-lib-output?
+                  (package-outputs gcc)
+                  (delete "lib" (package-outputs gcc))))
+     (native-search-paths search-paths)
+     (properties (alist-delete 'hidden? (package-properties gcc)))
+     (arguments
+      (substitute-keyword-arguments (package-arguments gcc)
+        ((#:modules modules %gnu-build-system-modules)
+         `(,@modules
+           (srfi srfi-1)
+           (srfi srfi-26)
+           (ice-9 regex)))
+        ((#:configure-flags flags)
+         `(cons (string-append "--enable-languages="
+                               ,(string-join languages ","))
+                (remove (cut string-match "--enable-languages.*" <>)
+                        ,flags)))
+        ((#:phases phases)
+         `(modify-phases ,phases
+            (add-after 'install 'remove-broken-or-conflicting-files
+              (lambda* (#:key outputs #:allow-other-keys)
+                (for-each
+                 delete-file
+                 (find-files (string-append (assoc-ref outputs "out") "/bin")
+                             
".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
+ 
  (define %generic-search-paths
    ;; This is the language-neutral search path for GCC.  Entries in $CPATH are
    ;; not considered "system headers", which means GCC can raise warnings for
diff --cc gnu/packages/gnupg.scm
index bb6fa46,0eb6aff..629e837
--- a/gnu/packages/gnupg.scm
+++ b/gnu/packages/gnupg.scm
@@@ -18,7 -18,7 +18,8 @@@
  ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
  ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
  ;;; Copyright © 2020 Fredrik Salomonsson <plattfot@posteo.net>
 +;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+ ;;; Copyright © 2021 Nikita Domnitskii <nikita@domnitskii.me>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
@@@ -78,7 -80,7 +81,8 @@@
    #:use-module (guix build-system gnu)
    #:use-module (guix build-system perl)
    #:use-module (guix build-system python)
 +  #:use-module (ice-9 match)
+   #:use-module (guix build-system meson)
    #:use-module (srfi srfi-1))
  
  (define-public libgpg-error
diff --cc gnu/packages/gtk.scm
index a90db08,d92b9aa..5e9c9fe
--- a/gnu/packages/gtk.scm
+++ b/gnu/packages/gtk.scm
@@@ -77,16 -74,13 +77,17 @@@
    #:use-module (gnu packages gl)
    #:use-module (gnu packages glib)
    #:use-module (gnu packages gnome)
 +  #:use-module (gnu packages graphviz)
    #:use-module (gnu packages icu4c)
    #:use-module (gnu packages image)
 +  #:use-module (gnu packages iso-codes)
    #:use-module (gnu packages libffi)
    #:use-module (gnu packages linux)
 +  #:use-module (gnu packages m4)
 +  #:use-module (gnu packages man)
    #:use-module (gnu packages pdf)
    #:use-module (gnu packages perl)
+   #:use-module (gnu packages perl-check)
    #:use-module (gnu packages pkg-config)
    #:use-module (gnu packages pretty-print)
    #:use-module (gnu packages python)
diff --cc gnu/packages/make-bootstrap.scm
index 5c306c1,cdcb1dc..60b6f1b
--- a/gnu/packages/make-bootstrap.scm
+++ b/gnu/packages/make-bootstrap.scm
@@@ -1,6 -1,6 +1,6 @@@
  ;;; GNU Guix --- Functional package management for GNU
 -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic 
Courtès <ludo@gnu.org>
 +;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 
Ludovic Courtès <ludo@gnu.org>
- ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
+ ;;; Copyright © 2017, 2021 Efraim Flashner <efraim@flashner.co.il>
  ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
  ;;; Copyright © 2018, 2019 Mark H Weaver <mhw@netris.org>
  ;;; Copyright © 2018, 2019, 2021 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
diff --cc gnu/packages/mes.scm
index ab41fc7,c66751b..75f8b1e
--- a/gnu/packages/mes.scm
+++ b/gnu/packages/mes.scm
@@@ -113,7 -116,15 +113,14 @@@ extensive examples, including parsers f
                       "GUILE_GLOBAL_SITE=\
  $prefix/share/guile/site/$GUILE_EFFECTIVE_VERSION\n"))
                    #t))))
-     (inputs (list guile-3.0))))
 -    (inputs
 -     `(("guile" ,guile-3.0)))
++    (inputs (list guile-3.0))
+     (description
+      "@acronym{NYACC, Not Yet Another Compiler Compiler} is set of Guile 
modules
+ for generating parsers and lexical analyzers.  It provides sample parsers,
+ pretty-printers using SXML trees as an intermediate representation, a decent C
+ parser and an `FFI Helper' tool to help create Guile Scheme bindings for 
C-based
+ libraries.  It also provides (partially implemented) compilers based on these
+ parsers to allow execution with Guile as extension languages.")))
  
  (define-public nyacc-1.00.2
    (package
diff --cc gnu/packages/ocaml.scm
index 1262c0e,727c7a0..fd09459
--- a/gnu/packages/ocaml.scm
+++ b/gnu/packages/ocaml.scm
@@@ -7110,3 -7176,33 +7176,34 @@@ libraries."
  It makes it possible to run pure OCaml programs in JavaScript environment like
  browsers and Node.js.")
      (license license:lgpl2.1+)))
+ 
+ (define-public ocaml-bibtex2html
+   (package
+     (name "ocaml-bibtex2html")
+     (version "1.99")
+     (source
+       (origin
+         (method url-fetch)
+         (uri 
"https://www.lri.fr/~filliatr/ftp/bibtex2html/bibtex2html-1.99.tar.gz";)
+         (sha256 (base32 
"07gzrs4lfrkvbn48cgn2gn6c7cx3jsanakkrb2irj0gmjzfxl96j"))))
+     (build-system ocaml-build-system)
+     (arguments
+       `(#:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'patch-/bin/sh
+             (lambda _
+               (substitute* "configure" (("/bin/sh") (which "bash")))
+               (setenv "HOME" (getcwd)) ;; mktexfmt needs writable home 
directory
+               #t)))))
+     (native-inputs
+      `(("which" ,which)
 -       ("texlive" ,(texlive-union (list texlive-fonts-ec texlive-preprint
 -                                        texlive-latex-hyperref 
texlive-bibtex)))))
++       ("texlive" ,(texlive-updmap.cfg
++                    (list texlive-fonts-ec texlive-preprint
++                          texlive-latex-hyperref texlive-bibtex)))))
+     (propagated-inputs
+      `(("hevea" ,hevea)))
+     (home-page "https://www.lri.fr/~filliatr/bibtex2html/";)
+     (synopsis "BibTeX to HTML translator")
+     (description "This package allows you to produce, from a set of
+ bibliography files in BibTeX format, a bibliography in HTML format.")
+     (license license:gpl2)))
diff --cc gnu/packages/python-xyz.scm
index 7504e9f,d8c3fbe..60c741e
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@@ -17050,79 -17170,36 +17032,35 @@@ matters when code is run in production 
  happens using the @code{logging} library.")
      (license license:gpl3+)))
  
- (define-public python2-larch
-   (package
-     (name "python2-larch")
-     (version "1.20151025")
-     (source
-      (origin
-        (method url-fetch)
-        (uri (string-append
-              "http://git.liw.fi/cgi-bin/cgit/cgit.cgi/larch/snapshot/larch-";
-              version ".tar.gz"))
-        (patches (search-patches
-                  "python2-larch-coverage-4.0a6-compatibility.patch"))
-        (sha256
-         (base32
-          "1p4knkkavlqymgciz2wbcnfrdgdbafhg14maplnk4vbw0q8xs663"))))
-     (build-system python-build-system)
-     (arguments
-      `(#:python ,python-2
-        #:phases
-        (modify-phases %standard-phases
-          ;; check phase needs to be run before the build phase. If not,
-          ;; coverage-test-runner looks for tests for the built source files,
-          ;; and fails.
-          (delete 'check)
-          (add-before 'build 'check
-            (lambda _ (invoke "make" "check"))))))
-     (native-inputs
-      `(("cmdtest" ,cmdtest)
-        ("python2-coverage-test-runner" ,python2-coverage-test-runner)))
-     (propagated-inputs
-      `(("python2-tracing" ,python2-tracing)))
-     (home-page "https://liw.fi/larch/";)
-     (synopsis "Python copy-on-write B-tree library")
-     (description "@code{python2-larch} is an implementation of
- particular kind of B-tree, based on research by Ohad Rodeh.  See
- @url{http://liw.fi/larch/ohad-btrees-shadowing-clones.pdf} for details
- on the data structure.
- 
- The distinctive feature of this B-tree is that a node is never
- (conceptually) modified.  Instead, all updates are done by
- copy-on-write.  This makes it easy to clone a tree, and modify only the
- clone, while other processes access the original tree.")
-     (license license:gpl3+)))
- 
  (define-public python-astroid
 -  (package
 -    (name "python-astroid")
 -    (version "2.4.2")
 -    (source
 -     (origin
 -       (method url-fetch)
 -       (uri (pypi-uri "astroid" version))
 -       (sha256
 -        (base32 "00xp5gqxidxvgg1bwd91myqzdf2fpb9cjwbdl3p7gwqvlk17hh1g"))
 -       (modules '((guix build utils)))
 -       (snippet
 -        '(begin
 -           ;; Check to see if the version pinning has been removed.
 -           (substitute* "astroid/__pkginfo__.py"
 -             (("==1\\.4\\.\\*") ">=1.4.0"))
 -           #t))))
 -    (build-system python-build-system)
 -    (propagated-inputs
 -     `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
 -       ("python-six" ,python-six)
 -       ("python-wrapt" ,python-wrapt)))
 -    (native-inputs
 -     `(("python-dateutil" ,python-dateutil)
 -       ("python-pytest" ,python-pytest)
 -       ("python-pytest-runner" ,python-pytest-runner)))
 -    (home-page "https://github.com/PyCQA/astroid";)
 -    (synopsis "Common base representation of python source code for pylint and
 +  (let ((revision "1")
 +        (commit "5f67396894c79c4661e357ec8bb03aa134a51109"))
 +    (package
 +      (name "python-astroid")
 +      (version (git-version "2.4.2" revision commit))
 +      (source
 +       (origin
 +         ;; The current 2.4.2 release doesn't support Python 3.9.
 +         (method git-fetch)
 +         (uri (git-reference
 +               (url "https://github.com/PyCQA/astroid";)
 +               (commit commit)))
 +         (file-name (git-file-name name version))
 +         (sha256
 +          (base32 "1ir5716wqgz39jva7x9chhjy41yi3n7fkymb8snh5giwig8kyipk"))))
 +      (build-system python-build-system)
 +      (propagated-inputs
 +       `(("python-lazy-object-proxy" ,python-lazy-object-proxy)
 +         ("python-six" ,python-six)
 +         ("python-wrapt" ,python-wrapt)))
 +      (native-inputs
 +       `(("python-dateutil" ,python-dateutil)
 +         ("python-pytest" ,python-pytest)
 +         ("python-pytest-runner" ,python-pytest-runner)))
 +      (home-page "https://github.com/PyCQA/astroid";)
 +      (synopsis "Common base representation of python source code for pylint 
and
  other projects")
 -    (description "@code{python-astroid} provides a common base representation
 +      (description "@code{python-astroid} provides a common base 
representation
  of python source code for projects such as pychecker, pyreverse, pylint, etc.
  
  It provides a compatible representation which comes from the _ast module.  It
diff --cc gnu/packages/rust.scm
index 2d29c2a,73f94a3..64b3e51
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@@ -10,8 -10,7 +10,8 @@@
  ;;; Copyright © 2019 Ivan Petkov <ivanppetkov@gmail.com>
  ;;; Copyright © 2020, 2021 Jakub Kądziołka <kuba@kadziolka.net>
  ;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
- ;;; Copyright © 2020 Matthew Kraai <kraai@ftbfs.org>
+ ;;; Copyright © 2020 Matthew James Kraai <kraai@ftbfs.org>
 +;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc gnu/packages/security-token.scm
index 2339d20,f8c9661..4bd1fe5
--- a/gnu/packages/security-token.scm
+++ b/gnu/packages/security-token.scm
@@@ -10,7 -10,7 +10,8 @@@
  ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
  ;;; Copyright © 2020 Raphaël Mélotte <raphael.melotte@mind.be>
  ;;; Copyright © 2021 Antero Mejr <antero@kodmin.com>
 +;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+ ;;; Copyright © 2021 Sergey Trofimov <sarg@sarg.org.ru>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc gnu/packages/simulation.scm
index ed9a4b8,14e91c8..26e26b3
--- a/gnu/packages/simulation.scm
+++ b/gnu/packages/simulation.scm
@@@ -1,6 -1,5 +1,6 @@@
  ;;; GNU Guix --- Functional package management for GNU
- ;;; Copyright © 2017, 2018, 2019, 2020 Paul Garlick 
<pgarlick@tourbillion-technology.com>
+ ;;; Copyright © 2017, 2018, 2019, 2020, 2021 Paul Garlick 
<pgarlick@tourbillion-technology.com>
 +;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc gnu/packages/statistics.scm
index 3f07066,e096ec2..5b203d9
--- a/gnu/packages/statistics.scm
+++ b/gnu/packages/statistics.scm
@@@ -12,7 -12,7 +12,8 @@@
  ;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
  ;;; Copyright © 2018 Alex Branham <alex.branham@gmail.com>
  ;;; Copyright © 2020 Tim Howes <timhowes@lavabit.com>
 +;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+ ;;; Copyright © 2021 Bonface Munyoki Kilyungi <me@bonfacemunyoki.com>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
@@@ -5739,27 -5730,15 +5731,10 @@@ to any arbitrary string.  In this case
          (uri (pypi-uri "rpy2" version))
          (sha256
           (base32
-           "1bs36rds5fq8821l5q85q2b25161rs9ppw5c26x0hjwj487gpcfj"))
-         ;; These patches should be removed with the next release.
-         (patches
-           (list
-             (origin
-               (method url-fetch)
-               (uri 
"https://github.com/rpy2/rpy2/commit/04c57598f00145d868ea8da31ac1b1e7c49f7570.patch";)
-               (file-name "python-rpy2-fix-test-failure.patch")
-               (sha256
-                (base32
-                 "1lqd3yxjfx1rxrybcmnapy0r6ambg9myrb98q4nlfhpxanwfdbbh")))
-             (origin
-               (method url-fetch)
-               (uri 
"https://github.com/rpy2/rpy2/commit/685f67d0a6b47ea80e718116a10755019446aef7.patch";)
-               (file-name "python-rpy2-r-console-test-fix.patch")
-               (sha256
-                (base32
-                 "18wpvfaa4c13d44cb4sw88c3c7403xdy5m8h82wfq8fjmcq3cmzn")))))))
+           "1cysswxr5glrdblyl2zsmywcj7xhxn3wmyihxinrz9gm8gmaacax"))))
      (build-system python-build-system)
      (arguments
 -     '(#:modules ((ice-9 ftw)
 -                  (srfi srfi-1)
 -                  (srfi srfi-26)
 -                  (guix build utils)
 -                  (guix build python-build-system))
 -       #:phases
 +     '(#:phases
         (modify-phases %standard-phases
           (replace 'check
             (lambda* (#:key outputs inputs #:allow-other-keys)
diff --cc gnu/packages/tex.scm
index f8ef791,b404ca8..0bb102e
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@@ -528,9 -457,42 +531,42 @@@ that are free software, including suppo
  world.
  
  This package contains the binaries.")
 -   (license (license:fsf-free "https://www.tug.org/texlive/copying.html";))
 -   (home-page "https://www.tug.org/texlive/";)))
 +    (license (license:fsf-free "https://www.tug.org/texlive/copying.html";))
 +    (home-page "https://www.tug.org/texlive/";)))
  
+ (define-public texlive-libkpathsea
+   (package/inherit texlive-bin
+     (name "texlive-libkpathsea")
+     (source
+      (origin
+        (inherit (package-source texlive-bin))
+        (snippet
+         `(begin
+            ,(origin-snippet (package-source texlive-bin))
+            (with-directory-excursion "texk"
+              (let ((preserved-directories '("." ".." "kpathsea")))
+                (for-each
+                 delete-file-recursively
+                 (scandir "."
+                          (lambda (file)
+                            (and (not (member file preserved-directories))
+                                 (eq? 'directory (stat:type (stat 
file)))))))))))))
+     (arguments
+      (substitute-keyword-arguments (package-arguments texlive-bin)
+        ((#:configure-flags flags)
+         `(cons* "--disable-all-pkgs" "--enable-kpathsea"
+                 "--enable-shared" ,flags))
+        ((#:phases phases)
+         `(modify-phases %standard-phases
+            (add-after 'install 'post-install
+              (lambda* (#:key inputs outputs #:allow-other-keys)
+                (with-directory-excursion "texk/kpathsea"
+                  (invoke "make" "install"))))))))
+     (inputs '())
+     (synopsis "Path searching library")
+     (description "kpathsea is a library, whose purpose is to return a filename
+ from a list of user-specified directories similar to how shells look up
+ executables.  It is maintained as a part of TeX Live.")))
  
  (define texlive-docstrip
    (package
diff --cc gnu/packages/tls.scm
index 49f5dd1,c1e8b46..58876a4
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@@ -15,10 -15,9 +15,11 @@@
  ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
  ;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
  ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 +;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;; Copyright © 2021 Solene Rapenne <solene@perso.pw>
  ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 +;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+ ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc gnu/packages/virtualization.scm
index a969f1e,1bbcb46..136b0c4
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@@ -1060,8 -1101,15 +1064,14 @@@ It started as a side project of LXC bu
               (string-append "-Dinstall_prefix=" (assoc-ref %outputs "out"))
               "--sysconfdir=/etc"
               "--localstatedir=/var")
 -       #:meson ,meson-0.55
         #:phases
         (modify-phases %standard-phases
+          (add-after 'unpack 'skip-directory-confusion
+            (lambda _
+              ;; Don't try to install an (unused) /var outside of the store.
+              (substitute* "scripts/meson-install-dirs.py"
+                (("destdir = .*")
+                 "destdir = '/tmp'"))))
           (add-before 'configure 'disable-broken-tests
             (lambda _
               (let ((tests (list "commandtest"           ; hangs idly
diff --cc gnu/packages/web.scm
index 47f2063,2cc8619..60417e1
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@@ -47,9 -47,9 +47,10 @@@
  ;;; Copyright © 2020 Michael Rohleder <mike@rohleder.de>
  ;;; Copyright © 2020, 2021 Ryan Prior <rprior@protonmail.com>
  ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro>
 +;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;; Copyright © 2021 Stefan Reichör <stefan@xsteve.at>
  ;;; Copyright © 2021 la snesne <lasnesne@lagunposprasihopre.org>
+ ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc gnu/packages/wm.scm
index f7a9dda,920a7cb..51034ca
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@@ -908,6 -909,41 +909,39 @@@ experience."
      (home-page "http://fluxbox.org/";)
      (license license:expat)))
  
+ (define-public fnott
+   (package
+     (name "fnott")
+     (version "1.1.0")
+     (source (origin
+               (method git-fetch)
+               (uri (git-reference
+                     (url "https://codeberg.org/dnkl/fnott";)
+                     (commit version)))
+               (file-name (git-file-name name version))
+               (sha256
+                (base32
+                 "1xaz13iry3fdjhqk9xzg29kbv7hqj8dzzqxr5mhrj8f2m013jdc3"))))
+     (build-system meson-build-system)
 -    (arguments
 -     `( #:meson ,meson-0.55
 -        #:build-type "release"))
++    (arguments `(#:build-type "release"))
+     (native-inputs
+      `(("pkg-config" ,pkg-config)
+        ("wayland-protocols" ,wayland-protocols)
+        ("tllist" ,tllist)
+        ("gcc" ,gcc-10)     ;TODO: Remove when the default compiler is > GCC 7.
+        ("scdoc" ,scdoc)))
+     (inputs
+      `(("wlroots" ,wlroots)
+        ("wayland" ,wayland)
+        ("fcft" ,fcft)
+        ("dbus" ,dbus)
+        ("libpng" ,libpng)))
+     (home-page "https://codeberg.org/dnkl/fnott";)
+     (synopsis "Keyboard driven and lightweight Wayland notification daemon")
+     (description "Fnott is a keyboard driven and lightweight notification 
daemon
+ for wlroots-based Wayland compositors.")
+     (license license:expat)))
+ 
  (define-public awesome
    (package
      (name "awesome")
diff --cc gnu/packages/xorg.scm
index b54523f,6a7849f..9978480
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@@ -29,7 -29,7 +29,8 @@@
  ;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
  ;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
  ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
 +;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
+ ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc guix/build-system/qt.scm
index ccee89d,e1368db..003a065
--- a/guix/build-system/qt.scm
+++ b/guix/build-system/qt.scm
@@@ -22,8 -23,9 +23,10 @@@
  (define-module (guix build-system qt)
    #:use-module (guix store)
    #:use-module (guix utils)
 +  #:use-module (guix gexp)
 +  #:use-module (guix monads)
+   #:use-module ((guix build qt-utils)
+                 #:select (%qt-wrap-excluded-inputs))
 -  #:use-module (guix derivations)
    #:use-module (guix search-paths)
    #:use-module (guix build-system)
    #:use-module (guix build-system cmake)
@@@ -123,8 -125,10 +127,9 @@@
                     (strip-flags ''("--strip-debug"))
                     (strip-directories ''("lib" "lib64" "libexec"
                                           "bin" "sbin"))
 -                   (phases '(@ (guix build qt-build-system)
 -                               %standard-phases))
 +                   (phases '%standard-phases)
                     (qt-wrap-excluded-outputs ''())
+                    (qt-wrap-excluded-inputs %qt-wrap-excluded-inputs)
                     (system (%current-system))
                     (imported-modules %qt-build-system-modules)
                     (modules '((guix build qt-build-system)
@@@ -132,39 -136,52 +137,40 @@@
    "Build SOURCE using CMAKE, and with INPUTS. This assumes that SOURCE
  provides a 'CMakeLists.txt' file as its build system."
    (define builder
 -    `(begin
 -       (use-modules ,@modules)
 -       (qt-build #:source ,(match (assoc-ref inputs "source")
 -                                  (((? derivation? source))
 -                                   (derivation->output-path source))
 -                                  ((source)
 -                                   source)
 -                                  (source
 -                                   source))
 -                 #:system ,system
 -                 #:outputs %outputs
 -                 #:inputs %build-inputs
 -                 #:search-paths ',(map search-path-specification->sexp
 -                                       search-paths)
 -                 #:phases ,phases
 -                 #:qt-wrap-excluded-outputs ,qt-wrap-excluded-outputs
 -                 #:qt-wrap-excluded-inputs ,qt-wrap-excluded-inputs
 -                 #:configure-flags ,configure-flags
 -                 #:make-flags ,make-flags
 -                 #:out-of-source? ,out-of-source?
 -                 #:build-type ,build-type
 -                 #:tests? ,tests?
 -                 #:test-target ,test-target
 -                 #:parallel-build? ,parallel-build?
 -                 #:parallel-tests? ,parallel-tests?
 -                 #:validate-runpath? ,validate-runpath?
 -                 #:patch-shebangs? ,patch-shebangs?
 -                 #:strip-binaries? ,strip-binaries?
 -                 #:strip-flags ,strip-flags
 -                 #:strip-directories ,strip-directories)))
 +    (with-imported-modules imported-modules
 +      #~(begin
 +          (use-modules #$@(sexp->gexp modules))
 +          (qt-build #:source #+source
 +                    #:system #$system
 +                    #:outputs #$(outputs->gexp outputs)
 +                    #:inputs #$(input-tuples->gexp inputs)
 +                    #:search-paths '#$(sexp->gexp
 +                                       (map search-path-specification->sexp
 +                                            search-paths))
 +                    #:phases #$(if (pair? phases)
 +                                   (sexp->gexp phases)
 +                                   phases)
 +                    #:qt-wrap-excluded-outputs #$qt-wrap-excluded-outputs
++                    #:qt-wrap-excluded-inputs #$qt-wrap-excluded-inputs
 +                    #:configure-flags #$configure-flags
 +                    #:make-flags #$make-flags
 +                    #:out-of-source? #$out-of-source?
 +                    #:build-type #$build-type
 +                    #:tests? #$tests?
 +                    #:test-target #$test-target
 +                    #:parallel-build? #$parallel-build?
 +                    #:parallel-tests? #$parallel-tests?
 +                    #:validate-runpath? #$validate-runpath?
 +                    #:patch-shebangs? #$patch-shebangs?
 +                    #:strip-binaries? #$strip-binaries?
 +                    #:strip-flags #$strip-flags
 +                    #:strip-directories #$strip-directories))))
  
 -  (define guile-for-build
 -    (match guile
 -      ((? package?)
 -       (package-derivation store guile system #:graft? #f))
 -      (#f                                         ; the default
 -       (let* ((distro (resolve-interface '(gnu packages commencement)))
 -              (guile  (module-ref distro 'guile-final)))
 -         (package-derivation store guile system #:graft? #f)))))
 -
 -  (build-expression->derivation store name builder
 -                                #:system system
 -                                #:inputs inputs
 -                                #:modules imported-modules
 -                                #:outputs outputs
 -                                #:guile-for-build guile-for-build))
 +  (mlet %store-monad ((guile (package->derivation (or guile (default-guile))
 +                                                  system #:graft? #f)))
 +    (gexp->derivation name builder
 +                      #:system system
 +                      #:guile-for-build guile)))
  
  
  ;;;
diff --cc guix/build/qt-build-system.scm
index ec7ceb3,a6955ce..c63bd5e
--- a/guix/build/qt-build-system.scm
+++ b/guix/build/qt-build-system.scm
@@@ -1,9 -1,8 +1,9 @@@
  ;;; GNU Guix --- Functional package management for GNU
  ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
- ;;; Copyright © 2014, 2015, 2021 Ludovic Courtès <ludo@gnu.org>
+ ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
  ;;; Copyright © 2018 Mark H Weaver <mhw@netris.org>
- ;;; Copyright © 2019, 2020 Hartmut Goebel <h.goebel@crazy-compilers.com>
+ ;;; Copyright © 2019, 2020, 2021 Hartmut Goebel <h.goebel@crazy-compilers.com>
 +;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc guix/lint.scm
index 198e091,ffd3f70..d76a2f5
--- a/guix/lint.scm
+++ b/guix/lint.scm
@@@ -79,7 -82,7 +82,8 @@@
    #:export (check-description-style
              check-inputs-should-be-native
              check-inputs-should-not-be-an-input-at-all
 +            check-input-labels
+             check-wrapper-inputs
              check-patch-file-names
              check-patch-headers
              check-synopsis-style
@@@ -417,37 -503,49 +504,80 @@@ of a package, and INPUT-NAMES, a list o
           (package-input-intersection (package-direct-inputs package)
                                       input-names))))
  
 +(define (check-input-labels package)
 +  "Emit a warning for labels that differ from the corresponding package name."
 +  (define (check input-kind package-inputs)
 +    (define (warning label name)
 +      (make-warning package
 +                    (G_ "label '~a' does not match package name '~a'")
 +                    (list label name)
 +                    #:field input-kind))
 +
 +    (append-map (match-lambda
 +                  (((? string? label) (? package? dependency))
 +                   (if (string=? label (package-name dependency))
 +                       '()
 +                       (list (warning label (package-name dependency)))))
 +                  (((? string? label) (? package? dependency) output)
 +                   (let ((expected (string-append (package-name dependency)
 +                                                  ":" output)))
 +                     (if (string=? label expected)
 +                         '()
 +                         (list (warning label expected)))))
 +                  (_
 +                   '()))
 +                (package-inputs package)))
 +
 +  (append-map (match-lambda
 +                ((kind proc)
 +                 (check kind proc)))
 +              `((native-inputs ,package-native-inputs)
 +                (inputs ,package-inputs)
 +                (propagated-inputs ,package-propagated-inputs))))
 +
+ (define (report-wrap-program-error package wrapper-name)
+   "Warn that \"bash-minimal\" is missing from 'inputs', while WRAPPER-NAME
+ requires it."
+   (make-warning package
+                 (G_ "\"bash-minimal\" should be in 'inputs' when '~a' is 
used")
+                 (list wrapper-name)))
+ 
+ (define (check-wrapper-inputs package)
+   "Emit a warning if PACKAGE uses 'wrap-program' or similar, but \"bash\"
+ or \"bash-minimal\" is not in its inputs. 'wrap-script' is not supported."
+   (define input-names '("bash" "bash-minimal"))
+   (define has-bash-input?
+     (pair? (package-input-intersection (package-inputs package)
+                                        input-names)))
+   (define (check-procedure-body body)
+     (match body
+       ;; Explicitely setting an interpreter is acceptable,
+       ;; #:sh support is added on 'core-updates'.
+       ;; TODO(core-updates): remove mention of core-updates.
+       (('wrap-program _ '#:sh . _) '())
+       (('wrap-program _ . _)
+        (list (report-wrap-program-error package 'wrap-program)))
+       ;; Wrapper of 'wrap-program' for Qt programs.
+       ;; TODO #:sh is not yet supported but probably will be.
+       (('wrap-qt-program _ '#:sh . _) '())
+       (('wrap-qt-program _ . _)
+        (list (report-wrap-program-error package 'wrap-qt-program)))
+       ((x . y)
+        (append (check-procedure-body x) (check-procedure-body y)))
+       (_ '())))
+   (define (check-phase-procedure expression)
+     (find-procedure-body expression check-procedure-body))
+   (define (check-delta expression)
+     (find-phase-procedure package expression check-phase-procedure))
+   (define (check-deltas deltas)
+     (append-map check-delta deltas))
+   (if has-bash-input?
+       ;; "bash" (or "bash-minimal") is in 'inputs', so everything seems ok.
+       '()
+       ;; "bash" is not in 'inputs'.  Verify 'wrap-program' and friends
+       ;; are unused
+       (find-phase-deltas package check-deltas)))
+ 
  (define (package-name-regexp package)
    "Return a regexp that matches PACKAGE's name as a word at the beginning of a
  line."
@@@ -1616,10 -1752,10 +1784,14 @@@ them for PACKAGE.
       (description "Identify inputs that shouldn't be inputs at all")
       (check       check-inputs-should-not-be-an-input-at-all))
     (lint-checker
 +     (name        'input-labels)
 +     (description "Identify input labels that do not match package names")
 +     (check       check-input-labels))
 +   (lint-checker
+      (name        'wrapper-inputs)
+      (description "Make sure 'wrap-program' can finds its interpreter.")
+      (check       check-wrapper-inputs))
+    (lint-checker
       (name        'license)
       ;; TRANSLATORS: <license> is the name of a data type and must not be
       ;; translated.
diff --cc guix/scripts/pack.scm
index 4c7039c,9e1f270..38bc021
--- a/guix/scripts/pack.scm
+++ b/guix/scripts/pack.scm
@@@ -5,8 -5,8 +5,9 @@@
  ;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
  ;;; Copyright © 2018 Efraim Flashner <efraim@flashner.co.il>
  ;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 +;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;; Copyright © 2020 Eric Bavier <bavier@posteo.net>
+ ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
@@@ -216,116 -229,94 +236,94 @@@ its source property.
      (and (not-config? module)
           (not (equal? '(guix store deduplication) module))))
  
-   (define build
-     (with-imported-modules (source-module-closure
-                             `((guix build utils)
-                               (guix build union)
-                               (gnu build install))
-                             #:select? import-module?)
-       #~(begin
-           (use-modules (guix build utils)
-                        ((guix build union) #:select (relative-file-name))
-                        (gnu build install)
-                        (srfi srfi-1)
-                        (srfi srfi-26)
-                        (ice-9 match))
+   (with-imported-modules (source-module-closure
+                           `((guix build pack)
+                             (guix build store-copy)
+                             (guix build utils)
+                             (guix build union)
+                             (gnu build install))
+                           #:select? import-module?)
+     #~(begin
+         (use-modules (guix build pack)
+                      (guix build store-copy)
+                      (guix build utils)
+                      ((guix build union) #:select (relative-file-name))
+                      (gnu build install)
+                      (srfi srfi-1)
+                      (srfi srfi-26)
+                      (ice-9 match))
+ 
+         (define %root "root")
+ 
+         (define symlink->directives
+           ;; Return "populate directives" to make the given symlink and its
+           ;; parent directories.
+           (match-lambda
+             ((source '-> target)
+              (let ((target (string-append #$profile "/" target))
+                    (parent (dirname source)))
+                ;; Never add a 'directory' directive for "/" so as to
+                ;; preserve its ownership when extracting the archive (see
+                ;; below), and also because this would lead to adding the
+                ;; same entries twice in the tarball.
+                `(,@(if (string=? parent "/")
+                        '()
+                        `((directory ,parent)))
+                  (,source
+                   -> ,(relative-file-name parent target)))))))
+ 
+         (define directives
+           ;; Fully-qualified symlinks.
+           (append-map symlink->directives '#$symlinks))
+ 
+         ;; Make sure non-ASCII file names are properly handled.
+         #+set-utf8-locale
+ 
+         (define tar #+(file-append archiver "/bin/tar"))
+ 
+         ;; Note: there is not much to gain here with deduplication and there
+         ;; is the overhead of the '.links' directory, so turn it off.
+         ;; Furthermore GNU tar < 1.30 sometimes fails to extract tarballs
+         ;; with hard links:
+         ;; <http://lists.gnu.org/archive/html/bug-tar/2017-11/msg00009.html>.
+         (populate-store (list "profile") %root #:deduplicate? #f)
+ 
+         (when #+localstatedir?
+           (install-database-and-gc-roots %root #+database #$profile
+                                          #:profile-name #$profile-name))
+ 
+         ;; Create SYMLINKS.
+         (for-each (cut evaluate-populate-directive <> %root)
+                   directives)
+ 
+         ;; Create the tarball.
+         (with-directory-excursion %root
+           ;; GNU Tar recurses directories by default.  Simply add the whole
+           ;; current directory, which contains all the generated files so far.
+           ;; This avoids creating duplicate files in the archives that would
+           ;; be stored as hard links by GNU Tar.
+           (apply invoke tar "-cvf" #$output "."
+                  (tar-base-options
+                   #:tar tar
 -                  #:compressor '#+(and=> compressor compressor-command)))))))
++                  #:compressor #+(and=> compressor compressor-command)))))))
  
-           (define %root "root")
- 
-           (define symlink->directives
-             ;; Return "populate directives" to make the given symlink and its
-             ;; parent directories.
-             (match-lambda
-               ((source '-> target)
-                (let ((target (string-append #$profile "/" target))
-                      (parent (dirname source)))
-                  ;; Never add a 'directory' directive for "/" so as to
-                  ;; preserve its ownnership when extracting the archive (see
-                  ;; below), and also because this would lead to adding the
-                  ;; same entries twice in the tarball.
-                  `(,@(if (string=? parent "/")
-                          '()
-                          `((directory ,parent)))
-                    (,source
-                     -> ,(relative-file-name parent target)))))))
- 
-           (define directives
-             ;; Fully-qualified symlinks.
-             (append-map symlink->directives '#$symlinks))
- 
-           ;; The --sort option was added to GNU tar in version 1.28, released
-           ;; 2014-07-28.  For testing, we use the bootstrap tar, which is
-           ;; older and doesn't support it.
-           (define tar-supports-sort?
-             (zero? (system* (string-append #+archiver "/bin/tar")
-                             "cf" "/dev/null" "--files-from=/dev/null"
-                             "--sort=name")))
- 
-           ;; Make sure non-ASCII file names are properly handled.
-           #+set-utf8-locale
- 
-           ;; Add 'tar' to the search path.
-           (setenv "PATH" #+(file-append archiver "/bin"))
- 
-           ;; Note: there is not much to gain here with deduplication and there
-           ;; is the overhead of the '.links' directory, so turn it off.
-           ;; Furthermore GNU tar < 1.30 sometimes fails to extract tarballs
-           ;; with hard links:
-           ;; 
<http://lists.gnu.org/archive/html/bug-tar/2017-11/msg00009.html>.
-           (populate-single-profile-directory %root
-                                              #:profile #$profile
-                                              #:profile-name #$profile-name
-                                              #:closure "profile"
-                                              #:database #+database)
- 
-           ;; Create SYMLINKS.
-           (for-each (cut evaluate-populate-directive <> %root)
-                     directives)
- 
-           ;; Create the tarball.  Use GNU format so there's no file name
-           ;; length limitation.
-           (with-directory-excursion %root
-             (exit
-              (zero? (apply system* "tar"
-                            #+@(if (compressor-command compressor)
-                                   #~("-I"
-                                      (string-join
-                                       #+(compressor-command compressor)))
-                                   #~())
-                            "--format=gnu"
- 
-                            ;; Avoid non-determinism in the archive.  Use
-                            ;; mtime = 1, not zero, because that is what the
-                            ;; daemon does for files in the store (see the
-                            ;; 'mtimeStore' constant in local-store.cc.)
-                            (if tar-supports-sort? "--sort=name" "--mtime=@1")
-                            "--mtime=@1"           ;for files in /var/guix
-                            "--owner=root:0"
-                            "--group=root:0"
- 
-                            "--check-links"
-                            "-cvf" #$output
-                            ;; Avoid adding / and /var to the tarball, so
-                            ;; that the ownership and permissions of those
-                            ;; directories will not be overwritten when
-                            ;; extracting the archive.  Do not include /root
-                            ;; because the root account might have a
-                            ;; different home directory.
-                            #$@(if localstatedir?
-                                   '("./var/guix")
-                                   '())
- 
-                            (string-append "." (%store-directory))
- 
-                            (delete-duplicates
-                             (filter-map (match-lambda
-                                           (('directory directory)
-                                            (string-append "." directory))
-                                           ((source '-> _)
-                                            (string-append "." source))
-                                           (_ #f))
-                                         directives)))))))))
+ (define* (self-contained-tarball name profile
+                                  #:key target
+                                  (profile-name "guix-profile")
+                                  deduplicate?
+                                  entry-point
+                                  (compressor (first %compressors))
+                                  localstatedir?
+                                  (symlinks '())
+                                  (archiver tar)
+                                  (extra-options '()))
+   "Return a self-contained tarball containing a store initialized with the
+ closure of PROFILE, a derivation.  The tarball contains /gnu/store; if
+ LOCALSTATEDIR? is true, it also contains /var/guix, including /var/guix/db
+ with a properly initialized store database.
  
+ SYMLINKS must be a list of (SOURCE -> TARGET) tuples denoting symlinks to be
+ added to the pack."
    (when entry-point
      (warning (G_ "entry point not supported in the '~a' format~%")
               'tarball))
@@@ -637,6 -636,192 +645,192 @@@ the image.
  
  
  ;;;
+ ;;; Debian archive format.
+ ;;;
+ ;;; TODO: When relocatable option is selected, install to a unique prefix.
+ ;;; This would enable installation of multiple deb packs with conflicting
+ ;;; files at the same time.
+ (define* (debian-archive name profile
+                          #:key target
+                          (profile-name "guix-profile")
+                          deduplicate?
+                          entry-point
+                          (compressor (first %compressors))
+                          localstatedir?
+                          (symlinks '())
+                          (archiver tar)
+                          (extra-options '()))
+   "Return a Debian archive (.deb) containing a store initialized with the
+ closure of PROFILE, a derivation.  The archive contains /gnu/store; if
+ LOCALSTATEDIR? is true, it also contains /var/guix, including /var/guix/db
+ with a properly initialized store database.  The supported compressors are
+ \"none\", \"gz\" or \"xz\".
+ 
+ SYMLINKS must be a list of (SOURCE -> TARGET) tuples denoting symlinks to be
+ added to the pack.  EXTRA-OPTIONS may contain the CONFIG-FILE, POSTINST-FILE
+ or TRIGGERS-FILE keyword arguments."
+   ;; For simplicity, limit the supported compressors to the superset of
+   ;; compressors able to compress both the control file (gz or xz) and the
+   ;; data tarball (gz, bz2 or xz).
+   (define %valid-compressors '("gzip" "xz" "none"))
+ 
+   (let ((compressor-name (compressor-name compressor)))
+     (unless (member compressor-name %valid-compressors)
+       (leave (G_ "~a is not a valid Debian archive compressor.  \
+ Valid compressors are: ~a~%") compressor-name %valid-compressors)))
+ 
+   (when entry-point
+     (warning (G_ "entry point not supported in the '~a' format~%")
+              'deb))
+ 
+   (define data-tarball
+     (computed-file (string-append "data.tar"
+                                   (compressor-extension compressor))
+                    (self-contained-tarball/builder
+                     profile
+                     #:profile-name profile-name
+                     #:compressor compressor
+                     #:localstatedir? localstatedir?
+                     #:symlinks symlinks
+                     #:archiver archiver)
+                    #:local-build? #f    ;allow offloading
+                    #:options (list #:references-graphs `(("profile" ,profile))
+                                    #:target target)))
+ 
+   (define build
+     (with-extensions (list guile-gcrypt)
+       (with-imported-modules `(((guix config) => ,(make-config.scm))
+                                ,@(source-module-closure
+                                   `((guix build pack)
+                                     (guix build utils)
+                                     (guix profiles))
+                                   #:select? not-config?))
+         #~(begin
+             (use-modules (guix build pack)
+                          (guix build utils)
+                          (guix profiles)
+                          (ice-9 match)
+                          ((oop goops) #:select (get-keyword))
+                          (srfi srfi-1))
+ 
+             (define machine-type
+               ;; Extract the machine type from the specified target, else 
from the
+               ;; current system.
+               (and=> (or #$target %host-type)
+                      (lambda (triplet)
+                        (first (string-split triplet #\-)))))
+ 
+             (define (gnu-machine-type->debian-machine-type type)
+               "Translate machine TYPE from the GNU to Debian terminology."
+               ;; Debian has its own jargon, different from the one used in 
GNU, for
+               ;; machine types (see data/cputable in the sources of dpkg).
+               (match type
+                 ("i486" "i386")
+                 ("i586" "i386")
+                 ("i686" "i386")
+                 ("x86_64" "amd64")
+                 ("aarch64" "arm64")
+                 ("mipsisa32r6" "mipsr6")
+                 ("mipsisa32r6el" "mipsr6el")
+                 ("mipsisa64r6" "mips64r6")
+                 ("mipsisa64r6el" "mips64r6el")
+                 ("powerpcle" "powerpcel")
+                 ("powerpc64" "ppc64")
+                 ("powerpc64le" "ppc64el")
+                 (machine machine)))
+ 
+             (define architecture
+               (gnu-machine-type->debian-machine-type machine-type))
+ 
+             #$(procedure-source manifest->friendly-name)
+ 
+             (define manifest (profile-manifest #$profile))
+ 
+             (define single-entry        ;manifest entry
+               (match (manifest-entries manifest)
+                 ((entry)
+                  entry)
+                 (() #f)))
+ 
+             (define package-name (or (and=> single-entry manifest-entry-name)
+                                      (manifest->friendly-name manifest)))
+ 
+             (define package-version
+               (or (and=> single-entry manifest-entry-version)
+                   "0.0.0"))
+ 
+             (define debian-format-version "2.0")
+ 
+             ;; Generate the debian-binary file.
+             (call-with-output-file "debian-binary"
+               (lambda (port)
+                 (format port "~a~%" debian-format-version)))
+ 
+             (define data-tarball-file-name (strip-store-file-name
+                                             #+data-tarball))
+ 
+             (copy-file #+data-tarball data-tarball-file-name)
+ 
+             ;; Generate the control archive.
+             (define control-file
+               (get-keyword #:control-file '#$extra-options))
+ 
+             (define postinst-file
+               (get-keyword #:postinst-file '#$extra-options))
+ 
+             (define triggers-file
+               (get-keyword #:triggers-file '#$extra-options))
+ 
+             (define control-tarball-file-name
+               (string-append "control.tar"
+                              #$(compressor-extension compressor)))
+ 
+             ;; Write the compressed control tarball.  Only the control file is
+             ;; mandatory (see: 'man deb' and 'man deb-control').
+             (if control-file
+                 (copy-file control-file "control")
+                 (call-with-output-file "control"
+                   (lambda (port)
+                     (format port "\
+ Package: ~a
+ Version: ~a
+ Description: Debian archive generated by GNU Guix.
+ Maintainer: GNU Guix
+ Architecture: ~a
+ Priority: optional
+ Section: misc
+ ~%" package-name package-version architecture))))
+ 
+             (when postinst-file
+               (copy-file postinst-file "postinst")
+               (chmod "postinst" #o755))
+ 
+             (when triggers-file
+               (copy-file triggers-file "triggers"))
+ 
+             (define tar (string-append #+archiver "/bin/tar"))
+ 
+             (apply invoke tar
+                    `(,@(tar-base-options
+                         #:tar tar
 -                        #:compressor '#+(and=> compressor compressor-command))
++                        #:compressor #+(and=> compressor compressor-command))
+                      "-cvf" ,control-tarball-file-name
+                      "control"
+                      ,@(if postinst-file '("postinst") '())
+                      ,@(if triggers-file '("triggers") '())))
+ 
+             ;; Create the .deb archive using GNU ar.
+             (invoke (string-append #+binutils "/bin/ar") "-rv" #$output
+                     "debian-binary"
+                     control-tarball-file-name data-tarball-file-name)))))
+ 
+   (gexp->derivation (string-append name ".deb")
+     build
+     #:target target
+     #:references-graphs `(("profile" ,profile))))
+ 
+ 
+ ;;;
  ;;; Compiling C programs.
  ;;;
  
diff --cc guix/utils.scm
index b75710e,2c56c8b..c5a3a52
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@@ -8,10 -8,10 +8,12 @@@
  ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
  ;;; Copyright © 2018, 2020 Marius Bakke <marius@gnu.org>
  ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 +;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
  ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
 +;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+ ;;; Copyright © 2018 Steve Sprang <scs@stevesprang.com>
+ ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
diff --cc tests/lint.scm
index 0a8f1c6,0f51b9e..dfb45ef
--- a/tests/lint.scm
+++ b/tests/lint.scm
@@@ -356,20 -366,92 +366,106 @@@
                                `(("python-setuptools" ,python-setuptools))))))
       (check-inputs-should-not-be-an-input-at-all pkg))))
  
 +(test-assert "input labels: no warnings"
 +  (let ((pkg (dummy-package "x"
 +               (inputs `(("glib" ,glib)
 +                         ("pkg-config" ,pkg-config))))))
 +    (null? (check-input-labels pkg))))
 +
 +(test-equal "input labels: one warning"
 +  "label 'pkgkonfig' does not match package name 'pkg-config'"
 +  (single-lint-warning-message
 +   (let ((pkg (dummy-package "x"
 +                (inputs `(("glib" ,glib)
 +                          ("pkgkonfig" ,pkg-config))))))
 +     (check-input-labels pkg))))
 +
+ (test-equal "explicit #:sh argument to 'wrap-program' is acceptable"
+   '()
+   (let* ((phases
+           ;; Loosely based on the "catfish" package
+           `(modify-phases %standard-phases
+              (add-after 'install 'wrap
+                (lambda* (#:key inputs outputs #:allow-other-keys)
+                  (define catfish (string-append (assoc-ref outputs "out")
+                                                 "/bin/catfish"))
+                  (define hsab (string-append (assoc-ref inputs "hsab")
+                                              "/bin/hsab"))
+                  (wrap-program catfish #:sh hsab
+                                `("PYTHONPATH" = (,"blabla")))))))
+          (pkg (dummy-package "x" (arguments `(#:phases ,phases)))))
+     (check-wrapper-inputs pkg)))
+ 
+ (test-equal
+     "'check-wrapper-inputs' detects 'wrap-program' without \"bash\" in inputs"
+   "\"bash-minimal\" should be in 'inputs' when 'wrap-program' is used"
+   (let* ((phases
+           `(modify-phases %standard-phases
+              (add-after 'install 'wrap
+                (lambda _
+                  (wrap-program the-binary bla-bla)))))
+          (pkg (dummy-package "x" (arguments `(#:phases ,phases)))))
+     (single-lint-warning-message (check-wrapper-inputs pkg))))
+ 
+ (test-equal
+     "'check-wrapper-inputs' detects 'wrap-qt-program' without \"bash\" in 
inputs"
+   "\"bash-minimal\" should be in 'inputs' when 'wrap-qt-program' is used"
+   (let* ((phases
+           `(modify-phases %standard-phases
+              (add-after 'install 'qtwrap
+                (lambda _
+                  (wrap-qt-program the-binary bla-bla)))))
+          (pkg (dummy-package "x" (arguments `(#:phases ,phases)))))
+     (single-lint-warning-message (check-wrapper-inputs pkg))))
+ 
+ (test-equal "\"bash\" in 'inputs' satisfies 'check-wrapper-inputs'"
+   '()
+   (let* ((phases
+           `(modify-phases %standard-phases
+              (add-after 'install 'wrap
+                (lambda _
+                  (wrap-program the-binary bla-bla)))))
+          (pkg (dummy-package "x" (arguments `(#:phases ,phases))
+                              (inputs `(("bash" ,bash))))))
+     (check-wrapper-inputs pkg)))
+ 
+ (test-equal "\"bash-minimal\" in 'inputs' satisfies 'check-wrapper-inputs'"
+   '()
+   (let* ((phases
+           `(modify-phases %standard-phases
+              (add-after 'install 'wrap
+                (lambda _
+                  (wrap-program THE-BINARY bla-bla)))))
+          (pkg (dummy-package "x" (arguments `(#:phases ,phases))
+                              (inputs `(("bash-minimal" ,bash-minimal))))))
+     (check-wrapper-inputs pkg)))
+ 
+ (test-equal "'cut' doesn't hide bad usages of 'wrap-program'"
+   "\"bash-minimal\" should be in 'inputs' when 'wrap-program' is used"
+   (let* ((phases
+           ;; Taken from the "straw-viewer" package
+           `(modify-phases %standard-phases
+              (add-after 'install 'wrap-program
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let* ((out (assoc-ref outputs "out"))
+                         (bin-dir (string-append out "/bin/"))
+                         (site-dir (string-append out "/lib/perl5/site_perl/"))
+                         (lib-path (getenv "PERL5LIB")))
+                    (for-each (cut wrap-program <>
+                                   `("PERL5LIB" ":" prefix
+                                     (,lib-path ,site-dir)))
+                              (find-files bin-dir)))))))
+          (pkg (dummy-package "x" (arguments `(#:phases ,phases)))))
+     (single-lint-warning-message (check-wrapper-inputs pkg))))
+ 
+ (test-equal "bogus phase specifications don't crash the linter"
+   "invalid phase clause"
+   (let* ((phases
+           `(modify-phases %standard-phases
+              (add-invalid)))
+          (pkg (dummy-package "x" (arguments `(#:phases ,phases)))))
+     (single-lint-warning-message (check-wrapper-inputs pkg))))
+ 
  (test-equal "file patches: different file name -> warning"
    "file names of patches should start with the package name"
    (single-lint-warning-message
diff --cc tests/pack.scm
index 8564939,e9b4c36..98bfedf
--- a/tests/pack.scm
+++ b/tests/pack.scm
@@@ -1,6 -1,7 +1,7 @@@
  ;;; GNU Guix --- Functional package management for GNU
 -;;; Copyright © 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 +;;; Copyright © 2017, 2018, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
  ;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
+ ;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
  ;;;
  ;;; This file is part of GNU Guix.
  ;;;
@@@ -51,8 -53,8 +53,8 @@@
  (define %gzip-compressor
    ;; Compressor that uses the bootstrap 'gzip'.
    ((@ (guix scripts pack) compressor) "gzip"
-    "gz"
+    ".gz"
 -   #~(#+(file-append %bootstrap-coreutils&co "/bin/gzip") "-6n")))
 +   #~(list #+(file-append %bootstrap-coreutils&co "/bin/gzip") "-6n")))
  
  (define %tar-bootstrap %bootstrap-coreutils&co)
  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]