diff options
author | Marius Bakke <mbakke@fastmail.com> | 2020-04-19 16:53:01 +0200 |
---|---|---|
committer | Marius Bakke <mbakke@fastmail.com> | 2020-04-19 16:53:01 +0200 |
commit | 7abe35febe4234609e14e169b6fcc0cbaf4c7119 (patch) | |
tree | 5a8307a28e0c0a6aeab21ce8b9d3487229522588 | |
parent | 457ded48c54ba04489cb871d3ec6bda0c59bead7 (diff) | |
parent | 5c10d55206a4f7a9b932ff08512a4f50c1db35be (diff) | |
download | patches-7abe35febe4234609e14e169b6fcc0cbaf4c7119.tar patches-7abe35febe4234609e14e169b6fcc0cbaf4c7119.tar.gz |
Merge branch 'master' into core-updates
59 files changed, 1075 insertions, 503 deletions
diff --git a/Makefile.am b/Makefile.am index 1fcf1c7b56..bb243fe9fe 100644 --- a/Makefile.am +++ b/Makefile.am @@ -669,7 +669,7 @@ GUIX_FOR_BINARY_TARBALL = guile3.0-guix # The self-contained tarball. guix-binary.%.tar.xz: $(AM_V_GEN)GUIX_PACKAGE_PATH= \ - tarball=`$(top_builddir)/pre-inst-env guix pack -K -C xz \ + tarball=`$(top_builddir)/pre-inst-env guix pack -C xz \ --fallback \ -s "$*" --localstatedir --profile-name=current-guix \ $(GUIX_FOR_BINARY_TARBALL)` ; \ @@ -819,6 +819,7 @@ release: dist-with-updated-version for system in $(GUIX_SYSTEM_VM_SYSTEMS) ; do \ image=`$(top_builddir)/pre-inst-env \ guix system vm-image $(GUIX_SYSTEM_VM_IMAGE_FLAGS) \ + --save-provenance \ --system=$$system --fallback \ gnu/system/examples/vm-image.tmpl` ; \ if [ ! -f "$$image" ] ; then \ diff --git a/build-aux/git-authenticate.scm b/build-aux/git-authenticate.scm index 37e0c6800c..bb48dddc59 100644 --- a/build-aux/git-authenticate.scm +++ b/build-aux/git-authenticate.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -148,10 +149,10 @@ "F2A3 8D7E EB2B 6640 5761 070D 0ADE E100 9460 4D37") ("nckx" ;; primary: "F5BC 5534 C36F 0087 B39D 36EF 1C9D C4FE B9DB 7C4B" - "7E8F AED0 0944 78EF 72E6 4D16 D889 B0F0 18C5 493C") - ("nckx (2nd)" - ;; primary: "F5BC 5534 C36F 0087 B39D 36EF 1C9D C4FE B9DB 7C4B" "F5DA 2032 4B87 3D0B 7A38 7672 0DB0 FF88 4F55 6D79") + ("nckx (revoked; not compromised)" + ;; primary: "F5BC 5534 C36F 0087 B39D 36EF 1C9D C4FE B9DB 7C4B" + "7E8F AED0 0944 78EF 72E6 4D16 D889 B0F0 18C5 493C") ("niedzejkob" "E576 BFB2 CF6E B13D F571 33B9 E315 A758 4613 1564") ("ngz" diff --git a/doc/guix.texi b/doc/guix.texi index ef5f68db24..0b8460a6fe 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -77,6 +77,7 @@ Copyright @copyright{} 2020 Jakub Kądziołka@* Copyright @copyright{} 2020 Jack Hill@* Copyright @copyright{} 2020 Naga Malleswari@* Copyright @copyright{} 2020 Brice Waegeneire@* +Copyright @copyright{} 2020 R Veera Kumar@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -547,7 +548,14 @@ We recommend the use of this @uref{https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh, shell installer script}. The script automates the download, installation, and initial configuration steps described below. It should be run as the root -user. +user. As root, you can thus run this: + +@example +cd /tmp +wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh +chmod +x guix-install.sh +./guix-install.sh +@end example @end quotation Installing goes along these lines: @@ -651,7 +659,7 @@ with these commands: @example # cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \ /etc/systemd/system/ -# systemctl start guix-daemon && systemctl enable guix-daemon +# systemctl enable --now guix-daemon @end example If your host distro uses the Upstart init system: @@ -2823,6 +2831,15 @@ in the root of their project source tree that can be used to test development snapshots and create reproducible development environments (@pxref{Invoking guix environment}). +The @var{file} may also contain a JSON representation of one or more +package definitions. Running @code{guix package -f} on +@file{hello.json} with the following contents would result in installing +the package @code{greeter} after building @code{myhello}: + +@example +@verbatiminclude package-hello.json +@end example + @item --remove=@var{package} @dots{} @itemx -r @var{package} @dots{} Remove the specified @var{package}s. @@ -4616,8 +4633,8 @@ served by @code{@value{SUBSTITUTE-SERVER}} to @file{/tmp/emacs}: @example $ wget -O - \ - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-emacs-24.5 \ - | bunzip2 | guix archive -x /tmp/emacs + https://@value{SUBSTITUTE-SERVER}/nar/gzip/@dots{}-emacs-24.5 \ + | gunzip | guix archive -x /tmp/emacs @end example Single-item archives are different from multiple-item archives produced @@ -4627,7 +4644,8 @@ and they do @emph{not} embed a signature. Thus this operation does unsafe. The primary purpose of this operation is to facilitate inspection of -archive contents coming from possibly untrusted substitute servers. +archive contents coming from possibly untrusted substitute servers +(@pxref{Invoking guix challenge}). @item --list @itemx -t @@ -5807,7 +5825,7 @@ or a list of such values. @item @code{home-page} The URL to the home-page of the package, as a string. -@item @code{supported-systems} (default: @var{%supported-systems}) +@item @code{supported-systems} (default: @code{%supported-systems}) The list of systems supported by the package, as strings of the form @code{architecture-kernel}, for example @code{"x86_64-linux"}. @@ -6171,7 +6189,6 @@ if they are defined by the crate. @defvr {Scheme Variable} copy-build-system -@cindex (copy build system) This variable is exported by @code{(guix build-system copy)}. It supports builds of simple packages that don't require much compiling, mostly just moving files around. @@ -7371,7 +7388,7 @@ increments the current state value: @result{} 3 @end lisp -When ``run'' through @var{%state-monad}, we obtain that additional state +When ``run'' through @code{%state-monad}, we obtain that additional state value, which is the number of @code{square} calls. @end defvr @@ -7403,7 +7420,7 @@ The main interface to the store monad, provided by the @code{(guix store)} module, is as follows. @defvr {Scheme Variable} %store-monad -The store monad---an alias for @var{%state-monad}. +The store monad---an alias for @code{%state-monad}. Values in the store monad encapsulate accesses to the store. When its effect is needed, a value of the store monad must be ``evaluated'' by @@ -7764,7 +7781,7 @@ information about monads.) [#:system (%current-system)] [#:target #f] [#:graft? #t] @ [#:hash #f] [#:hash-algo #f] @ [#:recursive? #f] [#:env-vars '()] [#:modules '()] @ - [#:module-path @var{%load-path}] @ + [#:module-path @code{%load-path}] @ [#:effective-version "2.2"] @ [#:references-graphs #f] [#:allowed-references #f] @ [#:disallowed-references #f] @ @@ -8068,7 +8085,7 @@ item. This is achieved using the @code{lower-object} monadic procedure. @deffn {Monadic Procedure} lower-object @var{obj} [@var{system}] @ [#:target #f] -Return as a value in @var{%store-monad} the derivation or store item +Return as a value in @code{%store-monad} the derivation or store item corresponding to @var{obj} for @var{system}, cross-compiling for @var{target} if @var{target} is true. @var{obj} must be an object that has an associated gexp compiler, such as a @code{<package>}. @@ -8550,6 +8567,15 @@ As an example, @var{file} might contain a package definition like this @include package-hello.scm @end lisp +The @var{file} may also contain a JSON representation of one or more +package definitions. Running @code{guix build -f} on @file{hello.json} +with the following contents would result in building the packages +@code{myhello} and @code{greeter}: + +@example +@verbatiminclude package-hello.json +@end example + @item --manifest=@var{manifest} @itemx -m @var{manifest} Build all packages listed in the given @var{manifest} @@ -10555,8 +10581,8 @@ Alternately, we can do something along these lines (@pxref{Invoking guix archive}): @example -$ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 \ - | guix archive -x /tmp/git +$ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/lzip/@dots{}-git-2.5.0 \ + | lzip -d | guix archive -x /tmp/git $ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git @end example @@ -11234,7 +11260,7 @@ By that, we mean all the global system configuration, not per-user configuration (@pxref{Using the Configuration System}). @table @asis -@item @code{kernel} (default: @var{linux-libre}) +@item @code{kernel} (default: @code{linux-libre}) The package object of the operating system kernel to use@footnote{Currently only the Linux-libre kernel is supported. In the future, it will be possible to use the GNU@tie{}Hurd.}. @@ -11391,11 +11417,11 @@ As a user you should @emph{never} need to touch this field. Linux @dfn{pluggable authentication module} (PAM) services. @c FIXME: Add xref to PAM services section. -@item @code{setuid-programs} (default: @var{%setuid-programs}) +@item @code{setuid-programs} (default: @code{%setuid-programs}) List of string-valued G-expressions denoting setuid programs. @xref{Setuid Programs}. -@item @code{sudoers-file} (default: @var{%sudoers-specification}) +@item @code{sudoers-file} (default: @code{%sudoers-specification}) @cindex sudoers file The contents of the @file{/etc/sudoers} file as a file-like object (@pxref{G-Expressions, @code{local-file} and @code{plain-file}}). @@ -11561,7 +11587,7 @@ variables. @defvr {Scheme Variable} %base-file-systems These are essential file systems that are required on normal systems, -such as @var{%pseudo-terminal-file-system} and @var{%immutable-store} (see +such as @code{%pseudo-terminal-file-system} and @code{%immutable-store} (see below.) Operating system declarations should always contain at least these. @end defvr @@ -12628,7 +12654,7 @@ and caches. @defvr {Scheme Variable} %nscd-default-configuration This is the default @code{<nscd-configuration>} value (see below) used by @code{nscd-service}. It uses the caches defined by -@var{%nscd-default-caches}; see below. +@code{%nscd-default-caches}; see below. @end defvr @deftp {Data Type} nscd-configuration @@ -12653,7 +12679,7 @@ Name of the nscd log file. This is where debugging output goes when Integer denoting the debugging levels. Higher numbers mean that more debugging output is logged. -@item @code{caches} (default: @var{%nscd-default-caches}) +@item @code{caches} (default: @code{%nscd-default-caches}) List of @code{<nscd-cache>} objects denoting things to be cached; see below. @@ -12925,7 +12951,7 @@ well as in the @var{groups} field of the @var{operating-system} record. @end lisp @defvr {Scheme Variable} urandom-seed-service-type -Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom} +Save some entropy in @code{%random-seed-file} to seed @file{/dev/urandom} when rebooting. It also tries to seed @file{/dev/urandom} from @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is readable. @@ -13304,7 +13330,7 @@ Either @code{#f} or a gexp to execute once the rotation has completed. @end deftp @defvr {Scheme Variable} %default-rotations -Specifies weekly rotation of @var{%rotated-files} and of +Specifies weekly rotation of @code{%rotated-files} and of @file{/var/log/guix-daemon.log}. @end defvr @@ -13764,7 +13790,7 @@ clock synchronized with that of the given servers. @defvr {Scheme Variable} %openntpd-servers This variable is a list of the server addresses defined in -@var{%ntp-servers}. +@code{%ntp-servers}. @end defvr @deftp {Data Type} openntpd-configuration @@ -13782,7 +13808,7 @@ See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} for more information. @item @code{server} (default: @code{'()}) Specify a list of IP addresses or hostnames of NTP servers to synchronize to. -@item @code{servers} (default: @var{%openntp-servers}) +@item @code{servers} (default: @code{%openntp-servers}) Specify a list of IP addresses or hostnames of NTP pools to synchronize to. @item @code{constraint-from} (default: @code{'()}) @code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers via TLS. @@ -25634,6 +25660,11 @@ If true, this must be the name of a file to log messages to. @cindex dictionary The @code{(gnu services dict)} module provides the following service: +@defvr {Scheme Variable} dicod-service-type +This is the type of the service that runs the @command{dicod} daemon, an +implementation of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). +@end defvr + @deffn {Scheme Procedure} dicod-service [#:config (dicod-configuration)] Return a service that runs the @command{dicod} daemon, an implementation of DICT server (@pxref{Dicod,,, dico, GNU Dico Manual}). @@ -27086,8 +27117,8 @@ evaluates to. As an example, @var{file} might contain a definition like this: The file should evaluate to a list of @var{machine} objects. This example, upon being deployed, will create a new generation on the remote system -realizing the @code{operating-system} declaration @var{%system}. -@var{environment} and @var{configuration} specify how the machine should be +realizing the @code{operating-system} declaration @code{%system}. +@code{environment} and @code{configuration} specify how the machine should be provisioned---that is, how the computing resources should be created and managed. The above example does not create any resources, as a @code{'managed-host} is a machine that is already running the Guix system and @@ -27229,7 +27260,8 @@ This image boots the Xfce graphical environment and it contains some commonly-used tools. You can install more software in the image by running @command{guix package} in a terminal (@pxref{Invoking guix package}). You can also reconfigure the system based on its initial configuration file available -as @file{/etc/config.scm} (@pxref{Using the Configuration System}). +as @file{/run/current-system/configuration.scm} (@pxref{Using the +Configuration System}). Instead of using this pre-built image, one can also build their own virtual machine image using @command{guix system vm-image} (@pxref{Invoking guix diff --git a/doc/local.mk b/doc/local.mk index 3805593172..30c4a8c34d 100644 --- a/doc/local.mk +++ b/doc/local.mk @@ -53,7 +53,8 @@ EXTRA_DIST += \ $(DOT_VECTOR_GRAPHICS) \ %D%/images/coreutils-size-map.eps \ %D%/environment-gdb.scm \ - %D%/package-hello.scm + %D%/package-hello.scm \ + %D%/package-hello.json OS_CONFIG_EXAMPLES_TEXI = \ %D%/os-config-bare-bones.texi \ diff --git a/doc/package-hello.json b/doc/package-hello.json new file mode 100644 index 0000000000..a47e266e4b --- /dev/null +++ b/doc/package-hello.json @@ -0,0 +1,31 @@ +[ + { + "name": "myhello", + "version": "2.10", + "source": "mirror://gnu/hello/hello-2.10.tar.gz", + "build-system": "gnu", + "arguments": { + "tests?": false + } + "home-page": "https://www.gnu.org/software/hello/", + "synopsis": "Hello, GNU world: An example GNU package", + "description": "GNU Hello prints a greeting.", + "license": "GPL-3.0+", + "native-inputs": ["gettext"] + }, + { + "name": "greeter", + "version": "1.0", + "source": "https://example.com/greeter-1.0.tar.gz", + "build-system": "gnu", + "arguments": { + "test-target": "foo", + "parallel-build?": false, + }, + "home-page": "https://example.com/", + "synopsis": "Greeter using GNU Hello", + "description": "This is a wrapper around GNU Hello.", + "license": "GPL-3.0+", + "inputs": ["myhello", "hello"] + } +] diff --git a/gnu/installer.scm b/gnu/installer.scm index 3b69cdbdee..79113cb0ef 100644 --- a/gnu/installer.scm +++ b/gnu/installer.scm @@ -301,25 +301,6 @@ selected keymap." ((installer-final-page current-installer) result prev-steps)))))))) -(define guile-newt - ;; Guile-Newt with 'form-watch-fd'. - ;; TODO: Remove once a new release is out. - (let ((commit "c3cdeb0b53ac71aedabee669f57d44563c662446") - (revision "2")) - (package - (inherit (@ (gnu packages guile-xyz) guile-newt)) - (name "guile-newt") - (version (git-version "0.0.1" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://gitlab.com/mothacehe/guile-newt") - (commit commit))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "1gksd1lzgjjh1p9vczghg8jw995d22hm34kbsiv8rcryirv2xy09"))))))) - (define (installer-program) "Return a file-like object that runs the given INSTALLER." (define init-gettext @@ -377,6 +358,7 @@ selected keymap." (gnu installer services) (gnu installer timezone) (gnu installer user) + (gnu installer utils) (gnu installer newt) ((gnu installer newt keymap) #:select (keyboard-layout->configuration)) diff --git a/gnu/installer/connman.scm b/gnu/installer/connman.scm index 7f47b9af77..386f431ced 100644 --- a/gnu/installer/connman.scm +++ b/gnu/installer/connman.scm @@ -393,6 +393,7 @@ interactive connmanctl process." (dynamic-wind (const #t) (lambda () + (setvbuf pipe 'line) (run-connection-sequence pipe) #t) (lambda () diff --git a/gnu/local.mk b/gnu/local.mk index 0795dec6e8..08b659c929 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1387,6 +1387,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-pep8-stdlib-tokenize-compat.patch \ %D%/packages/patches/python-pyfakefs-remove-bad-test.patch \ %D%/packages/patches/python-flint-includes.patch \ + %D%/packages/patches/python-jedi-sort-project-test.patch \ %D%/packages/patches/python-libxml2-utf8.patch \ %D%/packages/patches/python-mox3-python3.6-compat.patch \ %D%/packages/patches/python-testtools.patch \ diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm index e4f9808231..7105a09dd1 100644 --- a/gnu/packages/admin.scm +++ b/gnu/packages/admin.scm @@ -790,7 +790,7 @@ connection alive.") (define-public isc-dhcp (let* ((bind-major-version "9") (bind-minor-version "11") - (bind-patch-version "14") + (bind-patch-version "18") (bind-release-type "") ; for patch release, use "-P" (bind-release-version "") ; for patch release, e.g. "6" (bind-version (string-append bind-major-version @@ -927,7 +927,7 @@ connection alive.") "/bind-" bind-version ".tar.gz")) (sha256 (base32 - "1pv3bvm9dzyz2kqjkw15sgh0hd5fzsv274v5z6jp9c4nb5130fyr")))) + "0vws0zzb39mkphj4hhjrgfj9dzw951lc4pfa6pqg5ll5ma51mbsr")))) ;; When cross-compiling, we need the cross Coreutils and sed. ;; Otherwise just use those from %FINAL-INPUTS. diff --git a/gnu/packages/aidc.scm b/gnu/packages/aidc.scm index b68f2137be..5648f5a9ec 100644 --- a/gnu/packages/aidc.scm +++ b/gnu/packages/aidc.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 John Darringon <jmd@gnu.org> -;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2020 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net> @@ -157,39 +157,34 @@ Python as well as GUI widgets for GTK and Qt.") (license license:lgpl2.1+))) (define-public qrcodegen-cpp - ;; Currently this project's installation mechanism only exists as a GitHub - ;; pull request, so we build from a recent commit that the proposed patch - ;; applies to. - (let ((commit "6ea933f1596d818bd21e9a6b8d2e851fb8b4bcf1") - (revision "0")) - (package - (name "qrcodegen-cpp") - (version (git-version "1.5.0" revision commit)) - (source (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/nayuki/QR-Code-generator.git") - (commit commit))) - (file-name (git-file-name name version)) - (patches (search-patches "qrcodegen-cpp-make-install.patch")) - (sha256 - (base32 - "19fcwqmfk2n9p2n01dv2j4x2y2mqip0j1wbmfbxjp34rqkjwcwxm")))) - (build-system gnu-build-system) - (arguments - `(#:tests? #f ; no test suite - #:make-flags - (list (string-append "PREFIX=" (assoc-ref %outputs "out"))) - #:phases - (modify-phases %standard-phases - (delete 'configure) ; No ./configure script - ;; Only build the C++ variant. - (add-after 'unpack 'chdir - (lambda _ - (chdir "cpp") - #t))))) - (synopsis "QR Code generator library") - (description "qrcodegen-cpp is a QR code generator library in C++. The + (package + (name "qrcodegen-cpp") + (version "1.6.0") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nayuki/QR-Code-generator.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (patches (search-patches "qrcodegen-cpp-make-install.patch")) + (sha256 + (base32 + "0iq9sv9na0vg996aqrxrjn9rrbiyy7sc9vslw945p3ky22pw3lql")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; no test suite + #:make-flags + (list (string-append "PREFIX=" (assoc-ref %outputs "out"))) + #:phases + (modify-phases %standard-phases + (delete 'configure) ; No ./configure script + ;; Only build the C++ variant. + (add-after 'unpack 'chdir + (lambda _ + (chdir "cpp") + #t))))) + (synopsis "QR Code generator library") + (description "qrcodegen-cpp is a QR code generator library in C++. The project also offers Java, Javascript, Python, C, and Rust implementations.") - (home-page "https://www.nayuki.io/page/qr-code-generator-library") - (license license:expat)))) + (home-page "https://www.nayuki.io/page/qr-code-generator-library") + (license license:expat))) diff --git a/gnu/packages/augeas.scm b/gnu/packages/augeas.scm index fcba5bae7b..b3c4803e04 100644 --- a/gnu/packages/augeas.scm +++ b/gnu/packages/augeas.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2016, 2017, 2018 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2017, 2018 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org> +;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -32,23 +33,23 @@ (define-public augeas (package (name "augeas") - (version "1.11.0") + (version "1.12.0") (source (origin (method url-fetch) (uri (string-append "http://download.augeas.net/augeas-" version ".tar.gz")) (sha256 (base32 - "1c507qj6dfn2dnsl27w94zs9r45xrgm07y8bqba9ry2s0psfhg1r")))) + "11ybhb13wkkilsn7b416a1dn61m1xrq0lbdpkhp5w61jrk4l469j")))) (build-system gnu-build-system) - ;; Marked as "required" in augeas.pc + ;; Marked as "required" in augeas.pc. (propagated-inputs `(("libxml2" ,libxml2))) (inputs `(("readline" ,readline))) (native-inputs `(("pkg-config" ,pkg-config))) - (home-page "http://augeas.net/") + (home-page "https://augeas.net") (synopsis "Edit configuration files programmatically") (description "Augeas is a library and command line tool for programmatically editing diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index 97c7be48ca..149f857a41 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -92,6 +92,7 @@ ("par2cmdline" ,par2cmdline) ("python-pexpect" ,python2-pexpect) ("python-fasteners" ,python2-fasteners) + ("tzdata" ,tzdata-for-tests) ("mock" ,python2-mock))) (propagated-inputs `(("lockfile" ,python2-lockfile) @@ -100,8 +101,7 @@ `(("librsync" ,librsync-0.9) ("lftp" ,lftp) ("gnupg" ,gnupg) ; gpg executable needed - ("util-linux" ,util-linux) ; for setsid - ("tzdata" ,tzdata))) + ("util-linux" ,util-linux))) ; for setsid (arguments `(#:python ,python-2 ; setup assumes Python 2 #:test-target "test" diff --git a/gnu/packages/bioconductor.scm b/gnu/packages/bioconductor.scm index a49c05dbce..68d8e5b574 100644 --- a/gnu/packages/bioconductor.scm +++ b/gnu/packages/bioconductor.scm @@ -2313,6 +2313,8 @@ possible, parallelization is achieved using the BiocParallel framework.") ("r-tidyr" ,r-tidyr) ("r-tidyselect" ,r-tidyselect) ("r-vim" ,r-vim))) + (native-inputs + `(("r-nbconvertr" ,r-nbconvertr))) ; for vignettes (home-page "https://bioconductor.org/packages/destiny/") (synopsis "Create and plot diffusion maps") (description "This package provides tools to create and plot diffusion @@ -3529,6 +3531,8 @@ to multiple hypothesis correction.") ("r-qvalue" ,r-qvalue) ("r-reshape2" ,r-reshape2) ("r-s4vectors" ,r-s4vectors))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "https://guangchuangyu.github.io/software/DOSE/") (synopsis "Disease ontology semantic and enrichment analysis") (description @@ -3899,6 +3903,8 @@ further downstream analysis on its output.") `(("r-biocparallel" ,r-biocparallel) ("r-ellipse" ,r-ellipse) ("r-ggplot2" ,r-ggplot2))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "https://bioconductor.org/packages/bacon/") (synopsis "Controlling bias and inflation in association studies") (description @@ -6733,6 +6739,8 @@ using whole genome sequencing data.") `(("r-data-table" ,r-data-table) ("r-ggplot2" ,r-ggplot2) ("r-metap" ,r-metap))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "https://cran.r-project.org/web/packages/ActivePathways/") (synopsis "Multivariate pathway enrichment analysis") (description @@ -7105,6 +7113,8 @@ structures.") ("r-rjson" ,r-rjson) ("r-rsqlite" ,r-rsqlite) ("r-xml" ,r-xml))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "https://github.com/TylerBackman/bioassayR") (synopsis "Cross-target analysis of small molecule bioactivity") (description diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index cb4cfd58af..e23bafa623 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -2399,13 +2399,13 @@ files.") (define-public python-pybigwig (package (name "python-pybigwig") - (version "0.3.12") + (version "0.3.17") (source (origin (method url-fetch) (uri (pypi-uri "pyBigWig" version)) (sha256 (base32 - "00w4kfnm2c5l7wdwr2nj1z5djv8kzgf7h1zhsgv6njff1rwr26g0")) + "157x6v48y299zm382krf1dw08fdxg95im8lnabhp5vc94s04zxj1")) (modules '((guix build utils))) (snippet '(begin @@ -13642,32 +13642,34 @@ fasta subsequences.") (define-public python-cooler (package (name "python-cooler") - (version "0.7.11") + (version "0.8.7") (source (origin (method url-fetch) (uri (pypi-uri "cooler" version)) (sha256 (base32 - "08k5nxnxa6qsbk15z5z0q01n28042k87wi4905hh95rzqib15mhx")))) + "01g6gqix9ba27sappz6nfyiwabzrlf8i5fn8kwcz8ra356cq9crp")))) (build-system python-build-system) (propagated-inputs - `(("python-biopython" ,python-biopython) + `(("python-asciitree" ,python-asciitree) + ("python-biopython" ,python-biopython) ("python-click" ,python-click) ("python-cytoolz" ,python-cytoolz) ("python-dask" ,python-dask) ("python-h5py" ,python-h5py) ("python-multiprocess" ,python-multiprocess) + ("python-numpy" ,python-numpy) ("python-pandas" ,python-pandas) ("python-pyfaidx" ,python-pyfaidx) ("python-pypairix" ,python-pypairix) ("python-pysam" ,python-pysam) - ("python-scipy" ,python-scipy))) + ("python-pyyaml" ,python-pyyaml) + ("python-scipy" ,python-scipy) + ("python-simplejson" ,python-simplejson))) (native-inputs `(("python-mock" ,python-mock) - ("python-nose" ,python-nose) - ("python-numpydoc" ,python-numpydoc) - ("python-sphinx" ,python-sphinx))) + ("python-pytest" ,python-pytest))) (home-page "https://github.com/mirnylab/cooler") (synopsis "Sparse binary format for genomic interaction matrices") (description @@ -13676,6 +13678,46 @@ storage format, called @code{cool}, used to store genomic interaction data, such as Hi-C contact matrices.") (license license:bsd-3))) +(define-public python-hicmatrix + (package + (name "python-hicmatrix") + (version "12") + (source + (origin + ;; Version 12 is not available on pypi. + (method git-fetch) + (uri (git-reference + (url "https://github.com/deeptools/HiCMatrix.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1xhdyx16f3brgxgxybixdi64ki8nbbkq5vk4h9ahi11pzpjfn1pj")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* '("requirements.txt" + "setup.py") + (("cooler *=+ *0.8.5") + "cooler==0.8.*")) + #t))))) + (propagated-inputs + `(("python-cooler" ,python-cooler) + ("python-intervaltree" ,python-intervaltree) + ("python-numpy" ,python-numpy) + ("python-pandas" ,python-pandas) + ("python-scipy" ,python-scipy) + ("python-tables" ,python-tables))) + (home-page "https://github.com/deeptools/HiCMatrix/") + (synopsis "HiCMatrix class for HiCExplorer and pyGenomeTracks") + (description + "This helper package implements the @code{HiCMatrix} class for +the HiCExplorer and pyGenomeTracks packages.") + (license license:gpl3+))) + (define-public python-hicexplorer (package (name "python-hicexplorer") @@ -13732,23 +13774,35 @@ genomic scores), long range contacts and the visualization of viewpoints.") (define-public python-pygenometracks (package (name "python-pygenometracks") - (version "2.0") + (version "3.3") (source (origin (method url-fetch) (uri (pypi-uri "pyGenomeTracks" version)) (sha256 (base32 - "1fws6bqsyy9kj3qiabhkqx4wd4i775gsxnhszqd3zg7w67sc1ic5")))) + "16laa0wnf4qn9fb9ych4w1vqhqwjss70v0y0f6wp4gwqfrlgac0f")))) (build-system python-build-system) + (arguments + `(#:tests? #f ; there are none + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* "setup.py" + (("matplotlib ==3.1.1") + "matplotlib >=3.1.1")) + #t))))) (propagated-inputs - `(("python-configparser" ,python-configparser) - ("python-future" ,python-future) - ("python-hicexplorer" ,python-hicexplorer) + `(("python-future" ,python-future) + ("python-gffutils" ,python-gffutils) + ("python-hicmatrix" ,python-hicmatrix) ("python-intervaltree" ,python-intervaltree) ("python-matplotlib" ,python-matplotlib) ("python-numpy" ,python-numpy) - ("python-pybigwig" ,python-pybigwig))) + ("python-pybigwig" ,python-pybigwig) + ("python-pysam" ,python-pysam) + ("python-tqdm" ,python-tqdm))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "https://pygenometracks.readthedocs.io") diff --git a/gnu/packages/calendar.scm b/gnu/packages/calendar.scm index 5132a9d8ab..104d61148a 100644 --- a/gnu/packages/calendar.scm +++ b/gnu/packages/calendar.scm @@ -186,7 +186,17 @@ data units.") (uri (pypi-uri "khal" version)) (sha256 (base32 - "1r8bkgjwkh7i8ygvsv51h1cnax50sb183vafg66x5snxf3dgjl6l")))) + "1r8bkgjwkh7i8ygvsv51h1cnax50sb183vafg66x5snxf3dgjl6l")) + (patches + (list + (origin + (method url-fetch) + ;; This patch fixes an issue with python-urwid-2.1.0 + (uri "https://github.com/pimutils/khal/commit/2c5990c2de2015b251ba23617faa40ee11b8c22a.patch") + (file-name "khal-compat-urwid-2.1.0.patch") + (sha256 + (base32 + "11nd8hkjz68imwqqn0p54zmb53z2pfxmzchaviy7jc1ky5s9l663"))))))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases @@ -219,9 +229,8 @@ data units.") ("python-sphinxcontrib-newsfeed" ,python-sphinxcontrib-newsfeed) ("python-sphinx" ,python-sphinx))) (inputs - `(("sqlite" ,sqlite))) - (propagated-inputs - `(("python-configobj" ,python-configobj) + `(("sqlite" ,sqlite) + ("python-configobj" ,python-configobj) ("python-dateutil" ,python-dateutil) ("python-icalendar" ,python-icalendar) ("python-tzlocal" ,python-tzlocal) diff --git a/gnu/packages/chromium.scm b/gnu/packages/chromium.scm index d92d463e03..4755a94025 100644 --- a/gnu/packages/chromium.scm +++ b/gnu/packages/chromium.scm @@ -248,7 +248,7 @@ from forcing GEXP-PROMISE." #:system system #:guile-for-build guile))) -(define %chromium-version "81.0.4044.92") +(define %chromium-version "81.0.4044.113") (define %ungoogled-revision "b484ad4c0bdb696c86d941798ae6b0e2bd0db35d") (define %debian-revision "debian/81.0.4044.92-1") (define package-revision "0") @@ -264,7 +264,7 @@ from forcing GEXP-PROMISE." %chromium-version ".tar.xz")) (sha256 (base32 - "0i0szd749ihb08rxnsmsbxq75b6x952wpk94jwc0ncv6gb83zkx2")))) + "0hsxxw7fm1p8g53msqb644v8vr4cpvjmpln444c2268rm43yik17")))) (define %ungoogled-origin (origin diff --git a/gnu/packages/ci.scm b/gnu/packages/ci.scm index a5474e0a96..39aa54a9e8 100644 --- a/gnu/packages/ci.scm +++ b/gnu/packages/ci.scm @@ -3,7 +3,7 @@ ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2016, 2017 Mathieu Lirzin <mthl@gnu.org> ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com> -;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2017, 2019, 2020 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org> ;;; ;;; This file is part of GNU Guix. @@ -47,20 +47,20 @@ #:use-module (guix build-system gnu)) (define-public cuirass - (let ((commit "b9031db946ff89a39e1507b430f64402b0e9572a") - (revision "28")) + (let ((commit "27af1d34646f4e3fca09283cb52caa8b89cbb2b1") + (revision "29")) (package (name "cuirass") - (version (string-append "0.0.1-" revision "." (string-take commit 7))) + (version (git-version "0.0.1" revision commit)) (source (origin (method git-fetch) (uri (git-reference (url "https://git.savannah.gnu.org/git/guix/guix-cuirass.git") (commit commit))) - (file-name (string-append name "-" version)) + (file-name (git-file-name name version)) (sha256 (base32 - "103smfbdpgaw17xw3vc9cb3nfisrx64k71rpzn8g35f3jz7bxdcf")))) + "199fzv4d18qslcggl7lj42ib600nckp0c40x7ahnb4rgnjw8ppyi")))) (build-system gnu-build-system) (arguments '(#:modules ((guix build utils) diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm index dfec9ac277..72c6d93cfc 100644 --- a/gnu/packages/compression.scm +++ b/gnu/packages/compression.scm @@ -503,7 +503,7 @@ than gzip and 15 % smaller output than bzip2.") "/share/zoneinfo")) #t))))) (native-inputs - `(("tzdata" ,tzdata))) + `(("tzdata" ,tzdata-for-tests))) (home-page "https://fragglet.github.com/lhasa/") (synopsis "LHA archive decompressor") (description "Lhasa is a replacement for the Unix LHA tool, for diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm index e8b635ac16..cd2fea5996 100644 --- a/gnu/packages/cran.scm +++ b/gnu/packages/cran.scm @@ -12306,6 +12306,8 @@ select colors to use in your R code.") ("r-scales" ,r-scales) ("r-shiny" ,r-shiny) ("r-shinyjs" ,r-shinyjs))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "https://github.com/daattali/ggExtra") (synopsis "Marginal histograms for ggplot2 and other enhancements") (description @@ -18006,6 +18008,8 @@ allowed.") ("r-rsolnp" ,r-rsolnp) ("r-shiny" ,r-shiny) ("r-shinydashboard" ,r-shinydashboard))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "https://github.com/Wenchao-Ma/GDINA") (synopsis "Generalized DINA model framework") (description @@ -20620,7 +20624,7 @@ techniques to average Bayesian predictive distributions.") "/share/zoneinfo")) #t))))) (native-inputs - `(("tzdata" ,tzdata) + `(("tzdata" ,tzdata-for-tests) ("pandoc" ,ghc-pandoc))) (propagated-inputs `(("r-bh" ,r-bh) @@ -21102,3 +21106,28 @@ client).") designs with and without early outcomes for treatment selection and subpopulation type designs.") (license license:gpl3))) + +(define-public r-nbconvertr + (package + (name "r-nbconvertr") + (version "1.3.2") + (source + (origin + (method url-fetch) + (uri (cran-uri "nbconvertR" version)) + (sha256 + (base32 + "0yhmz177r1miain65vspclahhz8cg7638ldbpsw8ylgf7a60l0sg")))) + (properties `((upstream-name . "nbconvertR"))) + (build-system r-build-system) + (inputs + `(("jupyter" ,python-nbconvert) + ("pandoc" ,ghc-pandoc))) + (home-page "https://cran.r-project.org/web/packages/nbconvertR/") + (synopsis "Vignette engine wrapping Jupyter notebooks") + (description + "This package calls the Jupyter script @code{nbconvert} to create +vignettes from notebooks. Those notebooks (@code{.ipynb} files) are files +containing rich text, code, and its output. Code cells can be edited and +evaluated interactively.") + (license license:gpl3))) diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 09568aec37..ccbcfca005 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -508,7 +508,7 @@ replacement for the code@{python-memcached} library.") ("python" ,python-2) ("python2-pymongo" ,python2-pymongo) ("python2-pyyaml" ,python2-pyyaml) - ("tzdata" ,tzdata))) + ("tzdata" ,tzdata-for-tests))) (arguments `(#:scons ,scons-python2 #:phases diff --git a/gnu/packages/diffoscope.scm b/gnu/packages/diffoscope.scm index 37f8f74b7b..71c0039dfb 100644 --- a/gnu/packages/diffoscope.scm +++ b/gnu/packages/diffoscope.scm @@ -45,6 +45,7 @@ #:use-module (gnu packages linux) #:use-module (gnu packages llvm) #:use-module (gnu packages man) + #:use-module (gnu packages maths) #:use-module (gnu packages mono) #:use-module (gnu packages ocaml) #:use-module (gnu packages package-management) @@ -68,7 +69,7 @@ #:use-module (ice-9 match)) (define-public diffoscope - (let ((version "139")) + (let ((version "141")) (package (name "diffoscope") (version version) @@ -80,7 +81,7 @@ (file-name (git-file-name name version)) (sha256 (base32 - "1k4yjyvmn5nfdapkwgkr9gzpn18kr4c58n0f32pfkx4yakfqkk4i")))) + "0pls2jryx394ysaz0g8h959lhrsdqak9bkxjd5r6sdckgiikplkj")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases @@ -91,6 +92,12 @@ (lambda _ (substitute* "setup.py" (("'python-magic',") "")))) + ;; Patch in support for known tools + (add-after 'unpack 'add-known-tools + (lambda _ + (substitute* "diffoscope/external_tools.py" + (("'debian': 'hdf5-tools'") + "'debian': 'hdf5-tools', 'guix': 'hdf5'")))) ;; This test is broken because our `file` package has a ;; bug in berkeley-db file type detection. (add-after 'unpack 'remove-berkeley-test @@ -189,6 +196,7 @@ ("giflib:bin" ,giflib "bin") ("gnumeric" ,gnumeric) ("gnupg" ,gnupg) + ("hdf5" ,hdf5) ("imagemagick" ,imagemagick) ("libarchive" ,libarchive) ("llvm" ,llvm) diff --git a/gnu/packages/dns.scm b/gnu/packages/dns.scm index 869be47ad1..e1198d4381 100644 --- a/gnu/packages/dns.scm +++ b/gnu/packages/dns.scm @@ -115,7 +115,7 @@ and BOOTP/TFTP for network booting of diskless machines.") (define-public isc-bind (package (name "bind") - (version "9.16.1") + (version "9.16.2") (source (origin (method url-fetch) (uri (string-append @@ -123,7 +123,7 @@ and BOOTP/TFTP for network booting of diskless machines.") "/bind-" version ".tar.xz")) (sha256 (base32 - "14ayswxnyaqwb935iqdi1w9ih3zs0a0va59j4cyi5f9mh7kxf4x9")))) + "0gwr4p14zy5jqq050n762rfc33km51qwipcwy6bsvk55ziybgrfr")))) (build-system gnu-build-system) (outputs `("out" "utils")) (inputs diff --git a/gnu/packages/education.scm b/gnu/packages/education.scm index 836fc2b525..a1fee29c4e 100644 --- a/gnu/packages/education.scm +++ b/gnu/packages/education.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018, 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr> ;;; Copyright © 2020 Robert Smith <robertsmith@posteo.net> +;;; Copyright © 2020 Guy Fleury Iteriteka <gfleury@disroot.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -31,6 +32,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages curl) #:use-module (gnu packages databases) + #:use-module (gnu packages flex) #:use-module (gnu packages fonts) #:use-module (gnu packages freedesktop) #:use-module (gnu packages game-development) @@ -43,12 +45,14 @@ #:use-module (gnu packages kde) #:use-module (gnu packages kde-frameworks) ; extra-cmake-modules #:use-module (gnu packages mp3) + #: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 python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages qt) + #:use-module (gnu packages readline) #:use-module (gnu packages sdl) #:use-module (gnu packages sqlite) #:use-module (gnu packages texinfo) @@ -935,3 +939,40 @@ TuxMath also includes Factoroids, a game that gives practice in factoring numbers and simplifying fractions, as well as zapping rocks floating through space.") (license license:gpl3+))) + +(define-public mdk + (package + (name "mdk") + (version "1.2.10") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/mdk/v1.2.10/mdk-" + version ".tar.gz")) + (sha256 + (base32 + "1rwcq2b5vvv7318j92nxc5dayj27dpfhzc4rjiv4ccvsc0x35x5h")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags (list "--enable-gui=yes" "-with-readline=yes"))) + (native-inputs + `(("flex" ,flex) + ("pkg-config" ,pkg-config) + ("intltool" ,intltool) + ("ncurses" ,ncurses))) + (inputs + `(("readline" ,readline) + ("glib" ,glib) + ("gtk+" ,gtk+) + ("pango" ,pango) + ("libglade" ,libglade))) + (home-page "https://www.gnu.org/software/mdk/") + (synopsis "Virtual development environment for Knuth's MIX") + (description + "GNU MDK is the Mix Development Kit, an emulation of the pedagogical +computer MIX and its assembly language MIXAL. MIX has a virtual CPU with +standard features such as registers, memory cells, an overflow toggle, +comparison flags, input-output devices, and a set of binary instructions. +The package includes a compiler, a virtual machine, a GUI for the virtual +machine, and more.") + (license license:gpl3+))) diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm index 37c449f437..b2b15af679 100644 --- a/gnu/packages/emacs-xyz.scm +++ b/gnu/packages/emacs-xyz.scm @@ -4975,7 +4975,7 @@ number.") (define-public emacs-org-superstar (package (name "emacs-org-superstar") - (version "1.1.0") + (version "1.2.1") (source (origin (method git-fetch) @@ -4984,7 +4984,7 @@ number.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "14aafqw8rnbmiy3kcw1a58vjxdyamrbmlldnlw018wgk0qqv0xpx")))) + (base32 "14w06v76xi4f6hpq6xzicrjjv0b802g5zc9as4mpimfy5gx2xpm0")))) (build-system emacs-build-system) (propagated-inputs `(("emacs-org" ,emacs-org))) diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm index e2c67e9126..cc2ae2447e 100644 --- a/gnu/packages/file-systems.scm +++ b/gnu/packages/file-systems.scm @@ -249,7 +249,7 @@ from the jfsutils package. It is meant to be used in initrds.") (define-public disorderfs (package (name "disorderfs") - (version "0.5.8") + (version "0.5.9") (source (origin (method git-fetch) @@ -259,7 +259,7 @@ from the jfsutils package. It is meant to be used in initrds.") (file-name (git-file-name name version)) (sha256 (base32 - "0pk9i0dycjq0wl6dp37r2hbadgpgmzbmjk2xpbjl36x4yrm4jns8")))) + "0irgr9hkm9icx1s44m9382484yx8hddzjxbsz621ip9c946pif0g")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config))) diff --git a/gnu/packages/finance.scm b/gnu/packages/finance.scm index aa71335040..80d0350cf5 100644 --- a/gnu/packages/finance.scm +++ b/gnu/packages/finance.scm @@ -13,7 +13,7 @@ ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net> ;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org> -;;; Copyright © 2019 Martin Becze <mjbecze@riseup.net> +;;; Copyright © 2019, 2020 Martin Becze <mjbecze@riseup.net> ;;; Copyright © 2019 Sebastian Schott <sschott@mailbox.org> ;;; Copyright © 2020 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2020 Christopher Lemmer Webber <cwebber@dustycloud.org> @@ -41,6 +41,7 @@ #:use-module (guix git-download) #:use-module (guix build-system gnu) #:use-module (guix build-system cmake) + #:use-module (guix build-system copy) #:use-module (guix build-system emacs) #:use-module (guix build-system python) #:use-module (guix build-system glib-or-gtk) @@ -241,11 +242,11 @@ and dynamically with report tools based on filtering and graphical charts.") ("libedit" ,libedit) ("mpfr" ,mpfr) ("python" ,python-2) - ("tzdata" ,tzdata) ("utfcpp" ,utfcpp))) (native-inputs `(("groff" ,groff) - ("texinfo" ,texinfo))) + ("texinfo" ,texinfo) + ("tzdata" ,tzdata-for-tests))) (home-page "https://ledger-cli.org/") (synopsis "Command-line double-entry accounting program") (description @@ -1165,10 +1166,37 @@ information.") (home-page "https://grisbi.org") (license license:gpl2+))) +(define-public trezord-udev-rules + (let ((commit "bff7fdfe436c727982cc553bdfb29a9021b423b0") + (revision "0")) + (package + (name "trezord-udev-rules") + (version (git-version "0.0.0" revision commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/trezor/trezor-common.git") + (commit commit))) + (sha256 + (base32 + "14mrirrn68if7ja6qdk9qlxs1hv0f21vrxy5ncnms0gx9iwakp2l")) + (file-name (git-file-name name version)))) + (build-system copy-build-system) + (arguments + '(#:install-plan + '(("./udev/51-trezor.rules" "lib/udev/rules.d/")))) + (home-page "https://github.com/trezor/trezor-common") + (synopsis "Udev rules for trezord") + (description + "This contains the udev rules for trezord. This will let a user run +trezord as a regular user instead of needing to it run as root.") + (license license:lgpl3+)))) + (define-public trezord (package (name "trezord") - (version "2.0.17") + (version "2.0.29") (source (origin (method git-fetch) @@ -1177,7 +1205,7 @@ information.") (commit (string-append "v" version)))) (sha256 (base32 - "0nqzpq0i3crh0i4r1cppja5sn3rwi1fv9afxzwzv63096x5l30a7")) + "1ks1fa0027s3xp0z6qp0dxmayvrb4dwwscfhbx7da0khp153f2cp")) (file-name (git-file-name name version)))) (build-system go-build-system) (arguments @@ -1405,14 +1433,14 @@ a Qt GUI.") (define-public fulcrum (package (name "fulcrum") - (version "1.0.5b") + (version "1.1.0") (source (origin (method url-fetch) (uri (string-append "https://gitlab.com/FloweeTheHub/fulcrum/-/archive/v" version "/fulcrum-v" version ".tar.gz")) (sha256 - (base32 "1c1hkik8avill8ha33g76rk4b03j5ac8wiml69q4jav7a63ywgfy")))) + (base32 "1xywwgsdhkiblv6la0pfhvn2s9q8vnz6pjg35647rlwzi6ybf0ak")))) (build-system gnu-build-system) (arguments `(#:phases @@ -1440,6 +1468,71 @@ walets in a fast and small server. The full data is stored in a full node, like Flowee the Hub, which Fulcrum connects to over RPC.") (license license:gpl3+))) +(define-public flowee + (package + (name "flowee") + (version "2020.03.1") + (source + (origin + (method url-fetch) + (uri (string-append "https://gitlab.com/FloweeTheHub/thehub/-/archive/" + version "/thehub-" version ".tar.gz")) + (sha256 + (base32 "1ajd5axv9zyhh6njrvamm11zn52j1q4j3mwn2nfv7cjd4lhnhlsr")))) + (build-system cmake-build-system) + (arguments + `(#:configure-flags '("-Dbuild_tests=ON" "-Denable_gui=OFF") + #:phases + (modify-phases %standard-phases + (add-before 'configure 'make-qt-deterministic + (lambda _ + ;; Make Qt deterministic. + (setenv "QT_RCC_SOURCE_DATE_OVERRIDE" "1") + #t)) + (add-before 'configure 'disable-black-box + ;; the black-box testing runs full hubs and lets them interact. + ;; this is more fragile and a slow machine, or low memory machine, may + ;; make the tests timeout and fail. We just disable them here. + (lambda _ + (substitute* "testing/CMakeLists.txt" + (("test_api") "")) + #t)) + (add-after 'configure 'set-build-info + ;; Their genbuild.sh to generate a build.h fails in guix (no .git dir) . + ;; Its purpose is to write the tag name in the build.h file. We do that + ;; here instead. + (lambda _ + (with-output-to-file "include/build.h" + (lambda _ + (display + (string-append "#define BUILD_DESC " "\"", version "\"")))))) + (add-before 'check 'set-home + (lambda _ + (setenv "HOME" (getenv "TMPDIR")) ; tests write to $HOME + #t)) + (replace 'check + (lambda _ + (invoke "make" "check" "-C" "testing")))))) + (inputs + `(("boost" ,boost) + ("gmp" ,gmp) + ("libevent" ,libevent) + ("miniupnpc" ,miniupnpc) + ("openssl" ,openssl) + ("qtbase" ,qtbase))) + (native-inputs + `(("pkg-config" ,pkg-config) + ("qttools" ,qttools) + ("util-linux" ,util-linux))) ; provides the hexdump command for tests + (home-page "https://flowee.org") + (synopsis "Flowee infrastructure tools and services") + (description + "Flowee packages all tier-1 applications and services from the Flowee group. +This includes components like The Hub and Indexer which and various others +that allows you to run services and through them access the Bitcoin Cash networks.") + (license license:gpl3+))) + + (define-public beancount (package (name "beancount") diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm index f20a0bdca8..caa1e8d37c 100644 --- a/gnu/packages/games.scm +++ b/gnu/packages/games.scm @@ -19,7 +19,7 @@ ;;; Copyright © 2016 Albin Söderqvist <albin@fripost.org> ;;; Copyright © 2016, 2017, 2018, 2019 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com> -;;; Copyright © 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2016, 2017, 2018, 2019, 2020 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com> ;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info> @@ -1955,7 +1955,7 @@ asynchronously and at a user-defined speed.") (define-public chess (package (name "chess") - (version "6.2.5") + (version "6.2.6") (source (origin (method url-fetch) @@ -1963,13 +1963,15 @@ asynchronously and at a user-defined speed.") ".tar.gz")) (sha256 (base32 - "00j8s0npgfdi41a0mr5w9qbdxagdk2v41lcr42rwl1jp6miyk6cs")))) + "0kxhdv01ia91v2y0cmzbll391ns2vbmn65jjrv37h4s1srszh5yn")))) (build-system gnu-build-system) (home-page "https://www.gnu.org/software/chess/") (synopsis "Full chess implementation") (description "GNU Chess is a chess engine. It allows you to compete against the computer in a game of chess, either through the default terminal interface or via an external visual interface such as GNU XBoard.") + (properties '((upstream-name . "gnuchess") + (ftp-directory . "/chess"))) (license license:gpl3+))) (define freedink-engine diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm index 6de7aaf7c6..fbd4c5eb96 100644 --- a/gnu/packages/gnome.scm +++ b/gnu/packages/gnome.scm @@ -250,6 +250,34 @@ Desktop. It is designed to be as simple as possible and has some unique features to enable users to create their discs easily and quickly.") (license license:gpl2+))) +(define-public notification-daemon + (package + (name "notification-daemon") + (version "3.20.0") + (source + (origin + (method url-fetch) + (uri + (string-append "mirror://gnome/sources/" name "/" + (version-major+minor version) "/" + name "-" version ".tar.xz")) + (sha256 + (base32 + "1rgchqi4j2ll7d6a7lgy7id0w9rrkwkgic1096fbm2zx6n7pc4yx")))) + (build-system glib-or-gtk-build-system) + (native-inputs + `(("intltool" ,intltool) + ("pkg-config" ,pkg-config))) + (inputs + `(("glib" ,glib) + ("gtk+" ,gtk+) + ("x11" ,libx11))) + (synopsis "Notification Daemon for GNOME Desktop") + (description "Notification-Daemon is the server implementation of the +freedesktop.org desktop notification specification.") + (home-page "https://wiki.gnome.org/Projects/NotificationDaemon") + (license license:gpl2+))) + (define-public mm-common (package (name "mm-common") diff --git a/gnu/packages/gpodder.scm b/gnu/packages/gpodder.scm index 02aef3ed47..6963da9dff 100644 --- a/gnu/packages/gpodder.scm +++ b/gnu/packages/gpodder.scm @@ -38,7 +38,7 @@ (define-public gpodder (package (name "gpodder") - (version "3.10.13") + (version "3.10.15") (source (origin (method git-fetch) @@ -47,11 +47,13 @@ (commit version))) (sha256 (base32 - "1h542syaxsx1hslfzlk3fx1nbp190zjw35kigw7a1kx1jwvfwapg")) + "0ghbanj142n0hgydzfjmnkdgri2kswsjal3mn10c723kih4ir4yr")) (file-name (git-file-name name version)))) (build-system python-build-system) (native-inputs - `(("intltool" ,intltool))) + `(("intltool" ,intltool) + ("python-coverage" ,python-coverage) + ("python-minimock" ,python-minimock))) (inputs `(("gtk+" ,gtk+) ("python-pygobject" ,python-pygobject) @@ -72,6 +74,12 @@ (substitute* "src/gpodder/util.py" (("xdg-open") (string-append xdg-utils "/bin/xdg-open"))) #t))) + (replace 'check + (lambda _ + ; The `unittest' target overrides the PYTHONPATH variable. + (substitute* "makefile" + (("PYTHONPATH=src/") "PYTHONPATH=${PYTHONPATH}:src/")) + (invoke "make" "unittest"))) ;; 'msgmerge' introduces non-determinism by resetting the ;; POT-Creation-Date in .po files. (add-before 'install 'do-not-run-msgmerge @@ -176,7 +184,13 @@ downloading episode status changes.") (sha256 (base32 "0k62ppg20i41gcc5x8ddjn7zbpy47hqpxzrq9257g2c71m4qw07b")))) (native-inputs - `(("python-nose" ,python-nose))) + `(("python-coverage" ,python-coverage) + ("python-nose" ,python-nose))) + (arguments + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ (invoke "nosetests")))))) (build-system python-build-system) (home-page "http://gpodder.org/podcastparser") (synopsis "Simplified and fast RSS parser Python library") diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm index ac8155fc89..5be56ba9f7 100644 --- a/gnu/packages/guile-xyz.scm +++ b/gnu/packages/guile-xyz.scm @@ -1056,7 +1056,7 @@ format.") (define-public guile-newt (package (name "guile-newt") - (version "0.0.1") + (version "0.0.2") (source (origin (method git-fetch) (uri (git-reference @@ -1065,20 +1065,7 @@ format.") (file-name (git-file-name name version)) (sha256 (base32 - "1w7qy4dw1f4bx622l6hw8mv49sf1ha8kch8j4nganyk8fj0wn695")) - (modules '((guix build utils))) - (snippet - '(begin - ;; Allow builds with Guile 3.0. - (substitute* "configure.ac" - (("^GUILE_PKG.*") - "GUILE_PKG([3.0 2.2 2.0])\n")) - - ;; Remove "guile.m4" since it contains an obsolete version - ;; of 'GUILE_PKG' that doesn't work with development - ;; versions such as 2.9. - (delete-file "m4/guile.m4") - #t)))) + "1gksd1lzgjjh1p9vczghg8jw995d22hm34kbsiv8rcryirv2xy09")))) (build-system gnu-build-system) (arguments '(#:make-flags diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 0ae88ea1a4..c900bd0eb9 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -1972,7 +1972,7 @@ This package can be used to create @code{favicon.ico} files for web sites.") (define-public libavif (package (name "libavif") - (version "0.6.3") + (version "0.7.1") (source (origin (method git-fetch) (uri (git-reference @@ -1981,7 +1981,7 @@ This package can be used to create @code{favicon.ico} files for web sites.") (file-name (git-file-name name version)) (sha256 (base32 - "0fn2mcpvzw6h9sv8h0icbz10i8ihzzf5d5mx3fc4pvhicyz4syq8")))) + "1xybjbbprvfsrwgysrn7grg6yp7v6ch5vci7zvdcdzcgyrbph172")))) (build-system cmake-build-system) (arguments `(#:configure-flags '("-DAVIF_CODEC_AOM=ON" "-DAVIF_CODEC_DAV1D=ON" @@ -1989,18 +1989,15 @@ This package can be used to create @code{favicon.ico} files for web sites.") "-DAVIF_BUILD_TESTS=ON") #:phases (modify-phases %standard-phases + (replace 'check + (lambda _ + (invoke "./aviftest" "../source/tests/data"))) (add-after 'install 'install-readme (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (doc (string-append out "/share/doc/libavif-" - ,version))) - (install-file "../source/README.md" doc))))) -;; The test suite runs tests for all supported codecs and fails because we don't -;; have rav1e yet. -;; (replace 'check -;; (lambda _ -;; (invoke "./aviftest" "../source/tests/data")))) - #:tests? #f)) + (doc (string-append out "/share/doc/libavif-" ,version))) + (install-file "../source/README.md" doc) + #t)))))) (inputs `(("libaom" ,libaom) ("dav1d" ,dav1d))) diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm index e220b2c24d..0c31709329 100644 --- a/gnu/packages/kde-frameworks.scm +++ b/gnu/packages/kde-frameworks.scm @@ -3537,7 +3537,7 @@ workspace.") ("shared-mime-info" ,shared-mime-info) ("kjobwidgets" ,kjobwidgets) ;; required for running the tests ("strace" ,strace) - ("tzdata" ,tzdata))) + ("tzdata" ,tzdata-for-tests))) (propagated-inputs ;; These are required to be installed along with this package, see ;; lib64/cmake/KF5KDELibs4Support/KF5KDELibs4SupportConfig.cmake diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index 0970a3909c..344ff77a35 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -369,26 +369,26 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS." (sha256 hash))) -(define-public linux-libre-5.6-version "5.6.4") +(define-public linux-libre-5.6-version "5.6.5") (define-public linux-libre-5.6-pristine-source (let ((version linux-libre-5.6-version) - (hash (base32 "14cxbc9xi4s3xwx4yb1yd4z0kidsk3d443skf5sgmdhcalg79wax"))) + (hash (base32 "1rjjkcmzsj9azggh960qnk2x44ns475b8nbd4nxazrz1rgdx76zp"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.6))) -(define-public linux-libre-5.4-version "5.4.32") +(define-public linux-libre-5.4-version "5.4.33") (define-public linux-libre-5.4-pristine-source (let ((version linux-libre-5.4-version) - (hash (base32 "1czjjnln1cqrnjxw0md6mpw9haw9abdyvmxnjds56ym4nzx9jb8r"))) + (hash (base32 "0q9q48ij6vppfcrdf7fr24pvpwsd13pxjkdni6rnjq9a60hrcmxm"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-5.4))) -(define-public linux-libre-4.19-version "4.19.115") +(define-public linux-libre-4.19-version "4.19.116") (define-public linux-libre-4.19-pristine-source (let ((version linux-libre-4.19-version) - (hash (base32 "1hh170z3mv181l6cc6qqc12wif5jsmxbh2qxbq6b9km5irydkchi"))) + (hash (base32 "0r3vdc3npl1bn06w9v6wsq7d5mm7bnhm9wsz36pb9ar3xhimvrlf"))) (make-linux-libre-source version (%upstream-linux-source version hash) deblob-scripts-4.19))) diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm index b5cd660f21..48b9ec307d 100644 --- a/gnu/packages/mail.scm +++ b/gnu/packages/mail.scm @@ -24,7 +24,7 @@ ;;; Copyright © 2017 Kyle Meyer <kyle@kyleam.com> ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2017, 2018 Rene Saavedra <pacoon@protonmail.com> -;;; Copyright © 2018, 2019 Pierre Langlois <pierre.langlois@gmx.com> +;;; Copyright © 2018, 2019, 2020 Pierre Langlois <pierre.langlois@gmx.com> ;;; Copyright © 2018 Alex Vong <alexvong1995@gmail.com> ;;; Copyright © 2018 Gábor Boskovits <boskovits@gmail.com> ;;; Copyright © 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net> @@ -89,6 +89,7 @@ #:use-module (gnu packages libevent) #:use-module (gnu packages libidn) #:use-module (gnu packages libunistring) + #:use-module (gnu packages libunwind) #:use-module (gnu packages linux) #:use-module (gnu packages lsof) #:use-module (gnu packages lua) @@ -1432,6 +1433,11 @@ facilities for checking incoming mail.") (inputs `(("bzip2" ,bzip2) ("libsodium" ,libsodium) ; extra password algorithms + ;; FIXME: The 'test-backtrace' tests fail on arm when using glibc's + ;; backtrace_symbol() function so fallback to using libunwind. + ,@(if (target-arm?) + `(("libunwind" ,libunwind)) + '()) ("linux-pam" ,linux-pam) ("lz4" ,lz4) ("openssl" ,openssl) @@ -1955,26 +1961,26 @@ maintained.") (define-public khard (package (name "khard") - (version "0.15.1") + (version "0.16.1") (source (origin (method url-fetch) (uri (pypi-uri name version)) (sha256 (base32 - "18ba2xgfq8sw0bg6xmlfjpizid1hkzgswcfcc54gl21y2dwfda2w")))) + "0fg4qh5gzki5wg958wlpc8a2icnk74gzg33lqxjm755cfnjng7qd")))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases - (add-after 'install 'install-doc + (add-after 'install 'install-completions (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) - (doc (string-append out "/share/doc/khard"))) - (copy-recursively "misc/khard" doc) + (zsh (string-append out "/share/zsh/site-functions"))) + (copy-recursively "misc/zsh" zsh) #t)))))) (native-inputs `(("python-setuptools-scm" ,python-setuptools-scm))) - (propagated-inputs + (inputs `(("python-atomicwrites" ,python-atomicwrites) ("python-configobj" ,python-configobj) ("python-pyyaml" ,python-pyyaml) diff --git a/gnu/packages/mastodon.scm b/gnu/packages/mastodon.scm index 9f86ee5649..d6b0e25e6b 100644 --- a/gnu/packages/mastodon.scm +++ b/gnu/packages/mastodon.scm @@ -29,13 +29,13 @@ (define-public toot (package (name "toot") - (version "0.25.2") + (version "0.26.0") (source (origin (method url-fetch) (uri (pypi-uri "toot" version)) (sha256 - (base32 "16akld7zfr52rqrbgf6hmsca9qsrfdbbbd9bji8d26zggxmqq4vq")))) + (base32 "0h0lqm1q7i32i9n6yx5q2j563vc92h2sjh1ih4n2rxf98p6c5d1b")))) (build-system python-build-system) (arguments '(#:phases diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index 4618817b43..9f1a62a7e7 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -608,14 +608,14 @@ of the same name.") (define-public wireshark (package (name "wireshark") - (version "3.2.2") + (version "3.2.3") (source (origin (method url-fetch) (uri (string-append "https://www.wireshark.org/download/src/wireshark-" version ".tar.xz")) (sha256 - (base32 "0ygdxpz0i4jxp55fg9x4xcan093wycjb66yas073gviz9kpj6naz")))) + (base32 "1fpsfjrap7j84sy728yhcr2gad9nq3n5gq03mwrmxnc6ijwf81zh")))) (build-system cmake-build-system) (arguments `(#:phases diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm index 44236ec469..27cd5c18b7 100644 --- a/gnu/packages/node-xyz.scm +++ b/gnu/packages/node-xyz.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il> +;;; Copyright © 2020 Giacomo Leidi <goodoldpaul@autistici.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -244,3 +245,26 @@ protocol used in @code{node-lynx}.") (description "This package provides the Node.js @code{util.deprecate()} function with browser support.") (license license:expat))) + +(define-public node-semver + (package + (name "node-semver") + (version "7.2.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/npm/node-semver.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p")))) + (build-system node-build-system) + (arguments + `(#:tests? #f)) ;; FIXME: Tests depend on node-tap + (home-page "https://github.com/npm/node-semver") + (synopsis "Parses semantic versions strings") + (description + "@code{node-semver} is a JavaScript implementation of the +@uref{https://semver.org/, SemVer.org} specification.") + (license license:isc))) diff --git a/gnu/packages/patches/python-jedi-sort-project-test.patch b/gnu/packages/patches/python-jedi-sort-project-test.patch new file mode 100644 index 0000000000..b2d602dfe6 --- /dev/null +++ b/gnu/packages/patches/python-jedi-sort-project-test.patch @@ -0,0 +1,18 @@ +Sort the result of file system traversal to avoid test failure on different +file systems. + +Taken from upstream: +https://github.com/davidhalter/jedi/commit/7ff76bb7d0d94514e17cd1647f4ffaf533dd55f5 + +diff --git a/test/test_api/test_project.py b/test/test_api/test_project.py +--- a/test/test_api/test_project.py ++++ b/test/test_api/test_project.py +@@ -135,7 +135,7 @@ def test_search(string, full_names, kwargs, skip_pre_python36): + defs = project.complete_search(string, **kwargs) + else: + defs = project.search(string, **kwargs) +- assert [('stub:' if d.is_stub() else '') + d.full_name for d in defs] == full_names ++ assert sorted([('stub:' if d.is_stub() else '') + d.full_name for d in defs]) == full_names + + + @pytest.mark.parametrize( diff --git a/gnu/packages/pdf.scm b/gnu/packages/pdf.scm index bb3a26525f..8ccb133e1f 100644 --- a/gnu/packages/pdf.scm +++ b/gnu/packages/pdf.scm @@ -822,7 +822,7 @@ using a stylus.") (define-public xournalpp (package (name "xournalpp") - (version "1.0.17") + (version "1.0.18") (source (origin (method git-fetch) @@ -831,7 +831,7 @@ using a stylus.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "0xw2mcgnm4sa9hrhfgp669lfypw97drxjmz5w8i5whaprpvmkxzw")))) + (base32 "0a9ygbmd4dwgck3k8wsrm2grynqa0adb12wwspzmzvpisbadffjy")))) (build-system cmake-build-system) (arguments `(#:configure-flags (list "-DENABLE_CPPUNIT=ON") ;enable tests @@ -844,11 +844,6 @@ using a stylus.") (modify-phases %standard-phases (add-after 'unpack 'fix-permissions-on-po-files (lambda _ - ;; Always generate translations. A recent upstream patch - ;; disabled it. - (substitute* "po/CMakeLists.txt" - (("gettext_create_translations \\(\"\\$\\{potfile\\}\"\\)") - "gettext_create_translations (\"${potfile}\" ALL)")) ;; Make sure 'msgmerge' can modify the PO files. (for-each (lambda (po) (chmod po #o666)) (find-files "." "\\.po$")) @@ -857,7 +852,6 @@ using a stylus.") (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap))))) (native-inputs `(("cppunit" ,cppunit) - ("gcc" ,gcc-8) ;requires gcc 8+ ("gettext" ,gettext-minimal) ("pkg-config" ,pkg-config))) (inputs diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm index 7c73b40181..0636b2b3ea 100644 --- a/gnu/packages/python-xyz.scm +++ b/gnu/packages/python-xyz.scm @@ -1699,14 +1699,14 @@ Python 3.3+.") (define-public python-pyicu (package (name "python-pyicu") - (version "2.3.1") + (version "2.4.3") (source (origin (method url-fetch) (uri (pypi-uri "PyICU" version)) (sha256 (base32 - "1x4w8m7ifki9z2a187pgjr33z6z0rp2fii9b73djak1vhm9v9cnx")))) + "075bw66b3w0nw6mc5k32fwmrhyrmq3d7da3q2mw212qfmm0pgjn0")))) (build-system python-build-system) (inputs `(("icu4c" ,icu4c))) @@ -1717,24 +1717,10 @@ Python 3.3+.") (synopsis "Python extension wrapping the ICU C++ API") (description "PyICU is a python extension wrapping the ICU C++ API.") - (properties `((python2-variant . ,(delay python2-pyicu)))) (license license:x11))) (define-public python2-pyicu - (let ((base (package-with-python2 - (strip-python2-variant python-pyicu)))) - (package - (inherit base) - (arguments - `(,@(package-arguments base) - #:phases - (modify-phases %standard-phases - (add-before 'check 'delete-failing-test - (λ _ - ;; XXX: This fails due to Unicode issues unique to Python 2, - ;; it seems: <https://github.com/ovalhub/pyicu/issues/61>. - (delete-file "test/test_Script.py") - #t)))))))) + (package-with-python2 python-pyicu)) (define-public python2-dogtail ;; Python 2 only, as it leads to "TabError: inconsistent use of tabs and @@ -3877,14 +3863,14 @@ provides additional functionality on the produced Mallard documents.") (define-public python-cython (package (name "python-cython") - (version "0.29.15") + (version "0.29.16") (source (origin (method url-fetch) (uri (pypi-uri "Cython" version)) (sha256 (base32 - "0c5cjyxfvba6c0vih1fvhywp8bpz30vwvbjqdm1q1k55xzhmkn30")))) + "01gs10myw0rw4jsikvqs0859fg7gficxhv508cxvnb4l9wl5a9r3")))) (build-system python-build-system) ;; we need the full python package and not just the python-wrapper ;; because we need libpython3.3m.so @@ -6499,14 +6485,14 @@ computing.") (define-public python-urwid (package (name "python-urwid") - (version "2.0.1") + (version "2.1.0") (source (origin (method url-fetch) (uri (pypi-uri "urwid" version)) (sha256 (base32 - "1g6cpicybvbananpjikmjk8npmjk4xvak1wjzji62wc600wkwkb4")))) + "11ndnhxd41m13darf5s0c6bafdpkzq1l6mfb04wbzdmyc1hg75h8")))) (build-system python-build-system) (home-page "http://urwid.org") (synopsis "Console user interface library for Python") @@ -8037,14 +8023,14 @@ printing of sub-tables by specifying a row range.") (define-public python-tables (package (name "python-tables") - (version "3.4.4") + (version "3.6.1") (source (origin (method url-fetch) (uri (pypi-uri "tables" version)) (sha256 (base32 - "0affz7k8babh8wdmsgrz5jxrd569by2w8ffimcxs9wiaf5rw1idx")) + "0j8vnxh2m5n0cyk9z3ndcj5n1zj5rdxgc1gb78bqlyn2lyw75aa9")) (modules '((guix build utils))) (snippet '(begin @@ -8062,9 +8048,11 @@ printing of sub-tables by specifying a row range.") (add-after 'unpack 'use-gcc (lambda _ (substitute* "setup.py" - (("compiler = new_compiler\\(\\)" line) + (("^( +)compiler = new_compiler\\(\\)" line indent) (string-append line - "\ncompiler.set_executables(compiler='gcc'," + "\n" + indent + "compiler.set_executables(compiler='gcc'," "compiler_so='gcc'," "linker_exe='gcc'," "linker_so='gcc -shared')"))) @@ -9421,13 +9409,13 @@ minimal and fast API targeting the following uses: (define-public python-icalendar (package (name "python-icalendar") - (version "4.0.4") + (version "4.0.5") (source (origin (method url-fetch) (uri (pypi-uri "icalendar" version)) (sha256 (base32 - "16gjvqv0n05jrb9g228pdjgzd3amz2pdhvcgsn1jypszjg5m2w9l")))) + "14ynjj65kfmlcvpb7k097w789wvxncd3cr3xz5m1jz9yl9v6vv5q")))) (build-system python-build-system) (propagated-inputs `(("python-dateutil" ,python-dateutil) @@ -9516,20 +9504,20 @@ with a new public API, and RPython support.") (define-public python-hy (package (name "python-hy") - (version "0.17.0") + (version "0.18.0") (source (origin (method url-fetch) (uri (pypi-uri "hy" version)) (sha256 (base32 - "1gdbqsirsdxj320wnp7my5awzs1kfs6m4fqmkzbd1zd47qzj0zfi")))) + "04dfwm336gw61fmgwikvh0cnxk682p19b4w555wl5d7mlym4rwj2")))) (build-system python-build-system) (arguments '(#:phases (modify-phases %standard-phases - (add-before 'install 'set-HOME - (lambda _ - (setenv "HOME" "/tmp"))) + (add-before 'install 'set-HOME + (lambda _ + (setenv "HOME" "/tmp") #t)) (replace 'check (lambda _ ;; Tests require write access to HOME. @@ -9540,10 +9528,8 @@ with a new public API, and RPython support.") ("python-nose" ,python-nose))) (propagated-inputs `(("python-astor" ,python-astor) - ("python-clint" ,python-clint) + ("python-colorama" ,python-colorama) ("python-rply" ,python-rply) - ("python-fastentrypoints" - ,python-fastentrypoints) ("python-funcparserlib" ,python-funcparserlib))) (home-page "http://hylang.org/") @@ -9554,9 +9540,6 @@ its Lisp code into the Python Abstract Syntax Tree, you have the whole world of Python at your fingertips, in Lisp form.") (license license:expat))) -(define-public python2-hy - (package-with-python2 python-hy)) - (define-public python2-functools32 (package (name "python2-functools32") @@ -10357,13 +10340,13 @@ programmatically interfacing with your system's $EDITOR.") (define-public python-vobject (package (name "python-vobject") - (version "0.9.5") + (version "0.9.6.1") (source (origin (method url-fetch) (uri (pypi-uri "vobject" version)) (sha256 (base32 - "0hqjgf3ay1m5w1c0k00g5yfpdz1zni5qnr5rh9b8fg9hjvhwlmhg")))) + "0081g4gngw28j7vw8101jk600wz4gzfrhf5myrqvn2mrfkn2llcn")))) (build-system python-build-system) (arguments '(;; The test suite relies on some non-portable Windows interfaces. @@ -10374,7 +10357,7 @@ programmatically interfacing with your system's $EDITOR.") (synopsis "Parse and generate vCard and vCalendar files") (description "Vobject is intended to be a full featured Python package for parsing and generating vCard and vCalendar files. Currently, iCalendar files -are supported and well tested. vCard 3.0 files are supported, and all data +are supported and well tested. vCard 3.0 files are supported, and all data should be imported, but only a few components are understood in a sophisticated way.") (home-page "https://eventable.github.io/vobject/") @@ -11997,6 +11980,7 @@ characters, mouse support, and auto suggestions.") (origin (method url-fetch) (uri (pypi-uri "jedi" version)) + (patches (search-patches "python-jedi-sort-project-test.patch")) (sha256 (base32 "0c1h9x3a9klvk2g288wl328x8xgzw7136k6vs9hkd56b85vcjh6z")))) @@ -12007,7 +11991,7 @@ characters, mouse support, and auto suggestions.") (replace 'check (lambda _ (setenv "HOME" "/tmp") - (invoke "python" "-m" "pytest")))))) + (invoke "python" "-m" "pytest" "-vv")))))) (native-inputs `(("python-pytest" ,python-pytest) ("python-docopt" ,python-docopt))) diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm index a84a31fd9c..8f1562a176 100644 --- a/gnu/packages/radio.scm +++ b/gnu/packages/radio.scm @@ -35,6 +35,7 @@ #:use-module (gnu packages check) #:use-module (gnu packages documentation) #:use-module (gnu packages engineering) + #:use-module (gnu packages fltk) #:use-module (gnu packages ghostscript) #:use-module (gnu packages glib) #:use-module (gnu packages gstreamer) @@ -525,3 +526,121 @@ to the fix block above. using GNU Radio and the Qt GUI toolkit.") (home-page "https://gqrx.dk/") (license license:gpl3+))) + +(define-public fldigi + (package + (name "fldigi") + (version "4.1.11") + (source + (origin + (method url-fetch) + (uri (string-append "http://www.w1hkj.com/files/fldigi/fldigi-" + version ".tar.gz")) + (sha256 + (base32 "1y62xn1pim38ibaf2mbl8b7aq20jdaac6lgggb9r402w9bj5b196")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("alsa-lib" ,alsa-lib) + ("fltk" ,fltk) + ("libpng" ,libpng) + ("libsamplerate" ,libsamplerate) + ("libx11" ,libx11) + ("libxext" ,libxext) + ("libxfixes" ,libxfixes) + ("libxft" ,libxft) + ("portaudio" ,portaudio) + ("pulseaudio" ,pulseaudio))) + (synopsis "Software modem for amateur radio use") + (description + "Fldigi is a software modem for amateur radio use. It is a sound card +based program that is used for both transmitting and receiving data by +connecting the microphone and headphone connections of a computer to some radio +hardware.") + (home-page "http://www.w1hkj.com/") + (license license:gpl3+))) + +(define-public flrig + (package + (name "flrig") + (version "1.3.50") + (source + (origin + (method url-fetch) + (uri (string-append "http://www.w1hkj.com/files/flrig/flrig-" + version ".tar.gz")) + (sha256 + (base32 "0fzrknzzi8kmzmrcfpc8rxr7v4a4ny6z6z5q5qwh95sp2kn2qzp9")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("fltk" ,fltk) + ("libx11" ,libx11) + ("libxext" ,libxext) + ("libxfixes" ,libxfixes) + ("libxft" ,libxft))) + (synopsis "Radio transceiver control program") + (description + "Flrig is a transceiver control program for amateur radio use. +It provides computer aided control of various radios using a serial +or USB connection.") + (home-page "http://www.w1hkj.com/") + (license license:gpl3+))) + +(define-public flamp + (package + (name "flamp") + (version "2.2.05") + (source + (origin + (method url-fetch) + (uri (string-append "http://www.w1hkj.com/files/flamp/flamp-" + version ".tar.gz")) + (sha256 + (base32 "19z1kghhdf7bq6hi2j0mzlsn2nhpn3gl1a623x3inmsk80yw3ck4")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("fltk" ,fltk) + ("libx11" ,libx11) + ("libxext" ,libxext) + ("libxfixes" ,libxfixes) + ("libxft" ,libxft))) + (synopsis "Tool for AMP file transfer") + (description + "FLAMP is a program for transfering files by radio waves using AMP +(Amateur Multicast Protocol).") + (home-page "http://www.w1hkj.com/") + (license license:gpl3+))) + +(define-public flwrap + (package + (name "flwrap") + (version "1.3.5") + (source + (origin + (method url-fetch) + (uri (string-append "http://www.w1hkj.com/files/flwrap/flwrap-" + version ".tar.gz")) + (sha256 + (base32 "0qqivqkkravcg7j45740xfky2q3k7czqpkj6y364qff424q2pppg")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config))) + (inputs + `(("fltk" ,fltk) + ("libx11" ,libx11) + ("libxext" ,libxext) + ("libxfixes" ,libxfixes) + ("libxft" ,libxft))) + (synopsis "File encapsulation program") + (description + "Flwrap is a software utility for amateur radio use. Its purpose is to +encapsulate both text and binary files in a way that allows them to be +transmitted over any of several digital modes and verified at the receipt end +for correctness.") + (home-page "http://www.w1hkj.com/") + (license license:gpl3+))) diff --git a/gnu/packages/vim.scm b/gnu/packages/vim.scm index 1d70de2ffa..ff7da7958f 100644 --- a/gnu/packages/vim.scm +++ b/gnu/packages/vim.scm @@ -851,7 +851,7 @@ through its msgpack-rpc API.") (define-public vim-asyncrun (package (name "vim-asyncrun") - (version "2.7.1") + (version "2.7.5") (source (origin (method git-fetch) (uri (git-reference @@ -860,7 +860,7 @@ through its msgpack-rpc API.") (file-name (git-file-name name version)) (sha256 (base32 - "0f7slvz28772qsbrb8xfwrkprfm90wc9i36xhn797lacxcxgwqpw")))) + "02fiqf4rcrxbcgvj02mpd78wkxsrnbi54aciwh9fv5mnz5ka249m")))) (build-system copy-build-system) (arguments '(#:install-plan diff --git a/gnu/packages/xfce.scm b/gnu/packages/xfce.scm index c17cd8ed40..1851a27406 100644 --- a/gnu/packages/xfce.scm +++ b/gnu/packages/xfce.scm @@ -711,15 +711,15 @@ and import the new pictures from your camera.") (define-public xfwm4 (package (name "xfwm4") - (version "4.14.0") + (version "4.14.1") (source (origin (method url-fetch) (uri (string-append "https://archive.xfce.org/src/xfce/" - name "/" (version-major+minor version) "/" - name "-" version ".tar.bz2")) + "xfwm4/" (version-major+minor version) "/" + "xfwm4-" version ".tar.bz2")) (sha256 (base32 - "05dn4a1i0nm6wm3nyj7qli5bvfalxghcl7x543qr5l33vkw2n65l")))) + "0a0la57jh618qfl7czsn7mspcraqczkm1m616j7jwxkhh2hq21qh")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) @@ -741,15 +741,15 @@ on the screen.") (define-public xfdesktop (package (name "xfdesktop") - (version "4.14.1") + (version "4.14.2") (source (origin (method url-fetch) (uri (string-append "https://archive.xfce.org/src/xfce/" - name "/" (version-major+minor version) "/" - name "-" version ".tar.bz2")) + "xfdesktop/" (version-major+minor version) "/" + "xfdesktop-" version ".tar.bz2")) (sha256 (base32 - "10pqxgpj7b57wpcsh2k98sj4aavcgxbs1lc8qsq4mibf4hba01gp")) + "0x1yx9sd5aanrlr1qnbwd2nsmcg09g4132k0kyb7z47a3x3381d3")) (modules '((guix build utils))) (snippet #~(begin @@ -781,6 +781,7 @@ on the screen.") `(("pkg-config" ,pkg-config) ("intltool" ,intltool) + ;; For our own ‘prepare-background-image’ phase. ("inkscape" ,inkscape) ("imagemagick" ,imagemagick))) (inputs @@ -949,15 +950,15 @@ the desktop wallpaper.") (define-public xfce4-taskmanager (package (name "xfce4-taskmanager") - (version "1.2.2") + (version "1.2.3") (source (origin (method url-fetch) (uri (string-append "https://archive.xfce.org/src/apps/" - name "/" (version-major+minor version) "/" - name "-" version ".tar.bz2")) + "xfce4-taskmanager/" (version-major+minor version) "/" + "xfce4-taskmanager-" version ".tar.bz2")) (sha256 (base32 - "04qflazmdrj4ys4r54yg4s5pqcjgk02idrjsls395zd4374636p4")))) + "1i63bnvpjpblnd0d3l1v065x9q1cz74cvlab5hzd0q8zgkd49z6w")))) (build-system gnu-build-system) (native-inputs `(("intltool" ,intltool) diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index 47db1f507f..21a24677c6 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -14,7 +14,7 @@ ;;; Copyright © 2017, 2018, 2019 Marius Bakke <mbakke@fastmail.com> ;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com> ;;; Copyright © 2017, 2020 Arun Isaac <arunisaac@systemreboot.net> -;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net> ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net> @@ -6004,7 +6004,7 @@ to answer a question. Xmessage can also exit after a specified time.") (define-public xterm (package (name "xterm") - (version "351") + (version "353") (source (origin (method url-fetch) (uri (list @@ -6014,7 +6014,7 @@ to answer a question. Xmessage can also exit after a specified time.") "xterm-" version ".tgz"))) (sha256 (base32 - "05kf586my4irrzz2bxgmwjdvynyrg9ybhvfqmx29g70w4888l2kn")))) + "0s5pkfn4r8iy09s1q1y78zhnr9f3sm6wgbqir7azaqggkppd68g5")))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--enable-wide-chars" "--enable-load-vt-fonts" diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 08ab5970dc..a532e884c3 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -61,11 +61,11 @@ #:use-module (srfi srfi-26) #:use-module (ice-9 match) #:use-module (ice-9 format) + #:re-export (user-processes-service-type) ;backwards compatibility #:export (fstab-service-type root-file-system-service file-system-service-type swap-service - user-processes-service-type host-name-service console-keymap-service %default-console-font @@ -187,128 +187,6 @@ ;;; -;;; User processes. -;;; - -(define %do-not-kill-file - ;; Name of the file listing PIDs of processes that must survive when halting - ;; the system. Typical example is user-space file systems. - "/etc/shepherd/do-not-kill") - -(define (user-processes-shepherd-service requirements) - "Return the 'user-processes' Shepherd service with dependencies on -REQUIREMENTS (a list of service names). - -This is a synchronization point used to make sure user processes and daemons -get started only after crucial initial services have been started---file -system mounts, etc. This is similar to the 'sysvinit' target in systemd." - (define grace-delay - ;; Delay after sending SIGTERM and before sending SIGKILL. - 4) - - (list (shepherd-service - (documentation "When stopped, terminate all user processes.") - (provision '(user-processes)) - (requirement requirements) - (start #~(const #t)) - (stop #~(lambda _ - (define (kill-except omit signal) - ;; Kill all the processes with SIGNAL except those listed - ;; in OMIT and the current process. - (let ((omit (cons (getpid) omit))) - (for-each (lambda (pid) - (unless (memv pid omit) - (false-if-exception - (kill pid signal)))) - (processes)))) - - (define omitted-pids - ;; List of PIDs that must not be killed. - (if (file-exists? #$%do-not-kill-file) - (map string->number - (call-with-input-file #$%do-not-kill-file - (compose string-tokenize - (@ (ice-9 rdelim) read-string)))) - '())) - - (define (now) - (car (gettimeofday))) - - (define (sleep* n) - ;; Really sleep N seconds. - ;; Work around <http://bugs.gnu.org/19581>. - (define start (now)) - (let loop ((elapsed 0)) - (when (> n elapsed) - (sleep (- n elapsed)) - (loop (- (now) start))))) - - (define lset= (@ (srfi srfi-1) lset=)) - - (display "sending all processes the TERM signal\n") - - (if (null? omitted-pids) - (begin - ;; Easy: terminate all of them. - (kill -1 SIGTERM) - (sleep* #$grace-delay) - (kill -1 SIGKILL)) - (begin - ;; Kill them all except OMITTED-PIDS. XXX: We would - ;; like to (kill -1 SIGSTOP) to get a fixed list of - ;; processes, like 'killall5' does, but that seems - ;; unreliable. - (kill-except omitted-pids SIGTERM) - (sleep* #$grace-delay) - (kill-except omitted-pids SIGKILL) - (delete-file #$%do-not-kill-file))) - - (let wait () - ;; Reap children, if any, so that we don't end up with - ;; zombies and enter an infinite loop. - (let reap-children () - (define result - (false-if-exception - (waitpid WAIT_ANY (if (null? omitted-pids) - 0 - WNOHANG)))) - - (when (and (pair? result) - (not (zero? (car result)))) - (reap-children))) - - (let ((pids (processes))) - (unless (lset= = pids (cons 1 omitted-pids)) - (format #t "waiting for process termination\ - (processes left: ~s)~%" - pids) - (sleep* 2) - (wait)))) - - (display "all processes have been terminated\n") - #f)) - (respawn? #f)))) - -(define user-processes-service-type - (service-type - (name 'user-processes) - (extensions (list (service-extension shepherd-root-service-type - user-processes-shepherd-service))) - (compose concatenate) - (extend append) - - ;; The value is the list of Shepherd services 'user-processes' depends on. - ;; Extensions can add new services to this list. - (default-value '()) - - (description "The @code{user-processes} service is responsible for -terminating all the processes so that the root file system can be re-mounted -read-only, just before rebooting/halting. Processes still running after a few -seconds after @code{SIGTERM} has been sent are terminated with -@code{SIGKILL}."))) - - -;;; ;;; File systems. ;;; diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm index 1921afce95..59f8b16985 100644 --- a/gnu/services/sddm.scm +++ b/gnu/services/sddm.scm @@ -170,7 +170,7 @@ Relogin=" (if (sddm-configuration-relogin? config) (list (shepherd-service (documentation "SDDM display manager.") (requirement '(user-processes)) - (provision '(display-manager)) + (provision '(xorg-server display-manager)) (start #~(make-forkexec-constructor #$sddm-command)) (stop #~(make-kill-destructor))))) diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 9906ae43c4..e99458da43 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -63,7 +63,9 @@ shepherd-service-lookup-procedure shepherd-service-back-edges - shepherd-service-upgrade)) + shepherd-service-upgrade + + user-processes-service-type)) ;;; Commentary: ;;; @@ -415,4 +417,126 @@ need to be restarted to complete their upgrade." (values to-unload to-restart)) + +;;; +;;; User processes. +;;; + +(define %do-not-kill-file + ;; Name of the file listing PIDs of processes that must survive when halting + ;; the system. Typical example is user-space file systems. + "/etc/shepherd/do-not-kill") + +(define (user-processes-shepherd-service requirements) + "Return the 'user-processes' Shepherd service with dependencies on +REQUIREMENTS (a list of service names). + +This is a synchronization point used to make sure user processes and daemons +get started only after crucial initial services have been started---file +system mounts, etc. This is similar to the 'sysvinit' target in systemd." + (define grace-delay + ;; Delay after sending SIGTERM and before sending SIGKILL. + 4) + + (list (shepherd-service + (documentation "When stopped, terminate all user processes.") + (provision '(user-processes)) + (requirement requirements) + (start #~(const #t)) + (stop #~(lambda _ + (define (kill-except omit signal) + ;; Kill all the processes with SIGNAL except those listed + ;; in OMIT and the current process. + (let ((omit (cons (getpid) omit))) + (for-each (lambda (pid) + (unless (memv pid omit) + (false-if-exception + (kill pid signal)))) + (processes)))) + + (define omitted-pids + ;; List of PIDs that must not be killed. + (if (file-exists? #$%do-not-kill-file) + (map string->number + (call-with-input-file #$%do-not-kill-file + (compose string-tokenize + (@ (ice-9 rdelim) read-string)))) + '())) + + (define (now) + (car (gettimeofday))) + + (define (sleep* n) + ;; Really sleep N seconds. + ;; Work around <http://bugs.gnu.org/19581>. + (define start (now)) + (let loop ((elapsed 0)) + (when (> n elapsed) + (sleep (- n elapsed)) + (loop (- (now) start))))) + + (define lset= (@ (srfi srfi-1) lset=)) + + (display "sending all processes the TERM signal\n") + + (if (null? omitted-pids) + (begin + ;; Easy: terminate all of them. + (kill -1 SIGTERM) + (sleep* #$grace-delay) + (kill -1 SIGKILL)) + (begin + ;; Kill them all except OMITTED-PIDS. XXX: We would + ;; like to (kill -1 SIGSTOP) to get a fixed list of + ;; processes, like 'killall5' does, but that seems + ;; unreliable. + (kill-except omitted-pids SIGTERM) + (sleep* #$grace-delay) + (kill-except omitted-pids SIGKILL) + (delete-file #$%do-not-kill-file))) + + (let wait () + ;; Reap children, if any, so that we don't end up with + ;; zombies and enter an infinite loop. + (let reap-children () + (define result + (false-if-exception + (waitpid WAIT_ANY (if (null? omitted-pids) + 0 + WNOHANG)))) + + (when (and (pair? result) + (not (zero? (car result)))) + (reap-children))) + + (let ((pids (processes))) + (unless (lset= = pids (cons 1 omitted-pids)) + (format #t "waiting for process termination\ + (processes left: ~s)~%" + pids) + (sleep* 2) + (wait)))) + + (display "all processes have been terminated\n") + #f)) + (respawn? #f)))) + +(define user-processes-service-type + (service-type + (name 'user-processes) + (extensions (list (service-extension shepherd-root-service-type + user-processes-shepherd-service))) + (compose concatenate) + (extend append) + + ;; The value is the list of Shepherd services 'user-processes' depends on. + ;; Extensions can add new services to this list. + (default-value '()) + + (description "The @code{user-processes} service is responsible for +terminating all the processes so that the root file system can be re-mounted +read-only, just before rebooting/halting. Processes still running after a few +seconds after @code{SIGTERM} has been sent are terminated with +@code{SIGKILL}."))) + ;;; shepherd.scm ends here diff --git a/gnu/system/shadow.scm b/gnu/system/shadow.scm index 42480e823c..a6f1d806cf 100644 --- a/gnu/system/shadow.scm +++ b/gnu/system/shadow.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il> @@ -314,9 +314,7 @@ accounts among ACCOUNTS+GROUPS." ;; ;; XXX: We arrange for this service to stop right after it's done its job so ;; that 'guix system reconfigure' knows that it can reload it fearlessly - ;; (and thus create new home directories). The cost of this hack is that - ;; there's a small window during which first-time logins could happen before - ;; the home directory has been created. + ;; (and thus create new home directories). (list (shepherd-service (requirement '(file-systems)) (provision '(user-homes)) @@ -374,6 +372,11 @@ the /etc/skel directory for those." account-activation) (service-extension shepherd-root-service-type account-shepherd-service) + ;; Have 'user-processes' depend on 'user-homes' so that + ;; daemons start after their home directory has been + ;; created. + (service-extension user-processes-service-type + (const '(user-homes))) (service-extension etc-service-type etc-files))))) diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index 0938ec0ff1..7ef03417c1 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -22,7 +22,6 @@ (define-module (guix build syscalls) #:use-module (system foreign) - #:use-module (system base target) ;for cross-compilation support #:use-module (rnrs bytevectors) #:autoload (ice-9 binary-ports) (get-bytevector-n) #:use-module (srfi srfi-1) @@ -892,36 +891,6 @@ system to PUT-OLD." (namelen uint8) (name uint8)) -(define-syntax define-generic-identifier - (syntax-rules (gnu/linux gnu/hurd =>) - "Define a generic identifier that adjust to the current GNU variant." - ((_ id (gnu/linux => linux) (gnu/hurd => hurd)) - (define-syntax id - (lambda (s) - (syntax-case s () - ((_ args (... ...)) - (if (string-contains (or (target-type) %host-type) - "linux") - #'(linux args (... ...)) - #'(hurd args (... ...)))) - (_ - (if (string-contains (or (target-type) %host-type) - "linux") - #'linux - #'hurd)))))))) - -(define-generic-identifier read-dirent-header - (gnu/linux => read-dirent-header/linux) - (gnu/hurd => read-dirent-header/hurd)) - -(define-generic-identifier %struct-dirent-header - (gnu/linux => %struct-dirent-header/linux) - (gnu/hurd => %struct-dirent-header/hurd)) - -(define-generic-identifier sizeof-dirent-header - (gnu/linux => sizeof-dirent-header/linux) - (gnu/hurd => sizeof-dirent-header/hurd)) - ;; Constants for the 'type' field, from <dirent.h>. (define DT_UNKNOWN 0) (define DT_FIFO 1) @@ -960,19 +929,30 @@ system to PUT-OLD." "closedir: ~A" (list (strerror err)) (list err))))))) -(define readdir* +(define (readdir-procedure name-field-offset sizeof-dirent-header + read-dirent-header) (let ((proc (syscall->procedure '* "readdir64" '(*)))) (lambda* (directory #:optional (pointer->string pointer->string/utf-8)) (let ((ptr (proc directory))) (and (not (null-pointer? ptr)) (cons (pointer->string - (make-pointer (+ (pointer-address ptr) - (c-struct-field-offset - %struct-dirent-header name))) + (make-pointer (+ (pointer-address ptr) name-field-offset)) -1) (read-dirent-header (pointer->bytevector ptr sizeof-dirent-header)))))))) +(define readdir* + ;; Decide at run time which one must be used. + (if (string-suffix? "linux-gnu" %host-type) + (readdir-procedure (c-struct-field-offset %struct-dirent-header/linux + name) + sizeof-dirent-header/linux + read-dirent-header/linux) + (readdir-procedure (c-struct-field-offset %struct-dirent-header/hurd + name) + sizeof-dirent-header/hurd + read-dirent-header/hurd))) + (define* (scandir* name #:optional (select? (const #t)) (entry<? (lambda (entry1 entry2) diff --git a/guix/gnupg.scm b/guix/gnupg.scm index bf0283f8fe..5fae24b325 100644 --- a/guix/gnupg.scm +++ b/guix/gnupg.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2010, 2011, 2013, 2014, 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org> +;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr> ;;; ;;; This file is part of GNU Guix. ;;; @@ -71,6 +72,8 @@ "^\\[GNUPG:\\] VALIDSIG ([[:xdigit:]]+) ([[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}) ([[:digit:]]+) .*$")) (define expkeysig-rx ; good signature, but expired key (make-regexp "^\\[GNUPG:\\] EXPKEYSIG ([[:xdigit:]]+) (.*)$")) +(define revkeysig-rx ; good signature, but revoked key + (make-regexp "^\\[GNUPG:\\] REVKEYSIG ([[:xdigit:]]+) (.*)$")) (define errsig-rx ;; Note: The fingeprint part (the last element of the line) appeared in ;; GnuPG 2.2.7 according to 'doc/DETAILS', and it may be missing. @@ -114,6 +117,11 @@ revoked. Return a status s-exp if GnuPG failed." (lambda (match) `(expired-key-signature ,(match:substring match 1) ; fingerprint ,(match:substring match 2)))) ; user name + ((regexp-exec revkeysig-rx line) + => + (lambda (match) + `(revoked-key-signature ,(match:substring match 1) ; fingerprint + ,(match:substring match 2)))) ; user name ((regexp-exec errsig-rx line) => (lambda (match) @@ -157,7 +165,8 @@ a fingerprint/user pair; return #f otherwise." (match (assq 'valid-signature status) (('valid-signature fingerprint date timestamp) (match (or (assq 'good-signature status) - (assq 'expired-key-signature status)) + (assq 'expired-key-signature status) + (assq 'revoked-key-signature status)) ((_ key-id user) (cons fingerprint user)) (_ #f))) (_ diff --git a/guix/import/json.scm b/guix/import/json.scm index 8900724dcd..0c98bb25b8 100644 --- a/guix/import/json.scm +++ b/guix/import/json.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2014 David Thompson <davet@gnu.org> ;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org> ;;; Copyright © 2018, 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,8 +23,16 @@ #:use-module (json) #:use-module (guix http-client) #:use-module (guix import utils) + #:use-module (guix import print) + #:use-module (ice-9 match) + #:use-module (ice-9 rdelim) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-2) + #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) - #:export (json-fetch)) + #:export (json-fetch + json->code + json->scheme-file)) (define* (json-fetch url ;; Note: many websites returns 403 if we omit a @@ -42,3 +51,53 @@ the query." (result (json->scm port))) (close-port port) result))) + +(define (json->code file-name) + "Read FILE-NAME containing one ore more JSON package definitions and return +a list of S-expressions, or return #F when the JSON is invalid." + (catch 'json-invalid + (lambda () + (let ((json (json-string->scm + (with-input-from-file file-name read-string)))) + (match json + (#(packages ...) + ;; To allow definitions to refer to one another, collect references + ;; to local definitions and tell alist->package to ignore them. + (second + (memq #:result + (fold + (lambda (pkg names+result) + (match names+result + ((#:names names #:result result) + (list #:names + (cons (assoc-ref pkg "name") names) + #:result + (append result + (list + (package->code (alist->package pkg names)) + (string->symbol (assoc-ref pkg "name")))))))) + (list #:names '() + #:result '()) + packages)))) + (package + (list (package->code (alist->package json)) + (string->symbol (assoc-ref json "name"))))))) + (const #f))) + +(define (json->scheme-file file) + "Convert the FILE containing a JSON package definition to a Scheme +representation and return the new file name (or #F on error)." + (and-let* ((sexprs (json->code file)) + (file* (let* ((tempdir (or (getenv "TMPDIR") "/tmp")) + (template (string-append tempdir "/guix-XXXXXX")) + (port (mkstemp! template))) + (close-port port) + template))) + (call-with-output-file file* + (lambda (port) + (write '(use-modules (gnu) + (guix) + ((guix licenses) #:prefix license:)) + port) + (for-each (cut write <> port) sexprs))) + file*)) diff --git a/guix/import/print.scm b/guix/import/print.scm index 4c2a91fa4f..11cc218285 100644 --- a/guix/import/print.scm +++ b/guix/import/print.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2017, 2020 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -57,7 +57,7 @@ when evaluated." ;; Print either license variable name or the code for a license object (define (license->code lic) (let ((var (variable-name lic '(guix licenses)))) - (or var + (or (symbol-append 'license: var) `(license (name ,(license-name lic)) (uri ,(license-uri lic)) @@ -79,7 +79,9 @@ when evaluated." (patches (origin-patches source))) `(origin (method ,(procedure-name method)) - (uri (string-append ,@(factorize-uri uri version))) + (uri (string-append ,@(match (factorize-uri uri version) + ((? string? uri) (list uri)) + (factorized factorized)))) (sha256 (base32 ,(format #f "~a" (bytevector->nix-base32-string sha256)))) @@ -92,6 +94,8 @@ when evaluated." (define (package-lists->code lsts) (list 'quasiquote (map (match-lambda + ((? symbol? s) + (list (symbol->string s) (list 'unquote s))) ((label pkg . out) (let ((mod (package-module-name pkg))) (cons* label @@ -121,45 +125,47 @@ when evaluated." (home-page (package-home-page package)) (supported-systems (package-supported-systems package)) (properties (package-properties package))) - `(package - (name ,name) - (version ,version) - (source ,(source->code source version)) - ,@(match properties - (() '()) - (_ `((properties ,properties)))) - ,@(if replacement - `((replacement ,replacement)) - '()) - (build-system ,(symbol-append (build-system-name build-system) - '-build-system)) - ,@(match arguments - (() '()) - (args `((arguments ,(list 'quasiquote args))))) - ,@(match outputs - (("out") '()) - (outs `((outputs (list ,@outs))))) - ,@(match native-inputs - (() '()) - (pkgs `((native-inputs ,(package-lists->code pkgs))))) - ,@(match inputs - (() '()) - (pkgs `((inputs ,(package-lists->code pkgs))))) - ,@(match propagated-inputs - (() '()) - (pkgs `((propagated-inputs ,(package-lists->code pkgs))))) - ,@(if (lset= string=? supported-systems %supported-systems) - '() - `((supported-systems (list ,@supported-systems)))) - ,@(match (map search-path-specification->code native-search-paths) - (() '()) - (paths `((native-search-paths (list ,@paths))))) - ,@(match (map search-path-specification->code search-paths) - (() '()) - (paths `((search-paths (list ,@paths))))) - (home-page ,home-page) - (synopsis ,synopsis) - (description ,description) - (license ,(if (list? license) - `(list ,@(map license->code license)) - (license->code license)))))) + `(define-public ,(string->symbol name) + (package + (name ,name) + (version ,version) + (source ,(source->code source version)) + ,@(match properties + (() '()) + (_ `((properties ,properties)))) + ,@(if replacement + `((replacement ,replacement)) + '()) + (build-system (@ (guix build-system ,(build-system-name build-system)) + ,(symbol-append (build-system-name build-system) + '-build-system))) + ,@(match arguments + (() '()) + (args `((arguments ,(list 'quasiquote args))))) + ,@(match outputs + (("out") '()) + (outs `((outputs (list ,@outs))))) + ,@(match native-inputs + (() '()) + (pkgs `((native-inputs ,(package-lists->code pkgs))))) + ,@(match inputs + (() '()) + (pkgs `((inputs ,(package-lists->code pkgs))))) + ,@(match propagated-inputs + (() '()) + (pkgs `((propagated-inputs ,(package-lists->code pkgs))))) + ,@(if (lset= string=? supported-systems %supported-systems) + '() + `((supported-systems (list ,@supported-systems)))) + ,@(match (map search-path-specification->code native-search-paths) + (() '()) + (paths `((native-search-paths (list ,@paths))))) + ,@(match (map search-path-specification->code search-paths) + (() '()) + (paths `((search-paths (list ,@paths))))) + (home-page ,home-page) + (synopsis ,synopsis) + (description ,description) + (license ,(if (list? license) + `(list ,@(map license->code license)) + (license->code license))))))) diff --git a/guix/import/utils.scm b/guix/import/utils.scm index 94c8cb040b..3809c3d074 100644 --- a/guix/import/utils.scm +++ b/guix/import/utils.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2012, 2013, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2016 Jelle Licht <jlicht@fsfe.org> ;;; Copyright © 2016 David Craven <david@craven.ch> -;;; Copyright © 2017, 2019 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2017, 2019, 2020 Ricardo Wurmus <rekado@elephly.net> ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2019 Robert Vollmert <rob@vllmrt.net> ;;; @@ -310,7 +310,23 @@ the expected fields of an <origin> object." (uri (assoc-ref orig "uri")) (sha256 sha)))))) -(define (alist->package meta) +(define* (alist->package meta #:optional (known-inputs '())) + "Return a package value generated from the alist META. If the list of +strings KNOWN-INPUTS is provided, do not treat the mentioned inputs as +specifications to look up and replace them with plain symbols instead." + (define (process-inputs which) + (let-values (((regular known) + (lset-diff+intersection + string=? + (vector->list (or (assoc-ref meta which) #())) + known-inputs))) + (append (specs->package-lists regular) + (map string->symbol known)))) + (define (process-arguments arguments) + (append-map (match-lambda + ((key . value) + (list (symbol->keyword (string->symbol key)) value))) + arguments)) (package (name (assoc-ref meta "name")) (version (assoc-ref meta "version")) @@ -318,15 +334,13 @@ the expected fields of an <origin> object." (build-system (lookup-build-system-by-name (string->symbol (assoc-ref meta "build-system")))) - (native-inputs - (specs->package-lists - (vector->list (or (assoc-ref meta "native-inputs") '#())))) - (inputs - (specs->package-lists - (vector->list (or (assoc-ref meta "inputs") '#())))) - (propagated-inputs - (specs->package-lists - (vector->list (or (assoc-ref meta "propagated-inputs") '#())))) + (arguments + (or (and=> (assoc-ref meta "arguments") + process-arguments) + '())) + (native-inputs (process-inputs "native-inputs")) + (inputs (process-inputs "inputs")) + (propagated-inputs (process-inputs "propagated-inputs")) (home-page (assoc-ref meta "home-page")) (synopsis diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm index 79bd84a1a0..8ff2fd1910 100644 --- a/guix/scripts/build.scm +++ b/guix/scripts/build.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2013 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com> +;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -21,6 +22,7 @@ (define-module (guix scripts build) #:use-module (guix ui) #:use-module (guix scripts) + #:use-module (guix import json) #:use-module (guix store) #:use-module (guix derivations) #:use-module (guix packages) @@ -834,7 +836,10 @@ build---packages, gexps, derivations, and so on." (else (list (specification->package spec))))) (('file . file) - (ensure-list (load* file (make-user-module '())))) + (let ((file (or (and (string-suffix? ".json" file) + (json->scheme-file file)) + file))) + (ensure-list (load* file (make-user-module '()))))) (('manifest . manifest) (map manifest-entry-item (manifest-entries diff --git a/guix/scripts/import/json.scm b/guix/scripts/import/json.scm index c9daf65479..778e5f4bc5 100644 --- a/guix/scripts/import/json.scm +++ b/guix/scripts/import/json.scm @@ -23,7 +23,7 @@ #:use-module (guix utils) #:use-module (guix scripts) #:use-module (guix import utils) - #:use-module (guix import print) + #:use-module (guix import json) #:use-module (guix scripts import) #:use-module (guix packages) #:use-module (srfi srfi-1) @@ -88,14 +88,8 @@ Import and convert the JSON package definition in PACKAGE-FILE.\n")) (reverse opts)))) (match args ((file-name) - (catch 'json-invalid - (lambda () - (let ((json (json-string->scm - (with-input-from-file file-name read-string)))) - ;; TODO: also print define-module boilerplate - (package->code (alist->package json)))) - (lambda _ - (leave (G_ "invalid JSON in file '~a'~%") file-name)))) + (or (json->code file-name) + (leave (G_ "invalid JSON in file '~a'~%") file-name))) (() (leave (G_ "too few arguments~%"))) ((many ...) diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index b2b734aadd..43a3bb2825 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -7,6 +7,7 @@ ;;; Copyright © 2016 Benz Schenk <benz.schenk@uzh.ch> ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2019 Tobias Geerinckx-Rice <me@tobias.gr> +;;; Copyright © 2020 Ricardo Wurmus <rekado@elephly.net> ;;; ;;; This file is part of GNU Guix. ;;; @@ -33,6 +34,7 @@ #:use-module (guix packages) #:use-module (guix profiles) #:use-module (guix search-paths) + #:use-module (guix import json) #:use-module (guix monads) #:use-module (guix utils) #:use-module (guix config) @@ -416,7 +418,10 @@ Install, remove, or upgrade packages in a single transaction.\n")) (option '(#\f "install-from-file") #t #f (lambda (opt name arg result arg-handler) (values (alist-cons 'install - (load* arg (make-user-module '())) + (let ((file (or (and (string-suffix? ".json" arg) + (json->scheme-file arg)) + arg))) + (load* file (make-user-module '()))) result) #f))) (option '(#\r "remove") #f #t diff --git a/guix/status.scm b/guix/status.scm index 4b2edc2f3c..f40d5d59b9 100644 --- a/guix/status.scm +++ b/guix/status.scm @@ -472,8 +472,8 @@ addition to build events." (let ((count (match (assq-ref properties 'graft) (#f 0) (lst (or (assq-ref lst 'count) 0))))) - (format port (info (N_ "applying ~a graft for ~a..." - "applying ~a grafts for ~a..." + (format port (info (N_ "applying ~a graft for ~a ..." + "applying ~a grafts for ~a ..." count)) count drv))) ('profile @@ -525,7 +525,7 @@ addition to build events." (newline port))) (('download-started item uri _ ...) (erase-current-line*) - (format port (info (G_ "downloading from ~a...")) uri) + (format port (info (G_ "downloading from ~a ...")) uri) (newline port)) (('download-progress item uri (= string->number size) diff --git a/guix/tests/git.scm b/guix/tests/git.scm index 21573ac14e..566660e85e 100644 --- a/guix/tests/git.scm +++ b/guix/tests/git.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,6 +30,24 @@ (define git-command (make-parameter "git")) +(define (call-with-environment-variables variables thunk) + "Call THUNK with the environment VARIABLES set." + (let ((environment (environ))) + (dynamic-wind + (lambda () + (for-each (match-lambda + ((variable value) + (setenv variable value))) + variables)) + thunk + (lambda () + (environ environment))))) + +(define-syntax-rule (with-environment-variables variables exp ...) + "Evaluate EXP with the given environment VARIABLES set." + (call-with-environment-variables variables + (lambda () exp ...))) + (define (populate-git-repository directory directives) "Initialize a new Git checkout and repository in DIRECTORY and apply DIRECTIVES. Each element of DIRECTIVES is an sexp like: @@ -41,8 +59,21 @@ Return DIRECTORY on success." ;; Note: As of version 0.2.0, Guile-Git lacks the necessary bindings to do ;; all this, so resort to the "git" command. (define (git command . args) - (apply invoke (git-command) "-C" directory - command args)) + ;; Make sure Git doesn't rely on the user's config. + (call-with-temporary-directory + (lambda (home) + (call-with-output-file (string-append home "/.gitconfig") + (lambda (port) + (display "[user] + email = charlie@example.org\n name = Charlie Guix\n" + port))) + + (with-environment-variables + `(("GIT_CONFIG_NOSYSTEM" "1") + ("GIT_ATTR_NOSYSTEM" "1") + ("HOME" ,home)) + (apply invoke (git-command) "-C" directory + command args))))) (mkdir-p directory) (git "init") diff --git a/guix/ui.scm b/guix/ui.scm index 1ccc80a000..ea5f460865 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -234,8 +234,8 @@ information, or #f if it could not be found." ;; Give 'load' an absolute file name so that it doesn't try to ;; search for FILE in %LOAD-PATH. Note: use 'load', not - ;; 'primitive-load', so that FILE is compiled, which then allows us - ;; to provide better error reporting with source line numbers. + ;; 'primitive-load', so that FILE is compiled, which then allows + ;; us to provide better error reporting with source line numbers. (load (canonicalize-path file))) (const #f)))))) (lambda _ @@ -796,7 +796,7 @@ directories:~{ ~a~}~%") (apply format #f format-string format-args)))))) (define-syntax-rule (leave-on-EPIPE exp ...) - "Run EXP... in a context when EPIPE errors are caught and lead to 'exit' + "Run EXP... in a context where EPIPE errors are caught and lead to 'exit' with successful exit code. This is useful when writing to the standard output may lead to EPIPE, because the standard output is piped through 'head' or similar." @@ -925,7 +925,7 @@ download." drv)) (define substitutable-info - ;; Call 'substitutation-oracle' upfront so we don't end up launching the + ;; Call 'substitution-oracle' upfront so we don't end up launching the ;; substituter many times. This makes a big difference, especially when ;; DRV is a long list as is the case with 'guix environment'. (if use-substitutes? @@ -1251,7 +1251,7 @@ separator between subsequent columns." (define* (indented-string str indent #:key (initial-indent? #t)) - "Return STR with each newline preceded by IDENT spaces. When + "Return STR with each newline preceded by INDENT spaces. When INITIAL-INDENT? is true, the first line is also indented." (define indent-string (make-list indent #\space)) @@ -1534,7 +1534,7 @@ score, the more relevant OBJ is to REGEXPS." (,(lambda (package) (filter (lambda (output) (not (member output - ;; Some common outpus shared by many packages. + ;; Some common outputs shared by many packages. '("out" "doc" "debug" "lib" "include" "bin")))) (package-outputs package))) . 1) @@ -1942,7 +1942,7 @@ found." (define (run-guix . args) "Run the 'guix' command defined by command line ARGS. Unlike 'guix-main', this procedure assumes that locale, i18n support, -and signal handling has already been set up." +and signal handling have already been set up." (define option? (cut string-prefix? "-" <>)) ;; The default %LOAD-EXTENSIONS includes the empty string, which doubles the |